Beispiel #1
0
        public void normalize()
        {
            objectsNeedRebuild = true;
            rebuild();

            warp_Vector min, max, tempmax, tempmin;

            if (objects == 0)
            {
                return;
            }

            matrix       = new warp_Matrix();
            normalmatrix = new warp_Matrix();

            max = wobject[0].maximum();
            min = wobject[0].maximum();

            for (int i = 0; i < objects; i++)
            {
                tempmax = wobject[i].maximum();
                tempmin = wobject[i].maximum();
                if (tempmax.x > max.x)
                {
                    max.x = tempmax.x;
                }
                if (tempmax.y > max.y)
                {
                    max.y = tempmax.y;
                }
                if (tempmax.z > max.z)
                {
                    max.z = tempmax.z;
                }
                if (tempmin.x < min.x)
                {
                    min.x = tempmin.x;
                }
                if (tempmin.y < min.y)
                {
                    min.y = tempmin.y;
                }
                if (tempmin.z < min.z)
                {
                    min.z = tempmin.z;
                }
            }
            float xdist = max.x - min.x;
            float ydist = max.y - min.y;
            float zdist = max.z - min.z;
            float xmed  = (max.x + min.x) / 2;
            float ymed  = (max.y + min.y) / 2;
            float zmed  = (max.z + min.z) / 2;

            float diameter = (xdist > ydist) ? xdist : ydist;

            diameter = (zdist > diameter) ? zdist : diameter;

            normalizedOffset = new warp_Vector(xmed, ymed, zmed);
            normalizedScale  = 2 / diameter;

            shift(normalizedOffset.reverse());
            scale(normalizedScale);
        }