예제 #1
0
        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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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));
                }
            }
        }