乐筑天下

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

[编程交流] autolisp对话框中的默认复选框。。

[复制链接]

1

主题

4

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-21 03:21:52 | 显示全部楼层 |阅读模式
嗨,大家
好,很高兴见到你。
谢谢你的这个漂亮的教训(相关数据请参考下面的链接)
但是我想添加一个函数,
如果我使用lisp,基本上复选框是未选中的,但我希望选中所有复选框。
能否根据使用 lisp 时出现的对话框将复选框设置为“全部选择”?
或者它可能更复杂,但可以在最后一个值检查它吗?
请好好照顾我,保持健康!
我祝你一切顺利,
我真的很感激。
谢谢
LISP LINK
http://www.theswamp.org/index.php?topic=7113.0;all

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

72

主题

738

帖子

75

银币

中流砥柱

Rank: 25

铜币
957
发表于 2022-7-21 07:35:23 | 显示全部楼层
告诉我们您在尝试找出问题的解决方案时遇到了什么问题...
回复

使用道具 举报

1

主题

4

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-21 18:55:02 | 显示全部楼层
谢谢你的回答。
我想要的是,当我在上面的链接上运行LISP时,
我希望DIALOG框的复选框基本上是CHECK。
以前,CHECK框是未检查的。
LISP LINK
http://www.theswamp.org/index.php?topic=7113.0;所有
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2022-7-21 20:14:53 | 显示全部楼层
可能是这样的:
  1. :toggle {
  2.     label = "Select All" ;
  3.     key = "t2" ;
  4.     value = "1" ;
  5. }

关于,
https://help.autodesk.com/view/OARX/2023/ENU/?guid=GUID-379CF682-A5D3-4902-855C-81C146AC173A
https://help.autodesk.com/view/OARX/2023/ENU/?guid=GUID-A9E2C14E-1352-4C7B-89F0-C86D3A86B19D<br>这是肯尼20年前的一些帮助。仍然有效
https://www.afralisp.net/dialog-control-language/
这是一个很好的例子https://www.afralisp.net/dialog-control-language/tutorials/index.php?category_id=12
这是一个很好的例子https://www.afralisp.net/dialog-control-language/tutorials/index.php?category_id=16
这是一个很好的例子
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-21 20:38:53 | 显示全部楼层
您需要使用set_tile键
For 切换其 0 或 1
[代码 1]
EDIT (John): 添加了代码标记。
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2022-7-21 20:51:15 | 显示全部楼层
嗨,比加尔,
我读到的目标是在lisp加载对话框时打开切换…但我以前就错了,所以
回复

使用道具 举报

1

主题

