發表文章

建築資訊模型?

建築資訊模型,重點當然是模型中的資訊, 如果模型中存在的元素,只是物件形體的外觀表現, 而且是必須由人類視覺來體現含意,那就失去建築資訊模型原意。 隨著時間的推移,需要整合至模型中的訊息, 只會越來越多,而且更多是非幾何的資訊, 目前很模型,為了追求物件外觀仿真程度, 或符合現有 2D 出圖規範,在模型中附加不必要幾何元素或加工。 在資訊越來越多的時代趨勢下,單靠人腦是不可能處理所有的訊息, 就算有 AI ,取得的結果也不是百分百正確, 一開始就是正確的資訊,不要後來把時間浪費在排除不必要的訊息上。

三相單相混合負載電力計算

圖片
當三相電源配電盤,分別連接三相負載及單相負載時,如何計算各相功率及功率因數。

Line intersect Plane 線與平面相交

圖片
在 Revit API 中 Face 類別 (Class) 有提供 public SetComparisonResult Intersect(Curve curve)方法 (Methods),檢測兩者是否有交點,但 Plane 類別沒有提供任何檢測是否與線段交錯的方法。 N 為平面法向量 P3 為平面上的點 P1、P2 為線段上的點 P  線段與平面的交點 公式(1)  N dot (P - P3) = 0 平面法向量在平面上的投影,即兩者向量的內積,因互相垂直,值等於 0。 公式(2) P = P1 + u(P2 - P1) 線的方程式,P 點為一條通過 P1、P2 點直線上的一點。 將公式(2)帶入公式(1) N dot ((P1 + u(P2 - P1)) - P3) = 0 (N dot (P1 + u(P2 - P1)) - (N dot P3) = 0 N dot (P1 + u(P2 - P1) = N dot P3 (N dot P1) + (N dot (u(P2 - P1)) = N dot P3 N dot u(P2 - P1) = N dot P3 - N dot P1 N dot u(P2 - P1) = N dot (P3 - P1) u = N dot (P3 - P1) / N dot (P2 - P1) 當 N dot (P2 - P1) = 0 時,表示線段與平面平行(與法向量垂直),沒有交點或位於平面中。 將 u 帶入公式(2) 求出 P 點

電壓定義及配電系統

圖片
建置機電模型時,適合國內使用的電壓定義及配電系統

三角函數

圖片
三角函數參考圖形

Revit 的家用冷水熱水流量計算

圖片
當多個用水裝置透過管段連接,供水端管段的 "流量" 屬性值是如何計算? 在族群中管接點元素的 "流量規劃" 屬性,Revit 提供幾個選項,分別為  "計算"、"預置"、"系統"、"裝置單元"。  另 "裝置單元" 屬性,可輸入裝置單元數值。 在 Revit 機械設定中,流量計算方式,預設只有一個選項 "衛工裝置流向" (ps: 翻譯成衛工裝置流量,應該會比較合適),該選項的內部計算方式是依照,2012 - International Plumbing Code 表 E103.3(3) 的數據來計算。 Revit 自動計算出的流量 但以內政部頒佈的 "建築物給水排水設備設計技術規範" 中,"器具給水負荷單位同時使用流量線圖" 對照,與 2012 - International Plumbing Code 表 E103.3(3) 的數據,在較小負荷單位時,有明顯差異。 因此以 Revit 內部計算方式,所計算出來的流量,是與技術規範不符的。 Revit API 有提供方法,可讓使用者自訂計算方式。

Revit Api IExternalCommand

Revit 外部命令範例 using System; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using CHC.Enum; using CHC.Tools; namespace CHC.MepToolsCommand { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] [Journaling(JournalingMode.NoCommandData)] public class SelectTubeToPlaceThrough : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { try { MepCurveClassification curveClassification = MepCurveClassification.Pipe | MepCurveClassification.Conduit; return RunSelectTubeToPlaceThrough.Execute(commandData, ref message, elements, curveClassification); } catch (Exception e) { message = e.Message; return Result.Failed; } } } }