逗亦斗霸 发表于 2025-1-15 11:42:27

请问entmake生成遮罩的14组码该如何确定?谢谢~

(entmake (list '(0 . "WIPEOUT") '(100 . "AcDbEntity") '(100 . "AcDbWipeout")
                  (cons 10 p0) (cons 11 p1)
                  (cons 12 p2) (cons 13 p3) '(280 . 1) '(71 . 2)))已知矩形的四个顶点,p0、p1、p2、p3,想以此生成遮罩,但不知道组码14该如何写,用"WIPEOUT"生成遮罩后查看DXF内码实体显示有5个顶点,搞不懂了,求大佬指点一下,谢谢啦~

edata 发表于 2025-1-15 13:06:09

10是插入点,
11是宽度
12是高度
13图像大小
71是边界类型,多边形是2,
91是边界定点数,
14是边界的ocs值,
你生成的5个14值表示是71多边形类型,5的点才能围合成一圈,

4-----------------3
|                  |
|                  |
1 and 5---------2   
(entmakex '( (0 . "WIPEOUT") (100 . "AcDbEntity") (100 . "AcDbWipeout") (90 . 0) (10 2329.24 746.834 0.0) (11 852.353 0.0 0.0) (12 0.0 852.353 0.0) (13 1.0 1.0 0.0)(70 . 7) (280 . 1) (281 . 50) (282 . 50) (283 . 0) (290 . 0)(71 . 2) (91 . 4) (14 -0.5 0.5 0.0) (14 0.5 0.5 0.0) (14 0.5 0.0324058 0.0)(14 -0.5 0.5 0.0)))   

edata 发表于 2025-1-15 13:17:31

如果是矩形就只需要2个对角点
(entmakex '( (0 . "WIPEOUT") (100 . "AcDbEntity") (100 . "AcDbWipeout") (90 . 0) (10 2329.24 746.834 0.0) (11 852.353 0.0 0.0) (12 0.0 500.353 0.0) (13 1.0 1.0 0.0)(70 . 7) (280 . 1) (281 . 50) (282 . 50) (283 . 0) (290 . 0)(71 . 1) (91 . 2) (14 -0.5 -0.5 0.0) (14 0.5 0.5 0.0) ))

llsheng_73 发表于 2025-1-15 13:18:15

本帖最后由 llsheng_73 于 2025-1-15 13:30 编辑


组码说明
100子类标记 (AcDbRasterImage)
90类版本
10插入点(在 WCS 中)
DXF:X值;APP:三维点
20, 30DXF:插入点的 Y 值和 Z 值(在 WCS 中)
11单像素的 U 矢量(沿图像可见底部的点,从插入点开始)(在WCS 中)
DXF:X值;APP:三维点
21, 31DXF:U 矢量的 Y 值和 Z 值(在 WCS 中)
12单像素的 V 矢量(沿图像可见左侧的点,从插入点开始)(在WCS 中)
DXF:X值;APP:三维点
22, 32DXF:V 矢量的 Y 值和 Z 值(在 WCS 中)
13以像素为单位的图像尺寸
DXF:U值;APP:二维点(U 值和 V 值)
23DXF:图像尺寸的 V 值(以像素为单位)
340imagedef 对象的硬参照
70图像显示特性:
1 = 显示图像
2 =当与屏幕不对齐时显示图像
4 =使用剪裁边界
8 =透明度打开
280剪裁状态:0 = 关;1 = 开
281亮度值(0-100;默认值 = 50)
282对比度值(0-100;默认值 = 50)
283褪色度值(0-100;默认值 = 0)
360imagedef_reactor 对象的硬参照
71剪裁边界类型。 1 = 矩形;2 = 多边形
91后面的裁剪边界顶点数
14裁剪边界顶点(在 OCS 中)
DXF:X值;APP:二维点(多个条目)
注意 1)对于矩形剪裁边界类型,必须指定两个对角。 默认值为 (-0.5,-0.5),(size.x-0.5, size.y-0.5)。 2)对于多边形剪裁边界类型,必须指定三个或更多顶点。 多边形顶点必须按顺序列出
24DXF:剪裁边界顶点的 Y 值(在 OCS 中)(多个条目)
(entmakex'((0 . "WIPEOUT")(100 . "AcDbEntity")(100 . "AcDbWipeout")(90 . 0)(10 -1 -1)(11 2 0)(12 0 2)(13 2 2)))
以(-1 -1)为左下角插入点画一个宽高均为2的WIPEOUT,无裁剪,其位置由10组决定,长度由11组决定,高度由
组决定,13组没发现用处。。。。280组决有无裁剪,如果有,相应的70、71组应该指定剪裁边界类型,如果用多边形作为剪裁边界,由91组指定其顶点数量,并且在14组列出顶点(相当于多段线用90组指定顶点数,后边由10组列出顶点)
也就是说,需要先在合适的位置画一个比剪裁边界更大的WIPEOUT,再通过14组指定的点对其进行裁剪,以此达到按指定的点画WIPEOUT的目的
(entmakex'((0 . "WIPEOUT")(100 . "AcDbEntity")(100 . "AcDbWipeout")(10 -1 -1)(11 2 0)(12 0 2)(70 . 7)(280 . 1)(71 . 2)(91 . 10)(14 -0.5 0.0)(14 -0.352381 -0.352381)(14 0.0 -0.5)(14 0.352381 -0.352381)(14 0.5 0.0)(14 0.352381 0.352381)(14 0.0 0.5)(14 -0.352381 0.352381)(14 -0.5 0.0)(14 -0.5 0.0)))

实际上,进行矩形裁剪好象没必要,可以直接通过矩形的左下角点及其宽高,分别用10,11,12组指定"左下角",宽度dx,高度dy
(entmakex(list'(0 . "WIPEOUT")'(100 . "AcDbEntity")'(100 . "AcDbWipeout")(cons 10(getpoint"左下角"))(list 11 dx 0)(list 12 0 dy)))

逗亦斗霸 发表于 2025-1-15 14:50:13

edata 发表于 2025-1-15 13:17
如果是矩形就只需要2个对角点

感谢回复!搞定啦~另外,仓库是多边形的意思吗?

逗亦斗霸 发表于 2025-1-15 14:52:54

llsheng_73 发表于 2025-1-15 13:18
(entmakex'((0 . "WIPEOUT")(100 . "AcDbEntity")(100 . "AcDbWipeout")(90 . 0)(10 -1 -1)(11 2 0)(12 0 2 ...

感谢回复!搞定啦~
页: [1]
查看完整版本: 请问entmake生成遮罩的14组码该如何确定?谢谢~