Revit API Forum
Welcome to Autodesk’s Revit API Forums. Share your knowledge, ask questions, and explore popular Revit API topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Adding Shared Parameters to Families

2 REPLIES 2
Reply
Message 1 of 3
raghulan
4073 Views, 2 Replies

Adding Shared Parameters to Families

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()

Regards,

Raghulan Gowthaman Cert IV TAA, B.E,.
Senior Technical Consultant | Developer - R&D
A2K Technologies Sydney
Web : www.a2ktechnologies.com.au
www.civil3dforum.com | www.e4forums.com
www.zcodia.com.au
www.raghulangowthaman.com
2 REPLIES 2
Message 2 of 3
raghulan
in reply to: raghulan

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);
                                    }
                                }

 

Regards,

Raghulan Gowthaman Cert IV TAA, B.E,.
Senior Technical Consultant | Developer - R&D
A2K Technologies Sydney
Web : www.a2ktechnologies.com.au
www.civil3dforum.com | www.e4forums.com
www.zcodia.com.au
www.raghulangowthaman.com
Message 3 of 3
joshua.lumley
in reply to: raghulan

 

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();
}

 

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Rail Community