NO IMAGE

轉載請複製以下資訊:
原文連結: http://blog.csdn.net/joexiongjin/article/details/8000754
作者:  葉雄進 , Autodesk ADN

文章背景:

在建立牆的時候,可能使用者沒有設定牆的上部樓層。是否可以通過程式設計的方式一次性的全部設定牆的上部樓層?

同樣的是否可以程式設計設定房間的上部樓層?

這是可以通過程式設計實現。

你需要獲取所有需要修改上部樓層的牆。然後修改牆的上部樓層引數值為目標樓層即可。 你需要獲取目標樓層的ElementId,把這個ElementId值賦值給牆的引數即可。

牆的上部樓層對應的內部列舉變數是

BuiltInParameter.WALL_HEIGHT_TYPE

請看下面的程式碼。

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using  Autodesk.Revit .DB;
using Autodesk.Revit.UI;
using Autodesk.Revit .ApplicationServices;
using Autodesk.Revit.Attributes ;
using Autodesk.Revit.UI.Selection;
[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class RevitCommand : IExternalCommand
{
//把選中的牆的上部樓層設定為第二層。
public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
{
UIApplication app = commandData.Application;
Document doc = app.ActiveUIDocument.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);
collector.OfClass(typeof(Level));
var levels = from Element elem in collector
where elem.Name.Equals("Level 2")
select elem;
Level level2 = null;
if (levels.Count() > 0)
level2 = levels.First() as Level;
Selection sel = app.ActiveUIDocument.Selection;
Reference ref1 = sel.PickObject(ObjectType.Element, "please pick wall only");
Wall wall = doc.GetElement(ref1) as Wall;
if (wall == null)
{
return Result.Failed;
}
Transaction trans = new Transaction(doc, "ExComm");
trans.Start();
//設定上部樓層。通過修改引數值來實現,這是唯一的辦法。上部樓層的內建列舉值是 BuiltInParameter.WALL_HEIGHT_TYPE
Parameter paraTopConstraint = wall.get_Parameter(BuiltInParameter.WALL_HEIGHT_TYPE);
paraTopConstraint.Set(level2.Id);
trans.Commit();
return Result.Succeeded ;
}
}

可以用同樣的辦法來修改房間的上部樓層。房間的上部樓層內建列舉成員是:BuiltInParameter.ROOM_UPPER_LEVEL