//--------------------------------------------------------------------------- void __fastcall TGLForm2D::Triangulos2Click(TObject *Sender) { //Elegir el grosor de las lineas del triangulo if(UFG->pedirGrosor(grosorLinea)){ GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::Reiniciar2Click(TObject *Sender) { grosorCentro=4; grosorGravedad=4; grosorLinea=1.0; GLScene();
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::Activar1Click(TObject *Sender) { oscurecer=true; anidamientoTotal = false; GLScene();
//--------------------------------------------------------------------------- void __fastcall TGLForm3D::FormResize(TObject *Sender) { //Se actualiza puerto de vista y ratio if ((ClientHeight<=1.0) || (ClientHeight<=1.0)) { ClientWidth=400; ClientHeight=400; RatioViewPort=1.0; } else RatioViewPort=(GLfloat)ClientWidth/(GLfloat)ClientHeight; glViewport(0,0,ClientWidth,ClientHeight); //Se actualiza el volumen de vista //para que su ratio coincida con RatioViewPort GLfloat RatioVolVista=xRight/yTop; if (RatioVolVista>=RatioViewPort) { //Aumentamos yTop-yBot yTop=xRight/RatioViewPort; yBot=-yTop; } else { //Aumentamos xRight-xLeft xRight=RatioViewPort*yTop; xLeft=-xRight; } glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(xLeft, xRight, yBot, yTop, N, F); GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::Reiniciar1Click(TObject *Sender) { colorLinea1=1;colorLinea2=1;colorLinea3=1;//Lineas blancas colorCentro1=0;colorCentro2=0;colorCentro3=1;//Centro AVE azul colorGravedad1=1;colorGravedad2=0;colorGravedad3=0;//Centro Gravedad rojo GLScene();
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::timerTimer(TObject *Sender) { clock(0); step(); GLScene(); clock(1); }
void __fastcall TGLForm2D::Anidar1Click(TObject *Sender) { nTriangulos++; mEmbaldosado=false; glViewport(0,0,ClientWidth,ClientHeight); GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::CentroGravedad2Click(TObject *Sender) { //Elegir el grosor del centro Gravedad if(UFG->pedirGrosor(grosorGravedad)){ GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::CentroAVE2Click(TObject *Sender) { //Elegir el grosor del centro AVE if(UFG->pedirGrosor(grosorCentro)){ GLScene(); }
void __fastcall TGLForm2D::AnyadirClick(TObject *Sender) { if(!sc->getArbol()->empty()){ sc->getArbol()->anidar(0,0,aleatorio,0); GLScene(); }else ShowMessage("Hacer click para primer nivel!"); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(Button)return; if(!selection)return; pelota.push_back(*selection); delete selection; selection=0; GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::Triangulos1Click(TObject *Sender) { if(ColorDialog1->Execute()){ TColor c = ColorDialog1->Color; colorLinea1 = (GLfloat)GetRValue(ColorToRGB(c))/255; colorLinea2 = (GLfloat)GetGValue(ColorToRGB(c))/255; colorLinea3 = (GLfloat)GetBValue(ColorToRGB(c))/255; GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::CentroGravedad1Click(TObject *Sender) { if(ColorDialog1->Execute()){ TColor c = ColorDialog1->Color; colorGravedad1 = (GLfloat)GetRValue(ColorToRGB(c))/255; colorGravedad2 = (GLfloat)GetGValue(ColorToRGB(c))/255; colorGravedad3 = (GLfloat)GetBValue(ColorToRGB(c))/255; GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(selection)return; if(Button)return; Vector centro=Vector(X,Y); calcle(centro); selection= new Selection(centro); GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(!selection)return; if(!Shift.Contains(ssLeft))return; Vector curr= Vector(X,Y); calcle(curr); selection->setV(curr, timer->Interval/100.0); //la flecha que se dibija es el movomieto por decima de segundo GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::Tiling1Click(TObject *Sender) { if (mDesplazar){ mDesplazar = false; } if(UFT->pedirNumColumnas(nCol)){ mEmbaldosado = true; nFil=((nCol+1)*ClientHeight*(xRight-xLeft))/(ClientWidth*(yTop-yBot)); GLScene(); } }
//--------------------------------------------------------------------- void __fastcall TGLForm2D::FormResize(TObject *Sender) { //se actualiza puerto de vista glViewport(0,0,ClientWidth,ClientHeight); // se actualiza el volumen de vista aplyView(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLScene(); }
void __fastcall TGLForm2D::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (mDesplazar){ switch (Key){ //Izquierda case 37:{ GLfloat xRight_aux = xRight - (xRight-xLeft)*0.05; GLfloat xLeft_aux = xLeft - (xRight-xLeft)*0.05; xRight = xRight_aux; xLeft = xLeft_aux; break; } //Abajo case 38:{ GLfloat yBot_aux = yBot - (yBot-yTop)*0.05; GLfloat yTop_aux = yTop - (yBot-yTop)*0.05; yBot = yBot_aux; yTop = yTop_aux; break; } //Derecha case 39:{ GLfloat xRight_aux = xRight + (xRight-xLeft)*0.05; GLfloat xLeft_aux = xLeft + (xRight-xLeft)*0.05; xRight = xRight_aux; xLeft = xLeft_aux; break; } //Arriba case 40:{ GLfloat yBot_aux = yBot + (yBot-yTop)*0.05; GLfloat yTop_aux = yTop + (yBot-yTop)*0.05; yBot = yBot_aux; yTop = yTop_aux; break; } } glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(xLeft,xRight,yBot,yTop); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLScene(); }
//--------------------------------------------------------------------- void __fastcall TGLForm2D::FormResize(TObject *Sender) { //se actualiza puerto de vista y su radio if ((ClientWidth<=1)||(ClientHeight<=1)){ ClientWidth=400; ClientHeight=400; RatioViewPort=1.0; } else RatioViewPort= (float)ClientWidth/(float)ClientHeight; glViewport(0,0,ClientWidth,ClientHeight); // se actualiza el volumen de vista // para que su radio coincida con ratioViewPort GLfloat RatioVolVista=(xRight-xLeft)/(yTop-yBot); if (RatioViewPort<=RatioVolVista){//hemos hecho la ventana mas alta que ancha //Aumentamos yTop-yBot GLdouble altoNew= (xRight-xLeft)/RatioViewPort; GLdouble yCentro= (yTop+yBot)/2.0; yTop= yCentro + altoNew/2.0; yBot= yCentro - altoNew/2.0; } else{ //hemos hecho la ventana mas ancha que alta //Aumentamos xRight-xLeft GLdouble anchoNew= RatioViewPort*(yTop-yBot); GLdouble xCentro= (xRight+xLeft)/2.0; xRight= xCentro + anchoNew/2.0; xLeft= xCentro - anchoNew/2.0; } glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(xLeft,xRight, yBot,yTop); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLScene(); }
void __fastcall TGLForm3D::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch(Key){ case 38://up anguloEjeX += 5; break; case 40://down anguloEjeX -= 5; break; case 39://right anguloEjeY += 5; break; case 37://left anguloEjeY -= 5; break; case 65://a anguloEjeZ += 5; break; case 90://z anguloEjeZ -= 5; break; case 81://q c->run(); break; case 87://w c->back(); break; case 71://g debug = false; break; case 72://h debug = true; break; case 74://j normals = true; break; case 75://k normals = false; break; } GLScene(); }
void TGLForm2D::zoom(int porcentaje) { GLfloat f = (GLfloat)porcentaje/100; GLfloat xRight_aux = ((xRight+xLeft)/2)+(((xRight-xLeft)/f)/2); GLfloat xLeft_aux = ((xRight+xLeft)/2)-(((xRight-xLeft)/f)/2); GLfloat yTop_aux= ((yTop+yBot)/2)+(((yTop-yBot)/f)/2); GLfloat yBot_aux= ((yTop+yBot)/2)-(((yTop-yBot)/f)/2); xRight = xRight_aux; xLeft = xLeft_aux; yTop = yTop_aux; yBot = yBot_aux; glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(xLeft,xRight,yBot,yTop); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::keyPressed(TObject *Sender, char &Key){ switch(Key){ case ' ' : if(timer->Enabled)return; step(); break; case '+' : zoom*=1.1; aplyView(); break; case '-' : zoom/=1.1; aplyView(); break; case 'w' : y+= 20/zoom; aplyView(); break; case 's' : y-= 20/zoom; aplyView(); break; case 'd' : x+= 20/zoom; aplyView(); break; case 'a' : x-= 20/zoom; aplyView(); break; case '1' : clock(!timer->Enabled); return; case '2' : backward(); return; default: return; } GLScene(); }
//--------------------------------------------------------------------- void __fastcall TGLForm2D::FormResize(TObject *Sender) { //se actualiza puerto de vista y su radio if ((ClientWidth<=1)||(ClientHeight<=1)){ ClientWidth=400; ClientHeight=400; RatioViewPort=1.0; } else RatioViewPort= (float)ClientWidth/(float)ClientHeight; glViewport(0,0,ClientWidth,ClientHeight); // se actualiza el volumen de vista // para que su radio coincida con ratioViewPort GLfloat RatioVolVista=(xRight-xLeft)/(yTop-yBot); if (RatioVolVista>=RatioViewPort){ //Aumentamos yTop-yBot nuevoAlto = (xRight-xLeft)*ClientHeight/ClientWidth; centroY = (yBot+yTop)/2.0; yBot = centroY-(nuevoAlto/2.0); yTop = centroY+(nuevoAlto/2.0); } else{ //Aumentamos xRight-xLeft nuevoAncho = (yTop-yBot)*ClientWidth/ClientHeight; centroX = (xLeft+xRight)/2.0; xRight=centroX+(nuevoAncho/2.0); xLeft=centroX-(nuevoAncho/2.0); } glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(xLeft,xRight, yBot,yTop); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLScene(); }
void __fastcall TGLForm2D::Centrar1Click(TObject *Sender) { if (mEmbaldosado){ mEmbaldosado = false; glViewport(0,0,ClientWidth,ClientHeight); } GLfloat xR,yT; xR=((xLeft+xRight)/2.0)-((x1+x2+x3)/3.0); xRight=xRight-xR; xLeft=xLeft-xR; yT=((yBot+yTop)/2.0)-((y1+y2+y3)/3.0); yTop=yTop-yT; yBot=yBot-yT; glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(xLeft,xRight,yBot,yTop); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLScene(); }
//--------------------------------------------------------------------------- void __fastcall TGLForm2D::FormPaint(TObject *Sender) { GLScene(); }
void __fastcall TGLForm2D::SelectClick(TObject *Sender) { seleccionar = !seleccionar; sc->getArbol()->desSelec(); GLScene(); }
void __fastcall TGLForm2D::QuitarClick(TObject *Sender) { sc->getArbol()->desanidar(); GLScene(); }
void __fastcall TGLForm2D::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch(Key){ case(TECLA_E): cols = 0; while(!embaldosa && cols <= 0){ TForm* x = new TFormS(this,cols); x->Caption = "Introduce Columnas"; x->ShowModal(); } embaldosa = !embaldosa; if(!embaldosa) glViewport(0,0,ClientWidth,ClientHeight); break; case(KEY_LEFT): xLeft += 5; xRight += 5; centroX += 5; sc->set(xLeft,xRight,yTop,yBot); break; case(KEY_RIGHT): xLeft -= 5; xRight -= 5; centroX -= 5; sc->set(xLeft,xRight,yTop,yBot); break; case(KEY_UP): yTop -= 5; yBot -= 5; centroY -= 5; sc->set(xLeft,xRight,yTop,yBot); break; case(KEY_DOWN): yTop += 5; yBot += 5; centroY += 5; sc->set(xLeft,xRight,yTop,yBot); break; case(ZOOM_IN): nuevoAncho = (xRight-xLeft)/1.1; nuevoAlto = (yTop-yBot)/1.1; yBot = centroY-(nuevoAlto/2.0); yTop = centroY+(nuevoAlto/2.0); xRight = centroX+(nuevoAncho/2.0); xLeft = centroX-(nuevoAncho/2.0); sc->set(xLeft,xRight,yTop,yBot); break; case(ZOOM_OUT): nuevoAncho = (xRight-xLeft)*1.1; nuevoAlto = (yTop-yBot)*1.1; yBot = centroY-(nuevoAlto/2.0); yTop = centroY+(nuevoAlto/2.0); xRight = centroX+(nuevoAncho/2.0); xLeft = centroX-(nuevoAncho/2.0); sc->set(xLeft,xRight,yTop,yBot); break; } glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(xLeft,xRight, yBot,yTop); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLScene(); }