コード例 #1
0
        public List <IData3DCollection> AddMapImages(BaseUtils.Map2d [] list)
        {
            if (list.Length > 0)
            {
                var datasetMapImg = Data3DCollection <TexturedQuadData> .Create("mapimage", Color.White, 1.0f);

                for (int i = 0; i < list.Length; i++)
                {
                    BaseUtils.Map2d map = list[i];

                    if (_cachedTextures.ContainsKey(map.FileName))
                    {
                        datasetMapImg.Add(_cachedTextures[map.FileName]);
                    }
                    else
                    {
                        Bitmap bmp = map.Image as Bitmap;      // either a stored one, or loaded

                        Vector3 centre = new Vector3((map.TopLeft.X + map.BottomRight.X) / 2, 0, (map.TopRight.Y + map.BottomLeft.Y) / 2);
                        float   width  = map.TopRight.X - map.BottomLeft.X;
                        float   height = map.TopLeft.Y - map.BottomRight.Y;         // its rectangular.. so does not really matter which left/right/top/bot you use

                        var texture = TexturedQuadData.FromBitmap(bmp, centre, TexturedQuadData.NoRotation, width, height);

                        _cachedTextures[map.FileName] = texture;
                        datasetMapImg.Add(texture);
                    }
                }
                _datasets.Add(datasetMapImg);
            }

            return(_datasets);
        }
コード例 #2
0
        public List <IData3DSet> AddMapImages(BaseUtils.Map2d [] list)
        {
            if (list.Length > 0)
            {
                var datasetMapImg = Data3DSetClass <TexturedQuadData> .Create("mapimage", Color.White, 1.0f);

                for (int i = 0; i < list.Length; i++)
                {
                    BaseUtils.Map2d img = list[i];

                    if (_cachedTextures.ContainsKey(img.FileName))
                    {
                        datasetMapImg.Add(_cachedTextures[img.FileName]);
                    }
                    else
                    {
                        Bitmap bmp = (Bitmap)Bitmap.FromFile(img.FilePath);

                        Vector3 centre = new Vector3((img.TopLeft.X + img.BottomRight.X) / 2, 0, (img.TopRight.Y + img.BottomLeft.Y) / 2);
                        float   width  = img.TopRight.X - img.BottomLeft.X;
                        float   height = img.TopLeft.Y - img.BottomRight.Y;         // its rectangular.. so does not really matter which left/right/top/bot you use

                        var texture = TexturedQuadData.FromBitmap(bmp, centre, TexturedQuadData.NoRotation, width, height);

                        _cachedTextures[img.FileName] = texture;
                        datasetMapImg.Add(texture);
                    }
                }
                _datasets.Add(datasetMapImg);
            }

            return(_datasets);
        }
コード例 #3
0
        public List <IData3DCollection> AddNotedBookmarks(Bitmap map, Bitmap maptarget, float widthly, float heightly, Vector3 rotation, List <HistoryEntry> syslists)
        {
            var datasetbks = Data3DCollection <TexturedQuadData> .Create("bkmrs", Color.White, 1f);

            long bookmarknoted = TargetClass.GetTargetNotedSystem();

            if (syslists != null)
            {
                foreach (HistoryEntry vs in syslists.Where(s => s.IsLocOrJump))
                {
                    SystemNoteClass notecs = SystemNoteClass.GetNoteOnSystem(vs.System.Name);

                    if (notecs != null)         // if we have a note..
                    {
                        string note = notecs.Note.Trim();

                        if (note.Length > 0)
                        {
                            PointData pd = new PointData(vs.System.X, vs.System.Y, vs.System.Z);

                            Bitmap           touse      = (notecs.id == bookmarknoted) ? maptarget : map;
                            TexturedQuadData newtexture = TexturedQuadData.FromBitmap(touse, pd, rotation, widthly, heightly, 0, heightly / 2);
                            newtexture.Tag  = vs;
                            newtexture.Tag2 = 1;        // note mark
                            datasetbks.Add(newtexture);
                        }
                    }
                }
            }

            _datasets.Add(datasetbks);

            return(_datasets);
        }
