/// <summary> /// Returns a list of desk Revit family instances using the Desk stored in the DeskArrangement. /// </summary> /// <param name="deskArrangement"> The DeskArrangement object.</param> /// <param name="deskType"> The desk type.</param> /// <param name="hostLevel"> The host hostLevel for the new desks.</param> public static List <DynamoElement> Generate(DeskArrangement deskArrangement, DynamoFamilyType deskType, DynamoLevel hostLevel) { Document doc = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(doc); FamilySymbol newDeskType = FamilyTypeCreator.Desk((FamilySymbol)deskType.InternalElement, deskArrangement, "AU 2019 Vegas Desk"); // Get the Revit Document factory object from the Autodesk.Revit.DB.Creation namespace. // This object is used to instantiate most Revit Elements. var revitFactory = doc.Create; var revitDesks = new List <DynamoElement>(); foreach (var desk in deskArrangement.Desks) { XYZ location = desk.Origin.ToXyz(); var familyInstance = revitFactory.NewFamilyInstance(location, newDeskType, hostLevel.InternalElement, StructuralType.NonStructural); // Wrap and bind the new desk instance. revitDesks.Add(familyInstance.ToDSType(false)); } TransactionManager.Instance.TransactionTaskDone(); return(revitDesks); }
/// <summary> /// Duplicates the given FamilySymbol with the deskTypeName and sets the Width and Depth with the given values. /// </summary> internal static FamilySymbol Desk(FamilySymbol deskType, DeskArrangement deskArrangement, string deskTypeName) { FamilySymbol newDeskType = (FamilySymbol)deskType.Duplicate(deskTypeName); List <string> paramNameLookUp = new List <string> { "Width", "Depth" }; Desk firstDesk = deskArrangement.Desks.First(); List <double> dimensions = new List <double> { firstDesk.Width, firstDesk.Length }; for (int i = 0; i < paramNameLookUp.Count; i++) { Parameter parameter = newDeskType.LookupParameter(paramNameLookUp[i]); // convert the dimension into Revits internal units. double dimensionInFt = UnitUtils.ConvertToInternalUnits(dimensions[i], DisplayUnitType.DUT_MILLIMETERS); parameter.Set(dimensionInFt); } return(newDeskType); }