125   fMinExtent.
set(0,0,0);
 
  126   fMaxExtent.
set(0,0,0);
 
  155   if (&ts == 
this) 
return *
this;
 
  171 void G4TessellatedSolid::Initialize()
 
  175   fpPolyhedron = 0; fCubicVolume = 0.; fSurfaceArea = 0.;
 
  177   fGeometryType = 
"G4TessellatedSolid";
 
  178   fSolidClosed  = 
false;
 
  180   fMinExtent.
set(kInfinity,kInfinity,kInfinity);
 
  181   fMaxExtent.
set(-kInfinity,-kInfinity,-kInfinity);
 
  188 void G4TessellatedSolid::DeleteObjects ()
 
  190   G4int size = fFacets.size();
 
  191   for (
G4int i = 0; i < size; ++i)  { 
delete fFacets[i]; }
 
  207   for (
G4int i = 0; i < 
n; ++i)
 
  226     G4Exception(
"G4TessellatedSolid::AddFacet()", 
"GeomSolids1002",
 
  227                 JustWarning, 
"Attempt to add facets when solid is closed.");
 
  232     set<G4VertexInfo,G4VertexComparator>::iterator begin
 
  233       = fFacetList.begin(), end = fFacetList.end(), pos, it;
 
  236     value.
id = fFacetList.size();
 
  237     value.
mag2 = p.
x() + p.
y() + p.
z();
 
  243       pos = fFacetList.lower_bound(value);
 
  246       while (!found && it != end)
 
  251         if ((found = (facet == aFacet))) 
break;
 
  253         if (dif > kCarTolerance3) 
break;
 
  257       if (fFacets.size() > 1)
 
  260         while (!found && it != begin)
 
  266           found = (facet == aFacet);
 
  269           if (dif > kCarTolerance3) 
