コード例 #1
0
ファイル: DatasetBuilder.cs プロジェクト: brisu/EDDiscovery
        public List <IData3DSet> BuildSelected(ISystem centersystem, ISystem selectedsystem, GalacticMapObject selectedgmo, float widthly, float heightly, Vector3 rotation)
        {
            Bitmap selmark = (Bitmap)EDDiscovery.Properties.Resources.selectedmarker;

            if (centersystem != null)
            {
                var dataset = Data3DSetClass <PointData> .Create("Center", MapColours.CentredSystem, 5.0f);

                dataset.Add(new PointData(centersystem.x, centersystem.y, centersystem.z));
                _datasets.Add(dataset);
            }

            if (selectedsystem != null)
            {
                var datasetbks = Data3DSetClass <TexturedQuadData> .Create("selstar", Color.White, 1f);

                TexturedQuadData newtexture = TexturedQuadData.FromBitmap(selmark, new PointData(selectedsystem.x, selectedsystem.y, selectedsystem.z), rotation, widthly, heightly / 2, 0, heightly / 4 + heightly / 16);
                newtexture.Tag = 0;
                datasetbks.Add(newtexture);
                _datasets.Add(datasetbks);
            }

            if (selectedgmo != null)
            {
                PointData pd = (selectedgmo.points.Count > 0) ? selectedgmo.points[0] : null;     // lets be paranoid

                if (pd != null)
                {
                    var datasetbks = Data3DSetClass <TexturedQuadData> .Create("selgmo", Color.White, 1f);

                    long gmotarget = TargetClass.GetTargetGMO();

                    float            hoff       = (gmotarget == selectedgmo.id) ? (heightly * gmoseltarget) : (heightly * gmoselonly);
                    TexturedQuadData newtexture = TexturedQuadData.FromBitmap(selmark, pd, rotation, widthly, heightly / 2, 0, hoff);
                    newtexture.Tag = 1;
                    datasetbks.Add(newtexture);
                    _datasets.Add(datasetbks);
                }
            }

            return(_datasets);
        }
コード例 #2
0
 public void UpdateVertices(PointData centre, Vector3 rotationdeg, float width, float height, float hoffset = 0, float voffset = 0)
 {
     Vector3[] vertices = GetVertices(centre.Pos, rotationdeg, width, height, hoffset, voffset);
     UpdateVertices(vertices);
 }
コード例 #3
0
 // whole versions
 public static TexturedQuadData FromBitmap(Bitmap bmp, PointData centre, Vector3 rotationdeg, float width, float height, float hoffset = 0, float voffset = 0)
 {
     return(FromBitmap(bmp, centre.Pos, rotationdeg, width, height, hoffset, voffset));
 }
コード例 #4
0
 static public Vector3d[] CalcVertices(PointData centre, Vector3 rotationdeg, float width, float height, float hoffset = 0, float voffset = 0)
 {
     return(GetVertices(new Vector3d(centre.x, centre.y, centre.z), rotationdeg, width, height, hoffset, voffset));
 }
