Как изменить значение непрозрачности трехмерного объекта - PullRequest
2 голосов
/ 24 февраля 2010

Я использую VS 2008 C # Express. Я хочу изменить значение непрозрачности 3D-объекта в окне, в котором много 3D-объектов. Процесс изменения будет выполняться с помощью кода.

Не могли бы вы объяснить, как это делается?

Спасибо

B.Joe

Ответы [ 2 ]

3 голосов
/ 05 июня 2010

Предполагая, что ваш 3D-объект является Model3DGroup или GeometryModel3D в пределах ModelVisual3D или ModelUIElement3D, изменение непрозрачности заключается в повторении отдельных GeometryModel3D s в нем и обновлении каждого из Material BackMaterial, что-то вроде этого:

public void SetOpacity(Model3D model, double opacity)
{
  var modelGroup = model as Model3DGroup;
  var geoModel = model as GeometryModel3D;

  if(modelGroup!=null)
    foreach(var submodel in modelGroup.Children)
      SetOpacity(submodel, opacity);

  if(geoModel!=null)
  {
    geoModel.Material = SetOpacity(geoModel.Material, opacity);
    geoModel.BackMaterial = SetOpacity(geoModel.BackMaterial, opacity);
  }
}

public Brush SetOpacity(Brush brush, double opacity)
{
  if(!GetIsOpacityControlBrush(brush))  // Use attached property to mark brush
  {
    brush = new VisualBrush
    {
      Visual = new Rectangle { Fill = brush, ... };
    };
    SetIsOpacityControlBrush(brush, true);
  }
  ((Rectangle)((VisualBrush)brush).Visual).Opacity = opacity;
}

Вам нужно будет перебрать все GeometryModel3D и ViewPort2DVisual3D в вашем объекте. Для каждого GeometryModel3D обновите Материал до новой непрозрачности, используя при необходимости VisualBrush. Для каждого ViewPort2DVisual3D просто установите непрозрачность

Если ваш трехмерный объект представляет собой Visual3D, например ContainerUIElement3D, то сначала вам нужно будет выполнить итерации до отдельных ModelVisual3D и ModelUIElement3D, чтобы перейти к содержащим его моделям. Кроме того, если вы сталкиваетесь с ViewPort2DVisual3D, вы можете установить непрозрачность непосредственно на визуальном элементе.

1 голос
/ 24 февраля 2010

Вы можете манипулировать непрозрачностью материала с точки зрения содержащейся в нем кисти.

...