BIMFACE功能测评- 如何创建二三维标签?

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

二维标签:可应用于图纸/模型场景中,标签是浮于视图之上,不会被构件或图元遮挡。

三维标签:可用于模型场景中,标签和构件存在三维遮挡关系。

聚合标签:适用于标签过多导致体验差的场景,它可以将二维或者三维标签按照不同的层级进行缩放展示,大大提升了模型的美观度及加载性能。


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

自定义标签:可在标签中添加文字、图片、调整样式,也可添加DOM元素以进行更多的功能拓展。

引线标签:样式较为固定的标签类型,需要与构件进行关联,并且对单次出现的完整标签数量有限制。

小地图标签:在小地图上显示的标签,可配置需要显示的楼层。

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


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

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

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

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

// ************************自定义标签***********************

var DrawableContainer= null;

function createDrawableContainer() {

  if (!cunstomItemContainer) {

// 构造自定义标签容器配置drawableConfig

var drawableConfig = new Glodon.Bimface.Plugins.Drawable.DrawableContainerConfig();

// 设置markerContainerConfig匹配的viewer对象

drawableConfig.viewer = viewer2D;

// 构造三维标签容器markerContainer

drawableContainer = new Glodon.Bimface.Plugins.Drawable.DrawableContainer(drawableConfig);

  }

}

step 2. 创建自定义标签

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

function addItems(objectdata) {

                position = objectdata.worldPosition;

                var config = new Glodon.Bimface.Plugins.Drawable.CustomItemConfig();

                var rectangle = document.createElement('div');

                //自定义样式,支持Html的任意dom元素

                rectangle.style.width = '100px';

                rectangle.style.height = '32px';

                rectangle.style.lineHeight = '32px';

                rectangle.style.textAlign = 'center';

                rectangle.style.fontSize = '14px';

                rectangle.style.border = 'solid';

                rectangle.style.borderWidth = '1px';

                rectangle.style.borderColor = '#32D3A6';

                rectangle.style.color = '#444444';

                rectangle.style.borderRadius = '3px';

                rectangle.style.background = '#F2F2F2';

                rectangle.innerText = '自定义标签';

                config.content = rectangle;

                //设置可以拖拽

                config.draggable = true;

                config.offsetY = -32;

                config.viewer = viewer2D;

                //增加一个Tip提示

                config.tooltip = '拖我试试';

                config.worldPosition = position;

                //生成customItem实例

                var customItem = new Glodon.Bimface.Plugins.Drawable.CustomItem(config);

                //自定义标签的鼠标左键事件

                customItem.onClick(function (item) {

                    alert('left click');

                });

                //自定义标签的鼠标右键事件

                customItem.onRightClick(function (item) {

                    alert('right click');

                });

                customItem.onEndDrag(function (item) {

                    console.log(JSON.stringify(item.worldPosition));

                });

                // 添加自定义标签

                drawableContainer.addItem(customItem);

                //设置Tip的样式

                customItem.setTooltipStyle({

                    border: '1px',

                    top: '-33px'

                });

            }

step 3. 设置标签添加方式

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

