เป็นไปได้ไหมที่จะใส่ Transform3DGroup ที่มีผลผูกพันในพจนานุกรมทรัพยากร

ฉันกำลังพยายามสร้างฉาก 3 มิติเพื่อแสดงโมเดลของฉันในรูปแบบกราฟิก โมเดลของฉันมีวัตถุ N รายการ (objA, objB, ...) แต่ละวัตถุได้มาจากคลาสนามธรรมที่มีคุณสมบัติบางอย่างเช่น ตำแหน่ง, ด้วย, ความสูง, ความยาว ฯลฯ

ในขณะนี้ Viewport3D ของฉันเสร็จสิ้นในลักษณะนี้:

<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>

เป็นไปได้หรือไม่ที่จะหลีกเลี่ยงการเขียน Transform3DGroup ใหม่สำหรับแต่ละ ModelVisual3D โดยที่เกือบจะเหมือนกัน

ขอบคุณ


person Roberto    schedule 15.05.2011    source แหล่งที่มา


คำตอบ (1)


ฉันไม่คิดว่าจะมีวิธีดำเนินการกับแหล่งข้อมูลตามที่ชื่อของคุณแนะนำได้ เนื่องจากคุณจะสามารถระบุการเชื่อมโยงได้เพียงครั้งเดียวเท่านั้น

อย่างไรก็ตาม คุณสามารถเขียนคลาสที่มาจาก Transform3DGroup และรับการเชื่อมโยงเพียงรายการเดียวของ objA และ obB ดังนั้นคุณสามารถมีสิ่งนี้ในโค้ดของคุณแทน:

<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>

จากนั้นในคลาสที่คุณกำหนดเอง คุณสามารถใช้ ObjectToBindAgainst เพื่อตั้งค่าส่วนอื่นๆ ทั้งหมดของการแปลงที่รวมอยู่

มันไม่ได้ช่วยอะไรคุณมากนักถ้าคุณทำแค่สองครั้งจริงๆ แต่ถ้าคุณทำหลายๆ ครั้ง มันอาจจะคุ้มค่า

person Tim    schedule 15.05.2011
comment
ไม่สามารถได้รับมาจากคลาสที่ปิดผนึกเนื่องจาก Transform3DGroup เป็นอยู่ - person Roberto; 15.05.2011