找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6252|回复: 14

[求助] lisp怎样操作自定义对象

[复制链接]

已领礼包: 201个

财富等级: 日进斗金

发表于 2014-3-5 18:25:13 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 tooo 于 2014-3-5 18:26 编辑

图中有这么几个图框,是在理正勘察环境下程序自动画的,点选后显示它的类型是“CTukuang", 它应该是某种自定义对象吧(我也不清楚该怎么称呼它),用ssget选择它后无法通过(entget (ssname sset index))这种方式来获取它,提示
; 错误: 出现异常: 0xC0000005 (访问冲突)
; 警告: 忽略展开 异常
; 错误: 出现异常: 0xC0000005 (访问冲突)
现在想获得各图图框四个角的坐标,请问该如何写这个代码。

退出理正环境直接用CAD打开它,点选后显示它的类型是"ACAD_PROXY_ENTITY"。可用(entget (ssname sset index))这种方式来获取它,但得到的信息很少,如下:
((-1 . <图元名: 7ef8b908>) (0 . ACAD_PROXY_ENTITY) (330 . <图元名: 7ef87cf8>) (5 . 7A1) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . GiCAD_TuKuang))
也没有它的坐标,大小等信息。
另外,理正勘察应该是用到好多ObjectARX技术,启动时调用了好多.arx文件。

只想获得它们的四角坐标,用lisp有可能实现吗?如果不行,那用其它方法可以吗?


空图框.zip

32.21 KB, 下载次数: 17, 下载积分: D豆 -1 , 活跃度 1

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

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-5 19:44:59 | 显示全部楼层
本帖最后由 tooo 于 2014-3-5 19:47 编辑

试了一下,其它对象可以,选中这几个特别的图框就出错:
错误: Automation 错误。 范围无效

  (setq ss1 (ssget))  
  (setq ent (ssname ss1 0))   ;;到这一句时还正常
  (vla-getboundingbox  (vlax-ename->vla-object ent) 'minp 'maxp)  ;;到这一句就出错了

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

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-5 19:57:18 | 显示全部楼层
补充一下:
(vlax-ename->vla-object ent) 返回的值是 #<VLA-OBJECT IAcadEntity 07d26f8r>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-3-5 20:55:55 | 显示全部楼层
  1. (defun c:tt (/ pts)
  2.   (fy:clearcset)
  3.   (if (ssget '((8 . "CtuKuang")))
  4.     (progn
  5.       (setq
  6.         pts (mapcar '(lambda (x / bp up)
  7.                        (vla-getboundingbox x 'bp 'up)
  8.                        (list (safearray-value bp)
  9.                              (list (vlax-safearray-get-element up 0)
  10.                                    (vlax-safearray-get-element bp 1)
  11.                                    0.
  12.                              )
  13.                              (safearray-value up)
  14.                              (list (vlax-safearray-get-element bp 0)
  15.                                    (vlax-safearray-get-element up 1)
  16.                                    0.
  17.                              )
  18.                        )
  19.                      )
  20.                     (fy:cset->objs)
  21.             )
  22.       )
  23.     )
  24.   )
  25.   (princ pts)
  26.   (princ)
  27. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-5 22:33:46 | 显示全部楼层
谢谢,已测试以上代码,但不成功。
(ssget '((8 . "CTukuang")))这一句可能不适合,没获取到对象。
CTukuang 是这个对象的类型名,不是它所在的图层。
请看这个图: CTukuang.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-6 08:35:28 | 显示全部楼层
试过了,执行tt后它提示我选择对象,鼠标框选后出错。

命令: tt
选择对象: 指定对角点: 找到 3 个
选择对象:  ; 错误: Automation 错误。 范围无效
命令:

问题不是选不到它们,而是进入了选择集之后,只可以得到它的名字,但不能用 (entget ename)对它进行操作,也就无法访问到它的各种属性(组码)。用(vla-getboundingbox  (vlax-ename->vla-object ename) 'minp 'maxp) ,也提示:错误: Automation 错误。 范围无效
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 10248个

财富等级: 富甲天下

发表于 2014-3-6 08:42:01 | 显示全部楼层
  1. ;自定义实体外框 晓东 zxq0220 2014.3.6
  2. (defun c:tt ()
  3. (setvar "CMDECHO" 0)
  4. (vl-load-com)
  5. (if (setq ss (ssget '((0 . "ACAD_PROXY_ENTITY")))) (progn
  6.   (setq i -1 pts (list))
  7.   (repeat (sslength ss)
  8.   (setq en (ssname ss (setq i (1+ i))))
  9.   (command ".UNDO" "BE")
  10.   (command "_.EXPLODE" en)
  11.   (command ".UNDO" "E")
  12.   (setq ss2 (ssget "P"))
  13.   (setq j -1 pts1 (list))
  14.   (repeat (sslength ss2)
  15.    (setq en2 (ssname ss2 (setq j (1+ j))))
  16.    (setq pts1 (append pts1 (getbox en2)))
  17.   )
  18.   (command "_U")
  19.   (setq p1 (list (apply 'min (mapcar 'car pts1)) (apply 'min (mapcar 'cadr pts1))))
  20.   (setq p2 (list (apply 'max (mapcar 'car pts1)) (apply 'max (mapcar 'cadr pts1))))
  21.   (setq pts (cons (list p1 p2) pts))
  22.   )
  23. ))
  24. (princ (reverse pts))
  25. (setvar "CMDECHO" 1)
  26. (princ)
  27. )
  28. (defun getbox (een / p1 p2)
  29. (vla-getboundingbox(vlax-ename->vla-object een) 'p1 'p2)
  30. (list (vlax-safearray->list p1) (vlax-safearray->list p2))
  31. )

