乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 47|回复: 12

[编程交流] 保存全局变量值

[复制链接]

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-5 22:54:45 | 显示全部楼层 |阅读模式
其思想是将某些lisp例程的一些全局变量存储在图形文件中,以便当我再次加载此图形时,这些值会重新加载到会话内存中。
 
我找到了
vlax ldata put和vlax ldata get
 
但是这些命令与特定实体一起工作,还是我错了?
我发现它限制和不适合选择
存储值的实体。
最好的方法是什么?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:03:51 | 显示全部楼层
你好
 
您可以将变量导出到txt文件,并将其保存在support文件夹或任何您想要的位置,然后您可以通过文件名及其内容调用该文件,或者您可以创建字典,如果您在许多字典中有许多值要保存,则会增加图形的大小。
 
这取决于你。
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 23:06:52 | 显示全部楼层
你也可以尝试(vl-bb-set)和(vl-bb-ref)方法,有很多关于这两种方法的文档,它们非常容易使用。
 
 
其中,仅供参考,代表visual lisp、blackboard、set/ref。
必须检查文档以确定这些值存储在何处,除非有人知道这些值。
回复

使用道具 举报

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-5 23:14:33 | 显示全部楼层
谢谢你们俩。bhull提出的方法似乎非常快速和灵活。
 
编辑:似乎(vl bb集合)和(vl bb ref)仅在一个autocad任务期间有效,而不是每个图形文件。无论我打开什么文件,都会加载相同的值,并且只加载一个会话。我将不得不对此进行更深入的研究。
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:18:46 | 显示全部楼层
BB变量的问题是,当您关闭图形时,它们会丢失,我建议您学习在每个图形中创建自定义词典。如果保存简单值,则不会使图形大小增加太多。外部文本文件的问题是,如果执行撤消命令等操作,则需要进行大量编码,以确保所有变量都已更改(我尝试了不太好的方法)。此外,如果将图形中的值保存在字典中,则无需将文本文件与图形文件一起保存,尤其是如果要将它们发送给某人。我在一个自定义字典中保存了大约100个变量值,没有问题。您还需要学习正确的DXF代码来保存您的值,无论它们是文本、整数、实数点值等。一旦您解决了问题,保存值的方法是非常安全可靠的。此外,如果撤消创建或设置变量值的lisp函数,这些值将自动恢复。(就像撤销一样)。
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 23:23:49 | 显示全部楼层
 
 
 
是的,那是我的错。如果没有更彻底地测试vl bb set/ref命令,我会知道它们只适用于当前会话。
似乎白雪公主法是实现你要求的最好方法。
就我个人而言,我会创建一个工具栏按钮和宏来访问你的字典,这样你就可以点击一下,然后用你添加的任何信息进行编辑。
工具栏按钮或lisp例程,只是为了方便访问和修改字典。
也许斯诺努特会帮上忙。。。。虽然我相信我们可以找到一些有效的方法,但这需要研究和时间。。。我没有自动取款机
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:25:50 | 显示全部楼层
下面是我使用的代码,有几个函数和子函数都包含在内;
 
1.-创建新词典
2.-在创建的字典中创建新的xrecord
3.-附加xrecord
4.读取X记录
5.-更新xrecord
 
