2023 Method
Changes 0
M

Truss.Create

Description:
Creates a new Truss.
public static Truss Create(
	Document document,
	ElementId trussTypeId,
	ElementId sketchPlaneId,
	Curve curve
)
Return Value Truss
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);
         XYZ zDirection = new XYZ(0, 0, 1);
         Plane plane = Plane.Create(new Frame(origin, xDirection, yDirection, zDirection));
         SketchPlane sketchPlane = SketchPlane.Create(document, plane);

         //new base Line - use line that spans two selected columns
         XYZ centerPoint1 = null;
         XYZ centerPoint2 = null;
         Location loc1 = column1.Location;
         if (loc1 is LocationPoint)
            centerPoint1 = (loc1 as LocationPoint).Point;
         else if (loc1 is LocationCurve)
            centerPoint1 = ((loc1 as LocationCurve).Curve as Line).GetEndPoint(0);
         Location loc2 = column2.Location;
         if (loc2 is LocationPoint)
            centerPoint1 = (loc2 as LocationPoint).Point;
         else if (loc2 is LocationCurve)
            centerPoint1 = ((loc2 as LocationCurve).Curve 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;
}