是否有一種簡單方法可以返回WPF中Viewport3D對象中存在的所有Point3D的列表?爲了確定XYZ邊界,我需要這個集合,以便我可以定位相機,使得所有Point3D都在視野內。獲取WPF中Viewport3D中所有Point3D的列表
如果沒有簡單的方法,我需要迭代哪些集合以確保捕獲所有Point3D?
是否有一種簡單方法可以返回WPF中Viewport3D對象中存在的所有Point3D的列表?爲了確定XYZ邊界,我需要這個集合,以便我可以定位相機,使得所有Point3D都在視野內。獲取WPF中Viewport3D中所有Point3D的列表
如果沒有簡單的方法,我需要迭代哪些集合以確保捕獲所有Point3D?
我們需要遍歷一個非常漫長的層次結構來獲取所需的數據。
Viewport3D.Children
返回Visual3DCollection
對象含有一組Visual3D
Visual3D
具有3個類;我們有興趣ModelVisual3D
ModelVisual3D.Children
返回另一個Visual3DCollection
;你可以清楚地看到遞歸樹結構Viewport3D
在根
ModelVisual3D.Visual3DModel
返回Model3D
對象
Model3D
有3個類;我們感興趣的是GeometryModel3D
和Model3DGroup
Model3DGroup.Children
是Model3D
的另一個列表;因此,我們必須遞歸遏制兩層
Geometry3D.Geometry
返回Geometry3D
對象
Geometry3D
好奇地只有一個子類MeshGeometry3D
MeshGeometry3D.Positions
最終給出點的原始列表
請注意,這些點是在本地基礎上的這Geometry3D
對象。爲了獲得世界座標,當您遍歷層次結構時,您必須累積您遇到的任何對象的變換列表,並乘以最後的點。
Model3D.Transform
返回Transform3D
對象Transform3D
具有3個類 - AffineTransform3D
,MatrixTransform3D
和Transform3DGroup
;但這個時候,我們就不用再考慮這些Transform3D.Transform(Point3D)
是非常自我解釋Transform3D
類之間(除MatrixTransform3D
),因此每個Point3D
你必須遍歷轉換的列表中以相反的順序併爲每個元件使用來自先前上面總結爲什麼幾乎沒有人使用WPF爲3D開發的輸出;但應保留爲linux.stackexchange.com。