Message 1 of 6
Adding family symbol parameter causes a naming exception
Not applicable
10-23-2018
07:56 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I am using c# and revit 2016.
My code adds a family symbol parameter to a brand new element. However, It throws an exception "The name "XYZ" is already in use. Parameter name: parameterName". I open the target element's family editor and I find that there is no parameter called "XYZ". I reboot revit and run the same command again it works ( I find the parameter "XYZ" appears on the target element ). Moreover, I find that the exception occurs now and then when I open the revit. So I want to know is there a bug in my code or revit itself ?
private void SetFamilySymbolStringParamForSingleElement(Document familyDoc, FamilySymbol familySymbol,String targetParam, String targetParamValue){
if (familySymbol.LookupParameter(targetParam) == null)
{
using (Transaction trans = new Transaction(familyDoc, "Add params" + targetParam))
{
trans.Start();
FamilyParameter target_newParam = familyDoc.FamilyManager.AddParameter(targetParam,
BuiltInParameterGroup.PG_IDENTITY_DATA, ParameterType.Text, false);
familyDoc.FamilyManager.Set(target_newParam, targetParamValue);
trans.Commit();
}
}
else
{
using (Transaction trans = new Transaction(familyDoc,
"Set params" + targetParam + "with a new value" + targetParamValue))
{
trans.Start();
Parameter existed_targetParam = familySymbol.LookupParameter(targetParam);
existed_targetParam.Set(targetParamValue);
trans.Commit();
}
}
}
FamilyInstance famInst = element as FamilyInstance;
if (famInst != null)
{
FamilySymbol eleSymbol = famInst.Symbol;
Document familyDoc = document.EditFamily(famInst.Symbol.Family);
using (TransactionGroup transGroup = new TransactionGroup(document, "create parameters for a single element"))
{
transGroup.Start();
SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "XYZ", XYZ);
SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "ABC", ABC);
SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "DEF", DEF);
transGroup.Commit();
}
familyDoc.LoadFamily(document, new projFamLoadOption());