Here is what I am trying to add.
1. user would add list of folders which contains all the family files.
2. Get all the files
3. Add parameter to the families
4. I want the shared parameter to be non editable.
Here is the code.
foreach (string li in GVar.rvtFmlyList) { string s = ""; Autodesk.Revit.DB.Document doc; try { //string directory = @"C:\ProgramData\Autodesk\RVT 2014\Libraries\Australia\Columns"; string Def_file = @"C:\Users\raghulang\Desktop\ADVipSecure.txt"; // loop through all files in the directory //check directory exists if (System.IO.Directory.Exists(li)) { foreach (string filename in System.IO.Directory.GetFiles(li)) { //MessageBox.Show("Directory exists!!" + directory + "||" + filename); s += "Family Name,Family Type,"; try { doc = GVar.app.OpenDocumentFile(filename); if (!doc.IsFamilyDocument) { //MessageBox.Show("Not Family" + directory + "||" + filename); //return; // skip any files that are not families } //MessageBox.Show("Family" + directory + "||" + filename); Autodesk.Revit.DB.FamilyManager familyManager = doc.FamilyManager; DefinitionFile defFile = Helper.RevitHelper.SetAndOpenExternalSharedParamFile(GVar.app, Def_file); DefinitionGroups myGroups = defFile.Groups; DefinitionGroup myGroup = myGroups.get_Item("ADVipSecure"); Definitions myDefinitions = myGroup.Definitions; ExternalDefinition eDef = myDefinitions.get_Item("Company Name") as ExternalDefinition; //Family family = Helper.RevitHelper.FindElementByName(doc, typeof(Family), filename) as Family; //MessageBox.Show(family.Name); //Document familyDoc = doc.EditFamily(family); familyManager.AddParameter(eDef, BuiltInParameterGroup.PG_IDENTITY_DATA, true); doc.Close(false); } catch (Autodesk.Revit.Exceptions.ArgumentNullException ae) { MessageBox.Show(ae.ToString()); } catch (Autodesk.Revit.Exceptions.FamilyContextException ae) { MessageBox.Show(ae.ToString()); } catch (Autodesk.Revit.Exceptions.FileAccessException ae) { MessageBox.Show(ae.ToString()); } catch (Autodesk.Revit.Exceptions.FileNotFoundException ae) { MessageBox.Show(ae.ToString()); } catch (Autodesk.Revit.Exceptions.ApplicationException ae) { MessageBox.Show(ae.ToString()); } catch (SystemException ae) { MessageBox.Show(ae.ToString()); } } } else { MessageBox.Show("Directory dont exists!!"); } } catch (SystemException ex) { MessageBox.Show(ex.ToString()); } } trans.Commit(); }
I am getting different erros when trying different things such as follows,
Autodesk.Revit.Exceptions.InvalidOperationException: A sub-transaction can only be active inside an open Transaction.
at Autodesk.Revit.DB.SubTransaction.Start()
I am able to get this working,
Now I just want to know how to add a shared parameter to Family type or Symbol and set its value.
JUST INCASE IF IT HELPS SOMEONE..
if (doc.IsFamilyDocument) { //MessageBox.Show("Not Family" + directory + "||" + filename); //return; // skip any files that are not families Transaction trans = new Transaction(doc, "Add Param"); trans.Start(); using (trans) { //MessageBox.Show("Family" + directory + "||" + filename); Autodesk.Revit.DB.FamilyManager familyManager = doc.FamilyManager; DefinitionFile defFile = Helper.RevitHelper.SetAndOpenExternalSharedParamFile(GVar.app, Def_file); DefinitionGroups myGroups = defFile.Groups; DefinitionGroup myGroup = myGroups.get_Item("ADVipSecure"); Definitions myDefinitions = myGroup.Definitions; ExternalDefinition eDef = myDefinitions.get_Item("Company Name") as ExternalDefinition; //Family family = Helper.RevitHelper.FindElementByName(doc, typeof(Family), filename) as Family; //MessageBox.Show(family.Name); //Document familyDoc = doc.EditFamily(family); FamilySymbol symbol = null; familyManager.AddParameter(eDef, BuiltInParameterGroup.PG_IDENTITY_DATA, true); Family family = doc.OwnerFamily; //Category c = f.FamilyCategory; foreach (FamilySymbol fs in family.Symbols) { } foreach (FamilyType familyType in familyManager.Types) { // Create a category set and insert category of wall to it CategorySet myCategories = GVar.app.Create.NewCategorySet(); // Use BuiltInCategory to get category of wall Category myCategory = doc.Settings.Categories.get_Item(BuiltInCategory.OST_Walls); } trans.Commit(); doc.Close(false); } }
Thank you this did help me, still works in 2017.
...except I have no idea what Helper.RevitHelper is, the below substitutions are in bold.
FamilyManager familyManager = famDoc.FamilyManager; UIDocument uidoc = ActiveUIDocument; uidoc.Application.Application.SharedParametersFilename = fileName; DefinitionFile defFile = uidoc.Application.Application.OpenSharedParameterFile(); DefinitionGroups myGroups = defFile.Groups; DefinitionGroup myGroup = myGroups.get_Item("_98_PRL_Generic Dimensions"); Definitions myDefinitions = myGroup.Definitions; ExternalDefinition eDef = myDefinitions.get_Item("PRL_WIDTH") as ExternalDefinition; using (Transaction y = new Transaction(famDoc, "Put in parameter")) { y.Start(); familyManager.AddParameter(eDef, BuiltInParameterGroup.PG_IDENTITY_DATA, true); y.Commit(); }