QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
编了以下的LISP程序:
7 }& F% C4 {" x, j8 J2 Y(defun c:CCD()
* X: O+ M) |2 t1 \6 ~  (prompt "\n恢復捕捉模式:")
0 o1 j( L8 L; o# P' k  (setvar "osmode" 703)
, E: ^7 k9 A" i6 {  G2 T7 j)
/ c" L! T5 E" T4 p7 j9 r* E(defun c:CDD()$ \% }* `0 h1 `: q& j$ F3 Z* J& H
  (prompt "\n取消捕捉模式:")
: X2 k2 u* z8 {5 r1 h0 n& J/ d. b6 Y  (setvar "osmode" 0)
) `/ i& \( S  {3 q)- O, Q7 c8 q- V0 g2 D
在AUTOCAD2004中运行无任何问题,但在
+ U8 }9 o0 {0 [' Y/ u; u2 `; xAUTOCAD2006---AUTOCAD2008中却无法使用,请高手看看问题在哪里???
发表于 2007-6-27 20:58:32 | 显示全部楼层 来自: 中国浙江宁波
为何要定义同样的命令二次?同名函数定义重复,最后加载的函数起作用;* ~5 r) l7 o5 a  v9 u  R6 {
设置捕捉模式一般是在程序执行前获得当前设置存储,然后设置自已程序中的捕捉模式,在你的程序执行完后,恢复捕捉模式到程序执行前的状态;
, h+ {$ N. e8 j& v/ q! H6 D(defun C:CCD()
' s) ~0 j: V, Q1 F# O9 O/ D" i(setq Osnapmode (getvar "OSMODE"));获得当前捕捉模式& Y7 M6 Q* U# v2 }' W: v( I
(setvar "OSMODE" 703);设置程序中需要的模式
4 e4 |' e7 S" s9 A) M! s" @8 c;;your code( x- Y* r5 R' P/ P
(setvar "OSMODE" Osnapmode);恢复初始状态% ?/ J# `" L9 v9 Y! Q) C$ _
);defun
 楼主| 发表于 2007-6-28 08:06:27 | 显示全部楼层 来自: 中国广东东莞
谢谢sealive_leafage 的回贴,可能你误会了我的意思了,这是定义好的两个命令,7 S7 U( z+ y! X7 a
CCD即将捕捉模式定为703(这些都是最常用的,太多的话绘图有迟缓现象);
4 B3 C2 v7 e8 i/ cCDD就是取消捕捉;( c, J- g0 a% _4 G/ {7 W  n( z9 |) D
这个程序应该没有问题,我以前用的很好的,只是在装了PCCAD后才出问题的。在没有装PCCAD的系统中运行也是正常的。, N) d! v+ h0 `) V5 ?. W; n3 }! ^
我感到有疑问的地方是:
2 y; P% r0 Q7 k. [% W& p8 J3 _我手动设置捕捉模式为703,没有问题,5 \* F2 t5 x. n+ s6 M/ p1 N
但用我的程序设置就有问题(另外在未装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 | 显示全部楼层 来自: 中国广东东莞
我是写在另外一个文件里面的,里面有很多的程序,其它的都没有问题,只用其中的几个有问题:) S7 o* c9 m9 I3 x6 b, z
;*******************************************************************************1 h; B) r* F* i0 ]5 Z% d. x4 [
(defun c:CCD()% g3 ^- v* x) T$ M: x+ L1 p9 B( Z
  (prompt "\n恢復捕捉模式:")* x$ o& Z" l& z4 F# a" r) ?* M" I
  (setvar "osmode" 703)
" f7 }% r% g, _% Q% R0 z, Q3 P)- ]3 a9 N( ?7 k- }  c, I5 O7 E
;*******************************************************************************& m/ l$ K  z) [* h5 ~4 b5 c
(defun c:CDD()& T: _: m6 Y. \9 b4 B8 X
  (prompt "\n取消捕捉模式:")& U, ~% e- i9 }6 T" {
  (setvar "osmode" 0)
; f8 v2 c  ?$ d- j  \& T)7 y/ d, c3 L1 H7 `( }' M
;*******************************************************************************
) l/ q* O/ r. l7 i& g$ K(DEFUN C:er(/ VAR1 VAR2 O A P Q)  ;功能:切換到物體所在layer
& {$ `6 t( c2 _  @3 \  (SETQ VAR1 (GETVAR "BLIPMODE"))
. e7 e$ H" s7 G0 \+ M  (SETQ VAR2 (GETVAR "CMDECHO"))- m8 L0 c; x5 x1 j8 G( ~5 B
  (SETVAR "BLIPMODE" 0). e" s: U, a3 M% C0 k# Z
  (SETVAR "CMDECHO"  0)
0 U. \; O6 f! u  (PRINC "\n 切換到物體所在層 : ")  l* z* n0 I6 i' M! Q' ]
  (SETQ O (ENTSEL))
! E" \: F* t2 h3 K  (SETQ A (ENTGET (CAR O)))
, j8 D* T. U* L" f! G  (SETQ P (CDR (ASSOC 8 A)))
/ O2 `* ]* r1 m& P  (SETQ Q (GETVAR "CLAYER"))
+ E) A" }& Q% U# V% |4 P  (IF (= Q P)
( g0 P, K# E- o3 G      (PRINC "\n CORRENT LAYER,CAN'T FROOZEN!!!!")
9 c0 W+ i% L* w, N: L      (COMMAND "_-LAYER" "_s" P "")
9 ?! c; Y  v8 ]+ O! Y: _! C   )) B# ^( N3 G+ `
  (SETVAR "BLIPMODE" VAR1)" ~+ \* h! u  E4 h  ^5 V  N6 v
  (SETVAR "CMDECHO"  VAR2)
* s7 q0 ?; D+ n; }& J/ Y  (PRINC "\nOK!")(PRINC)! T. |/ u& }9 e" b
)
$ M. J' M# a5 u* [;*******************************************************************************
7 g: h2 K3 T+ ?- _;*******************************************************************************$ ]# G( Z, \4 Y$ J6 ~& M' R+ n. i
另外:) W$ v+ E: ]! w4 o# k3 V4 k$ h
直接在命令行里运行下边一句:
  o' u  b8 p1 S4 t6 esetvar "osmode" 703
