Arin9916 发表于 2022-7-6 07:45:04

关于圆角lisp的问题


 
 
您好,谁总是在这里学习Lisp程序。圆角相关问题。我想更改多段线,如图所示。Lisp的功能是可视化的,而不是可用的命令?
感谢您的关注。

MSasu 发表于 2022-7-6 08:27:47

不确定是否真的需要AutoLISP例程-请检查\u FILLET命令的“多段线”选项。您是否使用了AutoCAD的本地化版本?

Arin9916 发表于 2022-7-6 08:51:20

这是我想要的样品。。
 
如果角度是90度,没有问题。
 
但若不是90dregree,那个就是多段线的奇怪形状
 
我认为变量p4 p5是错误的,但不能计算点。。是否可以使用visual lisp(非命令圆角函数)
我是韩国人cad版AUTOCAD 2007
 

(defun c:aa
   ( / r o b p1 p2 p3 p4 p5

       _pt->cen
       _tan
       _lwpoly
       _GetBulge

       LM:Clockwise
   )

   (defun _pt->cen ( p1 p2)
       (mapcar '(lambda (a b) (* 0.5 (+ a b))) p1 p2)
   )

   (defun _tan ( x )
       (if (not (equal 0. (cos x) 1e-) (/ (sin x) (cos x)))
   )

   (defun _lwpoly ( lst cls )
       (vlax-ename->vla-object
         (entmakex
               (append
                   (list
                     (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")
                     (cons 100 "AcDbPolyline") (cons 90 (length lst))
                     (cons 70 cls)
                   )
                   (mapcar '(lambda (p) (cons 10 (trans p 1 0)))lst)
               )
         )
       )
   )

   (defun LM:Clockwise ( p1 p2 p3 )
       (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)
   )

   (defun _GetBulge ( p1 p2 r / c a l p )
       (setq c (_pt->cen p1 p2)
             a (- (angle p1 p2) (* 0.5 pi))
             l (sqrt (abs (- (* r r) (* (distance p1 c) (distance p1 c)))))
             p (polar c a l)
       ) (_tan (* (rem (- (angle p p2) (angle p p1)) pi) 0.25))
   )

   (setq p1 (getpoint "\n1st point :")
         p2 (getpoint p1 "\n2nd point :")
         p3 (getpoint p2 "\n3rd point :")
         r(getreal "\nFillet Radius :")
         p4 (polar p2 (angle p2 p1) r)
         p5 (polar p2 (angle p2 p3) r)
   )

   (setq o (_lwpoly (list p1 p4 p5 p3) 0)
         b (_Getbulge p4 p5 r)
   )
   (if (LM:clockwise p1 p2 p3)
       (setq b (- (abs b)))
       (setq b (abs b))
   )
   (vla-setbulge o 1 b)
   b
)(vl-load-com)
页: [1]
查看完整版本: 关于圆角lisp的问题