Browse Source

多变窗户变形 空隙问题

caodongdong 1 year ago
parent
commit
a117706e6a
3 changed files with 391 additions and 178 deletions
  1. 0 1
      src/mixins/loadModel.js
  2. 380 169
      src/mixins/wallMethod.js
  3. 11 8
      src/pages/webgl_rxdz/webgl_rxdz.vue

+ 0 - 1
src/mixins/loadModel.js

@@ -111,7 +111,6 @@ export default {
 		},
 		//拆分家具模型加载逻辑
 		furnHandle(arrFrunList, tmpSpaceList=[]){
-			console.log("bug修复", arrFrunList, tmpSpaceList)
 			if(!arrFrunList || arrFrunList.length == 0){
 				return
 			}

+ 380 - 169
src/mixins/wallMethod.js

@@ -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();
 					}

+ 11 - 8
src/pages/webgl_rxdz/webgl_rxdz.vue

@@ -2235,15 +2235,16 @@
 			            curSpaceWall.push(element);
 			        }
 			    }
-			
-				//移动的是西方的墙壁 和 南方的墙壁,该空间的几何体中心移动变化
+				
+				//移动的是西方的墙壁 和 南方的墙壁,该空间的几何体中心移动变化
 				if(direction == 'W' || direction == 'S'){
 					spaceObj.rightCenter = true;
 				}
-				//移动的是东方的墙壁 和 北方的墙壁,该空间的几何体中心不移动变化
+				//移动的是东方的墙壁 和 北方的墙壁,该空间的几何体中心不移动变化
 				if(direction == 'E'|| direction == 'N'){
 					spaceObj.rightCenter = false;
 				}
+				spaceObj.direction = direction
 			    // 排序墙体数据
 			    curSpaceWall.sort(function(a,b){return a.wallModelData.id -b.wallModelData.id});
 			    curSpaceWall.sort(function(a,b){return a.wallDirection.localeCompare(b.wallDirection)})
@@ -2251,11 +2252,13 @@
 				console.log("移动的墙体:", spaceObj, direction, curSpaceWall);
 				// return;
 			
-			    for (let index = 0; index < curSpaceWall.length; index++) {
-			        const element = curSpaceWall[index];
-			        // console.log("重新计算墙体-墙体数据:",element, spaceObj);
-			        this.drawModel(element.wallModelData, spaceObj, element, true)
-			    }
+				
+				for (let index = 0; index < curSpaceWall.length; index++) {
+					const element = curSpaceWall[index];
+					console.log("重新计算墙体-墙体数据:", element, element);
+					this.drawModel(element.wallModelData, spaceObj, element, true)
+				}
+				// }
 			},
 			// 空隙自动补签逻辑
 			autoCreateWall(directionIndex, spaceObj){