// Token: 0x060042CC RID: 17100 RVA: 0x001565C4 File Offset: 0x001549C4 public PPMesh.Face GetIntersectingPolygon(Ray ray, bool excludeBackSidePolygons) { Vector3 origin = this.Transform.InverseTransformPoint(ray.origin); Vector3 direction = this.Transform.InverseTransformDirection(ray.direction); Ray ray2 = new Ray(origin, direction); PPMesh.Face result = null; float num = float.MaxValue; foreach (PPMesh.Face face in this.faces) { Vector3 vector = this.vertices[face.p0]; Vector3 vector2 = this.vertices[face.p1]; Vector3 vector3 = this.vertices[face.p2]; float num2; if (MeshUtils.RayTriangleIntersection(vector, vector2, vector3, ray2.origin, ray2.direction, out num2) && num2 < num) { if (!excludeBackSidePolygons || PrimitivesPro.Utils.Plane.GetSide(vector, vector2, vector3, ray2.origin)) { num = num2; result = face; } } } return(result); }
// Token: 0x060042CB RID: 17099 RVA: 0x001564BC File Offset: 0x001548BC public float GetNearestPoint(Ray ray, out int index, bool excludeBackSidePolygons) { Vector3 origin = this.Transform.InverseTransformPoint(ray.origin); Vector3 direction = this.Transform.InverseTransformDirection(ray.direction); Ray ray2 = new Ray(origin, direction); float num = float.MaxValue; int num2 = -1; for (int i = 0; i < this.vertices.Length; i++) { Vector3 point = this.vertices[i]; float num3 = MeshUtils.DistanceToLine2(ray2, point); if (num3 < num) { if (excludeBackSidePolygons) { PPMesh.Face face = this.vertexFaces[i]; if (face != null && !PrimitivesPro.Utils.Plane.GetSide(this.vertices[face.p0], this.vertices[face.p1], this.vertices[face.p2], ray2.origin)) { goto IL_E0; } } num = num3; num2 = i; } IL_E0 :; } index = num2; return(num); }
// Token: 0x060042CF RID: 17103 RVA: 0x00156864 File Offset: 0x00154C64 public Vector3[] GetFaceRectangle(PPMesh.Face face) { Vector3 vector = this.Transform.TransformPoint(this.vertices[face.p0]); Vector3 vector2 = this.Transform.TransformPoint(this.vertices[face.p1]); Vector3 vector3 = this.Transform.TransformPoint(this.vertices[face.p2]); return(new Vector3[] { vector, vector2, vector3, vector3 }); }
// Token: 0x060042D5 RID: 17109 RVA: 0x00156B78 File Offset: 0x00154F78 public Vector3 GetFaceNormalWorld(PPMesh.Face face) { return(MeshUtils.ComputePolygonNormal(this.Transform.TransformPoint(this.vertices[face.p0]), this.Transform.TransformPoint(this.vertices[face.p1]), this.Transform.TransformPoint(this.vertices[face.p2]))); }
// Token: 0x060042C9 RID: 17097 RVA: 0x001561FC File Offset: 0x001545FC private void Populate(Mesh mesh) { this.edges = new Dictionary <long, PPMesh.HalfEdge>(mesh.triangles.Length); this.faces = new HashSet <PPMesh.Face>(); this.vertexFaces = new PPMesh.Face[mesh.vertexCount]; this.vertices = new Vector3[mesh.vertexCount]; this.normals = new Vector3[mesh.vertexCount]; this.uvs = new Vector2[mesh.vertexCount]; this.verticesDelta = new HashSet <int>(); Array.Copy(mesh.vertices, this.vertices, mesh.vertexCount); Array.Copy(mesh.normals, this.normals, mesh.vertexCount); Array.Copy(mesh.uv, this.uvs, mesh.vertexCount); int[] triangles = mesh.triangles; for (int i = 0; i < triangles.Length; i += 3) { long key = this.HashEdge(triangles[i], triangles[i + 1]); long key2 = this.HashEdge(triangles[i + 1], triangles[i + 2]); long key3 = this.HashEdge(triangles[i + 2], triangles[i]); PPMesh.Face face = new PPMesh.Face(triangles[i], triangles[i + 1], triangles[i + 2]); PPMesh.HalfEdge halfEdge = new PPMesh.HalfEdge { face = face, point = triangles[i] }; PPMesh.HalfEdge halfEdge2 = new PPMesh.HalfEdge { face = face, point = triangles[i + 1] }; PPMesh.HalfEdge halfEdge3 = new PPMesh.HalfEdge { face = face, point = triangles[i + 2] }; this.vertexFaces[triangles[i]] = face; this.vertexFaces[triangles[i + 1]] = face; this.vertexFaces[triangles[i + 2]] = face; try { halfEdge.nextEdge = halfEdge2; halfEdge2.nextEdge = halfEdge3; halfEdge3.nextEdge = halfEdge; this.edges.Add(key, halfEdge); this.edges.Add(key2, halfEdge2); this.edges.Add(key3, halfEdge3); this.faces.Add(face); } catch { } } foreach (PPMesh.HalfEdge halfEdge4 in this.edges.Values) { int point = halfEdge4.point; int point2 = halfEdge4.nextEdge.point; if (halfEdge4.oppositeEdge == null) { long key4 = this.HashEdge(point2, point); PPMesh.HalfEdge halfEdge5; if (this.edges.TryGetValue(key4, out halfEdge5)) { halfEdge4.oppositeEdge = halfEdge5; halfEdge5.oppositeEdge = halfEdge4; } } } }
public void Reset() { Face = null; Command = CommandType.None; }