如何设置变量与文件相关?
我想实现这么个功能 使某个变量与CAD文件相关联 即使CAD文件被关闭后重新打开 这个变量的值也不变 XrecordXrecord 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. <BR>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. <BR>The following examples provide methods for creating and listing xrecord data.
(defun C:MAKEXRECORD( / xrec xname )<BR> ; create the xrecord's data list<BR> (setq xrec '((0 . "XRECORD")(100 . "AcDbXrecord") <BR> (1 . "This is a test xrecord list")<BR> (10 1.0 2.0 0.0) (40 . 3.14159) (50 . 3.14159) <BR> (62 . 1) (70 . 180))<BR> )<BR> ; use entmakex to create the xrecord with no owner<BR> (setq xname (entmakex xrec))<BR> ; add the new xrecord to the named object dictionary<BR> (dictadd (namedobjdict) "XRECLIST" xname)<BR> (princ)<BR>)
(defun C:LISTXRECORD ( / xlist )<BR> ; find the xrecord in the named object dictionary<BR> (setq xlist (dictsearch (namedobjdict) "XRECLIST"))<BR> ; print out the xrecord's data list<BR> (princ xlist)<BR> (princ)
) 用Xrecord是首选。
但是,如果变量较少,也可用系统变量USERI1~USERI5 和 USERR1~USERR5来保存。 万分感谢 如果我想保存与文件关联的不是列表 而是数字或者字符串呢
另外
系统变量USERI1~USERI5 和 USERR1~USERR5 怎么使用? 什么叫不是列表?楼上并没有人给出跟列表关联。。。
系统变量:
(setvar "useri1" 1),参数类型参考帮助文件介绍 使用vlax-ldata系列函數會更方便
從圖面字典或物件擷取 LISP 資料<BR>(vlax-ldata-get dict key )
引數
dict
VLA 物件、AutoCAD 圖面圖元物件或整體字典名稱的字串。
key
指定字典主鍵的字串。
default-data
如果字典中不存在符合的主鍵,要傳回的 LISP 資料。
private
如果指定非 nil 值給 private,且由分離名稱空間 VLX 呼叫 vlax-ldata-get,vlax-ldata-get 會從 dict 擷取私用 LISP 資料。<BR>如果您指定 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)<BR>(vl-doc-export 'ldataget)<BR>(vl-doc-export 'ldataget-nilt)<BR>(defun ldataput ()<BR> (princ "This is a test of putting private ldata ")<BR> (vlax-ldata-put "mydict" "mykey" "Mine! Mine! " T)<BR>)<BR>(defun ldataget ()<BR> (vlax-ldata-get "mydict" "mykey")<BR>)<BR>(defun ldataget-nilt ()<BR> (vlax-ldata-get "mydict" "mykey" nil T)
)
3 載入 VLX 檔案。<BR>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函數。
页:
[1]