1.对象坐标系统(normal:Z轴量)
DXF 中的对象坐标系 (OCS) - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 (cadn.net.cn)
2.图元的标高(elevation)
ElevationPaperSpace Property (ActiveX) - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 (cadn.net.cn)
3.图元的厚度(thickness)
关于向二维对象添加三维厚度 - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 (cadn.net.cn)
关于从二维几何图形创建实体和曲面 - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 (cadn.net.cn)
值得注意的是,向二维对象添加三维厚度,使其具有三维外观,这些对象人仍然是二维对象
由下图可以看到,一个圆柱体截面显示的对象仍然是二维对象圆
4.通过图元的OCS坐标,Z轴(normal),标高(elevation),厚度(thickness)可以确定图元的三维外观世界坐标
下面是绘制的图元polyline
由Z轴法向量(normal)通过任意轴算法确定对象坐标系统,标高(elevation,沿着normal平移,相对于世界坐标系沿Z轴平移)确定Z轴的提升,厚度(thickness,厚度沿着normal拉伸)确定拉伸成为三维外观
任意轴算法参见:关于任意轴算法 (DXF) - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 (cadn.net.cn)
通过normal和elevation可以得到对象坐标到拉伸之前的图元世界坐标的转化矩阵如下图:
通过任意轴算法和矢量平移得到一个最终转化矩阵,在将矩阵平移thickness* normal即可得到拉伸后的图元位置和原位置组成的截面就是二维对象拉伸后形成的三维外观
5.注意事项:
(1)对于本身就是三维对象(比如直线,点),里面的normal是不起作用的,因为其坐标本身就是通过WCS表示的,所以不需要转化
(2)对于某些图元是不存在标高(elevation)或者厚度(thickness)的,不能一概而论
(3)图纸的读取对于标高只处理了polyline,polyline2d,hatch,对于厚度暂时未作处理