GR/GR_BaryCenter.C
#include <UT/UT_DSOVersion.h>
#include <RE/RE_Render.h>
#include <GEO/GEO_Primitive.h>
#include <GU/GU_Detail.h>
#include <GU/GU_PrimGroupClosure.h>
#include <GR/GR_Detail.h>
#include <GR/GR_RenderHook.h>
#include <GR/GR_RenderTable.h>
namespace HDK_Sample {
class GR_BaryCenter : public GR_RenderHook
{
public:
GR_BaryCenter() {}
virtual ~GR_BaryCenter() {}
virtual void renderWire(GU_Detail *gdp,
RE_Render &ren,
const GR_AttribOffset &ptinfo,
const GR_DisplayOption *dopt,
float lod,
const GU_PrimGroupClosure *hidden_geometry);
virtual void renderShaded(GU_Detail *gdp,
RE_Render &ren,
const GR_AttribOffset &ptinfo,
const GR_DisplayOption *dopt,
float lod,
const GU_PrimGroupClosure *hidden_geometry);
virtual const char *getName() const { return "GR_BaryCenter"; }
};
}
using namespace HDK_Sample;
void
GR_BaryCenter::renderWire(GU_Detail *gdp,
RE_Render &ren,
const GR_AttribOffset & ,
const GR_DisplayOption * ,
float ,
const GU_PrimGroupClosure *hidden_geometry)
{
int i, nprim;
GEO_Primitive *prim;
UT_Vector3 v3;
ren.beginPoint();
nprim = gdp->primitives().entries();
for (i = 0; i < nprim; i++)
{
prim = gdp->primitives()(i);
if (hidden_geometry && hidden_geometry->containsPrim(prim))
continue;
v3 = prim->baryCenter();
ren.vertex3DW(v3.x(), v3.y(), v3.z());
}
ren.endPoint();
}
void
GR_BaryCenter::renderShaded(GU_Detail *gdp,
RE_Render &ren,
const GR_AttribOffset &ptinfo,
const GR_DisplayOption *dopt,
float lod,
const GU_PrimGroupClosure *hidden_geometry)
{
GR_Detail::toggleLightShading(ren, 0);
renderWire(gdp, ren, ptinfo, dopt, lod, hidden_geometry);
GR_Detail::toggleLightShading(ren, 1);
}
void
newRenderHook(GR_RenderTable *table)
{
GR_BaryCenter *hook = new GR_BaryCenter;
table->addHook(hook, GR_RENDER_HOOK_VERSION);
}