private void ComputeDisplayParametersForThumbnail() { if (currentConstellation == "Error") { return; } IPlace target = Constellations.ConstellationCentroids[currentConstellation]; Lineset boundries = Constellations.boundries[currentConstellation]; Vector3[] points = new Vector3[boundries.Points.Count]; Vector3[] pointsOut = new Vector3[boundries.Points.Count]; for (int i = 0; i < points.Length; i++) { points[i] = Coordinates.GeoTo3d(boundries.Points[i].Dec, boundries.Points[i].RA); } Matrix mat = Matrix.RotationY((float)(-(24 - (target.RA + 6)) / 12 * Math.PI)); mat = Matrix.Multiply(mat, Matrix.RotationX((float)(target.Lat / 180f * Math.PI))); mat = Matrix.Multiply(mat, Matrix.Scaling(50, -50, 50)); mat = Matrix.Multiply(mat, Matrix.Translation(48, 22, 0)); // mat.Translate(58, 33,0); Vector3.TransformCoordinate(points, ref mat, pointsOut); lines = new PointF[points.Length + 1]; int index = 0; foreach (Vector3 point in pointsOut) { lines[index++] = new PointF((float)point.X, (float)point.Y); } lines[index] = lines[0]; }
public virtual bool Draw3D(RenderContext11 renderContext, bool showOnlySelected, float opacity, string focusConsteallation, bool reverse) { constToDraw = focusConsteallation; Lineset lsSelected = null; foreach (Lineset ls in this.lines) { bool enabled = boundry ? Settings.Active.ConstellationBoundariesFilter.IsSet(ls.Name) : Settings.Active.ConstellationFiguresFilter.IsSet(ls.Name); if (enabled) { if (constToDraw == ls.Name && boundry) { lsSelected = ls; } else if (!showOnlySelected || !boundry) { DrawSingleConstellation(renderContext, ls, opacity, reverse, true); } } } if (lsSelected != null) { DrawSingleConstellation(renderContext, lsSelected, opacity, reverse, true); } renderContext.setRasterizerState(TriangleCullMode.Off, true); return(true); }
private void figureTree_AfterCheck(object sender, TreeViewEventArgs e) { if (!initialized) { return; } if (e.Node.Tag != null && e.Node.Tag is Linepoint) { Linepoint lp = (Linepoint)e.Node.Tag; lp.PointType = e.Node.Checked ? PointType.Line : PointType.Move; e.Node.Text = lp.ToString(); TreeNode parent = figureTree.SelectedNode.Parent; if (parent != null) { Lineset ls = (Lineset)parent.Tag; Earth3d.MainWindow.constellationsFigures.ResetConstellation(ls.Name); } } else { if (e.Node.Checked) { e.Node.Checked = false; } } }
private void AddFigurePoint() { TreeNode parent = figureTree.SelectedNode.Parent; Lineset ls = (Lineset)parent.Tag; ls.Points.Remove((Linepoint)figureTree.SelectedNode.Tag); parent.Nodes.Remove(figureTree.SelectedNode); Earth3d.MainWindow.constellationsFigures.ResetConstellation(ls.Name); }
private void DrawSingleConstellation(RenderContext11 renderContext, Lineset ls, float opacity, bool reverse, bool drawAllSky) { if (!constellationVertexBuffers.ContainsKey(ls.Name)) { int count = ls.Points.Count; SimpleLineList11 linelist = new SimpleLineList11(); linelist.DepthBuffered = false; constellationVertexBuffers[ls.Name] = linelist; Vector3d currentPoint = new Vector3d(); Vector3d temp; for (int i = 0; i < count; i++) { if (ls.Points[i].PointType == PointType.Move || i == 0) { currentPoint = RaDecTo3d(ls.Points[i].Dec, ls.Points[i].RA); } else { temp = RaDecTo3d(ls.Points[i].Dec, ls.Points[i].RA); linelist.AddLine(currentPoint, temp); currentPoint = temp; } } if (boundry) { temp = RaDecTo3d(ls.Points[0].Dec, ls.Points[0].RA); linelist.AddLine(currentPoint, temp); } } Color col; if (boundry) { if (constToDraw != ls.Name) { col = Properties.Settings.Default.ConstellationBoundryColor; } else { col = Properties.Settings.Default.ConstellationSelectionColor; } } else { col = Properties.Settings.Default.ConstellationFigureColor; } constellationVertexBuffers[ls.Name].DrawLines(renderContext, opacity, col); }
internal void AddFigurePoint(IPlace place) { TreeNode parent; Linepoint pnt = new Linepoint(place.RA * 15 - 180, place.Dec, PointType.Line, place.Name != Language.GetLocalizedText(90, "No Object") ? place.Name : null); if (figureTree.SelectedNode.Tag is Linepoint) { parent = figureTree.SelectedNode.Parent; Lineset ls = (Lineset)parent.Tag; Linepoint lp = (Linepoint)figureTree.SelectedNode.Tag; int index = ls.Points.FindIndex(delegate(Linepoint target) { return(target == lp); }) + 1; ls.Points.Insert(index, pnt); TreeNode child; if (index >= parent.Nodes.Count) { child = parent.Nodes.Add(pnt.ToString()); } else { child = parent.Nodes.Insert(index, pnt.ToString()); } child.Tag = pnt; child.Checked = pnt.PointType != PointType.Move; figureTree.SelectedNode = child; Earth3d.MainWindow.constellationsFigures.ResetConstellation(ls.Name); } else { parent = figureTree.SelectedNode; Lineset ls = (Lineset)figureTree.SelectedNode.Tag; ls.Points.Add(pnt); TreeNode child = parent.Nodes.Add(pnt.ToString()); child.Tag = pnt; child.Checked = pnt.PointType != PointType.Move; figureTree.SelectedNode = child; Earth3d.MainWindow.constellationsFigures.ResetConstellation(ls.Name); } }
private void DeleteSelectedPoint() { if (figureTree.SelectedNode.Tag != null && figureTree.SelectedNode.Tag is Linepoint) { TreeNode parent = figureTree.SelectedNode.Parent; Lineset ls = (Lineset)parent.Tag; ls.Points.Remove((Linepoint)figureTree.SelectedNode.Tag); parent.Nodes.Remove(figureTree.SelectedNode); Earth3d.MainWindow.constellationsFigures.ResetConstellation(ls.Name); } else if (figureTree.SelectedNode.Tag != null && figureTree.SelectedNode.Tag is Lineset) { if (MessageBox.Show(Language.GetLocalizedText(169, "This will remove all points from the selected constellation.\nAre you sure you want to do this?"), Language.GetLocalizedText(170, "Confirm Delete all Constellation Points"), MessageBoxButtons.YesNo) == DialogResult.Yes) { Lineset ls = (Lineset)figureTree.SelectedNode.Tag; ls.Points.Clear(); figureTree.SelectedNode.Nodes.Clear(); Earth3d.MainWindow.constellationsFigures.ResetConstellation(ls.Name); } } }
private void figureTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Node == null) { return; } figureTree.SelectedNode = e.Node; if (e.Button == MouseButtons.Right) { contextMenu = new ContextMenuStrip(); ToolStripMenuItem deleteMenu = new ToolStripMenuItem(Language.GetLocalizedText(167, "Delete")); deleteMenu.Click += new EventHandler(deleteMenu_Click); contextMenu.Items.Add(deleteMenu); contextMenu.Show(Cursor.Position); } else if (e.Node.Tag is Lineset) { Lineset ls = (Lineset)figureTree.SelectedNode.Tag; Earth3d.MainWindow.GotoTarget(Constellations.ConstellationCentroids[ls.Name], false, false, true); } }
public Constellations(string name, string url, bool boundry, bool noInterpollation) { instances.Add(this); if (boundry && !noInterpollation) { boundries = new Dictionary <string, Lineset>(); } this.noInterpollation = noInterpollation; this.boundry = boundry; lines = new List <Lineset>(); this.name = name; this.url = url; if (!Directory.Exists(Properties.Settings.Default.CahceDirectory)) { Directory.CreateDirectory(Properties.Settings.Default.CahceDirectory); } if (boundry) { targetPath = Properties.Settings.Default.CahceDirectory + @"data\"; extention = ".wwtbnd"; } else { targetPath = Properties.Settings.Default.CahceDirectory + @"data\figures\"; extention = ".wwtfig"; } if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } if (!string.IsNullOrEmpty(url)) { DataSetManager.DownloadFile(url, targetPath + name + extention, false, true); } Lineset lineSet = null; try { using (StreamReader sr = new StreamReader(targetPath + name + extention)) { string line; string abrv; string abrvOld = ""; double ra; double dec; double lastRa = 0; PointType type = PointType.Move; while (sr.Peek() >= 0) { line = sr.ReadLine(); if (line.Substring(11, 2) == "- ") { line = line.Substring(0, 11) + " -" + line.Substring(13, (line.Length - 13)); } if (line.Substring(11, 2) == "+ ") { line = line.Substring(0, 11) + " +" + line.Substring(13, (line.Length - 13)); } dec = Convert.ToDouble(line.Substring(11, 10)); if (noInterpollation) { ra = Convert.ToDouble(line.Substring(0, 10)); } else { ra = ((Convert.ToDouble(line.Substring(0, 10)) / 24.0 * 360) - 180); } abrv = line.Substring(23, 4).Trim(); if (!boundry) { if (line.Substring(28, 1).Trim() != "") { type = (PointType)Convert.ToInt32(line.Substring(28, 1)); } } else { if (this.noInterpollation && line.Substring(28, 1) != "O") { continue; } } if (abrv != abrvOld) { type = PointType.Start; lineSet = new Lineset(abrv); lines.Add(lineSet); if (boundry && !noInterpollation) { boundries.Add(abrv, lineSet); } abrvOld = abrv; lastRa = 0; } if (this.noInterpollation) { if (Math.Abs(ra - lastRa) > 12) { ra = ra - (24 * Math.Sign(ra - lastRa)); } lastRa = ra; } string starName = null; if (line.Length > 30) { starName = line.Substring(30).Trim(); } if (starName == null || starName != "Empty") { lineSet.Add(ra, dec, type, starName); } pointCount++; type = PointType.Line; } sr.Close(); } } catch { } }
private void DrawSingleConstellation(RenderContext11 renderContext, Lineset ls, float opacity, bool reverse, bool drawAllSky) { if (!constellationVertexBuffers.ContainsKey(ls.Name)) { int count = ls.Points.Count; SimpleLineList11 linelist = new SimpleLineList11(); linelist.DepthBuffered = false; constellationVertexBuffers[ls.Name] = linelist; Vector3d currentPoint = new Vector3d(); Vector3d temp; for (int i = 0; i < count; i++) { if (ls.Points[i].PointType == PointType.Move || i == 0) { currentPoint = RaDecTo3d(ls.Points[i].Dec, ls.Points[i].RA); } else { temp = RaDecTo3d(ls.Points[i].Dec, ls.Points[i].RA); linelist.AddLine(currentPoint, temp); currentPoint = temp; } } if (boundry) { temp = RaDecTo3d(ls.Points[0].Dec, ls.Points[0].RA); linelist.AddLine(currentPoint, temp); } } Color col; if (boundry) { if (constToDraw != ls.Name) { col = Properties.Settings.Default.ConstellationBoundryColor; } else { col = Properties.Settings.Default.ConstellationSelectionColor; } } else { col = Properties.Settings.Default.ConstellationFigureColor; } constellationVertexBuffers[ls.Name].DrawLines(renderContext, opacity , col); }
public Constellations(string name, string url, bool boundry, bool noInterpollation) { instances.Add(this); if (boundry && !noInterpollation) { boundries = new Dictionary<string, Lineset>(); } this.noInterpollation = noInterpollation; this.boundry = boundry; lines = new List<Lineset>(); this.name = name; this.url = url; if (!Directory.Exists(Properties.Settings.Default.CahceDirectory)) { Directory.CreateDirectory(Properties.Settings.Default.CahceDirectory); } if (boundry) { targetPath = Properties.Settings.Default.CahceDirectory + @"data\"; extention = ".wwtbnd"; } else { targetPath = Properties.Settings.Default.CahceDirectory + @"data\figures\"; extention = ".wwtfig"; } if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } if (!string.IsNullOrEmpty(url)) { DataSetManager.DownloadFile(url, targetPath + name + extention, false, true); } Lineset lineSet = null; try { using (StreamReader sr = new StreamReader(targetPath + name + extention)) { string line; string abrv; string abrvOld = ""; double ra; double dec; double lastRa = 0; PointType type = PointType.Move; while (sr.Peek() >= 0) { line = sr.ReadLine(); if (line.Substring(11, 2) == "- ") { line = line.Substring(0, 11) + " -" + line.Substring(13, (line.Length - 13)); } if (line.Substring(11, 2) == "+ ") { line = line.Substring(0, 11) + " +" + line.Substring(13, (line.Length - 13)); } dec = Convert.ToDouble(line.Substring(11, 10)); if (noInterpollation) { ra = Convert.ToDouble(line.Substring(0, 10)); } else { ra = ((Convert.ToDouble(line.Substring(0, 10)) / 24.0 * 360) - 180); } abrv = line.Substring(23, 4).Trim(); if (!boundry) { if (line.Substring(28, 1).Trim() != "") { type = (PointType)Convert.ToInt32(line.Substring(28, 1)); } } else { if (this.noInterpollation && line.Substring(28, 1) != "O") { continue; } } if (abrv != abrvOld) { type = PointType.Start; lineSet = new Lineset(abrv); lines.Add(lineSet); if (boundry && !noInterpollation) { boundries.Add(abrv, lineSet); } abrvOld = abrv; lastRa = 0; } if (this.noInterpollation) { if (Math.Abs(ra - lastRa) > 12) { ra = ra - (24 * Math.Sign(ra - lastRa)); } lastRa = ra; } string starName = null; if (line.Length > 30) { starName = line.Substring(30).Trim(); } if (starName == null || starName != "Empty") { lineSet.Add(ra, dec, type, starName); } pointCount++; type = PointType.Line; } sr.Close(); } } catch { } }