Browse Source

修改 货架渲染, 以每层相对地面高度为当前层高

master
yuliang 6 months ago
parent
commit
219479014e
  1. 16
      src/editor/propEditors/BayEditor.vue
  2. 12
      src/modules/rack/Rack3dObject.ts
  3. 1
      src/types/Types.d.ts

16
src/editor/propEditors/BayEditor.vue

@ -14,6 +14,8 @@ interface DtBay {
bayWidth: number;
/** 列偏移 */
offset: number;
/** 列的顶部空间 */
topHeight: number;
/** 每层的高度 */
levelHeight: Array<number>;
}
@ -85,6 +87,7 @@ function applyBasicSettings() {
const bay: DtBay = {
bayWidth: widthOfBays,
offset: 0,
topHeight: 0,
levelHeight: [],
};
for (let i = 0; i < numberOfLevels; i++) {
@ -124,6 +127,12 @@ function updateBayWidth(bay: DtBay, bayWidth?: number) {
emit("update:modelValue", newValue);
}
function updateBayTopHeight(bay: DtBay, topHeight?: number) {
bay.topHeight = topHeight;
const newValue = getModelValue();
emit("update:modelValue", newValue);
}
function updateBayOffset(bay: DtBay, offset?: number) {
bay.offset = offset;
const newValue = getModelValue();
@ -227,6 +236,13 @@ export type {
@change="(offset: number) => updateBayOffset(selectDay, offset)"
/>
</ElFormItem>
<ElFormItem label="Bay Top Height" :labelWidth="80">
<ElInputNumber
:controls="false"
:modelValue="selectDay.topHeight"
@change="(height: number) => updateBayTopHeight(selectDay, height)"
/>
</ElFormItem>
</div>
<div>Level Heights</div>
<div class="flex-item-fill bay-editor-bay-info-level-height">

12
src/modules/rack/Rack3dObject.ts

@ -25,7 +25,6 @@ export default class Rack3dObject extends THREE.Object3D {
private static rackHorizontalBarGeometryMap: Map<number, BufferGeometry> = new Map<number, BufferGeometry>()
private static rackHorizontalBarMaterial: Material = null
bottomBarHeight = 0.2
bottomLinkHeight = 0.2
topLinkDistance = 0.2
@ -297,7 +296,7 @@ export default class Rack3dObject extends THREE.Object3D {
const heights = []
for (let i = 0; i < item.dt.bays.length; i++) {
const bay = item.dt.bays[i]
const bayHeight = decimalSumBy(bay.levelHeight)
const bayHeight = bay.levelHeight[bay.levelHeight.length - 1] + bay.topHeight
heights.push(bayHeight)
}
const rackHeight = _.max(heights)
@ -357,16 +356,15 @@ export default class Rack3dObject extends THREE.Object3D {
const hBarMatrix: { x: number, y: number, z: number, sx: number, sy: number, sz: number, rx: number, ry: number, rz: number, l: number }[] = []
distanceX = 0
for (let i = 0; i < item.dt.bays.length; i++) {
distanceY = this.bottomBarHeight
const bay = item.dt.bays[i]
for (let j = 0; j < bay.levelHeight.length; j++) {
const levelHeight = bay.levelHeight[j]
if (distanceY <= 0) {
if (levelHeight <= 0.005) {
continue
}
hBarMatrix.push({
x: distanceX - rackWidth / 2,
y: distanceY,
y: levelHeight,
z: -rackDepth / 2,
sx: 1,
sy: 0.8,
@ -378,7 +376,7 @@ export default class Rack3dObject extends THREE.Object3D {
})
hBarMatrix.push({
x: distanceX - rackWidth / 2,
y: distanceY,
y: levelHeight,
z: item.dt.rackDepth - rackDepth / 2,
sx: 1,
sy: 0.8,
@ -388,7 +386,7 @@ export default class Rack3dObject extends THREE.Object3D {
rz: 0,
l: bay.bayWidth
})
distanceY += levelHeight
distanceY = levelHeight
}
distanceX += bay.bayWidth
}

1
src/types/Types.d.ts

@ -257,6 +257,7 @@ interface ItemJson extends ItemMetrix {
bays?: {
bayWidth: number,
topHeight: number,
levelHeight: number[]
}[]

Loading…
Cancel
Save