/ty天涯/ty 发表于 2012-12-30 19:35:20

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

我想实现一个功能,将dwg文件中的所有内容移动到一层上,然后将这一层的内容导出到一个新的dwg文件中,使用如下代码,但是发现导出的文件还包含了原来dwg文件的所有层!
public void Insert2(Data.Directions dir, string fileName)
      {
            string sTemplatePath = get(get(Autodesk.AutoCAD.ApplicationServices.Application.Preferences, "Files"), "TemplateDwgPath") as string;
            string sTemplateFile = sTemplatePath + @"\acadiso.dwt";
            string layername = "ImageIdea1" + "_" + dir.ToString() + "_" + Guid.NewGuid();
            string sTempFile = sTemplatePath + @"\" + fileName.Substring(fileName.LastIndexOf("\\") + 1); ;
            try
            {
                Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
                AcDb.Database db = AcDb.HostApplicationServices.WorkingDatabase;
               
                ObjectIdCollection objectids = new ObjectIdCollection();


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

                        BlockTable Filebt = FileDatabase.BlockTableId.GetObject(OpenMode.ForWrite) as BlockTable;
                        BlockTableRecord btrMs =
                            Filebt.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                        LayerTable layerTable = (LayerTable)tr.GetObject(FileDatabase.LayerTableId, OpenMode.ForWrite);
                        CreateNewLayer(tr, layerTable, false, layername);
                        BlockTableRecordEnumerator symbolTableEnumerator = btrMs.GetEnumerator();
                        while (symbolTableEnumerator.MoveNext() != false)
                        {

                            Entity ent = tr.GetObject(symbolTableEnumerator.Current, OpenMode.ForRead) as Entity;
                            if (ent.Layer != layername)
                            {
                              Entity entcopy = ent.Clone() as Entity;
                              btrMs.AppendEntity(entcopy);
                              tr.AddNewlyCreatedDBObject(entcopy, true);
                              entcopy.Layer = layername;
                              if (!objectids.Contains(entcopy.ObjectId))
                              {
                                    objectids.Add(entcopy.ObjectId);
                              }
                            }

                        }
                        tr.Commit();
                  }

                  using (Database sTemplateFileDataBase = new Database(false, true))
                  {
                        sTemplateFileDataBase.ReadDwgFile(sTemplateFile, System.IO.FileShare.Read, true, "");
                        IdMapping map = new IdMapping();
                        FileDatabase.WblockCloneObjects(
                            objectids,
                            SymbolUtilityServices.GetBlockModelSpaceId(sTemplateFileDataBase),
                            map, DuplicateRecordCloning.Replace, false);
                        sTemplateFileDataBase.SaveAs(sTempFile, DwgVersion.Current);
                        
                  }

                }
            
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                try
                {
                  //if (System.IO.File.Exists(sTempFile))
                  //{
                  //    System.IO.File.Delete(sTempFile);
                  //}
                }
                catch (System.Exception ex)
                {
                  throw ex;
                }
            }


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

页: [1]
查看完整版本: 如何将一个dwg文件的所有内容都移动到一层上