- UID
- 110608
- 积分
- 328
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-3-7
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
CAD的几个命令,可以在执行命令的时候,动态显示.
可以实时看到显示效果,实在是众编程者所要的那种效果.
这种效果,用OBJECTARX来实现是比较简单的.
不过用AUTOLISP实现起来就有点吃力了.
因为要不断的entmod实体,实在是比较慢,而且会卡.一闪一闪的.
今天发现一个现像,我的用移动命令的时候,把东西移动到标注上,不小心,死了.
结果CAD死了.我点了保存文件(2002可以保护为新的文件,所以就保存了).
又得重新开CAD,打开原来的图,看看,还差好多.想想还是修复一下算了.
还好能用,只查出了一个错误就好了.
什么,有一个错误,什么错误?速速报来!
- 发现无效的块名“”。
- 改为“AUDIT_I_060923095030-0”。
复制代码
无效块?哪里来的块?莫非是.....
没错,就是那个命令COPY生成的,生成一半死掉了,还来不及删掉就被CAD保存下来了.
为什么要做成块呢?
因为做成块,在移动的时候,只要entmod一个实体就可以显示出结果了.
而一个用一个循环,对每个实体都entmod一下.实在是好办法.
代码如下:

- [FONT=courier new]
- (defun c:tt()
- (princ "选择物体:")
- (setq ss(ssget))
- (command "block" "aa$1" "0,0,0" ss "")
- (entmake (list '(0 . "INSERT")
- (CONS '100 "AcDbBlockrefence")
- (CONS '70 0)
- (CONS '71 0)
- (cons '2 "aa$1")
- (list 10 0 0 0)
- )
- )
-
-
- ;;做成无名块.
- (setq BLKREF (vlax-ename->vla-object (entlast)))
- (setq
- BLKDEF (vla-item (vla-get-blocks
- (vla-get-activedocument (vlax-get-acad-object))
- )
- (vla-get-name BLKREF)
- )
- )
- (vla-put-name BLKDEF "*U")
- (vlax-release-object BLKREF)
- (vlax-release-object BLKDEF)
- (setq ent (entget (entlast)))
- ;;做成无名块结束.
-
- (setq isOn t)
- (setq ptold (cadr(grread t 7 1)));_取得初始点.
- (princ "移动中:")
- (while isOn
- (progn
-
- ;(princ mid)(princ "\n");_调试用.
-
- (setq mid (grread t 7 1))
- (cond ( (= (car mid) 3)
- (setq isOn nil
- ptmid (cadr mid))
- )
- ((= (car mid) 5)
- (setq ptmid (cadr mid))
- )
- )
- (setq ent (subst (cons 10 (pt- ptmid ptold)) (assoc 10 ent) ent))
- (entmod ent)
-
- );_progn
-
- );_while
- (command "_explode" (entlast));_炸开后,无名块就没了.
-
- )
- (defun pt-(pt1 pt2)
- (list
- (- (car pt1) (car pt2))
- (- (cadr pt1) (cadr pt2))
- (- (caddr pt1) (caddr pt2))
- )
- )
- [/FONT]
根据代码的运行结果,并不理想. |
|