コード例 #1
0
        public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, CircleProfile dimensions, ConcreteSection property)
        {
            double       d        = dimensions.Diameter;
            List <Point> location = new List <Point>();

            double angle      = Math.PI * 2 / reinforcement.BarCount;
            double startAngle = 0;
            double radius     = d / 2 - property.MinimumCover - reinforcement.Diameter / 2;

            switch (reinforcement.Pattern)
            {
            case ReinforcementPattern.Horizontal:
                startAngle = angle / 2;
                break;
            }
            for (int i = 0; i < reinforcement.BarCount; i++)
            {
                double x = Math.Cos(startAngle + angle * i) * radius;
                double y = Math.Sin(startAngle + angle * i) * radius;
                location.Add(new Point {
                    X = x, Y = y, Z = 0
                });
            }


            return(new CompositeGeometry {
                Elements = location.ToList <IGeometry>()
            });
        }
コード例 #2
0
        public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, RectangleProfile dimensions, ConcreteSection property)
        {
            double       h           = dimensions.Height;
            double       w           = dimensions.Width;
            double       tieDiameter = property.TieDiameter();
            List <Point> location    = new List <Point>();

            int    topCount  = 0;
            int    sideCount = 0;
            double tieOffset = tieDiameter + Math.Cos(Math.PI / 4) * (2 * tieDiameter * (Math.Sqrt(2) - 1) + reinforcement.Diameter / 2) - reinforcement.Diameter / 2;

            switch (reinforcement.Pattern)
            {
            case ReinforcementPattern.Equispaced:
                topCount  = (int)(reinforcement.BarCount * w / (2 * w + 2 * h) + 1);
                sideCount = (reinforcement.BarCount - 2 * topCount) / 2 + 2;
                break;

            case ReinforcementPattern.Horizontal:
                topCount  = reinforcement.BarCount / 2;
                sideCount = 2;
                break;

            case ReinforcementPattern.Vertical:
                topCount  = 2;
                sideCount = reinforcement.BarCount / 2;
                break;
            }
            double verticalSpacing = (h - 2 * property.MinimumCover - reinforcement.Diameter - 2 * tieOffset) / (sideCount - 1);
            double depth           = property.MinimumCover + reinforcement.Diameter / 2 + tieOffset;

            for (int i = 0; i < sideCount; i++)
            {
                int    count        = topCount;
                double currentDepth = depth + i * verticalSpacing;
                if (i > 0 && i < sideCount - 1)
                {
                    count = 2;
                }
                List <IGeometry> layout = ((CompositeGeometry) new LayerReinforcement {
                    Diameter = reinforcement.Diameter, Depth = currentDepth, BarCount = count
                }.Layout(property)).Elements;

                foreach (IGeometry geom in layout)
                {
                    location.Add(geom as Point);
                }
            }
            return(new CompositeGeometry {
                Elements = location.ToList <IGeometry>()
            });
        }
コード例 #3
0
        /***************************************************/

        public static bool IsLongitudinal(this PerimeterReinforcement reinforcement)
        {
            return(true);
        }
コード例 #4
0
 public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, IProfile dimensions, ConcreteSection property)
 {
     //TODO: Implement for various cross section types
     return(new CompositeGeometry());
 }
コード例 #5
0
 public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, ConcreteSection property, bool extrude = false)
 {
     return(Layout(reinforcement, property.SectionProfile as dynamic, property));
 }
コード例 #6
0
 public static bool IsLongitudinal(this PerimeterReinforcement reinforcement)
 {
     return(reinforcement.IsNull() ? false : true);
 }