public bool TryAppend(Primitive2D primitive) { if (!_primitives.Any()) { _primitives.Add(primitive); return(true); } foreach (var primitive2D in _primitives) { var intersection = _intersectionFactory.CreateBehaviour(primitive2D, primitive); if (intersection.Intersects()) { _primitives.Add(primitive); return(true); } } return(false); }
private void CreateRenderingFrames() { _frames.Clear(); var primitives = _primitives.Select(x => x).ToList(); if (!primitives.Any()) { return; } while (primitives.Count > 0) { var target = primitives.First(); primitives.Remove(target); var pairs = primitives.Skip(1).ToList(); var together = new List <Primitive2D>(); together.Add(target); foreach (var pair in pairs) { var intersection = _intersectionFactory.CreateBehaviour(target, pair); if (intersection.Intersects()) { together.Add(pair); primitives.Remove(pair); } } var frame = new RenderingFrame(together, _intersectionFactory); _frames.Add(frame); } if (_frames.Sum(x => x.Capacity) != _primitives.Count) { throw new InvalidConstraintException(); } }