4 changed files with 1440 additions and 4 deletions
@ -0,0 +1,930 @@ |
|||||
|
## 源数据 |
||||
|
```js |
||||
|
const dataFrom = { |
||||
|
"businessMap": [ |
||||
|
{ |
||||
|
"floorName": "默认楼层", |
||||
|
"mapData": [ |
||||
|
{ |
||||
|
"x": 684, |
||||
|
"y": 336.5, |
||||
|
"type": "CODE", |
||||
|
"id": 98, |
||||
|
"direction": [ |
||||
|
"E", |
||||
|
"N" |
||||
|
], |
||||
|
"attribute": [], |
||||
|
"propsValues": [ |
||||
|
"CellTypeGeneralStation", |
||||
|
"CellTaskEnableRack", |
||||
|
"CellTypeCyBoard" |
||||
|
], |
||||
|
"markerType": 1, |
||||
|
"logicX": 6, // 编号是 6_4 |
||||
|
"logicY": 4, |
||||
|
"logicZ": 1, |
||||
|
"zoneId": 1, |
||||
|
"passingVehicle": [ |
||||
|
"CY", |
||||
|
"CLX" |
||||
|
], |
||||
|
"allowPassage": { |
||||
|
"long": 1500, |
||||
|
"width": 1850, |
||||
|
"height": 2000 |
||||
|
}, |
||||
|
"constraints": { |
||||
|
"CL2": [ |
||||
|
1 |
||||
|
], |
||||
|
"CLX": [ |
||||
|
1 |
||||
|
] |
||||
|
}, |
||||
|
"isStartSite": false, |
||||
|
"uniqueName": "198488", |
||||
|
"turningQuadrantConstraints": [], |
||||
|
"rcsPrivate": { |
||||
|
"rackDirection": 3, |
||||
|
"parkingDirection": 0, |
||||
|
"roadway": -1 |
||||
|
}, |
||||
|
"inRoadDir": "W", |
||||
|
"yardDistances": [], |
||||
|
"goodsSlotOrientation": [ |
||||
|
1, |
||||
|
1 |
||||
|
], |
||||
|
"goodsSlotLayerHeight": [ |
||||
|
1, |
||||
|
1210 |
||||
|
], |
||||
|
"goodsSlotId": [ |
||||
|
21, |
||||
|
22 |
||||
|
], |
||||
|
"phyX": 684, |
||||
|
"phyY": 336.5 |
||||
|
}, |
||||
|
{ |
||||
|
"x": 794, |
||||
|
"y": 336.5, |
||||
|
"type": "CODE", |
||||
|
"id": 111, |
||||
|
"direction": [ |
||||
|
"W", |
||||
|
"E", |
||||
|
"N" |
||||
|
], |
||||
|
"attribute": [], |
||||
|
"propsValues": [ |
||||
|
"CellTypeGeneralStation", |
||||
|
"CellTaskEnableRack", |
||||
|
"CellTypeCyBoard" |
||||
|
], |
||||
|
"markerType": 1, |
||||
|
"logicX": 7, |
||||
|
"logicY": 4, |
||||
|
"logicZ": 1, |
||||
|
"zoneId": 1, |
||||
|
"passingVehicle": [ |
||||
|
"CY", |
||||
|
"CLX" |
||||
|
], |
||||
|
"allowPassage": { |
||||
|
"long": 1500, |
||||
|
"width": 1850, |
||||
|
"height": 2000 |
||||
|
}, |
||||
|
"constraints": { |
||||
|
"CL2": [ |
||||
|
1 |
||||
|
], |
||||
|
"CLX": [ |
||||
|
1 |
||||
|
] |
||||
|
}, |
||||
|
"isStartSite": false, |
||||
|
"uniqueName": "224822", |
||||
|
"turningQuadrantConstraints": [], |
||||
|
"rcsPrivate": { |
||||
|
"rackDirection": -1, |
||||
|
"parkingDirection": -1, |
||||
|
"roadway": -1 |
||||
|
}, |
||||
|
"inRoadDir": "W", |
||||
|
"goodsSlotOrientation": [ |
||||
|
1, |
||||
|
1 |
||||
|
], |
||||
|
"goodsSlotLayerHeight": [ |
||||
|
1, |
||||
|
1210 |
||||
|
], |
||||
|
"goodsSlotId": [ |
||||
|
23, |
||||
|
24 |
||||
|
], |
||||
|
"phyX": 794, |
||||
|
"phyY": 336.5, |
||||
|
"yardDistances": [] |
||||
|
}, |
||||
|
{ |
||||
|
"x": 689, |
||||
|
"y": 341.5, |
||||
|
"endX": 799, |
||||
|
"endY": 341.5, |
||||
|
"type": "ROAD", |
||||
|
"lineCm": 1100, // 这是距离,用于计算宽度 |
||||
|
"align": "Y", |
||||
|
"id": 117, |
||||
|
"direction": { |
||||
|
"id": 5, |
||||
|
"label": "右行" |
||||
|
}, |
||||
|
"directionTwo": {}, |
||||
|
"directionGroup": [ // 这是连接,要将 98 和 111 连起来, 98 对应的id= |
||||
|
{ |
||||
|
"forwardDirectType": "TwoWay", |
||||
|
"id": 117, |
||||
|
"startSite": 98, |
||||
|
"endSite": 111 |
||||
|
} |
||||
|
], |
||||
|
"passingVehicle": [ |
||||
|
"CY", |
||||
|
"CLX" |
||||
|
], |
||||
|
"frontSpeed": 1, |
||||
|
"reverseSpeed": 1, |
||||
|
"reverseSpeedNoGoods": 1, |
||||
|
"frontSpeedNoGoods": 1, |
||||
|
"startStrategy": "", |
||||
|
"allowPassage": { |
||||
|
"long": 1500, |
||||
|
"width": 1850, |
||||
|
"height": 2000 |
||||
|
}, |
||||
|
"zoneId": 1, |
||||
|
"propsValues": [], |
||||
|
"additionalWeightBehind": "", |
||||
|
"additionalWeight": "", |
||||
|
"distanceWithoutNavigation": 0.3, |
||||
|
"biasAttr": {}, |
||||
|
"isTwoPath": false, |
||||
|
"constraints": { |
||||
|
"CL2": [ |
||||
|
1 |
||||
|
], |
||||
|
"CLX": [ |
||||
|
1 |
||||
|
] |
||||
|
}, |
||||
|
"isStandard": false, |
||||
|
"posType": "start", |
||||
|
"posDirection": "W" |
||||
|
}, |
||||
|
{ |
||||
|
"x": 1033.5, |
||||
|
"y": 386.5, |
||||
|
"type": "CODE", |
||||
|
"id": 148, |
||||
|
"direction": [ |
||||
|
"N" |
||||
|
], |
||||
|
"attribute": [ |
||||
|
{ |
||||
|
"direction": "C", |
||||
|
"attrName": "货位站点/输送线", |
||||
|
"attrValue": "CellTypePallet", |
||||
|
"attrDetail": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"val": 1, |
||||
|
"clearanceHeight": 630 |
||||
|
} |
||||
|
], |
||||
|
"rackTypeId": 2, // 这是一个地堆点位,对应 toolingData 中的 id 属性 |
||||
|
"isChargingAllowed": "", |
||||
|
"priority": "", |
||||
|
"spaceHeight": 630, |
||||
|
"beamHeight": 0, |
||||
|
"goodsAllocationIds": [ |
||||
|
29 |
||||
|
], |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": -10 |
||||
|
}, |
||||
|
{ |
||||
|
"value": -10 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 0, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 29, |
||||
|
"localNumber": "1-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 980, |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 0, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"linkId": 90, |
||||
|
"goodsSlotStatusCheckHeight": null |
||||
|
} |
||||
|
], |
||||
|
"goodsStackId": 1, |
||||
|
"toolId": 11, |
||||
|
"rack_orientation": 0 |
||||
|
} |
||||
|
], |
||||
|
"propsValues": [ |
||||
|
"CellTypeGeneralStation", |
||||
|
"CellTaskEnableRack", |
||||
|
"CellTypePallet" // 这是一个地堆点位, 再去查看 attribute[0].rackTypeId 看具体是地堆还是货架 |
||||
|
], |
||||
|
"markerType": 1, |
||||
|
"logicX": 105, |
||||
|
"logicY": 105, |
||||
|
"logicZ": 1, |
||||
|
"zoneId": 1, |
||||
|
"passingVehicle": [ |
||||
|
"CY", |
||||
|
"CLX" |
||||
|
], |
||||
|
"allowPassage": { |
||||
|
"long": 1500, |
||||
|
"width": 1850, |
||||
|
"height": 2000 |
||||
|
}, |
||||
|
"constraints": { |
||||
|
"CL2": [ |
||||
|
1 |
||||
|
], |
||||
|
"CLX": [ |
||||
|
1 |
||||
|
] |
||||
|
}, |
||||
|
"isStartSite": false, |
||||
|
"uniqueName": "", |
||||
|
"turningQuadrantConstraints": [], |
||||
|
"rcsPrivate": { |
||||
|
"rackDirection": -1, |
||||
|
"parkingDirection": -1, |
||||
|
"roadway": -1 |
||||
|
}, |
||||
|
"generationDir": "d", // 方向 |
||||
|
"goodsSlotOrientation": [], |
||||
|
"goodsSlotLayerHeight": [], |
||||
|
"goodsSlotId": [], |
||||
|
"needOffset": false, |
||||
|
"CTPStartLogicY": 4, |
||||
|
"phyX": 1033.5, |
||||
|
"phyY": 386.5 |
||||
|
}, |
||||
|
] |
||||
|
} |
||||
|
], |
||||
|
"toolingData": [ |
||||
|
{ |
||||
|
"categoryId": 2, // 地堆 |
||||
|
"uprightWidth": "", |
||||
|
"width": 1200, |
||||
|
"length": 1000, |
||||
|
"categoryName": "地面货位", |
||||
|
"topLayerClearance": 630, |
||||
|
"name": "地堆", |
||||
|
"id": 2, // 地堆类型ID |
||||
|
"layersHeight": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 630, |
||||
|
"layerGoodsAllocationGroup": { |
||||
|
"goodsAllocationNum": 1, |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": -10 |
||||
|
}, |
||||
|
{ |
||||
|
"value": -10 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 0, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 90, |
||||
|
"localNumber": "1-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 980, |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 0, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
], |
||||
|
"distanceToStation": 980, |
||||
|
"mobile": false, |
||||
|
"goodsStackId": 1, |
||||
|
"stacking": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "", |
||||
|
"goodsAllocationNum": 1, |
||||
|
"beamHeight": 0, |
||||
|
"goodsAllocation": { |
||||
|
"goodsPlacementOffset": 0, |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"goodsAllocationWidth": 1200, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 0 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 0 |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"verticalGoodsSlotGroups": { |
||||
|
"v-1": [ |
||||
|
"1-1" |
||||
|
] |
||||
|
}, |
||||
|
"horizontalGoodsSlotGroups": { |
||||
|
"h-1": [ |
||||
|
"1-1" |
||||
|
] |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
"categoryId": 1, |
||||
|
"uprightWidth": 90, |
||||
|
"width": 1000, |
||||
|
"length": 2480, |
||||
|
"categoryName": "货架", |
||||
|
"topLayerClearance": 2000, |
||||
|
"name": "矮层货架", |
||||
|
"id": 15, |
||||
|
"layersHeight": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 1079, |
||||
|
"layerGoodsAllocationGroup": { |
||||
|
"goodsAllocationNum": 2, |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "1-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 1079, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
}, |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "1-2", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-2", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 1079, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"goodsStackId": 1 |
||||
|
}, |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"layerHeight": 1210, |
||||
|
"layerGoodsAllocationGroup": { |
||||
|
"goodsAllocationNum": 2, |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "2-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-2", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1210, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
}, |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "2-2", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-2", |
||||
|
"horizontalGroupId": "h-2", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1210, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"clearance": 2000 |
||||
|
} |
||||
|
], |
||||
|
"positioningMarker": "NONE", |
||||
|
"distanceToStation": 990, |
||||
|
"mobile": false, |
||||
|
"goodsStackId": 1, |
||||
|
"stacking": false, |
||||
|
"slideChute": false, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "", |
||||
|
"rackLegSideOffset": 0, |
||||
|
"rackLegFrontOffset": 0, |
||||
|
"goodsAllocationNum": 2, |
||||
|
"beamHeight": 130, |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"goodsAllocation": { |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"goodsAllocationWidth": 1000, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"verticalGoodsSlotGroups": { |
||||
|
"v-1": [ |
||||
|
"1-1", |
||||
|
"2-1" |
||||
|
], |
||||
|
"v-2": [ |
||||
|
"1-2", |
||||
|
"2-2" |
||||
|
] |
||||
|
}, |
||||
|
"horizontalGoodsSlotGroups": { |
||||
|
"h-1": [ |
||||
|
"1-1", |
||||
|
"1-2" |
||||
|
], |
||||
|
"h-2": [ |
||||
|
"2-1", |
||||
|
"2-2" |
||||
|
] |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
"categoryId": 1, |
||||
|
"uprightWidth": 90, |
||||
|
"width": 1000, |
||||
|
"length": 2480, |
||||
|
"categoryName": "货架", |
||||
|
"topLayerClearance": 2000, |
||||
|
"name": "高层货架", |
||||
|
"id": 19, |
||||
|
"layersHeight": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 2054, |
||||
|
"layerGoodsAllocationGroup": { |
||||
|
"goodsAllocationNum": 2, |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": "", |
||||
|
"id": 95, |
||||
|
"localNumber": "1-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": "", |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": "", |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 2084, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
}, |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": "", |
||||
|
"id": 96, |
||||
|
"localNumber": "1-2", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": "", |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-2", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": "", |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 2084, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"layerHeight": 2185, |
||||
|
"layerGoodsAllocationGroup": { |
||||
|
"goodsAllocationNum": 2, |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": "", |
||||
|
"id": 97, |
||||
|
"localNumber": "2-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": "", |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-2", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 100, |
||||
|
"layerHeight": 2185, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
}, |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": "", |
||||
|
"id": 98, |
||||
|
"localNumber": "2-2", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": "", |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-2", |
||||
|
"horizontalGroupId": "h-2", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 100, |
||||
|
"layerHeight": 2185, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"clearance": 2000 |
||||
|
} |
||||
|
], |
||||
|
"positioningMarker": "NONE", |
||||
|
"distanceToStation": 990, |
||||
|
"mobile": false, |
||||
|
"goodsStackId": "", |
||||
|
"stacking": false, |
||||
|
"slideChute": false, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": "", |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "", |
||||
|
"rackLegSideOffset": 0, |
||||
|
"rackLegFrontOffset": 0, |
||||
|
"goodsAllocationNum": 2, |
||||
|
"beamHeight": 130, |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"goodsAllocation": { |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"goodsAllocationWidth": 1000, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"verticalGoodsSlotGroups": { |
||||
|
"v-1": [ |
||||
|
"1-1", |
||||
|
"2-1" |
||||
|
], |
||||
|
"v-2": [ |
||||
|
"1-2", |
||||
|
"2-2" |
||||
|
] |
||||
|
}, |
||||
|
"horizontalGoodsSlotGroups": { |
||||
|
"h-1": [ |
||||
|
"1-1", |
||||
|
"1-2" |
||||
|
], |
||||
|
"h-2": [ |
||||
|
"2-1", |
||||
|
"2-2" |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
], |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
处理逻辑 |
||||
|
amrIdMap = Map<id, json> |
||||
|
lccMap = Map<`${logicX}_${logicY}`, json> |
||||
|
- 读取 businessMap.mapData 中的每个点, 进行第一次循环迭代 |
||||
|
- 如果 "type" === "CODE", 读取 propsValues 数组 |
||||
|
- 不包含 CellTypePallet 则为 t=way 属性点,id= `${logicX}_${logicY}` |
||||
|
- 包含 CellTypePallet 则查找他的 attribute[0].rackTypeId 属性 |
||||
|
- 如果关联的 toolingData 中的 categoryId === 2 则为 t="gstore" 地堆点位, id= `${logicX}_${logicY}` |
||||
|
- 否则为 t="rack" 货架点位, id= `${logicX}_${logicY}` |
||||
|
- 如果 "type" === "ROAD", 则为点位进行连接, |
||||
|
- 读取 directionGroup 中的 startSite 和 endSite, 连接两个点位 |
||||
|
转换为 |
||||
|
```js |
||||
|
const data = [ |
||||
|
{ |
||||
|
'id': '6_4', |
||||
|
't': 'way', |
||||
|
'v': true, |
||||
|
'logicX': 6, |
||||
|
'logicY': 4, |
||||
|
'tf': [ |
||||
|
[ 1, 0, 0 ], |
||||
|
[ 0, 0, 0 ], |
||||
|
[ 0.25, 0.1, 0.25 ] |
||||
|
], |
||||
|
'dt': { |
||||
|
'qrCode': '198488', |
||||
|
'in': [ '7_4' ], |
||||
|
'out': [ '7_4' ], |
||||
|
'center': [], |
||||
|
'linkStore': [ |
||||
|
{ |
||||
|
'item': 'rack1', |
||||
|
'bay': 0, |
||||
|
'direction': 'up' |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
'id': '7_4', |
||||
|
't': 'way', |
||||
|
'v': true, |
||||
|
'logicX': 7, |
||||
|
'logicY': 4, |
||||
|
'tf': [ |
||||
|
[ 2.1, 0, 0 ], |
||||
|
[ 0, 0, 0 ], |
||||
|
[ 0.25, 0.1, 0.25 ] |
||||
|
], |
||||
|
'dt': { |
||||
|
'qrCode': '224822', |
||||
|
'in': [ '6_4', '8_4' ], |
||||
|
'out': [ '6_4', '8_4' ], |
||||
|
'center': [], |
||||
|
'linkStore': [ |
||||
|
{ |
||||
|
'item': 'rack1', |
||||
|
'bay': 1, |
||||
|
'direction': 'up' |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
``` |
||||
@ -1,6 +1,480 @@ |
|||||
import type Viewport from '@/core/engine/Viewport.ts' |
import type Viewport from '@/core/engine/Viewport.ts' |
||||
|
import AMR_1 from '../../../lcc-map/jx_test/floor/AMR_1.json' |
||||
|
import Decimal from 'decimal.js' |
||||
|
|
||||
export function AmrMapConvert(viewport: Viewport, json: any) { |
export function AmrMapConvertDemo() { |
||||
console.log(json) |
const from: any = AMR_1 |
||||
|
const result = AmrMapConvert(from) |
||||
|
console.log(result) |
||||
debugger |
debugger |
||||
} |
} |
||||
|
|
||||
|
window['AmrMapConvertDemo'] = AmrMapConvertDemo |
||||
|
|
||||
|
// AmrMapConvertDemo()
|
||||
|
|
||||
|
export function AmrMapConvert(from: any): Array<ItemJson> { |
||||
|
const d1000 = new Decimal(1000) |
||||
|
const d100 = new Decimal(100) |
||||
|
const storeType = new Map<number, Object>() |
||||
|
for (const td of from.toolingData) { |
||||
|
if (td.categoryId === 1) { |
||||
|
// 货架
|
||||
|
/* |
||||
|
根据 layersHeight 获取出 |
||||
|
"layersHeight": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 1079, |
||||
|
"layerGoodsAllocationGroup": { |
||||
|
"goodsAllocationNum": 2, |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "1-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 1079, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
}, |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "1-2", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-2", |
||||
|
"horizontalGroupId": "h-1", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1, |
||||
|
"clearance": 1079, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"goodsStackId": 1 |
||||
|
}, |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"layerHeight": 1210, |
||||
|
"layerGoodsAllocationGroup": { |
||||
|
"goodsAllocationNum": 2, |
||||
|
"goodsAllocation": [ |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "2-1", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-1", |
||||
|
"horizontalGroupId": "h-2", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1210, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
}, |
||||
|
{ |
||||
|
"isSelected": false, |
||||
|
"gaps": [ |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
}, |
||||
|
{ |
||||
|
"value": 100 |
||||
|
} |
||||
|
], |
||||
|
"goodsPlacementOffset": 100, |
||||
|
"goodsStackId": 1, |
||||
|
"id": 98, |
||||
|
"localNumber": "2-2", |
||||
|
"goodsSlotFeatureType": "Default", |
||||
|
"distanceToStation": 990, |
||||
|
"goodsSlotFeatureHeight": "", |
||||
|
"boxMarkerOffsetToBottom": 0, |
||||
|
"goodsSlotTelescopicDistanceToDetectFeature": "", |
||||
|
"verticalGroupId": "v-2", |
||||
|
"horizontalGroupId": "h-2", |
||||
|
"displayNumber": "", |
||||
|
"beamHeight": 130, |
||||
|
"layerHeight": 1210, |
||||
|
"clearance": 2000, |
||||
|
"width": 1000, |
||||
|
"orientation": [], |
||||
|
"slideChute": false, |
||||
|
"heightOverGoodsSlotWhenPut": null, |
||||
|
"heightOverGoodsSlotWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenGet": null, |
||||
|
"heightGapBetweenForkAndGoodsWhenPut": null, |
||||
|
"goodsSlotPillarHeight": null, |
||||
|
"goodsSlotStatusCheckHeight": "" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"clearance": 2000 |
||||
|
} |
||||
|
], |
||||
|
*/ |
||||
|
const rackDepth = new Decimal(td.width).div(d1000).toNumber() |
||||
|
const levelHeight = td.layersHeight.map((lh: any) => new Decimal(lh.layerHeight).div(d1000).toNumber()) |
||||
|
const levelCount = levelHeight.length |
||||
|
const width = new Decimal(td.length).div(td.goodsAllocationNum).div(d1000).toNumber() |
||||
|
storeType.set(td.id, { |
||||
|
't': 'rack', |
||||
|
'v': true, |
||||
|
'tf': [ |
||||
|
[0, 0, 0], |
||||
|
[0, 0, 0], |
||||
|
[width, 1.211, rackDepth] |
||||
|
], |
||||
|
'dt': { |
||||
|
'rackDepth': rackDepth, |
||||
|
'bottomBarHeight': 0.2, |
||||
|
'bottomLinkHeight': 0.2, |
||||
|
'topLinkDistance': 0.2, |
||||
|
'levelCount': levelCount, |
||||
|
'bayCount': 1, |
||||
|
'hideFloor': 0, |
||||
|
'extendColumns': 1, |
||||
|
'columnSpacing': 1, |
||||
|
'bays': [ |
||||
|
{ |
||||
|
'bayWidth': width, |
||||
|
'levelHeight': levelHeight, |
||||
|
'topHeight': 2 |
||||
|
} |
||||
|
], |
||||
|
'center': [], |
||||
|
'in': [], |
||||
|
'out': [], |
||||
|
'rackWidth': width, |
||||
|
'rackHeight': 1.211 |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
} else if (td.categoryId === 2) { |
||||
|
// 地堆
|
||||
|
storeType.set(td.id, { |
||||
|
't': 'gstore', |
||||
|
'v': true, |
||||
|
'tf': [ |
||||
|
[0, 0, 0], |
||||
|
[0, 0, 0], |
||||
|
[new Decimal(td.width).div(d1000).toNumber(), 0.01, new Decimal(td.length).div(d1000).toNumber()] |
||||
|
], |
||||
|
'dt': { |
||||
|
'in': [], |
||||
|
'out': [], |
||||
|
'center': [], |
||||
|
'strokeWidth': 0.1 |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// ====================== 第一次循环,建立点位 =========================
|
||||
|
const amrIdMap = new Map<number, any>() |
||||
|
const lccMap = new Map<string, any>() |
||||
|
let maxX = NaN, maxY = NaN, minX = NaN, minY = NaN |
||||
|
for (const amrNode of from.businessMap[0].mapData) { |
||||
|
amrIdMap.set(amrNode.id, amrNode) |
||||
|
const lccId = amrNode.logicX + '_' + amrNode.logicY |
||||
|
// if (lccId === '105_105') {
|
||||
|
// debugger
|
||||
|
// }
|
||||
|
let insertNode: any = null |
||||
|
if (amrNode.type === 'CODE') { |
||||
|
if (isStorePos(amrNode)) { |
||||
|
// =================== 这是一个存储位 =====================
|
||||
|
const rackTypeId = amrNode.attribute[0].rackTypeId |
||||
|
insertNode = { |
||||
|
'id': lccId, |
||||
|
..._.cloneDeep(storeType.get(rackTypeId)) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} else { |
||||
|
// =================== 这是一个路标 =====================
|
||||
|
insertNode = { |
||||
|
'id': lccId, 't': 'way', 'v': true, |
||||
|
'tf': [ |
||||
|
[0, 0, 0], |
||||
|
[0, 0, 0], |
||||
|
[0.25, 0.1, 0.25] |
||||
|
], |
||||
|
'dt': { |
||||
|
'qrCode': amrNode.uniqueName, |
||||
|
'in': [], |
||||
|
'out': [], |
||||
|
'center': [] |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 旋转站
|
||||
|
if (_.findIndex(amrNode.propsValues, v => v === 'CellTypePallet') >= 0) { |
||||
|
// 这是一个旋转站, 读取 constraints 所有的 key
|
||||
|
const agvRotation = [] |
||||
|
for (const key of Object.keys(amrNode.constraints)) { |
||||
|
agvRotation.push(key) |
||||
|
} |
||||
|
if (agvRotation.length > 0) { |
||||
|
lccMap.get(lccId).dt.agvRotation = agvRotation |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (insertNode) { |
||||
|
insertNode.originId = amrNode.id |
||||
|
insertNode.tf[0][0] = new Decimal(amrNode.x).div(d100).toNumber() |
||||
|
insertNode.tf[0][2] = new Decimal(amrNode.y).div(d100).toNumber() |
||||
|
insertNode.logicX = amrNode.logicX |
||||
|
insertNode.logicY = amrNode.logicY |
||||
|
|
||||
|
if (isNaN(maxX) || insertNode.tf[0][0] > maxX) { |
||||
|
maxX = insertNode.tf[0][0] |
||||
|
} |
||||
|
if (isNaN(maxY) || insertNode.tf[0][2] > maxY) { |
||||
|
maxY = insertNode.tf[0][2] |
||||
|
} |
||||
|
if (isNaN(minX) || insertNode.tf[0][0] < minX) { |
||||
|
minX = insertNode.tf[0][0] |
||||
|
} |
||||
|
if (isNaN(minY) || insertNode.tf[0][2] < minY) { |
||||
|
minY = insertNode.tf[0][2] |
||||
|
} |
||||
|
lccMap.set(lccId, insertNode) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// ====================== 第二次循环,建立点位关联 =========================
|
||||
|
for (const amrNode of from.businessMap[0].mapData) { |
||||
|
if (amrNode.type !== 'ROAD') { |
||||
|
continue |
||||
|
} |
||||
|
for (const dg of amrNode.directionGroup) { |
||||
|
// 从 dg.startSite 和 dg.endSite 中获取对应的点位
|
||||
|
const startNode = amrIdMap.get(dg.startSite) |
||||
|
const endNode = amrIdMap.get(dg.endSite) |
||||
|
|
||||
|
if (!startNode || !endNode) { |
||||
|
console.warn('未找到起点或终点节点', dg.startSite, dg.endSite) |
||||
|
continue |
||||
|
} |
||||
|
|
||||
|
const startLccId = startNode.logicX + '_' + startNode.logicY |
||||
|
const endLccId = endNode.logicX + '_' + endNode.logicY |
||||
|
if (!lccMap.get(startLccId) || !lccMap.get(endLccId)) { |
||||
|
console.warn('未找到起点或终点 LCC 节点', startLccId, endLccId) |
||||
|
continue |
||||
|
} |
||||
|
|
||||
|
if (lccMap.get(startLccId).t === 'way' && lccMap.get(endLccId).t === 'way') { |
||||
|
// 起点和终点都是路标
|
||||
|
lccMap.get(startLccId).dt.in.push(endLccId) |
||||
|
lccMap.get(startLccId).dt.out.push(endLccId) |
||||
|
lccMap.get(endLccId).dt.in.push(startLccId) |
||||
|
lccMap.get(endLccId).dt.out.push(startLccId) |
||||
|
|
||||
|
} else if (lccMap.get(startLccId).t === 'way' && |
||||
|
(lccMap.get(endLccId).t === 'rack' || lccMap.get(endLccId).t === 'gstore')) { |
||||
|
// 起点是路标,终点是存储位
|
||||
|
if (!lccMap.get(startLccId).dt.linkStore) { |
||||
|
lccMap.get(startLccId).dt.linkStore = [] |
||||
|
} |
||||
|
const direction = convertAmrDirectToLinkStoreDirection(amrNode.direction?.id) |
||||
|
if (_.isArray(lccMap.get(endLccId).dt.bays?.[0]?.levelHeight)) { |
||||
|
for (let i = 0; i < lccMap.get(endLccId).dt.bays[0].levelHeight.length; i++) { |
||||
|
lccMap.get(startLccId).dt.linkStore.push({ |
||||
|
'item': endLccId, |
||||
|
'bay': 0, |
||||
|
'level': i, |
||||
|
'cell': 0, |
||||
|
'direction': direction |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
} else { |
||||
|
lccMap.get(startLccId).dt.linkStore.push({ |
||||
|
'item': endLccId, |
||||
|
'bay': 0, |
||||
|
'level': 0, |
||||
|
'cell': 0, |
||||
|
'direction': direction |
||||
|
}) |
||||
|
} |
||||
|
convertLinkStoreDistance(direction, lccMap.get(endLccId)) |
||||
|
|
||||
|
} else if (lccMap.get(endLccId).t === 'way' && |
||||
|
(lccMap.get(endLccId).t === 'rack' || lccMap.get(endLccId).t === 'gstore')) { |
||||
|
// 终点是路标,起点是存储位
|
||||
|
if (!lccMap.get(endLccId).dt.linkStore) { |
||||
|
lccMap.get(endLccId).dt.linkStore = [] |
||||
|
} |
||||
|
const direction = convertAmrDirectToLinkStoreDirection(amrNode.direction?.id) |
||||
|
if (_.isArray(lccMap.get(startLccId).dt.bays?.[0]?.levelHeight)) { |
||||
|
for (let i = 0; i < lccMap.get(startLccId).dt.bays[0].levelHeight.length; i++) { |
||||
|
lccMap.get(endLccId).dt.linkStore.push({ |
||||
|
'item': startLccId, |
||||
|
'bay': 0, |
||||
|
'level': i, |
||||
|
'cell': 0, |
||||
|
'direction': direction |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
} else { |
||||
|
lccMap.get(endLccId).dt.linkStore.push({ |
||||
|
'item': startLccId, |
||||
|
'bay': 0, |
||||
|
'level': 0, |
||||
|
'cell': 0, |
||||
|
'direction': direction |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
convertLinkStoreDistance(direction, lccMap.get(startLccId)) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// ====================== 第三次循环,将所有点位移动到画面中心 =========================
|
||||
|
const centerX = new Decimal((maxX + minX) / 2).toNumber() |
||||
|
const centerY = new Decimal((maxY + minY) / 2).toNumber() |
||||
|
for (const entry of lccMap.entries()) { |
||||
|
const node = entry[1] |
||||
|
if (node.tf) { |
||||
|
node.tf[0][0] = new Decimal(node.tf[0][0]).minus(centerX).toNumber() |
||||
|
node.tf[0][2] = new Decimal(node.tf[0][2]).minus(centerY).toNumber() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const planObj: Object = {} |
||||
|
for (const entry of lccMap.entries()) { |
||||
|
planObj[entry[0]] = entry[1] |
||||
|
} |
||||
|
// console.log(planObj)
|
||||
|
// debugger
|
||||
|
return Object.values(planObj) as Array<ItemJson> |
||||
|
} |
||||
|
|
||||
|
// 将 AMR 的方向转换为 LinkStore 的方向
|
||||
|
function convertAmrDirectToLinkStoreDirection(direct: number): string { |
||||
|
if (direct === 1) { |
||||
|
return 'up' |
||||
|
} else if (direct === 2) { |
||||
|
return 'down' |
||||
|
} else if (direct === 3) { |
||||
|
return 'right' |
||||
|
} else if (direct === 4) { |
||||
|
return 'left' |
||||
|
} else { |
||||
|
throw new Error('未知的方向: ' + direct) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 判断点位是否为存储位
|
||||
|
function isStorePos(amrNode: any) { |
||||
|
return (_.findIndex(amrNode.propsValues, v => v === 'CellTypePallet') >= 0) |
||||
|
} |
||||
|
|
||||
|
// 根据方向,调整存储位的距离
|
||||
|
function convertLinkStoreDistance(direction: string, storeNode: any) { |
||||
|
if (direction === 'up') { |
||||
|
storeNode.tf[0][2] -= 0.5 |
||||
|
|
||||
|
} else if (direction === 'down') { |
||||
|
storeNode.tf[0][2] += 0.5 |
||||
|
|
||||
|
} else if (direction === 'left') { |
||||
|
storeNode.tf[0][0] -= 0.5 |
||||
|
storeNode.tf[1][1] = 90 // 90 度旋转
|
||||
|
|
||||
|
} else if (direction === 'right') { |
||||
|
storeNode.tf[0][0] += 0.5 |
||||
|
storeNode.tf[1][1] = 90 // 90 度旋转
|
||||
|
} |
||||
|
} |
||||
|
|||||
Loading…
Reference in new issue