/// <summary> /// Helper method to control `SetAllowVaryBetweenGroups` /// option for instance binding param /// </summary> static void SetInstanceParamVaryBetweenGroupsBehaviour( Document doc, Guid guid, bool allowVaryBetweenGroups = true) { try // last resort { SharedParameterElement sp = SharedParameterElement.Lookup(doc, guid); // Should never happen as we will call // this only for *existing* shared param. if (null == sp) { return; } InternalDefinition def = sp.GetDefinition(); if (def.VariesAcrossGroups != allowVaryBetweenGroups) { // Must be within an outer transaction! def.SetAllowVaryBetweenGroups(doc, allowVaryBetweenGroups); } } catch { } // ideally, should report something to log... }
bool IsInstance(SharedParameterElement sharedParameter) { Document doc = sharedParameter.Document; BindingMap bindingMap = doc.ParameterBindings; Binding binding = bindingMap.get_Item(sharedParameter.GetDefinition()); if (binding is InstanceBinding) { return(true); } else { return(false); } }
/// <summary> /// The SerializeSharedParameters /// </summary> /// <param name="e">The e<see cref="Element"/></param> /// <returns>The <see cref="string"/></returns> public static string SerializeSharedParameters(Element e, Document doc) { string parameters = ""; IList <Parameter> paraList = e.GetOrderedParameters(); foreach (Parameter para in e.GetOrderedParameters()) { if (para.IsShared == true) { SharedParameterElement sharedParameter = doc.GetElement(para.Id) as SharedParameterElement; if (sharedParameter.GetDefinition().Visible == true) { parameters += string.Format("{0}:{1}={2}", para.Id, para.Definition.Name, ParameterToString(para)) + ";"; } } } return(parameters); }
/// <summary> /// Проверяет налиxие общего параметра у элемента. Если параметр есть - возвращает его. Иначе добавляет параметр из файла общих параметров. /// </summary> /// <param name="elem"></param> /// <param name="app"></param> /// <param name="catset"></param> /// <param name="ParameterName"></param> /// <param name="paramGroup"></param> /// <param name="SetVaryByGroups"></param> /// <returns></returns> public static Parameter CheckAndAddSharedParameter(Element elem, Application app, CategorySet catset, string ParameterName, BuiltInParameterGroup paramGroup, bool SetVaryByGroups) { Document doc = elem.Document; Parameter param = elem.LookupParameter(ParameterName); if (param != null) { return(param); } string oldSharedParamsFile = app.SharedParametersFilename; app.SharedParametersFilename = @"\\picompany.ru\pikp\lib\_CadSettings\02_Revit\04. Shared Parameters\SP-ALL-PIC.txt"; ExternalDefinition exDef = null; string sharedFile = app.SharedParametersFilename; DefinitionFile sharedParamFile = app.OpenSharedParameterFile(); foreach (DefinitionGroup defgroup in sharedParamFile.Groups) { foreach (Definition def in defgroup.Definitions) { if (def.Name == ParameterName) { exDef = def as ExternalDefinition; } } } if (exDef == null) { throw new Exception("В файл общих параметров не найден общий параметр " + ParameterName); } bool checkContains = doc.ParameterBindings.Contains(exDef); if (checkContains) { var res = BindSharedParam(doc, elem, ParameterName, exDef); } InstanceBinding newIB = app.Create.NewInstanceBinding(catset); doc.ParameterBindings.Insert(exDef, newIB, paramGroup); if (SetVaryByGroups) { doc.Regenerate(); SharedParameterElement spe = SharedParameterElement.Lookup(doc, exDef.GUID); InternalDefinition intDef = spe.GetDefinition(); intDef.SetAllowVaryBetweenGroups(doc, true); } doc.Regenerate(); app.SharedParametersFilename = oldSharedParamsFile; param = elem.LookupParameter(ParameterName); if (param == null) { throw new Exception("Не удалось добавить обший параметр " + ParameterName); } return(param); }