CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 文档中心

关于符号表(AutoLISP)

2023-1-8 10:35| 发布者: admin| 查看: 1235| 评论: 0|来自: AutoCAD

摘要: 符号表用于将非图形信息存储在图形的数据库中。

符号表用于将非图形信息存储在图形的数据库中。

图形数据库中存在的符号表包括:

每个图形数据库中的符号表

符号表名称

描述

APPID公司

已注册的申请

块(命名和匿名)

DIMSTYLE风格

尺寸样式

LTYPE型

线型

风格

文本样式

UCS系统

命名用户坐标系 (UCS)

视图

命名视图

VPORT端口

命名视口

可以使用以下函数操作符号表条目:

  • tblobjname- 返回指定符号表条目的实体名称。
  • tblsearch- 在符号表中搜索符号名称。
  • tblnext- 返回符号表中的下一项。
  • entdel- 删除对象(实体)或恢复以前删除的对象。
  • entget- 检索对象(实体)的定义数据列表。
  • entmake- 在图形中创建一个新图元。
  • entmod- 修改对象(实体)的定义数据。
  • handent- 根据对象(实体)句柄返回对象(实体)名称。

符号表限制

以下规则适用于符号表:

  • 符号表条目的创建除了作为有效的记录表示形式外,还具有一些限制,并且名称冲突只能发生在 VPORT 表中。*无法创建 ACTIVE 条目。entmake
  • 不接受将符号表条目重命名为重复名称,但 VPORT 符号表除外。
  • 符号表条目不能使用 删除。entdel
  • 符号表和符号表条目的对象状态可以通过传递实体名称来访问。该函数可用于检索符号表条目的实体名称。entgettblobjname
  • 符号表本身不能使用 创建;但是,可以使用 创建符号表条目。entmakeentmake
  • 句柄组代码 (5, 105) 不能在 中更改,也不能在 中指定。entmodentmake
  • 不在 APPID 符号表中的符号表条目可以使用 修改其许多字段。修改符号表记录列表必须包含其实体名称,该实体名称可以从 and 函数获取,但不能从 and 函数获取。符号表条目的 70 组代码在 和 操作中被忽略。entmodentgettblsearchtblnextentmodentmake

访问符号表条目

该函数按顺序扫描符号表条目,并检索特定条目。符号表名称由字符串指定。这两个函数都返回包含 DXF 组代码的列表,这些代码类似于 返回的实体数据。tblnexttblsearchentget

第一次调用返回指定符号表中的第一个条目。指定同一表的后续调用将返回连续的条目,除非 (rewind) 的第二个参数为非零,在这种情况下,将再次返回第一个条目。tblnexttblnexttblnext

在下面的示例代码中,该函数检索当前图形中第一个块(如果有)的符号表条目,然后以列表格式显示该条目。GETBLOCK

(defun C:GETBLOCK (/ blk ct)
  (setq blk (tblnext "BLOCK" 1))      ; Gets the first BLOCK entry.
  (setq ct 0)                         ; Sets ct (a counter) to 0.
  (textpage)                          ; Switches to the text screen.
  (princ "\nResults from GETBLOCK: ")
  (repeat (length blk)                ; Repeats for the number of
                                      ; members in the list.
    (print (nth ct blk))              ; Prints a new line, then each
                                      ; list member.
    (setq ct (1+ ct))                 ; Increments the counter by 1.
  )
 (princ)                              ; Exits quietly.
)

从 BLOCK 表中检索到的条目包含一个 -2 组代码,该代码包含块定义中第一个实体的名称。如果块为空,则这是块的 Endblk 实体的名称,该实体在占用的块上永远不会看到。在具有名为 BOX 的单个块的图形中,对 的调用将显示以下内容。(名称值因会话而异。GETBLOCK

Results from GETBLOCK:
(0 . "BLOCK")
(2 . "BOX")
(70 . 0)
(10 9.0 2.0 0.0)
(-2 . <Entity name: 40000126>)

与 一样,第一个参数是命名符号表的字符串,但第二个参数是命名表中特定符号表条目的字符串。如果找到符号表条目,则返回其数据。此函数具有第三个参数 setnext,可用于协调 的操作。如果 setnext 为 nil,则调用对 没有影响,但如果 setnext 为 non-,则下一个调用返回 找到的符号表条目之后的符号表条目。tblnexttblsearchtblsearchtblnexttblsearchtblnextniltblnexttblsearch

在处理 VPORT 符号表时,setnext 选项非常有用,因为特定视口配置中的所有视口都具有相同的名称(例如 *ACTIVE)。如果在关闭 AutoCAD TILEMODE 系统变量时访问 VPORT 符号表,则在打开 TILEMODE 之前,任何更改都不会产生可见效果。不要将 VPORTS(由 VPORT 符号表描述)与纸张空间视口实体混淆。

以下处理 4VIEW 配置中的所有视口:

(setq v (tblsearch "VPORT" "4VIEW" T))         ; Finds first VPORT entry.
  (while (and v (= (cdr (assoc 2 v)) "4VIEW"))
  ..
                                               ; ... Processes entry ...
  .
  (setq v (tblnext "VPORT"))                   ; Gets next VPORT entry.
)

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2024-12-15 14:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部