BIGAL 发表于 2022-7-5 16:39:25

Tharwat你可能对这个人有一个答案http://forums.augi.com/showthread.php?169852-Any-Program-Method-to-do-it-in-a-better-amp-simplified-way任何程序方法

ronjonp 发表于 2022-7-5 16:42:35

这里有一种快速制作radius托盘的方法(检查输入时没有错误)
(defun _makeradtray (w h r p)
(entmake (list '(0 . "LWPOLYLINE")
       '(100 . "AcDbEntity")
       '(67 . 0)
       '(8 . "E-PWER-CABL-TRAY")
       '(100 . "AcDbPolyline")
       '(90 .
       '(70 . 1)
       '(43 . 0)
       '(38 . 0)
       '(39 . 0)
       (cons 10 p)
       (cons 10 (setq p (list (+ w (car p)) (cadr p))))
       '(42 . 0.414213562373095)
       (cons 10 (setq p (list (+ r (car p)) (- (cadr p) r))))
       (cons 10 (setq p (list (car p) (- (cadr p) h))))
       (cons 10 (setq p (list (- (car p) (+ w (* 2. r))) (cadr p))))
       (cons 10 (setq p (list (car p) (+ (cadr p) h))))
       '(42 . 0.414213562373095)
       (cons 10 (setq p (list (+ r (car p)) (+ (cadr p) r))))
   )
)
)
(_makeradtray
(getdist "\nEnter Width: ")
(getdist "\nEnter Height: ")
(getdist "\nEnter Radius: ")
(getpoint "\nPick a point to place the tray: ")
)

ronjonp 发表于 2022-7-5 16:45:47

代码可以稍微整理一下,但对于图形中的两个示例似乎效果很好。
(defun c:trays (/ _getdist _makeradtray _makechamtray p)
;; RJP - 08.08.2017
(defun _makeradtray (w h r p)
   (entmake (list '(0 . "LWPOLYLINE")
           '(100 . "AcDbEntity")
           '(8 . "E-PWER-CABL-TRAY")
           '(100 . "AcDbPolyline")
           '(90 . 7)
           '(70 . 1)
           (cons 10 p)
           (cons 10 (setq p (list (+ w (car p)) (cadr p))))
           '(42 . 0.414213562373095)
           (cons 10 (setq p (list (+ r (car p)) (- (cadr p) r))))
           (cons 10 (setq p (list (car p) (- (cadr p) h))))
           (cons 10 (setq p (list (- (car p) (+ w (* 2. r))) (cadr p))))
           (cons 10 (setq p (list (car p) (+ (cadr p) h))))
           '(42 . 0.414213562373095)
           (cons 10 (setq p (list (+ r (car p)) (+ (cadr p) r))))
   )
   )
)
(defun _makechamtray (w h c p / sp)
   (setq sp p)
   (entmake (list '(0 . "LWPOLYLINE")
           '(100 . "AcDbEntity")
           '(8 . "E-PWER-CABL-TRAY")
           '(100 . "AcDbPolyline")
           '(90 . 10)
           '(70 . 1)
           (cons 10 p)
           (cons 10 (setq p (list (+ c (car p)) (cadr p))))
           (cons 10 (setq p (polar p (angtof "45") (* c 2))))
           (cons 10 (setq p (list (car p) (+ c (cadr p)))))
           (cons 10 (setq p (list (+ w (car p)) (cadr p))))
           (cons 10 (setq p (list (car p) (- (cadr p) c))))
           (cons 10 (setq p (polar p (angtof "315") (* c 2))))
           (cons 10 (setq p (list (+ c (car p)) (cadr p))))
           (cons 10 (setq p (list (car p) (- (cadr p) h))))
           (cons 10 (setq p (list (- (car p) (- (car p) (car sp))) (cadr p))))
           (cons 10 (setq p (list (car p) (+ (cadr p) h))))
   )
   )
)
(defun _getdist (msg default)
   (cond ((getdist (strcat "\n" msg ": <" (vl-princ-to-string default) ">: ")))
(default)
   )
)
;; Global defaults
(or *trayswidth* (setq *trayswidth* 200))
(or *traysheight* (setq *traysheight* 200))
(or *trayschamfer* (setq *trayschamfer* 75))
(or *traysradius* (setq *traysradius* 100))
(or *traysdefault* (setq *traysdefault* "Radius"))
(initget 0 "Chamfer Radius")
(setq        *traysdefault*
(cond
   ((getkword (strcat "\nPick tray type: <" *traysdefault* ">: "))
   )
   (*traysdefault*)
)
)
(setq *trayswidth* (_getdist "Enter Width" *trayswidth*))
(setq *traysheight* (_getdist "Enter Height" *traysheight*))
(if (= *traysdefault* "Radius")
   (setq *traysradius* (_getdist "Enter Radius" *traysradius*))
   (setq *trayschamfer* (_getdist "Enter Chamfer" *trayschamfer*))
)
(if (setq p (getpoint "\nPick a point to place the tray: "))
   (if        (= *traysdefault* "Radius")
   (_makeradtray *trayswidth* *traysheight* *traysradius* p)
   (_makechamtray *trayswidth* *traysheight* *trayschamfer* p)
   )
)
(princ)
)

