public static ModelVisual ReadFrom(Stream visualStream) { var visual = new ModelVisual(); using (var visualReader = new BigworldXmlReader(visualStream)) { visualReader.ReadStartElement(); visual.Deserialize(visualReader); visualReader.ReadEndElement(); } return(visual); }
public Model(ModelViewModel modelViewerViewModel, ITankObject tankObject, ModuleViewModel moduleViewModel) { ModuleViewModel = moduleViewModel; _modelViewerViewModel = modelViewerViewModel; _tankObject = tankObject; DispatchUniqueProperty(); var model = this.ModelObject.Model.Undamaged; LoadingTask = Task.Factory.StartNew(() => { try { using (Diagnostics.PotentialExceptionRegion) { using (var visualStream = this.OpenVisualFile(model)) { this.Visual = ModelVisual.ReadFrom(visualStream); } } } catch (Exception e) { Log.Info("exception occurred when load visual", e); } }).ContinueWith((_) => { try { using (Diagnostics.PotentialExceptionRegion) { using (var modelStream = this.OpenPrimitiveFile(model)) { this.Primitive = ModelPrimitive.ReadFrom(modelStream, this.Visual, false); } } } catch (Exception e) { Log.Info("exception occurred when load primitive", e); } }); var collisionModel = this.ModelObject.Model.Collision; LoadingTask = LoadingTask.ContinueWith((_) => { try { using (Diagnostics.PotentialExceptionRegion) { using (var visualStream = this.OpenVisualFile(collisionModel)) { this.CollisionVisual = ModelVisual.ReadFrom(visualStream); foreach (var rendetSet in CollisionVisual.RenderSets) { foreach (var groupKv in rendetSet.Geometry.ModelPrimitiveGroups) { var material = groupKv.Value.Material; material.ShowArmor = true; if (ArmorObject.Armor.TryGetArmorValue(material.Identifier, out ArmorGroup armor)) { material.Armor = armor; } else { material.Armor = new ArmorGroup(); } } } } } } catch (Exception e) { Log.Info("exception occurred when load collision visual", e); } }).ContinueWith((_) => { try { using (Diagnostics.PotentialExceptionRegion) { using (var modelStream = OpenPrimitiveFile(collisionModel)) { this.CollisionPrimitive = ModelPrimitive.ReadFrom(modelStream, CollisionVisual, true); } } } catch (Exception e) { Log.Info("exception occurred when load collision primitive", e); } }); }