vlisp2012 发表于 2014-4-19 16:26:24

悬赏:相同的文字依次加上递增的后缀来区分

本帖最后由 vlisp2012 于 2014-4-23 14:44 编辑

大侠们开个价吧。

面材排版的问题,请教一下大家:
石材幕墙,已经按照不同的大小,完成了不同的面材编号,来下单。这样一来不同的部位,相同的石头都编辑成一种编号了;
如:17B-B02。数量可能有20多块。
问题是,石材厂家,不希望有相同编号的石头,以区分其不同的位置。
希望将相同的编号,加上依次递增的后缀来区分。如:17B-B02-1,17B-B02-2,17B-B02-3…….
没有相同编号的,不用改动文字内容。如17B-B08.
大家有好的思路,或程序吗?

llsheng_73 发表于 2014-4-19 17:26:03

本来是个很简单的事,但看了样图都是多行文字,我只能表示无能为力,因为我做不到从MTEXT的内容里边把控制字符去掉得到真正需要的字串进行处理
下边我就把它们当成TEXT来说下大概思路吧:
得到所有文字图元,初始化一个空表txts()进行循环处理,取出文本内容(多行文本有可能文本内容一样但控制字符不一样,所以这地方比较头痛)
如果(assoc txt txts) (setq txts(subst(list txt (1+(last(assoc txt txts))))(assoc txt txts) txts)实现该文本内容加1,同时修改这个文字的内容(加上它的后续编号),反之(setq txts(append(txts(list(list txt 1))))),同时把文本内容加上后续编号1

当然,为了效果,可以先把所有文字按一定规则对根据坐标进行排序,那样编号不会显得杂乱无章
但最关键的是怎么让控制字符不同(也就是格式不同)的相同文本能被准确识别

vlisp2012 发表于 2014-4-19 20:09:21

多谢大家了,有思路了.

chenbh2 发表于 2014-12-22 23:31:10

vlisp2012 发表于 2014-4-19 20:09 static/image/common/back.gif
多谢大家了,有思路了.

楼主您好!
程序搞出来了不!
我也需要单行相同的文字依次加上递增的后缀

chenbh2 发表于 2014-12-22 23:32:14

vlisp2012 发表于 2014-4-19 20:09 static/image/common/back.gif
多谢大家了,有思路了.

楼主您好!
程序搞出来了不!
我也需要单行相同的文字依次加上递增的后缀

vlisp2012 发表于 2014-12-23 10:04:49

;;;图中大量编号,现在需要把这些是相同的编号(单行文字)建立成一个组,希望一次性框选可以完成,单个编号也建组。
;;;
;;;比如:
;;;C1 编号的建一个组
;;;C2 编号的建一个组
;;;C3 编号的建一个组

(defun c:bzz ()
(setvar "cmdecho" 0)
(vl-cmdf "undo" "be")
(prompt "\n多行文字需要炸开,变成单行文字")
(prompt "\n选择文字:")
(setq        ss (ssget
                  '((-4 . "<and") (0 . "text")(-4 . "and>"))
           )
)
(or ss (setq ss (ssadd)))
(setq        n 0
        wz-lst nil
)
(while (< n (sslength ss))
    (setq en   (ssname ss n)
          data (entget en)
    )
    (setq txt (cdr (assoc 1 data)))
    (if        (null (member txt wz-lst))
      (setq wz-lst (cons txt wz-lst))
    )
    (setq n (1+ n))
)
(setq n 0)
(while (< n (length wz-lst))
    (vl-cmdf "select" ss "")
    (setq txt (nth n wz-lst)
          xx(ssget "p" (list (cons 0 "text") (cons 1 txt)))
    )
(if (> (sslength xx) 1)
(progn
(setq j 0)
(while (< j (sslength xx))
    (setq enxx   (ssname xx j)
          dataxx (entget enxx)
    )
(setq ntxt (strcat txt "-" (itoa (+ j 1))))

;;;(setq txt (cdr (assoc 1 dataxx)))
(setq dataxx (subst (cons 1 ntxt) (assoc 1 dataxx) dataxx ))

(entmod dataxx)
    (setq j (1+ j))
)))

    (setq n (1+ n))
)
(vl-cmdf "undo" "e")
(setvar "cmdecho" 1)
(princ)
)

vlisp2012 发表于 2014-12-23 10:05:50

是我的一个朋友,帮我编辑的这个程序。

chenbh2 发表于 2015-2-21 08:43:00

vlisp2012 发表于 2014-12-23 10:04 static/image/common/back.gif
;;;图中大量编号,现在需要把这些是相同的编号(单行文字)建立成一个组,希望一次性框选可以完成,单个编号 ...

感谢分享!2015年新年快乐!!
页: [1]
查看完整版本: 悬赏:相同的文字依次加上递增的后缀来区分