7 #ifndef __houdini_SurfaceAccessorHoudini_h__ 8 #define __houdini_SurfaceAccessorHoudini_h__ 10 #define FE_SAH_ASSERT_BOUNDS TRUE 11 #define FE_SAH_MULTIGROUP TRUE 46 m_pGdpChangeable(NULL),
51 #ifdef FE_HOUDINI_USE_GA 55 m_pPointChangeable=NULL;
57 setName(
"SurfaceAccessorHoudini");
65 #if FE_HOUDINI_HARDENING 66 if(m_spHardening.isValid())
68 FEASSERT(m_spSurfaceAccessibleI.isValid());
69 m_spSurfaceAccessibleI->lock(I64(
this));
71 m_spSurfaceAccessibleI->unlock(I64(
this));
76 using SurfaceAccessorBase::set;
77 using SurfaceAccessorBase::append;
78 using SurfaceAccessorBase::spatialVector;
80 BWORD bind(SurfaceAccessibleI::Element a_element,
81 SurfaceAccessibleI::Attribute a_attribute)
83 m_attribute=a_attribute;
88 case SurfaceAccessibleI::e_generic:
89 case SurfaceAccessibleI::e_position:
92 case SurfaceAccessibleI::e_normal:
95 case SurfaceAccessibleI::e_uv:
98 case SurfaceAccessibleI::e_color:
101 case SurfaceAccessibleI::e_vertices:
102 m_attrName=
"vertices";
104 SurfaceAccessibleI::e_primitive);
107 case SurfaceAccessibleI::e_properties:
108 m_attrName=
"properties";
110 SurfaceAccessibleI::e_primitive);
114 return bindInternal(a_element,name);
116 BWORD bind(SurfaceAccessibleI::Element a_element,
119 m_attribute=SurfaceAccessibleI::e_generic;
123 m_attribute=SurfaceAccessibleI::e_position;
127 m_attribute=SurfaceAccessibleI::e_normal;
129 else if(a_name==
"uv")
131 m_attribute=SurfaceAccessibleI::e_uv;
133 else if(a_name==
"Cd")
135 m_attribute=SurfaceAccessibleI::e_color;
138 return bindInternal(a_element,a_name);
142 virtual String type(
void)
const;
144 virtual U32 count(
void)
const 149 if(m_attribute!=SurfaceAccessibleI::e_generic &&
151 SurfaceAccessibleI::e_vertices &&
153 SurfaceAccessibleI::e_properties &&
159 if(m_attribute==SurfaceAccessibleI::e_position &&
168 case SurfaceAccessibleI::e_point:
169 #ifdef FE_HOUDINI_USE_GA 170 return m_pGdp->getNumPoints();
172 return m_pGdp->points().entries();
175 case SurfaceAccessibleI::e_vertex:
176 case SurfaceAccessibleI::e_primitive:
177 #ifdef FE_HOUDINI_USE_GA 178 return m_pGdp->getNumPrimitives();
180 return m_pGdp->primitives().entries();
183 case SurfaceAccessibleI::e_detail:
186 case SurfaceAccessibleI::e_pointGroup:
187 case SurfaceAccessibleI::e_primitiveGroup:
189 #if FE_SAH_MULTIGROUP 190 return m_spMultiGroup->count();
192 return m_spCompoundGroup.isValid()?
193 m_spCompoundGroup->count(): 0;
201 virtual U32 subCount(U32 a_index)
const 203 if(m_attribute!=SurfaceAccessibleI::e_generic &&
205 SurfaceAccessibleI::e_vertices &&
207 SurfaceAccessibleI::e_uv &&
209 SurfaceAccessibleI::e_color &&
211 SurfaceAccessibleI::e_properties &&
220 const BWORD isPrimitiveUV=
221 ((m_element==SurfaceAccessibleI::e_primitive
222 ||m_element==SurfaceAccessibleI::e_vertex
224 SurfaceAccessibleI::e_primitiveGroup) &&
225 m_attribute==SurfaceAccessibleI::e_uv);
228 SurfaceAccessibleI::e_primitiveGroup ||
230 SurfaceAccessibleI::e_vertex ||
231 m_attribute==SurfaceAccessibleI::e_vertices
235 SurfaceAccessibleI::e_primitiveGroup
237 SurfaceAccessibleI::e_vertex
239 SurfaceAccessibleI::e_primitive);
245 SurfaceAccessibleI::e_primitiveGroup &&
251 FEASSERT(m_pPrimitive);
252 return m_pPrimitive->getVertexCount();
262 virtual void set(U32 a_index,U32 a_subIndex,
String a_string)
264 #if FE_SAH_ASSERT_BOUNDS 265 FEASSERT(a_index<count());
266 FEASSERT(a_subIndex<subCount(a_index));
268 if(m_attribute!=SurfaceAccessibleI::e_vertices &&
270 SurfaceAccessibleI::e_properties &&
275 select(a_index,a_subIndex);
277 UT_String utString(a_string.c_str());
278 m_handle.setString(utString);
280 virtual String string(U32 a_index,U32 a_subIndex=0)
282 #if FE_SAH_ASSERT_BOUNDS 283 FEASSERT(a_index<count());
284 FEASSERT(a_subIndex<subCount(a_index));
286 select(a_index,a_subIndex);
288 if(m_attribute==SurfaceAccessibleI::e_vertices ||
290 SurfaceAccessibleI::e_properties)
296 m_handle.getString(utString,a_subIndex);
297 return String(utString.buffer());
300 virtual void set(U32 a_index,U32 a_subIndex,I32 a_integer)
302 #if FE_SAH_ASSERT_BOUNDS 303 FEASSERT(a_index<count());
304 FEASSERT(a_subIndex<subCount(a_index));
307 #ifdef FE_HOUDINI_USE_GA 308 if(m_element==SurfaceAccessibleI::e_point &&
309 m_handleIntRW.isValid())
311 #if FE_HOUDINI_12_5_PLUS 312 m_handleIntRW.set(m_pGdp->pointOffset(a_index),
313 a_subIndex,a_integer);
320 m_pGdp->pointOffset(a_index),
328 if(m_attribute!=SurfaceAccessibleI::e_vertices &&
330 SurfaceAccessibleI::e_properties &&
336 select(a_index,a_subIndex);
339 SurfaceAccessibleI::e_primitiveGroup ||
340 m_attribute==SurfaceAccessibleI::e_vertices)
343 SurfaceAccessibleI::e_primitiveGroup
345 SurfaceAccessibleI::e_primitive);
346 FEASSERT(m_pPrimitive);
347 #ifdef FE_HOUDINI_USE_GA 348 const GA_Offset offset=
349 m_pGdp->pointOffset(a_integer);
350 const_cast<GEO_Primitive*
>(m_pPrimitive)
351 ->setPointOffset(a_subIndex,offset);
353 const GB_Element* pElement=
354 m_pGdp->points()(a_integer);
355 const_cast<GEO_Primitive*
>(m_pPrimitive)
356 ->getVertex(a_subIndex).setPt(
357 const_cast<GB_Element*>(pElement));
361 if(m_attribute==SurfaceAccessibleI::e_properties)
364 SurfaceAccessibleI::e_primitiveGroup
366 SurfaceAccessibleI::e_primitive);
367 FEASSERT(m_pPrimitive);
368 if(a_subIndex==SurfaceAccessibleI::e_openCurve)
371 dynamic_cast<GEO_Face*
>(
372 const_cast<GEO_Primitive*
>(
379 if(pGeoFace->isClosed())
393 if(a_subIndex==SurfaceAccessibleI::e_countU ||
395 SurfaceAccessibleI::e_countV ||
397 SurfaceAccessibleI::e_wrappedU ||
399 SurfaceAccessibleI::e_wrappedV)
401 #ifdef FE_HOUDINI_USE_GA 402 if(m_pPrimitive->getTypeId().get()!=
408 if(m_pPrimitive->getPrimitiveId()!=
414 const GEO_PrimMesh* pPrimMesh=
415 dynamic_cast<const GEO_PrimMesh*
>(
421 case SurfaceAccessibleI::e_countU:
423 case SurfaceAccessibleI::e_countV:
425 case SurfaceAccessibleI::e_wrappedU:
427 case SurfaceAccessibleI::e_wrappedV:
437 m_handle.setI(a_integer);
439 virtual I32 integer(U32 a_index,U32 a_subIndex=0)
441 #if FE_SAH_ASSERT_BOUNDS 442 FEASSERT(a_index<count());
443 FEASSERT(m_attribute==
444 SurfaceAccessibleI::e_properties ||
445 a_subIndex<subCount(a_index));
448 #ifdef FE_HOUDINI_USE_GA 449 if(m_element==SurfaceAccessibleI::e_point &&
450 m_handleIntRO.isValid())
452 #if FE_HOUDINI_12_5_PLUS 453 return m_handleIntRO.get(
454 m_pGdp->pointOffset(a_index),
459 return m_handleIntRO.get(
460 m_pGdp->pointOffset(a_index));
466 select(a_index,a_subIndex);
468 if(m_element==SurfaceAccessibleI::e_pointGroup ||
470 SurfaceAccessibleI::e_primitiveGroup)
472 #if FE_SAH_MULTIGROUP 473 if(m_spMultiGroup.isNull())
477 return m_spMultiGroup->at(a_index);
479 if(m_spCompoundGroup.isNull())
483 return m_spCompoundGroup->getIndex();
515 if(m_attribute==SurfaceAccessibleI::e_vertices)
518 SurfaceAccessibleI::e_primitive);
519 FEASSERT(m_pPrimitive);
520 #ifdef FE_HOUDINI_USE_GA 521 const GA_Offset offset=m_pPrimitive
522 ->getPointOffset(a_subIndex);
523 return m_pGdp->pointIndex(offset);
525 return m_pPrimitive->getVertex(a_subIndex)
526 .getBasePt()->getNum();
531 if(m_attribute==SurfaceAccessibleI::e_properties)
534 SurfaceAccessibleI::e_primitiveGroup
536 SurfaceAccessibleI::e_primitive);
537 FEASSERT(m_pPrimitive);
538 if(a_subIndex==SurfaceAccessibleI::e_openCurve)
540 const GEO_Face* pGeoFace=
541 dynamic_cast<const GEO_Face*
>(
544 return pGeoFace && !pGeoFace->isClosed();
546 if(a_subIndex==SurfaceAccessibleI::e_countU ||
548 SurfaceAccessibleI::e_countV ||
550 SurfaceAccessibleI::e_wrappedU ||
552 SurfaceAccessibleI::e_wrappedV)
554 #ifdef FE_HOUDINI_USE_GA 555 if(m_pPrimitive->getTypeId().get()!=
561 if(m_pPrimitive->getPrimitiveId()!=
567 const GEO_PrimMesh* pPrimMesh=
568 dynamic_cast<const GEO_PrimMesh*
>(
574 case SurfaceAccessibleI::e_countU:
575 return pPrimMesh->getNumCols();
576 case SurfaceAccessibleI::e_countV:
577 return pPrimMesh->getNumRows();
578 case SurfaceAccessibleI::e_wrappedU:
579 return pPrimMesh->isWrappedU();
580 case SurfaceAccessibleI::e_wrappedV:
581 return pPrimMesh->isWrappedV();
590 return m_handle.getI(a_subIndex);
593 virtual I32 duplicate(U32 a_index,U32 a_subIndex=0)
596 if(m_element!=SurfaceAccessibleI::e_point &&
597 m_element!=SurfaceAccessibleI::e_primitive)
602 FEASSERT(m_pGdpChangeable);
603 if(!m_pGdpChangeable)
609 GEO_Primitive* pDupPrimitive=NULL;
611 #ifdef FE_HOUDINI_USE_GA 612 if(m_element==SurfaceAccessibleI::e_point)
614 const GA_Offset offset=
615 m_pGdpChangeable->pointOffset(a_index);
617 m_pGdpChangeable->appendPointCopy(
619 return m_pGdpChangeable->pointIndex(dupOffset);
623 select(a_index,a_subIndex);
625 FEASSERT(m_pPrimitive);
626 const GA_PrimitiveTypeId primType=
627 m_pPrimitive->getTypeId();
628 #if FE_HOUDINI_14_PLUS 631 m_pGdpChangeable->appendPrimitive(
633 m_pGdpChangeable->copyPrimitiveAttributes(
634 *pDupPrimitive,*m_pPrimitive);
637 m_pGdpChangeable->appendPrimitive(
638 primType,m_pPrimitive,NULL);
640 dupIndex=pDupPrimitive->getNum();
643 if(m_element==SurfaceAccessibleI::e_point)
645 select(a_index,a_subIndex);
648 const GEO_Point* pDupPoint=
649 m_pGdpChangeable->appendPoint(
651 return pDupPoint->getNum();
655 select(a_index,a_subIndex);
657 FEASSERT(m_pPrimitive);
658 const unsigned primType=
659 m_pPrimitive->getPrimitiveId();
661 m_pGdpChangeable->appendPrimitive(
662 primType,m_pPrimitive);
663 dupIndex=pDupPrimitive->getNum();
667 const GU_PrimPoly* pPolyOrig=
668 dynamic_cast<const GU_PrimPoly*
>(
670 GU_PrimPoly* pPolyDup=
671 dynamic_cast<GU_PrimPoly*
>(pDupPrimitive);
673 const U32 vertCount=subCount(a_index);
674 for(U32 vertIndex=0;vertIndex<vertCount;
677 const I32 pointIndex=integer(a_index,vertIndex);
678 append(dupIndex,pointIndex);
681 FEASSERT(subCount(dupIndex)==vertCount);
683 if(pPolyOrig && pPolyDup && pPolyOrig->isClosed())
690 virtual I32 append(SurfaceAccessibleI::Form a_form)
692 if(m_element==SurfaceAccessibleI::e_point)
695 m_pGdpChangeable->appendPoint();
700 if(m_element==SurfaceAccessibleI::e_primitive)
705 (a_form==SurfaceAccessibleI::e_open)?
706 GU_POLY_OPEN: GU_POLY_CLOSED;
711 GU_PrimPoly::build(m_pGdpChangeable,
712 npts,open,appendPts);
719 virtual void append(U32 a_index,I32 a_integer)
721 if(m_element==SurfaceAccessibleI::e_detail)
723 m_tupleSize+=a_integer;
727 if(m_element!=SurfaceAccessibleI::e_pointGroup &&
729 SurfaceAccessibleI::e_primitiveGroup &&
731 SurfaceAccessibleI::e_primitive &&
733 SurfaceAccessibleI::e_vertices))
738 FEASSERT(m_pGdpChangeable);
739 if(!m_pGdpChangeable)
744 if(m_element==SurfaceAccessibleI::e_primitive)
748 GEO_TriMesh* pGeoTriMesh=
749 dynamic_cast<GEO_TriMesh*
>(
750 const_cast<GEO_Primitive*
>(
752 FEASSERT(pGeoTriMesh);
753 #ifdef FE_HOUDINI_USE_GA 754 const GA_Offset offset=
755 m_pGdpChangeable->pointOffset(
758 pGeoTriMesh->appendVertex(offset);
761 m_pGdpChangeable->points()(a_integer);
763 pGeoTriMesh->appendVertex(pPoint);
793 #if FE_SAH_MULTIGROUP 794 if(m_spMultiGroup.isValid())
796 m_spMultiGroup->add(a_integer);
799 if(m_spCompoundGroup.isValid())
801 m_spCompoundGroup->append(a_integer);
807 virtual void remove(U32 a_index,I32 a_integer)
809 FEASSERT(m_pGdpChangeable);
810 if(!m_pGdpChangeable)
815 #ifdef FE_HOUDINI_USE_GA 816 if(m_element==SurfaceAccessibleI::e_point)
818 m_pGdpChangeable->destroyPointIndex(a_index);
822 if(m_element==SurfaceAccessibleI::e_primitive)
824 m_pGdpChangeable->destroyPrimitiveIndex(
832 if(m_element!=SurfaceAccessibleI::e_pointGroup &&
834 SurfaceAccessibleI::e_primitiveGroup)
851 #if FE_SAH_MULTIGROUP 852 if(m_spMultiGroup.isValid())
854 m_spMultiGroup->remove(a_integer);
857 if(m_spCompoundGroup.isValid())
859 m_spCompoundGroup->remove(a_index);
864 virtual void set(U32 a_index,U32 a_subIndex,Real a_real)
866 #ifdef FE_HOUDINI_USE_GA 867 if(m_element==SurfaceAccessibleI::e_point &&
868 m_handleRealRW.isValid())
870 #if FE_SAH_ASSERT_BOUNDS 871 FEASSERT(a_index<count());
872 FEASSERT(a_subIndex<subCount(a_index));
875 #if FE_HOUDINI_12_5_PLUS 876 m_handleRealRW.set(m_pGdp->pointOffset(a_index),
884 m_pGdp->pointOffset(a_index),
892 if(m_attribute!=SurfaceAccessibleI::e_vertices &&
894 SurfaceAccessibleI::e_properties &&
899 #if FE_SAH_ASSERT_BOUNDS 900 FEASSERT(a_index<count());
902 select(a_index,a_subIndex);
904 #if FE_SAH_ASSERT_BOUNDS 908 m_handle.setF(a_real,a_subIndex);
910 virtual Real real(U32 a_index,U32 a_subIndex=0)
912 #if FE_SAH_ASSERT_BOUNDS 913 FEASSERT(a_index<count());
914 FEASSERT(a_subIndex<subCount(a_index));
917 #ifdef FE_HOUDINI_USE_GA 918 if(m_element==SurfaceAccessibleI::e_point &&
919 m_handleRealRO.isValid())
921 #if FE_HOUDINI_12_5_PLUS 922 return m_handleRealRO.get(
923 m_pGdp->pointOffset(a_index),
928 return m_handleRealRO.get(
929 m_pGdp->pointOffset(a_index));
935 select(a_index,a_subIndex);
937 if(m_attribute==SurfaceAccessibleI::e_vertices ||
939 SurfaceAccessibleI::e_properties)
944 return m_handle.getF(a_subIndex);
947 virtual void set(U32 a_index,U32 a_subIndex,
950 if(m_attribute==SurfaceAccessibleI::e_properties)
955 UT_Vector3 utVector3(a_vector[0],
956 a_vector[1],a_vector[2]);
958 #ifdef FE_HOUDINI_USE_GA 959 if(m_element==SurfaceAccessibleI::e_point &&
960 m_handleV3RW.isValid())
962 #if FE_HOUDINI_12_5_PLUS 963 m_handleV3RW.set(m_pGdp->pointOffset(a_index),
964 a_subIndex,utVector3);
971 m_pGdp->pointOffset(a_index),
979 const BWORD isPrimitiveUV=
980 ((m_element==SurfaceAccessibleI::e_primitive
981 || m_element==SurfaceAccessibleI::e_vertex
983 SurfaceAccessibleI::e_primitiveGroup) &&
984 m_attribute==SurfaceAccessibleI::e_uv);
986 if(m_element!=SurfaceAccessibleI::e_pointGroup &&
988 SurfaceAccessibleI::e_primitiveGroup &&
990 SurfaceAccessibleI::e_vertices &&
996 #if FE_SAH_ASSERT_BOUNDS 997 FEASSERT(a_index<count());
998 FEASSERT(a_subIndex<subCount(a_index));
1001 select(a_index,a_subIndex);
1003 if(m_element==SurfaceAccessibleI::e_pointGroup)
1005 #ifdef FE_HOUDINI_USE_GA 1012 #if FE_SAH_MULTIGROUP 1013 if(m_spMultiGroup.isNull())
1017 const I32 elementIndex=
1018 m_spMultiGroup->at(a_index);
1020 if(m_spCompoundGroup.isNull())
1024 const I32 elementIndex=
1025 m_spCompoundGroup->getIndex();
1027 const GA_Offset offset=
1028 m_pGdpChangeable->pointOffset(
1030 m_pGdpChangeable->setPos3(offset,utVector3);
1032 m_pPointChangeable->setPos(utVector3);
1038 SurfaceAccessibleI::e_primitiveGroup ||
1039 m_attribute==SurfaceAccessibleI::e_vertices)
1041 FEASSERT(m_element==
1042 SurfaceAccessibleI::e_primitiveGroup
1044 SurfaceAccessibleI::e_primitive);
1045 FEASSERT(m_pPrimitive);
1046 #ifdef FE_HOUDINI_USE_GA 1047 const GA_Offset offset=
1048 m_pPrimitive->getPointOffset(a_subIndex);
1049 m_pGdpChangeable->setPos3(offset,utVector3);
1051 m_pPrimitive->getVertex(a_subIndex).getPt()
1052 ->setPos(utVector3);
1057 m_handle.setV3(utVector3);
1059 virtual SpatialVector spatialVector(U32 a_index,U32 a_subIndex=0)
1061 #if FE_SAH_ASSERT_BOUNDS 1062 FEASSERT(a_index<count());
1063 FEASSERT(a_subIndex<subCount(a_index));
1065 if(m_attribute==SurfaceAccessibleI::e_properties)
1070 #ifdef FE_HOUDINI_USE_GA 1071 if(m_element==SurfaceAccessibleI::e_point &&
1072 m_handleV3RO.isValid())
1074 #if FE_HOUDINI_12_5_PLUS 1076 m_pGdp->pointOffset(a_index),
1077 a_subIndex).
data());
1082 m_pGdp->pointOffset(a_index))
1089 select(a_index,a_subIndex);
1091 if(m_element==SurfaceAccessibleI::e_pointGroup)
1093 #ifdef FE_HOUDINI_USE_GA 1101 #if FE_SAH_MULTIGROUP 1102 if(m_spMultiGroup.isNull())
1106 const I32 elementIndex=
1107 m_spMultiGroup->at(a_index);
1109 if(m_spCompoundGroup.isNull())
1113 const I32 elementIndex=
1114 m_spCompoundGroup->getIndex();
1116 const GA_Offset offset=
1117 m_pGdp->pointOffset(elementIndex);
1118 const UT_Vector3 utVector3=
1119 m_pGdp->getPos3(offset);
1123 UT_Vector3 utVector3=m_pPoint->getPos();
1129 SurfaceAccessibleI::e_primitiveGroup ||
1130 m_attribute==SurfaceAccessibleI::e_vertices)
1132 FEASSERT(m_element==
1133 SurfaceAccessibleI::e_primitiveGroup
1135 SurfaceAccessibleI::e_primitive);
1136 FEASSERT(m_pPrimitive);
1137 #ifdef FE_HOUDINI_USE_GA 1138 const GA_Offset offset=
1139 m_pPrimitive->getPointOffset(
1141 const UT_Vector3 utVector3=
1142 m_pGdp->getPos3(offset);
1145 UT_Vector3 utVector3=m_pPrimitive
1146 ->getVertex(a_subIndex).getPos();
1152 UT_Vector3 utVector3=m_handle.getV3();
1157 const Vector2i* a_pIndexArray,I32 a_arrayCount)
1159 #ifdef FE_HOUDINI_USE_GA 1160 if(m_element==SurfaceAccessibleI::e_point &&
1161 m_handleV3RO.isValid())
1163 for(I32 arrayIndex=0;arrayIndex<a_arrayCount;
1166 a_pVectorArray[arrayIndex]=
1168 m_pGdp->pointOffset(
1169 a_pIndexArray[arrayIndex][0]))
1177 return SurfaceAccessorBase::spatialVector(
1178 a_pVectorArray,a_pIndexArray,a_arrayCount);
1182 {
return m_spSurfaceAccessibleI; }
1185 void setGdp(
const GU_Detail* a_pGdp)
1188 m_pGdpChangeable=NULL;
1190 void setGdpChangeable(GU_Detail* a_pGdp)
1193 m_pGdpChangeable=a_pGdp;
1195 const GU_Detail* gdp(
void) {
return m_pGdp; }
1196 GU_Detail* gdpChangeable(
void) {
return m_pGdpChangeable; }
1201 virtual BWORD bindInternal(SurfaceAccessibleI::Element a_element,
1204 void addString(
void);
1205 void addInteger(
void);
1207 void addSpatialVector(
void);
1209 BWORD isBound(
void)
const 1210 {
return (m_handle.isAttributeValid() ||
1211 #if FE_SAH_MULTIGROUP 1212 m_spMultiGroup.isValid()
1214 m_spCompoundGroup.isValid()
1219 void select(U32 a_index,U32 a_subIndex);
1221 const GU_Detail* m_pGdp;
1222 GU_Detail* m_pGdpChangeable;
1224 GEO_AttributeHandle m_handle;
1225 const GEO_Primitive* m_pPrimitive;
1231 #ifdef FE_HOUDINI_USE_GA 1236 GA_ROHandleI m_handleIntRO;
1237 GA_RWHandleI m_handleIntRW;
1238 GA_ROHandleF m_handleRealRO;
1239 GA_RWHandleF m_handleRealRW;
1240 GA_ROHandleV3 m_handleV3RO;
1241 GA_RWHandleV3 m_handleV3RW;
1243 const GEO_Point* m_pPoint;
1244 GEO_Point* m_pPointChangeable;
1248 class CompoundGroup:
public Counted 1251 CompoundGroup(
void):
1254 #ifdef FE_HOUDINI_USE_GA 1260 virtual ~CompoundGroup(
void) {}
1263 a_spSurfaceAccessorHoudini)
1264 { m_spSurfaceAccessorHoudini=
1265 a_spSurfaceAccessorHoudini; }
1267 void scan(
String a_patterns);
1268 void create(
String a_groupName);
1270 void append(I32 a_index);
1271 void remove(I32 a_index);
1274 void select(I32 a_index);
1277 const GEO_Point* getPoint(
void);
1278 const GEO_Primitive* getPrimitive(
void);
1286 const GEO_Primitive* m_pPrimitive;
1288 #ifdef FE_HOUDINI_USE_GA 1293 GA_Iterator* m_pIterator;
1297 const GEO_Point* m_pPoint;
1298 GEO_Point* m_pPointChangeable;
1302 #if FE_SAH_MULTIGROUP 1308 #if FE_HOUDINI_HARDENING 1311 class Hardening:
public Handled<Hardening>
1316 virtual ~Hardening(
void)
1317 {
delete m_pHarden; }
1319 void harden(GA_AutoHardenForThreading* a_pHarden)
1320 { m_pHarden=a_pHarden; }
1321 BWORD hardened(
void)
const 1322 {
return m_pHarden!=NULL; }
1325 GA_AutoHardenForThreading* m_pHarden;
Heap-based support for classes participating in fe::ptr <>
Definition: Counted.h:35
kernel
Definition: namespace.dox:3
Houdini Surface Editing Implementation.
Definition: SurfaceAccessorHoudini.h:39
Common Functionality for Accessor Surface.
Definition: SurfaceAccessorBase.h:20
Automatically reference-counted string container.
Definition: String.h:128
Wrapper for std::vector.
Definition: Array.h:21
Intrusive Smart Pointer.
Definition: src/core/ptr.h:53
Base class providing an fe::Handle to the derived class.
Definition: Handled.h:209
Per-class participation non-RTTI fallback dynamic casting mechanism.
Definition: Castable.h:192