明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4719|回复: 16

vla-getboundingbox 处理的对象是未加载的外部参照时出错

[复制链接]
发表于 2015-7-30 18:58:12 | 显示全部楼层 |阅读模式
我做了一个求选择集中的每个对象外围边框角点的子程序,
最后能求出整个图形的范围,以此来界定打印范围。

但函数 vla-getboundingbox 处理的对象是 未加载的外部参照 的时候,
vla-getboundingbox函数不返回任何值,函数也进行不下去。
请高手提点一下,有没有命令,能提前得到参照是否加载的信息,
或者,有没有思路,怎样跳过这次操作,让循环继续按下去?

谢谢!

;;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
附件是自己做的一个将各布局打印出图的lsp,问题出在其中的一个子函数中
S.ctb是公司的标准打印样式。
子函数如下:
;;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;;子程序,求选集是大外形坐标
(defun Min_Max( end)
  (setq minp (vlax-make-safearray vlax-vbdouble '(0 . 2)))
  (setq maxp (vlax-make-safearray vlax-vbdouble '(0 . 2)))
(vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)  
;;;上一行不能处理未加载的外部参照
;;;_________________________________________________________
(setq minp (vlax-safearray->list minp)
       maxp (vlax-safearray->list maxp))
(setq minx (car minp)
       maxx (car maxp)
       miny (cadr minp)
       maxy (cadr maxp))
(if (> minx0 minx) (setq minx0 minx))
(if (> miny0 miny) (setq miny0 miny))
(if (< maxx0 maxx) (setq maxx0 maxx))
(if (< maxy0 maxy) (setq maxy0 maxy))
)



该贴已经同步到 鸟_志的微博

本帖子中包含更多资源

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

x
发表于 2020-1-16 00:32:02 | 显示全部楼层
鸟_志 发表于 2015-8-18 17:50
我的参照是用参照管理器,选路径加载到图上的。
附着还是覆盖参照的时候就定下了,很少去改的。

布局里可以用 GetBoundingBox 吗 为什么我用的时候 说类型不匹配呢
发表于 2020-1-19 09:56:41 | 显示全部楼层
应该可以吧,该方法说明里是所有图形对象,没说有模型/布局的限制。可以的话,相关代码上来看看?
发表于 2020-1-16 00:31:40 | 显示全部楼层
布局里可以用 GetBoundingBox 吗 为什么我用的时候 说类型不匹配呢
发表于 2015-7-31 11:30:47 | 显示全部楼层
外部参照,xref ?在 2010 里试了下,可以返回的吗,就是只是提示信息的占据范围?
 楼主| 发表于 2015-7-31 14:38:16 | 显示全部楼层
dunkel 发表于 2015-7-31 11:30
外部参照,xref ?在 2010 里试了下,可以返回的吗,就是只是提示信息的占据范围?

谢谢你的回复!
用“-xref”来查,只能得到如下信息:(没有我需要的已加载/卸载信息)
---------------------------------------------------------------------------------------------------
命令: -XREF
输入选项 [?/绑定(B)/拆离(D)/路径(P)/卸载(U)/重载(R)/覆盖(O)/附着(A)] <附着>: ?
输入要列出的外部参照名 <*>: X-A9B10-grid
参照名                            参照类型     路径
----------------------            ---------    ----------
"X-A9B10-grid"                    覆盖型          .\X-A9B10-grid.dwg
外部参照总数: 1
----------------------------------------------------------------------------------------------

我想要的信息是:1)所有外部参照的列表
                            2)各外部参照的状态(就是详细信息里,参照名下面的状态栏里的内容)
-----------------------

本帖子中包含更多资源

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

x
发表于 2015-7-31 21:56:39 来自手机 | 显示全部楼层
不是说可以用 xref 获得需要的信息,而是确定下所指的“外部引用”是不是 xref 这里的。
至于 xref 的载入状态,entget 返回的信息里没有吗;现在手机上网,你可以自己看看相关的 dxf 项的说明。
你的 acad 什么版本,怎么或停那儿呢?
另外,整个图形占据的区域,是不是可以用其它方法,比如 Zoom.E 后窗口视口大小;这样枚举的做法,图形复杂点儿的话,恐怕不轻松。

评分

参与人数 1明经币 +1 收起 理由
鸟_志 + 1 谢谢!

查看全部评分

 楼主| 发表于 2015-8-3 12:21:59 | 显示全部楼层
本帖最后由 鸟_志 于 2015-8-3 12:26 编辑
dunkel 发表于 2015-7-31 21:56
不是说可以用 xref 获得需要的信息,而是确定下所指的“外部引用”是不是 xref 这里的。
至于 xref 的载入 ...

还是先谢谢!
和你理解的一样,我说的外部参照是指xref命令里的。
cad是2012版。
停在那里是因为vla-getboundingbox命令处理卸载的外部参照时卡住了,也不会给nil之类的返回值。
entget返回的信息,参照加载和不加载显示的没有区别。比如:
·····················································································································
((-1 . <图元名: 7ffffbb08b0>) (0 . "INSERT") (330 . <图元名: 7ffffb03a10>) (5 .
"327B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0S-BEAM-LINE") (100
. "AcDbBlockReference") (2 . "00土建2013EcadiA0++(立面)") (10 0.0 0.0 0.0) (41 .
1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0)
(210 0.0 0.0 1.0))
·····················································································································
你说用zoom的建议也很好,我试一下!
发表于 2015-8-3 13:45:52 | 显示全部楼层
外部引用是否被加载,是在块属性里,(tblsearch "block" xrefdwg) 返回的 70 组数据中,4=xref,32=已载入

评分

参与人数 1金钱 +20 收起 理由
鸟_志 + 20

查看全部评分

 楼主| 发表于 2015-8-3 18:30:37 | 显示全部楼层
dunkel 发表于 2015-8-3 13:45
外部引用是否被加载,是在块属性里,(tblsearch "block" xrefdwg) 返回的 70 组数据中,4=xref,32=已载入

谢谢!
这就是我想要的!
发表于 2015-8-3 21:14:14 | 显示全部楼层
大神 我看你图里的参照有的是附着 有的是覆盖  我最近很伤脑筋 怎么把这两种参照类型互换了 cad2014能实现 但是必须打开参照管理器 右键参照选择才行 我想通过lisp判断 来更改 你是怎么搞的
 楼主| 发表于 2015-8-18 17:50:04 | 显示全部楼层
clinber 发表于 2015-8-3 21:14
大神 我看你图里的参照有的是附着 有的是覆盖  我最近很伤脑筋 怎么把这两种参照类型互换了 cad2014能实现  ...

我的参照是用参照管理器,选路径加载到图上的。
附着还是覆盖参照的时候就定下了,很少去改的。

要用lisp改的话,试试把参照分别设为附着和覆盖,分别用命令(tblsearch "block" xrefdwg)调出群码,不一样的那个码就是控制“附着/覆盖”
 楼主| 发表于 2015-8-18 17:50:50 | 显示全部楼层
clinber 发表于 2015-8-3 21:14
大神 我看你图里的参照有的是附着 有的是覆盖  我最近很伤脑筋 怎么把这两种参照类型互换了 cad2014能实现  ...

我的参照是用参照管理器,选路径加载到图上的。
附着还是覆盖参照的时候就定下了,很少去改的。

要用lisp改的话,试试把参照分别设为附着和覆盖,分别用命令(tblsearch "block" xrefdwg)调出群码,不一样的那个码就是控制“附着/覆盖”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 08:22 , Processed in 0.175690 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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