Revit二次开发-创建用户只读的共享参数

   在族环境里面绑定共享参数,并且用户在属性面板不可修改参数值

 [Transaction(TransactionMode.Manual)]
    public class SharedParameters : IExternalCommand
    {
        private readonly string _desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var doc = commandData.Application.ActiveUIDocument.Document;
            if (!doc.IsFamilyDocument)
            {
                return Result.Cancelled;
            }
            var familyManager = doc.FamilyManager;

            var file = Path.Combine(_desktop, "test.txt");
            if (!File.Exists(file))
            {
                File.Create(file);
            }
            doc.Application.SharedParametersFilename = file;
            var definitionFile = doc.Application.OpenSharedParameterFile();
            using (var trans = new Transaction(doc, "SharedParameters"))
            {
                try
                {
                    trans.Start();
                    var groupName = "TestSharedParameter";
                    var definitionGroup = definitionFile.Groups.get_Item(groupName);
                    if (definitionGroup is null)
                    {
                        definitionGroup = definitionFile.Groups.Create(groupName);
                    }
                    var definitionName = "Source";
                    var definition = definitionGroup.Definitions.get_Item(definitionName);
                    if (definition is null)
                    {
                        var options = new ExternalDefinitionCreationOptions(definitionName, ParameterType.Text)
                        {
                            UserModifiable = false,
                        };
                        definition = definitionGroup.Definitions.Create(options);
                    }
                    if (familyManager.get_Parameter(definition) is null)
                    {
                        var familyParameter = familyManager.AddParameter(definition as ExternalDefinition, BuiltInParameterGroup.PG_TEXT, true);
                        if (familyParameter != null)
                        {
                            familyManager.Set(familyParameter, "Hello World");
                        }
                    }
                    trans.Commit();
                }
                catch (Exception)
                {
                    if (trans.HasStarted())
                    {
                        trans.RollBack();
                    }
                }
            }

            return Result.Succeeded;
        }
    }

 

绑定后的效果如下:

 

posted @ 2023-07-18 17:11  热情定无变  阅读(272)  评论(0编辑  收藏  举报
主题色彩