HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GEO_ExpandGroupUtils.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: GEO_ExpandGroupUtils.h ( GU Library, C++)
7  *
8  * COMMENTS:
9  */
10 #ifndef __GEO_ExpandGroupUtils_h__
11 #define __GEO_ExpandGroupUtils_h__
12 
13 #include "GEO_API.h"
14 #include <UT/UT_Map.h>
15 #include <UT/UT_Array.h>
16 #include <UT/UT_IntArray.h>
17 #include <GA/GA_Edge.h>
18 #include <GA/GA_Types.h>
19 #include <GA/GA_Attribute.h>
20 #include <GA/GA_ATIGroupBool.h>
21 #include <GA/GA_AIFCompare.h>
22 #include <GA/GA_EdgeGroup.h>
23 #include <GA/GA_ElementGroup.h>
24 #include "GEO_Detail.h"
25 
27 {
28 public:
30  public:
31  ConnectAttribute(const GA_Attribute * attrib);
32 
34  bool allow_touch = false,
35  const GA_EdgeGroup * edges = nullptr,
36  bool constrain_within_group = false);
37 
38  bool isValid() const
39  {
40  return myAttribOwner != GA_ATTRIB_INVALID;
41  }
43  {
44  return myAttribOwner;
45  }
46  bool constrainWithinGroup() const
47  {
48  return myConstrainWithinGroup;
49  }
50 
51  bool isGroup() const
52  {
53  return myGroup;
54  }
55 
56  bool allowTouch() const
57  {
58  return myAllowTouch;
59  }
60 
61  bool treatAsEdge() const
62  {
63  return myEdgeGroup;
64  }
65 
66  bool canGrowToPrim(GA_Offset prim0_v0,
67  GA_Offset prim0_v1,
68  GA_Offset prim1_v0,
69  GA_Offset prim1_v1,
70  const GEO_Detail & gdp) const;
71 
72  bool canGrowToVertex(GA_Offset v0,
73  GA_Offset v1,
74  const GEO_Detail & gdp,
75  GA_GroupType growth_type,
76  UT_Map<GA_Offset, GA_OffsetArray> & adj_map) const;
77 
78  bool isEdgeBound(GA_Offset prim0_v0, GA_Offset prim0_v1,
79  GA_Offset prim1_v0, GA_Offset prim1_v1,
80  const GEO_Detail & gdp) const;
81 
82  bool isEqual(GA_Offset x0, GA_Offset x1) const;
83 
84  bool groupContainsPrim(GA_Offset prim, const GEO_Detail & gdp) const;
85  bool groupContainsPoint(GA_Offset pt, const GEO_Detail & gdp) const
86  {
87  return groupContainsVertex(gdp.pointVertex(pt), gdp, GA_GROUP_POINT);
88  }
89 
90  bool groupContainsVertex(GA_Offset vtx, const GEO_Detail & gdp) const
91  {
92  return groupContainsVertex(vtx, gdp, GA_GROUP_VERTEX);
93  }
94 
95  bool groupContainsEdge(const GA_Edge & e, const GEO_Detail & gdp,
96  bool strict = true) const
97  {
98  if (treatAsEdge())
99  return myEdgeGroup->contains(e);
100 
101  if (strict)
102  return groupContainsPoint(e.p0(), gdp) &&
103  groupContainsPoint(e.p1(), gdp);
104 
105  return groupContainsPoint(e.p0(), gdp) ||
106  groupContainsPoint(e.p1(), gdp);
107  }
108  private:
109  bool groupContainsVertex(GA_Offset vtx,
110  const GEO_Detail & gdp,
111  GA_GroupType growth_type) const;
112 
113  const GA_Attribute * get() const
114  {
115  return myAttrib;
116  }
117 
118  const GA_AIFCompare * getCompare() const
119  {
120  return myCmpAttrib;
121  }
122 
123  const GA_Attribute * myAttrib = nullptr;
124  const GA_AIFCompare * myCmpAttrib = nullptr;
125  const GA_ElementGroup * myGroup = nullptr;
126  const GA_EdgeGroup * myEdgeGroup = nullptr;
127  GA_AttributeOwner myAttribOwner = GA_ATTRIB_INVALID;
128  bool myAllowTouch = false;
129  bool myConstrainWithinGroup = false;
130  };
131 
133 
134  // Three functions to find the connectivity in geometry,
135  // Split by several connectivity attributes
136  static void getPointConnectivity(
137  UT_Array<GA_OffsetArray> & ranges,
138  const GA_PointGroup & pts,
139  const GEO_Detail & gdp,
140  const ConnectAttribArray & attribs);
141 
142  static void getPrimitiveConnectivity(
143  UT_Array<GA_OffsetArray> & ranges,
144  const GA_PrimitiveGroup & prims,
145  const GEO_Detail & gdp,
146  const ConnectAttribArray & attribs);
147 
148  static void getVertexConnectivity(
149  UT_Array<GA_OffsetArray> & ranges,
150  const GA_VertexGroup & vtxs,
151  const GEO_Detail & gdp,
152  const ConnectAttribArray & attribs);
153 
154  //helper function to help getting vertices on an edge
155  static void getVerticesOnEdge(
156  GA_OffsetArray & vtx_out,
157  const GA_Edge & edge,
158  const GEO_Detail & gdp,
159  GA_OffsetArray & tmp_vtx_1,
160  GA_OffsetArray & tmp_vtx_2);
161 
162  //Functions to grow a selection of elements N times
163  // group: the group to be grown, these functions will modify the group
164  // parameter to contain the resultant after growing N iterations
165  // gdp: the detail
166  // attrib: a connectivity attribute, if not nullptr, growth is
167  // contained to connected regions.
168  // If nullptr, connectivity is ignored.
169  // limit_iters: if true will only grow a maximum of _iters_ iterations
170  // if false, will grow as far as possible
171  //Grow a collection of primitives by N iterations
172  static void growPrimGroupNIters(
173  GA_PrimitiveGroup & prim_group,
174  const GEO_Detail & gdp,
175  const ConnectAttribArray & attribs,
176  bool limit_iters,
177  exint iters,
178  UT_IntArray * prim_step_map = nullptr,
179  bool require_share_edge = false);
180 
181  //Grow a collection of points by N iterations
182  static void growPointGroupNIters(
183  GA_PointGroup & point_group,
184  const GEO_Detail & gdp,
185  const ConnectAttribArray & attribs,
186  bool limit_iters,
187  exint iters,
188  UT_IntArray * pt_step_map = nullptr);
189 
190  //Grow a collection of vertices by N iterations
191  static void growVertexGroupNIters(
192  GA_VertexGroup & vtx_group,
193  const GEO_Detail & gdp,
194  const ConnectAttribArray & attribs,
195  bool limit_iters,
196  exint iters,
197  UT_IntArray * vtx_step_map = nullptr);
198 
199  //Grow a collection of Edges by N iterations
200  static void growEdgeGroupNIters(
201  GA_EdgeGroup & edge_group,
202  const GEO_Detail & gdp,
203  const ConnectAttribArray & attribs,
204  bool limit_iters,
205  exint iters,
206  UT_IntArray * pt_step_map = nullptr);
207 
208  //original interfaces
209  static void growPrimGroupNIters(
210  GA_PrimitiveGroup & prim_group,
211  const GEO_Detail & gdp,
212  const GA_Attribute * attrib,
213  bool limit_iters,
214  exint iters,
215  UT_IntArray * prim_step_map = nullptr,
216  bool require_share_edge = false)
217  {
218  ConnectAttribArray con_arr;
219  if (attrib)
220  con_arr.append(attrib);
221 
222  growPrimGroupNIters(prim_group, gdp,
223  con_arr, limit_iters, iters,
224  prim_step_map, require_share_edge);
225  }
226 
227  //Grow a collection of points by N iterations
228  static void growPointGroupNIters(
229  GA_PointGroup & point_group,
230  const GEO_Detail & gdp,
231  const GA_Attribute * attrib,
232  bool limit_iters,
233  exint iters,
234  UT_IntArray * pt_step_map = nullptr)
235  {
236  ConnectAttribArray con_arr;
237  if (attrib)
238  con_arr.append(attrib);
239 
240  growPointGroupNIters(point_group, gdp,
241  con_arr, limit_iters, iters, pt_step_map);
242  }
243 
244  //Grow a collection of vertices by N iterations
246  GA_VertexGroup & vtx_group,
247  const GEO_Detail & gdp,
248  const GA_Attribute * attrib,
249  bool limit_iters,
250  exint iters,
251  UT_IntArray * vtx_step_map = nullptr)
252  {
253  ConnectAttribArray con_arr;
254  if (attrib)
255  con_arr.append(attrib);
256 
257  growVertexGroupNIters(vtx_group, gdp,
258  con_arr, limit_iters, iters, vtx_step_map);
259  }
260 
261  //Grow a collection of Edges by N iterations
262  static void growEdgeGroupNIters(
263  GA_EdgeGroup & edge_group,
264  const GEO_Detail & gdp,
265  const GA_Attribute * attrib,
266  bool limit_iters,
267  exint iters,
268  UT_IntArray * pt_step_map = nullptr)
269  {
270  ConnectAttribArray con_arr;
271  if (attrib)
272  con_arr.append(attrib);
273 
274  growEdgeGroupNIters(edge_group, gdp,
275  con_arr, limit_iters, iters, pt_step_map);
276  }
277 
278 
279  //the following functions will take in a seed group,
280  //and expand the seed group to all connected geometry
281  //within some curvature threshold specified by spread_angle
282  //hidden_prims is a group of primitives to avoid extending to
283  // group: the input group, this is the group that will be grown
284  // modifies the group to contain the grown group.
285  // gdp: the detail
286  // spread_angle: the maximum allowed angle between components when growing
287  // limit_iters: if true will only grow a maximum of _iters_ iterations
288  // if false, will grow as far as possible
289  // pick_all_matching_normals: if true, will ignore connectivity and look at all components
290  // in the geometry.
291  // static_reference_normal: if true, will compare normals of elements to a single seed when growing
292  // the seed will be picked as the first element in src_prims.
293  // hidden_prims: a group of primitives to ignore
294  // attrib: a connectivity attribute, if not nullptr, growth is
295  // contained to connected regions.
296  // If nullptr, connectivity is ignored.
297  // normal_attr: the vector attribute to use as a normal
298  static void expandPrimsByNormal(
299  GA_PrimitiveGroup & prim_group,
300  const GEO_Detail & gdp,
301  fpreal spread_angle,
302  bool limit_iters,
303  exint iters,
304  bool pick_all_matching_normals,
305  bool static_reference_normal,
306  const GA_PrimitiveGroup * hidden_prims,
307  const ConnectAttribArray & attribs,
308  const GA_Attribute * normal_attr,
309  UT_IntArray * prim_step_map = nullptr,
310  bool require_share_edge = true);
311 
312  static void expandPointsByNormal(
313  GA_PointGroup & point_group,
314  const GEO_Detail & gdp,
315  fpreal spread_angle,
316  bool limit_iters,
317  exint iters,
318  bool pick_all_matching_normals,
319  bool static_reference_normal,
320  const GA_PrimitiveGroup * hidden_prims,
321  const ConnectAttribArray & attribs,
322  const GA_Attribute * normal_attrib,
323  UT_IntArray * pt_step_map = nullptr);
324 
325  static void expandVerticesByNormal(
326  GA_VertexGroup & vtx_group,
327  const GEO_Detail & gdp,
328  fpreal spread_angle,
329  bool limit_iters,
330  exint iters,
331  bool pick_all_matching_normals,
332  bool static_reference_normal,
333  const GA_PrimitiveGroup * hidden_prims,
334  const ConnectAttribArray & attribs,
335  const GA_Attribute * normal_attrib,
336  UT_IntArray * vtx_step_map = nullptr);
337 
338  static void expandEdgesByNormal(
339  GA_EdgeGroup & edge_group,
340  const GEO_Detail & gdp,
341  fpreal spread_angle,
342  bool limit_iters,
343  exint iters,
344  bool pick_all_matching_normals,
345  bool static_reference_normal,
346  const GA_PrimitiveGroup * hidden_prims,
347  const ConnectAttribArray & attribs,
348  const GA_Attribute * normal_attrib,
349  UT_IntArray * pt_step_map = nullptr);
350 
351  //original interfaces
352  static void expandPrimsByNormal(
353  GA_PrimitiveGroup & prim_group,
354  const GEO_Detail & gdp,
355  fpreal spread_angle,
356  bool limit_iters,
357  exint iters,
358  bool pick_all_matching_normals,
359  bool static_reference_normal,
360  const GA_PrimitiveGroup * hidden_prims,
361  const GA_Attribute * attrib,
362  const GA_Attribute * normal_attrib,
363  UT_IntArray * prim_step_map = nullptr,
364  bool require_share_edge = true)
365  {
366  ConnectAttribArray con_arr;
367  if (attrib)
368  con_arr.append(attrib);
369 
370  expandPrimsByNormal(prim_group, gdp, spread_angle, limit_iters, iters,
371  pick_all_matching_normals, static_reference_normal,
372  hidden_prims, con_arr, normal_attrib,
373  prim_step_map, require_share_edge);
374  }
375 
376  static void expandPointsByNormal(
377  GA_PointGroup & point_group,
378  const GEO_Detail & gdp,
379  fpreal spread_angle,
380  bool limit_iters,
381  exint iters,
382  bool pick_all_matching_normals,
383  bool static_reference_normal,
384  const GA_PrimitiveGroup * hidden_prims,
385  const GA_Attribute * attrib,
386  const GA_Attribute * normal_attrib,
387  UT_IntArray * pt_step_map = nullptr)
388  {
389  ConnectAttribArray con_arr;
390  if (attrib)
391  con_arr.append(attrib);
392 
393  expandPointsByNormal(point_group, gdp, spread_angle, limit_iters, iters,
394  pick_all_matching_normals, static_reference_normal,
395  hidden_prims, con_arr, normal_attrib, pt_step_map);
396  }
397 
399  GA_VertexGroup & vtx_group,
400  const GEO_Detail & gdp,
401  fpreal spread_angle,
402  bool limit_iters,
403  exint iters,
404  bool pick_all_matching_normals,
405  bool static_reference_normal,
406  const GA_PrimitiveGroup * hidden_prims,
407  const GA_Attribute * attrib,
408  const GA_Attribute * normal_attrib,
409  UT_IntArray * vtx_step_map = nullptr)
410  {
411  ConnectAttribArray con_arr;
412  if (attrib)
413  con_arr.append(attrib);
414 
415  expandVerticesByNormal(vtx_group, gdp, spread_angle, limit_iters, iters,
416  pick_all_matching_normals, static_reference_normal,
417  hidden_prims, con_arr, normal_attrib, vtx_step_map);
418  }
419 
420  static void expandEdgesByNormal(
421  GA_EdgeGroup & edge_group,
422  const GEO_Detail & gdp,
423  fpreal spread_angle,
424  bool limit_iters,
425  exint iters,
426  bool pick_all_matching_normals,
427  bool static_reference_normal,
428  const GA_PrimitiveGroup * hidden_prims,
429  const GA_Attribute * attrib,
430  const GA_Attribute * normal_attrib,
431  UT_IntArray * pt_step_map = nullptr)
432  {
433  ConnectAttribArray con_arr;
434  if (attrib)
435  con_arr.append(attrib);
436 
437  expandEdgesByNormal(edge_group, gdp, spread_angle, limit_iters, iters,
438  pick_all_matching_normals, static_reference_normal,
439  hidden_prims, con_arr, normal_attrib, pt_step_map);
440  }
441 
442  //functions for shrinking collections of elements by N iterations
443  // group: the group to shrink, these functions will modifty the group param
444  // to contain the resultant after shrinking
445  // gdp: the detail
446  // attrib: an attribute specifying connectivity, if nullptr will
447  // not be used
448  // If not nullptr, elements will shrink away from connectivity boundaries
449  // iters: number of iterations to shrink
450  static void shrinkPrimGroupNIters(
451  GA_PrimitiveGroup & prim_group,
452  const GEO_Detail & gdp,
453  const ConnectAttribArray & attribs,
454  exint iters,
455  UT_IntArray * prim_step_map = nullptr,
456  bool require_share_edge = false);
457 
458  static void shrinkPointGroupNIters(
459  GA_PointGroup & point_group,
460  const GEO_Detail & gdp,
461  const ConnectAttribArray & attribs,
462  exint iters,
463  UT_IntArray * pt_step_map = nullptr);
464 
465  static void shrinkVertexGroupNIters(
466  GA_VertexGroup & vtx_group,
467  const GEO_Detail & gdp,
468  const ConnectAttribArray & attribs,
469  exint iters,
470  UT_IntArray * vtx_step_map = nullptr);
471 
472  static void shrinkEdgeGroupNIters(
473  GA_EdgeGroup & edge_group,
474  const GEO_Detail & gdp,
475  const ConnectAttribArray & attribs,
476  exint iters,
477  UT_IntArray * pt_step_map = nullptr);
478 
479  //original interfaces
481  GA_PrimitiveGroup & prim_group,
482  const GEO_Detail & gdp,
483  const GA_Attribute * attrib,
484  exint iters,
485  UT_IntArray * prim_step_map = nullptr,
486  bool require_share_edge = false)
487  {
488  ConnectAttribArray con_arr;
489  if (attrib)
490  con_arr.append(attrib);
491 
492  shrinkPrimGroupNIters(prim_group, gdp, con_arr, iters, prim_step_map, require_share_edge);
493  }
494 
496  GA_PointGroup & point_group,
497  const GEO_Detail & gdp,
498  const GA_Attribute * attrib,
499  exint iters,
500  UT_IntArray * pt_step_map = nullptr)
501  {
502  ConnectAttribArray con_arr;
503  if (attrib)
504  con_arr.append(attrib);
505 
506  shrinkPointGroupNIters(point_group, gdp, con_arr, iters, pt_step_map);
507  }
508 
510  GA_VertexGroup & vtx_group,
511  const GEO_Detail & gdp,
512  const GA_Attribute * attrib,
513  exint iters,
514  UT_IntArray * vtx_step_map = nullptr)
515  {
516  ConnectAttribArray con_arr;
517  if (attrib)
518  con_arr.append(attrib);
519 
520  shrinkVertexGroupNIters(vtx_group, gdp, con_arr, iters, vtx_step_map);
521  }
522 
524  GA_EdgeGroup & edge_group,
525  const GEO_Detail & gdp,
526  const GA_Attribute * attrib,
527  exint iters,
528  UT_IntArray * pt_step_map = nullptr)
529  {
530  ConnectAttribArray con_arr;
531  if (attrib)
532  con_arr.append(attrib);
533 
534  shrinkEdgeGroupNIters(edge_group, gdp, con_arr, iters, pt_step_map);
535  }
536 
537 
538  //functions for finding the boundary
539  //group: the group of which to find the boundary, these functions will
540  // modify the group parameter to contain the resultant boundary
541  //gdp: the detail that the group is on
542  //attrib: a connectivity attribute specifying connected regions of geometry
543  // will not be used if nullptr
544  static void findPrimGroupBoundary(
545  GA_PrimitiveGroup & prim_group,
546  const GEO_Detail & gdp,
547  const ConnectAttribArray & attribs,
548  bool consider_unshared_edges = true,
549  bool all_pt_boundary = false);
550 
551  static void findPointGroupBoundary(
552  GA_PointGroup & pt_group,
553  const GEO_Detail & gdp,
554  const ConnectAttribArray & attribs,
555  bool consider_unshared_edges = true);
556 
557  static void findVertexGroupBoundary(
558  GA_VertexGroup & vtx_group,
559  const GEO_Detail & gdp,
560  const ConnectAttribArray & attribs,
561  bool consider_unshared_edges = true);
562 
563  static void findEdgeGroupBoundary(
564  GA_EdgeGroup & edge_group,
565  const GEO_Detail & gdp,
566  const ConnectAttribArray & attribs,
567  bool consider_unshared_edges = true);
568 
569  //original interfaces
571  GA_PrimitiveGroup & prim_group,
572  const GEO_Detail & gdp,
573  const GA_Attribute * attrib,
574  bool consider_unshared_edges = true,
575  bool all_pt_boundary = false)
576  {
577  ConnectAttribArray con_arr;
578  if (attrib)
579  con_arr.append(attrib);
580 
581  findPrimGroupBoundary(prim_group, gdp, con_arr,
582  consider_unshared_edges, all_pt_boundary);
583  }
584 
586  GA_PointGroup & pt_group,
587  const GEO_Detail & gdp,
588  const GA_Attribute * attrib,
589  bool consider_unshared_edges = true)
590  {
591  ConnectAttribArray con_arr;
592  if (attrib)
593  con_arr.append(attrib);
594 
595  findPointGroupBoundary(pt_group, gdp, con_arr, consider_unshared_edges);
596  }
597 
599  GA_VertexGroup & vtx_group,
600  const GEO_Detail & gdp,
601  const GA_Attribute * attrib,
602  bool consider_unshared_edges = true)
603  {
604  ConnectAttribArray con_arr;
605  if (attrib)
606  con_arr.append(attrib);
607 
608  findVertexGroupBoundary(vtx_group, gdp, con_arr, consider_unshared_edges);
609  }
610 
612  GA_EdgeGroup & edge_group,
613  const GEO_Detail & gdp,
614  const GA_Attribute * attrib,
615  bool consider_unshared_edges = true)
616  {
617  ConnectAttribArray con_arr;
618  if (attrib)
619  con_arr.append(attrib);
620 
621  findEdgeGroupBoundary(edge_group, gdp, con_arr, consider_unshared_edges);
622  }
623 };
624 
625 #endif
static void shrinkPointGroupNIters(GA_PointGroup &point_group, const GEO_Detail &gdp, const GA_Attribute *attrib, exint iters, UT_IntArray *pt_step_map=nullptr)
Definition of a geometry attribute.
Definition: GA_Attribute.h:190
static void findPrimGroupBoundary(GA_PrimitiveGroup &prim_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool consider_unshared_edges=true, bool all_pt_boundary=false)
Unsorted map container.
Definition: UT_Map.h:83
bool groupContainsVertex(GA_Offset vtx, const GEO_Detail &gdp) const
static void growPrimGroupNIters(GA_PrimitiveGroup &prim_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool limit_iters, exint iters, UT_IntArray *prim_step_map=nullptr, bool require_share_edge=false)
const GLint * attribs
Definition: glew.h:14385
GLuint GLfloat GLfloat GLfloat x1
Definition: glew.h:12681
static void growPointGroupNIters(GA_PointGroup &point_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool limit_iters, exint iters, UT_IntArray *pt_step_map=nullptr)
static void expandEdgesByNormal(GA_EdgeGroup &edge_group, const GEO_Detail &gdp, fpreal spread_angle, bool limit_iters, exint iters, bool pick_all_matching_normals, bool static_reference_normal, const GA_PrimitiveGroup *hidden_prims, const GA_Attribute *attrib, const GA_Attribute *normal_attrib, UT_IntArray *pt_step_map=nullptr)
static void expandPrimsByNormal(GA_PrimitiveGroup &prim_group, const GEO_Detail &gdp, fpreal spread_angle, bool limit_iters, exint iters, bool pick_all_matching_normals, bool static_reference_normal, const GA_PrimitiveGroup *hidden_prims, const GA_Attribute *attrib, const GA_Attribute *normal_attrib, UT_IntArray *prim_step_map=nullptr, bool require_share_edge=true)
GA_Size GA_Offset
Definition: GA_Types.h:637
static void findVertexGroupBoundary(GA_VertexGroup &vtx_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool consider_unshared_edges=true)
static void shrinkEdgeGroupNIters(GA_EdgeGroup &edge_group, const GEO_Detail &gdp, const GA_Attribute *attrib, exint iters, UT_IntArray *pt_step_map=nullptr)
static void growVertexGroupNIters(GA_VertexGroup &vtx_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool limit_iters, exint iters, UT_IntArray *vtx_step_map=nullptr)
static void expandVerticesByNormal(GA_VertexGroup &vtx_group, const GEO_Detail &gdp, fpreal spread_angle, bool limit_iters, exint iters, bool pick_all_matching_normals, bool static_reference_normal, const GA_PrimitiveGroup *hidden_prims, const GA_Attribute *attrib, const GA_Attribute *normal_attrib, UT_IntArray *vtx_step_map=nullptr)
static void expandPointsByNormal(GA_PointGroup &point_group, const GEO_Detail &gdp, fpreal spread_angle, bool limit_iters, exint iters, bool pick_all_matching_normals, bool static_reference_normal, const GA_PrimitiveGroup *hidden_prims, const GA_Attribute *attrib, const GA_Attribute *normal_attrib, UT_IntArray *pt_step_map=nullptr)
int64 exint
Definition: SYS_Types.h:120
static void findEdgeGroupBoundary(GA_EdgeGroup &edge_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool consider_unshared_edges=true)
static void growEdgeGroupNIters(GA_EdgeGroup &edge_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool limit_iters, exint iters, UT_IntArray *pt_step_map=nullptr)
SYS_FORCE_INLINE GA_Offset pointVertex(GA_Offset point) const
Definition: GA_Detail.h:502
#define GEO_API
Definition: GEO_API.h:14
Attribute Interface class to perform comparisons on attributes.
Definition: GA_AIFCompare.h:27
T p1() const
Definition: GA_Edge.h:33
static void shrinkVertexGroupNIters(GA_VertexGroup &vtx_group, const GEO_Detail &gdp, const GA_Attribute *attrib, exint iters, UT_IntArray *vtx_step_map=nullptr)
GLuint GLfloat x0
Definition: glew.h:12681
GA_AttributeOwner
Definition: GA_Types.h:33
double fpreal
Definition: SYS_Types.h:276
GA_GroupType
An ordinal enum for the different types of groups in GA.
Definition: GA_Types.h:157
static void findPointGroupBoundary(GA_PointGroup &pt_group, const GEO_Detail &gdp, const GA_Attribute *attrib, bool consider_unshared_edges=true)
exint append(void)
Definition: UT_Array.h:95
GLfloat v0
Definition: glew.h:1848
bool groupContainsPoint(GA_Offset pt, const GEO_Detail &gdp) const
T p0() const
Definition: GA_Edge.h:31
bool groupContainsEdge(const GA_Edge &e, const GEO_Detail &gdp, bool strict=true) const
GLfloat GLfloat v1
Definition: glew.h:1852
static void shrinkPrimGroupNIters(GA_PrimitiveGroup &prim_group, const GEO_Detail &gdp, const GA_Attribute *attrib, exint iters, UT_IntArray *prim_step_map=nullptr, bool require_share_edge=false)
GLboolean GLuint group
Definition: glew.h:2745