private void LoadGrid(List <GroundTruthPoint> points) { foreach (var pnt in points) { Point address = GetGridAddressFromPoint(pnt.X, pnt.Y); grid[address.X, address.Y] = pnt; } for (int y = 12; y < 24; y++) { for (int x = 20; x < 40; x++) { if (grid[x, y] == null) { GroundTruthPoint gt = new GroundTruthPoint(); gt.X = x * 50 + 30.5 - 50; gt.Y = y * 50 + 10.5 - 50; } } } }
public Constraint(SolveProjector projector, GroundTruthPoint point) { this.projector = projector; this.point = point; }
public Constraint(SolveProjector projector, GroundTruthPoint point) { this.projector = projector; this.point = point; }
private void AddPointToTree() { if (PointTree.SelectedNode == null) { return; } if (Align.Selected) { // Code to build sets of points //if (Control.ModifierKeys == Keys.Alt || Control.ModifierKeys == (Keys.Alt | Keys.Shift)) //{ // bool North = Control.ModifierKeys == (Keys.Alt | Keys.Shift); // if (PointTree.SelectedNode.Tag is ProjectorEntry) // { // Random rnd = new Random(); // ProjectorEntry pe = PointTree.SelectedNode.Tag as ProjectorEntry; // for (double alt = 0; alt < 90; alt+=15) // { // //double alt = alts[i]; // double steps = 25; // //if (i == 3) // //{ // // steps = 5; // //} // for (double az = 0; az < 360; az += 360 / steps) // { // GroundTruthPoint pnt = new GroundTruthPoint(); // int cX = pe.Width / 2; // int cY = pe.Height / 2; // cY = 120; // double rad = pe.Height / 2; // rad = pe.Width / 2; // double az2 = az - 90; // pnt.X = cX + (float)Math.Cos(az2 / 180 * Math.PI) * ((90 - alt) / 90) * rad; // pnt.Y = cY - (float)Math.Sin(az2 / 180 * Math.PI) * ((90 - alt) / 90) * rad; // pnt.X += rnd.NextDouble() / 1000f; // pnt.Y += rnd.NextDouble() / 1000f; // //pnt.X = pe.Width / 2; // //pnt.Y = pe.Height / 2; // pnt.Alt = alt; // pnt.Az = az; // pnt.AxisType = AxisTypes.Both; // if (pnt.Y > 0) // { // pe.Constraints.Add(pnt); // pe.SelectedGroundTruth = pe.Constraints.Count - 1; // TreeNode child = PointTree.SelectedNode.Nodes.Add(pnt.ToString()); // child.Tag = pnt; // } // } // } // } if (ModifierKeys == Keys.Alt || ModifierKeys == (Keys.Alt | Keys.Shift)) { if (PointTree.SelectedNode.Tag is ProjectorEntry) { var pe = PointTree.SelectedNode.Tag as ProjectorEntry; for (var i = 0; i < 4; i++) { var alt = alts[i]; double steps = 25; if (i == 3) { steps = 5; } for (var az = 7.2; az < 360; az += 360 / steps) { var pnt = new GroundTruthPoint { X = pe.Width/2.0, Y = pe.Height/2.0, Alt = alt, Az = az, AxisType = AxisTypes.Both }; if (altCenter[pe.ID - 1] < 70) { if (((Math.Abs(az - centers[pe.ID - 1]) < 55) || (Math.Abs((az - 360) - centers[pe.ID - 1]) < 55)) && alt < 75) { pe.Constraints.Add(pnt); pe.SelectedGroundTruth = pe.Constraints.Count - 1; var child = PointTree.SelectedNode.Nodes.Add(pnt.ToString()); child.Tag = pnt; } } else if (altCenter[pe.ID - 1] == 70) { if (((Math.Abs(az - centers[pe.ID - 1]) < 95) || (Math.Abs((az - 360) - centers[pe.ID - 1]) < 95)) && alt > 25) { pe.Constraints.Add(pnt); pe.SelectedGroundTruth = pe.Constraints.Count - 1; var child = PointTree.SelectedNode.Nodes.Add(pnt.ToString()); child.Tag = pnt; } } } } } return; } if (PointTree.SelectedNode.Tag is ProjectorEntry) { var pe = PointTree.SelectedNode.Tag as ProjectorEntry; var props = new GroundTruthPointProperties(); var pnt = new GroundTruthPoint {X = pe.Width/2.0, Y = pe.Height/2.0}; props.Target = pnt; if (props.ShowDialog() == DialogResult.OK) { pe.Constraints.Add(pnt); pe.SelectedGroundTruth = pe.Constraints.Count - 1; var child = PointTree.SelectedNode.Nodes.Add(pnt.ToString()); child.Tag = pnt; PointTree.SelectedNode = child; } return; } var groundTruthPoint = PointTree.SelectedNode.Tag as GroundTruthPoint; if (groundTruthPoint != null) { var pe = PointTree.SelectedNode.Parent.Tag as ProjectorEntry; var props = new GroundTruthPointProperties(); var pnt = new GroundTruthPoint {X = pe.Width/2.0, Y = pe.Height/2.0}; props.Target = pnt; if (props.ShowDialog() == DialogResult.OK) { var index = pe.Constraints.IndexOf(groundTruthPoint) + 1; pe.Constraints.Insert(index, pnt); var child = PointTree.SelectedNode.Parent.Nodes.Insert(PointTree.SelectedNode.Index + 1, pnt.ToString()); child.Tag = pnt; PointTree.SelectedNode = child; } return; } if (PointTree.SelectedNode.Tag is Edge) { var edge = PointTree.SelectedNode.Tag as Edge; var ep = new EdgePoint {Left = new GroundTruthPoint(), Right = new GroundTruthPoint()}; ep.Left.X = CalibrationInfo.ProjLookup[edge.Left].Width / 2.0; ep.Left.Y = CalibrationInfo.ProjLookup[edge.Left].Height / 2.0; ep.Right.X = CalibrationInfo.ProjLookup[edge.Left].Width / 2.0; ep.Right.Y = CalibrationInfo.ProjLookup[edge.Left].Height / 2.0; edge.Points.Add(ep); var child = PointTree.SelectedNode.Nodes.Add(ep.ToString()); child.Tag = ep; PointTree.SelectedNode = child; return; } if (PointTree.SelectedNode.Tag is EdgePoint) { var edge = PointTree.SelectedNode.Parent.Tag as Edge; var ep = new EdgePoint {Left = new GroundTruthPoint(), Right = new GroundTruthPoint()}; ep.Left.X = CalibrationInfo.ProjLookup[edge.Left].Width / 2.0; ep.Left.Y = CalibrationInfo.ProjLookup[edge.Left].Height / 2.0; ep.Right.X = CalibrationInfo.ProjLookup[edge.Left].Width / 2.0; ep.Right.Y = CalibrationInfo.ProjLookup[edge.Left].Height / 2.0; edge.Points.Insert(PointTree.SelectedNode.Index + 1, ep); var child = PointTree.SelectedNode.Parent.Nodes.Insert(PointTree.SelectedNode.Index + 1, ep.ToString()); child.Tag = ep; PointTree.SelectedNode = child; return; } if (PointTree.SelectedNode.Text == "Edges") { var edge = new Edge(-1, -1); var props = new EdgeProperties {Edge = edge}; edge.Owner = CalibrationInfo; if (props.ShowDialog() == DialogResult.OK) { if (edge.Left != -1 && edge.Right != -1 && edge.Right != edge.Left) { CalibrationInfo.AddEdge(edge); ReloadPointTree(); } } } } else { if (PointTree.SelectedNode.Tag is ProjectorEntry) { var pe = PointTree.SelectedNode.Tag as ProjectorEntry; var pnt = new BlendPoint {X = pe.Width/2.0, Y = pe.Height/2.0}; pe.BlendPolygon.Add(pnt); pe.SelectedBlendPoint = pe.BlendPolygon.Count - 1; var child = PointTree.SelectedNode.Nodes.Add(pnt.ToString()); child.Tag = pnt; PointTree.SelectedNode = child; return; } if (PointTree.SelectedNode.Parent != null && PointTree.SelectedNode.Parent.Tag is ProjectorEntry) { var bp = (BlendPoint)PointTree.SelectedNode.Tag; var pe = PointTree.SelectedNode.Parent.Tag as ProjectorEntry; var pnt = new BlendPoint {X = pe.Width/2.0, Y = pe.Height/2.0}; var index = pe.BlendPolygon.IndexOf(bp) + 1; pe.BlendPolygon.Insert(index, pnt); pe.SelectedBlendPoint = index + 1; var child = PointTree.SelectedNode.Parent.Nodes.Insert(index, pnt.ToString()); child.Tag = pnt; PointTree.SelectedNode = child; } } }
private void ReloadPointTree() { PointTree.Nodes.Clear(); if (Align.Selected) { var constraints = PointTree.Nodes.Add(Language.GetLocalizedText(736, "Constraints")); // First all the Constraints foreach (var pe in CalibrationInfo.Projectors) { var node = constraints.Nodes.Add(pe.Name); node.Tag = pe; // First all the Constraints foreach (var pnt in pe.Constraints) { var pntNode = node.Nodes.Add(pnt.ToString()); pntNode.Tag = pnt; } } constraints.Expand(); // Not the Edges var edges = PointTree.Nodes.Add(Language.GetLocalizedText(737, "Edges")); // First all the Constraints foreach (var edge in CalibrationInfo.Edges) { var node = edges.Nodes.Add(CalibrationInfo.GetEdgeDisplayName(edge)); node.Tag = edge; foreach (var edgePoint in edge.Points) { var pntNode = node.Nodes.Add(edgePoint.ToString()); pntNode.Tag = edgePoint; } } edges.Expand(); } else { // First all the Constraints foreach (var pe in CalibrationInfo.Projectors) { var node = PointTree.Nodes.Add(pe.Name); node.Tag = pe; foreach (var bp in pe.BlendPolygon) { var pntNode = node.Nodes.Add(bp.ToString()); pntNode.Tag = bp; } } } MousePad.Invalidate(); SliderTargetNode = null; ColorCorrectTarget = null; SliderTarget = null; WeightTrackBar.Visible = false; PointWeightLabel.Visible = false; }
private void PointTree_AfterSelect(object sender, TreeViewEventArgs e) { SliderTargetNode = null; SliderTarget = null; ColorCorrectTarget = null; rightNode = -1; leftNode = -1; selectedEdge = null; if (e.Node != null && e.Node.Tag is Edge) { var edge = e.Node.Tag as Edge; selectedEdge = edge; leftNode = edge.Left; rightNode = edge.Right; } if (e.Node != null && e.Node.Tag is EdgePoint) { var edge = e.Node.Parent.Tag as Edge; var ep = e.Node.Tag as EdgePoint; if (edge != null) { selectedEdge = edge; leftNode = edge.Left; rightNode = edge.Right; SliderTarget = ep.Left; SliderTargetNode = e.Node; edge.SelectedPoint = edge.Points.IndexOf(ep); } } if (e.Node != null && e.Node.Tag is ProjectorEntry) { var pe = e.Node.Tag as ProjectorEntry; rightNode = -1; leftNode = pe.ID; ColorCorrectTarget = pe; } if (e.Node != null && e.Node.Parent != null && e.Node.Parent.Tag is ProjectorEntry) { var pe = e.Node.Parent.Tag as ProjectorEntry; rightNode = -1; leftNode = pe.ID; if (Align.Selected) { var gt = e.Node.Tag as GroundTruthPoint; if (gt != null) { var index = pe.Constraints.IndexOf(gt); SliderTarget = gt; SliderTargetNode = e.Node; pe.SelectedGroundTruth = index; SendAlignPointEditUpdate(pe, false); } } else { var bp = e.Node.Tag as BlendPoint; if (bp != null) { var index = pe.BlendPolygon.IndexOf(bp); pe.SelectedBlendPoint = index ; SendBlendPointEditUpdate(pe); } } } MousePad.Invalidate(); }
private void GenerateWarpMaps() { ProgressPopup.Show(this, Language.GetLocalizedText(747, "Building Maps"), Language.GetLocalizedText(748, "Building Warp Maps")); string path = String.Format("{0}\\ProjetorWarpMaps", Properties.Settings.Default.CahceDirectory); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } int index = 0; foreach (ProjectorEntry pe in CalibrationInfo.Projectors) { List<GroundTruthPoint> gtPoints = new List<GroundTruthPoint>(); //foreach (GroundTruthPoint gt in pe.Constraints) //{ // gtPoints.Add(gt); //} foreach (Edge edge in CalibrationInfo.Edges) { bool isRight = edge.Right == pe.ID; if (!isRight && edge.Left != pe.ID) { continue; } SolveProjector spRight = GetSolveProjector(edge.Right); SolveProjector spLeft = GetSolveProjector(edge.Left); foreach (EdgePoint ep in edge.Points) { Vector2d pntLeft = spLeft.GetCoordinatesForScreenPoint(ep.Left.X, ep.Left.Y); Vector2d pntRight = spRight.GetCoordinatesForScreenPoint(ep.Right.X, ep.Right.Y); Vector2d pntAvg = Vector2d.Average3d(pntLeft, pntRight); GroundTruthPoint gt = new GroundTruthPoint(); gt.X = isRight ? ep.Right.X : ep.Left.X; gt.Y = isRight ? ep.Right.Y : ep.Left.Y; gt.AxisType = AxisTypes.Both; gt.Az = pntAvg.X; gt.Alt = pntAvg.Y; gtPoints.Add(gt); } } Bitmap bmp = WarpMapper.MakeWarpMap(pe, CalibrationInfo.DomeSize, UseRadial.Checked, gtPoints, (CalibrationInfo.ScreenType == ScreenTypes.Spherical) ? ScreenTypes.Spherical: ScreenTypes.Cylindrical); bmp.Save(string.Format("{0}\\distort_{1}.png", path, pe.Name.Replace(" ", "_"))); bmp.Dispose(); index++; ProgressPopup.SetProgress(index * 100 / CalibrationInfo.Projectors.Count, string.Format(Language.GetLocalizedText(749, "Warp") + " {0} / {1}.", index, CalibrationInfo.Projectors.Count)); } ProgressPopup.Done(); }