Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] Lisp vẽ tứ giác không đều


  • Please log in to reply
13 replies to this topic

#1 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 29 August 2011 - 08:28 AM

http://www.cadviet.c...es/3/tn23_1.dwg
Hiện e đang làm 1 công việc rất nhàm chán là ngồi offset các đối tượng sau đó Boundary để ra 1 tứ giác, công việc này lặp đi lặp lại rất nhàm chán và mất thời gian (vì tốn khá nhiều công. Kết quả của e là ra các tứ giác không đều nhưng lại giống nhau. E muốn rút ngắn thời gian trong công tác này nên muốn nhờ các bác Viết e 1 Lisp thực hiện theo thứ tự sau:
- Nhập lệnh: ve
- Chọn 1 điểm làm đỉnh của tứ giác;
Kết quả: ra 1 tứ giác (theo thiết lập của người dùng)
E gửi file đính kèm trên!
Thank's các bác trước.
  • 1
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 August 2011 - 08:42 AM

Nhìn file đính kèm quá nhiều nội dung, không biết đâu là thứ bạn cần :) Mọi người cần bản vẽ minh họa ý tưởng chứ không phải bản vẽ công việc bạn à
  • 2

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


#3 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 29 August 2011 - 09:01 AM

Nhìn file đính kèm quá nhiều nội dung, không biết đâu là thứ bạn cần :) Mọi người cần bản vẽ minh họa ý tưởng chứ không phải bản vẽ công việc bạn à

Hì hì, xin lỗi bác ketxu và các bác, e đã save ngay tại vị trí mà tứ giác cần vễ có Layer "LE", để e diễn giải thế này cho nó nhanh nhé:
Tứ giác của e nó có các thông số sau:
- Cạnh trên vẽ sang phải 0.5, độ dốc 4%;
- Cạnh phải vẽ xuống 0.97 theo phương Y;
- Cạnh dưới có độ dốc 4% như cạnh trên;
- Cạnh trái có độ dốc taluy (x:y) là -1.75,-1
Cạnh dưới và cạnh trái cắt nhau sẽ ra chiều dài của cạnh dưới!
Thank's các bác!
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 29 August 2011 - 09:32 AM

