HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
geoisosurface.C
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018
3  * Side Effects Software Inc. All rights reserved.
4  *
5  * Redistribution and use of Houdini Development Kit samples in source and
6  * binary forms, with or without modification, are permitted provided that the
7  * following conditions are met:
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * 2. The name of Side Effects Software may not be used to endorse or
11  * promote products derived from this software without specific prior
12  * written permission.
13  *
14  * THIS SOFTWARE IS PROVIDED BY SIDE EFFECTS SOFTWARE `AS IS' AND ANY EXPRESS
15  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
17  * NO EVENT SHALL SIDE EFFECTS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
20  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
21  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
22  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  *
25  *----------------------------------------------------------------------------
26  */
27 
28 #include <GU/GU_Detail.h>
29 #include <stddef.h>
30 
31 namespace HDK_Sample {
32 
33 static float
34 densityFunction(const UT_Vector3 &P, void *data)
35 {
36  // Return the signed distance to the unit sphere
37  return 1 - P.length();
38 }
39 
40 }
41 
42 int
43 main(int argc, char *argv[])
44 {
45  GU_Detail gdp;
46  UT_BoundingBox bounds;
47 
48  // Evaluate the iso-surface inside this bounding box
49  bounds.setBounds(-1, -1, -1, 1, 1, 1);
50 
51  // Create an iso-surface
52  gdp.polyIsoSurface(HDK_Sample::densityFunction, NULL, bounds, 20, 20, 20);
53 
54  // Save to sphere.bgeo
55  gdp.save("sphere.bgeo", NULL);
56 
57  return 0;
58 }
void polyIsoSurface(float(*ptOutside)(const UT_Vector3 &, void *), void *data, const UT_BoundingBox &bbox, int xdiv, int ydiv, int zdiv, bool makepolysoup=false)
void setBounds(T x_min, T y_min, T z_min, T x_max, T y_max, T z_max)
3D Vector class.
IOStatus save(const char *filename, const GA_SaveOptions *options, UT_StringArray *errors=0) const
GLboolean * data
Definition: glcorearb.h:130
int main(int argc, char *argv[])
Definition: geoisosurface.C:43
SYS_FORCE_INLINE Storage::MathFloat length() const