Trusses

Truss

The Truss class represents all types of trusses in Revit. The TrussType property indicates the type of truss.

Code Region 29-7: Creating a truss over two columns

Truss CreateTruss(Autodesk.Revit.DB.Document document,
    FamilyInstance column1, FamilyInstance column2)
{
    Truss truss = null;
    using (Transaction transaction = new Transaction(document, "Add Truss"))
    {
       if (transaction.Start() == TransactionStatus.Started)
       {
           //sketchPlane
           XYZ origin = new XYZ(0, 0, 0);
           XYZ xDirection = new XYZ(1, 0, 0);
           XYZ yDirection = new XYZ(0, 1, 0);
           Plane plane = document.Application.Create.NewPlane(xDirection, yDirection, origin);
           SketchPlane sketchPlane = SketchPlane.Create (document, plane);

           //new base Line - use line that spans two selected columns
           AnalyticalModel frame1 = column1.GetAnalyticalModel() as AnalyticalModel;
           XYZ centerPoint1 = (frame1.GetCurve() as Line).GetEndPoint(0);

           AnalyticalModel frame2 = column2.GetAnalyticalModel() as AnalyticalModel;
           XYZ centerPoint2 = (frame2.GetCurve() as Line).GetEndPoint(0);

           XYZ startPoint = new XYZ(centerPoint1.X, centerPoint1.Y, 0);
           XYZ endPoint = new XYZ(centerPoint2.X, centerPoint2.Y, 0);
           Autodesk.Revit.DB.Line baseLine = null;

           try
           {
               baseLine = Line.CreateBound(startPoint, endPoint);
           }
           catch (System.ArgumentException)
           {
               throw new Exception("Selected columns are too close to create truss.");
           }

           // use the active view for where the truss's tag will be placed; View used in
           // NewTruss should be plan or elevation view parallel to the truss's base line
           Autodesk.Revit.DB.View view = document.ActiveView;

           // Get a truss type for the truss
           FilteredElementCollector collector = new FilteredElementCollector(document);
           collector.OfClass(typeof(FamilySymbol));
           collector.OfCategory(BuiltInCategory.OST_Truss);

           TrussType trussType = collector.FirstElement() as TrussType;

           if (null != trussType)
           {
               truss = Truss.Create(document, trussType.Id, sketchPlane.Id, baseLine);
               transaction.Commit();
           }
           else
           {
               transaction.RollBack();
               throw new Exception("No truss types found in document.");
           }
       }
    }
           
    return truss;
}