HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
geoisosurface.C
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024
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 <UT/UT_Exit.h>
30 #include <UT/UT_Main.h>
31 #include <stddef.h>
32 
33 namespace HDK_Sample {
34 
35 static float
36 densityFunction(const UT_Vector3 &P, void *data)
37 {
38  // Return the signed distance to the unit sphere
39  return 1 - P.length();
40 }
41 
42 }
43 
44 int
45 theMain(int argc, char *argv[])
46 {
47  GU_Detail gdp;
48  UT_BoundingBox bounds;
49 
50  // Evaluate the iso-surface inside this bounding box
51  bounds.setBounds(-1, -1, -1, 1, 1, 1);
52 
53  // Create an iso-surface
54  gdp.polyIsoSurface(HDK_Sample::densityFunction, NULL, bounds, 20, 20, 20);
55 
56  // Save to sphere.bgeo
57  gdp.save("sphere.bgeo", NULL);
58 
59  UT_Exit::exit(UT_Exit::EXIT_OK); // exit with proper tear down
60  return 0;
61 }
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)
constexpr SYS_FORCE_INLINE T length() const noexcept
Definition: UT_Vector3.h:361
static SYS_FUNC_NORETURN void exit(UT_ExitCode exit_code=EXIT_OK)
Calls exit(), which implicitly leads to our callbacks being called.
int theMain(int argc, char *argv[])
Definition: geoisosurface.C:45
no error
Definition: UT_Exit.h:39
IOStatus save(const char *filename, const GA_SaveOptions *options, UT_StringArray *errors=0) const
UT_MAIN(theMain)
Definition: format.h:895