找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 727|回复: 9

[编程申请]:怎样获得当前打开图中的所有图层名、线形名称

[复制链接]
发表于 2004-4-4 12:37:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
怎样获得当前打开图中的所有图层名、线形名称,能保存为文本格式!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-4-4 13:03:21 | 显示全部楼层

Re: [编程申请]:怎样获得当前打开图中的所有图层名、线形名称

最初由 giswater 发布
[B]怎样获得当前打开图中的所有图层名、线形名称,能保存为文本格式!谢谢! [/B]


在符号表中查找下一项
(tblnext table-name [rewind])

重复使用 tblnext 时,它每次通常会返回指定表中的下一个条目。tblsearch 函数可以设置要检索的下一个条目。如果提供了可选参数 rewind 且其值不为 nil,那么函数就会回绕到该符号表的起始位置,从而获得它的第一个条目。

参数

table-name

字符串,指定符号表。有效的 table-name 值为 "LAYER"、"LTYPE"、"VIEW"、"STYLE"、"BLOCK"、"UCS"、"APPID"、
"DIMSTYLE" 和 "VPORT"。该参数不区分大小写。

rewind

如果指定该参数且其值不为 nil,则回绕符号表且检索其中的第一个条目。

返回值

如果找到了一个条目,函数就会以点对表的形式返回该条目的 DXF 类型码和值。如果符号表中没有条目了,函数返回 nil。本函数永远不会返回已被删除的条目。

样例

检索符号表中的第一个图层:

命令:(tblnext "layer" T)

((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "CONTINUOUS"))

返回值的含义如下:

  (0 . "LAYER")                符号类型
  (2 . "0")                        符号名
  (70 . 0)                        标志
  (62 . 7)                        颜色代码,如果图层是被关闭的,颜色代码为负值

  (6 . "CONTINUOUS")        线型名称

注意上述返回表中没有 -1 组。AutoCAD 会记住从每个符号表中最近一次所返回的条目,每次对某符号表调用 tblnext 函数时它会返回该表中的下一个条目。所以,每次开始扫描一个表时,应该确保提供了不为 nil 的第二个参数,这样才能回绕到数据库中该表的开头,从而获得该表中的第一个条目。
由块表中检查出的条目中包含了一个 -2 组,其组值是该块定义中的第一个图元的图元名(如果有的话)。因此,假定当前图形中有一个名为 BOX 的块,那么:

命令:(tblnext "block")

((0 . "BLOCK") (2 . "BOX") (70 . 0) (10 9.0 2.0 0.0) (-2 . <图元名: 1dca370>))

返回值的含义如下:

  (0 . "BLOCK")                符号类型
  (2 . "BOX")                符号名
  (70 . 0)                        标志
  (10 9.0 2.0 0.0)                原点坐标 X,Y,Z

  (-2 . <图元名: 1dca370>)        第一个图元

entget 和 entnext 函数可以接受 -2 组中的图元名,但其他的图元访问函数不接受该图元名。例如,不能用 ssadd 函数将其加入到一个选择集中。通过以 -2 组中的图元名为参数调用 entnext 函数,可以扫描组成块定义的各个图元。在块定义的最后一个图元之后,再调用 entnext 函数将返回 nil。
如果一个块定义中不包含图元,那么 tblnext 函数所返回的 -2 组的组值是该块的 endblk 图元的图元名。

注意 由于 vports 函数可以返回当前 VPORT 表信息,所以使用 vports 函数来检索 VPORT 信息可能比用 tblnext 函数更方便一些。

XDAPI 方法

xdrx_object_next

功    能:容器对象遍历器,依次得到容器的下一个位置的对象类型和实体名

调用格式:(xdrx_object_next)

返 回 值:对于函数xdrx_object_get设置的对象名,对于块,返回块定义的当前位置的类、实体名表。

          其他如:"命名对象根词典" "组词典" "多线词典" "布局词典" "打印样式词典"
          九套符号表:"块表" "层表" "尺寸样式表" "字型表" "线性表" "应用程序表" "UCS表" "视表" "视口表"

          返回表(名称 对象名)

说    明:该函数是个遍历函数,遍历由函数xdrx_object_get设置的对象,若对象是块定义,则依次

          返回块定义中的实体类别和实体名表。若对象是容器,返回容器内的对象名称和对象实体名。

例    子:
1. 遍历得到"命名对象词典"的所有子词典

Command: (xdrx_object_get "dict")
<图元名: 40075cd0>

Command: (while (setq e (xdrx_object_next))(setq a1 (cons e a1)))
(("dict" <图元名: 40075da8>) ("AcDbVariableDictionary" <图元名: 40075df0>)
("ACAD_WIPEOUT_VARS" <图元名: 40075da0>) ("ACAD_PLOTSTYLENAME" <图元名:
40075d58>) ("ACAD_PLOTSETTINGS" <图元名: 40075d70>) ("ACAD_MLINESTYLE" <图元名:
40075cc8>) ("ACAD_LAYOUT" <图元名: 40075d68>) ("ACAD_GROUP" <图元名: 40075cc0>))

