DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Viewport3Dで表示する画像の指定方法について

環境/言語:[Windows Vista-SP1, WPF+C#, .NET Framework3.5]
分類:[.NET]

度々お世話になります。

Viewport3Dで表示する画像の指定方法について質問があります。

元々は固定されたファイル名を表示するため、XAMLで以下のように書かれていました。
<ModelVisual3D x:Name="myModel">
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <GeometryModel3D>
               <GeometryModel3D.Material>
                    <DiffuseMaterial>
                        <DiffuseMaterial.Brush>
                            <ImageBrush ImageSource="C:\Users\aaa.jpg"/>
                        </DiffuseMaterial.Brush>
                    </DiffuseMaterial>
                </GeometryModel3D.Material>

これを入力されたファイル名に従って表示を切り替えるよう変更することになったので
上記のGeometryModel3D.Material部分を削って
C#に以下のようなソースを追加しました。

string szInput = 入力されたパス;
BitmapImage imgSource = new BitmapImage(new Uri(szInput));
var model = new GeometryModel3D();
model.Material = new DiffuseMaterial() {
    Brush = imgBrush
};
myModel.Content = model;

ところが起動しても画像が表示されません。
自分なりに色々調査したのですが解決にいたらずここで質問させていただくことにしました。
どうぞよろしくお願いします。
> <ModelVisual3D x:Name="myModel">
> <ModelVisual3D>
> <ModelVisual3D.Content>
> <GeometryModel3D>
元々は ModelVisual3D である myModel の子にもう一つ ModelVisual3D があり、その Content に GeometryModel3D があるのに、
> myModel.Content = model;
myModel そのものの Content に設定しちゃってます。
■No26674に返信(Hongliangさんの記事)
>><ModelVisual3D x:Name="myModel">
>>    <ModelVisual3D>
>>        <ModelVisual3D.Content>
>>            <GeometryModel3D>
> 元々は ModelVisual3D である myModel の子にもう一つ ModelVisual3D があり、その Content に GeometryModel3D があるのに、
>>myModel.Content = model;
> myModel そのものの Content に設定しちゃってます。

Hongliang様

ご指摘いただいた点の修正に加えて、
modelに対してDiffuseMaterialの他に現状のGeometryとTransform設定してから
ModelVisual3DのContentにセットすることで希望通りの処理を行うことができました。

XAML:
<ModelVisual3D x:Name="myModel">
    <ModelVisual3D.Content>
        <GeometryModel3D x:Name="myGeometry">
            <GeometryModel3D.Geometry>
                <MeshGeometry3D ・・・・ />
            </GeometryModel3D.Geometry>
            <GeometryModel3D.Transform>
                :
            </GeometryModel3D.Transform>

C#:
ImageBrush imgBrush = new ImageBrush(imgSource);
DiffuseMaterial mate = new DiffuseMaterial(imgBrush);
var model = new GeometryModel3D(myGeometry.Geometry, mate);
model.Transform = myGeometry.Transform;
myModel.Content = model;

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板