乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 143|回复: 9

C#操作有名字典

[复制链接]

9

主题

30

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-10-4 10:50:00 | 显示全部楼层 |阅读模式
(vlax-ldata-get dict key)
(vlax-ldata-put dict key data )
哪位大师能帮下忙。用C#实现LSp这两个函数。
研究了好久没搞明白
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-10-4 11:36:00 | 显示全部楼层

ldata是Autodesk为 alisp 专门做的一个数据,可以认为是一个“自定义实体”(0 . "VL_OBJ"),不管ARX还是 C# 都不能方便存取,只有那几个 alisp 使用才方便,当然用 dxf 可以获取,不过处理 resultburf 也不是一件轻松的事情(ldata 词典数据是自由的)
和 alisp 交互可以考虑下面方法
1 自己写词典存取函数,使用标准的 xrecord ,这个中 C# 中能处理,自己写 Lispfunction
2 使用 Alisp 变量过渡,在 C# 中使用 invoek 运行 (setq ldata (vlax-ldata-get "mydict" "first")) 语句,然后用 GetLispSymbol 获取,设置时 invoke 运行 (vlax-ldata-put "mydict" "first" '(1 2 2)) ,不需要返回值
回复

使用道具 举报

9

主题

30

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-10-4 11:51:00 | 显示全部楼层

谢谢,原来C#不能这样存呀,
我只是想在图里存一个double,
然后可以用程序读取
不会搞,唉哟伤心
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-10-4 12:22:00 | 显示全部楼层

在 根词典建立子词典然后设置 Xrecord
回复

使用道具 举报

9

主题

30

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-10-4 12:36:00 | 显示全部楼层

就是不会设置和读取Xrecord
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-10-6 08:11:00 | 显示全部楼层
  1. ///
  2.         /// 获取或创建根词典
  3.         ///
  4.         ///
  5.         ///
  6.         public static DBDictionary GetOrCreateDictionary(string name)
  7.         {
  8.             var db = HostApplicationServices.WorkingDatabase;
  9.             using (Transaction tr = db.TransactionManager.StartTransaction())
  10.             {
  11.                 var dict = db.NamedObjectsDictionaryId.GetObject(OpenMode.ForWrite);
  12.                 if (!dict.Contains(name))
  13.                 {
  14.                     var ndict = new DBDictionary();
  15.                     dict.SetAt(name, ndict);
  16.                     tr.AddNewlyCreatedDBObject(ndict, true);
  17.                     tr.Commit();
  18.                     return ndict;
  19.                 }
  20.                 return dict;
  21.             }
  22.         }
  23.         ///
  24.         /// 创建词典并设置 XRecord
  25.         /// 2015.03.24
  26.         ///
  27.         /// 子词典名
  28.         /// Xrecord 名
  29.         /// 数据
  30.         ///
  31.         public static void CreateDictionary(string name, string key, ResultBuffer rb)
  32.         {
  33.             var db = HostApplicationServices.WorkingDatabase;
  34.             using (var tr = db.TransactionManager.StartTransaction())
  35.             {
  36.                 DBDictionary subDictionary;
  37.                 var nod = db.NamedObjectsDictionaryId.GetObject(OpenMode.ForWrite);
  38.                 try
  39.                 {
  40.                     subDictionary = nod.GetAt(name).GetObject(OpenMode.ForWrite);
  41.                 }
  42.                 catch (Exception)
  43.                 {
  44.                     subDictionary = new DBDictionary();
  45.                     nod.SetAt(name, subDictionary);
  46.                     tr.AddNewlyCreatedDBObject(subDictionary, true);
  47.                     subDictionary = nod.GetAt(name).GetObject(OpenMode.ForWrite);
  48.                 }
  49.                 Xrecord xrec;
  50.                 try
  51.                 {
  52.                     xrec = (Xrecord) tr.GetObject(subDictionary.GetAt(key), OpenMode.ForWrite);
  53.                     xrec.Data = rb;
  54.                     xrec.Dispose();
  55.                 }
  56.                 catch (Exception)
  57.                 {
  58.                     subDictionary.UpgradeOpen();
  59.                     xrec = new Xrecord {Data = rb};
  60.                     subDictionary.SetAt(key, xrec);
  61.                     tr.AddNewlyCreatedDBObject(xrec, true);
  62.                 }
  63.                 tr.Commit();
  64.             }
  65.         }
回复

使用道具 举报

9

主题

30

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-10-7 07:53:00 | 显示全部楼层

GetObject
非泛型  方法。。。不能与类型实参一起使用
这是什么情况呢?[em0]
昨天研究了一下,我都是每次删除主键,然后新建主键和子键来达到目的。不是很理想。
想研究一下发的通用方法,完善我的程序,也刚好学习提高一下。
同时对你的热心表示极大的感谢。
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-10-7 08:04:00 | 显示全部楼层
复制代码
回复

使用道具 举报

9

主题

30

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-10-7 08:15:00 | 显示全部楼层

谢谢,这个泛型,我拿去研究一下,由于C#水平比较差,意思是知道了,但理解的层次不够深。
再次感谢。
回复

使用道具 举报

52

主题

380

帖子

11

银币

中流砥柱

Rank: 25

铜币
588
发表于 2015-10-7 14:36:00 | 显示全部楼层
估计楼主也是想用lisp和C#混合编程。
那还是学习一下,如何将C#的变量搞成指针什么的全局变量,再用lisp调用。
就是这个贴子
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:24 , Processed in 0.399229 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表