示例#1
0
        public static List <LinearPath> EntitiesIntersectingSemelleGet(LinearPath semelleLinPath, List <LinearPath> lstCadFooting, out List <Line> lstSemelleLongLine)
        {
            //intersected footings
            HashSet <LinearPath> lstIntersectingEntity = new HashSet <LinearPath>();

            Line[] lstSemelleLine = semelleLinPath.ConvertToLines();

            lstSemelleLongLine = new List <Line>();

            for (int i = 0; i < lstSemelleLine.Length; i++)
            {
                int counter = 0;
                for (int j = 0; j < lstCadFooting.Count; j++)
                {
                    if (MathHelper.IsLineSegmentIntersectingPolygon(lstCadFooting[j], lstSemelleLine[i]) /*&& (lstCadFooting[j] != semelleLinPath)*/)
                    {
                        counter++;
                        lstIntersectingEntity.Add(lstCadFooting[j]);
                    }
                }
                if (counter >= 2)
                {
                    lstSemelleLongLine.Add(lstSemelleLine[i]);
                }
            }

            return(lstIntersectingEntity.ToList());
        }
示例#2
0
        public void LstRebarPopulate()
        {
            List <Point3D> points = new List <Point3D>();

            LstRebar = new List <Rebar>();
            LinearPath stirrupLinPath = (LinearPath)CadColumn.ColPath.Offset(-CadColumn.Cover * 1.2);

            Line[] stirrupBranches = stirrupLinPath.ConvertToLines();
            for (int i = 0; i < stirrupBranches.Length; i++)
            {
                Line  branch = stirrupBranches[i];
                Rebar rebarCorner1, rebarCorner2, rebarMid;

                if (!points.Contains(branch.StartPoint))
                {
                    rebarCorner1 = new Rebar(branch.StartPoint);
                    LstRebar.Add(rebarCorner1);
                }
                if (!points.Contains(branch.EndPoint))
                {
                    rebarCorner2 = new Rebar(branch.EndPoint);
                    LstRebar.Add(rebarCorner2);
                }
                rebarMid = new Rebar(branch.MidPoint);
                LstRebar.Add(rebarMid);
                points.AddRange(branch.Vertices);
            }
        }
示例#3
0
        public static bool IsInsidePolygon(Point3D pt, LinearPath outer)
        {
            Line[] outerLines = outer.ConvertToLines();


            Line l = new Line(pt,
                              new Point3D(CADConfig.Units == linearUnitsType.Meters ? pt.X + 1000 : pt.X + 100000, pt.Y, pt.Z));


            int countIntersect = 0;

            for (int j = 0; j < outerLines.Length; j++)
            {
                if (IsLineSegmentsIntersected(l, outerLines[j]))
                {
                    countIntersect++;
                }
            }
            if (countIntersect % 2 == 0)
            {
                return(false);
            }

            return(true);
        }
示例#4
0
        public static bool IsInsidePolygon(LinearPath inner, LinearPath outer)

        {
            Line[] outerLines = outer.ConvertToLines();

            for (int i = 0; i < inner.Vertices.Length; i++)
            {
                Line l = new Line(inner.Vertices[i],
                                  new Point3D(CADConfig.Units == linearUnitsType.Meters ? inner.Vertices[i].X + 1000
                    : inner.Vertices[i].X + 100000, inner.Vertices[i].Y, inner.Vertices[i].Z));
                bool colinear = false;


                int countIntersect = 0;
                for (int j = 0; j < outerLines.Length; j++)
                {
                    if (IsLineSegmentsIntersected(l, outerLines[j], ref colinear))
                    {
                        countIntersect++;
                    }
                }

                if (!colinear && countIntersect % 2 == 0)
                {
                    return(false);
                }
            }
            return(true);
        }
