David Bethel 发表于 2022-7-6 11:44:50

管子斜接端椭圆

我知道我以前做过这件事,但我现在一片空白。
 
最终结果是一个具有给定直径和油管切割角度的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度切割是不允许的,因为这会使一切崩溃

Lee Mac 发表于 2022-7-6 12:05:11

嘿,大卫,
 
试一试:
 

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

David Bethel 发表于 2022-7-6 12:25:49

它是相切的。还是没有找到我的旧手机。
 

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

 
用于管状托盘轨道的斜接端-大卫

Lee Mac 发表于 2022-7-6 12:50:44

不错,大卫
页: [1]
查看完整版本: 管子斜接端椭圆