示例#1
0
 public void SetPoint(ref Form1.TPoint P, double x, double y, double z)
 {
     P.x = x;
     P.y = y;
     P.z = z;
     P.w = 1.0;
 }
示例#2
0
        public void ClipLine(Form1.TPoint v1, ref Form1.TPoint v2)
        {
            double num = (v1.w - this.near) / (v1.w - v2.w);
            double x   = num * v1.x + (1.0 - num) * v2.x;
            double y   = num * v1.y + (1.0 - num) * v2.y;
            double z   = num * v1.z + (1.0 - num) * v2.z;

            this.SetPoint(ref v2, x, y, z);
        }
示例#3
0
 public Form1.TPoint Generate3Dto2D(Form1.TPoint P, double[,] M)
 {
     Form1.TPoint tpoint;
     tpoint.x = P.x * M[0, 0] + P.y * M[1, 0] + P.z * M[2, 0] + P.w * M[3, 0];
     tpoint.y = P.x * M[0, 1] + P.y * M[1, 1] + P.z * M[2, 1] + P.w * M[3, 1];
     tpoint.z = P.x * M[0, 2] + P.y * M[1, 2] + P.z * M[2, 2] + P.w * M[3, 2];
     tpoint.w = P.x * M[0, 3] + P.y * M[1, 3] + P.z * M[2, 3] + P.w * M[3, 3];
     return(tpoint);
 }
示例#4
0
 public Form1.CSBits ClippingSecretCode(Form1.TPoint p)
 {
     Form1.CSBits csBits;
     csBits.Above = p.y > 1.0;
     csBits.Below = p.y < -1.0;
     csBits.Right = p.x > 1.0;
     csBits.Left  = p.x < -1.0;
     csBits.Front = p.z > 0.0;
     csBits.Back  = p.z < -1.0;
     return(csBits);
 }
示例#5
0
        public bool DoClip(ref Form1.TPoint p1, ref Form1.TPoint p2)
        {
            bool flag1;
            bool flag2 = false;

            do
            {
                flag1 = false;
                Form1.CSBits csBits = this.ClippingSecretCode(p1);
                Form1.CSBits b2     = this.ClippingSecretCode(p2);
                if (this.ClippingOrOperation(csBits, b2) == 0)
                {
                    flag2 = true;
                }
                else if (this.ClippingAndOperation(csBits, b2) > 0)
                {
                    flag2 = false;
                }
                else
                {
                    flag1 = true;
                    Form1.CSBits b1;
                    Form1.TPoint tpoint1;
                    Form1.TPoint tpoint2;
                    if (this.ClippingAndOperation(csBits, csBits) > 0)
                    {
                        b1      = csBits;
                        tpoint1 = p2;
                        tpoint2 = p1;
                    }
                    else
                    {
                        b1      = b2;
                        tpoint1 = p1;
                        tpoint2 = p2;
                    }
                    double x;
                    double y;
                    double z;
                    if (b1.Above)
                    {
                        x = tpoint1.x + (tpoint2.x - tpoint1.x) * (1.0 - tpoint1.y) / (tpoint2.y - tpoint1.y);
                        y = 1.0;
                        z = tpoint1.z + (tpoint2.z - tpoint1.z) * (1.0 - tpoint1.y) / (tpoint2.y - tpoint1.y);
                    }
                    else if (b1.Below)
                    {
                        x = tpoint1.x + (tpoint2.x - tpoint1.x) * (-1.0 - tpoint1.y) / (tpoint2.y - tpoint1.y);
                        y = -1.0;
                        z = tpoint1.z + (tpoint2.z - tpoint1.z) * (-1.0 - tpoint1.y) / (tpoint2.y - tpoint1.y);
                    }
                    else if (b1.Right)
                    {
                        x = 1.0;
                        y = tpoint1.y + (tpoint2.y - tpoint1.y) * (1.0 - tpoint1.x) / (tpoint2.x - tpoint1.x);
                        z = tpoint1.z + (tpoint2.z - tpoint1.z) * (1.0 - tpoint1.x) / (tpoint2.x - tpoint1.x);
                    }
                    else if (b1.Left)
                    {
                        x = -1.0;
                        y = tpoint1.y + (tpoint2.y - tpoint1.y) * (-1.0 - tpoint1.x) / (tpoint2.x - tpoint1.x);
                        z = tpoint1.z + (tpoint2.z - tpoint1.z) * (-1.0 - tpoint1.x) / (tpoint2.x - tpoint1.x);
                    }
                    else if (b1.Front)
                    {
                        x = tpoint1.x + (tpoint2.x - tpoint1.x) * (0.0 - tpoint1.z) / (tpoint2.z - tpoint1.z);
                        y = tpoint1.y + (tpoint2.y - tpoint1.y) * (0.0 - tpoint1.z) / (tpoint2.z - tpoint1.z);
                        z = 0.0;
                    }
                    else
                    {
                        x = tpoint1.x + (tpoint2.x - tpoint1.x) * (-1.0 - tpoint1.z) / (tpoint2.z - tpoint1.z);
                        y = tpoint1.y + (tpoint2.y - tpoint1.y) * (-1.0 - tpoint1.z) / (tpoint2.z - tpoint1.z);
                        z = -1.0;
                    }
                    if (this.ClippingAndOperation(b1, csBits) == this.ClippingOrOperation(b1, csBits))
                    {
                        this.SetPoint(ref p1, x, y, z);
                        this.ClippingSecretCode(p1);
                    }
                    else
                    {
                        this.SetPoint(ref p2, x, y, z);
                        this.ClippingSecretCode(p2);
                    }
                }
            }while (flag1);
            return(flag2);
        }