NormVecDecorator class
Decorator class which adds the functionality of estimating normals at the data points.
Contents
Base classes
- class TriDecorator
- Decorator class for Triangulations (s.
Public types
- enum PointState { Normal, BreakLine, EndPoint }
- Enumeration for the state of a point. Normal means, that the point is not on a BreakLine, BreakLine means that the point is on a breakline (but not an end point of it) and EndPoint means, that it is an endpoint of a breakline.
Public functions
- auto addPoint(const QgsPoint& point) -> int override
- Adds a point to the triangulation.
- auto calcNormal(double x, double y, Vector3D* result) -> bool override
- Calculates the normal at a point on the surface and assigns it to 'result'. Returns true in case of success and false in case of failure.
- auto calcNormalForPoint(double x, double y, int point, Vector3D* result) -> bool
- Calculates the normal of a triangle-point for the point with coordinates x and y. This is needed, if a point is on a break line and there is no unique normal stored in 'mNormVec'. Returns false, it something went wrong and true otherwise.
- auto calcPoint(double x, double y, QgsPoint& result) -> bool override
- Calculates x-, y and z-value of the point on the surface and assigns it to 'result'.
- void eliminateHorizontalTriangles() override
- Eliminates the horizontal triangles by swapping or by insertion of new points. If alreadyestimated is true, a re-estimation of the normals will be done.
- auto estimateFirstDerivative(int pointno) -> bool
- Estimates the first derivative a point. Return true in case of success and false otherwise.
- auto estimateFirstDerivatives(QgsFeedback* feedback = nullptr) -> bool
- This method adds the functionality of estimating normals at the data points. Return true in the case of success and false otherwise.
- auto getNormal(int n) const -> Vector3D*
- Returns a pointer to the normal vector for the point with the number n.
- auto getState(int pointno) const -> PointState
- Returns the state of the point with the number 'pointno'.
- auto getTriangle(double x, double y, QgsPoint& p1, Vector3D* v1, QgsPoint& p2, Vector3D* v2, QgsPoint& p3, Vector3D* v3) -> bool
- Finds out, in which triangle a point with coordinates x and y is and assigns the triangle points to p1, p2, p3 and the estimated normals to v1, v2, v3. The vectors are normally taken from 'mNormVec', except if p1, p2 or p3 is a point on a breakline. In this case, the normal is calculated on-the-fly. Returns false, if something went wrong and true otherwise.
- auto getTriangle(double x, double y, QgsPoint& p1, int& ptn1, Vector3D* v1, PointState* state1, QgsPoint& p2, int& ptn2, Vector3D* v2, PointState* state2, QgsPoint& p3, int& ptn3, Vector3D* v3, PointState* state3) -> bool
- This function behaves similar to the one above. Additionally, the numbers of the points are returned (ptn1, ptn2, ptn3) as well as the PointStates of the triangle points (state1, state2, state3)
- auto saveTriangulation(QgsFeatureSink* sink, QgsFeedback* feedback = nullptr) const -> bool override
- Saves the triangulation features to a feature sink.
- void setTriangleInterpolator(TriangleInterpolator* inter) override
- Sets an interpolator.
- auto swapEdge(double x, double y) -> bool override
- Swaps the edge which is closest to the point with x and y coordinates (if this is possible) and forces recalculation of the concerned normals (if alreadyestimated is true)
Protected functions
- void setState(int pointno, PointState s)
- Sets the state (BreakLine, Normal, EndPoint) of a point.
Protected variables
- bool alreadyestimated
- Is true, if the normals already have been estimated.
- TriangleInterpolator* mInterpolator
- Association with an interpolator object.
- QVector<Vector3D*>* mNormVec
- Vector that stores the normals for the points. If 'estimateFirstDerivatives()' was called and there is a null pointer, this means, that the triangle point is on a breakline.
- QVector<PointState>* mPointState
- Vector who stores, it a point is not on a breakline, if it is a normal point of the breakline or if it is an endpoint of a breakline.
Function documentation
bool NormVecDecorator:: saveTriangulation(QgsFeatureSink* sink,
QgsFeedback* feedback = nullptr) const override
Saves the triangulation features to a feature sink.
| Returns | true in case of success |
|---|
The sink must be setup to accept LineString features, with fields matching those returned by triangulationFields().