pcb 4.1.1
An interactive printed circuit board layout editor.

boolean.c File Reference

#include <math.h>
#include "gts.h"
Include dependency graph for boolean.c:

Go to the source code of this file.

Data Structures

struct  _EdgeInter
struct  _Ear

Defines

#define EDGE_INTER(obj)
#define IS_EDGE_INTER(obj)
#define UPDATE_ORIENTATION
#define IS_SET(s, f)   ((GTS_OBJECT_FLAGS (s) & (f)) != 0)
#define SET(s, f)   (GTS_OBJECT_FLAGS (s) |= (f))
#define UNSET(s, f)   (GTS_OBJECT_FLAGS (s) &= ~(f))
#define NEXT(s)   (GTS_OBJECT (s)->reserved)
#define ORIENTATION(p1, p2, p3, o)   (gts_point_orientation_3d (p1, p2, o, p3))
#define ORIENTATION_SOS(p1, p2, p3, o)   (gts_point_orientation_3d_sos (p1, p2, o, p3))
#define ORIENTED_VERTICES(s, next, w1, w2)

Typedefs

typedef struct _EdgeInter EdgeInter
typedef struct _Ear Ear

Enumerations

enum  CurveFlag { INTERIOR = 1 << (GTS_USER_FLAG), RELEVANT = 1 << (GTS_USER_FLAG + 1) }

Functions

static void surface_inter_destroy (GtsObject *object)
static void surface_inter_class_init (GtsObjectClass *klass)
static void surface_inter_init (GtsSurfaceInter *si)
GtsSurfaceInterClassgts_surface_inter_class (void)
static GtsEdgeClassedge_inter_class (void)
static EdgeInteredge_inter_new (GtsVertex *v1, GtsVertex *v2, GtsTriangle *t1, GtsTriangle *t2)
static GtsPointsegment_triangle_intersection (GtsSegment *s, GtsTriangle *t, GtsPointClass *klass)
static gint triangle_triangle_orientation (GtsPoint *p1, GtsPoint *p2, GtsPoint *p3, GtsPoint *p4, GtsPoint *p5, GtsPoint *p6)
static gint triangle_point_orientation (GtsTriangle *t1, GtsTriangle *t2, gint o1, GtsPoint *p)
static void add_edge_inter (GtsEdge *e, GtsTriangle *t, GtsVertex *v)
static GtsVertexintersects (GtsEdge *e, GtsTriangle *t, GtsSurface *s)
static gint intersection_orientation (GtsTriangle *t1, GtsEdge *e, GtsTriangle *t2)
static void intersect_edges (GtsBBox *bb1, GtsBBox *bb2, GtsSurfaceInter *si)
static GtsSurfaceIntersurface_inter_new (GtsSurfaceInterClass *klass, GtsSurface *s1, GtsSurface *s2, GNode *faces_tree1, GNode *faces_tree2)
static void free_slist (GtsObject *o)
static void free_glist (GtsObject *o)
GSList * gts_surface_intersection (GtsSurface *s1, GtsSurface *s2, GNode *faces_tree1, GNode *faces_tree2)
static GtsSegmentprev_flag (GtsSegment *s, CurveFlag flag)
static GtsSegmentnext_flag (GtsSegment *s, CurveFlag flag)
static GtsSegmentnext_interior (GtsVertex *v)
static GtsSegmentprev_interior (GtsVertex *v)
static GtsSegmentreverse (GtsSegment *start, gboolean interior, gboolean *isloop)
static GSList * interior_loops (GSList *interior)
static GtsSegmentsegment_intersects (GtsPoint *p1, GtsPoint *p2, GSList *i, GtsPoint *o)
static gboolean is_inside_wedge (GtsSegment *s1, GtsSegment *s2, GtsPoint *p, GtsPoint *o)
static GtsSegmentconnection (GtsPoint *p, GSList *interior, GSList *bloops, GtsPoint *o)
static gdouble loop_orientation (GtsSegment *start, GtsPoint *p, GtsPoint *o)
static void connect_interior_loop (GtsSegment *start, GSList **interior, GSList **bloops, GtsSurface *surface, GtsPoint *o)
static GSList * boundary_loops (GSList *boundary)
static gboolean point_in_wedge (GtsPoint *p1, GtsPoint *p2, GtsPoint *p3, GtsPoint *p, gboolean closed, GtsPoint *o)
static gboolean segment_intersects1 (GtsPoint *p1, GtsPoint *p2, GtsPoint *p3, GtsPoint *p4, gboolean closed, GtsPoint *o)
static GtsSegmenttriangle_intersects_segments (GtsPoint *p1, GtsPoint *p2, GtsPoint *p3, gboolean closed, GtsSegment *start, GtsPoint *o)
static gboolean new_ear (GtsSegment *s, Ear *e, GtsSegment *start, guint sloppy, GtsPoint *o)
static void triangulate_loop (GtsSegment *start, GtsSurface *surface, GtsPoint *o)
static void merge_duplicate (GtsEdge *e)
static void triangulate_boundary_interior (GSList *boundary, GSList *interior, GtsSurface *s, GtsPoint *o)
static void create_edges (GtsSegment *s, GtsSurface *surface)
static void add_boundary (GtsSegment *s, GtsSegment *next, GSList **boundary)
static void triangulate_face (GtsTriangle *t, GtsSurface *surface)
static void free_edge_list (GtsObject *o)
GtsSurfaceIntergts_surface_inter_new (GtsSurfaceInterClass *klass, GtsSurface *s1, GtsSurface *s2, GNode *faces_tree1, GNode *faces_tree2, gboolean is_open1, gboolean is_open2)
static void check_surface_edge (GtsEdge *e, gpointer *data)
static void mark_edge (GtsObject *o, gpointer data)
static gint triangle_orientation (GtsTriangle *t, GtsEdge *e)
static gboolean check_orientation (GtsEdge *e, GtsSurface *s)
static void check_edge (GtsSegment *s, gpointer *data)
gboolean gts_surface_inter_check (GtsSurfaceInter *si, gboolean *closed)
static GtsFacenext_compatible_face (GtsEdge *e, GtsFace *f, GtsSurface *s1, GtsSurface *s2)
static void walk_faces (GtsEdge *e, GtsFace *f, GtsSurface *s1, GtsSurface *s2, GtsSurface *s)
void gts_surface_inter_boolean (GtsSurfaceInter *si, GtsSurface *surface, GtsBooleanOperation op)
static void self_intersecting (GtsBBox *bb1, GtsBBox *bb2, gpointer *d)
gboolean gts_surface_foreach_intersecting_face (GtsSurface *s, GtsBBTreeTraverseFunc func, gpointer data)
static void add_intersecting (GtsBBox *bb1, GtsBBox *bb2, GtsSurface *intersected)
GtsSurfacegts_surface_is_self_intersecting (GtsSurface *s)

