// // Stuhl.cpp // // by Stephan Siemen Sep. 2002 // // compile with: // g++ Stuhl.cpp -o Stuhl -lCoin -lSoQt -I$QTDIR/include // // Headerdateien von SoQt #include #include // Headerdateien von Coin #include #include #include #include #include #include int main(int argc, char ** argv) { // Initialisierung der SoQt Bibliothek // Der Rueckgabewert erzeugt ein Qt Fenster QWidget *fenster = SoQt::init("test"); // Erstellen der Wurzel des "scene graphs" SoSeparator *stuhl = new SoSeparator; // setzt den Referenzzaehler hoeher // damit der Graph nicht geloescht wird stuhl->ref(); // Definition des Sitzes SoSeparator *sitz = new SoSeparator; // Setzen der Farbe - in RGB - hier: gelb SoBaseColor *sitzfarbe = new SoBaseColor; sitzfarbe->rgb = SbColor(1, 1, 0); sitz->addChild(sitzfarbe); // Erzeugen der Sitzflaeche SoCube *sitzflaeche = new SoCube(); sitzflaeche->width.setValue(20); sitzflaeche->depth.setValue(20); sitz->addChild(sitzflaeche); // der Sitz wird zur Szene hinzugefuegt stuhl->addChild(sitz); // Definition der Vorderbeine SoSeparator *vorderbeine = new SoSeparator; // Definition eines Beines SoSeparator *bein = new SoSeparator; // Setzen der Farbe - in RGB - hier: rot SoBaseColor *beinfarbe = new SoBaseColor; beinfarbe->rgb = SbColor(1, 0, 0); bein->addChild(beinfarbe); // Erzeugen der vorderen Beine SoCylinder *stab = new SoCylinder(); stab->height.setValue(20); bein->addChild(stab); // Beschreibung des vorderen linken Beines SoSeparator *vorderes_linkesbein = new SoSeparator; // verschiben des Beines in die richtige Position SoTranslation *verschiebung = new SoTranslation; verschiebung->translation.setValue(10,-8,-10); vorderes_linkesbein->addChild(verschiebung); // Geometry des Beines (wie definiert in "bein" oben) vorderes_linkesbein->addChild(bein); // Bein wird an die Vorderbeine angehaengt vorderbeine->addChild(vorderes_linkesbein); SoSeparator *vorderes_rechtesbein = new SoSeparator; SoTranslation *verschiebung2 = new SoTranslation; verschiebung2->translation.setValue(-10,-8,-10); vorderes_rechtesbein->addChild(verschiebung2); vorderes_rechtesbein->addChild(bein); vorderbeine->addChild(vorderes_rechtesbein); // Vordere Beine werden an die Szene angehaengt stuhl->addChild(vorderbeine); // Definition der Hinterbeine SoSeparator *hinterbeine = new SoSeparator; SoSeparator *bein2 = new SoSeparator; // Setzen der Farbe (wie definiert in "beinfarbe" oben) bein2->addChild(beinfarbe); // Beschreibung der Geometrie der hinteren Beine SoCylinder *stab2 = new SoCylinder(); stab2->height.setValue(35); bein2->addChild(stab2); SoSeparator *hinteres_linkesbein = new SoSeparator; SoTranslation *verschiebung3 = new SoTranslation; verschiebung3->translation.setValue(10,-0.5,10); hinteres_linkesbein->addChild(verschiebung3); hinteres_linkesbein->addChild(bein2); hinterbeine->addChild(hinteres_linkesbein); SoSeparator *hinteres_rechtesbein = new SoSeparator; SoTranslation *verschiebung4 = new SoTranslation; verschiebung4->translation.setValue(-10,-0.5,10); hinteres_rechtesbein->addChild(verschiebung4); hinteres_rechtesbein->addChild(bein2); hinterbeine->addChild(hinteres_rechtesbein); // Hintere Beine werden an die Szene angehaengt stuhl->addChild(hinterbeine); // Erzeugen der Lehne SoSeparator *lehne = new SoSeparator; // Verschiebung der Koordinaten wohin die Lehne soll SoTranslation *verschiebung5 = new SoTranslation; verschiebung5->translation.setValue(0,10,10); lehne->addChild(verschiebung5); // Rotation der Rueckenlehne // um 90 Grad (= 1.5708 rad) um die X-achse SoRotationXYZ *rotation = new SoRotationXYZ; rotation->axis.setValue("X"); rotation->angle.setValue(1.5708); lehne->addChild(rotation); // Setzen der Farbe - in RGB - hier: gruen SoBaseColor *lehnfarbe = new SoBaseColor; lehnfarbe->rgb = SbColor(0, 1, 0); lehne->addChild(lehnfarbe); // Beschreibung der Geometrie der Sitzlehne SoCube *sitzlehne = new SoCube(); sitzlehne->width.setValue(20); sitzlehne->depth.setValue(10); lehne->addChild(sitzlehne); // Die Lehne wird zur Szene hinzugefuegt stuhl->addChild(lehne); // Erzeugen des Betrachterfensters SoQtExaminerViewer *b = new SoQtExaminerViewer(fenster); // Setzen der Szene in dem Betrachter b->setSceneGraph(stuhl); // Anzeigen des Betrachters b->show(); // Start des Fensters SoQt::show(fenster); // Start der Ereignisschleife SoQt::mainLoop(); // Loeschen des Betrachters und der Referenz zur Szene delete b; stuhl->unref(); return 0; }