Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add functionality for drawing polygons

  • Loading branch information...
commit 9b60a894ded7fe926d25f0b4d6388c4926c00b10 1 parent 6a4bdbd
@markusj authored
Showing with 62 additions and 0 deletions.
  1. +40 −0 simple-drawer/polygon.cpp
  2. +22 −0 simple-drawer/polygon.h
View
40 simple-drawer/polygon.cpp
@@ -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
@Koios
Koios added a note

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

@markusj Owner
markusj added a note

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ }
+
+ RelativeCoordinate * const result = new RelativeCoordinate[numCorners + 1];
@Koios
Koios added a note

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 -.-)

@markusj Owner
markusj added a note

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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+
+ for (unsigned int i = 0; i < numCorners; i++) {
+ result[i] = corners[i];
+ }
+
+ result[numCorners] = corners[0];
+
+ return result;
+ }
+
+} /* namespace bmp */
View
22 simple-drawer/polygon.h
@@ -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_ */
Please sign in to comment.
Something went wrong with that request. Please try again.