44 shift->getOp()->exec(
this);
45 GeoTrf::RotationMatrix3D rotation=shift->getX().rotation();
46 GeoTrf::Vector3D translation = shift->getX().translation();
54 SbVec3d trx(translation.x(),translation.y(),translation.z());
57 rotation(0,1),rotation(1,1),rotation(2,1),0,
58 rotation(0,2),rotation(1,2),rotation(2,2),0,
119 double *
z =
new double[pcon->getNPlanes ()];
120 double *rmn =
new double[pcon->getNPlanes ()];
121 double *rmx =
new double[pcon->getNPlanes ()];
123 for (
unsigned s = 0; s < pcon->getNPlanes (); s++) {
124 z[s] = pcon->getZPlane (s);
125 rmn[s] = pcon->getRMinPlane (s);
126 rmx[s] = pcon->getRMaxPlane (s);
128 m_polyhedron = std::make_unique<SbPolyhedronPcon> (pcon->getSPhi(), pcon->getDPhi(), pcon->getNPlanes (),
z, rmn, rmx);
137 double *
z =
new double[pgon->getNPlanes ()];
138 double *rmn =
new double[pgon->getNPlanes ()];
139 double *rmx =
new double[pgon->getNPlanes ()];
141 for (
unsigned s = 0; s < pgon->getNPlanes (); s++) {
142 z[s] = pgon->getZPlane (s);
143 rmn[s] = pgon->getRMinPlane (s);
144 rmx[s] = pgon->getRMaxPlane (s);
146 m_polyhedron = std::make_unique<SbPolyhedronPgon> (pgon->getSPhi(), pgon->getDPhi(), pgon->getNSides(), pgon->getNPlanes (),
z, rmn, rmx);
205 double vertTolerance = 1E-15;
206 std::vector<GeoFacetVertex> vertexList;
207 std::map<GeoFacet*,std::vector<size_t> > facetVertIndInSolid;
210 for(
size_t facetIndInSolid = 0; facetIndInSolid<tessellated->getNumberOfFacets(); ++facetIndInSolid) {
211 GeoFacet* facet = tessellated->getFacet(facetIndInSolid);
213 facetVertIndInSolid[facet] = std::vector<size_t>();
214 std::vector<size_t>& current = facetVertIndInSolid[facet];
215 if(facet->getNumberOfVertices()==3)
220 size_t vertexListSize = vertexList.size();
221 GeoFacetVertex vertex(0.,0.,0.);
224 for(
size_t vertexIndInFacet=0; vertexIndInFacet<facet->getNumberOfVertices(); ++vertexIndInFacet) {
225 vertex = facet->getVertex(vertexIndInFacet);
230 while(j<vertexListSize && !found) {
231 GeoFacetVertex vertexToCheck = vertexList[j];
232 found = (vertexToCheck-vertex).
mag() < vertTolerance;
237 current[vertexIndInFacet] = j;
240 vertexList.push_back(vertex);
241 current[vertexIndInFacet] = vertexList.size()-1;
250 for(
size_t vertexInd=0; vertexInd<vertexList.size(); ++vertexInd) {
251 GeoFacetVertex vertex = vertexList[vertexInd];
252 polyhedron->
AddVertex(vertex.x(),vertex.y(),vertex.z());
256 for(
size_t facetIndInSolid = 0; facetIndInSolid<tessellated->getNumberOfFacets(); ++facetIndInSolid) {
257 GeoFacet* facet = tessellated->getFacet(facetIndInSolid);
258 std::vector<size_t>& current = facetVertIndInSolid[facet];
261 for (
size_t j=0; j<4; j++)
262 v[j] = (j<current.size() ? current[j]+1 : 0);
264 polyhedron->
AddFacet(v[0],v[1],v[2],v[3]);