Hi,
I am now testing a script to modify family instances using API, but transaction errors occur.
Transaction was set to manual, and I think I set proper transaction start and commit.
The code simply takes a family instances, create new type, and reload the instance.
Could anyone please look at my code and give me some help?
in advance, Thank for your help!
Code:using System;using System.Collections.Generic; using System.Linq; using System.Text; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using Autodesk.Revit.ApplicationServices; using Autodesk.Revit.Attributes; [TransactionAttribute(TransactionMode.Manual)] [RegenerationAttribute(RegenerationOption.Manual)] class familyExtract : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref String massage, ElementSet elements) { UIApplication uiApp = commandData.Application; Document doc = uiApp.ActiveUIDocument.Document; Selection sel = uiApp.ActiveUIDocument.Selection; Reference selected = null; FamSelectionFilter famFilter = new FamSelectionFilter(); selected = sel.PickObject(ObjectType.Element, famFilter, "select family"); Element elem = doc.GetElement(selected); FamilyInstance familyInstance = elem as FamilyInstance; Transaction trans = new Transaction(doc, "excomm"); trans.Start(); editFamilyProperties(doc, familyInstance); trans.Commit(); return Result.Succeeded; } public void editFamilyProperties(Document document, FamilyInstance familyInstance) { if (null != familyInstance.Symbol) { Family family = familyInstance.Symbol.Family; Document familyDoc = document.EditFamily(family); if (null != familyDoc) { FamilyManager familyManager = familyDoc.FamilyManager; FamilyType newFamType = familyManager.NewType("Test"); FamilyParameter familyParam = familyManager.get_Parameter("width"); if (null != familyParam) { familyManager.Set(familyParam, 200); } family = familyDoc.LoadFamily(document); FamilySymbolSetIterator symbolsItor = family.Symbols.ForwardIterator(); symbolsItor.Reset(); while (symbolsItor.MoveNext()) { FamilySymbol familySymbol = symbolsItor.Current as FamilySymbol; if (familySymbol.Name == "mass_Ctype") { familyInstance.Symbol = familySymbol; break; } } } } } public class FamSelectionFilter : ISelectionFilter { public bool AllowElement(Element element) { if (element is FamilyInstance) { return true; } return false; } public bool AllowReference(Reference refer, XYZ point) { return false; } } }


Reply With Quote