break;
 
  276       fFacets.push_back(aFacet);
 
  277       fFacetList.insert(value);
 
  284     G4Exception(
"G4TessellatedSolid::AddFacet()", 
"GeomSolids1002",
 
  285                 JustWarning, 
"Attempt to add facet not properly defined.");    
 
  293 G4int G4TessellatedSolid::SetAllUsingStack(
const std::vector<G4int> &voxel,
 
  294                                            const std::vector<G4int> &
max,
 
  297   vector<G4int> xyz = voxel;
 
  298   stack<vector<G4int> > pos;
 
  301   G4int cc = 0, nz = 0;
 
  303   vector<G4int> candidates;
 
  321         for (
G4int i = 0; i <= 2; ++i)
 
  323           if (xyz[i] < max[i] - 1)
 
  349 void G4TessellatedSolid::PrecalculateInsides()
 
  351   vector<G4int> voxel(3), maxVoxels(3);
 
  352   for (
G4int i = 0; i <= 2; ++i) maxVoxels[i] = fVoxels.
GetBoundary(i).size();
 
  353   G4int size = maxVoxels[0] * maxVoxels[1] * maxVoxels[2];
 
  360   for (voxel[2] = 0; voxel[2] < maxVoxels[2] - 1; ++voxel[2])
 
  362     for (voxel[1] = 0; voxel[1] < maxVoxels[1] - 1; ++voxel[1])
 
  364       for (voxel[0] = 0; voxel[0] < maxVoxels[0] - 1; ++voxel[0])
 
  367         if (!checked[index] && fVoxels.
IsEmpty(index))
 
  371           SetAllUsingStack(voxel, maxVoxels, inside, checked);
 
  381 void G4TessellatedSolid::Voxelize ()
 
  393     PrecalculateInsides();
 
  409 void G4TessellatedSolid::SetExtremeFacets()
 
  411   G4int size = fFacets.size();
 
  412   for (
G4int j = 0; j < size; ++j)
 
  417     G4int vsize = fVertexList.size();
 
  418     for (
G4int i=0; i < vsize; ++i)
 
  420       if (!facet.
IsInside(fVertexList[i]))
 
  426     if (isExtreme) fExtremeFacets.insert(&facet);
 
  432 void G4TessellatedSolid::CreateVertexList()
 
  444   set<G4VertexInfo,G4VertexComparator> vertexListSorted;
 
  445   set<G4VertexInfo,G4VertexComparator>::iterator begin
 
  446      = vertexListSorted.begin(), end = vertexListSorted.end(), pos, it;
 
  451   G4int size = fFacets.size();
 
  455   vector<G4int> newIndex(100);
 
  457   for (
G4int k = 0; k < size; ++k)
 
  465       value.
id = fVertexList.size();
 
  466       value.
mag2 = p.
x() + p.
y() + p.
z();
 
  472         pos = vertexListSorted.lower_bound(value);
 
  479           found = (dif < kCarTolerance24);
 
  481           dif = q.
x() + q.
y() + q.
z() - value.
mag2;
 
  482           if (dif > kCarTolerance3) 
break;
 
  486         if (!found && (fVertexList.size() > 1))
 
  495             found = (dif < kCarTolerance24);
 
  497         dif = value.
mag2 - (q.
x() + q.
y() + q.
z());
 
  498             if (dif > kCarTolerance3) 
break;
 
  507         G4cout << 
"Adding new vertex #" << i << 
" of facet " << k
 
  511         fVertexList.push_back(p);
 
  512         vertexListSorted.insert(value);
 
  513         begin = vertexListSorted.begin();
 
  514         end = vertexListSorted.end();
 
  515         newIndex[i] = value.
id;
 
  519         if (value.
id == 0) fMinExtent = fMaxExtent = 
p; 
 
  522           if (p.
x() > fMaxExtent.
x()) fMaxExtent.
setX(p.
x());
 
  523           else if (p.
x() < fMinExtent.
x()) fMinExtent.
setX(p.
x());
 
  524           if (p.
y() > fMaxExtent.
y()) fMaxExtent.
setY(p.
y());
 
  525           else if (p.
y() < fMinExtent.
y()) fMinExtent.
setY(p.
y());
 
  526           if (p.
z() > fMaxExtent.
z()) fMaxExtent.
setZ(p.
z());
 
  527           else if (p.
z() < fMinExtent.
z()) fMinExtent.
setZ(p.
z());
 
  534         G4cout << 
"Vertex #" << i << 
" of facet " << k
 
  535                << 
" found, redirecting to " << 
id << 
G4endl;
 
  547   vector<G4ThreeVector>(fVertexList).
swap(fVertexList);
 
  551   for (set<G4VertexInfo,G4VertexComparator>::iterator res=
 
  552        vertexListSorted.begin(); res!=vertexListSorted.end(); ++res)
 
  554     G4int id = (*res).id;
 
  557     if (previousValue && (previousValue - 1e-9 > mvalue))
 
  558       G4cout << 
"Error in CreateVertexList: previousValue " << previousValue 
 
  559              <<  
" is smaller than mvalue " << mvalue << 
G4endl;
 
  560     previousValue = mvalue;
 
  572   G4cout << 
"G4TessellatedSolid - Allocated memory without voxel overhead " 
  573          << without << 
"; with " << with << 
"; ratio: " << ratio << 
G4endl;  
 
  629   for (
G4int i = 0; i < size; ++i)
 
  641   return fFacets.size();
 
  655   vector<G4int> startingVoxel(3);
 
  658   const G4double dirTolerance = 1.0E-14;
 
  660   const vector<G4int> &startingCandidates =
 
  662   G4int limit = startingCandidates.size();
 
  663   if (limit == 0 && fInsides.
GetNbits())
 
  672   for(
G4int i = 0; i < limit; ++i)
 
  674     G4int candidate = startingCandidates[i];
 
  675     G4VFacet &facet = *fFacets[candidate];
 
  677     if (dist < minDist) minDist = dist;
 
  678     if (dist <= kCarToleranceHalf)
 
  704   G4bool nearParallel = 
false;
 
  712     distOut = distIn = kInfinity;
 
  724     vector<G4int> curVoxel(3);
 
  725     curVoxel = startingVoxel;
 
  733       const vector<G4int> &candidates =
 
  734         started ? startingCandidates : fVoxels.
GetCandidates(curVoxel);
 
  736       if (
G4int candidatesCount = candidates.size())
 
  738         for (
G4int i = 0 ; i < candidatesCount; ++i)
 
  740           G4int candidate = candidates[i];
 
  742           G4VFacet &facet = *fFacets[candidate];
 
  744           crossingO = facet.
Intersect(p,v,
true,distO,distFromSurfaceO,normalO);
 
  745           crossingI = facet.
Intersect(p,v,
false,distI,distFromSurfaceI,normalI);
 
  747           if (crossingO || crossingI)
 
  751             nearParallel = (crossingO
 
  752                      && std::fabs(normalO.
dot(v))<dirTolerance)
 
  753                      || (crossingI && std::fabs(normalI.
dot(v))<dirTolerance);
 
  756               if (crossingO && distO > 0.0 && distO < distOut) 
 
  758               if (crossingI && distI > 0.0 && distI < distIn)  
 
  764         if (nearParallel) 
break;
 
  778       if (shift == kInfinity) 
break;
 
  780       currentPoint += direction * (shift + shiftBonus);
 
  785   while (nearParallel && sm!=fMaxTries);
 
  799     std::ostringstream message;
 
  800     G4int oldprc = message.precision(16);
 
  801     message << 
"Cannot determine whether point is inside or outside volume!" 
  803       << 
"Solid name       = " << 
GetName()  << G4endl
 
  804       << 
"Geometry Type    = " << fGeometryType  << G4endl
 
  805       << 
"Number of facets = " << fFacets.size() << G4endl
 
  806       << 
"Position:"  << G4endl << G4endl
 
  807       << 
"p.x() = "   << p.
x()/
mm << 
" mm" << G4endl
 
  808       << 
"p.y() = "   << p.
y()/
mm << 
" mm" << G4endl
 
  809       << 
"p.z() = "   << p.
z()/
mm << 
" mm";
 
  810     message.precision(oldprc);
 
  825   if (distIn == kInfinity && distOut == kInfinity)
 
  827   else if (distIn <= distOut - kCarToleranceHalf)
 
  829   else if (distOut <= distIn - kCarToleranceHalf)
 
  846   const G4double dirTolerance = 1.0E-14;
 
  852   G4int size = fFacets.size();
 
  853   for (
G4int i = 0; i < size; ++i)
 
  857     if (dist < minDist) minDist = dist;
 
  858     if (dist <= kCarToleranceHalf)
 
  893   for (
G4int i=0; i<nTry; ++i)
 
  895     G4bool nearParallel = 
false;
 
  904       distOut =  distIn = kInfinity;
 
  907       vector<G4VFacet*>::const_iterator 
f = fFacets.begin();
 
  916         crossingO = ((*f)->Intersect(p,v,
true,distO,distFromSurfaceO,normalO));
 
  917         crossingI = ((*f)->Intersect(p,v,
false,distI,distFromSurfaceI,normalI));
 
  918         if (crossingO || crossingI)
 
  920           nearParallel = (crossingO && std::fabs(normalO.
dot(v))<dirTolerance)
 
  921                       || (crossingI && std::fabs(normalI.
dot(v))<dirTolerance);
 
  924             if (crossingO && distO > 0.0 && distO < distOut) distOut = distO;
 
  925             if (crossingI && distI > 0.0 && distI < distIn)  distIn  = distI;
 
  928       } 
