QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RSolidData.h
Go to the documentation of this file.
1
20#ifndef RSOLIDDATA_H
21#define RSOLIDDATA_H
22
23#include "entity_global.h"
24
25#include "RBox.h"
26#include "REntityData.h"
27#include "RPolyline.h"
28#include "RVector.h"
29
30class RDocument;
31class RLine;
32class RTriangle;
33class RRefPoint;
34class RPolyline;
35
45
46 friend class RSolidEntity;
47
48protected:
49 RSolidData(RDocument* document, const RSolidData& data);
50
51public:
52 RSolidData();
53 RSolidData(const RTriangle& triangle);
54 RSolidData(const RVector& p1, const RVector& p2, const RVector& p3);
55 RSolidData(const RVector& p1, const RVector& p2, const RVector& p3, const RVector& p4);
56
57 virtual RS::EntityType getType() const {
58 return RS::EntitySolid;
59 }
60
61 bool isValid() const {
62 return RPolyline::isValid();
63 }
64 virtual QList<RVector> getEndPoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
65 return REntityData::getEndPoints(queryBox, subEntityIds);
66 }
67 virtual void setZ(double z) {
69 }
70 virtual void to2D() {
72 }
73 virtual RBox getBoundingBox(bool ignoreEmpty=false) const {
75 }
76 virtual QList<RVector> getMiddlePoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
77 return REntityData::getMiddlePoints(queryBox, subEntityIds);
78 }
79 virtual QList<RVector> getCenterPoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
80 return REntityData::getCenterPoints(queryBox, subEntityIds);
81 }
82 virtual QList<RVector> getArcReferencePoints(const RBox& queryBox = RDEFAULT_RBOX) const {
84 }
85 virtual QList<RVector> getPointsWithDistanceToEnd(double distance, int from = RS::FromAny, const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
86 return REntityData::getPointsWithDistanceToEnd(distance, from, queryBox, subEntityIds);
87 }
88 virtual QList<RVector> getIntersectionPoints(const REntityData& other, bool limited = true, bool same = false, const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = true, QList<QPair<RObject::Id, RObject::Id> >* entityIds = NULL) const {
89 return REntityData::getIntersectionPoints(other, limited, same, queryBox, ignoreComplex, entityIds);
90 }
91 virtual QList<RVector> getIntersectionPoints(const RShape& shape, bool limited = true, const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = true) const {
92 return REntityData::getIntersectionPoints(shape, limited, queryBox, ignoreComplex);
93 }
94 virtual RVector getVectorTo(const RVector& point, bool limited=true, double strictRange = RMAXDOUBLE) const {
95 return REntityData::getVectorTo(point, limited, strictRange);
96 }
97 virtual double getDistanceTo(const RVector& point, bool limited = true, double range = 0.0, bool draft = false, double strictRange = RMAXDOUBLE) const {
98 return REntityData::getDistanceTo(point, limited, range, draft, strictRange);
99 }
100 virtual bool intersectsWith(const RShape& shape) const {
101 return REntityData::intersectsWith(shape);
102 }
103 virtual bool move(const RVector& offset) {
104 return RPolyline::move(offset);
105 }
106 virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR) {
107 return RPolyline::rotate(rotation, center);
108 }
109 virtual bool scale(const RVector& scaleFactors, const RVector& center = RDEFAULT_RVECTOR) {
110 return RPolyline::scale(scaleFactors, center);
111 }
112 virtual bool mirror(const RLine& axis) {
113 return RPolyline::mirror(axis);
114 }
115 virtual bool mirror(const RVector& axis1, const RVector& axis2) {
116 return REntityData::mirror(axis1, axis2);
117 }
118 virtual bool flipHorizontal() {
120 }
121 virtual bool flipVertical() {
123 }
124 virtual bool stretch(const RPolyline& area, const RVector& offset) {
125 return RPolyline::stretch(area, offset);
126 }
129 }
131 return RPolyline::getEndPoint();
132 }
133 double getDirection1() const {
135 }
136 double getDirection2() const {
138 }
139 bool reverse() {
140 return RPolyline::reverse();
141 }
142 RVector getVertexAt(int i) const {
144 }
145 int countVertices() const {
147 }
148
149 RS::Ending getTrimEnd(const RVector& trimPoint, const RVector& clickPoint) {
150 return RPolyline::getTrimEnd(trimPoint, clickPoint);
151 }
152 bool trimStartPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
153 return RPolyline::trimStartPoint(trimPoint, clickPoint, extend);
154 }
155 bool trimEndPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
156 return RPolyline::trimEndPoint(trimPoint, clickPoint, extend);
157 }
158
159 virtual QList<RRefPoint> getReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
160
161 virtual bool moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
162
163 virtual RShape* castToShape() {
164 return this;
165 }
166
167 virtual QList<QSharedPointer<RShape> > getShapes(const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = false, bool segment = false, QList<RObject::Id>* entityIds = NULL) const {
168 Q_UNUSED(queryBox)
169 Q_UNUSED(ignoreComplex)
170 Q_UNUSED(segment)
171
172 return QList<QSharedPointer<RShape> >() <<
173 QSharedPointer<RShape>(new RPolyline(*this));
174 }
175
177 return *this;
178 }
179};
180
184Q_DECLARE_METATYPE(QSharedPointer<RSolidData>)
185
186#endif
#define RDEFAULT_RBOX
Definition RBox.h:35
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
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition RDocument.h:78
Base class for all entity data classes.
Definition REntityData.h:65
virtual QList< RVector > getCenterPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:443
virtual QList< RVector > getMiddlePoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:413
virtual bool flipHorizontal()
Definition REntityData.cpp:729
virtual double getDistanceTo(const RVector &point, bool limited=true, double range=0.0, bool draft=false, double strictRange=RMAXDOUBLE) const
Definition REntityData.cpp:299
virtual QList< RVector > getIntersectionPoints(const REntityData &other, bool limited=true, bool same=false, const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=true, QList< QPair< RObject::Id, RObject::Id > > *entityIds=NULL) const
Definition REntityData.cpp:601
virtual bool moveReferencePoint(const RVector &referencePoint, const RVector &targetPoint, Qt::KeyboardModifiers modifiers=Qt::NoModifier)=0
Moves the given reference point to the given target point or does nothing if this entity has no refer...
virtual bool intersectsWith(const RShape &shape) const
Definition REntityData.cpp:582
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny, const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:487
virtual bool flipVertical()
Definition REntityData.cpp:733
virtual bool mirror(const RLine &axis)
Definition REntityData.cpp:715
virtual QList< RVector > getArcReferencePoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition REntityData.cpp:474
virtual QList< RRefPoint > getReferencePoints(RS::ProjectionRenderingHint hint=RS::RenderTop) const =0
virtual RBox getBoundingBox(bool ignoreEmpty=false) const
Definition REntityData.cpp:313
virtual QList< RVector > getEndPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:383
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition REntityData.cpp:551
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
RVector getVertexAt(int i) const
Definition RPolyline.cpp:573
virtual bool reverse()
Definition RPolyline.cpp:1947
virtual bool stretch(const RPolyline &area, const RVector &offset)
Definition RPolyline.cpp:1984
virtual double getDirection1() const
Definition RPolyline.cpp:1456
virtual RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition RPolyline.cpp:2003
virtual bool mirror(const RLine &axis)
Definition RPolyline.cpp:1936
virtual bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RPolyline.cpp:2010
int countVertices() const
Definition RPolyline.cpp:622
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition RPolyline.cpp:1868
virtual void setZ(double z)
Definition RPolyline.cpp:85
virtual bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RPolyline.cpp:2017
RPolyline()
Creates a polyline object without points.
Definition RPolyline.cpp:37
virtual bool move(const RVector &offset)
Definition RPolyline.cpp:1861
virtual RVector getEndPoint() const
Definition RPolyline.cpp:1410
virtual double getDirection2() const
Definition RPolyline.cpp:1465
virtual RVector getStartPoint() const
Definition RPolyline.cpp:1402
virtual bool scale(double scaleFactor, const RVector &center=RDEFAULT_RVECTOR)
Definition RPolyline.cpp:1878
Represents a reference point of an entity.
Definition RRefPoint.h:18
@ FromAny
Start or end.
Definition RS.h:374
EntityType
Entity types used for property handling / filtering.
Definition RS.h:227
@ EntitySolid
Solid.
Definition RS.h:256
ProjectionRenderingHint
Sets the current rendering hint for exports.
Definition RS.h:293
@ RenderTop
Definition RS.h:294
Ending
Entity ending.
Definition RS.h:323
Interface for geometrical shape classes.
Definition RShape.h:72
virtual bool isValid() const
Definition RShape.h:92
virtual void to2D()
Flattens this shape to the X/Y plane.
Definition RShape.h:158
Stores and manages all data that defines the geometry and appearance of a solid entity.
Definition RSolidData.h:44
RVector getEndPoint() const
Definition RSolidData.h:130
virtual QList< RVector > getEndPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSolidData.h:64
virtual RShape * castToShape()
Definition RSolidData.h:163
virtual QList< RVector > getIntersectionPoints(const REntityData &other, bool limited=true, bool same=false, const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=true, QList< QPair< RObject::Id, RObject::Id > > *entityIds=NULL) const
Definition RSolidData.h:88
virtual RBox getBoundingBox(bool ignoreEmpty=false) const
Definition RSolidData.h:73
virtual QList< RVector > getCenterPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSolidData.h:79
virtual bool stretch(const RPolyline &area, const RVector &offset)
Stretches the end points of this entity that are inside area by offset.
Definition RSolidData.h:124
virtual void setZ(double z)
Definition RSolidData.h:67
RVector getVertexAt(int i) const
Definition RSolidData.h:142
bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RSolidData.h:155
virtual bool flipHorizontal()
Definition RSolidData.h:118
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition RSolidData.h:94
virtual bool move(const RVector &offset)
Moves this entity by the given offset.
Definition RSolidData.h:103
virtual bool mirror(const RLine &axis)
Definition RSolidData.h:112
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition RSolidData.h:109
virtual bool mirror(const RVector &axis1, const RVector &axis2)
Definition RSolidData.h:115
RPolyline getGeometry()
Definition RSolidData.h:176
virtual bool flipVertical()
Definition RSolidData.h:121
int countVertices() const
Definition RSolidData.h:145
double getDirection1() const
Definition RSolidData.h:133
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition RSolidData.h:106
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny, const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSolidData.h:85
double getDirection2() const
Definition RSolidData.h:136
virtual QList< RVector > getMiddlePoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSolidData.h:76
bool isValid() const
Definition RSolidData.h:61
virtual RS::EntityType getType() const
Definition RSolidData.h:57
virtual QList< RVector > getIntersectionPoints(const RShape &shape, bool limited=true, const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=true) const
Definition RSolidData.h:91
virtual void to2D()
Definition RSolidData.h:70
bool reverse()
Definition RSolidData.h:139
virtual double getDistanceTo(const RVector &point, bool limited=true, double range=0.0, bool draft=false, double strictRange=RMAXDOUBLE) const
Definition RSolidData.h:97
RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition RSolidData.h:149
virtual QList< RVector > getArcReferencePoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition RSolidData.h:82
virtual QList< QSharedPointer< RShape > > getShapes(const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=false, bool segment=false, QList< RObject::Id > *entityIds=NULL) const
Definition RSolidData.h:167
virtual bool intersectsWith(const RShape &shape) const
Definition RSolidData.h:100
bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RSolidData.h:152
RVector getStartPoint() const
Definition RSolidData.h:127
Solid entity.
Definition RSolidEntity.h:38
Low-level mathematical representation of a triangle.
Definition RTriangle.h:49
Represents a 3d vector (x/y/z).
Definition RVector.h:47
static const RVector invalid
invalid vector
Definition RVector.h:335
#define QCADENTITY_EXPORT
Definition entity_global.h:10
#define NULL
Definition opennurbs_system.h:256