hact 发表于 2010-12-30 12:43:06

有没方法可以快捷的获得对象的名字

字典中的对象有很多类型;
写函数遍历字典的时候遇到困难
如字典中(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.?

雪山飞狐_lzh 发表于 2010-12-30 13:05:36

2009以下只有GetObject以后用obj.GetType()获取
以上有id.ObjectClass属性

hact 发表于 2010-12-31 11:08:45

DBObject obj;
obj = (DBObject)trans.GetObject(NOD.GetAt("ACAD_COLOR"), OpenMode.ForRead);

String s=obj.? 哪个属性或者方法可以得到那个值就是ACAD_COLOR?

雪山飞狐_lzh 发表于 2010-12-31 11:21:19

DBDictionary.NameAt Method

hact 发表于 2010-12-31 14:47:48

ID对应的名字          对应的Class Name
AcmDictionary      AdDbDictionary
-AcmBOM               AdDbDictionary
-AcmBOMDATA      AcmDataDictionary
--*A1                     AcmDataEntryBlock
-AcmStdDictionary AdDbDictionary

像*A1这样的不能用DBDictionary吧

雪山飞狐_lzh 发表于 2010-12-31 15:06:03

似乎一直都没理解你的意思
字典中可以保存的是基类为DBObject的任何对象
你直接声明为DBObject应该就没有问题

hact 发表于 2010-12-31 15:26:05

可能是我讲得不够清楚吧
声明为DBObject没有问题,但我找不到那个属性或者方法可以获得它的名字

字典中很多对象不是DBDictionary类的,一开始我用这个的时候可以获得名字,但遇到不是这个类的时候就出错了。
现在用DBObject,但我找不到那个属性或者方法可以获得它的名字

比如:字典中名字为AcmBOMDATA的对象,它的owner是AcmDictionary,但两者的类的类型不一样。

我想请教一下有没简单的方法可以直接获得字符串:AcmBOMDATA
比如说用DBObject obj;
obj.name之类的就可以了

hact 发表于 2010-12-31 15:33:05

我本来是这么写的,当字典中的对象不是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();
            }
      }
    }
}

雪山飞狐_lzh 发表于 2010-12-31 16:24:35

temp_dict = trans.GetObject(searched.m_value, OpenMode.ForRead) as DBDictionary;
if(temp_dict != null)
{
...
}


hact 发表于 2010-12-31 16:59:24

temp_dict = (DBDictionary)trans.GetObject(searched.m_value, OpenMode.ForRead);
temp_dict = trans.GetObject(searched.m_value, OpenMode.ForRead) as DBDictionary;

放前面和放后面还不一样的啊?我试试……
页: [1] 2
查看完整版本: 有没方法可以快捷的获得对象的名字