Пример #1
0
        /// <summary>
        /// Get the geometry information of bottom rebar
        /// </summary>
        /// <returns>the gotten geometry information</returns>
        public RebarGeometry GetBottomRebar()
        {
            // sort the points of the swept profile
            XYZHeightComparer comparer = new XYZHeightComparer();
            m_points.Sort(comparer);

            // Get the normal parameter for bottom rebar creation
            List<Autodesk.Revit.DB.XYZ > directions = GetRelatedVectors(m_points[0]);
            directions.Sort(comparer);
            Autodesk.Revit.DB.XYZ normal = directions[0];

            double offset = BeamRebarData.BottomOffset;     //offset value of the rebar
            int rebarNumber = BeamRebarData.BottomRebarNumber; //the number of the rebar
            // the spacing of the rebar
            double spacing = (m_beamWidth - 2 * offset) / (rebarNumber - 1);

            // Get the curve which define the shape of the bottom rebar curve
            List<Autodesk.Revit.DB.XYZ > movedPoints = OffsetPoints(offset);
            Autodesk.Revit.DB.XYZ startPoint = movedPoints[0]; //get the coordinate of startpoint
            //get the coordinate of endpoint
            Autodesk.Revit.DB.XYZ endPoint = GeomUtil.OffsetPoint(startPoint, m_drivingVector, m_beamLength);

            IList<Curve> curves = new List<Curve>(); //the profile of the bottom rebar
            curves.Add(Line.get_Bound(startPoint, endPoint));

            // return the rebar geometry information
            return new RebarGeometry(normal, curves, rebarNumber, spacing);
        }
Пример #2
0
        /// <summary>
        /// Get the geometry information of the transverse rebar
        /// </summary>
        /// <param name="location">the location of transverse rebar</param>
        /// <param name="spacing">the spacing value of the rebar</param>
        /// <returns>the gotted geometry information</returns>
        public RebarGeometry GetTransverseRebar(TransverseRebarLocation location, double spacing)
        {
            // sort the points of the swept profile
            XYZHeightComparer comparer = new XYZHeightComparer();
            m_points.Sort(comparer);

            // the offset from the column surface to the rebar
            double offset = ColumnRebarData.TransverseOffset;
            //the length of the transverse rebar
            double rebarLength = 0;

            // get the origin and normal parameter for rebar creation
            Autodesk.Revit.DB.XYZ normal = m_drivingVector;
            double curveOffset = 0;

            //set rebar length and origin according to the location of rebar
            switch (location)
            {
                case TransverseRebarLocation.Start:     // start transverse rebar
                    rebarLength = m_columnHeight / 4;
                    break;
                case TransverseRebarLocation.Center:    // center transverse rebar
                    rebarLength = m_columnHeight / 2;
                    curveOffset = m_columnHeight / 4 + (rebarLength % spacing) / 2;
                    break;
                case TransverseRebarLocation.End:       // end transverse rebar
                    rebarLength = m_columnHeight / 4;
                    curveOffset = m_columnHeight - rebarLength + (rebarLength % spacing);
                    break;
                default:
                    throw new Exception("The program should never go here.");
            }

            // the number of the transverse rebar
            int rebarNumber = (int)(rebarLength / spacing) + 1;
            // get the profile of the transverse rebar
            List<Autodesk.Revit.DB.XYZ > movedPoints = OffsetPoints(offset);

            List<Autodesk.Revit.DB.XYZ > translatedPoints = new List<Autodesk.Revit.DB.XYZ >();
            foreach (Autodesk.Revit.DB.XYZ point in movedPoints)
            {
                translatedPoints.Add(GeomUtil.OffsetPoint(point, m_drivingVector, curveOffset));
            }

            IList<Curve> curves = new List<Curve>(); //the profile of the transverse rebar
            Autodesk.Revit.DB.XYZ first = translatedPoints[0];
            Autodesk.Revit.DB.XYZ second = translatedPoints[1];
            Autodesk.Revit.DB.XYZ third = translatedPoints[2];
            Autodesk.Revit.DB.XYZ fourth = translatedPoints[3];
            curves.Add(Line.get_Bound(first, second));
            curves.Add(Line.get_Bound(second, fourth));
            curves.Add(Line.get_Bound(fourth, third));
            curves.Add(Line.get_Bound(third, first));

            // return the rebar geometry information
            return new RebarGeometry(normal, curves, rebarNumber, spacing);
        }
Пример #3
0
        /// <summary>
        /// Get the width of the column
        /// </summary>
        /// <returns>the width data</returns>
        private double GetColumnWidth()
        {
            XYZHeightComparer comparer = new XYZHeightComparer();
            m_points.Sort(comparer);

            Autodesk.Revit.DB.XYZ refPoint = m_points[0];
            List<Autodesk.Revit.DB.XYZ > directions = GetRelatedVectors(refPoint);
            directions.Sort(comparer);

            return GeomUtil.GetLength(directions[1]);
        }