Define Documentation

#define EDGE_INTER (   obj)
Value:

Definition at line 95 of file boolean.c.

Referenced by edge_inter_new(), and reverse().

#define IS_EDGE_INTER (   obj)
Value:

Definition at line 98 of file boolean.c.

Referenced by reverse().

#define IS_SET (   s,
  f 
)    ((GTS_OBJECT_FLAGS (s) & (f)) != 0)
#define NEXT (   s)    (GTS_OBJECT (s)->reserved)
#define ORIENTATION (   p1,
  p2,
  p3,
 
)    (gts_point_orientation_3d (p1, p2, o, p3))

Definition at line 883 of file boolean.c.

Referenced by is_inside_wedge(), loop_orientation(), new_ear(), and point_in_wedge().

#define ORIENTATION_SOS (   p1,
  p2,
  p3,
 
)    (gts_point_orientation_3d_sos (p1, p2, o, p3))

Definition at line 884 of file boolean.c.

Referenced by segment_intersects(), and segment_intersects1().

#define ORIENTED_VERTICES (   s,
  next,
  w1,
  w2 
)
Value:
{\
  if ((s)->v1 == (next)->v1 || (s)->v1 == (next)->v2) {\
    w1 = (s)->v2;\
    w2 = (s)->v1;\
  }\
  else {\
    w1 = (s)->v1;\
    w2 = (s)->v2;\
  }\
}

Definition at line 886 of file boolean.c.

Referenced by is_inside_wedge(), loop_orientation(), and new_ear().

#define SET (   s,
  f 
)    (GTS_OBJECT_FLAGS (s) |= (f))

Definition at line 543 of file boolean.c.

Referenced by interior_loops(), reverse(), and triangulate_boundary_interior().

#define UNSET (   s,
  f 
)    (GTS_OBJECT_FLAGS (s) &= ~(f))

Definition at line 544 of file boolean.c.

Referenced by boundary_loops(), interior_loops(), and triangulate_loop().

