浏览代码

added PolygonBuffer.getBounds/getPoints

Nicolas Cannasse 2 年之前
父节点
当前提交
f8bef33633
共有 1 个文件被更改,包括 33 次插入0 次删除
  1. 33 0
      h3d/col/PolygonBuffer.hx

+ 33 - 0
h3d/col/PolygonBuffer.hx

@@ -18,6 +18,39 @@ class PolygonBuffer extends Collider {
 		this.triCount = triCount >= 0 ? triCount : Std.int((indexes.length - startIndex) / 3);
 	}
 
+	public function getBounds() {
+		var i = startIndex;
+		var b = new Bounds();
+		for( t in 0...triCount*3 ) {
+			var pos = indexes[i++] * 3;
+			b.addPos(buffer[pos++], buffer[pos++], buffer[pos]);
+		}
+		return b;
+	}
+
+	public function getPoints() {
+		var vmin = 1 << 30;
+		var vmax = -(1<<30);
+		for( i in startIndex...startIndex + triCount*3 ) {
+			var pos = indexes[i];
+			if( pos < vmin ) vmin = pos;
+			if( pos > vmax ) vmax = pos;
+		}
+		var vcount = (vmax + 1) - vmin;
+		var bits = new hxd.impl.BitSet(vcount);
+		var points = [];
+		for( i in startIndex...startIndex + triCount*3 ) {
+			var pos = indexes[i];
+			var vidx = pos - vmin;
+			if( !bits.get(vidx) ) {
+				pos *= 3;
+				points.push(new FPoint(buffer[pos++], buffer[pos++], buffer[pos]));
+				bits.set(vidx);
+			}
+		}
+		return points;
+	}
+
 	public function contains( p : Point ) {
 		// CONVEX only : TODO : check convex (cache result)
 		var i = startIndex;