捕捉开关对程序影响
<p>以下程序在捕捉开时不行,在捕捉关时可行,请问如何解决???</p><p></p><p>(defun c:lyt()</p><p><br/> (VL-LOAD-COM)</p><p> (setq AcadObject (vlax-get-acad-object)</p><p> AcadDocument (vla-get-ActiveDocument AcadObject)</p><p> mSpace (vla-get-ModelSpace AcadDocument)</p><p> )<br/> (setq p1 (getpoint "\n请输入点:"))<br/> <br/> (setq p2 (getpoint "\n请输入点:"))<br/> <br/> (setq a1 (distance p1 p2))<br/> (print p1)<br/> <br/> (if(< a1 2000.0)<br/> (command "line" p1 p2 "")<br/> (progn<br/> ;(command "circle" p1 2000)<br/> ;(command "circle" p2 2000)<br/> ;(print (/ a1 2000))(print "1")<br/> (setq c1 (angle p1 p2))<br/> (setq n (fix (/ a1 2000)))(print n)<br/> (setq j 1)<br/> (setq a2 (/ a1 n))<br/> (repeat (- n 1)<br/> <br/> <br/> <br/> (setq p3 (polar p1 c1 a2))<br/> (print p3)<br/> (command "circle" p3 500 )<br/> <br/> (setq p1 p3)<br/> <br/> )</p><p> )<br/> </p><p> )<br/> <br/> <br/> <br/> )<br/></p> <p>在程序前面加上</p><p>(defun c:lyt()</p><p>(setq old (getvar "osmode"))</p><p>(setvar "osmode"0)</p><p>..................</p><p>.................</p><p>后面加上</p><p>(setvar "osmode" old)</p><p>)</p><p></p> 楼主,应该一点也不懂lisp吧。 帮你修整了一下。。。(defun c:lyt (/ ang12 d12 n osm p1 p2 p3)
(setq osm (getvar "osmode"))
(setq echo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(while (setq p1 (getpoint "\n指定第一点<退出>:"))
(initget 1)
(if (setq p2(getpoint p1 "\n指定第二点:")
d12 (distance p1 p2)
)
(if (> d12 2000)
(progn
(setq ang12 (angle p1 p2)
n (fix (/ d12 2000))
d12 (/ d12 n)
)
(repeat n
(setq p3 (polar p1 ang12 d12))
(command "circle" p3 500)
(setq p1 p3)
)
)
(command "line" p1 p2 "")
)
)
)
(setvar "osmode" osm)
(setvar "cmdecho" echo)
(princ "\n程序执行完毕!")
(princ)
)
<p>谢谢二、三楼的朋友帮忙,三楼的朋友说得对,我真的不懂二次开发,但我真的想学好它,就不知怎么学!!!</p><p>我自已为了工作加快也编了一些小程序,但只能自己用,别人用不上,而且修改参数都直接在程序上更改,而不会在输入时变更。</p><p>不知各位大侠可否介绍几条好法子或几本好书???</p> <p>本论坛就有</p><p>自己找找吧</p> 对象捕捉设置对程序的影响,这个问题由来已久。<br/><br/>按照正常理解,ACAD应该是可以分辨出此时传进的点位坐标是用户手工在绘图窗口指定,还是在程序中调用command命令。但遗憾的是,ACAD将传进的点位一律按照当前的对象捕捉设置进行点位捕捉操作。这情况在各个版本均为改正。<br/>这显然是不合理的。在自动桌子公司做出修改之前,我们可以通过两种方法来弥补这种缺憾。<br/>一、如2楼所言,代码结构做成这样的:<p>(defun XXX()</p><p>(setq old (getvar "osmode"))</p><p>(setvar "osmode"0)</p><p>..................</p><p>;;代码正文<br/></p><p>.................</p><p>后面加上</p><p>(setvar "osmode" old)</p><p>)</p><p>二、如果想临时性的关闭捕捉,则可以在点位指定前加入选项 "non"</p><p>例如:</p><p>(command "_.line" "non" "0,0" "non" "100,100" "")</p><p>这样做的结果是,即使当前区域图线再复杂,也能准确在地生成图线来,且没有改变当前捕捉设置。<br/></p> zml84 发表于 2007-7-21 09:38 static/image/common/back.gif
对象捕捉设置对程序的影响,这个问题由来已久。按照正常理解,ACAD应该是可以分辨出此时传进的点位坐标是用 ...
真是非常感谢楼主的提问,感谢层主的回答,像我这样的半调子LISP学习使用者,工作中都是自个编些简单的用用..这个问题困扰了我好久了,天天研究,网上查,翻书也没找到原因,今天终于知道了...太感谢了
页:
[1]