var isAddCustomItemActtivated = false;

            function addCustomItem() {

                if (isAddCustomItemActtivated) {

                    return;

                } else {

                    // 添加点击监听事件

                    viewer2D.addEventListener(Glodon.Bimface.Viewer.ViewerDrawingEvent.MouseClicked, addItems);

                    isAddCustomItemActtivated = true;

                } 

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

自定义标签

二、三维标签

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

step 1. 创建三维标签容器

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

// ********************** 三维标签*********************

var is3DMarkerPlaced = false;

function addMarker() {

  if (is3DMarkerPlaced) {

    return;

  }

  // 构造三维标签容器配置markerContainerConfig

  var markerContainerConfig = new Glodon.Bimface.Plugins.Marker3D.Marker3DContainerConfig();

  // 设置markerContainerConfig匹配的viewer对象

  markerContainerConfig.viewer = viewer3D;

  // 构造三维标签容器markerContainer

  var markerContainer = new Glodon.Bimface.Plugins.Marker3D.Marker3DContainer(markerContainerConfig);

}

step 2. 创建三维标签

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

function addItems(objectdata) {

            position = objectdata.worldPosition;

            var marker3dConfig = new Glodon.Bimface.Plugins.Marker3D.Marker3DConfig();

            marker3dConfig.src = "http://static.bimface.com/resources/3DMarker/warner/warner_red.png";

            marker3dConfig.worldPosition = position;

            //三维标签的提示

            marker3dConfig.tooltip = "this is 3DMarker.";

            var marker3d = new Glodon.Bimface.Plugins.Marker3D.Marker3D(marker3dConfig);

            marker3d.onClick(function (item) {

                //获取点击图片的postion

                var m = item.position;

                //自己设置一个boundingbox的对象

                var num = 1.1;

                var max = m.x * num;

                var may = m.y * num;

                var maz = m.z * num;

                var mix = m.x / num;

                var miy = m.y / num;

                var miz = m.z / num;

                var maxp = new Object();

                maxp = {

                    x: max,

                    y: may,

                    z: maz

                };

                var minp = new Object();

                minp = {

                    x: mix,

                    y: miy,

                    z: miz

                };

                var boundingbox = new Object();

                boundingbox = {

                    max: maxp,

                    min: minp

                };

                //缩放到该boundingbox

                viewer3D.zoomToBoundingBox(boundingbox);

            })

            marker.addItem(marker3d);

            viewer3D.render();

        }

step 3. 设置标签添加方式

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

  var isAddItemActtivated = false;

        function add3DMarker() {

            if (isAddItemActtivated) {

                return;

            } else {

                // 添加点击监听事件

                viewer3D.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked, addItems);

                isAddItemActtivated = true;

            }

        }

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

三维标签

三、聚合标签

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

step 1. 创建聚合标签

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

// ********************** 聚合标签*********************

function createClusterItem() {

      // 构造聚合标签容器配置项

      var clusterContainerConfig = new Glodon.Bimface.Plugins.Cluster.ClusterContainerConfig();

      clusterContainerConfig.viewer = viewer3D;

      // 构造聚合标签容器

      var clusterContainer = new Glodon.Bimface.Plugins.Cluster.ClusterContainer(clusterContainerConfig);

      // 构造聚合标签配置项

      var clusterItemConfig = new Glodon.Bimface.Plugins.Cluster.ClusterItemConfig();

      clusterItemConfig.tags = drawableContainer.getAllItems();

      console.log(drawableContainer.getAllItems().length);

      clusterItemConfig.maxLevel = 8;

      clusterItemConfig.viewer = viewer3D;

      // 构造聚合标签对象

      clusterItem = new Glodon.Bimface.Plugins.Cluster.ClusterItem(clusterItemConfig);

      // 定义聚合标签的点击事件

      clusterItem.onClick(function (data) {

        var boundingBox = data.boundingBox;

        viewer3D.zoomToBoundingBox(boundingBox, 5);

      });

      clusterContainer.addCluster(clusterItem);

      clusterContainer.update();

    }

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

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

var exceptionActivated = false;

    function setException() {

      if(!viewAdded) {

        return;

      }

      if(!exceptionActivated) {

        // 设置标签样式,提供了Danger、Waring、Information及Success四种,默认为Success

        clusterItem.setException(randomTagId_1, Glodon.Bimface.Plugins.Cluster.ClusterStyle.Danger);

        clusterItem.setException(randomTagId_2, Glodon.Bimface.Plugins.Cluster.ClusterStyle.Warning);

        clusterItem.setException(randomTagId_3, Glodon.Bimface.Plugins.Cluster.ClusterStyle.Information);

        // 更新聚合标签状态

        clusterItem.updateClusterTags();

        setButtonText('btnSetException', '清空标签样式');

      } else {

        // 重置所有标签样式为'Success'

        clusterItem.clearException();

        // 更新聚合标签状态

        clusterItem.updateClusterTags();

        setButtonText('btnSetException', '设置标签样式');

      }

      exceptionActivated = !exceptionActivated;

    }


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

聚合标签

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

最近更新的有点慢,但是我会坚持哦,感谢大家的关注,一起努力!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 上期BIMFACE功能测评(一)重点给大家演示了在BIMFACE控制台,模型上传、转换预览以及简单的本地模型展示的...
    努力上进的白小白阅读 1,043评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,523评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,564评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,727评论 1 1
  • 在妖界我有个名头叫胡百晓,无论是何事,只要找到胡百晓即可有解决的办法。因为是只狐狸大家以讹传讹叫我“倾城百晓”,...
    猫九0110阅读 3,261评论 7 3