コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Scene2D.cs プロジェクト: Ivan-Proskurin/Graphal
        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();
            }
        }