public void GetVertexData()
        {
            IOrderedEnumerable <DoubleTeeInfo> source = from x in this.ListDoubleTeeInfos
                                                        orderby x.MarkP.DotProduct(base.RightDirection)
                                                        select x;

            DoubleTeeInfo doubleTeeInfo  = source.First <DoubleTeeInfo>();
            DoubleTeeInfo doubleTeeInfo2 = source.Last <DoubleTeeInfo>();

            this.TL.DoubleTeeInfo = doubleTeeInfo;
            this.BL.DoubleTeeInfo = doubleTeeInfo;
            List <XYZ> list = (from x in doubleTeeInfo.ListPoint
                               orderby x.DotProduct(base.RightDirection)
                               select x).ToList <XYZ>();
            XYZ    xyz  = list[0].ProjectOnto(this._plane);
            XYZ    xyz2 = list[1].ProjectOnto(this._plane);
            double num  = xyz.DotProduct(base.Updirection);
            double num2 = xyz2.DotProduct(base.Updirection);
            bool   flag = num < num2;

            if (flag)
            {
                this.TL.Point = xyz2;
                this.BL.Point = xyz;
            }
            else
            {
                this.TL.Point = xyz;
                this.BL.Point = xyz2;
            }
            this.TR.DoubleTeeInfo = doubleTeeInfo2;
            this.BR.DoubleTeeInfo = doubleTeeInfo2;
            List <XYZ> list2 = (from x in doubleTeeInfo2.ListPoint
                                orderby x.DotProduct(-base.RightDirection)
                                select x).ToList <XYZ>();
            XYZ    xyz3  = list2[0].ProjectOnto(this._plane);
            XYZ    xyz4  = list2[1].ProjectOnto(this._plane);
            double num3  = xyz3.DotProduct(base.Updirection);
            double num4  = xyz4.DotProduct(base.Updirection);
            bool   flag2 = num3 < num4;

            if (flag2)
            {
                this.TR.Point = xyz4;
                this.BR.Point = xyz3;
            }
            else
            {
                this.TR.Point = xyz3;
                this.BR.Point = xyz4;
            }
        }
 private void CaculateValueOfParamter()
 {
     try
     {
         this.Vertices = (from x in this.Vertices
                          orderby x.Z
                          select x).ToList <Vertex>();
         Vertex        vertex        = this.Vertices[1];
         Vertex        vertex2       = this.Vertices[2];
         Vertex        vertex3       = this.Vertices[3];
         Vertex        vertex4       = this.Vertices[0];
         Vertex        vertex5       = null;
         Vertex        vertex6       = null;
         Vertex        vertex7       = null;
         DoubleTeeInfo doubleTeeInfo = vertex4.DoubleTeeInfo;
         XYZ           q             = doubleTeeInfo.MarkP - doubleTeeInfo.OppP;
         double        compareTo     = vertex4.Point.DotProduct(base.ActiveView.UpDirection);
         double        value         = vertex.Point.DotProduct(base.ActiveView.UpDirection);
         double        value2        = vertex2.Point.DotProduct(base.ActiveView.UpDirection);
         double        value3        = vertex3.Point.DotProduct(base.ActiveView.UpDirection);
         bool          flag          = value.EQ(compareTo, 0.01);
         if (flag)
         {
             vertex5 = vertex;
         }
         bool flag2 = value2.EQ(compareTo, 0.01);
         if (flag2)
         {
             vertex5 = vertex2;
         }
         bool flag3 = value3.EQ(compareTo, 0.01);
         if (flag3)
         {
             vertex5 = vertex3;
         }
         // sua loi
         else
         {
             vertex5 = vertex3;
         }
         foreach (Vertex vertex8 in this.Vertices)
         {
             bool flag4 = vertex8.Point.IsAlmostEqualTo(vertex4.Point) || vertex8.Point.IsAlmostEqualTo(vertex5.Point);
             if (!flag4)
             {
                 XYZ p  = vertex4.Point - vertex8.Point;
                 XYZ p2 = vertex5.Point - vertex8.Point;
                 // can sua lai
                 bool flag5 = p.IsParallel(q);
                 if (flag5)
                 {
                     vertex6 = vertex8;
                 }
                 bool flag6 = p2.IsParallel(q);
                 if (flag6)
                 {
                     vertex7 = vertex8;
                 }
             }
         }
         XYZ    xyz     = vertex4.Point - vertex.Point;
         Vertex vertex9 = this.Vertices.Last <Vertex>();
         double z       = vertex5.Z;
         double z2      = vertex4.Z;
         double num     = Math.Abs((vertex4.Point - vertex5.Point).DotProduct(base.ActiveView.RightDirection));
         XYZ    point   = vertex5.Point;
         List <TeeParamterValues> list = new List <TeeParamterValues>();
         foreach (DoubleTeeInfo doubleTeeInfo2 in this.ListDoubleTeeInfos)
         {
             TeeParamterValues teeParamterValues = new TeeParamterValues
             {
                 Tee                  = doubleTeeInfo2.Parent,
                 Length_of_Drop       = num,
                 High_Point_Elevation = z,
                 Low_Point_Elevation  = z2
             };
             teeParamterValues.CL_DT = Math.Abs((point - doubleTeeInfo2.MarkP).DotProduct(base.RightDirection));
             double num2  = point.DistanceTo(doubleTeeInfo2.MarkP);
             double num3  = point.DistanceTo(doubleTeeInfo2.OppP);
             bool   flag7 = num2 < num3;
             if (flag7)
             {
                 teeParamterValues.Warp_Mark_End = true;
             }
             else
             {
                 teeParamterValues.Warp_Mark_End = false;
             }
             double num4  = point.DistanceTo(doubleTeeInfo2.MarkLP);
             double num5  = point.DistanceTo(doubleTeeInfo2.MarkRP);
             bool   flag8 = num4 < num5;
             if (flag8)
             {
                 teeParamterValues.Hign_Point_Right = 0;
             }
             else
             {
                 teeParamterValues.Hign_Point_Right = 1;
             }
             XYZ  point2 = vertex7.Point;
             bool flag9  = !vertex6.Z.EQ(vertex7.Z);
             if (flag9)
             {
                 double num6   = Math.Abs(vertex6.Z);
                 double num7   = Math.Atan(num6 / num);
                 double num8   = 0.0;
                 bool   flag10 = vertex7.Z != 0.0;
                 if (flag10)
                 {
                     num8 = Math.Abs(vertex7.Z * num / Math.Abs(Math.Abs(vertex6.Z) - Math.Abs(vertex7.Z)));
                     num7 = Math.Atan(Math.Abs(vertex7.Z) / num8);
                 }
                 double num9   = Math.Abs(point2.DistanceTo(doubleTeeInfo2.MarkLP));
                 double num10  = Math.Abs(point2.DistanceTo(doubleTeeInfo2.MarkRP));
                 double num11  = Math.Abs(point2.DistanceTo(doubleTeeInfo2.MarkP));
                 double num12  = Math.Abs(point2.DistanceTo(doubleTeeInfo2.OppP));
                 bool   flag11 = num11 < num12;
                 if (flag11)
                 {
                     bool   flag12 = num9 < num10;
                     double manual_Mark_End_Warp_Angle;
                     if (flag12)
                     {
                         manual_Mark_End_Warp_Angle = num7;
                     }
                     else
                     {
                         manual_Mark_End_Warp_Angle = -num7;
                     }
                     teeParamterValues.Manual_Mark_End_Warp_Angle = manual_Mark_End_Warp_Angle;
                     teeParamterValues.Manual_Mark_End_Offset     = -Math.Abs((teeParamterValues.CL_DT + num8) * Math.Tan(num7));
                 }
                 else
                 {
                     bool   flag13 = num9 < num10;
                     double manual_Opp_End_Warp_Angle;
                     if (flag13)
                     {
                         manual_Opp_End_Warp_Angle = num7;
                     }
                     else
                     {
                         manual_Opp_End_Warp_Angle = -num7;
                     }
                     teeParamterValues.Manual_Opp_End_Warp_Angle = manual_Opp_End_Warp_Angle;
                     teeParamterValues.Manual_Opp_End_Offset     = -Math.Abs((teeParamterValues.CL_DT + num8) * Math.Tan(num7));
                 }
             }
             else
             {
                 double num13  = Math.Abs(point2.DistanceTo(doubleTeeInfo2.MarkLP));
                 double num14  = Math.Abs(point2.DistanceTo(doubleTeeInfo2.MarkRP));
                 double num15  = Math.Abs(point2.DistanceTo(doubleTeeInfo2.MarkP));
                 double num16  = Math.Abs(point2.DistanceTo(doubleTeeInfo2.OppP));
                 bool   flag14 = num15 < num16;
                 if (flag14)
                 {
                     teeParamterValues.Manual_Mark_End_Warp_Angle = 0.0;
                     teeParamterValues.Manual_Mark_End_Offset     = vertex6.Z;
                 }
                 else
                 {
                     teeParamterValues.Manual_Opp_End_Warp_Angle = 0.0;
                     teeParamterValues.Manual_Opp_End_Offset     = vertex6.Z;
                 }
             }
             list.Add(teeParamterValues);
         }
         foreach (TeeParamterValues teeParamterValues2 in list)
         {
             FamilyInstance tee       = teeParamterValues2.Tee;
             Parameter      parameter = tee.LookupParameter("CL_DT");
             parameter.Set(teeParamterValues2.CL_DT);
             Parameter parameter2 = tee.LookupParameter(TeeParamters.DropLength);
             parameter2.Set(teeParamterValues2.Length_of_Drop);
             Parameter parameter3 = tee.LookupParameter(TeeParamters.HignPointElevation);
             parameter3.Set(teeParamterValues2.High_Point_Elevation);
             Parameter parameter4 = tee.LookupParameter(TeeParamters.LowPointElevation);
             parameter4.Set(teeParamterValues2.Low_Point_Elevation);
             Parameter parameter5    = tee.LookupParameter(TeeParamters.MarkEnd);
             Parameter parameter6    = tee.LookupParameter(TeeParamters.OppEnd);
             bool      warp_Mark_End = teeParamterValues2.Warp_Mark_End;
             if (warp_Mark_End)
             {
                 parameter5.Set(1);
                 parameter6.Set(0);
             }
             else
             {
                 parameter5.Set(0);
                 parameter6.Set(1);
             }
             Parameter parameter7 = tee.LookupParameter(TeeParamters.HignPointRight);
             parameter7.Set(teeParamterValues2.Hign_Point_Right);
             Parameter parameter8 = tee.LookupParameter(TeeParamters.Manual_Mark_End_Offset);
             parameter8.Set(teeParamterValues2.Manual_Mark_End_Offset);
             Parameter parameter9 = tee.LookupParameter(TeeParamters.Manual_Mark_End_Warp_Angle);
             parameter9.Set(teeParamterValues2.Manual_Mark_End_Warp_Angle);
             Parameter parameter10 = tee.LookupParameter(TeeParamters.Manual_Opp_End_Offset);
             parameter10.Set(teeParamterValues2.Manual_Opp_End_Offset);
             Parameter parameter11 = tee.LookupParameter(TeeParamters.Manual_Opp_End_Warp_Angle);
             parameter11.Set(teeParamterValues2.Manual_Opp_End_Warp_Angle);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Warning..", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
     }
 }