CAD二次开发---导入外部文件中的块并输出预览图形(五)

思路:

1)首先要定义一个数据库对象来表示包含块的文件,改数据库对象会被加载到内存中,但不会被显示在CAD窗口中。

2)调用Database类的ReadDwgFile函数将外部文件DWG文件读入到新创建的数据库对象中。

3)最后调用Database类的WblockCloneObjects函数将外部的DWG文件中块对象复制到当前数据库中。

 1 /// <summary>
 2         /// 外部文件导入块,
 3         /// </summary>
 4         /// <param name="desdb">目标数据库</param>
 5         /// <param name="sourceFileName">完整的外部文件名</param>
 6         public static void ImportBlocksFrmDwg(this Database desdb, string sourceFileName)
 7         {
 8             //public Database(bool buildDefaultDrawing, bool noDocument);
 9             Database sourceDb = new Database(false, true);//创建一个新的数据库对象,作为源数据库,以读入外部文件中的对象
10
11             try
12             {
13                 //把DWG文件读入到一个临时的数据库中
14                 // public void ReadDwgFile(string fileName, FileShare fileSharing, bool allowCPConversion, string password);
15                 sourceDb.ReadDwgFile(sourceFileName, System.IO.FileShare.Read, true, null);
16                 //创建一个变量来存储块的ObjectId列表
17                 ObjectIdCollection blocks = new ObjectIdCollection();
18                 //获取源数据的事务处理管理器
19                 Autodesk.AutoCAD.DatabaseServices.TransactionManager tranm = sourceDb.TransactionManager;
20
21
22                 //在源数据库中开始数据处理
23
24                 using (Transaction tran = tranm.StartTransaction())
25                 {
26                     //打开源数据库中的块表
27                     //  public virtual DBObject GetObject(ObjectId id, OpenMode mode);
28                     //public virtual DBObject GetObject(ObjectId id, OpenMode mode, bool openErased);
29                     //public virtual DBObject GetObject(ObjectId id, OpenMode mode, bool openErased, bool forceOpenOnLockedLayer);
30                     BlockTable bt = (BlockTable)tran.GetObject(sourceDb.BlockTableId, OpenMode.ForRead, false);
31
32                     foreach (ObjectId btrId in bt)
33                     {
34                         BlockTableRecord btr = tranm.GetObject(btrId, OpenMode.ForRead, false) as BlockTableRecord;
35                         //只加入命名块和非布局快到复制列表中
36                         if (!btr.IsAnonymous && !btr.IsLayout)
37                         {
38                             blocks.Add(btrId);
39                         }
40                         btr.Dispose();
41
42                     }
43                     bt.Dispose();
44                 }
45
46                 IdMapping mapping = new IdMapping();
47
48                 //从源数据库想目标数据库复制块表记录
49                 sourceDb.WblockCloneObjects(blocks, desdb.BlockTableId, mapping, DuplicateRecordCloning.Replace, false);
50
51
52             }
53             catch(Autodesk.AutoCAD.Runtime.Exception ex )
54             {
55                 Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("错误信息"+ex.Message);
56
57
58             }
59             //操作完成,销毁源数据库
60             sourceDb.Dispose();
61
62
63
64
65         }

导入块函数

实例:

 1     [CommandMethod("BlockPreview")]
 2         public void GenerateBlockPreview()
 3         {
 4             Database db = HostApplicationServices.WorkingDatabase;
 5
 6             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
 7
 8             PromptFileNameResult result = ed.GetFileNameForOpen("请选择需要预览的文件");
 9
10             if (result.Status != PromptStatus.OK) return;
11
12             string filename = result.StringResult;
13             //在C盘跟目录线,创建一个临时文件夹,用于存放文件中的块预览图标
14             string path = "C:\\Temp1";
15             if (!Directory.Exists(path))
16                 Directory.CreateDirectory(path);
17
18             using (Transaction tran = db.TransactionManager.StartTransaction())
19             {
20                 //导入外部的块
21                 db.ImportBlocksFrmDwg(filename);
22
23                 //打开块表
24                 BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
25
26                 foreach (ObjectId id in bt)
27                 {
28                     BlockTableRecord btr = tran.GetObject(id, OpenMode.ForRead) as BlockTableRecord;
29
30                     //如果是匿名块,布局块以及没有预览图型块,则返回
31                     if (btr.IsAnonymous || btr.IsLayout || !btr.HasPreviewIcon)
32                     {
33                         //获取预览图块,适用于2008及以下版本
34                         Bitmap preview = BlockThumbnailHelper.GetBlockThumbanail(btr.ObjectId);
35                         //
36                         //Bitmap preview = btr.PreviewIcon;//适用于2009版本及以上版本
37
38                         preview.Save(path + "\\" + btr.Name + ".bmp");//保存块预览
39                     }
40
41                 }
42                 tran.Commit();
43
44             }
45
46         }

