pyrzms 发表于 2022-7-5 23:41:36

组合文本字符串

我在一张图中有很多文本字符串,我想把这些文本成对地组合一次。
 
第一段文字:“47[20/20”
 
第二个文本:“L=1200”
 
最终文本:“47[20/20 L=1200”
 
我附上了样品图纸。
 
谢谢你的帮助。样品图纸

MSasu 发表于 2022-7-5 23:50:24

请检查此工具。

ymg3 发表于 2022-7-5 23:54:47

pyrzms,
 
这比看起来更难。
 
我们如何确保长度部分属于第一部分。
 
我们可以使用该位置并获得最近的结果,但在某些情况下可能不会
正确工作。
 
这就是为什么维修程序要求您选择。
 
ymg公司

pyrzms 发表于 2022-7-6 00:04:23

谢谢ymg3

hmsilva 发表于 2022-7-6 00:10:53

作为“演示”,可能是这样的

(defun c:test (/ ENT ENT1 HND HND1 ITM MN MX NUM P1 P2 P3 SS SS1 STR)
(if (setq ss (ssget "_:L" '((0 . "TEXT") (1 . "#*`[##`/##"))))
   (progn
   (setq itm 0
    num (sslength ss)
   )
   (while (< itm num)
(setq hnd (ssname ss itm)
      ent (entget hnd)
)
(vla-getboundingbox (vlax-ename->vla-object hnd) 'mn 'mx)
(setq p1 (vlax-safearray->list mn)
      p2 (vlax-safearray->list mx)
)
(setq
p3 (list (+ (- (car p2) (car p1)) (car p2)) (cadr p1) (caddr p2))
)
(if (setq ss1 (ssget "_C" p2 p3 '((0 . "TEXT") (1 . "@=#*"))))
(progn
    (setq hnd1 (ssname ss1 0)
   ent1 (entget hnd1)
   str(strcat (cdr (assoc 1 ent)) " " (cdr (assoc 1 ent1)))
    )
    (entmod (subst (cons 1 str) (assoc 1 ent) ent))
    (entdel hnd1)
)
)
(setq itm (1+ itm))
   )
   )
)
(princ)
)

 
 
HTH公司
亨里克

ymg3 发表于 2022-7-6 00:11:53

嗯,席尔瓦,
 
这很好!
 
唯一不同的是在新层上创建连接的实体,
在我检查之前,不要删除单独的一个。
 
非常小的修改:
 

(setq ent (subst (cons 1 str) (assoc 1 ent) ent)
   ent (subst (cons 8 "JOINED") (assoc 8 ent) ent)                  
)
(entmakex ent)

 
ymg公司

hmsilva 发表于 2022-7-6 00:23:12

 
 
修改得很好,ymg
 
 
亨里克

pyrzms 发表于 2022-7-6 00:25:02

谢谢ymg3和hmsilva。
 
ymg3如何添加您的最后一个

(setq ent (subst (cons 1 str) (assoc 1 ent) ent)
   ent (subst (cons 8 "JOINED") (assoc 8 ent) ent)                  
)
(entmakex ent)
修改。

hmsilva 发表于 2022-7-6 00:32:06

不客气,皮兹姆斯
 
使用ymg mod
 

(defun c:test (/ ENT ENT1 HND ITM MN MX NUM P1 P2 P3 SS SS1 STR)
(if (setq ss (ssget "_:L" '((0 . "TEXT") (1 . "#*`[##`/##"))))
   (progn
   (setq itm 0
    num (sslength ss)
   )
   (while (< itm num)
(setq hnd (ssname ss itm)
      ent (entget hnd)
)
(vla-getboundingbox (vlax-ename->vla-object hnd) 'mn 'mx)
(setq p1 (vlax-safearray->list mn)
      p2 (vlax-safearray->list mx)
)
(setq
p3 (list (+ (- (car p2) (car p1)) (car p2)) (cadr p1) (caddr p2))
)
(if (setq ss1 (ssget "_C" p2 p3 '((0 . "TEXT") (1 . "@=#*"))))
(progn
    (setq ent1 (entget (ssname ss1 0))
   str (strcat (cdr (assoc 1 ent)) " " (cdr (assoc 1 ent1)))
   ent (subst (cons 1 str) (assoc 1 ent) ent)
   ent (subst (cons 8 "JOINED") (assoc 8 ent) ent)
    )
(entmakex ent)
)
)
(setq itm (1+ itm))
   )
   )
)
(princ)
)

 
HTH公司
亨里克

ymg3 发表于 2022-7-6 00:36:30

pyrzms,
 
希望Enrique不会介意,但这里我对它做了更多修改,
 
连接的文字放置在如上所述连接的图层上,但是
我们将其偏移一个常数,该常数等于文本高度的1.25倍
选择集中第一个文本图元的。
 
连接文字图元的对齐方式更改为左对齐,
与分离的位置更紧密地对齐。
 
因此,一旦你对结果满意,你就删除了
初始层,然后按偏移值向下移动所有内容。
 
将向文本屏幕发送一个小报告,提供以下信息:

Found Items: 264
Matched Items: 262
Vert. Offset: 18.75
 
修改如下:
 

(defun c:jtxt (/ ent ent1 hnd hnd1 itm mn mx num p1 p2 p3 ss ss1 str)
(if (setq ss (ssget "_:L" '((0 . "TEXT") (1 . "#*`[##`/##"))))
   (progn
   (setq ofs (* (cdr (assoc 40 (entget (ssname ss 0)))) 1.25)
         itm 0
         jcount 0
         num (sslength ss)
   )
   (while (< itm num)
       (setq hnd (ssname ss itm)
             ent (entget hnd)
       )
       (vla-getboundingbox (vlax-ename->vla-object hnd) 'mn 'mx)
       (setq p1 (vlax-safearray->list mn)
             p2 (vlax-safearray->list mx)
       )
       (setq
         p3 (list (+ (- (car p2) (car p1)) (car p2)) (cadr p1) (caddr p2))
       )
       (if (setq ss1 (ssget "_C" p2 p3 '((0 . "TEXT") (1 . "@=#*"))))
         (progn
         (setq hnd1 (ssname ss1 0)
               ent1 (entget hnd1)
               str(strcat (cdr (assoc 1 ent)) " " (cdr (assoc 1 ent1)))
               loc(cdr (assoc 10 ent))
               loc(list (car loc) (+ (cadr loc) ofs) (caddr loc))
         )
         (setq ent (subst (cons 1 str) (assoc 1 ent) ent)
               ent (subst (cons 8 "JOINED") (assoc 8 ent) ent)
               ent (subst (cons 10 loc) (assoc 10 ent) ent)
               ent (subst (cons 11 loc) (assoc 11 ent) ent)
               ent (subst (cons 72 0) (assoc 72 ent) ent)
         )
         (entmake ent)
         (setq jcount (1+ jcount))
         )
       )
       (setq itm (1+ itm))
   )
   )
)
(princ (strcat "\nFound Items: " (itoa itm)
                "\nMatched Items: " (itoa jcount)
                "\n Vert. Offset: " (rtos ofs 2 2)
      )
)      
(princ)
)

 
可能更好的方法是更改图层并移动分离的项目
而不是连接的。
 
这样,在结束时您将无需做任何事情,只需删除分隔的。
 
但为此,我们需要稍微更改选择方法,使其仅包括
其中包含“[”但没有“L=”的文本实体。
 
我走着瞧。
 
ymg公司
页: [1] 2
查看完整版本: 组合文本字符串