我想用AutoLisp创建一个简单的“旋转”命令,所以这是我写的代码:
(defun C:myfunc()
(setq p1 (getpoint "\nPick first POINT on the screen:\n"))
(setq p2 (getpoint "\nPick second POINT on the screen:\n"))
(command "line" p1 p2 "")
(setq ss1 (ssget p2))
(command "rotate" ss1 p2 "90" "")
(princ )
)
我插入两个点,p1和p2并创建一条连接它们的线。之后我创建了ss1对象,即p1-p2行。最后,我尝试将基线从基点p2旋转90度。
我在AutoCad中插入代码,但是它不是创建旋转的行,而是要求手动插入基点和角度,所以我想command "rotate" ...
行存在问题。
任何建议都将不胜感激。
答案 0 :(得分:2)
从我在网上看到的,你有两个问题。
ROTATE
不会选择选择集,而是实体名称
在旋转点之前缺少额外的""
。
(defun C:myfunc()
(setq p1 (getpoint "\nPick first POINT on the screen:\n"))
(setq p2 (getpoint "\nPick second POINT on the screen:\n"))
(command "line" p1 p2 "")
(setq ss1 (ssget p2))
(command "rotate" (entlast) "" p2 "90")
(princ )
)
参考:AutoLISP: Rotate Multiple Objects Around Their Base Point
作为旁注,通常可以帮助我手动尝试命令,以确保您使用正确的数据/值响应所有正确的提示。
答案 1 :(得分:1)
我建议使用以下简化代码:
(defun c:myfunc ( / p1 p2 )
(if
(and
(setq p1 (getpoint "\nPick first POINT on the screen:"))
(setq p2 (getpoint "\nPick second POINT on the screen:" p1))
)
(command "_.line" "_non" p1 "_non" p2 "" "_.rotate" (entlast) "" "_non" p2 90)
)
(princ)
)
这会在提示时考虑空用户输入,在第二个点提示时使用橡皮筋,在向命令提供点参数时允许活动的对象捕捉模式(通过使用“_non”),以及允许使用非英语版本的AutoCAD(通过使用下划线),并可能重新定义命令(通过使用“。”命令前缀)。
暂时将CMDECHO系统变量设置为0可以进一步改善这一点,以抑制命令行回显。