2017-08-02 47 views
-1

是否有一種簡單方法可以返回WPF中Viewport3D對象中存在的所有Point3D的列表?爲了確定XYZ邊界,我需要這個集合,以便我可以定位相機,使得所有Point3D都在視野內。獲取WPF中Viewport3D中所有Point3D的列表

如果沒有簡單的方法,我需要迭代哪些集合以確保捕獲所有Point3D?

回答

0

我們需要遍歷一個非常漫長的層次結構來獲取所需的數據。

  • Viewport3D.Children返回Visual3DCollection對象含有一組Visual3D

  • Visual3D具有3個類;我們有興趣ModelVisual3D

  • ModelVisual3D.Children返回另一個Visual3DCollection;你可以清楚地看到遞歸樹結構Viewport3D在根

  • ModelVisual3D.Visual3DModel返回Model3D對象

  • Model3D有3個類;我們感興趣的是GeometryModel3DModel3DGroup

  • Model3DGroup.ChildrenModel3D的另一個列表;因此,我們必須遞歸遏制兩層

  • Geometry3D.Geometry返回Geometry3D對象

  • Geometry3D好奇地只有一個子類MeshGeometry3D

  • MeshGeometry3D.Positions最終給出點的原始列表


請注意,這些點是在本地基礎上的這Geometry3D對象。爲了獲得世界座標,當您遍歷層次結構時,您必須累積您遇到的任何對象的變換列表,並乘以最後的點。

  • Model3D.Transform返回Transform3D對象
  • Transform3D具有3個類 - AffineTransform3DMatrixTransform3DTransform3DGroup;但這個時候,我們就不用再考慮這些
  • Transform3D.Transform(Point3D)是非常自我解釋
  • 我沒有看到一個乘法運算符將兩個Transform3D類之間(除MatrixTransform3D),因此每個Point3D你必須遍歷轉換的列表中以相反的順序併爲每個元件使用來自先前

上面總結爲什麼幾乎沒有人使用WPF爲3D開發的輸出;但應保留爲linux.stackexchange.com