找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1515|回复: 7

[原创]:CAD拷贝,移动时的动态显示实现方式猜想

[复制链接]
发表于 2006-9-23 15:02:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
CAD的几个命令,可以在执行命令的时候,动态显示.
可以实时看到显示效果,实在是众编程者所要的那种效果.

这种效果,用OBJECTARX来实现是比较简单的.

不过用AUTOLISP实现起来就有点吃力了.
因为要不断的entmod实体,实在是比较慢,而且会卡.一闪一闪的.

今天发现一个现像,我的用移动命令的时候,把东西移动到标注上,不小心,死了.
结果CAD死了.我点了保存文件(2002可以保护为新的文件,所以就保存了).

又得重新开CAD,打开原来的图,看看,还差好多.想想还是修复一下算了.
还好能用,只查出了一个错误就好了.

什么,有一个错误,什么错误?速速报来!

  1. 发现无效的块名“”。
  2. 改为“AUDIT_I_060923095030-0”。
复制代码

无效块?哪里来的块?莫非是.....
没错,就是那个命令COPY生成的,生成一半死掉了,还来不及删掉就被CAD保存下来了.

为什么要做成块呢?
因为做成块,在移动的时候,只要entmod一个实体就可以显示出结果了.
而一个用一个循环,对每个实体都entmod一下.实在是好办法.

代码如下:


  1.   [FONT=courier new]
  2. (defun c:tt()
  3.    (princ "选择物体:")
  4.   (setq ss(ssget))
  5.   (command "block" "aa$1" "0,0,0" ss "")
  6.   (entmake (list '(0 . "INSERT")
  7.                  (CONS '100 "AcDbBlockrefence")
  8.                  (CONS '70 0)
  9.                  (CONS '71 0)
  10.                  (cons '2 "aa$1")
  11.                  (list 10 0 0 0)
  12.            )
  13.   )
  14.   
  15.   
  16.   ;;做成无名块.
  17.   (setq BLKREF (vlax-ename->vla-object (entlast)))
  18.   (setq
  19.     BLKDEF (vla-item (vla-get-blocks
  20.                        (vla-get-activedocument (vlax-get-acad-object))
  21.                      )
  22.                      (vla-get-name BLKREF)
  23.            )
  24.   )
  25.   (vla-put-name BLKDEF "*U")
  26.   (vlax-release-object BLKREF)
  27.   (vlax-release-object BLKDEF)
  28.   (setq ent (entget (entlast)))
  29.   ;;做成无名块结束.
  30.   
  31.   (setq isOn t)
  32.   (setq ptold (cadr(grread t 7 1)));_取得初始点.
  33.   (princ "移动中:")
  34.   (while isOn
  35.     (progn
  36.       
  37.       ;(princ mid)(princ "\n");_调试用.
  38.       
  39.       (setq mid (grread t 7 1))
  40.       (cond ( (= (car mid) 3)
  41.         (setq isOn nil
  42.               ptmid (cadr mid))
  43.       )
  44.       ((= (car mid) 5)
  45.         (setq ptmid (cadr mid))       
  46.         )       
  47.       )
  48.       (setq ent (subst (cons 10 (pt- ptmid ptold)) (assoc 10 ent) ent))
  49.       (entmod ent)
  50.       
  51.       );_progn
  52.    
  53.     );_while


  54.   (command "_explode" (entlast));_炸开后,无名块就没了.
  55.   
  56.   )

  57. (defun pt-(pt1 pt2)
  58.   (list
  59.     (- (car pt1) (car pt2))
  60.     (- (cadr pt1) (cadr pt2))
  61.     (- (caddr pt1) (caddr pt2))
  62.     )
  63.   )

  64.   [/FONT]


根据代码的运行结果,并不理想.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-9-23 17:17:15 | 显示全部楼层
应该如楼上所说,不知道cad在缩放和拉伸动态显示是怎么实现的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-23 19:23:13 | 显示全部楼层
这种研究性的帖子得加分啊。

希望自己不久以后也能有这个兴趣去想想这个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-23 20:09:41 | 显示全部楼层
根据演示代码的结果与CAD的显示结果
存在以下区别:
演示代码是整体刷新显示的,而CAD是是分个显示的.这就使得CAD的显示速度要快的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-25 15:56:29 | 显示全部楼层
这个发现好
俺原来就是做成块来动态显示的

这个好象论坛以前专门讨论过
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 208个

财富等级: 日进斗金

发表于 2006-9-25 19:26:48 | 显示全部楼层
实现对象预览功能并支持关键字
ET工具中有acet-ss-drag-move函数
用 ctrl+x (剪切),ctrl+v(粘贴)来实现动态定位。要定制移动基点的,可以用_copybase
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-25 21:19:44 | 显示全部楼层
不错,楼主幸苦了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-10-1 14:00:45 | 显示全部楼层
其它的偶不知道
但是ctrl+v粘贴AUTOCAD的确是用块来解决的:而且还有一个小bug!
比如先复制几个图元后按下ctrl+v.再按esc取消就会发现图档中多了一个块了啦!
插入多出的块一看就知道就是复制的图元组成的~可能是CAD在esc时没有后处理
就留下了这个莫明其妙来的块了~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 06:13 , Processed in 0.458220 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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