84       "WARNING: For some reason, possibly mentioned above, it has not been" 
   85       "\n  possible to add to the scene." 
   94   fpCommand -> SetGuidance (
"Adds arrow to current scene.");
 
  109   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
  130       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  137   std::istringstream is(newValue);
 
  138   is >> x1 >> y1 >> z1 >> x2 >> y2 >> z2 >> unitString;
 
  140   x1 *= unit; y1 *= unit; z1 *= unit;
 
  141   x2 *= unit; y2 *= unit; z2 *= unit;
 
  149     (x1, y1, z1, x2, y2, z2,
 
  152   const G4String& currentSceneName = pScene -> GetName ();
 
  153   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
  156       G4cout << 
"Arrow has been added to scene \"" 
  157              << currentSceneName << 
"\"." 
  169   fpCommand -> SetGuidance (
"Adds 2D arrow to current scene.");
 
  198       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  204   std::istringstream is(newValue);
 
  205   is >> x1 >> y1 >> x2 >> y2;
 
  214   const G4String& currentSceneName = pScene -> GetName ();
 
  215   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
  218       G4cout << 
"A 2D arrow has been added to scene \"" 
  219              << currentSceneName << 
"\"." 
  231   fWidth(width), fColour(colour)
 
  233   fShaftPolyline.push_back(
G4Point3D(x1,y1,0));
 
  234   fShaftPolyline.push_back(
G4Point3D(x2,y2,0));
 
  236   G4Vector3D arrowPointLeftDirection(arrowDirection);
 
  237   arrowPointLeftDirection.rotateZ(150.*
deg);
 
  238   G4Vector3D arrowPointRightDirection(arrowDirection);
 
  239   arrowPointRightDirection.rotateZ(-150.*
deg);
 
  240   fHeadPolyline.push_back(
G4Point3D(x2,y2,0)+0.04*arrowPointLeftDirection);
 
  241   fHeadPolyline.push_back(
G4Point3D(x2,y2,0));
 
  242   fHeadPolyline.push_back(
G4Point3D(x2,y2,0)+0.04*arrowPointRightDirection);
 
  246   fShaftPolyline.SetVisAttributes(va);
 
  247   fHeadPolyline.SetVisAttributes(va);
 
  250 void G4VisCommandSceneAddArrow2D::Arrow2D::operator()
 
  266   (
"Draws axes at (x0, y0, z0) of given length and colour.");
 
  268   (
"If \"unitcolour\" is \"auto\", x, y and z will be red, green and blue" 
  269    "\n  respectively.  Otherwise choose from the pre-defined text-specified" 
  270    "\n  colours - see information printed by the vis manager at start-up or" 
  271    "\n  use \"/vis/list\".");
 
  273   (
"If \"length\" is negative, it is set to about 25% of scene extent.");
 
  284   parameter =  
new G4UIparameter (
"length", 
'd', omitable = 
true);
 
  287   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
  290   parameter =  
new G4UIparameter (
"unitcolour", 
's', omitable = 
true);
 
  311       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  318   std::istringstream is (newValue);
 
  319   is >> x0 >> y0 >> z0 >> length >> unitString  >> colourString;
 
  322   x0 *= unit; y0 *= unit; z0 *= unit;
 
  326     G4double intLog10Length = std::floor(std::log10(length));
 
  327     length = std::pow(10,intLog10Length);
 
  337   if (arrowWidth > length/50.) arrowWidth = length/50.;
 
  340     (x0, y0, z0, length, arrowWidth, colourString, newValue);
 
  342   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
  343   const G4String& currentSceneName = pScene -> GetName ();
 
  346       G4cout << 
"Axes have been added to scene \"" << currentSceneName << 
"\"." 
  359   fpCommand -> SetGuidance (
"Adds date to current scene.");
 
  361   (
"If \"date\"is omitted, the current date and time is drawn." 
  362    "\nOtherwise, the string, including the rest of the line, is drawn.");
 
  364   parameter = 
new G4UIparameter (
"size", 
'i', omitable = 
true);
 
  365   parameter -> SetGuidance (
"Screen size of text in pixels.");
 
  366   parameter -> SetDefaultValue (18);
 
  368   parameter = 
new G4UIparameter (
"x-position", 
'd', omitable = 
true);
 
  369   parameter -> SetGuidance (
"x screen position in range -1 < x < 1.");
 
  370   parameter -> SetDefaultValue (0.95);
 
  372   parameter = 
new G4UIparameter (
"y-position", 
'd', omitable = 
true);
 
  373   parameter -> SetGuidance (
"y screen position in range -1 < y < 1.");
 
  374   parameter -> SetDefaultValue (0.9);
 
  376   parameter = 
new G4UIparameter (
"layout", 
's', omitable = 
true);
 
  377   parameter -> SetGuidance (
"Layout, i.e., adjustment: left|centre|right.");
 
  378   parameter -> SetDefaultValue (
"right");
 
  380   parameter = 
new G4UIparameter (
"date", 
's', omitable = 
true);
 
  381   parameter -> SetDefaultValue (
"-");
 
  401       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  409   std::istringstream is(newValue);
 
  410   is >> size >> x >> y >> layoutString >> dateString;
 
  412   const size_t NREMAINDER = 100;
 
  413   char remainder[NREMAINDER];
 
  414   is.getline(remainder, NREMAINDER);
 
  415   dateString += remainder;
 
  427   const G4String& currentSceneName = pScene -> GetName ();
 
  428   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
  431       G4cout << 
"Date has been added to scene \"" 
  432              << currentSceneName << 
"\"." 
  440 void G4VisCommandSceneAddDate::Date::operator()
 
  445     time = fTimer.GetClockTime();
 
  450   std::string::size_type i = time.rfind(
'\n');
 
  451   if (i != std::string::npos) time.erase(i);
 
  466   fpCommand -> SetGuidance (
"Adds digis to current scene.");
 
  468     (
"Digis are drawn at end of event when the scene in which" 
  469      "\nthey are added is current.");
 
  488       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  494   const G4String& currentSceneName = pScene -> GetName ();
 
  495   G4bool successful = pScene -> AddEndOfEventModel (model, warn);
 
  498       G4cout << 
"Digis, if any, will be drawn at end of run in scene \"" 
  499              << currentSceneName << 
"\"." 
  512   fpCommand -> SetGuidance (
"Adds eventID to current scene.");
 
  514     (
"Run and event numbers are drawn at end of event or run when" 
  515      "\n the scene in which they are added is current.");
 
  517   parameter = 
new G4UIparameter (
"size", 
'i', omitable = 
true);
 
  518   parameter -> SetGuidance (
"Screen size of text in pixels.");
 
  519   parameter -> SetDefaultValue (18);
 
  521   parameter = 
new G4UIparameter (
"x-position", 
'd', omitable = 
true);
 
  522   parameter -> SetGuidance (
"x screen position in range -1 < x < 1.");
 
  523   parameter -> SetDefaultValue (-0.95);
 
  525   parameter = 
new G4UIparameter (
"y-position", 
'd', omitable = 
true);
 
  526   parameter -> SetGuidance (
"y screen position in range -1 < y < 1.");
 
  527   parameter -> SetDefaultValue (0.9);
 
  529   parameter = 
new G4UIparameter (
"layout", 
's', omitable = 
true);
 
  530   parameter -> SetGuidance (
"Layout, i.e., adjustment: left|centre|right.");
 
  531   parameter -> SetDefaultValue (
"left");
 
  551       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  559   std::istringstream is(newValue);
 
  560   is >> size >> x >> y >> layoutString;
 
  573   const G4String& currentSceneName = pScene -> GetName ();
 
  574   G4bool successful = pScene -> AddEndOfEventModel (model, warn);
 
  577       G4cout << 
"EventID has been added to scene \"" 
  578              << currentSceneName << 
"\"." 
  586 void G4VisCommandSceneAddEventID::EventID::operator()
 
  589   const G4Run* currentRun = 0;
 
  593   G4VModel* model = fpVisManager->GetCurrentSceneHandler()->GetModel();
 
  595   const G4Event* currentEvent = 0;
 
  602       G4cout << 
"ERROR: No model defined for this SceneHandler : " 
  603              << fpVisManager->GetCurrentSceneHandler()->GetName()
 
  607   if (currentRun && currentEvent) {
 
  610     std::ostringstream oss;
 
  611     if (fpVisManager->GetCurrentScene()->GetRefreshAtEndOfEvent()) {
 
  612       oss << 
"Run " << runID << 
" Event " << eventID;
 
  620         const std::vector<const G4Event*>* events =
 
  622         if (events) nEvents = events->size();
 
  624       if (eventID < nEvents - 1) 
return;  
 
  626         oss << 
"Run " << runID << 
" (" << nEvents << 
" event";
 
  627         if (nEvents != 1) oss << 
's';
 
  633     text.SetLayout(fLayout);
 
  635     text.SetVisAttributes(textAtts);
 
  646   fpCommand -> SetGuidance (
"Adds frame to current scene.");
 
  649   parameter = 
new G4UIparameter (
"size", 
'd', omitable = 
true);
 
  650   parameter -> SetGuidance (
"Size of frame.  1 = full window.");
 
  651   parameter -> SetParameterRange (
"size > 0 && size <=1");
 
  652   parameter -> SetDefaultValue (0.97);
 
  672       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  678   std::istringstream is(newValue);
 
  687   const G4String& currentSceneName = pScene -> GetName ();
 
  688   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
  691       G4cout << 
"Frame has been added to scene \"" 
  692              << currentSceneName << 
"\"." 
  700 void G4VisCommandSceneAddFrame::Frame::operator()
 
  704   frame.push_back(
G4Point3D( fSize,  fSize, 0.));
 
  705   frame.push_back(
G4Point3D(-fSize,  fSize, 0.));
 
  706   frame.push_back(
G4Point3D(-fSize, -fSize, 0.));
 
  707   frame.push_back(
G4Point3D( fSize, -fSize, 0.));
 
  708   frame.push_back(
G4Point3D( fSize,  fSize, 0.));
 
  722   fpCommand -> SetGuidance (
"Adds hits to current scene.");
 
  724     (
"Hits are drawn at end of event when the scene in which" 
  725      "\nthey are added is current.");
 
  744       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  750   const G4String& currentSceneName = pScene -> GetName ();
 
  751   G4bool successful = pScene -> AddEndOfEventModel (model, warn);
 
  754       G4cout << 
"Hits, if any, will be drawn at end of run in scene \"" 
  755              << currentSceneName << 
"\"." 
  767   fpCommand -> SetGuidance (
"Adds line to current scene.");
 
  782   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
  803       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  810   std::istringstream is(newValue);
 
  811   is >> x1 >> y1 >> z1 >> x2 >> y2 >> z2 >> unitString;
 
  813   x1 *= unit; y1 *= unit; z1 *= unit;
 
  814   x2 *= unit; y2 *= unit; z2 *= unit;
 
  816   Line* line = 
new Line(x1, y1, z1, x2, y2, z2,
 
  823   const G4String& currentSceneName = pScene -> GetName ();
 
  824   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
  827       G4cout << 
"Line has been added to scene \"" 
  828              << currentSceneName << 
"\"." 
  840   fWidth(width), fColour(colour)
 
  842   fPolyline.push_back(
G4Point3D(x1,y1,z1));
 
  843   fPolyline.push_back(
G4Point3D(x2,y2,z2));
 
  847   fPolyline.SetVisAttributes(va);
 
  850 void G4VisCommandSceneAddLine::Line::operator()
 
  862   fpCommand -> SetGuidance (
"Adds 2D line to current scene.");
 
  891       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  897   std::istringstream is(newValue);
 
  898   is >> x1 >> y1 >> x2 >> y2;
 
  907   const G4String& currentSceneName = pScene -> GetName ();
 
  908   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
  911       G4cout << 
"A 2D line has been added to scene \"" 
  912              << currentSceneName << 
"\"." 
  924   fWidth(width), fColour(colour)
 
  931   fPolyline.SetVisAttributes(va);
 
  934 void G4VisCommandSceneAddLine2D::Line2D::operator()
 
  947   fpCommand -> SetGuidance (
"Adds a logical volume to the current scene,");
 
  949     (
"Shows boolean components (if any), voxels (if any) and readout geometry" 
  950      "\n(if any).  Note: voxels are not constructed until start of run -" 
  951      "\n \"/run/beamOn\".");
 
  953   parameter = 
new G4UIparameter (
"logical-volume-name", 
's', omitable = 
false);
 
  955   parameter = 
new G4UIparameter (
"depth-of-descent", 
'i', omitable = 
true);
 
  956   parameter -> SetGuidance (
"Depth of descent of geometry hierarchy.");
 
  957   parameter -> SetDefaultValue (1);
 
  959   parameter = 
new G4UIparameter (
"booleans-flag", 
'b', omitable = 
true);
 
  960   parameter -> SetDefaultValue (
true);
 
  962   parameter = 
new G4UIparameter (
"voxels-flag", 
'b', omitable = 
true);
 
  963   parameter -> SetDefaultValue (
true);
 
  965   parameter = 
new G4UIparameter (
"readout-flag", 
'b', omitable = 
true);
 
  966   parameter -> SetDefaultValue (
true);
 
  987       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
  993   G4int requestedDepthOfDescent;
 
  994   G4String booleansString, voxelsString, readoutString;
 
  995   std::istringstream is (newValue);
 
  996   is >> name >> requestedDepthOfDescent
 
  997      >>  booleansString >> voxelsString >> readoutString;
 
 1003   int nLV = pLVStore -> size ();
 
 1006   for (iLV = 0; iLV < nLV; iLV++ ) {
 
 1007     pLV = (*pLVStore) [iLV];
 
 1008     if (pLV -> GetName () == name) 
break;
 
 1012       G4cout << 
"ERROR: Logical volume " << name
 
 1013              << 
" not found in logical volume store." << 
G4endl;
 
 1018   const std::vector<G4Scene::Model>& rdModelList = pScene -> GetRunDurationModelList();
 
 1019   std::vector<G4Scene::Model>::const_iterator i;
 
 1020   for (i = rdModelList.begin(); i != rdModelList.end(); ++i) {
 
 1021     if (i->fpModel->GetGlobalDescription().find(
"Volume") != std::string::npos) 
break;
 
 1023   if (i != rdModelList.end()) {
 
 1025       G4cout << 
"There is already a volume, \"" 
 1026              << i->fpModel->GetGlobalDescription()
 
 1027              << 
"\",\n in the run-duration model list of scene \"" 
 1028              << pScene -> GetName()
 
 1029              << 
"\".\n Your logical volume must be the only volume in the scene." 
 1030              << 
"\n Create a new scene and try again:" 
 1031              << 
"\n  /vis/specify " << name
 
 1033              << 
"\n  /vis/scene/create" 
 1034              << 
"\n  /vis/scene/add/logicalVolume " << name
 
 1035              << 
"\n  /vis/sceneHandler/attach" 
 1036              << 
"\n (and also, if necessary, /vis/viewer/flush)" 
 1042     (pLV, requestedDepthOfDescent, booleans, voxels, readout);
 
 1043   const G4String& currentSceneName = pScene -> GetName ();
 
 1044   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
 1047       G4cout << 
"Logical volume \"" << pLV -> GetName ()
 
 1048              << 
" with requested depth of descent " 
 1049              << requestedDepthOfDescent
 
 1051       if (!booleans) 
G4cout << 
"out";
 
 1052       G4cout << 
" boolean components, with";
 
 1053       if (!voxels) 
G4cout << 
"out";
 
 1054       G4cout << 
" voxels and with";
 
 1055       if (!readout) 
G4cout << 
"out";
 
 1056       G4cout << 
" readout geometry," 
 1057              << 
"\n  has been added to scene \"" << currentSceneName << 
"\"." 
 1075   fpCommand -> SetGuidance (
"Adds a G4 logo to the current scene.");
 
 1077   (
"If \"unit\" is \"auto\", height is roughly one tenth of scene extent.");
 
 1079   (
"\"direction\" is that of outward-facing normal to front face of logo." 
 1080    "\nIf \"direction\" is \"auto\", logo faces the user in the current viewer.");
 
 1082   (
"\nIf \"placement\" is \"auto\", logo is placed at bottom right of screen" 
 1083    "\n  when viewed from logo direction.");
 
 1085   parameter = 
new G4UIparameter (
"height", 
'd', omitable = 
true);
 
 1088   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
 1091   parameter =  
new G4UIparameter (
"direction", 
's', omitable = 
true);
 
 1095   parameter =  
new G4UIparameter (
"red", 
'd', omitable = 
true);
 
 1098   parameter =  
new G4UIparameter (
"green", 
'd', omitable = 
true);
 
 1101   parameter =  
new G4UIparameter (
"blue", 
'd', omitable = 
true);
 
 1104   parameter =  
new G4UIparameter (
"placement", 
's', omitable = 
true);
 
 1105   parameter -> SetParameterCandidates(
"auto manual");
 
 1108   parameter =  
new G4UIparameter (
"xmid", 
'd', omitable = 
true);
 
 1111   parameter =  
new G4UIparameter (
"ymid", 
'd', omitable = 
true);
 
 1114   parameter =  
new G4UIparameter (
"zmid", 
'd', omitable = 
true);
 
 1117   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
 1138       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 1147         "ERROR: G4VisCommandSceneAddLogo::SetNewValue: no viewer." 
 1148         "\n  Auto direction needs a viewer." 
 1155   G4String userHeightUnit, direction, auto_manual, positionUnit;
 
 1156   std::istringstream is (newValue);
 
 1157   is >> userHeight >> userHeightUnit >> direction
 
 1158      >> red >> green >> blue
 
 1160      >> xmid >> ymid >> zmid >> positionUnit;
 
 1164   if (userHeightUnit == 
"auto") {
 
 1171   xmid *= unit; ymid *= unit; zmid *= unit;
 
 1174   if (direction == 
"auto") {
 
 1178     if (vp.x() > vp.y() && vp.x() > vp.z()) logoDirection = 
X;
 
 1179     else if (vp.x() < vp.y() && vp.x() < vp.z()) logoDirection = 
minusX;
 
 1180     else if (vp.y() > vp.x() && vp.y() > vp.z()) logoDirection = 
Y;
 
 1181     else if (vp.y() < vp.x() && vp.y() < vp.z()) logoDirection = 
minusY;
 
 1182     else if (vp.z() > vp.x() && vp.z() > vp.y()) logoDirection = 
Z;
 
 1183     else if (vp.z() < vp.x() && vp.z() < vp.y()) logoDirection = 
minusZ;
 
 1185   else if (direction(0) == 
'x') logoDirection = 
X;
 
 1186   else if (direction(0) == 
'y') logoDirection = 
Y;
 
 1187   else if (direction(0) == 
'z') logoDirection = 
Z;
 
 1188   else if (direction(0) == 
'-') {
 
 1189     if (direction(1) == 
'x') logoDirection = 
minusX;
 
 1190     else if (direction(1) == 
'y') logoDirection = 
minusY;
 
 1191     else if (direction(1) == 
'z') logoDirection = 
minusZ;
 
 1194       G4cout << 
"ERROR: Unrecogniseed direction: \"" 
 1195              << direction << 
"\"." << 
G4endl;
 
 1200   G4bool autoPlacing = 
false; 
if (auto_manual == 
"auto") autoPlacing = 
true;
 
 1217         "WARNING: Existing scene does not yet have any extent." 
 1218         "\n  Maybe you have not yet added any geometrical object." 
 1224   const G4double halfHeight(height / 2.);
 
 1226   const G4double freeHeightFraction (1. + 2. * comfort);
 
 1230   switch (logoDirection) {
 
 1233     if (freeHeightFraction * (xmax - xmin) < height) room = 
false; 
break;
 
 1236     if (freeHeightFraction * (ymax - ymin) < height) room = 
false; 
break;
 
 1239     if (freeHeightFraction * (zmax - zmin) < height) room = 
false; 
break;
 
 1245         "WARNING: Not enough room in existing scene.  Maybe logo is too large." 
 1252         "WARNING: The logo you have asked for is bigger than the existing" 
 1253         "\n  scene.  Maybe you have added it too soon.  It is recommended that" 
 1254         "\n  you add the logo last so that it can be correctly auto-positioned" 
 1255         "\n  so as not to be obscured by any existing object and so that the" 
 1256         "\n  view parameters can be correctly recalculated." 
 1261   G4double sxmid(xmid), symid(ymid), szmid(zmid);
 
 1265     const G4double xComfort = comfort * (xmax - xmin);
 
 1266     const G4double yComfort = comfort * (ymax - ymin);
 
 1267     const G4double zComfort = comfort * (zmax - zmin);
 
 1268     switch (logoDirection) {
 
 1270       sxmid = xmax + halfHeight + xComfort;
 
 1271       symid = ymin - yComfort;
 
 1272       szmid = zmin - zComfort;
 
 1275       sxmid = xmin - halfHeight - xComfort;
 
 1276       symid = ymin - yComfort;
 
 1277       szmid = zmax + zComfort;
 
 1280       sxmid = xmin - xComfort;
 
 1281       symid = ymax + halfHeight + yComfort;
 
 1282       szmid = zmin - zComfort;
 
 1285       sxmid = xmax + xComfort;
 
 1286       symid = ymin - halfHeight - yComfort;
 
 1287       szmid = zmin - zComfort;
 
 1290       sxmid = xmax + xComfort;
 
 1291       symid = ymin - yComfort;
 
 1292       szmid = zmax + halfHeight + zComfort;
 
 1295       sxmid = xmin - xComfort;
 
 1296       symid = ymin - yComfort;
 
 1297       szmid = zmin - halfHeight - zComfort;
 
 1303   switch (logoDirection) {
 
 1343   const G4String& currentSceneName = pScene -> GetName ();
 
 1344   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
 1347       G4cout << 
"G4 Logo of height " << userHeight << 
' ' << userHeightUnit
 
 1348              << 
", " << direction << 
"-direction, added to scene \"" 
 1349              << currentSceneName << 
"\"";
 
 1351         G4cout << 
"\n  with extent " << extent
 
 1352                << 
"\n  at " << transform.getRotation()
 
 1353                << transform.getTranslation();
 
 1378   const G4double xb = -h2, yb = f2 + w; 
 
 1379   const G4double dx = xt - xb, dy = yt - yb;
 
 1380   const G4double angle = std::atan2(dy,dx);
 
 1382   rm.rotateZ(angle*
rad);
 
 1383   const G4double d = std::sqrt(dx * dx + dy * dy);
 
 1386   const G4double x8 = ((-ss * d - dx * (yt - y8)) / dy) + xt;
 
 1388   G4double x9 = ((-(ss - w) * d - dx * (yt - y8)) / dy) + xt;
 
 1390   const G4double xtr = ss - 
f1, ytr = -ss - f2 -w;
 
 1391   x9 += xtr; y9 += ytr;
 
 1395   G4Box bG(
"bG",w2,ro2,d2);
 
 1403   G4Box bS(
"bS",ss,ss,d2+e);  
 
 1404   G4Box bS2(
"bS2",ss,ss,d2+2.*e);  
 
 1413   fp4 = logo4.CreatePolyhedron();
 
 1422   fp4->SetVisAttributes(&fVisAtts);
 
 1431 void G4VisCommandSceneAddLogo::G4Logo::operator()
 
 1444   fpCommand -> SetGuidance (
"Adds 2D logo to current scene.");
 
 1446   parameter = 
new G4UIparameter (
"size", 
'i', omitable = 
true);
 
 1447   parameter -> SetGuidance (
"Screen size of text in pixels.");
 
 1448   parameter -> SetDefaultValue (48);
 
 1450   parameter = 
new G4UIparameter (
"x-position", 
'd', omitable = 
true);
 
 1451   parameter -> SetGuidance (
"x screen position in range -1 < x < 1.");
 
 1452   parameter -> SetDefaultValue (-0.9);
 
 1454   parameter = 
new G4UIparameter (
"y-position", 
'd', omitable = 
true);
 
 1455   parameter -> SetGuidance (
"y screen position in range -1 < y < 1.");
 
 1456   parameter -> SetDefaultValue (-0.9);
 
 1458   parameter = 
new G4UIparameter (
"layout", 
's', omitable = 
true);
 
 1459   parameter -> SetGuidance (
"Layout, i.e., adjustment: left|centre|right.");
 
 1460   parameter -> SetDefaultValue (
"left");
 
 1480       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 1488   std::istringstream is(newValue);
 
 1489   is >> size >> x >> y >> layoutString;
 
 1501   const G4String& currentSceneName = pScene -> GetName ();
 
 1502   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
 1505       G4cout << 
"2D logo has been added to scene \"" 
 1506              << currentSceneName << 
"\"." 
 1514 void G4VisCommandSceneAddLogo2D::Logo2D::operator()
 
 1532   fpCommand->SetParameterName(
"nDataPointsPerHalfScene",ommitable=
true);
 
 1535   (
"Adds magnetic field representation to current scene.");
 
 1537   (
"The parameter is no. of data points per half scene.  So, possibly, at" 
 1538    "\nmaximum, the number of data points sampled is (2*n+1)^3, which can grow" 
 1539    "\nlarge--be warned!" 
 1540    "\nYou might find that your scene is cluttered by thousands of arrows for" 
 1541    "\nthe default number of data points, so try reducing to 2 or 3, e.g:" 
 1542    "\n  /vis/scene/add/magneticField 3" 
 1543    "\nor, if only a small part of the scene has a field:" 
 1544    "\n  /vis/scene/add/magneticField 50 # or more");
 
 1546   (
"In the arrow representation, the length of the arrow is proporational" 
 1547    "\nto the magnitude of the field and the colour is mapped onto the range" 
 1548    "\nas a fraction of the maximum magnitude: 0->0.5->1 is blue->green->red.");
 
 1568       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 1573   G4int nDataPointsPerHalfScene = 
fpCommand->GetNewIntValue(newValue);
 
 1577   const G4String& currentSceneName = pScene -> GetName ();
 
 1578   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
 1581       G4cout << 
"Magnetic field, if any, will be drawn in scene \"" 
 1584       << nDataPointsPerHalfScene << 
" data points per half scene." 
 1598     (
"Adds Primitive Scorer Hits (PSHits) to current scene.");
 
 1600     (
"PSHits are drawn at end of run when the scene in which" 
 1601      "\nthey are added is current.");
 
 1603     (
"Optional parameter specifies name of scoring map.  By default all" 
 1604      "\nscoring maps registered with the G4ScoringManager are drawn.");
 
 1605   fpCommand -> SetParameterName (
"mapname", omitable = 
true);
 
 1626       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 1632   const G4String& currentSceneName = pScene -> GetName ();
 
 1633   G4bool successful = pScene -> AddEndOfRunModel (model, warn);
 
 1636       if (newValue == 
"all") {
 
 1637         G4cout << 
"All Primitive Scorer hits";
 
 1639         G4cout << 
"Hits of Primitive Scorer \"" << newValue << 
'"';
 
 1641       G4cout << 
" will be drawn at end of run in scene \"" 
 1642              << currentSceneName << 
"\"." 
 1656   (
"Adds an annotated scale line to the current scene.");
 
 1658   (
"If \"unit\" is \"auto\", length is roughly one tenth of the scene extent.");
 
 1660   (
"If \"direction\" is \"auto\", scale is roughly in the plane of the current view.");
 
 1662   (
"If \"placement\" is \"auto\", scale is placed at bottom left of current view." 
 1663    "\n  Otherwise placed at (xmid,ymid,zmid).");
 
 1666   parameter = 
new G4UIparameter (
"length", 
'd', omitable = 
true);
 
 1669   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
 1672   parameter =  
new G4UIparameter (
"direction", 
's', omitable = 
true);
 
 1676   parameter =  
new G4UIparameter (
"red", 
'd', omitable = 
true);
 
 1679   parameter =  
new G4UIparameter (
"green", 
'd', omitable = 
true);
 
 1682   parameter =  
new G4UIparameter (
"blue", 
'd', omitable = 
true);
 
 1685   parameter =  
new G4UIparameter (
"placement", 
's', omitable = 
true);
 
 1686   parameter -> SetParameterCandidates(
"auto manual");
 
 1689   parameter =  
new G4UIparameter (
"xmid", 
'd', omitable = 
true);
 
 1692   parameter =  
new G4UIparameter (
"ymid", 
'd', omitable = 
true);
 
 1695   parameter =  
new G4UIparameter (
"zmid", 
'd', omitable = 
true);
 
 1698   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
 1719       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 1725   G4String userLengthUnit, direction, auto_manual, positionUnit;
 
 1726   std::istringstream is (newValue);
 
 1727   is >> userLength >> userLengthUnit >> direction
 
 1728      >> red >> green >> blue
 
 1730      >> xmid >> ymid >> zmid >> positionUnit;
 
 1734   if (userLengthUnit == 
"auto") {
 
 1736     G4double intLog10Length = std::floor(std::log10(length));
 
 1737     length = std::pow(10,intLog10Length);
 
 1744   xmid *= unit; ymid *= unit; zmid *= unit;
 
 1747   if (direction(0) == 
'y') scaleDirection = 
G4Scale::y;
 
 1748   if (direction(0) == 
'z') scaleDirection = 
G4Scale::z;
 
 1754         "ERROR: G4VisCommandSceneAddScale::SetNewValue: no viewer." 
 1755         "\n  Auto direction needs a viewer." 
 1766   if (direction == 
"auto") {  
 
 1767     if (std::abs(vp.x()) > std::abs(vp.y()) &&
 
 1768         std::abs(vp.x()) > std::abs(vp.z())) {  
 
 1769       if (std::abs(up.y()) > std::abs(up.z())) scaleDirection = 
G4Scale::z;
 
 1772     else if (std::abs(vp.y()) > std::abs(vp.x()) &&
 
 1773              std::abs(vp.y()) > std::abs(vp.z())) {  
 
 1774       if (std::abs(up.x()) > std::abs(up.z())) scaleDirection = 
G4Scale::z;
 
 1777     else if (std::abs(vp.z()) > std::abs(vp.x()) &&
 
 1778              std::abs(vp.z()) > std::abs(vp.y())) {  
 
 1779       if (std::abs(up.y()) > std::abs(up.x())) scaleDirection = 
G4Scale::x;
 
 1784   G4bool autoPlacing = 
false; 
if (auto_manual == 
"auto") autoPlacing = 
true;
 
 1788   const G4double halfLength(length / 2.);
 
 1790   const G4double freeLengthFraction (1. + 2. * comfort);
 
 1805         "WARNING: Existing scene does not yet have any extent." 
 1806         "\n  Maybe you have not yet added any geometrical object." 
 1812   switch (scaleDirection) {
 
 1814     if (freeLengthFraction * (xmax - xmin) < length) room = 
false; 
break;
 
 1816     if (freeLengthFraction * (ymax - ymin) < length) room = 
false; 
break;
 
 1818     if (freeLengthFraction * (zmax - zmin) < length) room = 
false; 
break;
 
 1824         "WARNING: Not enough room in existing scene.  Maybe scale is too long." 
 1831         "WARNING: The scale you have asked for is bigger than the existing" 
 1832         "\n  scene.  Maybe you have added it too soon.  It is recommended that" 
 1833         "\n  you add the scale last so that it can be correctly auto-positioned" 
 1834         "\n  so as not to be obscured by any existing object and so that the" 
 1835         "\n  view parameters can be correctly recalculated." 
 1842   G4Scale scale(length, annotation, scaleDirection,
 
 1843                 false, xmid, ymid, zmid);
 
 1879   G4double sxmid(xmid), symid(ymid), szmid(zmid);
 
 1883     const G4double xComfort = comfort * (xmax - xmin);
 
 1884     const G4double yComfort = comfort * (ymax - ymin);
 
 1885     const G4double zComfort = comfort * (zmax - zmin);
 
 1886     switch (scaleDirection) {
 
 1889         sxmid = xmax + xComfort;
 
 1890         symid = ymin - yComfort;
 
 1891         szmid = zmin - zComfort;
 
 1893         sxmid = xmin - xComfort;
 
 1894         symid = ymin - yComfort;
 
 1895         szmid = zmax + zComfort;
 
 1900         sxmid = xmin - xComfort;
 
 1901         symid = ymax + yComfort;
 
 1902         szmid = zmin - zComfort;
 
 1904         sxmid = xmax + xComfort;
 
 1905         symid = ymin - yComfort;
 
 1906         szmid = zmin - zComfort;
 
 1911         sxmid = xmax + xComfort;
 
 1912         symid = ymin - yComfort;
 
 1913         szmid = zmax + zComfort;
 
 1915         sxmid = xmin - xComfort;
 
 1916         symid = ymin - yComfort;
 
 1917         szmid = zmax + zComfort;
 
 1973   switch (scaleDirection) {
 
 1975     scaleExtent = 
G4VisExtent(-halfLength,halfLength,0,0,0,0);
 
 1979     scaleExtent = 
G4VisExtent(0,0,-halfLength,halfLength,0,0);
 
 1983     scaleExtent = 
G4VisExtent(0,0,0,0,-halfLength,halfLength);
 
 1997   const G4String& currentSceneName = pScene -> GetName ();
 
 1998   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
 2001       G4cout << 
"Scale of " << annotation
 
 2002              << 
" added to scene \"" << currentSceneName << 
"\".";
 
 2004         G4cout << 
"\n  with extent " << scaleExtent
 
 2005                << 
"\n  at " << transform.getRotation()
 
 2006                << transform.getTranslation();
 
 2021   fpCommand -> SetGuidance (
"Adds text to current scene.");
 
 2023     (
"Use \"/vis/set/textColour\" to set colour.");
 
 2025     (
"Use \"/vis/set/textLayout\" to set layout:");
 
 2036   parameter =  
new G4UIparameter (
"unit", 
's', omitable = 
true);
 
 2039   parameter =  
new G4UIparameter (
"font_size", 
'd', omitable = 
true);
 
 2043   parameter =  
new G4UIparameter (
"x_offset", 
'd', omitable = 
true);
 
 2047   parameter =  
new G4UIparameter (
"y_offset", 
'd', omitable = 
true);
 
 2051   parameter =  
new G4UIparameter (
"text", 
's', omitable = 
true);
 
 2052   parameter->
SetGuidance (
"The rest of the line is text.");
 
 2073       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 2089   x *= unit; y *= unit; z *= unit;
 
 2098   const G4String& currentSceneName = pScene -> GetName ();
 
 2099   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
 2102       G4cout << 
"Text \"" << text
 
 2103              << 
"\" has been added to scene \"" << currentSceneName << 
"\"." 
 2117   fpCommand -> SetGuidance (
"Adds 2D text to current scene.");
 
 2119     (
"Use \"/vis/set/textColour\" to set colour.");
 
 2121     (
"Use \"/vis/set/textLayout\" to set layout:");
 
 2129   parameter =  
new G4UIparameter (
"font_size", 
'd', omitable = 
true);
 
 2133   parameter =  
new G4UIparameter (
"x_offset", 
'd', omitable = 
true);
 
 2137   parameter =  
new G4UIparameter (
"y_offset", 
'd', omitable = 
true);
 
 2141   parameter =  
new G4UIparameter (
"text", 
's', omitable = 
true);
 
 2142   parameter->
SetGuidance (
"The rest of the line is text.");
 
 2163       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 2188   const G4String& currentSceneName = pScene -> GetName ();
 
 2189   G4bool successful = pScene -> AddRunDurationModel (model, warn);
 
 2192       G4cout << 
"2D text \"" << text
 
 2193              << 
"\" has been added to scene \"" << currentSceneName << 
"\"." 
 2205 void G4VisCommandSceneAddText2D::G4Text2D::operator()
 
 2218     (
"/vis/scene/add/trajectories", 
this);
 
 2220     (
"Adds trajectories to current scene.");
 
 2222     (
"Causes trajectories, if any, to be drawn at the end of processing an" 
 2223      "\nevent.  Switches on trajectory storing and sets the" 
 2224      "\ndefault trajectory type.");
 
 2226     (
"The command line parameter list determines the default trajectory type." 
 2227      "\nIf it contains the string \"smooth\", auxiliary inter-step points will" 
 2228      "\nbe inserted to improve the smoothness of the drawing of a curved" 
 2230      "\nIf it contains the string \"rich\", significant extra information will" 
 2231      "\nbe stored in the trajectory (G4RichTrajectory) amenable to modeling" 
 2232      "\nand filtering with \"/vis/modeling/trajectories/create/drawByAttribute\"" 
 2233      "\nand \"/vis/filtering/trajectories/create/attributeFilter\" commands." 
 2234      "\nIt may contain both strings in any order.");
 
 2236     (
"\nTo switch off trajectory storing: \"/tracking/storeTrajectory 0\"." 
 2237      "\nSee also \"/vis/scene/endOfEventAction\".");
 
 2239     (
"Note:  This only sets the default.  Independently of the result of this" 
 2240      "\ncommand, a user may instantiate a trajectory that overrides this default" 
 2241      "\nin PreUserTrackingAction.");
 
 2242   fpCommand -> SetParameterName (
"default-trajectory-type", omitable = 
true);
 
 2263       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 2270   if (newValue.find(
"smooth") != std::string::npos) smooth = 
true;
 
 2271   if (newValue.find(
"rich") != std::string::npos) rich = 
true;
 
 2272   if (newValue.size() && !(rich || smooth)) {
 
 2274       G4cout << 
"ERROR: Unrecognised parameter \"" << newValue << 
"\"" 
 2275       "\n  No action taken." 
 2283   G4int newVerbose = 2;
 
 2286   if (smooth && rich) {
 
 2287     UImanager->
ApplyCommand(
"/tracking/storeTrajectory 4");
 
 2288     defaultTrajectoryType = 
"G4RichTrajectory configured for smooth steps";
 
 2289   } 
else if (smooth) {
 
 2290     UImanager->
ApplyCommand(
"/tracking/storeTrajectory 2");
 
 2291     defaultTrajectoryType = 
"G4SmoothTrajectory";
 
 2293     UImanager->
ApplyCommand(
"/tracking/storeTrajectory 3");
 
 2294     defaultTrajectoryType = 
"G4RichTrajectory";
 
 2296     UImanager->
ApplyCommand(
"/tracking/storeTrajectory 1");
 
 2297     defaultTrajectoryType = 
"G4Trajectory";
 
 2303       "Attributes available for modeling and filtering with" 
 2304       "\n  \"/vis/modeling/trajectories/create/drawByAttribute\" and" 
 2305       "\n  \"/vis/filtering/trajectories/create/attributeFilter\" commands:" 
 2311     } 
else if (smooth) {
 
 2321   const G4String& currentSceneName = pScene -> GetName ();
 
 2322   pScene -> AddEndOfEventModel (model, warn);
 
 2325     G4cout << 
"Default trajectory type " << defaultTrajectoryType
 
 2326            << 
"\n  will be used to store trajectories for scene \"" 
 2327            << currentSceneName << 
"\"." 
 2333       "WARNING: Trajectory storing has been requested.  This action may be" 
 2334       "\n  reversed with \"/tracking/storeTrajectory 0\"." 
 2346     (
"Add named Vis User Action to current scene.");
 
 2348     (
"Attempts to match search string to name of action - use unique sub-string.");
 
 2350     (
"(Use /vis/list to see names of registered actions.)");
 
 2352     (
"If name == \"all\" (default), all actions are added.");
 
 2353   fpCommand -> SetParameterName(
"action-name", omitable = 
true);
 
 2373       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 2380   const std::vector<G4VisManager::UserVisAction>& runDurationUserVisActions =
 
 2382   for (
size_t i = 0; i < runDurationUserVisActions.size(); i++) {
 
 2383     const G4String& 
name = runDurationUserVisActions[i].fName;
 
 2384     G4VUserVisAction* visAction = runDurationUserVisActions[i].fpUserVisAction;
 
 2385     if (newValue == 
"all" || name.find(newValue) != std::string::npos) {
 
 2387       AddVisAction(name,visAction,pScene,runDuration,verbosity);
 
 2391   const std::vector<G4VisManager::UserVisAction>& endOfEventUserVisActions =
 
 2393   for (
size_t i = 0; i < endOfEventUserVisActions.size(); i++) {
 
 2394     const G4String& 
name = endOfEventUserVisActions[i].fName;
 
 2396     if (newValue == 
"all" || name.find(newValue) != std::string::npos) {
 
 2398       AddVisAction(name,visAction,pScene,endOfEvent,verbosity);
 
 2402   const std::vector<G4VisManager::UserVisAction>& endOfRunUserVisActions =
 
 2404   for (
size_t i = 0; i < endOfRunUserVisActions.size(); i++) {
 
 2405     const G4String& 
name = endOfRunUserVisActions[i].fName;
 
 2407     if (newValue == 
"all" || name.find(newValue) != std::string::npos) {
 
 2409       AddVisAction(name,visAction,pScene,endOfRun,verbosity);
 
 2415       G4cout << 
"WARNING: No User Vis Action registered." << 
G4endl;
 
 2420   const G4String& currentSceneName = pScene -> GetName ();
 
 2433   const std::map<G4VUserVisAction*,G4VisExtent>& visExtentMap =
 
 2436   std::map<G4VUserVisAction*,G4VisExtent>::const_iterator i =
 
 2437     visExtentMap.find(visAction);
 
 2438   if (i != visExtentMap.end()) extent = i->second;
 
 2441       G4cout << 
"WARNING: User Vis Action extent is null." << 
G4endl;
 
 2446   model->
SetType(
"User Vis Action");
 
 2450   G4bool successful = 
false;;
 
 2453     successful = pScene -> AddRunDurationModel (model, warn);
 
 2456     successful = pScene -> AddEndOfEventModel (model, warn);
 
 2459     successful = pScene -> AddEndOfRunModel (model, warn);
 
 2463     const G4String& currentSceneName = pScene -> GetName ();
 
 2464     G4cout << 
"User Vis Action added to scene \"" 
 2465            << currentSceneName << 
"\"";
 
 2467       G4cout << 
"\n  with extent " << extent;
 
 2479    (
"Adds a physical volume to current scene, with optional clipping volume.");
 
 2481     (
"If physical-volume-name is \"world\" (the default), the top of the" 
 2482      "\nmain geometry tree (material world) is added.  If \"worlds\", the" 
 2483      "\ntop of all worlds - material world and parallel worlds, if any - are" 
 2484      "\nadded.  Otherwise a search of all worlds is made, taking the first" 
 2485      "\nmatching occurence only.  To see a representation of the geometry" 
 2486      "\nhierarchy of the worlds, try \"/vis/drawTree [worlds]\" or one of the" 
 2487      "\ndriver/browser combinations that have the required functionality, e.g., HepRep.");
 
 2489     (
"If clip-volume-type is specified, the subsequent parameters are used to" 
 2490      "\nto define a clipping volume.  For example," 
 2491      "\n\"vis/scene/add/volume ! ! ! -box km 0 1 0 1 0 1\" will draw the world" 
 2492      "\nwith the positive octant cut away."); 
 
 2494     (
"If clip-volume-type is prepended with '-', the clip-volume is subtracted" 
 2495      "\n(cutaway). (This is the default if there is no prepended character.)" 
 2496      "\nIf '*' is prepended, the intersection of the physical-volume and the" 
 2497      "\nclip-volume is made. (You can make a section/DCUT with a thin box, for" 
 2500     (
"For \"box\", the parameters are xmin,xmax,ymin,ymax,zmin,zmax." 
 2501      "\nOnly \"box\" is programmed at present.");
 
 2503   parameter = 
new G4UIparameter (
"physical-volume-name", 
's', omitable = 
true);
 
 2504   parameter -> SetDefaultValue (
"world");
 
 2506   parameter = 
new G4UIparameter (
"copy-no", 
'i', omitable = 
true);
 
 2507   parameter -> SetGuidance
 
 2508     (
"If negative, matches any copy no.  First name match is taken.");
 
 2509   parameter -> SetDefaultValue (-1);
 
 2511   parameter = 
new G4UIparameter (
"depth-of-descent", 
'i', omitable = 
true);
 
 2512   parameter -> SetGuidance
 
 2513     (
"Depth of descent of geometry hierarchy. Default = unlimited depth.");
 
 2516   parameter = 
new G4UIparameter (
"clip-volume-type", 
's', omitable = 
true);
 
 2517   parameter -> SetParameterCandidates(
"none box -box *box");
 
 2518   parameter -> SetDefaultValue (
"none");
 
 2519   parameter -> SetGuidance(
"[-|*]type.  See general guidance.");
 
 2521   parameter = 
new G4UIparameter (
"parameter-unit", 
's', omitable = 
true);
 
 2522   parameter -> SetDefaultValue (
"m");
 
 2524   parameter = 
new G4UIparameter (
"parameter-1", 
'd', omitable = 
true);
 
 2525   parameter -> SetDefaultValue (0.);
 
 2527   parameter = 
new G4UIparameter (
"parameter-2", 
'd', omitable = 
true);
 
 2528   parameter -> SetDefaultValue (0.);
 
 2530   parameter = 
new G4UIparameter (
"parameter-3", 
'd', omitable = 
true);
 
 2531   parameter -> SetDefaultValue (0.);
 
 2533   parameter = 
new G4UIparameter (
"parameter-4", 
'd', omitable = 
true);
 
 2534   parameter -> SetDefaultValue (0.);
 
 2536   parameter = 
new G4UIparameter (
"parameter-5", 
'd', omitable = 
true);
 
 2537   parameter -> SetDefaultValue (0.);
 
 2539   parameter = 
new G4UIparameter (
"parameter-6", 
'd', omitable = 
true);
 
 2540   parameter -> SetDefaultValue (0.);
 
 2549   return "world 0 -1";
 
 2561       G4cout << 
"ERROR: No current scene.  Please create one." << 
G4endl;
 
 2567   G4int copyNo, requestedDepthOfDescent;
 
 2568   G4double param1, param2, param3, param4, param5, param6;
 
 2569   std::istringstream is (newValue);
 
 2570   is >> name >> copyNo >> requestedDepthOfDescent
 
 2571      >> clipVolumeType >> parameterUnit
 
 2572      >> param1 >> param2 >> param3 >> param4 >> param5 >> param6;
 
 2575   if (clipVolumeType[
size_t(0)] == 
'-') {
 
 2576     clipVolumeType = clipVolumeType.substr(1);  
 
 2577   } 
else if (clipVolumeType[
size_t(0)] == 
'*') {
 
 2579     clipVolumeType = clipVolumeType.substr(1);
 
 2582   param1 *= unit; param2 *= unit; param3 *= unit;
 
 2583   param4 *= unit; param5 *= unit; param6 *= unit;
 
 2588   size_t nWorlds = transportationManager->
GetNoWorlds();
 
 2591       static G4bool warned = 
false;
 
 2592       if (!warned && name != 
"worlds") {
 
 2594           "WARNING: Parallel worlds in operation.  To visualise, specify" 
 2595           "\n  \"worlds\" or the parallel world volume or sub-volume name" 
 2596           "\n   and control visibility with /vis/geometry." 
 2598         std::vector<G4VPhysicalVolume*>::iterator iterWorld =
 
 2600         for (
size_t i = 0; i < nWorlds; ++i, ++iterWorld) {
 
 2601           G4cout << 
"  World " << i << 
": " << (*iterWorld)->GetName()
 
 2614         "ERROR: G4VisCommandSceneAddVolume::SetNewValue:" 
 2615         "\n  No world.  Maybe the geometry has not yet been defined." 
 2616         "\n  Try \"/run/initialize\"" 
 2622   const std::vector<G4Scene::Model>& rdModelList = pScene -> GetRunDurationModelList();
 
 2623   std::vector<G4Scene::Model>::const_iterator it;
 
 2624   for (it = rdModelList.begin(); it != rdModelList.end(); ++it) {
 
 2625     if (it->fpModel->GetGlobalDescription().find(
"G4PhysicalVolumeModel")
 
 2626         != std::string::npos) {
 
 2630   if (it != rdModelList.end()) {
 
 2632       G4cout << 
"WARNING: There is already a volume, \"" 
 2633              << it -> fpModel -> GetGlobalDescription()
 
 2634              << 
"\",\n in the run-duration model list of scene \"" 
 2635              << pScene -> GetName()
 
 2636              << 
"\".\n To get a clean scene:" 
 2637              << 
"\n  /vis/drawVolume " << name
 
 2639              << 
"\n  /vis/scene/create" 
 2640              << 
"\n  /vis/scene/add/volume " << name
 
 2641              << 
"\n  /vis/sceneHandler/attach" 
 2642              << 
"\n (and also, if necessary, /vis/viewer/flush)" 
 2648   std::vector<G4PhysicalVolumeModel*> models;
 
 2649   std::vector<G4VPhysicalVolume*> foundVolumes;
 
 2652   typedef std::vector<PVNodeID> 
PVPath;
 
 2653   PVPath foundFullPVPath;
 
 2654   std::vector<G4int> foundDepths;
 
 2655   std::vector<G4Transform3D> transformations;
 
 2657   if (name == 
"world") {
 
 2661     foundVolumes.push_back(world);
 
 2662     foundDepths.push_back(0);
 
 2665   } 
else if (name == 
"worlds") {
 
 2670           "WARNING: G4VisCommandSceneAddVolume::SetNewValue:" 
 2671           "\n  Parallel worlds requested but none exist." 
 2672           "\n  Just adding material world." 
 2676     std::vector<G4VPhysicalVolume*>::iterator iterWorld =
 
 2678     for (
size_t i = 0; i < nWorlds; ++i, ++iterWorld) {
 
 2681       foundVolumes.push_back(*iterWorld);
 
 2682       foundDepths.push_back(0);
 
 2688     std::vector<G4VPhysicalVolume*>::iterator iterWorld =
 
 2690     for (
size_t i = 0; i < nWorlds; ++i, ++iterWorld) {
 
 2698         foundWorld = *iterWorld;
 
 2699         foundVolumes.push_back(foundVolume);
 
 2707     if (foundVolumes.size()) {
 
 2708       for (
size_t i = 0; i < foundVolumes.size(); ++i) {
 
 2710         (foundVolumes[i], requestedDepthOfDescent, transformations[i]);
 
 2711         foundFullPVPath.pop_back();  
 
 2713         models.push_back(foundPVModel);
 
 2717         G4cout << 
"ERROR: Volume \"" << name << 
"\"";
 
 2719           G4cout << 
", copy no. " << copyNo << 
",";
 
 2727   if (clipVolumeType == 
"box") {
 
 2728     const G4double dX = (param2 - param1) / 2.;
 
 2729     const G4double dY = (param4 - param3) / 2.;
 
 2730     const G4double dZ = (param6 - param5) / 2.;
 
 2731     const G4double x0 = (param2 + param1) / 2.;
 
 2732     const G4double y0 = (param4 + param3) / 2.;
 
 2736       (
"_displaced_clipping_box",
 
 2737        new G4Box(
"_clipping_box",dX,dY,dZ),
 
 2739     for (
size_t i = 0; i < foundVolumes.size(); ++i) {
 
 2740       models[i]->SetClippingSolid(clippingSolid);
 
 2741       models[i]->SetClippingMode(clippingMode);
 
 2745   const G4String& currentSceneName = pScene -> GetName ();
 
 2747   for (
size_t i = 0; i < foundVolumes.size(); ++i) {
 
 2748     G4bool successful = pScene -> AddRunDurationModel (models[i], warn);
 
 2752         G4cout << 
"First occurrence of \"" 
 2753                << foundVolumes[i] -> GetName ()
 
 2756           G4cout << 
", copy no. " << copyNo << 
",";
 
 2761         G4cout << 
"at depth " << foundDepths[i]
 
 2762                << 
",\n  with a requested depth of further descent of ";
 
 2763         if (requestedDepthOfDescent < 0) {
 
 2764           G4cout << 
"<0 (unlimited)";
 
 2767           G4cout << requestedDepthOfDescent;
 
 2769         G4cout << 
",\n  has been added to scene \"" << currentSceneName << 
"\"." 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
void SetParameter(G4UIparameter *const newParameter)
 
virtual ~G4VisCommandSceneAddDate()
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetColour(const G4Colour &)
 
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const 
 
G4Logo(G4double height, const G4VisAttributes &)
 
void SetGlobalTag(const G4String &)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
virtual ~G4VisCommandSceneAddLine()
 
G4String GetCurrentValue(G4UIcommand *command)
 
CLHEP::Hep3Vector G4ThreeVector
 
CLHEP::HepRotation G4RotationMatrix
 
static G4Colour fCurrentColour
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4String GetCurrentValue(G4UIcommand *command)
 
std::vector< G4VPhysicalVolume * >::iterator GetWorldsIterator()
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4String GetCurrentValue(G4UIcommand *command)
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
void UpdateVisManagerScene(const G4String &sceneName="")
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetLineWidth(G4double)
 
virtual ~G4VisCommandSceneAddLogicalVolume()
 
static G4Text::Layout fCurrentTextLayout
 
virtual ~G4VisCommandSceneAddPSHits()
 
Line(G4double x1, G4double y1, G4double z1, G4double x2, G4double y2, G4double z2, G4double width, const G4Colour &colour)
 
const G4ViewParameters & GetViewParameters() const 
 
virtual ~G4VisCommandSceneAddMagneticField()
 
virtual ~G4VisCommandSceneAddHits()
 
const G4ModelingParameters * GetModelingParameters() const 
 
G4VisCommandSceneAddText()
 
void SetDefaultValue(const char *theDefaultValue)
 
virtual void BeginPrimitives(const G4Transform3D &objectTransformation=G4Transform3D())=0
 
G4VisCommandSceneAddLine()
 
const std::vector< const G4Event * > * GetEventVector() const 
 
G4VisCommandSceneAddTrajectories()
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
HepGeom::Point3D< G4double > G4Point3D
 
HepGeom::Vector3D< G4double > G4Vector3D
 
G4VisCommandSceneAddAxes()
 
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1 
 
void SetForceSolid(G4bool)
 
void SetExtent(const G4VisExtent &)
 
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const 
 
G4int GetVerboseLevel() const 
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
virtual ~G4VisCommandSceneAddLogo2D()
 
void SetModelingParameters(const G4ModelingParameters *)
 
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const 
 
const G4Run * GetCurrentRun() const 
 
G4VisCommandSceneAddFrame()
 
void SetVerboseLevel(G4int val)
 
virtual ~G4VisCommandSceneAddAxes()
 
G4VisCommandSceneAddUserAction()
 
void SetTransformation(const G4Transform3D &)
 
static void G4VisCommandsSceneAddUnsuccessful(G4VisManager::Verbosity verbosity)
 
virtual void AddPrimitive(const G4Polyline &)=0
 
static G4UImanager * GetUIpointer()
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4String GetCurrentValue(G4UIcommand *command)
 
G4String GetCurrentValue(G4UIcommand *command)
 
G4String GetCurrentValue(G4UIcommand *command)
 
Line2D(G4double x1, G4double y1, G4double x2, G4double y2, G4double width, const G4Colour &colour)
 
G4String GetCurrentValue(G4UIcommand *command)
 
virtual ~G4VisCommandSceneAddFrame()
 
static G4StateManager * GetStateManager()
 
void AddVisAction(const G4String &name, G4VUserVisAction *, G4Scene *, ActionType, G4VisManager::Verbosity)
 
G4double GetExtentRadius() const 
 
G4VisCommandSceneAddText2D()
 
const G4Vector3D & GetViewpointDirection() const 
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4GLOB_DLL std::ostream G4cout
 
const G4Event * GetEvent() const 
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
const G4VisExtent & GetExtent() const 
 
G4VisCommandSceneAddLogicalVolume()
 
G4VisCommandSceneAddDigis()
 
const G4String & GetName() const 
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
static G4bool ConvertToBool(const char *st)
 
virtual ~G4VisCommandSceneAddScale()
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4VisCommandSceneAddHits()
 
G4PhysicalVolumeModel::G4PhysicalVolumeNodeID PVNodeID
 
G4Polyhedron * CreatePolyhedron() const 
 
G4int GetFoundDepth() const 
 
G4VisCommandSceneAddScale()
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetType(const G4String &)
 
static const G4String & GetGuidanceString()
 
static G4LogicalVolumeStore * GetInstance()
 
const std::vector< UserVisAction > & GetEndOfEventUserVisActions() const 
 
virtual ~G4VisCommandSceneAddText2D()
 
G4VisCommandSceneAddLogo()
 
std::vector< PVNodeID > PVPath
 
G4ApplicationState GetCurrentState() const 
 
const std::map< G4VUserVisAction *, G4VisExtent > & GetUserVisActionExtents() const 
 
void SetBaseFullPVPath(const std::vector< G4PhysicalVolumeNodeID > &baseFullPVPath)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const 
 
void SetVisAttributes(const G4VisAttributes *)
 
virtual ~G4VisCommandSceneAddLine2D()
 
virtual ~G4VisCommandSceneAddArrow2D()
 
const std::vector< UserVisAction > & GetRunDurationUserVisActions() const 
 
static G4TransportationManager * GetTransportationManager()
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4VisCommandSceneAddPSHits()
 
static G4RunManager * GetRunManager()
 
const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > & GetFoundFullPVPath() const 
 
virtual void EndPrimitives2D()=0
 
virtual ~G4VisCommandSceneAddDigis()
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetOffset(double dx, double dy)
 
G4VisCommandSceneAddArrow()
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
virtual void BeginPrimitives2D(const G4Transform3D &objectTransformation=G4Transform3D())=0
 
G4VisCommandSceneAddLine2D()
 
G4double StoD(G4String s)
 
static G4double ValueOf(const char *unitName)
 
G4VisCommandSceneAddEventID()
 
virtual ~G4VisCommandSceneAddText()
 
G4VPhysicalVolume * GetFoundVolume() const 
 
const std::map< G4String, G4AttDef > * GetAttDefs() const 
 
G4String GetCurrentValue(G4UIcommand *command)
 
static G4double fCurrentLineWidth
 
static G4Colour fCurrentTextColour
 
static Verbosity GetVerbosity()
 
virtual ~G4VisCommandSceneAddLogo()
 
virtual ~G4VisCommandSceneAddTrajectories()
 
G4UIcmdWithoutParameter * fpCommand
 
G4int GetNumberOfEventToBeProcessed() const 
 
size_t GetNoWorlds() const 
 
G4VisCommandSceneAddVolume()
 
G4VisCommandSceneAddArrow2D()
 
G4String GetCurrentValue(G4UIcommand *command)
 
G4VisCommandSceneAddDate()
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4UIcmdWithoutParameter * fpCommand
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4VViewer * GetCurrentViewer() const 
 
virtual void EndPrimitives()=0
 
const G4Transform3D & GetFoundTransformation() const 
 
virtual ~G4VisCommandSceneAddVolume()
 
const std::vector< UserVisAction > & GetEndOfRunUserVisActions() const 
 
G4String GetCurrentValue(G4UIcommand *command)
 
G4String GetCurrentValue(G4UIcommand *command)
 
virtual ~G4VisCommandSceneAddEventID()
 
G4String GetCurrentValue(G4UIcommand *command)
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
G4VisCommandSceneAddMagneticField()
 
void SetGuidance(const char *theGuidance)
 
const G4Vector3D & GetUpVector() const 
 
G4String GetCurrentValue(G4UIcommand *command)
 
Arrow2D(G4double x1, G4double y1, G4double x2, G4double y2, G4double width, const G4Colour &colour)
 
void SetGlobalDescription(const G4String &)
 
G4String GetCurrentValue(G4UIcommand *command)
 
G4int ApplyCommand(const char *aCommand)
 
G4Scene * GetCurrentScene() const 
 
virtual ~G4VisCommandSceneAddUserAction()
 
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const 
 
void SetNewValue(G4UIcommand *command, G4String newValue)
 
void SetScreenSize(G4double)
 
virtual ~G4VisCommandSceneAddArrow()
 
void DescribeYourselfTo(G4VGraphicsScene &)
 
G4VisCommandSceneAddLogo2D()
 
static G4VisManager * fpVisManager
 
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const