#define UPDATE_ORIENTATION
Value:
if (o > 0) { vi2 = v; /* e2 = e; */ } else { vi2 = vi1;\
                                                                        /* e2 = e1; */\
                                                                        vi1 = v;\
                                                                        /* e1 = e; */ }

Definition at line 369 of file boolean.c.

Referenced by intersect_edges().


Typedef Documentation

typedef struct _Ear Ear

Definition at line 1105 of file boolean.c.

typedef struct _EdgeInter EdgeInter

Definition at line 87 of file boolean.c.


Enumeration Type Documentation

enum CurveFlag
Enumerator:
INTERIOR 
RELEVANT 

Definition at line 537 of file boolean.c.


Function Documentation

static void add_boundary ( GtsSegment s,
GtsSegment next,
GSList **  boundary 
) [static]

Definition at line 1476 of file boolean.c.

References GTS_OBJECT, _GtsSegment::v1, and _GtsSegment::v2.

Referenced by triangulate_face().

static void add_edge_inter ( GtsEdge e,
GtsTriangle t,
GtsVertex v 
) [static]

Definition at line 252 of file boolean.c.

References _GtsTriangle::e1, GTS_OBJECT, GTS_POINT, gts_point_orientation_3d_sos(), GTS_SEGMENT, gts_triangle_vertex, n, and triangle_point_orientation().

Referenced by intersects().

Here is the call graph for this function:

static void add_intersecting ( GtsBBox bb1,
GtsBBox bb2,
GtsSurface intersected 
) [static]

Definition at line 1968 of file boolean.c.

References _GtsBBox::bounded, and gts_surface_add_face().

Referenced by gts_surface_is_self_intersecting().

Here is the call graph for this function:

static GSList* boundary_loops ( GSList *  boundary) [static]

Definition at line 1061 of file boolean.c.

References INTERIOR, IS_SET, NEXT, next_interior(), prev_interior(), RELEVANT, UNSET, _GtsSegment::v1, and _GtsSegment::v2.

Referenced by triangulate_boundary_interior().

Here is the call graph for this function:

static void check_edge ( GtsSegment s,
gpointer *  data 
) [static]

Definition at line 1684 of file boolean.c.

References check_orientation(), FALSE, GTS_EDGE, GTS_OBJECT, ok, _GtsSurfaceInter::s1, _GtsSurfaceInter::s2, _GtsVertex::segments, _GtsSegment::v1, and _GtsSegment::v2.

Referenced by gts_surface_inter_check().

Here is the call graph for this function:

static gboolean check_orientation ( GtsEdge e,
GtsSurface s 
) [static]

Definition at line 1657 of file boolean.c.

References FALSE, gts_face_has_parent_surface(), GTS_IS_FACE, triangle_orientation(), _GtsEdge::triangles, and TRUE.

Referenced by check_edge().

Here is the call graph for this function:

static void check_surface_edge ( GtsEdge e,
gpointer *  data 
) [static]

Definition at line 1621 of file boolean.c.

References FALSE, gts_edge_face_number(), GTS_OBJECT, and ok.

Referenced by gts_surface_inter_check().

Here is the call graph for this function:

static void connect_interior_loop ( GtsSegment start,
GSList **  interior,
GSList **  bloops,
GtsSurface surface,
GtsPoint o 
) [static]

Definition at line 1015 of file boolean.c.

References c, connection(), _GtsSurface::edge_class, FALSE, gts_edge_new(), GTS_POINT, GTS_SEGMENT, loop_orientation(), NEXT, reverse(), s, and _GtsSegment::v2.

Referenced by triangulate_boundary_interior().

Here is the call graph for this function:

static GtsSegment* connection ( GtsPoint p,
GSList *  interior,
GSList *  bloops,
GtsPoint o 
) [static]
static void create_edges ( GtsSegment s,
GtsSurface surface 
) [static]

Definition at line 1456 of file boolean.c.

References _GtsSurface::edge_class, gts_edge_new(), GTS_OBJECT, _GtsSegment::v1, and _GtsSegment::v2.

Referenced by gts_surface_inter_new().

Here is the call graph for this function:

static GtsEdgeClass * edge_inter_class ( void  ) [static]

Definition at line 107 of file boolean.c.

References gts_constraint_class(), GTS_OBJECT_CLASS, and gts_object_class_new().

Referenced by edge_inter_new().

Here is the call graph for this function:

static EdgeInter * edge_inter_new ( GtsVertex v1,
GtsVertex v2,
GtsTriangle t1,
GtsTriangle t2 
) [static]

