Esempio n. 1
0
        /// <summary>
        /// All measurement in mm and in 1/10 degree. Degrees are in range 0 .. 3600.
        /// </summary>
        /// <returns></returns>
        public int Sector(int tag, double centerX, double centerY, double innerR, double outerR, int startAngle, int endAngle, int stepAngle, double gap, double depth)
        {
            if ((startAngle < 0) || (startAngle > 3600))
            {
                return(-1);
            }
            if ((endAngle < 0) || (endAngle > 3600))
            {
                return(-1);
            }
            if (innerR >= outerR)
            {
                return(-1);
            }

            int count = 0;

            double x0;
            double y0;
            double x1;
            double y1;

            int angle = startAngle;

            Space3D.GetSectorPoint(centerX, centerY, innerR, angle, gap, out x0, out y0);
            Space3D.GetSectorPoint(centerX, centerY, outerR, angle, gap, out x1, out y1);

            Face3D f;

            if (depth > 0)
            {
                f = new Rectangle3D(
                    new Point3D(x0, y0, 0f),
                    new Point3D(x1, y1, 0f),
                    new Point3D(x1, y1, depth),
                    new Point3D(x0, y0, depth));
                f.Tag    = tag;
                f.Shadow = 20;
                this.Add(f);
                ++count;
            }

            while (true)
            {
                if (angle >= endAngle)
                {
                    break;
                }
                angle += stepAngle;
                if (angle > endAngle)
                {
                    angle = endAngle;
                }

                double x2;
                double y2;
                double x3;
                double y3;

                double g = 0;
                if (angle >= endAngle)
                {
                    g = -gap;
                }
                Space3D.GetSectorPoint(centerX, centerY, innerR, angle, g, out x2, out y2);
                Space3D.GetSectorPoint(centerX, centerY, outerR, angle, g, out x3, out y3);

                f = new Rectangle3D(
                    new Point3D(x0, y0, 0f),
                    new Point3D(x1, y1, 0f),
                    new Point3D(x3, y3, 0f),
                    new Point3D(x2, y2, 0f));
                f.Tag = tag;
                this.Add(f);
                ++count;

                if (depth > 0)
                {
                    f = new Rectangle3D(
                        new Point3D(x0, y0, 0f),
                        new Point3D(x2, y2, 0f),
                        new Point3D(x2, y2, depth),
                        new Point3D(x0, y0, depth));
                    f.Tag    = tag;
                    f.Shadow = this.GetShadow(angle, 30);
                    this.Add(f);
                    ++count;

                    f = new Rectangle3D(
                        new Point3D(x1, y1, 0f),
                        new Point3D(x3, y3, 0f),
                        new Point3D(x3, y3, depth),
                        new Point3D(x1, y1, depth));
                    f.Tag    = tag;
                    f.Shadow = this.GetShadow(angle, 30);
                    this.Add(f);
                    ++count;
                }

                if (angle < endAngle)
                {
                    Space3D.GetSectorPoint(centerX, centerY, innerR, angle - 10, 0f, out x0, out y0);
                    Space3D.GetSectorPoint(centerX, centerY, outerR, angle - 10, 0f, out x1, out y1);
                }
                else
                {
                    x0 = x2;
                    y0 = y2;
                    x1 = x3;
                    y1 = y3;
                }
            }

            if (depth > 0)
            {
                f = new Rectangle3D(
                    new Point3D(x0, y0, 0f),
                    new Point3D(x1, y1, 0f),
                    new Point3D(x1, y1, depth),
                    new Point3D(x0, y0, depth));
                f.Tag    = tag;
                f.Shadow = 20;
                this.Add(f);
                ++count;
            }

            return(count);
        }