4

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-21 21:05:29 | 显示全部楼层
谢谢你的善意回答。
但是我不能应用你的建议
这里是原始代码
哪里适用于切换键或标题键?
对不起,谢谢。
  1. ;;;---------------------------------------------------------------------;;;
  2. ;;;  MatchAtts.lsp                                                      ;;;
  3. ;;;  Created by Will DeLoach                                            ;;;
  4. ;;;  Copyright 2005                                                     ;;;
  5. ;;;                                                                     ;;;
  6. ;;;FUNCTION                                                             ;;;
  7. ;;;Creates a variable sized dialog box with attribute tagstrings from the;;
  8. ;;;the Source Attribute.  The user selects the values they want to match;;;
  9. ;;;and then selects blocks withe same name as the source block and the  ;;;
  10. ;;;selected attributes will be changed to match the source attribute.   ;;;
  11. ;;;                                                                     ;;;
  12. ;;;USAGE                                                                ;;;
  13. ;;;(load "matchatts)                                                    ;;;
  14. ;;;matchatts                                                            ;;;
  15. ;;;                                                                     ;;;
  16. ;;;PLATFORMS                                                            ;;;
  17. ;;;Tested on 2006; but could work for earlier versions.                 ;;;
  18. ;;;                                                                     ;;;
  19. ;;;VERSION                                                              ;;;
  20. ;;; 1.0   October 3, 2005                                               ;;;
  21. ;;; 1.01  October 4, 2005   Fixed Att Selection for Attributes only.    ;;;
  22. ;;; 1.02  October 5, 2005   Fixed bug in cond statement                 ;;;
  23. ;;; 1.03  November 15, 2005   Replaced get_att SUBR (recmd by T. Willey);;;
  24. ;;; 1.1   April 6, 2006   Modifications made by CAB from theSwamp.org   ;;;
  25. ;;;                       Fixed duplicate tagname bug.                  ;;;
  26. ;;; 1.11  Added the write_line function.                                ;;;
  27. ;;; 1.2   Fixed block selection to work with Dynamic Blocks.            ;;;
  28. ;;; 1.21  Corrected an error with 'EffectiveName' assumption.           ;;;
  29. ;;;                                                                     ;;;
  30. ;;;                                                                     ;;;
  31. ;;;   THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED      ;;;
  32. ;;;   WARRANTY.  ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR   ;;;
  33. ;;;   PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.             ;;;
  34. ;;;                                                                     ;;;
  35. ;;;  You are hereby granted permission to use, copy and modify this     ;;;
  36. ;;;  software without charge, provided you do so exclusively for        ;;;
  37. ;;;  your own use or for use by others in your organization in the      ;;;
  38. ;;;  performance of their normal duties, and provided further that      ;;;
  39. ;;;  the above copyright notice appears in all copies and both that     ;;;
  40. ;;;  copyright notice and the limited warranty and restricted rights    ;;;
  41. ;;;  notice below appear in all supporting documentation.               ;;;
  42. ;;;                                                                     ;;;
  43. ;;;---------------------------------------------------------------------;;;
  44. (defun c:matchatts (/      blk
  45. ;The entity name for the Reference Attribute
  46.                     eblk ;Entity list of blk
  47.                     atts ;List of attributes for 'blk'
  48.                     tags ;List of 'tagstrings' for atts
  49.                     keys ;List of 'handle' for atts
  50.                     vals ;List of 'textstring' for atts
  51.                     dcl_id ;Id number for the dialog box
  52.                     dcl_name ;Name for the dialog box
  53.                     strt ;Id from the done_dialog call
  54.                     lst ;List of values for the toggles
  55.                     ssa ;List of attributes the user selects
  56.                     morder ;flag to chack att order, for future use
  57.                     ename ;entity name
  58.                     lst ;List of Keys
  59.                     rname ;Reference Block Name
  60.                     i ;Increment
  61.                    )
  62. ;;;---------------------------------------------------------------------;;;
  63. ;;;A rewrite of the entsel function.                                    ;;;
  64. ;;;---------------------------------------------------------------------;;;
  65.   (defun ent_sel (msg / ent)
  66.     (while (not ent)
  67.       (cond ((setq ent (entsel msg)))
  68.             ((= (getvar "ErrNo") 7)
  69.              (princ "\nSelection missed.  Please try again.")
  70.             )
  71.             ((= (getvar "ErrNo") 52) (exit))
  72.       )
  73.     )
  74.     ent
  75.   )
  76. ;;;---------------------------------------------------------------------;;;
  77. ;;;This is a utility function to return Attribute References for the    ;;;
  78. ;;;supplied object or entity name.                                      ;;;
  79. ;;;---------------------------------------------------------------------;;;
  80.   (defun get_atts (obj)
  81.     (vlax-invoke (vlax-ename->vla-object obj) 'getattributes)
  82.   )
  83. ;;;---------------------------------------------------------------------;;;
  84. ;;;This creates a variable dialog box that changes size based on how    ;;;
  85. ;;;many attributes are passed to it.  The dialog box is temporary and is;;;
  86. ;;;created on the fly.  It is stored in your Acad Temp path location.   ;;;
  87. ;;;---------------------------------------------------------------------;;;
  88.   (defun createdialog (lst keys / num tfn fn wid cnt str)
  89.     (defun write_line (lst file) (foreach x lst (write-line x file)))
  90.     (setq num (length tags))
  91.     (cond ((> num 24) (setq wid 4))
  92.           ((> num 12) (setq wid 3))
  93.           ((> num 6) (setq wid 2))
  94.           (T (setq wid 1))
  95.     )
  96.     (setq tfn (vl-filename-mktemp "match_attribute_value.dcl"))
  97.     (setq fn (open tfn "w"))
  98.     (write_line
  99.       (list
  100.         "temp : dialog { label = "Match Attributes";"
  101.         ": boxed_column { label = "Select Attributes Values to Match: ";"
  102.         ": row {"
  103.       )
  104.       fn
  105.     )
  106.     (setq cnt 0)
  107.     (repeat (1+ wid)
  108.       (write-line ": column {" fn)
  109.       (repeat (/ num wid)
  110.         (if (setq str (nth cnt lst))
  111.           (progn (write-line
  112.                    (strcat ": toggle { label = "
  113.                            """
  114.                            str
  115.                            """
  116.                            "; key = "
  117.                            """
  118.                            (nth cnt keys)
  119.                            """
  120.                            ";}"
  121.                    )
  122.                    fn
  123.                  )
  124.                  (setq cnt (1+ cnt))
  125.           )
  126.         )
  127.       )
  128.       (write-line "}" fn)
  129.     )
  130.     (write_line
  131.       (list
  132.         "}"
  133.         "spacer_1;"
  134.         " : toggle { key = "All"; label = "Select All";}"
  135.         "}"
  136.         "ok_cancel;"
  137.         "}"
  138.        )
  139.       fn
  140.     )
  141.     (close fn)
  142.     tfn
  143.   )
  144. ;;;---------------------------------------------------------------------;;;
  145. ;;;This is the action for 'Select All' Check Box.                       ;;;
  146. ;;;---------------------------------------------------------------------;;;
  147.   (defun on_all_pick (lst / str)
  148.     (if (eq (get_tile "All") "0")
  149.       (setq str "0")
  150.       (setq str "1")
  151.     )
  152.     (mapcar '(lambda (x) (set_tile x str)) lst)
  153.   )
  154. ;;;---------------------------------------------------------------------;;;
  155. ;;;This takes two lists and compares the two.  Every item in vals that  ;;;
  156. ;;;equals "1" is replace with the corresponding item in objs.           ;;;
  157. ;;;---------------------------------------------------------------------;;;
  158. ;;; CAB modified, create a list of pairs (tagname flag)  where flag 1 0 t/nil
  159.   (defun create_list (vals objs)
  160.     (vl-remove nil
  161.                (mapcar '(lambda (x y)
  162.                           (cons y
  163.                                 (if (eq x "1")
  164.                                   1
  165.                                   0
  166.                                 )
  167.                           )
  168.                         )
  169.                        vals
  170.                        objs
  171.                )
  172.     )
  173.   )
  174. ;;;---------------------------------------------------------------------;;;
  175. ;;;Receives a Selection Set and returns Entity Names                    ;;;
  176. ;;;---------------------------------------------------------------------;;;
  177.   (defun ssnames (selection_set / num lst)
  178.     (repeat (setq num (sslength selection_set))
  179.       (setq num (1- num)
  180.             lst (cons (ssname selection_set num) lst)
  181.       )
  182.     )
  183.     lst
  184.   )
  185. ;;;---------------------------------------------------------------------;;;
  186. ;;;Accepts a Group code and an Entity List and returns the value.       ;;;
  187. ;;;---------------------------------------------------------------------;;;
  188.   (defun dxf (gcode elist) (cdr (assoc gcode elist)))
  189. ;;;---------------------------------------------------------------------;;;
  190. ;;;---------------------------------------------------------------------;;;
  191. ;;;---------------------------------------------------------------------;;;
  192. ;;;Main program starts here.
  193.   (while (not blk)
  194.     (setq blk (car (ent_sel "\nSelect Source Object:  ")))
  195.     (cond ((not (setq eblk (entget blk))))
  196.           ((not (eq (dxf 0 eblk) "INSERT"))
  197.            (setq blk nil)
  198.            (princ "\nPlease select a block with attributes. ")
  199.           )
  200.           ((not (eq (dxf 66 eblk) 1))
  201.            (setq blk nil)
  202.            (princ "\nPlease select a block with attributes. ")
  203.           )
  204.           (T blk)
  205.     )
  206.   )
  207.   (setq atts (get_atts blk)
  208.         tags (mapcar 'vla-get-tagstring atts)
  209.         keys (mapcar 'vla-get-handle atts)
  210.         vals (mapcar 'vla-get-textstring atts)
  211.   )
  212.   (setvar "ErrNo" 0)
  213.   (and ; Creates a temporary dialog box with toggles for each
  214. ; of the tagstrings in tags.  This is a variable dialog
  215. ; box that changes size based on the number of attributes.
  216.     (setq dcl_name (createdialog tags keys)) ; Loads the dialog box
  217.     (> (setq dcl_id (load_dialog dcl_name)) 0)
  218.     (new_dialog "temp" dcl_id)
  219. ; If any toggle other than 'Select All' is pressed then
  220. ; this will turn off the 'Select All' toggle.
  221.     (mapcar '(lambda (x) (action_tile x "(set_tile "All" "0")"))
  222.             keys
  223.     )
  224.     (action_tile "All" "(on_all_pick keys)")
  225.     (action_tile "cancel" "(done_dialog 0)")
  226.     (action_tile
  227.       "accept"
  228.       "(setq lst (mapcar '(lambda (x)(get_tile x)) keys))(done_dialog 1)"
  229.       ;;  CAB removed morder code
  230.       ;; "(setq morder (= (get_tile "morder") "1")lst (mapcar '(lambda (x)(get_tile x)) keys))(done_dialog 1)"
  231.     )
  232.     ;;  (set_tile "morder" "1")
  233.     (setq strt (start_dialog))
  234.     (not (unload_dialog dcl_id))
  235.     (vl-file-delete dcl_name)
  236.     (setq morder t) ; overridefor now, keep for future use
  237.     (if (eq strt 1)
  238.       (and ; creates a list of attribute objects from the
  239. ; reference object that were selected in the dialog box.
  240.         ;;  CAB start =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  241.         ;;  replace the attriburtes in one insert
  242.         ;;  if morder is true the tag and the order in the list must match
  243.         ;;  else the first matching tag will get the new value
  244.         (defun replaceatts (ent atlst tags vals / blkobj cnt idx)
  245.           (setq blkobj (vlax-ename->vla-object ent)
  246.                 cnt    0
  247.           )
  248.           (foreach atto (vlax-invoke blkobj 'getattributes)
  249.             (cond
  250.               ((and morder ; order must match
  251.                     (= 1 (cdr (nth cnt atlst))) ; flag, ok to replace
  252.                     (eq (vla-get-tagstring atto) (nth cnt tags))
  253.                )
  254.                (vla-put-textstring atto (nth cnt vals))
  255.               )
  256.               ((and
  257.                  (not morder) ; ignore order
  258.                  (= 1 (cdr (nth cnt atlst))) ; flag, ok to replace
  259.                  (setq idx (vl-position (vla-get-tagstring atto) tags))
  260.                )
  261.                (vla-put-textstring atto (nth idx vals))
  262.               )
  263.             )
  264.             (setq cnt (1+ cnt))
  265.           )
  266.           (vla-update blkobj)
  267.         )
  268.         ;; CAB - a list of pairs (tagname flag)  where flag 1 0 t/nil
  269.         (setq atts (create_list lst atts))
  270.         (not
  271.           (prompt
  272.             "\nSelect blocks to update or enter ALL for all matching blocks."
  273.           )
  274.         )
  275.         (if
  276.           (and
  277.             (setq ssa (ssget (list '(0 . "INSERT") '(66 . 1))))
  278.             (setq rname (vlax-ename->vla-object blk))
  279.             (if (vlax-property-available-p rname 'effectivename)
  280.               (progn (setq rname (vla-get-effectivename rname))
  281.                      (mapcar '(lambda (x)
  282.                                 (if (/= rname
  283.                                         (vla-get-effectivename
  284.                                           (vlax-ename->vla-object x)
  285.                                         )
  286.                                     )
  287.                                   (ssdel x ssa)
  288.                                 )
  289.                               )
  290.                              (ssnames ssa)
  291.                      )
  292.               )
  293.               (progn
  294.                 (setq rname (vla-get-name rname))
  295.                 (mapcar
  296.                   '(lambda (x)
  297.                      (if (/= rname
  298.                              (vla-get-name (vlax-ename->vla-object x))
  299.                          )
  300.                        (ssdel x ssa)
  301.                      )
  302.                    )
  303.                   (ssnames ssa)
  304.                 )
  305.               )
  306.             )
  307.           )
  308.            (progn ;  itterate through the selected inserts
  309.              (setq i -1)
  310.              (while (setq ename (ssname ssa (setq i (1+ i))))
  311.                (if (not (eq ename blk)) ; ignore doner block
  312.                  (replaceatts ename atts tags vals)
  313.                )
  314.              )
  315.              (if (= 0 (sslength ssa)) ;(not ssa);(null ssa)
  316.                (princ "\nInvalid blocks selected.  Please start over. ")
  317.              )
  318.            )
  319.         )
  320.         ;;  CAB end =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  321.       ) ; This is returned if the user hits Cancel.
  322.       (princ "\nFunction Terminated by User!")
  323.     )
  324.   )
  325.   (princ)
  326. )

编辑(John):添加了代码标签。
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2022-7-22 16:56:25 | 显示全部楼层
发布的代码不会像第一篇文章中显示的那样构建对话框,所以这有点像猜谜游戏。
此修改应该将“All”键值更改为ON :
  1.     (write_line
  2.       (list
  3.         "}"
  4.         "spacer_1;"
  5.        ;;  replaced ** [s]" : toggle { key = "All"; label = "Select All";}"[/s]
  6.         " : toggle { key = "All"; label = "Select All"; value = "1"; }"
  7.         "}"
  8.         "ok_cancel;"
  9.         "}"
  10.        )
  11.       fn
  12.     )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-22 22:02:44 | 显示全部楼层

(mapcar'(lambda(x)(action_tilex"(set_tile\"All\"\"0\")"))
key
))
回复

使用道具 举报

1

主题

4

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-24 19:02:57 | 显示全部楼层
当我应用您告诉我的代码时,复选框在我询问您时被选中。
谢谢您。
但是lisp不起作用。
真的很难。
非常感谢您!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-1-31 10:49 , Processed in 0.351478 second(s), 83 queries .

© 2020-2025 乐筑天下

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