bimwin-api
Version:
BIMWIN核心库, 使用typescript开发, 非LOD版本
324 lines (225 loc) • 6.68 kB
Markdown
<h1 align="center">BIMWIN Core</h1>
BIMWIN 核心库, 使用 typescript 开发, 非 LOD 版本
[查看更新日志](./CHANGELOG.md)
[toc]
# 安装
```
npm i bimwin-api
```
# 开始
初始化
```js
import { Platform } from "bimwin-api";
let fileId = "48c6514d7a8245839b6dd0dc8cb89d23";
let host = "http://172.18.1.72:9983/";
let options = {
// 全局配置项
el: "app", // 挂载点
url: host, // 主机地址
secret: {
token: "0e8d286ecfa84f01a97c7733b8aeb4a2dt3xrlvrghl",
loginMark: "6Iqx6Ze05LiA5aO26YWS77yM54us6YWM5peg55u45Lqy",
},
};
let platform = new Platform(options);
platform.Service.GetFileBimType(fileId, (type) => {
options.type = type;
platform.Init();
platform.Model.LoadModel(
fileId,
() => console.log("loaded"),
() => console.log("loading"),
() => console.log("loading ", performance.memory.usedJSHeapSize)
);
});
```
得到核心引用`platform`以下示例代码中的顶级引用均指代于此.
对于`bimwin`而言会导出以下对象, 其中`platform`为核心对象. `THREE`为`threejs`核心对象
```js
export { Platform, Element, Model, Label, Service, Util, THREE };
```
如果是通过浏览器`script标签`引入的话, 库的唯一标识为`bw`, 通过`window.bw`或者`bw`可以调用
# 状态设置
以下 API 均是设置一种状态全局存在的
## 线框显示/隐藏
```js
platform.bimwin.setLineIsHide(((value: boolean) = true));
```
## 鼠标悬停显示轮廓
```js
platform.bimwin.outlineNode.SetEnable(((value: boolean) = false));
```
## 场景亮度调节
```js
// value 范围 [0, 1.0] 0为全黑,0.5为正常,1.0为全亮
platform.bimwin.SetIntensity(value: number)
```
## 鼠标 WASDQE 速度微调
即使没有进入漫游模式也可以使用 WASDQE 微调角度
```js
// value 推荐范围在[1, 16] 可以设置任意值可以突破16
platform.bimwin.setSpeed(value: number)
```
## 平行光投影
投放平行光使模型产生阴影, 可以提高真实度, 但会降低性能
```js
platform.bimwin.StartUsingShadow(value: boolean)
```
## 设置背景
首先存在三种背景色的设置, 分别是
- 1.天空盒背景, 需要六张图片作为背景
- 2.webgl 的场景色
- 3.html canvas 的背景色
### 使用天空盒作为背景
```js
// urls 使用前后上下左右的顺序依次写入图片地址
platform.bimwin.setDefaultSkyBox(urls: string[])
```
### 更改 webglrenderer 的场景色
```js
// color支持html hex字符串和纯数字
platform.bimwin.setSceneBackgroundColor(color: number|string)
```
### 更改 canvas 背景色
```js
platform.bimwin.canvas.style.backgroundColor = "red";
```
### 点选模式设置
可以设置[禁用,单选,多选], 但是可能会被其他业务覆盖, 比如测量时会将点选模式强制设置为单选.
```js
platform.bimwin.setSelectMode(str: 'nochoice'|'singlechoice'|'multiplechoice')
```
# 构件
## 获取构件数据
通过监听属性加载完毕事件(`OnPropertyLoaded`), 返回的`props`参数存在以下值
```
{
FileId: '',
OriginIds: {},
Props: {}, // 属性
Tree: {} // 目录树结构
}
```
```js
platform.BwEvent.OnPropertyLoaded.add((props) => {
// 通过props.Tree获取目录树结构
});
```
## 聚焦构件
```js
/**
* 聚焦构件
* @param ids 构件集合
* @param isHighlight 是否高亮
* @param ratio 放大率[0.0 - 1.0],0.5标准
*/
platform.Element.FitElements(ids: string[], isHighlight: boolean, ratio: number = 0.5)
```
## 隐藏/显示构件
主要的方法如下:
```js
// state 状态值 [隐藏:-1] [高亮:0] [材质:1] [半透明:2] [着色:3]
platform.bimwin.setNodesState(ids: string[], state: number)
```
隐藏/显示所有构件有如下方法:
```js
platform.bimwin.setAllNodesState(state: number)
```
所以实现显示单个构件隐藏其他构件可以这么做:
```js
platform.bimwin.setAllNodesState(-1);
platform.bimwin.setNodesState(["这是构件id"], 1);
```
## 构件上色
通用上色方法
```js
platform.bimwin.SetNodesColorAndOpacity(ids: string[], color: string | number, opacity = 1.0, closeDepthTest = false)
```
`closeDepthTest`如果`true`即使构件被遮挡也能看到构件。
闪烁构件方法
```js
platform.bimwin.SetNodesBlink(ids: string[] | string, color: number | string, speed = 0.005, enable = true)
```
通过调节`speed`来更改闪烁的幅度
## 重置构件
任何时候都可以通过`setNodesState(['构件id'], 1)`来回到初始普通构件的模样
# 测量
测量存在以下类型, 后面的 API 接口中的`measurementType`均是指代于此
```js
export enum measurementType {
'DISTANCE' = 'distance', // 距离
'ANGLE' = 'Angle', // 角度
'ELEVATION' = 'elevation', // 标高
'VOLUME' = 'volume', // 体积
'TheMeasureOfArea' = 'TheMeasureOfArea' // 面积
}
```
测量之前需要设置此次测量的类型, 如下
```js
platform.bimwin.plugins.measureTool.changeType(type: measurementType)
```
## 开启测量
```js
platform.bimwin.startMeasure((cb, additional) => {
// cb返回测量后的结果 additional 为测量的附加结果
console.log(cb, additional);
});
```
## 终止测量
一般来说测量开启时鼠标会进入捕获状态, 使用此方法可以在任何情况下终止测量动作
```js
platform.bimwin.stopMeasure();
```
# 剖切
## 包围盒剖切
开启只需要如下
```js
platform.bimwin.showSectionBox(cb: Function)
```
可以提供一个回调函数给`cb`, `cb`会返回以下参数
```js
export interface SectionData {
position: THREE.Vector3;
size: THREE.Vector3;
rotation: number;
}
```
主动调整`xyz`方向的数值
```js
// value [number, number]
platform.bimwin.plugins.sectionBox.bilateralAdjustSectionX(value[0], value[1]);
platform.bimwin.plugins.sectionBox.bilateralAdjustSectionX(value[0], value[1]);
platform.bimwin.plugins.sectionBox.bilateralAdjustSectionX(value[0], value[1]);
```
显示/隐藏剖切盒
```js
platform.bimwin.plugins.sectionBox.showOrHiddenSectionBox(visible: boolean)
```
摧毁剖切盒
```js
// keepSectionPlanes 是否保留剖切结果
platform.bimwin.plugins.sectionBox.close(
((keepSectionPlanes: boolean) = false)
);
```
## 轴向剖切
开启很简单
```js
platform.bimwin.plugins.sectionBox.showAxialSectionBox();
```
显示/隐藏剖切盒
```js
platform.bimwin.plugins.sectionBox.showOrHiddenAxialBox(visible: boolean)
```
摧毁剖切盒
```js
platform.bimwin.plugins.sectionBox.closeAxialBox();
```
更改轴向
```js
platform.bimwin.plugins.sectionBox.changeAxialDir(dir: 'x'|'y'|'z')
```
更改模式
```js
platform.bimwin.plugins.sectionBox.setControlModel(str: 'rotate'|'translate')
```