HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GT_PrimVolume.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: GT_PrimVolume.h ( GT Library, C++)
7  *
8  * COMMENTS:
9  */
10 #ifndef GT_PrimVolume_h
11 #define GT_PrimVolume_h
12 
13 #include "GT_API.h"
14 #include "GT_Primitive.h"
15 #include "GT_GEOPrimCollect.h"
16 #include "GT_AttributeList.h"
17 #include <GEO/GEO_PrimVolume.h>
18 #include <GU/GU_DetailHandle.h>
19 #include <UT/UT_Ramp.h>
20 #include <UT/UT_Vector3.h>
21 #include <UT/UT_Vector4.h>
22 #include <UT/UT_VoxelArray.h>
23 
24 
25 class GEO_Primitive;
26 class GU_PrimVolumeCache;
28 
30 {
34 };
35 
36 /// Viewport visualization info for a volume.
38 {
40  float densityScale;
41  float shadowScale;
44  float densityRange[2];
47 
54 
56  float diffuseRange[2];
60 
63  float emissionRange[2];
66 
71 
73 };
74 
76 {
77 public:
79  const GEO_Primitive *prim,
80  const GT_DataArrayHandle &mat_id);
82  ~GT_PrimVolume() override;
83 
84  void getVisData(GT_PrimVolumeVisualization& v) const;
85  int getTileCoords(UT_Vector3FArray& coords, UT_Int16Array& masks) const;
86 
87  /// Returns true if the geometry primitive's parent detail has the "gl_wireframe"
88  /// attribute set.
89  bool drawWireframe() const;
90 
91  /// Returns true if the motion vectors are to be drawn for this volume set.
92  bool drawMotionVectors() const;
93  bool drawNormals() const;
94 
95  int getPrimitiveType() const override
96  { return GT_PRIM_VOXEL_VOLUME; }
97 
98  const char *className() const override { return "GT_PrimVolume"; }
99 
100  void enlargeBounds(UT_BoundingBox boxes[],
101  int nsegments) const override;
102  int getMotionSegments() const override { return 1; }
103  int64 getMemoryUsage() const override;
105  { return new GT_PrimVolume(*this); }
106 
107  bool refine(GT_Refine &refiner,
108  const GT_RefineParms *parms) const override;
109  bool refineHeightField(GT_Refine &refiner,
110  const GT_RefineParms *parms) const;
111 
112  // Isosurface
113  bool isIsosurface() const;
114  GT_PrimitiveHandle buildIsosurface(const GT_RefineParms &p,
115  bool as_points) const;
116  GU_ConstDetailHandle getIsosurfaceDetail() const;
117  UT_Vector3 getIsoCd() const;
118 
119  // Height fields
120  bool isHeightField() const;
121  GT_PrimitiveHandle buildHeightField(const GT_RefineParms &p) const;
122  GT_PrimitiveHandle buildHeightMesh(const GT_RefineParms &p,
123  UT_Vector2i &map_res,
124  bool use_quads) const;
126  {
130  };
131  gt_BlendMask blendMaskState(int index) const;
132 
133  // 2D/3D volume
134  bool isSmokeVolume() const;
135  bool is3DVolume() const;
136  bool isImage() const;
137  GEO_PrimVolumeXform getVolumeSpace() const;
138 
139  /// Returns true if this volume stores integer data.
140  bool getStoresIntegers() const;
141  /// Returns the number of components in a native Houdini volume. Returns -1
142  /// for VDBs.
143  int getTupleSize() const;
144  UT_Vector3I getRes() const;
145 
146  void get2DBounds(UT_Vector3F &p0, UT_Vector3F &p1,
147  UT_Vector3F &p2, UT_Vector3F &p3) const;
148  void get2DNormals(UT_Vector3F &n0, UT_Vector3F &n1,
149  UT_Vector3F &n2, UT_Vector3F &n3) const;
150 
151  const UT_VoxelArray<UT_Vector4> *getVoxels(const GU_PrimVolumeCacheParms &p,
152  int64 version[2]) const;
153 
154  GEO_PrimVolumeXform getVolumeTransform() const;
155  GEO_PrimVolumeXform getVolumeIndexTransform() const;
156  GT_PrimitiveHandle getPointPrimitive();
158  { return getPrimitive(); }
159  const GU_ConstDetailHandle &getDetail() const { return myDetail; }
160 
162  { return myVolumeAttributes.entries(); }
164  { return myVolumeAttributes(i); }
166  { myVolumeAttributes.append(prim); }
167 
168  /// Set the list of uniform attributes.
170  {
171  myUniformList = uniform;
172  }
173 
175  { return myUniformList; }
176  bool updateGeoPrim(const GU_ConstDetailHandle &dtl,
177  const GT_RefineParms &refine) override;
178 
179  bool getFlip() const { return myFlip; }
180  bool isVolumeReduced() const { return myVolumeReduced; }
181  void flagVolumeReduced() const { myVolumeReduced = true; }
182 
183 private:
184  const GEO_Primitive *getPrimitive() const;
185 
186  GU_PrimVolumeCache *myCache;
187  GT_AttributeListHandle myUniformList;
188 
189  // Is either VDB or Volume.
190  GU_ConstDetailHandle myDetail;
191  GA_Offset myPrimOffset;
192  int myCollationIndex;
193  UT_Array<const GEO_Primitive *> myVolumeAttributes;
194  mutable int64 myCacheVersion[2];
195  mutable bool myIsosurfaceFlag = false;
196  mutable bool mySmokeVolumeFlag = false;
197  mutable bool myHeightFieldFlag = false;
198  mutable bool myIs3DVolume = false;
199  mutable bool myIsImageVolume = false;
200  mutable bool myFlip = false;
201  mutable GT_PrimitiveHandle myMesh;
202  mutable UT_Vector2i myMeshSize;
203  mutable UT_Vector3F myMeshP0;
204  mutable UT_Vector3F myMeshP1;
205  mutable UT_Vector3F myMeshP2;
206  mutable UT_Vector3F myMeshP3;
207  mutable UT_Vector3F myMeshN0;
208  mutable UT_Vector3F myMeshN1;
209  mutable UT_Vector3F myMeshN2;
210  mutable UT_Vector3F myMeshN3;
211  mutable UT_Array<gt_BlendMask> myBlendMaskState;
212  mutable bool myVolumeReduced = false;
213  static int64 theMeshDataID;
214  static int64 theMeshTopID;
215 };
216 
217 /// Trivial collector class for Volume - 1 GT_PrimVolume per Volume primitive
218 /// with the visualization set to 'volume'.
220 {
221 public:
224 
226  beginCollecting(const GT_GEODetailListHandle &geometry,
227  const GT_RefineParms *parms) const override;
228 
230  const GEO_Primitive *const* prim_list,
231  int,
232  GT_GEOPrimCollectData *) const override;
233 
235  endCollecting(const GT_GEODetailListHandle &geometry,
236  GT_GEOPrimCollectData *data) const override;
237 };
238 
239 #endif
const GEO_Primitive * emissionColorPrim[3]
Definition: GT_PrimVolume.h:67
virtual bool updateGeoPrim(const GU_ConstDetailHandle &dtl, const GT_RefineParms &parms)
update any cached data for geometry and its attributes
GT_PrimVolumeRampMode densityRampType
Definition: GT_PrimVolume.h:46
const GEO_Primitive * diffusePrim[3]
Definition: GT_PrimVolume.h:55
const GEO_Primitive * getVolumeAttribute(exint i) const
virtual bool refine(GT_Refine &refiner, const GT_RefineParms *parms=NULL) const
GT_PrimVolumeRampMode emissionColorRampType
Definition: GT_PrimVolume.h:70
virtual GT_GEOPrimCollectData * beginCollecting(const GT_GEODetailListHandle &geometry, const GT_RefineParms *parms) const
bool isVolumeReduced() const
const GLdouble * v
Definition: glcorearb.h:837
void flagVolumeReduced() const
#define GT_API
Definition: GT_API.h:13
bool getFlip() const
int64 exint
Definition: SYS_Types.h:125
const GEO_Primitive * densityPrim
Definition: GT_PrimVolume.h:39
GT_PrimVolumeRampMode
Definition: GT_PrimVolume.h:29
Viewport visualization info for a volume.
Definition: GT_PrimVolume.h:37
Collection data container.
const GT_AttributeListHandle & getUniformAttributes() const override
GA_Size GA_Offset
Definition: GA_Types.h:641
int getPrimitiveType() const override
Definition: GT_PrimVolume.h:95
virtual GT_PrimitiveHandle endCollecting(const GT_GEODetailListHandle &geometry, GT_GEOPrimCollectData *data) const
virtual GT_PrimitiveHandle collect(const GT_GEODetailListHandle &geometry, const GEO_Primitive *const *prim_list, int nsegments, GT_GEOPrimCollectData *data) const =0
GLuint coords
Definition: glad.h:4091
int getMotionSegments() const override
long long int64
Definition: SYS_Types.h:116
void setUniformAttributes(const GT_AttributeListHandle &uniform)
Set the list of uniform attributes.
void appendVolumeAttribute(const GEO_Primitive *prim)
The base class for all GT primitive types.
Definition: GT_Primitive.h:43
virtual int64 getMemoryUsage() const =0
const GU_ConstDetailHandle & getDetail() const
GT_PrimVolumeRampMode diffuseRampType
Definition: GT_PrimVolume.h:58
const GEO_Primitive * emissionPrim
Definition: GT_PrimVolume.h:61
GT_API const UT_StringHolder version
Processes primitives generated by refinement process.
Definition: GT_Refine.h:20
exint getNumVolumeAttributes() const
~GT_GEOPrimCollectVolume() override
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
GLuint index
Definition: glcorearb.h:786
GT_PrimVolumeRampMode emissionRampType
Definition: GT_PrimVolume.h:65
IMF_EXPORT bool isImage(const std::string &name)
GT_PrimitiveHandle doSoftCopy() const override
UT_SharedPtr< GT_GEODetailList > GT_GEODetailListHandle
virtual void enlargeBounds(UT_BoundingBox boxes[], int nsegments) const =0
const GEO_Primitive * getGeoPrimitive() const
Definition: format.h:895
const char * className() const override
Definition: GT_PrimVolume.h:98
GLenum src
Definition: glcorearb.h:1793