HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GU_EdgeUtils.h File Reference
#include "GU_API.h"
#include <GA/GA_Edge.h>
#include <GA/GA_EdgeSet.h>
#include <GA/GA_ElementWrangler.h>
#include <SYS/SYS_Deprecated.h>
#include <UT/UT_Map.h>
#include <UT/UT_Set.h>
#include <UT/UT_Vector3.h>
#include <UT/UT_Vector4.h>
#include <stddef.h>
+ Include dependency graph for GU_EdgeUtils.h:

Go to the source code of this file.

Classes

class  GU_EdgeDiv
 
class  GU_LoopFinder
 
class  GU_PolySplitHelper
 
class  GU_PerEdgeDiv
 

Macros

#define __GU_EdgeUtils_h__
 

Enumerations

enum  GU_EvenlySpaceMethod { GU_EVENLY_SPACE_AVERAGE, GU_EVENLY_SPACE_LONGEST, GU_EVENLY_SPACE_SHORTEST }
 

Functions

GU_API UT_Vector3 GUcomputeInsetPos (const GEO_Face &face, int vtx, float inset)
 
GU_API bool GUisPointInline (const UT_Vector3 &start, const UT_Vector3 &mid, const UT_Vector3 &end, float tol)
 
GU_API bool GUgetEdgePoints (const GEO_Face &face, int edgenum, GA_Offset &p0, GA_Offset &p1)
 
GU_API void GUfindUnsharedEdges (const GEO_Detail &detail, GA_EdgeGroup &edges, const GA_PrimitiveGroup *primgroup=NULL, bool prims_on_edges=false)
 
GU_API void GUedgeLoopSplit (GU_Detail &gdp, GA_Offset pt0, GA_Offset pt1, fpreal u, exint splits=0, bool parallel=false, GA_EdgeGroup *edgeGroup=NULL, UT_Fpreal32Array *warningCoords=NULL)
 
GU_API void GUgetEdges (UT_Set< GA_Edge > &edges, const GA_PrimitiveGroup &grp)
 
GU_API void GUgetEdges (UT_Set< GA_Edge > &edges, const GA_PointGroup &grp)
 
GU_API void GUcircleEdges (UT_Map< GA_Offset, UT_Vector3 > &edits, const GU_Detail &gdp, const UT_Set< GA_Edge > &gaedges, const fpreal *radius=nullptr, bool proj_nml=false, fpreal scale=1.0)
 
GU_API void GUevenlySpaceEdges (UT_Map< GA_Offset, UT_Vector3 > &edits, const GU_Detail &gdp, const UT_Set< GA_Edge > &gaedges, GU_EvenlySpaceMethod method=GU_EVENLY_SPACE_AVERAGE)
 
GU_API void GUstraightenEdges (UT_Map< GA_Offset, UT_Vector3 > &edits, const GU_Detail &gdp, const UT_Set< GA_Edge > &gaedges, const UT_Vector3 *constrain_nml)
 
GU_API bool GUgetBridgePaths (GA_OffsetArray &path0, GA_OffsetArray &path1, const GU_Detail &gdp, const UT_Set< GA_Edge > &gaedges)
 
GU_API void GUgetUnsharedPath (GA_OffsetArray &path, const GU_Detail &gdp, GA_Offset start, GA_Offset end)
 
GU_API void GUbridgeEdges (GU_Detail &gdp, const UT_Set< GA_Edge > &gaedges, bool connected)
 
GU_API void GUdivideEdges (GU_Detail &detail, const UT_Array< GU_PerEdgeDiv > &div_locs, GA_PointGroup &new_points_group)
 
GU_API void GUmergeEdgesAsLines (GU_Detail &dest, const GU_Detail &src, const GA_EdgeGroup *group=nullptr)
 
GU_API void GUfindUnsharedEdges (const GEO_Detail &detail, GA_DirectedEdgeSet &edges, const GA_PrimitiveGroup *primgroup=NULL)
 
GU_API void GUfindUnsharedEdges (const GEO_Detail &detail, UT_Array< GA_DirectedEdge > &edges, const GA_PrimitiveGroup *primgroup=NULL)
 

Macro Definition Documentation

#define __GU_EdgeUtils_h__

Definition at line 15 of file GU_EdgeUtils.h.

Enumeration Type Documentation

Enumerator
GU_EVENLY_SPACE_AVERAGE 
GU_EVENLY_SPACE_LONGEST 
GU_EVENLY_SPACE_SHORTEST 

Definition at line 194 of file GU_EdgeUtils.h.

Function Documentation