コード例 #4
0
ファイル: Data3DSetClass.cs プロジェクト: wokket/EDDiscovery
        public TexturedQuadData(Vector3[] vertices, Vector4[] texcoords, TexturedQuadData texture)
        {
            this.Vertices  = vertices;
            this.Texcoords = texcoords;

            if (texture._parentTexture != null)
            {
                texture = texture._parentTexture;
            }

            texture._childTextures.Add(this);
            this._parentTexture = texture;
            this.Color          = Color.White;  // ENSUREs alpha is 255.. use Color to set Alpha only
        }
コード例 #5
0
        public List <IData3DCollection> AddStarBookmarks(Bitmap mapstar, Bitmap mapregion, Bitmap maptarget, Bitmap mapsurface, float widthly, float heightly, Vector3 rotation)
        {
            var datasetbks = Data3DCollection <TexturedQuadData> .Create("bkmrs", Color.White, 1f);

            long bookmarktarget = TargetClass.GetTargetBookmark();

            foreach (BookmarkClass bc in GlobalBookMarkList.Instance.Bookmarks)
            {
                Bitmap           touse      = (bc.id == bookmarktarget) ? maptarget : (bc.isRegion ? mapregion : (bc.hasPlanetaryMarks ? mapsurface : mapstar));
                TexturedQuadData newtexture = TexturedQuadData.FromBitmap(touse, new PointData(bc.x, bc.y, bc.z), rotation, widthly, heightly, 0, heightly / 2);
                newtexture.Tag  = bc;
                newtexture.Tag2 = 0;        // bookmark
                datasetbks.Add(newtexture);
            }

            _datasets.Add(datasetbks);

            return(_datasets);
        }
コード例 #6
0
ファイル: Data3DSetClass.cs プロジェクト: wokket/EDDiscovery
        public void FreeTexture(bool remove)
        {
            if (_control != null && TextureVboID != 0)
            {
                if (_control.InvokeRequired)
                {
                    _control.Invoke(new Action <bool>(this.FreeTexture), remove);
                }
                else
                {
                    if (TextureVboID != 0)
                    {
                        GL.DeleteTexture(TextureVboID);
                        TextureVboID = 0;
                    }
                }

                if (remove)
                {
                    if (_parentTexture != null)
                    {
                        _parentTexture._childTextures.Remove(this);

                        _parentTexture = null;
                    }
                    else if (_childTextures.Count != 0)
                    {
                        _childTextures[0]._parentTexture = null;

                        for (int i = 1; i < _childTextures.Count; i++)
                        {
                            _childTextures[i] = _childTextures[0];
                            _childTextures[0]._childTextures.Add(_childTextures[i]);
                        }

                        _childTextures.Clear();
                    }
                }
            }
        }
コード例 #7
0
        public List <IData3DCollection> BuildSelected(ISystem centersystem, ISystem selectedsystem, GalacticMapObject selectedgmo, float widthly, float heightly, Vector3 rotation)
        {
            Bitmap selmark = SelectedMarker;

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

                dataset.Add(new PointData(centersystem.X, centersystem.Y, centersystem.Z));
                _datasets.Add(dataset);
            }

            if (selectedsystem != null)
            {
                var datasetbks = Data3DCollection <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)
            {
                if (selectedgmo.Points.Count > 0)               // paranoia
                {
                    var datasetbks = Data3DCollection <TexturedQuadData> .Create("selgmo", Color.White, 1f);

                    long             gmotarget  = TargetClass.GetTargetGMO();
                    float            hoff       = (gmotarget == selectedgmo.ID) ? (heightly * gmoseltarget) : (heightly * gmoselonly);
                    TexturedQuadData newtexture = TexturedQuadData.FromBitmap(selmark, selectedgmo.Points[0].Convert(), rotation, widthly, heightly / 2, 0, hoff);
                    newtexture.Tag = 1;
                    datasetbks.Add(newtexture);
                    _datasets.Add(datasetbks);
                }
            }

            return(_datasets);
        }
コード例 #8
0
        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)
            {
                if (selectedgmo.points.Count > 0)               // paranoia
                {
                    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, selectedgmo.points[0], rotation, widthly, heightly / 2, 0, hoff);
                    newtexture.Tag = 1;
                    datasetbks.Add(newtexture);
                    _datasets.Add(datasetbks);
                }
            }

            return(_datasets);
        }
