Browse Source

fixed getBounds

ncannasse 11 years ago
parent
commit
c7521199cc
5 changed files with 28 additions and 14 deletions
  1. 12 1
      h3d/scene/Box.hx
  2. 6 4
      h3d/scene/CustomObject.hx
  3. 2 2
      h3d/scene/Mesh.hx
  4. 6 5
      h3d/scene/Object.hx
  5. 2 2
      h3d/scene/Skin.hx

+ 12 - 1
h3d/scene/Box.hx

@@ -44,6 +44,17 @@ class Box extends Object {
 		ctx.engine.lineP(p.add(dy), p.add(dx).add(dy), color, depth);
 		ctx.engine.lineP(p.add(dy), p.add(dx).add(dy), color, depth);
 	}
-	
+
+	public static function ofBounds( bounds : h3d.col.Bounds, ?parent : Object ) {
+		var b = new Box();
+		if( parent != null ) parent.addChild(b);
+		b.x = (bounds.xMin + bounds.xMax) * 0.5;
+		b.y = (bounds.yMin + bounds.yMax) * 0.5;
+		b.z = (bounds.zMin + bounds.zMax) * 0.5;
+		b.scaleX = bounds.xMax - bounds.xMin;
+		b.scaleY = bounds.yMax - bounds.yMin;
+		b.scaleZ = bounds.zMax - bounds.zMin;
+		return b;
+	}
 	
 }

+ 6 - 4
h3d/scene/CustomObject.hx

@@ -12,10 +12,12 @@ class CustomObject extends Object {
 		this.material = mat;
 	}
 	
-	override function getBounds( ?b : h3d.col.Bounds ) {
-		if( b == null ) b = new h3d.col.Bounds();
-		b.add(primitive.getBounds());
-		return super.getBounds(b);
+	override function getBounds( ?b : h3d.col.Bounds, rec = false ) {
+		b = super.getBounds(b, rec);
+		var tmp = primitive.getBounds().clone();
+		tmp.transform3x4(absPos);
+		b.add(tmp);
+		return b;
 	}
 	
 	override function clone( ?o : Object ) {

+ 2 - 2
h3d/scene/Mesh.hx

@@ -12,8 +12,8 @@ class Mesh extends Object {
 		this.material = mat;
 	}
 	
-	override function getBounds( ?b : h3d.col.Bounds ) {
-		b = super.getBounds(b);
+	override function getBounds( ?b : h3d.col.Bounds, rec = false ) {
+		b = super.getBounds(b, rec);
 		var tmp = primitive.getBounds().clone();
 		tmp.transform3x4(absPos);
 		b.add(tmp);

+ 6 - 5
h3d/scene/Object.hx

@@ -100,18 +100,19 @@ class Object {
 	/**
 		Return the bounds of this object, in absolute position.
 	**/
-	public function getBounds( ?b : h3d.col.Bounds ) {
-		if( b == null ) {
-			b = new h3d.col.Bounds();
+	public function getBounds( ?b : h3d.col.Bounds, rec = false ) {
+		if( !rec )
 			syncPos();
-		} else if( posChanged ) {
+		if( b == null )
+			b = new h3d.col.Bounds();
+		if( posChanged ) {
 			for( c in childs )
 				c.posChanged = true;
 			posChanged = false;
 			calcAbsPos();
 		}
 		for( c in childs )
-			c.getBounds(b);
+			c.getBounds(b, true);
 		return b;
 	}
 	

+ 2 - 2
h3d/scene/Skin.hx

@@ -74,8 +74,8 @@ class Skin extends MultiMaterial {
 	}
 	
 	
-	override function getBounds( ?b : h3d.col.Bounds ) {
-		b = super.getBounds(b);
+	override function getBounds( ?b : h3d.col.Bounds, rec = false ) {
+		b = super.getBounds(b, rec);
 		var tmp = primitive.getBounds().clone();
 		var b0 = skinData.allJoints[0];
 		// not sure if that's the good joint