⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 meshutil.as.svn-base

📁 ActionScript写的3D图片展示功能
💻 SVN-BASE
字号:
package org.papervision3d.core.utils{	import flash.utils.Dictionary;		import org.papervision3d.core.geom.TriangleMesh3D;	import org.papervision3d.core.geom.renderables.Triangle3D;	import org.papervision3d.core.geom.renderables.Vertex3D;	import org.papervision3d.core.math.Plane3D;	import org.papervision3d.core.math.util.ClassificationUtil;	import org.papervision3d.core.math.util.TriangleUtil;	import org.papervision3d.core.proto.GeometryObject3D;		public class MeshUtil	{		public function MeshUtil()		{					}				public static function cutTriangleMesh(mesh:TriangleMesh3D, cuttingPlane:Plane3D):Array		{			var geom:GeometryObject3D = mesh.geometry;			var array:Array = new Array();			if(geom.faces.length){				var triangleBucketA:Array = new Array();				var triangleBucketB:Array = new Array();				var vertBucketA:Array= new Array();				var vertBucketB:Array = new Array();				var vertCacheA:Dictionary = new Dictionary(true);				var vertCacheB:Dictionary = new Dictionary(true);				var triangle:Triangle3D;				var nTriangle:Triangle3D;				var oTris:Array = geom.faces;				var vert:Vertex3D;				var nVert:Vertex3D;				var triClass:int;				var i:int;				var nTris:Array = new Array();				for each(triangle in oTris){					var tris:Array = TriangleUtil.splitTriangleWithPlane(triangle, cuttingPlane);					if(tris){						for each(nTriangle in tris){							nTris.push(nTriangle);						}					}else{						nTris.push(triangle);					}				}								for each(triangle in nTris){					triClass = ClassificationUtil.classifyTriangle(triangle, cuttingPlane);					if(triClass == ClassificationUtil.FRONT){						triangleBucketA.push(triangle);					}else if(triClass == ClassificationUtil.BACK){						triangleBucketB.push(triangle);					}				}								if(triangleBucketA.length > 0){					for each(triangle in triangleBucketA){						for(i=0; i<triangle.vertices.length; i++){							vert = triangle.vertices[i];							if(!(nVert = vertCacheA[vert])){								nVert = vert.clone();								vertCacheA[vert] = nVert;							}														vertBucketA.push(nVert);							triangle.vertices[i] = nVert;						}						triangle.updateVertices();					}					var meshA:TriangleMesh3D = new TriangleMesh3D(mesh.material, vertBucketA, triangleBucketA);					meshA.geometry.ready = true;					array.push(meshA);				}				 				if(triangleBucketB.length > 0){					for each(triangle in triangleBucketB){						for(i=0; i<triangle.vertices.length; i++){							vert = triangle.vertices[i];							if(!(nVert = vertCacheB[vert])){								nVert = vert.clone();								vertCacheB[vert] = nVert;							}							nVert = vert.clone();							vertBucketB.push(nVert);							triangle.vertices[i] = nVert;						}						triangle.updateVertices();					}					var meshB:TriangleMesh3D = new TriangleMesh3D(mesh.material, vertBucketB, triangleBucketB);					meshB.geometry.ready = true;					array.push(meshB);				}								return array;			}else{				throw new Error("source geometry empty");			}			return array;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -