/// <summary>
 /// Initializes a new instance of the <see cref="PointFeature"/> class (with geometry that
 /// isn't shared with any other point), and records it as part of the map model.
 /// </summary>
 /// <param name="f">Basic information about the feature.</param>
 /// <param name="g">The geometry for the point (may be null)</param>
 internal PointFeature(IFeature f, PointGeometry g)
     : base(f)
 {
     if (g == null)
         m_Geom = null;
     else
         m_Geom = new Node(this, g);
 }
 /// <summary>
 /// Creates a new <c>PointFeature</c> with geometry that isn't shared
 /// with any other point.
 /// </summary>
 /// <param name="creator">The operation that created the feature (not null)</param>
 /// <param name="id">The internal ID of this feature within the project that created it.</param>
 /// <param name="e">The entity type for the feature (not null)</param>
 /// <param name="g">The geometry for the point (may be null)</param>
 internal PointFeature(Operation creator, InternalIdValue id, IEntity e, PointGeometry g)
     : base(creator, id, e, null)
 {
     if (g == null)
         m_Geom = null;
     else
         m_Geom = new Node(this, g);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="PointFeature"/> class
 /// using the data read from persistent storage.
 /// </summary>
 /// <param name="editDeserializer">The mechanism for reading back content.</param>
 internal PointFeature(EditDeserializer editDeserializer)
     : base(editDeserializer)
 {
     long x, y;
     ReadData(editDeserializer, out x, out y);
     m_Geom = new Node(this, new PointGeometry(x, y));
 }
 /// <summary>
 /// Defines the position of this point to refer to an existing node.
 /// </summary>
 /// <param name="value">The position to assign</param>
 internal void SetNode(Node value)
 {
     m_Geom = value;
 }
        /// <summary>
        /// Defines the position of this point as a new un-shared position.
        /// </summary>
        /// <param name="ctx">The context in which the assignment is being made. May be null, but do
        /// so with care - an editing context is vital when dealing with the propagation of updates.
        /// </param>
        /// <param name="value">The position to assign (not null).</param>
        internal void ApplyPointGeometry(EditingContext ctx, PointGeometry value)
        {
            if (value == null)
                throw new ArgumentNullException();

            if (ctx != null)
                ctx.RegisterChange(this);

            m_Geom = new Node(this, value);
        }