QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 5019|回复: 10
收起左侧

[讨论] 关于对象捕捉(LISP程序)的疑惑???

[复制链接]
发表于 2007-6-27 14:57:48 | 显示全部楼层 |阅读模式 来自: 中国广东东莞

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
编了以下的LISP程序:
; i8 {2 @  `$ Y# z: P# [(defun c:CCD()
3 L$ T$ f" t2 a2 r% S  (prompt "\n恢復捕捉模式:")! |5 {5 H4 k, }
  (setvar "osmode" 703)3 e, o- C: F4 a/ [; I4 y2 G
). N; V# M# }5 c0 |
(defun c:CDD(). o* ^( C9 E/ o  R* H
  (prompt "\n取消捕捉模式:")
7 W1 b2 G! o. r5 i9 {! P3 _- O  (setvar "osmode" 0)
3 @# ?: v' V2 ]! |8 Y1 o)( `# b5 R6 y( ?/ e! P- I6 f
在AUTOCAD2004中运行无任何问题,但在
% _+ h+ c6 O1 r. XAUTOCAD2006---AUTOCAD2008中却无法使用,请高手看看问题在哪里???
发表于 2007-6-27 20:58:32 | 显示全部楼层 来自: 中国浙江宁波
为何要定义同样的命令二次?同名函数定义重复,最后加载的函数起作用;) \8 ~5 B4 s# e* q; P9 h
设置捕捉模式一般是在程序执行前获得当前设置存储,然后设置自已程序中的捕捉模式,在你的程序执行完后,恢复捕捉模式到程序执行前的状态;: Z4 A' L: _' U3 j) v9 y
(defun C:CCD()6 x) p8 K( u2 O0 D6 d$ X  H2 ^
(setq Osnapmode (getvar "OSMODE"));获得当前捕捉模式
$ h2 O6 _- m. q(setvar "OSMODE" 703);设置程序中需要的模式  g* z( F2 J" ~1 E) y5 {2 ^5 T' ~; n* u
;;your code
- @+ e3 p8 q! @2 C) f(setvar "OSMODE" Osnapmode);恢复初始状态
' S6 s6 R4 _7 J0 Y5 B6 d);defun
 楼主| 发表于 2007-6-28 08:06:27 | 显示全部楼层 来自: 中国广东东莞
谢谢sealive_leafage 的回贴,可能你误会了我的意思了,这是定义好的两个命令,
1 z& Z$ ]7 p! y7 i  D9 ^3 oCCD即将捕捉模式定为703(这些都是最常用的,太多的话绘图有迟缓现象);4 X1 c; f7 F) i- i0 W6 ]
CDD就是取消捕捉;8 y  c1 l" d. I8 m  C3 v* V. @
这个程序应该没有问题,我以前用的很好的,只是在装了PCCAD后才出问题的。在没有装PCCAD的系统中运行也是正常的。0 L; m/ o5 ]. R1 {
我感到有疑问的地方是:) G  J& H/ p. {8 ^! F( m8 J/ `6 c) M5 M
我手动设置捕捉模式为703,没有问题,2 H" O% w% a0 G  t2 C9 ]7 G& I4 P
但用我的程序设置就有问题(另外在未装PCCAD的CAD中运都没有问题)。
发表于 2007-6-28 08:12:01 | 显示全部楼层 来自: 中国浙江宁波
函数你写在那个文件里(acaddoc.lsp or acad.lsp)?就把这些内容写到PCCAD的安装目录或support中(对应的文件,),因为安装PCCAD后ACAD路径下的启动加载文件被屏蔽了!

评分

参与人数 1三维币 +3 收起 理由
blackbird + 3 技术讨论

查看全部评分

 楼主| 发表于 2007-6-28 20:15:04 | 显示全部楼层 来自: 中国广东东莞
我是写在另外一个文件里面的,里面有很多的程序,其它的都没有问题,只用其中的几个有问题:1 ^& r3 x: k- w) [- x
;*******************************************************************************& j: O; m4 h/ l3 E6 v
(defun c:CCD()- t! z& P7 K$ M9 x3 O
  (prompt "\n恢復捕捉模式:")/ Y+ {# I$ P- w  N
  (setvar "osmode" 703)
1 {7 {0 N2 H- ~9 n)
1 y& m- @) `  g' ]" u; ?- Y;*******************************************************************************
: N4 l; ~/ E% C/ f% T2 s( Q(defun c:CDD()6 ~0 f. ?  f( `6 g% ^" j  h! C3 N9 h
  (prompt "\n取消捕捉模式:")0 n% }! [: @+ E- f  Y% X; V4 q
  (setvar "osmode" 0)
' c$ K8 B2 G* `$ N) k2 c)
2 r5 S+ f# }+ E- I2 X% ]8 D;*******************************************************************************
& V# @0 V4 V+ _' j1 ]. j(DEFUN C:er(/ VAR1 VAR2 O A P Q)  ;功能:切換到物體所在layer & L  I1 N+ K5 J( w1 |& _: M
  (SETQ VAR1 (GETVAR "BLIPMODE"))1 s$ g9 p3 x3 e7 G/ ~
  (SETQ VAR2 (GETVAR "CMDECHO")); F* S1 i* K5 F7 r
  (SETVAR "BLIPMODE" 0)
4 Y) k$ ?  h7 O4 |) Q  (SETVAR "CMDECHO"  0)
) ~+ A7 U+ N7 t% g) v3 B+ G% ?  (PRINC "\n 切換到物體所在層 : ")
7 y: H* k; f2 {7 s( H$ u  (SETQ O (ENTSEL))' C# F3 |0 a4 T0 B+ ?8 f( x
  (SETQ A (ENTGET (CAR O)))9 w. Y# ~# v# K
  (SETQ P (CDR (ASSOC 8 A)))
! Y+ k/ M( Y: k3 t" D* Q) b  (SETQ Q (GETVAR "CLAYER"))( S; I) k+ j+ \' K
  (IF (= Q P)
- k- I$ \$ ?$ n# D      (PRINC "\n CORRENT LAYER,CAN'T FROOZEN!!!!")# s$ h; d/ \1 I
      (COMMAND "_-LAYER" "_s" P "")
' l6 L; V9 g8 ]+ U0 R   )
. V# F6 m$ C  X; D4 q8 @6 X& z  (SETVAR "BLIPMODE" VAR1)% e8 Y' H2 M1 N
  (SETVAR "CMDECHO"  VAR2)
% R7 \" k  V0 I  (PRINC "\nOK!")(PRINC)
5 ^$ Q% k5 s/ p( T( k7 Y)
: f6 ?+ {% M( u! `;*******************************************************************************
9 z* I( K  \8 s- b. \  @;*******************************************************************************
, D8 n6 ^% a9 j  W+ r$ b另外:% b1 A6 L) N( t( Z
直接在命令行里运行下边一句:
* W$ w$ c; e  _# B2 ]3 x7 J$ S+ Hsetvar "osmode" 703
. x1 f/ E$ {) n再确认就可以!+ v; B* Q/ i/ J/ L* q& \) d. W3 w
但是运行5 n4 H% |0 D1 }, X# z9 W6 r
(setvar "osmode" 703)7 ?( g$ a) ^+ @( J. j+ ?
就不行,
% o$ X. X5 i5 W; E1 n; `郁闷中……
发表于 2007-6-28 20:29:16 | 显示全部楼层 来自: 中国浙江宁波
你是不是在命令行输入CCD时没有执行你的函数?PCCAD不是很熟,你看看它里面有没有命令为CCD,会不会是命令名冲突,你改个名字试试看。
 楼主| 发表于 2007-6-28 20:40:14 | 显示全部楼层 来自: 中国广东东莞
是的,我在命令行输入CCD,CDD,没有执行我的函数,但是我直接在命令行里运行
7 ?" L! f! h" Xsetvar "osmode" 703
  R6 Z3 L# ]+ J! K9 Q+ U再确认就可以!: w% g$ `) u3 w
另外我也试过了换其它的命令名,还是一样。! D/ y, O! N* l3 c  c+ m+ ?
上面这些程序,在没有装PCCAD的AUTOCAD里面都可以运行,都没有问题(我已经试过,也希望sealive_leafage  , e1 s6 T1 X7 C$ ]
试一下,帮我检查一下)
发表于 2007-6-29 08:13:03 | 显示全部楼层 来自: 中国浙江宁波
应该问题在PCCAD,ACAD测试过都没问题,你运行时命令行提示什么?
 楼主| 发表于 2007-6-29 11:36:50 | 显示全部楼层 来自: 中国广东东莞
没有任何提示,和ACAD里面运行是一样的,只是没有把捕捉模式改过来!
发表于 2007-6-29 11:44:51 | 显示全部楼层 来自: 中国浙江宁波
把变量cmdecho设置为1就有提示了,你单独把这两个函数写在一个文件里,手动加载试试。
发表于 2007-6-29 21:39:36 | 显示全部楼层 来自: 中国湖北十堰
好高深的问题啊,学习一下-----
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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