Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
pdle

[Hỏi] Lisp thao tác trong 3D

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

@: Bác Doan Van Ha: www.ThoViet.com có rất nhiều thơ hay nhưng giá mắc quá, bác ạ! :) :) :)

 

K code được nhưng ket chém góp vui với.

- Viết nó liền tù tì cả cút và đường ống thì chắc code nhanh hơn nhiều so với tách ra từng đoạn ^^

- Chỉ sợ bạn phải làm j đó khác, hoặc nhu cầu phải thế, chứ nếu toàn cút 90 độ thế kia thì đâu có khó ta, cần gì vẽ ra vẫn có kết quả mà.

+ Số cút thì bằng số vertex Polyline - 2 đầu rồi.  (n)

+ Tổng chiều dài ống không tính cút rõ ràng bằng chiều dài cả Polyline - (n x D).

Phải không ta ?? Thấy dễ mà haanh làm nhiều bước thế kia Ket cũng hoang mang k biết mình nhầm chỗ nào k, vì ket dốt hình lắm :(

 

Lisp cho ra sản phẩm cút và ống liền một khối  cũng được, bác ạ! Với điều kiện:

1- Lisp phải thống kê được số lượng cút = [n đoạn ống - 1]

2- Lisp phải Stretch được hình 3D để co ngắn hoặc kéo dài các đoạn ống, theo ý muốn

3- Bà con Cơ khí và Cấp tốc thoát đang đói dài, bác Hà chưa có thời gian rảnh, nên em chỉ dám nhờ bác Hà làm món luộc thôi. Còn vài món tiếp theo như: Tần thuốc bắc, nướng ống vầu ...em sẽ cập nhật  sau, bác ạ!

 

 

" Đến Thailand dẹp yên bạo động

Ra biển đảo đem lại yên bình

Qua China xoá bỏ hận thù, tranh chấp

Vươn tới Mỹ xứng tầm thế giới,

..........."

- Vậy đc rùi bay cao quá hết oxi ^^

 

@anh Nhóc: Anh đã nối thơ cao cấp quá...Cho em ké theo ý tưởng của anh một tí cho vui  nhé!

Hy vọng một ngày gần đây nhất, Lisp xóa đói giảm nghèo  cho bà con dân làng Cơ khí và Cấp tốc thoát nước sẽ được tung hoành trên khắp mọi miền thân yêu của Tổ Quốc:

Cảm động biết bao

Lisp ta đi khắp mọi miền đất nước!

Từ Lạng Sơn đến Minh Hải thân yêu.

Lisp vượt Trường Sơn sang tận nước Lào

Sang Căm-pu-chia dựng xây tình hữu nghị....

(Xin mời anh Nhóc tiếp tục tùy hứng... viết nối tiếp mấy câu thơ viết theo thể thơ tự do của Hoằn)

Tới châu phi  rồi tạt qua châu Mỹ
Qua thổ nhĩ kỳ  vòng lại Chi- na

Lisp ngậm ngùi về quần đảoTrường Sa

Nơi biên ải gió tung khăn bay 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

Rảnh đc tí, xin đc đặt cục gạch đầu tiên (m[í chỉ vẽ ống) :D

Lệnh là VE

;lisp ve duong ong 3d
(defun c:VE(/ var old D lst_ver pt_w lst_w i n len dau cuoi dau_use cuoi_use)
(setq var '("osmode" "cmdecho")
	  old (mapcar 'getvar var))
(mapcar 'setvar var '(0 0)) 
(setq D (getdist "\nNhap duong kinh ong: ")
	  lst_TC_DUC '((12 . 26) (13 . 26) (18 . 35) (19 . 35) (22 . 40) (23 . 40) (28 . 50))
	  cao_tam_cut (cdr (assoc D lst_TC_DUC)))
(prompt "\nChon 3DPOLY: ")
(setq lst_ver (acet-geom-vertex-list (car(entsel))))
(foreach pt lst_ver
	(setq pt_w (trans pt 1 0)
		  lst_w (append lst_w (list pt_w))))
(setq i 0)
(repeat (setq n (1- (length lst_w)))
	(setq len (distance (setq dau (nth i lst_w)) (setq cuoi (nth (1+ i) lst_w))))
	(command "UCS" "za" (trans dau 0 1) (trans cuoi 0 1))
	(cond
		((= i 0) (command "CYLINDER" (setq dau_use (trans dau 0 1)) (setq R (/ D 2.0)) (- len cao_tam_cut)))
		((= i (1- n)) (command "CYLINDER" (setq dau_use (mapcar '+ (list 0 0 cao_tam_cut) (trans dau 0 1))) R (- len cao_tam_cut)))
		(t (command "CYLINDER" (setq dau_use (mapcar '+ (list 0 0 cao_tam_cut) (trans dau 0 1))) R (- len (* 2 cao_tam_cut))))
		)
	(setq i (1+ i))
	)
(mapcar 'setvar var old)
)
  • 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 vừa đi Thái Thụy -  Thái Bình về! Đi từ mờ sáng, trời mưa như thác đổ, đến Thái Bình nắng và nóng như rang lạc, tối mịt mới về lại gặp mưa như giời bị vỡ đường ống nước, mệt quá trời!

Rất vui khi được anh Hiệp đặt cục gach đầu tiên! :) :) :)

Thân tặng anh Hiệp bức ảnh ngồ ngộ này:

Untitled_zps46aad835.png

Mệt quá trời, em đi ngủ đây, mai mới thử lisp của anh được, em cảm ơn anh nhiều 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

Sau một hồi đắn đo, em quyết định để dành ăn dè bằng cách "hoãn cái sự sung sướng lại", nhờ anh Nhóc và các bác "Blispge" mở hàng thử lisp của anh Hiệp  trước giúp em và đưa ra ý kiến phản hồi...(nếu có). Em xin 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

Hàng nóng hổi đây ! :D :D :D

 

Để chiều, nếu ko có ý kiến gì thì mình sẽ gom ống thành 1 cục, cút thành 1 cục theo ý của Hoằn

 

;lisp ve duong ong 3d
(defun c:VE(/ var old D lst_TC_DUC cao_tam_cut R path cut base_w lst_ver lst_w obj i n len dau cuoi)
(setq var '("osmode" "cmdecho")
	  old (mapcar 'getvar var))
(mapcar 'setvar var '(0 0))
(setq D (getdist "\nNhap duong kinh ong: ")
	  lst_TC_DUC '((12 . 26.0) (13 . 26.0) (18 . 35.0) (19 . 35.0) (22 . 40.0) (23 . 40.0) (28 . 
50.0) (29 . 50.0) (35 . 55.0) (34 . 55.0) (40 . 60.0) (52 . 70.0) (53 . 70.0) 
(70 . 80.0) (69 . 80.0) (85 . 90.0) (84 . 90.0) (104 . 100.0) (129 . 187.5) 
(154 . 225.0) (204 . 300.0) (254 . 375.0))
	  cao_tam_cut (cdr (assoc D lst_TC_DUC))
	  )	;setq
;=================
;ve cut mau:
(command "arc" "c" '(0 0 0) (list cao_tam_cut 0 0) (list 0 cao_tam_cut 0))
(setq path (entlast))
(command "circle" '(0 0 0) (setq R (/ D 2.0)))
(command "sweep" (entlast) "" path)
(setq cut (entlast))
(setq base_w (mapcar '(lambda (x) (trans x 1 0)) (list (list cao_tam_cut 0 0) (list cao_tam_cut cao_tam_cut 0) (list 0 cao_tam_cut 0))))
;== xong cut mau ==
(prompt "\nChon 3DPOLY: ")
(setq lst_ver (acet-geom-vertex-list (setq ename (car(entsel))))
	  lst_w (mapcar '(lambda (x) (trans x 1 0)) lst_ver)
	  obj (vlax-ename->vla-object ename))
(setq i 0)
(repeat (setq n (1- (length lst_w)))
	(setq len (distance (setq dau (nth i lst_w)) (setq cuoi (nth (1+ i) lst_w))))
	(command "UCS" "za" (trans dau 0 1) (trans cuoi 0 1))
	(cond
		((= i 0) (command "CYLINDER" (trans dau 0 1) R (- len cao_tam_cut))
				 (command "_3dalign" cut "" "c" 
					(trans (car base_w) 0 1) 
					(trans (cadr base_w) 0 1) 
					(trans (last base_w) 0 1) 
					(trans (vlax-curve-getPointAtDist obj (- (vlax-curve-getDistAtParam obj 1) cao_tam_cut)) 0 1) 
					(trans (vlax-curve-getPointAtParam obj 1) 0 1) 
					(trans (vlax-curve-getPointAtDist obj (+ (vlax-curve-getDistAtParam obj 1) cao_tam_cut)) 0 1))
				 )
		((= i (1- n)) (command "CYLINDER" (mapcar '+ (list 0 0 cao_tam_cut) (trans dau 0 1)) R (- len cao_tam_cut)))
		(t (command "CYLINDER" (mapcar '+ (list 0 0 cao_tam_cut) (trans dau 0 1)) R (- len (* 2 cao_tam_cut)))
				(command "_3dalign" cut "" "c" 
					(trans (car base_w) 0 1) 
					(trans (cadr base_w) 0 1) 
					(trans (last base_w) 0 1) 
					(trans (vlax-curve-getPointAtDist obj (- (vlax-curve-getDistAtParam obj (1+ i)) cao_tam_cut)) 0 1) 
					(trans (vlax-curve-getPointAtParam obj (1+ i)) 0 1) 
					(trans (vlax-curve-getPointAtDist obj (+ (vlax-curve-getDistAtParam obj (1+ i)) cao_tam_cut)) 0 1)))
		)
	(setq i (1+ i))
	)
(mapcar 'entdel (list cut path))
(mapcar 'setvar var old)
)
(vl-load-com)
  • 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

Thật tuyệt vời  nếu  anh Anh Hiệp thân mến gom được các found cô đơn thành hiệp hội! :) :) :)

Trong một hệ thống máy móc thiết bị, có rất nhiều phân đoạn ống  chứ không phải là 1 phân đoạn duy nhất. Bởi vậy sau khi "gom ống thành 1 cục, cút thành 1 cục theo ý của Hoằn", bằng giá nào anh cũng phải gom các hiệp hội cô đơn thành một tập đoàn lớn, nếu không thì chị Haanh sẽ mắng em té tát như vỡ đường ống cấp nước sông Đà  cho mà xem! (Gom được thành 1 cục lớn mới dễ tính tổng chiều dài cút và ống  và tiện lợi cho các thao tác zoom, pan và orbit, move, copy...)

@Chị Hà: Bữa nào thử lisp chị thịt mấy con gà mái đang đẻ trứng con so nhé! Em sẽ a-lô anh Nhóc đến làm gà tinh tươm sạch sẽ, còn em sẽ đạo diễn món gà luộc cách thủy, chị không cần phải mó tay vào làm việc gì mà lo nhé!

P/s: Em chỉ thích ăn tràng và trứng non thôi, còn cái gọi là "nhất thủ nhì vĩ" em sẽ dành riêng cho  anh Nhóc, các cụ bảo gái có công chồng không phụ là thế, anh Nhó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

Nhoc nhap duong kinh la nhung dk da dc liet ke trong list lst_TC_DUC thi lisp moi chay dung, nhap dk tuy y thi se ko chay dc

Vậy thì thể hiện tài nghệ thêm chút nữa đi: bắt user nhập dk chừng nào đúng trong list mới chịu. Như thế sẽ hoàn hảo hơn, mà 99% là Hiepttr làm đượ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

Da ! Lam dc, nhung chi khi tren computer, con bay gio dang online bang phone thi chiu roi bac Ha ah.

Mot ly do nua la de nguoi thiet ke con co chut tu duy, neu ko tinh toan (tra bang) gi ca ma ve bay cung dc thi qua la lisp da "noi giao cho giac" roi bac ah ! :D :D :D

  • 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

Nhoc nhap duong kinh la nhung dk da dc liet ke trong list lst_TC_DUC thi lisp moi chay dung, nhap dk tuy y thi se ko chay dc

 

Em copy thông số trong "list lst_TC_DUC" rồi paste vào dòng lệnh, kết quả dư ...lày:

114276_cccca.png

Không hiểu vì sao, không biết vì sao???

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

@Hoằn:

Việc giˋ phải copy, la dan trong nganh, sanh dieu như Hoan thi chi viec nhap dung kich thuoc dk, vd: 12 hoac 18 ...

Chu´ y´ laˋ mỗi đoạn của 3dpolyline cũng phải đủ dài (như thực tê´) thiˋ mới cho ra kquả đúng nữa đo´. Viˋ mình nghi lisp chỉ laˋ công cụ để thể hiện y´ tưởng nên ko ràng buộc những yếu tô´ trênu

  • 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

@Hoằn: Để mà giống cad2012 thì khó quá, thôi thì block lại nhé !

 

Nếu làm được như array trong CAD2012 thì có cái hay là bấm chuột  vào, nó sẽ hiện ra bảng kê tổng số lượng cút... .Anh tạm block cũng được

(Em sẽ thử lại 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

Nếu muốn có bảng thống kê thì có thể Group, chỉ có điều hạn chế là khi copy/ paste sang file khác thì nó lại vỡ ra chứ ko nằm nguyên 1 cục như block

  • 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

Bảng thống kê số lượng chi tiết thì bản vẽ đã có rồi. Ý em muốn nói nó hiện ra bảng cho người vẽ tổng số lượng cút như Array trong CAD2012. Người vẽ chỉ cần biết số lượng rồi tự ghi vào bảng thống kê chi tiết kẹp díp với khung tên.

aa1_zps3cf674f4.gif

Em thử lại vẫn bị lỗi trê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

@ Hoằn:

Có thể là do lỗi xảy ra trên hộp code CV chăng ?!

Down lại lisp theo link này và thử xem:

 

http://www.cadviet.com/upfiles/3/80156_ve_ong.lsp

 

 

p/s: Mình test trên cad2009 được cả con giun dài giằng giặc mà :D :D :D

Có update tính năng group thành 2 nhóm ống và cút

 

 

80156_giun.jpg

  • 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

Ném file đó lên đây đi Hoằn

Không lưu được, AutoCAD biến mất còn trơ lại màn hình thông báo sau:

114276_7845gdhg.png

 

(Em không dám thử lisp trên AutoCAD2013 vì sợ lisp và CAD xung khắc phải cài lại mất thời gian lắm)

Có thể do lỗi mang, hiện giờ em không loát về đượ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

Lỗi do lệnh 3DAlign

Trước đây, bạn PhamNgocTu có bị TH này 1 lần với lệnh Align rồi

Link (bài viết số #525):

 http://www.cadviet.com/forum/topic/14210-hoi-ve-lisp-thuat-toan-y-tuong-coding/page-27

Trong đó có quote bài viết của bác Duy về phương thức viết thay thế lệnh Align. Bạn có thể tham khảo

  • 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 tò mò muốn hỏi anh Tuệ , sao anh Hiệp chạy trên CAD2009 được, còn cái Hoằn lại không??? Hay là lisp nó chỉ khắc tinh với AutoCAD2007???

(Em download lisp của anh Hiệp về để thử nhưng không được, up ảnh lên diễn đàn được vẫn được bình thườ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

Em tò mò muốn hỏi anh Tuệ , sao anh Hiệp chạy trên CAD2009 được, còn cái Hoằn lại không??? Hay là lisp nó chỉ khắc tinh với AutoCAD2007???

(Em download lisp của anh Hiệp về để thử nhưng không được, up ảnh lên diễn đàn được vẫn được bình thường)

 

Tại vì Lisp để thực hiện lệnh 3DAlign là lệnh của CAD, chạy lúc được, lúc không được (lỗi phát sinh như Hoằn đã gặp) không rõ nguyên nhân, cũng không biết cơ chế hoạt động lệnh đó trong CAD như thế nào nên chỉ biết cách khắc phục là thay mã code (command "3dAlign"....) bằng mã code khác thì mới hết lỗi mà Hoằn đã gặp

  • 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

@ Tue_NV:

Nghe lời "xúi dại" của bác, em làm công cụ thay cho 3dalign ^^

Quả thật 2d thì còn dễ ngốn chứ quả 3d này đã làm em mất ngày chủ nhật đó :D :D :D

 

Tạm xong, em đưa lên đây xin đá ^^ :D :D :D

Đến khi ổn thì em cho vào code !

 

p/s:

1) Hạn chế của nó là "em đã phát hiện có sai số trong các phép toán của lisp" 

Tuy ko lớn >>> nhưng chỉ sợ nếu ứng dụng vào bài toán của haanh thì ko sao mà dùng trong các trường hợp khác để xđịnh giao cắt ... thì có thể "dính đòn"

 

Mong đc chỉ giáo thêm !

 

2) Đang để dạng thủ tục để các bác dễ đường test !

 

3) Chưa xét đến tỉ lệ scale

 

;lisp thay the lenh 3dalign tuy chon "Copy"
;pt_a, pt_b, pt_c la 3 diem chuan
;pt_1, pt_2, pt_3 la 3 diem dich
; ss co the la 1 ename hoac mot tap chon ss
;ti le (length pt_1 pt_2) / (length pt_a pt_b) la ti le scale
(defun c:3DDD(/ )
;ss pt_a pt_b pt_c pt_1 pt_2 pt_3 
;lst_var old lst_point_w moc new pre pt_phu pt_phu_w base ang anh pt_phu_2d pt_phu_3d pt_phu_w_3d
(setq pt_a (getpoint "\nchon a:") 
	  pt_b (getpoint "\nchon b:")
	  pt_c (getpoint "\nchon c:")
	  pt_1 (getpoint "\nchon d:")
	  pt_2 (getpoint "\nchon e:")
	  pt_3 (getpoint "\nchon f:")
	  ss (car(entsel "\nChon vat: ")))
(setq lst_va '("osmode" "cmdecho" "AUNITS" "ANGDIR"))
(setq old (mapcar 'getvar lst_va))
(mapcar 'setvar lst_va '(0 0 3 0))
(setq lst_point_w (mapcar '(lambda (x) (trans x 1 0)) (list pt_a pt_b pt_c pt_1 pt_2 pt_3)))
(command "ucs" "na" "s" "save_ucs")
(command "-view" "s" "save_v")
(setq moc (entlast) 
	  new (ssadd))
(command "_.copy" ss "" pt_a pt_1)
(while (setq pre (entnext moc))
	(setq new (ssadd pre new)
		  moc pre)
)	;while
(setq pt_phu (mapcar '+ pt_1 (mapcar '- pt_b pt_a))
	  pt_phu_w (trans pt_phu 1 0))
(command "ucs" "3p" pt_1 pt_2 pt_phu)
(command "plan" "c")
(command "rotate" new "" 
	(setq base (trans (nth 3 lst_point_w) 0 1)) 
	(setq ang (* -1 (angle base (trans pt_phu_w 0 1))))
	)
(setq pt_phu_2d 
				(polar 
					base 
					(+ ang (angle base (setq anh (mapcar '+ base (mapcar '- (trans (nth 2  lst_point_w) 0 1) (trans (nth 0  lst_point_w) 0 1)))))) 
					(distance (list (car base) (cadr base)) (list (car anh) (cadr anh))))
	  pt_phu_3d (list (car pt_phu_2d) (cadr pt_phu_2d) (last anh))
	  pt_phu_w_3d (trans pt_phu_3d 1 0))
(command "ucs" "3p" base (trans (nth 5 lst_point_w) 0 1) pt_phu_3d)
(command "plan" "c")
(command "rotate" new "" 
	(setq base (trans (nth 3 lst_point_w) 0 1)) 
	(* -1 (angle base (trans pt_phu_w_3d 0 1)))
	)
(command "ucs" "na" "r" "save_ucs")
(command "ucs" "na" "d" "save_ucs")
(command "-view" "r" "save_v")
(command "-view" "d" "save_v")
(mapcar 'setvar lst_va old)
)
  • 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

Cảm ơn anh Hiệp nhiều, số lượng đường ống tương đối lớn, tính bằng đơn vị container, bởi vậy nếu sai số tính bằng đơn vị xe cải tiến (tổng V/ diện tích ống s = chiều dài ống) là chị Hà em bắt anh phải bù... lỗ đó! :) :) :)

Bữa nào chị Hà em thử lisp, em sẽ mời anh đến thưởng thức món gà - đang đẻ trứng con so của nhà chị Hà em trồng được - luộc trong nồi  hấp cách thủy do chính tay em vặt lông 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

#73 Đợị hoài ko thấy đá, mình tự lụm đc 1 cục đây:

........

Chưa kiểm tra trường hợp nếu sau khi copy xong, các cạnh (tạm gọi là vậy)

hoặc cả 2 đều vào đúng chỗ

hoặc 1 trong 2 cạnh đã vào đúng chỗ  cái này gây ra lỗi 3 điểm chọn trong lênh command UCS thẳng hàng cho lisp trên

 

===> Định đưa phương án xữ lý là so sánh tỉ lệ hiệu từng cặp tọa độ >>>> phát sinh trường hợp mẫu số âm >>> lỗi :(

===> Định đưa giải pháp 2:

3 lần ucs >>> kiểm tra ANGLE

>>> Cái này có vẻ ổn nhưng cũng hơi dài & lắt nhắt

 

Không biết có "con đường" nào gọn hơn ko ?!

 

Mong đc chỉ giáo !!!

  • 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

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  

×