10 #ifndef __GQ_PolyDelaunay_h__
11 #define __GQ_PolyDelaunay_h__
36 namespace GQ_PolyDelaunayImpl {
37 class gqTriangleSplitNode;
131 { myRemoveDuplicatePoints =
value; }
136 { myKeepBoundingTriangle =
value; }
140 { myRemoveOutsideConstraints =
value; }
144 { myNewConstraintPoints =
enabled; }
148 { myConstraintNewPointGroupName.harden(name); }
150 { myConstraintNewPointGroup = new_pt_grp; }
155 { myMaxNewPoints = maxNewPoints; }
160 { myMaxArea = maxArea; }
169 { myMinAngle = minAngle; }
173 void buildGeometry(
bool updatePointNormals =
true,
192 typedef std::pair<GA_Index,GA_Index> gqEdgePointIds;
193 typedef std::pair<gqEdgePointIds, GA_Primitive *> gqConstraint;
204 gqEdgePointIds myOnEdge;
218 enum gq_ChangeConstraintType
223 void changeConstraints(gq_ChangeConstraintType
type,
227 gqGBEdgeGroup &constrainedEdges,
228 gqJournal *journal)
const;
234 gqInsertStatus insertPoint(
int pid,
GQ_Edge *onEdge,
235 gqGBEdgeGroup &constrainedEdges,
238 void undoInsertPoint(
int pid, gqGBEdgeGroup &constrainedEdges,
239 const gqJournal &journal);
242 void flipEdge(
GQ_Edge &edge,
bool updateDAG);
248 gqGBEdgeGroup &constrainedEdges,
253 bool enforceConstraints(gqGBEdgeGroup &constrainedEdges);
255 void removeBoundingTriangle();
257 void removeOutsideEdges(
const gqGBEdgeGroup &constrainedEdges);
259 void removeHoles(
const gqGBEdgeGroup &constrainedEdges);
266 void eatEdges(gqEdgeQueue &
queue,
267 const gqGBEdgeGroup &constrainedEdges);
270 bool refine(gqGBEdgeGroup &constrainedEdges);
272 void calcFaceStats(
const GQ_Face &face,
274 const gqGBEdgeGroup *constrainedEdges,
276 bool isFaceTooLarge(
const GQ_Face &face)
const;
279 bool isFaceBad(
const GQ_Face &face,
280 const gqGBEdgeGroup &constrainedEdges)
const;
283 bool isEncroached(
const GQ_Edge &edge,
286 bool isEncroachedLeft(
const GQ_Edge &edge,
292 gqGBEdgeGroup &constrainedEdges,
294 bool isConstraintEdge);
297 gqGBEdgeGroup &constrainedEdges);
300 void splitConstraint(gqGBEdgeGroup &constrainedEdges,
303 gqJournal *journal)
const;
304 bool splitEncroachedEdges(gqGBEdgeGroup &constrainedEdges,
305 gqEdgeQueue &edgeQueue,
306 gqFaceQueue *faceQueuePtr);
307 void updateQueuesAfterNewPoint(
const GQ_Point &newPoint,
308 const gqGBEdgeGroup &constrainedEdges,
309 gqEdgeQueue &edgeQueue,
310 gqFaceQueue *faceQueue);
311 void deletePoint(
int pid, gqGBEdgeGroup &constrainedEdges,
312 gqEdgeQueue *edgeQueue,
313 gqFaceQueue *faceQueue);
322 bool myNewConstraintPoints;
326 bool myRemoveDuplicatePoints;
327 bool myKeepBoundingTriangle;
328 bool myRemoveOutsideConstraints;
329 fpreal myMaxArea, myMinAngle;
330 bool myHasBoundingTriangle;
void enableRefinement(bool enabled)
Allow refinement.
void setRemoveOutsideConstraints(bool value)
GLsizei const GLfloat * value
GQ_PolyDelaunayImpl::gqTriangleSplitNode gqTriangleSplitNode
void setMinAngle(fpreal minAngle)
void setRemoveDuplicatePoints(bool value)
GLenum GLenum GLsizei const GLuint GLboolean enabled
void setMaxNewPoints(int maxNewPoints)
GQ_PolyDelaunayImpl::gqFaceQueue gqFaceQueue
GQ_PolyDelaunayImpl::gqGBEdgeGroup gqGBEdgeGroup
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the queue
GLuint const GLchar * name
GQ_PolyDelaunayImpl::gqEdgeQueue gqEdgeQueue
void setConstraintNewPointGroupName(const UT_String &name)
void enableNewConstraintPoints(bool enabled)
void setMaxArea(fpreal maxArea)
void setKeepBoundingTriangle(bool value)
void setConstraintNewPointGroup(GA_PointGroup *new_pt_grp)
SIM_API const UT_StringHolder distance
GA_API const UT_StringHolder area