src/linetypes/object.h

Fri, 06 Mar 2020 16:08:45 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Fri, 06 Mar 2020 16:08:45 +0200
changeset 68
ddb07bb6840c
parent 35
98906a94732f
child 73
97df974b5ed5
permissions
-rw-r--r--

default to XZ

#pragma once
#include <QPointF>
#include <QString>
#include <QStringView>
#include "main.h"
#include "colors.h"
#include "gl/common.h"

namespace ldraw
{
	struct GetPolygonsContext;
	enum class Property;
	class Object;
	class ColoredObject;
	class Empty;
}

class DocumentManager;

struct ldraw::GetPolygonsContext
{
	::DocumentManager* documents;
};

/**
 * @brief Different properties that can be queried with getProperty
 */
enum class ldraw::Property
{
	Color, // Color of the object
	Text, // Text contained in a comment
	Point1, // First vertex in a polygon or edge line
	Point2, // Second vertex in a polygon or edge line
	Point3, // Third vertex in a polygon
	Point4, // Fourth vertex in a quadrilateral
	ControlPoint1, // First control point in a conditional edge line
	ControlPoint2, // Second control point in a conditional edge line
	Transformation, // 4x4 transformation matrix of a subfile reference
	ReferenceName, // Subfile reference name
	IsInverted, // Whether or not the object has been inverted with BFC INVERTNEXT
	ErrorMessage // For error lines, why parsing failed
};

class ldraw::Object
{
public:
	enum class SetPropertyResult
	{
		Success = 0,
		PropertyNotHandled,
		InvalidValue
	};
	Object();
	Object(const Object&) = delete;
	virtual ~Object();
	const Id id;
	//virtual void toString(QTextStream &out) = 0;
	virtual bool hasColor() const;
	virtual QVariant getProperty(Property id) const;
	virtual SetPropertyResult setProperty(Property id, const QVariant& value);
	virtual QString textRepresentation() const = 0;
	virtual QBrush textRepresentationForeground() const;
	virtual QBrush textRepresentationBackground() const;
	virtual QFont textRepresentationFont() const;
	virtual void getPolygons(std::vector<gl::Polygon>& polygons, GetPolygonsContext* context) const;
	virtual void invert() {}
};

class ldraw::ColoredObject : public Object
{
public:
	ColoredObject(const Color colorIndex = ldraw::mainColor);
	bool hasColor() const override final;
	QVariant getProperty(Property id) const override;
	SetPropertyResult setProperty(Property id, const QVariant& value) override;
protected:
	Color colorIndex = ldraw::mainColor;
};

/**
 * @brief Represents an empty line.
 */
class ldraw::Empty : public Object
{
	QString textRepresentation() const override;
};

mercurial