Property definitions

geometry $ Boxed3d :: defaultinit
# An 3d abstract bounded object
interface Boxed3d[N: Numeric]
	super Boxed[N]

	# Front bound
	#
	# require: front >= back
	fun front: N is abstract

	# Back bound
	#
	# require: back <= bottom
	fun back: N is abstract

	#     var a = new Box3d[Int].lbfwhd(1, 1, -1, 4, 4, 4)
	#     var b = new Box3d[Int].lbfwhd(2, 2, -2, 2, 2, 2)
	#     var c = new Box3d[Int].lbfwhd(2, 2,  0, 2, 2, 8)
	#     assert a.contains(b)
	#     assert not b.contains(a)
	#     assert c.contains(b)
	#     assert not b.contains(c)
	#     assert not a.contains(c)
	#     assert not c.contains(a)
	redef fun contains(other)
	do
		return super and (not other isa Boxed3d[N] or
			(self.front >= other.front and self.back <= other.back))
	end

	#     var a = new Box3d[Int].lbfwhd(0, 0, 0, 2, 2, 2)
	#     var b = new Box3d[Int].lbfwhd(1, 1, 1, 8, 2, 2)
	#     var c = new Box3d[Int].lbfwhd(3, 0, 0, 2, 2, 8)
	#     assert a.intersects(b)
	#     assert b.intersects(a)
	#     assert b.intersects(c)
	#     assert c.intersects(b)
	#     assert not c.intersects(a)
	#     assert not a.intersects(c)
	redef fun intersects(other)
	do
		return super and (not other isa Boxed3d[N] or
			(self.back <= other.front and other.back <= self.front))
	end

	redef fun padded(dist): Box3d[N] do return new Box3d[N].lrtbfb(left - dist, right + dist, top + dist, bottom - dist, front + dist, back - dist)

	redef fun to_s do return "<{class_name} left: {left}, right: {right}, top: {top}, bottom: {bottom}, front: {front}, back: {back}>"
end
lib/geometry/boxes.nit:153,1--200,3