Definition at line 128 of file boolean.c.

References EDGE_INTER, edge_inter_class(), GTS_EDGE_CLASS, and gts_edge_new().

Referenced by intersect_edges(), and reverse().

Here is the call graph for this function:

static void free_edge_list ( GtsObject o) [static]

Definition at line 1546 of file boolean.c.

References _GtsObject::reserved.

Referenced by gts_surface_inter_new().

static void free_glist ( GtsObject o) [static]

Definition at line 492 of file boolean.c.

References gts_object_reset_reserved(), and _GtsObject::reserved.

Referenced by gts_surface_intersection().

Here is the call graph for this function:

static void free_slist ( GtsObject o) [static]

Definition at line 486 of file boolean.c.

References _GtsObject::reserved.

Referenced by gts_surface_intersection().

gboolean gts_surface_foreach_intersecting_face ( GtsSurface s,
GtsBBTreeTraverseFunc  func,
gpointer  data 
)

gts_surface_foreach_intersecting_face: : a GtsSurface. : a GtsBBTreeTraverseFunc. : user data to pass to .

Calls for each intersecting pair of faces of .

Returns: TRUE if was called at least once, FALSE otherwise.

Definition at line 1945 of file boolean.c.

References FALSE, gts_bb_tree_destroy(), gts_bb_tree_surface(), gts_bb_tree_traverse_overlapping(), self_intersecting(), and TRUE.

Referenced by gts_surface_is_self_intersecting().

Here is the call graph for this function:

void gts_surface_inter_boolean ( GtsSurfaceInter si,
GtsSurface surface,
GtsBooleanOperation  op 
)
gboolean gts_surface_inter_check ( GtsSurfaceInter si,
gboolean *  closed 
)

gts_surface_inter_check: : a GtsSurfaceInter. : is set to TRUE if ->edges is a closed curve, FALSE otherwise.

Returns: TRUE if the curve described by is an orientable manifold, FALSE otherwise.

Definition at line 1732 of file boolean.c.

References check_edge(), check_surface_edge(), _GtsSurfaceInter::edges, FALSE, gts_object_reset_reserved(), gts_surface_foreach_edge(), mark_edge(), ok, _GtsSurfaceInter::s1, _GtsSurfaceInter::s2, and TRUE.

Here is the call graph for this function:

GtsSurfaceInterClass* gts_surface_inter_class ( void  )

gts_surface_inter_class:

Returns: the GtsSurfaceInterClass.

Definition at line 65 of file boolean.c.

References gts_object_class(), gts_object_class_new(), surface_inter_class_init(), and surface_inter_init().

Referenced by gts_surface_intersection(), and surface_inter_destroy().

Here is the call graph for this function:

GtsSurfaceInter* gts_surface_inter_new ( GtsSurfaceInterClass klass,
GtsSurface s1,
GtsSurface s2,
GNode *  faces_tree1,
GNode *  faces_tree2,
gboolean  is_open1,
gboolean  is_open2 
)

gts_surface_inter_new: : a GtsSurfaceInterClass. : a GtsSurface. : a GtsSurface. : a bounding box tree (see gts_bb_tree_new()) for the faces of . : a bounding box tree for the faces of . : whether is an "open" surface. : whether is an "open" surface.

When triangulating the cut faces, the new faces inherit the attributes of these original faces through their attributes() method.

Returns: a new GtsSurfaceInter describing the intersection of and .

Definition at line 1570 of file boolean.c.

References create_edges(), _GtsSurface::edge_class, _GtsSurface::face_class, free_edge_list(), GTS_OBJECT, gts_object_destroy(), gts_surface_class(), gts_surface_foreach_edge(), gts_surface_foreach_face(), gts_surface_new(), s, _GtsSurfaceInter::s1, _GtsSurfaceInter::s2, surface_inter_new(), triangulate_face(), and _GtsSurface::vertex_class.

Here is the call graph for this function:

GSList* gts_surface_intersection ( GtsSurface s1,
GtsSurface s2,
GNode *  faces_tree1,
GNode *  faces_tree2 
)

gts_surface_intersection: : a GtsSurface. : a GtsSurface. : a bounding box tree (see gts_bb_tree_new()) for the faces of . : a bounding box tree for the faces of .

Returns: a list of GtsEdge defining the curve intersection of the two surfaces.

Definition at line 510 of file boolean.c.

References _GtsSurfaceInter::edges, free_glist(), free_slist(), GTS_OBJECT, gts_object_destroy(), gts_surface_foreach_edge(), gts_surface_foreach_face(), gts_surface_inter_class(), _GtsSurfaceInter::s1, _GtsSurfaceInter::s2, and surface_inter_new().

Here is the call graph for this function:

GtsSurface* gts_surface_is_self_intersecting ( GtsSurface s)

gts_surface_is_self_intersecting: : a GtsSurface.

Returns: a new GtsSurface containing the faces of which are self-intersecting or NULL if no faces of are self-intersecting.

Definition at line 1982 of file boolean.c.

References add_intersecting(), _GtsSurface::edge_class, _GtsSurface::face_class, GTS_OBJECT, gts_object_destroy(), GTS_SURFACE_CLASS, gts_surface_foreach_intersecting_face(), gts_surface_new(), and _GtsSurface::vertex_class.

Here is the call graph for this function:

static GSList* interior_loops ( GSList *  interior) [static]

Definition at line 833 of file boolean.c.

References INTERIOR, IS_SET, NEXT, next_flag(), prev_flag(), RELEVANT, reverse(), s, SET, TRUE, UNSET, and _GtsSegment::v1.

Referenced by triangulate_boundary_interior().

Here is the call graph for this function:

static gint intersection_orientation ( GtsTriangle t1,
GtsEdge e,
GtsTriangle t2 
) [static]

Definition at line 352 of file boolean.c.

References GTS_POINT, gts_point_orientation_3d_sos(), gts_triangle_vertices(), and gts_triangle_vertices_edges().

Referenced by intersect_edges().

Here is the call graph for this function:

static gboolean is_inside_wedge ( GtsSegment s1,
GtsSegment s2,
GtsPoint p,
GtsPoint o 
) [static]

Definition at line 951 of file boolean.c.

References FALSE, GTS_POINT, ORIENTATION, ORIENTED_VERTICES, TRUE, _GtsSegment::v1, and _GtsSegment::v2.

Referenced by connection().

static gdouble loop_orientation ( GtsSegment start,
GtsPoint p,
GtsPoint o 
) [static]

Definition at line 993 of file boolean.c.

References GTS_POINT, NEXT, ORIENTATION, and ORIENTED_VERTICES.

Referenced by connect_interior_loop().

static void mark_edge ( GtsObject o,
gpointer  data 
) [static]

Definition at line 1638 of file boolean.c.

References _GtsObject::reserved.

Referenced by gts_surface_inter_boolean(), and gts_surface_inter_check().

static void merge_duplicate ( GtsEdge e) [static]

Definition at line 1388 of file boolean.c.

References gts_edge_is_duplicate(), gts_edge_replace(), GTS_OBJECT, and gts_object_destroy().

Referenced by triangulate_boundary_interior().

Here is the call graph for this function:

static gboolean new_ear ( GtsSegment s,
Ear e,
GtsSegment start,
guint  sloppy,
GtsPoint o 
) [static]
static GtsFace* next_compatible_face ( GtsEdge e,
GtsFace f,
GtsSurface s1,
GtsSurface s2 
) [static]

Definition at line 1768 of file boolean.c.

References gts_edge_is_boundary(), gts_face_has_parent_surface(), GTS_IS_FACE, GTS_TRIANGLE, gts_triangles_are_compatible(), and _GtsEdge::triangles.

Referenced by walk_faces().

Here is the call graph for this function:

static GtsSegment* next_flag ( GtsSegment s,
CurveFlag  flag 
) [static]

Definition at line 756 of file boolean.c.

References IS_SET, _GtsVertex::segments, and _GtsSegment::v2.

Referenced by interior_loops().

static GtsSegment* next_interior ( GtsVertex v) [static]

Definition at line 768 of file boolean.c.

References INTERIOR, IS_SET, s, _GtsVertex::segments, and _GtsSegment::v1.

Referenced by boundary_loops().

static gboolean point_in_wedge ( GtsPoint p1,
GtsPoint p2,
GtsPoint p3,
GtsPoint p,
gboolean  closed,
GtsPoint o 
) [static]

Definition at line 1112 of file boolean.c.

References FALSE, ORIENTATION, and TRUE.

Referenced by triangle_intersects_segments().

static GtsSegment* prev_flag ( GtsSegment s,
CurveFlag  flag 
) [static]

Definition at line 744 of file boolean.c.

References IS_SET, _GtsVertex::segments, and _GtsSegment::v1.

Referenced by interior_loops().

