找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1852|回复: 13

[原创]:由一个程序想到的获取标记后的实体

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-3-23 18:09:31 | 显示全部楼层 |阅读模式

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

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

×
http://www.xdcad.net/forum/showt ... d=839534#post839534

此前在函数库论坛发过一次。

[PHP]
;;用于模型空间的设置标记及获取标记后实体
;;适用 CAD2000+ 以上版本
;;======================================
;;程序思路:利用 entlast 实体的 ObjectID 作标记
;;          获取选择集时,由空间最后一个实体
;;          一个个往前找, 当实体的 ID 大于标
;;          记的 ID 时为新生成实体
;;=========================================
;;设置标记
(defun ea:setmark ()
  (if (entlast)
    (setq $yb_last_entity_mark
           (vla-get-objectID
             (vlax-ename->vla-object (entlast))
           )
    )
  )
  (princ)
)
;;获取标记后生成的实体
(defun ea:getss        (/ ss obj modelspace number)
  (setq        modelspace (vla-get-modelspace
                     (vla-get-activedocument (vlax-get-acad-object))
                   )
        number           (vla-get-count modelspace) ;当前空间实体总数量
  )
  (setq ss (ssadd))
  (if $yb_last_entity_mark
    (progn
      (while (>        (vla-get-ObjectID
                  (setq
                    obj        (vla-item modelspace (1- number))
                  )                        ;倒着数一个个来
                )
                $yb_last_entity_mark
             )
        (ssadd (vlax-vla-object->ename obj) SS)
        (setq number (1- number))
      )
    )
  )
  (setq $yb_last_entity_mark nil)
  (if ss
    (sssetfirst nil ss)                        ;夹点显示
    ss
  )
  (princ)
)
;;用Lisp 方式
(defun setmark ()
  (setq mark_p0 (ssget "x"))
  (princ)
)
(defun getss ()
  (setvar "cmdecho" 0)
  (if mark_p0
    (progn
      (vl-cmdf ".select" "all" "r" mark_p0 "")
      (setq mark_p0 nil)
    )
  )
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-3-23 19:21:43 | 显示全部楼层

Re: [原创]:由一个程序想到的获取标记后的实体

好程序
发个简化的:
[php]
;;;|记录图中元素数
(defun setmark ()
  (vl-load-com)
  (vla-get-count(vla-get-modelspace
     (vla-get-activedocument (vlax-get-acad-object))))
)
;;;|返回空间倒数N个元素的表
(defun rev-ty-n (gx / i kj ent mspace)
(vl-load-com)(setq i 1)
(setq mspace (vla-get-ModelSpace
      (vla-get-ActiveDocument (vlax-get-acad-object))))
  (repeat gx
    (setq ent (vlax-vla-object->ename
(vla-Item mspace (- (vla-get-count mspace) i))))
    (setq kj (cons ent kj))
    (setq i (1+ i))
          )
  kj
)
;;;-----------------------------
开始记录:(setq cs (setmark))
返回记录时刻的新元素列表:(rev-ty-n (-(setmark)cs))
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-3-24 05:08:05 | 显示全部楼层

Re: Re: [原创]:由一个程序想到的获取标记后的实体

最初由 snsj 发布
[B]好程序
发个简化的:
[code]
;;;|记录图中元素数
(defun setmark ()
  (vl-load-com)
  (vla-get-count(vla-get-modelspace
     (vla-get-activedocument (vlax-get-acad-object))))
)
;;;|返回空间?.. [/B]

仅记录数量在程序中连续使用没有什么问题,在命令时使用就可能有问题了,比如中间可能删除实体,尽管前后的数量可能是一致的,但是会有标记以后的实体。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-24 08:31:19 | 显示全部楼层
lisp 方式看起来更直接一些,而且可以支持14
好像更好一点~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-24 12:22:25 | 显示全部楼层

Re: Re: Re: [原创]:由一个程序想到的获取标记后的实体

[QUOTE]最初由 eachy 发布
恩,对PEDIT合并实体存在的数量差可能为负值,通用性来讲还是ID的方法好些
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-3-24 12:49:58 | 显示全部楼层

Re: Re: Re: Re: [原创]:由一个程序想到的获取标记后的实体

最初由 snsj 发布
[B][QUOTE]最初由 eachy 发布
恩,对PEDIT合并实体存在的数量差可能为负值,通用性来讲还是ID的方法好些,最好不要依赖空间总图元数保险些 [/B]

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-6-26 16:19:05 | 显示全部楼层
最初由 maoding 发布
[B]什么意思啊
能否有人给个明白的解释 [/B]

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

使用道具 举报

发表于 2004-7-4 16:36:25 | 显示全部楼层
eachy大侠的autolisp方式,用于较大的图形时,速度很慢。还是用entnext方式吧,把不需要的子实体类型过滤掉就行了。

[PHP]
(defun ss:get_after        (ent / ss )
    (setq sub_ent '("VERTEX" "SEQEND" "ATTRIB"))
    (setq ss  (ssadd))
    (while (setq ent (entnext ent))
      (if (member (cdr (assoc 0 (entget ent))) sub_ent)
        ()
        (setq ss (ssadd ent ss))
      )
    )
    ss
  )
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-4 21:54:20 | 显示全部楼层
调用select命令也很简便有效,好像是aeo推荐的方法。
我觉得不错,据他测试效果也很快。我自己没测试过
但是我觉得从感觉上,对大数据量的图,如果标志后新生成的实体比较少,如原有3万实体,新生成3个实体,要取得标志后的实体,还是用entnext快。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2004-12-11 08:58:27 | 显示全部楼层
2楼的方法能解释得详细些吗?(我是新手)请问,你的方法,如果CAD操作过程很复杂,且其中某步骤用了删除或者PURGE命令后,你的方法是否还能行得通?
select可以解决问题,速度还可以(目前没试过一次选择上万个物体的)
wkai  斑竹过滤的思路与我的相似(我是把需要的提出)。
如哪位兄弟有时间,请详细对比说明各种方法的优劣和计算速度,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 17:30 , Processed in 0.194976 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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