乐筑天下

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

[编程交流] 表格图层选择

[复制链接]

3

主题

6

帖子

3

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 17:14:43 | 显示全部楼层 |阅读模式
你好
我刚刚分配了编写宏的任务,该宏在运行时需要打开一个表,允许用户从下拉菜单中选择一个选项。选择后,宏需要在运行宏的图形中打开和关闭图层。如果您能提供任何帮助,我们将不胜感激。
 
非常感谢。
回复

使用道具 举报

0

主题

132

帖子

198

银币

限制会员

铜币
-21
发表于 2022-7-6 18:02:18 | 显示全部楼层
将组合框添加到表单。要让它做出选择,请执行以下操作
 
  1. With CmbBox
  2.    .AddItem "qty 1", 0
  3.    .AddItem "qty 2", 1
  4.    .AddItem "qty 3", 2
  5.    .AddItem "qty 4", 3
  6.    .ListIndex = 0
  7. End With
回复

使用道具 举报

3

主题

6

帖子

3

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 18:34:01 | 显示全部楼层
这是我在浏览这个网站时发现的代码。该代码是否可以用于制作允许制作层选择选项的表单?
我相信这是ASMI发布的。
 
  1. (defun c:patlay(/ oldPat cFlag lLst Ans actDoc aName oldLay)
  2. (vl-load-com)
  3. (defun StoreLayerStates()
  4. (setq patlay:layerstate nil)
  5. (vlax-for l(vla-get-Layers actDoc)
  6. (setq patlay:layerstate
  7.     (append patlay:layerstate
  8.     (list
  9.     (list l
  10.        (vla-get-LayerOn l)
  11.         (vla-get-Lock l)
  12.         (vla-get-Freeze l)
  13.         ); end list
  14.     ); end list
  15.     ); end apend
  16.     ); end setq
  17. ); end vlax-for
  18. (princ)
  19. ); end of StoreLayerStates
  20. (if(not laypat:pat)(setq laypat:pat ""))
  21. (setq oldPat laypat:pat)
  22. (while(not cFlag)
  23. (setq laypat:pat(getstring T
  24.         (strcat "\nLayer name pattern or [Help/Quit] <"
  25.             laypat:pat ">: ")))
  26. (cond
  27. ((member laypat:pat '("H" "h" "_H" "_h" "Help" "HELP" "help"))
  28. (princ "\n <<< PATTERNS AVAILABLE >>> \n")
  29. (princ "\n # - Matches any single numeric digit.")
  30. (princ "\n @ - Matches any single alphabetic character.")
  31. (princ "\n . - Matches any single nonalphanumeric character.")
  32. (princ "\n * - Matches any character sequence, including an ")
  33. (princ "\n empty one, and it can be used anywhere in the ")
  34. (princ "\n search pattern at the beginning, middle, or end.")
  35. (princ "\n ? - Matches any single character \n")
  36. (princ "\n ~ - If it is the first character in the pattern,")
  37. (princ "\n it matches anything except the pattern.")
  38. (princ "\n [...] - Matches any one of the characters enclosed.")
  39. (princ "\n [~...] - Matches any single character not enclosed.")
  40. (princ "\n - - Used inside brackets to specify a range.")
  41. (princ "\n for a single character.")
  42. (princ "\n , - Separates two patterns.")
  43. (princ "\n ` - Escapes special characters (reads next")
  44. (princ "\n character literally).")
  45. (princ "\n\nPress F2 to close text scren...\n")
  46. (textscr)
  47. ); end condition #1
  48. ((member laypat:pat '("Q" "q" "_Q" "_q" "Quit" "QUIT" "quit"))
  49. (setq cFlag T laypat:pat "")
  50. ); end condition #2
  51. ((= laypat:pat "")
  52. (setq laypat:pat oldPat cFlag T)
  53. ); end condition #3
  54. (t
  55. (setq cFlag T)
  56. ); end condition #4
  57. ); end cond
  58. ); end while
  59. (if(/= laypat:pat "")
  60. (progn
  61. (setq lLst '()
  62.     actDoc(vla-get-ActiveDocument
  63.         (vlax-get-acad-object))
  64.     ); end setq
  65. (vlax-for l(vla-get-Layers actDoc)
  66.    (if(wcmatch(strcase(vla-get-Name l))(strcase laypat:pat))
  67.     (setq lLst(append lLst(list l)))
  68.     ); end if
  69.    ); end vlax-for
  70. (if lLst
  71.    (progn
  72. (princ(strcat "\n>>> Layers found ("(itoa(length lLst))"): "))
  73.     (princ(strcat (vla-get-Name(car lLst))))
  74.     (foreach l(cdr lLst)
  75.     (princ(strcat ", "(vla-get-Name l)))
  76.     ); end foreach
  77.     (setq Ans "lIst")
  78.     (while(or(= Ans "lIst")(= Ans "Highlight"))
  79.     (initget "On ofF Lock Unlock fReeze Thaw Isolate Previouos Highlight Quit")
  80.     (setq Ans
  81.         (getkword
  82.         "\nSelect option [On/ofF/Lock/Unlock/fReeze/Thaw/Isolate/Previouos/Highlight/Quit] : "))
  83.     (vla-StartUndoMark actDoc)
  84.     (cond
  85.     ((= "On" Ans)
  86.     (StoreLayerStates)
  87.     (mapcar '(lambda(l)(vla-put-LayerON l :vlax-true))lLst)
  88.     ); end condition #2
  89.     ((= "ofF" Ans)
  90.     (StoreLayerStates)
  91.     (mapcar '(lambda(l)(vla-put-LayerON l :vlax-false))lLst)
  92.     ); end condition #3
  93.     ((= "Lock" Ans)
  94.     (StoreLayerStates)
  95.     (mapcar '(lambda(l)(vla-put-Lock l :vlax-true))lLst)
  96.     ); end condition #4
  97.     ((= "Unlock" Ans)
  98.     (StoreLayerStates)
  99.     (mapcar '(lambda(l)(vla-put-Lock l :vlax-false))lLst)
  100.     ); end condition #5
  101.     ((= "fReeze" Ans)
  102.     (StoreLayerStates)
  103.     (mapcar '(lambda(l)(if(not(member(vla-get-Name l)
  104.                 (list
  105.                 (vla-get-Name
  106.                    (vla-get-ActiveLayer actDoc))
  107.                 "0")))
  108.                 (vla-put-Freeze l :vlax-true)))
  109.         lLst); end mapcar
  110.     (if(member
  111.         (setq aName(vla-get-Name(vla-get-Activelayer actDoc)))
  112.             (mapcar 'vla-get-Name lLst))
  113.         (princ(strcat "\nCan't freeze active layer '" aName "'! "))
  114.         ); end if
  115.     ); end condition #6
  116.     ((= "Thaw" Ans)
  117.     (StoreLayerStates)
  118.     (mapcar '(lambda(l)(if(not(member(vla-get-Name l)
  119.                 (list
  120.                 (vla-get-Name
  121.                    (vla-get-ActiveLayer actDoc))
  122.                 "0")))
  123.                 (vla-put-Freeze l :vlax-false)))
  124.         lLst); end mapcar
  125.     (setvar "CMDECHO" 0)
  126.     (command "_.regenall")
  127.     (setvar "CMDECHO" 1)
  128.     ); end condition #6
  129.     ((= "Isolate" Ans)
  130.     (StoreLayerStates)
  131.     (vlax-for l(vla-get-Layers actDoc)
  132.         (if(not(wcmatch(strcase(vla-get-Name l))(strcase laypat:pat)))
  133.     (vla-put-LayerON l :vlax-false)
  134.     ); end if
  135.         ); end vlax-for
  136.     ); end condition #7
  137.     ((= "Previouos" Ans)
  138.     (if patlay:layerstate
  139.         (progn
  140.         (setq oldLay(vla-get-ActiveLayer actDoc))
  141.         (setvar "CLAYER" "0")
  142.         (mapcar '(lambda(l)
  143.             (vla-put-LayerOn(car l)(cadr l))
  144.             (vla-put-Lock(car l)(nth 2 l))
  145.             (if(not(member(vla-get-Name(car l))
  146.                 (list
  147.                 (vla-get-Name
  148.                    (vla-get-ActiveLayer actDoc))
  149.                 "0")))
  150.                 (vla-put-Freeze(car l)(last l))))
  151.         patlay:layerstate); end mapcar
  152.         (if
  153.         (and
  154.            (/= :vlax-true(vla-get-Freeze oldLay))
  155.            (not(vl-catch-all-error-p
  156.             (vl-catch-all-apply 'vla-get-Name
  157.                (list oldLay))))
  158.         ); end and
  159.         (vla-put-ActiveLayer actDoc oldLay)
  160.         ); end if
  161.         (StoreLayerStates)
  162.         ); end progn
  163.         (princ "\nPreviouos layer state missed ")
  164.         ); end if
  165.     ); end condition #8
  166.     ((= "Highlight" Ans)
  167.     (sssetfirst nil(ssget "_X"(list(cons 8 laypat:pat))))
  168.     ); end condition #9
  169.     ((or(not Ans)(= "Quit" Ans))
  170.     (princ "\nQuit LAYPAT ")
  171.     ); end condition #10
  172.     ); end cond
  173.     (vla-EndUndoMark actDoc)
  174.     ); end while
  175.     ); end progn
  176.    (princ "\nNo layers found! ")
  177.    ); end if
  178. ); end progn
  179. (setq laypat:pat oldPat)
  180. ); end if
  181. (princ)
  182. ); end of c:patlay
  183. (princ "\n*** Type PATLAY for wildcard layer actions*** ")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 16:22 , Processed in 0.366886 second(s), 58 queries .

© 2020-2025 乐筑天下

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