/// <summary> /// Initializes a new instance of the <see cref="NewCircleOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal NewCircleOperation(EditDeserializer editDeserializer) : base(editDeserializer) { FeatureStub closingPoint, arc; ReadData(editDeserializer, out m_Center, out m_Radius, out closingPoint, out arc); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.ClosingPoint, closingPoint); dff.AddFeatureStub(DataField.Arc, arc); ProcessFeatures(dff); /* * try * { * ProcessFeatures(dff); * } * * catch * { * ProcessFeatures(dff); * } */ }
/// <summary> /// Initializes a new instance of the <see cref="LineSubdivisionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal LineSubdivisionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Line = editDeserializer.ReadFeatureRef <LineFeature>(DataField.Line); m_Face = editDeserializer.ReadPersistent <LineSubdivisionFace>(DataField.Face); //FeatureStub[] sections = editDeserializer.ReadFeatureStubArray(DataField.Result); if (editDeserializer.IsNextField(DataField.OtherSide)) { InternalIdValue id = editDeserializer.ReadInternalId(DataField.OtherSide); OtherSide = (LineSubdivisionOperation)editDeserializer.MapModel.FindOperation(id); Debug.Assert(OtherSide != null); OtherSide.OtherSide = this; } Project p = editDeserializer.Project; IEntity pointType = editDeserializer.ReadEntity(DataField.PointType); FeatureStub[] sections = CreateStubs(p, pointType, m_Line.EntityType); DeserializationFactory result = new DeserializationFactory(this, sections); ProcessFeatures(result); // Apply any IDs if (editDeserializer.IsNextField(DataField.Ids)) { editDeserializer.ReadIdMappings(DataField.Ids); } }
/// <summary> /// Initializes a new instance of the <see cref="ParallelLineOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal ParallelLineOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_RefLine = editDeserializer.ReadFeatureRef <LineFeature>(this, DataField.RefLine); if (editDeserializer.IsNextField(DataField.Term1)) { m_Term1 = editDeserializer.ReadFeatureRef <LineFeature>(this, DataField.Term1); } if (editDeserializer.IsNextField(DataField.Term2)) { m_Term2 = editDeserializer.ReadFeatureRef <LineFeature>(this, DataField.Term2); } if (editDeserializer.IsNextField(DataField.ReverseArc) && editDeserializer.ReadBool(DataField.ReverseArc) == true) { m_Flags = 1; } m_Offset = editDeserializer.ReadPersistent <Observation>(DataField.Offset); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.From, editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.From)); dff.AddFeatureStub(DataField.To, editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.To)); dff.AddFeatureStub(DataField.NewLine, editDeserializer.ReadPersistent <FeatureStub>(DataField.NewLine)); ProcessFeatures(dff); }
public void TestSerializingWithEntityViewStructsAndFactories() { var init = _entityFactory.BuildEntity <SerializableEntityDescriptorWithViews>( 0, NamedGroup1.Group, new[] { new Implementor(1) }); init.Init(new EntityStructSerialized() { value = 5 }); init.Init(new EntityStructSerialized2() { value = 4 }); init.Init(new EntityStructPartiallySerialized() { value1 = 3 }); _simpleSubmissionEntityViewScheduler.SubmitEntities(); FasterList <byte> bytes = new FasterList <byte>(); var generateEntitySerializer = _enginesRoot.GenerateEntitySerializer(); var simpleSerializationData = new SimpleSerializationData(bytes); generateEntitySerializer.SerializeEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData , (int)SerializationType.Storage); SimpleEntitiesSubmissionScheduler simpleSubmissionEntityViewScheduler = new SimpleEntitiesSubmissionScheduler(); var newEnginesRoot = new EnginesRoot(simpleSubmissionEntityViewScheduler); _neverDoThisIsJustForTheTest = new TestEngine(); newEnginesRoot.AddEngine(_neverDoThisIsJustForTheTest); simpleSerializationData.Reset(); generateEntitySerializer = newEnginesRoot.GenerateEntitySerializer(); DeserializationFactory factory = new DeserializationFactory(); generateEntitySerializer.RegisterSerializationFactory <SerializableEntityDescriptorWithViews>(factory); generateEntitySerializer.DeserializeNewEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData , (int)SerializationType.Storage); simpleSubmissionEntityViewScheduler.SubmitEntities(); Assert.That( _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized>(0, NamedGroup1.Group).value , Is.EqualTo(5)); Assert.That( _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(0, NamedGroup1.Group).value , Is.EqualTo(4)); Assert.That(_neverDoThisIsJustForTheTest .entitiesDB.QueryEntity <EntityStructPartiallySerialized>(0, NamedGroup1.Group).value1 , Is.EqualTo(3)); newEnginesRoot.Dispose(); }
/// <summary> /// Initializes a new instance of the <see cref="RadialOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal RadialOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Direction = editDeserializer.ReadPersistent <Direction>(DataField.Direction); m_Length = editDeserializer.ReadPersistent <Observation>(DataField.Length); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, editDeserializer.ReadPersistent <FeatureStub>(DataField.To)); dff.AddFeatureStub(DataField.Line, editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.Line)); ProcessFeatures(dff); }
private static void ConfirmDeserializationFactoryWorks(DeserializationFactory df) { Example parent = new Example(); LazinatorMemory serializedBytes = new LazinatorMemory(new Memory <byte>()); ILazinator lazinatorObject = df.CreateKnownID((int)ExampleUniqueIDs.ExampleChild, serializedBytes, parent); lazinatorObject.Should().NotBeNull(); lazinatorObject.LazinatorMemoryStorage.Should().Be(serializedBytes); lazinatorObject.LazinatorParents.Should().Be(parent); }
/// <summary> /// Execute line subdivision. /// </summary> internal void Execute() { // Create stubs for all items that will be created. Project p = EditingController.Current.Project; FeatureStub[] stubs = CreateStubs(p, p.DefaultPointType, m_Line.EntityType); // And create features, geometry, and IDs DeserializationFactory ff = new DeserializationFactory(this, stubs); base.Execute(ff); }
/// <summary> /// Initializes a new instance of the <see cref="PathOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal PathOperation(EditDeserializer editDeserializer) : base(editDeserializer) { //try //{ m_From = editDeserializer.ReadFeatureRef <PointFeature>(DataField.From); m_To = editDeserializer.ReadFeatureRef <PointFeature>(DataField.To); m_EntryString = editDeserializer.ReadString(DataField.EntryString); m_DefaultEntryUnit = editDeserializer.ReadDistanceUnit(DataField.DefaultEntryUnit); Leg[] legs = PathParser.CreateLegs(m_EntryString, m_DefaultEntryUnit); PrepareLegs(this.EditSequence, legs); m_Legs = new List <Leg>(legs); Project p = editDeserializer.Project; IEntity pointType = editDeserializer.ReadEntity(DataField.PointType); IEntity lineType = editDeserializer.ReadEntity(DataField.LineType); // Pick up any alternate faces (these may be defined ONLY when dealing with // data files that were derived from old CEdit files). The deserializaing // constructor will connect the alternate faces to the legs we've just // created. if (editDeserializer.IsNextField(DataField.AlternateFaces)) { editDeserializer.ReadPersistentArray <LegFace>(DataField.AlternateFaces); } // Create stubs for everything that we could conceivably create (including // any alternate faces). FeatureStub[] stubs = CreateStubs(p, pointType, lineType); var result = new DeserializationFactory(this, stubs); result.PointType = pointType; result.LineType = lineType; // Create feature objects ProcessFeatures(result); // Apply any IDs if (editDeserializer.IsNextField(DataField.Ids)) { editDeserializer.ReadIdMappings(DataField.Ids); } //} //catch (Exception ex) //{ // throw ex; //} }
/// <summary> /// Initializes a new instance of the <see cref="IntersectTwoDirectionsOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectTwoDirectionsOperation(EditDeserializer editDeserializer) : base(editDeserializer) { FeatureStub to, line1, line2; ReadData(editDeserializer, out m_Direction1, out m_Direction2, out to, out line1, out line2); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.Line1, line1); dff.AddFeatureStub(DataField.Line2, line2); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="LineExtensionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal LineExtensionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_ExtendLine = editDeserializer.ReadFeatureRef <LineFeature>(DataField.Line); m_IsExtendFromEnd = editDeserializer.ReadBool(DataField.ExtendFromEnd); m_Length = editDeserializer.ReadPersistent <Distance>(DataField.Distance); FeatureStub newPoint = editDeserializer.ReadPersistent <FeatureStub>(DataField.NewPoint); FeatureStub newLine = editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.NewLine); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.NewPoint, newPoint); dff.AddFeatureStub(DataField.NewLine, newLine); ProcessFeatures(dff); }
public void CanGetTypeFromGenericTypeIDs_MultipleTypeParameters() { List <int> IDs = new List <int>() { (int)LazinatorCollections.LazinatorCollectionUniqueIDs.ILazinatorTriple, (int)ExampleUniqueIDs.GenericFromBase, (int)Lazinator.LazinatorCoreUniqueIDs.IWInt32, (int)Lazinator.LazinatorCoreUniqueIDs.IWInt64, (int)ExampleUniqueIDs.GenericFromBase, (int)ExampleUniqueIDs.GenericFromBase, (int)Lazinator.LazinatorCoreUniqueIDs.IWByte }; DeserializationFactory deserializationFactory = DeserializationFactory.Instance; (Type t, int numberIDsConsumed) = deserializationFactory.GetTypeBasedOnGenericIDType(new LazinatorGenericIDType(IDs)); Type expectedType = typeof(LazinatorTriple <GenericFromBase <WInt32>, WInt64, GenericFromBase <GenericFromBase <WByte> > >); t.Equals(expectedType).Should().BeTrue(); var IDsForType = deserializationFactory.GetUniqueIDListForGenericType(t); IDs.SequenceEqual(IDsForType).Should().BeTrue(); }
/// <summary> /// Initializes a new instance of the <see cref="SimpleLineSubdivisionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal SimpleLineSubdivisionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Line = editDeserializer.ReadFeatureRef <LineFeature>(DataField.Line); m_Distance = editDeserializer.ReadPersistent <Distance>(DataField.Distance); m_IsFromEnd = editDeserializer.ReadBool(DataField.EntryFromEnd); FeatureStub newPoint = editDeserializer.ReadPersistent <FeatureStub>(DataField.NewPoint); string dataId1 = editDeserializer.ReadString(DataField.NewLine1); string dataId2 = editDeserializer.ReadString(DataField.NewLine2); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.NewPoint, newPoint); dff.AddLineSplit(m_Line, DataField.NewLine1, dataId1); dff.AddLineSplit(m_Line, DataField.NewLine2, dataId2); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="IntersectDirectionAndDistanceOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectDirectionAndDistanceOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Direction = editDeserializer.ReadPersistent <Direction>(DataField.Direction); m_Distance = editDeserializer.ReadPersistent <Observation>(DataField.Distance); m_From = editDeserializer.ReadFeatureRef <PointFeature>(this, DataField.From); m_Default = editDeserializer.ReadBool(DataField.Default); FeatureStub to = editDeserializer.ReadPersistent <FeatureStub>(DataField.To); FeatureStub dirLine = editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.DirLine); FeatureStub distLine = editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.DistLine); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.DirLine, dirLine); dff.AddFeatureStub(DataField.DistLine, distLine); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="IntersectTwoDistancesOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectTwoDistancesOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Distance1 = editDeserializer.ReadPersistent <Observation>(DataField.Distance1); m_From1 = editDeserializer.ReadFeatureRef <PointFeature>(this, DataField.From1); m_Distance2 = editDeserializer.ReadPersistent <Observation>(DataField.Distance2); m_From2 = editDeserializer.ReadFeatureRef <PointFeature>(this, DataField.From2); m_Default = editDeserializer.ReadBool(DataField.Default); FeatureStub to = editDeserializer.ReadPersistent <FeatureStub>(DataField.To); FeatureStub line1 = editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.Line1); FeatureStub line2 = editDeserializer.ReadPersistentOrNull <FeatureStub>(DataField.Line2); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.Line1, line1); dff.AddFeatureStub(DataField.Line2, line2); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="DeletionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal DeletionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { try { Feature[] dels = editDeserializer.ReadFeatureRefArray <Feature>(this, DataField.Delete); m_Deletions = new List <Feature>(dels); // Deactivate features (means they will never make it into the spatial index, and // any lines will be invisible as far as intersection tests are concerned). DeserializationFactory dff = new DeserializationFactory(this); ProcessFeatures(dff); } catch (Exception ex) { throw new ApplicationException("Error loading edit " + this.EditSequence, ex); } }
/// <summary> /// Initializes a new instance of the <see cref="DeletionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal DeletionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { try { Feature[] dels = editDeserializer.ReadFeatureRefArray<Feature>(this, DataField.Delete); m_Deletions = new List<Feature>(dels); // Deactivate features (means they will never make it into the spatial index, and // any lines will be invisible as far as intersection tests are concerned). DeserializationFactory dff = new DeserializationFactory(this); ProcessFeatures(dff); } catch (Exception ex) { throw new ApplicationException("Error loading edit " + this.EditSequence, ex); } }
/// <summary> /// Initializes a new instance of the <see cref="IntersectTwoLinesOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectTwoLinesOperation(EditDeserializer editDeserializer) : base(editDeserializer) { FeatureStub to; string idLine1a, idLine1b, idLine2a, idLine2b; ReadData(editDeserializer, out m_Line1, out m_Line2, out m_CloseTo, out to, out idLine1a, out idLine1b, out idLine2a, out idLine2b); m_IsSplit1 = (idLine1a != null && idLine1b != null); m_IsSplit2 = (idLine2a != null && idLine2b != null); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddLineSplit(m_Line1, DataField.SplitBefore1, idLine1a); dff.AddLineSplit(m_Line1, DataField.SplitAfter1, idLine1b); dff.AddLineSplit(m_Line2, DataField.SplitBefore2, idLine2a); dff.AddLineSplit(m_Line2, DataField.SplitAfter2, idLine2b); 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); }
/// <summary> /// Executes this operation. /// </summary> internal void Execute() { // To from and to points MUST be defined. if (m_From == null || m_To == null) { throw new Exception("PathOperation.Execute -- terminal(s) not defined."); } // Create stubs for all items that will be created. Project p = EditingController.Current.Project; FeatureStub[] stubs = CreateStubs(p, p.DefaultPointType, p.DefaultLineType); // And create features, geometry, and IDs. Using a DeserializationFactory here // is kind of experimental. When things like CreatePointFeature get called, this // implementation doesn't generate the next available user-perceived ID. Instead // base.Execute handles IDs by calling the CreateIds override below. This is // probably a bit more robust. DeserializationFactory ff = new DeserializationFactory(this, stubs); base.Execute(ff); }
/// <summary> /// Initializes a new instance of the <see cref="NewCircleOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal NewCircleOperation(EditDeserializer editDeserializer) : base(editDeserializer) { FeatureStub closingPoint, arc; ReadData(editDeserializer, out m_Center, out m_Radius, out closingPoint, out arc); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.ClosingPoint, closingPoint); dff.AddFeatureStub(DataField.Arc, arc); ProcessFeatures(dff); /* try { ProcessFeatures(dff); } catch { ProcessFeatures(dff); } */ }
/// <summary> /// Initializes a new instance of the <see cref="PathOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal PathOperation(EditDeserializer editDeserializer) : base(editDeserializer) { //try //{ m_From = editDeserializer.ReadFeatureRef<PointFeature>(DataField.From); m_To = editDeserializer.ReadFeatureRef<PointFeature>(DataField.To); m_EntryString = editDeserializer.ReadString(DataField.EntryString); m_DefaultEntryUnit = editDeserializer.ReadDistanceUnit(DataField.DefaultEntryUnit); Leg[] legs = PathParser.CreateLegs(m_EntryString, m_DefaultEntryUnit); PrepareLegs(this.EditSequence, legs); m_Legs = new List<Leg>(legs); Project p = editDeserializer.Project; IEntity pointType = editDeserializer.ReadEntity(DataField.PointType); IEntity lineType = editDeserializer.ReadEntity(DataField.LineType); // Pick up any alternate faces (these may be defined ONLY when dealing with // data files that were derived from old CEdit files). The deserializaing // constructor will connect the alternate faces to the legs we've just // created. if (editDeserializer.IsNextField(DataField.AlternateFaces)) editDeserializer.ReadPersistentArray<LegFace>(DataField.AlternateFaces); // Create stubs for everything that we could conceivably create (including // any alternate faces). FeatureStub[] stubs = CreateStubs(p, pointType, lineType); var result = new DeserializationFactory(this, stubs); result.PointType = pointType; result.LineType = lineType; // Create feature objects ProcessFeatures(result); // Apply any IDs if (editDeserializer.IsNextField(DataField.Ids)) editDeserializer.ReadIdMappings(DataField.Ids); //} //catch (Exception ex) //{ // throw ex; //} }
/// <summary> /// Executes this operation. /// </summary> internal void Execute() { // To from and to points MUST be defined. if (m_From==null || m_To==null) throw new Exception("PathOperation.Execute -- terminal(s) not defined."); // Create stubs for all items that will be created. Project p = EditingController.Current.Project; FeatureStub[] stubs = CreateStubs(p, p.DefaultPointType, p.DefaultLineType); // And create features, geometry, and IDs. Using a DeserializationFactory here // is kind of experimental. When things like CreatePointFeature get called, this // implementation doesn't generate the next available user-perceived ID. Instead // base.Execute handles IDs by calling the CreateIds override below. This is // probably a bit more robust. DeserializationFactory ff = new DeserializationFactory(this, stubs); base.Execute(ff); }
/// <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="IntersectTwoLinesOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectTwoLinesOperation(EditDeserializer editDeserializer) : base(editDeserializer) { FeatureStub to; string idLine1a, idLine1b, idLine2a, idLine2b; ReadData(editDeserializer, out m_Line1, out m_Line2, out m_CloseTo, out to, out idLine1a, out idLine1b, out idLine2a, out idLine2b); m_IsSplit1 = (idLine1a != null && idLine1b != null); m_IsSplit2 = (idLine2a != null && idLine2b != null); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddLineSplit(m_Line1, DataField.SplitBefore1, idLine1a); dff.AddLineSplit(m_Line1, DataField.SplitAfter1, idLine1b); dff.AddLineSplit(m_Line2, DataField.SplitBefore2, idLine2a); dff.AddLineSplit(m_Line2, DataField.SplitAfter2, idLine2b); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="IntersectTwoDistancesOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectTwoDistancesOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Distance1 = editDeserializer.ReadPersistent<Observation>(DataField.Distance1); m_From1 = editDeserializer.ReadFeatureRef<PointFeature>(this, DataField.From1); m_Distance2 = editDeserializer.ReadPersistent<Observation>(DataField.Distance2); m_From2 = editDeserializer.ReadFeatureRef<PointFeature>(this, DataField.From2); m_Default = editDeserializer.ReadBool(DataField.Default); FeatureStub to = editDeserializer.ReadPersistent<FeatureStub>(DataField.To); FeatureStub line1 = editDeserializer.ReadPersistentOrNull<FeatureStub>(DataField.Line1); FeatureStub line2 = editDeserializer.ReadPersistentOrNull<FeatureStub>(DataField.Line2); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.Line1, line1); dff.AddFeatureStub(DataField.Line2, line2); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="LineExtensionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal LineExtensionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_ExtendLine = editDeserializer.ReadFeatureRef<LineFeature>(DataField.Line); m_IsExtendFromEnd = editDeserializer.ReadBool(DataField.ExtendFromEnd); m_Length = editDeserializer.ReadPersistent<Distance>(DataField.Distance); FeatureStub newPoint = editDeserializer.ReadPersistent<FeatureStub>(DataField.NewPoint); FeatureStub newLine = editDeserializer.ReadPersistentOrNull<FeatureStub>(DataField.NewLine); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.NewPoint, newPoint); dff.AddFeatureStub(DataField.NewLine, newLine); ProcessFeatures(dff); }
/// <summary> /// Execute line subdivision. /// </summary> internal void Execute() { // Create stubs for all items that will be created. Project p = EditingController.Current.Project; FeatureStub[] stubs = CreateStubs(p, p.DefaultPointType, m_Line.EntityType); // And create features, geometry, and IDs DeserializationFactory ff = new DeserializationFactory(this, stubs); base.Execute(ff); }
/// <summary> /// Initializes a new instance of the <see cref="LineSubdivisionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal LineSubdivisionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Line = editDeserializer.ReadFeatureRef<LineFeature>(DataField.Line); m_Face = editDeserializer.ReadPersistent<LineSubdivisionFace>(DataField.Face); //FeatureStub[] sections = editDeserializer.ReadFeatureStubArray(DataField.Result); if (editDeserializer.IsNextField(DataField.OtherSide)) { InternalIdValue id = editDeserializer.ReadInternalId(DataField.OtherSide); OtherSide = (LineSubdivisionOperation)editDeserializer.MapModel.FindOperation(id); Debug.Assert(OtherSide != null); OtherSide.OtherSide = this; } Project p = editDeserializer.Project; IEntity pointType = editDeserializer.ReadEntity(DataField.PointType); FeatureStub[] sections = CreateStubs(p, pointType, m_Line.EntityType); DeserializationFactory result = new DeserializationFactory(this, sections); ProcessFeatures(result); // Apply any IDs if (editDeserializer.IsNextField(DataField.Ids)) editDeserializer.ReadIdMappings(DataField.Ids); }
/// <summary> /// Initializes a new instance of the <see cref="RadialOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal RadialOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Direction = editDeserializer.ReadPersistent<Direction>(DataField.Direction); m_Length = editDeserializer.ReadPersistent<Observation>(DataField.Length); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, editDeserializer.ReadPersistent<FeatureStub>(DataField.To)); dff.AddFeatureStub(DataField.Line, editDeserializer.ReadPersistentOrNull<FeatureStub>(DataField.Line)); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="IntersectTwoDirectionsOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectTwoDirectionsOperation(EditDeserializer editDeserializer) : base(editDeserializer) { FeatureStub to, line1, line2; ReadData(editDeserializer, out m_Direction1, out m_Direction2, out to, out line1, out line2); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.Line1, line1); dff.AddFeatureStub(DataField.Line2, line2); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="IntersectDirectionAndDistanceOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal IntersectDirectionAndDistanceOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Direction = editDeserializer.ReadPersistent<Direction>(DataField.Direction); m_Distance = editDeserializer.ReadPersistent<Observation>(DataField.Distance); m_From = editDeserializer.ReadFeatureRef<PointFeature>(this, DataField.From); m_Default = editDeserializer.ReadBool(DataField.Default); FeatureStub to = editDeserializer.ReadPersistent<FeatureStub>(DataField.To); FeatureStub dirLine = editDeserializer.ReadPersistentOrNull<FeatureStub>(DataField.DirLine); FeatureStub distLine = editDeserializer.ReadPersistentOrNull<FeatureStub>(DataField.DistLine); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.To, to); dff.AddFeatureStub(DataField.DirLine, dirLine); dff.AddFeatureStub(DataField.DistLine, distLine); ProcessFeatures(dff); }
/// <summary> /// Initializes a new instance of the <see cref="SimpleLineSubdivisionOperation"/> class /// using the data read from persistent storage. /// </summary> /// <param name="editDeserializer">The mechanism for reading back content.</param> internal SimpleLineSubdivisionOperation(EditDeserializer editDeserializer) : base(editDeserializer) { m_Line = editDeserializer.ReadFeatureRef<LineFeature>(DataField.Line); m_Distance = editDeserializer.ReadPersistent<Distance>(DataField.Distance); m_IsFromEnd = editDeserializer.ReadBool(DataField.EntryFromEnd); FeatureStub newPoint = editDeserializer.ReadPersistent<FeatureStub>(DataField.NewPoint); string dataId1 = editDeserializer.ReadString(DataField.NewLine1); string dataId2 = editDeserializer.ReadString(DataField.NewLine2); DeserializationFactory dff = new DeserializationFactory(this); dff.AddFeatureStub(DataField.NewPoint, newPoint); dff.AddLineSplit(m_Line, DataField.NewLine1, dataId1); dff.AddLineSplit(m_Line, DataField.NewLine2, dataId2); ProcessFeatures(dff); }