thx, for your 2 patches Ragaes.
I was planning some updates/changes/addOns on Merge, Mirror and FaceHelper very 
soon,
This one will shorten my pain :)

Fabrice

On Apr 14, 2011, at 9:55 AM, ragaes wrote:

> Hello,
> 
> This post is for sharing a patch to fix the Merge class in Broomstick.
> 
> Index: src/away3d/tools/Merge.as
> ===============================================
> --- src/away3d/tools/Merge.as (revision 3152)
> +++ src/away3d/tools/Merge.as (working copy)
> @@ -107,13 +107,18 @@
>                       var j : uint;
>                       var i : uint;
> 
> +                     var v:Vertex = new Vertex();
> +                     var t:Matrix3D = new Matrix3D();
> +
> +                     var scenePosX:Number;
> +                     var scenePosY:Number;
> +                     var scenePosZ:Number;
> +
>                       if(!_objectspace){
> -                             var v:Vertex = new Vertex();
> -                             var t:Matrix3D = mesh2.transform;
> -
> -                             var scenePosX:Number = mesh2.scenePosition.x -
> mesh1.scenePosition.x;
> -                             var scenePosY:Number = mesh2.scenePosition.y -
> mesh1.scenePosition.y;
> -                             var scenePosZ:Number = mesh2.scenePosition.z -
> mesh1.scenePosition.z;
> +                             t = mesh2.transform;
> +                             scenePosX = mesh2.scenePosition.x - 
> mesh1.scenePosition.x;
> +                             scenePosY = mesh2.scenePosition.y - 
> mesh1.scenePosition.y;
> +                             scenePosZ = mesh2.scenePosition.z - 
> mesh1.scenePosition.z;
>                       }
> 
>                       var geometry:Geometry = mesh1.geometry;
> @@ -131,11 +136,12 @@
>                               materials.push(mesh1.subMeshes[i].material);
>                       }
> 
> +                     var hasMaterial:Boolean;
> +                     var nmaterials:Array = [];
> +
>                       if(_keepMaterial){
> -                             var hasMaterial:Boolean;
> -                             var nmaterials:Array = [];
>                               for (i = 0; i<mesh2.subMeshes.length; ++i){
> -                                     nmaterials.push((mesh2.material == 
> null)?
> mesh2.subMeshes[i].material : mesh2.material);
> +                                     
> nmaterials.push((mesh2.subMeshes[i].material != null)?
> mesh2.subMeshes[i].material : mesh2.material);
>                                       if(!hasMaterial && nmaterials[i] != 
> null)
>                                               hasMaterial = true;
>                               }
> @@ -157,7 +163,7 @@
>                       var nuvs:Vector.<Number>;
> 
>                       var addSubgeom:Boolean;
> -                     if(_keepMaterial && hasMaterial && nmaterials[0] !=
> materials[materials.length-1])
> +                     if(_keepMaterial && hasMaterial)
>                               addSubgeom = true;
> 
>                       nvertices = vectors[vectors.length-1][0];
> @@ -177,10 +183,8 @@
> 
>                       var geometry2:Geometry = mesh2.geometry;
>                       var geometriesM2:Vector.<SubGeometry> = 
> geometry2.subGeometries;
> -                     numSubGeoms = geometriesM2.length;
> +                     numSubGeoms = geometriesM2.length;
> 
> -                     var lockIndex:uint = nIndexind;
> -
>                       for (i = 0; i < numSubGeoms; ++i){
>                               subGeom = SubGeometry(geometriesM2[i]);
>                               vertices = subGeom.vertexData;
> @@ -188,12 +192,12 @@
>                               uvs = subGeom.UVData;
> 
>                               if(_keepMaterial){
> -                                     materials.push((mesh2.material == 
> null)? nmaterials[i] :
> mesh2.material);
> +                                     materials.push(nmaterials[i]);
>                               } else{
>                                       materials.push((mesh1.material == 
> null)? materials[i] :
> mesh1.material);
>                               }
> 
> -                             vecLength = (i == 0)? lockIndex : 
> indices.length;
> +                             vecLength = indices.length;
> 
>                               for (j = 0; j < vecLength;++j){
>                                       index = indices[j]*3;
> @@ -211,14 +215,22 @@
>                                               subGeom = new SubGeometry();
>                                               
> geometry.addSubGeometry(subGeom);
> 
> -                                             
> materials.push(materials.length-1);
> +                                             
> materials.push(materials[materials.length-1]);
>                                       }
> +
> +                                     var ii : uint = nIndexind + 1;
> +                                     while(nindices.length < ii)
> +                                             nindices.push(0);
> 
>                                       nindices[nIndexind++] = 
> nvertices.length/3;
> 
> +                                     ii = nIndex + 3;
> +                                     while(nvertices.length < ii)
> +                                             nvertices.push(0);
> +
>                                       if(_objectspace){
>                                               nvertices[nIndex++] = 
> vertices[index];
> -                                             nvertices[nIndex++] = 
> vertices[index+1]+250;
> +                                             nvertices[nIndex++] = 
> vertices[index+1];
>                                               nvertices[nIndex++] = 
> vertices[index+2];
> 
>                                       } else {
> @@ -238,6 +250,10 @@
>                                               nvertices[nIndex++] = v.z;
>                                       }
> 
> +                                     ii = nIndexuv + 2;
> +                                     while(nuvs.length < ii)
> +                                             nuvs.push(0);
> +
>                                       nuvs[nIndexuv++] = uvs[indexuv];
>                                       nuvs[nIndexuv++] = uvs[indexuv+1];
>                               }

Reply via email to