zone.md 2.8 KB

业务空间 Item 示例

::: details 目录 [[toc]] :::

源代码

代码说明

数据说明

此数据并非后台返回,需要将接口返回数据处理此格式

Zone: {
    RoomLocalName: 'string',            // 名称
    RoomID: 'string',                   // Id
    Color: 'string',                    // 默认颜色
    Height: 'number',                   // 高度-非必须
    HighLightFlag: 'boolean',           // 是否高亮-非必须
    Transparency: 'number',             // 默认状态透明度-非必须
    Infected: 'boolean',                // 是否受影响-非必须
    OutLine: [
        [
            [{X:0,Y:0,Z:0},...],        // 第一个空间的外轮廓
            ...                         // 第一个空间的内轮廓
        ],
        [
            [{X:0,Y:0,Z:0},...],        // 第二个空间的外轮廓
            ...                         // 第二个空间的内轮廓
        ],
        ...                             // ...
    ],                                  // 轮廓线
}

::: tip 注 1、业务空间由多个空间组成
2、每个空间可能挖洞,所以 outline 是三维数组
3、外轮廓数据顺时针排序,内轮廓为逆时针排序
4、轮廓数据单位均为毫米 :::

计算边界矩阵

不能在绘制的时候计算,因为绘制是高频调用方法,尽量不要在绘制方法中做大量计算工作;
计算方法一般在数据变化的时候做,如果只是展示的话,则只需要在构造函数中计算一次;

Y轴取反

业务空间轮廓线由空间轮廓线直接组成或者由空间轮廓线计算而来
revit 使用的坐标系与 canvas 使用的坐标系 Y 轴是相反的; revit 坐标使用的是数学坐标系, Y 轴方向是向上的, canvas 坐标使用的绘图坐标系, Y 轴方向是向下的;
数据是通过 revit 模型导出

绘制示例

::: details 查看代码 <<< @/docs/.vuepress/components/big/items/zone.vue :::

业务空间默认传入样式

Style: {
    Default: {
        Stroke: "#00000000",
        Fill: "#ffee2280",
        LineWidth: 1,
        Effect: {}
    },
    Selected: {
        Stroke: "#00000000",
        Fill: "#1abc9c",
        LineWidth: 1,
        Effect: {}
    },
    Highlight: {
        Stroke: "#00000000",
        Fill: data.Color || "#fbb029",
        LineWidth: 1,
        Effect: {}
    },
    Unselect: {
        Stroke: "#00000000",
        Fill: "#cecece",
        LineWidth: 1,
        Effect: {}
    },
    Infected: {
        Stroke: "#00000000",
        Fill: "#ff0000",
        LineWidth: 1,
        Effect: {}
    }
}