`

两步创建3D数据中心

阅读更多

TWaver 3D发布也有很长一段时间了,相关的应用和项目也做了不少,特别是3D机房,可是有些用户反馈说3D机房开发起来有些费劲,耗时,3D并不像2D,虽然有时更加的直观,但是需要考虑的问题还挺多的,模型、材质、效率,交互,以及视角等等。

比如:一个机柜有可能有许许多多个3D对象组成,因此要对其进行操作,例如:打开机柜门,添加或删除设备,查看某个设备时让其他的设备都虚化掉等类似功能,对于很多人来说实现起来十分复杂。今天我们给大家介绍一些新的功能,我们对相关功能进行了进一步的封装,并且提供了一些内置模型,而这块的功能我们还在进一步的改进中,在这里先给大家展示展示,如果各位有什么好的想法和建议,欢迎提出来。

 

先来张整体的图,全部都是通过一个json导入的:

 

json的格式如下:
var json = {
  "categories" : [
    {
      "id" : "building",
    },
    {
     "id" : "room",
    },
    {
     "id" : "rack",
    }
   ],
  "dataTypes":[
       {
        "id" : "floor_type_01",
        "model":"area",
        "modelParameters": {"height":5,"data":[-1559,-555,1559,-555,1559,555,-1559,555,-1559,-555],type:"area"},
        "childrenSize":{"x":42,"z" : 4,"xPadding":[100,0],"zPadding": [100,0]}
       },
       {
        "id" : "floor_type_02",
        "model":"area",
        "modelParameters": {"height":5,"data":[-1550,-555,1559,-555,1559,555,-1550,555,-1550,-555],type:"area"},
            "childrenSize":{"x":42,"z" : 4,"xPadding":[100,0],"zPadding": [100,0]}
        },
  "datas":[
      {
        "id" : "b01",
        "dataTypeId" : "bt01",
        "position" : [-3000,0,0],
      },
      {
        "id":"floor",
        "parentId":"b01",
        "dataTypeId" : "floor_type_01",
        "position" : [1600,0,900],
      }
   ]
}
 
当然也可以在代码中直接往DataManager中添加,在添加之前先来简单的说明一下数据结构。
 

数据

 

目前我们这里有3种数据类型,分别是it.Category(类别,如:机柜,机房,设备…)、it.DataType(类型,如:A型号机柜,B型号机柜、A设备…,其引用的Category)、以及it.Data(资产数据,如:机柜001,机柜002是DataType的实例):

 

var dataManager = new it.DataManager();
var category = new it.Category({
            id : "rack",
            description : "机柜类别"
});
dataManager.addCategory(category);
 
var dataType = new it.DataType("rack_type_01");
dataType.setStopAlarmPropagationable(true);
dataType.setModel('rack');
dataType.setCategoryId(category.getId()); // 给该dataType设置类别
dataType.setModelParameters({"width":56,"height":47,"depth":110,type:"rack"});
dataType.setSize(new it.Size({x : 1,z : 1}));
dataType.setChildrenSize(new it.Size({y:47,yPadding : [5.545,5.545],zPadding:[0,-1.5],xPadding : [5,5]}));
dataManager.addDataType(dataType);
 
var data = new it.Data(id);
data.setLocation({x : z,y:"neg_neg",z : x});
data.setParentId(null);
data.setDataTypeId(dataType.getId());
data.u({"userId": "用户ID","制造商":'A厂'});
dataManager.addData(data);

 

添加好后,DataManager会管理这些数据,还可以使用快速查询的功能进行搜索,更重要的是它可以帮助创建3D对象哦,不管你的机柜多么复杂,它都可以帮你搞定。想想自己来处理3D模型和业务数据的绑定时,如果3D模型比较复杂的话,那该怎么绑定,以及查找时该怎么处理等也要费些功夫。

 


显示

 

将添加的data显示出来,new一个it.SceneManager即可:

 

var sceneManager = new it.SceneManager(dataManager);
sceneManager.loadScene();
document.body.appendChild(sceneManager.getSceneView());

 

 

默认功能

其实通过这两步就可以搞定一个简单的3D机房了,并且默认实现很多功能(当然这些默认的功能你也可以完全去掉,“默认”可是60年代发明的最最重要的一项技术,应该拿大奖的,呵呵,不知到称作“技术”是不是合适,可是现在没有它很多东西都没法运行),如下是双击某个机柜和某个设备后虚化其他所有的3D对象。

 





 

扩展

还有一些扩展功能,以下简单的列出几个:

 

ToolTip:
添加几行代码,告诉程序你要让哪些data有tooltip,以及该显示出哪些信息,添加规则代码如下:

var tooltipRule = new it.TooltipRule({
             categoryId : "rack",
             propertiesDesc : "机柜编号:id@@机柜名称:description",
             extInfo : {"test" : "test"}
});
var tooltipRule2 = new it.TooltipRule({
             dataTypeId : "room_type_01",
             propertiesDesc : "楼层编号:id@@楼层名称:description",
             extInfo : {"test" : "test2"}
 });
 sceneManager.viewManager3d.tooltipManager.addTooltipRule(tooltipRule);
 sceneManager.viewManager3d.tooltipManager.addTooltipRule(tooltipRule2);

 



属性框:

需要显示哪些内容也可以根据自己的需要来配置,代码和上面的思想差不多。





资产搜索:

资产搜索和空间搜索都用到了上文提到的快速查询,图上的输入框什么的都可以自己去实现。


 

空间搜索:





 

最后再来展示一下Billboard:


 

有些功能我们还会继续完善,今后再给大家展示,同时也欢迎大家提提意见!我们的邮箱:tw-service@servasoft.com

 

分享到:
评论

相关推荐

    SuperMap iClient3D 8C for Plugin iframe初始化场景

    在SuperMap iClient3D中,初始化场景控件是创建三维地图应用的第一步。这涉及到设置地图的基本属性,如地图的中心点、分辨率、视角等。在iframe中进行初始化,需要考虑到跨域安全问题,因为iframe加载的页面可能与主...

    PFC3d手册命令中文详解

    PFC3d命令可以分为两类,一类是程序控制命令,这些命令支持批处理执行模式,允许改变程序状态,例如Cycle & Step执行指定时间步、Solve执行计算。另一类是数据处理命令,例如PrintRange创建一个命名的范围。 PFC3d...

    AutoCAD Civil 3D 2010城市道路设计

    地形图处理是城市道路设计的第一步,主要目的是根据现场测量数据创建精确的三维地形模型。AutoCAD Civil 3D 2010提供了多种工具来帮助用户处理地形图,包括但不限于: - **转换文本点**:适用于文本点与数字高程...

    ARkit Now or Never

    第一步通过ARKit的追踪引擎来处理,第二步则通过3D图形渲染引擎如SceneKit来完成。除了SceneKit,iOS还支持其他渲染引擎,例如SpriteKit用于2D渲染,Metal则允许开发者自定义渲染方案。 创建一个使用SceneKit渲染3D...

    PHP中使用GD库创建圆形饼图的例子

    首先,创建画布是创建任何图像的第一步。在PHP中,`imagecreatetruecolor()`函数用于在内存中创建一个新的真彩色图像,它接受两个参数,分别代表图像的宽度和高度。在示例中,创建了一个100x100像素的画布。 接下来...

    maxscript 相当实用的教程

    - **第一步: 创建物体** - **方法**: 提供了创建各种基本几何体的方法。 - **第二步: 选择物体** - **选择方式**: 通过路径名、变量名引用等选择物体。 - **条件选择**: 根据特定条件选择物体。 - **组(Group)...

    Java魔方游戏

    通过JOGL,我们可以创建3D模型,为魔方的每个面绘制颜色,并实现旋转动画。这涉及到向量数学、矩阵变换、光照和纹理贴图等概念。 为了实现魔方的旋转,我们需要设计合适的算法。这通常包括两部分:一是计算旋转动作...

    EXCEL 2007 宝典 附光盘文件

    direct mail.xlsx:一个包含演示如何创建两种方式的假设分析数据表的利润模型。 mortgage loan data table.xlsx:一个演示如何创建一种方式的假设分析数据表的工作簿。 mortgage loan.xlsx:一个使用输入单元格和...

    Python模拟太阳-地球-月亮运动模型_python模型运动_python教程_

    接着,我们将使用matplotlib库创建3D图形界面,显示天体的运动轨迹。设置适当的时间步长和总时间,通过循环计算和绘制每个时间步的天体位置,可以形成动态的动画效果。 对于地球自转,我们可以将其分解为地球中心相...

    iOS_10_by_Tutorials_v0.3

    - **健康数据管理**:HealthKit框架允许开发者访问用户的健康数据,例如步数、心率等,以便于进行健康管理。 以上是基于《iOS 10 by Tutorials v0.3》文档中涉及的主要知识点的详细解释,希望能够帮助读者更好地...

    Introduction-to-Biometrics.rar_Biometrics

    1. **安防**:在政府机关、数据中心、机场等场所,用作门禁系统,提高安全性。 2. **移动设备解锁**:智能手机和平板电脑采用指纹或面部识别解锁,提供便捷且安全的用户体验。 3. **金融服务**:银行和金融机构...

    经典分形山(D-S)算法——Visual C++实现

    1. **钻石步(Diamond Step)**:在每个未填充的正方形中心绘制一个钻石形状,其高度由相邻四个顶点的高度决定,通常是它们的平均值加上一个随机扰动值。这样可以确保新的点不会与旧的点完全相同,从而增加地形的...

    基于Android开发的外文文献.doc

    开发者需要学习如何创建数据库、定义表结构、执行SQL查询以及管理数据。 7. **多线程与虚拟机**:每个Android应用都在自己的线程中运行,使用Dalvik或ART(Android RunTime)虚拟机。了解线程管理和内存管理对于...

    WebGIS考试参考试题.docx

    - **解析:** 一个中心式的地理信息共享门户网站通常包括发布模块、管理模块和查询模块,用于发布地理信息、管理和维护数据以及供用户查询信息。 12. **元数据的概念** - **解析:** 元数据是指关于数据的数据,...

    热传导方程openGL实时求解

    3. CNCS法:也称为 Leapfrog 方法,同时对时间和空间采取中心差分,提供较好的稳定性和精度,但需要额外计算中间时间步的值。 在OpenGL中,这些数值解可以通过编程实现动态的热传导过程可视化。例如,我们可以创建...

    2_opengl_ownerfqr_顶点着色器_

    顶点着色器是OpenGL图形管线中的第一步,它负责处理和修改场景中的几何数据,为后续的渲染阶段做准备。 顶点着色器是GPU(图形处理器)上的一个程序,它可以独立地并行运行在多个顶点上。在OpenGL中,开发者可以...

Global site tag (gtag.js) - Google Analytics