Пример #4
0
        /// <summary>
        /// Get the geometry information of vertical rebar
        /// </summary>
        /// <param name="location">the location of vertical rebar</param>
        /// <param name="rebarNumber">the spacing value of the rebar</param>
        /// <returns>the gotted geometry information</returns>
        public RebarGeometry GetVerticalRebar(VerticalRebarLocation location, int rebarNumber)
        {
            // sort the points of the swept profile
            XYZHeightComparer comparer = new XYZHeightComparer();
            m_points.Sort(comparer);

            // Get the offset and rebar length of rebar
            double offset = ColumnRebarData.VerticalOffset;
            double rebarLength = m_columnHeight + 3; //the length of rebar

            // Get the start point of the vertical rebar curve
            Autodesk.Revit.DB.XYZ startPoint = m_drivingLine.get_EndPoint(0);

            List<Autodesk.Revit.DB.XYZ > movedPoints = OffsetPoints(offset);
            movedPoints.Sort(comparer);

            Autodesk.Revit.DB.XYZ normal = new Autodesk.Revit.DB.XYZ (); // the normal parameter
            double rebarOffset = 0; // rebar offset, equal to rebarNumber* spacing
            // get the normal, start point and rebar offset of vertical rebar
            switch (location)
            {
                case VerticalRebarLocation.East:   //vertical rebar in east
                    normal = new Autodesk.Revit.DB.XYZ (0, 1, 0);
                    rebarOffset = m_columnWidth - 2 * offset;
                    startPoint = movedPoints[1];
                    break;
                case VerticalRebarLocation.North: //vertical rebar in north
                    normal = new Autodesk.Revit.DB.XYZ (-1, 0, 0);
                    rebarOffset = m_columnLength - 2 * offset;
                    startPoint = movedPoints[3];
                    break;
                case VerticalRebarLocation.West: //vertical rebar in west
                    normal = new Autodesk.Revit.DB.XYZ (0, -1, 0);
                    rebarOffset = m_columnWidth - 2 * offset;
                    startPoint = movedPoints[2];
                    break;
                case VerticalRebarLocation.South: //vertical rebar in south
                    normal = new Autodesk.Revit.DB.XYZ (1, 0, 0);
                    rebarOffset = m_columnLength - 2 * offset;
                    startPoint = movedPoints[0];
                    break;
                default:
                    break;
            }

            double spacing = rebarOffset / rebarNumber; //spacing value of the rebar
            Autodesk.Revit.DB.XYZ endPoint = GeomUtil.OffsetPoint(startPoint, m_drivingVector, rebarLength);

            IList<Curve> curves = new List<Curve>();       //profile of the rebar
            curves.Add(Line.get_Bound(startPoint, endPoint));

            // return the rebar geometry information
            return new RebarGeometry(normal, curves, rebarNumber, spacing);
        }
Пример #5
0
        /// <summary>
        /// Get the geometry information for top rebar
        /// </summary>
        /// <param name="location">indicate where top rebar is placed</param>
        /// <returns>the gotten geometry information</returns>
        public RebarGeometry GetTopRebar(TopRebarLocation location)
        {
            // sort the points of the swept profile
            XYZHeightComparer comparer = new XYZHeightComparer();
            m_points.Sort(comparer);

            // Get the normal parameter for rebar creation
            List<Autodesk.Revit.DB.XYZ > directions = GetRelatedVectors(m_points[3]);
            directions.Sort(comparer);
            Autodesk.Revit.DB.XYZ normal = directions[1];

            double offset = 0;      //the offset from the beam surface to the rebar
            double startPointOffset = 0;    // the offset of start point from swept profile
            double rebarLength = m_beamLength / 3; //the length of the rebar
            int rebarNumber = BeamRebarData.TopRebarNumber; //the number of the rebar

            // set offset and startPointOffset according to the location of rebar
            switch (location)
            {
                case TopRebarLocation.Start:    // top start rebar
                    offset = BeamRebarData.TopEndOffset;
                    break;
                case TopRebarLocation.Center:   // top center rebar
                    offset = BeamRebarData.TopCenterOffset;
                    startPointOffset = m_beamLength / 3 - 0.5;
                    rebarLength = m_beamLength / 3 + 1;
                    break;
                case TopRebarLocation.End:      // top end rebar
                    offset = BeamRebarData.TopEndOffset;
                    startPointOffset = m_beamLength * 2 / 3;
                    break;
                default:
                    throw new Exception("The program should never go here.");
            }

            // Get the curve which define the shape of the top rebar curve
            List<Autodesk.Revit.DB.XYZ > movedPoints = OffsetPoints(offset);
            Autodesk.Revit.DB.XYZ startPoint = movedPoints[movedPoints.Count - 1];

            // offset the start point according startPointOffset
            startPoint = GeomUtil.OffsetPoint(startPoint, m_drivingVector, startPointOffset);
            // get the coordinate of endpoint
            Autodesk.Revit.DB.XYZ endPoint = GeomUtil.OffsetPoint(startPoint, m_drivingVector, rebarLength);
            IList<Curve> curves = new List<Curve>(); //the profile of the top rebar
            curves.Add(Line.get_Bound(startPoint, endPoint));

            // the spacing of the rebar
            double spacing = spacing = (m_beamWidth - 2 * offset) / (rebarNumber - 1);

            // return the rebar geometry information
            return new RebarGeometry(normal, curves, rebarNumber, spacing);
        }
Пример #6
0
        /// <summary>
        /// Get the down direction, which stand for the top hook direction
        /// </summary>
        /// <returns>the down direction</returns>
        public Autodesk.Revit.DB.XYZ GetDownDirection()
        {
            XYZHeightComparer comparer = new XYZHeightComparer();
            m_points.Sort(comparer);

            Autodesk.Revit.DB.XYZ refPoint = m_points[3];
            List<Autodesk.Revit.DB.XYZ > directions = GetRelatedVectors(refPoint);
            directions.Sort(comparer);

            return directions[0];
        }