f700es 发表于 2022-7-6 09:12:26

我觉得衬衫是个笑话

alanjt 发表于 2022-7-6 09:17:15

英雄联盟
就等着我的4yo帮我拿一个。

f700es 发表于 2022-7-6 09:18:09

它不必一次运行多个图形,只需在当前图形中即可。A.scr文件会很好。

f700es 发表于 2022-7-6 09:21:48

哈哈,找到一个。自动麻木。我将与大家分享。
 
链接
 
肖恩

BlackBox 发表于 2022-7-6 09:24:13

为了好玩。。。
 

(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))))

Lee Mac 发表于 2022-7-6 09:29:33

派对有点晚了,但也许可以从你的剧本中调用这样的内容:
 
;; (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恤听起来像是一个有利可图的生意!

BlackBox 发表于 2022-7-6 09:30:48

如果你真的感兴趣,我会帮你设计/品牌,你可以建立一个免费的CaféPress在线商店。没有前期成本,而且这些商品是按订单生产的。
 
... 这是我为我当地的无国界工程师分会(EWB)所做的,他们要求我担任时事通讯编辑,并担任委员会主席,负责我对时事通讯进行的图形增强眨眼:

BlackBox 发表于 2022-7-6 09:34:38

李,至于代码。。。首先,像往常一样简洁,但我很好奇。。。代码是否迭代选择集中每个实体的模式条件?

Lee Mac 发表于 2022-7-6 09:39:06

 
我之前的帖子也是在开玩笑,但谢谢你的建议和好意,让我自愿为你的时间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)
)

ketxu 发表于 2022-7-6 09:41:55

@李:我认为你不需要eval list来分配一个函数^^Just(setq f(lambda(s)…)
页: 1 [2]
查看完整版本: LISP例程到全局编辑te