本帖最后由 lee50310 于 2023-4-7 13:00 编辑
bai2000 发表于 2023-4-6 18:36
很不错,但是不需要 “(3)刪除第一行“的功能,怎么改。最好图层点选,更通用一点
(princ "\n批量選擇要轉換的多行文字 : ")
(setq ss(ssget (list (cons 0 "MTEXT") (cons 8 "TechnicExplain")) )) ;過濾多行文字及圖層
指定圖層 可修改程式中 (cons 8 "TechnicExplain") 將 "TechnicExplain"圖層名 改成你要的圖層名 例: "temp"
(princ "\n批量選擇要轉換的多行文字 : ")
(setq ss(ssget (list (cons 0 "MTEXT") (cons 8 "temp")) )) ;過濾多行文字及圖層
刪除第一行是原主的要求
若不要刪除第一行 那 只剩 多行文字轉 單行文字
只需將程式中 此處修改成下面樣式即可
- (if (eq (vla-get-objectname obj) "AcDbMText")
- (progn
- ;|-------此段以下當作註解*****
- (setq b1(rh:regexp "\\\\[P]" (vla-get-TextString obj) "")) ;取出文字串 例: b1="底板\tA05 底板: 1300x480x16=1"
- (setq tn (strlen b1)) ;字串長度
- (if (setq k(vl-string-position (ascii "\t") b1 0 T) ) ;換行符號 "/t" ,vl-string-position ==> 字串字數從0開始數到 換行符號 "\t" 的長度
- (setq b2(substr b1 (+ k 2) tn)) ;刪除文字串第一行 "底板" , b2= "A05 底板: 1300x480x16=1"
- (setq b2 b1) ;沒有找到回原字串
- );end_if
-
- (vla-put-TextString obj b2) ;更新文字串
- |; -------此段以上當作註解******
- (vl-cmdf "explode" ent ) ;分解成單行文字
- (setq data(entget (entlast)))
- (setq op_ip(assoc 10 data))
- (setq data(subst np_ip op_ip data)) ;換插入點為左下點
- (entmod data)
-
- );end_progn
- (alert "不是多行文字實體")
- );end_if
|