yzwq 发表于 2005-11-4 21:13:00

何为字典

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

lazybones 发表于 2005-11-5 17:03:00

本帖最后由 作者 于 2005-11-8 22:54:33 编辑 <br /><br /> <P>把我的毕业论文贴上一段,希望对你有帮助</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:chsdate IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899" w:st="on">2.2.1</st1:chsdate> 用户自定义数据的几种方法<SPAN lang=EN-US twffan="done"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>如何保存、读取用户数据呢?如,当图中一条直线表示<FONT face="Times New Roman">VRV</FONT>空调系统一段冷媒管,如何将管径、负荷等数据附着在这条直线上?再如,图纸统计结果为:图中共有两套<FONT face="Times New Roman">VRV</FONT>系统,系统<FONT face="Times New Roman">1</FONT>负荷为<FONT face="Times New Roman">20kW</FONT>,系统<FONT face="Times New Roman">2</FONT>负荷为<FONT face="Times New Roman">28kW</FONT>,如何将这个结果存储到<FONT face="Times New Roman">dwg</FONT>文件中呢?<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>最原始的办法是建立图块,将用户数据作为属性赋予图块。但这种方法首先要将图形对象转化为图块,而且图块属性只支持字符类型数据,功能十分有限。<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>自<FONT face="Times New Roman">AutoCAD R11</FONT>以后,<FONT face="Times New Roman">AutoCAD</FONT>引入了扩展数据<FONT face="Times New Roman">(Xdata)</FONT>和扩展记录<FONT face="Times New Roman">(Xrecord)</FONT>的概念,扩展数据可以附着在任何图形对象上,<FONT face="Times New Roman">AutoCAD</FONT>只负责维护但不使用这些信息。但是扩展实体数据只能附着在图形对象上,并且<FONT face="Times New Roman">AutoCAD</FONT>分配给每个图形实体的扩展数据空间有最大为<FONT face="Times New Roman">16K</FONT>字节的限制。</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes" twffan="done">&nbsp;&nbsp;&nbsp; Visual Lisp</FONT></SPAN>提供了新的“图形词典”功能,使我们可以使用更简单更强大的方法保存和读取用户自定义的非图形数据。与其他方法相比,图形词典具有以下优点:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">1</FONT>、可以将用户数据关联到某个图形对象上,也可以不与任何图形对象相关,只是存储到<FONT face="Times New Roman">dwg</FONT>文件中;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">2</FONT>、数据类型丰富,<FONT face="Times New Roman">AutoLISP</FONT>支持的数据类型几乎都可以使用;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">3</FONT>、没有<FONT face="Times New Roman">16K</FONT>的数据容量限制,而且在一个<FONT face="Times New Roman">dwg</FONT>文件中可以存在多个图形词典,在一个图形词典中可以有多条数据纪录<FONT face="Times New Roman">;<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">4</FONT>、图形词典功能概念容易理解,语法简单效率高<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><st1:chsdate IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899" w:st="on">2.2.2</st1:chsdate> Visual LISP中图形词典的使用方法<SPAN lang=EN-US twffan="done"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">相关的函数:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-put)</FONT>:向图形词典或<FONT face="Times New Roman">VLA</FONT>对象中加入用户数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-get)</FONT>:从图形词典或<FONT face="Times New Roman">VLA</FONT>对象中提取用户数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-delete)</FONT>:从图形词典或<FONT face="Times New Roman">VLA</FONT>对象中删除用户数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-list)</FONT>:从图形词典或<FONT face="Times New Roman">VLA</FONT>对象中列出所有的用户数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-test)</FONT>:判断用户数据是否可以在图形词典或<FONT face="Times New Roman">VLA</FONT>对象中存取<FONT face="Times New Roman"> <o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>下面分别解释在<FONT face="Times New Roman">dwg</FONT>文件中及一个图形对象上如何存取用户数据。<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">1</FONT>、将用户数据添加到<FONT face="Times New Roman">dwg</FONT>文件中,不依附于任何一个图形对象,随着文件一同保存。函数调用格式为:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-put dict key data)<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">其中:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">dict</FONT>:图形词典名称,由用户定义<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">key</FONT>:关键字,由用户定义,用于检索与之对应的用户数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">data</FONT>:用户数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>一个<FONT face="Times New Roman">dwg</FONT>文件中可以有多个不同名称的图形词典,同一个图形词典名称下可以含有若干条具体数据,每条数据由关键字和用户数据组成,同一个图形词典下关键字不能重复,通过关键字可以检索到相应的用户数据。<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>例:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-put "</FONT>系统负荷<FONT face="Times New Roman">" "</FONT>系统<FONT face="Times New Roman">1" 20)<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-put "</FONT>系统负荷<FONT face="Times New Roman">" "</FONT>系统<FONT face="Times New Roman">2" 28)<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>提取这样的数据是相当简单的,只要知道了图形字典名称和用户数据对应的关键字即可,函数调用格式为:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-get dict key)<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">dict</FONT>:图形词典名称,之前由用户定义<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">key</FONT>:关键字,之前由用户定义,用于检索与之对应的用户数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>例:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-get "</FONT>系统负荷<FONT face="Times New Roman">" "</FONT>系统<FONT face="Times New Roman">1")<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>删除一条数据的函数调用格式为:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-delete dict key</FONT>)<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">dict</FONT>:图形词典名称,之前由用户定义<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">key</FONT>:关键字,之前由用户定义,对应的数据及关键字本身将被一同删除<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>例:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-delete "</FONT>系统负荷<FONT face="Times New Roman">" "</FONT>系统<FONT face="Times New Roman">2")<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">2</FONT>、向某个图形对象添加或提取非图形数据,数据“附着”在某个图形对象上,一旦该图形对象被删除则数据也就消失了。函数用法与将用户数据添加到<FONT face="Times New Roman">dwg</FONT>文件中不同的是,第一个参数用<FONT face="Times New Roman">VLA</FONT>对象名替代图形词典名称。函数调用格式为:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-put VLA-object key data) <o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">VLA-object</FONT>:<FONT face="Times New Roman">VLA</FONT>对象名称<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">其余参数同上,需要指出的是,<FONT face="Times New Roman">VLA</FONT>对象名称不同于<FONT face="Times New Roman">AutoLisp</FONT>中常用的“图形对象名称”,前者可以使用函数由后者转换而来,如:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(setq en_name (car (entsel "\n</FONT>选择添加用户自定义数据的图元:<FONT face="Times New Roman">")))<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(setq VLA_name (vlax-ename-&gt;vla-object en))<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">选择图形文件中表示冷媒管的直线,获得它的<FONT face="Times New Roman">VLA</FONT>对象名称<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>例:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-put VLA_name "</FONT>管径<FONT face="Times New Roman">" "L9.52 G15.2")<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-put VLA_name "</FONT>负荷<FONT face="Times New Roman">" 4.0)<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">将管径、负荷数据“附着”到图中直线上<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">读取数据的函数调用格式为:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-get VLA-object key data)<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>例:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-get VLA_name "</FONT>管径<FONT face="Times New Roman">")<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">从直线上获取与“管径”对应的数据<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">删除一条数据的函数调用格式为:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-delete VLA-object key)<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes" twffan="done"><FONT face="Times New Roman">&nbsp;&nbsp;&nbsp; </FONT></SPAN>例:<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(vlax-ldata-delete VLA_name "</FONT>负荷<FONT face="Times New Roman">")<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">将“负荷”一项从直线上删除</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">by lazybones</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">2005.11<o:p></o:p></P>

