明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2606|回复: 1

c#怎样在CAD词典内检索数据(已解决)

[复制链接]
发表于 2011-9-14 16:46:05 | 显示全部楼层 |阅读模式
本帖最后由 xgr 于 2011-9-16 12:33 编辑

看了教程还是不太懂,只知道创建词典条目,却不知道如何为词典条目设置和读取数据。

  1. //将比例尺设置到词典对象,词典条目名称为Xggj_Tool
  2.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  3.             Database acCurDb = acDoc.Database;
  4.             Transaction trans = acCurDb.TransactionManager.StartTransaction();
  5.             DocumentLock dl = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
  6.             try
  7.             {
  8.                 //首先,获取NOD……
  9.                 DBDictionary NOD = (DBDictionary)trans.GetObject(acCurDb.NamedObjectsDictionaryId, OpenMode.ForWrite);

  10.                 //定义一个自定义级别的字典"Xggj_Tool"
  11.                 DBDictionary acmeDict;
  12.                 try
  13.                 {
  14.                     //如果Xg_Tool不存在,则转到catch块,这里什么也不做
  15.                     acmeDict = (DBDictionary)trans.GetObject(NOD.GetAt("Xggj_Tool"), OpenMode.ForRead);
  16.                 }
  17.                 catch
  18.                 {
  19.                     //如果Xggj_Tool不存在,则创建它并把它加入到NOD中……
  20.                     acmeDict = new DBDictionary();

  21.                     NOD.SetAt("Xggj_Tool", acmeDict);
  22.                     trans.AddNewlyCreatedDBObject(acmeDict, true);

  23.                     //定义子阶别的字典条目"Xggj_Scales"(比例尺)
  24.                     DBDictionary divDict;
  25.                     try
  26.                     {
  27.                         divDict = (DBDictionary)trans.GetObject(acmeDict.GetAt("Xggj_Scales"), OpenMode.ForWrite);
  28.                     }
  29.                     catch
  30.                     {
  31.                         divDict = new DBDictionary();
  32.                         acmeDict.SetAt("Xggj_Scales", divDict);
  33.                         trans.AddNewlyCreatedDBObject(divDict, true);
  34.                     }
  35.                 }
  36.                 trans.Commit();
  37.             }
  38.             finally
  39.             {
  40.                 dl.Dispose();
  41.             }
复制代码

运行后可以查看到词典条目,请问怎样设置值何取值

LISP有
(vlax-ldata-get dict key [default-data] [private])
(vlax-ldata-put dict key data [private])
c#怎么做??谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2011-9-16 12:39:19 | 显示全部楼层
问题已解决
首先建立词典条目Xggj_Tool
并设置Xggj_Tool的值为1000,
  1. //将比例尺设置到词典对象,词典条目名称为Xggj_Tool
  2.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  3.             Database acCurDb = acDoc.Database;
  4.             Transaction trans = acCurDb.TransactionManager.StartTransaction();
  5.             DocumentLock dl = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
  6.             try
  7.             {
  8.                 //首先,获取NOD……
  9.                 DBDictionary NOD = (DBDictionary)trans.GetObject(acCurDb.NamedObjectsDictionaryId, OpenMode.ForWrite);

  10.                 //定义一个自定义级别的字典"Xggj_Tool"
  11.                 DBDictionary acmeDict;
  12.                 try
  13.                 {
  14.                     //如果Xg_Tool不存在,则转到catch块,这里什么也不做
  15.                     acmeDict = (DBDictionary)trans.GetObject(NOD.GetAt("Xggj_Tool"), OpenMode.ForRead);
  16.                 }
  17.                 catch
  18.                 {
  19.                     //如果Xggj_Tool不存在,则创建它并把它加入到NOD中……
  20.                     acmeDict = new DBDictionary();

  21.                     NOD.SetAt("Xggj_Tool", acmeDict);
  22.                     trans.AddNewlyCreatedDBObject(acmeDict, true);


  23.                     Xrecord mgrXRec;
  24.                     try
  25.                     {
  26.                         mgrXRec = (Xrecord)trans.GetObject(acmeDict.GetAt("Xggj_Scales"), OpenMode.ForWrite);
  27.                     }
  28.                     catch
  29.                     {
  30.                         mgrXRec = new Xrecord();
  31.                         mgrXRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, "1000"));
  32.                         acmeDict.SetAt("Xggj_Scales", mgrXRec);
  33.                         trans.AddNewlyCreatedDBObject(mgrXRec, true);
  34.                     }
  35.                 }
  36.                 trans.Commit();
  37.             }
  38.             finally
  39.             {
  40.                 dl.Dispose();
  41.             }
复制代码
读取Xggj_Tool的值
  1. //读取词典对象的值
  2.             Transaction trans1 = acCurDb.TransactionManager.StartTransaction();
  3.             DBDictionary NOD1 = (DBDictionary)trans1.GetObject(acCurDb.NamedObjectsDictionaryId, OpenMode.ForRead);
  4.             DBDictionary Dict1 = (DBDictionary)trans1.GetObject(NOD1.GetAt("Xggj_Tool"), OpenMode.ForRead);
  5.             Xrecord salesXRec = (Xrecord)trans1.GetObject(Dict1.GetAt("Xggj_Scales"), OpenMode.ForRead);
  6.             TypedValue resBuf = salesXRec.Data.AsArray()[0];
  7.             acDoc.Editor.WriteMessage("当前词典对象的值为:" + Convert.ToString(resBuf.Value));
  8.             trans1.Commit();
复制代码
运行命令行显示:“当前词典对象的值为:1000“


您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 20:50 , Processed in 0.145295 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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