doc/TaskJuggler/CollisionDetector.html in taskjuggler-0.0.8 vs doc/TaskJuggler/CollisionDetector.html in taskjuggler-0.0.9

- old
+ new

@@ -152,10 +152,12 @@ <li><a href="../TaskJuggler/AttributeBase.html">TaskJuggler::AttributeBase</a></li> <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li> + <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li> + <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li> <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li> <li><a href="../TaskJuggler/BookingListAttribute.html">TaskJuggler::BookingListAttribute</a></li> @@ -230,10 +232,12 @@ <li><a href="../TaskJuggler/HTMLGraphics.html">TaskJuggler::HTMLGraphics</a></li> <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li> + <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li> + <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li> <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li> <li><a href="../TaskJuggler/Journal.html">TaskJuggler::Journal</a></li> @@ -262,10 +266,12 @@ <li><a href="../TaskJuggler/LogicalExpression.html">TaskJuggler::LogicalExpression</a></li> <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li> + <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li> + <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li> <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li> <li><a href="../TaskJuggler/LogicalOperation.html">TaskJuggler::LogicalOperation</a></li> @@ -542,10 +548,12 @@ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li> <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li> + <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li> + <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li> <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li> <li><a href="../TaskJuggler/XMLBlob.html">TaskJuggler::XMLBlob</a></li> @@ -568,12 +576,10 @@ <li><a href="../RuntimeConfig.html">RuntimeConfig</a></li> <li><a href="../String.html">String</a></li> - <li><a href="../StringIO.html">StringIO</a></li> - </ul> <div id="no-class-search-results" style="display: none;">No matching classes.</div> </div> @@ -617,25 +623,25 @@ <div class="method-source-code" id="new-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 21</span> -21: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">width</span>, <span class="ruby-identifier">height</span>) -22: <span class="ruby-ivar">@width</span> = <span class="ruby-identifier">width</span> -23: <span class="ruby-ivar">@height</span> = <span class="ruby-identifier">height</span> -24: -25: <span class="ruby-comment cmt"># The zones are stored as Arrays of line segments. Horizontal blocks are</span> -26: <span class="ruby-comment cmt"># stored separately from vertical blocks. Blocked segments for a</span> -27: <span class="ruby-comment cmt"># particular x coordinate are stored in @vLines, for y coordinates in</span> -28: <span class="ruby-comment cmt"># @hLines. Each entry is an Array of [ start, end ] values that describe</span> -29: <span class="ruby-comment cmt"># the blocked segments of that particular line. Start and end point are</span> -30: <span class="ruby-comment cmt"># part of the segment. A listed segment will not be overwritten during</span> -31: <span class="ruby-comment cmt"># routing.</span> -32: <span class="ruby-ivar">@hLines</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@height</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">i</span> = [] } -33: <span class="ruby-ivar">@vLines</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@width</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">i</span> = [] } -34: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 22</span> +22: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">width</span>, <span class="ruby-identifier">height</span>) +23: <span class="ruby-ivar">@width</span> = <span class="ruby-identifier">width</span> +24: <span class="ruby-ivar">@height</span> = <span class="ruby-identifier">height</span> +25: +26: <span class="ruby-comment cmt"># The zones are stored as Arrays of line segments. Horizontal blocks are</span> +27: <span class="ruby-comment cmt"># stored separately from vertical blocks. Blocked segments for a</span> +28: <span class="ruby-comment cmt"># particular x coordinate are stored in @vLines, for y coordinates in</span> +29: <span class="ruby-comment cmt"># @hLines. Each entry is an Array of [ start, end ] values that describe</span> +30: <span class="ruby-comment cmt"># the blocked segments of that particular line. Start and end point are</span> +31: <span class="ruby-comment cmt"># part of the segment. A listed segment will not be overwritten during</span> +32: <span class="ruby-comment cmt"># routing.</span> +33: <span class="ruby-ivar">@hLines</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@height</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">i</span> = [] } +34: <span class="ruby-ivar">@vLines</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@width</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">i</span> = [] } +35: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -673,34 +679,34 @@ <div class="method-source-code" id="add-locked-one-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 40</span> -40: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addBlockedZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-identifier">horiz</span>, <span class="ruby-identifier">vert</span>) -41: <span class="ruby-comment cmt"># Clip the input rectangle to fit within the handled area of this router.</span> -42: <span class="ruby-identifier">x</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) -43: <span class="ruby-identifier">y</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@height</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) -44: <span class="ruby-identifier">w</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">w</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">x</span>) -45: <span class="ruby-identifier">h</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">h</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@height</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">y</span>) -46: -47: <span class="ruby-comment cmt"># We can ignore empty zones.</span> -48: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> -49: -50: <span class="ruby-comment cmt"># Break the rectangle into line segments and add them to the appropriate</span> -51: <span class="ruby-comment cmt"># line Arrays.</span> -52: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">horiz</span> -53: <span class="ruby-identifier">y</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">y</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> -54: <span class="ruby-identifier">addSegment</span>(<span class="ruby-ivar">@hLines</span>[<span class="ruby-identifier">i</span>], [ <span class="ruby-identifier">x</span>, <span class="ruby-identifier">x</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ]) -55: <span class="ruby-keyword kw">end</span> -56: <span class="ruby-keyword kw">end</span> -57: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">vert</span> -58: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">x</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> -59: <span class="ruby-identifier">addSegment</span>(<span class="ruby-ivar">@vLines</span>[<span class="ruby-identifier">i</span>], [ <span class="ruby-identifier">y</span>, <span class="ruby-identifier">y</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ]) -60: <span class="ruby-keyword kw">end</span> -61: <span class="ruby-keyword kw">end</span> -62: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 41</span> +41: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addBlockedZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-identifier">horiz</span>, <span class="ruby-identifier">vert</span>) +42: <span class="ruby-comment cmt"># Clip the input rectangle to fit within the handled area of this router.</span> +43: <span class="ruby-identifier">x</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) +44: <span class="ruby-identifier">y</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@height</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) +45: <span class="ruby-identifier">w</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">w</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">x</span>) +46: <span class="ruby-identifier">h</span> = <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">h</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@height</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">y</span>) +47: +48: <span class="ruby-comment cmt"># We can ignore empty zones.</span> +49: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> +50: +51: <span class="ruby-comment cmt"># Break the rectangle into line segments and add them to the appropriate</span> +52: <span class="ruby-comment cmt"># line Arrays.</span> +53: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">horiz</span> +54: <span class="ruby-identifier">y</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">y</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> +55: <span class="ruby-identifier">addSegment</span>(<span class="ruby-ivar">@hLines</span>[<span class="ruby-identifier">i</span>], [ <span class="ruby-identifier">x</span>, <span class="ruby-identifier">x</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ]) +56: <span class="ruby-keyword kw">end</span> +57: <span class="ruby-keyword kw">end</span> +58: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">vert</span> +59: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">x</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> +60: <span class="ruby-identifier">addSegment</span>(<span class="ruby-ivar">@vLines</span>[<span class="ruby-identifier">i</span>], [ <span class="ruby-identifier">y</span>, <span class="ruby-identifier">y</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ]) +61: <span class="ruby-keyword kw">end</span> +62: <span class="ruby-keyword kw">end</span> +63: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -731,33 +737,33 @@ <div class="method-source-code" id="collision--source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 67</span> -67: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collision?</span>(<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">segment</span>, <span class="ruby-identifier">horizontal</span>) -68: <span class="ruby-identifier">line</span> = (<span class="ruby-identifier">horizontal</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@hLines</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@vLines</span>)[<span class="ruby-identifier">pos</span>] -69: -70: <span class="ruby-comment cmt"># For complex charts, the segment lists can be rather long. We use a</span> -71: <span class="ruby-comment cmt"># binary search to be fairly efficient.</span> -72: <span class="ruby-identifier">l</span> = <span class="ruby-value">0</span> -73: <span class="ruby-identifier">u</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> -74: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">l</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">u</span> -75: <span class="ruby-comment cmt"># Look at the element in the middle between l and u.</span> -76: <span class="ruby-identifier">p</span> = <span class="ruby-identifier">l</span> <span class="ruby-operator">+</span> ((<span class="ruby-identifier">u</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">l</span>) <span class="ruby-operator">/</span> <span class="ruby-value">2</span>).<span class="ruby-identifier">to_i</span> -77: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">line</span>[<span class="ruby-identifier">p</span>], <span class="ruby-identifier">segment</span>) -78: -79: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">line</span>[<span class="ruby-identifier">p</span>][<span class="ruby-value">1</span>] -80: <span class="ruby-comment cmt"># The potential target is above p. Adjust lower bound.</span> -81: <span class="ruby-identifier">l</span> = <span class="ruby-identifier">p</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span> -82: <span class="ruby-keyword kw">else</span> -83: <span class="ruby-comment cmt"># The potential target is below p. Adjust upper bound.</span> -84: <span class="ruby-identifier">u</span> = <span class="ruby-identifier">p</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> -85: <span class="ruby-keyword kw">end</span> -86: <span class="ruby-keyword kw">end</span> -87: <span class="ruby-keyword kw">false</span> -88: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 68</span> +68: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collision?</span>(<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">segment</span>, <span class="ruby-identifier">horizontal</span>) +69: <span class="ruby-identifier">line</span> = (<span class="ruby-identifier">horizontal</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@hLines</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@vLines</span>)[<span class="ruby-identifier">pos</span>] +70: +71: <span class="ruby-comment cmt"># For complex charts, the segment lists can be rather long. We use a</span> +72: <span class="ruby-comment cmt"># binary search to be fairly efficient.</span> +73: <span class="ruby-identifier">l</span> = <span class="ruby-value">0</span> +74: <span class="ruby-identifier">u</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> +75: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">l</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">u</span> +76: <span class="ruby-comment cmt"># Look at the element in the middle between l and u.</span> +77: <span class="ruby-identifier">p</span> = <span class="ruby-identifier">l</span> <span class="ruby-operator">+</span> ((<span class="ruby-identifier">u</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">l</span>) <span class="ruby-operator">/</span> <span class="ruby-value">2</span>).<span class="ruby-identifier">to_i</span> +78: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">line</span>[<span class="ruby-identifier">p</span>], <span class="ruby-identifier">segment</span>) +79: +80: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">line</span>[<span class="ruby-identifier">p</span>][<span class="ruby-value">1</span>] +81: <span class="ruby-comment cmt"># The potential target is above p. Adjust lower bound.</span> +82: <span class="ruby-identifier">l</span> = <span class="ruby-identifier">p</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span> +83: <span class="ruby-keyword kw">else</span> +84: <span class="ruby-comment cmt"># The potential target is below p. Adjust upper bound.</span> +85: <span class="ruby-identifier">u</span> = <span class="ruby-identifier">p</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> +86: <span class="ruby-keyword kw">end</span> +87: <span class="ruby-keyword kw">end</span> +88: <span class="ruby-keyword kw">false</span> +89: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -784,35 +790,35 @@ <div class="method-source-code" id="to-html-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 90</span> - 90: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span> - 91: <span class="ruby-identifier">html</span> = [] - 92: <span class="ruby-comment cmt"># Change this to determine what zones you want to see.</span> - 93: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">true</span> - 94: <span class="ruby-comment cmt"># Show vertical blocks</span> - 95: <span class="ruby-identifier">x</span> = <span class="ruby-value">0</span> - 96: <span class="ruby-ivar">@vLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> - 97: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span> - 98: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-value str">'white'</span>) - 99: <span class="ruby-keyword kw">end</span> -100: <span class="ruby-identifier">x</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> -101: <span class="ruby-keyword kw">end</span> -102: <span class="ruby-keyword kw">else</span> -103: <span class="ruby-comment cmt"># Show horizontal blocks</span> -104: <span class="ruby-identifier">y</span> = <span class="ruby-value">0</span> -105: <span class="ruby-ivar">@hLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> -106: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span> -107: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">y</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">y</span>, <span class="ruby-value str">'white'</span>) -108: <span class="ruby-keyword kw">end</span> -109: <span class="ruby-identifier">y</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> -110: <span class="ruby-keyword kw">end</span> -111: <span class="ruby-keyword kw">end</span> -112: <span class="ruby-identifier">html</span> -113: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 91</span> + 91: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span> + 92: <span class="ruby-identifier">html</span> = [] + 93: <span class="ruby-comment cmt"># Change this to determine what zones you want to see.</span> + 94: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">true</span> + 95: <span class="ruby-comment cmt"># Show vertical blocks</span> + 96: <span class="ruby-identifier">x</span> = <span class="ruby-value">0</span> + 97: <span class="ruby-ivar">@vLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> + 98: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span> + 99: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-value str">'white'</span>) +100: <span class="ruby-keyword kw">end</span> +101: <span class="ruby-identifier">x</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> +102: <span class="ruby-keyword kw">end</span> +103: <span class="ruby-keyword kw">else</span> +104: <span class="ruby-comment cmt"># Show horizontal blocks</span> +105: <span class="ruby-identifier">y</span> = <span class="ruby-value">0</span> +106: <span class="ruby-ivar">@hLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> +107: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span> +108: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">y</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">y</span>, <span class="ruby-value str">'white'</span>) +109: <span class="ruby-keyword kw">end</span> +110: <span class="ruby-identifier">y</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> +111: <span class="ruby-keyword kw">end</span> +112: <span class="ruby-keyword kw">end</span> +113: <span class="ruby-identifier">html</span> +114: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -849,35 +855,35 @@ <div class="method-source-code" id="add-egment-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 127</span> -127: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addSegment</span>(<span class="ruby-identifier">line</span>, <span class="ruby-identifier">newSegment</span>) -128: <span class="ruby-comment cmt"># Search for overlaping or directly attaching segments in the list.</span> -129: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span> -130: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">length</span>) -131: <span class="ruby-identifier">segment</span> = <span class="ruby-identifier">line</span>[<span class="ruby-identifier">i</span>] -132: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mergeable?</span>(<span class="ruby-identifier">newSegment</span>, <span class="ruby-identifier">segment</span>) -133: <span class="ruby-comment cmt"># Merge exiting segment into new one</span> -134: <span class="ruby-identifier">merge</span>(<span class="ruby-identifier">newSegment</span>, <span class="ruby-identifier">segment</span>) -135: <span class="ruby-comment cmt"># Remove the old one from the list and restart with the newly created</span> -136: <span class="ruby-comment cmt"># one at the same position.</span> -137: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">delete_at</span>(<span class="ruby-identifier">i</span>) -138: <span class="ruby-keyword kw">next</span> -139: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">newSegment</span>[<span class="ruby-value">1</span>] -140: <span class="ruby-comment cmt"># Segments are stored in ascending order. If the next segment starts</span> -141: <span class="ruby-comment cmt"># with a larger value, we insert the new segment before the larger</span> -142: <span class="ruby-comment cmt"># one.</span> -143: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">i</span>, <span class="ruby-identifier">newSegment</span>) -144: <span class="ruby-keyword kw">return</span> -145: <span class="ruby-keyword kw">end</span> -146: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> -147: <span class="ruby-keyword kw">end</span> -148: <span class="ruby-comment cmt"># Append new segment</span> -149: <span class="ruby-identifier">line</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">newSegment</span> -150: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 128</span> +128: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addSegment</span>(<span class="ruby-identifier">line</span>, <span class="ruby-identifier">newSegment</span>) +129: <span class="ruby-comment cmt"># Search for overlaping or directly attaching segments in the list.</span> +130: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span> +131: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">length</span>) +132: <span class="ruby-identifier">segment</span> = <span class="ruby-identifier">line</span>[<span class="ruby-identifier">i</span>] +133: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mergeable?</span>(<span class="ruby-identifier">newSegment</span>, <span class="ruby-identifier">segment</span>) +134: <span class="ruby-comment cmt"># Merge exiting segment into new one</span> +135: <span class="ruby-identifier">merge</span>(<span class="ruby-identifier">newSegment</span>, <span class="ruby-identifier">segment</span>) +136: <span class="ruby-comment cmt"># Remove the old one from the list and restart with the newly created</span> +137: <span class="ruby-comment cmt"># one at the same position.</span> +138: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">delete_at</span>(<span class="ruby-identifier">i</span>) +139: <span class="ruby-keyword kw">next</span> +140: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">newSegment</span>[<span class="ruby-value">1</span>] +141: <span class="ruby-comment cmt"># Segments are stored in ascending order. If the next segment starts</span> +142: <span class="ruby-comment cmt"># with a larger value, we insert the new segment before the larger</span> +143: <span class="ruby-comment cmt"># one.</span> +144: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">i</span>, <span class="ruby-identifier">newSegment</span>) +145: <span class="ruby-keyword kw">return</span> +146: <span class="ruby-keyword kw">end</span> +147: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> +148: <span class="ruby-keyword kw">end</span> +149: <span class="ruby-comment cmt"># Append new segment</span> +150: <span class="ruby-identifier">line</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">newSegment</span> +151: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -906,16 +912,16 @@ <div class="method-source-code" id="clip-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 118</span> -118: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">v</span>, <span class="ruby-identifier">max</span>) -119: <span class="ruby-identifier">v</span> = <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> -120: <span class="ruby-identifier">v</span> = <span class="ruby-identifier">max</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span> -121: <span class="ruby-identifier">v</span> -122: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 119</span> +119: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">clip</span>(<span class="ruby-identifier">v</span>, <span class="ruby-identifier">max</span>) +120: <span class="ruby-identifier">v</span> = <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> +121: <span class="ruby-identifier">v</span> = <span class="ruby-identifier">max</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span> +122: <span class="ruby-identifier">v</span> +123: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -945,15 +951,15 @@ <div class="method-source-code" id="merge-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 169</span> -169: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">merge</span>(<span class="ruby-identifier">dst</span>, <span class="ruby-identifier">seg</span>) -170: <span class="ruby-identifier">dst</span>[<span class="ruby-value">0</span>] = <span class="ruby-identifier">seg</span>[<span class="ruby-value">0</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">seg</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">dst</span>[<span class="ruby-value">0</span>] -171: <span class="ruby-identifier">dst</span>[<span class="ruby-value">1</span>] = <span class="ruby-identifier">seg</span>[<span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">seg</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">dst</span>[<span class="ruby-value">1</span>] -172: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 170</span> +170: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">merge</span>(<span class="ruby-identifier">dst</span>, <span class="ruby-identifier">seg</span>) +171: <span class="ruby-identifier">dst</span>[<span class="ruby-value">0</span>] = <span class="ruby-identifier">seg</span>[<span class="ruby-value">0</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">seg</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">dst</span>[<span class="ruby-value">0</span>] +172: <span class="ruby-identifier">dst</span>[<span class="ruby-value">1</span>] = <span class="ruby-identifier">seg</span>[<span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">seg</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">dst</span>[<span class="ruby-value">1</span>] +173: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -983,16 +989,16 @@ <div class="method-source-code" id="mergeable--source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 162</span> -162: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">mergeable?</span>(<span class="ruby-identifier">s1</span>, <span class="ruby-identifier">s2</span>) -163: <span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">s1</span>, <span class="ruby-identifier">s2</span>) <span class="ruby-operator">||</span> -164: (<span class="ruby-identifier">s1</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>]) <span class="ruby-operator">||</span> -165: (<span class="ruby-identifier">s2</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>]) -166: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 163</span> +163: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">mergeable?</span>(<span class="ruby-identifier">s1</span>, <span class="ruby-identifier">s2</span>) +164: <span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">s1</span>, <span class="ruby-identifier">s2</span>) <span class="ruby-operator">||</span> +165: (<span class="ruby-identifier">s1</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>]) <span class="ruby-operator">||</span> +166: (<span class="ruby-identifier">s2</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>]) +167: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1023,14 +1029,14 @@ <div class="method-source-code" id="overlaps--source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 155</span> -155: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">s1</span>, <span class="ruby-identifier">s2</span>) -156: (<span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">1</span>]) <span class="ruby-operator">||</span> -157: (<span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">1</span>]) -158: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CollisionDetector.rb, line 156</span> +156: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">s1</span>, <span class="ruby-identifier">s2</span>) +157: (<span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">1</span>]) <span class="ruby-operator">||</span> +158: (<span class="ruby-identifier">s2</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">s1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">s2</span>[<span class="ruby-value">1</span>]) +159: <span class="ruby-keyword kw">end</span></pre> </div> </div>