明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1817|回复: 0

如何将一个dwg文件的所有内容都移动到一层上

[复制链接]
发表于 2012-12-30 19:35:20 | 显示全部楼层 |阅读模式
我想实现一个功能,将dwg文件中的所有内容移动到一层上,然后将这一层的内容导出到一个新的dwg文件中,使用如下代码,但是发现导出的文件还包含了原来dwg文件的所有层!
  1. public void Insert2(Data.Directions dir, string fileName)
  2.         {
  3.             string sTemplatePath = get(get(Autodesk.AutoCAD.ApplicationServices.Application.Preferences, "Files"), "TemplateDwgPath") as string;
  4.             string sTemplateFile = sTemplatePath + @"\acadiso.dwt";
  5.             string layername = "ImageIdea1" + "_" + dir.ToString() + "_" + Guid.NewGuid();
  6.             string sTempFile = sTemplatePath + @"\" + fileName.Substring(fileName.LastIndexOf("\\") + 1); ;
  7.             try
  8.             {
  9.                 Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  10.                 AcDb.Database db = AcDb.HostApplicationServices.WorkingDatabase;
  11.                
  12.                 ObjectIdCollection objectids = new ObjectIdCollection();


  13.                 using (Database FileDatabase = new Database(false, false))
  14.                 {
  15.                     FileDatabase.ReadDwgFile(fileName, System.IO.FileShare.Read, false, "");
  16.                     using (Transaction tr = FileDatabase.TransactionManager.StartTransaction())
  17.                     {

  18.                         BlockTable Filebt = FileDatabase.BlockTableId.GetObject(OpenMode.ForWrite) as BlockTable;
  19.                         BlockTableRecord btrMs =
  20.                             Filebt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForWrite) as BlockTableRecord;
  21.                         LayerTable layerTable = (LayerTable)tr.GetObject(FileDatabase.LayerTableId, OpenMode.ForWrite);
  22.                         CreateNewLayer(tr, layerTable, false, layername);
  23.                         BlockTableRecordEnumerator symbolTableEnumerator = btrMs.GetEnumerator();
  24.                         while (symbolTableEnumerator.MoveNext() != false)
  25.                         {

  26.                             Entity ent = tr.GetObject(symbolTableEnumerator.Current, OpenMode.ForRead) as Entity;
  27.                             if (ent.Layer != layername)
  28.                             {
  29.                                 Entity entcopy = ent.Clone() as Entity;
  30.                                 btrMs.AppendEntity(entcopy);
  31.                                 tr.AddNewlyCreatedDBObject(entcopy, true);
  32.                                 entcopy.Layer = layername;
  33.                                 if (!objectids.Contains(entcopy.ObjectId))
  34.                                 {
  35.                                     objectids.Add(entcopy.ObjectId);
  36.                                 }
  37.                             }

  38.                         }
  39.                         tr.Commit();
  40.                     }

  41.                     using (Database sTemplateFileDataBase = new Database(false, true))
  42.                     {
  43.                         sTemplateFileDataBase.ReadDwgFile(sTemplateFile, System.IO.FileShare.Read, true, "");
  44.                         IdMapping map = new IdMapping();
  45.                         FileDatabase.WblockCloneObjects(
  46.                             objectids,
  47.                             SymbolUtilityServices.GetBlockModelSpaceId(sTemplateFileDataBase),
  48.                             map, DuplicateRecordCloning.Replace, false);
  49.                         sTemplateFileDataBase.SaveAs(sTempFile, DwgVersion.Current);
  50.                         
  51.                     }

  52.                 }
  53.               
  54.             }
  55.             catch (System.Exception ex)
  56.             {
  57.                 throw ex;
  58.             }
  59.             finally
  60.             {
  61.                 try
  62.                 {
  63.                     //if (System.IO.File.Exists(sTempFile))
  64.                     //{
  65.                     //    System.IO.File.Delete(sTempFile);
  66.                     //}
  67.                 }
  68.                 catch (System.Exception ex)
  69.                 {
  70.                     throw ex;
  71.                 }
  72.             }


  73.         }
  74. static Object get(Object o, string prop)
  75.         {
  76.             return o.GetType().InvokeMember(prop, System.Reflection.BindingFlags.GetProperty, null, o, null);
  77.         }

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 15:29 , Processed in 0.152953 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表