LISP例程格式和comman
大家好,我以前从未编写过LISP例程,我发现自己需要一个没有LISP似乎无法实现的函数,因此我开始了第一次尝试。事情进展得不太顺利。
我需要能够选择两个点,并绘制一个正方形,使用这两个点作为对角点。
我想如果我可以检查两点之间的角度,然后加上或减去45度,我将得到正方形的旋转,然后我可以使用矩形命令来绘制它,通过拾取第一个点,设置旋转,然后拾取第二个点。
我认为代码应该是这样的:
(定义C:正方形(/p1-p2)
(设置q p1(getpoint“\n拾取第一个角:”)
(设置q p2(getpoint“\n拾取相反的角:”))
(设置q rotang(-45(角度p1 p2)))
(命令“RECTANGLE”p1“R”“rotang”p2)
(普林斯)
)
我遇到的第一个问题是,我不知道如何检查两点之间的角度。我知道我可以通过使用DIST命令得到它,值显示为“XY平面中的角度”,但我不知道如何使用该值作为我的角度值。
第二,我甚至不知道我是否在编写代码的正确轨道上。
任何帮助都将不胜感激。
我在Civil 3D 2011工作。 也许这会为你的目标指明方向:
(defun c:square ( / pt2 pt2 ang ) ; Define function and localise variables
(if ; If the following
(and ; Both the statements must return T
(setq pt1 (getpoint "\nSpecify First Point: ")) ; Prompt for first point
(setq pt2 (getpoint "\nSpecify Opposite Corner: " pt1)) ; Prompt for second point
)
(progn
(setq ang (- (angle pt1 pt2) (/ pi 4.))) ; get angle (in rads) and subtract 45 degrees
(command "_.rectangle" "_non" pt1 "_R" (* 180. (/ ang pi)) "_non" pt2) ; Invoke Rectangle command
)
)
(princ) ; Exit Quietly
)
PS>这是一个很好的变量局部化方法,大多数人都忽略了这一点
要扩展,您必须注意OSnap,还可能考虑将CMDECHO切换到0,然后重置。但我们会一步一步来。 值得思考的是,我将这样做:
也许现在它可能比你高一点,但也许这是一个需要努力的方向
谢谢,谢谢,谢谢!我喜欢它!到目前为止,它工作得很好。您为我节省了数小时的手动计算和放置正方形的时间(我有大约4000个正方形)。
PS>谢谢。。。我试着在网上找到任何我能找到的信息和教程,至少我能自己写一些东西,所以我能想出一点格式,但我还有很多东西要学!
哈哈。。。肯定比我高,但我喜欢挑战。而且,我讨厌不知道如何做事。所以,我一定会看看,并试图了解你是如何做到这一点的。 我很乐意帮忙。
关于第一个代码,这是一种“初步”排序,因为在OSnap干扰方面,您将遇到麻烦-可能在向命令函数提供点之前使用“_non”来忽略OSnap。(我会更新代码)。
第二种方法速度更快,您无需担心OSnap,因为它可以绕过所有命令调用,直接将对象添加到图形数据库中。
关于LISP的帮助,我不久前发布了这个帖子,希望你能从中获得一些信息:
http://www.cadtutor.net/forum/showthread.php?49515-有用的LISP链接
李
我一直在使用第二个代码,它工作得很好(我已经做了50组分)。但是,我刚刚得到这组点,我得到了红色的时髦方块。我在相同的点上跑了第一个球,得到了蓝方块。我不知道是什么把它丢在这里了。其余的人用两种方法中的任何一种给我相同的平方。
谢谢你的链接,我期待着查看并了解更多。 我不知道该怎么办。。。嗯,我不确定。
页:
[1]