object.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifndef PACKET_H
  2. #define PACKET_H
  3. #include <QString>
  4. #include <QPolygon>
  5. #include "frametree.h"
  6. #ifndef Global
  7. #define Global extern
  8. #endif
  9. Global int numObjects;
  10. /*
  11. * Ein Objekt, welches in der Bildsequenz auf beliebig vielen Bildern auftreten kann
  12. */
  13. class Object
  14. {
  15. private:
  16. QString id; // Die Objekt ID
  17. int classId; // Die ID der Objekt Klasse
  18. public:
  19. Object( QString id, int classId );
  20. // Setzt die Objekt-ID
  21. void setId( QString id );
  22. // Gibt die Objekt-ID zurück
  23. QString getId() const;
  24. // Setzt die ID der Klasse
  25. int getClassId() const;
  26. // Gibt die ID der Klasse zurück
  27. void setClassId( int id );
  28. };
  29. // Vergleicht zwei Objekte anhand ihrer ID
  30. bool operator == (const Object &p1, const Object &p2);
  31. /*
  32. * Vorkommen eines Objektes auf einem Bild
  33. */
  34. class _ObjectPolygon : public FrameTreeNode
  35. {
  36. private:
  37. QString id; // Die Id des Objektes
  38. bool truncated; // 1, falls das Objekt abgeschnitten ist
  39. QList< QPolygon > polygon; // Eine Liste mit Polygonen des Objektes
  40. bool selected; // 1, falls das Objekt nicht versteckt ist
  41. int ref; // Reference Counter
  42. _ObjectPolygon( QString id, QPolygon po, bool truncated, int index, FrameTreeNode *parent );
  43. public:
  44. // Setzt die Objekt-ID
  45. void setId( QString id );
  46. // Legt fest, ob das Objekt versteckt ist (falls s = 0)
  47. void setSelected( bool s );
  48. // Entfernt alle Ecken in einer Region r. Gibt 0 zurück, fall das Objekt komplett entfernt werden soll
  49. bool removeVertices( QRect r );
  50. // Verschiebt den intex-ten Vertex aus dem pIndex-ten Polygon auf Position newPos.
  51. // max: Die maximale Größe des Bildes. Falls newPos außerhalb des Bildes liegt, wird automatisch der nächste Punkt im Bild genommen.
  52. void moveVertex( int index, QPoint newPos, QSize max, int pIndex );
  53. // Fügt an Slette index im pIndexten Polygon den Eckpunkt v ein
  54. void insertVertex( int index, QPoint v, int pIndex );
  55. // Spaltet das pIndexte Polygon indem zwischen dem begin-ten Eckpunkt und dem end-ten Eckpunkt geschnitten wird.
  56. // Gibt das neu entstandene Polygon zurück (eine hälfte des alten, die aus diesem entfernt wurde)
  57. QPolygon split( int begin, int end, int pIndex );
  58. // Setzt den Truncated Flag
  59. void setTruncated( bool truncated );
  60. // Gibt 1 zurück, wenn das Objekt nicht Versteckt ist
  61. bool isSelected() const;
  62. // Gibt die Bounding Box zurück
  63. QRect getBoundingBox() const;
  64. // Gibt this zurück
  65. void *getNodeObject() const override;
  66. // Gibt 1 zurück, falls Truncated gesetzt wurde
  67. bool isTruncated() const;
  68. // Gibt die Objekt-ID zurück
  69. QString getId() const;
  70. // Gibt eine Liste mit den Polygonen zurück
  71. QList< QPolygon > &getPolygonList();
  72. friend class ObjectPolygon;
  73. };
  74. // Ein intelegenter Zeiger auf ein _ObjektPolygon Objekt, der reference Counting verwendet
  75. class ObjectPolygon
  76. {
  77. private:
  78. _ObjectPolygon *ptr; // Ein Zeiger auf das verwaltete Objekt
  79. public:
  80. // Erstellt ein auf Null zeigendes ObjektPolygon
  81. ObjectPolygon();
  82. // Erzeugt ein neues Objekt Polygon, welches auf ein bestimmtes Objekt zeigt
  83. ObjectPolygon( _ObjectPolygon *ptr );
  84. // Erzeugt ein neues Objekt Polygon mit neuem Objekt
  85. // id: Die Objekt ID
  86. // po: Das Polygon
  87. // truncated: 1, falls das Objekt abgeschnitten ist
  88. // parent: Der Elternknoten im Baum der Sequenz (das Bild zu dem das Objekt gehört)
  89. ObjectPolygon( QString id, QPolygon po, bool truncated, int index, FrameTreeNode *parent );
  90. // Copy Constructor
  91. ObjectPolygon( const ObjectPolygon &op );
  92. ~ObjectPolygon();
  93. // Operator um auf das unterliegende _ObjectPolygon zuzugreifen
  94. _ObjectPolygon *operator->() const;
  95. // Gibt 1 zurück, falls auf das gleiche Objekt verwiesen wird
  96. bool operator==( const ObjectPolygon &op ) const;
  97. // Gibt 1 zurück, falls nicht auf das gleiche Objekt verwiesen wird
  98. bool operator!=( const ObjectPolygon &op ) const;
  99. // Setzt den Zeiger auf das _ObjectPolygon Objekt
  100. bool operator=( const ObjectPolygon &op );
  101. // Gibt 1 zurück, falls der Zeiger nicht inizialisiert wurde
  102. bool isNull() const;
  103. };
  104. #endif // PACKET_H