探究Revit API反轉/鏡像/變換
在這篇文章中,我們將研究Revit API中的Instance.GetTransform方法。
Revit API 中的Instance.GetTransform
方法 不包括反射,下圖展示了一個被鏡像的族實例以及等效的 GetTransform
值:
下面是Python代碼:
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
data= UnwrapElement(IN[0])
output=[]
for i in data:
output.append(i.Location.Point)
output.append(i.GetTransform().BasisX)
output.append(i.GetTransform().BasisY)
output.append(i.GetTransform().BasisZ)
output.append("")
OUT = output
這在 Revit中是有意為之的。
然而,從數學的角度來看,這是不應該的。維基百科的變換矩陣清楚地指出關于X軸反射的元件應具有不同的變換矩陣:
我們發現 Revit 對各種鏡像和翻轉操作使用了反射和旋轉的組合:
值得關注的是關于同一軸的水平雙翻轉控制和鏡像命令(紅色標注)之間的區別。除了導致相反的面對方向和手狀態的水平操作之外,這些操作幾乎相同。從圖形上看,它看起來是一樣的,但不是根據面對方向。
之前已經注意到單次翻轉控制更像是旋轉而不是鏡像(它不會得到反射的幾何形狀)。我們通過變換看到它被反射,但面對方向?用手狀態也被設置為真。
通常來說,我認為面對方向/手的狀態是族狀態的內部管理數據,即,內部幾何可以被反射,但族本身不是(除非它是通過變換)。
你可能需要查看翻轉狀態/旋轉和變換,以明確了解情況。這些控制很久以前我相信是為門構建引入的,用來表示它們懸掛在哪一邊以及擺動的方向。當它們開始用于其他事物時,歧義就開始出現,即雙重否定(相同的最終表示,但有兩個定義)。
原文鏈接:https://thebuildingcoder.typepad.com/blog/2021/05/flip-mirror-transform-and-transient-graphics.html