#include "rs_solid.h"
-#include "rs_graphicview.h"
-#include "paintintf.h"
+#include "graphicview.h"
+#include "paintinterface.h"
/**
* Default constructor.
*/
-RS_Solid::RS_Solid(RS_EntityContainer * parent, const RS_SolidData& d):
+RS_Solid::RS_Solid(RS_EntityContainer * parent, const RS_SolidData & d):
RS_AtomicEntity(parent), data(d)
{
calculateBorders();
}
+/*virtual*/ RS_Entity * RS_Solid::clone()
+{
+ RS_Solid * s = new RS_Solid(*this);
+ s->initId();
+ return s;
+}
+
+/** @return RS_ENTITY_POINT */
+/*virtual*/ RS2::EntityType RS_Solid::rtti() const
+{
+ return RS2::EntitySolid;
+}
+
+/**
+ * @return Start point of the entity.
+ */
+/*virtual*/ Vector RS_Solid::getStartpoint() const
+{
+ return Vector(false);
+}
+
+/**
+ * @return End point of the entity.
+ */
+/*virtual*/ Vector RS_Solid::getEndpoint() const
+{
+ return Vector(false);
+}
+
+/** @return Copy of data that defines the point. */
+RS_SolidData RS_Solid::getData() const
+{
+ return data;
+}
+
+/** @return true if this is a triangle. */
+bool RS_Solid::isTriangle()
+{
+ return !data.corner[3].valid;
+}
+
/**
* @return Corner number 'num'.
*/
Vector RS_Solid::getCorner(int num)
{
if (num >= 0 && num < 4)
- {
return data.corner[num];
- }
else
{
RS_DEBUG->print("Illegal corner requested from Solid", RS_Debug::D_WARNING);
void RS_Solid::shapeArrow(const Vector & point, double angle, double arrowSize)
{
double cosv1, sinv1, cosv2, sinv2;
- double arrowSide = arrowSize/cos(0.165);
+ double arrowSide = arrowSize / cos(0.165);
- cosv1 = cos(angle+0.165)*arrowSide;
- sinv1 = sin(angle+0.165)*arrowSide;
- cosv2 = cos(angle-0.165)*arrowSide;
- sinv2 = sin(angle-0.165)*arrowSide;
+ cosv1 = cos(angle + 0.165) * arrowSide;
+ sinv1 = sin(angle + 0.165) * arrowSide;
+ cosv2 = cos(angle - 0.165) * arrowSide;
+ sinv2 = sin(angle - 0.165) * arrowSide;
data.corner[0] = point;
data.corner[1] = Vector(point.x - cosv1, point.y - sinv1);
double curDist;
Vector ret;
- for (int i=0; i<4; ++i)
+ for(int i=0; i<4; ++i)
{
if (data.corner[i].valid)
{
}
}
- if (dist != NULL)
+ if (dist)
*dist = minDist;
return ret;
/**
* @todo Implement this.
*/
-Vector RS_Solid::getNearestPointOnEntity(const Vector & /*coord*/,
- bool /*onEntity*/, double * /*dist*/, RS_Entity ** /*entity*/)
+Vector RS_Solid::getNearestPointOnEntity(const Vector & /*coord*/, bool /*onEntity*/,
+ double * /*dist*/, RS_Entity ** /*entity*/)
{
Vector ret(false);
return ret;
Vector RS_Solid::getNearestCenter(const Vector & /*coord*/, double * dist)
{
- if (dist != NULL)
+ if (dist)
*dist = RS_MAXDOUBLE;
return Vector(false);
Vector RS_Solid::getNearestMiddle(const Vector & /*coord*/, double * dist)
{
- if (dist != NULL)
- *dist = RS_MAXDOUBLE;
+ if (dist)
+ *dist = RS_MAXDOUBLE;
return Vector(false);
}
Vector RS_Solid::getNearestDist(double /*distance*/, const Vector & /*coord*/, double * dist)
{
- if (dist != NULL)
- *dist = RS_MAXDOUBLE;
+ if (dist)
+ *dist = RS_MAXDOUBLE;
return Vector(false);
}
calculateBorders();
}
-//void RS_Solid::draw(RS_Painter* painter, RS_GraphicView* view, double /*patternOffset*/)
-void RS_Solid::draw(PaintInterface * painter, RS_GraphicView * view, double /*patternOffset*/)
+void RS_Solid::draw(PaintInterface * painter, GraphicView * view, double /*patternOffset*/)
{
- if (painter == NULL || view == NULL)
+ if (!painter || !view)
return;
RS_SolidData d = getData();