閱讀筆記 | Autodesk Revit二次開發(fā)基礎(chǔ)教程 | 第3章 元素

元素

一、Element類的解析

1.1 繼承關(guān)系

所有的族、族類型、族實(shí)例都是繼承Element

  • 族(Family)
  • 族類型(FamilySymbol)
  • 族實(shí)例(FamilyInstance)

1.2 屬性

  • Category:類別
  • Location:位置
    • LocationPoint
    • LocationCurve
  • LevelId:標(biāo)高
  • GroupId:組
  • Id:
  • UniqueId:唯一Id

1.3 方法

  • GetMaterials:獲取元素的材質(zhì)
  • GetAnalyticalModel:獲取元素的分析模型,返回AnalyticalModel類型的對象
    • GetCurve、GetCurves、GetPoint:獲取分析模型幾何信息
    • IsSingleCurve、IsSinglePoint:判斷調(diào)用上述三個方法的哪一個
Document document = commandData.Application.ActiveUIDocument.Document;
Element element = document.GetElement(new ElementId(183554));

AnalyticalModel analyticalModel = element.GetAnalyticalModel();
if (analyticalModel.IsSingleCurve())
{
    Curve curve = analyticalModel.GetCurve();
}
else if (analyticalModel.IsSinglePoint())
{
    XYZ p = analyticalModel.GetPoint();
}
else
{
    IList<Curve> curves = analyticalModel.GetCurves(AnalyticalCurveType.ActiveCurves);
}

return Result.Succeeded;

二、獲取元素

2.1 通過ID獲取元素

UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
Element element = doc.GetElement(new ElementId(30));
Level level = element as Level;

通過Document類的GetElement方法獲取ElementId對象得到元素的實(shí)例,再通過as關(guān)鍵字轉(zhuǎn)型為所需元素類型,該方法缺點(diǎn)是,用戶必須知道元素ID及類型才行

2.2 通過過濾器獲取元素

2.2.1 過濾器步驟
  1. 創(chuàng)建收集器
  2. 創(chuàng)建過濾器
  3. 調(diào)用收集器的WherePasses函數(shù)對元素進(jìn)行過濾,可連續(xù)調(diào)用
  4. 遍歷收集器,獲取想要的元素
2.2.2 收集器

FilteredElementCollector類

  • 構(gòu)造函數(shù)
    • FilteredElementCollector(Document document)
    • FilteredElementCollector(Document document, ICollection<ElementId> elementIds)
    • FilteredElementCollector(Document document, ElementId viewId)
  • 方法
    • WherePasses
    • OfClass、OfCategoryId、OwnedByView
    • UnionWith、InstersectWith
2.2.3 元素過濾器

元素過濾器層次:

  • 快速過濾器
    • ElementCategoryFilter:使用類別過濾元素
    • ElementClassFilter:按照類型過濾元素
    • ElementIsElementTypeFilter
    • FamilySymbolFilter:使用族類型過濾元素
    • ExclusionFilter
    • ...
  • 慢速過濾器
    • ElementLevelFilter
    • ElementParameterFilter
    • FamilyInstanceFilter
    • CurveElementFilter
    • ...
  • 邏輯過濾器
    • LogicalOrFilter
    • LogicalAndFilter

2.3 通過選擇獲取元素

UIDocument uiDoc = commandData.Application.ActiveUIDocument;
ICollection<ElementId> collection = uiDoc.Selection.GetElementIds();
foreach (ElementId id in collection)
{
    TaskDialog.Show("Infomation", id.IntegerValue.ToString());
}

通過UIDocument中Selection.GetElementIds方法獲取選中元素的id集合,并且可以通過ElementId下的IntegerValue屬性獲取id編號

三、編輯元素參數(shù)

3.1 參數(shù)分類

  • 內(nèi)建參數(shù)(BuiltInParameter)
  • 共享參數(shù)
  • 項(xiàng)目參數(shù)

