4/5 (2 avis)
Vue 31 398 fois - Téléchargée 1 271 fois
#pragma once namespace courbe { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Threading; public __gc class Form1 : public System::Windows::Forms::Form { //déclaration des outils de tracage Pen *crayon,*crayon1,*crayon3,*crayon4; //variables Point depart,arrivee,gravite,souris,depart2,depart3,arrivee2,centre,plus; bool boutonEnfonce, dessine; int figure; Graphics *surface; int nombre; private: System::Windows::Forms::Panel * panel1; private: System::Windows::Forms::Label * label1; private: System::Windows::Forms::ComboBox * finesse; private: System::Windows::Forms::CheckBox * checkBox2; private: System::Windows::Forms::CheckBox * checkBox1; public: Form1(void) { InitializeComponent(); //initialisation des outils de tracage crayon = new Pen(Color::Red,2); crayon1 = new Pen(Color::Blue,2); crayon3 = new Pen(Color::Green,1); crayon4 = new Pen(Color::Black,1); } protected: void Dispose(Boolean disposing) { if (disposing && components) { components->Dispose(); } __super::Dispose(disposing); } private: System::Windows::Forms::StatusBar * statusBar1; private: System::ComponentModel::Container * components; void InitializeComponent(void) { ... } private: System::Void Form1_MouseDown(System::Object * sender, System::Windows::Forms::MouseEventArgs * e) { if(figure==0)//au premier clique { dessine=false; //placer le premier point la ou se trouve la souris (variable e) depart.X=e->get_X(); depart.Y=e->get_Y(); boutonEnfonce=true; figure=1; } else { if(figure==1)//au deuxieme clique { figure=2; dessine=true; boutonEnfonce=true; //placer le deuxieme point la ou se trouve la souris (variable e) arrivee.X=e->get_X(); arrivee.Y=e->get_Y(); gravite.X=arrivee.X; gravite.Y=arrivee.Y; } } if(figure==3)//au troisieme clic { //pour permettre un nouveau tracage figure=0; } } private: System::Void Form1_MouseMove(System::Object * sender, System::Windows::Forms::MouseEventArgs * e) {//quand on glisse la souris if(boutonEnfonce && figure==2) { //si nous sommes au deuxieme clique et si le clique de la souris est toujours actif //on détermine la position de la souris souris.X=e->X; souris.Y=e->Y; //on détermine le centre de gravité gravite.X=arrivee.X+(arrivee.X-e->X); gravite.Y=arrivee.Y+(arrivee.Y-e->Y); } Invalidate(); } private: System::Void Form1_MouseUp(System::Object * sender, System::Windows::Forms::MouseEventArgs * e) { //quand on relache le clic boutonEnfonce=false; if(figure==2){figure=3;} } private: System::Void Form1_Paint(System::Object * sender, System::Windows::Forms::PaintEventArgs * e) { if(figure==1) { //traçage du premier point surface=CreateGraphics(); plus.X=depart.X+2; plus.Y=depart.Y+2; surface->DrawLine(crayon,depart,plus); surface->Dispose(); this->statusBar1->Text="Posez votre 2eme point en cliquant/glissant pour placer le centre de gravité"; } if(dessine) { //traçage de la courbe surface=CreateGraphics(); if(this->checkBox2->Checked) { //afficher les vecteurs surface->DrawLine(crayon1,depart,gravite); surface->DrawLine(crayon1,gravite,arrivee); } if(figure<3) {//affichage de la construction du centre de gravité en cours surface->DrawLine(crayon3,gravite,souris); plus.X=souris.X+2; plus.Y=souris.Y+2; surface->DrawLine(crayon1,souris,plus); } //récupération du pas (finesse) et oint de départ de la courbe nombre=Convert::ToInt32(this->finesse->SelectedItem->ToString()); depart3=depart; for(int i=0; i<nombre+1;i++) { //détermination des points barycentriques depart2.X=depart.X+((gravite.X-depart.X)*i/nombre); depart2.Y=depart.Y+((gravite.Y-depart.Y)*i/nombre); arrivee2.X=gravite.X+((arrivee.X-gravite.X)*i/nombre); arrivee2.Y=gravite.Y+((arrivee.Y-gravite.Y)*i/nombre); if(this->checkBox1->Checked)//si l'on veut voir les traits de construction surface->DrawLine(crayon4,depart2,arrivee2); //détermination du centre de gravité centre.X=depart2.X+((arrivee2.X-depart2.X)*i/nombre); centre.Y=depart2.Y+((arrivee2.Y-depart2.Y)*i/nombre); //traçage segment surface->DrawLine(crayon,depart3,centre); depart3=centre; } surface->Dispose(); this->statusBar1->Text="Glissez avec la souris"; } if(figure==3) { //laisser la courbe afficher this->Cursor=Cursors::Hand; this->statusBar1->Text="Admirez votre courbe de Bézier, et cliquez a nouveau pour retracer une courbe"; } if(figure==0) { //atttente d'un nouveau clic this->Cursor=Cursors::Cross; this->statusBar1->Text="Placez votre 1er point"; } } private: System::Void Form1_Load(System::Object * sender, System::EventArgs * e) { this->finesse->SelectedIndex=12; } }; }
13 nov. 2006 à 20:09
6 avril 2006 à 20:32
Interressant quand même.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.