zoukankan      html  css  js  c++  java
  • 官方案例(十五):3D开发构造器参数测量多边形面积 ThingJS

    前端# #CAD# #物联网可视化开发#

    1. 用于测量的构造器
    2. 线与面的混合绘制
    3. 添加HTML元素

    简介:如何在3D场景中测量面积?ThingJS平台实现多点测量开发,支持鼠标任意点绘制多边形面积,使用自带量角功能,计算绘制总长度和占地面积,结合3D场景更好理解。

    demo链接:http://www.thingjs.com/guide/?m=sample

    用于测量的构造器

    面积测量的对象是带有地理位置(coordinates)的多边形要素,与线段测量的开发方式类似,需要创建一个对象类型的构造器,可以添加属性字段以存储信息。
    ThingJS平台创建 Constructor () 构造器为对象的属性赋初始值,JS中可以任意扩展构造参数option,实现动态绑定。

    线与面的混合绘制

    在图像中,四个点能够形成不规则的四边形或者矩形,ThingJS示例利用由点及面的原理,通过节点和线段来创建参数组,统一所有鼠标点击后的坐标点集合,生成不规则的测量面积。再通过修改多边区域的样式参数(如颜色、透明度),来提升测量面积可见度。

     /**
         * 生成测量面
         * @param {Array} coordinates - 所有鼠标点击后的坐标点集合
         */
        createPolygon(coordinates) {
            var _this = this;
            if (_this.regionPolygon) {
                _this.regionPolygon.destroy();
                _this.polygonCard.remove();
                _this.opts.app.query('dashLine' + _this.opts.modelNum).destroy();
            }
            let coordinatesSort = [...coordinates];
            coordinatesSort.sort(function (a, b) {
                return a[1] - b[1];
            });
            let points01 = JSON.parse(JSON.stringify(coordinates));
            points01.forEach((v, k) => {
                v[1] = coordinatesSort[0][1];
            })
            let id = _this.opts.modelNum > 10 ? _this.opts.modelNum : '0' + _this.opts.modelNum;
            _this.regionPolygon = app.create({
                type: 'Shape',
                id: 'Area' + id,
                points: points01,  // 传入世界坐标系下点坐标
                height: 0.1,
                style: {
                    color: '#F99D0B',  // 区域颜色
                    opacity: 0.8  // 不透明度 (默认是 0.5 半透明)
                },
            })
    

    测量的注册事件主要是以鼠标操作为主,点击左键添加节点,右键或双击结束绘制,鼠标移动持续绘制测量线段,单击删除节点,整体代码和测量线段的开发逻辑一致。

    添加HTML元素

    屏幕上的2D面板一般用来动态展示测量详情,属于HTML表格,增加tbody标签以存储当前测量信息,形成一个HTML表格,让3D场景和数据分析结合起来。
    3D场景开发并不高深,只要结合ThingJS的物联网接口能力,甚至使用HTML/CSS等网页开发元素,一样能够快速完成3D可视化开发。

    /**
         * 为测量面板增加tbody标签存储当前测量信息
         */
        createPanel() {
            if ($('.empty')) {
                $('.empty').remove();
            }
            let tbody = `<tbody id="tb-polygon` + this.opts.modelNum + `" class="tj-group"></tbody>`
            $('.tj-table').prepend(tbody);
            this.table = $('#tb-polygon' + this.opts.modelNum);
        }
    

    结尾

    CAD测量面积需要很多按键操作,属于工具类软件,ThingJS不是为了测量本身,而是为了更容易在线测量面积,实现快速分析决策,所以更多是管理方式的转变,应用到数字孪生技术解决方案中。

    关于ThingJS

    ThingJS平台提供物联网3D可视化组件,让3D开发更轻松!直接Javascript调用3D脚本,基于200个3D开发源码示例,让你全面了解物联网可视化开发逻辑。场景搭建-3D脚本开发-数据对接-项目部署的一站式服务让开发更高效,同20万个开发者一起成为数字孪生技术创新者!

  • 相关阅读:
    详解如何在vue项目中引入饿了么elementUI组件
    移动端Web页面适配方案
    蛋糕仙人的javascript笔记
    小程序框架细节系列
    微信小程序 获取用户信息并保存登录状态
    (尚006)Vue计算属性之set与get
    (尚004)Vue计算属性之基本使用和监视
    (尚003).Vue_模板语法
    (尚002)Vue的基本使用
    (尚001)Vue框架介绍
  • 原文地址:https://www.cnblogs.com/thingjs/p/14339280.html
Copyright © 2011-2022 走看看