明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2544|回复: 7

捕捉开关对程序影响

[复制链接]
发表于 2007-7-20 08:56:00 | 显示全部楼层 |阅读模式

以下程序在捕捉开时不行,在捕捉关时可行,请问如何解决???

(defun c:lyt()


        (VL-LOAD-COM)

        (setq AcadObject (vlax-get-acad-object)

        AcadDocument (vla-get-ActiveDocument AcadObject)

        mSpace (vla-get-ModelSpace AcadDocument)

        )
   (setq p1 (getpoint "\n请输入点:"))
  
   (setq p2 (getpoint "\n请输入点:"))
     
        (setq a1  (distance p1 p2))
          (print p1)
 
       (if(< a1 2000.0)
          (command "line" p1 p2 "")
          (progn
    ;(command "circle" p1 2000)
           ;(command "circle" p2 2000)
           ;(print (/ a1 2000))(print "1")
           (setq c1 (angle p1 p2))
    (setq n (fix (/ a1 2000)))(print n)
            (setq j 1)
    (setq a2  (/ a1 n))
     (repeat (- n 1)
      
     
         
   (setq p3 (polar p1 c1 a2))
          (print p3)
   (command "circle" p3 500 )
  
           (setq p1 p3)
      
      )

          )
        

  )
   
 
 
      )

发表于 2007-7-20 09:37:00 | 显示全部楼层

在程序前面加上

(defun c:lyt()

(setq old (getvar "osmode"))

(setvar "osmode"0)

..................

.................

后面加上

(setvar "osmode" old)

)

发表于 2007-7-20 09:40:00 | 显示全部楼层
楼主,应该一点也不懂lisp吧。
发表于 2007-7-20 10:24:00 | 显示全部楼层
帮你修整了一下。。。
  1. (defun c:lyt (/ ang12 d12 n osm p1 p2 p3)
  2.   (setq osm (getvar "osmode"))
  3.   (setq echo (getvar "cmdecho"))
  4.   (setvar "cmdecho" 0)
  5.   (setvar "osmode" 0)
  6.   (while (setq p1 (getpoint "\n指定第一点<退出>:"))
  7.     (initget 1)
  8.     (if (setq p2  (getpoint p1 "\n指定第二点:")
  9.        d12 (distance p1 p2)
  10. )
  11.       (if (> d12 2000)
  12. (progn
  13.    (setq ang12 (angle p1 p2)
  14.   n     (fix (/ d12 2000))
  15.   d12   (/ d12 n)
  16.    )
  17.    (repeat n
  18.      (setq p3 (polar p1 ang12 d12))
  19.      (command "circle" p3 500)
  20.      (setq p1 p3)
  21.    )
  22. )
  23. (command "line" p1 p2 "")
  24.       )
  25.     )
  26.   )
  27.   (setvar "osmode" osm)
  28.   (setvar "cmdecho" echo)
  29.   (princ "\n程序执行完毕!")
  30.   (princ)
  31. )
 楼主| 发表于 2007-7-21 02:08:00 | 显示全部楼层

谢谢二、三楼的朋友帮忙,三楼的朋友说得对,我真的不懂二次开发,但我真的想学好它,就不知怎么学!!!

我自已为了工作加快也编了一些小程序,但只能自己用,别人用不上,而且修改参数都直接在程序上更改,而不会在输入时变更。

不知各位大侠可否介绍几条好法子或几本好书???

发表于 2007-7-21 08:51:00 | 显示全部楼层

本论坛就有

自己找找吧

发表于 2007-7-21 09:38:00 | 显示全部楼层
对象捕捉设置对程序的影响,这个问题由来已久。

按照正常理解,ACAD应该是可以分辨出此时传进的点位坐标是用户手工在绘图窗口指定,还是在程序中调用command命令。但遗憾的是,ACAD将传进的点位一律按照当前的对象捕捉设置进行点位捕捉操作。这情况在各个版本均为改正。
这显然是不合理的。在自动桌子公司做出修改之前,我们可以通过两种方法来弥补这种缺憾。
一、如2楼所言,代码结构做成这样的:

(defun XXX()

(setq old (getvar "osmode"))

(setvar "osmode"0)

..................

;;代码正文

.................

后面加上

(setvar "osmode" old)

)

二、如果想临时性的关闭捕捉,则可以在点位指定前加入选项 "non"

例如:

(command "_.line" "non" "0,0" "non" "100,100" "")

这样做的结果是,即使当前区域图线再复杂,也能准确在地生成图线来,且没有改变当前捕捉设置。

发表于 2014-10-12 00:33:47 | 显示全部楼层
zml84 发表于 2007-7-21 09:38
对象捕捉设置对程序的影响,这个问题由来已久。按照正常理解,ACAD应该是可以分辨出此时传进的点位坐标是用 ...

真是非常感谢楼主的提问,感谢层主的回答,像我这样的半调子LISP学习使用者,工作中都是自个编些简单的用用..这个问题困扰了我好久了,天天研究,网上查,翻书也没找到原因,今天终于知道了...太感谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 01:30 , Processed in 0.195514 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表