5 d. w/ W( f2 ]1 N, T) V& R再确认就可以!) @1 M4 r5 |# K( y! ~8 M# X2 d
但是运行
+ `3 R0 o# D" _8 Z1 q+ R(setvar "osmode" 703)0 [- ?& X& t' T" @. ?1 D2 W
就不行,
9 @1 \; ?: d7 W! a, }3 ^0 ~' e郁闷中……
发表于 2007-6-28 20:29:16 | 显示全部楼层 来自: 中国浙江宁波
你是不是在命令行输入CCD时没有执行你的函数?PCCAD不是很熟,你看看它里面有没有命令为CCD,会不会是命令名冲突,你改个名字试试看。
 楼主| 发表于 2007-6-28 20:40:14 | 显示全部楼层 来自: 中国广东东莞
是的,我在命令行输入CCD,CDD,没有执行我的函数,但是我直接在命令行里运行
) {4 G; k. f( y/ ?4 Ksetvar "osmode" 703
1 |! M6 ^9 U" w: a% G" C+ T6 \再确认就可以!
1 G- k: A( F8 \/ [8 x2 k另外我也试过了换其它的命令名,还是一样。
) _, E7 V* |8 m  A9 V上面这些程序,在没有装PCCAD的AUTOCAD里面都可以运行,都没有问题(我已经试过,也希望sealive_leafage  
+ i& y) c8 m( k  j# u试一下,帮我检查一下)
发表于 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 )

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