Our abstract base shape class.
#include <vector>
public:
~Shape() override{};
protected:
};
class Box : public Shape {
public:
~Box() override{};
private:
};
: Shape(color,
x,
y, z), fDX(dX), fDY(dY), fDZ(dZ)
{
}
{
buffer.ClearSectionsValid();
buffer.fID = this;
buffer.fColor = fColor;
buffer.fTransparency = 0;
buffer.SetLocalMasterIdentity();
}
Double_t halfLength[3] = {fDX, fDY, fDZ};
buffer.SetAABoundingBox(origin, halfLength);
}
buffer.SetRawSizes(8, 3 * 8, 12, 3 * 12, 6, 6 * 6);
}
buffer.fPnts[0] = fX - fDX;
buffer.fPnts[1] = fY - fDY;
buffer.fPnts[2] = fZ - fDZ;
buffer.fPnts[3] = fX + fDX;
buffer.fPnts[4] = fY - fDY;
buffer.fPnts[5] = fZ - fDZ;
buffer.fPnts[6] = fX + fDX;
buffer.fPnts[7] = fY + fDY;
buffer.fPnts[8] = fZ - fDZ;
buffer.fPnts[9] = fX - fDX;
buffer.fPnts[10] = fY + fDY;
buffer.fPnts[11] = fZ - fDZ;
buffer.fPnts[12] = fX - fDX;
buffer.fPnts[13] = fY - fDY;
buffer.fPnts[14] = fZ + fDZ;
buffer.fPnts[15] = fX + fDX;
buffer.fPnts[16] = fY - fDY;
buffer.fPnts[17] = fZ + fDZ;
buffer.fPnts[18] = fX + fDX;
buffer.fPnts[19] = fY + fDY;
buffer.fPnts[20] = fZ + fDZ;
buffer.fPnts[21] = fX - fDX;
buffer.fPnts[22] = fY + fDY;
buffer.fPnts[23] = fZ + fDZ;
buffer.fSegs[0] = fColor;
buffer.fSegs[1] = 0;
buffer.fSegs[2] = 1;
buffer.fSegs[3] = fColor;
buffer.fSegs[4] = 1;
buffer.fSegs[5] = 2;
buffer.fSegs[6] = fColor;
buffer.fSegs[7] = 2;
buffer.fSegs[8] = 3;
buffer.fSegs[9] = fColor;
buffer.fSegs[10] = 3;
buffer.fSegs[11] = 0;
buffer.fSegs[12] = fColor;
buffer.fSegs[13] = 4;
buffer.fSegs[14] = 5;
buffer.fSegs[15] = fColor;
buffer.fSegs[16] = 5;
buffer.fSegs[17] = 6;
buffer.fSegs[18] = fColor;
buffer.fSegs[19] = 6;
buffer.fSegs[20] = 7;
buffer.fSegs[21] = fColor;
buffer.fSegs[22] = 7;
buffer.fSegs[23] = 4;
buffer.fSegs[24] = fColor;
buffer.fSegs[25] = 0;
buffer.fSegs[26] = 4;
buffer.fSegs[27] = fColor;
buffer.fSegs[28] = 1;
buffer.fSegs[29] = 5;
buffer.fSegs[30] = fColor;
buffer.fSegs[31] = 2;
buffer.fSegs[32] = 6;
buffer.fSegs[33] = fColor;
buffer.fSegs[34] = 3;
buffer.fSegs[35] = 7;
buffer.fPols[0] = fColor;
buffer.fPols[1] = 4;
buffer.fPols[2] = 8;
buffer.fPols[3] = 4;
buffer.fPols[4] = 9;
buffer.fPols[5] = 0;
buffer.fPols[6] = fColor;
buffer.fPols[7] = 4;
buffer.fPols[8] = 9;
buffer.fPols[9] = 5;
buffer.fPols[10] = 10;
buffer.fPols[11] = 1;
buffer.fPols[12] = fColor;
buffer.fPols[13] = 4;
buffer.fPols[14] = 10;
buffer.fPols[15] = 6;
buffer.fPols[16] = 11;
buffer.fPols[17] = 2;
buffer.fPols[18] = fColor;
buffer.fPols[19] = 4;
buffer.fPols[20] = 11;
buffer.fPols[21] = 7;
buffer.fPols[22] = 8;
buffer.fPols[23] = 3;
buffer.fPols[24] = fColor;
buffer.fPols[25] = 4;
buffer.fPols[26] = 1;
buffer.fPols[27] = 2;
buffer.fPols[28] = 3;
buffer.fPols[29] = 0;
buffer.fPols[30] = fColor;
buffer.fPols[31] = 4;
buffer.fPols[32] = 7;
buffer.fPols[33] = 6;
buffer.fPols[34] = 5;
buffer.fPols[35] = 4;
}
return buffer;
}
class SBPyramid : public Shape {
public:
~SBPyramid() override{};
private:
};
: Shape(color,
x,
y, z), fDX(dX), fDY(dY), fDZ(dZ)
{
}
{
buffer.ClearSectionsValid();
buffer.fID = this;
buffer.fColor = fColor;
buffer.fTransparency = 0;
buffer.SetLocalMasterIdentity();
}
Double_t halfLength[3] = {fDX, fDY, fDZ / 2.0};
Double_t origin[3] = {fX, fY, fZ + halfLength[2]};
buffer.SetAABoundingBox(origin, halfLength);
}
buffer.SetRawSizes(5, 3 * 5, 8, 3 * 8, 5, 6 + 4 * 5);
}
buffer.fPnts[0] = fX - fDX;
buffer.fPnts[1] = fY - fDY;
buffer.fPnts[2] = fZ;
buffer.fPnts[3] = fX + fDX;
buffer.fPnts[4] = fY - fDY;
buffer.fPnts[5] = fZ;
buffer.fPnts[6] = fX + fDX;
buffer.fPnts[7] = fY + fDY;
buffer.fPnts[8] = fZ;
buffer.fPnts[9] = fX - fDX;
buffer.fPnts[10] = fY + fDY;
buffer.fPnts[11] = fZ;
buffer.fPnts[12] = fX;
buffer.fPnts[13] = fY;
buffer.fPnts[14] = fZ + fDZ;
buffer.fSegs[0] = fColor;
buffer.fSegs[1] = 0;
buffer.fSegs[2] = 1;
buffer.fSegs[3] = fColor;
buffer.fSegs[4] = 1;
buffer.fSegs[5] = 2;
buffer.fSegs[6] = fColor;
buffer.fSegs[7] = 2;
buffer.fSegs[8] = 3;
buffer.fSegs[9] = fColor;
buffer.fSegs[10] = 3;
buffer.fSegs[11] = 0;
buffer.fSegs[12] = fColor;
buffer.fSegs[13] = 0;
buffer.fSegs[14] = 4;
buffer.fSegs[15] = fColor;
buffer.fSegs[16] = 1;
buffer.fSegs[17] = 4;
buffer.fSegs[18] = fColor;
buffer.fSegs[19] = 2;
buffer.fSegs[20] = 4;
buffer.fSegs[21] = fColor;
buffer.fSegs[22] = 3;
buffer.fSegs[23] = 4;
buffer.fPols[0] = fColor;
buffer.fPols[1] = 4;
buffer.fPols[2] = 0;
buffer.fPols[3] = 1;
buffer.fPols[4] = 2;
buffer.fPols[5] = 3;
buffer.fPols[6] = fColor;
buffer.fPols[7] = 3;
buffer.fPols[8] = 0;
buffer.fPols[9] = 4;
buffer.fPols[10] = 5;
buffer.fPols[11] = fColor;
buffer.fPols[12] = 3;
buffer.fPols[13] = 1;
buffer.fPols[14] = 5;
buffer.fPols[15] = 6;
buffer.fPols[16] = fColor;
buffer.fPols[17] = 3;
buffer.fPols[18] = 2;
buffer.fPols[19] = 6;
buffer.fPols[20] = 7;
buffer.fPols[21] = fColor;
buffer.fPols[22] = 3;
buffer.fPols[23] = 3;
buffer.fPols[24] = 7;
buffer.fPols[25] = 4;
}
return buffer;
}
public:
MyGeom();
~MyGeom() override;
private:
std::vector<Shape *> fShapes;
};
MyGeom::MyGeom()
{
Shape *aShape;
aShape =
new Box(
kRed, 0.0, 0.0, 0.0, 20.0, 20.0, 20.0);
fShapes.push_back(aShape);
aShape =
new Box(
kBlue, 50.0, 100.0, 200.0, 5.0, 10.0, 15.0);
fShapes.push_back(aShape);
aShape =
new SBPyramid(
kGreen, 20.0, 25.0, 45.0, 30.0, 30.0, 90.0);
fShapes.push_back(aShape);
}
MyGeom::~MyGeom()
{
}
{
}
{
std::vector<Shape *>::const_iterator ShapeIt = fShapes.begin();
Shape *shape;
while (ShapeIt != fShapes.end()) {
shape = *ShapeIt;
TBuffer3D &buffer = shape->GetBuffer3D(reqSections);
shape->GetBuffer3D(reqSections);
}
ShapeIt++;
}
}
void viewer3DMaster()
{
printf("\n\nviewer3DMaster: This frame demonstates master frame use of 3D viewer architecture.\n");
printf("Creates two boxes and a square based pyramid, described in master frame.\n\n");
MyGeom *myGeom = new MyGeom;
myGeom->Draw("ogl");
}
#define ClassDefOverride(name, id)
Use this attribute class when an object should have 3D capabilities.
Generic 3D primitive description class.
Mother of all ROOT objects.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
virtual void Paint(Option_t *option="")
This method must be overridden if a class wants to paint itself.
Abstract 3D shapes viewer.
virtual Int_t AddObject(const TBuffer3D &buffer, Bool_t *addChildren=nullptr)=0