lee_yan_cn 发表于 2004-3-1 22:42:00

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

我想实现这么个功能 使某个变量与CAD文件相关联 即使CAD文件被关闭后重新打开 这个变量的值也不变

lee1892 发表于 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. <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)


)

Student 发表于 2004-3-2 09:24:00

用Xrecord是首选。


但是,如果变量较少,也可用系统变量USERI1~USERI5 和 USERR1~USERR5来保存。

lee_yan_cn 发表于 2004-3-2 18:33:00

万分感谢

lee_yan_cn 发表于 2004-3-2 19:03:00

如果我想保存与文件关联的不是列表 而是数字或者字符串呢


另外


系统变量USERI1~USERI5 和 USERR1~USERR5 怎么使用?

meflying 发表于 2004-3-2 19:10:00

什么叫不是列表?楼上并没有人给出跟列表关联。。。


系统变量:


(setvar "useri1"        1),参数类型参考帮助文件介绍

龙龙仔 发表于 2004-3-3 08:04:00

使用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]
查看完整版本: 如何设置变量与文件相关?