Method: GuiGeo::Rectangle#disjoint
- Defined in:
- lib/gui_geometry/rectangle.rb
#disjoint(b) ⇒ Object
return 1-3 rectangles which, together, cover exactly the same area as self and b, but do not overlapp
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/gui_geometry/rectangle.rb', line 117 def disjoint(b) return self if !b || contains(b) return b if b.contains(self) return self,b unless overlaps?(b) tl_contained = contains?(b.tl) ? 1 : 0 tr_contained = contains?(b.tr) ? 1 : 0 bl_contained = contains?(b.bl) ? 1 : 0 br_contained = contains?(b.br) ? 1 : 0 sum = tl_contained + tr_contained + bl_contained + br_contained case sum when 0 # rectangles form a plus "+" if b.y < self.y r1,r2 = b,self else r1,r2 = self,b end tl1 = r1.tl br1 = point(r1.right, r2.top) tl2 = point(r1.left, r2.bottom) br2 = r1.br [ r2, rect(tl1,br1-tl1), rect(tl2,br2-tl2), ] when 1 when 2 else raise "internal error in disjoint - cases 3 and 4 should be taken care of by the return-tests at the top of the method" end end |