2

VS 2008 C# Express を使用しています。3D オブジェクトがたくさんあるウィンドウで、3D オブジェクトの不透明度の値を変更したいと考えています。変更プロセスはコード ビハインドによって行われます。

それがどのように行われるか説明していただけますか。

ありがとう

B.ジョー

4

2 に答える 2

3

Model3DGroup3D オブジェクトがorGeometryModel3D内のModelVisual3Dorであると仮定するとModelUIElement3D、不透明度を変更するには、その中の個々の を反復し、それぞれのandを次の行に沿ってGeometryModel3D更新する必要があります。MaterialBackMaterial

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 ごとに、単純に不透明度を設定します。

3D オブジェクトが ContainerUIElement3D などの Visual3D である場合、最初に個々の ModelVisual3D および ModelUIElement3D まで反復して、それを構成するモデルを取得する必要があります。また、ViewPort2DVisual3D に遭遇した場合は、含まれているビジュアルに直接不透明度を設定できます。

于 2010-06-04T23:03:17.327 に答える
1

含まれているブラシに関して、マテリアルの不透明度を操作できます。

于 2010-02-24T13:40:40.513 に答える