while (!nearParallel && ++f!=fFacets.end());
 
  929     } 
while (nearParallel && sm!=fMaxTries);
 
  939       std::ostringstream message;
 
  940       G4int oldprc = message.precision(16);
 
  941       message << 
"Cannot determine whether point is inside or outside volume!" 
  943         << 
"Solid name       = " << 
GetName()  << G4endl
 
  944         << 
"Geometry Type    = " << fGeometryType  << G4endl
 
  945         << 
"Number of facets = " << fFacets.size() << G4endl
 
  946         << 
"Position:"  << G4endl << G4endl
 
  947         << 
"p.x() = "   << p.
x()/
mm << 
" mm" << G4endl
 
  948         << 
"p.y() = "   << p.
y()/
mm << 
" mm" << G4endl
 
  949         << 
"p.z() = "   << p.
z()/
mm << 
" mm";
 
  950       message.precision(oldprc);
 
  965     if (distIn == kInfinity && distOut == kInfinity)
 
  967     else if (distIn <= distOut - kCarToleranceHalf)
 
  969     else if (distOut <= distIn - kCarToleranceHalf)
 
  972     if (i == 0) location = locationprime;
 
  991     vector<G4int> curVoxel(3);
 
  993     const vector<G4int> &candidates = fVoxels.
GetCandidates(curVoxel);
 
  996     if (
G4int limit = candidates.size())
 
  999       for(
G4int i = 0 ; i < limit ; ++i)
 
 1001         G4int candidate = candidates[i];
 
 1002         G4VFacet &fct = *fFacets[candidate];
 
 1004         if (dist < minDist) minDist = dist;
 
 1005         if (dist <= kCarToleranceHalf)
 
 1012     minDist = MinDistanceFacet(p, 
true, facet);
 
 1016     minDist = kInfinity;
 
 1017     G4int size = fFacets.size();
 
 1018     for (
G4int i = 0; i < size; ++i)
 
 1030   if (minDist != kInfinity)
 
 1033     return minDist <= kCarToleranceHalf;
 
 1038     std::ostringstream message;
 
 1039     message << 
"Point p is not on surface !?" << G4endl
 
 1040       << 
"          No facets found for point: " << p << 
" !" << G4endl
 
 1041       << 