示例#5
0
        public void LstRebarPopulate()
        {
            LinearPath rftPath = CadWall.LinPathWall.Offset(DefaultValues.WallCover * -1) as LinearPath;

            Line[] rftPathLines = rftPath.ConvertToLines();

            Line longDirLine  = null;
            Line shortDirLine = null;

            double longDirLength  = double.MinValue;
            double shortDirLength = double.MaxValue;

            for (int i = 0; i < rftPathLines.Length; i++)
            {
                if (rftPathLines[i].Length() > longDirLength)
                {
                    longDirLine   = rftPathLines[i];
                    longDirLength = rftPathLines[i].Length();
                }

                if (rftPathLines[i].Length() < shortDirLength)
                {
                    shortDirLine   = rftPathLines[i];
                    shortDirLength = rftPathLines[i].Length();
                }
            }



            Vector3D uvLength = MathHelper.UnitVector3DFromPt1ToPt2(longDirLine.StartPoint, longDirLine.EndPoint);

            double dia = DefaultValues.BarDiameter;

            Vector3D uvWidth;

            if (longDirLine.Vertices.Contains(shortDirLine.StartPoint))
            {
                uvWidth = MathHelper.UnitVector3DFromPt1ToPt2(shortDirLine.StartPoint, shortDirLine.EndPoint);
            }
            else
            {
                uvWidth = MathHelper.UnitVector3DFromPt1ToPt2(shortDirLine.EndPoint, shortDirLine.StartPoint);
            }

            //placement
            int nRebar = Convert.ToInt32(longDirLine.Length() / DefaultValues.LongBarSpacing);

            for (int i = 0; i < nRebar; i++)
            {
                Point3D locationPt1 = longDirLine.StartPoint + uvLength * DefaultValues.LongBarSpacing * i;
                Point3D locationPt2 = locationPt1 + uvWidth * shortDirLength;
                Rebar   rebar1      = new Rebar(locationPt1);
                Rebar   rebar2      = new Rebar(locationPt2);
                LstRebar.Add(rebar1);
                LstRebar.Add(rebar2);
            }
        }
示例#6
0
        internal static bool IsLineSegmentIntersectingPolygon(LinearPath linPath, Line line2)
        {
            foreach (Line line1 in linPath.ConvertToLines())
            {
                //double a1 = line1.EndPoint.Y - line1.StartPoint.Y;
                //double b1 = line1.StartPoint.X - line1.EndPoint.X;
                //double c1 = a1 * line1.StartPoint.X + b1 * line1.StartPoint.Y;

                //double a2 = line2.EndPoint.Y - line2.StartPoint.Y;
                //double b2 = line2.StartPoint.X - line2.EndPoint.X;
                //double c2 = a2 * line2.StartPoint.X + b2 * line2.StartPoint.Y;

                //double delta = a1 * b2 - a2 * b1;
                //if (Math.Abs(delta) > 0.0001) // !=0
                //{
                int o1 = orientation(line1.StartPoint, line1.EndPoint, line2.StartPoint);
                int o2 = orientation(line1.StartPoint, line1.EndPoint, line2.EndPoint);
                int o3 = orientation(line2.StartPoint, line2.EndPoint, line1.StartPoint);
                int o4 = orientation(line2.StartPoint, line2.EndPoint, line1.EndPoint);

                if (o1 != o2 && o3 != o4)
                {
                    return(true);
                }

                // Special Cases
                // p1, q1 and p2 are colinear and p2 lies on segment p1q1
                if (o1 == 0 && onSegment(line1.StartPoint, line2.StartPoint, line1.EndPoint))
                {
                    return(true);
                }

                // p1, q1 and q2 are colinear and q2 lies on segment p1q1
                if (o2 == 0 && onSegment(line1.StartPoint, line2.EndPoint, line1.EndPoint))
                {
                    return(true);
                }

                // p2, q2 and p1 are colinear and p1 lies on segment p2q2
                if (o3 == 0 && onSegment(line2.StartPoint, line1.StartPoint, line2.EndPoint))
                {
                    return(true);
                }

                // p2, q2 and q1 are colinear and q1 lies on segment p2q2
                if (o4 == 0 && onSegment(line2.StartPoint, line1.EndPoint, line2.EndPoint))
                {
                    return(true);
                }
                //}
            }



            return(false); // Doesn't fall in any of the above cases
        }
示例#7
0
        public static Line ShortestLineGet(LinearPath linPath)
        {
            Line[] lineArr      = linPath.ConvertToLines();
            Line   shortestLine = null;
            double length       = double.MaxValue;

            for (int j = 0; j < lineArr.Length; j++)
            {
                shortestLine = lineArr[j].Length() < length ? lineArr[j] : shortestLine;
            }

            return(shortestLine);
        }
示例#8
0
        internal static List <Point3D> PointsIntersectOfLineSegmentWithPolygon(LinearPath linPath, Line line2)
        {
            List <Point3D> lstIntersecionPts = new List <Point3D>();

            foreach (Line line1 in linPath.ConvertToLines())
            {
                Point3D intersectionPt = IntersectionOfTwoLineSegments(line1, line2);
                if (intersectionPt != null)
                {
                    lstIntersecionPts.Add(intersectionPt);
                }
            }
            return(lstIntersecionPts); // Doesn't fall in any of the above cases
        }
        public void LstRebarPopulate()
        {
            VlRebar = new List <Rebar>();
            LinearPath linPathRFT = (LinearPath)ShearWall.ProfilePath.Offset(-DefaultValues.ShearWallCover);

            Line[] RFTlines = linPathRFT.ConvertToLines();
            for (int i = 0; i < RFTlines.Length; i++)
            {
                Vector3D uv         = MathHelper.UnitVector3DFromPt1ToPt2(RFTlines[i].StartPoint, RFTlines[i].EndPoint);
                int      rebarCount = Convert.ToInt32(RFTlines[i].Length() / DefaultValues.LongBarSpacing);
                for (int j = 0; j < rebarCount; j++)
                {
                    Point3D location = RFTlines[i].StartPoint + uv * j * DefaultValues.LongBarSpacing;
                    Rebar   rebar    = new Rebar(location);
                    VlRebar.Add(rebar);
                }
            }
        }
