Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
vetgo

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

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

vetgo    17

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.

  • 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
ketxu    2.653

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 à

  • Vote tăng 2

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
vetgo    17

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!

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
Tue_NV    3.841

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?

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
vetgo    17

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

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
Tue_NV    3.841

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

  • 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
vetgo    17

Đâ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!

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
Doan Van Ha    2.678

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

  • Vote tăng 3

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
vetgo    17

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:

  • 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
Tue_NV    3.841

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

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
vetgo    17

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!

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
Tue_NV    3.841

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

  • Vote tăng 2

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
phamthanhbinh    3.123

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

  • 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
vetgo    17

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ì

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

Đăng nhập để thực hiện theo  

×