コード例 #9
0
        public List <IData3DCollection> AddGalMapObjectsToDataset(GalacticMapping galmap, Bitmap target, float widthly, float heightly, Vector3 rotation, bool namethem, Color textc, int gmosel)
        {
            var datasetbks = Data3DCollection <TexturedQuadData> .Create("galobj", Color.White, 1f);

            if (galmap != null && galmap.Loaded)
            {
                long gmotarget = TargetClass.GetTargetGMO();

                foreach (GalacticMapObject gmo in galmap.GalacticMapObjects)
                {
                    bool enabled = (gmosel & (1 << gmo.GalMapType.Index)) != 0;         // if selected
                    if (enabled && gmo.GalMapType.VisibleType.HasValue)
                    {
                        Bitmap touse = GalMapTypeIcons[gmo.GalMapType.VisibleType.Value] as Bitmap; // under our control, so must have it

                        if (touse != null && gmo.Points.Count > 0)                                  // if it has an image its a point object , and has co-ord
                        {
                            Vector3          pd          = gmo.Points[0].Convert();
                            string           tucachename = "GalMapType:" + gmo.GalMapType.TypeName;
                            TexturedQuadData tubasetex   = null;

                            if (_cachedTextures.ContainsKey(tucachename))
                            {
                                tubasetex = _cachedTextures[tucachename];
                            }
                            else
                            {
                                tubasetex = TexturedQuadData.FromBitmap(touse, pd, rotation, widthly, heightly);
                                _cachedTextures[tucachename] = tubasetex;
                            }


                            TexturedQuadData newtexture = TexturedQuadData.FromBaseTexture(tubasetex, pd, rotation, widthly, heightly);
                            newtexture.Tag  = gmo;
                            newtexture.Tag2 = 0;
                            datasetbks.Add(newtexture);

                            if (gmo.ID == gmotarget)
                            {
                                TexturedQuadData ntag = TexturedQuadData.FromBitmap(target, pd, rotation, widthly, heightly, 0, heightly * gmotargetoff);
                                ntag.Tag  = gmo;
                                ntag.Tag2 = 2;
                                datasetbks.Add(ntag);
                            }
                        }
                    }
                }

                if (namethem)
                {
                    bool useaggregate = true;

                    if (useaggregate)
                    {
                        foreach (GalMapType t in GalMapType.GalTypes)
                        {
                            bool enabled = (gmosel & (1 << t.Index)) != 0;         // if selected
                            if (enabled)
                            {
                                Bitmap                  bmp      = null;
                                TexturedQuadData        nbasetex = null;
                                List <TexturedQuadData> ntex     = new List <TexturedQuadData>();

                                string ncachename = "GalMapNames:" + t.TypeName + textc.ToString();
                                if (_cachedBitmaps.ContainsKey(ncachename) && _cachedTextures.ContainsKey(ncachename))
                                {
                                    bmp      = _cachedBitmaps[ncachename];
                                    nbasetex = _cachedTextures[ncachename];
                                    ntex     = nbasetex.Children.ToList();
                                }
                                else
                                {
                                    List <GalacticMapObject> tgmos = galmap.GalacticMapObjects.Where(o => o.GalMapType.TypeName == t.TypeName && o.Points.Count > 0).ToList();

                                    float            maxheight = 32;
                                    List <Rectangle> bounds    = new List <Rectangle>();
                                    List <float>     widths    = new List <float>();

                                    Bitmap stringstarmeasurebitmap = new Bitmap(1, 1);
                                    using (Graphics g = Graphics.FromImage(stringstarmeasurebitmap))
                                    {
                                        foreach (GalacticMapObject gmo in tgmos)
                                        {
                                            SizeF sz = g.MeasureString(gmo.Name, gmostarfont);
                                            if (sz.Height > maxheight)
                                            {
                                                maxheight = sz.Height;
                                            }
                                            widths.Add(sz.Width);
                                        }
                                    }

                                    int textheight = (int)(maxheight + 4);

                                    int x = 0;
                                    int y = 0;

                                    foreach (float twidth in widths)
                                    {
                                        int w = (int)(twidth + 4);

                                        if ((w + x) > 1024)
                                        {
                                            x = 0;
                                            y = y + textheight;

                                            if (((y + textheight) % 1024) < (y % 1024))
                                            {
                                                y = y + ((1024 - y) % 1024);
                                            }
                                        }

                                        bounds.Add(new Rectangle(x, y, w, textheight));
                                        x = x + w;
                                    }

                                    y = y + textheight;

                                    bmp      = new Bitmap(1024, y);
                                    nbasetex = new TexturedQuadData(null, null, bmp);

                                    using (Graphics g = Graphics.FromImage(bmp))
                                    {
                                        for (int i = 0; i < tgmos.Count; i++)
                                        {
                                            GalacticMapObject gmo       = tgmos[i];
                                            string            cachename = gmo.Name + textc.ToString();
                                            Vector3           pd        = gmo.Points[0].Convert();
                                            Rectangle         clip      = bounds[i];
                                            Point             pos       = clip.Location;
                                            g.SetClip(clip);
                                            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                                            using (Brush br = new SolidBrush(textc))
                                                g.DrawString(gmo.Name, gmostarfont, br, pos);
                                            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;

                                            TexturedQuadData tex = TexturedQuadData.FromBaseTexture(nbasetex, pd, rotation, clip,
                                                                                                    (widthly / 10 * gmo.Name.Length),
                                                                                                    (heightly / 3),
                                                                                                    0, heightly * gmonameoff);
                                            tex.Tag  = gmo;
                                            tex.Tag2 = 1;
                                            _cachedTextures[cachename] = tex;
                                            ntex.Add(tex);
                                        }
                                    }

                                    _cachedBitmaps[ncachename]  = bmp;
                                    _cachedTextures[ncachename] = nbasetex;
                                }

                                foreach (TexturedQuadData tex in ntex)
                                {
                                    datasetbks.Add(tex);
                                }
                            }
                        }
                    }
                    else
                    {
                        foreach (GalacticMapObject gmo in galmap.GalacticMapObjects)
                        {
                            bool enabled = (gmosel & (1 << gmo.GalMapType.Index)) != 0;         // if selected
                            if (enabled && gmo.Points.Count > 0)
                            {
                                Vector3 pd        = gmo.Points[0].Convert();
                                Bitmap  map       = null;
                                string  cachename = gmo.Name + textc.ToString();

                                if (_cachedBitmaps.ContainsKey(cachename))      // cache them, they take a long time to compute..
                                {
                                    map = _cachedBitmaps[cachename];
                                }
                                else
                                {
                                    map = DrawString(gmo.Name, textc, gmostarfont);
                                    _cachedBitmaps.Add(cachename, map);
                                }

                                TexturedQuadData ntext = TexturedQuadData.FromBitmap(map, pd, rotation,
                                                                                     (widthly / 10 * gmo.Name.Length),
                                                                                     (heightly / 3),
                                                                                     0, heightly * gmonameoff);
                                ntext.Tag  = gmo;
                                ntext.Tag2 = 1;
                                datasetbks.Add(ntext);
                            }
                        }
                    }
                }
            }

            _datasets.Add(datasetbks);

            return(_datasets);
        }
