# 空间 Item 示例
::: details 目录
[[toc]]
:::

## 源代码

<GitCode fileUrl="/persagy-web-big/src/items/floor/SSpaceItem.ts" />

## 代码说明
    
### 数据说明
``` json5
Spaces:[
    {
        BoundarySegments: [[''],...],       // 轮廓线段
        Location: {X:0,Y:0,Z:0},            // 位置
        ModelId: '',                        // 模型id
        Name: '',                           // 名称
        OutLine: [
            [{X:0,Y:0,Z:0},...],            // 外轮廓 
            ...                             // 内轮廓
        ],                                  // 轮廓线
        SourceId: '',                       // 对应Revit模型id
        Tag: '',                            // 补充信息
        Height: 200,                        // 高度
    },
    ...
]
```
::: tip 注
1、空间会挖洞,所以<font color=red> outline </font>是二维数组 <br/>
2、<font color=red> outline </font>中第一项是外轮廓,从第二项开始均为内轮廓,内轮廓即为挖洞 <br/>
3、外轮廓数据顺时针排序,内轮廓为逆时针排序 <br/>
4、轮廓数据单位均为毫米
:::

### 计算边界矩阵
不能在绘制的时候计算,因为绘制是高频调用方法,尽量不要在绘制方法中做大量计算工作;<br/>
计算方法一般在数据变化的时候做,如果只是展示的话,则<font color=orange>只需要在构造函数中计算一次</font>;

### Y轴取反
<font color=orange>revit 使用的坐标系与 canvas 使用的坐标系 Y 轴是相反的</font>; revit 坐标使用的是数学坐标系, Y 轴方向是向上的, canvas 坐标使用的绘图坐标系, Y 轴方向是向下的;<br/>
数据是通过 revit 模型导出

## 绘制示例

<big-items-space />

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

空间默认传入样式
``` json5
Style: {
    Default: {
        Stroke: "#2b2b2b",
        Fill: "#f1fffd80",
        LineWidth: 1,
        Effect: {}
    },
    Selected: {
        Stroke: "#2b2b2b",
        Fill: "#1abc9c",
        LineWidth: 1,
        Effect: {}
    },
    Disabled: {
        Stroke: "#2b2b2b",
        Fill: "#afafaf",
        LineWidth: 1,
        Effect: {}
    },
    Highlight: {
        Stroke: "#2b2b2b",
        Fill: "#fbb029",
        LineWidth: 1,
        Effect: {}
    }
}
```

