/// <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...
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }