如何通过Binding在GroupModel3D中显示PointGeometryModel3D
How to display PointGeometryModel3D in GroupModel3D via Binding
我正在使用 SharpDX 加载和显示模型。
<hx:Viewport3DX EffectsManager="{Binding EffectsManager}"
Camera="{Binding Camera}" ModelUpDirection="0,0,1">
<hx:AmbientLight3D Color="{StaticResource ModelAmbientLightColor}" />
<hx:DirectionalLight3D Direction="{Binding Camera.LookDirection}" Color="{StaticResource ModelDirectionalLightColor}" />
<hx:Element3DPresenter Content="{Binding MainModel}" />
<hx:GroupModel3D ItemsSource="{Binding ListOfAdditionalModels}"/>
</hx:Viewport3DX>
列表 'ListOfAdditionalModels' 是 MeshGeometryModel3D 的 ObservableElement3DCollection。
这按预期工作。所有 models/3d 项都正确显示。
现在我基本上想对 PointGeometryModel3D 列表执行相同的操作。但是它不会显示任何东西。
<hx:Viewport3DX EffectsManager="{Binding EffectsManager}"
Camera="{Binding Camera}" ZoomExtentsWhenLoaded="True"
>
<hx:AmbientLight3D Color="#030303" />
<hx:DirectionalLight3D Direction="{Binding Camera.LookDirection}" Color="White" />
<hx:GroupModel3D ItemsSource="{Binding ListOfPointCloudModels, UpdateSourceTrigger=PropertyChanged}" >
</hx:GroupModel3D>
这是怎么回事?我想我必须告诉 GroupModel 使用其项目的 'Geometry' 属性。但是我不知道怎么办。
直接使用列表 'ListOfPointCloudModels' 中的一个 PointGeometryModel3D 效果很好:
<hx:Viewport3DX EffectsManager="{Binding EffectsManager}"
Camera="{Binding Camera}" BackgroundColor="#FF88AACD" ZoomExtentsWhenLoaded="True" >
<hx:AmbientLight3D Color="#030303" />
<hx:DirectionalLight3D Direction="{Binding Camera.LookDirection}" Color="White" />
<hx:PointGeometryModel3D Color="{x:Static Colors.White}"
Geometry="{Binding PointsModel.Geometry}" Figure="Rect" Size="10 10" >
</hx:PointGeometryModel3D>
</hx:Viewport3DX>
解决方案是使用 ItemsModel3D 而不是 GroupModel3d 并定义项目模板:
<hx:ItemsModel3D ItemsSource="{Binding ListOfPointCloudModels}" >
<hx:ItemsModel3D.ItemTemplate>
<DataTemplate>
<hx:PointGeometryModel3D Geometry="{Binding Geometry}" Color="{x:Static Colors.White}" Figure="Rect" Size="2 2"/>
</DataTemplate>
</hx:ItemsModel3D.ItemTemplate>
</hx:ItemsModel3D>
我正在使用 SharpDX 加载和显示模型。
<hx:Viewport3DX EffectsManager="{Binding EffectsManager}"
Camera="{Binding Camera}" ModelUpDirection="0,0,1">
<hx:AmbientLight3D Color="{StaticResource ModelAmbientLightColor}" />
<hx:DirectionalLight3D Direction="{Binding Camera.LookDirection}" Color="{StaticResource ModelDirectionalLightColor}" />
<hx:Element3DPresenter Content="{Binding MainModel}" />
<hx:GroupModel3D ItemsSource="{Binding ListOfAdditionalModels}"/>
</hx:Viewport3DX>
列表 'ListOfAdditionalModels' 是 MeshGeometryModel3D 的 ObservableElement3DCollection。 这按预期工作。所有 models/3d 项都正确显示。
现在我基本上想对 PointGeometryModel3D 列表执行相同的操作。但是它不会显示任何东西。
<hx:Viewport3DX EffectsManager="{Binding EffectsManager}"
Camera="{Binding Camera}" ZoomExtentsWhenLoaded="True"
>
<hx:AmbientLight3D Color="#030303" />
<hx:DirectionalLight3D Direction="{Binding Camera.LookDirection}" Color="White" />
<hx:GroupModel3D ItemsSource="{Binding ListOfPointCloudModels, UpdateSourceTrigger=PropertyChanged}" >
</hx:GroupModel3D>
这是怎么回事?我想我必须告诉 GroupModel 使用其项目的 'Geometry' 属性。但是我不知道怎么办。
直接使用列表 'ListOfPointCloudModels' 中的一个 PointGeometryModel3D 效果很好:
<hx:Viewport3DX EffectsManager="{Binding EffectsManager}"
Camera="{Binding Camera}" BackgroundColor="#FF88AACD" ZoomExtentsWhenLoaded="True" >
<hx:AmbientLight3D Color="#030303" />
<hx:DirectionalLight3D Direction="{Binding Camera.LookDirection}" Color="White" />
<hx:PointGeometryModel3D Color="{x:Static Colors.White}"
Geometry="{Binding PointsModel.Geometry}" Figure="Rect" Size="10 10" >
</hx:PointGeometryModel3D>
</hx:Viewport3DX>
解决方案是使用 ItemsModel3D 而不是 GroupModel3d 并定义项目模板:
<hx:ItemsModel3D ItemsSource="{Binding ListOfPointCloudModels}" >
<hx:ItemsModel3D.ItemTemplate>
<DataTemplate>
<hx:PointGeometryModel3D Geometry="{Binding Geometry}" Color="{x:Static Colors.White}" Figure="Rect" Size="2 2"/>
</DataTemplate>
</hx:ItemsModel3D.ItemTemplate>
</hx:ItemsModel3D>