コード例 #5
0
        public List <IData3DSet> AddGalMapRegionsToDataset(bool colourregions)
        {
            var polydataset    = new PolygonCollection("regpolys", Color.White, 1f, OpenTK.Graphics.OpenGL.PrimitiveType.Triangles);   // ORDER AND NUMBER v.Important
            var outlinedataset = new PolygonCollection("reglines", Color.White, 1f, OpenTK.Graphics.OpenGL.PrimitiveType.LineLoop);    // DrawStars picks them out in a particular order
            var datasetbks     = Data3DSetClass <TexturedQuadData> .Create("regtext", Color.White, 1f);

            if (EDDiscoveryForm.galacticMapping != null)
            {
                long gmotarget = TargetClass.GetTargetGMO();

                int cindex = 0;
                foreach (GalacticMapObject gmo in EDDiscoveryForm.galacticMapping.galacticMapObjects)
                {
                    if (gmo.galMapType.Enabled && gmo.galMapType.Group == GalMapType.GalMapGroup.Regions)
                    {
                        string name = gmo.name;

                        Color[] array = new Color[] { Color.Red, Color.Green, Color.Blue,
                                                      Color.Brown, Color.Crimson, Color.Coral,
                                                      Color.Aqua, Color.Yellow, Color.Violet,
                                                      Color.Sienna, Color.Silver, Color.Salmon,
                                                      Color.Pink, Color.AntiqueWhite, Color.Beige,
                                                      Color.DarkCyan, Color.DarkGray, Color.ForestGreen, Color.LightSkyBlue,
                                                      Color.Lime, Color.Maroon, Color.Olive, Color.SteelBlue };
                        Color c = array[cindex++ % array.Length];

                        List <Vector2> polygonxz = new List <Vector2>();                              // needs it in x/z and in vector2's
                        foreach (Vector3 pd in gmo.points)
                        {
                            polygonxz.Add(new Vector2((float)pd.X, (float)pd.Z));                   // can be concave and wound the wrong way..
                        }
                        Vector2 size, avg;
                        Vector2 centre = PolygonTriangulator.Centre(polygonxz, out size, out avg);        // default geographic centre (min x/z + max x/z/2) used in case poly triangulate fails (unlikely)

                        List <List <Vector2> > polys = PolygonTriangulator.Triangulate(polygonxz, false); // cut into convex polygons first - because we want the biggest possible area for naming purposes
                        //Console.WriteLine("Region {0} decomposed to {1} ", name, polys.Count);

                        Vector2 bestpos  = centre;
                        Vector2 bestsize = new Vector2(250, 250 / 5);

                        if (polys.Count > 0)                                                     // just in case..
                        {
                            centre = PolygonTriangulator.Centroids(polys);                       // weighted mean of the centroids
                            //Bitmap map3 = DrawString(String.Format("O{0}", cindex - 1), Color.White, gmostarfont); TexturedQuadData ntext3 = TexturedQuadData.FromBitmap(map3, new PointData(centre.X, 0, centre.Y), TexturedQuadData.NoRotation, 2000, 500); datasetbks.Add(ntext3);

                            float mindist = float.MaxValue;

                            foreach (List <Vector2> points in polys)                         // now for every poly
                            {
                                if (colourregions)
                                {
                                    Color regcol = Color.FromArgb(64, c.R, c.G, c.B);

                                    if (points.Count == 3)                                    // already a triangle..
                                    {
                                        polydataset.Add(new Polygon(points, 1, regcol));
                                        //outlinedataset.Add(new Polygon(points, 1, Color.FromArgb(255, 255, 255, 0))); //DEBUG
                                    }
                                    else
                                    {
                                        List <List <Vector2> > polytri = PolygonTriangulator.Triangulate(points, true);    // cut into triangles not polygons

                                        foreach (List <Vector2> pt in polytri)
                                        {
                                            polydataset.Add(new Polygon(pt, 1, regcol));
                                            // outlinedataset.Add(new Polygon(pt, 1, Color.FromArgb(255, 255, 255, 0))); // DEBUG
                                        }
                                    }
                                }

                                //float area; Vector2 polycentrepos = PolygonTriangulator.Centroid(points,out area); Bitmap map2 = DrawString(String.Format("X") , Color.White, gmostarfont);  TexturedQuadData ntext2 = TexturedQuadData.FromBitmap(map2, new PointData(polycentrepos.X, 0, polycentrepos.Y), TexturedQuadData.NoRotation, 1000, 200); datasetbks.Add(ntext2);

                                PolygonTriangulator.FitInsideConvexPoly(points, centre, new Vector2(3000, 3000 / 5), new Vector2(200, 200),
                                                                        ref mindist, ref bestpos, ref bestsize, bestsize.X / 2);
                            }
                        }

                        Bitmap           map       = DrawString(gmo.name, Color.White, gmostarfont);
                        PointData        bitmappos = new PointData(bestpos.X, 0, bestpos.Y);
                        TexturedQuadData ntext     = TexturedQuadData.FromBitmap(map, bitmappos, TexturedQuadData.NoRotation,
                                                                                 bestsize.X, bestsize.Y);

                        datasetbks.Add(ntext);

                        outlinedataset.Add(new Polygon(polygonxz, 1, Color.FromArgb(255, 128, 128, 128)));
                    }
                }
            }

            _datasets.Add(polydataset);
            _datasets.Add(outlinedataset);
            _datasets.Add(datasetbks);
            return(_datasets);
        }