private IEnumerator Func(object[] arg1) { yield return(new WaitForEndOfFrame()); PreScanData preScanData = new PreScanData(); TouchCaptureScreen.Instance.AoutCaptureScreenImage(); yield return(new WaitForSeconds(0.01f)); yield return(new WaitForEndOfFrame()); yield return(new WaitForSeconds(0.01f)); yield return(new WaitForEndOfFrame()); Texture2D texture = TouchCaptureScreen.Instance.texture; string textureEncoding = ""; if (texture != null) { byte[] bytes = texture.EncodeToJPG(); GameObject.DestroyImmediate(texture, true); if (inputMachine.currentInputIs2D) { //prefabs.helpCamera.gameObject.SetActive(false); } textureEncoding = System.Convert.ToBase64String(bytes, 0, bytes.Length, Base64FormattingOptions.None ); Debug.LogWarning("截屏成功"); } else { Debug.LogWarning("截屏失败"); } preScanData.imagemeta = textureEncoding; preScanData.id = scandataList.Count; preScanData.position = prefabs.mainCamera.transform.position; preScanData.rotate = prefabs.mainCamera.transform.rotation.eulerAngles; preScanData.focaseP = camera3DState.focaseP; preScanData.follow = camera3DState.follow; undoHelper.save(); scandataList.Add(preScanData); cameraViewScroll.Display(scandataList); UITool.SetActionTrue(cameraViewPage.RectCameraViewScroll.gameObject); UITool.SetActionFalse(cameraViewPage.cameraViewAdd.gameObject); }
private void OnItemClick(int index) { PreScanData itemdata = scandataList[index] as PreScanData; prefabs.mainCamera.transform.position = itemdata.position; prefabs.mainCamera.transform.rotation = Quaternion.Euler(itemdata.rotate); camera3DState.follow = itemdata.follow; camera3DState.focaseP = itemdata.focaseP; //exit(); Debug.Log("显示 相机视图"); }
/// <summary> /// 保存一次数据 使用方法:应该先使用保存 再更改变化 /// </summary> public void save() { //Debug.Log("Saved"); if (undoDatas.Count > 100) { undoDatas.RemoveAt(0); } currentData.data.ResetId(); currentData.SaveId++; ///新保存的数据 TotalData inputdata = new TotalData(); inputdata.SaveId = currentData.SaveId; inputdata.schemeManifest = currentData.schemeManifest; for (int i = 0; i < currentData.data.wallList.Count; i++) { WallData wall = currentData.data.wallList[i]; WallData newWall = new WallData(); newWall.guid = wall.guid; newWall.height = wall.height; newWall.width = wall.width; Point p1 = getPointById(wall.point1.guid, inputdata.data); if (p1 == null) { p1 = new Point(); p1.guid = wall.point1.guid; p1.pos = wall.point1.pos; inputdata.data.AddPoint(p1); } newWall.point1 = p1; Point p2 = getPointById(wall.point2.guid, inputdata.data); if (p2 == null) { p2 = new Point(); p2.guid = wall.point2.guid; p2.pos = wall.point2.pos; inputdata.data.AddPoint(p2); } newWall.point2 = p2; WallSideData newSide1 = new WallSideData(); newSide1.guid = wall.point1To2Data.guid; newSide1.forward = wall.point1To2Data.forward; MaterialData materialData = new MaterialData(); materialData.textureURI = wall.point1To2Data.materialData.textureURI; materialData.id = wall.point1To2Data.materialData.id; materialData.guid = wall.point1To2Data.materialData.guid; materialData.seekId = wall.point1To2Data.materialData.seekId; materialData.color = wall.point1To2Data.materialData.color; materialData.tileSize_x = wall.point1To2Data.materialData.tileSize_x; materialData.tileSize_y = wall.point1To2Data.materialData.tileSize_y; materialData.rotation = wall.point1To2Data.materialData.rotation; materialData.offsetX = wall.point1To2Data.materialData.offsetX; materialData.offsetY = wall.point1To2Data.materialData.offsetY; newSide1.materialData = materialData; //newSide1.texture = wall.point1To2Data.texture; //newSide1.mesh = wall.point1To2Data.mesh; newSide1.targetWall = newWall; TBaseboard newTBaseboard = new TBaseboard(true); newTBaseboard.guid = wall.point1To2Data.tBaseboard.guid; newTBaseboard.id = wall.point1To2Data.tBaseboard.id; newTBaseboard.hide = wall.point1To2Data.tBaseboard.hide; newTBaseboard.isT = wall.point1To2Data.tBaseboard.isT; newTBaseboard.type = wall.point1To2Data.tBaseboard.type; newTBaseboard.width = wall.point1To2Data.tBaseboard.width; newTBaseboard.height = wall.point1To2Data.tBaseboard.height; newTBaseboard.disRoot = wall.point1To2Data.tBaseboard.disRoot; if (wall.point1To2Data.tBaseboard.materialData != null) { MaterialData tMaterialData = new MaterialData(); tMaterialData.textureURI = wall.point1To2Data.tBaseboard.materialData.textureURI; tMaterialData.id = wall.point1To2Data.tBaseboard.materialData.id; tMaterialData.guid = wall.point1To2Data.tBaseboard.materialData.guid; tMaterialData.seekId = wall.point1To2Data.tBaseboard.materialData.seekId; tMaterialData.color = wall.point1To2Data.tBaseboard.materialData.color; tMaterialData.tileSize_x = wall.point1To2Data.tBaseboard.materialData.tileSize_x; tMaterialData.tileSize_y = wall.point1To2Data.tBaseboard.materialData.tileSize_y; tMaterialData.rotation = wall.point1To2Data.tBaseboard.materialData.rotation; tMaterialData.offsetX = wall.point1To2Data.tBaseboard.materialData.offsetX; tMaterialData.offsetY = wall.point1To2Data.tBaseboard.materialData.offsetY; newTBaseboard.materialData = tMaterialData;//wall.point1To2Data.tBaseboard.materialData; } newSide1.tBaseboard = newTBaseboard; TBaseboard newTopBaseboard = new TBaseboard(true); newTopBaseboard.guid = wall.point1To2Data.topBaseboard.guid; newTopBaseboard.id = wall.point1To2Data.topBaseboard.id; newTopBaseboard.hide = wall.point1To2Data.topBaseboard.hide; newTopBaseboard.isT = wall.point1To2Data.topBaseboard.isT; newTopBaseboard.type = wall.point1To2Data.topBaseboard.type; newTopBaseboard.width = wall.point1To2Data.topBaseboard.width; newTopBaseboard.height = wall.point1To2Data.topBaseboard.height; newTopBaseboard.disRoot = wall.point1To2Data.topBaseboard.disRoot; if (wall.point1To2Data.topBaseboard.materialData != null) { MaterialData topMaterialData = new MaterialData(); topMaterialData.textureURI = wall.point1To2Data.topBaseboard.materialData.textureURI; topMaterialData.id = wall.point1To2Data.topBaseboard.materialData.id; topMaterialData.guid = wall.point1To2Data.topBaseboard.materialData.guid; topMaterialData.seekId = wall.point1To2Data.topBaseboard.materialData.seekId; topMaterialData.color = wall.point1To2Data.topBaseboard.materialData.color; topMaterialData.tileSize_x = wall.point1To2Data.topBaseboard.materialData.tileSize_x; topMaterialData.tileSize_y = wall.point1To2Data.topBaseboard.materialData.tileSize_y; topMaterialData.rotation = wall.point1To2Data.topBaseboard.materialData.rotation; topMaterialData.offsetX = wall.point1To2Data.topBaseboard.materialData.offsetX; topMaterialData.offsetY = wall.point1To2Data.topBaseboard.materialData.offsetY; newTopBaseboard.materialData = topMaterialData; } newSide1.topBaseboard = newTopBaseboard; newWall.point1To2Data = newSide1; WallSideData newSide2 = new WallSideData(); newSide2.guid = wall.point2To1Data.guid; newSide2.forward = wall.point2To1Data.forward; MaterialData materialData2 = new MaterialData(); materialData2.textureURI = wall.point2To1Data.materialData.textureURI; materialData2.id = wall.point2To1Data.materialData.id; materialData2.guid = wall.point2To1Data.materialData.guid; materialData2.seekId = wall.point2To1Data.materialData.seekId; materialData2.color = wall.point2To1Data.materialData.color; materialData2.tileSize_x = wall.point2To1Data.materialData.tileSize_x; materialData2.tileSize_y = wall.point2To1Data.materialData.tileSize_y; materialData2.rotation = wall.point2To1Data.materialData.rotation; materialData2.offsetX = wall.point2To1Data.materialData.offsetX; materialData2.offsetY = wall.point2To1Data.materialData.offsetY; newSide2.materialData = materialData2; //newSide2.texture = wall.point2To1Data.texture; //newSide2.mesh = wall.point2To1Data.mesh; newSide2.targetWall = newWall; TBaseboard newTBaseboard2 = new TBaseboard(true); newTBaseboard2.guid = wall.point2To1Data.tBaseboard.guid; newTBaseboard2.id = wall.point2To1Data.tBaseboard.id; newTBaseboard2.hide = wall.point2To1Data.tBaseboard.hide; newTBaseboard2.isT = wall.point2To1Data.tBaseboard.isT; newTBaseboard2.type = wall.point2To1Data.tBaseboard.type; newTBaseboard2.width = wall.point2To1Data.tBaseboard.width; newTBaseboard2.height = wall.point2To1Data.tBaseboard.height; newTBaseboard2.disRoot = wall.point2To1Data.tBaseboard.disRoot; if (wall.point2To1Data.tBaseboard.materialData != null) { MaterialData tMaterialData2 = new MaterialData(); tMaterialData2.textureURI = wall.point2To1Data.tBaseboard.materialData.textureURI; tMaterialData2.id = wall.point2To1Data.tBaseboard.materialData.id; tMaterialData2.guid = wall.point2To1Data.tBaseboard.materialData.guid; tMaterialData2.seekId = wall.point2To1Data.tBaseboard.materialData.seekId; tMaterialData2.color = wall.point2To1Data.tBaseboard.materialData.color; tMaterialData2.tileSize_x = wall.point2To1Data.tBaseboard.materialData.tileSize_x; tMaterialData2.tileSize_y = wall.point2To1Data.tBaseboard.materialData.tileSize_y; tMaterialData2.rotation = wall.point2To1Data.tBaseboard.materialData.rotation; tMaterialData2.offsetX = wall.point2To1Data.tBaseboard.materialData.offsetX; tMaterialData2.offsetY = wall.point2To1Data.tBaseboard.materialData.offsetY; newTBaseboard2.materialData = tMaterialData2;//wall.point2To1Data.tBaseboard.materialData; } newSide2.tBaseboard = newTBaseboard2; TBaseboard newTopBaseboard2 = new TBaseboard(true); newTopBaseboard2.guid = wall.point2To1Data.topBaseboard.guid; newTopBaseboard2.id = wall.point2To1Data.topBaseboard.id; newTopBaseboard2.hide = wall.point2To1Data.topBaseboard.hide; newTopBaseboard2.isT = wall.point2To1Data.topBaseboard.isT; newTopBaseboard2.type = wall.point2To1Data.topBaseboard.type; newTopBaseboard2.width = wall.point2To1Data.topBaseboard.width; newTopBaseboard2.height = wall.point2To1Data.topBaseboard.height; newTopBaseboard2.disRoot = wall.point2To1Data.topBaseboard.disRoot; if (wall.point2To1Data.topBaseboard.materialData != null) { MaterialData topMaterialData2 = new MaterialData(); topMaterialData2.textureURI = wall.point2To1Data.topBaseboard.materialData.textureURI; topMaterialData2.id = wall.point2To1Data.topBaseboard.materialData.id; topMaterialData2.guid = wall.point2To1Data.topBaseboard.materialData.guid; topMaterialData2.seekId = wall.point2To1Data.topBaseboard.materialData.seekId; topMaterialData2.color = wall.point2To1Data.topBaseboard.materialData.color; topMaterialData2.tileSize_x = wall.point2To1Data.topBaseboard.materialData.tileSize_x; topMaterialData2.tileSize_y = wall.point2To1Data.topBaseboard.materialData.tileSize_y; topMaterialData2.rotation = wall.point2To1Data.topBaseboard.materialData.rotation; topMaterialData2.offsetX = wall.point2To1Data.topBaseboard.materialData.offsetX; topMaterialData2.offsetY = wall.point2To1Data.topBaseboard.materialData.offsetY; newTopBaseboard2.materialData = topMaterialData2; } newSide2.topBaseboard = newTopBaseboard2; newWall.point2To1Data = newSide2; inputdata.data.AddWall(newWall, true); } for (int i = 0; i < currentData.data.roomList.Count; i++) { RoomData room = currentData.data.roomList[i]; RoomData newroom = new RoomData(); newroom.pointList = new List <Point>(); newroom.guid = room.guid; newroom.name = room.name; newroom.type = room.type; newroom.ceilingHeight = room.ceilingHeight; //newroom.floor = room.floor; //newroom.ceiling = room.ceiling; MaterialData materialData = new MaterialData(); materialData.textureURI = room.floor.textureURI; materialData.id = room.floor.id; materialData.guid = room.floor.guid; materialData.seekId = room.floor.seekId; materialData.color = room.floor.color; materialData.tileSize_x = room.floor.tileSize_x; materialData.tileSize_y = room.floor.tileSize_y; materialData.rotation = room.floor.rotation; materialData.offsetX = room.floor.offsetX; materialData.offsetY = room.floor.offsetY; newroom.floor = materialData; MaterialData materialData2 = new MaterialData(); materialData2.textureURI = room.ceiling.textureURI; materialData2.id = room.ceiling.id; materialData2.guid = room.ceiling.guid; materialData2.seekId = room.ceiling.seekId; materialData2.color = room.ceiling.color; materialData2.tileSize_x = room.ceiling.tileSize_x; materialData2.tileSize_y = room.ceiling.tileSize_y; materialData2.rotation = room.ceiling.rotation; materialData2.offsetX = room.ceiling.offsetX; materialData2.offsetY = room.ceiling.offsetY; newroom.ceiling = materialData2; for (int k = 0; k < room.sideList.Count; k++) { WallSideData side = room.sideList[k]; WallSideData aimside = getSideById(side.guid, inputdata.data); if (aimside != null) { newroom.sideList.Add(aimside); } else { Debug.LogWarning("aimside == null"); } } for (int k = 0; k < room.pointList.Count; k++) { Point point = room.pointList[k]; Point aimpoint = getPointById(point.guid, inputdata.data); newroom.pointList.Add(aimpoint); } inputdata.data.roomList.Add(newroom); } for (int i = 0; i < currentData.data.productDataList.Count; i++) { ProductData product = currentData.data.productDataList[i]; ProductData newproduct = new ProductData(product.id, product.position, product.rotate, product.seekId, product.height, product.type); newproduct.guid = product.guid; newproduct.hide = product.hide; newproduct.scale = product.scale; if (product.targetWall != null) { newproduct.targetWall = inputdata.data.GetWall(product.targetWall.guid); } else { newproduct.targetWall = null; } inputdata.data.productDataList.Add(newproduct); } for (int i = 0; i < currentData.data.maxAngleRooms.Count; i++) { RoomData room = currentData.data.maxAngleRooms[i]; RoomData newroom = new RoomData(); newroom.pointList = new List <Point>(); newroom.guid = room.guid; newroom.name = room.name; newroom.type = room.type; newroom.ceilingHeight = room.ceilingHeight; //newroom.floor = room.floor; //newroom.ceiling = room.ceiling; MaterialData materialData = new MaterialData(); materialData.textureURI = room.floor.textureURI; materialData.id = room.floor.id; materialData.guid = room.floor.guid; materialData.seekId = room.floor.seekId; materialData.color = room.floor.color; materialData.tileSize_x = room.floor.tileSize_x; materialData.tileSize_y = room.floor.tileSize_y; materialData.rotation = room.floor.rotation; materialData.offsetX = room.floor.offsetX; materialData.offsetY = room.floor.offsetY; newroom.floor = materialData; MaterialData materialData2 = new MaterialData(); materialData2.textureURI = room.ceiling.textureURI; materialData2.id = room.ceiling.id; materialData2.guid = room.ceiling.guid; materialData2.seekId = room.ceiling.seekId; materialData2.color = room.ceiling.color; materialData2.tileSize_x = room.ceiling.tileSize_x; materialData2.tileSize_y = room.ceiling.tileSize_y; materialData2.rotation = room.ceiling.rotation; materialData2.offsetX = room.ceiling.offsetX; materialData2.offsetY = room.ceiling.offsetY; newroom.ceiling = materialData2; for (int k = 0; k < room.sideList.Count; k++) { WallSideData side = room.sideList[k]; WallSideData aimside = getSideById(side.guid, inputdata.data); if (aimside != null) { newroom.sideList.Add(aimside); } else { Debug.LogWarning("aimside == null"); } } for (int k = 0; k < room.pointList.Count; k++) { Point point = room.pointList[k]; Point aimpoint = getPointById(point.guid, inputdata.data); newroom.pointList.Add(aimpoint); } inputdata.data.maxAngleRooms.Add(newroom); } for (int i = 0; i < currentData.data.preScanDatas.Count; i++) { PreScanData scanData = currentData.data.preScanDatas[i] as PreScanData; PreScanData newScanData = new PreScanData(); newScanData.id = scanData.id; newScanData.position = scanData.position; newScanData.rotate = scanData.rotate; newScanData.imagemeta = scanData.imagemeta; inputdata.data.preScanDatas.Add(newScanData); } inputdata.data.defaultsettings = currentData.data.defaultsettings; undoDatas.Add(inputdata); redoDatas.Clear(); //jsonCacheManager.SaveSchemeToLocal(); Resources.UnloadUnusedAssets(); }
public void DeSerialize(Dictionary<string, object> dic) { pointList.Clear(); wallList.Clear(); productDataList.Clear(); roomList.Clear(); productList = new List<Product>(); preScanDatas.Clear(); foreach (string key in dic.Keys) { switch (key) { case "pointList": { object obj = MyJsonTool.getValue(dic, key); List<object> list = obj as List<object>; for (int i = 0; i < list.Count; i++) { Point point = new Point(); point.DeSerialize(list[i] as Dictionary<string, object>); pointList.Add(point); } } break; case "wallList": { object obj = MyJsonTool.getValue(dic, key); List<object> list = obj as List<object>; for (int i = 0; i < list.Count; i++) { WallData wall = new WallData(); wall.DeSerialize(list[i] as Dictionary<string, object>); wallList.Add(wall); } } break; case "productDataList": { object obj = MyJsonTool.getValue(dic, key); List<object> list = obj as List<object>; for (int i = 0; i < list.Count; i++) { ProductData productdata = new ProductData(); productdata.DeSerialize(list[i] as Dictionary<string, object>); productDataList.Add(productdata); } } break; case "roomList": { object obj = MyJsonTool.getValue(dic, key); List<object> list = obj as List<object>; for (int i = 0; i < list.Count; i++) { RoomData room = new RoomData(); room.DeSerialize(list[i] as Dictionary<string, object>); roomList.Add(room); } } break; case "productList": { object obj = MyJsonTool.getValue(dic, key); if (obj == null) { productList = null; break; } List<object> list = obj as List<object>; for (int i = 0; i < list.Count; i++) { Product product = new Product(); if (isOld) { JsonProduct jsonData = new JsonProduct(); jsonData.DeSerialize(list[i] as Dictionary<string, object>); jsonData.WriteToData(product); } else { product.DeSerialize(list[i] as Dictionary<string, object>); } productList.Add(product); //if(product) } } break; case "defaultsettings": { object obj = MyJsonTool.getValue(dic, key); defaultsettings.DeSerialize(obj as Dictionary<string, object>); } break; case "maxAngleRooms": { object obj = MyJsonTool.getValue(dic, key); List<object> list = obj as List<object>; for (int i = 0; i < list.Count; i++) { RoomData room = new RoomData(); room.DeSerialize(list[i] as Dictionary<string, object>); maxAngleRooms.Add(room); } } break; case "preScanDatas": { object obj = MyJsonTool.getValue(dic, key); List<object> list = obj as List<object>; for (int i = 0; i < list.Count; i++) { PreScanData prescan = new PreScanData(); prescan.DeSerialize(list[i] as Dictionary<string, object>); preScanDatas.Add(prescan); } } break; default: break; } } //恢复关联 Dictionary<int, Point> pointDic = new Dictionary<int, Point>(); Dictionary<int, WallData> wallDic = new Dictionary<int, WallData>(); Dictionary<int, WallSideData> tempSideDic = new Dictionary<int, WallSideData>(); for (int i = 0; i < pointList.Count; i++) { pointDic.Add(pointList[i].guid, pointList[i]); } for (int i = 0; i < wallList.Count; i++) { wallDic.Add(wallList[i].guid, wallList[i]); WallData wall = wallList[i]; if (pointDic.ContainsKey(wall.point1Guid) == false) { Debug.LogError("wall.point1Guid = "+ wall.point1Guid + "对应的Point不存在"); } else { wall.point1 = pointDic[wall.point1Guid]; } if (pointDic.ContainsKey(wall.point2Guid) == false) { Debug.LogError("wall.point2Guid = " + wall.point2Guid + "对应的Point不存在"); } else { wall.point2 = pointDic[wall.point2Guid]; } wall.point1To2Data.targetWall = wall; wall.point2To1Data.targetWall = wall; tempSideDic.Add(wall.point1To2Data.guid, wall.point1To2Data); tempSideDic.Add(wall.point2To1Data.guid, wall.point2To1Data); } for (int i = 0; i < productDataList.Count; i++) { ProductData productData = productDataList[i]; if (productData.targetWallGuid != -1) { if (wallDic.ContainsKey(productData.targetWallGuid)) { productData.targetWall = wallDic[productData.targetWallGuid]; } else { Debug.LogError("productData.targetWallGuid = "+ productData.targetWallGuid + "对应的Wall不存在"); productData.targetWall = null; } } else { productData.targetWall = null; } } for (int i = 0; i < roomList.Count; i++) { RoomData room = roomList[i]; for (int k = 0; k < room.sideListGuids.Count; k++) { if (tempSideDic.ContainsKey(room.sideListGuids[k]) == false) { Debug.LogError("room.sideListGuids[k] = " + room.sideListGuids[k] + "对应的WallSideData不存在"); continue; } room.sideList.Add(tempSideDic[room.sideListGuids[k]]); } room.pointList = new List<Point>(); for (int k = 0; k < room.pointListGuids.Count; k++) { if (pointDic.ContainsKey(room.pointListGuids[k]) == false) { Debug.LogError("room.pointListGuids[k] = " + room.pointListGuids[k] + "对应的Point不存在"); continue; } room.pointList.Add(pointDic[room.pointListGuids[k]]); } } for (int i = 0; i < maxAngleRooms.Count; i++) { RoomData room = maxAngleRooms[i]; for (int k = 0; k < room.sideListGuids.Count; k++) { if (tempSideDic.ContainsKey(room.sideListGuids[k]) == false) { Debug.LogError("room.sideListGuids[k] = " + room.sideListGuids[k] + "对应的WallSideData不存在"); continue; } room.sideList.Add(tempSideDic[room.sideListGuids[k]]); } room.pointList = new List<Point>(); for (int k = 0; k < room.pointListGuids.Count; k++) { if (pointDic.ContainsKey(room.pointListGuids[k]) == false) { Debug.LogError("room.pointListGuids[k] = " + room.pointListGuids[k] + "对应的Point不存在"); continue; } room.pointList.Add(pointDic[room.pointListGuids[k]]); } } MainPageUIData.Instance.productDic.Clear(); MainPageUIData.Instance.GoodsDic.Clear(); if (productList != null) { for (int i = 0; i < productList.Count; i++) { MainPageUIData.Instance.AddProduct(productList[i]); } } }