上期给大家重点讲解了运维场景中比较高频的“批注” 功能,那这次就重点和大家说说运维场景中比较高频且好用的功能——二三维标签。

BIMFACE 目前支持 RVT、SKP、IFC、IGMS、DWG 和集成模型,共提供了二维标签、三维标签、聚合标签 3 种工具。

  • 二维标签:可应用于图纸 / 模型场景中,标签是浮于视图之上,不会被构件或图元遮挡。
  • 三维标签:可用于模型场景中,标签和构件存在三维遮挡关系。
  • 聚合标签:适用于标签过多导致体验差的场景,它可以将二维或者三维标签按照不同的层级进行缩放展示,大大提升了模型的美观度及加载性能。

其中二维标签又分为 3 类,包括自定义标签、引线标签和小地图标签。

  1. 自定义标签:可在标签中添加文字、图片、调整样式,也可添加 DOM 元素以进行更多的功能拓展。
  2. 引线标签:样式较为固定的标签类型,需要与构件进行关联,并且对单次出现的完整标签数量有限制。
  3. 小地图标签:在小地图上显示的标签,可配置需要显示的楼层。

接下来,我将分别介绍三种不同类型标签的实现方式。

一、二维标签 - 自定义标签

二维标签的三种类型添加逻辑是类似的,其中自定义标签应用更加灵活,本次我就挑选自定义标签来作为演示案例吧~

step 1. 创建自定义标签容器

BIMFACE 中的实现逻辑是将所有的二维标签实例存放在一个二维标签的容器内,这里我们先来创建标签容器 DrawableContainer:

  1. // ************************自定义标签***********************
  2. var DrawableContainer= null;
  3. function createDrawableContainer() {
  4. if (!cunstomItemContainer) {
  5. // 构造自定义标签容器配置drawableConfig
  6. var drawableConfig = new Glodon.Bimface.Plugins.Drawable.DrawableContainerConfig();
  7. // 设置markerContainerConfig匹配的viewer对象
  8. drawableConfig.viewer = viewer2D;
  9. // 构造三维标签容器markerContainer
  10. drawableContainer = new Glodon.Bimface.Plugins.Drawable.DrawableContainer(drawableConfig);
  11. }
  12. }

step 2. 创建自定义标签

在容器创建完成后,我们可以创建具体的标签了。自定义标签允许添加 DOM 元素,因此它的样式非常多样,这里我们就在标签中添加一个 div 并对它的内容和样式进行设置,同时构造函数 addItems:

  1. function addItems(objectdata) {
  2. position = objectdata.worldPosition;
  3. var config = new Glodon.Bimface.Plugins.Drawable.CustomItemConfig();
  4. var rectangle = document.createElement('div');
  5. //自定义样式,支持Html的任意dom元素
  6. rectangle.style.width = '100px';
  7. rectangle.style.height = '32px';
  8. rectangle.style.lineHeight = '32px';
  9. rectangle.style.textAlign = 'center';
  10. rectangle.style.fontSize = '14px';
  11. rectangle.style.border = 'solid';
  12. rectangle.style.borderWidth = '1px';
  13. rectangle.style.borderColor = '#32D3A6';
  14. rectangle.style.color = '#444444';
  15. rectangle.style.borderRadius = '3px';
  16. rectangle.style.background = '#F2F2F2';
  17. rectangle.innerText = '自定义标签';
  18. config.content = rectangle;
  19. //设置可以拖拽
  20. config.draggable = true;
  21. config.offsetY = -32;
  22. config.viewer = viewer2D;
  23. //增加一个Tip提示
  24. config.tooltip = '拖我试试';
  25. config.worldPosition = position;
  26. //生成customItem实例
  27. var customItem = new Glodon.Bimface.Plugins.Drawable.CustomItem(config);
  28. //自定义标签的鼠标左键事件
  29. customItem.onClick(function (item) {
  30. alert('left click');
  31. });
  32. //自定义标签的鼠标右键事件
  33. customItem.onRightClick(function (item) {
  34. alert('right click');
  35. });
  36. customItem.onEndDrag(function (item) {
  37. console.log(JSON.stringify(item.worldPosition));
  38. });
  39. // 添加自定义标签
  40. drawableContainer.addItem(customItem);
  41. //设置Tip的样式
  42. customItem.setTooltipStyle({
  43. border: '1px',
  44. top: '-33px'
  45. });
  46. }

