public void CreateMerged_UsesOutermostPoints() { var m = BoundingRectangle.CreateMerged( new BoundingRectangle(new Vector2(10, 10), new Vector2(15, 15)), new BoundingRectangle(new Vector2(12, 8), new Vector2(13, 19)) ); var e = new BoundingRectangle(new Vector2(10, 8), new Vector2(15, 19)); Assert.AreEqual(e, m); }
private IReadOnlyList <List <ModelPose> > ComputeBatches(List <AModel> models, IViewPoint viewPoint) { var batches = new List <List <ModelPose> >(); var currentBatch = new List <ModelPose>(); var currentBounds = new BoundingRectangle(); for (var i = 0; i < models.Count; i++) { var model = models[i]; var bounds = this.Bounds.Get(model.Entity); var pose = this.Poses.Get(model.Entity); var modelPose = new ModelPose(model, pose); var boundingRectangle = BoundingRectangle.CreateFromProjectedBoundingBox(bounds.BoundingBox, viewPoint); if (currentBatch.Count == 0) { currentBounds = boundingRectangle; currentBatch.Add(modelPose); } else if (boundingRectangle.Intersects(currentBounds)) { batches.Add(currentBatch); currentBatch = new List <ModelPose> { modelPose }; currentBounds = boundingRectangle; } else { currentBatch.Add(modelPose); currentBounds = BoundingRectangle.CreateMerged(currentBounds, boundingRectangle); } } if (currentBatch.Count > 0) { batches.Add(currentBatch); } return(batches); }
private static IReadOnlyList <List <AModel> > ComputeBatches(List <AModel> models, IViewPoint viewPoint) { var batches = new List <List <AModel> >(); var currentBatch = new List <AModel>(); var currentBounds = new BoundingRectangle(); for (var i = 0; i < models.Count; i++) { var model = models[i]; var bounds = BoundingRectangle.CreateFromProjectedBoundingBox( model.BoundingBox, viewPoint); if (currentBatch.Count == 0) { currentBounds = bounds; currentBatch.Add(model); } else if (bounds.Intersects(currentBounds)) { batches.Add(currentBatch); currentBatch = new List <AModel> { model }; currentBounds = bounds; } else { currentBatch.Add(model); currentBounds = BoundingRectangle.CreateMerged(currentBounds, bounds); } } if (currentBatch.Count > 0) { batches.Add(currentBatch); } return(batches); }