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)
462 for (
G4int i = 0; i < max; ++i)
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;
544 for (
G4int i = 0; i < max; i++)
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 - 1
e-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)
1106 if (-kCarToleranceHalf <= dist && dist <= kCarToleranceHalf)
1116 G4TessellatedSolid::DistanceToOutNoVoxels (
const G4ThreeVector &p,
1130 std::ostringstream message;
1131 G4int oldprc = message.precision(16) ;
1132 message <<
"Point p is already outside!?" << G4endl
1133 <<
"Position:" << G4endl << G4endl
1134 <<
" p.x() = " << p.
x()/
mm <<
" mm" << G4endl
1135 <<
" p.y() = " << p.
y()/
mm <<
" mm" << G4endl
1136 <<
" p.z() = " << p.
z()/
mm <<
" mm" << G4endl
1138 message.precision(oldprc) ;
1139 G4Exception(
"G4TriangularFacet::DistanceToOut(p)",
1144 G4bool isExtreme =
false;
1145 G4int size = fFacets.size();
1146 for (
G4int i = 0; i < size; ++i)
1149 if (facet.
Intersect(p,v,
true,dist,distFromSurface,normal))
1151 if (distFromSurface > 0.0 && distFromSurface <= kCarToleranceHalf &&
1155 aConvex = (fExtremeFacets.find(&facet) != fExtremeFacets.end());
1158 aNormalVector = normal;
1161 if (dist >= 0.0 && dist < minDist)
1165 isExtreme = (fExtremeFacets.find(&facet) != fExtremeFacets.end());
1169 if (minDist < kInfinity)
1171 aNormalVector = minNormal;
1172 aConvex = isExtreme;
1179 Normal(p, aNormalVector);
1186 void G4TessellatedSolid::
1187 DistanceToOutCandidates(
const std::vector<G4int> &candidates,
1191 G4int &minCandidate )
const
1193 G4int candidatesCount = candidates.size();
1198 for (
G4int i = 0 ; i < candidatesCount; ++i)
1200 G4int candidate = candidates[i];
1201 G4VFacet &facet = *fFacets[candidate];
1202 if (facet.
Intersect(aPoint,direction,
true,dist,distFromSurface,normal))
1204 if (distFromSurface > 0.0 && distFromSurface <= kCarToleranceHalf
1211 minCandidate = candidate;
1214 if (dist >= 0.0 && dist < minDist)
1218 minCandidate = candidate;
1227 G4TessellatedSolid::DistanceToOutCore(
const G4ThreeVector &aPoint,
1237 minDistance = kInfinity;
1242 vector<G4int> curVoxel(3);
1243 if (!fVoxels.
Contains(aPoint))
return 0;
1245 fVoxels.
GetVoxel(curVoxel, currentPoint);
1249 const vector<G4int> *old = 0;
1251 G4int minCandidate = -1;
1254 const vector<G4int> &candidates = fVoxels.
GetCandidates(curVoxel);
1255 if (old == &candidates)
1257 if (old != &candidates && candidates.size())
1259 DistanceToOutCandidates(candidates, aPoint, direction, minDistance,
1260 aNormalVector, minCandidate);
1261 if (minDistance <= totalShift)
break;
1265 if (shift == kInfinity)
break;
1267 totalShift += shift;
1268 if (minDistance <= totalShift)
break;
1270 currentPoint += direction * (shift + shiftBonus);
1276 if (minCandidate < 0)
1281 Normal(aPoint, aNormalVector);
1285 aConvex = (fExtremeFacets.find(fFacets[minCandidate])
1286 != fExtremeFacets.end());
1291 minDistance = DistanceToOutNoVoxels(aPoint, aDirection, aNormalVector,
1300 DistanceToInCandidates(
const std::vector<G4int> &candidates,
1304 G4int candidatesCount = candidates.size();
1310 for (
G4int i = 0 ; i < candidatesCount; ++i)
1312 G4int candidate = candidates[i];
1313 G4VFacet &facet = *fFacets[candidate];
1314 if (facet.
Intersect(aPoint,direction,
false,dist,distFromSurface,normal))
1323 if ( (distFromSurface > kCarToleranceHalf)
1324 && (dist >= 0.0) && (dist < minDistance))
1328 else if (-kCarToleranceHalf <= dist && dist <= kCarToleranceHalf)
1340 G4TessellatedSolid::DistanceToInCore(
const G4ThreeVector &aPoint,
1348 minDistance = kInfinity;
1352 if (shift == kInfinity)
return shift;
1355 currentPoint += direction * (shift + shiftBonus);
1360 vector<G4int> curVoxel(3);
1362 fVoxels.
GetVoxel(curVoxel, currentPoint);
1365 const vector<G4int> &candidates = fVoxels.
GetCandidates(curVoxel);
1366 if (candidates.size())
1368 G4double distance=DistanceToInCandidates(candidates, aPoint, direction);
1369 if (minDistance > distance) minDistance = distance;
1370 if (distance < totalShift)
break;
1373 shift = fVoxels.
DistanceToNext(currentPoint, direction, curVoxel);
1374 if (shift == kInfinity )
break;
1376 totalShift += shift;
1377 if (minDistance < totalShift)
break;
1379 currentPoint += direction * (shift + shiftBonus);
1385 minDistance = DistanceToInNoVoxels(aPoint, aDirection, aPstep);
1394 G4TessellatedSolid::CompareSortedVoxel(
const std::pair<G4int, G4double> &l,
1395 const std::pair<G4int, G4double> &
r)
1397 return l.second < r.second;
1403 G4TessellatedSolid::MinDistanceFacet(
const G4ThreeVector &p,
1410 vector<pair<G4int, G4double> > voxelsSorted(size);
1412 pair<G4int, G4double>
info;
1414 for (
G4int i = 0; i < size; ++i)
1421 info.second = safety;
1422 voxelsSorted[i] =
info;
1425 std::sort(voxelsSorted.begin(), voxelsSorted.end(),
1426 &G4TessellatedSolid::CompareSortedVoxel);
1428 for (
G4int i = 0; i < size; ++i)
1430 const pair<G4int,G4double> &inf = voxelsSorted[i];
1432 if (dist > minDist)
break;
1435 G4int csize = candidates.size();
1436 for (
G4int j = 0; j < csize; ++j)
1438 G4int candidate = candidates[j];
1439 G4VFacet &facet = *fFacets[candidate];
1440 dist = simple ? facet.
Distance(p,minDist)
1460 std::ostringstream message;
1461 G4int oldprc = message.precision(16) ;
1462 message <<
"Point p is already inside!?" << G4endl
1463 <<
"Position:" << G4endl << G4endl
1464 <<
"p.x() = " << p.
x()/
mm <<
" mm" << G4endl
1465 <<
"p.y() = " << p.
y()/
mm <<
" mm" << G4endl
1466 <<
"p.z() = " << p.
z()/
mm <<
" mm" << G4endl
1468 message.precision(oldprc) ;
1483 vector<G4int> startingVoxel(3);
1484 fVoxels.
GetVoxel(startingVoxel, p);
1485 const vector<G4int> &candidates = fVoxels.
GetCandidates(startingVoxel);
1486 if (candidates.size() == 0 && fInsides.
GetNbits())
1489 if (fInsides[index])
return 0.;
1494 minDist = MinDistanceFacet(p,
true, facet);
1498 minDist = kInfinity;
1499 G4int size = fFacets.size();
1500 for (
G4int i = 0; i < size; ++i)
1504 if (dist < minDist) minDist = dist;
1518 std::ostringstream message;
1519 G4int oldprc = message.precision(16) ;
1520 message <<
"Point p is already outside!?" << G4endl
1521 <<
"Position:" << G4endl << G4endl
1522 <<
"p.x() = " << p.
x()/
mm <<
" mm" << G4endl
1523 <<
"p.y() = " << p.
y()/
mm <<
" mm" << G4endl
1524 <<
"p.z() = " << p.
z()/
mm <<
" mm" << G4endl
1526 message.precision(oldprc) ;
1527 G4Exception(
"G4TriangularFacet::DistanceToOut(p)",
1539 minDist = MinDistanceFacet(p,
true, facet);
1543 minDist = kInfinity;
1545 G4int size = fFacets.size();
1546 for (
G4int i = 0; i < size; ++i)
1550 if (dist < minDist) minDist = dist;
1564 return fGeometryType;
1572 os <<
"Geometry Type = " << fGeometryType <<
G4endl;
1573 os <<
"Number of facets = " << fFacets.size() <<
G4endl;
1575 G4int size = fFacets.size();
1576 for (
G4int i = 0; i < size; ++i)
1578 os <<
"FACET # = " << i + 1 <<
G4endl;
1612 location = InsideVoxels(aPoint);
1616 location = InsideNoVoxels(aPoint);
1647 return DistanceToInCore(p,v,kInfinity);
1689 G4double dist = DistanceToOutCore(p, v, n, valid);
1709 G4int nVertices = fVertexList.size();
1710 G4int nFacets = fFacets.size();
1713 for (G4ThreeVectorList::const_iterator v= fVertexList.begin();
1714 v!=fVertexList.end(); ++
v)
1719 G4int size = fFacets.size();
1720 for (
G4int i = 0; i < size; ++i)
1726 else if (n == 3) v[3] = 0;
1727 for (
G4int j=0; j<
n; ++j)
1732 polyhedron->
AddFacet(v[0],v[1],v[2],v[3]);
1752 if (!fpPolyhedron ||
1756 delete fpPolyhedron;
1759 return fpPolyhedron;
1775 G4int size = fVertexList.size();
1778 for (
G4int i=0; i < size; ++i)
1785 G4ThreeVector maxExtent(-kInfinity, -kInfinity, -kInfinity);
1787 size = transVertexList.size();
1788 for (
G4int i=0; i< size; ++i)
1792 G4double coordinate = transVertexList[i][axis];
1793 if (coordinate < minExtent[axis])
1794 { minExtent[axis] = coordinate; }
1795 if (coordinate > maxExtent[axis])
1796 { maxExtent[axis] = coordinate; }
1823 if (minExtent[axis] < voxelMinExtent)
1825 minExtent[axis] = voxelMinExtent ;
1827 if (maxExtent[axis] > voxelMaxExtent)
1829 maxExtent[axis] = voxelMaxExtent;
1855 return fMinExtent.
x();
1862 return fMaxExtent.
x();
1869 return fMinExtent.
y();
1876 return fMaxExtent.
y();
1883 return fMinExtent.
z();
1890 return fMaxExtent.
z();
1897 return G4VisExtent (fMinExtent.
x(), fMaxExtent.
x(), fMinExtent.
y(), fMaxExtent.
y(), fMinExtent.
z(), fMaxExtent.
z());
1904 if(fCubicVolume != 0.) {;}
1906 return fCubicVolume;
1913 if (fSurfaceArea != 0.)
return fSurfaceArea;
1915 G4int size = fFacets.size();
1916 for (
G4int i = 0; i < size; ++i)
1919 fSurfaceArea += facet.
GetArea();
1921 return fSurfaceArea;
1930 G4int i = (
G4int) G4RandFlat::shoot(0., fFacets.size());
1931 return fFacets[i]->GetPointOnFace();
1943 void G4TessellatedSolid::SetRandomVectors ()
1947 G4ThreeVector(-0.9577428892113370, 0.2732676269591740, 0.0897405271949221);
1949 G4ThreeVector(-0.8331264504940770,-0.5162067214954600,-0.1985722492445700);
1951 G4ThreeVector(-0.1516671651108820, 0.9666292616127460, 0.2064580868390110);
1953 G4ThreeVector( 0.6570250350323190,-0.6944539025883300, 0.2933460081893360);
1955 G4ThreeVector(-0.4820456281280320,-0.6331060000098690,-0.6056474264406270);
1957 G4ThreeVector( 0.7629032554236800 , 0.1016854697539910,-0.6384658864065180);
1959 G4ThreeVector( 0.7689540409061150, 0.5034929891988220, 0.3939600142169160);
1961 G4ThreeVector( 0.5765188359255740, 0.5997271636278330,-0.5549354566343150);
1963 G4ThreeVector( 0.6660632777862070,-0.6362809868288380, 0.3892379937580790);
1965 G4ThreeVector( 0.3824415020414780, 0.6541792713761380,-0.6525243125110690);
1967 G4ThreeVector(-0.5107726564526760, 0.6020905056811610, 0.6136760679616570);
1969 G4ThreeVector( 0.7459135439578050, 0.6618796061649330, 0.0743530220183488);
1971 G4ThreeVector( 0.1536405855311580, 0.8117477913978260,-0.5634359711967240);
1973 G4ThreeVector( 0.0744395301705579,-0.8707110101772920,-0.4861286795736560);
1975 G4ThreeVector(-0.1665874645185400, 0.6018553940549240,-0.7810369397872780);
1977 G4ThreeVector( 0.7766902003633100, 0.6014617505959970,-0.1870724331097450);
1979 G4ThreeVector(-0.8710128685847430,-0.1434320216603030,-0.4698551243971010);
1981 G4ThreeVector( 0.8901082092766820,-0.4388411398893870, 0.1229871120030100);
1983 G4ThreeVector(-0.6430417431544370,-0.3295938228697690, 0.6912779675984150);
1985 G4ThreeVector( 0.6331124368380410, 0.6306211461665000, 0.4488714875425340);
1998 G4int limit = fFacets.size();
1999 for (
G4int i = 0; i < limit; i++)
2005 std::set<G4VFacet *>::const_iterator beg, end, it;
2006 beg = fExtremeFacets.begin();
2007 end = fExtremeFacets.end();
2008 for (it = beg; it != end; it++)
2023 size += sizeInsides + sizeVoxels;