就等着我的4yo帮我拿一个。 它不必一次运行多个图形,只需在当前图形中即可。A.scr文件会很好。 哈哈,找到一个。自动麻木。我将与大家分享。
链接
肖恩 为了好玩。。。
(defun c:MODT () (c:ModifyText))
(defun c:ModifyText(/ *error* option string pattern _PutString)
;; © RenderMan, 2011
(princ "\rMODIFYTEXT")
(vl-load-com)
(defun *error*(msg)
(and oldNomutt (setvar 'nomutt oldNomutt))
(if acDoc
(vla-endundomark acDoc))
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** ")))) ; Fatal error, display it
(princ))
(initget "PREFIX REPLACE SUFFIX")
(if
(and
(setq option
(getkword "\nEnter option : "))
(/= "" (setq string (getstring "\nEnter text to add: ")))
(cond
((= "PREFIX" option)
(defun _PutString(oText)
(vla-put-textstring
oText
(strcat string (vla-get-textstring oText)))))
((and (= "REPLACE" option)
(setq
pattern
(getstring
T
"\nEnter text to replace (case sensitive): ")))
(defun _PutString(oText)
(vla-put-textstring
oText
(vl-string-subst
string
pattern
(vla-get-textstring oText)))))
((= "SUFFIX" option)
(defun _PutString(oText)
(vla-put-textstring
oText
(strcat (vla-get-textstring oText) string))))))
((lambda (acDoc oldNomutt / ss)
(vla-startundomark acDoc)
(prompt
"\nSelect entity on desired layer(s) to modify all text: ")
(setvar 'nomutt 1)
(while (and (/= nil (setq ss (ssget ":S:E:L")))
(cond (pattern
(setq ss
(ssget
"_X"
(list
'(0 . "MTEXT,TEXT")
(cons 1 (strcat "*" pattern "*"))
(cons 8
(vla-get-layer
(vlax-ename->vla-object
(ssname ss 0))))))))
((setq ss
(ssget
"_X"
(list
'(0 . "MTEXT,TEXT")
(cons 8
(vla-get-layer
(vlax-ename->vla-object
(ssname ss 0))))))))))
(vlax-for oText
(setq ss (vla-get-activeselectionset acDoc))
(_PutString oText))
(vla-delete ss))
(*error* nil))
(vla-get-activedocument (vlax-get-acad-object))
(getvar 'nomutt))
(progn
(cond
(option
(prompt "\n** Invalid input: Must enter a text string ** "))
((prompt "\n** Invalid input: Must select an option ** ")))
(princ))))
派对有点晚了,但也许可以从你的剧本中调用这样的内容:
;; (TextLayerEdit "YourLayer" "Text to Add" <mode>)
;; <mode> = 0-replace
;; = 1-prefix
;; = 2-suffix
;; <layer> can use wildcards.
(defun TextLayerEdit ( layer newtext mode / e i s v )
(if (setq s (ssget "_X" (list '(0 . "TEXT,MTEXT") (cons 8 layer))))
(repeat (setq i (sslength s))
(setq e (entget (ssname s (setq i (1- i))))
v (assoc 1 e)
)
(entmod
(subst
(cons 1
(cond
( (= 0 mode) newtext)
( (= 1 mode) (strcat newtext (cdr v)))
( (strcat (cdr v) newtext))
)
)
v e
)
)
)
)
(princ)
)
调用层名称、要添加的文本和相关模式号:
(TextLayerEdit "YourLayerName" "%%159" 2)
[注意,层名称可能使用通配符]
_______________________________________________
有了这些兴趣,“Lee Mac Programming”t恤听起来像是一个有利可图的生意! 如果你真的感兴趣,我会帮你设计/品牌,你可以建立一个免费的CaféPress在线商店。没有前期成本,而且这些商品是按订单生产的。
... 这是我为我当地的无国界工程师分会(EWB)所做的,他们要求我担任时事通讯编辑,并担任委员会主席,负责我对时事通讯进行的图形增强眨眼: 李,至于代码。。。首先,像往常一样简洁,但我很好奇。。。代码是否迭代选择集中每个实体的模式条件?
我之前的帖子也是在开玩笑,但谢谢你的建议和好意,让我自愿为你的时间Renderman。
谢谢Renderman;是的,你是对的,为了便于编码,我牺牲了在循环中计算(最多)两个“=”表达式的效率;但既然你提出了这一点,这里有一个可能的选择:
;; (TextLayerEdit "YourLayer" "Text to Add" <mode>)
;; <mode> = 0-replace
;; = 1-prefix
;; = 2-suffix
;; <layer> can use wildcards.
(defun TextLayerEdit ( layer newtext mode / e f i s v )
(setq f
(eval
(list 'lambda '( s )
(cond
( (= 0 mode) newtext)
( (= 1 mode) (list 'strcat newtext 's))
( (list 'strcat 's newtext))
)
)
)
)
(if (setq s (ssget "_X" (list '(0 . "TEXT,MTEXT") (cons 8 layer))))
(repeat (setq i (sslength s))
(setq e (entget (ssname s (setq i (1- i))))
v (assoc 1 e)
)
(entmod (subst (cons 1 (f (cdr v))) v e))
)
)
(princ)
) @李:我认为你不需要eval list来分配一个函数^^Just(setq f(lambda(s)…)
页:
1
[2]