Beispiel #1
0
        public BoundaryBox(FaceGroup facegroup)
        {
            float[] coordinateX = new float[facegroup.Faces.Count * NUM_VERT];
            float[] coordinateY = new float[facegroup.Faces.Count * NUM_VERT];
            float[] coordinateZ = new float[facegroup.Faces.Count * NUM_VERT];

            for (int i = 0; i < facegroup.Faces.Count; i++)
            {
                coordinateX[i] = facegroup.Faces[i].A.x;
                coordinateX[i] = facegroup.Faces[i].B.x;
                coordinateX[i] = facegroup.Faces[i].C.x;

                coordinateY[i] = facegroup.Faces[i].A.y;
                coordinateY[i] = facegroup.Faces[i].B.y;
                coordinateY[i] = facegroup.Faces[i].C.y;

                coordinateZ[i] = facegroup.Faces[i].A.z;
                coordinateZ[i] = facegroup.Faces[i].B.z;
                coordinateZ[i] = facegroup.Faces[i].C.z;
            }

            float minX = coordinateX.Min();
            float minY = coordinateY.Min();
            float minZ = coordinateZ.Min();

            float maxX = coordinateX.Max();
            float maxY = coordinateY.Max();
            float maxZ = coordinateZ.Max();

            MinPoint = new Vector(minX, minY, minZ);
            MaxPoint = new Vector(maxX, maxY, maxZ);
        }
Beispiel #2
0
        public static IEnumerable <Vector> RaysFaceGroupIntersect(List <Ray> rays, FaceGroup facegroup, bool reverse = false, bool project = false)
        {
            List <Vector> intersections = new List <Vector>();

            Vector intersection;

            foreach (Face face in facegroup.Faces)
            {
                foreach (Ray ray in rays)
                {
                    intersection = RayFaceIntersect(ray, face, reverse, project);
                    if (intersection != null)
                    {
                        intersections.Add(intersection);
                    }
                }
            }

            return(intersections);
        }