[C#/XAML] Rechthoek

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb achterliggend (in C#) een aantal rechthoeken (System.Windows.Rect). In XAML visualiseer ik deze rechthoeken met een <Rectangle .../>.

De properties van de achterliggende Rect kunnen wijzigen en deze worden geupdate in XAML met dataBinding.

Het probleem nu is dat het ook mogelijk moet kunnen zijn om de achterliggende Rect te roteren m.b.v een transformatie matrix (dit kan standaard) maar het visualiseren van deze geroteerde rechthoek geeft problemen.

Met volgende code heb ik de rechthoek in XAML kunnen roteren:
<Rectangle.RenderTransform>
<RotateTransform CenterX="{Binding CenterX}" CenterY="{Binding CenterY}" Angle="{Binding Angle}" />
</Rectangle.RenderTransform>

Het probleem hierbij is nu dat ik achterliggend naast de Rect ook nog een Center punt en een hoek moet bijhouden om na het uitvoeren van de rotatieMatrix deze rotatie ook zichtbaar te maken in XAML. (M.a.w ik moet de attributen CenterX, centerY en Angle extra bijhouden).

Dit zou ik dus liever vermijden....

Bestaat er een mogelijkheid om gebruik te maken van de achterliggende Rect om de XAML Rectangle te weergeven (zonder dus deze extra attributen)?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
http://social.expression....c-4608-89d4-e71cf8f3bbec/ ? Dus vanaf Expression Design terug naar Expression Blend kopieren, zodat je een Path krijgt in plaats van een geroteerde rectangle?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de achterliggende rechthoek (type Rect) kunnen koppelen aan XAML als volgt:

code:
1
2
3
4
5
    <Path Fill = "LightSlateGray" Opacity="0.5" Stroke="Black" HorizontalAlignment="Left" VerticalAlignment="Top" >
        <Path.Data>
            <RectangleGeometry Rect="{Binding Shape}" RadiusX="6" RadiusY="15" />
        </Path.Data>
    </Path>


Het verplaatsen en vergroten van de rechthoek worden perfect geupdate. Enkel het roteren niet:s
Bij het roteren laat ik op de achterliggende rechthoek een rotatieMatrix uitvoeren. Bij het updaten naar XAML gaat het blijkbaar ergens mis... Hij lijkt de rechthoek te vergroten en niet te draaien

Verwijderd

Topicstarter
Iemand nog een idé misschien?

dus bij het uitvoeren van een rotatie op het achterliggend Rect object zou de RectangleGeometry in xaml ook moeten roteren....

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik snap het eigenlijk niet. Een System.Windows.Rect is een uiterst simpele struct bestaande uit 4 waardes (x,y,breedte,hoogte), waar rotatie geen deel van uitmaakt. Hoe kun je dan precies een rotatie doen op zo'n Rect zonder voor het resultaat iets anders te gebruiken? Er is namelijk geen manier om dat in die Rect op te slaan. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry als ik wat onduidelijk was maar ik het inmiddels voor het probleem wat ik had een oplossing gevonden:

Achterliggend hou ik een Rect en een Matrix (affine matrix) bij. De Rect stelt de originele matrix voor, de matrix bevat alle verdere manipulaties op de rechthoek (roteren, transleren, resize)

In xaml kan ik nu gemakkelijk volgende code gebruiken:
code:
1
2
3
4
5
6
7
8
9
    <Path Fill = "LightSlateGray" Opacity="0.5" Stroke="Black" HorizontalAlignment="Left" VerticalAlignment="Top" >
        <Path.Data>
            <RectangleGeometry Rect="{Binding Shape}">
                <RectangleGeometry.Transform>
                    <MatrixTransform Matrix="{Binding TransformMatrix}" />
                </RectangleGeometry.Transform>
            </RectangleGeometry>
        </Path.Data>
    </Path>



Ik weet niet of dit een goede methode is maar volgens mij heb ik op deze manier een consistente representatie van de rechthoek in zowel xaml als mijn achterliggende code.

Echter zit ik wat vast met een aantal basis operaties bv bij roteren:
Hierbij zou ik de rechthoek eerst naar de oorsprong zien te verplaatsen en dan de rotatie uitvoeren.
Maar hoe kom ik te weten hoeveel ik moet transleren? de Rect bevat namelijk enkel de originele rechthoek en ik weet niet of er uit die transformatie matrix kan gehaald worden hoeveel ik reeds verplaatst ben...?


een oplossing of enkele tips over een betere opbouw zouden me al veel verder kunnen helpen.

Alvast bedankt!
Pagina: 1