diff --git a/graf3d/eve7/inc/ROOT/REveCsgOps.hxx b/graf3d/eve7/inc/ROOT/REveCsgOps.hxx index 1c5f92fa85195581ded34aa4543e4970fd56021c..2c855e595452a99b9a63a4885bec2293064a7065 100644 --- a/graf3d/eve7/inc/ROOT/REveCsgOps.hxx +++ b/graf3d/eve7/inc/ROOT/REveCsgOps.hxx @@ -7,7 +7,6 @@ #include "Rtypes.h" class TBuffer3D; -class TGeoMatrix; namespace ROOT { namespace Experimental { @@ -24,7 +23,7 @@ public: }; -TBaseMesh *ConvertToMesh(const TBuffer3D &buff, TGeoMatrix *matr = nullptr); +TBaseMesh *ConvertToMesh(const TBuffer3D &buff); TBaseMesh *BuildUnion(const TBaseMesh *leftOperand, const TBaseMesh *rightOperand); TBaseMesh *BuildIntersection(const TBaseMesh *leftOperand, const TBaseMesh *rightOperand); TBaseMesh *BuildDifference(const TBaseMesh *leftOperand, const TBaseMesh *rightOperand); diff --git a/graf3d/eve7/src/REveCsgOps.cxx b/graf3d/eve7/src/REveCsgOps.cxx index 72951bb6203fde423044dc0e86cfd1dcc33985a3..51f761e71cf32c8aecac11536f7c732a2b8e910c 100644 --- a/graf3d/eve7/src/REveCsgOps.cxx +++ b/graf3d/eve7/src/REveCsgOps.cxx @@ -72,13 +72,6 @@ #include "Rtypes.h" #include "TMath.h" -// #include <ROOT/REveGeoShape.hxx> -// #include <ROOT/REveUtil.hxx> - -// #include "TBuffer3DTypes.h" -#include "TGeoMatrix.h" - - namespace ROOT { namespace Experimental { namespace EveCsg { @@ -2639,22 +2632,15 @@ AMesh_t *build_difference(const AMesh_t &meshA, const AMesh_t &meshB, Bool_t pre ///////////////////////////////////////////////////////////////////////////// -TBaseMesh *ConvertToMesh(const TBuffer3D &buff, TGeoMatrix *matr) +TBaseMesh *ConvertToMesh(const TBuffer3D &buff) { AMesh_t *newMesh = new AMesh_t; const Double_t *v = buff.fPnts; newMesh->Verts().resize(buff.NbPnts()); - Double_t dmaster[3]; - for (Int_t i = 0; i < (int) buff.NbPnts(); ++i) { - if (matr) { - matr->LocalToMaster(&v[i*3], dmaster); - newMesh->Verts()[i] = TVertexBase(dmaster[0], dmaster[1], dmaster[2]); - } else { - newMesh->Verts()[i] = TVertexBase(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]); - } + newMesh->Verts()[i] = TVertexBase(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]); } const Int_t *segs = buff.fSegs; diff --git a/graf3d/eve7/src/REveGeoPolyShape.cxx b/graf3d/eve7/src/REveGeoPolyShape.cxx index 52708655e541fb5c3c1b70a234b1285298d37f40..e6621deb3d7a3084b9c7b87da62ebeab62a74237 100644 --- a/graf3d/eve7/src/REveGeoPolyShape.cxx +++ b/graf3d/eve7/src/REveGeoPolyShape.cxx @@ -48,7 +48,7 @@ Bool_t REveGeoPolyShape::GetAutoCalculateNormals() { return fgAutoCalcul //////////////////////////////////////////////////////////////////////// /// Function produces mesh for provided shape, applying matrix to the result -std::unique_ptr<EveCsg::TBaseMesh> MakeMesh(TGeoMatrix *matr, TGeoShape *shape) +std::unique_ptr<EveCsg::TBaseMesh> MakeGeoMesh(TGeoMatrix *matr, TGeoShape *shape) { TGeoCompositeShape *comp = dynamic_cast<TGeoCompositeShape *> (shape); @@ -56,7 +56,19 @@ std::unique_ptr<EveCsg::TBaseMesh> MakeMesh(TGeoMatrix *matr, TGeoShape *shape) if (!comp) { std::unique_ptr<TBuffer3D> b3d(shape->MakeBuffer3D()); - res.reset(EveCsg::ConvertToMesh(*b3d.get(), matr)); + + if (matr) { + Double_t *v = b3d->fPnts; + Double_t buf[3]; + for (UInt_t i = 0; i < b3d->NbPnts(); ++i) { + buf[0] = v[i*3]; + buf[1] = v[i*3+1]; + buf[2] = v[i*3+2]; + matr->LocalToMaster(buf, &v[i*3]); + } + } + + res.reset(EveCsg::ConvertToMesh(*b3d.get())); } else { auto node = comp->GetBoolNode(); @@ -64,10 +76,10 @@ std::unique_ptr<EveCsg::TBaseMesh> MakeMesh(TGeoMatrix *matr, TGeoShape *shape) if (matr) { mleft = *matr; mright = *matr; } mleft.Multiply(node->GetLeftMatrix()); - auto left = MakeMesh(&mleft, node->GetLeftShape()); + auto left = MakeGeoMesh(&mleft, node->GetLeftShape()); mright.Multiply(node->GetRightMatrix()); - auto right = MakeMesh(&mright, node->GetRightShape()); + auto right = MakeGeoMesh(&mright, node->GetRightShape()); if (node->IsA() == TGeoUnion::Class()) res.reset(EveCsg::BuildUnion(left.get(), right.get())); if (node->IsA() == TGeoIntersection::Class()) res.reset(EveCsg::BuildIntersection(left.get(), right.get())); @@ -103,7 +115,7 @@ REveGeoPolyShape::REveGeoPolyShape(TGeoCompositeShape *cshape, Int_t n_seg) : REveGeoManagerHolder gmgr(REveGeoShape::GetGeoManager(), n_seg); - auto mesh = MakeMesh(nullptr, cshape); + auto mesh = MakeGeoMesh(nullptr, cshape); Int_t nv = mesh->NumberOfVertices(); fVertices.reserve(3 * nv);