c# autocad将一个DWG里的特定图层提取到另一个DWG中
2条回答
- wodexinhao 2018-06-16 03:05关注
1.在cad2012环境下: 须引用objectarx开发包 PromptPointResult ppr = ed.GetPoint("请选择插入点:"); Point3d pt = ppr.Value; //这里获得插入点 utility.WriteToEditor(pt.ToString()); blockPath = "b_sample.dwg"; using (Database blkDb = new Database(false, true)) { //read drawing blkDb.ReadDwgFile(blockPath , System.IO.FileShare.Read, true, null); blkDb.CloseInput(true); using (DocumentLock docLock = doc.LockDocument())//多文档要先这样,否则报至命错误 { using (Transaction t = doc.TransactionManager.StartTransaction()) { string name=“aa”;//aa是不与blockPath文件中的任何块重名的字符串 //insert it as a new block ObjectId idBTR = doc.Database.Insert(aa, blkDb, false); //create a ref to the block BlockTable bt = (BlockTable)t.GetObject(doc.Database.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); using (BlockReference bref = new BlockReference(pt, idBTR)) //pt是一个Point3D坐标,这里是插入进当前dwg文件中 { btr.AppendEntity(bref); t.AddNewlyCreatedDBObject(bref, true); } t.Commit(); 就是这样 谢谢 } } } 2.脱离CAD环境下 需引用TDWGNET开发包 using (new Services()) { using (Database db = new Database(true, true)) { using (Transaction ts = db.TransactionManager.StartTransaction()) { using (BlockTable bt = ts.GetObject(db.BlockTableId,OpenMode.ForWrite) as BlockTable) { BlockTableRecord btr1 = new BlockTableRecord(); Database odb = new Database(false, false); odb.ReadDwgFile("aaa.dwg", FileOpenMode.OpenForReadAndAllShare, true, null); odb.CloseInput(true); ObjectId objid = db.Insert("aa", odb, false);//这里插入进当前的dwg文件了 BlockTableRecord btr = new BlockTableRecord();//这里是插入另一个块 btr.Name = "000"; Circle c = new Circle(new Point3d(0, 0, 0), Vector3d.ZAxis, 100); btr.AppendEntity(c); ts.AddNewlyCreatedDBObject(c, true); bt.Add(btr); ts.AddNewlyCreatedDBObject(btr, true); } ts.Commit(); } //using (Transaction ts = db.TransactionManager.StartTransaction()) //{ // using (BlockTable bt = (BlockTable)ts.GetObject(db.BlockTableId, OpenMode.ForRead)) // { // BlockTableRecord btr=ts.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // BlockReference br = new BlockReference(new Point3d(0, 0, 0), bt["aa"]);//这里是插入块于当前的dwg中 // btr.AppendEntity(br); // ts.AddNewlyCreatedDBObject(br, true); // } // ts.Commit(); //} db.SaveAs(path + "\\test.dwg", DwgVersion.Current);//保存文件 } } }
解决 1无用
悬赏问题
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
- ¥50 成都蓉城足球俱乐部小程序抢票
- ¥15 yolov7训练自己的数据集
- ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
- ¥15 电力市场出清matlab yalmip kkt 双层优化问题
- ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)