public static CylinderVisual3DModel Closed2DAreaToCylinderVisual3DModel(List <Point> featurePoints, double upperZValue, double lowerZValue) { CylinderVisual3DModel cylinderVisual3D = new CylinderVisual3DModel(); Rect rect = FeaturePointHelper.GetFeaturePointsBoundaryRect(featurePoints); List <Vertex2D> vertexList = new List <Vertex2D>(); for (int i = 0; i < featurePoints.Count; i++) { Vertex2D vertex = new Vertex2D(featurePoints[i]) { Index = i }; vertexList.Add(vertex); } bool isCw = PolygonTriangulationHelper.IsClockwise(vertexList); if (!isCw) { featurePoints.Reverse(); } //List<int> trianglePointIndexList = PolygonTriangulationHelper.ResolveToTriangles(vertexList); List <Vec> vecList = new List <Vec>(); for (int i = 0; i < featurePoints.Count; i++) { Vec vec = new Vec { x = (float)featurePoints[i].X, y = (float)featurePoints[i].Y }; vecList.Add(vec); } List <int> trianglePointIndexList = PolygonHelper.Resolve(vecList); if (trianglePointIndexList == null) { return(null); } List <int> lowerUnderSurfacePointIndexList = new List <int>(); for (int i = 0; i < trianglePointIndexList.Count; i = i + 3) { lowerUnderSurfacePointIndexList.Add(trianglePointIndexList[i]); lowerUnderSurfacePointIndexList.Add(trianglePointIndexList[i + 2]); lowerUnderSurfacePointIndexList.Add(trianglePointIndexList[i + 1]); } Geometry3DModel upperGeometry3DModel = FeaturePointsToGeometry3DModel(featurePoints, upperZValue, rect, lowerUnderSurfacePointIndexList); cylinderVisual3D.UpperUndersurface = upperGeometry3DModel; Geometry3DModel lowerGeometry3DModel = FeaturePointsToGeometry3DModel(featurePoints, lowerZValue, rect, trianglePointIndexList); cylinderVisual3D.LowerUndersurface = lowerGeometry3DModel; cylinderVisual3D.SideSurface = FeaturePointsToSideSurefaceGeometry3DModel(featurePoints, upperZValue, lowerZValue); return(cylinderVisual3D); }
public static Map3DModel Map2DTo3DModel(Map2DModel map2D, double upperZValue, double lowerZValue) { Map3DModel map3D = new Map3DModel(); map3D.Id = map2D.Id; map3D.Name = map2D.Name; map3D.MinLongitude = map2D.MinLongitude; map3D.MaxLongitude = map2D.MaxLongitude; map3D.MinLatitude = map2D.MinLatitude; map3D.MaxLatitude = map2D.MaxLatitude; List <CylinderVisual3DModel> cylinderVisual3DModelList = new List <CylinderVisual3DModel>(); map3D.Geometries = cylinderVisual3DModelList; Rect rect = GetBoundaryRectOfMap2D(map2D); foreach (List <Point> map2DPathFeaturePoints in map2D.GeometryPointList) { List <Point> cleanPointList = CleanPointList(map2DPathFeaturePoints); //CylinderVisual3DModel cylinderVisual3DModel = Visual2DTo3DHelper.Closed2DAreaToCylinderVisual3DModel(cleanPointList, upperZValue, lowerZValue); CylinderVisual3DModel cylinderVisual3DModel = Visual2DTo3DHelper.Closed2DAreaToCylinderVisual3DModel(cleanPointList, upperZValue, lowerZValue, rect); if (cylinderVisual3DModel != null) { cylinderVisual3DModelList.Add(cylinderVisual3DModel); } } map3D.Materials = new List <List <Material3DModel> >(); for (int i = 0; i < map2D.GeometryPointList.Count; i++) { List <Material3DModel> materialList = new List <Material3DModel>() { new Material3DModel() { MaterialType = MaterialType.ColorDiffuse, MaterialData = Color.FromArgb(0x99, 0x00, 0xff, 0xff) }, new Material3DModel() { MaterialType = MaterialType.ColorDiffuse, MaterialData = Color.FromArgb(0x99, 0x00, 0xff, 0xff) }, new Material3DModel() { MaterialType = MaterialType.ColorDiffuse, MaterialData = Color.FromArgb(0xff, 0x48, 0x3d, 0x88) } }; map3D.Materials.Add(materialList); } return(map3D); }
public static ContainerUIElement3D Map3DModelToUIElement3D(Map3DModel map3D) { List <Viewport2DVisual3D> visual3DList = new List <Viewport2DVisual3D>(); for (int i = 0; i < map3D.Geometries.Count; i++) { CylinderVisual3DModel cylinderVisual3DModel = map3D.Geometries[i]; DiffuseMaterial imageMaterial = new DiffuseMaterial(new ImageBrush(new BitmapImage(new Uri(string.Format(@"Images\MapTextures\{0}.png", "1"), UriKind.Relative)))); //MeshGeometry3D upperGeometry3D = Visual3DCreateHelper.CreateGeometry3D(cylinderVisual3DModel.UpperUndersurface); //Material upperMaterial = Visual3DCreateHelper.CreateMaterial3D(map3D.Materials[i][0]); //MaterialGroup mg = new MaterialGroup(); //mg.Children.Add(upperMaterial); ////mg.Children.Add(imageMaterial); //Viewport2DVisual3D upperVisual3D = Visual3DCreateHelper.CreateVisual3D(upperGeometry3D, mg); //visual3DList.Add(upperVisual3D); MeshGeometry3D lowerGeometry3D = Visual3DCreateHelper.CreateGeometry3D(cylinderVisual3DModel.LowerUndersurface); Material lowerMaterial = Visual3DCreateHelper.CreateMaterial3D(map3D.Materials[i][1]); MaterialGroup mg1 = new MaterialGroup(); mg1.Children.Add(lowerMaterial); //mg1.Children.Add(imageMaterial); Viewport2DVisual3D lowerVisual3D = Visual3DCreateHelper.CreateVisual3D(lowerGeometry3D, mg1); visual3DList.Add(lowerVisual3D); MeshGeometry3D sideGeometry3D = Visual3DCreateHelper.CreateGeometry3D(cylinderVisual3DModel.SideSurface); Material sideMaterial = Visual3DCreateHelper.CreateMaterial3D(map3D.Materials[i][2]); Viewport2DVisual3D sideVisual3D = Visual3DCreateHelper.CreateVisual3D(sideGeometry3D, sideMaterial); visual3DList.Add(sideVisual3D); } ContainerUIElement3D uIElement3D = Visual3DCreateHelper.CreateUIElement3D(visual3DList); return(uIElement3D); }