I think this will be the end of your suffer :
#region Namespaces using System; using System.Text; using System.Linq; using System.Xml; using System.Reflection; using System.ComponentModel; using System.Collections; using System.Collections.Generic; using System.Windows; using System.Windows.Media.Imaging; using System.Windows.Forms; using System.IO; using Autodesk.Revit.ApplicationServices; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Events; using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.DB.Structure; using Autodesk.Revit.DB.Mechanical; using Autodesk.Revit.DB.Electrical; using Autodesk.Revit.DB.Plumbing; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using Autodesk.Revit.UI.Events; //using Autodesk.Revit.Collections; using Autodesk.Revit.Exceptions; using Autodesk.Revit.Utility; using RvtApplication = Autodesk.Revit.ApplicationServices.Application; using RvtDocument = Autodesk.Revit.DB.Document; using System.Diagnostics; #endregion namespace RevitAddinCS5 { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class ExtCmd : IExternalCommand { #region Cached Variables private static ExternalCommandData _cachedCmdData; public static UIApplication CachedUiApp { get { return _cachedCmdData.Application; } } public static RvtApplication CachedApp { get { return CachedUiApp.Application; } } public static RvtDocument CachedDoc { get { return CachedUiApp.ActiveUIDocument.Document; } } #endregion #region IExternalCommand Members public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { //Variable declaration _cachedCmdData = commandData; // To catch Exception try { TaskDialog.Show("Revit", "Select column"); Reference r = CachedUiApp.ActiveUIDocument.Selection.PickObject(ObjectType.Element); ElementId e = r.ElementId; Autodesk.Revit.DB.Element column = CachedDoc.GetElement(e); FamilyInstance familyInstance = column as FamilyInstance; double length; Rebar r1; BoundingBoxXYZ bb = null; if (null != familyInstance && familyInstance.StructuralType == StructuralType.Column) { LocationPoint location = column.Location as LocationPoint; XYZ origin = location.Point; bb = column.get_BoundingBox(null); double minX = bb.Min.X; double maxX = bb.Max.X; length = (maxX - minX); double minY = bb.Min.Y; double maxY = bb.Max.Y; double width = (maxY - minY); double height = (bb.Max.Z - bb.Min.Z); double minZ = bb.Min.Z; #region Horizontal Points (Top-Bottom) XYZ point1 = new XYZ(maxX - .177, maxY - .177, minZ); XYZ point2 = new XYZ(minX + .177, maxY - .177, minZ); XYZ point3 = new XYZ(minX + .177, minY + .177, minZ); XYZ point4 = new XYZ(maxX - .177, minY + .177, minZ); XYZ normal = new XYZ(0, 0, 1); #endregion #region Vertical Points (Front-Back) //XYZ point1 = new XYZ(maxX - .177, minY + .177, minZ + height - .177); //XYZ point2 = new XYZ(minX + .177, minY + .177, minZ + height - .177); //XYZ point3 = new XYZ(minX + .177, minY + .177, minZ + .177); //XYZ point4 = new XYZ(maxX - .177, minY + .177, minZ + .177); //XYZ normal = new XYZ(0, 1, 0); #endregion #region Vertical Points (Right-Left) //XYZ point1 = new XYZ(maxX - .177, maxY - .177, minZ + height - .177); //XYZ point2 = new XYZ(maxX - .177, minY + .177, minZ + height - .177); //XYZ point3 = new XYZ(maxX - .177, minY + .177, minZ + .177); //XYZ point4 = new XYZ(maxX - .177, maxY - .177, minZ + .177); //XYZ normal = new XYZ(1, 0, 0); #endregion Line lr1 = Line.CreateBound(point1, point2); Line lr2 = Line.CreateBound(point2, point3); Line lr3 = Line.CreateBound(point3, point4); Line lr4 = Line.CreateBound(point4, point1); RebarBarType rebarType = null; // Rebar Type using (Transaction t = new Transaction(CachedDoc, "RebarBar Type")) { t.Start(); rebarType = RebarBarType.Create(CachedDoc); rebarType.BarDiameter = 0.025; rebarType.StirrupTieBendDiameter = .1; t.Commit(); } // Create the line rebar IList<Curve> curves = new List<Curve>(); curves.Add(lr1); curves.Add(lr2); curves.Add(lr3); curves.Add(lr4); RebarHookType rhts = null; RebarHookType rhte = null; // Hook Type using (Transaction t = new Transaction(CachedDoc, "RebarBar Type")) { t.Start(); rebarType = RebarBarType.Create(CachedDoc); rhts = RebarHookType.Create(CachedDoc, 135 * Math.PI / 180, 2); rhte = RebarHookType.Create(CachedDoc, 135 * Math.PI / 180, 2); rhts.Style = RebarStyle.StirrupTie; rhte.Style = RebarStyle.StirrupTie; t.Commit(); } RebarHookOrientation ho = RebarHookOrientation.Right; RebarHookOrientation hi = RebarHookOrientation.Left; using (Transaction t = new Transaction(CachedDoc, "RebarBar Type")) { t.Start(); r1 = Rebar.CreateFromCurves(CachedDoc, RebarStyle.StirrupTie, rebarType, rhts, rhte, column, normal, curves, hi, hi, true, true); t.Commit(); } } else { TaskDialog.Show("Revit", "Selected Item is not column"); } return Result.Succeeded; } catch (Exception e) { TaskDialog.Show("Revit", e.Message + " " + e.Data); return Result.Failed; } } #endregion } }