接着来看cad相关的具体操作: 文档 操作、实体操作、表、事物。
一、文档的基本操作
1.当前文档基本操作
// 当前文档 Document docCur = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; // 设置文档位置 docCur.Window.Location = pt; // 最小化 docCur.Window.WindowState = Autodesk.AutoCAD.Windows.Window.State.Minimized; docCur.Window.WindowState = Autodesk.AutoCAD.Windows.Window.State.Maximized; // 最大化 // 其他不再赘述
2.新建文档// 新建文档 public static void NewDoc() { string strTemp = "acad.dwt"; // cad基本模板 Autodesk.AutoCAD.ApplicationServices.Document docNew = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Add(strTemp); Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument = docNew; // 设置为当前文档 }
3.打开文件
// 打开文件 public static void OpenDwgFile(string strDwg) { DocumentCollection acDcoMag = Application.DocumentManager; if (System.IO.File.Exists(strDwg)) { acDcoMag.Open(strDwg); } else { CAppLication.ShowWarning(strDwg + "不存在"); } }
二、数据库基本操作
认清一点即可,一个文档对应一个dwg文件,一个dwg文件就是一个数据库,cad的整个操作都是在数据库中进行的。
1.数据库结构介绍
主要有:符号表、命名对象 字典 、数据库对象等。
2.获取当前数据库
// 当前数据库 Autodesk.AutoCAD.DatabaseServices.Database dbCur = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database; // 或者 Autodesk.AutoCAD.DatabaseServices.Database dbCur1 = HostApplicationServices.WorkingDatabase;
3.数据库基本操作:打开、删除、copy
// 打开实体 public static DBObject GetObject(ObjectId id, OpenMode mode, Database db = null) { DBObject obj = null; // 必须在一个事物中打开 using (Transaction tr = db.TransactionManager.StartTransaction()) // using内自动调用 tr.Dispose() { obj = tr.GetObject(id, mode) as DBObject; tr.Commit(); // 提交事物, 事物内操作全部执行,否则在全部回滚。 } return obj; } public static void Remove(DBObject obj) { Database db = obj.Database; using (Transaction tr = db.TransactionManager.StartTransaction()) { obj.Erase(); // 删除一个实体 tr.Commit(); } } // 删除一组实体 public static void Remove(ObjectIdCollection ids) { if (ids.Count == 0) return; // 获取实体所在数据 ObjectId id = ids[0]; Database db = id.Database; using (Transaction tr = db.TransactionManager.StartTransaction()) { // obj.Erase(); // 删除一个实体 Entity ent; foreach (ObjectId idTemp in ids) { ent = tr.GetObject(idTemp, OpenMode.ForWrite) as Entity; if (null != ent) ent.Erase(); } tr.Commit(); } } // clone实体 public static void CloneEnt(ObjectIdCollection ids, ObjectId idOwn) { if (ids.Count == 0) return; Database dbSource = ids[0].Database; IdMapping idMap = new IdMapping(); dbSource.WblockCloneObjects(ids, idOwn, idMap, DuplicateRecordCloning.Replace, false); }4.事物简介
简单一点就是:类似于cad的智能指针操作。事物结束后关闭cad相关数据,避免下次打开失败。【可嵌套使用】
5. 实体类 简介【本内容和arx操作类似,不再赘述】
6.各种表介绍
符号表【存储符号表记录】 均可以通过 [名称] 访问。
cad数据库中有各种表:
最重要的块表【存储块表记录(块定义/匿名块)】,其中块表记录存放所有可以看见(不特殊化)的所有实体,模型空间和图纸空间都是特殊化(名字独特)的块表记录,自动显示集合形状。
// 模型 ObjectId idModeSpace = SymbolUtilityServices.GetBlockModelSpaceId(HostApplicationServices.WorkingDatabase); // BlockTable[BlockTableRecord.ModelSpace]; // 也可获取空间id // BlockTable["*Model_Space*"]; // 也可获取空间id ,其实名称就是名称是 *Model_Space*的块表 // 图纸 ObjectId idPaper = SymbolUtilityServices.GetBlockPaperSpaceId(HostApplicationServices.WorkingDatabase); // BlockTable["*Paper Space*"]; // 也可获取空间id ,其实名称就是名称是 *Paper Space*的块表
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删