static GtsSegment* prev_interior ( GtsVertex v) [static]

Definition at line 782 of file boolean.c.

References INTERIOR, IS_SET, s, _GtsVertex::segments, and _GtsSegment::v2.

Referenced by boundary_loops().

static GtsSegment* reverse ( GtsSegment start,
gboolean  interior,
gboolean *  isloop 
) [static]

Definition at line 796 of file boolean.c.

References EDGE_INTER, edge_inter_new(), FALSE, GTS_SEGMENT, INTERIOR, IS_EDGE_INTER, NEXT, s, SET, TRUE, _GtsSegment::v1, and _GtsSegment::v2.

Referenced by connect_interior_loop(), and interior_loops().

Here is the call graph for this function:

static GtsSegment* segment_intersects ( GtsPoint p1,
GtsPoint p2,
GSList *  i,
GtsPoint o 
) [static]

Definition at line 924 of file boolean.c.

References GTS_POINT, ORIENTATION_SOS, s, _GtsSegment::v1, and _GtsSegment::v2.

Referenced by connection().

static gboolean segment_intersects1 ( GtsPoint p1,
GtsPoint p2,
GtsPoint p3,
GtsPoint p4,
gboolean  closed,
GtsPoint o 
) [static]

Definition at line 1148 of file boolean.c.

References FALSE, ORIENTATION_SOS, and TRUE.

Referenced by triangle_intersects_segments().

static GtsPoint* segment_triangle_intersection ( GtsSegment s,
GtsTriangle t,
GtsPointClass klass 
) [static]
static void self_intersecting ( GtsBBox bb1,
GtsBBox bb2,
gpointer *  d 
) [static]
static void surface_inter_class_init ( GtsObjectClass klass) [static]

Definition at line 49 of file boolean.c.

References _GtsObjectClass::destroy, and surface_inter_destroy().

Referenced by gts_surface_inter_class().

Here is the call graph for this function:

static void surface_inter_destroy ( GtsObject object) [static]
static void surface_inter_init ( GtsSurfaceInter si) [static]

Definition at line 54 of file boolean.c.

References _GtsSurfaceInter::edges, _GtsSurfaceInter::s1, and _GtsSurfaceInter::s2.

Referenced by gts_surface_inter_class().

static GtsSurfaceInter* surface_inter_new ( GtsSurfaceInterClass klass,
GtsSurface s1,
GtsSurface s2,
GNode *  faces_tree1,
GNode *  faces_tree2 
) [static]
static GtsSegment* triangle_intersects_segments ( GtsPoint p1,
GtsPoint p2,
GtsPoint p3,
gboolean  closed,
GtsSegment start,
GtsPoint o 
) [static]

Definition at line 1166 of file boolean.c.

References GTS_POINT, NEXT, point_in_wedge(), s, segment_intersects1(), _GtsSegment::v1, and _GtsSegment::v2.

Referenced by new_ear().

Here is the call graph for this function:

static gint triangle_orientation ( GtsTriangle t,
GtsEdge e 
) [static]
static gint triangle_point_orientation ( GtsTriangle t1,
GtsTriangle t2,
gint  o1,
GtsPoint p 
) [static]

Definition at line 228 of file boolean.c.

References _GtsTriangle::e1, GTS_POINT, gts_point_orientation_3d_sos(), GTS_SEGMENT, gts_triangle_vertex, and triangle_triangle_orientation().

Referenced by add_edge_inter().

Here is the call graph for this function:

static gint triangle_triangle_orientation ( GtsPoint p1,
GtsPoint p2,
GtsPoint p3,
GtsPoint p4,
GtsPoint p5,
GtsPoint p6 
) [static]

Definition at line 205 of file boolean.c.

References gts_point_orientation_3d_sos().

Referenced by triangle_point_orientation().

Here is the call graph for this function:

static void triangulate_boundary_interior ( GSList *  boundary,
GSList *  interior,
GtsSurface s,
GtsPoint o 
) [static]

Definition at line 1397 of file boolean.c.

References boundary_loops(), connect_interior_loop(), INTERIOR, interior_loops(), merge_duplicate(), RELEVANT, SET, and triangulate_loop().

Referenced by triangulate_face().

Here is the call graph for this function:

static void triangulate_loop ( GtsSegment start,
GtsSurface surface,
GtsPoint o 
) [static]
static void walk_faces ( GtsEdge e,
GtsFace f,
GtsSurface s1,
GtsSurface s2,
GtsSurface s 
) [static]