http://www.cadviet.com/upfiles/3/tn23_1.dwg
Hiện e đang làm 1 công việc rất nhàm chán là ngồi offset các đối tượng sau đó Boundary để ra 1 tứ giác, công việc này lặp đi lặp lại rất nhàm chán và mất thời gian (vì tốn khá nhiều công. Kết quả của e là ra các tứ giác không đều nhưng lại giống nhau. E muốn rút ngắn thời gian trong công tác này nên muốn nhờ các bác Viết e 1 Lisp thực hiện theo thứ tự sau:
- Nhập lệnh: ve
- Chọn 1 điểm làm đỉnh của tứ giác;
Kết quả: ra 1 tứ giác (theo thiết lập của người dùng)
E gửi file đính kèm trên!
Thank's các bác trước.

Hic, hic, chịu thua thôi, nhòm bản vẽ bạn post lên, chẳng hiểu chi cả?
Bạn có thể upload lên 1 cái ví dụ dễ hiểu hơn và nói rõ hơn điều bạn cần được không?
  • 0

#5 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 29 August 2011 - 09:46 AM

Hic, hic, chịu thua thôi, nhòm bản vẽ bạn post lên, chẳng hiểu chi cả?
Bạn có thể upload lên 1 cái ví dụ dễ hiểu hơn và nói rõ hơn điều bạn cần được không?

http://www.cadviet.com/upfiles/3/vidu_4.dwg
E vẽ cụ thể như trên nhé!
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 29 August 2011 - 10:20 AM

http://www.cadviet.com/upfiles/3/vidu_4.dwg
E vẽ cụ thể như trên nhé!

Đây, các thông số cố định như hình của bạn :

(defun c:vdtl (/ dodoc dodai maidoc thangdung pt pc pl gd oldos)
(setvar "cmdecho" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq dodoc 0.04)
(setq dodai 0.50)
(setq thangdung 0.97)
(setq maidoc (/ 1 1.75))
(setq pt (getpoint "\nDiem pick :"))
(setq pc (polar pt (atan maidoc) 1.0))
(command "line" pt (strcat "@" (rtos dodai 2 4) ","
(rtos (* dodoc dodai) 2 4) )
(strcat "@0,-" (rtos thangdung 2 4))

"")
(setq pl (getvar "lastpoint"))
(setq gd (inters pl (polar pl (atan dodoc) 1.0) pt pc nil) )
(command "line" "@" gd pt "")
(setvar "osmode" oldos)
)
Các thông số thay đổi, bạn dựa vào code trên mà thay đổi cho phù hợp nhé
Chúc thành công
  • 1

#7 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 29 August 2011 - 10:37 AM

Đây, các thông số cố định như hình của bạn :

Các thông số thay đổi, bạn dựa vào code trên mà thay đổi cho phù hợp nhé
Chúc thành công

Thank's bác Tuệ, nhưng hiện tại nó vẽ ra tứ giác có đối tượng là Line, bác có thể sửa thành Polyline khép kín cái tứ giác đó cho e với, với lại cái Lisp khi chạy nó bị mất hết chế độ bắt điểm!
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5451 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 29 August 2011 - 11:08 AM

Thank's bác Tuệ, nhưng hiện tại nó vẽ ra tứ giác có đối tượng là Line, bác có thể sửa thành Polyline khép kín cái tứ giác đó cho e với, với lại cái Lisp khi chạy nó bị mất hết chế độ bắt điểm!

Mạn phép bác Tue_NV đi vắng, sửa lại cho bạn như vầy, mong bác Tue_NV thông cảm.
Thân thương!

(defun c:vdtl (/ dodoc dodai maidoc thangdung pt pc pl gd oldos)
(setvar "cmdecho" 0)
(setq oldos (getvar "osmode"))
(setq dodoc 0.04)
(setq dodai 0.50)
(setq thangdung 0.97)
(setq maidoc (/ 1 1.75))
(setq pt (getpoint "\nDiem pick :"))
(setvar "osmode" 0)
(setq pc (polar pt (atan maidoc) 1.0))
(command "pline" pt (strcat "@" (rtos dodai 2 4) ","
(rtos (* dodoc dodai) 2 4) )
(strcat "@0,-" (rtos thangdung 2 4))

)
(setq pl (getvar "lastpoint"))
(setq gd (inters pl (polar pl (atan dodoc) 1.0) pt pc nil) )
(command gd pt "")
(setvar "osmode" oldos)
)

  • 3

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 29 August 2011 - 11:17 AM

Thank's bác, hiện tại e đã hết quota tick + nên chưa thể cảm ơn bác Hà được. Ngày mai sẽ tick + cảm ơn bác lần nữa! Có cái này công việc của e nó trở nên nhanh chóng hơn rất nhiều và đỡ buồn ngủ! :rolleyes:
  • 1
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 29 August 2011 - 11:19 AM

Mạn phép bác Tue_NV đi vắng, sửa lại cho bạn như vầy, mong bác Tue_NV thông cảm.
Thân thương!


(defun c:vdtl (/ dodoc dodai maidoc thangdung pt pc pl gd oldos)
(setvar "cmdecho" 0)
(setq oldos (getvar "osmode"))
(setq dodoc 0.04)
(setq dodai 0.50)
(setq thangdung 0.97)
(setq maidoc (/ 1 1.75))
(setq pt (getpoint "\nDiem pick :"))
(setvar "osmode" 0)
(setq pc (polar pt (atan maidoc) 1.0))
(command "pline" pt (strcat "@" (rtos dodai 2 4) ","
(rtos (* dodoc dodai) 2 4) )
(strcat "@0,-" (rtos thangdung 2 4))

)
(setq pl (getvar "lastpoint"))
(setq gd (inters pl (polar pl (atan dodoc) 1.0) pt pc nil) )
(command gd pt "")
(setvar "osmode" oldos)
)

Không có gì đâu. Giúp được các bạn khác là 1 điều tốt mà
Tue_NV viết lại 1 tí, không phải sử dụng biến hệ thống nữa

(defun c:vdtl (/ dodoc dodai maidoc thangdung pt pc pl gd oldos y)
(setq dodoc 0.04)
(setq dodai 0.50)
(setq thangdung 0.97)
(setq maidoc (/ 1 1.75))
(setq pt (getpoint "\nDiem pick :")
pc (polar pt (atan maidoc) 1.0)
p1 (polar pt (atan dodoc) dodai)
p2 (polar p1 (/ pi -2.0) thangdung)
pcc (polar p2 (atan dodoc) 1.0)
gd (inters pt pc p2 pcc nil)
)
(vla-AddLightWeightPolyline (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object)))
(vlax-safearray-fill (vlax-make-safearray 5 (cons 1 10))
(last (mapcar '(lambda(x)
(setq y (append y (list (car x) (cadr x)))) )
(list pt p1 p2 gd pt)
)
)
)
)
(princ)
)

  • 0