"          Returning approximated value for normal.";
 
 1043     G4Exception(
"G4TessellatedSolid::SurfaceNormal(p)",
 
 1062 G4TessellatedSolid::DistanceToInNoVoxels (
const G4ThreeVector &p,
 
 1074     std::ostringstream message;
 
 1075     G4int oldprc = message.precision(16) ;
 
 1076     message << 
"Point p is already inside!?" << G4endl
 
 1077       << 
"Position:"  << G4endl << G4endl
 
 1078       << 
"   p.x() = "   << p.
x()/
mm << 
" mm" << G4endl
 
 1079       << 
"   p.y() = "   << p.
y()/
mm << 
" mm" << G4endl
 
 1080       << 
"   p.z() = "   << p.
z()/
mm << 
" mm" << G4endl
 
 1082     message.precision(oldprc) ;
 
 1083     G4Exception(
"G4TriangularFacet::DistanceToIn(p,v)",
 
 1088   G4int size = fFacets.size();
 
 1089   for (
G4int i = 0; i < size; ++i)
 
 1092     if (facet.
Intersect(p,v,
false,dist,distFromSurface,normal))
 
 1101       if (distFromSurface > kCarToleranceHalf && dist >= 0.0 && dist < minDist)
 
 1107         if (-kCarToleranceHalf <= dist && dist <= kCarToleranceHalf)
 
 1113       if  (distFromSurface > -kCarToleranceHalf
 
 1114             && distFromSurface <  kCarToleranceHalf)
 
 1128 G4TessellatedSolid::DistanceToOutNoVoxels (
const G4ThreeVector &p,
 
 1142     std::ostringstream message;
 
 1143     G4int oldprc = message.precision(16) ;
 
 1144     message << 
"Point p is already outside!?" << G4endl
 
 1145       << 
"Position:"  << G4endl << G4endl
 
 1146       << 
"   p.x() = "   << p.
x()/
mm << 
" mm" << G4endl
 
 1147       << 
"   p.y() = "   << p.
y()/
mm << 
" mm" << G4endl
 
 1148       << 
"   p.z() = "   << p.
z()/
mm << 
" mm" << G4endl
 
 1150     message.precision(oldprc) ;
 
 1151     G4Exception(
"G4TriangularFacet::DistanceToOut(p)",
 
 1156   G4bool isExtreme = 
false;
 
 1157   G4int size = fFacets.size();
 
 1158   for (
G4int i = 0; i < size; ++i)
 
 1161     if (facet.
Intersect(p,v,
true,dist,distFromSurface,normal))
 
 1163       if (distFromSurface > 0.0 && distFromSurface <= kCarToleranceHalf &&
 
 1167         aConvex = (fExtremeFacets.find(&facet) != fExtremeFacets.end());
 
 1170         aNormalVector = normal;
 
 1173       if (dist >= 0.0 && dist < minDist)
 
 1177         isExtreme = (fExtremeFacets.find(&facet) != fExtremeFacets.end());
 
 1181   if (minDist < kInfinity)
 
 1183     aNormalVector = minNormal;
 
 1184     aConvex = isExtreme;
 
 1191     Normal(p, aNormalVector);
 
 1198 void G4TessellatedSolid::
 
 1199 DistanceToOutCandidates(
const std::vector<G4int> &candidates,
 
 1203                               G4int &minCandidate )
 const 
 1205   G4int candidatesCount = candidates.size();
 
 1210   for (
G4int i = 0 ; i < candidatesCount; ++i)
 
 1212     G4int candidate = candidates[i];
 
 1213     G4VFacet &facet = *fFacets[candidate];
 
 1214     if (facet.
Intersect(aPoint,direction,
true,dist,distFromSurface,normal))
 
 1216       if (distFromSurface > 0.0 && distFromSurface <= kCarToleranceHalf
 
 1223         minCandidate = candidate;
 
 1226       if (dist >= 0.0 && dist < minDist)
 
 1230         minCandidate = candidate;
 
 1239 G4TessellatedSolid::DistanceToOutCore(
const G4ThreeVector &aPoint,
 
 1249     minDistance = kInfinity;
 
 1254     vector<G4int> curVoxel(3);
 
 1255     if (!fVoxels.
Contains(aPoint)) 
return 0;
 
 1257     fVoxels.
GetVoxel(curVoxel, currentPoint);
 
 1261     const vector<G4int> *old = 0;
 
 1263     G4int minCandidate = -1;
 
 1266       const vector<G4int> &candidates = fVoxels.
GetCandidates(curVoxel);
 
 1267       if (old == &candidates)
 
 1269       if (old != &candidates && candidates.size())
 
 1271         DistanceToOutCandidates(candidates, aPoint, direction, minDistance,
 
 1272                                 aNormalVector, minCandidate); 
 
 1273         if (minDistance <= totalShift) 
break; 
 
 1277       if (shift == kInfinity) 
break;
 
 1279       totalShift += shift;
 
 1280       if (minDistance <= totalShift) 
break;
 
 1282       currentPoint += direction * (shift + shiftBonus);
 
 1288     if (minCandidate < 0)
 
 1293       Normal(aPoint, aNormalVector);
 
 1297       aConvex = (fExtremeFacets.find(fFacets[minCandidate])
 
 1298               != fExtremeFacets.end());
 
 1303     minDistance = DistanceToOutNoVoxels(aPoint, aDirection, aNormalVector,
 
 1312 DistanceToInCandidates(
const std::vector<G4int> &candidates,
 
 1316   G4int candidatesCount = candidates.size();
 
 1322   for (
G4int i = 0 ; i < candidatesCount; ++i)
 
 1324     G4int candidate = candidates[i];
 
 1325     G4VFacet &facet = *fFacets[candidate];
 
 1326     if (facet.
Intersect(aPoint,direction,
false,dist,distFromSurface,normal))
 
 1335       if ( (distFromSurface > kCarToleranceHalf)
 
 1336         && (dist >= 0.0) && (dist < minDistance))
 
 1342         if (-kCarToleranceHalf <= dist && dist <= kCarToleranceHalf)
 
 1346         else if  (distFromSurface > -kCarToleranceHalf
 
 1347                && distFromSurface <  kCarToleranceHalf)
 
 1360 G4TessellatedSolid::DistanceToInCore(
const G4ThreeVector &aPoint,
 
 1368     minDistance = kInfinity;
 
 1372     if (shift == kInfinity) 
return shift;
 
 1375       currentPoint += direction * (shift + shiftBonus);
 
 1380     vector<G4int> curVoxel(3);
 
 1382     fVoxels.
GetVoxel(curVoxel, currentPoint);
 
 1385       const vector<G4int> &candidates = fVoxels.
GetCandidates(curVoxel);
 
 1386       if (candidates.size())
 
 1388         G4double distance=DistanceToInCandidates(candidates, aPoint, direction);
 
 1389         if (minDistance > distance) minDistance = distance;
 
 1390         if (distance < totalShift) 
break;
 
 1393       shift = fVoxels.
DistanceToNext(currentPoint, direction, curVoxel);
 
 1394       if (shift == kInfinity ) 
break;
 
 1396       totalShift += shift;
 
 1397       if (minDistance < totalShift) 
break;
 
 1399       currentPoint += direction * (shift + shiftBonus);
 
 1405     minDistance = DistanceToInNoVoxels(aPoint, aDirection, aPstep);
 
 1414 G4TessellatedSolid::CompareSortedVoxel(
const std::pair<G4int, G4double> &l,
 
 1415                                        const std::pair<G4int, G4double> &
r)
 
 1417   return l.second < r.second;
 
 1423 G4TessellatedSolid::MinDistanceFacet(
const G4ThreeVector &p,
 
 1430   vector<pair<G4int, G4double> > voxelsSorted(size);
 
 1432   pair<G4int, G4double> 
info;
 
 1434   for (
G4int i = 0; i < size; ++i)
 
 1441     info.second = safety;
 
 1442     voxelsSorted[i] = 
info;
 
 1445   std::sort(voxelsSorted.begin(), voxelsSorted.end(),
 
 1446             &G4TessellatedSolid::CompareSortedVoxel);
 
 1448   for (
G4int i = 0; i < size; ++i)
 
 1450     const pair<G4int,G4double> &inf = voxelsSorted[i];
 
 1452     if (dist > minDist) 
break;
 
 1455     G4int csize = candidates.size();
 
 1456     for (
G4int j = 0; j < csize; ++j)
 
 1458       G4int candidate = candidates[j];
 
 1459       G4VFacet &facet = *fFacets[candidate];
 
 1460       dist = simple ? facet.
Distance(p,minDist)
 
 1480     std::ostringstream message;
 
 1481     G4int oldprc = message.precision(16) ;
 
 1482     message << 
"Point p is already inside!?" << G4endl
 
 1483       << 
"Position:"  << G4endl << G4endl
 
 1484       << 
"p.x() = "   << p.
x()/
mm << 
" mm" << G4endl
 
 1485       << 
"p.y() = "   << p.
y()/
mm << 
" mm" << G4endl
 
 1486       << 
"p.z() = "   << p.
z()/
mm << 
" mm" << G4endl
 
 1488     message.precision(oldprc) ;
 
 1503       vector<G4int> startingVoxel(3);
 
 1504       fVoxels.
GetVoxel(startingVoxel, p);
 
 1505       const vector<G4int> &candidates = fVoxels.
GetCandidates(startingVoxel);
 
 1506       if (candidates.size() == 0 && fInsides.
GetNbits())
 
 1509         if (fInsides[index]) 
return 0.;
 
 1514     minDist = MinDistanceFacet(p, 
true, facet);
 
 1518     minDist = kInfinity;
 
 1519     G4int size = fFacets.size();
 
 1520     for (
G4int i = 0; i < size; ++i)
 
 1524       if (dist < minDist) minDist  = dist;
 
 1538     std::ostringstream message;
 
 1539     G4int oldprc = message.precision(16) ;
 
 1540     message << 
"Point p is already outside!?" << G4endl
 
 1541       << 
"Position:"  << G4endl << G4endl
 
 1542       << 
"p.x() = "   << p.
x()/
mm << 
" mm" << G4endl
 
 1543       << 
"p.y() = "   << p.
y()/
mm << 
" mm" << G4endl
 
 1544       << 
"p.z() = "   << p.
z()/
mm << 
" mm" << G4endl
 
 1546     message.precision(oldprc) ;
 
 1547     G4Exception(
"G4TriangularFacet::DistanceToOut(p)",
 
 1559     minDist = MinDistanceFacet(p, 
true, facet);
 
 1563     minDist = kInfinity;
 
 1565     G4int size = fFacets.size();
 
 1566     for (
G4int i = 0; i < size; ++i)
 
 1570       if (dist < minDist) minDist  = dist;
 
 1584   return fGeometryType;
 
 1592   os << 
"Geometry Type    = " << fGeometryType  << 
G4endl;
 
 1593   os << 
"Number of facets = " << fFacets.size() << 
G4endl;
 
 1595   G4int size = fFacets.size();
 
 1596   for (
G4int i = 0; i < size; ++i)
 
 1598     os << 
"FACET #          = " << i + 1 << 
G4endl;
 
 1632     location = InsideVoxels(aPoint);
 
 1636     location = InsideNoVoxels(aPoint);
 
 1667   return DistanceToInCore(p,v,kInfinity);
 
 1709   G4double dist = DistanceToOutCore(p, v, n, valid);
 
 1729   G4int nVertices = fVertexList.size();
 
 1730   G4int nFacets   = fFacets.size();
 
 1733   for (G4ThreeVectorList::const_iterator v= fVertexList.begin();
 
 1734                                          v!=fVertexList.end(); ++
v)
 
 1739   G4int size = fFacets.size();
 
 1740   for (
G4int i = 0; i < size; ++i)
 
 1746     else if (n == 3) v[3] = 0;
 
 1747     for (
G4int j=0; j<
n; ++j)
 
 1752     polyhedron->
AddFacet(v[0],v[1],v[2],v[3]);
 
 1765   if (!fpPolyhedron ||
 
 1769     delete fpPolyhedron;
 
 1772   return fpPolyhedron;
 
 1788   G4int size = fVertexList.size();
 
 1791   for (
G4int i=0; i < size; ++i)
 
 1798   G4ThreeVector maxExtent(-kInfinity, -kInfinity, -kInfinity);
 
 1800   size = transVertexList.size();
 
 1801   for (
G4int i=0; i< size; ++i)
 
 1805       G4double coordinate = transVertexList[i][axis];
 
 1806       if (coordinate < minExtent[axis])
 
 1807       { minExtent[axis] = coordinate; }
 
 1808       if (coordinate > maxExtent[axis])
 
 1809       { maxExtent[axis] = coordinate; }
 
 1836         if (minExtent[axis] < voxelMinExtent)
 
 1838           minExtent[axis] = voxelMinExtent ;
 
 1840         if (maxExtent[axis] > voxelMaxExtent)
 
 1842           maxExtent[axis] = voxelMaxExtent;
 
 1868   return fMinExtent.
x();
 
 1875   return fMaxExtent.
x();
 
 1882   return fMinExtent.
y();
 
 1889   return fMaxExtent.
y();
 
 1896   return fMinExtent.
z();
 
 1903   return fMaxExtent.
z();
 
 1910   return G4VisExtent (fMinExtent.
x(), fMaxExtent.
x(), fMinExtent.
y(), fMaxExtent.
y(), fMinExtent.
z(), fMaxExtent.
z());
 
 1917   if(fCubicVolume != 0.) {;}
 
 1919   return fCubicVolume;
 
 1926   if (fSurfaceArea != 0.) 
return fSurfaceArea;
 
 1928   G4int size = fFacets.size();
 
 1929   for (
G4int i = 0; i < size; ++i)
 
 1932     fSurfaceArea += facet.
GetArea();
 
 1934   return fSurfaceArea;
 
 1944   return fFacets[i]->GetPointOnFace();
 
 1956 void G4TessellatedSolid::SetRandomVectors ()
 
 1960     G4ThreeVector(-0.9577428892113370, 0.2732676269591740, 0.0897405271949221);
 
 1962     G4ThreeVector(-0.8331264504940770,-0.5162067214954600,-0.1985722492445700);
 
 1964     G4ThreeVector(-0.1516671651108820, 0.9666292616127460, 0.2064580868390110);
 
 1966     G4ThreeVector( 0.6570250350323190,-0.6944539025883300, 0.2933460081893360);
 
 1968     G4ThreeVector(-0.4820456281280320,-0.6331060000098690,-0.6056474264406270);
 
 1970     G4ThreeVector( 0.7629032554236800 , 0.1016854697539910,-0.6384658864065180);
 
 1972     G4ThreeVector( 0.7689540409061150, 0.5034929891988220, 0.3939600142169160);
 
 1974     G4ThreeVector( 0.5765188359255740, 0.5997271636278330,-0.5549354566343150);
 
 1976     G4ThreeVector( 0.6660632777862070,-0.6362809868288380, 0.3892379937580790);
 
 1978     G4ThreeVector( 0.3824415020414780, 0.6541792713761380,-0.6525243125110690);
 
 1980     G4ThreeVector(-0.5107726564526760, 0.6020905056811610, 0.6136760679616570);
 
 1982     G4ThreeVector( 0.7459135439578050, 0.6618796061649330, 0.0743530220183488);
 
 1984     G4ThreeVector( 0.1536405855311580, 0.8117477913978260,-0.5634359711967240);
 
 1986     G4ThreeVector( 0.0744395301705579,-0.8707110101772920,-0.4861286795736560);
 
 1988     G4ThreeVector(-0.1665874645185400, 0.6018553940549240,-0.7810369397872780);
 
 1990     G4ThreeVector( 0.7766902003633100, 0.6014617505959970,-0.1870724331097450);
 
 1992     G4ThreeVector(-0.8710128685847430,-0.1434320216603030,-0.4698551243971010);
 
 1994     G4ThreeVector( 0.8901082092766820,-0.4388411398893870, 0.1229871120030100);
 
 1996     G4ThreeVector(-0.6430417431544370,-0.3295938228697690, 0.6912779675984150);
 
 1998     G4ThreeVector( 0.6331124368380410, 0.6306211461665000, 0.4488714875425340);
 
 2011   G4int limit = fFacets.size();
 
 2012   for (
G4int i = 0; i < limit; i++)
 
 2018   std::set<G4VFacet *>::const_iterator beg, end, it;
 
 2019   beg = fExtremeFacets.begin();
 
 2020   end = fExtremeFacets.end();
 
 2021   for (it = beg; it != end; it++)
 
 2036   size += sizeInsides + sizeVoxels;
 
void set(double x, double y, double z)
 
G4bool Contains(const G4ThreeVector &point) const 
 
void ResetBitNumber(unsigned int bitnumber)
 
unsigned int GetNbits() const 
 
ThreeVector shoot(const G4int Ap, const G4int Af)
 
void SetSolidClosed(const G4bool t)
 
void Voxelize(std::vector< G4VFacet * > &facets)
 
virtual G4double GetArea()=0
 
CLHEP::Hep3Vector G4ThreeVector
 
virtual void DescribeYourselfTo(G4VGraphicsScene &scene) const 
 
double dot(const Hep3Vector &) const 
 
G4int GetCandidates(std::vector< G4int > &curVoxel, std::vector< G4int > *&candidates, std::vector< G4int > &space) const 
 
virtual G4bool Intersect(const G4ThreeVector &, const G4ThreeVector &, const G4bool, G4double &, G4double &, G4ThreeVector &)=0
 
virtual G4VisExtent GetExtent() const 
 
G4double DistanceToFirst(const G4ThreeVector &point, const G4ThreeVector &direction) const 
 
G4double DistanceToBoundingBox(const G4ThreeVector &point) const 
 
virtual G4double GetCubicVolume()
 
G4double GetMaxXExtent() const 
 
virtual G4int GetNumberOfVertices() const =0
 
virtual G4ThreeVector GetCircumcentre() const =0
 
virtual G4double GetCubicVolume()
 
virtual G4double Distance(const G4ThreeVector &, G4double)=0
 
G4int GetVoxelsIndex(G4int x, G4int y, G4int z) const 
 
G4double GetMinXExtent() const 
 
virtual G4double GetSurfaceArea()
 
static G4double MinDistanceToBox(const G4ThreeVector &aPoint, const G4ThreeVector &f)
 
virtual void SetVertexIndex(G4int i, G4int j)=0
 
G4bool UpdateCurrentVoxel(const G4ThreeVector &point, const G4ThreeVector &direction, std::vector< G4int > &curVoxel) const 
 
G4double GetMaxZExtent() const 
 
virtual void AddSolid(const G4Box &)=0
 
G4int GetPointIndex(const G4ThreeVector &p) const 
 
void SetBitNumber(unsigned int bitnumber, G4bool value=true)
 
G4VFacet * GetFacet(G4int i) const 
 
G4bool IsEmpty(G4int index) const 
 
virtual G4ThreeVector GetSurfaceNormal() const =0
 
G4double GetMinZExtent() const 
 
G4GLOB_DLL std::ostream G4cout
 
virtual G4double DistanceToOut(const G4ThreeVector &p) const 
 
virtual G4Polyhedron * CreatePolyhedron() const 
 
void GetVoxel(std::vector< G4int > &curVoxel, const G4ThreeVector &point) const 
 
virtual void SetVertices(std::vector< G4ThreeVector > *vertices)=0
 
virtual EInside Inside(const G4ThreeVector &p) const 
 
G4bool AddFacet(G4VFacet *aFacet)
 
G4double DistanceToNext(const G4ThreeVector &point, const G4ThreeVector &direction, const std::vector< G4int > &curVoxel) const 
 
std::vector< G4ThreeVector > G4ThreeVectorList
 
void swap(shared_ptr< P > &, shared_ptr< P > &)
 
void SetMaxVoxels(G4int max)
 
G4TessellatedSolid & operator+=(const G4TessellatedSolid &right)
 
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const 
 
virtual G4VSolid * Clone() const 
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
G4int AllocatedMemoryWithoutVoxels()
 
virtual G4Polyhedron * GetPolyhedron() const 
 
G4int GetNumberOfFacets() const 
 
G4bool IsInside(const G4ThreeVector &p) const 
 
virtual std::ostream & StreamInfo(std::ostream &os) const 
 
virtual G4int GetVertexIndex(G4int i) const =0
 
static G4int GetNumberOfRotationSteps()
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
const XML_Char int const XML_Char int const XML_Char * base
 
virtual G4double SafetyFromInside(const G4ThreeVector &p, G4bool aAccurate=false) const 
 
std::ostream & StreamInfo(std::ostream &os) const 
 
void AddFacet(const G4int iv1, const G4int iv2, const G4int iv3, const G4int iv4=0)
 
virtual ~G4TessellatedSolid()
 
long long GetCountOfVoxels() const 
 
const XML_Char XML_Encoding * info
 
virtual G4GeometryType GetEntityType() const 
 
const XML_Char int const XML_Char * value
 
const std::vector< G4double > & GetBoundary(G4int index) const 
 
G4VSolid & operator=(const G4VSolid &rhs)
 
G4int GetNumberOfRotationStepsAtTimeOfCreation() const 
 
const G4SurfBits & Empty() const 
 
G4int GetMaxVoxels(G4ThreeVector &ratioOfReduction)
 
const std::vector< G4int > & GetVoxelBoxCandidates(G4int i) const 
 
void DisplayAllocatedMemory()
 
virtual G4VFacet * GetClone()=0
 
virtual G4bool Normal(const G4ThreeVector &p, G4ThreeVector &n) const 
 
G4int GetVoxelBoxesSize() const 
 
G4double GetMaxExtent(const EAxis pAxis) const 
 
virtual G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const 
 
virtual G4ThreeVector GetVertex(G4int i) const =0
 
const G4VoxelBox & GetVoxelBox(G4int i) const 
 
G4double GetMaxYExtent() const 
 
virtual G4ThreeVector GetPointOnSurface() const 
 
virtual G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const 
 
G4double GetMinExtent(const EAxis pAxis) const 
 
virtual G4int AllocatedMemory()=0
 
virtual G4double SafetyFromOutside(const G4ThreeVector &p, G4bool aAccurate=false) const 
 
G4double GetMinYExtent() const 
 
unsigned int GetNbytes() const 
 
void AddVertex(const G4ThreeVector v)
 
G4TessellatedSolid & operator=(const G4TessellatedSolid &right)
 
G4bool GetSolidClosed() const 
 
virtual G4bool IsDefined() const =0