示例#10
0
        internal static List <Point3D> PointsIntersectOfLineWithPolygon(LinearPath linPath, Line line2)
        {
            List <Point3D> lstIntersectionPts = new List <Point3D>();

            Line[] arrLine = linPath.ConvertToLines();
            for (int i = 0; i < arrLine.Length; i++)
            {
                try
                {
                    Point3D intersectionPt = IntersectionOfTwoLines(arrLine[i], line2);
                    if (Double.IsNaN(intersectionPt.X))
                    {
                        throw new Exception();
                    }
                    lstIntersectionPts.Add(intersectionPt);
                }
                catch (Exception)
                {
                    continue;
                }
            }
            return(lstIntersectionPts);
        }
示例#11
0
        private void PopulateRft()
        {
            if (RcFooting == null)
            {
                return;
            }

            if (!MathHelper.IsRectangle(RcFooting.ProfilePath, 0.02))
            {
                PopulateRftStripFooting();
            }
            else
            {
                LinearPath linPathFooting = (LinearPath)RcFooting.ProfilePath.Offset(-1 * DefaultValues.FootingCover);
                //Mesh mesg = linPathFooting.mesh;

                for (int i = 0; i < linPathFooting.Vertices.Count(); i++)
                {
                    linPathFooting.Vertices[i].Z += DefaultValues.FootingCover /* + DefaultValues.PCFootingThinkess*/;
                }



                Line[] pathLines = linPathFooting.ConvertToLines();

                int numRebarLong       = Convert.ToInt32(pathLines[0].Length() / DefaultValues.LongBarSpacing);
                int numRebarTransverse = Convert.ToInt32(pathLines[1].Length() / DefaultValues.LongBarSpacing);

                Vector3D uvLong = MathHelper.UnitVector3DFromPt1ToPt2(pathLines[1].StartPoint, pathLines[1].EndPoint);

                Vector3D uvTransverse = MathHelper.UnitVector3DFromPt1ToPt2(pathLines[0].EndPoint, pathLines[0].StartPoint);

                for (int i = 0; i < numRebarLong; i++)
                {
                    //Transverse Rebars
                    Point3D stPtTrans  = pathLines[0].EndPoint + uvTransverse * DefaultValues.LongBarSpacing * i;
                    Point3D endPtTrans = stPtTrans + pathLines[1].Length() * uvLong;

                    Point3D stPtZTrans  = stPtTrans + Vector3D.AxisZ * (DefaultValues.RCFootingThinkess - DefaultValues.FootingCover);
                    Point3D endPtZTrans = endPtTrans + Vector3D.AxisZ * (DefaultValues.RCFootingThinkess - DefaultValues.FootingCover);

                    LinearPath linePathTransverse = new LinearPath(stPtZTrans, stPtTrans, endPtTrans, endPtZTrans);
                    //LinearPath linePathTransverse = new LinearPath(stPtZTrans,stPtTrans, endPtTrans);
                    TransverseRft.Add(new Rebar(linePathTransverse));
                }

                for (int i = 0; i < numRebarTransverse; i++)
                {
                    //Longitudinal Rebars
                    Point3D stPtLong  = pathLines[1].StartPoint + uvLong * DefaultValues.LongBarSpacing * i;
                    Point3D endPtLong = stPtLong + pathLines[0].Length() * uvTransverse;

                    Point3D stPZtLong  = stPtLong + Vector3D.AxisZ * (DefaultValues.RCFootingThinkess - DefaultValues.FootingCover);
                    Point3D endPtZLong = endPtLong + Vector3D.AxisZ * (DefaultValues.RCFootingThinkess - DefaultValues.FootingCover);

                    LinearPath linePathLong = new LinearPath(stPZtLong, stPtLong, endPtLong, endPtZLong);
                    //LinearPath linePathLong = new LinearPath(stPtLong, endPtLong);


                    LongRft.Add(new Rebar(linePathLong));
                }
            }
        }