ThreeJs模拟工厂生产过程六

简介: 这篇文章详细介绍了如何在Three.js中模拟工厂生产过程的第六部分,重点是创建和实现车间内线边仓货架的三维模型及其布局。

车间模型有了,但是还是显得空旷,这节给车间添加线边仓,线边仓的作用是为了节省时间,保持产线持续生产的,比如生成手机的时候,会更多的原料放在线边仓,如果产线上的物料用完了,可以从线边仓得到补给,而不用去仓库领料,这样可以保持产线的不间断,所以一般的仓库都有线边仓的存在,有的也叫暂存仓等。

之前的章节中有绘制过仓库,我们可以参考那个章节的功能,先分析功能,假设我们需要绘制一个两排,五层,三列的货架,。那么首先应该需要循环三次,第一层循环是循环两次,产生两排货架,并保证每次循环,x或者y轴存在偏移来保持货架不重叠,偏移的距离要大于货架的长度或者宽度,第二层循环用来循环是循环五次,产生货架的层数,货架的层数要考虑到层板厚度的影响,层数的偏移要大于今后放置物品的高度,第三层循环是循环每层的列数,循环列数要注意的是考虑到立柱的宽度,也就是货架腿的宽度,最终产生完整的货架。

首先我们需要整合下数据,下面是代码:

 initShelf(){
      for (let i = 0; i < this.rackRowCount; i++) { //循环两次产生两排
        this.indistanceY = this.indistanceY + 55;//并排货架的偏移量,正式开发中可以根据货架的层板动态算出来
        for (let j = 0; j < this.rackColCount; j++) { //循环三次产生三列
          let shelfName = '货架' + (j + 1) + "上"
          this.shelfList.push({
            shelfName: (i + 1) + "排_" + shelfName,
            planeWidth: this.plane.planeWidth,
            planeHeight: this.plane.planeHeight,
            planeLength: this.plane.planeLength,
            holderLength: this.holder.holderLength,
            holderHeight: this.holder.holderHeight,
            holderWidth: this.holder.holderWidth,
            positionX: this.indistanceX,
            positionY: this.indistanceY + (j * this.plane.planeLength),//每个货架层平移产生多列货架
            positionZ: this.holder.holderHeight ,//距离地面的高度
            layerNum: this.layerNum,
            columnNum: this.columnNum
          });
        }
      }
      for(let i = 0;i < this.shelfList.length; i++){//再次循环货架列,调用生成货架的方法,传参要包含xyz,以及长宽高等
        for(let j = 0; j < this.shelfList[i].layerNum; j++){//循环每列货架的的层数
          this.addShelf(
              this.shelfList[i].positionX,
              this.shelfList[i].positionY,
              this.shelfList[i].positionZ*(j+1)-10,//因为整个场景的地板并非0,所以要往下偏移让货架腿放在地板上,+1是为了层板厚度
              this.shelfList[i].planeWidth,
              this.shelfList[i].planeLength,
              this.shelfList[i].planeHeight,
              this.shelfList[i].holderLength,
              this.shelfList[i].holderWidth,
              this.shelfList[i].holderHeight,
              this.shelfList[i].shelfName+"_"+(j+1)+"层",
              this.shelfList[i].columnNum);
        }
      }
    },

这部分是把货架数据放到shelfList,再通过循环layerNum调用绘制货架的方法,实现冬天绘制货架,

绘制货架,先要考虑需要绘制的模型,模型会包括三条腿和每层的层板,每层的层板是独立的,四条腿是形状大小一样的,我们只需要绘制一个几何体,然后引用几何体绘制网格模型并设置其对应的位置就好了。绘制货架要注意考虑货架的层板,立柱的相互影响,要设置正确的偏移量以保证绘制的正确性,可以先根据逻辑绘制出来,再根据展示的效果调整偏移量,偏移量尽量用动态数据,放置后面修改了货架的长宽高后需要再次调整偏移量数据。代码如下:

