2013-05-07 29 views
0

我在區域邊界線上創建了一面牆,但無法找到如何將其與位置線「完成面:外部」放置在一起的方法。如何使用與外部區域邊界重合的位置線創建牆?

我是從區域邊界獲得幾何數據:

LocationCurve elLocation = (LocationCurve)area_boundary.Location; 
XYZ pt1 = elLocation.Curve.get_EndPoint(0); 
XYZ pt2 = elLocation.Curve.get_EndPoint(1); 

,然後基於它創建一行壘牆:

Line line = doc.Application.Create.NewLineBound(pt1, pt2); 
Wall wall = Wall.Create(doc, line, level.Id, false); 

此代碼給了我與位置線牆和放置在其中心的區域邊界。 有沒有辦法用位置線與外部區域邊界重合來創建牆?

這是Revit的screen-shoot

預先感謝您!

回答

0

我解決這樣說:

  1. 獲取牆的外表面:

    IList<Reference> sideFaces = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Exterior); 
    Face face = uiDoc.Document.GetElement(sideFaces[0]).GetGeometryObjectFromReference(sideFaces[0]) as Face; 
    
  2. 把那面的法向量,並恢復它:

    PlanarFace pf = face as PlanarFace; 
    XYZ normal_reverted = -1.0 * pf.Normal; 
    
  3. 移動牆:

    wall.Location.Move(normal_reverted * (wall.WallType.Width/2.0)); 
    
0

牆參考鍵有一個BuiltinParameter。可用於設置將針對出現在壁屬性壁基準值

Autodesk.Revit.DB.WALL_KEY_REF_PARAM。

但是,我的理解是,在創建牆時,編程式牆的線將始終是牆的中心線。 (如果他們知道更好的話,歡迎有人糾正這一點)。

+0

謝謝您的回答!問題是,當我創造了牆後設置此參數它給了我下面的結果(https://www.dropbox.com/s/0u46vs43vvfwgay/revit_wall_location_line.png),其中壁保持在相同的位置和唯一位置線牆壁移動,所以區域邊界不在牆的外表面,而是留在牆的中心。 – vero4ka 2013-05-08 17:21:25

+1

無論WALL_KEY_REF_PARAM的值如何,我都可以驗證牆位於中心線上。唯一的解決方案是在創建牆之前將所需位置的線轉換爲牆壁類型寬度的一半,然後根據需要適當設置WALL_KEY_REF_PARAM。是的,它有點工作,但這就是爲什麼他們付給你大筆錢! – GentlemanCoder 2013-05-10 15:28:05

+0

哈哈哈不幸的是,他們不支付我大塊錢:)我爲食物工作;) – vero4ka 2013-05-11 00:18:57