复制Dist命令
这件事让我抓狂,所以我希望这里的人能给我一个解决方案。我在这里使用lisp例程来标注管道尺寸。
基本上,程序会提示用户选择两个点。然后,它计算这两个点之间的距离,并在两个初始点之间插入一个具有在中心点格式化尺寸的块。然后,程序将第二个点保存为第一个点,然后循环并要求另一个点进行标注。
问题是,我希望程序在第一个点和光标之间绘制一条重影(“抖动”)线,同时用户决定下一个要拾取的点(就像dist命令一样)。
这是症结所在:
我知道getdistance函数通常会为我处理这个问题,但我认为我无法使用它。相反,我调用了两次getpoint函数,然后使用距离函数计算两点之间的距离。我必须这样做的原因是允许程序执行我之前描述的循环。我需要将输入的第二个点保存为第一个点,以便程序可以在接近开始的地方循环,并请求新的第二个点。getdistance函数只返回一个数字,而不是一个点,因此使用getdistance函数可以防止我需要的循环功能。
下面是一些针对ya的伪ish代码(实际程序大约有250行):
(setq点1(getpoint“选择点”))
(而(=1 1)
(setq点2(getpoint“选择另一个点”))
(setq长度(距离点1点2))
(InsertBlockWithLengthBetweenPoints)
(setq点1点2)
);虽然
你可以看到,如果我使用getdistance函数,我将无法在漂亮的无限while循环中循环。
我曾想过做一些复杂的事情,比如使用grdraw和grread或grvecs来创建重影线,但我不能很好地做到这一点,因为这些函数有点难以使用。也许有一个我不知道的可视化lisp函数可以帮我解决这个问题?
有什么想法吗? 大概
(setq point2 (getpoint "select another point" point1)
像这样的?
(defun c:test(/ p1 p2)
(setvar "errno" 0) ; must pre set the errno to 0
(setqp1 nil)
(while
(cond
((null p1)
(setq p1 (getpoint "\nSelect first point."))
)
((= (getvar "errno") 52) ; exit if user pressed ENTER
nil ; exit loop
)
((setq p2 (getpoint p1 "\nSelect next point."))
;;do you block insert
(setq p1 p2)
)
)
)
(princ)
) 哈!当然我完全忘记了你可以这样指定一个基点。
谢谢大家的简单回答!
页:
[1]