1. 程式人生 > >Revit二次開發—引數的讀取與寫入

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();

}

 

*************************************************************************************

 

該如何寫入引數:

  1. 判斷該引數是否是ReadOnly (p.IsReadOnly)

  2. 判斷該引數互動時是否可修改(p.UserModifiable)

  3. 判斷該引數的StorageType

  4. 將要寫入該引數的值轉換為相應的資料型別,然後Set().

 

簡單示例:pvalue假設是一個string