运行AutoLISP文件的脚本

时间:2019-05-05 13:40:50

标签: autocad autocad-plugin autolisp

我想使用this lisp file用切线绘制大约1000个带有切线的两个圆的形状。

我写了一个脚本来绘制所有形状(见下文),尽管脚本中有脚本,但它会在第一个参数之后等待下一个参数。

能否请您指导我如何修复脚本或如何编辑lisp文件,以便无需交互输入即可绘制所有形状?

这是我当前的脚本:

ctan
0,0,0
5
0,10,0
10

1 个答案:

答案 0 :(得分:1)

问题在于,对Script和AutoLISP函数的评估都发生在同一处理器线程中,因此,当您从脚本文件中评估AutoLISP函数时, AutoLISP函数将注意力从脚本移开了,并且在 AutoLISP函数完成其评估之后,将评估脚本文件的其余部分。

为解决这个问题,我建议定义一个单独的AutoLISP函数,该函数接受与每个圆的中心和半径相对应的四个参数,并以与我的Circle Tangents应用程序相同的方式构造2D LWPolyline。

然后,您可以从脚本文件中评估该功能(可能需要在多个图形上),也可以从另一个AutoLISP程序中评估该功能。

这样的功能可能是:

(defun ctan ( c1 r1 c2 r2 / d1 d2 a1 a2 zv )
    (if (< (abs (setq d1 (- r1 r2))) (setq d2 (distance c1 c2)))
        (progn
            (setq a1 (atan (sqrt (- (* d2 d2) (* d1 d1))) d1)
                  a2 (angle c1 c2)
                  zv (trans '(0.0 0.0 1.0) 1 0 t)
            )
            (entmake
                (list
                   '(000 . "LWPOLYLINE")
                   '(100 . "AcDbEntity")
                   '(100 . "AcDbPolyline")
                   '(090 . 04)
                   '(070 . 01)
                    (cons 010 (trans (polar c1 (+ a1 a2) r1) 1 zv))
                    (cons 042 (/ (sin (/ (- pi a1) 2.0)) (cos (/ (- pi a1) 2.0))))
                    (cons 010 (trans (polar c1 (- a2 a1) r1) 1 zv))
                    (cons 010 (trans (polar c2 (- a2 a1) r2) 1 zv))
                    (cons 042 (/ (sin (/ a1 2.0)) (cos (/ a1 2.0))))
                    (cons 010 (trans (polar c2 (+ a1 a2) r2) 1 zv))
                    (cons 210 zv)
                )
            )
        )
    )
)

在加载后,您可以使用以下命令从脚本或其他AutoLISP程序进行调用:

(ctan '(0 0 0) 5 '(0 10 0) 10)