Permalink
Browse files

Add functionality for drawing polygons

  • Loading branch information...
markusj committed May 20, 2012
1 parent 6a4bdbd commit 9b60a894ded7fe926d25f0b4d6388c4926c00b10
Showing with 62 additions and 0 deletions.
  1. +40 −0 simple-drawer/polygon.cpp
  2. +22 −0 simple-drawer/polygon.h
View
@@ -0,0 +1,40 @@
+/*
+ * polygon.cpp
+ *
+ * Created on: 20.05.2012
+ * Author: markus
+ */
+
+#include "polygon.h"
+
+namespace bmp {
+
+ static RelativeCoordinate * copyToPolyline(RelativeCoordinate * const corners, const unsigned int numCorners);
+
+ polygon::polygon(RelativeCoordinate * const corners, const unsigned int numCorners) :
+ polyline(copyToPolyline(corners, numCorners), (numCorners > 0) ? numCorners + 1 : 0) {
+
+ // assert (numCorners == 0) || (numCorners > 0) && (corners != null))
+ }
+
+ polygon::~polygon() {
+ delete[] coords;
+ }
+
+ static RelativeCoordinate * copyToPolyline(RelativeCoordinate * const corners, const unsigned int numCorners) {
+ if (numCorners == 0) {
+ return NULL; // corner case, haha

This comment has been minimized.

Show comment Hide comment
@Koios

Koios May 22, 2012

dasselbe nochmal: bitte einen header für NULL einbinden. danke. :P

@Koios

Koios May 22, 2012

dasselbe nochmal: bitte einen header für NULL einbinden. danke. :P

This comment has been minimized.

Show comment Hide comment
@markusj

markusj May 22, 2012

Owner

Wieso, geht doch auch ohne? :P Ich war überrascht, dass mir der Compiler das hat durchgehen lassen und habe dann auf das cstddef verzichtet.

@markusj

markusj May 22, 2012

Owner

Wieso, geht doch auch ohne? :P Ich war überrascht, dass mir der Compiler das hat durchgehen lassen und habe dann auf das cstddef verzichtet.

+ }
+
+ RelativeCoordinate * const result = new RelativeCoordinate[numCorners + 1];

This comment has been minimized.

Show comment Hide comment
@Koios

Koios May 22, 2012

Finde ich unschön wg. ownership. Hier ist das alles nur "intern", also ok. Tendenziell hätte ich aber eher das new in der polygon-Klasse vollzogen (dann müsste man aber einen pointer mehr zu copyToPolyline übergeben, und stände vor der Entscheidung, dafür auch noch checks zu machen -.-)

@Koios

Koios May 22, 2012

Finde ich unschön wg. ownership. Hier ist das alles nur "intern", also ok. Tendenziell hätte ich aber eher das new in der polygon-Klasse vollzogen (dann müsste man aber einen pointer mehr zu copyToPolyline übergeben, und stände vor der Entscheidung, dafür auch noch checks zu machen -.-)

This comment has been minimized.

Show comment Hide comment
@markusj

markusj May 22, 2012

Owner

Das IST die Polygon-Klasse. Ich habe die Funktion nur static gemacht und nicht in das Interface eingetragen (information hiding). Tatsächlich ist der Umweg über diese Funktion nur dem verkrüppelten Konstruktorsystem von C++ geschuldet, in Java darf man const members im Konstruktor beschreiben.
Irgendwie ist das PITA. Will mans schön machen, muss man das const wegnehmen. Const wegnehmen ist aber nicht schön, also ist das Ergebnis nicht schön, egal wie mans macht ist es nicht schön. Schlussfolgerung: C++ ist nicht schön. Finde den Fehler. (Hint: ein C mit Postinkrement)

@markusj

markusj May 22, 2012

Owner

Das IST die Polygon-Klasse. Ich habe die Funktion nur static gemacht und nicht in das Interface eingetragen (information hiding). Tatsächlich ist der Umweg über diese Funktion nur dem verkrüppelten Konstruktorsystem von C++ geschuldet, in Java darf man const members im Konstruktor beschreiben.
Irgendwie ist das PITA. Will mans schön machen, muss man das const wegnehmen. Const wegnehmen ist aber nicht schön, also ist das Ergebnis nicht schön, egal wie mans macht ist es nicht schön. Schlussfolgerung: C++ ist nicht schön. Finde den Fehler. (Hint: ein C mit Postinkrement)

+
+ for (unsigned int i = 0; i < numCorners; i++) {
+ result[i] = corners[i];
+ }
+
+ result[numCorners] = corners[0];
+
+ return result;
+ }
+
+} /* namespace bmp */
View
@@ -0,0 +1,22 @@
+/*
+ * polygon.h
+ *
+ * Created on: 20.05.2012
+ * Author: markus
+ */
+
+#ifndef POLYGON_H_
+#define POLYGON_H_
+
+#include "polyline.h"
+
+namespace bmp {
+
+ class polygon : public bmp::polyline {
+ public:
+ polygon(RelativeCoordinate * const corners, const unsigned int numCorners);
+ virtual ~polygon();
+ };
+
+} /* namespace bmp */
+#endif /* POLYGON_H_ */

0 comments on commit 9b60a89

Please sign in to comment.