#include "BaseWin.h" #include "IGLoop.h" #include "Cmd.h" #include #include #include using namespace IGL; // Statische Member von IGLWin int IGLWin::winCount=0; IGLoop *IGLWin::IGLMain =NULL; // Konstruktor: Initialisierung des Basis-Fensters und ggf. der Event-Loop IGLWin::IGLWin ( uint W, uint H ){ // laeuft die Event-Loop schon? IGL_DEBUG("This = " << this << endl); IGL_DEBUG("wincount = " << winCount << endl); // falls dies das erste Fenster ist, muss die Event-Schleife hochgefahren // werden if(!winCount++) IGLMain = new IGLoop; PWin = new BaseWin(W,H); IGL_DEBUG("done" << endl); } // Destruktor IGLWin::~IGLWin (){ delete PWin; } // Redraw des Fensters void IGLWin::DrawWindow (){ PWin->redisplay(); } // Aktuelle Parameter auslesen // Fensterbreite unsigned int IGLWin::GetWidth() { return PWin->width; } // Fensterhoehe unsigned int IGLWin::GetHeight(){ return PWin->height; } // offen? bool IGLWin::IsOpen (){ return PWin->isOpen; } // Fenster manipulieren // ===== Fenster oeffnen, schliessen und loeschen ===== void IGLWin::OpenWindow () { PWin->sendToCmdQueue (new CmdWin(Opn),Exec); // warten, bis das Fenster tatsächlich geoeffnet ist while(!PWin->isOpen); } void IGLWin::CloseWindow () { PWin->sendToCmdQueue (new CmdWin(Cls),Exec); } void IGLWin::ClearWindow () { PWin->sendToCmdQueue (new CmdWin(Clr),Exec); } void IGLWin::ResizeWindow ( uint W, uint H ){ PWin->sendToCmdQueue (new CmdWin (Res, W, H), Exec);} // Globale Eigenschaften // Name void IGLWin::SetName ( const char Name[] ) { PWin->sendToDrawQueue (new CmdSetProp (WNam, 0, 0, 0, 0, 0, 0, 0, Name), Exec); } // Hintergrundfarbe void IGLWin::SetBackColor ( float R, float G, float B ) { PWin->sendToDrawQueue (new CmdSetProp (BCol, R, G, B), Exec); } // gepuffert etc.? void IGLWin::SetDrawingMode ( DrawMode Mode ) { PWin->sendToDrawQueue (new CmdSetProp (SDMod, 0, 0, 0, 0, 0, 0, Mode), Exec); } // Nur Drahtgitter? void IGLWin::SetWireMode ( bool Mode ) { PWin->sendToDrawQueue (new CmdSetProp (SWMod, 0, 0, 0, 0, 0, 0, Mode), Exec); } // Lokale Parameter setzen // Bildausschnitt void IGLWin::SetAxis ( float XMin, float XMax, float YMin, float YMax, float ZMin, float ZMax) { PWin->setAxis(XMin, XMax, YMin, YMax, ZMin, ZMax); } void IGLWin::SetColor ( float R, float G, float B ) { PWin->sendToDrawQueue (new CmdSetProp (Col, R, G, B)); } void IGLWin::SetPointSize ( float Size ) { PWin->sendToDrawQueue (new CmdSetProp (SPntS, Size)); } void IGLWin::SetMarkSize ( float Size ) { PWin->sendToDrawQueue (new CmdSetProp (SMarkS, Size)); } void IGLWin::SetLineWidth ( float Width ) { PWin->sendToDrawQueue (new CmdSetProp (SLineW, Width)); } // Zeichnen void IGLWin::Mark2D ( float X1, float Y1, int Mode ) { float *coord=new float[2]; coord[0]=X1; coord[1]=Y1; PWin->sendToDrawQueue (new CmdObj (-1, Mode, coord)); } void IGLWin::Point2D ( float X1, float Y1 ) { float *coord=new float[3]; coord[0]=X1; coord[1]=Y1; coord[2]=0; PWin->sendToDrawQueue (new CmdObj (Pnt, -1, coord)); } void IGLWin::Point3D ( float X1, float Y1, float Z1 ) { float *coord=new float[3]; coord[0]=X1; coord[1]=Y1; coord[2]=Z1; PWin->sendToDrawQueue (new CmdObj (Pnt, -1, coord)); } void IGLWin::Line2D ( float X1, float Y1, float X2, float Y2 ) { float *coord=new float[6]; coord[0]=X1; coord[1]=Y1; coord[2]=0; coord[3]=X2; coord[4]=Y2; coord[5]=0; PWin->sendToDrawQueue (new CmdObj (Line, -1, coord)); } void IGLWin::Line3D ( float X1, float Y1, float Z1, float X2, float Y2, float Z2 ) { float *coord=new float[6]; coord[0]=X1; coord[1]=Y1; coord[2]=Z1; coord[3]=X2; coord[4]=Y2; coord[5]=Z2; PWin->sendToDrawQueue (new CmdObj (Line, -1, coord)); } void IGLWin::Tri2D ( float X1, float Y1, float X2, float Y2, float X3, float Y3 ) { float *coord=new float[9]; coord[0]=X1; coord[1]=Y1; coord[2]=0; coord[3]=X2; coord[4]=Y2; coord[5]=0; coord[6]=X3; coord[7]=Y3; coord[8]=0; PWin->sendToDrawQueue (new CmdObj (TriFlat, -1, coord)); } void IGLWin::Tri3D ( float X1, float Y1, float Z1, float X2, float Y2, float Z2, float X3, float Y3, float Z3 ) { float *coord=new float[9]; coord[0]=X1; coord[1]=Y1; coord[2]=Z1; coord[3]=X2; coord[4]=Y2; coord[5]=Z2; coord[6]=X3; coord[7]=Y3; coord[8]=Z3; PWin->sendToDrawQueue (new CmdObj (Tri, -1, coord)); } void IGLWin::TriNorm3D ( float X1, float Y1, float Z1, float X1n, float Y1n, float Z1n, float X2, float Y2, float Z2, float X2n, float Y2n, float Z2n, float X3, float Y3, float Z3 , float X3n, float Y3n, float Z3n ) { float *coord=new float[9], *nrml=new float[9]; coord[0]=X1; coord[1]=Y1; coord[2]=Z1; coord[3]=X2; coord[4]=Y2; coord[5]=Z2; coord[6]=X3; coord[7]=Y3; coord[8]=Z3; nrml[0]=X1n; nrml[1]=Y1n; nrml[2]=Z1n; nrml[3]=X2n; nrml[4]=Y2n; nrml[5]=Z2n; nrml[6]=X3n; nrml[7]=Y3n; nrml[8]=Z3n; PWin->sendToDrawQueue (new CmdObj (Tri, -1, coord, nrml)); } void IGLWin::Rect2D ( float LUx, float LUy, float ROx, float ROy ) { float *coord=new float[4]; coord[0]=LUx; coord[1]=LUy; coord[2]=ROx; coord[3]=ROy; PWin->sendToDrawQueue (new CmdObj (Rect, -1, coord)); } void IGLWin::Quad3D ( float X1, float Y1, float Z1, float X2, float Y2, float Z2, float X3, float Y3, float Z3, float X4, float Y4, float Z4 ) { float *coord=new float[12]; coord[0]=X1; coord[1]=Y1; coord[2]=Z1; coord[3]=X2; coord[4]=Y2; coord[5]=Z2; coord[6]=X3; coord[7]=Y3; coord[8]=Z3; coord[9]=X4; coord[10]=Y4; coord[11]=Z4; PWin->sendToDrawQueue (new CmdObj (Quad, -1, coord)); } void IGLWin::QuadNorm3D ( float X1, float Y1, float Z1, float X1n, float Y1n, float Z1n, float X2, float Y2, float Z2, float X2n, float Y2n, float Z2n, float X3, float Y3, float Z3, float X3n, float Y3n, float Z3n, float X4, float Y4, float Z4 , float X4n, float Y4n, float Z4n ) { float *coord=new float[12], *nrml=new float[12]; coord[0]=X1; coord[1]=Y1; coord[2]=Z1; coord[3]=X2; coord[4]=Y2; coord[5]=Z2; coord[6]=X3; coord[7]=Y3; coord[8]=Z3; coord[9]=X4; coord[10]=Y4; coord[11]=Z4; nrml[0]=X1n; nrml[1]=Y1n; nrml[2]=Z1n; nrml[3]=X2n; nrml[4]=Y2n; nrml[5]=Z2n; nrml[6]=X3n; nrml[7]=Y3n; nrml[8]=Z3n; nrml[9]=X4n; nrml[10]=Y4n; nrml[11]=Z4n; PWin->sendToDrawQueue (new CmdObj (Quad, -1, coord, nrml)); } /* // Pixmaps laden und schreiben void IGLWin::LoadImage ( const IGLPixmap &Pix ){} IGLPixmap IGLWin::DumpImage ( uint W, uint H, bool Clr, bool Scrn ){ } int main(int argc, char** argv){ IGLWin a(100,200); IGLWin b(120,200); a.OpenWindow(); a.SetColor(IGL_White); a.Line2D(0,0,1,1); b.Tri2D(-0.5,-0.5, 0.5, -0.5, -0.5, 0.5); b.OpenWindow(); new IGLWin(130,200); new IGLWin(140,200); new IGLWin(150,200); while(true); } */