- 积分
- 15341
- 明经币
- 个
- 注册时间
- 2002-2-4
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2003-2-13 13:36:00
|
显示全部楼层
查原廠Visual lisp開發人員手冊第十章....物件處理
应用程序可藉由呼叫 entmake 函数,将像素加入图面数据库。如同 entmod 的情况一样,entmake 的自变量是一个串行,其格式类似于 entget 所传回的格式。此串行所描述的新像素会贴附到图面数据库(其成为该图面内的最后一个像素)。如果该像素是一个复合像素(旧式聚合线或图块),则它会等到其完成时才会贴附到该数据库。
下列程序代码片段会在 MYLAYER 图层上建立一个圆周:
(entmake '((0 . "CIRCLE") ; 对象类型
(8 . "MYLAYER") ; 图层
(10 5.0 7.0 0.0) ; 中心点
(40 . 1.0) ; 半径
) )
下列 entmake 限制适用于所有像素:
串行中的第一个或第二个成员必须指定像素类型。该类型必须是一个有效的 DXF 群组码。如果第一个成员没有指定类型,则它只能指定像素的名称: 群组 ?(此名称不会储存在数据库内)。
AutoCAD 必须能辨识像素串行所参照的所有对象。唯一例外: entmake 接受新的图层名称。
传给 entmake 的任何内部字段都会被忽略。
entmake 无法建立视端口像素。
如果是在 AutoCAD 第 13 版及稍后的版次中所推出的像素类型,则在建立像素时,您必须也指定子类别标记(DXF 群组码 100)。所有的 AutoCAD 像素都有 AcDbEntity 子类别标记,此标记必须明确地并入 entmake 串行。此外,识别特定子像素类型需要一或多个子类别标记。这些项目必须遵循群组码 0,且必须在特别用来定义 entmake 串行内之像素性质的群组码之前。例如,以下是 entmake 一个 MTEXT 像素所需的最少程序代码:
(entmake '(
(0 . "MTEXT")
(100 . "AcDbEntity") ; 所有 R12 后之像素所需。
(8 . "ALAYER")
(100 . "AcDbMText") ; 以 MTEXT 识别像素。
(10 4.0 4.0 0.0)
(1 . "Some\\Ptext")
)
)
下表识别不需要在传给entmake 的串行内有子像素标记项的像素:
AutoCAD 第 13 版之前已采用像素的 DXF 名称
3DFACE ARC
ATTDEF ATTRIB
CIRCLE DIMENSION
INSERT LINE
POINT POLYLINE(旧式)
SEQEND SHAPE
SOLID TEXT
TRACE VERTEX
VIEWPORT
entmake 函数会确认是否提供了有效的图层名称、线型名称及颜色。如果出现新的图层名称,entmake 即自动建立新的图层。如果像素类型有需要的话,entmake 函数也会检查图块名称、标注型式名称、字型名称以及造型名称。如果它无法建立有效的像素,则此函数失败。在冻结图层上建立的对象要等到该图层解冻时才会重生。
若要建立复合像素(旧式聚合线或图块),您必须对每一个子像素使用个别的呼叫,进行 entmake 的多重呼叫。当 entmake 先接收复合像素的初始组件时,它会建立一个暂存盘,来收集定义数据及延伸数据(如果出现的话)。(请参阅 "延伸数据data。")在每一个后续的 entmake 呼叫中,此函数会检查暂存盘是否存在。如果存在,新的子像素会贴附到该档案。当完成复合像素的定义时(亦即,当entmake 收到适当的 seqend 或 endblk 子像素时),会检查像素的一致性;如果有效,便会加入图面中。当完成复合像素或取消其建立作业时,即删除该档案。
在完成复合像素的定义之前,您的图面上将不会显示其任何部分。在最后的seqend 或 endblk 子像素传给 2 entmake 之前,像素都不会显示在图面数据库中。如果未完成复合像素,则 entlast 函数无法取出最近建立的子像素。您可以藉由输入没有自变量的 entmake 来取消复合像素的建立作业。此动作会清除暂存档并传回 nil。
如同前一个节段所指出,entmake 一次只能建构一个复合像素。如果正在建立复合像素,而entmake 收到无效的数据或不是适当子像素的像素,则该无效像素以及整个复合像素都会被拒绝。您可以藉由输入没有自变量的 entmake,明确地取消复合像素的建立作业。
下例包含五个 entmake 函数,其建立一个复合像素,即旧式聚合线。此聚合线的线型为 DASHED,颜色为 BLUE。它的三个顶点分别位于 (1,1,0)、(4,6,0) 及 (3,2,0) 等坐标。所有其余的选用性定义数据都假设使用默认值。(必须已加载线型 DASHED,本范例才能正确运作。)
(entmake '((0 . "OLYLINE") ; 对象类型
(62 . 5) ; 颜色
(6 . "dashed") ; 线型
(66 . 1) ; 随后为顶点
) )
(entmake '((0 . "VERTEX") ; 对象类型
(10 1.0 1.0 0.0) ; 起点
(40 0.5) ;线宽
) )
(entmake '((0 . "VERTEX") ; 对象类型
(10 4.0 6.0 0.0) ; 第二点
(42 . -0.290694) ;凸度
) )
(entmake '((0 . "VERTEX") ; 对象类型
(10 3.0 2.0 0.0) ; 第三点
) )
(entmake '((0 . "SEQEND"))) ; 序列结束
如前例中所示,在定义点对时,点的两边都必须有一个空格。否则,将会出现一个无效点对错误讯息。
图块定义是以一个图块开头,并以一个 endblk 子像素结束。新建立的图块会自动输入其可被参照的符号表中。图块定义不可为巢状式,也不可自我参照。图块定义可包含对其它图块定义的参照。
注意 在使用 entmake 建立图块之前,您应使用 tblsearch 确定新图块的名称是唯一的。entmake 函数不会检查图块定义内的名称冲突,因此它有可能重新定义既有的图块。关于使用 tblsearch 的信息,请参阅 "符号表与字典存取"。
图块参考可包含 attributes-follow 旗号(群组 66)。如果出现此旗号且其等于 1,插入对象之后应有一系列的属性 (attrib) 像素。属性序列是由 seqend 子像素所终止。
旧式聚合线像素一律包含 vertices-follow 旗号(同样是群组 66)。此旗号的值必须是 1,且旗号后面必须是一序列的顶点像素,而以 seqend 子像素终止。
应用程序可以用多边面网面内任意大量的边来表示多边形。不过,AutoCAD 像素结构规定了给定的面像素可指定之顶点数的限制。您可以将更复杂的多边形均分到三角楔形体加以呈现。AutoCAD 以四个顶点的面来表示三角楔形体,其中两个相邻顶点的值相同。必须使其边缘看不到,防止被绘制此细部的可见外物。PFACE 指令会自动执行此细部作业,但是当应用程序直接产生多边面网面时,应用程序必须自行执行这项作业。
每面顶点数是此细部处理的主要参数。PFACEVMAX 系统变量对应用程序提供每面像素的顶点数。此值为只读,并设为 4。
复合像素可存在模型空间或图纸空间,但不能同时存在这两者。如果您已在建构复合像素时,藉由启动 MSPACE 或 PSPACE(使用 command)变更了目前的空间,后续的 entmake
呼叫会取消此复合像素。如果子像素的 67 群组值与像素标题的 67 群组不符,也会发生这种情形。 |
|