hanam1210
-
Số lượng nội dung
60 -
Đã tham gia
-
Lần ghé thăm cuối
Bài đăng được đăng bởi hanam1210
-
-
hề hề. cảm ơn bác.BÁc ko đọc kỹ lại mắng oan em rùi, đây nè, nhân chứng vật chứng vẫn còn nhé :
trong hình vẽ, phần mở ngoặc e có ghi là: 'có chức năng lưu lại giá trị cũ"
hanam1210, on 06 October 2011 - 03:09 PM, said:Em hay phải vẽ các đường bóng, tức là các đường thể hiện dốc trên mặt bằng ... hoặc thể hiện mặt con, mặt vát trên các hình chiếu đứng... Phải vẽ bằng thủ công rất mất thời gian. VẬy mong các anh chị trên diễn đàn viết giúp em caí lisp để vẽ các đường tô bóng để tất cả diễn đàn cùng sử dụng được không ạ ? Yêu cầu của em được minh họa rất cụ thể trong file ảnh em gửi kèm ạ. Chú ý rằng các đường bóng đó được đặt trong 1 layer riêng, và nó có màu 8.
http://www.mediafire...t0isfet&thumb=4"
Nhưng vấn đề lớn nhất không phải ở mấy vấn đề râu ria kia. Bác chạy lại lisp trong trường hợp 1 đường biên là line, 1 đường là polyline ( có bao gồm cả arc) tạo với nhau 1 góc 45 độ chẳng hạn. lisp chạy lỗi, ko fix kín 2 biên mà đơn thuần chỉ copy đường A ra => ko đạt yêu cầu. bác kiểm tra giúp em với . hic
-
hic, em xin lỗi, hihi.Em nhầm người. Bác cho e xin lỗi nhé. hihi. Em rất cảm ơn bác phamthanhbinh đã giúp đỡ, nhưng hiện tại còn một số vấn đề đó. bác hoàn thiện giúp em nhé !
Thứ 1 : các giá trị nhập chưa nhớ được giá trị đã nhập lần trước như yêu cầu
Thứ 2: Đường bóng chưa nằm trong một lớp riêng như yêu cầu
thứ 3: khi chạy lisp với đường biên 1 là line, biên 2 là Pline ( bao gồm line và arc chẳng hạn ) thì
đường bóng chưa tự động thay đổi độ dài để fix kín trong phạm vi 2 biên
hoặc là nhiều khi chạy với biên bất kỳ thì đường bóng cũng chưa fix kín trong phạm vi 2 biên ( tức là độ dài đường bóng sẽ phải giao với 2 biên )
anh kiểm tra và hoàn thiện giúp em nhé. Cảm ơn anh nhìu nhìu !
-
.......................////
e thay lisp nay hay. Nhung no chi ve khi co 2 culve song song nhau , con 1 duong thang va 1 duong cheo ko ve vuong goc duoc
anh KETXU co the hieu chinh them chut nua la ok
anh KETXU xem lại giúp em nhé, có một số vấn đề còn tồn tại như sau:
Thứ 1 : các giá trị nhập chưa nhớ được giá trị đã nhập lần trước như yêu cầu
Thứ 2: Đường bóng chưa nằm trong một lớp riêng như yêu cầu
thứ 3: khi chạy lisp với đường biên 1 là line, biên 2 là Pline ( bao gồm line và arc chẳng hạn ) thì
đường bóng chưa tự động thay đổi độ dài để fix kín trong phạm vi 2 biên
hoặc là nhiều khi chạy với biên bất kỳ thì đường bóng cũng chưa fix kín trong phạm vi 2 biên ( tức là độ dài đường bóng sẽ phải giao với 2 biên )
anh kiểm tra và hoàn thiện giúp em nhé. Cảm ơn anh nhìu nhìu !
-
Hề hề hề, Thật ra bạn hanam2010 nên lưu ý các vấn đề mà mọi người đã thắc mắc và giải đáp chính xác để mọi người có thể giúp bạn được như ý. Bạn có thể nêu yêu cầu chứ không nên chỉ định cách làm, bởi vì tư duy làm lisp của mỗi người có khác nhau, nhất là chưa chắc gì cái hướng nghĩ của bạn đã phù hợp với cái yêu cầu của chính bạn. Tỷ như cái góp ý của bác Thiep là khá sát đó nhưng bạn chưa có giải pháp xử lý. Hoặc giả nếu các đường kẻ bóng này lại không song song với nhau thì sao, vì như bạn đã hiểu, việc kẻ bóng chỉ có tác dụng cho dễ hình dung vật thể chứ hoàn toàn chả có ý nghĩa gì về mặt kỹ thuật cả. Do vậy hoàn toàn có thể sử dụng cách kẻ bóng mà các đường kẻ không song song với nhau, miễn sao cho việc hình dung sản phẩm dễ dàng hơn mà thôi . Ví như khi bạn kẻ bóng một mặt cầu mà dùng toàn là đường song song như bạn nói thì có nhẽ sẽ khó hình dung hơn nhiều đấy. Về quy luật kẻ bóng: Bạn mới chỉ đưa ra 1 quy luật là tăng dần hay giảm dần, Nếu phải kết hợp thì sẽ ra sao nhỉ???? Theo thiển ý của mình thì nếu chỉ với các đường kẻ bóng song song như bạn mô tả thì có lẽ phương án xử lý của bác Thiep sẽ tốt hơn là của bạn. Mong bạn hãy suy xét kỹ hơn để mọi người khỏi phải làm đi làm lại. Hề hề hề,..hềhề. Cái này để các anh cao siêu nghĩ kế, e chỉ đưa được yêu cầu thế, còn lời giải thì thuộc về lisp manager rùi, hí hí. đúng là có nhiều trường hợp các đường bóng sẽ ko song song với nhau. nhưng mà lập trình để làm cho lisp hiểu đúng và tự động vẽ ra sao cho đúng thì quả thật là khó. nên ngu kế của em là dùng trong trường hợp nó song song với nhau, khi nó ko song song thì ta kết hợp thủ công ( nói thật là đã đi nhờ mượn thì chỉ muốn nhờ mượn ít ít thui, chứ nhờ mượn mà còn bắt bẻ này nọ thì e ko dám, thấy nó ko thỏa mái trong lòng ) hí hí. Yêu cầu của e là vậy rùi, chắc bi h cả nhà đã hiểu vấn đề. thanks các bác đã quan tâm. Tại e làm ở cty này họ bắt bẻ form của họ quá, nên mình pải làm theo, pải thể hiện theo họ nên pải kẻ bóng nhìu. hí hí. hôm trước bác KETXU viết cho cái lisp kẻ taluy hướng về 1 điểm. Sướng hết cả người. hí hí ! thanks diễn đàn nhìu nhìu. có j e sẽ vote cho diễn đàn.
-
Mình đưa ra 1 ví dụ để bạn thấy việc viết lisp không đơn giản, và nếu người yêu cầu không biết mình cần gì, sẽ không bao giờ có đáp án, hoặc chí ít cũng không được như ý
(defun c:tbkd(/ eLine curve1 curve2 i j len1 len2 tmp) (vl-load-com) (or #dist (setq #dist 10)) ; 10 = Khoang cach mac dinh (setq #dist (cond ((getdist (strcat "\nKhoang cach bat dau <" (vl-princ-to-string #dist) " > :")))(#dist))) (or #inc (setq #inc 1.2)) ; (setq #inc (cond ((getdist (strcat "\nGia so <" (vl-princ-to-string #inc) " > :")))(#inc))) (defun eLine (p1 p2 / p2 col)(entmake (list (cons 0 "LINE")(cons 10 p1) (cons 11 p2)(cons 62 8) (cons 8 "0")))) ;;Doan duoi nay khong can de y (If (and (setq curve1 (car(entsel "\nPath curve 1 :"))) (setq curve2 (car(entsel "\nPath curve 2 :"))) (wcmatch (cdadr (entget curve1)) "*LINE,ARC") (wcmatch (cdadr (entget curve2)) "*LINE,ARC") (eLine (vlax-curve-getStartPoint curve1) (vlax-curve-getStartPoint curve2)) (setq tmp 0 i 0 len1 (vlax-curve-getDistAtParam curve1 (vlax-curve-getEndParam curve1)) len2 (vlax-curve-getDistAtParam curve2 (vlax-curve-getEndParam curve2))) ) (while (<= (setq tmp (+ (* #dist (expt #inc (setq i (1+ i))))tmp)) len1) (eLine (vlax-curve-getPointAtDist curve1 tmp) (vlax-curve-getPointAtDist curve2 tmp)) ) ) )
Vâng, cảm ơn bác KETXU. Lisp có chạy nhưng có vấn đề thế này, chắc do bác KETXU chưa đọc kỹ yêu cầu của em. Đó là khi chạy lisp cho phép ta pick điểm M và N bởi vì từ M đến N. Khoảng cách ban đầu là khoảng cách tại điểm M, Sở dĩ phải sinh ra điểm M và N đó bởi vì từ M đến N sẽ xảy ra 2 trường hợp, trường hợp 1 là đường bóng mau dần với gia số <1, trường hợp 2 là đường bóng thưa dần với gia số >1. Hiện tại lisp tự động vẽ ra các đường bóng. Chưa đáp ứng được là đường bóng chạy từ M đến N mau hay thưa đi. và cái điểm M và N đó dùng để giới hạn khoảng kẻ đường bóng, vì các đường nét trên bình đồ thường là 1 đường liền, nếu ta không giới hạn như vậy thì lại phải trim các đường biên. Và 1 vấn đề nữa là lisp tự động chạy chứ ko cho phép chọn đường A trong yêu cầu, vì có nhiều khi ta muốn kẻ đường bóng theo một phương ta chọn trước chứ ko phải là nhất nhất lúc nào cũng theo một phương có sẵn. Tóm lại, lisp cần phải chỉnh sửa vấn đề sau:
1. Cho phép pick điểm Start (M), và end (N) để giới hạn phạm vi kể đường bóng và biết được từ M>N đường bóng sẽ mau hay thưa đi
2.Bổ sung chọn đường A ( Trong yêu cầu), đường bóng sẽ song song với đường A có sẵn, Đường A là Line, Pline
Hiện tại khi lisp chạy với 2 đường biên không song song nhau thì các đường bóng không song song với nhau mà lại cắt nhau. như thế là sai
Mong bác KETXU hoàn thiện giúp em với ạ !
-
Chào hanam, theo mình nghĩ, các đường bóng này có các khoảng cách giản dần theo quy luật hình cos, cứ tưởng tượng nó giống như có một hình trụ tròn xoay có hai đầu là 2 hình gì đó, trên thân trụ có kẻ n đường đều nhau, bây giờ ta chiếu hình trụ và các đường kẻ này xuống hình chiếu bằng. Như vậy bài đặt ra chỉ có: chọn đường "dao cắt" thứ 1, chọn đường "dao cát thứ 2, enter số đường kẻ "n", Còn nếu đưa thông số "a", đường bóng cuối cùng tạo ra sẽ không còn trùng với đường thẳng nối 2 điểm cuối của 2 biên nữa?
vâng. Nói chung cũng chỉ cần tương đối thôi ạ ? Nhưng vấn đề phải đưa a vào bởi vì tùy thuộc mỗi bản vẽ mỗi khác và các đường bóng xảy ra 2 trường hợp là hệ số k>1 và k< 1.
-
Chào Hanam1210, các đường bóng phải song song với nhau, như vậy đường thẳng nối 2 điểm đầu và đường thẳng nối 2 điểm cuối của 2 biên phải song song nhau phải không? Còn thông số a để làm gì vậy?thông số a là khoảng cách ban đầu của 2 đường bóng, đường biên đóng vai trò như 2 con dao cắt, đường bóng nằm trọn trong 2 biên đó.
-
Bạn định nghĩa như thế nào là thể hiện rất rõ ? Quy luật tăng theo người viết thì khoảng đầu tiên bằng bao nhiêu ? Quy luật tăng cấp số cộng hay cấp số nhân hay lũy thừa? Người viết lisp tự định rồi bạn không thấy hợp thì lại viết lại à ? Mình cũng là dẫn vẽ CAD mà có bao giờ phải làm thế đâu :o
Quy luật tăng cụ thể như sau ạ, giả sử giá trị đầu là a, để cho chuẩn thì ta bổ sung thêm hệ số tăng k do người dùng nhập vào ( có giá trị mặc định là 1.2 chẳng hạn ), a1=a*k, a2=a1*k, a(n) = a(n-1)*k. Nếu bác vẽ cống thì cái tường cánh sẽ phải thể hiện như thế, hoặc là một cái dốc nhìn trên mặt bằng sẽ phải thể hiện như vậy. hoặc cái ống cống, nhìn mặt đứng hoặc mặt bằng đều cần thể hiện như vậy ... đó là e ví dụ thế ạ !
-
Chào Hanam1210 Bạn có thể tham khảo lisp này xem sao? http://www.cadviet.com/forum/index.php?showtopic=13087&view=findpost&p=71661Cái đường tô bóng này thì là dân vẽ CAD là hiểu thôi ạ, khoảng cách giữa các đường tăng dần từ điểm M đến điểm N, còn quy luật tăng thế nào thì do người viết lisp tự định thôi ạ. Cái lisp của e nó cũng hơi hơi có điểm tương đồng với lisp Ctru mà anh Thiep giới thiệu. Yêu cầu của e được thể hiện rất rõ trong file ảnh đó ạ !
-
Em hay phải vẽ các đường bóng, tức là các đường thể hiện dốc trên mặt bằng ... hoặc thể hiện mặt con, mặt vát trên các hình chiếu đứng... Phải vẽ bằng thủ công rất mất thời gian. VẬy mong các anh chị trên diễn đàn viết giúp em caí lisp để vẽ các đường tô bóng để tất cả diễn đàn cùng sử dụng được không ạ ? Yêu cầu của em được minh họa rất cụ thể trong file ảnh em gửi kèm ạ. Chú ý rằng các đường bóng đó được đặt trong 1 layer riêng, và nó có màu 8.
http://www.mediafire.com/imageview.php?quickkey=4togzurtt0isfet&thumb=4
Em xin chân thành cảm ơn !
-
ai thế?
không phải đâu bạn ơi, do bạn để số chữ số thập phân ( trong mục format \ Unit ) là 0 nên nó hiển thị như vậy. Bạn đổi lại thành 2 chữ số thập phân là ok
-
Em đồng ý, dù ai viết về vấn đề dù nhỏ nhất cũng cần nhìn nhận mọi khía cạnh điều mình hỏi. Lần này hay không bằng hên nên chẳng may viết đúng ý bạn hanam1210, e cũng quên béng mất là các đường nó không bằng nhau, ngại quá ^^
Bạn nhìn theo cái này, cần thay chỗ nào mình đều ghi chú rồi tự sửa nhé

(defun c:tlt(/ eLine curve pt i j len dsttmp) (vl-load-com) (or #dist (setq #dist 10)) ; 10 = Khoang cach mac dinh (setq #dist (cond ((getdist (strcat "\n D <" (vl-princ-to-string #dist) " > :")))(#dist))) (defun eLine (p1 P isFull / p2 col) (if isFull (setq p2 P col 1) ;1 = Mau cua Line full (setq p2 (polar p1 (angle p1 P) (/ (distance p1 P) 2)) col 8) ; 8 = Mau cua Line nua ) (entmake (list (cons 0 "LINE")(cons 10 p1) (cons 11 p2)(cons 62 col) (cons 8 "0") ;0 = Layer cua Duong Taluy ) ) ) ;;Doan duoi nay khong can de y (while (and (setq curve (car(entsel "\nPath curve :"))) (wcmatch (cdadr (entget curve)) "*LINE,ARC") (setq pt (getpoint "\n P :")) (setq i -2 j -1 len (vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve))) ) (progn (while (< (setq dsttmp (* (setq i (+ i 2)) #dist)) len) (eLine (vlax-curve-getPointAtDist curve dsttmp) pt T)) (while (< (setq dsttmp (* (setq j (+ j 2)) #dist)) len) (eLine (vlax-curve-getPointAtDist curve dsttmp) pt nil)) ) ))
Cảm ơn bác KETXU nhé. Lisp chạy rất chuẩn. Thế là diễn đàn mình có thêm một kiểu rải taluy nữa. Kiểu rải này đúng ở các góc của đường đắp. Hoặc ở phần giao của đường nhánh với đường chính ( Đắp )
-
Lisp bác KETXU viết là chuẩn mà. Me không thể làm được hướng tâm như vậy. mong bác kiểm tra lại. Đây cũng là một cách rải taluy cần tham khảo. ít nữa bác ketxu hoàn thiện nốt phần màu của nét dài ngắn nữa là lisp này rất chuẩn đó ạ !
-
Hề hề hề,
Xin lỗi, không biết bạn đã nghĩ kỹ chưa mà ra cái đề bài như vậy??? Quả thật là đến bố Tây cũng thua cái yêu cầu của bạn chứ đừng nói chi ta.
Này nhé:
1/- Yêu cầu nét taluy ngắn bằng 1/2 nét taluy dài trong khi:
2/- Điểm P là tự chọn, không phải tâm của cung tròn và
3/- Đường chân taluy có thể là arc hay polyline.
Như vậy có nghia rằng các nét taluy không thể dài bằng nhau và bạn sẽ lấy 1/2 chiều dài của nét taluy nào???
Giá như bạn nói nét ngắn bằng 1/2 khoảng cách từ điểm P đến đường chân ta luy thì may ra còn có hy vọng làm giúp bạn được....
Hề hề hề,
Mong bạn hãy suy nghĩ kỹ trước khi ra đề, đừng làm khó nhau kiểu nớ hè......
Chúc bạn sớm có trả lời.
hi. Bác KETXU đúng là siêu cao thủ lisp chạy đúng yêu cầu, nhưng có 1 vấn đề này do ban đầu e chưa nêu hết em xin bác bổ sung giúp được ko ạ ? Tức là nét dài sẽ thuộc một layer có màu 1 chẳng hạn. Nét ngắn thuộc layer đó nhưng có màu 8 chẳng hạn.bác Update giúp em nhé. Cảm ơn bác nhiều !
-
Cái này nói nhiều trên diễn đàn rồi mà em, em dùng công cụ tìm kiếm đi.
Đúng là vấn đề rải taluy đã nói nhiều trên diễn đàn. Và rải các kiểu bình thường thì em có các lisp đó. Nhưng rải kiểu hướng về một điểm và nối trực tiếp từ đỉnh vào điểm đó thì diễn đàn chưa có. Bên Thủy lợi họ rải kiểu đó. hic !
-
Em hay phải rải taluy 1 cách thủ công như hình vẽ, http://www.mediafire.com/imageview.php?quickkey=xq4f7eb5ttt1t15&thumb=4, Điểm P không phải là tâm của cung tròn hay polyline, đỉnh taluy có thể là arc hoặc polyline. Cách vẽ của e rất thủ công mất thời gian. Mong các bác viết giúp e cái lisp vẽ được taluy như trong hình vẽ. yêu cầu lisp nhập được khoảng cách d, và điểm P là mình chọn trên CAD. vạch ngắn của taluy =1/2 vạch dài. tất cả các đường kẻ hướng về điểm P.Em xin chân thành cảm ơn !
-
1
-
-
có thể file của bạn bị lỗi, bạn gửi file lên xem thế nào ? hoặc bạn có thể mở bằng chức năng recover của CAD xem có được k ?
-
lần sau mà mất thì bạn có thể đánh lệnh expressmenu
-
hihi.ngon rồi, cảm ơn bác KETXU nhé. Cảm ơn diễn đàn, chúc diễn đàn mình ngày một lớn mạnh, có nhìêu "cao thủ đầu có mủ" như bác KETXU.hihi.( Cao thủ đầu có mủ giỏi hơn cao thủ đó ạ). Có cái lisp này thì làm bình đồ sẽ nhanh hơn rất nhiều. hì hì.
-
Thực tế khi vẽ bản vẽ CAD, nhiều khi ta dùng lệnh fillet các đối tượng đã có từ trước, nhưng ko fillet được. nguyên nhân là do cao độ Z (elevation) khác 0 và start Z và end Z của line khác 0. Như vậy để fillet được ta phải chỉnh thủ công các giá trị elevation và start Z, end Z về 0. Như vậy cũng hơi mất thời gian một chút bởi các đối tượng thuộc bình đồ rất nhiều. Vậy em mong các anh chị trên diễn đàn viết giúp em cái lisp chuyển elevation và start Z, end Z của tất cả các đối tượng về giá trị 0 để khi dùng fillet không bị lỗi. Em xin chân thành cảm ơn !
-
hic. chắc do đường truyền rùi. bác chủ thớt có thời gian thì up bằng mediafire là ổn định nhất. hic !
-
Thì sửa (command "STYLE" TSTYLE ".vntimeh.shx" "0" "1" "0" "N" "N") thành (command "STYLE" TSTYLE ".vntimeh.shx" "0" "1" "0" "N" "N" "N")
hic. Nó mà đơn giản thế thì e đã làm được ạ ? E đổi ngay từ đầu thành như thế nhưng nó ko chạy đc ạ ? hic. Nhưng e đã làm đc rùi. Phải sửa thành
(command "STYLE" TSTYLE ""vntimeh.shx,vns.shx"" "0" "1" "0" "N" "N" "N")
Thanks bác nhé !
-
Bạn sửa (command "STYLE" TSTYLE ".vntimeh.shx" "0" "1" "0" "N" "N") thành (command "STYLE" TSTYLE ".vntimeh" "0" "1" "0" "N" "N")
hic. Bác Hà hiểu nhầm rồi. Font .vntimeH.SHX cơ ạ !
-
cảm ơn bác đã chia sẻ. Nhưng link bị die rồi !
[yêu cầu] lisp vẽ đường bóng ( đường thể hiện dốc trên mặt bằng )
trong AutoLisp
Đã đăng · Trả lời báo cáo
hic. Em đã đọc và làm đúng như hướng dẫn kết quả là bác hướng dẫn lộn ngược. hè hè. Còn các mục kia e sẽ tự hoàn thiện. Cảm ơn bác, tặng bác 1 con gà quay nhé . hí hí