首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行AutoLISP文件的脚本

运行AutoLISP文件的脚本
EN

Stack Overflow用户
提问于 2019-05-05 13:40:50
回答 1查看 226关注 0票数 1

我想用这个lisp文件绘制大约1000个带有切线的两个圆圈的形状,它一次画一个形状。

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

请您指导我如何修复我的脚本,或者如何编辑lisp文件,这样我就可以在没有交互输入的情况下绘制所有形状了吗?

下面是我当前的脚本:

代码语言:javascript
复制
ctan
0,0,0
5
0,10,0
10
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-05 14:40:53

问题是,两个脚本& AutoLISP函数的计算都发生在同一个处理器线程中,因此,当您从脚本文件中计算AutoLISP函数时, AutoLISP函数将焦点从脚本中移开,而脚本文件的其余部分将在 AutoLISP函数完成其计算之后被计算为

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

然后,您可以从脚本文件中评估该函数(如果需要的话,可以在多幅绘图上),也可以在另一个AutoLISP程序中计算该函数。

这种职能可能是:

代码语言:javascript
复制
(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程序调用:

代码语言:javascript
复制
(ctan '(0 0 0) 5 '(0 10 0) 10)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55992553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档