3.2 參數(shù)編輯

  • 獲取參數(shù)
    • 獲取元素所有參數(shù):Element.Parameters
    • 獲取元素指定參數(shù):Element.get_Parameter(參數(shù)),返回Parameter類型
      • string參數(shù)名字:效率最低
      • BuiltInParameter參數(shù)枚舉:效率最高,推薦使用
      • Definition參數(shù)定義
      • Guid參數(shù)的guid
  • 修改參數(shù)
    • Parameter.Set(參數(shù))
    • Parameter.IsShared屬性:判斷參數(shù)是共享參數(shù)還是項(xiàng)目參數(shù)

四、編輯元素

4.1 移動

移動的三種方法

  • 通過ElementTransformUtils類下的MoveElement()/MoveElements()方法
    • 不能豎向移動,只能在平面內(nèi)移動
    • 依附在元素上的元素也會移動
    • 無法移動被釘住的元素
    • 該方法是移動到目標(biāo)坐標(biāo)值
  • 通過Location類的Move()方法
    • 該方法是移動一個偏移向量
  • 通過直接修改Location.LocationCurve.Curve屬性或Location.LocationPoint.Point屬性

4.2 旋轉(zhuǎn)

旋轉(zhuǎn)的兩種方法

  • 通過ElementTransformUtils類下的RotateElement()/RotateElements()方法
    • 旋轉(zhuǎn)角度用弧度計量,正值逆時針旋轉(zhuǎn),負(fù)值順時針旋轉(zhuǎn)
    • 旋轉(zhuǎn)軸是有限線段
  • 通過Location類的Rotate()方法

4.3 鏡像

通過ElementTransformUtils類下的MirrorElement()/MirrorElements()方法

  • MirrorElement(Document, ElementId, Plane)
  • MirrorElements(Document, ICollection<ElementId>, Plane)
  • CanMirrorElement(Document, ElementId):判斷元素是否可以鏡像
  • CanMirrorElements(Document, ICollection<ElementId>):判斷元素集是否可以鏡像

4.4 刪除

方法

  • Delete(ElementId)
  • Delete(ICollection<ElementId>)
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;

//刪除一面墻
Wall wall = doc.GetElement(new ElementId(184163)) as Wall;
using (Transaction tran = new Transaction(doc, "Delete the Wall"))
{
    tran.Start();
    ICollection<ElementId> deletedElements = doc.Delete(wall.Id); 
    tran.Commit();
}

//刪除多面墻
List<ElementId> elementsToDelete = new List<ElementId>();
using (Transaction tran = new Transaction(doc, "Delete the Wall"))
{
    tran.Start();
    foreach (var elementId in uiDoc.Selection.GetElementIds())
    {
        elementsToDelete.Add(elementId);
    }
    ICollection<ElementId> deletedElements = doc.Delete(elementsToDelete);
    tran.Commit();
}

return Result.Succeeded;

4.5 組合

通過doc.Create.NewGroup()方法生成一個組合,方法返回Group類型
通過Group對象的GroupType.Name屬性修改組合的名稱

UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;

//組合
List<ElementId> elementsToGroup = new List<ElementId>();
using (Transaction tran = new Transaction(doc, "Group"))
{
    tran.Start();
    foreach (var elementId in uiDoc.Selection.GetElementIds())
    {
        elementsToGroup.Add(elementId);
    }
    Group group = doc.Create.NewGroup(elementsToGroup);
    group.GroupType.Name = "MyGroup";
    tran.Commit();
}

return Result.Succeeded;

4.6 陣列

  • 線型陣列
    • LinearArray.Create(Document, View, ElementId, int, XYZ, ArrayAnchorMember)
    • LinearArray.Create(Document, View, ICollection<ElementId>, int, XYZ, ArrayAnchorMember)
  • 圓弧型陣列
    • RadialArray.Create(Document, View, ElementId, int, Line, double, ArrayAnchorMember)
    • RadialArray.Create(Document, View, ICollection<ElementId>, int, Line, double, ArrayAnchorMember)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容