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);
    },

绘制结果如下:

相关文章
|
编解码 IDE 算法
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
598 0
|
6天前
ThreeJs模拟工厂生产过程一
这篇文章详细介绍了如何使用Three.js模拟工厂生产过程的第一部分,包括创建传送带、生产设备和产品的模型,并实现产品沿传送带移动的动画效果。
15 5
|
6天前
ThreeJs模拟工厂生产过程二
这篇文章详细介绍了如何使用Three.js创建一个模拟工厂车间的3D模型,包括绘制地面和墙面的具体步骤,并特别关注于如何创建带有门的墙面以增加车间的真实性。
16 5
|
6天前
|
UED
ThreeJs模拟工厂生产过程三
这篇文章介绍了在Three.js中通过使用mergeGeometries技术来合并大量车间模型,以减少浏览器渲染负担,提高性能,并提供了实现模型合并的具体方法和步骤。
15 5
|
6天前
ThreeJs模拟工厂生产过程四
这篇文章详细说明了如何在Three.js中为模拟的工厂产线添加警戒线,以增强产线模型的真实感和安全性表现,通过使用`PlaneGeometry`来创建并定位这些警戒线。
10 1
|
6天前
ThreeJs模拟工厂生产过程七
这篇文章详细介绍了如何在Three.js中为工厂车间的货架动态生成并放置货物,通过循环逻辑和贴图应用使货架上的物品更加逼真,增强了场景的真实感。
9 0
|
6天前
|
程序员 图形学
ThreeJs模拟工厂生产过程五
这篇文章详细介绍了如何在Three.js中模拟工业生产过程的第五部分,重点在于添加并实现车间内人物的动态行走动画,使人能够在车间内来回移动,增加了场景的真实感。
16 0
|
6天前
|
JavaScript
ThreeJs模拟工厂生产过程八
这篇文章详细介绍了如何在Three.js中模拟工厂生产过程的第八部分,重点是优化场景中的模型,包括合并货架上的料箱以减少渲染负担,并替换设备模型以增强场景的真实性和互动性。
21 0
|
4月前
经验大分享:QML动态标注线
经验大分享:QML动态标注线
22 0
|
5月前
|
设计模式 安全 Java
老系统重构系列--如何用一套流程接入所有业务线
**摘要:** 本文介绍了老系统改造的过程,作者提出,ToB业务的挑战在于需要支持多种差异化的业务需求,而模板模式在处理这种需求时可能会导致继承关系复杂和粒度过粗。为了解决这些问题,文章提出了以下步骤: 1. **梳理流程差异点**:识别不同业务流程的差异,以便确定扩展点。 2. **领域模型梳理**:区分核心域和支撑域,确保核心域的稳定性。 3. **二次抽象隔离层**:创建隔离层,避免核心域因新业务接入而变得不稳定。 4. **基于SPI的扩展体系建设**:选择了COLA-SPI实现扩展点,允许业务域定义接口并实现差异化的流程逻辑。
108 0