Revit二次開發之通過寫族給火警裝置繫結探測圈

2021-08-29 17:54:05 字數 3031 閱讀 5539

我們知道revit二次開發環境無法實現像cad那樣,實時預覽和區域檢測功能,比如我們想在放置感煙探測器或監控探頭時,能夠實時預覽到它的覆蓋範圍,輔助我們確定乙個空間內需要放置探頭的數量,其實我們可以通過寫族的方式——為探頭裝置新增乙個探測圈,並設定引數半徑繫結,實現引數化,這樣我們在布置探頭時就可以動態的改變這個探頭的探測範圍,進而實時預覽不同的布置方案,核心**如下:

本博文這裡,假設感煙或監控探頭已經載入到專案中

獲得此族的族型別集合

iset(elementid) familysymbolids = family.getfamilysymbolids();

隨便獲取乙個型別

familysymbol symbol = family.document.getelement(familysymbolids.first()) as familysymbol;

首先判斷此族中是否存在我們要新增的引數,也可以說是判斷這個族是否已新增了探測圈,如果新增了就不在進行任何操作,如果沒有,則繼續新增探測圈

bool boolen = false;

foreach (parameter p1 in symbol.parameters)

if (p1.definition.name == "r半徑" || p1.definition.name == "r可見")

boolen = true;

break;

if (boolen == true)

autodesk.revit.ui.taskdialog.show("友情提示", "該火警裝置已被繫結,可以直接使用!");

return;

使用editfamily方法開啟族,獲得族文件document

document familydoc = doc.editfamily(family);

transaction ts = new transaction(familydoc, "bim");

ts.start();

設定族當前檢視的工作平面,如果族開啟後不是平面檢視,可以過濾族所有平面檢視進行替換和專案檢視切換方法一樣

plane plane = new plane(xyz.basisz, xyz.zero);

sketchplane sp = sketchplane.create(familydoc, plane);

引數 探測圈預設半徑

double radius = 5.8 / 0.3048;

繪製閉合探測圈,使用模型線

double startangle = 0;

double endangle = 2 * math.pi;

arc arc = arc.create(xyz.zero, radius, startangle, endangle, xyz.basisx, xyz.basisy);

modelcurve mc = familydoc.familycreate.newmodelcurve(arc, sp);

獲得模型線的引用,以為其新增驅動標註,實現引數化

reference reference = new reference(mc);

familymanager fm = familydoc.familymanager;

使用族的引數管理器,新增"r半徑"引數,引數型別為 長度    規程為 公共              

familyparameter param = fm.addparameter("r半徑", builtinparametergroup.pg_general, parametertype.length, false);

關鍵部分 實現引數關聯

dison.familylabel = param;

使用族的引數管理器,新增"r可見"引數,引數型別為 是/否 規程為 可見性

familyparameter param_visible = fm.addparameter("r可見", builtinparametergroup.invalid, parametertype.yesno, true);

實現 族圖形-可見 引數關聯,設定可見就是為了放置所有探頭後能夠批量隱藏探測圈

parameter p = mc.get_parameter(builtinparameter.is_visible_param);

fm.associateelementparametertofamilyparameter(p, param_visible);

ts.commit();

myfamilyloadoptions myoption = new myfamilyloadoptions();

familydoc.loadfamily(doc, myoption);

familydoc.dispose();

// 覆蓋專案理的原有的族檔案,以前的博文都介紹了 這裡就不再贅述

Revit二次開發之通過寫族給火警裝置繫結探測圈

我們知道revit二次開發環境無法實現像cad那樣,實時預覽和區域檢測功能,比如我們想在放置感煙探測器或監控探頭時,能夠實時預覽到它的覆蓋範圍,輔助我們確定乙個空間內需要放置探頭的數量,其實我們可以通過寫族的方式 為探頭裝置新增乙個探測圈,並設定引數半徑繫結,實現引數化,這樣我們在布置探頭時就可以動...

Revit二次開發 分割族

如有不明白,請qq254033230詢問。其實在revit裡是不存在分割族的概念。對於基於線形的族,截面沿線都是一樣,要想達到分割的狀態,只需要把族基於線的那條線變短,然後再在分割點複製乙個新的族即可。過程是先獲得線的均分點,然後把族的線縮短,接著再複製族,即可變成均分的效果。主要方法見 priva...

Revit二次開發 獲取Element的族型別引數

在revit中,如果想獲取element的例項引數,直接呼叫element的lookupparameter函式就可以了,但是想獲取型別引數,這樣操作卻找不到引數。以牆為例,如下圖 上圖中的 功能 和 牆體型別 是屬於型別引數,如果用上面的方法,是找不到這兩個引數的,也就沒辦法取到它們的值。那應該怎麼...