public override SurfaceComponent DeserializeSurfaceComponent(XElement element) { SurfaceComponent component = null; var componentType = element.ReadAttribute <ModelComponentType>("Type"); switch (componentType) { case ModelComponentType.Part: component = new PartModel(); DeserializePartModel(component as PartModel, element); break; case ModelComponentType.MaleStud: component = new MaleStudModel(); DeserializeMaleStudModel(component as MaleStudModel, element); break; case ModelComponentType.FemaleStud: component = new FemaleStudModel(); DeserializeFemaleStudModel(component as FemaleStudModel, element); break; case ModelComponentType.BrickTube: component = new BrickTubeModel(); DeserializeBrickTubeModel(component as BrickTubeModel, element); break; } if (element.HasElement(nameof(SurfaceComponent.Meshes), out XElement geomElem)) { foreach (var elem in geomElem.Elements(ModelMeshReference.NODE_NAME)) { var mesh = new ModelMeshReference(); mesh.LoadFromXml(elem); component.Meshes.Add(mesh); } } return(component); }
protected abstract void DeserializeMaleStudModel(MaleStudModel maleStudModel, XElement element);
protected override void DeserializeMaleStudModel(MaleStudModel maleStudModel, XElement element) { DeserializePartCullingModel(maleStudModel, element); }