Chuyển đến nội dung
Diễn đàn CADViet
hanam1210

[yêu cầu] lisp vẽ đường bóng ( đường thể hiện dốc trên mặt bằng )

Các bài được khuyến nghị

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 !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình không biết viết lisp này nhưng xem hình minh họa của bạn có lẽ bạn thiếu dữ liệu khoảng cách giữa các đường bóng.Góp ý bạn nên upload ảnh lên 1 trang nào đó như photobucket chẳng hạn để minh họa trong bài viết của mình,xem yêu cầu của bạn phải tải về rất mất thời gian

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Em xin chân thành cảm ơn !

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=71661

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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=71661

Cá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 đó ạ !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ế ạ !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cá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 đó ạ !

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?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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 đó.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 đó.

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?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

mình cũng đang phải làm các công đoạn chải mái dốc trên mặt bằng. vẫn đang làm thủ công mất rất nhiều thời gian, mà ko đc đều. mong các bạn giúp đỡ. Chân thành cảm ơn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

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))
)
)
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 ạ !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mau hay thưa là do gia số. ^^ Mình chỉ nói mình đưa ra ví dụ để bạn bật hết những thông tin cần thiết ra thôi, và tất nhiên nó sẽ không đúng yêu cầu rồi (chọn điểm đầu của 2 curve làm điểm bắt đầu kẻ, tất nhiên sẽ có lúc lộn ngược đầu đuôi). Bạn lường như thế nào nếu đường A chạy qua điểm M hoặc N không hề cắt 2 đường biên ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 ạ !

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ề,..

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Hề hề hề,

Đây là cái lisp mình thử làm theo cái cách mình hiểu ý của bạn. Hãy test thử xem nó trúng trật ở đâu nhé. Lưu ý khi chọn hai đường biên phải phù hợp với trật tự vẽ của đường chuẩn. Nghĩa là biên thứ nhất phải nằm ở phía điểm bắt đầu của line chuẩn, và biên thứ hai phải nằm về phía điểm cuối của line chuẩn,

Nếu chọn sai bạn sẽ phải chạy lại lisp vì nó sẽ cho cái kết quả không như bạn muốn.


(defun c:kbg ()
(vl-load-com)
(command "undo" "be")
(command "ucs" "w")
(setq e1 (car(entsel "\n Chon duong bien thu nhat"))
       e2 (car(entsel "\n Chon duong bien thu hai"))
       e (car (entsel "\n Chon duong ke chuan"))
       a (getreal "\n Nhap khoang cach chuan: ")
       k (Getreal "\n Nhap he so khoang cach: ")
       p (getpoint "\n Chon huong rai duong ke bong")
       dis (distance p (vlax-curve-getClosestPointTo (vlax-ename->vla-object e) p T)) 
       b 0
)
(while (and (< b dis) (> a 0.01))
    (command "offset" a e p "")
    (setq e (entlast)
            a (* k a)
            b (+ b a)
            ;;;;; pd (vlax-curve-getstartpoint e)
            ;;;;;;pc (vlax-curve-getendpoint e)
    )
    (if (setq p1 (acet-geom-intersectwith e e1 0))
        (progn
              (command "break"  e  (car p1) (vlax-curve-getstartpoint e))
              (setq e (entlast))
        )
        (command "extend" e1 "" (vlax-curve-getstartpoint e) "")
    )

    (if (setq p2 (acet-geom-intersectwith e e2 0))
        (command "break" e  (car p2) (vlax-curve-getendpoint e))
        (command "extend" e2 "" (vlax-curve-getendpoint e) "")
    )
)
(command "undo" "e")
(princ)
)

Hy vọng thỏa mãn được yêu cầu của bạn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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))
)
)
)

 

 

.......................////

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

 

.......................////

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 !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn hanam1210 và bạn trungkscd xem lại bài quote đi, chắc nhầm người rồi.

@trungksdc : lisp mình viết là ví dụ, không đi vào yêu cầu :)

@hanam1210 : lisp bạn comment là bác phamthanhbinh dày công viết giúp bạn, lôi cổ mình ra chi ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 !

Hề hề hề,

1/- Bạn không yêu cầu.

Bây giờ nếu muốn thì hãy tự sửa như sau:

- Xóa dòng code: a (getreal "\n Nhap khoang cach chuan: ")

Bổ sung đoạn code sau:

(if (not a1) (setq a1 (getreal "\n Nhap khoang cach chuan: ")))

(setq a a1)

vào ngay trên dòng code: (while (and (< b dis) (> a 0.01))

2/- Do bạn không nói rõ lớp riêng mà bạn cần được xác định ra sao, Tùy ý người làm lisp hay là do bạn tự chọn trong các lớp có sẵn trên bản vẽ????

Nếu là tùy ý người làm lisp thì bạn có thể bổ sung đoạn lisp sau :

(setq la (getstring "\n Nhap ten layer: "))

(if (= (tblsearch "layer" la) nil)

(command "layer" "m" la "c" 8 "" "")

)

(setvar "clayer" la)

(command "change" e "" "p" "la" la "")

vào ngay trên dòng code (while (and (< b dis) (> a 0.01))

3/- Bạn hãy đọc kỹ hướng dẫn sử dụng trước khi dùng lisp.

4/- Bạn cần nhớ rằng để có thể sử dụng tốt sự giúp đỡ của mọi người, ít nhất bạn cũng cần hiểu rõ cái yêu cầu của bạn và trình bày cho nó rõ ràng. Ngoài ra bạn cũng cần có những kiến thức tối thiểu về lisp để có thể hiểu được những gì người viết lisp viết cho bạn. Từ đó trong khả năng của bạn hãy cố gắng tự điều chỉnh những gì đã có để phù hợp với cái bạn cần. Bởi vì thực tế không ai hiểu công việc của bạn bằng chính bạn nên nếu chỉ dựa dẫm vào cái người khác giúp mà không hiểu được bản chất của nó thì bạn có thể sẽ gặp nhiều rắc rối hơn trong công việc đó. Không phải cứ lisp là tốt cả đâu, nếu không hiểu nó cặn kẽ thì có khi chính lisp sẽ phá vỡ toàn bộ công sức của bạn đó.

Mong rằng bạn sẽ cố gắng để tự hoàn thiện mình mà khỏi cần lệ thuộc vào người khác.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ũ"

snapback.pnghanam1210, 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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ũ"

snapback.pnghanam1210, 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

3/- Bạn hãy đọc kỹ hướng dẫn sử dụng trước khi dùng lisp.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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í

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×