Skip to content

Latest commit

 

History

History
163 lines (144 loc) · 3.89 KB

白板数据的存储结构.md

File metadata and controls

163 lines (144 loc) · 3.89 KB

白板数据的存储结构

一个白板有多个页面,所有的页面+一些其他信息可构成一个白板工程,可在软件内部保存为sbp格式的工程文件。sbp全称:SIT-board project。sbp文件本质上是以json格式存放的对象的序列化文件。

存储结构每个部分均可分为逻辑结构与物理存储结构,逻辑结构可能是某个对象,其对应的底层物理结构即为json序列化格式。

sbp文件的最顶层数据结构定义如下:

BoardPageSetViewModel {
  // 普通成员只读模式
  memberReadOnly: bool
  // 页面数
  pageIdList: array<int>
  // 页面字典,存储了所有页面信息
  pageMap: map<string, BoardPageViewModel>
  // 当前页面id
  currentPageId: int
}

BoardPageViewModel定义了某一页的数据

BoardPageViewModel {
  // 页面标题
  title: string
  // 页面id
  pageId: int
  // 白板数据
  board: BoardViewModel
}

BoardViewModel定义了白板上绘制的所有图形

BoardViewModel {
  // 视口变换矩阵, 为4x4矩阵
  viewerTransform: array<double>[16]
  // 模型id列表
  modelIdList: array<int>
  // 模型字典
  modelMap: map<int, Model>
}

Model定义了某一个白板上的图形元素

Model {
  // 模型id
  id: int
  // 模型类型,由插件决定
  type: string
  // 模型数据,由插件决定
  data: <SpecialModelData>
  // 模型公共属性
  common: CommonModelData
}

CommonModelData为图形元素的公共属性

CommonModelData {
  // 旋转角
  angle: double
  // 位置,分别为x,y坐标
  position: array<double>[2]
  // 大小,分别为width与height
  size: array<double>[2]
  // 层叠关系,越大越靠前
  index: int
  // 约束关系,由minWidth,maxWidth,minHeight,minWidth四个分量构成
  // 用于确定该模型能够拉伸的最大与最小尺寸
  constraints: array<double>[4]
  // 是否显示
  enable: bool
  // 是否可编辑
  editableState: bool
}

SpecialModelData类型是一个泛指类型,不同type的Model具有不同的data类型,其存放了图形元素自身的内部特有的属性。 SIT-board已实现插件化扩展,其类型中的内容由插件内部自行决定。

RectModelData为矩形插件的数据类型定义

RectModelData {
  // 背景颜色
  color: Color
  // 背景形状 0表示矩形,1表示圆形
  backgroundShape: int
  // 边框属性
  boarder: BorderModelData {
    // 边框颜色
    color: Color
    // 边框的宽度
    width: double
    // 边框的圆角半径
    radius: double
  }
  // 矩形内部的文本属性
  text: TextModelData {
    // 文字内容
    content: string
    // 文字颜色
    color: Color
    // 文字大小
    fontSize: double
    // 对齐方式
    // 水平对齐有三个方式分别为左对齐,居中对齐,右对齐
    // 分别对应数字-1,0,-1
    // 垂直对齐有三个方式分别为上对齐,居中对齐,右对齐
    // 分别对应数字-1,0,-1
    // 水平与垂直对齐对应的数字即为最终alignment的值
    alignment: array<int>[2]
    // 是否加粗
    bold: bool
    // 是否斜体
    italic: bool
    // 是否下划线
    underline: bool
  }
}

FreeStyleModelData为自由画板插件的数据类型定义

FreeStyleModelData {
  // 路径id列表
  pathIdList: array<int>
  // 路径字典
  pathMap: map<int, FreeStylePathModelData>
  // 路径颜色
  backgroundColor: Color
  // 当前画笔状态属性
  paint: Paint
}

Paint {
  // 画笔颜色
  color: Color
  // 画笔宽度
  stokeWidth: double
  // 抗锯齿
  isAntiAlias: bool
}
FreeStylePathModelData {
  // 路径id
  id: int
  // 路径点,分别对应x,y坐标
  points: array<array<double>[2]>
  // 路径画笔
  paint: Paint
}

同样还有其他插件的特有的数据结构,具体可参考代码 component/board/plugins 中的实现