Toon posts:

[C++/wxPlotCtrl] Hoe buttons maken om mee te zoomen?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Heeft er iemand hier ervaring met wxPlotCtrl? Ik kom er niet uit wat betreft zoomen. Ik weet dat als ik op de grafiek druk en dan letters a,d,w,x,q,c,e of z gebruik dan zoomt ie op alle manieren. Maar ik moet met knoppen werken: "Zoom in" en "Zoom uit" Nu probeer ik steeds de werking van de letters aan de knopen vast te binden, maar het lukt me niet |:( . Heeft iemand een tip?

Groetjes, Elf

Ps. Taal: C++

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En wat lukt er dan precies niet? En wat heb je zelf al geprobeerd om tot een oplossing te komen? Waar heb je op gezocht en wat heb je daarbij gevonden? Wat werkte daaraan niet en waarom denk je? Zie ook De Quickstart. ;)

Pas je topicstart even aan met wat meer informatie, dan doe ik alvast hetzelfde met je topictitel. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het lijkt me dat een wxPlotCtrl gewoon iets van een SetZoomLevel functie heeft, die kun je dan aanroepen in de code die achter de knop zit.

Welke functie je aan moet roepen kun je vast wel in de documentatie vinden. Mocht er niet zo'n methode zijn dan zou ik contact opnemen met de leverancier van het control. Of eventueel iets met sendkeys doen om de toetsaanslagen te emuleren.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Afbeeldingslocatie: http://student.hro.nl/0784515/vb.jpg

Dat is wat ik nu heb (grafisch)

Ik wil dat ik door middel van klikken op de knoop "Zoom in" en "Zoom uit" in en uit kan zoomen.

wat ik gevonden heb, belangrijkste is hier: http://wxforum.shadonet.c...=14222&highlight=plotctrl

Maar dat is puur door middel van klikken op de grafiek, en dan op de desberaffende letter, en dan wordt je grafiek in/uit gezoemd.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Aan een plaatje hebben we niet zoveel, aangezien je blijkbaar gewoon problemen hebt met code achter je knop hangen. Als ik bijvoord in de link die je aanhaalt kijkt kun je gewoon op de volgende manier het Zoom level veranderen
C++:
1
2
3
wxPlotCtrl* myCtrl;

myCtrl->SetZoom( wxPoint2DDouble( x, y ), true);


Maar wat wil er dan niet lukken met deze code?

