各位大哥帮忙看下,有这两种文字,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)
生成的新文字会垂直排列在原始文字的上方
支持中文字符的分隔符"、"
您可以根据需要调整文字间距、排列方向等参数。网友答:
Error: undefined function - nil大哥提示这个网友答:
谢谢大哥,大哥你这个是AI写的不网友答: 这种简单的东西,现在可以问AI就解决了。网友答:
大哥可以弄一个不
网友答:
要人服务,出点血。不想的话,就让AI服务,不要钱。这点活,AI技术不错的。网友答: ai 研究下吧、这个不会很复杂
---
有明确的需求和思路 ai都能写出来
网友答: ;;固定格式应该简单
网友答: 建议发在付费开发里网友答:
谢谢派大....
网友答: 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
;;固定格式应该简单
谢谢派大....