鸟_志 发表于 2015-7-30 18:58:12

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

我做了一个求选择集中的每个对象外围边框角点的子程序,
最后能求出整个图形的范围,以此来界定打印范围。

但函数 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))
)



http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 鸟_志的微博

牵牛 发表于 2020-1-16 00:32:02

鸟_志 发表于 2015-8-18 17:50
我的参照是用参照管理器,选路径加载到图上的。
附着还是覆盖参照的时候就定下了,很少去改的。



布局里可以用 GetBoundingBox 吗 为什么我用的时候 说类型不匹配呢

dunkel 发表于 2020-1-19 09:56:41

应该可以吧,该方法说明里是所有图形对象,没说有模型/布局的限制。可以的话,相关代码上来看看?

牵牛 发表于 2020-1-16 00:31:40

布局里可以用 GetBoundingBox 吗 为什么我用的时候 说类型不匹配呢

dunkel 发表于 2015-7-31 11:30:47

外部参照,xref ?在 2010 里试了下,可以返回的吗,就是只是提示信息的占据范围?

鸟_志 发表于 2015-7-31 14:38:16

dunkel 发表于 2015-7-31 11:30 static/image/common/back.gif
外部参照,xref ?在 2010 里试了下,可以返回的吗,就是只是提示信息的占据范围?

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

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

dunkel 发表于 2015-7-31 21:56:39

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

鸟_志 发表于 2015-8-3 12:21:59

本帖最后由 鸟_志 于 2015-8-3 12:26 编辑

dunkel 发表于 2015-7-31 21:56 static/image/common/back.gif
不是说可以用 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的建议也很好,我试一下!

dunkel 发表于 2015-8-3 13:45:52

外部引用是否被加载,是在块属性里,(tblsearch "block" xrefdwg) 返回的 70 组数据中,4=xref,32=已载入

鸟_志 发表于 2015-8-3 18:30:37

dunkel 发表于 2015-8-3 13:45 static/image/common/back.gif
外部引用是否被加载,是在块属性里,(tblsearch "block" xrefdwg) 返回的 70 组数据中,4=xref,32=已载入

谢谢!
这就是我想要的!

clinber 发表于 2015-8-3 21:14:14

大神 我看你图里的参照有的是附着 有的是覆盖我最近很伤脑筋 怎么把这两种参照类型互换了 cad2014能实现 但是必须打开参照管理器 右键参照选择才行 我想通过lisp判断 来更改 你是怎么搞的

鸟_志 发表于 2015-8-18 17:50:04

clinber 发表于 2015-8-3 21:14 static/image/common/back.gif
大神 我看你图里的参照有的是附着 有的是覆盖我最近很伤脑筋 怎么把这两种参照类型互换了 cad2014能实现...

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

要用lisp改的话,试试把参照分别设为附着和覆盖,分别用命令(tblsearch "block" xrefdwg)调出群码,不一样的那个码就是控制“附着/覆盖”

鸟_志 发表于 2015-8-18 17:50:50

clinber 发表于 2015-8-3 21:14 static/image/common/back.gif
大神 我看你图里的参照有的是附着 有的是覆盖我最近很伤脑筋 怎么把这两种参照类型互换了 cad2014能实现...

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

要用lisp改的话,试试把参照分别设为附着和覆盖,分别用命令(tblsearch "block" xrefdwg)调出群码,不一样的那个码就是控制“附着/覆盖”
页: [1] 2
查看完整版本: vla-getboundingbox 处理的对象是未加载的外部参照时出错