Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取WPF中Viewport3D中所有Point3D的列表_C#_Wpf_3d_Viewport3d - Fatal编程技术网

C# 获取WPF中Viewport3D中所有Point3D的列表

C# 获取WPF中Viewport3D中所有Point3D的列表,c#,wpf,3d,viewport3d,C#,Wpf,3d,Viewport3d,是否有简单的方法返回WPF中Viewport3D对象中存在的所有Point3D的列表?我需要此集合来确定XYZ边界,以便我可以定位摄影机,使所有Point3D都在视野内 如果没有简单的方法,我需要迭代哪些集合以确保捕获所有Point3D?我们需要遍历一个非常长的层次结构才能获得所需的数据 Viewport3D.Children返回一个Visual3DCollection对象,该对象包含一组Visual3D Visual3D有3个子类;我们对ModelVisual3D ModelVisual3D

是否有简单的方法返回WPF中Viewport3D对象中存在的所有Point3D的列表?我需要此集合来确定XYZ边界,以便我可以定位摄影机,使所有Point3D都在视野内


如果没有简单的方法,我需要迭代哪些集合以确保捕获所有Point3D?

我们需要遍历一个非常长的层次结构才能获得所需的数据

  • Viewport3D.Children
    返回一个
    Visual3DCollection
    对象,该对象包含一组
    Visual3D

  • Visual3D
    有3个子类;我们对
    ModelVisual3D

  • ModelVisual3D.Children
    返回另一个
    Visual3DCollection
    ;您可以清楚地看到根目录下带有
    Viewport3D
    的递归树结构

  • ModelVisual3D.Visual3DModel
    返回一个
    Model3D
    对象

  • Model3D
    有3个子类;我们对
    GeometryModel3D
    Model3DGroup

  • Model3DGroup.Children
    Model3D
    的另一个列表;因此,我们有两层递归包含

  • GeometryModel3D.Geometry
    返回一个
    Geometry3D
    对象

  • 奇怪的是,
    Geometry3D
    只有一个子类
    MeshGeometry3D

  • MeshGeometry3D.Positions
    最后给出了点的原始列表


请注意,这些点位于其父对象的本地基础中。为了获得世界坐标,在遍历层次时,必须累积遇到的任何
Model3D
对象的变换列表,并使用它们变换输出点

  • Model3D.Transform
    返回一个
    Transform3D
    对象
  • Transform3D
    有3个子类-
    AffineTransform3D
    MatrixTransform3D
    Transform3D组
    ;但是,我们不需要单独处理它们
  • Transform3D.Transform(Point3D)
    非常简单
  • 我看不到两个
    Transform3D
    类之间的乘法运算符(除了
    MatrixTransform3D
    ),因此对于每个
    Point3D
    ,必须以相反的顺序遍历变换列表,并连续应用每个变换


以上总结了为什么几乎没有人使用WPF进行3D开发。。。应该为您保留的讨论。

为了获得您想要的数据,我们需要遍历一个非常冗长的层次结构

  • Viewport3D.Children
    返回一个
    Visual3DCollection
    对象,该对象包含一组
    Visual3D

  • Visual3D
    有3个子类;我们对
    ModelVisual3D

  • ModelVisual3D.Children
    返回另一个
    Visual3DCollection
    ;您可以清楚地看到根目录下带有
    Viewport3D
    的递归树结构

  • ModelVisual3D.Visual3DModel
    返回一个
    Model3D
    对象

  • Model3D
    有3个子类;我们对
    GeometryModel3D
    Model3DGroup

  • Model3DGroup.Children
    Model3D
    的另一个列表;因此,我们有两层递归包含

  • GeometryModel3D.Geometry
    返回一个
    Geometry3D
    对象

  • 奇怪的是,
    Geometry3D
    只有一个子类
    MeshGeometry3D

  • MeshGeometry3D.Positions
    最后给出了点的原始列表


请注意,这些点位于其父对象的本地基础中。为了获得世界坐标,在遍历层次时,必须累积遇到的任何
Model3D
对象的变换列表,并使用它们变换输出点

  • Model3D.Transform
    返回一个
    Transform3D
    对象
  • Transform3D
    有3个子类-
    AffineTransform3D
    MatrixTransform3D
    Transform3D组
    ;但是,我们不需要单独处理它们
  • Transform3D.Transform(Point3D)
    非常简单
  • 我看不到两个
    Transform3D
    类之间的乘法运算符(除了
    MatrixTransform3D
    ),因此对于每个
    Point3D
    ,必须以相反的顺序遍历变换列表,并连续应用每个变换


以上总结了为什么几乎没有人使用WPF进行3D开发。。。这是一个应该保留的讨论。

我需要一个关于这个邪恶混乱的层次结构中所有嵌套的摘要,而你的答案实际上是一个可靠的参考。@bokibeg同样,“邪恶混乱”是一个可靠的描述。我需要一个层次结构中所有嵌套的摘要,而你的答案实际上是一个可靠的参考。@bokibeg同样,“邪恶混乱”是一个可靠的描述。