导读 | 在本篇文章里小编给大家整理的是一篇关于c#中CAD文件读取实例内容,有兴趣的朋友们可以学习参考下。 |
本篇实例内容是关于C#读取CAD文件的,直接看代码
//在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上浏览。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace 浏览dwg { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ViewDWG viewDwg = new ViewDWG(); pictureBox1.Image = viewDwg.GetDwgImage("c:\\1.dwg"); } class ViewDWG { struct BITMAPFILEHEADER { public short bfType; public int bfSize; public short bfReserved1; public short bfReserved2; public int bfOffBits; } public Image GetDwgImage(string FileName) { if (!(File.Exists(FileName))) { throw new FileNotFoundException("文件没有被找到"); } FileStream DwgF; //文件流 int PosSentinel; //文件描述块的位置 BinaryReader br; //读取二进制文件 int TypePreview; //缩略图格式 int PosBMP; //缩略图位置 int LenBMP; //缩略图大小 short biBitCount; //缩略图比特深度 BITMAPFILEHEADER biH; //BMP文件头,DWG文件中不包含位图文件头,要自行加上去 byte[] BMPInfo; //包含在DWG文件中的BMP文件体 MemoryStream BMPF = new MemoryStream(); //保存位图的内存文件流 BinaryWriter bmpr = new BinaryWriter(BMPF); //写二进制文件类 Image myImg = null; try { DwgF = new FileStream(FileName, FileMode.Open, FileAccess.Read); //文件流 br = new BinaryReader(DwgF); DwgF.Seek(13, SeekOrigin.Begin); //从第十三字节开始读取 PosSentinel = br.ReadInt32(); //第13到17字节指示缩略图描述块的位置 DwgF.Seek(PosSentinel + 30, SeekOrigin.Begin); //将指针移到缩略图描述块的第31字节 TypePreview = br.ReadByte(); //第31字节为缩略图格式信息,2 为BMP格式,3为WMF格式 if (TypePreview == 1) { } else if (TypePreview == 2 || TypePreview == 3) { PosBMP = br.ReadInt32(); //DWG文件保存的位图所在位置 LenBMP = br.ReadInt32(); //位图的大小 DwgF.Seek(PosBMP + 14, SeekOrigin.Begin); //移动指针到位图块 biBitCount = br.ReadInt16(); //读取比特深度 DwgF.Seek(PosBMP, SeekOrigin.Begin); //从位图块开始处读取全部位图内容备用 BMPInfo = br.ReadBytes(LenBMP); //不包含文件头的位图信息 br.Close(); DwgF.Close(); biH.bfType = 19778; //建立位图文件头 if (biBitCount < 9) { biH.bfSize = 54 + 4 * (int)(Math.Pow(2, biBitCount)) + LenBMP; } else { biH.bfSize = 54 + LenBMP; } biH.bfReserved1 = 0; //保留字节 biH.bfReserved2 = 0; //保留字节 biH.bfOffBits = 14 + 40 + 1024; //图像数据偏移 //以下开始写入位图文件头 bmpr.Write(biH.bfType); //文件类型 bmpr.Write(biH.bfSize); //文件大小 bmpr.Write(biH.bfReserved1); //0 bmpr.Write(biH.bfReserved2); //0 bmpr.Write(biH.bfOffBits); //图像数据偏移 bmpr.Write(BMPInfo); //写入位图 BMPF.Seek(0, SeekOrigin.Begin); //指针移到文件开始处 myImg = Image.FromStream(BMPF); //创建位图文件对象 bmpr.Close(); BMPF.Close(); } return myImg; } catch (Exception ex) { throw new Exception(ex.Message); } } } } }
实例内容扩展:
C#中读取cad文件中的属性
using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; Database db = new Database(false, true); try { //把DWG文件读入到一个临时的内存数据库中 db.ReadDwgFile(fullFileName, System.IO.FileShare.ReadWrite, true, null); //现在进入数据库并获得数据库的块表引用 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead, false, true); //从块表的模型空间特性中获得块表记录,块表记录对象包含DWG文件数据库实体 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead, false, true); foreach (ObjectId btrId in btr) { DBObject entBlock = (DBObject)trans.GetObject(btrId, OpenMode.ForRead, false, true); if (entBlock.GetRXClass().DxfName.ToUpper() == “INSERT”) { BlockReference bRef = (BlockReference)entBlock; if (bRef.AttributeCollection.Count != 0) { System.Collections.IEnumerator bRefEnum = bRef.AttributeCollection.GetEnumerator(); while (bRefEnum.MoveNext()) { ObjectId aId = (ObjectId)bRefEnum.Current;//这一句极其关键 AttributeReference aRef = (AttributeReference)trans.GetObject(aId, OpenMode.ForRead, false, true); aRef.TextString;//此语句即获得属性单行文本,请自行在此语句前添加 属性单行文本 赋于的变量 } } } } trans.Commit(); //提交事务处理 btr.Dispose(); bt.Dispose(); } catch (System.Exception ex) { MessageBox.Show(“\n出错啦: ” + ex.Message); } finally { db.Dispose(); }
到此这篇关于c#中CAD文件读取实例的文章就介绍到这了
原文来自:
本文地址://q13zd.cn/c-cad-reading.html编辑:倪家兴,审核员:逄增宝
Linux大全:
Linux系统大全: