adamsnez 发表于 2022-7-6 11:16:11

匹配Dimstyle和layer

我有一个叫“匹配”的按钮。当前,当您点击它时,可以选择图形中的任何dimstyle,并使其成为当前dimstyle。
 
宏代码为“^C^C-dimstyle;”
 
我想把层也合并到这个例子中
 
我当前的dimstyle是Metric5_箭头,层“wall”。
我想点击一个文本,其中dimstyle是Metric25_点,层“文字”。
 
现在,当我单击该文本时,当前的dimstyle更改为Metric25_点,当前层从以前的“wall”切换为txt。
 
如何将其编码到匹配按钮中?我得到了“^C^C-dimstyle;”从办公室的某个人那里,对我来说效率不够。
 
谢谢!

alanjt 发表于 2022-7-6 11:21:05

(defun c:test (/ e)
(and (setq e (car (entsel "\nSelect Dimension: ")))
      (or (eq "DIMENSION" (cdr (assoc 0 (setq e (entget e)))))
          (alert "Invalid object!")
      )
      (setvar 'clayer (cdr (assoc 8 e)))
      (command "_.-dimstyle" "_restore" (cdr (assoc 3 e)))
)
(princ)
)

Lee Mac 发表于 2022-7-6 11:24:44

VL中的情况看起来非常不同
 

(defun c:DimMatch ( / doc obj )
(vl-load-com)

(defun Itemp ( coll item )
   (if
   (not
       (vl-catch-all-error-p
         (setq item
         (vl-catch-all-apply
             (function vla-item) (list coll item)
         )
         )
       )
   )
   item
   )
)

(if
   (progn
   (vla-GetEntity
       (vla-get-Utility
         (setq doc
         (vla-get-ActiveDocument
             (vlax-get-Acad-Object)
         )
         )
       )
       'obj
       "\nSelect Dimension: "
   )
   (and obj
       (wcmatch
         (strcase
         (vla-get-ObjectName obj)
         )
         "*DIMENSION*,*LEADER"
       )
   )
   )
   (mapcar
   (function
       (lambda ( Information )
         (apply
         (function
             (lambda ( Dest Collection Source )
               (vlax-put-property doc Dest
               (itemp Collection
                   (vlax-get-property obj Source)
               )
               )
             )
         )
         Information
         )
       )
   )
   (list
       (list (quote ActiveLayer)   (vla-get-layers    doc) (quote Layer))
       (list (quote ActiveDimstyle)(vla-get-Dimstyles doc) (quote StyleName))
   )
   )
)

(princ)
)

alanjt 发表于 2022-7-6 11:27:16

我曾想过使用VL,但他正在制作按钮宏。尽可能简单似乎是合乎逻辑的。

adamsnez 发表于 2022-7-6 11:30:34

谢谢大家,我完全不知道如何实现这个。。。。
我根本不是一个编码员。
 
我试图将此代码粘贴到CUI-->查找匹配工具-->中,然后在“宏”下粘贴到“长字符串编辑器”。。。。
不起作用。
 
我要怎么让它运行?!在你们发布之前,我甚至从未见过代码的类型。
 
是VB的东西吗?我需要安装VBEditor吗?(顺便说一句,现在安装的是以前没有的…)

Lee Mac 发表于 2022-7-6 11:34:24

也许可以看看这里:
 
http://www.cadtutor.net/forum/showthread.php?t=1390
 
我在VL中的代码更适合学术界。

Lee Mac 发表于 2022-7-6 11:37:09

 
这是LISP代码,不是Visual Basic,您不需要VBEditor-AutoCAD已经安装了您需要的一切

alanjt 发表于 2022-7-6 11:41:25

不客气。
 
 
我知道。

adamsnez 发表于 2022-7-6 11:43:13

是的,不知道为什么这仍然不起作用,但我的按钮链接找不到!!!
 
lisp位于@比方说“C:/acad/match.lsp”
 
 
我在另一个网站上找到了这个按钮宏字段
^C^C^C(加载C:/acad/match.lsp”);
 
但当我点击我添加到工具栏的按钮时,它不会加载!
它在命令行中显示
 
“命令:(加载C:/acad/match.lsp”)
然后在下面写着
 
(“_>
 
 
 
我从你们给我的lisp中修改的唯一一件事是,当我意识到必须输入它才能加载它时,我将注释和“test”更改为“match”,但我希望它在按钮上,而不是总是键入“match”。
 
 
 
;;匹配。LSP选择一个DIMSTYLE文本,该DIMSTYLE和图层将变为当前
;;            非常适合买票
;;===========================================================================
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:匹配(/e)
(和(setq e(car(entsel“\n选择尺寸:”))
(或(eq“DIMENSION”(cdr(assoc 0(setq e(entget e k))))))
(警报“无效对象!”)
)
(setvar’clayer(cdr(assoc 8 e)))
(命令“-dimstyle”“\u restore”(cdr(assoc 3 e)))
)
(普林斯)
)

alanjt 发表于 2022-7-6 11:47:11

您忘记了一个“”
 
^C^C(or c:Match (load "C:/acad/match.lsp" nil));MATCH;
 
我不擅长按钮,但这应该加载(如果还没有)并执行命令。
页: [1] 2
查看完整版本: 匹配Dimstyle和layer