Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
33 replies to this topic

#1 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 06 October 2011 - 03:09 PM

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 !
  • 0

#2 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 06 October 2011 - 03:14 PM

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
  • 1

#3 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 06 October 2011 - 04:11 PM

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.c...indpost&p=71661
  • 0

#4 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 October 2011 - 06:42 AM

Chào Hanam1210 Bạn có thể tham khảo lisp này xem sao? http://www.cadviet.c...indpost&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 đó ạ !
  • 0

#5 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 07 October 2011 - 08:30 AM

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
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 October 2011 - 08:41 AM

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

#7 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 07 October 2011 - 09:00 AM

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?
  • 0

#8 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 October 2011 - 09:08 AM

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

#9 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 07 October 2011 - 09:52 AM

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?
  • 0

#10 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 October 2011 - 10:27 AM

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.
  • 0

#11 vailin

vailin

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 07 October 2011 - 10:49 AM

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
  • 0

#12 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 07 October 2011 - 11:25 AM

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

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#13 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 October 2011 - 12:39 PM

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

#14 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 07 October 2011 - 01:20 PM

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 ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#15 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 October 2011 - 02:36 PM

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ề,..
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#16 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 October 2011 - 03:13 PM

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.
  • 0

#17 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 October 2011 - 05:55 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#18 trungkscd

trungkscd

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 October 2011 - 08:59 PM

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
  • 0

#19 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 08 October 2011 - 07:27 AM



.......................////
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 !
  • 0

#20 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 08 October 2011 - 08:27 AM

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 ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC