GoGeometry

GoGeometry

Synopsis


#include <goffice/graph/go-geometry.h>


#define             GO_GEOMETRY_ANGLE_TOLERANCE
enum                GOGeometrySide;
enum                GOGeometryRotationType;
                    GOGeometryOBR;
#define             GOGeometryAABR
void                go_geometry_cartesian_to_polar      (double x,
                                                         double y,
                                                         double *rho,
                                                         double *theta);
double              go_geometry_point_to_segment        (double xp,
                                                         double yp,
                                                         double xs,
                                                         double ys,
                                                         double w,
                                                         double h);
void                go_geometry_AABR_add                (GOGeometryAABR *aabr0,
                                                         GOGeometryAABR const *aabr1);
void                go_geometry_OBR_to_AABR             (GOGeometryOBR const *obr,
                                                         GOGeometryAABR *aabr);
gboolean            go_geometry_test_OBR_overlap        (GOGeometryOBR const *obr0,
                                                         GOGeometryOBR const *obr1);
GOGeometryRotationType go_geometry_get_rotation_type    (double alpha);
GOGeometrySide      go_geometry_calc_label_position     (GOGeometryOBR *obr,
                                                         double alpha,
                                                         double offset,
                                                         GOGeometrySide side,
                                                         GOGeometrySide anchor);

Description

Details

GO_GEOMETRY_ANGLE_TOLERANCE

#define GO_GEOMETRY_ANGLE_TOLERANCE 1E-3


enum GOGeometrySide

typedef enum {
	GO_SIDE_LEFT		= 1 << 0,
	GO_SIDE_RIGHT		= 1 << 1,
	GO_SIDE_LEFT_RIGHT	= 3 << 0,
	GO_SIDE_TOP		= 1 << 2,
	GO_SIDE_BOTTOM		= 1 << 3,
	GO_SIDE_TOP_BOTTOM	= 3 << 2,
	GO_SIDE_AUTO		= 15
} GOGeometrySide;


enum GOGeometryRotationType

typedef enum {
	GO_ROTATE_NONE = 0,
	GO_ROTATE_COUNTERCLOCKWISE = 1,
	GO_ROTATE_UPSIDEDOWN = 2,
	GO_ROTATE_CLOCKWISE = 3,	
	GO_ROTATE_FREE = 4
} GOGeometryRotationType;


GOGeometryOBR

typedef struct {
        double x,y;     /* Center */
        double w,h;     /* Edges */
        double alpha;   /* Angle from x axis to w edge, in radians */
} GOGeometryOBR;


GOGeometryAABR

#define GOGeometryAABR GogViewAllocation /* x, y: top left corner */


go_geometry_cartesian_to_polar ()

void                go_geometry_cartesian_to_polar      (double x,
                                                         double y,
                                                         double *rho,
                                                         double *theta);

Converts cartesion coordinates to polar coordinates.

x : cartesian coordinate
y : cartesian coordinate
rho : polar coordinate
theta : polar coordinate

go_geometry_point_to_segment ()

double              go_geometry_point_to_segment        (double xp,
                                                         double yp,
                                                         double xs,
                                                         double ys,
                                                         double w,
                                                         double h);

Computes the distance between a point and a segment.

xp : point coordinate
yp : point coordinate
xs : segment start coordinate
ys : segment start coordinate
w : extent of segment
h : extent of segment
Returns :

go_geometry_AABR_add ()

void                go_geometry_AABR_add                (GOGeometryAABR *aabr0,
                                                         GOGeometryAABR const *aabr1);

Computes the Axis Aligned Bounding Rectangle of aabr0 and aabr1, and stores result in aabr0.

aabr0 : a GOGeometryAABR
aabr1 : a GOGeometryAABR

go_geometry_OBR_to_AABR ()

void                go_geometry_OBR_to_AABR             (GOGeometryOBR const *obr,
                                                         GOGeometryAABR *aabr);

Stores Axis Aligned Bouding Rectangle of obr in aabr.

obr : a GOGeometryOBR
aabr : a GOGeometryAABR

go_geometry_test_OBR_overlap ()

gboolean            go_geometry_test_OBR_overlap        (GOGeometryOBR const *obr0,
                                                         GOGeometryOBR const *obr1);

Overlap test of Oriented Bounding Rectangles by the separating axis method.

obr0 : a GOGeometryOBR
obr1 : a GOGeometryOBR
Returns : TRUE if OOBRs overlap

go_geometry_get_rotation_type ()

GOGeometryRotationType go_geometry_get_rotation_type    (double alpha);

Calculates rotation type for handling of special angles (alpha = n * pi / 2)

alpha : angle in radians
Returns : a GOGeometryRotationType

go_geometry_calc_label_position ()

GOGeometrySide      go_geometry_calc_label_position     (GOGeometryOBR *obr,
                                                         double alpha,
                                                         double offset,
                                                         GOGeometrySide side,
                                                         GOGeometrySide anchor);

Convenience routine that computes position of a label relative to an axis.

obr : bounding rectangle of label
alpha : angle of axis
offset : minimum distance between label and axis
side : side of label with respect to axis
anchor : where to anchor the label
Returns : the computed anchor if anchor == GO_SIDE_AUTO, or anchor value.