コード例 #10
0
        public List <IData3DCollection> AddGalMapRegionsToDataset(GalacticMapping galmap, bool colourregions, int gmosel)
        {
            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     = Data3DCollection <TexturedQuadData> .Create("regtext", Color.White, 1f);

            if (galmap != null && galmap.Loaded)
            {
                long gmotarget = TargetClass.GetTargetGMO();

                int cindex = 0;
                foreach (GalacticMapObject gmo in galmap.GalacticMapObjects)
                {
                    bool enabled = (gmosel & (1 << gmo.GalMapType.Index)) != 0;         // if selected

                    if (enabled && gmo.GalMapType.Group == GalMapType.GroupType.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 (var 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);
        }
コード例 #11
0
ファイル: Data3DSetClass.cs プロジェクト: wokket/EDDiscovery
 public static TexturedQuadData FromBaseTexture(TexturedQuadData basetex, Vector3 centre, Vector3 rotationdeg, Rectangle bounds, float width, float height, float hoffset = 0, float voffset = 0)
 {
     Vector4[] texcoords = GetTexCoords(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom, basetex.Texture.Width, basetex.Texture.Height);
     Vector3[] vertices  = GetVertices(centre, rotationdeg, width, height, hoffset, voffset);
     return(new TexturedQuadData(vertices, texcoords, basetex));
 }
コード例 #12
0
ファイル: Data3DSetClass.cs プロジェクト: wokket/EDDiscovery
 public static TexturedQuadData FromBaseTexture(TexturedQuadData basetex, PointData centre, Vector3 rotationdeg, float width, float height, float hoffset = 0, float voffset = 0)
 {
     return(FromBaseTexture(basetex, centre.Pos, rotationdeg, width, height, hoffset, voffset));
 }