2. 遍历得到所有层表记录

Command: (xdrx_object_get "layer")
<图元名: 40075c50>

Command: (while (setq e (xdrx_object_next))(setq a2 (cons e a2)))
(("Defpoints" <图元名: 40075f88>) ("PUB_DIM" <图元名: 40075f28>) ("DOTE"
<图元名: 40075e90>) ("图层5" <图元名: 40075dd8>) ("图层4" <图元名: 40075dd0>)
("图层3" <图元名: 40075dc8>) ("图层2" <图元名: 40075dc0>) ("图层1" <图元名:
40075db8>) ("0" <图元名: 40075c20>))

3. 遍历得到一个块定义内的所有实体名

Command: (xdrx_object_get "block" "a")
<图元名: 40075e10>

Command: (while (setq e (xdrx_object_next))(setq a3 (cons e a3)))
(("AcDbCircle" <图元名: 40075e50>) ("AcDbEllipse" <图元名: 40075e48>)
("AcDbWipeout" <图元名: 40075e40>))

3. 遍历得到一个块表中的所有记录

Command: (xdrx_object_get "block")
<图元名: 40075c08>

Command: (while (setq e (xdrx_object_next))(setq a4 (cons e a4)))
(("*D3" <图元名: 40075f90>) ("_dimx" <图元名: 40075f40>) ("a" <图元名:
40075e10>) ("AR3_INFO" <图元名: 40075cf0>) ("*PAPER_SPACE" <图元名: 40075c38>)
("*MODEL_SPACE" <图元名: 40075c10>))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-4 13:21:11 | 显示全部楼层
谢谢,我先试试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-5 04:53:55 | 显示全部楼层
列出所有图层名:
(defun listlayers ( / layst)
  (setq doc (vla-get-activedocument (vlax-get-Acad-Object)))
  (vlax-for lay (vla-get-layers doc)
    (setq layst (cons (vla-get-Name lay) layst))
  )
)
列出所有线型名:
(defun listlintypes ( / linst)
  (setq doc (vla-get-activedocument (vlax-get-Acad-Object)))
  (vlax-for lin (vla-get-linetypes doc)
    (setq linst (cons (vla-get-Name lin) linst))
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-6 11:22:09 | 显示全部楼层
最初由 lsjjm 发布
[B]列出所有图层名:
(defun listlayers ( / layst)
(setq doc (vla-get-activedocument (vlax-get-Acad-Object)))
(vlax-for lay (vla-get-layers doc)
(setq layst (cons (vla-get-Name lay) layst))
)
)
列出所有线型名:
(defun listlintypes ( / linst)
(setq doc (vla-get-activedocument (vlax-get-Acad-Object)))
(vlax-for lin (vla-get-linetypes doc)
(setq linst (cons (vla-get-Name lin) linst))
)
)  [/B]

不能用哎,不好意思,我对lisp一点都不懂,你是不是用了内部函数,能不能给个完整的程序,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-4-6 12:22:27 | 显示全部楼层
最初由 giswater 发布
[B][QUOTE]最初由 lsjjm 发布
[B]列出所有图层名:
(defun listlayers ( / layst)
(setq doc (vla-get-activedocument (vlax-get-Acad-Object)))
(vlax-for lay (vla-get-layers doc)
(setq layst (cons (vl... [/B]

把你期望的文本文件格式贴一个,文件写到什么地方?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-6 13:09:56 | 显示全部楼层
最初由 giswater 发布
[B][QUOTE]最初由 lsjjm 发布
[B]列出所有图层名:
(defun listlayers ( / layst)
(setq doc (vla-get-activedocument (vlax-get-Acad-Object)))
(vlax-for lay (vla-get-layers doc)
(setq layst (cons (vl... [/B]


普通文本就行,我是说该程序好象实现不了该功能,我在2002下,能不能把该程序写完整,l加载后直接输入命令就能实现就好了.lisp我一点不动,
真的不好意思哈!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-14 09:39:17 | 显示全部楼层
(defun c:test ( / layst)
  (setq doc (vla-get-activedocument (vlax-get-Acad-Object)))
  (vlax-for lay (vla-get-layers doc)
    (setq layst (cons (vla-get-Name lay) layst))
  )
  (setq fname "c:/mytxt.txt")
  (setq fn (open fname "w"))
  (write-line "LayerName" fn)
  (write-line "************" fn)
  (foreach i layst (write-line i fn))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-14 16:49:17 | 显示全部楼层
最初由 zkr5357108 发布
[B]对不起,我也不明白,我想花钱搞设计有愿易帮忙的请打2619587(抚顺) [/B]


是哪里不明白? LISP语句, 函数, 还是..., 你这样笼统地说不明白, 弄的我们也不"明白" 了, 如何回答你呀?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-14 20:22:35 | 显示全部楼层
谢谢大家,已经解决了!看来大家都比较热心!顶
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-21 13:31 , Processed in 0.207405 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表