管子斜接端椭圆
我知道我以前做过这件事,但我现在一片空白。最终结果是一个具有给定直径和油管切割角度的3DPOLY椭圆:
(initget 6)
(setq d (getdist "\nTube Diameter <1>: "))
(or d (setq d 1))
(initget 1)
(setq l (getangle "\nEnd Angle: "))
(initget 6)
(setq s (getint "\nNumber Of Tube Segments <16>: "))
(or s (setq s 16))
(setq i (/ (* pi 2) s) ; angle increase per segment
a 0 ; start angle 0
ll nil) ; point list nil
(repeat (1+ s)
(setq ll
(cons
(list (* (cos a) d 0.5)
(* (sin a) d 0.5)
(* d 0.5 (sin a) (cos l)));;;HERE IS THE PROBLEM CHILD
ll)
a (+ a i)))
(command "_.3DPOLY")
(foreach p ll (command p))
(command "")
可能我需要的是切线,而不是正弦。
180度或0度切割是不允许的,因为这会使一切崩溃 嘿,大卫,
试一试:
(initget 6)
(setq d (getdist "\nTube Diameter <1>: "))
(or d (setq d 1))
(initget 1)
(setq l (getangle "\nEnd Angle: "))
(initget 6)
(setq s (getint "\nNumber Of Tube Segments <16>: "))
(or s (setq s 16))
(setq i (/ (* pi 2) s) ; angle increase per segment
a 0 ; start angle 0
ll nil) ; point list nil
(repeat (1+ s)
(setq ll
(cons
(list (* (cos a) d 0.5)
(* (sin a) d 0.5)
(* d 0.5 (sin a) (sin l)));;;HERE IS THE PROBLEM CHILD
ll)
a (+ a i)))
(command "_.3DPOLY")
(foreach p ll (command p))
(command "")
它是相切的。还是没有找到我的旧手机。
(defun c:mitertub (/ d l r x s i a rl ll vl)
(defun tan (z / cosz)
(if (zerop (setq cosz (cos z)))
9.7e307
(/ (sin z) cosz)))
(initget 6)
(setq d (getdist "\nTube Diameter <1>: "))
(or d (setq d 1))
(initget 1)
(setq l (getangle "\nLeft End Angle -89.9 to +89.9: "))
(initget 1)
(setq r (getangle "\nRight End Angle -89.9 to +89.9: "))
(initget 7)
(setq x (getdist "\nTube Centerline Length: "))
(initget 6)
(setq s (getint "\nNumber Of Tube Segments <16>: "))
(or s (setq s 16))
;;;INITIATE ANGLE VARIABLES
(setq i (/ (* pi 2) s)
a 0)
;;;RIGHT AND LEFT END LISTS
(repeat (1+ s)
(setq rl (cons (trans (list (* (cos a) d 0.5)
(* (sin a) d 0.5)
(* d 0.5 (sin a) (tan r)))
0 '(1 0 0)) rl)
ll (cons (trans (list (* (cos a) d 0.5)
(* (sin a) d 0.5)
(* d 0.5 (sin a) (tan l)))
0 '(1 0 0)) ll)
a (+ a i)))
;;;CREATE THE MESH LIST
(setq vl (list (list 0 0 0)
(last ll)
(list (car (last rl))
(- (+ (cadr (last rl)) x))
(caddr (last rl)))
(list 0 (- x) 0)))
(while ll
(setq vl (cons (list 0 0 0) vl)
vl (cons (car ll) vl)
vl (cons (list (car (car rl))
(- (+ (cadr (car rl)) x))
(caddr (car rl))) vl)
vl (cons (list 0 (- x) 0) vl)
ll (cdr ll)
rl (cdr rl)))
;;;MAKE THE MESH
(entmake (list (cons 0 "POLYLINE")
(cons 10 (list 0 0 0))
(cons 66 1)(cons 8 "3D")
(cons 70 16)
(cons 71 (1+ s))
(cons 72 4)))
(foreach v vl
(entmake (list (cons 0 "VERTEX")(cons 8 "3D")
(cons 10 v)
(cons 70 64))))
(entmake (list (cons 0 "SEQEND")(cons 8 "3D")))
(prin1))
用于管状托盘轨道的斜接端-大卫
不错,大卫
页:
[1]