明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3604|回复: 3

如何查看DXF参考?

[复制链接]
发表于 2003-2-12 11:23:00 | 显示全部楼层 |阅读模式
我想用ENTMAKE创建图元,可那些DXF格式的东西我则呢都找不到头绪,还有,ENTMAKE又该怎样使用,例如画一个多线段,有直线,有圆弧的...
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-2-12 12:31:00 | 显示全部楼层

簡單的圖元可以這樣...

指令: _circle 指定圓的中心點或 [三點(3P)/兩點(2P)/相切,相切,半徑(T)]: 10,10

指定圓的半徑或 [直徑(D)]: 50

指令: (entget (car (entsel)))

選取物件: ((-1 . <圖元名稱: 400b0850>) (0 . "CIRCLE") (330 . <圖元名稱:
400aecf8>) (5 . "297A") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbCircle") (10 10.0 10.0 0.0) (40 . 50.0) (210 0.0 0.0 1.0))


指令: _line 指定第一點: 0,0

指定下一點或 [復原(U)]: @10,10

指定下一點或 [復原(U)]:

指令: (entget (car (entsel)))

選取物件: ((-1 . <圖元名稱: 400b0858>) (0 . "LINE") (330 . <圖元名稱:
400aecf8>) (5 . "297B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbLine") (10 0.0 0.0 0.0) (11 10.0 10.0 0.0) (210 0.0 0.0 1.0))



(entmake '((0 . "CIRCLE")
           (100 . "AcDbEntity")
           (67 . 0)
           (410 . "Model")
           (8 . "0")
           (100 . "AcDbCircle")
           (10 10.0 10.0 0.0)
           (40 . 50.0)
           (210 0.0 0.0 1.0)
          )
)


(entmake '((0 . "LINE")
           (100 . "AcDbEntity")
           (67 . 0)
           (410 . "Model")
           (8 . "0")
           (100 . "AcDbLine")
           (10 0.0 0.0 0.0)
           (11 10.0 10.0 0.0)
           (210 0.0 0.0 1.0)
          )
)
 楼主| 发表于 2003-2-12 15:40:00 | 显示全部楼层

谢了,有点眉目,还想问一下PLOYLINE呢?

我查看PLINE画的实体中有(42 . XXX),但在参考中却没有找到这项的意思,似乎同选择画直线还是圆弧以及圆弧的角度有关,具体的联系我还没琢磨出来。
发表于 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 先接收复合像素的初始组件时,它会建立一个暂存盘,来收集定义数据及延伸数据(如果出现的话)。(请参阅 "延伸数据&#59598;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 群组不符,也会发生这种情形。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 05:27 , Processed in 0.172599 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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