爆炸/删除. net-Code上的EXPRTTOAUTOCAD等民用“代理”
**** Hidden Message ***** 作为变体-您可以爆炸并删除所有代理对象和代理实体(不仅限于民事)。这是一个屏幕和附加的zip文件。 您好安德烈,很抱歉这么晚才回复。
您Dll可以在普通的AutoCAD上工作,并在Civil上创建DWG。
命令“proxy”发现了超过2000个代理对象,而“rmproxy”删除了这些对象。
但是Civil-files的创建者只有Civil,并且在具有相同文件的Civil上
找到了“代理”-命令无代理。嗯...并不比我以前聪明...
问候马里奥 你好,安德烈...这就是问题所在。
我必须搜索“AEC”(Civil)对象,并在运行Civil时分解或删除它
,如EXPORTTOAUTOCAD -命令。但是,我如何检测DWG上的AEC/Civil对象呢?问候马里奥 您好,
我找到了一个解决方案,它可能不是最好的,但它的工作和普通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)“工作正常。问候马里奥
这个最近的线程可能有用:
干杯
页:
[1]