电力布局三维编辑器功能设计

Mac开发者
• 阅读 909

楔子

最近和一家公司在谈一个项目合作,他们公司主要是做电力相关的。 项目背景大概是这样的:
国家电网对电网资产需要做到数字化管理,对现有变压器台区内的电表箱电能表做可视化数字孪生管理。
由于涉及到的台区非常多,所以客户希望开发的不是单个项目,而是可以实现项目的3D编辑器,使得电网的台区经理使用编辑器编辑出所负责的变压器台区的设备关系场景及数据状态展示。

三维可视化方面,三维组态,我们经验还是挺多的,比如数据中心、医院、学校等三维可视化项目,还包括智慧园区、智慧城市、智慧小镇的方向的等三维可视化。
下面先上几张三维可视化的图瞅瞅:
电力布局三维编辑器功能设计电力布局三维编辑器功能设计
电力布局三维编辑器功能设计
客户需要的是一个布局工具,而不是直接的三维场景,这比直接搭建一个三维的场景要难许多。
但是所谓万事开头难,难在不开头。 天下事有难易乎,干就是了。由于之前做过油田的三维布局,虽然内容上不太一样,但是技术上是类似的,还是相对来说容易很多。
在商务人员和客户确立合同,正式立项后, 我们的设计小姐姐,开发小哥哥,建模小弟弟,都各司其职,下边就讲一下项目的大概内容。

创建模型库

模型库主要包括了园区模型(通用),楼宇模型(通用),台区模型,电表箱,电能表等等。
电力布局三维编辑器功能设计电力布局三维编辑器功能设计
首先是开发同事搭建一个模型库的功能,主要包括了对于模型的管理。 模型库功能主要包括,模型的上传,预览和分类和列表功能。同时让建模小伙把相关模型使用3D建模工具 3d max或者c4d 进行模型的建模。建模后,导出后缀为obj/gltf/fbx格式文件,建模后的所有模型文件,最终会上传到模型库,模型库的管理目录如下图所示:
电力布局三维编辑器功能设计

三维编辑功能

三维编辑能力是电力布局三维编辑器的核心功能。

生成模型

三维编辑能力之一是把模型列表的功能拖拽到三维画布上,生成三维模型。主要的技术实现包括了 DragAndDrop和模型加载:
其中drag and drop 大致如下:

function dragstart_handler(ev) {
  ev.dataTransfer.setData("model","./xxx.gltf");
}

function dragover_handler(ev) {
  ev.preventDefault();
  ev.dataTransfer.dropEffect = "move";
}
function drop_handler(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("model");
  let model = ModelLoader.load(data);
  ...
}

而模型加载主要使用了GLTFLoader,大致如下

