找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1671|回复: 1

[求助] [求助]:如何用entmake()函数

[复制链接]
发表于 2005-3-24 23:46:46 | 显示全部楼层 |阅读模式

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

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

×
如何用entmake()函数建立新图层或块,和建立新直线,有何区别?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-26 09:10:11 | 显示全部楼层
在图形中创建一个新图元(图形对象)

(entmake [elist])

elist 参数必须是一个图元定义数据表,该表格式应与 entget 函数所返回表的格式相似,该参数必须包含所欲创建图元的全部必要数据。本函数可以创建图形和非图形图元。如果省略了任何一个必须的定义数据,该函数返回 nil 并拒绝创建该图元。如果省略了可选的定义数据(如图层),该函数使用缺省值。

如果 entmake 成功创建了新图元,则返回该图元的定义数据表;如果没有成功创建该图元,则返回 nil。

也可以用以下方法创建新图元:先调用 entget 函数获得一个图元的定义数据,修改后传给 entmake
函数。在创建新图元之前,entmake 函数先验证是否提供了合法的图层名、线型名和颜色代码。如果引入了一个新的图层名,该函数会自动创建一个新图层。如果所创建的图元类型要求提供块名、尺寸样式名、字体名和形名,该函数也会检查它们。

图元类型(如 CIRCLE 或 LINE)必须是 elist 参数所指的表中的第一项或第二项。如果是第二项,那么第一项必须是图元名。这正是 entget 函数所返回表的那种格式。在这种情况下,entmake 函数创建图元时会忽略图元名。如果 elist 参数中包含了图元句柄,该句柄也会被忽略。

下列代码创建一个以点 (4,4) 为圆心、以 1 为半径的红色圆,可选的图层和线型项被省略而采用缺省值。

(entmake

  '((0 . "CIRCLE")                图元类型
    (62 . 1)                        颜色
    (10 4.0 4.0 0.0)                圆心
    (40 . 1.0)                        半径
  )

)

注意  创建在冻结图层上的对象,在该图层被解冻之前不会被重新生成。

复杂图元

可以通过若干次调用 entmake 函数来创建一个复杂图元(块定义、多段线或包含有属性的一个块引用)。当 entmake 函数发现是创建一个复杂图元时,它会创建一个临时文件来收集定义数据。每次调用 entmake 函数时都会检查是否存在临时文件,如果存在,新数据将会增加到该文件中。当复杂图元的定义完成时(通过 entmake 函数增加一个合适的 SEQEND 或 ENDBLK 图元),会重新检查提供的数据并将复杂图元加入到图形中。完成块定义后(用 entmake 函数附加一个 ENDBLK 图元),该函数将返回块名而不是通常的图元定义数据表。

注意  不能用 entmake 函数创建视口对象。

如果其中某个图元的数据无效,则该函数会拒绝创建该图元和整个复杂图元。块定义不允许嵌套,也不允许引用它本身,但可以包含对其他块定义的引用。一个复杂图元的所有子图元要么全在模型空间,要么全在图纸空间,但不能两个空间中各有一部分。

只有插入图元才承认 66 组码,表示属性跟随。多段线的 66 组码被强制性地置为 1 以表示顶点跟随,其他图元该组码的缺省值为 0。紧随多段线图元后的只能是顶点图元。

在完成复杂图元定义之前,不会显示该图元的任何部分。可以通过不带参数调用 entmake 函数来取消复杂图元的创建,这将清除临时文件并返回 nil。

BLOCK 和ENDBLK 图元可用于创建新的块定义。新定义的块将被自动加入到符号表中以使得它能被别的对象引用。

应用程序可以用具有任意多个边的多面网格来表示多边形。然而, AutoCAD 的图元结构对一个给定的面图元所能指定的顶点数目作了一定限制,但可以通过将多边形划分为三角形楔块来表示更复杂的多边形。 AutoCAD 用四顶点面来表示三角形楔块,当然其中有两个顶点的值相同。它们的边应设为不可见状态以避免这种划分成为可见的。PFACE 命令可自动实现这种划分,但如果应用程序直接生成多面网格,它必须自己完成这个工作。

在这种划分的处理过程中,每个面的顶点数目是一个关键的参数。系统变量 PFACEVMAX 为应用程序提供了每个面图元的顶点数目。该变量是只读的,其值为 4。

警告  用 entmake 函数创建块定义时可能会覆盖已有块。该函数不检查块定义表中块名是否有冲突,所以在用它创建块之前,最好先调用 tblsearch 函数以确保新块的块名是不冲突的。然而按下节所述用 entmake 函数重定义无名块,却是非常有用的。

无名块

一个图形中的块定义表可以包含多个无名块。创建无名块通常是为了支持填充图案和关联尺寸标注。应用程序也可以调用 entmake 函数创建无名块来达到自己的目的,通常是包含用户不能直接访问的图元。

调用 entmake 函数时,尺寸图元的组码 2(块名部分)是可选的。如果在图元定义数据表中省略了块名,
AutoCAD 将创建一个新块;否则它用提供的块名创建尺寸。

无名块的块名(组码 2)是 *Unnn,其中 nnn 是 AutoCAD 生成的一个数。另外,无名块的块类型标志(组码 70)的低位被设为 1。当 entmake 函数创建一个块名以 * 开头并且其无名标志位(组码 70 的低位)为 1 的块时,entmake 函数视之为无名块并给它分配一个块名。块名字符串中 * 后的字符将被忽略。块被创建后, entmake 函数返回块名。如果是多次调用  entmake  函数来创建块,将在成功执行下列函数调用后返回块名。

(entmake "endblk")

无论何时打开图形,其中所有未被引用的无名块都将从块定义表中清除出去,而被引用(插入)的无名块则不会被清除。可以用 entmake 函数创建对无名块的引用(插入),但不能将无名块传入INSERT 命令中,还可以用 entmake 函数重新定义块。可以用 entmod 函数修改块中的图元(但不是块本身)。

注意  尽管被引用的无名块会被永久保存,但其块名的数字部分在不同的编辑会话期间可能不一样。应用程序不能依赖于无名块的块名保持不变。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 17:25 , Processed in 0.321526 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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