87 std::ostringstream oss;
88 oss << x/uv <<
" " << y/uv <<
" " << unitName;
99 std::istringstream is(paramString);
100 is >> x >> y >> unit;
119 (
"Accepts (a) RGB triplet. e.g., \".3 .4 .5\", or"
120 "\n (b) string such as \"white\", \"black\", \"grey\", \"red\"...or"
121 "\n (c) an additional number for opacity, e.g., \".3 .4 .5 .6\""
122 "\n or \"grey ! ! .6\" (note \"!\"'s for unused parameters).");
143 const std::size_t iPos0 = 0;
144 if (std::isalpha(redOrString[iPos0])) {
150 G4warn <<
"WARNING: Colour \"" << redOrString
151 <<
"\" not found. Defaulting to " << colour
164 std::istringstream iss(redOrString);
169 G4warn <<
"WARNING: String \"" << redOrString
170 <<
"\" cannot be parsed. Defaulting to " << colour
175 colour =
G4Colour(red,green,blue,opacity);
196 <<
"\n Unit \"" << unit <<
"\" not defined"
203 <<
"\n Unit \"" << unit <<
"\" not a unit of " << category;
204 if (category ==
"Volumic Mass")
G4warn <<
" (density)";
220 G4warn <<
"WARNING: Scene pointer is null."
227 if (!pSceneHandler) {
229 G4warn <<
"WARNING: Scene handler not found." <<
G4endl;
238 if (pScene == pSceneHandler->
GetScene()) {
252 "ERROR: No current viewer - \"/vis/viewer/list\" to see possibilities."
266 "WARNING: For some reason, possibly mentioned above, it has not been"
267 "\n possible to add to the scene."
282 if (sceneHandler && sceneHandler->
GetScene()) {
288 G4warn <<
"Issue /vis/viewer/refresh or flush to see effect."
297 const std::vector<G4ViewParameters>& viewVector,
298 const G4int nInterpolationPoints,
299 const G4int waitTimePerPointmilliseconds,
302 const G4int safety = (
G4int)viewVector.size()*nInterpolationPoints;
303 G4int safetyCount = 0;
306 auto a = std::chrono::steady_clock::now();
312 if (exportString ==
"export" &&
317 if (waitTimePerPointmilliseconds > 0) {
318 auto b = std::chrono::steady_clock::now();
319 auto timeTaken = b - a;
320 auto timeLeft = std::chrono::milliseconds(waitTimePerPointmilliseconds) - timeTaken;
321 if (timeLeft > std::chrono::duration<double>::zero()) {
322 std::this_thread::sleep_for(timeLeft);
325 }
while (safetyCount++ < safety);
332 const G4int nInterpolationPoints,
333 const G4int waitTimePerPointmilliseconds,
336 std::vector<G4ViewParameters> viewVector;
337 viewVector.push_back(oldVP);
338 viewVector.push_back(oldVP);
339 viewVector.push_back(newVP);
340 viewVector.push_back(newVP);
345 nInterpolationPoints,
346 waitTimePerPointmilliseconds,
354 const std::vector<std::vector<G4PhysicalVolumeModel::G4PhysicalVolumeNodeID>>& paths)
361 for (
const auto& path: paths) {
362 const auto& touchable = path.back().GetPhysicalVolume();
364 = *(currentViewer->GetApplicableVisAttributes
365 (touchable->GetLogicalVolume()->GetVisAttributes()));
366 auto hiVisAtts = loVisAtts;
368 loVisAtts.SetForceSolid();
370 hiVisAtts.SetForceSolid();
371 auto pvNameCopyNoPath
376 loVP.AddVisAttributesModifier(loVAMColour);
379 loVP.AddVisAttributesModifier(loVAMStyle);
383 hiVP.AddVisAttributesModifier(hiVAMColour);
386 hiVP.AddVisAttributesModifier(hiVAMStyle);
390 std::vector<G4ViewParameters> viewVector;
392 for (
G4int i = 0; i < 5; i++) {
393 viewVector.push_back(loVP);
394 viewVector.push_back(hiVP);
403 if (fromCmd && toCmd) {
405 for (
G4int i = startLine; i < nGuideEntries; ++i) {
415 if (fromCmd && toCmd) {
417 for (
G4int i = 0; i < nParEntries; ++i) {
430 if (halfX > 0. && halfY > 0. && halfZ > 0.) {
431 const G4Box box(
"vis_extent",halfX,halfY,halfZ);
HepGeom::Point3D< G4double > G4Point3D
G4Box is a cuboid of given half lengths dx,dy,dz. The Box is centred on the origin with sides paralle...
static G4bool GetColour(const G4String &key, G4Colour &result)
static G4ModelingParameters::PVNameCopyNoPath GetPVNameCopyNoPath(const std::vector< G4PhysicalVolumeNodeID > &)
std::size_t GetParameterEntries() const
const G4String & GetGuidanceLine(G4int i) const
G4UIparameter * GetParameter(G4int i) const
static G4double ValueOf(const char *unitName)
void SetParameter(G4UIparameter *const newParameter)
void SetGuidance(const char *aGuidance)
std::size_t GetGuidanceEntries() const
G4int ApplyCommand(const char *aCommand)
static G4UImanager * GetUIpointer()
static G4bool IsUnitDefined(const G4String &)
static G4double GetValueOf(const G4String &)
static G4String GetCategory(const G4String &)
G4Scene * GetScene() const
const G4String & GetName() const
const G4ViewParameters & GetViewParameters() const
void SetViewParameters(const G4ViewParameters &vp)
G4VSceneHandler * GetSceneHandler() const
static G4double fCurrentTextSize
void G4VisCommandsSceneAddUnsuccessful(G4VisManager::Verbosity verbosity)
static void SetVisManager(G4VisManager *pVisManager)
static G4ViewParameters fExistingVP
void InterpolateToNewView(G4VViewer *currentViewer, const G4ViewParameters &oldVP, const G4ViewParameters &newVP, const G4int nInterpolationPoints=50, const G4int waitTimePerPointmilliseconds=20, const G4String &exportString="")
static G4Colour fCurrentTextColour
void CopyCameraParameters(G4ViewParameters &target, const G4ViewParameters &from)
static G4VisManager * GetVisManager()
void InterpolateViews(G4VViewer *currentViewer, const std::vector< G4ViewParameters > &viewVector, const G4int nInterpolationPoints=50, const G4int waitTimePerPointmilliseconds=20, const G4String &exportString="")
void CheckSceneAndNotifyHandlers(G4Scene *=nullptr)
static std::vector< G4PhysicalVolumesSearchScene::Findings > fCurrrentPVFindingsForField
void ConvertToColour(G4Colour &colour, const G4String &redOrString, G4double green, G4double blue, G4double opacity)
static G4VisManager * fpVisManager
static G4VisExtent fCurrentExtentForField
void DrawExtent(const G4VisExtent &)
static const G4Colour & GetCurrentTextColour()
static G4bool ConvertToDoublePair(const G4String ¶mString, G4double &xval, G4double &yval)
void RefreshIfRequired(G4VViewer *viewer)
static G4SceneTreeItem fExistingSceneTree
void SetViewParameters(G4VViewer *viewer, const G4ViewParameters &viewParams)
const G4String & ConvertToColourGuidance()
void CopyParametersFrom(const G4UIcommand *fromCmd, G4UIcommand *toCmd)
static G4int fCurrentArrow3DLineSegmentsPerCircle
static G4PhysicalVolumeModel::TouchableProperties fCurrentTouchableProperties
G4bool ProvideValueOfUnit(const G4String &where, const G4String &unit, const G4String &category, G4double &value)
static G4Text::Layout fCurrentTextLayout
static G4bool fThereWasAViewer
static G4double fCurrentLineWidth
void Twinkle(G4VViewer *currentViewer, const G4ViewParameters &baseVP, const std::vector< std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > > &paths)
static G4String ConvertToString(G4double x, G4double y, const char *unitName)
static G4Colour fCurrentColour
void CopyGuidanceFrom(const G4UIcommand *fromCmd, G4UIcommand *toCmd, G4int startLine=0)
void SetViewpointDirection(const G4Vector3D &viewpointDirection)
void SetScaleFactor(const G4Vector3D &scaleFactor)
static G4ViewParameters * CatmullRomCubicSplineInterpolation(const std::vector< G4ViewParameters > &views, G4int nInterpolationPoints=50)
const G4Vector3D & GetScaleFactor() const
void SetCurrentTargetPoint(const G4Point3D ¤tTargetPoint)
const G4Vector3D & GetLightpointDirection() const
void SetFieldHalfAngle(G4double fieldHalfAngle)
const G4Vector3D & GetViewpointDirection() const
const G4Point3D & GetCurrentTargetPoint() const
G4double GetFieldHalfAngle() const
G4double GetZoomFactor() const
void SetDolly(G4double dolly)
const G4Vector3D & GetUpVector() const
void SetZoomFactor(G4double zoomFactor)
void SetUpVector(const G4Vector3D &upVector)
void SetLightpointDirection(const G4Vector3D &lightpointDirection)
void SetLightsMoveWithCamera(G4bool moves)
G4bool IsAutoRefresh() const
G4bool GetLightsMoveWithCamera() const
G4double GetDolly() const
const G4Point3D & GetExtentCenter() const
G4bool contains(const G4String &str, std::string_view ss)
Check if a string contains a given substring.