Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }