AIberto 发表于 2022-7-5 22:28:27

再次绘制圆

嗨,亲爱的朋友。
看:

1步。拾取一条线(或多段线),输入偏移距离。
2步骤。拾取一条线(或多段线),输入偏移距离。
3步骤。用中心线画一个圆,中心线的图层名为“cen”
4步骤。选择内部或外部
非常感谢!

Lee Mac 发表于 2022-7-5 22:33:55

我们不是刚写了那个程序吗?
 
http://www.cadtutor.net/forum/showthread.php?88556-用多边形绘制圆

AIberto 发表于 2022-7-5 22:36:40

 
很抱歉李
我刚刚测试了你的代码,很好!非常感谢!!!
你能帮我处理这条线吗。再次感谢。

Tharwat 发表于 2022-7-5 22:39:35

我看不出这条线和前一条有什么不同?

pBe 发表于 2022-7-5 22:43:50

我猜OP想要的是“选择一个角落”并单独为那个角落创建“thingy”。等等,我可能错了

AIberto 发表于 2022-7-5 22:45:58

 
塔尔瓦特。这是不同的。
 

 
不一定是闭合对象,也不一定是多边形。
偏移距离不同。(d1和d2),
需要两个选择,(选择1和选择2)

AIberto 发表于 2022-7-5 22:48:29

这只是画一个圆。绘制完成时。不要退出。可以画下一个。直到按下“ESC”键。

Tharwat 发表于 2022-7-5 22:52:58

试试这个阿尔贝托,让我知道。
 

(defun c:Test (/ _line _screw s1 s2 l a p)
;;        Author: Tharwat                ;;
;;        Date: 09.09.2014        ;;
(defun _line (p q)
   (entmakex (list '(0 . "LINE") (cons 8 "cen") (cons 62 4) (cons 10 p) (cons 11 q)))
)
(defun _screw (pt r)
   (mapcar '(lambda (p)
            (entmakex (list '(0 . "CIRCLE") (cons 10 p) (cons 40 r)))
            (_line (polar p 0. (* r 1.2)) (polar p pi (* r 1.2)))
            (_line (polar p (* pi 1.5) (* r 1.2)) (polar p (* pi 0.5) (* r 1.2)))
            )
         (list pt)
   )
)
(while (and (setq s1 (entsel "\n Pick Left side line :"))
             (wcmatch (cdr (assoc 0 (entget (car s1)))) "LINE,LWPOLYLINE")
             (setq s2 (entsel "\n Pick Right side line :"))
             (wcmatch (cdr (assoc 0 (entget (car s2)))) "LINE,LWPOLYLINE")
             (setq p (getpoint "\n Specify Corner point of the two side :"))
             (setq *dist1* (cond ((getdist (strcat "\n Specify Left distance < "
                                                   (rtos (if *dist1*
                                                         *dist1*
                                                         (setq *dist1* 1.0)
                                                         )
                                                         2
                                                         2
                                                   )
                                                   " > :"
                                           )
                                  )
                                 )
                                 (*dist1*)
                           )
             )
             (setq *dist2* (cond ((getdist (strcat "\n Specify Right distance < "
                                                   (rtos (if *dist2*
                                                         *dist2*
                                                         (setq *dist2* 1.0)
                                                         )
                                                         2
                                                         2
                                                   )
                                                   " > :"
                                           )
                                  )
                                 )
                                 (*dist2*)
                           )
             )
             (setq *rad* (cond ((getdist (strcat "\n Diameter of Circle < "
                                                 (rtos (if *rad*
                                                         *rad*
                                                         (setq *rad* 1.0)
                                                       )
                                                       2
                                                       2
                                                 )
                                                 " > :"
                                       )
                              )
                               )
                               (*rad*)
                         )
             )
      )
   (progn (setq l (mapcar 'vlax-curve-getclosestpointto (list (car s1) (car s2)) (list (cadr s1) (cadr s2)))
                a (mapcar 'angle (list p p) (list (car l) (cadr l)))
          )
          (_screw (polar (polar p (car a) *dist2*) (cadr a) *dist1*) (/ *rad* 2.))
   )
)
(princ)
)(vl-load-com)

AIberto 发表于 2022-7-5 22:55:59

 
非常感谢!塔尔瓦特。
我很抱歉!很抱歉我没说清楚。
我想按常规输入圆的半径,而不是固定值。

Tharwat 发表于 2022-7-5 22:57:26

 
没问题,我修改了常规,试着让我知道。
 
注意:如果你想取消程序的进程,只需点击回车键或空格键,这比Esc键要好,以避免出现错误消息。
页: [1] 2
查看完整版本: 再次绘制圆