123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package hide.comp;
- class SceneTree extends IconTree<String> {
- var showRoot : Bool;
- public var obj : h3d.scene.Object;
- public function new(obj, root, showRoot : Bool) {
- super(root);
- this.showRoot = showRoot;
- this.obj = obj;
- init();
- }
- function resolvePath(id:String) : Dynamic {
- var path = id.split("/");
- var root = showRoot ? obj.parent : obj;
- while( path.length > 0 ) {
- var idx = Std.parseInt(path[0]);
- if( idx == null ) break;
- path.shift();
- root = root.getChildAt(idx);
- }
- if( path.length == 0 )
- return root;
- var prop = path[0];
- switch( prop.split(":").shift() ) {
- case "mat":
- return root.toMesh().getMaterials()[Std.parseInt(prop.substr(4))];
- case "joint":
- return root.getObjectByName(path.pop().substr(6));
- }
- return null;
- }
- override function onClick(id:String, evt: Dynamic) {
- var v : Dynamic = resolvePath(id);
- if( Std.is(v, h3d.scene.Object) )
- onSelectObject(v);
- else if( Std.is(v, h3d.mat.Material) )
- onSelectMaterial(v);
- }
- public dynamic function onSelectObject( obj : h3d.scene.Object ) {
- }
- public dynamic function onSelectMaterial( m : h3d.mat.Material ) {
- }
- override function applyStyle(id: String, el: Element) {
- 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 (el.find(".ico-eye").length == 0) {
- var visibilityToggle = new Element('<i class="ico ico-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 ) {
- if( c.isMesh() ) {
- if( Std.is(c, h3d.scene.Skin) )
- return "male";
- if( Std.is(c, h3d.parts.GpuParticles) || Std.is(c, h3d.parts.Particles) )
- return "snowflake-o";
- return "cube";
- }
- if( Std.is(c, h3d.scene.Light) )
- return "sun-o";
- return "circle-o";
- }
- override function get( id : String ) {
- var root = showRoot ? obj.parent : obj;
- var path = id == null ? "" : id+"/";
- if( id != null ) {
- 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 ) {
- var c = root.getChildAt(i);
- {
- value :path+i,
- text : getObjectName(c),
- icon : "ico ico-" + getIcon(c),
- children : c.isMesh() || c.numChildren > 0,
- state : { opened : c.numChildren > 0 && c.numChildren < 10 }
- }
- }
- ];
- if( root.isMesh() ) {
- var materials = root.toMesh().getMeshMaterials();
- for( i in 0...materials.length ) {
- var m = materials[i];
- elements.push({
- value :path+"mat:"+i,
- text : m.name == null ? "Material@"+i : m.name,
- icon : "ico ico-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 : "ico ico-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 : "ico ico-gg",
- children : j.subs.length > 0,
- });
- }
- return elements;
- }
- public function getObjectName( o : h3d.scene.Object ) {
- if( o.name != null )
- return o.name;
- if( o.parent == null )
- return o.toString();
- return o.toString() + "@" + @:privateAccess o.parent.children.indexOf(o);
- }
- }
|