yumuhua 发表于 2008-8-1 19:50:00

如果按图框为边界将包含多个图的DWG文件拆分成单图文件

<p>我用的CAD的Com接口,最近碰到的问题是:</p><p>1、需要做一个工具,能把包含多个图的DWG文件拆分成几个单图文件,源DWG文件中包含几个图,而图框可能是多线段,也可能是块参照,或者是个矩形对象,请问有什么方法取得每个图的边界呢,块参照有时候其参照点都不只在图框某个角上,而且块没有对应属性能取得其尺寸。<font color="#ff0000">亨通科技</font>有个图纸拆分工具就能做到把任意封闭边界的内容拆分到单图文件中,甚至我画几个三角,它也能准确拆分,不知道是怎么做到的。 <strong>请哪位大哥提供点思路。</strong></p><p>2、顺便帮我看看下面的C#代码<br/>&nbsp;&nbsp;&nbsp;//打开文件<br/>&nbsp;&nbsp;&nbsp;AcadDocument sourceDocument = a.Documents.Open(filePathName, null, null);<br/>&nbsp;&nbsp;&nbsp;a.Application.ZoomAll();</p><p>&nbsp;&nbsp;&nbsp;//准备通过选择过滤的方式得到图中所有的块参照对象<br/>&nbsp;&nbsp;&nbsp;double[] StartPos = new double[] { -1000000000000, -1000000000000, 0 };<br/>&nbsp;&nbsp;&nbsp;double[] EndPos = new double[] { 1000000000000, 1000000000000, 0 };<br/><font color="#ff0000">&nbsp;&nbsp;&nbsp;object gpCode = new short[] {&nbsp;0 };<br/>&nbsp;&nbsp;&nbsp;object dataValue = new object[] { "BlockReference" };<br/></font>&nbsp;&nbsp;&nbsp;object filterCode = gpCode;<br/>&nbsp;&nbsp;&nbsp;object filterValue = dataValue;</p><p>&nbsp;&nbsp;&nbsp;AcadSelectionSet selObjs = sourceDocument.SelectionSets.Add("SS2");<br/>&nbsp;&nbsp;&nbsp;selObjs.Select(AcSelect.acSelectionSetWindow, StartPos, EndPos, filterCode, filterValue);<br/><strong>明明DWG文件里有块参照,却怎么也取不到,而如果是取直线,改成</strong></p><p><font color="#ff0000">&nbsp;&nbsp;&nbsp;object gpCode = new short[] {&nbsp;0 };<br/>&nbsp;&nbsp;&nbsp;object dataValue = new object[] { "Line" };</font></p><p>却能取到图中的线,为什么呢,难道块参照不能通过过滤方式取得吗??<br/></p>

yumuhua 发表于 2008-8-1 20:56:00

<p>在线等啊,我的第2个问题简化一下:</p><p>怎样获得图中所有块参照的选择集</p>

yellocea 发表于 2008-8-4 14:01:00

本帖最后由 作者 于 2008-8-4 14:05:30 编辑 <br /><br /> <p>为什么中国的教科书不只出版一种高级语言呢.既然各种语言都能达到同一效果,就不充许出其它开发语言的书,这样反而有利于软件业的发展</p><p>vba程序是这样的,获得各图块名称:</p><p>&nbsp;&nbsp;&nbsp; Dim objBlk As AcadBlock<br/>&nbsp;&nbsp;&nbsp; For Each objBlk In ThisDrawing.Blocks<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If StrComp(Left(objBlk.Name, 1), "*") &lt;&gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyBlock (i)=objBlk.Name</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i=i+1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next objBlk</p>

fjfhgdwfn 发表于 2008-8-4 14:23:00

<p>&nbsp;&nbsp; FilterType(0) = 2<br/>&nbsp;&nbsp; FilterData(0) = "TK" '是块名</p><p>&nbsp; &nbsp;FilterType(1) = 8<br/>&nbsp;&nbsp; FilterData(1) = "0"&nbsp; '图层是0</p><p>用过滤选择直接得到</p>

sailorcwx 发表于 2008-8-5 00:59:00

<p>将<font color="#ff0000">object dataValue = new object[] { "BlockReference" };</font><br/>改成<br/><font color="#ff0000">object dataValue = new object[] { "INSERT" };<br/>试试</font><br/></p>
页: [1]
查看完整版本: 如果按图框为边界将包含多个图的DWG文件拆分成单图文件