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); }
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); }
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); } }
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); }