//新增货架
    addShelf(x,y,z,plane_x,plane_y,plane_z,holder_x,holder_y,holder_z,name,num){
      let RackMat2 = new THREE.MeshPhongMaterial({
        color: 0xffffff, // 设置颜色
        shininess: 20 // 设置高光大小,范围为0到128,默认值为30
      });
      let plane = new THREE.BoxGeometry( plane_x, plane_y/num+1,plane_z);//层板考虑柱子腿宽度
      for(let i = 0; i < num; i++){//循环每层的个数
        let gz =  y + plane_y/num/2 + (plane_y/num)*i + 0.5;//柱子腿宽度为1,要偏移0.5
        let obj = new THREE.Mesh( plane, RackMat2 );
        obj.position.set(x, gz, z) ;
        obj.name = name
        this.scene.add(obj);
      }
      let holder = new THREE.BoxGeometry( holder_x, holder_y, holder_z );
      let obj2 = new THREE.Mesh( holder, RackMat2, 0 );
      let obj3 = new THREE.Mesh( holder, RackMat2, 0 );
      let obj4 = new THREE.Mesh( holder, RackMat2, 0 );
      let obj5 = new THREE.Mesh( holder, RackMat2, 0 );
      obj2.position.set(x-plane_x/2+holder_x/2,y+holder_y/2,z-holder_z/2-plane_z/2,);
      obj3.position.set(x+plane_x/2-holder_x/2,y+holder_y/2, z-holder_z/2-plane_z/2, );
      obj4.position.set(x-plane_x/2+holder_x/2,y+plane_y-holder_y/2+1,z-holder_z/2-plane_z/2 );
      obj5.position.set(x+plane_x/2-holder_x/2,y+plane_y-holder_y/2+1, z-holder_z/2-plane_z/2 );
      this.scene.add(obj2);this.scene.add(obj3);this.scene.add(obj4);this.scene.add(obj5);
    },

绘制结果如下:

相关文章
|
数据可视化 物联网
Threejs物联网,工厂3D可视化
Threejs物联网,工厂3D可视化
1493 15
Threejs物联网,工厂3D可视化
|
数据可视化 前端开发 JavaScript
vue3+threejs可视化项目——引入threejs加载钢铁侠模型(第二步)
vue3+threejs可视化项目——引入threejs加载钢铁侠模型(第二步)
1794 3
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
2232 0
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
ThreeJs模拟工厂生产过程二
这篇文章详细介绍了如何使用Three.js创建一个模拟工厂车间的3D模型,包括绘制地面和墙面的具体步骤,并特别关注于如何创建带有门的墙面以增加车间的真实性。
576 6
|
9月前
|
JavaScript 索引
Vue.js中el-table组件实现数据行删除功能,包含行索引处理
注意:当从列表中移除项目时,默认情况下列表会重新渲染,并且每一项会获得新 的 索引值。如果你依赖于特定 索引值进行其他计算或者逻辑处理,请确保更新那些依赖于旧 索引值得逻辑代码段。
600 16
|
JavaScript
ThreeJs绘制仓库场景
这篇文章详细介绍了如何使用Three.js来创建和渲染一个仓库场景,包括构建货架和其他3D元素的具体实现方法。
1271 0
|
容器
ThreeJs同一个场景多个相机的显示
这篇文章讲解了如何在Three.js中实现多相机功能,通过创建和布置多个相机及渲染器,从而能够在同一场景中从不同角度观察3D模型。
510 1
ThreeJs模拟工厂生产过程一
这篇文章详细介绍了如何使用Three.js模拟工厂生产过程的第一部分,包括创建传送带、生产设备和产品的模型,并实现产品沿传送带移动的动画效果。
711 5
|
数据可视化 物联网
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
1678 15
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
|
JavaScript
ThreeJs模拟工厂生产过程八
这篇文章详细介绍了如何在Three.js中模拟工厂生产过程的第八部分,重点是优化场景中的模型,包括合并货架上的料箱以减少渲染负担,并替换设备模型以增强场景的真实性和互动性。
394 0