Explorar o código

display joints tree in model view

Nicolas Cannasse %!s(int64=4) %!d(string=hai) anos
pai
achega
650bc899c8
Modificáronse 2 ficheiros con 42 adicións e 15 borrados
  1. 41 14
      hide/comp/SceneTree.hx
  2. 1 1
      hide/view/Model.hx

+ 41 - 14
hide/comp/SceneTree.hx

@@ -23,11 +23,12 @@ class SceneTree extends IconTree<String> {
 		}
 		if( path.length == 0 )
 			return root;
-		var prop = path.shift();
+		var prop = path[0];
 		switch( prop.split(":").shift() ) {
 		case "mat":
 			return root.toMesh().getMaterials()[Std.parseInt(prop.substr(4))];
-		default:
+		case "joint":
+			return root.getObjectByName(path.pop().substr(6));
 		}
 		return null;
 	}
@@ -50,17 +51,16 @@ class SceneTree extends IconTree<String> {
 		var v : Dynamic = resolvePath(id);
 
 		var obj = Std.downcast(v, h3d.scene.Object);
+		if( obj == null || Std.is(obj,h3d.scene.Skin.Joint) ) return;
 
-		if (obj != null) {
-			if (el.find(".fa-eye").length == 0) {
-				var visibilityToggle = new Element('<i class="fa fa-eye visibility-large-toggle"/>').appendTo(el.find(".jstree-anchor").first());
-				visibilityToggle.click(function (e) {
-					obj.visible = !obj.visible;
-					el.toggleClass("hidden", !obj.visible);
-				});
-			}
-			el.toggleClass("hidden", !obj.visible);
+		if (el.find(".fa-eye").length == 0) {
+			var visibilityToggle = new Element('<i class="fa fa-eye visibility-large-toggle"/>').appendTo(el.find(".jstree-anchor").first());
+			visibilityToggle.click(function (e) {
+				obj.visible = !obj.visible;
+				el.toggleClass("hidden", !obj.visible);
+			});
 		}
+		el.toggleClass("hidden", !obj.visible);
 	}
 
 	function getIcon( c : h3d.scene.Object ) {
@@ -80,9 +80,15 @@ class SceneTree extends IconTree<String> {
 		var root = showRoot ? obj.parent : obj;
 		var path = id == null ? "" : id+"/";
 		if( id != null ) {
-			var parts = [for(p in id.split("/")) Std.parseInt(p)];
-			for( p in parts )
-				root = root.getChildAt(p);
+			var parts = [for(p in id.split("/")) { id : p, index : Std.parseInt(p) }];
+			for( p in parts ) {
+				if( StringTools.startsWith(p.id,"joint:") ) {
+					root = root.getObjectByName(parts.pop().id.substr(6)); // last joint only
+					break;
+				} else {
+					root = root.getChildAt(p.index);
+				}
+			}
 		}
 		var elements : Array<IconTree.IconTreeItem<String>> = [
 			for( i in 0...root.numChildren ) {
@@ -106,6 +112,27 @@ class SceneTree extends IconTree<String> {
 					icon : "fa fa-photo",
 				});
 			}
+			var sk = Std.downcast(root,h3d.scene.Skin);
+			if( sk != null ) {
+				for( j in sk.getSkinData().rootJoints )
+					elements.push({
+						value: path+"joint:"+j.name,
+						text : j.name,
+						icon : "fa fa-gg",
+						children : j.subs.length > 0,
+					});
+			}
+		}
+		var joint = Std.downcast(root,h3d.scene.Skin.Joint);
+		if( joint != null ) {
+			var j = joint.skin.getSkinData().allJoints[joint.index];
+			for( j in j.subs )
+				elements.push({
+					value: path+"joint:"+j.name,
+					text : j.name,
+					icon : "fa fa-gg",
+					children : j.subs.length > 0,
+				});
 		}
 		return elements;
 	}

+ 1 - 1
hide/view/Model.hx

@@ -214,7 +214,7 @@ class Model extends FileView {
 	}
 
 	function selectObject( obj : h3d.scene.Object ) {
-		selectedAxes.setTransform(obj.getAbsPos());
+		selectedAxes.follow = obj;
 
 		var properties = sceneEditor.properties;
 		properties.clear();