Apakah mungkin untuk memasukkan Transform3DGroup ke dalam kamus sumber daya dengan pengikatan?

Saya mencoba membuat adegan 3d untuk mewakili model saya secara grafis. Model saya berisi N objek (objA, objB, ...) yang masing-masing berasal dari kelas abstrak yang memiliki beberapa properti seperti Posisi,Dengan,Tinggi,Panjang, dll.

Saat ini Viewport3D saya dilakukan dengan cara ini:

<Viewport3D>
    ...
    <ModelVisual3D Content="{StaticResource objAView}">
        <ModelVisual3D.Transform>
            <Transform3DGroup>
                <ScaleTransform3D ScaleX="{Binding Path=objA.Width}" ScaleY="{Binding Path=objA.Height}" ScaleZ="{Binding Path=objA.Length}"/>
                <TranslateTransform3D OffsetX="{Binding Path=objA.Position.X}" OffsetY="{Binding Path=objA.Position.Y}" OffsetZ="{Binding Path=objA.Position.Z}"/>
            </Transform3DGroup>
        </ModelVisual3D.Transform>
    </ModelVisual3D>
    <ModelVisual3D Content="{StaticResource objBView}">
        <ModelVisual3D.Transform>
            <Transform3DGroup>
                <ScaleTransform3D ScaleX="{Binding Path=objB.Width}" ScaleY="{Binding Path=objB.Height}" ScaleZ="{Binding Path=objB.Length}"/>
                <TranslateTransform3D OffsetX="{Binding Path=objB.Position.X}" OffsetY="{Binding Path=objB.Position.Y}" OffsetZ="{Binding Path=objB.Position.Z}"/>
            </Transform3DGroup>
        </ModelVisual3D.Transform>
    </ModelVisual3D>
    ...
</Viewport3D>

Apakah mungkin untuk menghindari penulisan ulang Transform3DGroup untuk setiap ModelVisual3D karena keduanya hampir sama?

Terima kasih


person Roberto    schedule 15.05.2011    source sumber


Jawaban (1)


Saya rasa tidak ada cara untuk melakukannya dengan sumber daya seperti yang disarankan oleh judul Anda, karena Anda hanya dapat menentukan pengikatannya satu kali.

Namun, Anda dapat menulis kelas yang berasal dari Transform3DGroup dan mengambil satu ikatan apa pun objA dan obBnya. Jadi Anda bisa memiliki sesuatu seperti ini di kode Anda:

<Viewport3D>
    ...
    <ModelVisual3D Content="{StaticResource objAView}">
        <ModelVisual3D.Transform>
            <custom:MyTransform3DGroup ObjectToBindAgainst="{Binding objA}" />
        </ModelVisual3D.Transform>
    </ModelVisual3D>
    <ModelVisual3D Content="{StaticResource objBView}">
        <ModelVisual3D.Transform>
            <custom:MyTransform3DGroup ObjectToBindAgainst="{Binding objB}" />
        </ModelVisual3D.Transform>
    </ModelVisual3D>
    ...
</Viewport3D>

Dan kemudian di kelas khusus Anda, Anda dapat menggunakan ObjectToBindAgainst untuk mengatur semua bagian lain dari transformasi yang disertakan.

Ini tidak akan menghemat banyak uang jika Anda hanya melakukan ini dua kali, tetapi jika Anda melakukannya berkali-kali, itu mungkin sepadan.

person Tim    schedule 15.05.2011
comment
Tidak mungkin diturunkan dari kelas tersegel seperti Transform3DGroup - person Roberto; 15.05.2011