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