在这些功能上,我得到了李·麦克的一点帮助,它们在ACAD 2004和至少2011年以及Bricscad 12到当前版本中都能完美地工作。
 
  1. ;=============================  Begin < GM_Dict > Function =====================================;
  2. ;             Function to Create the "SADATA_DICT" within the NOD                ;
  3. ;        Syntax for function call;                                ;
  4. ;                  (GC_Dict  < dictname >)                             ;
  5. ;        Example - (GC_Dict "SADATA_DICT")                            ;
  6. ;                                  Created by B. Fillmore                                       ;
  7. (defun GC_Dict ( dictname / adict)  
  8. (if (not (setq adict (dictsearch (namedobjdict) dictname)))
  9.    (progn
  10.      (setq adict (entmakex '((0 . "DICTIONARY")(100 . "AcDbDictionary"))))
  11.      (if adict (setq adict (dictadd (namedobjdict) dictname adict)))
  12.    )
  13.    (setq adict (cdr (assoc -1 adict)))
  14. )
  15. );defun
  16. ;(GC_Dict "SADATA_DICT") Calling Line                                ;
  17. ;                                                ;
  18. ;==============================  End < GM_Dict > Function ======================================;
  19. ;===========================  Begin < GM_Xrecord > Function ====================================;
  20. ;         Function to Create an XRECORD in the "SADATA_DICT" within the NOD        ;
  21. ;        Syntax for function call;                                ;
  22. ;            (GM_Xrecord < XRECORD NAME >)                        ;
  23. ;        Example -     (GM_Xrecord "LDATA_VARS")                        ;
  24. ;                                  Created by B. Fillmore                                       ;
  25. (defun GM_Xrecord ( DATA_VARS / adict anXrec)
  26. (cond
  27.    (
  28.     (setq adict (GC_Dict "SADATA_DICT")) ; "SADATA_DICT" is the name of the dictionary
  29.     (cond     
  30.       (
  31.    (not
  32.      (setq anXrec (dictsearch adict DATA_VARS))
  33.      )
  34.    (setq anXrec (entmakex values))   
  35.        (if anXrec (setq anXrec (dictadd adict DATA_VARS anXrec))
  36.      );if
  37.    );not
  38.       (setq anXrec
  39.    (cdr (assoc -1 (dictsearch adict DATA_VARS)))
  40.    );setq
  41.       );cond
  42.     );setq
  43.    );cond
  44. );defun
  45. ;(GM_Xrecord "EDATA_VARS") Calling Line     (setq DATA_VARS "EDATA_VARS")                ;
  46. ;                                                ;
  47. ;============================  End < GM_Xrecord > Function =====================================;
  48. ;===========================  Begin < Append_Xrecord >  Function ===============================;
  49. ;         Function to add  values to an existing XRECORD using the DXF Group Code        ;
  50. ;        Syntax for function call;                                ;
  51. ;                  (Append_Xrecord <XRECORD NAME> <DXF Group Code to Update> <Value to store>)    ;
  52. ;        Example - (Append_Xrecord "EDATA_VARS" 45 0.0)                        ;
  53. ;                                                                                               ;
  54. ;        Returns all associations of a key in an association list            ;
  55. ;                                  Created by B. Fillmore                                       ;
  56. (defun Append_Xrecord (DATA_VARS DXF_VAL NEW_VAL / SAdict anXrec xRecFile)
  57. (setq DATA_VARS (strcat tabname DATA_VARS)
  58.    SAdict (GC_Dict "SADATA_DICT")
  59.    anXrec (dictsearch SAdict DATA_VARS)
  60.    )
  61. (if (= (assoc DXF_VAL anXrec)nil)
  62.    (progn
  63.      (setq values (append anXrec
  64.               (list(cons DXF_VAL NEW_VAL))
  65.               )
  66.        )
  67.      (entdel (cdr (assoc -1 anXrec)))
  68.      (GM_Xrecord DATA_VARS)
  69.      )
  70.    )
  71. );defun
  72. ;(Append_Xrecord "EDATA_VARS" 46 0.0) Calling Line     (setq DATA_VARS "EDATA_VARS")        ;
  73. ;                                                ;
  74. ;==========================  End < Append_Xrecord > Function ===================================;
  75.      
  76. ;===========================  Begin < GetVar_Xrecord >  Function ===============================;
  77. ;         Function to retrieve values from an XRECORD using the DXF Group Code        ;
  78. ;        Syntax for function call;                                ;
  79. ;                  (GetVar_Xrecord <XRECORD NAME> <DXF Group Code to Update> <Nth Group Code>)    ;
  80. ;        Example - (GetVar_Xrecord "LDATA_VARS" 300 2)                        ;
  81. ;                                                                                               ;
  82. ;                  LM:mAssoc  -  By; Lee Mac                        ;
  83. ;        Returns all associations of a key in an association list            ;
  84. ;                                  Created by B. Fillmore                                       ;
  85. (defun GetVar_Xrecord ( DATA_VARS DXF_VAL LnmBr / xRecFile vars )
  86. (defun LM:mAssoc ( DXF_VAL xRecFile / item )
  87.    (if (setq item (assoc DXF_VAL xRecFile))
  88.      (cons (cdr item) (LM:mAssoc DXF_VAL (cdr (member item xRecFile))))
  89.      )
  90.    );defun
  91. (if (/= DATA_VARS "ODATA_VARS") ; "ODATA_VARS is a set of DXF codes within the dictionary
  92.    (setq DATA_VARS (strcat tabname DATA_VARS))
  93.    )
  94. (setq vars (GM_Xrecord DATA_VARS))
  95. (cond (vars
  96.         (setq xRecFile  (entget vars))
  97.     (cdr (cons DXF_VAL(nth LnmBr (LM:mAssoc DXF_VAL xRecFile))))
  98.        )
  99.        (T nil)
  100. )
  101. );defun
  102. ;(setq VARNAME (GetVar_Xrecord "LDATA_VARS" 300 2)) Calling Line                ;
  103. ;                                                ;
  104. ;==========================  End < GetVar_Xrecord > Function ===================================;
  105. ;==========================  Begin < Update_Xrecord > Function =================================;
  106. ;         Function to Update the values in an XRECORD using the nth DXF Group Code    ;
  107. ;        Syntax for function call;                                ;
  108. ;    (Update_Xrecord <XRECORD NAME> <DXF Group Code to Update> <New Value> <Nth Group Code>)    ;
  109. ;        Example - (Update_Xrecord "LDATA_VARS" 300 "Update test successful!" 3 )        ;
  110. ;                                                                                               ;
  111. ;               LM:mAssoc  -  By; Lee Mac                        ;
  112. ;        Returns all associations of a key in an association list            ;
  113. ;                                  Created by B. Fillmore                                       ;
  114. (defun Update_Xrecord (DATA_VARS DXF_VAL MOD_VAL LnmBr / xRecFile Values SAdict)
  115. (defun LM:mAssoc ( DXF_VAL xRecFile / item )
  116.    (if (setq item (assoc DXF_VAL xRecFile))
  117.      (cons (cdr item) (LM:mAssoc DXF_VAL (cdr (member item xRecFile))))
  118.      )
  119.    );defun
  120. (if (/= DATA_VARS "ODATA_VARS")
  121.    (setq DATA_VARS (strcat tabname DATA_VARS))
  122.    )
  123. (setq    SAdict (dictsearch (namedobjdict) "SADATA_DICT")
  124.    xRecFile (dictsearch (cdr (assoc -1 SAdict)) DATA_VARS)
  125.    )  
  126. (setq values (subst (cons DXF_VAL MOD_VAL)
  127.              (cons DXF_VAL (nth LnmBr (LM:mAssoc DXF_VAL xRecFile)))
  128.              xRecFile)
  129.    )
  130. (entdel (cdr (assoc -1 xRecFile)))
  131. (GM_Xrecord DATA_VARS)
  132. );defun
  133. ; (setq   DATA_VARS  "LDATA_VARS")
  134. ;(Update_Xrecord "LDATA_VARS" 300 "Nmbr" 2)  Calling line                    ;
  135. ;                                                ;
  136. ;==========================  End < Update XRecord > Function ===================================;
  137. ;============================  Begin < New_Xrecord > Function ==================================;
  138. ;         Function to Create an XRECORD with Default Values                ;
  139. ;    Syntax for function call;                                ;
  140. ;            (New_Xrecord <XRECORD NAME> )                        ;
  141. ;    Example -    (Update_Xrecord "LDATA_VARS")                        ;
  142. ;                                  Created by B. Fillmore                                       ;
  143. ;                                                                                               ;
  144. (defun New_xRecord ( DATA_VARS / Values vars)  
  145. (if (/= DATA_VARS "EDATA_VARS" DATA_VARS "HDATA_VARS"
  146.      DATA_VARS "LDATA_VARS" DATA_VARS "ODATA_VARS")         
  147.    (progn
  148.      (alert "There are no xRecord Values to Create xRecord for !
  149.            \nYou must enter the Values Reference to proceed !")
  150.      (exit)
  151.      );progn
  152.    );if
  153. (if (= DATA_VARS "EDATA_VARS" )
  154.    (setq DATA_VARS (strcat tabname DATA_VARS)
  155.         Values  (list(cons 0 "XRECORD"    )    ; used for EDA Data File Defaults in "XRECORDS"
  156.               (cons 100  "AcDbXrecord"    )
  157.               (cons   3 "0"        )
  158.               (cons  40  0.0        )
  159.               (cons  41  0.0        )
  160.               (cons  42  0.0        )
  161.               (cons  43  0.0        )
  162.               (cons  44  0.0        )
  163.               (cons  45  0.0        )
  164.               (cons  46  0.0        )
  165.               (cons  47  0.0        )               
  166.               (cons  70  0        )
  167.               (cons  71  0        )
  168.               (cons  72  0        )
  169.               (cons  73  0        )
  170.               (cons  74  0        )
  171.               (cons  75  0        )
  172.               (cons  76  0        )
  173.               (cons  77  0        )
  174.               (cons  78  0        )
  175.               (cons  79  0        )               
  176.               (cons 270  0        )
  177.               (cons 271  0        )
  178.               (cons 272  0        )
  179.               (cons 273  0        )               
  180.               (cons 300 "0"        )
  181.               (cons 301 "0"        )
  182.               )
  183.      );setq
  184.    );if
  185. ;(setq DATA_VARS "EDATA_VARS")
  186. ;(New_Xrecord "EDATA_VARS")
  187. (if (= DATA_VARS "HDATA_VARS" )
  188.    (setq DATA_VARS (strcat tabname DATA_VARS)
  189.      Values  (list(cons 0 "XRECORD"    )    ; used for House Data File in "XRECORDS"
  190.               (cons 100  "AcDbXrecord"    )
  191.               (cons  40  0.0        )
  192.               (cons  41  0.0        )
  193.               (cons  70     0        )
  194.               (cons  71    36        )
  195.               (cons  72    10        )               
  196.               (cons 270     1        )
  197.               (cons 271     0         )
  198.               (cons 272     0        )
  199.               (cons 273     0        )               
  200.               (cons 300 "Drain Outlet"    )
  201.               )
  202.      );setq
  203.    );if
  204. ;(entmakex values)
  205. ;(setq DATA_VARS "HDATA_VARS")
  206. (if (= DATA_VARS "LDATA_VARS" )
  207.    (setq DATA_VARS (strcat tabname DATA_VARS)
  208.      Values  (list(cons 0 "XRECORD"    )    ; used for Lot Data File in "XRECORDS"
  209.               (cons 100 "AcDbXrecord"    )
  210.               (cons   3 "Septic Assistant")
  211.               (cons  70   0        )
  212.               (cons  71   0        )
  213.               (cons 300 "Town"        )
  214.               (cons 300 "County"    )
  215.               (cons 300 "Book"     )
  216.               (cons 300 "Page"     )
  217.               (cons 300 "N/A"      )
  218.               (cons 300 "Lot"         )
  219.               (cons 300 "Map"         )
  220.               (cons 300 "Area"     )
  221.               (cons 300 "Block"    )
  222.               (cons 300 "Unit"     )
  223.               (cons 301 "Prev CA "    )
  224.               (cons 301 "CA2012..."     )
  225.               (cons 301 "Yes"      )
  226.               (cons 302 "No"       )
  227.               (cons 303 "No"       )
  228.               (cons 304 "No"       )
  229.               )
  230.      );setq
  231.    );if
  232.   ;(setq DATA_VARS "LDATA_VARS")
  233.   ;     (New_Xrecord "LDATA_VARS")
  234. (if (= DATA_VARS "ODATA_VARS" )
  235.    (setq Values  (list(cons 0 "XRECORD")    ; used for Lot Owner File in "XRECORDS"
  236.               (cons 100  "AcDbXrecord")
  237.               (cons 3 "Septic Assistant")
  238.               (cons 300 "O-Name"    )
  239.               (cons 300 "O-Street"    )
  240.               (cons 300 "O-State"     )
  241.               (cons 300 "O-Town"     )
  242.               (cons 300 "O-Zip"      )
  243.               (cons 300 "O-Phone"     )
  244.               (cons 300 "O-Email"     )
  245.               (cons 301 "A-Name"    )
  246.               (cons 301 "A-Street"    )
  247.               (cons 301 "A-Town"    )
  248.               (cons 301 "A-State"    )
  249.               (cons 301 "A-Zip"    )
  250.               (cons 301 "A-Phone"    )
  251.               (cons 301 "A-Email"    )
  252.               (cons 302 "Site Street"    )
  253.               (cons 302 "Sub-Name"    )
  254.               (cons 302 "SA2012..."    )
  255.               )
  256.      );setq
  257.    );if
  258. (if (= (GM_Xrecord DATA_VARS) nil)
  259.    (progn
  260.      (Alert (strcat "\nThe xRecord < " DATA_VARS " > was not Created"
  261.             "\n"
  262.             "\nThe likely cause, there where no <Values> variables")
  263.         )
  264.      (exit)
  265.      )
  266.    );if
  267. T
  268. );defun
  269. ;(New_Xrecord "EDATA_VARS") Example Calling line                        ;
  270. ;                                                ;
  271. ;============================  End < New XRecord > Function ====================================;
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:34:29 | 显示全部楼层
这些是有限的,可以由第三部分软件更改,但可能有用
 
用户I1。。。用户I5 5整数
用户1。。。用户5个字符串
用户1。。。用户5 5 reals
 
就我个人而言,我现在会使用扩展数据
回复

使用道具 举报

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-5 23:34:47 | 显示全部楼层
 
 
 
我在afralisp网站上找到了类似的东西。我也试过你的代码。然而,尽管我没有做任何更改,但在执行(Append\u Xrecord“EDATA\u VARS”45 0.0)命令时,这两个参数都为零。我首先运行了一个新的绘图(GM\u Xrecord“EDATA\u VARS”)函数。有什么想法吗?
回复

使用道具 举报

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-5 23:41:21 | 显示全部楼层
 
 
是的,但据我所知,扩展数据总是附加到一个实体。我发现全局参数/设置不实用。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 03:04 , Processed in 0.395471 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表