Fabric Sheets provide the model representation for welded wire fabrics typically used in concrete slab and sometimes wall construction.
Fabric sheets are typically created in a pattern which results in welded wire sheets overlapping each other to provide continuity of load transfer from one sheet to the next. Sheets may be in one or more layers within a concrete element.
Fabric Sheets are typically specified by a grid spacing and a wire size for each direction. For example: 6x6 - W2.9/W2.9 in US Imperial units (or 152x152-MW18.7/MW18.7 in SI units) would be interpreted as a grid of wires at 6" on center with a wire area of 2.9 hundredths of an inch squared (0.029 sq-in). In Revit, these sheets are represented as Revit System Families called Fabric Sheets which reference wires as Revit System Families called Fabric Wire.
Fabric sheets contain properties to control the wire spacing and pattern in each direction, FabricWire family to use for each direction, other parameters to control the exact configuration of the sheet as well as a parameters to control reference locations for sheet overlap. Overlap parameters provide snap references to facilitate manual placement of the Fabric Sheet adjacent to an existing sheet in the project.
Fabric sheets can be hosted by a container (represented by the FabricArea class), or can exist as single fabric sheets. Single fabric sheets are hosted elements and must be hosted by a structural floor, structural wall, structural foundation slab, or a part created from a structural layer of one of these types. Bent fabric sheets can also be hosted in structural beams, columns and braces. In the API, the FabricSheet class represents a fabric sheet and the FabricWire class represents a fabric wire.
The FabricArea class has an overloaded Create() method to create a FabricArea based either on the host boundary or from an array of curves. Just as single fabric sheets are hosted elements, FabricArea must also be hosted by a structural floor, wall, foundation slab or a part created from a structural layer of one of these types. Fabric sheets are not created separately when hosted by a FabricArea container.
The FabricSheet class provides an overloaded static Create() method for creating new single fabric sheets in the model. One overload of FabricSheet.Create() creates a flat fabric sheet and requires a reference to the document in which the fabric sheet will be created, a reference to the host element which will host the fabric sheet and the ElementId of the fabric sheet type to create.
Another overload of FabricSheet.Create() can be used to create bent fabric sheets, which is not possible in the Revit user interface. It requires the same input as above, plus a CurveLoop that defines the bending path. This bending path is a profile that defines the bending shape of the fabric sheet. FabricWires have parameters which define their allowable bend radiuses so you may provide this CurveLoop profile with or without fillets. In other words, if a U shaped profile is desired, only 3 lines must be specified and the fabric sheet created will be created with the appropriate bend radii at the corners. If the provided profile has no hard corners, (I.e., the curve has a tangent at each point, except the end) no fillets will be created in the final fabric sheet.
The provided CurveLoop is intended to define the centerline of the bent wire. You may specify whether the bend is in the major wires or the minor wires with the BentFabricBendDirection property of the FabricSheet. You may also specify whether the non-bent direction wires are above or below the bent wires with the BentFabricWiresOrientation property.
You may obtain the curves for a bent sheet or set new curves by calling GetBendProfile() or SetBendProfile() respectively.
The IsBent property indicates if the fabric sheet is a bent fabric sheet or not. It is not possible to convert a Fabric Sheet between flat and bent.
When fabric sheets are created, they are not yet placed in their host. You must call the method FabricSheet.PlaceInHost() and pass in the host element as well as a transform which describes the final position of the fabric sheet. The element passed for the host must support hosting fabric sheets. Note that only bent fabric sheets can be hosted in beams, columns or braces, while both bent and flat fabric sheets can be hosted in structural floors, walls and foundation slabs, or parts created from a structural layer of one of these types.
Code Region: Creating and placing a bent fabric sheet |
---|
private FabricSheet CreateBentFabricSheet(Document document, Element wall) { RebarHostData rebarHostData = RebarHostData.GetRebarHostData(wall); if (rebarHostData == null) return null; CurveLoop bendingProfile = new CurveLoop(); Line line1 = Line.CreateBound(new XYZ(2, 0.8, 0), new XYZ(6, 0.8, 0)); Line line2 = Line.CreateBound(new XYZ(6, -0.8, 0), new XYZ(4, -2, 0)); Arc arc = Arc.Create(line1.GetEndPoint(1), line2.GetEndPoint(0), new XYZ(7, 0, 0)); bendingProfile.Append(line1); bendingProfile.Append(arc); bendingProfile.Append(line2); ElementId fabricSheetTypeId = document.GetDefaultElementTypeId(ElementTypeGroup.FabricSheetType); FabricSheet bentFabricSheet = FabricSheet.Create(document, wall.Id, fabricSheetTypeId, bendingProfile); // Regeneration is required before setting any property to object that was created in the same transaction. document.Regenerate(); bentFabricSheet.BentFabricBendDirection = BentFabricBendDirection.Major; AnalyticalModelSurface ams = wall.GetAnalyticalModel() as AnalyticalModelSurface; bentFabricSheet.PlaceInHost(wall, ams.GetLocalCoordinateSystem()); // Give the user some information TaskDialog.Show("Revit", string.Format("Bent Fabric Sheet ID='{0}' created successfully.", bentFabricSheet.Id.IntegerValue)); return bentFabricSheet; } |