#include <CoreAPI.h>
public:
Metaballs() {
numSpheres = 70;
FigureRadius = 80;
FigureRadiusVariation = 0.1;
SpheresRadius = 6;
SpheresRadiusVariation = 0.5;
}
int numSpheres;
float FigureRadius;
float FigureRadiusVariation;
float SpheresRadius;
float SpheresRadiusVariation;
SERIALIZE() {
SLIDER(numSpheres, "numSpheres", 1, 1000);
FSLIDER(FigureRadius, "FigureRadius", 1, 100, 1, false);
FSLIDER(FigureRadiusVariation, "FigureRadiusVariation", 0, 1, 100, false);
FSLIDER(SpheresRadius, "SpheresRadius", 1, 100, 1, false);
FSLIDER(SpheresRadiusVariation, "SpheresRadiusVariation", 0, 1, 100, false);
}
float random(float value, float variation) {
return value * (1.0f + variation * rand() / 32768.0f);
}
void generate() {
auto volume = current.
Volume();
volume.toVoxels();
for (int i = 0; i < numSpheres; i++) {
radius.Add(random(SpheresRadius, SpheresRadiusVariation));
centers.Add(coat::vec3::RandNormal() * random(FigureRadius, FigureRadiusVariation));
}
volume.makeVoxelFigure(
float value = 0;
for (int i = 0; i < centers.Count(); i++) {
float r = radius[i];
float d = pos.distanceSq(centers[i]) - radius[i];
float den = d + 16.0f * r - r * r;
if (den < 0.01f)den = 0.01f;
value += 32.0f * r / den;
}
value -= 2.5f;
return value;
}, centers);
}
};
EXPORT
int main() {
Metaballs sg;
sg.ReadFromFile("data/Temp/Balls.json");
sg.WriteToFile("data/Temp/Balls.json");
sg.generate();
};
return 0;
}
Use this class for build a class for UI or serialization. see class_reg.h for details about the class...
Definition BaseClass.h:91
SceneElement addChild(const char *name) const
add the child element of the same nature
static SceneElement sculptRoot()
get the root of all sculpt objects
the rich dialog. You may customize it, show your custom parameters and custom buttons.
Definition CoreAPI.h:3732
dialog & params(BaseClass *params)
The important core feature. BaseClass allows to create the custom controls in the dialog....
dialog & ok()
add Ok button
dialog & cancel()
add Cancel button
int show()
Show the dialog. This is usually the last command in the chain.
static void toRoom(const char *name, bool Force=false)
switch to the room
comms::cVec3 vec3
3D - float vector, see the cVec3
Definition CoreAPI.h:50
comms::cList< X > list
the array template, see cList
Definition CoreAPI.h:70