woodman78 发表于 2022-7-6 11:53:25

Textstyle和Dimstyle

有人能给我指一个好的lisp来创建和设置文本样式和dimstyle吗??
 
谢谢

rkmcswain 发表于 2022-7-6 12:02:27

创建文本样式的快速简单方法。。。
 
这里的方法更复杂,但适应性更强,还有一种创建dimstyle的方法。。。

woodman78 发表于 2022-7-6 12:09:37

谢谢你,瑞克,
 
我试着组合一个Lisp来创建一个文本样式,并将图形中的所有文本移动到该样式。这是我到目前为止所做的,但它创建了textstyle,但随后暂停。你能帮忙吗??
 

(defun c:tstyle1 ()
(command "-style" "CCC_Doer" "verdana" "0" "1" "0" "N" "N" "" "")
(setq text1(ssget "x" '((8 . "TEXT"))))
(command "_change" text1 """" "" "CCC_Doer" "" "")
(princ)
)

rkmcswain 发表于 2022-7-6 12:18:06

假设你的新风格存在。。。使用此功能。。。
 

(defun newstyle (name / sset ent lst newlst i)
(setq sset (ssget "_X" '((0 . "TEXT"))) i 0)
(repeat (sslength sset)
   (setq ent (ssname sset i))
   (setq lst (entget ent))
   (setq newlst (subst (cons 7 name)(assoc 7 lst) lst))
   (entmod newlst)
   (setq i (1+ i))
)
)


 
...并这样称呼它(newstyle“MyNewStyleName”)

woodman78 发表于 2022-7-6 12:21:59

瑞克,这是选择并更改文本,还是像以前一样选择并更改。不确定它是如何结合在一起的。

rkmcswain 发表于 2022-7-6 12:31:10

瑞克?
 
该函数将选择所有文本,并将其更改为作为参数传递的样式名称。

woodman78 发表于 2022-7-6 12:36:27

对不起,我一定是从旅行途中的某个地方捡到的。我已将其放入lisp中,它运行良好,但在完成所有操作后,命令行显示:
 
命令:DOERVER未知命令“DOERVER”。按F1键获取帮助。
 

(defun c:DoerVer (/ *error* Make_Layer Layers obj ss tag)
(vl-load-com)


(setq Layers
   ; Old Color    ; New Layer   ; Layer Color ; Layer Lineweight
      '((5   . ("CCC_DOER_LA0001"   253          "000"))
          (6   . ("CCC_DOER_LA0002"       7          "000"))
          (3   . ("CCC_DOER_LA0003"      84          "030"))
          (1   . ("CCC_DOER_LA0004"       1          "030"))
          (2   . ("CCC_DOER_LA0005"       2          "000"))
          (nil . ("CCC_DOER_LA0006"       7          "000")))
)
(setq *doc* (cond (*doc*) ((vla-get-ActiveDocument
                              (vlax-get-acad-object)))))
(defun *error* (msg)
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ))
(defun Make_Layer (lay Col LnW)
   (cond ((tblsearch "LAYER" lay))
         
         ((setq lObj (vla-add (vla-get-Layers *doc*) lay))
            (vla-put-color lObj Col)
            (vla-put-lineweight lObj
            (eval (read (strcat "acLnWt" LnW)))))))
(mapcar
   (function
   (lambda (x) (apply (function Make_Layer) (cdr x)))) Layers)
(if (ssget "_X")
   (progn
   (vlax-for obj (setq ss (vla-get-ActiveSelectionSet *doc*))
      
       (if (setq tag (assoc (vla-get-color obj) Layers))
         (mapcar
         (function
             (lambda (x y) (vlax-put-property obj x y))) '(color layer)
         (list acByLayer (cadr tag))))
       (if (eq "TEXT" (vla-get-layer obj))
         (vla-put-color obj acByLayer)))
   (vla-delete ss)))
(command "_.-layer" "F" "CCC_DOER_LA0005" "F" "LA0000" "")
(command "-style" "CCC_Doer" "verdana" "0" "1" "0" "N" "N" "")
(setq sset (ssget "_X" '((0 . "TEXT"))) i 0)
(repeat (sslength sset)
   (setq ent (ssname sset i))
   (setq lst (entget ent))
   (setq newlst (subst (cons 7 "CCC_Doer")(assoc 7 lst) lst))
   (entmod newlst)
   (setq i (1+ i))
(princ)
)
(princ)
)

 
这可能是一个括号或什么东西,我没有发现,但任何想法。我包括dxf来测试它。
DOER0002.DXF

rkmcswain 发表于 2022-7-6 12:41:12

我猜是一个命令函数中的一两个多“”。
 
我可以问一下,当(entmake)代码发布在上面时,为什么要使用(command)创建样式吗?
 
使用(命令)功能时,样式尤其有问题,因为提示的数量可能因所选字体而异。

woodman78 发表于 2022-7-6 12:52:56

嗯,我正在努力掌握lisp,但由于我对代码的理解很好,所以我失败了很多。我使用命令行作为解决方法。
 
不管怎样,我把entmake包括在内,它很管用。
 
谢谢

rkmcswain 发表于 2022-7-6 12:58:44

别担心。。。
 
如果可以避免使用(命令),请这样做。
(command)比(entmake)或(vla add)慢得多。
事实上,如果必须使用命令行,请改用(vl cmdf)函数。
页: [1]
查看完整版本: Textstyle和Dimstyle