读取外部文件中的块,并输出预览图

时间: 2024-10-11 18:10:25

CAD二次开发---导入外部文件中的块并输出预览图形(五)的相关文章

android中activity可以响应外部的action的例子(可以用这个来导入外部文件)

如果我们在文件浏览器中点击一个文件,然后点击它,会弹出一个列表给你选择 如果使自己的应用也出现在这个列表上,必须在menifest的这个activity下加入: <activity android:name="com.example.clickabletextview.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name

CAD二次开发中浮动面板不浮动的问题

CAD二次开发中创建了一个浮动面板,想让它创建出来后以浮动状态显示, 但是DockSides.None设置完后,面板还是不浮动.搞了很久,最后原来是 需要先设置Visible,再设置DockSides,这样就好了. ps = new PaletteSet("PSCollectPart"); ps.Style = PaletteSetStyles.NameEditable | PaletteSetStyles.ShowPropertiesMenu | PaletteSetStyles.S

C#进行CAD二次开发环境配置

最近被公司分配到了做CAD二次开发.也是初次接触这方面的东西,其实是有些无从下手的感觉.因为公司这边也没有人有时间带我,只能是自己看书,然后再写一些Demo,再结合实际的应用来一点点的学习.废话不多说,推荐一本我入门的书籍,就是李冠亿先生的<深居浅出AutoCAD二次开发>,写的非常不错,把这本书中的Demo自己手写一遍大概就能知道CAD二次开发到底是个什么东西了. 开发环境配置 开发环境 Win10 x64 CAD 2010 Visual Studio 2012 环境配置 首先要安装CAD软

Oracle导入外部文件

一.使用PL/SQL的导入工具导入excel文件1.打开pl/sql,点击菜单栏中的T00LS->ODBC Imtorper,打开ODBC Importer选项框;2.在Data fromODBC页中选择需要导入的文件的格式,选择ExcelFiles.输入用户名密码.然后点击Connect;3.在跳出的选择工作簿对话框,选择所要导入的Excel文件,点击确定; 在出现的Table/Query中的Import Table中单击表名,可以在下方的ResultPreview中看到所要导入的表格的内容;

springmvc 文件下传、上载、预览。以二进制形式存放到数据库(转载)

springmvc 文件上传.下载.预览.以二进制形式存放到数据库.数据库中的关于传入附件的字段我写了2个:一个存放内容accessory,一个存放文件的后缀filetype 上传:首先需要2个必须的jar:commons.io-1.4.0.jarcommons.fileupload-1.2.0.jar XXX-servlet.xml中写入上传拦截:<bean id="multipartResolver" class="org.springframework.web.m

在dreamweaver中设置php服务器F12预览的方法介绍

今天在dreamweaver中,按下F12来预览一个php文件,发现不行. 后经摸索,原来要设置一下. 这样就可以了. 在dreamweaver中设置php服务器F12预览的方法介绍

CAD二次开发控件,dwg控件,网页DWG控件,手机浏览编辑DWG控件

梦想绘图插件5.2(MxDraw5.2) 是国内最强,最专业的CAD开发插件(控件),不需要AutoCAD就能独立运行. 控件使用VC 2010开发,具有30万行代码规模,最早从2007年第一个版本完成,经过多年的累积已经非常稳定可靠,功能完善.有关键的空间搜索算法,并使用汇编优化,可以处理50万级实体,图形的显示和处理效率比同类产品高出很多. 梦想绘图3d插件6.0(MxDraw6.03d),使用二维控件的显示核心,基于 OpenCASCADE 几何造型引擎, 创建锥.柱.环等基本几何体, 对

AngularJS 外部文件中的控制器

在大型的应用程序中,通常是把控制器存储在外部的文件中. <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="X-UA-Compatible"content="IE=edge" /> <me

把JavaScript和CSS放到外部文件中

1.在现实世界中,使用外部文件会加快页面显示速度,因为外部文件会被浏览器缓存.提高了脚本文件和样式表的复用性.(无需在每个页面中都定义一次) 2.减小了页面体积,可以提高页面加载速度.(脚本文件和样式表可以被浏览器单独缓存) 3.提高了脚本和样式的可维护性.(这个虽然与性能无关,但其实也是很重要的) **_base.css  **.common.js