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