#pragma once #include #include #include #include #include class Point; class Shape { public: virtual Point nextVector(double drawingProgress) = 0; virtual void scale(double x, double y, double z) = 0; virtual void translate(double x, double y, double z) = 0; virtual double length() = 0; virtual std::unique_ptr clone() = 0; virtual std::string type() = 0; static double totalLength(std::vector>&); static void normalize(std::vector>&, double, double); static void normalize(std::vector>&); static double height(std::vector>&); static double width(std::vector>&); static Point maxVector(std::vector>&); static void removeOutOfBounds(std::vector>&); const double INVALID_LENGTH = -1.0; double len = INVALID_LENGTH; };