乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 69|回复: 4

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

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

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

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2008-8-1 20:56:00 | 显示全部楼层
在线等啊,我的第2个问题简化一下:
怎样获得图中所有块参照的选择集
回复

使用道具 举报

0

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2008-8-4 14:01:00 | 显示全部楼层

为什么中国的教科书不只出版一种高级语言呢.既然各种语言都能达到同一效果,就不充许出其它开发语言的书,这样反而有利于软件业的发展
vba程序是这样的,获得各图块名称:
    Dim objBlk As AcadBlock
    For Each objBlk In ThisDrawing.Blocks
      
        If StrComp(Left(objBlk.Name, 1), "*")  0 Then
            MyBlock (i)=objBlk.Name
             i=i+1
        End If
    Next objBlk
回复

使用道具 举报

25

主题

219

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2008-8-4 14:23:00 | 显示全部楼层
   FilterType(0) = 2
   FilterData(0) = "TK" '是块名
   FilterType(1) = 8
   FilterData(1) = "0"  '图层是0
用过滤选择直接得到
回复

使用道具 举报

29

主题

503

帖子

8

银币

中流砥柱

Rank: 25

铜币
619
发表于 2008-8-5 00:59:00 | 显示全部楼层
将object dataValue = new object[] { "BlockReference" };
改成
object dataValue = new object[] { "INSERT" };
试试
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 06:23 , Processed in 0.728054 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表