Ejemplo n.º 1
0
        IEnumerable <KeyValuePair <BspSegment, BspSegment> > SearchNearSegments(Curve2dBspTree bsptree)
        {
            var result = new HashSet <KeyValuePair <BspSegment, BspSegment> >();

            SearchNearSegmentsSegmentsOfNode(bsptree.Root, result);
            return(result);
        }
Ejemplo n.º 2
0
        public override void Check(IEnumerable <ObjectId> selectedObjectIds)
        {
            if (!selectedObjectIds.Any())
            {
                return;
            }

            var originBspSegments       = GetAllBspSegments(selectedObjectIds);
            var bspSegmentForCollisions = new List <BspSegmentForCollsion>();

            foreach (var bspSegment in originBspSegments)
            {
                // 将每个segment向外扩,形成一个矩形,矩形的宽为tolerance,但为了保险再向外扩0.001
                var bspSegments = BspSegmentForCollsion.CreateSegmentsForCollision(bspSegment, _tolerance / 2.0 + 0.001);
                bspSegmentForCollisions.AddRange(bspSegments);
            }

            var bsptree      = new Curve2dBspTree(bspSegmentForCollisions);
            var nearSegments = SearchNearSegments(bsptree);
            var qualified    = FilterNearSegments(nearSegments);

            // Post process for nearSegmentPairs
            _gaps = GetPolygonGapsFromSegmentPair(qualified);

            foreach (var curveSegment in originBspSegments)
            {
                curveSegment.Dispose();
            }
            foreach (var bspSegmentForCollision in bspSegmentForCollisions)
            {
                bspSegmentForCollision.Dispose();
            }
        }
Ejemplo n.º 3
0
        public Curve2dBspBuilder(IEnumerable <BspSegment> segments, Transaction transaction)
        {
            if (segments == null || !segments.Any())
            {
                throw new ArgumentNullException("segments");
            }
            if (transaction == null)
            {
                throw new ArgumentNullException("transaction");
            }

            _transaction = transaction;
            _bspTree     = new Curve2dBspTree(segments);
        }
Ejemplo n.º 4
0
        private void BuildBspTree(IEnumerable <ObjectId> allIds)
        {
            var allBspSegments = new List <BspSegment>();

            foreach (var id in allIds)
            {
                var curve = _transaction.GetObject(id, OpenMode.ForRead) as Curve;
                if (curve == null)
                {
                    continue;
                }

                var segments    = CurveUtils.GetSegment2dsOfCurve(curve, _transaction);
                var bspSegments = segments.Select(it => new BspSegment()
                {
                    EntityId    = id,
                    LineSegment = it
                });
                allBspSegments.AddRange(bspSegments);
            }
            _bspTree = new Curve2dBspTree(allBspSegments);
        }