QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 4916|回复: 10
收起左侧

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

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

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

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

x
编了以下的LISP程序:
6 E: e0 O( \7 S5 ~2 X$ X6 o9 f4 Q8 s(defun c:CCD()
6 u$ t/ P3 Q2 f, K8 y$ ]  (prompt "\n恢復捕捉模式:")
  l; u) R2 }3 d! M2 i6 a3 G  (setvar "osmode" 703)
' j6 K" P8 m; |( m1 c" D)
2 S7 k0 o# I% m! h( F  E7 R: ?  H(defun c:CDD()
2 h0 Y5 M! g' `3 h, I  (prompt "\n取消捕捉模式:")' A( H% d' }; K  t* {+ O$ U
  (setvar "osmode" 0)
: \) E+ w% G7 R) L& o  X1 @4 T)
- Q0 s: Y5 D7 |. I: ?在AUTOCAD2004中运行无任何问题,但在! }+ w* b. h; Q8 b% I0 Q, `9 @* F' F
AUTOCAD2006---AUTOCAD2008中却无法使用,请高手看看问题在哪里???
发表于 2007-6-27 20:58:32 | 显示全部楼层 来自: 中国浙江宁波
为何要定义同样的命令二次?同名函数定义重复,最后加载的函数起作用;
8 V+ r6 t, @; i6 G; x- h4 m- F. d9 w% P设置捕捉模式一般是在程序执行前获得当前设置存储,然后设置自已程序中的捕捉模式,在你的程序执行完后,恢复捕捉模式到程序执行前的状态;
3 J( l3 g& ?9 a' O. D(defun C:CCD()9 B6 L  G7 R$ ?7 k% X
(setq Osnapmode (getvar "OSMODE"));获得当前捕捉模式# f; ]% h; Y0 T! y7 E
(setvar "OSMODE" 703);设置程序中需要的模式
1 g8 t9 R5 T6 _3 V;;your code0 o+ r% m6 }8 a  a, g
(setvar "OSMODE" Osnapmode);恢复初始状态, n4 n( f  b  I" E$ C" p. B1 e% x
);defun
 楼主| 发表于 2007-6-28 08:06:27 | 显示全部楼层 来自: 中国广东东莞
谢谢sealive_leafage 的回贴,可能你误会了我的意思了,这是定义好的两个命令,& [; d% B: y% C# Z$ O1 N0 _4 k
CCD即将捕捉模式定为703(这些都是最常用的,太多的话绘图有迟缓现象);
% C) N% n! m1 N. u) jCDD就是取消捕捉;! d3 ~# R9 b- L
这个程序应该没有问题,我以前用的很好的,只是在装了PCCAD后才出问题的。在没有装PCCAD的系统中运行也是正常的。6 `  d8 n8 k+ \- s1 p
我感到有疑问的地方是:
6 m! p2 }- S$ Z- U7 H我手动设置捕捉模式为703,没有问题,
  o5 F; ?4 Y* o" w; t但用我的程序设置就有问题(另外在未装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 | 显示全部楼层 来自: 中国广东东莞
我是写在另外一个文件里面的,里面有很多的程序,其它的都没有问题,只用其中的几个有问题:8 ^# t  q4 Z( o/ k4 e
;*******************************************************************************0 u+ Y$ N# Z# M
(defun c:CCD()4 H0 u( g6 r& a7 I
  (prompt "\n恢復捕捉模式:")  e6 i1 M9 S5 A
  (setvar "osmode" 703)
/ C& x5 z( W% s2 Q5 ~)
6 s5 Q' C! _4 g1 B2 B! u;*******************************************************************************/ s' k# E; v  G- e, J5 b) c( u/ C3 P
(defun c:CDD()
/ ?3 C) b  f6 z& o3 ?& G  a  (prompt "\n取消捕捉模式:")
. o) s% r* v( f, r* e2 J# U  (setvar "osmode" 0)7 [: U( n8 R) X
)
1 x$ s9 U. `4 `! h! g, n;*******************************************************************************% I  C7 j2 _- D. D
(DEFUN C:er(/ VAR1 VAR2 O A P Q)  ;功能:切換到物體所在layer 9 D3 Q( X$ U. @
  (SETQ VAR1 (GETVAR "BLIPMODE"))1 ^- {1 {$ W$ @2 h* W
  (SETQ VAR2 (GETVAR "CMDECHO"))& l1 Z) b$ ]. |9 W
  (SETVAR "BLIPMODE" 0)9 K9 o& ~3 U1 n0 j
  (SETVAR "CMDECHO"  0)4 w& ~9 j4 g5 F- |
  (PRINC "\n 切換到物體所在層 : "); T- D: f. M' l
  (SETQ O (ENTSEL)). z9 ?$ D; n- e, g- c
  (SETQ A (ENTGET (CAR O))); L7 T2 i, v  V: s0 z# W
  (SETQ P (CDR (ASSOC 8 A)))2 |" o: o$ }. q8 k. [# y8 D
  (SETQ Q (GETVAR "CLAYER"))2 m1 C7 R) |1 |+ W& f
  (IF (= Q P)2 p. G4 R( o+ L  c
      (PRINC "\n CORRENT LAYER,CAN'T FROOZEN!!!!")
4 \) L; U) c- p* A      (COMMAND "_-LAYER" "_s" P "")
; ^+ u& T6 `( S- r* n   )* L* d% k3 K& H, J. e9 b* m( Z
  (SETVAR "BLIPMODE" VAR1)3 t; D; O: a6 o. F# A
  (SETVAR "CMDECHO"  VAR2); C1 t1 m6 H$ y3 y# |
  (PRINC "\nOK!")(PRINC)
" ?2 w4 x/ k) p4 H( ]5 R7 h# s, U( R)
' P. C& |) C+ Q4 J! A8 j;*******************************************************************************
8 K5 G" B! P/ x& }$ ?$ q4 c& ]) M;*******************************************************************************" R2 {  ?# Z* m3 R3 G
另外:5 B' Z7 U" i6 \+ m2 P" W+ |2 A
直接在命令行里运行下边一句:
+ ~3 }9 D$ O2 R1 isetvar "osmode" 7031 T" Y. y+ S* j* }* w% c, F
再确认就可以!/ G. G: X% K' N4 A' b/ v
但是运行; K: y0 F: T- q" \4 n9 X
(setvar "osmode" 703), f, _/ t  T* k/ P
就不行,
% Z% F. {+ t4 E# l郁闷中……
发表于 2007-6-28 20:29:16 | 显示全部楼层 来自: 中国浙江宁波
你是不是在命令行输入CCD时没有执行你的函数?PCCAD不是很熟,你看看它里面有没有命令为CCD,会不会是命令名冲突,你改个名字试试看。
 楼主| 发表于 2007-6-28 20:40:14 | 显示全部楼层 来自: 中国广东东莞
是的,我在命令行输入CCD,CDD,没有执行我的函数,但是我直接在命令行里运行
, b- _% K+ @  s" }: osetvar "osmode" 703
  {# p. A) f( G+ ^: x5 B再确认就可以!. Y( q( U! ]7 F: S
另外我也试过了换其它的命令名,还是一样。, l' _$ c8 U8 i2 G0 f5 A
上面这些程序,在没有装PCCAD的AUTOCAD里面都可以运行,都没有问题(我已经试过,也希望sealive_leafage  7 g; }0 p. b  P5 [3 L
试一下,帮我检查一下)
发表于 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 )

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