明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6159|回复: 22

何为字典

  [复制链接]
发表于 2005-11-4 21:13:00 | 显示全部楼层 |阅读模式

LISP中字典有何功用,我看了几本书,都不能解释清楚,国内的书都是互相抄的,全是一个解释,请LISP高手给予详解为感.

发表于 2005-11-5 17:03:00 | 显示全部楼层
本帖最后由 作者 于 2005-11-8 22:54:33 编辑

把我的毕业论文贴上一段,希望对你有帮助

2.2.1 用户自定义数据的几种方法

    如何保存、读取用户数据呢?如,当图中一条直线表示VRV空调系统一段冷媒管,如何将管径、负荷等数据附着在这条直线上?再如,图纸统计结果为:图中共有两套VRV系统,系统1负荷为20kW,系统2负荷为28kW,如何将这个结果存储到dwg文件中呢?

    最原始的办法是建立图块,将用户数据作为属性赋予图块。但这种方法首先要将图形对象转化为图块,而且图块属性只支持字符类型数据,功能十分有限。

    AutoCAD R11以后,AutoCAD引入了扩展数据(Xdata)和扩展记录(Xrecord)的概念,扩展数据可以附着在任何图形对象上,AutoCAD只负责维护但不使用这些信息。但是扩展实体数据只能附着在图形对象上,并且AutoCAD分配给每个图形实体的扩展数据空间有最大为16K字节的限制。

    Visual Lisp提供了新的“图形词典”功能,使我们可以使用更简单更强大的方法保存和读取用户自定义的非图形数据。与其他方法相比,图形词典具有以下优点:

1、可以将用户数据关联到某个图形对象上,也可以不与任何图形对象相关,只是存储到dwg文件中;

2、数据类型丰富,AutoLISP支持的数据类型几乎都可以使用;

3、没有16K的数据容量限制,而且在一个dwg文件中可以存在多个图形词典,在一个图形词典中可以有多条数据纪录;

4、图形词典功能概念容易理解,语法简单效率高

2.2.2 Visual LISP中图形词典的使用方法

相关的函数:

(vlax-ldata-put):向图形词典或VLA对象中加入用户数据

(vlax-ldata-get):从图形词典或VLA对象中提取用户数据

(vlax-ldata-delete):从图形词典或VLA对象中删除用户数据

(vlax-ldata-list):从图形词典或VLA对象中列出所有的用户数据

(vlax-ldata-test):判断用户数据是否可以在图形词典或VLA对象中存取

    下面分别解释在dwg文件中及一个图形对象上如何存取用户数据。

1、将用户数据添加到dwg文件中,不依附于任何一个图形对象,随着文件一同保存。函数调用格式为:

(vlax-ldata-put dict key data)

其中:

dict:图形词典名称,由用户定义

key:关键字,由用户定义,用于检索与之对应的用户数据

data:用户数据

    一个dwg文件中可以有多个不同名称的图形词典,同一个图形词典名称下可以含有若干条具体数据,每条数据由关键字和用户数据组成,同一个图形词典下关键字不能重复,通过关键字可以检索到相应的用户数据。

    例:

(vlax-ldata-put "系统负荷" "系统1" 20)

(vlax-ldata-put "系统负荷" "系统2" 28)

    提取这样的数据是相当简单的,只要知道了图形字典名称和用户数据对应的关键字即可,函数调用格式为:

(vlax-ldata-get dict key)

dict:图形词典名称,之前由用户定义

key:关键字,之前由用户定义,用于检索与之对应的用户数据

    例:

(vlax-ldata-get "系统负荷" "系统1")

    删除一条数据的函数调用格式为:

