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

LISP VẼ ĐƯỜNG ỐNG 3D trên AutoCAD

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

Trước khi nhờ các bác viết Em_Lisp CHÈN PHỤ KIỆN ĐƯỜNG ỐNG, em nhờ các bác thư giãn  với lisp vẽ tê thu cho các loại ống theo tiêu chuẩn Đức, có các đường kính ống theo DN:

 

11837_ha2.png

(Tê thu tự chế là loại tê phi tiêu chuẩn, giao tuyến giữa hai ống là đường cong R lượn chứ không phải là đường kẻ chỉ! Ống, cút và tê.... chỉ vẽ dạng mô phỏng lỗ đặc để giảm dung lượng cho file bản vẽ....dễ zom, pan, copy và move...)

File:   http://www.cadviet.com/upfiles/4/11837_haanh.dwg

Cho trước 1 cái tê thu tự chế DN250_DN200, em muốn nhờ các bác viết lisp:

1 - Sau khi gõ lệnh lisp, thay đổi trị số của D lớn và d nhỏ sẽ ra được các loại tê thu có đường kính khác nhau theo tiêu chuẩn ống của Đức.

2 - Nếu phải mua các loại tê thu trên thị trường có chiều dài khác với tê thu tự chế, người dùng có thể tự sửa lại được dòng Code của Lisp công thức tính chiều dài  2d nhỏ và (D/2)+(d/4),  để ra được chiều dài mong muốn.

3 - Em không biết là viết lisp với số liệu như thế có gặp trở ngại gì không???

Em rất hân hạnh được tiếp đón các bác viết lisp trên diễn đàn ghé thăm lều quán nhà em!

Sự hiện diện của các bác sẽ mang lại niềm vui lớn cho cái Hoằn, hy vọng là khi vui, cái Hoằn sẽ ngẫu hứng hát tặng các bác bài hát EM CỦA NGÀY HÔM QUA, bằng một giọng ca hương đồng gió nội mềm mại mượt mà như lúa đang thì con gái nhưng đã nồng nàn "hương lúa chín thoang thoảng bay làm lung lay hàng cột điện làm xáo động cả hàng cây"  và ngọt ngào hơn cả mía lùi bếp gas! :) :) :)

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

@gù chị Hà:

3/ Viết Lisp theo công thức tính chiều dài  2d nhỏ và (D/2)+(d/4) không khả thi, bởi vậy chẳng có bác nào giả nhời chị! :) :) :)

4/ Dùng lệnh Cyl vẽ đoạn ống DN250 và đoạn ống DN200 >>> Move đoạn ốngDN200 chọn chế độ  bắt điểm M2p vào trọng tâm ống DN250 >>>3drotate xoay đoạn ống DN200 theo hướng tuỳ thích >>> Union để tạo thành một found Tê ( Thao tác chưa đến 10 giây)

5/ Nếu dùng ít thì cứ thế copy đến vị trí của nó, nếu dùng nhiều thì có thể tạo block...Thực tế là số lượng Tê trong một công trình rất ít, không đáng để viết lisp, chị ạ!

 

5- Chị đã viết:

"Cho trước 1 cái tê thu tự chế DN250_DN200, em muốn nhờ các bác viết lisp:

1 - Sau khi gõ lệnh lisp, thay đổi trị số của D lớn và d nhỏ sẽ ra được các loại tê thu có đường kính khác nhau theo tiêu chuẩn ống của Đức.

2 - Nếu phải mua các loại tê thu trên thị trường có chiều dài khác với tê thu tự chế, người dùng có thể tự sửa lại được dòng Code của Lisp công thức tính chiều dài  2d nhỏ và (D/2)+(d/4),  để ra được chiều dài mong muốn".

Chị nghĩ viết lisp vẽ tê cũng đáng để anh Hiepttr mầy mò tìm đường đi tới lisp vẽ tê ngắn nhất. Biết đâu khi dò đường giữa đêm khuya thanh vắng, anh Hiepttr không dẫm phải "mìn ...của Hoằn" mà lại tình cờ đá phải bao tải tiền của ai đó đánh rơi giữa đồng không mông quạnh :) :) :)

Sao không thấy anh Hiệp có ý kiến gì 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

Anh Hiệp, ơi , giờ miền Trung đang là mùa khô, thành cổ Quảng Trị quê anh  đã hết lũ lụt chư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

