void Transform::rotateLocal(const float &amount, const glm::vec3 &axis)
	{
		rotation = rotation * glm::angleAxis(amount, axis);

		// Recalculate local axis
		calculateAxis();
	}
void DRW_Trace::applyExtrusion(){
    if (haveExtrusion) {
        calculateAxis(extPoint);
        extrudePoint(extPoint, &basePoint);
        extrudePoint(extPoint, &secPoint);
        extrudePoint(extPoint, &thirdPoint);
        extrudePoint(extPoint, &fourPoint);
    }
}
void DRW_LWPolyline::applyExtrusion(){
    if (haveExtrusion) {
        calculateAxis(extPoint);
        for (unsigned int i=0; i<vertlist.size(); i++) {
            DRW_Vertex2D *vert = vertlist.at(i);
            DRW_Coord v(vert->x, vert->y, elevation);
            extrudePoint(extPoint, &v);
            vert->x = v.x;
            vert->y = v.y;
        }
    }
}
	void Transform::rotateGlobal(const float &amount, const glm::vec3 &axis)
	{
		glm::quat rotationQuat = glm::normalize(glm::angleAxis(amount, axis));
		glm::mat3 rotationMatrix = glm::mat3_cast(rotationQuat);

		// Rotate euler angles
		glm::quat q = rotationQuat;
		eulerAngles.x += RadToDegs(atan2(2.0f*(q.y*q.z + q.w*q.x), q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z));
		eulerAngles.y += RadToDegs(asin(-2.0f*(q.x*q.z - q.w*q.y)));
		eulerAngles.z += RadToDegs(atan2(2.0f*(q.x*q.y + q.w*q.z), q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z));

		// Rotate stored orientation
		rotation = rotationQuat * rotation;

		// Recalculate local axis
		calculateAxis();
	}
void DRW_Circle::applyExtrusion(){
    if (haveExtrusion) {
        calculateAxis(extPoint);
        extrudePoint(extPoint, &basePoint);
    }
}