返回的第一个附加参数是类型的 4x4 转换矩阵。此矩阵称为模型到世界转换矩阵。它使应用程序能够将实体的定义数据(和扩展数据,如果存在)中的点从实体的模型坐标系 (MCS) 转换为世界坐标系 (WCS)。MCS 仅适用于嵌套实体。MCS 的原点是块的插入点,其方向是创建块时有效的 UCS 的方向。acedNEntSelP()ads_matrix 如果所选实体不是嵌套实体,则转换矩阵将设置为单位矩阵。变换由以下矩阵乘法表示: 变换点的各个坐标从方程中获得,其中 M 锰 是模型到世界变换矩阵坐标,是以 MCS 坐标表示的实体定义数据点,是用 WCS 坐标表示的结果实体定义数据点。请参阅转换矩阵。(X,Y,Z)(X',Y',Z') 注意:要变换向量而不是点,请不要添加平移向量[M
03
M
13
M
23
](来自转换矩阵的第四列)。
下面的示例代码定义了一个函数,该函数执行上述公式所述的转换。它采用由单个点返回的转换矩阵(可能来自嵌套实体的定义数据),并返回转换后的点。如果第三个参数 to,,设置为 0 (),则转换矩阵的最后一列(平移向量或位移)不会添加到结果中。这使函数能够平移向量和点。mcs2wcs()acedNEntSelP()mcs2wcs()is_ptFALSE void mcs2wcs(xform, entpt, is_pt, worldpt) ads_matrix xform; ads_point entpt, worldpt; int is_pt; { int i, j; worldpt[X] = worldpt[Y] = worldpt[Z] = 0.0; for (i=X; i<=Z; i++) for (j=X; j<=Z; j++) worldpt[i] += xform[i][j] * entpt[j]; if (is_pt) // If it's a point, add in the displacement for (i=X; i<=Z; i++) worldpt[i] += xform[i][T]; } 以下代码片段显示了如何结合使用,将点值转换为当前 WCS。mcs2wcs()acedNEntSelP() ads_name usrent, containent; ads_point usrpt, defpt, wcspt; ads_matrix matrix; struct resbuf *containers, *data, *rb, *prevrb; status = acedNEntSelP(NULL, usrent, usrpt, FALSE, matrix, &containers); if ((status != RTNORM) || (containers == NULL)) return BAD; data = acdbEntGet(usrent); // Extract a point (defpt) from the data obtained by calling // acdbEntGet() for the selected kind of entity. . . . mcs2wcs(matrix, defpt, TRUE, wcspt); 该函数还允许程序指定拾取点。参数确定是否以交互方式调用。acedNEntSelP()pickflagacedNEntSelP() 在下面的示例中,thecall 指定自己的选取实体点,并且不提示用户。参数是指示调用提供自己的点值(也是,theis)。acedNEntSelP()pickflagTRUEpromptNULL ads_point ownpoint; ownpoint[X] = 2.7; ownpoint[Y] = 1.5; ownpoint[Z] = 0.0; status = acedNEntSelP(NULL, usrent, ownpt, TRUE, matrix, &containers); 提供该功能是为了与现有的 ObjectARX 应用程序兼容。应使用编写新应用程序。acedNEntSel()acedNEntSelP() 调用 to 返回的模型到世界转换矩阵与返回的矩阵具有相同的用途,但它是一个 4x3 矩阵(作为四个点的数组传递),它使用点是行而不是列的约定。转换由以下矩阵乘法描述:acedNEntSel()acedNEntSelP() 推导新坐标的公式如下: 尽管矩阵格式不同,但公式等效于 thetype,并且适应使用所需的唯一更改是将矩阵参数声明为四个点的数组。ads_matrixmcs2wcs()acedNEntSel() void mcs2wcs(xform, entpt, is_pt, worldpt); ads_point xform[4]; // 4x3 version ads_point entpt, worldpt; int is_pt; 4x3 矩阵的恒等形式如下: 除了使用不同的矩阵约定外,不允许程序指定拾取点。acedNEntSel() |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:19
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.