sources:
attribute.cpp (1.1k)
attribute.h (1.5k)
cgapplication.cpp (4.1k)
cgapplication.h (4.8k)
cgrobot.cpp (7.9k)
cgrobot.h (716 bytes)
node.cpp (2.4k)
node.h (2.3k)
shape.cpp (3.2k)
shape.h (966 bytes)
transformation.cpp (2.9k)
transformation.h (2.4k)
vector.cpp (1.4k)
vector.h (5.3k)


website:
more info here


screenshot:
studies/grafik/Computergrafik-Code8/node.h
download file

  1 // Computergraphik I
  2 // Prof. Dr. Juergen Doellner
  3 // Sommersemester 2001
  4 //
  5 // Rahmenprogramm fuer Aufgabenzettel 8
  6
  7 #ifndef NODE_H
  8 #define NODE_H
  9
 10 #include "attribute.h"
 11 #include "shape.h"
 12
 13 //
 14 // Konstanten
 15 //
 16
 17 // Maximale Anzahl an Attributen pro GroupNode
 18 static const unsigned int MAX_ATTRIBUTES  = 20;
 19
 20 // Maximale Anzahl an Kind-Knoten pro GroupNode
 21 static const unsigned int MAX_CHILD_NODES = 20;
 22
 23 //
 24 // Node
 25 //
 26
 27 class Node {
 28 public:
 29     // Wird zur Traversierung des Szenengraphen
 30     // aufgerufen.
 31     virtual void traverse() = 0;
 32 };
 33
 34 //
 35 // LeafNode
 36 //
 37
 38 class LeafNode : public Node {
 39 public:
 40     LeafNode(Shape* shape);
 41     // Jeder Blatt-Knoten enthaelt genau ein Shape,
 42     // welches bei der Traversierung des Szenengraphen
 43     // gerendert wird (Shape::render()).
 44
 45     virtual void traverse();
 46
 47 private:
 48     Shape* shape_;
 49 };
 50
 51 //
 52 // GroupNode
 53 //
 54
 55 class GroupNode : public Node {
 56 public:
 57     GroupNode();
 58
 59     static GroupNode* GroupNode::shareNode(Node* nodeObject, int nCount,
 60                       Attribute* attrTransform1 = NULL, Attribute* attrTransform2 = NULL)
;
 61
 62     // Jeder Gruppen-Knoten kann maximal MAX_ATTRIBUTES-viele
 63     // Attribute und MAX_CHILD_NODES-viele Kind-Knoten aufnehmen.
 64
 65     // Mit diesen Methoden koennen die Attribute ausgelesen und
 66     // gesetzt werden. Um ein Attribut zu entfernen schreibt man
 67     // an die entsprechende Stelle einen NULL-Zeiger.
 68     virtual Attribute* getAttribute(unsigned int index) const;
 69     virtual void setAttribute(unsigned int index, Attribute* attribute);
 70
 71     // Mit diesen Methoden koennen die Kind-Knoten ausgelesen und
 72     // gesetzt werden. Um einen Kind-Knoten zu entfernen schreibt man
 73     // an die entsprechende Stelle einen NULL-Zeiger.
 74     virtual Node* getChildNode(unsigned int index) const;
 75     virtual void setChildNode(unsigned int index, Node* child);
 76
 77     // Wird ein Gruppen-Knoten traversiert, so werden zuerst alle
 78     // enthaltenen Attribute in der angegebenen Reihenfolge gesetzt
 79     // (Attribute::set()). Dann werden alle Kind-Knoten traversiert
 80     // (Node::traverse()). Und anschliessend werden alle Attribute
 81     // wieder in umgekehrter Reihenfolge zurueckgenommen
 82     // (Attribute::unset()).
 83     virtual void traverse();
 84
 85 private:
 86     Attribute* attributes_[MAX_ATTRIBUTES];
 87     Node*      children_[MAX_CHILD_NODES];
 88 };
 89
 90 #endif // NODE_H
 91
 92