示例#1
0
        public bool FitsInto(SegmentedRegion destRegion, SegmentOffset destOffset, int acceptableCollisions)
        {
            int collisions = 0;

            // For every segment within this "source" region, check to see if
            // each can be placed in its relative location in the destRegion.
            foreach (SegmentOffset offset in this.segments.Keys)
            {
                SegmentOffset adjusted = new SegmentOffset(destOffset.xOffset + offset.xOffset, destOffset.yOffset + offset.yOffset);
                if (destRegion.segments.ContainsKey(adjusted))
                {
                    ProcessingWindow segment = (ProcessingWindow)destRegion.segments[adjusted][0];
                    if (segment.filled)
                    {
                        if (++collisions >= acceptableCollisions)
                        {
                            return(false);
                        }
                    }
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
示例#2
0
        public bool AttemptIncorporation(SegmentedRegion toBeIncorporated)
        {
            System.Random rand = new Random();

            double percentageCollisionsToAllow = 0.10 + (rand.Next(0, 3) / 100.0);
            int    acceptableCollisions        = (int)(toBeIncorporated.segments.Count * percentageCollisionsToAllow); // random segment segment collision is OK

            for (int y = 0; y < this.MaxYOffset; y++)
            {
                for (int x = 0; x < this.MaxXOffset; x++)
                {
                    SegmentOffset offset = new SegmentOffset(x, y);

                    if (toBeIncorporated.FitsInto(this, offset, acceptableCollisions))
                    {
                        this.Incorporate(toBeIncorporated, offset);

                        //System.Console.WriteLine("Region fits at location: " + offset.xOffset * toBeIncorporated.segWidth + ", " + offset.yOffset * toBeIncorporated.segHeight);

                        return(true);
                    }
                }
            }

            return(false);
        }
示例#3
0
        public void AddSegment(ProcessingWindow segment, SegmentOffset offset)
        {
            if (segment == null)
            {
                return;
            }

            if (!this.segments.ContainsKey(offset))
            {
                this.segments.Add(offset, new List <ProcessingWindow>());
            }

            this.segments[offset].Add(segment);

            this.MaxXOffset = System.Math.Max(this.MaxXOffset, offset.xOffset);
            this.MaxYOffset = System.Math.Max(this.MaxYOffset, offset.yOffset);
        }
        public void Incorporate(SegmentedStrokes toBeIncorporated, SegmentOffset absoluteOffset)
        {
            int randX = this.rand.Next(1, this.Width / 6);
            int randY = this.rand.Next(1, this.Height / 6);

            Point strokeOffset = new Point(randX + (absoluteOffset.xOffset * this.segWidth), randY + (absoluteOffset.yOffset * this.segHeight));

            foreach (SegmentOffset relativeOffset in toBeIncorporated.segments.Keys)
            {
                SegmentOffset    windowOffset = new SegmentOffset(absoluteOffset.xOffset + relativeOffset.xOffset, absoluteOffset.yOffset + relativeOffset.yOffset);
                StrokeCollection segment      = (StrokeCollection)toBeIncorporated.segments[relativeOffset];
                segment.filled       = true;
                segment.strokeOffset = strokeOffset;

                AddSegment(segment, windowOffset);
            }
        }
示例#5
0
        public void Incorporate(SegmentedRegion toBeIncorporated, SegmentOffset absoluteOffset)
        {
            foreach (SegmentOffset relativeOffset in toBeIncorporated.segments.Keys)
            {
                SegmentOffset windowOffset = new SegmentOffset(absoluteOffset.xOffset + relativeOffset.xOffset, absoluteOffset.yOffset + relativeOffset.yOffset);

                // RSM: Changed to support dictionary segments!!!
                //ProcessingWindow segment = (ProcessingWindow)toBeIncorporated.segments[relativeOffset];
                //segment.filled = true;
                //AddSegment(segment, windowOffset);

                foreach (ProcessingWindow segment in toBeIncorporated.segments[relativeOffset])
                {
                    segment.filled = true;
                    AddSegment(segment, windowOffset);
                }
            }
        }
        public bool AttemptIncorporation(SegmentedStrokes toBeIncorporated)
        {
            for (int y = 0; y < this.MaxYOffset; y++)
            {
                for (int x = 0; x < this.MaxXOffset; x++)
                {
                    SegmentOffset offset = new SegmentOffset(x, y);

                    if (toBeIncorporated.FitsInto(this, offset))
                    {
                        this.Incorporate(toBeIncorporated, offset);

                        //System.Console.WriteLine("Region fits at location: " + offset.xOffset * toBeIncorporated.segWidth + ", " + offset.yOffset * toBeIncorporated.segHeight);

                        return(true);
                    }
                }
            }

            return(false);
        }
        public bool FitsInto(SegmentedStrokes destRegion, SegmentOffset destOffset)
        {
            // For every segment within this "source" region, check to see if
            // each can be placed in its relative location in the destRegion.
            foreach (SegmentOffset offset in this.segments.Keys)
            {
                SegmentOffset adjusted = new SegmentOffset(destOffset.xOffset + offset.xOffset, destOffset.yOffset + offset.yOffset);
                if (destRegion.segments.ContainsKey(adjusted))
                {
                    StrokeCollection segment = (StrokeCollection)destRegion.segments[adjusted];
                    if (segment.filled)
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
 public void AddSegment(StrokeCollection strokes, SegmentOffset offset)
 {
     this.segments[offset] = strokes;
     this.MaxXOffset       = System.Math.Max(this.MaxXOffset, offset.xOffset);
     this.MaxYOffset       = System.Math.Max(this.MaxYOffset, offset.yOffset);
 }