#include <GU/GU_Detail.h>
#include "VRAY_DemoStamp.h"
namespace HDK_Sample {
class vray_ChildBox : public VRAY_Procedural {
public:
vray_ChildBox(UT_Vector3 ¢er, fpreal size)
: myCenter(center),
mySize(size)
{}
virtual ~vray_ChildBox() {}
virtual const char *getClassName() { return "vray_ChildBox"; }
virtual int initialize(const UT_BoundingBox *)
{
return 0;
}
virtual void getBoundingBox(UT_BoundingBox &box)
{
box.initBounds(myCenter);
box.enlargeBounds(0, mySize);
}
virtual void render()
{
GU_Detail *gdp = allocateGeometry();
gdp->cube(
myCenter.x()-mySize, myCenter.x()+mySize,
myCenter.y()-mySize, myCenter.y()+mySize,
myCenter.z()-mySize, myCenter.z()+mySize);
openGeometryObject();
addGeometry(gdp, 0);
closeObject();
}
private:
UT_Vector3 myCenter;
fpreal mySize;
};
}
using namespace HDK_Sample;
static VRAY_ProceduralArg theArgs[] = {
VRAY_ProceduralArg("minbound", "real", "-1 -1 -1"),
VRAY_ProceduralArg("maxbound", "real", "1 1 1"),
VRAY_ProceduralArg("size", "real", ".1"),
VRAY_ProceduralArg("npoints", "int", "10"),
VRAY_ProceduralArg("seed", "int", "1"),
VRAY_ProceduralArg()
};
VRAY_Procedural *
allocProcedural(const char *)
{
return new VRAY_DemoStamp();
}
const VRAY_ProceduralArg *
getProceduralArgs(const char *)
{
return theArgs;
}
VRAY_DemoStamp::VRAY_DemoStamp()
{
myBox.initBounds(0, 0, 0);
}
VRAY_DemoStamp::~VRAY_DemoStamp()
{
}
const char *
VRAY_DemoStamp::getClassName()
{
return "VRAY_DemoStamp";
}
int
VRAY_DemoStamp::initialize(const UT_BoundingBox *)
{
fpreal val[3];
val[0] = val[1] = val[2] = -1;
import("minbound", val, 3);
myBox.initBounds(val[0], val[1], val[2]);
val[0] = val[1] = val[2] = 1;
import("maxbound", val, 3);
myBox.enlargeBounds(val[0], val[1], val[2]);
if (!import("size", &mySize, 1))
mySize = 0.1;
if (!import("npoints", &myCount, 1))
myCount = 10;
if (!import("seed", &mySeed, 1))
mySeed = 1;
mySize = SYSabs(mySize);
return 1;
}
void
VRAY_DemoStamp::getBoundingBox(UT_BoundingBox &box)
{
box = myBox;
box.enlargeBounds(0, mySize);
}
void
VRAY_DemoStamp::render()
{
int i;
UT_Vector3 c;
unsigned int seed;
fpreal cx, cy, cz;
seed = mySeed;
for (i = 0; i < myCount; i++)
{
cx = SYSfastRandom(seed);
cy = SYSfastRandom(seed);
cz = SYSfastRandom(seed);
c.assign( SYSfit(cx, 0, 1, myBox.xmin(), myBox.xmax()),
SYSfit(cy, 0, 1, myBox.ymin(), myBox.ymax()),
SYSfit(cz, 0, 1, myBox.zmin(), myBox.zmax()) );
openProceduralObject();
addProcedural( new vray_ChildBox(c, mySize) );
closeObject();
}
}