Punkte in Grafik ansprechen
-
Hi zusammen,
habe mir eine PaintBox (Zeichenbox) erstellt und darauf quasi ein DrawingBoard (Bittmap) gezeichtnet...!!!
Graphics::TBitmap *DrawingBoard;
Jetzt zeichne ich mittels canvas ein KoordinatenSystem:
void __fastcall TForm1::Zeichnen() { //Für Paintbox //werteArray.clear(); DrawingBoard = new Graphics::TBitmap; DrawingBoard->Width = this->Zeichenbox->Width; DrawingBoard->Height = this->Zeichenbox->Height; //Setzt Koordinatenkreuz DrawingBoard->Canvas->MoveTo(30,30); DrawingBoard->Canvas->LineTo(30,Zeichenbox->Height-30); DrawingBoard->Canvas->MoveTo(30,Zeichenbox->Height-30); DrawingBoard->Canvas->LineTo(Zeichenbox->Width-30,Zeichenbox->Height-30); //Setzt Merker int x=30; int y=30; int zaehlen = 0; for(y = Zeichenbox->Height-30; y>30; y-=30){ DrawingBoard->Canvas->MoveTo(x-5,y); DrawingBoard->Canvas->LineTo(x+5,y); DrawingBoard->Canvas->TextOutA(x-25,y-5,zaehlen); zaehlen+=30; } x=30; y= Zeichenbox->Height-30; zaehlen=0; for(x = 30; x<Zeichenbox->Width-30;x+=30){ DrawingBoard->Canvas->MoveTo(x,y-5); DrawingBoard->Canvas->LineTo(x,y+5); if(skalierung == "zehn"){ DrawingBoard->Canvas->TextOutA(x-5,y+5,zaehlen); zaehlen+=30; } if(skalierung == "eins"){ DrawingBoard->Canvas->TextOutA(x-5,y+5,zaehlen); zaehlen+=3; } } DrawingBoard->Canvas->MoveTo(30,Zeichenbox->Height-30); }Dann wird mittels der "OnPaint" der Paintbox das Board gezeichnet:
void __fastcall TForm1::PaintBoxPaint(TObject *Sender) { Zeichenbox->Canvas->Draw(0, 0, DrawingBoard); }Jetzt kann man per Mausklick kleine Vierecke auf das Bitmap zeichnen mit der koordinantenanzeige:
void __fastcall TForm1::PaintBoxMousUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int x; int y; if(Skalierung1->Checked==true){ x = (X-30)/10; y =((Zeichenbox->Height-30)-Y)/10; }else{ x = X-30; y =(Zeichenbox->Height-30)-Y; } Zeichenbox->Canvas->Rectangle(X-3,Y+3,X+3,Y-3); String posx = x; String posy = y; String position = posx+" - "+posy; int arrayLange = sizeof(werteArray)+1; werteArray[arrayLange] =position; Zeichenbox->Canvas->TextOutA(X-5,Y+5,position); //Zeichenwerte->Items->Add(position); }das funktioniert auch wunderbar!!!
Jetzt habe ich das Problem, dass ich gerne die kleinen Vierecke, welche mit der Maus gezeichnet wurden, wieder ansprechen möchte und halt dann verschieben!!!!
Die Frage ist nur, die sind ja auf das Bitmap gezeichnet!!!
Habe ich da überhaupt eine CHance oder muss ich das anderst anpacken!!
Bitte um Hilfe, Beispielcode, Ansatzlösung,Ideen, etc.!!
Vielen Dank Bench
-
Merke dir wo du die Vierecke gezeichnet hast (Koordinaten).
Schau bei Mausklick auf das Image nach ob sich der Cursor in einem Viereck befindet.
Zeichne dein Image mit den veränderten Koordinaten für das Viereck neu.
-
Hi!
Ok, erstmal danke!!!!
Die gezeichneten Werte kann ich ja in einem Array abspeichern!!!!Das ist klar!
Wie schau ich dann, ob ich in dem viereck bin????
Über Koordinaten, oder???Neuzeichnen ist dann auch wieder klar!!!
Danke Bench
-
Bench_XProjects schrieb:
Wie schau ich dann, ob ich in dem viereck bin????
Über Koordinaten, oder???Wenn die Vierecke nicht gekippt sind ja
left < x < right
top < y < bottom
-
nein, die sind nicht gekippt!
Aber ich habe ja nur einen aktuelle Koordinatenpunkt, und um den ist ja im 3-Pixelabstand das Viereck gezeichnet!
Jetzt könnte ich den aktuellen Punkt mit dem Punkt im Array vergleichen!
Aber es ist ziemlich schwierig, genau den gleichen punkt mit der Maus zu treffen!!!Aber jetzt nochmals:
Wie kann ich den Bereich des Vierecks auslesen?
Kannst du mir vielleicht einen kleinen COde schicken?Wäre echt super cool!!
Danke Bench
-
Hi,
ok jetzt hab ichs!!!
Merk mir einfach alle vier Ecken und dann ...!!!
bench