step 3. 设置标签添加方式

结合场景的使用频率,在这里主要实现通过鼠标点击模型的方式来放置标签,所以我们要创建鼠标点击的监听事件。当处于激活状态时,可注册监听事件;相反的,当处于未激活状态时,我们则将鼠标点击的监听事件移除。

  1. var isAddCustomItemActtivated = false;
  2. function addCustomItem() {
  3. if (isAddCustomItemActtivated) {
  4. return;
  5. } else {
  6. // 添加点击监听事件
  7. viewer2D.addEventListener(Glodon.Bimface.Viewer.ViewerDrawingEvent.MouseClicked, addItems);
  8. isAddCustomItemActtivated = true;
  9. }

如上,就可以实现点击添加自定义标签~

BIMFACE功能测评 - 如何在BIM运维场景下创建二三维标签? - 图1

自定义标签

二、三维标签

刚刚我们实现了在场景中添加二维自定义标签的功能,接下来我们一起在某些特定的运维场景下(如报警点、设备状态显示等)添加三维标签吧。

step 1. 创建三维标签容器

与二维标签相似,在构造三维标签实例之前,我们先要构造一个存放三维标签的容器,并完成对容器的配置。

  1. // ********************** 三维标签*********************
  2. var is3DMarkerPlaced = false;
  3. function addMarker() {
  4. if (is3DMarkerPlaced) {
  5. return;
  6. }
  7. // 构造三维标签容器配置markerContainerConfig
  8. var markerContainerConfig = new Glodon.Bimface.Plugins.Marker3D.Marker3DContainerConfig();
  9. // 设置markerContainerConfig匹配的viewer对象
  10. markerContainerConfig.viewer = viewer3D;
  11. // 构造三维标签容器markerContainer
  12. var markerContainer = new Glodon.Bimface.Plugins.Marker3D.Marker3DContainer(markerContainerConfig);
  13. }

step 2. 创建三维标签

创建完 markerContainer 后,我们需要继续构造一个三维标签对象并完成对它的配置。

  1. function addItems(objectdata) {
  2. position = objectdata.worldPosition;
  3. var marker3dConfig = new Glodon.Bimface.Plugins.Marker3D.Marker3DConfig();
  4. marker3dConfig.src = "http://static.bimface.com/resources/3DMarker/warner/warner_red.png";
  5. marker3dConfig.worldPosition = position;
  6. //三维标签的提示
  7. marker3dConfig.tooltip = "this is 3DMarker.";
  8. var marker3d = new Glodon.Bimface.Plugins.Marker3D.Marker3D(marker3dConfig);
  9. marker3d.onClick(function (item) {
  10. //获取点击图片的postion
  11. var m = item.position;
  12. //自己设置一个boundingbox的对象
  13. var num = 1.1;
  14. var max = m.x * num;
  15. var may = m.y * num;
  16. var maz = m.z * num;
  17. var mix = m.x / num;
  18. var miy = m.y / num;
  19. var miz = m.z / num;
  20. var maxp = new Object();
  21. maxp = {
  22. x: max,
  23. y: may,
  24. z: maz
  25. };
  26. var minp = new Object();
  27. minp = {
  28. x: mix,
  29. y: miy,
  30. z: miz
  31. };
  32. var boundingbox = new Object();
  33. boundingbox = {
  34. max: maxp,
  35. min: minp
  36. };
  37. //缩放到该boundingbox
  38. viewer3D.zoomToBoundingBox(boundingbox);
  39. })
  40. marker.addItem(marker3d);
  41. viewer3D.render();
  42. }

step 3. 设置标签添加方式

结合场景的使用频率,在这里主要实现通过鼠标点击模型的方式来放置标签,所以我们要创建鼠标点击的监听事件,实现任意位置点击添加三维标签与自定义标签的实现方法相同。

  1. var isAddItemActtivated = false;
  2. function add3DMarker() {
  3. if (isAddItemActtivated) {
  4. return;
  5. } else {
  6. // 添加点击监听事件
  7. viewer3D.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked, addItems);
  8. isAddItemActtivated = true;
  9. }
  10. }