点评

再次请教,还是这个帖子里的那几个图框,有办法使用过滤器参数选择到它们吗?  详情 回复 发表于 2014-3-9 20:25
这个可行,只是必须要离开理正勘察这个环境,直接用CAD打开文件。 在理正勘察环境下无法选到对象,把 (ssget '((0 . "ACAD_PROXY_ENTITY"))) 改成 (ssget '((0 . "CTukuang")))也选不到它,除非不使用过滤器参数  详情 回复 发表于 2014-3-6 09:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-3-6 09:09:46 | 显示全部楼层
本帖最后由 st788796 于 2014-3-6 09:11 编辑
tooo 发表于 2014-3-6 08:35
试过了,执行tt后它提示我选择对象,鼠标框选后出错。

命令: tt

这种代理实体就不要指望实体名及 vlax-ename->vla-object 了,直接用 ActiveX 选择集 ,无须转换!

代理实体是没有那么多DXF组码的,即使有解释程序,作者也未必开放了组码

点评

直接用 ActiveX 选择集。还不会唉,再学习学习。谢谢。  详情 回复 发表于 2014-3-6 09:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-6 09:11:07 | 显示全部楼层

这个可行,只是必须要离开理正勘察这个环境,直接用CAD打开文件。

在理正勘察环境下无法选到对象,把
(ssget '((0 . "ACAD_PROXY_ENTITY"))) 改成 (ssget '((0 . "CTukuang")))也选不到它,除非不使用过滤器参数。
直接用(ssget)选到它后,这回程序执行正常了,也得到了它的外框角点坐标{:soso_e113:}

如果能用过滤器参数直接选中它们就完美了,在理正勘察环境下用Qselect命令选择时,CTukuang是一种新的对象类型,请看下图:
qseelect.jpg
不知道称它为自定义对象是否合适。

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

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-6 09:14:14 | 显示全部楼层
st788796 发表于 2014-3-6 09:09
这种代理实体就不要指望实体名及 vlax-ename->vla-object 了,直接用 ActiveX 选择集 ,无须转换!

代 ...

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

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-9 20:25:58 | 显示全部楼层

再次请教,还是这个帖子里的那几个图框,有办法使用过滤器参数选择到它们吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-3-9 20:38:10 来自手机 | 显示全部楼层
tooo 发表于 2014-3-9 20:25
再次请教,还是这个帖子里的那几个图框,有办法使用过滤器参数选择到它们吗?

用图层过滤

点评

多谢指点!太好了,程序自动成图,这个图层里还真没有其它东西了。 剑走偏锋,却一击而中,高! 附上用QSELECT选择时的图片,看看还有没有什么其它办法 [attachimg]7972[/attachimg]  详情 回复 发表于 2014-3-9 20:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2014-3-9 20:54:21 | 显示全部楼层

多谢指点!太好了,程序自动成图,这个图层里还真没有其它东西了。
剑走偏锋,却一击而中,高!

附上用QSELECT选择时的图片,看看还有没有什么其它办法
qse_success.jpg

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 00:38 , Processed in 0.491747 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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