internal void Resolve(CadastralMapModel model) { IFeatureRef fr = m_LineRef.ReferenceFrom; Debug.Assert(fr is Operation); Feature f = model.Find <Feature>(m_LineRef.InternalId); if (f == null) { throw new ApplicationException("Cannot locate forward reference " + m_LineRef.InternalId); } // Only IntersectDirectionAndLineOperation has forward splits, so follow that logic LineFeature line = (LineFeature)f; var dff = new DeserializationFactory(fr as Operation); dff.AddLineSplit(line, DataField.SplitBefore, m_SplitBeforeId); dff.AddLineSplit(line, DataField.SplitAfter, m_SplitAfterId); IntersectOperation xop = (IntersectOperation)fr; LineFeature lineBefore, lineAfter; dff.MakeSections(line, DataField.SplitBefore, xop.IntersectionPoint, DataField.SplitAfter, out lineBefore, out lineAfter); }
/// <summary> /// Attempts to resolves this forward reference. /// </summary> /// <param name="mapModel">The map model that should now contain the relevant features.</param> internal override void Resolve(CadastralMapModel mapModel) { Feature f = mapModel.Find<Feature>(InternalId); if (f == null) throw new ApplicationException("Cannot locate forward reference " + InternalId); ReferenceFrom.ApplyFeatureRef(Field, f); }
private void findButton_Click(object sender, EventArgs e) { try { CadastralMapModel mapModel = CadastralMapModel.Current; string s = idTextBox.Text; uint idValue = UInt32.Parse(s); Feature f = mapModel.Find <Feature>(new InternalIdValue(idValue)); if (f == null) { MessageBox.Show("Cannot find feature with ID=" + idValue); return; } EditingController.Current.Select(f); Position p = null; if (f is PointFeature) { p = new Position((f as PointFeature).PointGeometry); } else if (f is LineFeature) { p = new Position((f as LineFeature).StartPoint); } else if (f is TextFeature) { p = new Position((f as TextFeature).Position); } if (p == null) { MessageBox.Show("Cannot determine position for selected feature"); return; } ISpatialDisplay d = EditingController.Current.ActiveDisplay; if (d.MapScale > 2000.0) { d.MapScale = 2000.0; } d.Center = p; this.DialogResult = DialogResult.Cancel; Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
internal override void Resolve(CadastralMapModel mapModel) { foreach (ForwardRefArrayItem item in Items) { item.Feature = mapModel.Find<Feature>(item.InternalId); if (item.Feature == null) throw new ApplicationException("Cannot locate forward reference " + item.InternalId); } ReferenceFrom.ApplyFeatureRefArray(Field, Items); }
/// <summary> /// Attempts to resolves this forward reference. /// </summary> /// <param name="mapModel">The map model that should now contain the relevant features.</param> internal override void Resolve(CadastralMapModel mapModel) { Feature f = mapModel.Find <Feature>(InternalId); if (f == null) { throw new ApplicationException("Cannot locate forward reference " + InternalId); } ReferenceFrom.ApplyFeatureRef(Field, f); }
internal override void Resolve(CadastralMapModel mapModel) { foreach (ForwardRefArrayItem item in Items) { item.Feature = mapModel.Find <Feature>(item.InternalId); if (item.Feature == null) { throw new ApplicationException("Cannot locate forward reference " + item.InternalId); } } ReferenceFrom.ApplyFeatureRefArray(Field, Items); }
internal void Resolve(CadastralMapModel model) { IFeatureRef fr = m_LineRef.ReferenceFrom; Debug.Assert(fr is Operation); Feature f = model.Find<Feature>(m_LineRef.InternalId); if (f == null) throw new ApplicationException("Cannot locate forward reference " + m_LineRef.InternalId); // Only IntersectDirectionAndLineOperation has forward splits, so follow that logic LineFeature line = (LineFeature)f; var dff = new DeserializationFactory(fr as Operation); dff.AddLineSplit(line, DataField.SplitBefore, m_SplitBeforeId); dff.AddLineSplit(line, DataField.SplitAfter, m_SplitAfterId); IntersectOperation xop = (IntersectOperation)fr; LineFeature lineBefore, lineAfter; dff.MakeSections(line, DataField.SplitBefore, xop.IntersectionPoint, DataField.SplitAfter, out lineBefore, out lineAfter); }
void CheckPts(string ptsFileName, CadastralMapModel mm) { if (!File.Exists(ptsFileName)) { return; } var badList = new List <CheckData>(); foreach (string s in File.ReadAllLines(ptsFileName)) { string[] items = s.Split(','); uint id = UInt32.Parse(items[0]); double x = Double.Parse(items[1]); double y = Double.Parse(items[2]); Position a = new Position(x, y); PointFeature p = mm.Find <PointFeature>(new InternalIdValue(id)); if (p != null) { double delta = Geom.Distance(a, p); if (delta > 0.001) { badList.Add(new CheckData() { Point = p, Delta = delta }); } } } // Obtain the calculation sequence Operation[] calcs = mm.GetCalculationSequence(); var editOrder = new Dictionary <uint, uint>(); for (int i = 0; i < calcs.Length; i++) { editOrder.Add(calcs[i].EditSequence, (uint)i); } foreach (CheckData cd in badList) { cd.CalculationOrder = editOrder[cd.Point.Creator.EditSequence]; } badList.Sort((A, B) => A.CalculationOrder.CompareTo(B.CalculationOrder)); using (StreamWriter sw = File.CreateText(ptsFileName + ".check")) { // Dump out the calc order //foreach (Operation op in calcs) // sw.WriteLine(String.Format("Edit={0} Order={1} Type={2}", op.EditSequence, editOrder[op.EditSequence], op.EditId)); sw.WriteLine("Number of points>0.001 = " + badList.Count); foreach (CheckData cd in badList) { sw.WriteLine(String.Format("Order={0} Id={1} Delta={2:0.000}", cd.CalculationOrder, cd.Point.InternalId.ItemSequence, cd.Delta)); } } }