Как отобразить PointGeometryModel3D в GroupModel3D через привязку

#c# #wpf #sharpdx

#c# #wpf #sharpdx

Вопрос:

Я использую 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’ является ObservableElement3DКоллекцией MeshGeometryModel3D.
Это работает, как и ожидалось. Все модели / 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’ своих элементов. Но я не знаю как.

Использование одного PointGeometryModel3D из списка ‘ListOfPointCloudModels’ напрямую работает нормально:

 <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>
 

Ответ №1:

Решением было использование 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>