MarioR 发表于 2015-3-12 05:10:25

爆炸/删除. net-Code上的EXPRTTOAUTOCAD等民用“代理”

**** Hidden Message *****

MarioR 发表于 2015-3-16 05:02:55

作为变体-您可以爆炸并删除所有代理对象和代理实体(不仅限于民事)。这是一个屏幕和附加的zip文件。

MarioR 发表于 2015-3-18 05:12:54

您好安德烈,
很抱歉这么晚才回复。
您Dll可以在普通的AutoCAD上工作,并在Civil上创建DWG。
命令“proxy”发现了超过2000个代理对象,而“rmproxy”删除了这些对象。
但是Civil-files的创建者只有Civil,并且在具有相同文件的Civil上
找到了“代理”-命令无代理。嗯...并不比我以前聪明...
问候马里奥

MarioR 发表于 2015-3-18 05:24:02

你好,安德烈...这就是问题所在。
我必须搜索“AEC”(Civil)对象,并在运行Civil时分解或删除它
,如EXPORTTOAUTOCAD -命令。但是,我如何检测DWG上的AEC/Civil对象呢?问候马里奥

BlackBox 发表于 2015-3-20 11:25:18

您好,
我找到了一个解决方案,它可能不是最好的,但它的工作和普通AutoCAD读取dwg没有代理错误。
      public static Boolean cleanCivilObjects()
      {
            Boolean result = false;
            Database acDatabase = HostApplicationServices.WorkingDatabase;
            using (Transaction acTransaction = acDatabase.TransactionManager.StartTransaction())
            {                       
                // 1. clean Named Object Dictionary
                // Namepattern for search StartsWith
                List badNamedObjPattern = new List() { "{24de2741", "ade_", "aec_", "autodesk_map", "gwsundorecorder", "root" };
                List deleteDictEntry = new List();
                DBDictionary acNamedObjectDict = (DBDictionary)acTransaction.GetObject(acDatabase.NamedObjectsDictionaryId, OpenMode.ForWrite);
                foreach (DBDictionaryEntry acNamedItem in acNamedObjectDict)
                {
                  foreach (String namePattern in badNamedObjPattern)
                  {
                        if (acNamedItem.Key.ToLower().StartsWith(namePattern))
                        {
                            deleteDictEntry.Add(acNamedItem.Key);
                            break;
                        }
                  }
                }
                if (deleteDictEntry.Count > 0)
                {
                  foreach (String delName in deleteDictEntry)
                  {
                        acNamedObjectDict.Remove(delName);
                  }
                }
                // 2. clean RegAppTable
                // Namepattern for search StartsWith
                List badNamePattern = new List() { "acmap", "ade", "aecc", "acaec", "dco", "map" };
                RegAppTable acRegAppTable = (RegAppTable)transaction.GetObject(acDatabase.RegAppTableId, OpenMode.ForRead);
                ObjectIdCollection objectIdsToDelete = new ObjectIdCollection();
                foreach (ObjectId acRATRId in acRegAppTable)
                {
                  RegAppTableRecord acRegAppTableRecord = (RegAppTableRecord)acTransaction.GetObject(acRATRId, OpenMode.ForRead);
                  if (acRegAppTableRecord != null)
                  {
                        foreach (String namePattern in badNamePattern)
                        {
                            if (acRegAppTableRecord.Name.ToLower().StartsWith(namePattern))
                            {
                              if (!objectIdsToDelete.Contains(acRegAppTableRecord.Id))
                                    objectIdsToDelete.Add(acRegAppTableRecord.Id);
                              break;
                            }
                        }
                  }
                }
                // delete all Objects
                if (objectIdsToDelete.Count > 0)
                {
                  DBObject acDBObject;
                  foreach (ObjectId acObjectId in objectIdsToDelete)
                  {
                        acDBObject = acTransaction.GetObject(acObjectId, OpenMode.ForWrite);
                        acDBObject.Erase(true);
                  }
                }
                acTransaction.Commit()
                result = true;
            }
            return result;
      }

重要!
您没有保存包含文档的数据库。CloseAndSave(fileName)" 该函数再次包括“bad-civil-Objects”。
如果使用“数据库”保存数据库。SaveAs(filename)“工作正常。问候马里奥

MarioR 发表于 2015-3-24 06:04:48


这个最近的线程可能有用:
干杯
页: [1]
查看完整版本: 爆炸/删除. net-Code上的EXPRTTOAUTOCAD等民用“代理”