VS 2008 C# Express を使用しています。3D オブジェクトがたくさんあるウィンドウで、3D オブジェクトの不透明度の値を変更したいと考えています。変更プロセスはコード ビハインドによって行われます。
それがどのように行われるか説明していただけますか。
ありがとう
B.ジョー
Model3DGroup
3D オブジェクトがorGeometryModel3D
内のModelVisual3D
orであると仮定するとModelUIElement3D
、不透明度を変更するには、その中の個々の を反復し、それぞれのandを次の行に沿ってGeometryModel3D
更新する必要があります。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 ごとに、単純に不透明度を設定します。
3D オブジェクトが ContainerUIElement3D などの Visual3D である場合、最初に個々の ModelVisual3D および ModelUIElement3D まで反復して、それを構成するモデルを取得する必要があります。また、ViewPort2DVisual3D に遭遇した場合は、含まれているビジュアルに直接不透明度を設定できます。
含まれているブラシに関して、マテリアルの不透明度を操作できます。