明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2559|回复: 12

[提问] 如何创建字典类型的数据列表??

[复制链接]
发表于 2015-12-15 08:32 | 显示全部楼层 |阅读模式
我在明经翻译的VLISP函数手册里看到有dictadd,dictnext等关于字典数据列表的函数,但是我要如何选创建一个dict类型的列表?

我猜应该和(setq list1 ‘(a b c))差不多吧,但是没有找到相关的教程和说明,求各位前辈指条明路。


该贴已经同步到 羊渔蛋的微博
发表于 2019-6-16 16:38 来自手机 | 显示全部楼层
厉害了,能不能把要创建的东西直接以字典形式,添加到cad中呢
发表于 2023-3-10 21:03 | 显示全部楼层
看来大师是高级LISP开发者?对字典操作很熟悉
发表于 2019-3-24 22:27 | 显示全部楼层
多谢大师,造福人类
发表于 2015-12-15 18:37 | 显示全部楼层
vlax-ldata-put
  


存储图形词典或对象中的 LISP 数据

(vlax-ldata-put dict key data [private])
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

key

字符串,指定词典关键字。

data

要存储到词典中的 LISP 数据。

private

如果从独立名称空间 VLX 调用 vlax-ldata-put,且 private 的值非 nil,则 vlax-ldata-put 仅将同一 VLX 的数据标为可检索的。

返回值

data 的值。

示例

_$ (vlax-ldata-put "dict" "key" '(1))
(1)
_$ (vlax-ldata-put "dict" "cay" "Gumbo jumbo")
"Gumbo jumbo"

发表于 2015-12-15 18:37 | 显示全部楼层
本帖最后由 xiaolong1487 于 2015-12-15 18:39 编辑

vlax-ldata-get

在图形词典或对象中检索 LISP 数据

(vlax-ldata-get dict key [default-data] [private])
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

key

字符串,指定词典关键字。

default-data

如果词典中没有匹配的关键字,则返回该 LISP 数据。

private

如果 private 的值非空,且从独立名称空间 VLX 调用 vlax-ldata-get,则 vlax-ldata-get 在 dict 中检索私有 LISP 数据。

如果指定了 private,则必须指定 default-data。可以将后者指定为 nil。

请注意,在独立名称空间 VLX 中,可以使用同样的 dict 和 key 参数同时存储私有和非私有变量。私有数据仅能在同一 VLX 中访问,而非私有数据可以被其他应用程序检索。

返回值

key 的值。

示例

在 Visual LISP 窗口输入下列命令:

_$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo")
"Mumbo Dumbo"
_$ (vlax-ldata-get "mydict" "mykey")
"Mumbo Dumbo"
测试在 VLX 中使用私有数据的步骤
在 Visual LISP 窗口输入下列命令:
_$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo")
"Mumbo Dumbo"
_$ (vlax-ldata-get "mydict" "mykey")
"Mumbo Dumbo"
在文件中输入下列代码,然后使用“生成应用程序”将文件生成为 VLX。使用“生成应用程序”向导的“专家”模式,并在“应用程序选项”中选择“独立名称空间”。
(vl-doc-export 'ldataput)
(vl-doc-export 'ldataget)
(vl-doc-export 'ldataget-nilt)
(defun ldataput ()
  (princ "This is a test of putting private ldata ")
  (vlax-ldata-put "mydict" "mykey" "Mine! Mine! " T)
)
(defun ldataget ()
  (vlax-ldata-get "mydict" "mykey")
)
(defun ldataget-nilt ()
  (vlax-ldata-get "mydict" "mykey" nil T)
)
加载 VLX 文件。
运行 ldataput 以保存私有数据:
_$ (ldataput)
This is a test of putting private ldata
参考上面定义 ldataput 的代码。该函数存储了一个包含 "Mine! Mine!" 的字符串。

运行 ldataget 以检索 LISP 数据:
_$ (ldataget)
"Mumbo Dumbo"
请注意 ldataget 返回的数据并非 ldataput 存储的数据。这是因为 ldataget 在调用 vlax-ldata-get 时没有指定 private 参数。所以,ldataget 检索的数据是第 1 步中从 Visal LISP 控制台中调用 vlax-ldata-put 设置的数据。

_$ (ldataget-nilt)
"Mine! Mine! "
运行 ldataget-nilt 以检索 LISP 数据:
_$ (ldataget-nilt)
"Mine! Mine! "
这次返回由 ldataput 保存的私有数据,因为 ldataget-nilt 在调用 vlax-ldata-get.时指定了 private 参数。

在 Visual LISP 控制台提示行中进行与 ldataget-nilt 相同的调用,以检索私有数据:
_$ (vlax-ldata-get "mydict" "mykey" nil T)
"Mumbo Dumbo"
在从独立名称空间 VLX 中调用 vlax-ldata-get 时,忽略了 private 参数。对于指定的 dict 和 key,如果存在非私有数据(如本例所示),则检索非私有数据。
发表于 2015-12-15 18:38 | 显示全部楼层
vlax-ldata-list
  


列出图形词典中的 LISP 数据

(vlax-ldata-list dict [private])
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

private

如果从独立名称空间 VLX 调用 vlax-ldata-list,且 private 的值非 nil,则 vlax-ldata-list 仅检索保存在同一 VLX 中的私有数据。(关于本参数的使用,请参见 vlax-ldata-get 。)

返回值

由对 (key . value) 构成的关联表。

示例

使用 vlax-ldata-put 存储词典中的 LISP 数据:

_$ (vlax-ldata-put "dict" "cay" "Mumbo Jumbo ")
"Mumbo Jumbo "
_$ (vlax-ldata-put "dict" "say" "Floobar ")
"Floobar "
使用 vlax-ldata-list 显示存储在“dict”中的 LISP 数据:

_$ (vlax-ldata-list "dict")
(("say" . "Floobar ") ("cay" . "Mumbo Jumbo "))
发表于 2015-12-15 18:39 | 显示全部楼层
vlax-ldata-delete
  


从图形词典中删除 LISP 数据

(vlax-ldata-delete dict key [private])
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

key

字符串,指定词典关键字。

private

如果 private 的值非空,且从独立名称空间 VLX 调用 vlax-ldata-delete,则 vlax-ldata-delete 从 dict 中删除私有 LISP 数据。(关于使用该参数的信息,请参见 vlax-ldata-get。)

返回值

如果成功则返回 T,否则返回 nil(如数据不存在)。

示例

向词典中添加 LISP 数据:

_$ (vlax-ldata-put "dict" "key" '(1))
(1)
使用 vlax-ldata-delete 删除 LISP 数据:

_$ (vlax-ldata-delete "dict" "key")
T
如果再次调用 vlax-ldata-delete 删除相同的数据,该函数将返回 nil,因为词典中已不再有该数据。

_$ (vlax-ldata-delete "dict" "key")
nil

点评

严厉表扬之  发表于 2015-12-15 19:06
发表于 2015-12-15 18:40 | 显示全部楼层
不知道是不是你想要的
 楼主| 发表于 2015-12-16 13:55 | 显示全部楼层
xiaolong1487 发表于 2015-12-15 18:37
vlax-ldata-put
  

是的,就是这个东西,不过一下子看不太明白,我拿去测试一下这个东西!
发表于 2015-12-16 19:56 | 显示全部楼层
赞一个
发表于 2015-12-17 09:42 | 显示全部楼层
xiaolong1487 发表于 2015-12-15 18:37
vlax-ldata-put
  

多谢大师,造福人类
发表于 2019-1-22 20:35 | 显示全部楼层
多谢大师,造福人类
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 23:24 , Processed in 1.939645 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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