my_autocad 发表于 2007-9-29 12:09:00

[求助]获取文件所有图层名,并把图层名写在对应的层上

<p>获取文件所有图层名,并把图层名写在对应的层上</p><p>CAD的扩展工具中合并图层,挺好用的,我合并图层时,都是在不要的层上新建一个图元,再使用合并图层命令,挺麻烦的,所以建议,把获取文件所有图层名,并把图层名写在对应的层上,一看层名,就知道这个图层需要不需要,应该合并不合并了,一目了然,请高手帮帮忙。</p>

yoyoho 发表于 2024-1-25 22:33:45

;;;排序和CAD显示的顺序一样!

(defun TABLE (S / D R)
(while (setq D (tblnext S (null D)))
    (setq R (cons (cdr (assoc 2 D)) R))
)
)
(defun C:TT (/ LST N PT)
(setq LST (acad_strlsort (TABLE "LAYER")))      ;;;CAD显示的顺序
(setq PT (getpoint "文字插入点: ")
      N 0
)
(foreach NAME LST
    (entmake (list '(0 . "TEXT") (cons 8 NAME) '(100 . "AcDbText") (cons 10
                                                                         (list
                                                                               (car PT)
                                                                               (-
                                                                                  (cadr PT) N
                                                                               )
                                                                         )
                                                                   ) '
                   (40 . 6) (cons 1 NAME)
             )
    )
    (setq N (+ N 10.0))
)
(princ)
)

alexmai 发表于 2019-3-8 17:36:04

flowerson 发表于 2008-6-7 16:53
程序很好。倒叙一下和显示的顺序一样!(defun TABLE (S / D R)&nbsp; (while (setq D (tblnext S (null D)) ...

可否修改一下,这些文字都自动跟随自己所在的图层?

ljpnb 发表于 2024-1-26 08:52:35

不错的,学习一下

龙龙仔 发表于 2007-9-29 16:48:00

(defun TABLE (S / D R)<br/>&nbsp; (while (setq D (tblnext S (null D)))<br/>&nbsp;&nbsp;&nbsp; (setq R (cons (cdr (assoc 2 D)) R))<br/>&nbsp; )<br/>)<br/>(defun C:TT (/ LST N PT)<br/>&nbsp; (setq LST (TABLE "LAYER"))<br/>&nbsp; (setq&nbsp;PT (getpoint "文字插入點: ")<br/>&nbsp;N&nbsp; 0<br/>&nbsp; )<br/>&nbsp; (foreach NAME&nbsp;LST<br/>&nbsp;&nbsp;&nbsp; (entmake (list<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(0 . "TEXT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons 8 NAME)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(100 . "AcDbText")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons 10 (list (car PT) (- (cadr PT) N)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(40 . 6)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons 1 NAME)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq N (+ N 10.0))<br/>&nbsp; )<br/>&nbsp; (princ)<br/>)

my_autocad 发表于 2007-9-30 13:08:00

<p>恩,程序相当好,现在配合CAD的扩展工具中的合并图层来,是相当顺手。</p><p>但生成的文字在世界坐标系中与用户坐标系中显示不同,但条件仍然满足。非常感谢</p>

flowerson 发表于 2008-6-7 16:53:00

<p>程序很好。倒叙一下和显示的顺序一样!</p><p>(defun TABLE (S / D R)<br/>&nbsp; (while (setq D (tblnext S (null D)))<br/>&nbsp;&nbsp;&nbsp; (setq R (cons (cdr (assoc 2 D)) R))<br/>&nbsp; )<br/>)<br/>(defun C:TT (/ LST N PT)<br/>&nbsp; (setq LST (reverse (TABLE "LAYER")))<br/>&nbsp; (setq PT (getpoint "文字插入點: ")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N 0<br/>&nbsp; )<br/>&nbsp; (foreach NAME LST<br/>&nbsp;&nbsp;&nbsp; (entmake (list '(0 . "TEXT") (cons 8 NAME) '(100 . "AcDbText") (cons 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (list<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (car PT)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cadr PT) N<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (40 . 6) (cons 1 NAME)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq N (+ N 10.0))<br/>&nbsp; )<br/>&nbsp; (princ)<br/>)<br/></p>

llc1968 发表于 2008-6-25 21:54:00

好用的很,下来研究研究,谢谢

xing979020 发表于 2012-1-13 13:33:22

没什么意义。不明白

669423907 发表于 2013-5-18 18:11:52

龙龙仔 发表于 2007-9-29 16:48 static/image/common/back.gif
(defun TABLE (S / D R)&nbsp; (while (setq D (tblnext S (null D)))&nbsp;&nbsp;&nbsp; (setq R (cons (c ...

请问Z版,方便改成用鼠标点取两点来确定字高吗?
有时候那字体都小得看不见了。非常感谢!

669423907 发表于 2013-5-19 20:39:15

用最笨的办法了.....
;列出所有图层名(龙龙仔 2007-9-29 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=63268)
(defun c:tcmm(/ LST N PT)
(command "undo" "be")
(defun TABLE (S / D R)
(while (setq D (tblnext S (null D)))
(setq R (cons (cdr (assoc 2 D)) R))))
(setq LST (reverse (TABLE "LAYER")))
(setq PT (getpoint "请指定文字插入點:") N 0)
(foreach NAME LST (entmake (list '(0 . "TEXT") (cons 8 NAME) '(100 . "AcDbText")
(cons 10 (list (car PT) (- (cadr PT) N))) ' (40 . 6) (cons 1 NAME)))
(setq N (+ N 10.0)))

(command "zoom" "O" (entlast) "")
(command "undo" "e")
(princ))

大师们方便给个更好的办法吗?

yaokui25 发表于 2013-5-19 22:27:09

669423907 发表于 2013-5-19 20:39 static/image/common/back.gif
用最笨的办法了.....
;列出所有图层名(龙龙仔 2007-9-29 http://bbs.mjtd.com/forum.php?mod=viewthread& ...

谢谢楼主代码,解决大问题了
嘿嘿~
不过为什么写出来的顺序跟现在的图层顺序不一致呢?
这点楼主有没有什么办法解决一下

lxy_2080 发表于 2016-7-25 13:37:40

不错,留个脚印!!
页: [1] 2
查看完整版本: [求助]获取文件所有图层名,并把图层名写在对应的层上