GU_API void GUbridgeEdges ( GU_Detail &  gdp,
const UT_Set< GA_Edge > &  gaedges,
bool  connected 
)
GU_API void GUcircleEdges ( UT_Map< GA_Offset, UT_Vector3 > &  edits,
const GU_Detail &  gdp,
const UT_Set< GA_Edge > &  gaedges,
const fpreal *  radius = nullptr,
bool  proj_nml = false,
fpreal  scale = 1.0 
)
GU_API UT_Vector3 GUcomputeInsetPos ( const GEO_Face &  face,
int  vtx,
float  inset 
)
GU_API void GUdivideEdges ( GU_Detail &  detail,
const UT_Array< GU_PerEdgeDiv > &  div_locs,
GA_PointGroup &  new_points_group 
)

Inserts points on edges, with a different fraction and number of divisions per edge.

GU_API void GUedgeLoopSplit ( GU_Detail &  gdp,
GA_Offset  pt0,
GA_Offset  pt1,
fpreal  u,
exint  splits = 0,
bool  parallel = false,
GA_EdgeGroup *  edgeGroup = NULL,
UT_Fpreal32Array *  warningCoords = NULL 
)
GU_API void GUevenlySpaceEdges ( UT_Map< GA_Offset, UT_Vector3 > &  edits,
const GU_Detail &  gdp,
const UT_Set< GA_Edge > &  gaedges,
GU_EvenlySpaceMethod  method = GU_EVENLY_SPACE_AVERAGE 
)
GU_API void GUfindUnsharedEdges ( const GEO_Detail &  detail,
GA_EdgeGroup &  edges,
const GA_PrimitiveGroup *  primgroup = NULL,
bool  prims_on_edges = false 
)

Iterates through the primitives of the detail, calling edgeApply on each primitive to count the number of times each (unordered) edge is present, and adds any edges that appear only once. If prims_on_edges is true, each edge in the edge group will reference the primitive it's associated with. WARNING: A lot of things can go bonkers if you use prims_on_edges! For example, toggling the edge group will result in a group that contains all of the original edges plus every edge, so more edges than the total number.

GU_API void GUfindUnsharedEdges ( const GEO_Detail &  detail,
GA_DirectedEdgeSet &  edges,
const GA_PrimitiveGroup *  primgroup = NULL 
)

Iterates through the primitives of the detail, calling edgeApply on each primitive to count the number of times each (unordered) edge is present, and adds any edges that appear only once, in the direction they appear. WARNING: GA_DirectedEdgeSet is an unordered set, so iteration order can't be relied upon if you use that version.

GU_API void GUfindUnsharedEdges ( const GEO_Detail &  detail,
UT_Array< GA_DirectedEdge > &  edges,
const GA_PrimitiveGroup *  primgroup = NULL 
)

Iterates through the primitives of the detail, calling edgeApply on each primitive to count the number of times each (unordered) edge is present, and adds any edges that appear only once, in the direction they appear. WARNING: GA_DirectedEdgeSet is an unordered set, so iteration order can't be relied upon if you use that version.

GU_API bool GUgetBridgePaths ( GA_OffsetArray &  path0,
GA_OffsetArray &  path1,
const GU_Detail &  gdp,
const UT_Set< GA_Edge > &  gaedges 
)
GU_API bool GUgetEdgePoints ( const GEO_Face &  face,
int  edgenum,
GA_Offset &  p0,
GA_Offset &  p1 
)
GU_API void GUgetEdges ( UT_Set< GA_Edge > &  edges,
const GA_PrimitiveGroup &  grp 
)
GU_API void GUgetEdges ( UT_Set< GA_Edge > &  edges,
const GA_PointGroup &  grp 
)
GU_API void GUgetUnsharedPath ( GA_OffsetArray &  path,
const GU_Detail &  gdp,
GA_Offset  start,
GA_Offset  end 
)
GU_API bool GUisPointInline ( const UT_Vector3 &  start,
const UT_Vector3 &  mid,
const UT_Vector3 &  end,
float  tol 
)
GU_API void GUmergeEdgesAsLines ( GU_Detail &  dest,
const GU_Detail &  src,
const GA_EdgeGroup *  group = nullptr 
)

Merge edges from the source detail into the destination detail, creating a separate two-point line segment (i.e open polygon) for edge group entry. This method does not transfer vertex or primitive attributes. This is useful for building guide geometry from an edge group.

GU_API void GUstraightenEdges ( UT_Map< GA_Offset, UT_Vector3 > &  edits,
const GU_Detail &  gdp,
const UT_Set< GA_Edge > &  gaedges,
const UT_Vector3 *  constrain_nml 
)