组合文本字符串
我在一张图中有很多文本字符串,我想把这些文本成对地组合一次。第一段文字:“47[20/20”
第二个文本:“L=1200”
最终文本:“47[20/20 L=1200”
我附上了样品图纸。
谢谢你的帮助。样品图纸 请检查此工具。 pyrzms,
这比看起来更难。
我们如何确保长度部分属于第一部分。
我们可以使用该位置并获得最近的结果,但在某些情况下可能不会
正确工作。
这就是为什么维修程序要求您选择。
ymg公司 谢谢ymg3 作为“演示”,可能是这样的
(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公司
亨里克 嗯,席尔瓦,
这很好!
唯一不同的是在新层上创建连接的实体,
在我检查之前,不要删除单独的一个。
非常小的修改:
(setq ent (subst (cons 1 str) (assoc 1 ent) ent)
ent (subst (cons 8 "JOINED") (assoc 8 ent) ent)
)
(entmakex ent)
ymg公司
修改得很好,ymg
亨里克 谢谢ymg3和hmsilva。
ymg3如何添加您的最后一个
(setq ent (subst (cons 1 str) (assoc 1 ent) ent)
ent (subst (cons 8 "JOINED") (assoc 8 ent) ent)
)
(entmakex ent)
修改。 不客气,皮兹姆斯
使用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公司
亨里克 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