(vlax-ldata-delete dict key

dict:图形词典名称,之前由用户定义

key:关键字,之前由用户定义,对应的数据及关键字本身将被一同删除

    例:

(vlax-ldata-delete "系统负荷" "系统2")

2、向某个图形对象添加或提取非图形数据,数据“附着”在某个图形对象上,一旦该图形对象被删除则数据也就消失了。函数用法与将用户数据添加到dwg文件中不同的是,第一个参数用VLA对象名替代图形词典名称。函数调用格式为:

(vlax-ldata-put VLA-object key data)

VLA-objectVLA对象名称

其余参数同上,需要指出的是,VLA对象名称不同于AutoLisp中常用的“图形对象名称”,前者可以使用函数由后者转换而来,如:

(setq en_name (car (entsel "\n选择添加用户自定义数据的图元:")))

(setq VLA_name (vlax-ename->vla-object en))

选择图形文件中表示冷媒管的直线,获得它的VLA对象名称

    例:

(vlax-ldata-put VLA_name "管径" "L9.52 G15.2")

(vlax-ldata-put VLA_name "负荷" 4.0)

将管径、负荷数据“附着”到图中直线上

读取数据的函数调用格式为:

(vlax-ldata-get VLA-object key data)

    例:

(vlax-ldata-get VLA_name "管径")

从直线上获取与“管径”对应的数据

删除一条数据的函数调用格式为:

(vlax-ldata-delete VLA-object key)

    例:

(vlax-ldata-delete VLA_name "负荷")

将“负荷”一项从直线上删除

 

by lazybones

2005.11

点评

真深入啊,学的什么专业?  发表于 2023-3-20 08:29
回复 支持 2 反对 0

使用道具 举报

发表于 2023-3-19 21:32:45 | 显示全部楼层
讲的很好,理解了
发表于 2005-11-5 13:26:00 | 显示全部楼层

词典就是一个口袋(容器)

你什么都可以装。

但就是装不了,你的爱

你的爱只能装在你心里

cad就是一把刀

可以雕刻任何你想像的东西

但就是不能雕刻你的爱人

对你的爱人

应该包容和呵护

而不是去雕刻她.

 

 楼主| 发表于 2005-11-5 15:08:00 | 显示全部楼层
楼上在开玩笑,我是真心想知道,本人看过不少书,就是弄不明白词典有什么用途,真想知道,麻烦请各位高手指教为感.
 楼主| 发表于 2005-11-5 15:10:00 | 显示全部楼层

各位高手能不能举个例子说明一下,对于楼上的回贴,我还是表示感谢,并仔细评味.

发表于 2005-11-5 16:29:00 | 显示全部楼层

无痕在梦呓呢,你也如获至宝,还潜心钻研呢!

发表于 2005-11-5 16:44:00 | 显示全部楼层
想一想他的名字——春梦了无痕...
发表于 2005-11-5 20:37:00 | 显示全部楼层
  1. Visual Lisp提供了新的“图形词典”功能,使我们可以使用更简单更强大的方法保存和读取用户自定义的非图形数据。与其他方法相比,图形词典具有以下优点:
  2. 1、可以将用户数据关联到某个图形对象上,也可以不与任何图形对象相关,只是存储到dwg文件中;
  3. 2、数据类型丰富,AutoLISP支持的数据类型几乎都可以使用;
  4. 3、没有16K的数据容量限制,而且在一个dwg文件中可以存在多个图形词典,在一个图形词典中可以有多条数据纪录;
  5. 4、图形词典功能概念容易理解,语法简单效率高
复制代码
我觉得你还没有把词典说的明白。
词典,是任意对象的一个容器,与符号表不同,一个词典可以包含不同种类的对象,也可以包含其他词典。
就是说,词典,什么都可以装,当然也包括图形数据,和非图形数据。
这正是为什么我前面的诗中开篇(很严肃的):
词典就是一个口袋(容器)
你什么都可以装。
而你们却当做笑谈!!!!

发表于 2005-11-5 21:07:00 | 显示全部楼层
无痕老兄生气了!后果很严重!
发表于 2005-11-5 22:34:00 | 显示全部楼层
投降
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 12:36 , Processed in 0.169856 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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