loader.load(modelPath, function (gltf) {
  // todo 
  // add gltf to scene
}

场景编辑

模型拖入场景中后,还可以在场景中二次编辑模型的位置,大小和其他属性。 可以通过属性框设置属性,也可以通过gizmo工具进行平移,旋转和缩放模型。如下图所示:
电力布局三维编辑器功能设计电力布局三维编辑器功能设计电力布局三维编辑器功能设计电力布局三维编辑器功能设计

当然还有更多的底层能力,包括undo,redo,批量生产,批量布局,打组,解散打组,拖拽复制能力,批量移动,旋转和缩放等等能力,都是用于易用性的开发,此处不在详细说明。后面将会有文章专门说明编辑器的底层能力。

动态楼层

客户需要能够动态生产楼层,楼层模型拉入场景时,手动输入 地上层数,地下层数,单元数,然后按照输入的层数自动生成相应楼宇模型。楼层支持动态修改楼层数和单元数量。这样可以达到的目的就是通用型,不用针对每个台区进行楼层的建模,减少后期的工作量。
电力布局三维编辑器功能设计电力布局三维编辑器功能设计电力布局三维编辑器功能设计

通过对于楼层+ 楼顶进行分开建模,然后把楼层进行组合的能力,来实现上述功能。

连线功能

在台区和电表之间要能够添加连线,表示联通关系,效果如下所示:
电力布局三维编辑器功能设计
输入台区模型编号和电表模型编号。 然后按照横平竖直的方法连接连线。其中由于webgl的line宽度只能为1,影响效果,所以我们的连线使用了自己封装的Line,类似threejs的MeshLine,通过Mesh来模拟Line,可以指定line的宽度。代码如下所示:

 const material = new dt.MeshLineMaterial({
    useMap: true,
    map: texture,
    color: new dt.Color("red"),
    transparent: true,
    clipRatio: .1,
    opacity: 1,
    depthTest: false,
    // depthWrite: false,
    resolution: new dt.Vec2(graph.width, graph.height),
    sizeAttenuation: false,
    lineWidth: 100,
    repeat: new dt.Vec2(20, 3),
    offset: new dt.Vec2(0, 0),
    gradientStop: [0, 0.2, random(0.55, 0.65), 1],
    gradientColor: ["blue", "green", "orange", "red"],
    blending: dt.AddtiveBlending,
  });
  var g = new dt.MeshLine();
  g.setGeometry(geo);
  var mesh = new dt.Mesh(g.geometry, material);

特效

通过平台的脚步能力,可以实现二次开发的能力,二次开发实现的特效如下:

  • 线条的流动效果

    通过uv流动动画+特定的贴图,可以实现线条的流动效果,比如demo效果如下:
    电力布局三维编辑器功能设计
    有关uv流动动画的原理,可以参考笔者之前的文章《
    》。

  • 台区、电能表模型轮廓发光的呼吸灯闪烁效果

    通过引擎的OutlineRenderer,可以实现模型的轮廓效果,并且通过OutlineRenderer的参数的不断修改,便可以实现呼吸灯的闪烁的效果,代码如下所示:

    graph.outlineMethod = "glow";
    if (graph._outlineRenderer) {
    let pass = graph._outlineRenderer.outlinePass;
    pass.visibleEdgeColor = new Color(controls.visibleEdgeColor);
    pass.hiddenEdgeColor = new Color(controls.visibleEdgeColor);
    pass.edgeGlow = controls.edgeGlow;
    pass.edgeThickness = controls.edgeThickness;
    pass.edgeStrength = controls.edgeStrength;
    pass.downSampleRatio = parseInt(controls.downSampleRatio);
    }

    最终的效果如下图所示:
    电力布局三维编辑器功能设计

总结

本文主要阐述了电力行业三维布局的主要功能特点。

最后,关注公号“ITMan彪叔” 可以添加作者微信进行交流,及时收到更多有价值的文章。

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
我熬夜开发了一款简约实用、支持多平台的Markdown在线编辑器(开源)
前言之前,一直想开发一款属于自己的Markdown编辑器,主要是自己平常写文章可以更加灵活操作,另外扩宽自己的视野也是非常不错的选择啊!所以在周末就决定玩耍一番。首先我调研了很多线上热门的md编辑器,都很优秀。不为超过他们,主要自己用着舒服点。这篇文章主要是记录下我是如何从0到1是完成一款还算拿得出手的Markdown编辑器。完成项目一览调研Markdown
Johnny21 Johnny21
4年前
Promethus(普罗米修斯)监控
一、任务背景某某某公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行业务监控,责成运维部门来实施这个项目。任务要求1)部署监控服务器,实现7x24实时监控2)针对公司的业务及研发部门设计监控系统,对监控项和触发器拿出合理意见3)做好问题预警机制,对可能出现的问题要及时告警并形成严格的处理机制4)做好监控告警系统,要求可以实
kenx kenx
4年前
Maven 基础标签之版本管理和冲突解决
前言我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线maven基础Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理每个maven项目根目录都会有一个pom.xml文件,负责项目构建,依赖管理在这个文件里面,你只需要添加相应的jar包坐标配置,maven就会自动
Magician-Containers 1.0.0 发布,Magician 家族又添一位新成员
最近在使用Magician开发项目的过程中,发现了一些问题,有时候想对某些方法做监听,或者想启动一个定时任务做轮询,会比较麻烦一点,因为Magician暂时没有对应的解决方案,但是我又不想在现有的Magician里添加功能,因为这样会让项目变得越来越大,最后逐渐变成一个大胖子,失去灵活性,开发者在使用的时候,不管需不需要的功能都会被一股脑的
QW54787715 QW54787715
4年前
做运维的如何利用自己手里的资源增加收入,发财记得感谢我。
现在很多做技术开发的人都会找兼职给外面接点活赚点零花钱,目前这个市场还是狼多肉少,很难接到赚钱的单子。不妨多找一些方法,我这给大家介绍一个好渠道。如果在公司做运维工作有维护服务器资源的不管是阿里云腾讯云,只要你能登陆账号就可以公司采购完的订单是可以关联给代理商的,以阿里云为例,在控制台企业合作伙伴项目进去以后你能看到最近购买的订单,每一个订单后面都是有一
亚马逊IoT平台所提供的三大领域技术支持
下面介绍的三大应用领域工业物联网(IIoT)集成了机器、云计算、分析和人,以提高工业过程的性能和生产率。借助IIoT,工业公司可以实现流程数字化,转变业务模式,提高性能和生产率,并减少浪费。这些从事制造、能源、农业、交通和公共事业的资产密集型公司都致力于物联网项目,这些项目可以连接数十亿台设备,并在各种使用案例中提供价值,包括预测质量和维护分析、资产状况监控
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
4年前
Rabbitmq学习之路1
最近项目中开始使用rabbitmq,以前只听过但是没使用过,所以有必要先系统的了解一下rabbitmq的使用方法。找管理员要了三台机器做学习之用。试验环境10.20.112.26 ubuntu12.04 ubuntuTest0110.20.112.27 ubuntu12.04ubuntuTest0210.20.112.28 
linbojue linbojue
1年前
基于5G 通信技术的智能电力监控系统设计
张忠伟(国网秭归县供电公司,湖北宜昌443600)0引言随着经济的高速发展,社会各界对电力的需求不断增长,传统的电力监控系统已无法满足日益复杂的监控任务,存在监控范围小、信息传输效率低、数据收集及处理能力差等诸多问题,阻碍着电网智能化的进程。为了解决这些问
元宇宙华锐 元宇宙华锐
10个月前
数字孪生编辑器贯穿建筑整个生命周期
在建筑行业,数字孪生编辑器贯穿于建筑的全生命周期,从设计、施工到后期维护,都发挥着不可或缺的作用,为建筑行业的数字化转型和可持续发展提供了有力支持。​在建筑设计阶段,设计师可以利用数字孪生编辑器创建建筑的三维数字模型,将建筑的外观、内部结构、空间布局等信息
敏捷开发 敏捷开发
7个月前
项目管理利器:甘特图的全面解析与应用指南
在错综复杂的项目管理中,清晰了解项目全貌、跟踪进度、协调资源是成功的关键。甘特图(GanttChart)作为一项久经考验、历久弥坚的可视化工具,始终是项目经理和团队成员的得力助手。本文将从全面剖析甘特图的核心要素与应用精髓,希望对你有帮助。甘特图的定义与构