如上,就可以实现点击添加三维标签了~

BIMFACE功能测评 - 如何在BIM运维场景下创建二三维标签? - 图2

三维标签

三、聚合标签

在运维场景下,可能存在众多设备,有成百上千的标签。如果同时展示出来,一方面影响模型浏览性能,另一方面模型浏览不够美观。因此 BIMFACE 推出了针对模型 / 图纸的聚合标签的功能,不同缩放层级下,展示不同的标签数量和样式。

step 1. 创建聚合标签

在聚合标签之前,我们要先创建所需要的标签。BIMFACE 支持同类型的标签聚合,大家可以根据自己的业务场景需要创建二维或者三维标签。构造一个存放聚合标签的容器,并完成对容器的配置。

  1. // ********************** 聚合标签*********************
  2. function createClusterItem() {
  3. // 构造聚合标签容器配置项
  4. var clusterContainerConfig = new Glodon.Bimface.Plugins.Cluster.ClusterContainerConfig();
  5. clusterContainerConfig.viewer = viewer3D;
  6. // 构造聚合标签容器
  7. var clusterContainer = new Glodon.Bimface.Plugins.Cluster.ClusterContainer(clusterContainerConfig);
  8. // 构造聚合标签配置项
  9. var clusterItemConfig = new Glodon.Bimface.Plugins.Cluster.ClusterItemConfig();
  10. clusterItemConfig.tags = drawableContainer.getAllItems();
  11. console.log(drawableContainer.getAllItems().length);
  12. clusterItemConfig.maxLevel = 8;
  13. clusterItemConfig.viewer = viewer3D;
  14. // 构造聚合标签对象
  15. clusterItem = new Glodon.Bimface.Plugins.Cluster.ClusterItem(clusterItemConfig);
  16. // 定义聚合标签的点击事件
  17. clusterItem.onClick(function (data) {
  18. var boundingBox = data.boundingBox;
  19. viewer3D.zoomToBoundingBox(boundingBox, 5);
  20. });
  21. clusterContainer.addCluster(clusterItem);
  22. clusterContainer.update();
  23. }

step 2. 设置不同状态下的聚合标签

BIMFACE 给我们提供了 Danger、Waring、Information 及 Success 四种状态,用于展示聚合标签不同状态,去展现更加丰富的应用场景。

  1. var exceptionActivated = false;
  2. function setException() {
  3. if(!viewAdded) {
  4. return;
  5. }
  6. if(!exceptionActivated) {
  7. // 设置标签样式,提供了Danger、Waring、Information及Success四种,默认为Success
  8. clusterItem.setException(randomTagId_1, Glodon.Bimface.Plugins.Cluster.ClusterStyle.Danger);
  9. clusterItem.setException(randomTagId_2, Glodon.Bimface.Plugins.Cluster.ClusterStyle.Warning);
  10. clusterItem.setException(randomTagId_3, Glodon.Bimface.Plugins.Cluster.ClusterStyle.Information);
  11. // 更新聚合标签状态
  12. clusterItem.updateClusterTags();
  13. setButtonText('btnSetException', '清空标签样式');
  14. } else {
  15. // 重置所有标签样式为'Success'
  16. clusterItem.clearException();
  17. // 更新聚合标签状态
  18. clusterItem.updateClusterTags();
  19. setButtonText('btnSetException', '设置标签样式');
  20. }
  21. exceptionActivated = !exceptionActivated;
  22. }

BIMFACE功能测评 - 如何在BIM运维场景下创建二三维标签? - 图3

广联达 BIMFACE 开发者文档

如上,就可以实现点击添加聚合标签了~

BIMFACE功能测评 - 如何在BIM运维场景下创建二三维标签? - 图4

聚合标签

好了,本次的分享就到这了,希望对大家有所帮助,详细内容可前往他们的官网哦~~

最近更新的有点慢,但是我会坚持哦,感谢大家的关注,一起努力!
https://zhuanlan.zhihu.com/p/324146015