各位大哥帮忙看下,有这两种文字,1-WL-2~4,1-WL-1、3、5,求一个功能,输入tt,选择类似文字,比如1-WL-2~4,则在文字边上生成1-WL-2和1-WL-3和1-WL-4,比如选择1-WL-1、3、5,则在文字边上生成1-WL-1和1-WL-3和1-WL-5


网友答: autolisp 有这两种文字,1-WL-2~4,1-WL-1、3、5,求一个功能,输入tt,选择类似文字,比如1-WL-2~4,则在文字边上生成1-WL-2和1-WL-3和1-WL-4,比如选择1-WL-1、3、5,则在文字边上生成1-WL-1和1-WL-3和1-WL-5
我来为您编写一个AutoLISP程序来实现这个功能。以下是完整的代码:

lisp
(defun c:tt (/ ent txt old_entdata pt ss start_num end_num num_list prefix result_list new_txt new_pt)
  (vl-load-com)
  
  (setq ent (car (entsel "\n选择要分解的文字: ")))
  (if (not ent)
    (progn
      (princ "\n未选择对象。")
      (exit)
    )
  )
  
  (setq old_entdata (entget ent))
  (if (/= (cdr (assoc 0 old_entdata)) "TEXT")
    (progn
      (princ "\n选择的对象不是文字。")
      (exit)
    )
  )
  
  (setq txt (cdr (assoc 1 old_entdata)))
  (setq pt (cdr (assoc 10 old_entdata)))
  
  (cond
    ;;; 处理 1-WL-2~4 这种格式
    ((vl-string-search "~" txt)
     (setq ss (vl-string-split txt "~"))
     (if (= (length ss) 2)
       (progn
         (setq prefix (car ss))
         (setq end_num (atoi (cadr ss)))
         
         ; 从前缀中提取起始数字
         (setq start_num
           (atoi
             (car
               (reverse
                 (vl-string-split prefix "-")
               )
             )
           )
         )
         
         ; 生成数字序列
         (setq result_list '())
         (while (<= start_num end_num)
           (setq result_list (cons start_num result_list))
           (setq start_num (1+ start_num))
         )
         (setq result_list (reverse result_list))
       )
     )
    )
   
    ;;; 处理 1-WL-1、3、5 这种格式
    ((vl-string-search "、" txt)
     (setq ss (vl-string-split txt "、"))
     (if (> (length ss) 1)
       (progn
         (setq prefix (car ss))
         (setq num_list '())
         
         ; 处理每个数字
         (foreach num_str (cdr ss)
           (setq num_list (cons (atoi num_str) num_list))
         )
         (setq result_list (reverse num_list))
         
         ; 从第一个元素中提取前缀
         (setq prefix
           (vl-string-trim
             (strcat
               (itoa
                 (atoi
                   (car
                     (reverse
                       (vl-string-split prefix "-")
                     )
                   )
                 )
               )
             )
             prefix
           )
         )
       )
     )
    )
   
    (t
     (princ "\n文字格式不支持。")
     (exit)
    )
  )
  
  ; 生成新的文字
  (setq new_pt (list (car pt) (+ (cadr pt) (* (getvar "TEXTSIZE") 1.5)) (caddr pt)))
  
  (foreach num result_list
    (setq new_txt (strcat prefix (itoa num)))
   
    (entmake
      (list
        '(0 . "TEXT")
        (cons 1 new_txt)
        (cons 10 new_pt)
        (cons 40 (getvar "TEXTSIZE"))
        (assoc 7 old_entdata) ; 文字样式
        (assoc 62 old_entdata) ; 颜色
        (assoc 8 old_entdata) ; 图层
      )
    )
   
    ; 更新下一个文字的位置
    (setq new_pt (list (car new_pt) (- (cadr new_pt) (* (getvar "TEXTSIZE") 1.2)) (caddr new_pt)))
  )
  
  (princ (strcat "\n成功生成 " (itoa (length result_list)) " 个文字。"))
  (princ)
)

;;; 辅助函数:字符串分割
(defun vl-string-split (str delim / pos lst)
  (while (setq pos (vl-string-search delim str))
    (setq lst (cons (substr str 1 pos) lst))
    (setq str (substr str (+ pos 1 (strlen delim))))
  )
  (reverse (cons str lst))
)

;;; 辅助函数:从字符串末尾去除指定字符
(defun vl-string-trim (char str / len charlen)
  (setq len (strlen str))
  (setq charlen (strlen char))
  (if (and (> len charlen) (= (substr str (- len charlen -1)) char))
    (substr str 1 (- len charlen))
    str
  )
)

(princ "\n输入 TT 启动文字分解功能")
(princ)
这个程序的主要功能:

使用方法:

在AutoCAD中加载此LISP程序

输入命令 TT

选择要分解的文字(支持两种格式)

支持的格式:

1-WL-2~4 → 生成 1-WL-2、1-WL-3、1-WL-4

1-WL-1、3、5 → 生成 1-WL-1、1-WL-3、1-WL-5

功能特点:

自动识别文字格式

在原始文字上方垂直排列生成新文字

保持原有的文字样式、颜色和图层

文字间距根据当前文字大小自动调整

注意事项:

确保选择的文字是单行文字(TEXT)

生成的新文字会垂直排列在原始文字的上方

支持中文字符的分隔符"、"

您可以根据需要调整文字间距、排列方向等参数。

网友答:
lxw320 发表于 2025-10-10 01:37
autolisp 有这两种文字,1-WL-2~4,1-WL-1、3、5,求一个功能,输入tt,选择类似文字,比如1-WL-2~4,则在 ...

Error: undefined function - nil大哥提示这个

网友答:
lxw320 发表于 2025-10-10 01:37
autolisp 有这两种文字,1-WL-2~4,1-WL-1、3、5,求一个功能,输入tt,选择类似文字,比如1-WL-2~4,则在 ...

谢谢大哥,大哥你这个是AI写的不

网友答: 这种简单的东西,现在可以问AI就解决了。

网友答:
自贡黄明儒 发表于 2025-10-9 10:05
这种简单的东西,现在可以问AI就解决了。

大哥可以弄一个不


网友答:
664571221 发表于 2025-10-9 10:16
大哥可以弄一个不

要人服务,出点血。不想的话,就让AI服务,不要钱。这点活,AI技术不错的。

网友答: ai 研究下吧、这个不会很复杂
---
有明确的需求和思路 ai都能写出来


网友答: ;;固定格式应该简单




网友答: 建议发在付费开发里

网友答:
xyp1964 发表于 2025-10-9 12:25
;;固定格式应该简单

谢谢派大....
  • 上一篇:CAD一键动态块2
  • 下一篇:没有了