lyt0623 发表于 2007-7-20 08:56:00

捕捉开关对程序影响

<p>以下程序在捕捉开时不行,在捕捉关时可行,请问如何解决???</p><p></p><p>(defun c:lyt()</p><p><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VL-LOAD-COM)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq AcadObject (vlax-get-acad-object)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcadDocument (vla-get-ActiveDocument AcadObject)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mSpace (vla-get-ModelSpace AcadDocument)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (setq p1 (getpoint "\n请输入点:"))<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; (setq p2 (getpoint "\n请输入点:"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq a1&nbsp; (distance p1 p2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (print p1)<br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if(&lt; a1 2000.0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "line" p1 p2 "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp; ;(command "circle" p1 2000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;(command "circle" p2 2000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;(print (/ a1 2000))(print "1")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq c1 (angle p1 p2))<br/>&nbsp;&nbsp;&nbsp; (setq n (fix (/ a1 2000)))(print n)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq j 1)<br/>&nbsp;&nbsp;&nbsp; (setq a2&nbsp; (/ a1 n))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (repeat (- n 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp; (setq p3 (polar p1 c1 a2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (print p3)<br/>&nbsp;&nbsp; (command "circle" p3 500 )<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p1 p3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>&nbsp; )<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;<br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/></p>

phoenixdjq 发表于 2007-7-20 09:37:00

<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>

carrot1983 发表于 2007-7-20 09:40:00

楼主,应该一点也不懂lisp吧。

carrot1983 发表于 2007-7-20 10:24:00

帮你修整了一下。。。

(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)
)

lyt0623 发表于 2007-7-21 02:08:00

<p>谢谢二、三楼的朋友帮忙,三楼的朋友说得对,我真的不懂二次开发,但我真的想学好它,就不知怎么学!!!</p><p>我自已为了工作加快也编了一些小程序,但只能自己用,别人用不上,而且修改参数都直接在程序上更改,而不会在输入时变更。</p><p>不知各位大侠可否介绍几条好法子或几本好书???</p>

phoenixdjq 发表于 2007-7-21 08:51:00

<p>本论坛就有</p><p>自己找找吧</p>

zml84 发表于 2007-7-21 09:38:00

对象捕捉设置对程序的影响,这个问题由来已久。<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>

亻亭用 发表于 2014-10-12 00:33:47

zml84 发表于 2007-7-21 09:38 static/image/common/back.gif
对象捕捉设置对程序的影响,这个问题由来已久。按照正常理解,ACAD应该是可以分辨出此时传进的点位坐标是用 ...

真是非常感谢楼主的提问,感谢层主的回答,像我这样的半调子LISP学习使用者,工作中都是自个编些简单的用用..这个问题困扰了我好久了,天天研究,网上查,翻书也没找到原因,今天终于知道了...太感谢了
页: [1]
查看完整版本: 捕捉开关对程序影响