QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RTriangle.h
Go to the documentation of this file.
1
20#ifndef RTRIANGLE_H
21#define RTRIANGLE_H
22
23#include "../core_global.h"
24
25#include "RExplodable.h"
26#include "RShape.h"
27#include "RVector.h"
28//#include "RLine.h"
29#include "RPolyline.h"
30
31//class RPolyline;
32class RBox;
33class RLine;
34
35#ifndef RDEFAULT_MIN1
36#define RDEFAULT_MIN1 -1
37#endif
38
39
50public:
51 RTriangle();
52 RTriangle(const RVector& p1, const RVector& p2, const RVector& p3);
53 virtual ~RTriangle();
54
55 virtual RShape::Type getShapeType() const {
56 return Triangle;
57 }
58
59 virtual QSharedPointer<RShape> clone() const {
60 return QSharedPointer<RShape>(new RTriangle(*this));
61 }
62
63 QSharedPointer<RTriangle> cloneToTriangle() const {
64 return QSharedPointer<RTriangle>(new RTriangle(*this));
65 }
66
67 virtual void setZ(double z);
68
69 virtual QList<RVector> getVectorProperties() const;
70 RPolyline getPolyline() const;
71 RS::Orientation getOrientation() const;
72 virtual bool reverse();
73
74 static RTriangle createArrow(const RVector& position, double direction, double size);
75
76 virtual RBox getBoundingBox() const;
77 virtual double getLength() const;
78 double getArea() const;
79 RVector getCorner(int i) const;
80 void setCorner(int i, const RVector& p);
81 void setCorners(const RVector& c1, const RVector& c2, const RVector& c3);
82
83 virtual QList<RVector> getEndPoints() const;
84 virtual QList<RVector> getMiddlePoints() const;
85 virtual QList<RVector> getCenterPoints() const;
86 virtual QList<RVector> getPointsWithDistanceToEnd(
87 double distance, int from = RS::FromAny) const;
88 virtual QList<RVector> getPointCloud(double segmentLength) const;
89
90 virtual double getDistanceTo(const RVector& point, bool limited = true, double strictRange = RMAXDOUBLE) const;
91 virtual RVector getVectorTo(const RVector& point, bool limited = true, double strictRange = RMAXDOUBLE) const;
92 //virtual RVector getVectorTo(const RLine& line, bool limited = true) const;
93
94 virtual RVector getNormal() const;
95
96// virtual bool intersectsWith(const RShape& other, bool limited) const;
97
98// virtual QList<RVector> getIntersectionPoints(const RShape& other,
99// bool limited) const;
100
101 bool isPointInTriangle(const RVector& p, bool treatAsQuadrant = false) const;
102 bool isPointInQuadrant(const RVector& p) const;
103
104 double getD() const;
105
106 virtual QList<QSharedPointer<RShape> > getExploded(int segments = RDEFAULT_MIN1) const;
107
108 virtual bool move(const RVector& offset) {
109 corner[0].move(offset);
110 corner[1].move(offset);
111 corner[2].move(offset);
112 return true;
113 }
114 virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR) {
115 corner[0].rotate(rotation, center);
116 corner[1].rotate(rotation, center);
117 corner[2].rotate(rotation, center);
118 return true;
119 }
120 virtual bool scale(const RVector& scaleFactors, const RVector& center = RDEFAULT_RVECTOR) {
121 corner[0].scale(scaleFactors, center);
122 corner[1].scale(scaleFactors, center);
123 corner[2].scale(scaleFactors, center);
124 return true;
125 }
126 virtual bool mirror(const RLine& axis) {
127 corner[0].mirror(axis);
128 corner[1].mirror(axis);
129 corner[2].mirror(axis);
130 return true;
131 }
132 virtual bool flipHorizontal() {
133 corner[0].flipHorizontal();
134 corner[1].flipHorizontal();
135 corner[2].flipHorizontal();
136 return true;
137 }
138 virtual bool flipVertical() {
139 corner[0].flipVertical();
140 corner[1].flipVertical();
141 corner[2].flipVertical();
142 return true;
143 }
144
145 QSharedPointer<RShape> getTransformed(const QTransform& transform) const {
146 return QSharedPointer<RShape>(
147 new RTriangle(
148 corner[0].getTransformed2D(transform),
149 corner[1].getTransformed2D(transform),
150 corner[2].getTransformed2D(transform)
151 )
152 );
153 }
154
155#if QT_VERSION >= 0x060000
160 RTriangle copy() const {
161 return *this;
162 }
163#endif
164
165protected:
166 virtual void print(QDebug dbg) const;
167
168public:
169 RVector corner[3];
170};
171
172Q_DECLARE_METATYPE(QList<RTriangle>)
176Q_DECLARE_METATYPE(QSharedPointer<RTriangle>)
177Q_DECLARE_METATYPE(QSharedPointer<RTriangle>*)
178
179#endif
#define RDEFAULT_MIN1
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RExplodable.h:30
Q_DECLARE_METATYPE(RMath *)
#define RMAXDOUBLE
Definition RMath.h:66
#define RDEFAULT_RVECTOR
Definition RVector.h:38
int i
Copyright (c) 2011-2018 by Andrew Mustun.
Definition autostart.js:32
Represents a box e.g.
Definition RBox.h:46
Interface for explodable shape classes.
Definition RExplodable.h:40
virtual QList< QSharedPointer< RShape > > getExploded(int segments=RDEFAULT_MIN1) const =0
Low-level mathematical representation of a line.
Definition RLine.h:41
Low-level mathematical representation of an open polyline or closed polyline (= polygon).
Definition RPolyline.h:50
Orientation
Definition RS.h:700
@ FromAny
Start or end.
Definition RS.h:374
Interface for geometrical shape classes.
Definition RShape.h:72
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const =0
virtual QList< RVector > getPointCloud(double segmentLength) const =0
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny) const =0
Type
Definition RShape.h:74
@ Triangle
Definition RShape.h:83
virtual QList< RVector > getCenterPoints() const =0
virtual void print(QDebug dbg) const
Definition RShape.cpp:1760
virtual QList< RVector > getEndPoints() const =0
virtual QList< RVector > getVectorProperties() const
Definition RShape.h:170
virtual QList< RVector > getMiddlePoints() const =0
virtual bool reverse()
Definition RShape.h:299
virtual void setZ(double z)=0
virtual RBox getBoundingBox() const =0
virtual double getDistanceTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition RShape.cpp:57
virtual double getLength() const =0
Low-level mathematical representation of a triangle.
Definition RTriangle.h:49
virtual bool mirror(const RLine &axis)
Definition RTriangle.h:126
virtual QSharedPointer< RShape > clone() const
Definition RTriangle.h:59
QSharedPointer< RTriangle > cloneToTriangle() const
Definition RTriangle.h:63
virtual RShape::Type getShapeType() const
Definition RTriangle.h:55
virtual bool flipHorizontal()
Definition RTriangle.h:132
virtual bool flipVertical()
Definition RTriangle.h:138
QSharedPointer< RShape > getTransformed(const QTransform &transform) const
Definition RTriangle.h:145
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition RTriangle.h:120
virtual bool move(const RVector &offset)
Definition RTriangle.h:108
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition RTriangle.h:114
Represents a 3d vector (x/y/z).
Definition RVector.h:47
#define QCADCORE_EXPORT
Definition core_global.h:10