khà khà :D :D :D

 

Bỏ chạy lâu ngày ko ngoảnh mặt lại, khi trở lại nước đã rút nhưng cứ tưởng rằng chẳng ai cần nên ko code :D

 

>>> Hàng đây, ném đá đi :D :D :D

;lisp ve te theo D & d nhap vao
(defun c:VET()
(setq os (getvar 'osmode)
	  lay (getvar "clayer")
	  cmd (getvar 'cmdecho))
(mapcar 'setvar (list 'osmode 'cmdecho) '(0 0))
;================================
;ham bay loi
(setq temperr *error*)
(defun errorTrap (msg)
    (and os (setvar 'osmode os))
	(and lay (setvar "clayer" lay))
	(and cmd (setvar 'cmdecho cmd))
	(cond
		((tblsearch "ucs" "save_ucs_ve_T") 
			(command "ucs" "na" "r" "save_ucs_ve_T")
			(command "ucs" "na" "d" "save_ucs_ve_T")
			)
	)
    (setq *error* temperr)
	(princ "\n*** Da set lai bien, OK ! ***")
    (princ)
)
(setq *error* errorTrap)
;======het ham bay loi = P1 ============================
;===========================================================================================
(command "ucs" "na" "s" "save_ucs_ve_T")
(setq #D_lon (NGT #D_lon 254. getdist "Nhap duong kinh ong lon (D)")
	  #d_nho (NGT #d_nho 204. getdist "Nhap duong kinh ong nho (d)")
	  bl_name (strcat "T_" (rtos #D_lon 2 0) "_" (rtos #d_nho 2 0))
)
(if (tblsearch "layer" bl_name) 
			(setvar "clayer" bl_name) 
			(command "layer" "m" bl_name "c" "t" "45,159,225" "" "")
			)	;if
;=========================================================================================
(if (not (tblsearch "block" bl_name))
	(progn
		(command "ucs" "na" "w")
		(command "CYLINDER" (list 0 0 (- #d_nho)) (/ #D_lon 2.) (* 2 #d_nho))
		(setq part_1 (entlast))
		(command "ucs" "za" "" '(1 0 0))
		(command "CYLINDER" '(0 0 0) (/ #d_nho 2.) (+ (/ #D_lon 2.) (/ #d_nho 4.)))
		(command "_.union" part_1 (entlast) "")
		(command "ucs" "za" "" '(-1 0 0))
		(command "-block" bl_name '(0 0 0) (entlast) "")
		(command "ucs" "na" "r" "save_ucs_ve_T")
	)
)	;Neu chua co _ tao block Te
;==========================================================================================
(if (and
		(setq base_pt (getpoint "\nChon diem giao tim 02 tuyen ong: "))
		(setq pt1 (getpoint "\nChon diem thuoc tim tuyen ong lon: "))
		(setq pt2 (getpoint "\nChon diem thuoc tim tuyen ong nho: "))
		(not (equal base_pt pt1 (setq fuzz (/ #d_nho 100))))
		(not (equal base_pt pt2 fuzz))
		(not (equal pt2 pt1 fuzz))
	)
	(progn
		(command "ucs" "3p" base_pt pt2 pt1)
		(command "insert" bl_name '(0 0 0) "" "" "")
	)
)
(command "ucs" "na" "r" "save_ucs_ve_T")
(command "ucs" "na" "d" "save_ucs_ve_T")
(setq *error* temperr)
(setvar 'osmode os)
(setvar "clayer" lay)
(setvar 'cmdecho cmd)
(princ "\nOK !")
(princ)
)
;===================================================================================================
(defun NGT(a mac_dinh ham str_nhac / modul)
;;Nhan gia tri
(or a (setq a mac_dinh))
(setq a (cond
	((= "" (setq modul (ham (strcat "\n" str_nhac " <" (vl-princ-to-string a) ">: ")))) a)
	(modul)
	(a)
	)
	)
)
  • Like 1
  • 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

 

HA_zpse7oomhp8.gif

Cảm ơn anh Hiệp rất nhiều nhiều nhé! Em đã trót dại nhờ cái Hoằn ném cho anh mấy tảng thịt trâu rừng hun khói, không biết anh đã nhận được chưa??? :) :) :)

Tình hình là em muốn các bác trên diễn đàn và anh Hiệp viết lisp chèn phụ kiện vào đường ống! Đầu vào là các block tê, van, rắc co, bích có điểm chèn tại điểm giữa (trùng với đường tâm ống). Đầu ra là các vị trí bất kỳ trên các đường ống với điều kiện tê, van...phải xoay được theo mọi hướng như ảnh 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

@haanh: Ai là người "quên mật khẩu" khi mình đã thắc mắc & nhắn tin (vì sợ làm loãng topic) & đã đợi mãi chẳng thấy hồi âm ?
 

Mở hộp tin nhắn đi, nó sẽ nói lên tất cả :D :D :D

  • 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

Xin lỗi anh Hiệp đúng là em bị mất...mật khẩu nên nên hôm nay mới được đọc ...công hàm của anh :) :) :)

 

Tê dùng trong đường ống công nghệ của cơ khí không lắp bằng ren như  Tê của đường ống nước mà hàn trực đối đầu trực tiếp

Tê với các kích cỡ khác nhau được tạo block để trong file tư liệu. Cần dùng loại nào thì lôi nó ra đưa vào đúng vị trí của đường ống cần chèn, có thể xoay theo vị trí mong muốn như hình ảnh minh họa ở bài viết trên.

Khi đã bấm chuột để chèn cố định vào đường ống thì đoạn ống dài đúng bằng chiều dài của Tê sẽ phải trở về với cát bụi đúng như anh đã viết: "- Khi chèn phụ kiện, (sau khi chọn loại phụ kiện cần chèn) ta chỉ cần kích chọn đoạn ống >>> lisp sẽ lấy được thông tin từ xdata để xác định đc đường kính phụ kiện ..., đồng thời vẽ lại 2 đoạn ống & xóa đoạn ống cũ đi (mục đích là tạo khoảng hở tại vị trí chèn)"

Chèn các phụ kiện khác chẳng hạn như Bích nối ống , Van chặn , Ống bù giãn nở...được hàn trực tiếp vào ống cũng tương tự như chèn Tê

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

Xin chào cả nhà.

Cho mình hỏi lisp bên trên có thể chỉnh sửa lại cho đường kính từ 13 sang 13.8 được không nhỉ.

Với có update chạy khi 45 độ hoặc 60 độ không.

 

Chân thành cảm ơn nhiề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
Vào lúc 9/11/2014 tại 12:31, Tot77 đã nói:

 Sửa lsp ve.lsp theo yêu cầu số 1 của haanh.

 


 
(defun c:VE(/ lst_va old D ss lst_TC_DUC cao_tam_cut net R path cut base_w lst_ver lst_w obj i ss_ong ss_cut n len dau cuoi)
;ham bay loi
(setq temperr *error*)
(defun errorTrap (msg)
    (mapcar 'setvar lst_va old)
(cond
((tblsearch "ucs" "save_ucs") 
(command "ucs" "na" "r" "save_ucs")
(command "ucs" "na" "d" "save_ucs")
)
)
(cond
((tblsearch "ucs" "save1_ucs") 
(command "ucs" "na" "r" "save1_ucs")
(command "ucs" "na" "d" "save1_ucs")
)
)
    (setq *error* temperr)
(princ "\n*** Da set lai bien, OK ! ***")
    (princ)
)
(setq *error* errorTrap)
;======het ham bay loi = P1 ============================
(setq lst_va '("osmode" "cmdecho"))
(setq old (mapcar 'getvar lst_va))
(mapcar 'setvar lst_va '(0 0))
(command ".undo" "be")
;=================
(setq lst_TC_DUC '((12 . 26.0) (18 . 35.0) (22 . 40.0) (28 . 50.0) (35 . 55.0) (40 . 60.0) (52 . 70.0) (70 . 80.0)
  (85 . 90.0) (104 . 100.0) (129 . 187.5) (154 . 225.0) (204 . 300.0) (254 . 375.0))
      lst_fi_tcduc '((12 . "DN10") (18 . "DN15") (22 . "DN20") (28 . "DN25") (35 . "DN32") (40 . "DN40")
    (52 . "DN50") (70 . "DN65") (85 . "DN80") (104 . "DN100") (129 . "DN125")
    (154 . "DN150") (204 . "DN200") (254 . "DN250"))
      D (getdist (strcat "\nNhap duong kinh ong <"
(apply 'strcat (mapcar '(lambda (x) (strcat (itoa (car x)) " ")) lst_TC_DUC)) ">:"))
      Lay (cdr (assoc D lst_fi_tcduc))
      cao_tam_cut (cdr (assoc D lst_TC_DUC))
)
;=================
(prompt "\nChon 3DPOLY: ")
(setq ss (ssget "+.:E:S" '((0 . "POLYLINE"))))
(if (and
D
(member D (mapcar 'car lst_TC_DUC))
ss)
(progn
(or #lan_ve (setq #lan_ve 0))
(setq #lan_ve (1+ #lan_ve))
;ve cut mau:
(setq net (getvar "clayer"))
(if (tblsearch "layer" (strcat "Cut_" lay)) 
(setvar "clayer" (strcat "Cut_" lay)) 
(command "layer" "m" (strcat "Cut_" lay) "c" "t" "45,159,225" "" "")
) ;if
(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 ==
(if (tblsearch "layer" (strcat "Ong_" lay)) 
(setvar "clayer" (strcat "Ong_" lay)) 
(command "layer" "m" (strcat "Ong_" lay) "c" "t" "133,230,244" "" "")
) ;if 
;Luu UCS:
(command "ucs" "na" "s" "save1_ucs")
;(command "-view" "s" "save_v")
;*******************************
(setq lst_ver (acet-geom-vertex-list (setq ename (ssname ss 0)))
 lst_w (mapcar '(lambda (x) (trans x 1 0)) lst_ver)
 obj (vlax-ename->vla-object ename))
(setq i 0
 ss_ong (ssadd)
 ss_cut (ssadd)
 )
(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)) ;ve ong
(setq ss_ong (ssadd (entlast) ss_ong))
(3DDD cut  
(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)) ;align_copy cut
(setq ss_cut (ssadd (entlast) ss_cut))
)
((= i (1- n)) (command "CYLINDER" (mapcar '+ (list 0 0 cao_tam_cut) (trans dau 0 1)) R (- len cao_tam_cut)) ;ve ong
(setq ss_ong (ssadd (entlast) ss_ong))
) 
(t (command "CYLINDER" (mapcar '+ (list 0 0 cao_tam_cut) (trans dau 0 1)) R (- len (* 2 cao_tam_cut))) ;ve ong
(setq ss_ong (ssadd (entlast) ss_ong))
(3DDD cut 
(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)) ;align_copy cut
(setq ss_cut (ssadd (entlast) ss_cut))
)
)
(setq i (1+ i))
) ;repeat
(command ".ERASE" cut "")
(command ".ERASE" path "")
(command ".ERASE" ss "")
(command "ucs" "na" "r" "save1_ucs")
(command "ucs" "na" "d" "save1_ucs")
(setvar "clayer" net)
)
(alert "***** Nhap du lieu chua dung ! *****")
)
(command ".undo" "end")
(setq *error* temperr) ;tra ham erorr nguyen thuy
(mapcar 'setvar lst_va old)
(princ)
)
(vl-load-com)
;*****************************************************************************************************************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=============================================================================================================================
(defun 3DDD(ss pt_a pt_b pt_c pt_1 pt_2 pt_3 / lst_va old lst_point_w moc new pre
huong_12_xoy huong_13_xoy huong_ab_xoy huong_ac_xoy 
huong_12_yoz huong_13_yoz huong_ab_yoz huong_ac_yoz 
huong_12_xoz huong_13_xoz huong_ab_xoz huong_ac_xoz 
pt_phu pt_phu_w pt_phu2 pt_phu2_w base truc truc_w ang anh anh_c anh_w pt_phu2_2d pt_phu2_w_3d pt_phu_2d pt_phu_3d pt_phu_w_3d)
;Ham 3dalign khong scale Voi 3 diem chon phai "bang nhau" ve kich thuoc hinh dang
(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
;======================================================================
;Kiem tra trung phuong, chieu
(command "ucs" "za" '(0 0 0) '(2.357 1.312 4.235))
(setq huong_12_xoy (angle (nth 3 lst_point_w) (nth 4 lst_point_w))
 huong_13_xoy (angle (nth 3 lst_point_w) (nth 5 lst_point_w))
 huong_ab_xoy (angle (nth 0 lst_point_w) (nth 1 lst_point_w))
 huong_ac_xoy (angle (nth 0 lst_point_w) (nth 2 lst_point_w))
 )
(command "ucs" "za" '(0 0 0) '(1 0 0))
(setq huong_12_yoz (angle (trans (nth 3 lst_point_w) 0 1) (trans (nth 4 lst_point_w) 0 1))
 huong_13_yoz (angle (trans (nth 3 lst_point_w) 0 1) (trans (nth 5 lst_point_w) 0 1))
 huong_ab_yoz (angle (trans (nth 0 lst_point_w) 0 1) (trans (nth 1 lst_point_w) 0 1))
 huong_ac_yoz (angle (trans (nth 0 lst_point_w) 0 1) (trans (nth 2 lst_point_w) 0 1))
 )
(command "ucs" "za" '(0 0 0) '(1 0 0))
(setq huong_12_xoz (angle (trans (nth 3 lst_point_w) 0 1) (trans (nth 4 lst_point_w) 0 1))
 huong_13_xoz (angle (trans (nth 3 lst_point_w) 0 1) (trans (nth 5 lst_point_w) 0 1))
 huong_ab_xoz (angle (trans (nth 0 lst_point_w) 0 1) (trans (nth 1 lst_point_w) 0 1))
 huong_ac_xoz (angle (trans (nth 0 lst_point_w) 0 1) (trans (nth 2 lst_point_w) 0 1))
 )
(command "ucs" "na" "r" "save_ucs")
;=====================================================================
(cond
((and 
(equal huong_12_xoy huong_ab_xoy 1e-5) 
(equal huong_12_yoz huong_ab_yoz 1e-5)
(equal huong_12_xoz huong_ab_xoz 1e-5)
)
(cond
((and 
(equal huong_13_xoy huong_ac_xoy 1e-5) 
(equal huong_13_yoz huong_ac_yoz 1e-5)
(equal huong_13_xoz huong_ac_xoz 1e-5)
)
(princ "\nAlign = Copy ! ")
(princ)
)
(t 
(setq pt_phu (mapcar '+ pt_1 (mapcar '- pt_c pt_a))
 pt_phu_w (trans pt_phu 1 0))
(command "ucs" "za" pt_1 pt_2)
(command "rotate" new "" 
(setq base (trans (nth 3 lst_point_w) 0 1))
(- (angle base (trans (nth 5 lst_point_w) 0 1)) (angle base (trans pt_phu_w 0 1)))
)
)
)
)
;========================================================
((and 
(or (equal (+ huong_12_xoy pi) huong_ab_xoy 1e-5) (equal (- huong_12_xoy pi) huong_ab_xoy 1e-5))
(or (equal (+ huong_12_yoz pi) huong_ab_yoz 1e-5) (equal (- huong_12_yoz pi) huong_ab_yoz 1e-5))
(or (equal (+ huong_12_xoz pi) huong_ab_xoz 1e-5) (equal (- huong_12_xoz pi) huong_ab_xoz 1e-5))
)
(setq truc (mapcar '+ pt_1 (mapcar '- pt_c pt_a))
 truc_w (trans truc 1 0))
(setq anh (mapcar '+ pt_1 (mapcar '- pt_b pt_a))
 anh_w (trans anh 1 0))
(command "ucs" "za" pt_1 truc)
(command "rotate" new "" (setq base (trans (nth 3 lst_point_w) 0 1)) pi)
(setq pt_phu2_2d
(polar 
base 
(+ pi (angle base (setq anh_c (trans anh_w 0 1)))) 
(distance base (list (car anh_c) (cadr anh_c)))
)
pt_phu2_w_3d (trans (list (car pt_phu2_2d) (cadr pt_phu2_2d) (last anh_c)) 1 0)
)
(cond
((and 
(equal huong_13_xoy huong_ac_xoy 1e-5) 
(equal huong_13_yoz huong_ac_yoz 1e-5)
(equal huong_13_xoz huong_ac_xoz 1e-5)
)
(princ)
)
((and 
(or (equal (+ huong_13_xoy pi) huong_ac_xoy 1e-5) (equal (- huong_13_xoy pi) huong_ac_xoy 1e-5))
(or (equal (+ huong_13_yoz pi) huong_ac_yoz 1e-5) (equal (- huong_13_yoz pi) huong_ac_yoz 1e-5))
(or (equal (+ huong_13_xoz pi) huong_ac_xoz 1e-5) (equal (- huong_13_xoz pi) huong_ac_xoz 1e-5))
)
(command "ucs" "za" base (mapcar '(lambda (x) (* 0.5 x)) (mapcar '+ (trans pt_phu2_w_3d 0 1) (trans (nth 4 lst_point_w) 0 1))))
(command "rotate" new "" (trans (nth 3 lst_point_w) 0 1) pi)
)
(t 
(command "ucs" "3p" base (trans (nth 5 lst_point_w) 0 1) (trans truc_w 0 1))
(command "rotate" new ""
(setq base (trans (nth 3 lst_point_w) 0 1))
(* -1 (angle base (trans truc_w 0 1)))
)
)
)
)
;==================================================================
(t 
(cond
((and 
(equal huong_13_xoy huong_ac_xoy 1e-5) 
(equal huong_13_yoz huong_ac_yoz 1e-5)
(equal huong_13_xoz huong_ac_xoz 1e-5)
)
(setq pt_phu (mapcar '+ pt_1 (mapcar '- pt_b pt_a))
 pt_phu_w (trans pt_phu 1 0))
(command "ucs" "za" pt_1 pt_3)
(command "rotate" new "" 
(setq base (trans (nth 3 lst_point_w) 0 1))
(- (angle base (trans (nth 4 lst_point_w) 0 1)) (angle base (trans pt_phu_w 0 1)))
)
)
((and 
(or (equal (+ huong_13_xoy pi) huong_ac_xoy 1e-5) (equal (- huong_13_xoy pi) huong_ac_xoy 1e-5))
(or (equal (+ huong_13_yoz pi) huong_ac_yoz 1e-5) (equal (- huong_13_yoz pi) huong_ac_yoz 1e-5))
(or (equal (+ huong_13_xoz pi) huong_ac_xoz 1e-5) (equal (- huong_13_xoz pi) huong_ac_xoz 1e-5))
)
(setq truc (mapcar '+ pt_1 (mapcar '- pt_b pt_a))
 truc_w (trans truc 1 0))
(setq anh (mapcar '+ pt_1 (mapcar '- pt_c pt_a))
 anh_w (trans anh 1 0))
(command "ucs" "za" pt_1 truc)
(command "rotate" new "" (setq base (trans (nth 3 lst_point_w) 0 1)) pi)
(command "ucs" "3p" base (trans (nth 4 lst_point_w) 0 1) (trans truc_w 0 1))
(command "rotate" new ""
(setq base (trans (nth 3 lst_point_w) 0 1))
(* -1 (angle base (trans truc_w 0 1)))
)
)
(t
(setq pt_phu (mapcar '+ pt_1 (mapcar '- pt_b pt_a))
 pt_phu_w (trans pt_phu 1 0)
 pt_phu2 (mapcar '+ pt_1 (mapcar '- pt_c pt_a))
 pt_phu2_w (trans pt_phu2 1 0))
(command "ucs" "3p" pt_1 pt_2 pt_phu)
(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_c (trans pt_phu2_w 0 1)))) 
(distance (list (car base) (cadr base)) (list (car anh_c) (cadr anh_c))))
 pt_phu_3d (list (car pt_phu_2d) (cadr pt_phu_2d) (last anh_c))
 pt_phu_w_3d (trans pt_phu_3d 1 0))
(command "ucs" "za" (trans (nth 3  lst_point_w) 0 1) (trans (nth 4  lst_point_w) 0 1))
(command "rotate" new "" 
(setq base (trans (nth 3 lst_point_w) 0 1))
(- (angle base (trans (nth 5 lst_point_w) 0 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)
(princ)
)
 

Cho mình hỏi lisp bên trên có thể chỉnh sửa lại cho đường kính từ 12 sang 12.8 được không nhỉ. (Cần điền số thập phân phía sau.)

Mình cần điền chính xác đường kính của ống khi vẽ 3D.

Hiện tại chỉ có chạy ống 90 độ, có thể sửa lại đê chạy khi 45 độ hoặc 60 độ không ạ.

 

Chân thành cảm ơn nhiề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

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  

×