52#define _IFT_Circle_Name "circle"
53#define _IFT_Circle_radius "radius"
54#define _IFT_Circle_center "center"
56#define _IFT_Line_Name "line"
57#define _IFT_Line_start "start"
58#define _IFT_Line_end "end"
60#define _IFT_PointSwarm_Name "pointswarm"
61#define _IFT_PointSwarm_nodeID "nodeid"
64#define _IFT_PolygonLine_Name "polygonline"
65#define _IFT_PolygonLine_points "points"
72class DynamicInputRecord;
73class oofegGraphicContext;
103 virtual void printVTK(
int iTStepIndex,
int iIndex) {};
110 virtual void giveSubPolygon(std :: vector< FloatArray > &oPoints,
const double &iXiStart,
const double &iXiEnd)
const {
OOFEM_ERROR(
"?"); }
114 virtual void giveTangent(
FloatArray &oTangent,
const double &iArcPosition)
const {printf(
"BasicGeometry::giveTangent() not implemented.\n");}
128 void removeDuplicatePoints(
const double &iTolSquare);
194 double computeDistanceTo(
const FloatArray &point)
override;
199 double computeTangentialDistanceToEnd(
const FloatArray &point);
201 void computeTangentialSignDist(
double &oDist,
const FloatArray &iPoint,
double &oMinDistArcPos)
const override;
204 int computeNumberOfIntersectionPoints(
Element *element)
override;
205 void computeIntersectionPoints(
Element *element, std :: vector< FloatArray > &oIntersectionPoints)
override;
206 double computeInclinationAngle();
207 void computeTransformationMatrix(
FloatMatrix &answer);
211 bool intersects(
Element *element)
override;
231 void computeBarycentrCoor(
FloatArray &answer)
const;
232 double getRadiusOfCircumCircle();
233 void computeCenterOfCircumCircle(
FloatArray &answer)
const;
234 void printYourself()
override;
236 bool isOrientedAnticlockwise();
237 void changeToAnticlockwise();
244 bool pointIsInTriangle(
const FloatArray &iP)
const;
249 static void refineTriangle(std::vector<Triangle> &oRefinedTri,
const Triangle &iTri);
264 void computeNormalSignDist(
double &oDist,
const FloatArray &iPoint)
const override;
271 void giveGlobalCoordinates(
FloatArray &oGlobalCoord,
const double &iArcPos)
const override;
277 bool intersects(
Element *element)
override;
278 void computeIntersectionPoints(
Element *element, std :: vector< FloatArray > &oIntersectionPoints)
override;
279 void computeIntersectionPoints(
Line *l, std :: vector< FloatArray > &oIntersectionPoints);
280 int computeNumberOfIntersectionPoints(
Element *element)
override;
282 bool isInside(
Element *element)
override;
283 bool isInside(
const FloatArray &point)
override;
284 void printYourself()
override;
288 void giveBoundingSphere(
FloatArray &oCenter,
double &oRadius)
override;
300 void computeNormalSignDist(
double &oDist,
const FloatArray &iPoint)
const override;
301 void computeTangentialSignDist(
double &oDist,
const FloatArray &iPoint,
double &oMinDistArcPos)
const override;
305 double computeLength()
const;
307 void giveSubPolygon(std :: vector< FloatArray > &oPoints,
const double &iXiStart,
const double &iXiEnd)
const override;
308 void giveGlobalCoordinates(
FloatArray &oGlobalCoord,
const double &iArcPos)
const override;
309 void giveNormal(
FloatArray &oNormal,
const double &iArcPosition)
const;
310 void giveTangent(
FloatArray &oTangent,
const double &iArcPosition)
const override;
317 bool boundingBoxIntersects(
Element *element);
320 bool intersects(
Element *element)
override;
321 void computeIntersectionPoints(
Element *element, std :: vector< FloatArray > &oIntersectionPoints)
override;
322 void computeIntersectionPoints(
Line *l, std :: vector< FloatArray > &oIntersectionPoints);
323 void computeIntersectionPoints(
const PolygonLine &iPolygonLine, std :: vector< FloatArray > &oIntersectionPoints)
const;
324 void computeIntersectionPoints(
const FloatArray &iXStart,
const FloatArray &iXEnd, std :: vector< FloatArray > &oIntersectionPoints)
const;
326 int computeNumberOfIntersectionPoints(
Element *element)
override;
328 bool isInside(
Element *element)
override;
329 bool isInside(
const FloatArray &point)
override;
332 virtual void calcBoundingBox(bPoint2 &oLC, bPoint2 &oUC);
335 void printYourself()
override;
338 void printVTK(
int iTStepIndex,
int iLineIndex)
override;
345 bool giveTips(
TipInfo &oStartTipInfo,
TipInfo &oEndTipInfo)
const override;
347 void giveBoundingSphere(
FloatArray &oCenter,
double &oRadius)
override;
353 void cropPolygon(
const double &iArcPosStart,
const double &iArcPosEnd);
377 double computeDistanceTo(
FloatArray &point)
override;
378 const char *giveClassName()
const override {
return "Circle"; }
379 bool intersects(Element *element)
override;
380 void computeIntersectionPoints(Element *element, std :: vector< FloatArray > *intersecPoints)
override;
381 void computeIntersectionPoints(Line *l, std :: vector< FloatArray > *intersecPoints)
override;
382 bool isOutside(BasicGeometry *bg)
override;
383 bool isInside(Element *element)
override;
384 bool isInside(
const FloatArray &point)
override;
virtual void giveSubPolygon(std ::vector< FloatArray > &oPoints, const double &iXiStart, const double &iXiEnd) const
virtual void printYourself()
virtual void saveContext(DataStream &stream, ContextMode mode)
virtual bool isInside(Element *el)
void insertVertexBack(const FloatArray &iP)
virtual void giveGlobalCoordinates(FloatArray &oGlobalCoord, const double &iArcPos) const
std::string errorInfo(const char *func) const
virtual void draw(oofegGraphicContext &gc)
virtual int computeNumberOfIntersectionPoints(Element *element)
Gives number of intersection points of Geometry entity with an element, Element reference will be lat...
virtual void giveTangent(FloatArray &oTangent, const double &iArcPosition) const
Computes tangential direction at given local coordinate (arcPos).
virtual const char * giveClassName() const
Gives class name.
virtual bool intersects(Element *element)
Checks whether an element is interacted, Element reference will be later replaced by Geometry.
virtual void giveInputRecord(DynamicInputRecord &input)
virtual void initializeFrom(InputRecord &ir)
Initializes the Geometry from the InputRecord.
virtual void computeLocalCoordinates(FloatArray &oLocCoord, const FloatArray &iPoint) const
const FloatArray & giveVertex(int n) const
virtual void restoreContext(DataStream &stream, ContextMode mode)
void insertVertexFront(const FloatArray &iP)
virtual bool giveTips(TipInfo &oStartTipInfo, TipInfo &oEndTipInfo) const
virtual void printVTK(int iTStepIndex, int iIndex)
int giveNrVertices() const
Returns number of Geometry vertices.
BasicGeometry()
Constructor.
virtual void giveBoundingSphere(FloatArray &oCenter, double &oRadius)
virtual void computeTangentialSignDist(double &oDist, const FloatArray &iPoint, double &oMinDistArcPos) const =0
std ::vector< FloatArray > mVertices
List of geometry vertices.
virtual void computeNormalSignDist(double &oDist, const FloatArray &iPoint) const =0
virtual bool isOutside(BasicGeometry *bg)
void setVertices(const std::vector< FloatArray > &iVertices)
virtual double computeDistanceTo(const FloatArray &point)
Computes normal signed distance between this object and a point.
virtual void computeIntersectionPoints(Element *element, std ::vector< FloatArray > &oIntersectionPoints)
Gives intersection points between this Geometry and Element.
virtual bool isInside(const FloatArray &point)
virtual BasicGeometry * Clone()=0
void giveTangent(FloatArray &oTangent, const double &iArcPosition) const override
Computes tangential direction at given local coordinate (arcPos).
const double mTangSignDist
void computeTangentialSignDist(double &oDist, const FloatArray &iPoint, double &oMinDistArcPos) const override
double giveRadius() const
BasicGeometry * Clone() override
const char * giveClassName() const override
Gives class name.
BasicGeometry * Clone() override
void computeNormalSignDist(double &oDist, const FloatArray &iPoint) const override
Computes tangential distance to a point.
double giveLength() const
BasicGeometry * Clone() override
void computeTangentialSignDist(double &oDist, const FloatArray &iPoint, double &oMinDistArcPos) const override
void computeNormalSignDist(double &oDist, const FloatArray &iPoint) const override
PointSwarm(std ::list< int >pointsID)
const char * giveClassName() const override
Gives class name.
BasicGeometry * Clone() override
int computeNumberOfIntersectionPoints(Element *element) override
Gives number of intersection points of Geometry entity with an element, Element reference will be lat...
void computeNormalSignDist(double &oDist, const FloatArray &iPoint) const override
void computeTangentialSignDist(double &oDist, const FloatArray &iPoint, double &oMinDistArcPos) const override
BasicGeometry * Clone() override
Triangle(const FloatArray &iP1, const FloatArray &iP2, const FloatArray &iP3)
double distance(const FloatArray &x, const FloatArray &y)
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]