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; }
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); }
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); }
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); }
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); }