Ejemplo n.º 1
0
        /// <summary>
        /// Calculates the offsets (to be used later during transformation)
        /// </summary>
        public void CalculateOffsets()
        {
            ValidateOffsets();

            Rhino.Geometry.Vector3d vx = Plane.XAxis;
            Rhino.Geometry.Vector3d vy = Plane.YAxis;
            Rhino.Geometry.Vector3d vz = Plane.ZAxis;

            if (DistanceX < 0)
            {
                vx.Reverse();
            }
            if (DistanceY < 0)
            {
                vy.Reverse();
            }
            if (DistanceZ < 0)
            {
                vz.Reverse();
            }

            vx = vx * Math.Abs(DistanceX);
            vy = vy * Math.Abs(DistanceY);
            vz = vz * Math.Abs(DistanceZ);

            int index = 0;

            for (int z = 0; z < CountZ; z++)
            {
                for (int y = 0; y < CountY; y++)
                {
                    for (int x = 0; x < CountX; x++)
                    {
                        if (x == 0 && y == 0 && z == 0)
                        {
                            Offsets[index++] = Rhino.Geometry.Vector3d.Zero;
                        }
                        else
                        {
                            Rhino.Geometry.Vector3d offset = new Rhino.Geometry.Vector3d(
                                vx.X * (double)x + vy.X * (double)y + vz.X * (double)z,
                                vx.Y * (double)x + vy.Y * (double)y + vz.Y * (double)z,
                                vx.Z * (double)x + vy.Z * (double)y + vz.Z * (double)z
                                );

                            Offsets[index++] = (offset.IsValid) ? offset : Rhino.Geometry.Vector3d.Zero;
                        }
                    }
                }
            }
        }