片剂校准
使用数字化数位板的 AutoCAD 用户可以使用 TABLET 命令校准数位板。借助该功能,应用程序可以通过直接设置校准和保存校准设置以备将来使用来管理校准。该函数采用两个参数和 ,每个参数都是一个结果缓冲区列表。第一个列表中的第一个结果缓冲区是一个整数代码,该整数代码必须为 0 才能检索当前校准 (in ),或者 1 必须根据列表中的其余缓冲区设置校准。校准表示为四个 3D 点(除代码外)。其中的前三个点(row1、row2 和 row3)是平板电脑转换矩阵的三行。第四点是垂直于平板电脑表面平面的向量方向(以 WCS 表示)。acedTablet()listresultresult 注意:TABMODE 系统变量控制平板电脑模式是设置为开 (1) 还是关 (0)。您可以使用 来控制它。acedSetVar()
以下代码序列检索当前数位板校准,并将其保存在 中。在此示例中,用户已使用 TABLET 命令校准矩阵,并且 Tablet 模式处于开启状态。calibr2 struct resbuf *calibr1, *calibr2; struct resbuf varbuf, rb; // Retrieve the current calibration. calibr1 = acutBuildList(RTSHORT, 0, RTNONE); if (acedTablet(calibr1, &calibr2) != RTNORM) { acdbFail("Calibration not obtainable\n"); return BAD; } 在示例中,result 参数中返回的代码自动设置为 1。若要将校准重置为前面示例检索到的值,可以使用以下代码:calibr2 if (acedTablet(calibr2, &calibr1) != RTNORM) { acdbFail("Couldn't reset calibration\n"); return BAD; } rb.restype = RTSHORT; rb.resval.rint = 1; acedSetVar("TABMODE", &rb); acedGetVar("TABMODE" &varbuf); if (varbuf.resval.rint == 0) { acdbFail("Couldn't set TABMODE\n"); return BAD; } 在此示例中,现在包含校准结果。因为这大概与 (由 初始化)相同,所以不一定需要此结果。设置校准时,可以指定结果,这会导致“静默”设置校准。calibr1calibr2acedTablet()NULLacedTablet() if (acedTablet(calibr2, NULL) != RTNORM) { . . . } 作为 row1、row2 和 row3 传递的变换矩阵是一个 3x3 变换矩阵,用于变换 2D 点。2D 点表示为齐次坐标中的列向量(通过追加 1.0 作为第三个元素),因此变换如下所示: 点的计算类似于 3D 情况。AutoCAD 使用以下公式变换该点: 为了将生成的向量转换回二维点,将前两个分量除以第三个分量,即比例因子,得到点。 对于投影变换(最一般的情况),可以进行完整的计算。但是对于仿射和正交变换,并且都是 0,所以将是 1.0。省略了计算和除法;生成的 2D 点就是 。acedTablet() 仿射变换是射影变换的一种特殊的、均匀的情况。正交变换是仿射变换的特例:不仅 are 和 0,而且 和 。 注意:设置校准时,如果列表中的方向未归一化,则结果不等于 list 参数;AutoCAD 在返回方向矢量之前对其进行归一化。此外,它还确保第三列中的第三个元素 (row3[Z]) 等于 1。如果使用通过 从 AutoCAD 检索到的值来设置校准,则不会出现这种情况。但是,如果您的程序本身计算转换,则可能会发生这种情况。acedTablet()
父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 11:45
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.