1. 程式人生 > 實用技巧 >Revit二次開發-為構件新增引數

Revit二次開發-為構件新增引數

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.ApplicationServices;

namespace AddParameter
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    
public class Command : IExternalCommand { Document _doc; UIDocument _uidoc; public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc
= uidoc.Document; _doc = doc; _uidoc = uidoc; var refe = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "Please select element"); Element selectedElement = doc.GetElement(refe) as Element; string shapeFile = @"
E:\【學習】\MyRevitSDKSample\AddParameter\Parameter" + "\\RevitParameters.txt"; this._doc.Application.SharedParametersFilename = shapeFile; Transaction trans = new Transaction(doc, "CreatSharedParams"); trans.Start(); CreatShareParam("C自定義引數_1", ParameterType.Text, false, BuiltInParameterGroup.PG_TEXT, selectedElement); SetParamValue("C自定義引數_1", "我開發了很多Revit外掛和功能", selectedElement); trans.Commit(); return Result.Succeeded; } public bool CreatShareParam(string parameterName, ParameterType parameterType, bool canModify, BuiltInParameterGroup parameterGroup, Element element) { if (element.Category == null) { return false; } try { Application app = this._doc.Application; DefinitionFile dfile = app.OpenSharedParameterFile(); DefinitionGroup dg; if (!element.Category.AllowsBoundParameters) { return false; } Category category = element.Category;//選擇的元素新增 Categories cats = _doc.Settings.Categories;//測試繫結所有元素 dg = dfile.Groups.get_Item("測試共享引數組"); if(dg==null) dg = dfile.Groups.Create("測試共享引數組"); if (dg != null) { ExternalDefinitionCreationOptions edco = new ExternalDefinitionCreationOptions(parameterName, parameterType); edco.UserModifiable = canModify; Definition df; try { df = dg.Definitions.Create(edco); } catch (Exception) { df = dg.Definitions.get_Item(edco.Name); } var instanceBinding = _doc.ParameterBindings.get_Item(df) as InstanceBinding; foreach (Category cat in cats) { if (!cat.AllowsBoundParameters)//判斷類別是否允許繫結引數 continue; if (instanceBinding != null) { if (!instanceBinding.Categories.Contains(cat)) { instanceBinding.Categories.Insert(cat); } _doc.ParameterBindings.ReInsert(df, instanceBinding); } else { Autodesk.Revit.DB.CategorySet categorySet = app.Create.NewCategorySet(); categorySet.Insert(cat); instanceBinding = app.Create.NewInstanceBinding(categorySet); _doc.ParameterBindings.Insert(df, instanceBinding); } } //if (instanceBinding != null) //{ // if (!instanceBinding.Categories.Contains(category)) // instanceBinding.Categories.Insert(category); // _doc.ParameterBindings.ReInsert(df, instanceBinding); //} //else //{ // Autodesk.Revit.DB.CategorySet categorySet = app.Create.NewCategorySet(); // categorySet.Insert(category); // instanceBinding = app.Create.NewInstanceBinding(categorySet); // _doc.ParameterBindings.Insert(df, instanceBinding); //} } return true; } catch (Exception ex) { TaskDialog.Show("error in creating parameters:", "name:" + parameterName + "\r\n" + "id:" + element.Id.ToString()); throw; } } public void SetParamValue(string parameterName, string parameterValue, Element element) { try { if (element.LookupParameter(parameterName) != null && element.LookupParameter(parameterName).IsReadOnly == false) { element.LookupParameter(parameterName).Set(parameterValue); } } catch (Exception ex) { TaskDialog.Show("Set Parameter Value Error", ex.ToString()); return; } } } }