2013-07-28 22:08:34 +00:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Anything relating to plane polygons and triangles, and (generally, non-
|
|
|
|
// planar) meshes thereof.
|
|
|
|
//
|
|
|
|
// Copyright 2008-2013 Jonathan Westhues.
|
|
|
|
//-----------------------------------------------------------------------------
|
2008-04-23 07:29:19 +00:00
|
|
|
|
|
|
|
#ifndef __POLYGON_H
|
|
|
|
#define __POLYGON_H
|
|
|
|
|
2009-07-07 08:21:59 +00:00
|
|
|
class SPointList;
|
2008-04-25 07:04:09 +00:00
|
|
|
class SPolygon;
|
2008-06-21 10:18:20 +00:00
|
|
|
class SContour;
|
2008-05-22 10:28:28 +00:00
|
|
|
class SMesh;
|
2008-05-24 10:34:06 +00:00
|
|
|
class SBsp3;
|
2016-03-14 16:14:24 +00:00
|
|
|
class SOutlineList;
|
2008-04-25 07:04:09 +00:00
|
|
|
|
2008-04-24 06:22:16 +00:00
|
|
|
class SEdge {
|
2008-04-23 07:29:19 +00:00
|
|
|
public:
|
2008-04-25 07:04:09 +00:00
|
|
|
int tag;
|
2009-01-25 11:52:29 +00:00
|
|
|
int auxA, auxB;
|
2008-04-24 06:22:16 +00:00
|
|
|
Vector a, b;
|
2008-05-30 08:01:19 +00:00
|
|
|
|
|
|
|
static SEdge From(Vector a, Vector b);
|
2016-05-21 05:18:00 +00:00
|
|
|
bool EdgeCrosses(Vector a, Vector b, Vector *pi=NULL, SPointList *spl=NULL) const;
|
2008-04-24 06:22:16 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class SEdgeList {
|
|
|
|
public:
|
2009-01-13 06:56:05 +00:00
|
|
|
List<SEdge> l;
|
2008-04-24 06:22:16 +00:00
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
void Clear();
|
2009-01-25 11:52:29 +00:00
|
|
|
void AddEdge(Vector a, Vector b, int auxA=0, int auxB=0);
|
2016-05-21 05:18:00 +00:00
|
|
|
bool AssemblePolygon(SPolygon *dest, SEdge *errorAt, bool keepDir=false) const;
|
2008-06-21 10:18:20 +00:00
|
|
|
bool AssembleContour(Vector first, Vector last, SContour *dest,
|
2016-05-21 05:18:00 +00:00
|
|
|
SEdge *errorAt, bool keepDir) const;
|
2009-07-07 08:21:59 +00:00
|
|
|
int AnyEdgeCrossings(Vector a, Vector b,
|
2016-05-21 05:18:00 +00:00
|
|
|
Vector *pi=NULL, SPointList *spl=NULL) const;
|
|
|
|
bool ContainsEdgeFrom(const SEdgeList *sel) const;
|
|
|
|
bool ContainsEdge(const SEdge *se) const;
|
2016-05-05 05:54:05 +00:00
|
|
|
void CullExtraneousEdges();
|
2009-04-08 04:54:07 +00:00
|
|
|
void MergeCollinearSegments(Vector a, Vector b);
|
2008-04-25 07:04:09 +00:00
|
|
|
};
|
|
|
|
|
2009-11-09 11:51:38 +00:00
|
|
|
// A kd-tree element needs to go on a side of a node if it's when KDTREE_EPS
|
|
|
|
// of the boundary. So increasing this number never breaks anything, but may
|
|
|
|
// result in more duplicated elements. So it's conservative to be sloppy here.
|
|
|
|
#define KDTREE_EPS (20*LENGTH_EPS)
|
|
|
|
|
|
|
|
class SEdgeLl {
|
|
|
|
public:
|
|
|
|
SEdge *se;
|
|
|
|
SEdgeLl *next;
|
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
static SEdgeLl *Alloc();
|
2009-11-09 11:51:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class SKdNodeEdges {
|
|
|
|
public:
|
|
|
|
int which; // whether c is x, y, or z
|
|
|
|
double c;
|
|
|
|
SKdNodeEdges *gt;
|
|
|
|
SKdNodeEdges *lt;
|
|
|
|
|
|
|
|
SEdgeLl *edges;
|
|
|
|
|
|
|
|
static SKdNodeEdges *From(SEdgeList *sel);
|
|
|
|
static SKdNodeEdges *From(SEdgeLl *sell);
|
2016-05-05 05:54:05 +00:00
|
|
|
static SKdNodeEdges *Alloc();
|
2009-11-09 11:51:38 +00:00
|
|
|
int AnyEdgeCrossings(Vector a, Vector b, int cnt,
|
2016-05-21 05:18:00 +00:00
|
|
|
Vector *pi=NULL, SPointList *spl=NULL) const;
|
2009-11-09 11:51:38 +00:00
|
|
|
};
|
|
|
|
|
2008-04-25 07:04:09 +00:00
|
|
|
class SPoint {
|
|
|
|
public:
|
|
|
|
int tag;
|
2009-01-21 05:04:38 +00:00
|
|
|
|
2013-09-09 19:50:32 +00:00
|
|
|
enum {
|
|
|
|
UNKNOWN = 0,
|
|
|
|
NOT_EAR = 1,
|
|
|
|
EAR = 2
|
|
|
|
};
|
2009-01-21 05:04:38 +00:00
|
|
|
int ear;
|
|
|
|
|
2008-04-25 07:04:09 +00:00
|
|
|
Vector p;
|
2009-06-21 09:02:36 +00:00
|
|
|
Vector auxv;
|
2008-04-23 07:29:19 +00:00
|
|
|
};
|
|
|
|
|
2009-06-19 07:56:33 +00:00
|
|
|
class SPointList {
|
|
|
|
public:
|
|
|
|
List<SPoint> l;
|
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
void Clear();
|
2016-05-21 05:18:00 +00:00
|
|
|
bool ContainsPoint(Vector pt) const;
|
|
|
|
int IndexForPoint(Vector pt) const;
|
2009-06-27 05:53:56 +00:00
|
|
|
void IncrementTagFor(Vector pt);
|
2009-06-19 07:56:33 +00:00
|
|
|
void Add(Vector pt);
|
|
|
|
};
|
|
|
|
|
2008-04-23 07:29:19 +00:00
|
|
|
class SContour {
|
|
|
|
public:
|
2009-01-19 03:33:15 +00:00
|
|
|
int tag;
|
2009-01-21 05:04:38 +00:00
|
|
|
int timesEnclosed;
|
2009-01-22 10:02:46 +00:00
|
|
|
Vector xminPt;
|
2009-01-13 06:56:05 +00:00
|
|
|
List<SPoint> l;
|
2008-05-02 10:54:22 +00:00
|
|
|
|
2008-06-21 10:18:20 +00:00
|
|
|
void AddPoint(Vector p);
|
2016-05-21 05:18:00 +00:00
|
|
|
void MakeEdgesInto(SEdgeList *el) const;
|
2016-05-05 05:54:05 +00:00
|
|
|
void Reverse();
|
2016-05-21 05:18:00 +00:00
|
|
|
Vector ComputeNormal() const;
|
|
|
|
double SignedAreaProjdToNormal(Vector n) const;
|
|
|
|
bool IsClockwiseProjdToNormal(Vector n) const;
|
|
|
|
bool ContainsPointProjdToNormal(Vector n, Vector p) const;
|
|
|
|
void OffsetInto(SContour *dest, double r) const;
|
|
|
|
void CopyInto(SContour *dest) const;
|
2016-05-05 05:54:05 +00:00
|
|
|
void FindPointWithMinX();
|
2016-05-21 05:18:00 +00:00
|
|
|
Vector AnyEdgeMidpoint() const;
|
2009-01-21 05:04:38 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
bool IsEar(int bp, double scaledEps) const;
|
2009-01-21 05:04:38 +00:00
|
|
|
bool BridgeToContour(SContour *sc, SEdgeList *el, List<Vector> *vl);
|
2009-08-21 04:58:28 +00:00
|
|
|
void ClipEarInto(SMesh *m, int bp, double scaledEps);
|
2009-02-27 14:05:08 +00:00
|
|
|
void UvTriangulateInto(SMesh *m, SSurface *srf);
|
2008-04-23 07:29:19 +00:00
|
|
|
};
|
|
|
|
|
2008-06-26 07:28:29 +00:00
|
|
|
typedef struct {
|
Use C99 integer types and C++ boolean types/values
This change comprehensively replaces the use of Microsoft-standard integer
and boolean types with their C99/C++ standard equivalents, as the latter is
more appropriate for a cross-platform application. With matter-of-course
exceptions in the Win32-specific code, the types/values have been converted
as follows:
QWORD --> uint64_t
SQWORD --> int64_t
DWORD --> uint32_t
SDWORD --> int32_t
WORD --> uint16_t
SWORD --> int16_t
BYTE --> uint8_t
BOOL --> bool
TRUE --> true
FALSE --> false
The following related changes are also included:
* Added C99 integer type definitions for Windows, as stdint.h is not
available prior to Visual Studio 2010
* Changed types of some variables in the SolveSpace class from 'int' to
'bool', as they actually represent boolean settings
* Implemented new Cnf{Freeze,Thaw}Bool() functions to support boolean
variables in the Registry
* Cnf{Freeze,Thaw}DWORD() are now Cnf{Freeze,Thaw}Int()
* TtfFont::Get{WORD,DWORD}() are now TtfFont::Get{USHORT,ULONG}() (names
inspired by the OpenType spec)
* RGB colors are packed into an integer of type uint32_t (nee DWORD), but
in a few places, these were represented by an int; these have been
corrected to uint32_t
2013-10-02 05:45:13 +00:00
|
|
|
uint32_t face;
|
2015-07-10 11:54:39 +00:00
|
|
|
RgbaColor color;
|
2008-06-26 07:28:29 +00:00
|
|
|
} STriMeta;
|
|
|
|
|
2008-04-24 06:22:16 +00:00
|
|
|
class SPolygon {
|
|
|
|
public:
|
2009-01-13 06:56:05 +00:00
|
|
|
List<SContour> l;
|
2008-05-05 09:47:23 +00:00
|
|
|
Vector normal;
|
2008-04-25 07:04:09 +00:00
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
Vector ComputeNormal();
|
|
|
|
void AddEmptyContour();
|
2016-05-21 05:18:00 +00:00
|
|
|
int WindingNumberForPoint(Vector p) const;
|
|
|
|
double SignedArea() const;
|
|
|
|
bool ContainsPoint(Vector p) const;
|
|
|
|
void MakeEdgesInto(SEdgeList *el) const;
|
2016-05-05 05:54:05 +00:00
|
|
|
void FixContourDirections();
|
|
|
|
void Clear();
|
2016-05-21 05:18:00 +00:00
|
|
|
bool SelfIntersecting(Vector *intersectsAt) const;
|
|
|
|
bool IsEmpty() const;
|
|
|
|
Vector AnyPoint() const;
|
|
|
|
void OffsetInto(SPolygon *dest, double r) const;
|
2009-02-27 14:05:08 +00:00
|
|
|
void UvTriangulateInto(SMesh *m, SSurface *srf);
|
2009-05-08 08:33:04 +00:00
|
|
|
void UvGridTriangulateInto(SMesh *m, SSurface *srf);
|
2008-05-21 03:58:14 +00:00
|
|
|
};
|
2008-05-19 09:23:49 +00:00
|
|
|
|
2008-05-21 03:58:14 +00:00
|
|
|
class STriangle {
|
|
|
|
public:
|
2008-05-30 06:09:41 +00:00
|
|
|
int tag;
|
|
|
|
STriMeta meta;
|
|
|
|
Vector a, b, c;
|
2009-01-19 10:37:10 +00:00
|
|
|
Vector an, bn, cn;
|
2008-05-23 10:05:07 +00:00
|
|
|
|
2008-05-30 06:09:41 +00:00
|
|
|
static STriangle From(STriMeta meta, Vector a, Vector b, Vector c);
|
2016-05-21 05:18:00 +00:00
|
|
|
Vector Normal() const;
|
2016-05-05 05:54:05 +00:00
|
|
|
void FlipNormal();
|
2016-05-21 05:18:00 +00:00
|
|
|
double MinAltitude() const;
|
|
|
|
int WindingNumberForPoint(Vector p) const;
|
|
|
|
bool ContainsPoint(Vector p) const;
|
|
|
|
bool ContainsPointProjd(Vector n, Vector p) const;
|
2008-05-21 03:58:14 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class SBsp2 {
|
2008-05-22 10:28:28 +00:00
|
|
|
public:
|
2008-05-24 10:34:06 +00:00
|
|
|
Vector np; // normal to the plane
|
|
|
|
|
|
|
|
Vector no; // outer normal to the edge
|
|
|
|
double d;
|
2008-05-21 03:58:14 +00:00
|
|
|
SEdge edge;
|
2008-05-19 09:23:49 +00:00
|
|
|
|
2008-05-22 10:28:28 +00:00
|
|
|
SBsp2 *pos;
|
|
|
|
SBsp2 *neg;
|
|
|
|
|
|
|
|
SBsp2 *more;
|
2008-05-23 10:05:07 +00:00
|
|
|
|
2013-09-09 19:50:32 +00:00
|
|
|
enum { POS = 100, NEG = 101, COPLANAR = 200 };
|
2008-05-24 23:10:00 +00:00
|
|
|
void InsertTriangleHow(int how, STriangle *tr, SMesh *m, SBsp3 *bsp3);
|
|
|
|
void InsertTriangle(STriangle *tr, SMesh *m, SBsp3 *bsp3);
|
2016-05-21 05:18:00 +00:00
|
|
|
Vector IntersectionWith(Vector a, Vector b) const;
|
2016-03-25 14:16:58 +00:00
|
|
|
void InsertEdge(SEdge *nedge, Vector nnp, Vector out);
|
2016-05-21 05:18:00 +00:00
|
|
|
static SBsp2 *InsertOrCreateEdge(SBsp2 *where, SEdge *nedge,
|
|
|
|
Vector nnp, Vector out);
|
2016-05-05 05:54:05 +00:00
|
|
|
static SBsp2 *Alloc();
|
2008-05-24 10:34:06 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
void DebugDraw(Vector n, double d) const;
|
2008-04-24 06:22:16 +00:00
|
|
|
};
|
|
|
|
|
2008-05-21 03:58:14 +00:00
|
|
|
class SBsp3 {
|
2008-04-23 07:29:19 +00:00
|
|
|
public:
|
2008-05-23 10:05:07 +00:00
|
|
|
Vector n;
|
|
|
|
double d;
|
|
|
|
|
2008-05-21 03:58:14 +00:00
|
|
|
STriangle tri;
|
|
|
|
SBsp3 *pos;
|
|
|
|
SBsp3 *neg;
|
2008-05-19 09:23:49 +00:00
|
|
|
|
2008-05-21 03:58:14 +00:00
|
|
|
SBsp3 *more;
|
|
|
|
|
|
|
|
SBsp2 *edges;
|
2008-05-23 10:05:07 +00:00
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
static SBsp3 *Alloc();
|
2008-05-23 10:05:07 +00:00
|
|
|
static SBsp3 *FromMesh(SMesh *m);
|
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
Vector IntersectionWith(Vector a, Vector b) const;
|
2008-05-23 10:05:07 +00:00
|
|
|
|
2013-09-09 19:50:32 +00:00
|
|
|
enum { POS = 100, NEG = 101, COPLANAR = 200 };
|
2008-05-24 23:10:00 +00:00
|
|
|
void InsertHow(int how, STriangle *str, SMesh *instead);
|
2016-03-25 14:16:58 +00:00
|
|
|
void Insert(STriangle *str, SMesh *instead);
|
|
|
|
static SBsp3 *InsertOrCreate(SBsp3 *where, STriangle *str, SMesh *instead);
|
2008-05-23 10:05:07 +00:00
|
|
|
|
2008-05-30 06:09:41 +00:00
|
|
|
void InsertConvexHow(int how, STriMeta meta, Vector *vertex, int n,
|
|
|
|
SMesh *instead);
|
|
|
|
SBsp3 *InsertConvex(STriMeta meta, Vector *vertex, int n, SMesh *instead);
|
2008-05-24 23:10:00 +00:00
|
|
|
|
|
|
|
void InsertInPlane(bool pos2, STriangle *tr, SMesh *m);
|
2008-05-24 10:34:06 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
void GenerateInPaintOrder(SMesh *m) const;
|
2009-03-17 16:33:46 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
void DebugDraw() const;
|
2008-05-21 03:58:14 +00:00
|
|
|
};
|
2008-05-19 09:23:49 +00:00
|
|
|
|
2008-05-21 03:58:14 +00:00
|
|
|
class SMesh {
|
|
|
|
public:
|
2009-01-13 06:56:05 +00:00
|
|
|
List<STriangle> l;
|
2008-05-22 10:28:28 +00:00
|
|
|
|
2008-05-24 23:10:00 +00:00
|
|
|
bool flipNormal;
|
|
|
|
bool keepCoplanar;
|
|
|
|
bool atLeastOneDiscarded;
|
2015-03-26 10:30:12 +00:00
|
|
|
bool isTransparent;
|
2008-05-24 23:10:00 +00:00
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
void Clear();
|
2016-05-21 05:18:00 +00:00
|
|
|
void AddTriangle(const STriangle *st);
|
2008-05-30 06:09:41 +00:00
|
|
|
void AddTriangle(STriMeta meta, Vector a, Vector b, Vector c);
|
2016-05-21 05:18:00 +00:00
|
|
|
void AddTriangle(STriMeta meta, Vector n,
|
|
|
|
Vector a, Vector b, Vector c);
|
|
|
|
void DoBounding(Vector v, Vector *vmax, Vector *vmin) const;
|
|
|
|
void GetBounding(Vector *vmax, Vector *vmin) const;
|
2008-05-24 23:10:00 +00:00
|
|
|
|
2008-05-26 03:39:45 +00:00
|
|
|
void Simplify(int start);
|
|
|
|
|
2008-05-24 23:10:00 +00:00
|
|
|
void AddAgainstBsp(SMesh *srcm, SBsp3 *bsp3);
|
2009-05-24 11:37:07 +00:00
|
|
|
void MakeFromUnionOf(SMesh *a, SMesh *b);
|
|
|
|
void MakeFromDifferenceOf(SMesh *a, SMesh *b);
|
|
|
|
|
|
|
|
void MakeFromCopyOf(SMesh *a);
|
2016-05-21 05:18:00 +00:00
|
|
|
void MakeFromTransformationOf(SMesh *a, Vector trans,
|
|
|
|
Quaternion q, double scale);
|
2009-05-24 11:37:07 +00:00
|
|
|
void MakeFromAssemblyOf(SMesh *a, SMesh *b);
|
|
|
|
|
2009-05-28 07:07:54 +00:00
|
|
|
void MakeEdgesInPlaneInto(SEdgeList *sel, Vector n, double d);
|
2016-03-14 16:14:24 +00:00
|
|
|
void MakeCertainEdgesAndOutlinesInto(SEdgeList *sel, SOutlineList *sol, int type);
|
2009-05-28 07:07:54 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
bool IsEmpty() const;
|
2009-05-24 11:37:07 +00:00
|
|
|
void RemapFaces(Group *g, int remap);
|
2008-06-02 03:31:37 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
uint32_t FirstIntersectionWith(Point2d mp) const;
|
2008-04-23 07:29:19 +00:00
|
|
|
};
|
|
|
|
|
2008-05-27 09:52:36 +00:00
|
|
|
// A linked list of triangles
|
|
|
|
class STriangleLl {
|
|
|
|
public:
|
2008-06-30 09:34:03 +00:00
|
|
|
STriangle *tri;
|
2008-05-27 09:52:36 +00:00
|
|
|
|
|
|
|
STriangleLl *next;
|
2008-07-06 07:56:24 +00:00
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
static STriangleLl *Alloc();
|
2008-05-27 09:52:36 +00:00
|
|
|
};
|
|
|
|
|
2016-03-14 16:14:24 +00:00
|
|
|
class SOutline {
|
|
|
|
public:
|
|
|
|
int tag;
|
|
|
|
Vector a, b, nl, nr;
|
2016-05-24 02:26:52 +00:00
|
|
|
|
|
|
|
bool IsVisible(Vector projDir) const;
|
2016-03-14 16:14:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class SOutlineList {
|
|
|
|
public:
|
|
|
|
List<SOutline> l;
|
|
|
|
|
|
|
|
void Clear();
|
|
|
|
void AddEdge(Vector a, Vector b, Vector nl, Vector nr);
|
|
|
|
|
|
|
|
void MakeFromCopyOf(SOutlineList *ol);
|
|
|
|
};
|
|
|
|
|
2008-07-06 07:56:24 +00:00
|
|
|
class SKdNode {
|
2008-05-27 09:52:36 +00:00
|
|
|
public:
|
2016-03-22 05:03:12 +00:00
|
|
|
struct EdgeOnInfo {
|
|
|
|
int count;
|
|
|
|
bool frontFacing;
|
|
|
|
bool intersectsMesh;
|
2016-03-22 10:52:09 +00:00
|
|
|
STriangle *tr;
|
|
|
|
int ai;
|
|
|
|
int bi;
|
2016-03-22 05:03:12 +00:00
|
|
|
};
|
|
|
|
|
2009-11-09 11:51:38 +00:00
|
|
|
int which; // whether c is x, y, or z
|
2008-05-27 09:52:36 +00:00
|
|
|
double c;
|
|
|
|
|
2008-07-06 07:56:24 +00:00
|
|
|
SKdNode *gt;
|
|
|
|
SKdNode *lt;
|
2008-05-27 09:52:36 +00:00
|
|
|
|
2008-06-30 09:34:03 +00:00
|
|
|
STriangleLl *tris;
|
2008-07-06 07:56:24 +00:00
|
|
|
|
2016-05-05 05:54:05 +00:00
|
|
|
static SKdNode *Alloc();
|
2008-07-06 07:56:24 +00:00
|
|
|
static SKdNode *From(SMesh *m);
|
2009-11-09 11:51:38 +00:00
|
|
|
static SKdNode *From(STriangleLl *tll);
|
2008-07-06 07:56:24 +00:00
|
|
|
|
|
|
|
void AddTriangle(STriangle *tr);
|
2016-05-21 05:18:00 +00:00
|
|
|
void MakeMeshInto(SMesh *m) const;
|
|
|
|
void ListTrianglesInto(std::vector<STriangle *> *tl) const;
|
|
|
|
void ClearTags() const;
|
2009-05-22 10:02:02 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
void FindEdgeOn(Vector a, Vector b, int cnt, bool coplanarIsInter, EdgeOnInfo *info) const;
|
2013-09-09 19:50:32 +00:00
|
|
|
enum {
|
|
|
|
NAKED_OR_SELF_INTER_EDGES = 100,
|
|
|
|
SELF_INTER_EDGES = 200,
|
|
|
|
TURNING_EDGES = 300,
|
2016-03-22 10:52:09 +00:00
|
|
|
EMPHASIZED_EDGES = 400,
|
|
|
|
SHARP_EDGES = 500,
|
2013-09-09 19:50:32 +00:00
|
|
|
};
|
2009-05-29 05:40:17 +00:00
|
|
|
void MakeCertainEdgesInto(SEdgeList *sel, int how, bool coplanarIsInter,
|
2016-05-21 05:18:00 +00:00
|
|
|
bool *inter, bool *leaky, int auxA = 0) const;
|
|
|
|
void MakeOutlinesInto(SOutlineList *sel) const;
|
2009-03-17 16:33:46 +00:00
|
|
|
|
2016-05-21 05:18:00 +00:00
|
|
|
void OcclusionTestLine(SEdge orig, SEdgeList *sel, int cnt, bool removeHidden) const;
|
|
|
|
void SplitLinesAgainstTriangle(SEdgeList *sel, STriangle *tr, bool removeHidden) const;
|
2009-05-28 07:07:54 +00:00
|
|
|
|
|
|
|
void SnapToMesh(SMesh *m);
|
|
|
|
void SnapToVertex(Vector v, SMesh *extras);
|
2008-05-27 09:52:36 +00:00
|
|
|
};
|
|
|
|
|
2008-04-23 07:29:19 +00:00
|
|
|
#endif
|
2008-04-24 06:22:16 +00:00
|
|
|
|