private void LstRebarPopulate(ReadAutodesk cadreader)
        {
            //instantiate rebar property
            Rebars = new List <Rebar>();

            // Get footings in the drawing
            List <LinearPath> lstFooting = CadHelper.PLinesGetByLayerName(cadreader, CadLayerName.RCFooting);

            //footings intersecting with semelles
            List <Line> lstSemelleLongLine;

            List <LinearPath> lstIntersectingFooting = CadHelper.EntitiesIntersectingSemelleGet(Semelle.HzLinPath, lstFooting, out lstSemelleLongLine);



            if (lstSemelleLongLine.Count == 2)
            {
                //Check type of intersecting entities
                Line centerLine = CadHelper.CenterLineBetweenTwoParallelsGet(lstSemelleLongLine[0], lstSemelleLongLine[1]);


                //for (int i = 0; i < lstIntersectingFooting.Count; i++)
                //{

                //(columns, shearwalls, walls) inside footings
                string[] layerArr = { CadLayerName.Column, CadLayerName.ShearWall, CadLayerName.Wall };



                // Get entities inside footing
                List <LinearPath> lstVlElements           = CadHelper.PLinesGetByLayerName(cadreader, layerArr);
                List <LinearPath> lstEntityInsideFooting1 = CadHelper.EntitiesInsideFootingGet(lstIntersectingFooting[0], lstVlElements);

                //intersection point of Semelle Center Line with the nearest entity inside the footing polygon
                Point3D pt1 = CadHelper.PointIntersectSemelleWithNearEntity(centerLine, lstEntityInsideFooting1);
                if (pt1 == null)
                {
                    Line lineModified = CadHelper.LineModify(centerLine, CADConfig.Units == linearUnitsType.Meters ? 15 : 15000
                                                             , CADConfig.Units == linearUnitsType.Meters ? 15 : 15000);
                    List <Point3D> lstPtIntersection = MathHelper.PointsIntersectOfLineSegmentWithPolygon(lstIntersectingFooting[0], lineModified);

                    pt1 = MathHelper.MidPoint3D(lstPtIntersection[0], lstPtIntersection[1]);
                }

                //2 points of Center Line intersection with polygon
                List <LinearPath> lstEntityInsideFooting2 = CadHelper.EntitiesInsideFootingGet(lstIntersectingFooting[1], lstVlElements);


                //intersection point of Semelle Center Line with the nearest entity inside the footing polygon
                Point3D pt2 = CadHelper.PointIntersectSemelleWithNearEntity(centerLine, lstEntityInsideFooting2);
                if (pt2 == null)
                {
                    Line lineModified = CadHelper.LineModify(centerLine, CADConfig.Units == linearUnitsType.Meters ? 15 : 15000
                                                             , CADConfig.Units == linearUnitsType.Meters ? 15 : 15000);
                    List <Point3D> lstPtIntersection = MathHelper.PointsIntersectOfLineSegmentWithPolygon(lstIntersectingFooting[1], lineModified);

                    pt2 = MathHelper.MidPoint3D(lstPtIntersection[0], lstPtIntersection[1]);
                }



                //}

                //offset the two ling lines
                if (pt1 != null && pt2 != null)
                {
                    LinearPath centerRebarBot = new LinearPath(pt1 + (Vector3D.AxisZ * DefaultValues.SemelleCover), pt2 + (Vector3D.AxisZ * DefaultValues.SemelleCover));
                    double     width          = MathHelper.DistanceBetweenTwoParallels(lstSemelleLongLine[0], lstSemelleLongLine[1]);
                    LinearPath l1RebarBot     = (LinearPath)centerRebarBot.Offset((width / 2 - DefaultValues.SemelleCover), Vector3D.AxisZ, 0.0001, true);
                    LinearPath l2RebarBot     = (LinearPath)centerRebarBot.Offset((width / 2 - DefaultValues.SemelleCover) * -1, Vector3D.AxisZ, 0.0001, true);

                    //Vertical Linear Path
                    Point3D pt11 = pt1 + MathHelper.UVPerpendicularToLine2DFromPt(new Line(pt1, pt2), pt1) * (width / 2 - DefaultValues.SemelleCover) + Vector3D.AxisZ * DefaultValues.SemelleCover;
                    Point3D pt12 = pt1 - MathHelper.UVPerpendicularToLine2DFromPt(new Line(pt1, pt2), pt1) * (width / 2 - DefaultValues.SemelleCover) + Vector3D.AxisZ * DefaultValues.SemelleCover;

                    Point3D pt13 = pt11 + Vector3D.AxisZ * (DefaultValues.SmellesWithFootingThickness - DefaultValues.SemelleCover);
                    Point3D pt14 = pt12 + Vector3D.AxisZ * (DefaultValues.SmellesWithFootingThickness - DefaultValues.SemelleCover);

                    VlLinPath = new LinearPath(pt11, pt12, pt13, pt14);

                    //offset to get the top rebar
                    LinearPath centerRebarTop = new LinearPath(pt1 + (Vector3D.AxisZ * (Semelle.Thickness - DefaultValues.SemelleCover)),
                                                               pt2 + (Vector3D.AxisZ * (Semelle.Thickness - DefaultValues.SemelleCover)));
                    LinearPath l1RebarTop = (LinearPath)centerRebarTop.Offset((width / 2 - DefaultValues.SemelleCover), Vector3D.AxisZ, 0.0001, true);
                    LinearPath l2RebarTop = (LinearPath)centerRebarTop.Offset((width / 2 - DefaultValues.SemelleCover) * -1, Vector3D.AxisZ, 0.0001, true);

                    //create rebars
                    Rebars.Add(new Rebar(centerRebarBot));
                    Rebars.Add(new Rebar(l1RebarBot));
                    Rebars.Add(new Rebar(l2RebarBot));

                    Rebars.Add(new Rebar(centerRebarTop));
                    Rebars.Add(new Rebar(l1RebarTop));
                    Rebars.Add(new Rebar(l2RebarTop));
                }
            }
        }
Beispiel #2
0
 public void FormWorkOutline(LinearPath linPathElement)
 {
     this.OuterPathFormwork = (LinearPath)linPathElement.Offset(0.03);
 }