工具栏控件
在场景中为了方便使用各种特定的功能,我们提供了一个工具栏控件 ToolbarWidget
来存放。
工具栏控件里不仅可以存放内置插件,还可以额外添加一些自定义功能项。
1. 数据结构
1.1 ToolbarWidget
的参数
export interface IToolbarInitProps {
// 工具项
tools: ITool[];
// 样式
style: StyleSheet;
// 类型:竖排 'vertical', 横排 'horizontal',默认普通 'common'
type?: string;
// 面板方向 工具相对于toolbar的摆放位置:上 top,下 bottom (当type为horizontal设置有效)。左 left,右 right (当type为vertical设置有效)
placement?: string;
// 是否使工具项互斥显示 'mutex'互斥 默认'mix'混合
mode?: string;
// 是否适配工具高度符合竖排高度 (当type为vertical设置有效)
isHeightAlignment?: boolean;
// DOM 可赋值ID
container: string | HTMLElement;
// 点击事件
onClick?: (event: EventDetail) => void;
}
1.2 工具项
export interface ITool {
id: string;
// 名称 根据名称确定所放置的插件
name: string;
// 图标
icon?: string;
// 图标大小
size?: string;
// 点击此图标范围所触发的事件
onClick?: (index: number | string) => void;
// 初始化事件
onInit?: (props: object | undefined) => void;
// 所需传入的参数
props?: {
[key: string]: any;
};
// 简介 指向图标所弹出的提示
label: string;
// 是否是自定义widget--CustomWidget
isCustom?: boolean
// 是否选中 默认false
selectable?: boolean
}
2. 内置插件
以下列举了可以在工具栏中直接使用的内置插件,如有需要了解详细,可点击查看插件目录。
- viewPoint:视点书签
- visibility:视口过滤
- slice:剖切分析
- sceneSetting:场景预设
- route:路径分析
- roam:视角漫游
- renderMode:显示模式
- note:场景批注
- measure:场景测量
- mapFilter:颜色过滤
- lineOfSight:通视分析
- environment:环境设置
- draw:绘制
- dimension:场景标注
- buffer:缓冲分析
- propertyView:特性
3. 控件使用
由上述数据结构可了解,自定义工具栏控件 ToolbarWidget
与工具项是紧密联系的,工具项由内置插件 plugin
和自定义功能项两种类别组成,具体使用如下:
3.1 场景初始化时添加
代码示例如下:
new ubm.Scene('app', {
viewingMode: 'local',
ui:{
// 自定义工具栏
toolbar:{
// 类型
type: 'vertical',
// 工具相对于toolbar的摆放位置
placement: 'top',
// 是否适配插件高度符合竖排高度 (当type为vertical设置有效)
isHeightAlignment: false,
// 互斥显示
mode: 'mutex',
// DOM
container: 'container',
// 工具组
tools: [
// 组0-简写:属于内置插件写法,只写插件名称
['measure', // 测量插件
'viewPoint'], // 视点书签
// 组1-常规写:属于内置插件写法,标明插件及其属性
[{
name: 'tree',
label: '构件树',
// 插件属性
props: {
openContextMenu: false,
openProperty: true,
visible: false,
expandType: 'icon',
expandAll: false,
keys: {
primary_key: 'guid',
value: 'guid'
}
}
}],
// 组2-custom:属于自定义功能项,可自定义工具栏的某项工具的功能作用
[{
name: 'custom',
icon: 'map-contents',
label: '自定义工具栏按钮',
onClick: () => {
alert('你点击了自定义工具栏按钮')
}
}],
]
}
}
})
以上tools由三种不同的group组成,group不仅代表它们的分类,也表明了在工具栏中的位置,group默认是从0开始的。
理解了group也方便后续自定义功能项的添加。
3.2 场景初始化之后添加
使用CustomTool
添加自定义的功能项,并可动态修改其属性,代码示例如下:
let i
// 属于自定义功能项
const tool = new ubm.CustomTool({
name: '111',
// 场景
scene: scene,
label: '111',
icon: 'web',
onInit: () => {
i = 222
},
onClick: () => {
// 获取声明的功能tool,修改其属性icon
tool.icon = 'x-bar'
setTimeout(() => {
tool.selectable = false
}, 1000);
console.log('iii', i);
},
})
// 添加到工具栏,可指定组别group
scene.ui.toolbar.add(tool, 2)