Guest User

Untitled

a guest
May 1st, 2012
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package {
  2.    
  3.     import flash.display.Sprite;
  4.    
  5.     import away3d.containers.ObjectContainer3D;
  6.     import away3d.entities.Mesh;
  7.     import away3d.tools.MeshHelper;
  8.     import away3d.tools.Merge;
  9.    
  10.     /**
  11.      * ...
  12.      * @author Richman Stewart
  13.      */
  14.     public class MergeObjects extends Sprite {
  15.        
  16.         //merge variables
  17.         public static var mergeTool:Merge = new Merge();
  18.        
  19.         public function MergeObjects():void {
  20.            
  21.         }
  22.        
  23.         public static function mergeContainer(container:ObjectContainer3D):void {
  24.             var lib:Object = { };
  25.             var mesh:Mesh;
  26.             var srcMesh:Mesh;
  27.             var meshList:Vector.<Mesh>;
  28.             var i:int;
  29.             var count:int = container.numChildren;
  30.            
  31.             // browse meshes in container and store them
  32.             // by their material name
  33.             for (i = 0; i < count; i++) {
  34.                 mesh = container.getChildAt(i) as Mesh;
  35.                 if (mesh == null) continue;
  36.                
  37.                 if (lib[mesh.material.name] == null) {
  38.                     lib[mesh.material.name] = new Vector.<Mesh>();
  39.                 }
  40.                
  41.                 lib[mesh.material.name].push(mesh);
  42.             }
  43.            
  44.             // now merge meshes per material
  45.             for each (meshList in lib) {
  46.                 srcMesh = meshList.shift();
  47.                
  48.                 if (meshList.length > 0) {
  49.                     mesh = new Mesh(srcMesh.geometry.clone(), srcMesh.material);
  50.                     mesh.castsShadows = srcMesh.castsShadows;
  51.                     container.addChild(mesh);
  52.                     mesh.rotationX = srcMesh.rotationX;
  53.                     mesh.rotationY = srcMesh.rotationY;
  54.                     mesh.rotationZ = srcMesh.rotationZ;
  55.                     mesh.x = srcMesh.x;
  56.                     mesh.y = srcMesh.y;
  57.                     mesh.z = srcMesh.z;
  58.                    
  59.                     MeshHelper.applyRotations(mesh);
  60.                     MeshHelper.applyScales(mesh, srcMesh.scaleX, srcMesh.scaleY, srcMesh.scaleZ);
  61.                     MeshHelper.applyPosition(mesh, srcMesh.x, srcMesh.y, srcMesh.z);
  62.                    
  63.                     _mergeTool.applyToMeshes(mesh, meshList);
  64.                    
  65.                     for each (mesh in meshList) {
  66.                         container.removeChild(mesh);
  67.                         mesh.dispose();
  68.                     }
  69.                    
  70.                     container.removeChild(srcMesh);
  71.                     srcMesh.dispose();
  72.                 }
  73.             }
  74.         }
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment