明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2706|回复: 12

[符号表] 有没方法可以快捷的获得对象的名字

  [复制链接]
发表于 2010-12-30 12:43 | 显示全部楼层 |阅读模式
字典中的对象有很多类型;
写函数遍历字典的时候遇到困难
如字典中(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.?

发表于 2010-12-30 13:05 | 显示全部楼层
2009以下只有GetObject以后用obj.GetType()获取
以上有id.ObjectClass属性
 楼主| 发表于 2010-12-31 11:08 | 显示全部楼层
DBObject obj;
obj = (DBObject)trans.GetObject(NOD.GetAt("ACAD_COLOR"), OpenMode.ForRead);

String s=obj.? 哪个属性或者方法可以得到那个值就是ACAD_COLOR?
发表于 2010-12-31 11:21 | 显示全部楼层
DBDictionary.NameAt Method
 楼主| 发表于 2010-12-31 14:47 | 显示全部楼层
ID对应的名字          对应的Class Name
AcmDictionary        AdDbDictionary
-AcmBOM               AdDbDictionary
-AcmBOMDATA      AcmDataDictionary
--*A1                     AcmDataEntryBlock
-AcmStdDictionary AdDbDictionary

像*A1这样的不能用DBDictionary吧
发表于 2010-12-31 15:06 | 显示全部楼层
似乎一直都没理解你的意思
字典中可以保存的是基类为DBObject的任何对象
你直接声明为DBObject应该就没有问题
 楼主| 发表于 2010-12-31 15:26 | 显示全部楼层
可能是我讲得不够清楚吧
声明为DBObject没有问题,但我找不到那个属性或者方法可以获得它的名字

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

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

我想请教一下有没简单的方法可以直接获得字符串:AcmBOMDATA
比如说用DBObject obj;
obj.name之类的就可以了
 楼主| 发表于 2010-12-31 15:33 | 显示全部楼层
我本来是这么写的,当字典中的对象不是DBDictionary时,就出错了
  1. namespace Lab1
  2. {
  3.     public class Class1
  4.     {
  5.         public String blank="";
  6.       
  7.         [CommandMethod("cdd")]
  8.         public void CreateDivision()
  9.         {
  10.             Database db = HostApplicationServices.WorkingDatabase;
  11.             Transaction trans = db.TransactionManager.StartTransaction();
  12.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  13.             try
  14.             {
  15.                 DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite);

  16.                 foreach (DBDictionaryEntry d in NOD)
  17.                 {
  18.                     blank = "";
  19.                     searching(d);
  20.                 }
  21.                 trans.Commit();
  22.             }
  23.             finally
  24.             {
  25.                 trans.Dispose();
  26.             }

  27.         }

  28.         public void searching(DBDictionaryEntry searched)
  29.         {
  30.             Database db = HostApplicationServices.WorkingDatabase;
  31.             Transaction trans = db.TransactionManager.StartTransaction();
  32.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

  33.             DBDictionary temp_dict;

  34.             ed.WriteMessage("\n"+blank +searched.Key);
  35.             try
  36.             {

  37.                 temp_dict = (DBDictionary)trans.GetObject(searched.m_value, OpenMode.ForRead);
  38.                 if (temp_dict.Count != 1)
  39.                 {
  40.                     blank += " ";
  41.                     foreach (DBDictionaryEntry temp in temp_dict)
  42.                     {
  43.                         searching(temp);
  44.                     }
  45.                 }
  46.                 trans.Commit();
  47.             }
  48.             catch
  49.             {
  50.                 ed.WriteMessage("\nError @ " + searched.Key);
  51.             }
  52.             finally
  53.             {
  54.                 trans.Dispose();
  55.             }
  56.         }
  57.     }
  58. }
发表于 2010-12-31 16:24 | 显示全部楼层
temp_dict = trans.GetObject(searched.m_value, OpenMode.ForRead) as DBDictionary;
if(temp_dict != null)
{
...
}


 楼主| 发表于 2010-12-31 16:59 | 显示全部楼层
temp_dict = (DBDictionary)trans.GetObject(searched.m_value, OpenMode.ForRead);
temp_dict = trans.GetObject(searched.m_value, OpenMode.ForRead) as DBDictionary;

放前面和放后面还不一样的啊?我试试……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-3-29 05:21 , Processed in 0.153704 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表