Revit二次開發—引數的讀取與寫入
注:本文轉自公眾號:BIMCoder樑老師
一、前言
在Revit二次開發中,引數是非常重要的組成部分,那麼我們該如何從構件獲取引數並修改該引數。
二、方法
首先得到一個Element後,有如下幾個獲取引數的方法:
1. e.Parameters
2. e.GetParameters(string name)
3. e.get_Parameter(BuiltInParameter parameterId)
4. e.LookupParameter(string name)
我們面對這麼多獲取Parameter的方法該如何選擇呢?
首先第三種方式是最保險的,根據BuiltInParameter列舉來獲取。
根據名字來獲取的方式次之,就像一個班級裡叫小明的有好幾個,但是學號卻是唯一的。注意並不是所有引數都是BuiltInParameter,我們最好在獲取引數之前用LookUp檢視一下。
我們以一堵牆為例
雙擊Parameters (Lookup此處用的就是e.Parameters來獲取該Element所有引數)
選擇你想獲取的引數,然後點選Definition,可以看到此Built in param 為WALL_BASE_OFFSET。既然這該引數為BuiltInParameter,那麼:
e.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET)
使用e.GetParameters(string name)或者e.LookupParameter(string name)一定要注意檢查是否為null。
var ps = e.GetParameters("引數1");
因為名稱叫“引數1”的引數可能沒有(即為null),也可能有多個。
當該引數不是BuiltInParameter,你又不確定叫“引數1”的引數有幾個時果斷選擇e.GetParameters("引數1");
var p = e.LookupParameter("引數1");
p也要檢查是否為null.
*************************************************************************************
當我們獲取到引數p,即Parameter物件時該如何獲取其引數值呢?
這時候需要先判斷該parameter的StorageType,即儲存型別。
該屬性是一個列舉型別
舉例:
if(p.StorageType == StorageType.Integer)
{
var pvalue = p.AsInteger();
}
*************************************************************************************
該如何寫入引數:
-
判斷該引數是否是ReadOnly (p.IsReadOnly)
-
判斷該引數互動時是否可修改(p.UserModifiable)
-
判斷該引數的StorageType
-
將要寫入該引數的值轉換為相應的資料型別,然後Set().
簡單示例:pvalue假設是一個string