mantoshelis 发表于 2022-7-5 18:15:31

圆角AutoLISP

你好
 
我想在AutoLISP中绕过那个角落。谁能帮我?这是马克的任务。
 
(DEFUN C:Disc()
(setq t1 (getpoint "\n Select first point:"))
(setq t2 (list(+(car t1)10) (+(cadr t1)10)))
(setq t3 (list(+(car t2)38) (cadr t2)))
(setq t4 (list(car t3) (-(cadr t3)50)))
(command "line" t1 t2 t3 t4 ""))
 
http://www.part.lt/img/aa45895139f80ffac001f83f2cfc7a0e162.png

Jef! 发表于 2022-7-5 18:24:43

标准的“圆角”命令怎么样?

mantoshelis 发表于 2022-7-5 18:29:15

 
在大学里,使用AutoLISP是一项任务

Hippe013 发表于 2022-7-5 18:38:16

容易的
 
(defun c:fillet ()
(command "fillet")
)

Jef! 发表于 2022-7-5 18:41:41

嗯,我想它必须在单个函数中。。。?
如果使用命令不是制作lisp的最有效方法,但从学术角度来说,这是一个很好的起点。
您可以使用arc命令。假设我想做一个90度的圆弧,以0,0,0为中心,从坐标5,0到0,5,可以使用以下公式:
(命令“.u弧”“c”“0,0,0”“5,0”“0,5”)。
现在,您要做的是在正确的位置插入arc命令,并将直线2的端点坐标和直线3的起点坐标更改为与圆弧半径相等的长度。
如果需要,你可以要求用户输入半径,将其存储到一个变量中,并使用它进行所需的计算,或者像线的长度一样硬编码。
 
我希望这个提示能帮助你实现你所需要的。

BIGAL 发表于 2022-7-5 18:46:27

您可以使用窗口选项并选择两条线或“F”围栏选项,两者都返回两条线,或者在此处搜索我的自动圆角例程,该例程使用F123.45并针对给定半径自动运行圆角命令。

David Bethel 发表于 2022-7-5 18:55:30

这可能有助于入门:
 


;;;CREATE A FILLET ARC FROM A LIST OF 3 CCW POINTS AND RADIUS

(defun f3p_fil3p (l ra / a1 a2 i1 d1 c1 c2 cn sa ea)
    (setq a1 (angle (nth 1 l) (nth 2 l))
          a2 (angle (nth 1 l) (nth 0 l))
          i1 (if (> a1 a2)
               (- (+ (* 2 pi) a2) a1)
               (- a2 a1))
          d1 (abs (/ ra (/ (sin (* i1 0.5))
                           (cos (* i1 0.5)))))
          c1 (polar (nth 1 l) a1 d1)
          c2 (polar (nth 1 l) a2 d1)
          cn (inters c1 (polar c1 (+ a1 (* pi 0.5)) 1.0)
                     c2 (polar c2 (+ a2 (* pi 0.5)) 1.0) nil)
          sa (angle cn c2)
          ea (angle cn c1))

(entmake (list (cons 0 "ARC")
               (cons 10 cn)
               (cons 40 ra)
               (cons 50 sa)
               (cons 51 ea))))

(defun LM:Clockwise-p ( p1 p2 p3 )
   (< (* (- (carp2) (carp1)) (- (cadr p3) (cadr p1)))
      (* (- (cadr p2) (cadr p1)) (- (carp3) (carp1)))))


;************ TEST BED ***************************************
(defun c:f3p (/ ra p1 p2 p3)

   (initget 7)
   (setq ra (getdist "\nFillet Radius:   "))

   (princ "\nSelect 3 CCW Pts:   ")
   (initget 1)
   (setq p1 (getpoint "\nStart Pt - P1:   "))
   (initget 1)
   (setq p2 (getpoint p1 "\nVertex Pt - P2:   "))
   (grdraw p1 p2 1 3)
   (initget 1)
   (setq p3 (getpoint p2 "\nEnd Pt - P3:   "))
   (grdraw p2 p3 2 3)

   (if (LM:Clockwise-p p1 p2 p3)
       (alert "Ponts Are Not CCW")
       (f3p_fil3p (list p1 p2 p3) ra))

(prin1))

 
 
不久前,李在另一个问题上与此有很多关系。
 
-大卫

BKT 发表于 2022-7-5 18:58:52

由于线条是通过从初始选择点指定点来创建的,那么使用已经创建的点插入代码如何?如果先设置圆角半径,可以执行以下操作:
 
为了使这一点持续有效,我必须在绘制线条和圆角之前关闭OSNAPS。

Lee Mac 发表于 2022-7-5 19:06:01

谢谢David-我有以下信息:
 
不使用Fillet命令的圆角多段线
具有最大半径的圆角多段线

Grrr 发表于 2022-7-5 19:13:02

 
比加尔,你能给这个带栅栏选项的圆角一个链接吗?
页: [1] 2
查看完整版本: 圆角AutoLISP