CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 文档中心

关于符号表(AutoLISP)

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

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

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

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

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

符号表名称

描述

阿皮德

已注册的应用程序

块(命名和匿名)

暗淡风格

标注样式

LTYPE

线型

风格

文本样式

UCS

指定用户坐标系 (UCS)

视图

命名视图

VPORT

命名视口

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

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

符号表限制

以下规则适用于符号表:

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

访问符号表条目

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

第一次调用返回指定符号表中的第一个条目。指定同一表的后续调用将返回连续条目,除非第二个参数 to(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>)

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

setnext选项在处理 VPORT 符号表时很有用,因为特定视口配置中的所有视口都具有相同的名称(例如 *ACTIVE)。如果在关闭 AutoCAD TILEMODE 系统变量时访问 VPORT 符号表,则在打开“平铺模式”之前,任何更改都不会产生可见效果。不要将 VPORT 符号表描述的 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 )

GMT+8, 2024-5-19 12:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部