明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2442|回复: 6

如何设置变量与文件相关?

[复制链接]
发表于 2004-3-1 22:42:00 | 显示全部楼层 |阅读模式
我想实现这么个功能 使某个变量与CAD文件相关联 即使CAD文件被关闭后重新打开 这个变量的值也不变
发表于 2004-3-1 23:07:00 | 显示全部楼层
Xrecord
Xrecord objects are used to store and manage arbitrary data. They are composed of DXF group codes with "normal object" groups (that is, non-xdata group codes), ranging from 1 through 369 for supported ranges. This object is similar in concept to xdata but is not limited by size or order.
Xrecord objects are designed to work in such a way as to not offend releases R13c0 through R13c3. However, if read into a pre-R13c4 level of AutoCAD, xrecord objects disappear.
The following examples provide methods for creating and listing xrecord data. (defun C:MAKEXRECORD( / xrec xname )
; create the xrecord's data list
(setq xrec '((0 . "XRECORD")(100 . "AcDbXrecord")
(1 . "This is a test xrecord list")
(10 1.0 2.0 0.0) (40 . 3.14159) (50 . 3.14159)
(62 . 1) (70 . 180))
)
; use entmakex to create the xrecord with no owner
(setq xname (entmakex xrec))
; add the new xrecord to the named object dictionary
(dictadd (namedobjdict) "XRECLIST" xname)
(princ)
) (defun CISTXRECORD ( / xlist )
; find the xrecord in the named object dictionary
(setq xlist (dictsearch (namedobjdict) "XRECLIST"))
; print out the xrecord's data list
(princ xlist)
(princ) )
发表于 2004-3-2 09:24:00 | 显示全部楼层
用Xrecord是首选。


但是,如果变量较少,也可用系统变量USERI1~USERI5 和 USERR1~USERR5来保存。
 楼主| 发表于 2004-3-2 18:33:00 | 显示全部楼层
万分感谢
 楼主| 发表于 2004-3-2 19:03:00 | 显示全部楼层
如果我想保存与文件关联的不是列表 而是数字或者字符串呢


另外


系统变量USERI1~USERI5 和 USERR1~USERR5 怎么使用?
发表于 2004-3-2 19:10:00 | 显示全部楼层
什么叫不是列表?楼上并没有人给出跟列表关联。。。


系统变量:


(setvar "useri1"        1),参数类型参考帮助文件介绍
发表于 2004-3-3 08:04:00 | 显示全部楼层
使用vlax-ldata系列函數會更方便 從圖面字典或物件擷取 LISP 資料
(vlax-ldata-get dict key [default-data] [private]) 引數 dict VLA 物件、AutoCAD 圖面圖元物件或整體字典名稱的字串。 key 指定字典主鍵的字串。 default-data 如果字典中不存在符合的主鍵,要傳回的 LISP 資料。 private 如果指定非 nil 值給 private,且由分離名稱空間 VLX 呼叫 vlax-ldata-get,vlax-ldata-get 會從 dict 擷取私用 LISP 資料。
如果您指定 private,您必須也指定 default-data;您可以將 nil 對 default-data 使用。 請注意分離名稱空間 VLX 可以存放使用相同 dict 和 key的私用和非私用資料。私用資料只可以由相同的 VLX 存取,但是任何應用程式可以擷取非私用資料。 傳回值 key 項目的值。 範例 在 Visual LISP 「主控台」視窗輸入下列指令: _$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo") "Mumbo Dumbo" _$ (vlax-ldata-get "mydict" "mykey") "Mumbo Dumbo" 從 VLX 測試私用資料的使用 1 在 Visual LISP 「主控台」視窗輸入下列指令: _$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo") "Mumbo Dumbo" _$ (vlax-ldata-get "mydict" "mykey") "Mumbo Dumbo" 2 在檔案中輸入下列程式碼,使用「製作應用程式」從檔案建立 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) ) 3 載入 VLX 檔案。
4 執行 ldataput 儲存私用資料: _$ (ldataput) This is a test of putting private ldata 請參考前面定義 ldataput 的程式碼:這個函數存放含有字串 "Mine! Mine!" 5 執行 ldataget 擷取 LISP 資料: _$ (ldataget) "Mumbo Dumbo" 請注意,由 ldataget 傳回的資料不是由 ldataput所存放的資料。這是因為 ldataget 不將 private 引數指定在它的 vlax-ldata-get 呼叫中。所以由 ldataget 擷取的資料,是由步驟 1 中 VISP 「主控台」發出 vlax-ldata-put 設定的資料。 _$ (ldataget-nilt) "Mine! Mine! " 6 執行 ldataget-nilt 擷取 LISP 資料: _$ (ldataget-nilt) "Mine! Mine! " 這次傳回由 ldataput 儲存的私用資料,因為 ldataget-nilt 將 private引數指定在它的 vlax-ldata-get 呼叫中。 7 從 Visual LISP 「主控台」提示,發出 ldataget-nilt 用來自私用資料的同一呼叫: _$ (vlax-ldata-get "mydict" "mykey" nil T) "Mumbo Dumbo" 忽略 private 引數的時機是從分離名稱空間 VLX 之外發出vlax-ldata-get 時。如果指定的 dict 及 key 存在非私用資料(如本實例),資料會被擷取。 另請參閱 vlax-ldata-put、vlax-ldata-delete及 vlax-ldata-list函數。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 18:35 , Processed in 0.184693 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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