#11 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 29 August 2011 - 11:28 AM

Hì hì, Lisp chạy rất ổn, nhưng e có 1 ý tưởng này mong các bác giúp em với.
Các bác có thể chuyển nó thành vòng lặp được không? nghĩa là mình có thể Pick liên tục đến khi dừng thì thôi ấy!
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#12 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 29 August 2011 - 11:41 AM

Hì hì, Lisp chạy rất ổn, nhưng e có 1 ý tưởng này mong các bác giúp em với.
Các bác có thể chuyển nó thành vòng lặp được không? nghĩa là mình có thể Pick liên tục đến khi dừng thì thôi ấy!

Của bạn đây :

(defun c:vdtl (/ dodoc dodai maidoc thangdung pt pc pl gd oldos y)
(vl-load-com)
(setq dodoc 0.04)
(setq dodai 0.50)
(setq thangdung 0.97)
(setq maidoc (/ 1 1.75))
(WHILE
(setq pt (getpoint "\nDiem pick :"))
(setq pc (polar pt (atan maidoc) 1.0)
p1 (polar pt (atan dodoc) dodai)
p2 (polar p1 (/ pi -2.0) thangdung)
pcc (polar p2 (atan dodoc) 1.0)
gd (inters pt pc p2 pcc nil)
)

(vla-AddLightWeightPolyline (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object)))
(vlax-safearray-fill (vlax-make-safearray 5 (cons 1 10))
(apply'append
(mapcar '(lambda(x)
(list (car x) (cadr x)) )
(list pt p1 p2 gd pt)
)
)
)
)
)
(princ)
)

  • 2

#13 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 29 August 2011 - 11:56 AM

Thank's bác Tuệ, nhưng hiện tại nó vẽ ra tứ giác có đối tượng là Line, bác có thể sửa thành Polyline khép kín cái tứ giác đó cho e với, với lại cái Lisp khi chạy nó bị mất hết chế độ bắt điểm!

Hề hề hề,
Sao cái biệc đơn giản này bạn không tạo sẵn nó thành một cái block và sau đó thoải mái mà nhét nó vào bản vẽ. Vừa đơn giản tiện lợi mà chả phải khó khăn với lisp.
Hơn nữa với cái block như vầy bạn còn có thể nhét thêm một lo xích xông các đường kích thước, ghi chú và mọi thứ bạn cần thể hiện trên bản vẽ nữa chứ chả phải chỉ có trần xì cái polyline đâu....
Chỉ cần CAD đã có thể giải quyết ngon cái yêu cầu của bạn rùi. Nếu cần có thể chọn việc insert block với chế độ explode là nó sẽ trả về cho bạn các đối tượng ban đầu như nó đã được tạo.....
Hề hề hề....
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#14 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 29 August 2011 - 01:11 PM

Hề hề hề,
Sao cái biệc đơn giản này bạn không tạo sẵn nó thành một cái block và sau đó thoải mái mà nhét nó vào bản vẽ. Vừa đơn giản tiện lợi mà chả phải khó khăn với lisp.
Hơn nữa với cái block như vầy bạn còn có thể nhét thêm một lo xích xông các đường kích thước, ghi chú và mọi thứ bạn cần thể hiện trên bản vẽ nữa chứ chả phải chỉ có trần xì cái polyline đâu....
Chỉ cần CAD đã có thể giải quyết ngon cái yêu cầu của bạn rùi. Nếu cần có thể chọn việc insert block với chế độ explode là nó sẽ trả về cho bạn các đối tượng ban đầu như nó đã được tạo.....
Hề hề hề....

Chả là của e có hơn chục cái file, sau đó lại còn hiệu chỉnh cục bộ nữa (không hẳn lúc nào nó cũng đều) nên mới phải thế này, với lại e thấy có cái này nó cũng tiện, một lúc nào đó có thể dùng cho việc khác được mà bác......hì hì
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...