Textstyle和Dimstyle
有人能给我指一个好的lisp来创建和设置文本样式和dimstyle吗??谢谢 创建文本样式的快速简单方法。。。
这里的方法更复杂,但适应性更强,还有一种创建dimstyle的方法。。。 谢谢你,瑞克,
我试着组合一个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)
)
假设你的新风格存在。。。使用此功能。。。
(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”) 瑞克,这是选择并更改文本,还是像以前一样选择并更改。不确定它是如何结合在一起的。 瑞克?
该函数将选择所有文本,并将其更改为作为参数传递的样式名称。 对不起,我一定是从旅行途中的某个地方捡到的。我已将其放入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 我猜是一个命令函数中的一两个多“”。
我可以问一下,当(entmake)代码发布在上面时,为什么要使用(command)创建样式吗?
使用(命令)功能时,样式尤其有问题,因为提示的数量可能因所选字体而异。 嗯,我正在努力掌握lisp,但由于我对代码的理解很好,所以我失败了很多。我使用命令行作为解决方法。
不管怎样,我把entmake包括在内,它很管用。
谢谢 别担心。。。
如果可以避免使用(命令),请这样做。
(command)比(entmake)或(vla add)慢得多。
事实上,如果必须使用命令行,请改用(vl cmdf)函数。
页:
[1]