[ Voor 4% gewijzigd door Woy op 14-04-2009 13:51 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Woy schreef op dinsdag 14 april 2009 @ 13:49:

Maar wat wil er dan niet lukken met deze code?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void MonitorDialog::OnButton1Click(wxCommandEvent& event)
{
    Custom1->SetZoom(wxPoint2DDouble(10, 10), true);
    cout << "Zoom In!\n";
}

void MonitorDialog::OnButton2Click(wxCommandEvent& event)
{
    cout << "Vernieuw beeld!\n";
    static double xPoints[3] = {-10.0, 0.0, 10.0};
    static double yPoints[3] = {-10.0, 0.0, 10.0};

    static wxPlotData henk(xPoints, yPoints, 3);

    Custom1->AddCurve(henk);
}

void MonitorDialog::OnButton3Click(wxCommandEvent& event)
{
    Custom1->SetZoom(wxPoint2DDouble(-10, -10), true);
    cout << "Zoom Uit!\n";
}


dat is wat ik nu heb, idd, ik doe het zo als het daar staat, maar na een keer in of uit zoemen doet het niets meer.

PS> dat beeld vernieuwen komt straks, vanuit een queue. Nu is het puur om te testen

[ Voor 4% gewijzigd door Verwijderd op 14-04-2009 14:00 ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22-09 14:14

Matis

Rubber Rocket

Je zult nooit zoomen, immers is je *zoomlevelpunt* statisch 10. Wat IMO neerkomt op locatie 10,10 to vergroten. Daarnaast zul je zoals je zelf aangeeft moeten *repainten*. Heb je wel event handlers hangen aan je knoppen?

Edit:
Je blijft op het punt 10,10 fixeren. Denk dat ik je event de x en y locatie van je punt meegegeven moet worden...

[ Voor 22% gewijzigd door Matis op 14-04-2009 14:06 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
toaomatis schreef op dinsdag 14 april 2009 @ 14:04:
Je zult nooit zoomen, immers is je *zoomlevelpunt* statisch 10. Wat IMO neerkomt op locatie 10,10 to vergroten. Daarnaast zul je zoals je zelf aangeeft moeten *repainten*. Heb je wel event handlers hangen aan je knoppen?

Edit:
Je blijft op het punt 10,10 fixeren. Denk dat ik je event de x en y locatie van je punt meegegeven moet worden...
ehh, ik heb nog niet zo veel verstand van, kan je dus aub duidelijker uitleggen wat je bedoeld?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je zult inderdaad je Zoomlevel elke click moeten vergroten/verkleinen. De methode heet SetZoom en niet AddZoom.

Je zult dus een variabele moeten gebruiken, waar je bij het inzoemen wat bij optelt en bij het uitzoemen wat vanaf trekt. Nadat je dat gedaan hebt moet je met die waarde de SetZoom aanroepen.

Je zult bijvoorbeeld in de class scope van "MonitorDialog" een variabele zoomlevel moeten defineren en dan iets als het volgende moeten doen
C++:
1
2
3
4
5
6
7
8
9
10
MonitorDialog::Button1_Click()
{
    zoomLevel += 10;
    Custom1->SetZoom(wxPoint2DDouble(zoomLevel, zoomLevel), true);
}
MonitorDialog::Button3_Click()
{
    zoomLevel -= 10;
    Custom1->SetZoom(wxPoint2DDouble(zoomLevel, zoomLevel), true);
}

[ Voor 41% gewijzigd door Woy op 14-04-2009 14:13 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22-09 14:14

Matis

Rubber Rocket

Woy schreef op dinsdag 14 april 2009 @ 14:10:
Je zult inderdaad je Zoomlevel elke click moeten vergroten/verkleinen. De methode heet SetZoom en niet AddZoom.

Je zult dus een variabele moeten gebruiken, waar je bij het inzoemen wat bij optelt en bij het uitzoemen wat vanaf trekt. Nadat je dat gedaan hebt moet je met die waarde de SetZoom aanroepen.
Precies. Je moet (zoals in de voorbeelden staat) zoomLevelX moeten vergroten bij inzoomen *= of +=. En moeten verkleinen bij uitzoomen /= of -=. Dit ook voor het zoomLevelY.

Mocht je dit al niet begrijpen dan zul je toch dieper in de documentatie van wxPlotCtrl moeten duiken, want aangezien ik er nog nooit van gehoord had; Lijkt het toch vrij logisch...
Verwijderd schreef op dinsdag 14 april 2009 @ 14:09:
ehh, ik heb nog niet zo veel verstand van, kan je dus aub duidelijker uitleggen wat je bedoeld?
Edit... zie hierboven


Edit2:
Desnoods gebruik je je buttonhandlers om een voorgekauwde methode aan te roepen welke beschreven staat op de site.

[ Voor 18% gewijzigd door Matis op 14-04-2009 14:18 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Woy en Toaomatis,

Heel erg bedankt voor jullie hulp!! ik ben er eindelijk eruit!
Ik heb het zo gedaan

code:
1
2
3
4
5
6
7
8
void MonitorDialog::OnButton1Click(wxCommandEvent& event)
{
    zoomX = zoomX + 10;
    zoomY = zoomY + 10;

    Custom1->SetZoom(wxPoint2DDouble(zoomX, zoomY), true);
    cout << "Zoom In!\n";
}


en
code:
1
2
3
4
5
6
7
8
void MonitorDialog::OnButton3Click(wxCommandEvent& event)
{
    zoomX = zoomX - 10;
    zoomY = zoomY - 10;

    Custom1->SetZoom(wxPoint2DDouble(zoomX, zoomY), true);
    cout << "Zoom Uit!\n";
}

Gezien dit mijn eerste iets in C++ is, moet nog leren goed lezen/begrijpen 8)7

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22-09 14:14

Matis

Rubber Rocket

Ja precies.

en het zou nog mooier zijn als je hetvolgende deed:

C++:
1
2
zoomX -= 10;
zoomY -= 10;


Niet dat de werking ervan zal verschillen; Alleen ziet het er iets professioneler uit ;)
Verwijderd schreef op dinsdag 14 april 2009 @ 14:19:
Gezien dit mijn eerste iets in C++ is, moet nog leren goed lezen/begrijpen 8)7
Misschien voortaan toch maar beginnen met Hello World?

[ Voor 44% gewijzigd door Matis op 14-04-2009 14:25 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
toaomatis schreef op dinsdag 14 april 2009 @ 14:24:
C++:
1
2
zoomX -= 10;
zoomY -= 10;


Niet dat de werking ervan zal verschillen; Alleen ziet het er iets professioneler uit ;)
Ja, ik heb dat nu ook gedaan, moet in de opdracht nog ff opzoeken hoe ze willen dat het zoomt, met hoe veel procent, enz.

En met "mijn eerste iets"bedoelde ik een groter opdracht. Ik ben nu klaar met de c++ tutorial, en de bijbehorende oefeningen hiervandaan http://www.cplusplus.com/doc/tutorial/

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22-09 14:14

Matis

Rubber Rocket

Verwijderd schreef op dinsdag 14 april 2009 @ 14:29:
Ja, ik heb dat nu ook gedaan, moet in de opdracht nog ff opzoeken hoe ze willen dat het zoomt, met hoe veel procent, enz.

En met "mijn eerste iets"bedoelde ik een groter opdracht. Ik ben nu klaar met de c++ tutorial, en de bijbehorende oefeningen hiervandaan http://www.cplusplus.com/doc/tutorial/
Haha prima, ik zei het ook meer als geintje ;) Succes verder met je opdracht en mocht je nog/weer vragen hebben dan hoor ik ze graag :)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks! _/-\o_
Pagina: 1