2458208487 发表于 2023-3-19 21:32:45

讲的很好,理解了

无痕 发表于 2005-11-5 13:26:00

<P>词典就是一个口袋(容器)</P>
<P>你什么都可以装。</P>
<P>但就是装不了,你的爱</P>
<P>你的爱只能装在你心里</P>
<P>cad就是一把刀</P>
<P>可以雕刻任何你想像的东西</P>
<P>但就是不能雕刻你的爱人</P>
<P>对你的爱人</P>
<P>应该包容和呵护</P>
<P>而不是去雕刻她.</P>
<P>&nbsp;</P>

yzwq 发表于 2005-11-5 15:08:00

楼上在开玩笑,我是真心想知道,本人看过不少书,就是弄不明白词典有什么用途,真想知道,麻烦请各位高手指教为感.

yzwq 发表于 2005-11-5 15:10:00

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

lazybones 发表于 2005-11-5 16:29:00

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

lazybones 发表于 2005-11-5 16:44:00

想一想他的名字——春梦了无痕...

无痕 发表于 2005-11-5 20:37:00

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

didini 发表于 2005-11-5 21:07:00

无痕老兄生气了!后果很严重!

lazybones 发表于 2005-11-5 22:34:00

投降
页: [1] 2 3
查看完整版本: 何为字典