QGIS API Documentation
3.2.0-Bonn (bc43194)
|
Contains various geometry utility functions. More...
#include <qgsgeometryutils.h>
Classes | |
struct | SelfIntersection |
Public Types | |
enum | ComponentType { Vertex, Ring, Part } |
Static Public Member Functions | |
static double | angleBetweenThreePoints (double x1, double y1, double x2, double y2, double x3, double y3) |
Calculates the angle between the lines AB and BC, where AB and BC described by points a, b and b, c. More... | |
static bool | angleOnCircle (double angle, double angle1, double angle2, double angle3) |
Returns true if an angle is between angle1 and angle3 on a circle described by angle1, angle2 and angle3. More... | |
static double | averageAngle (double x1, double y1, double x2, double y2, double x3, double y3) |
Calculates the average angle (in radians) between the two linear segments from (x1, y1) to (x2, y2) and (x2, y2) to (x3, y3). More... | |
static double | averageAngle (double a1, double a2) |
Averages two angles, correctly handling negative angles and ensuring the result is between 0 and 2 pi. More... | |
static double | ccwAngle (double dy, double dx) |
Returns the counter clockwise angle between a line with components dx, dy and the line with dx > 0 and dy = 0. More... | |
static bool | circleAngleBetween (double angle, double angle1, double angle2, bool clockwise) |
Returns true if, in a circle, angle is between angle1 and angle2. More... | |
static void | circleCenterRadius (const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double &radius, double ¢erX, double ¢erY) |
Returns radius and center of the circle through pt1, pt2, pt3. More... | |
static int | circleCircleIntersections (QgsPointXY center1, double radius1, QgsPointXY center2, double radius2, QgsPointXY &intersection1, QgsPointXY &intersection2) |
Calculates the intersections points between the circle with center center1 and radius radius1 and the circle with center center2 and radius radius2. More... | |
static int | circleCircleOuterTangents (const QgsPointXY ¢er1, double radius1, const QgsPointXY ¢er2, double radius2, QgsPointXY &line1P1, QgsPointXY &line1P2, QgsPointXY &line2P1, QgsPointXY &line2P2) |
Calculates the outer tangent points for two circles, centered at center1 and center2 and with radii of radius1 and radius2 respectively. More... | |
static bool | circleClockwise (double angle1, double angle2, double angle3) |
Returns true if circle is ordered clockwise. More... | |
static double | circleLength (double x1, double y1, double x2, double y2, double x3, double y3) |
Length of a circular string segment defined by pt1, pt2, pt3. More... | |
static double | circleTangentDirection (const QgsPoint &tangentPoint, const QgsPoint &cp1, const QgsPoint &cp2, const QgsPoint &cp3) |
Calculates the direction angle of a circle tangent (clockwise from north in radians) More... | |
static QgsPoint | closestPoint (const QgsAbstractGeometry &geometry, const QgsPoint &point) |
Returns the nearest point on a segment of a geometry for the specified point. More... | |
template<class T > | |
static double | closestSegmentFromComponents (T &container, ComponentType ctype, const QgsPoint &pt, QgsPoint &segmentPt, QgsVertexId &vertexAfter, int *leftOf, double epsilon) |
static QgsPoint | closestVertex (const QgsAbstractGeometry &geom, const QgsPoint &pt, QgsVertexId &id) |
Returns the closest vertex to a geometry for a specified point. More... | |
static void | coefficients (const QgsPoint &pt1, const QgsPoint &pt2, double &a, double &b, double &c) |
Returns the coefficients (a, b, c for equation "ax + by + c = 0") of a line defined by points pt1 and pt2. More... | |
static double | distanceToVertex (const QgsAbstractGeometry &geom, QgsVertexId id) |
Returns the distance along a geometry from its first vertex to the specified vertex. More... | |
static QVector< QgsLineString * > | extractLineStrings (const QgsAbstractGeometry *geom) |
Returns list of linestrings extracted from the passed geometry. More... | |
static double | gradient (const QgsPoint &pt1, const QgsPoint &pt2) |
Returns the gradient of a line defined by points pt1 and pt2. More... | |
static double | interpolateArcValue (double angle, double a1, double a2, double a3, double zm1, double zm2, double zm3) |
Interpolate a value at given angle on circular arc given values (zm1, zm2, zm3) at three different angles (a1, a2, a3). More... | |
static QgsPointXY | interpolatePointOnLine (double x1, double y1, double x2, double y2, double fraction) |
Interpolates the position of a point a fraction of the way along the line from (x1, y1) to (x2, y2). More... | |
static QgsPoint | interpolatePointOnLine (const QgsPoint &p1, const QgsPoint &p2, double fraction) |
Interpolates the position of a point a fraction of the way along the line from p1 to p2. More... | |
static QgsPointXY | interpolatePointOnLineByValue (double x1, double y1, double v1, double x2, double y2, double v2, double value) |
Interpolates the position of a point along the line from (x1, y1) to (x2, y2). More... | |
static int | leftOfLine (double x, double y, double x1, double y1, double x2, double y2) |
Returns a value < 0 if the point (x, y) is left of the line from (x1, y1) -> ( x2, y2). More... | |
static double | lineAngle (double x1, double y1, double x2, double y2) |
Calculates the direction of line joining two points in radians, clockwise from the north direction. More... | |
static bool | lineCircleIntersection (const QgsPointXY ¢er, double radius, const QgsPointXY &linePoint1, const QgsPointXY &linePoint2, QgsPointXY &intersection) |
Compute the intersection of a line and a circle. More... | |
static bool | lineIntersection (const QgsPoint &p1, QgsVector v1, const QgsPoint &p2, QgsVector v2, QgsPoint &intersection) |
Computes the intersection between two lines. More... | |
static double | linePerpendicularAngle (double x1, double y1, double x2, double y2) |
Calculates the perpendicular angle to a line joining two points. More... | |
static bool | linesIntersection3D (const QgsVector3D &La1, const QgsVector3D &La2, const QgsVector3D &Lb1, const QgsVector3D &Lb2, QgsVector3D &intersection) |
An algorithm to calculate an (approximate) intersection of two lines in 3D. More... | |
static QgsPoint | midpoint (const QgsPoint &pt1, const QgsPoint &pt2) |
Returns a middle point between points pt1 and pt2. More... | |
static double | normalizedAngle (double angle) |
Ensures that an angle is in the range 0 <= angle < 2 pi. More... | |
static QgsLineString | perpendicularSegment (const QgsPoint &p, const QgsPoint &s1, const QgsPoint &s2) |
Create a perpendicular line segment from p to segment [s1, s2]. More... | |
static QgsPoint | pointOnLineWithDistance (const QgsPoint &startPoint, const QgsPoint &directionPoint, double distance) |
Returns a point a specified distance toward a second point. More... | |
static QgsPointSequence | pointsFromWKT (const QString &wktCoordinateList, bool is3D, bool isMeasure) |
Returns a list of points contained in a WKT string. More... | |
static QDomElement | pointsToGML2 (const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder=QgsAbstractGeometry::AxisOrder::XY) |
Returns a gml::coordinates DOM element. More... | |
static QDomElement | pointsToGML3 (const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, bool is3D, const QgsAbstractGeometry::AxisOrder &axisOrder=QgsAbstractGeometry::AxisOrder::XY) |
Returns a gml::posList DOM element. More... | |
static QString | pointsToJSON (const QgsPointSequence &points, int precision) |
Returns a geoJSON coordinates string. More... | |
static void | pointsToWKB (QgsWkbPtr &wkb, const QgsPointSequence &points, bool is3D, bool isMeasure) |
Returns a LinearRing { uint32 numPoints; Point points[numPoints]; }. More... | |
static QString | pointsToWKT (const QgsPointSequence &points, int precision, bool is3D, bool isMeasure) |
Returns a WKT coordinate list. More... | |
static QgsPoint | projectPointOnSegment (const QgsPoint &p, const QgsPoint &s1, const QgsPoint &s2) |
Project the point on a segment. More... | |
static bool | segmentIntersection (const QgsPoint &p1, const QgsPoint &p2, const QgsPoint &q1, const QgsPoint &q2, QgsPoint &intersectionPoint, bool &isIntersection, double tolerance=1e-8, bool acceptImproperIntersection=false) |
Compute the intersection between two segments. More... | |
static void | segmentizeArc (const QgsPoint &p1, const QgsPoint &p2, const QgsPoint &p3, QgsPointSequence &points, double tolerance=M_PI_2/90, QgsAbstractGeometry::SegmentationToleranceType toleranceType=QgsAbstractGeometry::MaximumAngle, bool hasZ=false, bool hasM=false) |
Convert circular arc defined by p1, p2, p3 (p1/p3 being start resp. More... | |
static bool | segmentMidPoint (const QgsPoint &p1, const QgsPoint &p2, QgsPoint &result, double radius, const QgsPoint &mousePos) |
Calculates midpoint on circle passing through p1 and p2, closest to the given coordinate mousePos. More... | |
static QgsPoint | segmentMidPointFromCenter (const QgsPoint &p1, const QgsPoint &p2, const QgsPoint ¢er, bool useShortestArc=true) |
Calculates the midpoint on the circle passing through p1 and p2, with the specified center coordinate. More... | |
static int | segmentSide (const QgsPoint &pt1, const QgsPoint &pt3, const QgsPoint &pt2) |
For line defined by points pt1 and pt3, find out on which side of the line is point pt3. More... | |
static QVector< SelfIntersection > | selfIntersections (const QgsAbstractGeometry *geom, int part, int ring, double tolerance) |
Find self intersections in a polyline. More... | |
static bool | setZValueFromPoints (const QgsPointSequence &points, QgsPoint &point) |
A Z dimension is added to point if one of the point in the list points is in 3D. More... | |
static double | skewLinesDistance (const QgsVector3D &P1, const QgsVector3D &P12, const QgsVector3D &P2, const QgsVector3D &P22) |
An algorithm to calculate the shortest distance between two skew lines. More... | |
static bool | skewLinesProjection (const QgsVector3D &P1, const QgsVector3D &P12, const QgsVector3D &P2, const QgsVector3D &P22, QgsVector3D &X1, double epsilon=0.0001) |
A method to project one skew line onto another. More... | |
static double | sqrDistance2D (const QgsPoint &pt1, const QgsPoint &pt2) |
Returns the squared 2D distance between two points. More... | |
static double | sqrDistToLine (double ptX, double ptY, double x1, double y1, double x2, double y2, double &minDistX, double &minDistY, double epsilon) |
Returns the squared distance between a point and a line. More... | |
static double | sweepAngle (double centerX, double centerY, double x1, double y1, double x2, double y2, double x3, double y3) |
Calculates angle of a circular string part defined by pt1, pt2, pt3. More... | |
static bool | tangentPointAndCircle (const QgsPointXY ¢er, double radius, const QgsPointXY &p, QgsPointXY &pt1, QgsPointXY &pt2) |
Calculates the tangent points between the circle with the specified center and radius and the point p. More... | |
static bool | verticesAtDistance (const QgsAbstractGeometry &geometry, double distance, QgsVertexId &previousVertex, QgsVertexId &nextVertex) |
Retrieves the vertices which are before and after the interpolated point at a specified distance along a linestring (or polygon boundary). More... | |
static QStringList | wktGetChildBlocks (const QString &wkt, const QString &defaultType=QString()) |
Parses a WKT string and returns of list of blocks contained in the WKT. More... | |
static QPair< QgsWkbTypes::Type, QString > | wktReadBlock (const QString &wkt) |
Parses a WKT block of the format "TYPE( contents )" and returns a pair of geometry type to contents ("Pair(wkbType, "contents")") More... | |
Contains various geometry utility functions.
Definition at line 36 of file qgsgeometryutils.h.
Enumerator | |
---|---|
Vertex | |
Ring | |
Part |
Definition at line 610 of file qgsgeometryutils.h.
|
static |
Calculates the angle between the lines AB and BC, where AB and BC described by points a, b and b, c.
x1 | x-coordinate of point a |
y1 | y-coordinate of point a |
x2 | x-coordinate of point b |
y2 | y-coordinate of point b |
x3 | x-coordinate of point c |
y3 | y-coordinate of point c |
Definition at line 1294 of file qgsgeometryutils.cpp.
|
static |
Returns true if an angle is between angle1 and angle3 on a circle described by angle1, angle2 and angle3.
Definition at line 648 of file qgsgeometryutils.cpp.
|
static |
Calculates the average angle (in radians) between the two linear segments from (x1, y1) to (x2, y2) and (x2, y2) to (x3, y3).
Definition at line 1308 of file qgsgeometryutils.cpp.
|
static |
Averages two angles, correctly handling negative angles and ensuring the result is between 0 and 2 pi.
a1 | first angle (in radians) |
a2 | second angle (in radians) |
Definition at line 1316 of file qgsgeometryutils.cpp.
|
static |
Returns the counter clockwise angle between a line with components dx, dy and the line with dx > 0 and dy = 0.
Definition at line 558 of file qgsgeometryutils.cpp.
|
static |
Returns true if, in a circle, angle is between angle1 and angle2.
Definition at line 622 of file qgsgeometryutils.cpp.
|
static |
Returns radius and center of the circle through pt1, pt2, pt3.
Definition at line 572 of file qgsgeometryutils.cpp.
|
static |
Calculates the intersections points between the circle with center center1 and radius radius1 and the circle with center center2 and radius radius2.
If found, the intersection points will be stored in intersection1 and intersection2.
Definition at line 369 of file qgsgeometryutils.cpp.
|
static |
Calculates the outer tangent points for two circles, centered at center1 and center2 and with radii of radius1 and radius2 respectively.
The outer tangent points correspond to the points at which the two lines which are drawn so that they are tangential to both circles touch the circles.
The first tangent line is described by the points stored in line1P1 and line1P2, and the second line is described by the points stored in line2P1 and line2P2.
Returns the number of tangents (either 0 or 2).
Definition at line 457 of file qgsgeometryutils.cpp.
|
static |
Returns true if circle is ordered clockwise.
Definition at line 610 of file qgsgeometryutils.cpp.
|
static |
Length of a circular string segment defined by pt1, pt2, pt3.
Definition at line 654 of file qgsgeometryutils.cpp.
|
static |
Calculates the direction angle of a circle tangent (clockwise from north in radians)
Definition at line 752 of file qgsgeometryutils.cpp.
|
static |
Returns the nearest point on a segment of a geometry for the specified point.
The z and m values will be linearly interpolated between the two neighbouring vertices.
Definition at line 97 of file qgsgeometryutils.cpp.
|
inlinestatic |
Definition at line 618 of file qgsgeometryutils.h.
|
static |
Returns the closest vertex to a geometry for a specified point.
On error null point will be returned and "id" argument will be invalid.
Definition at line 66 of file qgsgeometryutils.cpp.
|
static |
Returns the coefficients (a, b, c for equation "ax + by + c = 0") of a line defined by points pt1 and pt2.
pt1 | first point. |
pt2 | second point. |
a | Output parameter, a coefficient of the equation. |
b | Output parameter, b coefficient of the equation. |
c | Output parameter, c coefficient of the equation. |
Definition at line 1226 of file qgsgeometryutils.cpp.
|
static |
Returns the distance along a geometry from its first vertex to the specified vertex.
geom | geometry |
id | vertex id to find distance to |
Definition at line 130 of file qgsgeometryutils.cpp.
|
static |
Returns list of linestrings extracted from the passed geometry.
The returned objects have to be deleted by the caller.
Definition at line 30 of file qgsgeometryutils.cpp.
Returns the gradient of a line defined by points pt1 and pt2.
pt1 | first point. |
pt2 | second point. |
Definition at line 1214 of file qgsgeometryutils.cpp.
|
static |
Interpolate a value at given angle on circular arc given values (zm1, zm2, zm3) at three different angles (a1, a2, a3).
Definition at line 914 of file qgsgeometryutils.cpp.
|
static |
Interpolates the position of a point a fraction of the way along the line from (x1, y1) to (x2, y2).
Usually the fraction should be between 0 and 1, where 0 represents the point at the start of the line (x1, y1) and 1 represents the end of the line (x2, y2). However, it is possible to use a fraction < 0 or > 1, in which case the returned point is extrapolated from the supplied line.
Definition at line 1198 of file qgsgeometryutils.cpp.
|
static |
Interpolates the position of a point a fraction of the way along the line from p1 to p2.
Usually the fraction should be between 0 and 1, where 0 represents the point at the start of the line (p1) and 1 represents the end of the line (p2). However, it is possible to use a fraction < 0 or > 1, in which case the returned point is extrapolated from the supplied line.
Any Z or M values present in the input points will also be interpolated and present in the returned point.
Definition at line 1188 of file qgsgeometryutils.cpp.
|
static |
Interpolates the position of a point along the line from (x1, y1) to (x2, y2).
The position is interpolated using a supplied target value and the value at the start of the line (v1) and end of the line (v2). The returned point will be linearly interpolated to match position corresponding to the target value.
Definition at line 1205 of file qgsgeometryutils.cpp.
|
static |
Returns a value < 0 if the point (x, y) is left of the line from (x1, y1) -> ( x2, y2).
A positive return value indicates the point is to the right of the line.
If the return value is 0, then the test was unsuccessful (e.g. due to testing a point exactly on the line, or exactly in line with the segment) and the result is undefined.
Definition at line 532 of file qgsgeometryutils.cpp.
|
static |
Calculates the direction of line joining two points in radians, clockwise from the north direction.
x1 | x-coordinate of line start |
y1 | y-coordinate of line start |
x2 | x-coordinate of line end |
y2 | y-coordinate of line end |
Definition at line 1287 of file qgsgeometryutils.cpp.
|
static |
Compute the intersection of a line and a circle.
If the intersection has two solutions (points), the closest point to the initial intersection point is returned.
center | the center of the circle |
radius | the radius of the circle |
linePoint1 | a first point on the line |
linePoint2 | a second point on the line |
intersection | the initial point and the returned intersection point |
Definition at line 317 of file qgsgeometryutils.cpp.
|
static |
Computes the intersection between two lines.
Z dimension is supported and is retrieved from the first 3D point amongst p1 and p2.
p1 | Point on the first line |
v1 | Direction vector of the first line |
p2 | Point on the second line |
v2 | Direction vector of the second line |
intersection | Output parameter, the intersection point |
Definition at line 238 of file qgsgeometryutils.cpp.
|
static |
Calculates the perpendicular angle to a line joining two points.
Returned angle is in radians, clockwise from the north direction.
x1 | x-coordinate of line start |
y1 | y-coordinate of line start |
x2 | x-coordinate of line end |
y2 | y-coordinate of line end |
Definition at line 1301 of file qgsgeometryutils.cpp.
|
static |
An algorithm to calculate an (approximate) intersection of two lines in 3D.
La1 | is the first point on the first line, |
La2 | is the second point on the first line, |
Lb1 | is the first point on the second line, |
Lb2 | is the second point on the second line, |
intersection | is the result intersection, of it can be found. |
Definition at line 1397 of file qgsgeometryutils.cpp.
Returns a middle point between points pt1 and pt2.
Z value is computed if one of this point have Z. M value is computed if one of this point have M.
pt1 | first point. |
pt2 | second point. |
Definition at line 1163 of file qgsgeometryutils.cpp.
|
static |
Ensures that an angle is in the range 0 <= angle < 2 pi.
angle | angle in radians |
Definition at line 1102 of file qgsgeometryutils.cpp.
|
static |
Create a perpendicular line segment from p to segment [s1, s2].
p | The point |
s1 | The segment start point |
s2 | The segment end point |
Definition at line 1249 of file qgsgeometryutils.cpp.
|
static |
Returns a point a specified distance toward a second point.
Definition at line 543 of file qgsgeometryutils.cpp.
|
static |
Returns a list of points contained in a WKT string.
Definition at line 934 of file qgsgeometryutils.cpp.
|
static |
Returns a gml::coordinates DOM element.
Definition at line 1038 of file qgsgeometryutils.cpp.
|
static |
Returns a gml::posList DOM element.
Definition at line 1065 of file qgsgeometryutils.cpp.
|
static |
Returns a geoJSON coordinates string.
Definition at line 1087 of file qgsgeometryutils.cpp.
|
static |
Returns a LinearRing { uint32 numPoints; Point points[numPoints]; }.
Definition at line 1002 of file qgsgeometryutils.cpp.
|
static |
Returns a WKT coordinate list.
Definition at line 1019 of file qgsgeometryutils.cpp.
|
inlinestatic |
Project the point on a segment.
p | The point |
s1 | The segment start point |
s2 | The segment end point |
Definition at line 212 of file qgsgeometryutils.h.
|
static |
Compute the intersection between two segments.
p1 | First segment start point |
p2 | First segment end point |
q1 | Second segment start point |
q2 | Second segment end point |
intersectionPoint | Output parameter, the intersection point |
isIntersection | Output parameter, return true if an intersection is found |
tolerance | The tolerance to use |
acceptImproperIntersection | By default, this method returns true only if segments have proper intersection. If set true, returns also true if segments have improper intersection (end of one segment on other segment ; continuous segments). |
Definition at line 257 of file qgsgeometryutils.cpp.
|
static |
Convert circular arc defined by p1, p2, p3 (p1/p3 being start resp.
end point, p2 lies on the arc) into a sequence of points.
Definition at line 776 of file qgsgeometryutils.cpp.
|
static |
Calculates midpoint on circle passing through p1 and p2, closest to the given coordinate mousePos.
Z dimension is supported and is retrieved from the first 3D point amongst p1 and p2.
Definition at line 696 of file qgsgeometryutils.cpp.
|
static |
Calculates the midpoint on the circle passing through p1 and p2, with the specified center coordinate.
If useShortestArc is true, then the midpoint returned will be that corresponding to the shorter arc from p1 to p2. If it is false, the longer arc from p1 to p2 will be used (i.e. winding the other way around the circle).
Definition at line 743 of file qgsgeometryutils.cpp.
|
static |
For line defined by points pt1 and pt3, find out on which side of the line is point pt3.
Returns -1 if pt3 on the left side, 1 if pt3 is on the right side or 0 if pt3 lies on the line.
Definition at line 893 of file qgsgeometryutils.cpp.
|
static |
Find self intersections in a polyline.
geom | The geometry to check |
part | The part of the geometry to check |
ring | The ring of the geometry part to check |
tolerance | The tolerance to use |
Definition at line 492 of file qgsgeometryutils.cpp.
|
static |
A Z dimension is added to point if one of the point in the list points is in 3D.
Moreover, the Z value of point is updated with.
points | List of points in which a 3D point is searched. |
point | The point to update with Z dimension and value. |
Definition at line 1466 of file qgsgeometryutils.cpp.
|
static |
An algorithm to calculate the shortest distance between two skew lines.
P1 | is the first point of the first line, |
P12 | is the second point on the first line, |
P2 | is the first point on the second line, |
P22 | is the second point on the second line. |
Definition at line 1343 of file qgsgeometryutils.cpp.
|
static |
A method to project one skew line onto another.
P1 | is a first point that belonds to first skew line, |
P12 | is the second point that belongs to first skew line, |
P2 | is the first point that belongs to second skew line, |
P22 | is the second point that belongs to second skew line, |
X1 | is the result projection point of line P2P22 onto line P1P12, |
epsilon | the tolerance to use. |
Definition at line 1355 of file qgsgeometryutils.cpp.
Returns the squared 2D distance between two points.
Definition at line 194 of file qgsgeometryutils.cpp.
|
static |
Returns the squared distance between a point and a line.
Definition at line 199 of file qgsgeometryutils.cpp.
|
static |
Calculates angle of a circular string part defined by pt1, pt2, pt3.
Definition at line 666 of file qgsgeometryutils.cpp.
|
static |
Calculates the tangent points between the circle with the specified center and radius and the point p.
If found, the tangent points will be stored in pt1 and pt2.
Definition at line 433 of file qgsgeometryutils.cpp.
|
static |
Retrieves the vertices which are before and after the interpolated point at a specified distance along a linestring (or polygon boundary).
geometry | line or polygon geometry |
distance | distance to traverse along geometry |
previousVertex | will be set to previous vertex ID |
nextVertex | will be set to next vertex ID |
Definition at line 149 of file qgsgeometryutils.cpp.
|
static |
Parses a WKT string and returns of list of blocks contained in the WKT.
wkt | WKT string in the format "TYPE1 (contents1), TYPE2 (TYPE3 (contents3), TYPE4 (contents4))" |
defaultType | default geometry type for children |
Definition at line 1127 of file qgsgeometryutils.cpp.
|
static |
Parses a WKT block of the format "TYPE( contents )" and returns a pair of geometry type to contents ("Pair(wkbType, "contents")")
Definition at line 1116 of file qgsgeometryutils.cpp.