Smoke: fixing some compile warning reported by Ton and one compile erro for gcc 4...
[blender.git] / intern / smoke / intern / smoke_API.cpp
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2009 by Daniel Genrich
21  * All rights reserved.
22  *
23  * Contributor(s): None
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 #include "FLUID_3D.h"
29
30 #include <stdio.h>
31 #include <stdlib.h>
32
33 // y in smoke is z in blender
34 extern "C" FLUID_3D *smoke_init(int *res, int amplify, float *p0, float *p1, float dt)
35 {
36         // smoke lib uses y as top-bottom/vertical axis where blender uses z
37         FLUID_3D *fluid = new FLUID_3D(res, amplify, p0, dt);
38
39         // printf("xres: %d, yres: %d, zres: %d\n", res[0], res[1], res[2]);
40
41         return fluid;
42 }
43
44 extern "C" void smoke_free(FLUID_3D *fluid)
45 {
46         delete fluid;
47         fluid = NULL;
48 }
49
50 extern "C" void smoke_step(FLUID_3D *fluid)
51 {
52         // fluid->addSmokeColumn();
53         fluid->step();
54 }
55
56 extern "C" void smoke_initBlenderRNA(FLUID_3D *fluid, float *alpha, float *beta)
57 {
58         fluid->initBlenderRNA(alpha, beta);
59 }
60
61 template < class T > inline T ABS( T a ) {
62         return (0 < a) ? a : -a ;
63 }
64
65 extern "C" float *smoke_get_density(FLUID_3D *fluid)
66 {
67         return fluid->_density;
68 }
69
70 extern "C" float *smoke_get_heat(FLUID_3D *fluid)
71 {
72         return fluid->_heat;
73 }
74
75 extern "C" float *smoke_get_velocity_x(FLUID_3D *fluid)
76 {
77         return fluid->_xVorticity;
78 }
79
80 extern "C" float *smoke_get_velocity_y(FLUID_3D *fluid)
81 {
82         return fluid->_yVorticity;
83 }
84
85 extern "C" float *smoke_get_velocity_z(FLUID_3D *fluid)
86 {
87         return fluid->_zVorticity;
88 }
89
90 extern "C" float *smoke_get_bigdensity(FLUID_3D *fluid)
91 {
92         return fluid->_wTurbulence->getDensityBig();
93 }
94
95 extern "C" void smoke_get_bigres(FLUID_3D *fluid, int *res)
96 {
97         Vec3Int r = fluid->_wTurbulence->getResBig();
98         res[0] = r[0];
99         res[1] = r[1];
100         res[2] = r[2];
101 }
102
103 extern "C" unsigned char *smoke_get_obstacle(FLUID_3D *fluid)
104 {
105         return fluid->_obstacles;
106 }
107
108 extern "C" size_t smoke_get_index(int x, int max_x, int y, int max_y, int z /*, int max_z */)
109 {
110         // // const int index = x + y * smd->res[0] + z * smd->res[0]*smd->res[1];
111         return x + y * max_x + z * max_x*max_y;
112 }
113
114 extern "C" size_t smoke_get_index2d(int x, int max_x, int y /*, int max_y, int z, int max_z */)
115 {
116         return x + y * max_x;
117 }
118
119 extern "C" void smoke_set_noise(FLUID_3D *fluid, int type)
120 {
121         fluid->_wTurbulence->setNoise(type);
122 }