/// <summary> /// Initializes a new instance of the <see cref="IntersectDirectionAndLineOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectDirectionAndLineOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Direction = editDeserializer.ReadPersistent <Direction>(DataField.Direction); ForwardFeatureRef fwRef; m_Line = editDeserializer.ReadFeatureRef <LineFeature>(this, DataField.Line, out fwRef); m_CloseTo = editDeserializer.ReadFeatureRef <PointFeature>(this, DataField.CloseTo); FeatureStub to = editDeserializer.ReadPersistent <FeatureStub>(DataField.To); FeatureStub dirLine = editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.DirLine); string idLineA = (editDeserializer.IsNextField(DataField.SplitBefore) ? editDeserializer.ReadString(DataField.SplitBefore) : null); string idLineB = (editDeserializer.IsNextField(DataField.SplitAfter) ? editDeserializer.ReadString(DataField.SplitAfter) : null); m_IsSplit = (idLineA != null && idLineB != null); // TODO (perhaps): If the line is a forward-reference (from CEdit export), we'd have to handle // AddLineSplit a bit differently, and do some more in ApplyFeatureRef. if (m_Line == null && m_IsSplit) { if (fwRef == null) { int junk = 0; } Debug.Assert(fwRef != null); editDeserializer.AddForwardSplit(fwRef, idLineA, idLineB); } DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.DirLine, dirLine); if (m_Line != null) { dff.AddLineSplit(m_Line, DataField.SplitBefore, idLineA); dff.AddLineSplit(m_Line, DataField.SplitAfter, idLineB); } ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="IntersectDirectionAndLineOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectDirectionAndLineOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Direction = editDeserializer.ReadPersistent<Direction>(DataField.Direction); ForwardFeatureRef fwRef; m_Line = editDeserializer.ReadFeatureRef<LineFeature>(this, DataField.Line, out fwRef); m_CloseTo = editDeserializer.ReadFeatureRef<PointFeature>(this, DataField.CloseTo); FeatureStub to = editDeserializer.ReadPersistent<FeatureStub>(DataField.To); FeatureStub dirLine = editDeserializer.ReadPersistentOrNull<FeatureStub>(DataField.DirLine); string idLineA = (editDeserializer.IsNextField(DataField.SplitBefore) ? editDeserializer.ReadString(DataField.SplitBefore) : null); string idLineB = (editDeserializer.IsNextField(DataField.SplitAfter) ? editDeserializer.ReadString(DataField.SplitAfter) : null); m_IsSplit = (idLineA != null && idLineB != null); // TODO (perhaps): If the line is a forward-reference (from CEdit export), we'd have to handle // AddLineSplit a bit differently, and do some more in ApplyFeatureRef. if (m_Line == null && m_IsSplit) { if (fwRef == null) { int junk = 0; } Debug.Assert(fwRef != null); editDeserializer.AddForwardSplit(fwRef, idLineA, idLineB); } DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.DirLine, dirLine); if (m_Line != null) { dff.AddLineSplit(m_Line, DataField.SplitBefore, idLineA); dff.AddLineSplit(m_Line, DataField.SplitAfter, idLineB); } ProcessFeatures(dff); }