public FitSet(SySal.Tracking.MIPEmulsionTrackInfo[] tks, TrackBrowser src) { Tracks = tks; Source = src; Likelihood = null; }
private void cmdToVertex_Click(object sender, EventArgs e) { if (m_VF.Count <= 0) { return; } SySal.TotalScan.Track [] tklist = new SySal.TotalScan.Track[m_VF.Count]; int i; System.Collections.ArrayList vtxaltered = new System.Collections.ArrayList(); for (i = 0; i < tklist.Length; i++) { SySal.TotalScan.VertexFit.TrackFit tf = m_VF.Track(i); tklist[i] = m_V.Tracks[((SySal.TotalScan.BaseTrackIndex)tf.Id).Id]; tklist[i].SetAttribute(SySal.TotalScan.Vertex.TrackWeightAttribute, tf.Weight); bool isupstream = (tklist[i].Downstream_Z + tklist[i].Upstream_Z) > (tf.MaxZ + tf.MinZ); SySal.TotalScan.Vertex vtxa = isupstream ? tklist[i].Upstream_Vertex : tklist[i].Downstream_Vertex; if (vtxa != null) { if (vtxaltered.Contains(vtxa) == false) { vtxaltered.Add(vtxa); } vtxa.RemoveTrack(tklist[i]); } } int[] ids = new int[vtxaltered.Count]; for (i = 0; i < ids.Length; i++) { ids[i] = ((SySal.TotalScan.Vertex)vtxaltered[i]).Id; } System.Collections.ArrayList vtxremove = new System.Collections.ArrayList(); foreach (SySal.TotalScan.Vertex vtx in vtxaltered) { try { vtx.NotifyChanged(); if (vtx.AverageDistance >= 0.0) { continue; } } catch (Exception) { vtxremove.Add(vtx.Id); } } ((SySal.TotalScan.Flexi.Volume.VertexList)m_V.Vertices).Remove((int[])vtxremove.ToArray(typeof(int))); SySal.TotalScan.Flexi.Vertex nv = new SySal.TotalScan.Flexi.Vertex(((SySal.TotalScan.Flexi.Track)tklist[0]).DataSet, m_V.Vertices.Length); nv.SetId(m_V.Vertices.Length); for (i = 0; i < tklist.Length; i++) { SySal.TotalScan.VertexFit.TrackFit tf = m_VF.Track(i); if ((tklist[i].Downstream_Z + tklist[i].Upstream_Z) > (tf.MaxZ + tf.MinZ)) { nv.AddTrack(tklist[i], false); tklist[i].SetUpstreamVertex(nv); } else { nv.AddTrack(tklist[i], true); tklist[i].SetDownstreamVertex(nv); } } try { nv.NotifyChanged(); if (nv.AverageDistance >= 0.0) { ((SySal.TotalScan.Flexi.Volume.VertexList)m_V.Vertices).Insert(new SySal.TotalScan.Flexi.Vertex[1] { nv }); } } catch (Exception x) { MessageBox.Show("Can't create new vertex - check geometry/topology.", "Vertex error", MessageBoxButtons.OK, MessageBoxIcon.Error); nv.SetId(-1); } if (nv.Id >= 0) { string s = ""; if (ids.Length > 0) { s += "\r\nVertices altered: {"; for (i = 0; i < ids.Length; i++) { if (i == 0) { s += ids[i].ToString(); } else { s += ", " + ids[i].ToString(); } } s += "}"; } if (vtxremove.Count > 0) { s += "\r\nVertices removed: {"; for (i = 0; i < vtxremove.Count; i++) { if (i == 0) { s += vtxremove[i].ToString(); } else { s += ", " + vtxremove[i].ToString(); } } s += "}"; } MessageBox.Show("New vertex " + nv.Id + " created." + s + "\r\nPlease regenerate the plot to see the changes.", "Vertex created", MessageBoxButtons.OK, MessageBoxIcon.Information); } TrackBrowser.RefreshAll(); VertexBrowser.RefreshAll(); }