BIGAL 发表于 2022-7-5 16:48:57

ronjonp你说得对,我本可以用(setq-pt(polar-pt-ang-dist))为每一个新的pt 1做普林斯,我试图向初学者展示如何计算出一系列点。同样在我发布的示例中,我需要添加一个setvar,以确保我在-90的十进制度数中工作。
 
我确实有一个问题,我知道42码是什么“凸出”,但我有点困惑它如何匹配90度。它被认为是(sqrt 2)-1,可以解释为与下一点成45度角。

mostafa badran 发表于 2022-7-5 16:52:03

抱歉耽搁了,我不能使用动态块,因为所有托盘都是阴影线。

mostafa badran 发表于 2022-7-5 16:56:53

朗琼普,
谢谢你的帮助,这给了一个帮助继续半径类型,我已经创建了倒角类型由我的谦逊的代码。
;m badran
(defun c:tc (/ CHFEX CHFLEN CTW PT1 PT10 PT2 PT3 PT4 PT5 PT6 PT7 PT8 PT9 )
(defun dtr (a)
   (* pi (/ a 180.0))
)
(setq chflen(getdist "\nEnter chamfer length:")
chfex(/ chflen 2)
ctw(getdist "\nEnter T connection width::"))
(setq pt1 (getpoint "\Insert point: ")
pt2 (polar pt1 (dtr 270.0) ctw)
pt3 (polar pt2 (dtr 0.0) chfex)
pt4 (polar pt3 (dtr -45.0)chflen )
pt5 (polar pt4 (dtr 270.0) chfex)
pt6 (polar pt5 (dtr 0.0) ctw)
pt7 (polar pt6 (dtr 90.0) chfex)
pt8 (polar pt7 (dtr 45.0) chflen)
pt9 (polar pt8 (dtr 0.0) chfex)
pt10 (polar pt9 (dtr 90.0) ctw))
(command "pline" pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 pt10 "c")
(princ)
)


ronjonp 发表于 2022-7-5 17:00:09

 
通过将半径添加到当前X值,然后从当前Y值中减去半径来计算45度点(对于右侧半径)。由于点在顺时针方向上被重新定义,因此很容易计算下一个点。
(cons 10 (setq p (list (+ r (car p)) (- (cadr p) r))))

mostafa badran 发表于 2022-7-5 17:03:05

谢谢Tharwat分享。

ronjonp 发表于 2022-7-5 17:05:08

很高兴你把它整理好了

BIGAL 发表于 2022-7-5 17:09:22

Mostafa建议使用一个小的lisp库来处理常见90和45度的所有角度可能更容易。这些是全局值。使用(if(not angs)(load“angs”))则最后一行是(unloadangs),它将所有全局变量设置为零。
 
我试图在弧度所有的时间工作,所以需要一个方向和角度是弧度设置变量夫妇。
 
; angs lisp
(setq a90 (/ pi 2.0)
(setq a270 (* 1.5 pi))
(setq pa (/ pi 4.0))
and so on
(defun unloadangs ()
(setq a90 nil
a270 nil
and so on
)


 

pt2 (polar pt1 (dtr 270.0) ctw)
now
pt2 (polar pt1 a270 ctw)
页: 1 [2]
查看完整版本: 绘制电缆槽T连接