# 门 Item 示例 ::: details 目录 [[toc]] ::: ## 源代码 ## 代码说明 ### 数据说明 ``` json5 Doors:[ { FaceDirection: {X:0,Y:0,Z:0}, // 面朝方向 HandDirection: {X:0,Y:0,Z:0}, // 把手方向 Location: {X:0,Y:0,Z:0}, // 位置 ModelId: '', // 模型id Name: '', // 名称 OutLine: [ [{X:0,Y:0,Z:0},...], // 外轮廓 ... // 内轮廓 ], // 轮廓线 Owner: '', // 拥有者的RevitId SourceId: '', // 对应Revit模型id Thick: 200, // 厚度 WallId: '', // 所属墙 Width: 200, // 宽度 }, ... ] ``` ::: tip 1、根据把手方向确定门的转轴
2、根据面朝方向确定门朝哪边开
3、 outline 仅有一项,且只有2个点
5、轮廓数据单位均为毫米 ::: ### 计算边界矩阵 不能在绘制的时候计算,因为绘制是高频调用方法,尽量不要在绘制方法中做大量计算工作;
计算方法一般在数据变化的时候做,如果只是展示的话,则只需要在构造函数中计算一次; ### 计算门开的方向及旋转方向 使用向量点乘 => ```x1 * x2 + y1 * y2```,计算得到,大于0同向,则旋转点使用第二个点;否则使用第一个
计算两点间距离,从而得到门的长度
利用``` arctan ```计算得到,门展开方向与水平方向夹角
使用向量叉乘 => ```x1 * y2 - x2 * y1```, 计算得到, 小于0代表门顺时针展开,同时确定了展开的弧线绘制起始和结束角度
### Y轴取反 revit 使用的坐标系与 canvas 使用的坐标系 Y 轴是相反的; revit 坐标使用的是数学坐标系, Y 轴方向是向上的, canvas 坐标使用的绘图坐标系, Y 轴方向是向下的;
数据是通过 revit 模型导出 ## 绘制示例 ::: details 查看代码 <<< @/docs/.vuepress/components/big/items/door.vue :::