|
@@ -176,10 +176,9 @@ export default {
|
|
|
toScaleX = 0
|
|
|
}
|
|
|
|
|
|
-
|
|
|
if(isAnimate){//需要动画
|
|
|
- // console.log("墙体动画----", tx, tz, scaleX,toPx, toPz, toScaleX,);
|
|
|
- // console.log("墙体动画----", scaleX, toScaleX, wallObj.wallScaleX, wallObj);
|
|
|
+ // console.log("墙体动画1----", tx, tz, scaleX,toPx, toPz, toScaleX,);
|
|
|
+ // console.log("墙体动画2----", scaleX, toScaleX, wallObj.wallScaleX, wallObj);
|
|
|
//初始形变值
|
|
|
let spaceInitMatrix = [];//记录下动画创建时的初始变换矩阵
|
|
|
wallObj.instancedMeshIndexList.forEach(item=>{
|
|
@@ -279,7 +278,7 @@ export default {
|
|
|
item.uniId = Date.now() + index;//唯一标识
|
|
|
//获取墙体对应的gltb模型的相关信息
|
|
|
let modelTypeItem = wallType.find(it=>it.type == item.wallModelData.wallType) //wallType[item.wallModelData.wallType];
|
|
|
-
|
|
|
+ console.log("取墙体对应的gltb模型的相关信息", modelTypeItem, item);
|
|
|
let object = realWallArr.find(it=>it.index==item.wallModelData.wallType);
|
|
|
//列表中还没有这个数据
|
|
|
if(!object){
|
|
@@ -596,7 +595,6 @@ export default {
|
|
|
|
|
|
item.wallModelData[1].wallWidth = newWallType.width;
|
|
|
if(newWallType != curWallType){ // 新模型
|
|
|
- console.log("添加新模型")
|
|
|
item.wallModelData[1].willCurWallType = newWallType.type;
|
|
|
item.wallModelData[1].lastWallType = curWallType.type;
|
|
|
|
|
@@ -707,193 +705,406 @@ export default {
|
|
|
console.log("没有缩放墙体")
|
|
|
}
|
|
|
// 判断是否有下一级
|
|
|
-
|
|
|
- item.wallModelData.forEach((modelItem,index)=>{//每个墙壁下的位置计算
|
|
|
- // 默认空间中心点
|
|
|
- let wallPositionX = spaceObj.centerX / 100;
|
|
|
- let wallPositionY = spaceObj.centerY / 100;
|
|
|
- let wallRotateY = 0;
|
|
|
-
|
|
|
- let wallHeight = 10;//item.wallHeight // 墙体厚度模型10cm
|
|
|
- if(wallDirection=="N"){
|
|
|
- wallPositionY = wallPositionY *-1 - spaceObj.spaceHeight / 2 / scale;
|
|
|
- let wallHeight2 = wallHeight / 2 / scale;
|
|
|
- wallPositionY = wallPositionY + wallHeight2;
|
|
|
+ if((direction=="S" && wallDirection !="S") || (direction =="W" && wallDirection !="W")){ // 处理不同面的墙体,
|
|
|
+ item.wallModelData.forEach((modelItem,index)=>{//每个墙壁下的位置计算
|
|
|
+ // 默认空间中心点
|
|
|
+ let wallPositionX = spaceObj.centerX / 100;
|
|
|
+ let wallPositionY = spaceObj.centerY / 100;
|
|
|
+ let wallRotateY = 0;
|
|
|
|
|
|
- }
|
|
|
- else if(wallDirection=="S"){
|
|
|
- wallPositionY = wallPositionY *-1 + spaceObj.spaceHeight / 2 / scale;
|
|
|
- let wallHeight2 = wallHeight / 2 / scale;
|
|
|
- wallPositionY = wallPositionY - wallHeight2;
|
|
|
- }
|
|
|
- if(wallDirection=="E"){
|
|
|
- // console.log("模型参数", wallPositionX, spaceObj.spaceWidth)
|
|
|
- wallPositionY = wallPositionY * -1;
|
|
|
- wallPositionX = wallPositionX + spaceObj.spaceWidth / 2 / scale;
|
|
|
- let wallHeight2 = wallHeight / 2 / scale;
|
|
|
- wallPositionX = wallPositionX - wallHeight2; // 减去墙体本身的厚度
|
|
|
- wallRotateY = Math.PI/2; // 东西墙 模型旋转90度
|
|
|
- }else if(wallDirection=="W"){
|
|
|
- wallPositionY = wallPositionY *-1;
|
|
|
- wallPositionX = wallPositionX - spaceObj.spaceWidth / 2 / scale;
|
|
|
- let wallHeight2 = wallHeight / 2 / scale;
|
|
|
- wallPositionX = wallPositionX + wallHeight2; // 减去墙体本身的厚度
|
|
|
- wallRotateY = Math.PI/2; // 东西墙 模型旋转90度
|
|
|
- }
|
|
|
- let wallScaleX = 1;
|
|
|
- let wallScaleY = 1;
|
|
|
- let modelWidth = 10;
|
|
|
- if(modelItem.wallType == '7') {
|
|
|
- modelWidth = 150
|
|
|
- }else if(modelItem.wallType == '21'){
|
|
|
- modelWidth = 100
|
|
|
- }else if(modelItem.wallType == '22'){
|
|
|
- modelWidth = 200
|
|
|
- }else if(modelItem.wallType == '23'){
|
|
|
- modelWidth = 300
|
|
|
- }else if(modelItem.wallType == '24'){
|
|
|
- modelWidth = 400
|
|
|
- }else if(modelItem.wallType == '25'){
|
|
|
- modelWidth = 500
|
|
|
- }else if(modelItem.wallType == '26'){
|
|
|
- modelWidth = 600
|
|
|
- }
|
|
|
- let tmdWidth = modelItem.wallWidth;//记录
|
|
|
- // console.log("XXXXXXXXXXXXXXXX", modelWidth, spaceObj)
|
|
|
- let wallWidth = 0; // 墙体宽度
|
|
|
- // 计算墙体的 X Y W H
|
|
|
- //说明该面墙壁只使用了一个模型-独占形式
|
|
|
- if(modelItem.isStepAsideTopRight == 'true' && modelItem.isStepAsideBottomLeft == 'true'){
|
|
|
- if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
- wallScaleX = spaceObj.spaceWidth / modelWidth;
|
|
|
- }else{//东西
|
|
|
- wallScaleX = spaceObj.spaceHeight / modelWidth;
|
|
|
+ let wallHeight = 10;//item.wallHeight // 墙体厚度模型10cm
|
|
|
+ if(wallDirection=="N"){
|
|
|
+ wallPositionY = wallPositionY *-1 - spaceObj.spaceHeight / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionY = wallPositionY + wallHeight2;
|
|
|
+
|
|
|
}
|
|
|
- if((parseInt(modelItem.wallType) >=21 && parseInt(modelItem.wallType) <=26) || parseInt(modelItem.wallType)== 7){
|
|
|
- }else{
|
|
|
- modelItem.wallWidth = wallScaleX * modelWidth; // 解决模型行拉伸定位问题, 先注释
|
|
|
+ else if(wallDirection=="S"){
|
|
|
+ wallPositionY = wallPositionY *-1 + spaceObj.spaceHeight / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionY = wallPositionY - wallHeight2;
|
|
|
}
|
|
|
-
|
|
|
- }else{//墙面是多端墙体组合而成的
|
|
|
- if(modelItem.isFixedWidth == 'true'){//该墙体锁定宽度-即不可缩放
|
|
|
- wallWidth = modelItem.wallWidth; // 墙体宽度
|
|
|
- // console.log("模型的尺寸",wallWidth, spaceObj.spaceWidth, spaceObj.centerX)
|
|
|
- //起始墙体-南北从左侧算,东西则从上侧计算
|
|
|
- if(modelItem.isStepAsideBottomLeft == 'true' || modelItem.isStepAsideTopRight == 'true'){
|
|
|
+ if(wallDirection=="E"){
|
|
|
+ // console.log("模型参数", wallPositionX, spaceObj.spaceWidth)
|
|
|
+ wallPositionY = wallPositionY * -1;
|
|
|
+ wallPositionX = wallPositionX + spaceObj.spaceWidth / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionX = wallPositionX - wallHeight2; // 减去墙体本身的厚度
|
|
|
+ wallRotateY = Math.PI/2; // 东西墙 模型旋转90度
|
|
|
+ }else if(wallDirection=="W"){
|
|
|
+ wallPositionY = wallPositionY *-1;
|
|
|
+ wallPositionX = wallPositionX - spaceObj.spaceWidth / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionX = wallPositionX + wallHeight2; // 减去墙体本身的厚度
|
|
|
+ wallRotateY = Math.PI/2; // 东西墙 模型旋转90度
|
|
|
+ }
|
|
|
+ let wallScaleX = modelItem.wallScaleX;
|
|
|
+ let wallScaleY = 1;
|
|
|
+ let modelWidth = 10;
|
|
|
+ if(modelItem.wallType == '7') {
|
|
|
+ modelWidth = 150
|
|
|
+ }else if(modelItem.wallType == '21'){
|
|
|
+ modelWidth = 100
|
|
|
+ }else if(modelItem.wallType == '22'){
|
|
|
+ modelWidth = 200
|
|
|
+ }else if(modelItem.wallType == '23'){
|
|
|
+ modelWidth = 300
|
|
|
+ }else if(modelItem.wallType == '24'){
|
|
|
+ modelWidth = 400
|
|
|
+ }else if(modelItem.wallType == '25'){
|
|
|
+ modelWidth = 500
|
|
|
+ }else if(modelItem.wallType == '26'){
|
|
|
+ modelWidth = 600
|
|
|
+ }
|
|
|
+ let tmdWidth = modelItem.wallWidth;//记录
|
|
|
+ // console.log("XXXXXXXXXXXXXXXX", modelWidth, spaceObj)
|
|
|
+ let wallWidth = 0; // 墙体宽度
|
|
|
+ // 计算墙体的 X Y W H
|
|
|
+ //说明该面墙壁只使用了一个模型-独占形式
|
|
|
+ if(modelItem.isStepAsideTopRight == 'true' && modelItem.isStepAsideBottomLeft == 'true'){
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallScaleX = spaceObj.spaceWidth / modelWidth;
|
|
|
+ }else{//东西
|
|
|
+ wallScaleX = spaceObj.spaceHeight / modelWidth;
|
|
|
+ }
|
|
|
+ if((parseInt(modelItem.wallType) >=21 && parseInt(modelItem.wallType) <=26) || parseInt(modelItem.wallType)== 7){
|
|
|
+ }else{
|
|
|
+ modelItem.wallWidth = wallScaleX * modelWidth; // 解决模型行拉伸定位问题, 先注释
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{//墙面是多端墙体组合而成的
|
|
|
+ if(modelItem.isFixedWidth == 'true'){//该墙体锁定宽度-即不可缩放
|
|
|
+ wallWidth = modelItem.wallWidth; // 墙体宽度
|
|
|
+ // console.log("模型的尺寸",wallWidth, spaceObj.spaceWidth, spaceObj.centerX)
|
|
|
+ //起始墙体-南北从左侧算,东西则从上侧计算
|
|
|
+ if(modelItem.isStepAsideBottomLeft == 'true' || modelItem.isStepAsideTopRight == 'true'){
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallPositionX = spaceObj.centerX - (spaceObj.spaceWidth - wallWidth) / 2;
|
|
|
+ wallPositionX = wallPositionX / scale; // 转换成m
|
|
|
+ }else{
|
|
|
+ wallPositionY = -spaceObj.centerY - (spaceObj.spaceHeight - wallWidth) / 2;
|
|
|
+ wallPositionY = wallPositionY / scale; // 转换成m
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallPositionX = lastWallPosition + (wallWidth / 2 / scale);
|
|
|
+ }else{
|
|
|
+ wallPositionY = lastWallPosition + (wallWidth / 2 / scale);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // console.log("模型的尺寸",wallWidth, wallPositionX)
|
|
|
+ if(modelItem.wallType == 0){
|
|
|
+ wallScaleX = modelItem.wallWidth / wallHeight;
|
|
|
+ }else{
|
|
|
+ console.log("墙体模型的缩放", spaceObj.spaceId,wallDirection, modelItem);
|
|
|
+ // if(!moveOut){
|
|
|
+ const curWallType = wallType.find(it=>it.type == modelItem.wallType)
|
|
|
+ wallScaleX = modelItem.wallWidth / curWallType.width;
|
|
|
+
|
|
|
+ console.log("墙体模型的缩小", modelItem,direction,wallDirection);
|
|
|
+ // }else{
|
|
|
+ // console.log("墙体模型的放大", wallScaleX);
|
|
|
+ // }
|
|
|
+
|
|
|
+ }
|
|
|
+ //计算当前墙体占据的整面墙体的大小-方便下一段墙体的计算
|
|
|
if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
- wallPositionX = spaceObj.centerX - (spaceObj.spaceWidth - wallWidth) / 2;
|
|
|
- wallPositionX = wallPositionX / scale; // 转换成m
|
|
|
+ lastWallPosition = wallPositionX + wallWidth / 2 / scale;
|
|
|
}else{
|
|
|
- wallPositionY = -spaceObj.centerY - (spaceObj.spaceHeight - wallWidth) / 2;
|
|
|
- wallPositionY = wallPositionY / scale; // 转换成m
|
|
|
+ lastWallPosition = wallPositionY + wallWidth / 2 / scale;
|
|
|
}
|
|
|
- }else{
|
|
|
+ // wallPositionY = 1;
|
|
|
+ }else{//可变墙体-UE编辑器通常把它放到最后一段墙体
|
|
|
+ wallWidth = 0;
|
|
|
+ //墙体的宽度是计算得出的
|
|
|
if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
- wallPositionX = lastWallPosition + (wallWidth / 2 / scale);
|
|
|
+ wallWidth = (spaceObj.centerX + spaceObj.spaceWidth / 2) - lastWallPosition * scale; // 墙体宽度
|
|
|
+ // console.log("最后一个模型",spaceObj.centerX, spaceObj.spaceWidth / 2, lastWallPosition)
|
|
|
}else{
|
|
|
- wallPositionY = lastWallPosition + (wallWidth / 2 / scale);
|
|
|
+ wallWidth = (-spaceObj.centerY + spaceObj.spaceHeight / 2) - lastWallPosition * scale; // 墙体宽度
|
|
|
}
|
|
|
+ wallWidth = wallWidth / scale; // cm转换成m
|
|
|
+ if(modelItem.wallType == 0){
|
|
|
+ wallScaleX = wallWidth * wallHeight;
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallPositionX = lastWallPosition + wallWidth / 2;
|
|
|
+ }else{
|
|
|
+ wallPositionY = lastWallPosition + wallWidth / 2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ modelItem.wallWidth = wallWidth*scale;//确保单位一致
|
|
|
+ // wallPositionY = 1;
|
|
|
}
|
|
|
- // console.log("模型的尺寸",wallWidth, wallPositionX)
|
|
|
- if(modelItem.wallType == 0){
|
|
|
- wallScaleX = modelItem.wallWidth / wallHeight;
|
|
|
- }else{
|
|
|
- console.log("墙体模型的缩放", spaceObj.spaceId,wallDirection, modelItem);
|
|
|
- // if(!moveOut){
|
|
|
- const curWallType = wallType.find(it=>it.type == modelItem.wallType)
|
|
|
- wallScaleX = modelItem.wallWidth / curWallType.width;
|
|
|
- console.log("墙体模型的缩小", wallScaleX);
|
|
|
- // }else{
|
|
|
- // console.log("墙体模型的放大", wallScaleX);
|
|
|
- // }
|
|
|
-
|
|
|
- }
|
|
|
- //计算当前墙体占据的整面墙体的大小-方便下一段墙体的计算
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ console.log("移动墙体模型-空间信息", spaceObj.spaceWidth, spaceObj.centerX, spaceObj.centerY, spaceObj)
|
|
|
+ console.log("移动墙体模型-墙体信息",spaceObj.spaceId,direction, wallDirection, modelItem.wallType, wallWidth, this.wallList)
|
|
|
+ //计算得出墙体相应的位置和变形属性
|
|
|
+ modelItem.wallPositionX = wallPositionX;
|
|
|
+ modelItem.wallPositionY = wallPositionY;
|
|
|
+ modelItem.wallScaleX = wallScaleX;
|
|
|
+ modelItem.wallScaleY = wallScaleY;
|
|
|
+
|
|
|
+ modelItem.wallRotateY = wallRotateY;
|
|
|
+ modelItem.wallWidth = wallWidth;
|
|
|
+
|
|
|
+
|
|
|
+ if(modelItem.wallType == 2){
|
|
|
+ console.log("移动墙体模型-空间信息1", modelItem, this.gltfWalls)
|
|
|
+
|
|
|
+ }
|
|
|
+ // 更新数据
|
|
|
+ if(isComputeWall || direction == wallDirection){
|
|
|
+
|
|
|
+ this.gltfWalls.forEach(gltfItem=>{
|
|
|
+ if(gltfItem.spaceId == spaceObj.spaceId && wallDirection == gltfItem.wallDirection && modelItem.id == gltfItem.wallModelData.id ){
|
|
|
+
|
|
|
+ gltfItem.wallModelData = JSON.parse(JSON.stringify(modelItem));
|
|
|
+ gltfItem.willCurWallType = modelItem.willCurWallType
|
|
|
+ console.log("墙体更新", gltfItem.willCurWallType, direction)
|
|
|
+ if(gltfItem.wallModelData.wallType != 0){
|
|
|
+ gltfItem.isDidWall = isCreateNewWall;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if(modelItem.wallType == 2){
|
|
|
+ console.log("移动墙体模型-墙体信息1++++++++",spaceObj.spaceId, direction, wallDirection, isComputeWall, modelItem,this.gltfWalls)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //数据更新到wallList中,确保数据一致性
|
|
|
+ this.wallList.forEach(wallItem=>{
|
|
|
+ const walls = JSON.parse(wallItem.wallJson);
|
|
|
+ // console.log("墙体数据2----------", walls, modelItem);
|
|
|
+ walls.wallData.forEach(wall=>{
|
|
|
+ wall.wallModelData.forEach(wallmodel=>{
|
|
|
+ //从wallList找到这段墙体
|
|
|
+ if(wall.wallDirection == wallDirection && wallmodel.id == modelItem.id && walls.spaceId == spaceObj.spaceId){
|
|
|
+
|
|
|
+ if(wallmodel.wallType == 0 && wallmodel.isFixedWidth == 'true'){
|
|
|
+ wallmodel.wallWidth = modelItem.wallWidth;
|
|
|
+ console.log("墙体数据31----实体墙------",spaceObj.spaceId, modelItem.wallWidth, modelItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(wallmodel.wallType != 0){
|
|
|
+ wallmodel.wallWidth = modelItem.wallWidth;
|
|
|
+ const curWallType = wallType.find(it=>it.type == modelItem.willCurWallType)
|
|
|
+ if(curWallType){
|
|
|
+ wallmodel.wallType = curWallType.type;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ wallItem.wallJson = JSON.stringify(walls);
|
|
|
+ })
|
|
|
+ if(modelItem.wallType == 2){
|
|
|
+ console.log("移动墙体模型-墙体信息2++++++++",spaceObj.spaceId, direction, wallDirection, isComputeWall, modelItem,this.wallList)
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ }else{
|
|
|
+ console.log("同面墙体只移动位置", direction, wallDirection)
|
|
|
+ item.wallModelData.forEach((modelItem,index)=>{//每个墙壁下的位置计算
|
|
|
+ // 默认空间中心点
|
|
|
+ let wallPositionX = spaceObj.centerX / 100;
|
|
|
+ let wallPositionY = spaceObj.centerY / 100;
|
|
|
+ let wallRotateY = 0;
|
|
|
+
|
|
|
+ let wallHeight = 10;//item.wallHeight // 墙体厚度模型10cm
|
|
|
+ if(wallDirection=="N"){
|
|
|
+ wallPositionY = wallPositionY *-1 - spaceObj.spaceHeight / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionY = wallPositionY + wallHeight2;
|
|
|
+
|
|
|
+ }
|
|
|
+ else if(wallDirection=="S"){
|
|
|
+ wallPositionY = wallPositionY *-1 + spaceObj.spaceHeight / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionY = wallPositionY - wallHeight2;
|
|
|
+ }
|
|
|
+ if(wallDirection=="E"){
|
|
|
+ // console.log("模型参数", wallPositionX, spaceObj.spaceWidth)
|
|
|
+ wallPositionY = wallPositionY * -1;
|
|
|
+ wallPositionX = wallPositionX + spaceObj.spaceWidth / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionX = wallPositionX - wallHeight2; // 减去墙体本身的厚度
|
|
|
+ wallRotateY = Math.PI/2; // 东西墙 模型旋转90度
|
|
|
+ }else if(wallDirection=="W"){
|
|
|
+ wallPositionY = wallPositionY *-1;
|
|
|
+ wallPositionX = wallPositionX - spaceObj.spaceWidth / 2 / scale;
|
|
|
+ let wallHeight2 = wallHeight / 2 / scale;
|
|
|
+ wallPositionX = wallPositionX + wallHeight2; // 减去墙体本身的厚度
|
|
|
+ wallRotateY = Math.PI/2; // 东西墙 模型旋转90度
|
|
|
+ }
|
|
|
+ let wallScaleX = modelItem.wallScaleX;
|
|
|
+ let wallScaleY = 1;
|
|
|
+ let modelWidth = 10;
|
|
|
+ if(modelItem.wallType == '7') {
|
|
|
+ modelWidth = 150
|
|
|
+ }else if(modelItem.wallType == '21'){
|
|
|
+ modelWidth = 100
|
|
|
+ }else if(modelItem.wallType == '22'){
|
|
|
+ modelWidth = 200
|
|
|
+ }else if(modelItem.wallType == '23'){
|
|
|
+ modelWidth = 300
|
|
|
+ }else if(modelItem.wallType == '24'){
|
|
|
+ modelWidth = 400
|
|
|
+ }else if(modelItem.wallType == '25'){
|
|
|
+ modelWidth = 500
|
|
|
+ }else if(modelItem.wallType == '26'){
|
|
|
+ modelWidth = 600
|
|
|
+ }
|
|
|
+ let tmdWidth = modelItem.wallWidth;//记录
|
|
|
+ // console.log("XXXXXXXXXXXXXXXX", modelWidth, spaceObj)
|
|
|
+ let wallWidth = 0; // 墙体宽度
|
|
|
+ // 计算墙体的 X Y W H
|
|
|
+ //说明该面墙壁只使用了一个模型-独占形式
|
|
|
+ if(modelItem.isStepAsideTopRight == 'true' && modelItem.isStepAsideBottomLeft == 'true'){
|
|
|
if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
- lastWallPosition = wallPositionX + wallWidth / 2 / scale;
|
|
|
- }else{
|
|
|
- lastWallPosition = wallPositionY + wallWidth / 2 / scale;
|
|
|
+ wallScaleX = spaceObj.spaceWidth / modelWidth;
|
|
|
+ }else{//东西
|
|
|
+ wallScaleX = spaceObj.spaceHeight / modelWidth;
|
|
|
}
|
|
|
- // wallPositionY = 1;
|
|
|
- }else{//可变墙体-UE编辑器通常把它放到最后一段墙体
|
|
|
- wallWidth = 0;
|
|
|
- //墙体的宽度是计算得出的
|
|
|
- if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
- wallWidth = (spaceObj.centerX + spaceObj.spaceWidth / 2) - lastWallPosition * scale; // 墙体宽度
|
|
|
- // console.log("最后一个模型",spaceObj.centerX, spaceObj.spaceWidth / 2, lastWallPosition)
|
|
|
+ if((parseInt(modelItem.wallType) >=21 && parseInt(modelItem.wallType) <=26) || parseInt(modelItem.wallType)== 7){
|
|
|
}else{
|
|
|
- wallWidth = (-spaceObj.centerY + spaceObj.spaceHeight / 2) - lastWallPosition * scale; // 墙体宽度
|
|
|
+ modelItem.wallWidth = wallScaleX * modelWidth; // 解决模型行拉伸定位问题, 先注释
|
|
|
}
|
|
|
- wallWidth = wallWidth / scale; // cm转换成m
|
|
|
- if(modelItem.wallType == 0){
|
|
|
- wallScaleX = wallWidth * wallHeight;
|
|
|
+
|
|
|
+ }else{//墙面是多端墙体组合而成的
|
|
|
+ if(modelItem.isFixedWidth == 'true'){//该墙体锁定宽度-即不可缩放
|
|
|
+ wallWidth = modelItem.wallWidth; // 墙体宽度
|
|
|
+ // console.log("模型的尺寸",wallWidth, spaceObj.spaceWidth, spaceObj.centerX)
|
|
|
+ //起始墙体-南北从左侧算,东西则从上侧计算
|
|
|
+ if(modelItem.isStepAsideBottomLeft == 'true' || modelItem.isStepAsideTopRight == 'true'){
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallPositionX = spaceObj.centerX - (spaceObj.spaceWidth - wallWidth) / 2;
|
|
|
+ wallPositionX = wallPositionX / scale; // 转换成m
|
|
|
+ }else{
|
|
|
+ wallPositionY = -spaceObj.centerY - (spaceObj.spaceHeight - wallWidth) / 2;
|
|
|
+ wallPositionY = wallPositionY / scale; // 转换成m
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallPositionX = lastWallPosition + (wallWidth / 2 / scale);
|
|
|
+ }else{
|
|
|
+ wallPositionY = lastWallPosition + (wallWidth / 2 / scale);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // console.log("模型的尺寸",wallWidth, wallPositionX)
|
|
|
+ if(modelItem.wallType == 0){
|
|
|
+ wallScaleX = modelItem.wallWidth / wallHeight;
|
|
|
+ }else{
|
|
|
+ console.log("墙体模型的缩放", spaceObj.spaceId,wallDirection, modelItem);
|
|
|
+ // if(!moveOut){
|
|
|
+ const curWallType = wallType.find(it=>it.type == modelItem.wallType)
|
|
|
+ wallScaleX = modelItem.wallWidth / curWallType.width;
|
|
|
+
|
|
|
+ console.log("墙体模型的缩小", modelItem,direction,wallDirection);
|
|
|
+ // }else{
|
|
|
+ // console.log("墙体模型的放大", wallScaleX);
|
|
|
+ // }
|
|
|
+
|
|
|
+ }
|
|
|
+ //计算当前墙体占据的整面墙体的大小-方便下一段墙体的计算
|
|
|
if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
- wallPositionX = lastWallPosition + wallWidth / 2;
|
|
|
+ lastWallPosition = wallPositionX + wallWidth / 2 / scale;
|
|
|
}else{
|
|
|
- wallPositionY = lastWallPosition + wallWidth / 2;
|
|
|
+ lastWallPosition = wallPositionY + wallWidth / 2 / scale;
|
|
|
}
|
|
|
- }
|
|
|
- modelItem.wallWidth = wallWidth*scale;//确保单位一致
|
|
|
- // wallPositionY = 1;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- console.log("移动墙体模型-空间信息", spaceObj.spaceWidth, spaceObj.centerX, spaceObj.centerY, spaceObj)
|
|
|
- console.log("移动墙体模型-墙体信息",spaceObj.spaceId,direction, wallDirection, modelItem.wallType, wallWidth, this.wallList)
|
|
|
- //计算得出墙体相应的位置和变形属性
|
|
|
- modelItem.wallPositionX = wallPositionX;
|
|
|
- modelItem.wallPositionY = wallPositionY;
|
|
|
- modelItem.wallScaleX = wallScaleX;
|
|
|
- modelItem.wallScaleY = wallScaleY;
|
|
|
- modelItem.wallRotateY = wallRotateY;
|
|
|
- modelItem.wallWidth = wallWidth;
|
|
|
-
|
|
|
-
|
|
|
- // 更新数据
|
|
|
- if(isComputeWall || direction == wallDirection){
|
|
|
-
|
|
|
- this.gltfWalls.forEach(gltfItem=>{
|
|
|
- if(gltfItem.spaceId == spaceObj.spaceId && wallDirection == gltfItem.wallDirection && modelItem.id == gltfItem.wallModelData.id){
|
|
|
- console.log("墙体更新", gltfItem.spaceId, spaceObj.spaceId, wallDirection, gltfItem.wallDirection, modelItem.id, gltfItem.wallModelData.id, isComputeWall, direction)
|
|
|
- gltfItem.wallModelData = JSON.parse(JSON.stringify(modelItem));
|
|
|
- gltfItem.willCurWallType = modelItem.willCurWallType
|
|
|
- if(gltfItem.wallModelData.wallType != 0){
|
|
|
- gltfItem.isDidWall = isCreateNewWall;
|
|
|
+ // wallPositionY = 1;
|
|
|
+ }else{//可变墙体-UE编辑器通常把它放到最后一段墙体
|
|
|
+ wallWidth = 0;
|
|
|
+ //墙体的宽度是计算得出的
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallWidth = (spaceObj.centerX + spaceObj.spaceWidth / 2) - lastWallPosition * scale; // 墙体宽度
|
|
|
+ // console.log("最后一个模型",spaceObj.centerX, spaceObj.spaceWidth / 2, lastWallPosition)
|
|
|
+ }else{
|
|
|
+ wallWidth = (-spaceObj.centerY + spaceObj.spaceHeight / 2) - lastWallPosition * scale; // 墙体宽度
|
|
|
+ }
|
|
|
+ wallWidth = wallWidth / scale; // cm转换成m
|
|
|
+ if(modelItem.wallType == 0){
|
|
|
+ wallScaleX = wallWidth * wallHeight;
|
|
|
+ if(wallDirection=="S" || wallDirection=="N"){//南北
|
|
|
+ wallPositionX = lastWallPosition + wallWidth / 2;
|
|
|
+ }else{
|
|
|
+ wallPositionY = lastWallPosition + wallWidth / 2;
|
|
|
+ }
|
|
|
}
|
|
|
+ modelItem.wallWidth = wallWidth*scale;//确保单位一致
|
|
|
+ // wallPositionY = 1;
|
|
|
}
|
|
|
- })
|
|
|
- }
|
|
|
- console.log("移动墙体模型-墙体信息++++++++",spaceObj.spaceId, direction, wallDirection, isComputeWall, modelItem)
|
|
|
- //数据更新到wallList中,确保数据一致性
|
|
|
- this.wallList.forEach(wallItem=>{
|
|
|
- const walls = JSON.parse(wallItem.wallJson);
|
|
|
- // console.log("墙体数据2----------", walls, modelItem);
|
|
|
- walls.wallData.forEach(wall=>{
|
|
|
- wall.wallModelData.forEach(wallmodel=>{
|
|
|
- //从wallList找到这段墙体
|
|
|
- if(wall.wallDirection == wallDirection && wallmodel.id == modelItem.id && walls.spaceId == spaceObj.spaceId){
|
|
|
-
|
|
|
- if(wallmodel.wallType == 0 && wallmodel.isFixedWidth == 'true'){
|
|
|
- wallmodel.wallWidth = modelItem.wallWidth;
|
|
|
- console.log("墙体数据31----实体墙------",spaceObj.spaceId, modelItem.wallWidth, modelItem);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ console.log("移动墙体模型-空间信息", spaceObj.spaceWidth, spaceObj.centerX, spaceObj.centerY, spaceObj)
|
|
|
+ console.log("移动墙体模型-墙体信息",spaceObj.spaceId,direction, wallDirection, modelItem.wallType, wallWidth, this.wallList)
|
|
|
+ //计算得出墙体相应的位置和变形属性
|
|
|
+ modelItem.wallPositionX = wallPositionX;
|
|
|
+ modelItem.wallPositionY = wallPositionY;
|
|
|
+ modelItem.wallScaleX = wallScaleX;
|
|
|
+ modelItem.wallScaleY = wallScaleY;
|
|
|
+
|
|
|
+ modelItem.wallRotateY = wallRotateY;
|
|
|
+ modelItem.wallWidth = wallWidth;
|
|
|
+
|
|
|
+ // 更新数据
|
|
|
+ if(isComputeWall || direction == wallDirection){
|
|
|
+
|
|
|
+ this.gltfWalls.forEach(gltfItem=>{
|
|
|
+ if(gltfItem.spaceId == spaceObj.spaceId && wallDirection == gltfItem.wallDirection && modelItem.id == gltfItem.wallModelData.id ){
|
|
|
+ if(direction == wallDirection){ // 墙体移动方向和墙面方向一致则执行位置移动
|
|
|
+ let tempWallModelData = gltfItem.wallModelData;
|
|
|
+ tempWallModelData.wallPositionX = wallPositionX
|
|
|
+ tempWallModelData.wallPositionY = wallPositionY
|
|
|
+ gltfItem.wallModelData = tempWallModelData;
|
|
|
+ }else{
|
|
|
+ gltfItem.wallModelData = JSON.parse(JSON.stringify(modelItem));
|
|
|
+ gltfItem.willCurWallType = modelItem.willCurWallType
|
|
|
}
|
|
|
-
|
|
|
- if(wallmodel.wallType != 0){
|
|
|
- wallmodel.wallWidth = modelItem.wallWidth;
|
|
|
- const curWallType = wallType.find(it=>it.type == modelItem.willCurWallType)
|
|
|
- if(curWallType){
|
|
|
- wallmodel.wallType = curWallType.type;
|
|
|
- }
|
|
|
+ if(gltfItem.wallModelData.wallType != 0){
|
|
|
+ gltfItem.isDidWall = isCreateNewWall;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
})
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //数据更新到wallList中,确保数据一致性
|
|
|
+ this.wallList.forEach(wallItem=>{
|
|
|
+ const walls = JSON.parse(wallItem.wallJson);
|
|
|
+ // console.log("墙体数据2----------", walls, modelItem);
|
|
|
+ walls.wallData.forEach(wall=>{
|
|
|
+ wall.wallModelData.forEach(wallmodel=>{
|
|
|
+ //从wallList找到这段墙体
|
|
|
+ if(wall.wallDirection == wallDirection && wallmodel.id == modelItem.id && walls.spaceId == spaceObj.spaceId){
|
|
|
+
|
|
|
+ if(wallmodel.wallType == 0 && wallmodel.isFixedWidth == 'true'){
|
|
|
+ wallmodel.wallWidth = modelItem.wallWidth;
|
|
|
+ console.log("墙体数据31----实体墙------",spaceObj.spaceId, modelItem.wallWidth, modelItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(wallmodel.wallType != 0){
|
|
|
+ wallmodel.wallWidth = modelItem.wallWidth;
|
|
|
+ const curWallType = wallType.find(it=>it.type == modelItem.willCurWallType)
|
|
|
+ if(curWallType){
|
|
|
+ wallmodel.wallType = curWallType.type;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ wallItem.wallJson = JSON.stringify(walls);
|
|
|
})
|
|
|
- wallItem.wallJson = JSON.stringify(walls);
|
|
|
+
|
|
|
})
|
|
|
- })
|
|
|
+ }
|
|
|
+
|
|
|
})
|
|
|
// console.log("墙体数据2", this.gltfWalls, this.wallList);
|
|
|
},
|
|
@@ -919,13 +1130,13 @@ export default {
|
|
|
loadChangeWallModels(item, resolve){
|
|
|
var that = this;
|
|
|
let wallObj = item;
|
|
|
- // console.log("处理模型替换", item.wallModelData);
|
|
|
+ console.log("处理模型替换", item);
|
|
|
if(item.wallModelData.wallWidth == 0){ // 模型隐藏
|
|
|
return resolve();
|
|
|
}
|
|
|
- if(item.wallModelData.willCurWallType && item.wallModelData.willCurWallType != -1){
|
|
|
+ if(item.wallModelData.willCurWallType && item.wallModelData.willCurWallType > 0 ){
|
|
|
const curWallType = wallType.find(it=>it.type == item.wallModelData.willCurWallType)
|
|
|
- // console.log("加载的模型", item, item.wallModelData.willCurWallType, curWallType);
|
|
|
+ console.log("加载的模型", item, item.wallModelData.willCurWallType, curWallType);
|
|
|
if(!curWallType){
|
|
|
return resolve();
|
|
|
}
|