有没方法可以快捷的获得对象的名字
字典中的对象有很多类型;写函数遍历字典的时候遇到困难
如字典中(Arxdbg查的,类名是arx的格式)
ID对应的名字 对应的Class Name
AcmDictionary AdDbDictionary
-AcmBOM AdDbDictionary
-AcmBOMDATA AcmDataDictionary
--*A1 AcmDataEntryBlock
-AcmStdDictionary AdDbDictionary
开始用
temp_dict = (DBDictionary)trans.GetObject(searched.m_value, OpenMode.ForRead);
……
foreach (DBDictionaryEntry temp in temp_dict)
{
}
发现像AcmDataEntryBlock的就出错了
请教一下,有没有类似于ObjectId id; id.name(这个自己假设的)之类的属性或者getname之类的方法的?
论坛里找的help文档中,DBobject类中,没有相关的信息
如
DBDictionaryEntry 中有 字典的名字和id,但如果知道id,怎么获得它的名字呢id.?
2009以下只有GetObject以后用obj.GetType()获取
以上有id.ObjectClass属性
DBObject obj;
obj = (DBObject)trans.GetObject(NOD.GetAt("ACAD_COLOR"), OpenMode.ForRead);
String s=obj.? 哪个属性或者方法可以得到那个值就是ACAD_COLOR? DBDictionary.NameAt Method
ID对应的名字 对应的Class Name
AcmDictionary AdDbDictionary
-AcmBOM AdDbDictionary
-AcmBOMDATA AcmDataDictionary
--*A1 AcmDataEntryBlock
-AcmStdDictionary AdDbDictionary
像*A1这样的不能用DBDictionary吧 似乎一直都没理解你的意思
字典中可以保存的是基类为DBObject的任何对象
你直接声明为DBObject应该就没有问题 可能是我讲得不够清楚吧
声明为DBObject没有问题,但我找不到那个属性或者方法可以获得它的名字
字典中很多对象不是DBDictionary类的,一开始我用这个的时候可以获得名字,但遇到不是这个类的时候就出错了。
现在用DBObject,但我找不到那个属性或者方法可以获得它的名字
比如:字典中名字为AcmBOMDATA的对象,它的owner是AcmDictionary,但两者的类的类型不一样。
我想请教一下有没简单的方法可以直接获得字符串:AcmBOMDATA
比如说用DBObject obj;
obj.name之类的就可以了 我本来是这么写的,当字典中的对象不是DBDictionary时,就出错了 namespace Lab1
{
public class Class1
{
public String blank="";
public void CreateDivision()
{
Database db = HostApplicationServices.WorkingDatabase;
Transaction trans = db.TransactionManager.StartTransaction();
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
try
{
DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite);
foreach (DBDictionaryEntry d in NOD)
{
blank = "";
searching(d);
}
trans.Commit();
}
finally
{
trans.Dispose();
}
}
public void searching(DBDictionaryEntry searched)
{
Database db = HostApplicationServices.WorkingDatabase;
Transaction trans = db.TransactionManager.StartTransaction();
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
DBDictionary temp_dict;
ed.WriteMessage("\n"+blank +searched.Key);
try
{
temp_dict = (DBDictionary)trans.GetObject(searched.m_value, OpenMode.ForRead);
if (temp_dict.Count != 1)
{
blank += " ";
foreach (DBDictionaryEntry temp in temp_dict)
{
searching(temp);
}
}
trans.Commit();
}
catch
{
ed.WriteMessage("\nError @ " + searched.Key);
}
finally
{
trans.Dispose();
}
}
}
} temp_dict = trans.GetObject(searched.m_value, OpenMode.ForRead) as DBDictionary;
if(temp_dict != null)
{
...
}
temp_dict = (DBDictionary)trans.GetObject(searched.m_value, OpenMode.ForRead);
temp_dict = trans.GetObject(searched.m_value, OpenMode.ForRead) as DBDictionary;
放前面和放后面还不一样的啊?我试试……
页:
[1]
2