// Token: 0x06000206 RID: 518 RVA: 0x0000DFFC File Offset: 0x0000C1FC
        private ItSegment AddSegment(ItBar xmlBar, List <ItGeCurve3d> rebarList, int index, ItSegment prevSegment, ref bool flipFutureYs)
        {
            bool      flag = index >= rebarList.Count;
            ItSegment result;

            if (flag)
            {
                result = null;
            }
            else
            {
                ItGeCurve3d curve     = rebarList[index];
                ItGeCurve3d nextCurve = (index < rebarList.Count - 1) ? rebarList[index + 1] : null;
                ItSegment   itSegment2;
                ItSegment   itSegment = this.CreateSegment(xmlBar, prevSegment, curve, nextCurve, ref flipFutureYs, out itSegment2);
                bool        flag2     = itSegment == null;
                if (flag2)
                {
                    result = null;
                }
                else
                {
                    bool flag3 = itSegment2 != null;
                    if (flag3)
                    {
                        xmlBar.segmentList.Add(itSegment2);
                    }
                    xmlBar.segmentList.Add(itSegment);
                    result = itSegment;
                }
            }
            return(result);
        }
        // Token: 0x06000205 RID: 517 RVA: 0x0000DF78 File Offset: 0x0000C178
        private ItSegment AddFirstSegment(ItBar xmlBar, List <ItGeCurve3d> rebarList, ref bool flipFutureYs)
        {
            bool      flag = rebarList.none <ItGeCurve3d>();
            ItSegment result;

            if (flag)
            {
                result = null;
            }
            else
            {
                ItGeCurve3d firstCurve = rebarList[0];
                ItGeCurve3d nextCurve  = (rebarList.Count > 1) ? rebarList[1] : null;
                ItSegment   itSegment2;
                ItSegment   itSegment = this.CreateFirstSegment(rebarList, xmlBar, firstCurve, nextCurve, ref flipFutureYs, out itSegment2);
                bool        flag2     = itSegment == null;
                if (flag2)
                {
                    result = null;
                }
                else
                {
                    bool flag3 = itSegment2 != null;
                    if (flag3)
                    {
                        xmlBar.segmentList.Add(itSegment2);
                    }
                    xmlBar.segmentList.Add(itSegment);
                    result = itSegment;
                }
            }
            return(result);
        }
        // Token: 0x06000212 RID: 530 RVA: 0x0000E798 File Offset: 0x0000C998
        private void SetCurrentNormal(ItBar xmlBar, double rotX, double bendY, ItSegment prevSegment)
        {
            rotX  = ItAngle.toRad(rotX);
            bendY = ItAngle.toRad(bendY);
            ItGeVector3d vec = new ItGeVector3d(prevSegment.YVector).rotateBy(rotX, prevSegment.XVector);

            xmlBar.CurrentNormal = xmlBar.CurrentNormal.rotateBy(rotX, prevSegment.XVector).rotateBy(bendY, -1.0 * vec);
        }
        // Token: 0x0600020A RID: 522 RVA: 0x0000E160 File Offset: 0x0000C360
        private ItSegment GetFirstSegFromCircArc(ItBar xmlBar, ItGeCircArc3d firstCirc, ItGeVector3d xzPlaneNormal, ref bool flipFutureYs, out ItSegment additionalSegment)
        {
            ItGeLine3d itGeLine3d;

            firstCirc.tangent(firstCirc.startPoint(), out itGeLine3d, null);
            ItGeVector3d itGeVector3d = itGeLine3d.direction().negate();
            ItSegment    startSegment = this.GetStartSegment(xmlBar);
            double       num;
            double       num2;

            this.GetRotationsInDegree(xzPlaneNormal, startSegment, itGeVector3d, ref flipFutureYs, out num, out num2);
            ItGeVector3d itGeVector3d2;
            ItGeVector3d yAxis;
            ItGeVector3d zAxis;

            this.GetNewDirections(num, num2, startSegment, out itGeVector3d2, out yAxis, out zAxis);
            this.SetCurrentNormal(xmlBar, num, num2, startSegment);
            ItDebug.assert(itGeVector3d2.isCodirectionalTo(itGeVector3d, null), "Failure in: ");
            double       l         = 0.0;
            double       r         = 0.0;
            double       rotX      = Math.Round(num, 10);
            double       bendY     = Math.Round(num2, 10);
            ItGeMatrix3d kIdentity = ItGeMatrix3d.kIdentity;

            kIdentity.setCoordSystem(ItGePoint3d.kOrigin, itGeVector3d, yAxis, zAxis);
            additionalSegment = new ItSegment(l, r, rotX, bendY, kIdentity, "normal");
            double circleSign = this.GetCircleSign(xmlBar, firstCirc);
            double num3;
            double num4;

            this.GetRotationsInDegree(xzPlaneNormal, additionalSegment, itGeVector3d, ref flipFutureYs, out num3, out num4);
            ItGeVector3d itGeVector3d3;
            ItGeVector3d itGeVector3d4;
            ItGeVector3d itGeVector3d5;

            this.GetNewDirections(num3, 0.0, startSegment, out itGeVector3d3, out itGeVector3d4, out itGeVector3d5);
            this.SetCurrentNormal(xmlBar, num3, 0.0, additionalSegment);
            double num5 = this.GetCentralAngleWithSign(firstCirc, circleSign);

            num5 = ItAngle.toDegree(num5);
            ItGeLine3d itGeLine3d2;

            firstCirc.tangent(firstCirc.startPoint(), out itGeLine3d2, null);
            ItGeVector3d itGeVector3d6 = itGeLine3d2.direction();
            ItGeVector3d zAxis2        = itGeVector3d6.crossProduct(xzPlaneNormal);
            double       l2            = 0.0;
            double       r2            = firstCirc.radius();
            double       rotX2         = Math.Round(num3, 10);
            double       bendY2        = Math.Round(num5, 10);

            kIdentity = ItGeMatrix3d.kIdentity;
            kIdentity.setCoordSystem(ItGePoint3d.kOrigin, itGeVector3d6, xzPlaneNormal, zAxis2);
            return(new ItSegment(l2, r2, rotX2, bendY2, kIdentity, "normal"));
        }
        // Token: 0x060001BD RID: 445 RVA: 0x0000BEE8 File Offset: 0x0000A0E8
        private static void AddSegmentsToBar(ItBar bar, WireItem wire)
        {
            double       length    = wire.Length;
            double       r         = 0.0;
            double       rotX      = 0.0;
            double       bendY     = 0.0;
            ItGeMatrix3d kIdentity = ItGeMatrix3d.kIdentity;
            ItSegment    item      = new ItSegment(length, r, rotX, bendY, kIdentity, "normal");

            bar.segmentList.Add(item);
        }
        // Token: 0x06000215 RID: 533 RVA: 0x0000E988 File Offset: 0x0000CB88
        private ItSegment GetStartSegment(ItBar xmlBar)
        {
            ItGeMatrix3d mat       = ItGeMatrix3d.rotation(xmlBar.RotZ * 3.1415926535897931 / 180.0, ItGeVector3d.kZAxis, ItGePoint3d.kOrigin);
            ItGeVector3d xAxis     = mat * ItGeVector3d.kXAxis;
            ItGeVector3d yAxis     = mat * ItGeVector3d.kYAxis;
            ItGeVector3d zAxis     = mat * ItGeVector3d.kZAxis;
            double       l         = 0.0;
            double       r         = 0.0;
            double       rotX      = 0.0;
            double       bendY     = 0.0;
            ItGeMatrix3d kIdentity = ItGeMatrix3d.kIdentity;

            kIdentity.setCoordSystem(ItGePoint3d.kOrigin, xAxis, yAxis, zAxis);
            return(new ItSegment(l, r, rotX, bendY, kIdentity, "normal"));
        }
        // Token: 0x06000217 RID: 535 RVA: 0x0000EAF0 File Offset: 0x0000CCF0
        private double GetCircleSign(ItBar xmlBar, ItGeCircArc3d circArc)
        {
            ItGeVector3d vec  = circArc.normal();
            bool         flag = xmlBar.CurrentNormal.isCodirectionalTo(vec, null);
            double       result;

            if (flag)
            {
                result = -1.0;
            }
            else
            {
                result = 1.0;
            }
            return(result);
        }
        // Token: 0x06000204 RID: 516 RVA: 0x0000DF1C File Offset: 0x0000C11C
        private void FillSegments(ItBar xmlBar, List <ItGeCurve3d> rebarList)
        {
            bool flag = rebarList.Count == 0;

            if (!flag)
            {
                bool      flag2       = true;
                ItSegment itSegment   = this.AddFirstSegment(xmlBar, rebarList, ref flag2);
                ItSegment prevSegment = itSegment;
                int       num;
                for (int i = 1; i < rebarList.Count; i = num + 1)
                {
                    prevSegment = this.AddSegment(xmlBar, rebarList, i, prevSegment, ref flag2);
                    num         = i;
                }
            }
        }
        // Token: 0x060001BC RID: 444 RVA: 0x0000BE18 File Offset: 0x0000A018
        protected static void AddWireToSteelBlock(ItSteel steelBlock, WireItem wire)
        {
            ItGePoint3d startPoint  = wire.StartPoint;
            ItGePoint3d point       = startPoint + wire.ParentMesh.PosPalette.asVector();
            ItGePoint3d itGePoint3d = steelBlock.Offset(point);
            ItBar       itBar       = new ItBar();

            itBar.ShapeMode         = ShapeMode.realistic;
            itBar.ReinforcementType = wire.ReinforcementType;
            itBar.SteelQuality      = wire.SteelQuality;
            itBar.PieceCount        = 1;
            itBar.Diameter          = wire.WireDiameter;
            itBar.X          = itGePoint3d.x;
            itBar.Y          = itGePoint3d.y;
            itBar.Z          = itGePoint3d.z;
            itBar.RotZ       = SteelGroupElementMeshBase.GetRotZ(wire);
            itBar.ArticleNo  = wire.ArticleNumber;
            itBar.NoAutoProd = false;
            SteelGroupElementMeshBase.AddSegmentsToBar(itBar, wire);
            steelBlock.barList.Add(itBar);
        }
        // Token: 0x06000201 RID: 513 RVA: 0x0000DD94 File Offset: 0x0000BF94
        public List <ItBar> ToBarList(ItSteel steelBlock, List <List <ItGeCurve3d> > ironSet)
        {
            List <ItBar> list = new List <ItBar>();
            bool         flag = ironSet.none <List <ItGeCurve3d> >();
            List <ItBar> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                bool flag2 = this.RebarBarType == null;
                if (flag2)
                {
                    result = list;
                }
                else
                {
                    foreach (List <ItGeCurve3d> list2 in ironSet)
                    {
                        bool flag3 = list2.none <ItGeCurve3d>();
                        if (!flag3)
                        {
                            double      rotZ            = 0.0;
                            ItGeCurve3d firstSeg        = list2.FirstOrDefault <ItGeCurve3d>();
                            ItGePoint3d rebarStartPoint = SteelGroupElementRebarBase.GetRebarStartPoint(firstSeg);
                            ItGePoint3d startPoint      = steelBlock.Offset(rebarStartPoint);
                            ItBar       itBar           = this.CreateBarElement(startPoint, rotZ);
                            this.FillSegments(itBar, list2);
                            list.Add(itBar);
                        }
                    }
                    result = list;
                }
            }
            return(result);
        }
        // Token: 0x0600020F RID: 527 RVA: 0x0000E4EC File Offset: 0x0000C6EC
        private ItSegment GetSegmentFromCircArc(ItBar xmlBar, ItSegment prevSegment, ItGeCircArc3d circArc, ref bool flipFutureYs, out ItSegment additionalSegment)
        {
            additionalSegment = null;
            ItGeLine3d itGeLine3d  = null;
            ItGeLine3d itGeLine3d2 = null;
            bool       flag        = !circArc.tangent(circArc.endPoint(), out itGeLine3d, null) || !circArc.tangent(circArc.startPoint(), out itGeLine3d2, null);
            ItSegment  result;

            if (flag)
            {
                result = null;
            }
            else
            {
                ItGeVector3d itGeVector3d = (itGeLine3d2 != null) ? itGeLine3d2.direction().negate() : prevSegment.XVector;
                this.GetAdditionalSegment(xmlBar, prevSegment, out additionalSegment, itGeVector3d, ref flipFutureYs);
                ItGeVector3d rebarPlaneNormal = circArc.normal();
                double       num;
                double       num2;
                this.GetRotationsInDegree(rebarPlaneNormal, additionalSegment ?? prevSegment, itGeVector3d, ref flipFutureYs, out num, out num2);
                this.SetCurrentNormal(xmlBar, num, 0.0, additionalSegment ?? prevSegment);
                double circleSign = this.GetCircleSign(xmlBar, circArc);
                double num3       = this.GetCentralAngleWithSign(circArc, circleSign);
                num3 = ItAngle.toDegree(num3);
                ItGeVector3d itGeVector3d2 = -1.0 * itGeLine3d.direction();
                ItGeVector3d itGeVector3d3 = circleSign * circArc.normal();
                ItGeVector3d zAxis         = itGeVector3d2.crossProduct(itGeVector3d3);
                double       l             = 0.0;
                double       r             = circArc.radius();
                num = Math.Round(num, 10);
                double       bendY     = Math.Round(num3, 10);
                ItGeMatrix3d kIdentity = ItGeMatrix3d.kIdentity;
                kIdentity.setCoordSystem(ItGePoint3d.kOrigin, itGeVector3d2, itGeVector3d3, zAxis);
                ItSegment itSegment = new ItSegment(l, r, num, bendY, kIdentity, "normal");
                result = itSegment;
            }
            return(result);
        }
        // Token: 0x0600020B RID: 523 RVA: 0x0000E310 File Offset: 0x0000C510
        private ItSegment GetFirstSegFromLineSeg(ItBar xmlBar, ItGeLineSeg3d firstSeg, ItGeVector3d xzPlaneNormal, ItGeCurve3d nextCurve, ref bool flipFutureYs)
        {
            ItGeVector3d direction    = firstSeg.direction();
            ItSegment    startSegment = this.GetStartSegment(xmlBar);
            double       num;
            double       num2;

            this.GetRotationsInDegree(xzPlaneNormal, startSegment, direction, ref flipFutureYs, out num, out num2);
            this.SetCurrentNormal(xmlBar, num, num2, startSegment);
            ItGeVector3d xAxis;
            ItGeVector3d yAxis;
            ItGeVector3d zAxis;

            this.GetNewDirections(num, num2, startSegment, out xAxis, out yAxis, out zAxis);
            double       len       = firstSeg.len;
            ItGeMatrix3d kIdentity = ItGeMatrix3d.kIdentity;

            kIdentity.setCoordSystem(ItGePoint3d.kOrigin, xAxis, yAxis, zAxis);
            ItSegment itSegment = new ItSegment(len, 0.0, Math.Round(num, 10), Math.Round(num2, 10), kIdentity, "normal");

            this.FixSegmentLength(itSegment, nextCurve);
            return(itSegment);
        }