|
|
|
@@ -143,6 +143,9 @@ G4UIQt::G4UIQt(G4int argc, char** argv)
|
|
|
|
|
fNewSceneTreeItemTreeWidget(nullptr),
|
|
|
|
|
fMaxPVDepth(0),
|
|
|
|
|
fNewSceneTreeSlider(nullptr),
|
|
|
|
|
fUnwrapButtonWidget(nullptr),
|
|
|
|
|
fFadeButtonWidget(nullptr),
|
|
|
|
|
fXrayButtonWidget(nullptr),
|
|
|
|
|
fViewerPropertiesWidget(nullptr),
|
|
|
|
|
fPickInfosWidget(nullptr),
|
|
|
|
|
fHelpLine(nullptr),
|
|
|
|
@@ -167,6 +170,7 @@ G4UIQt::G4UIQt(G4int argc, char** argv)
|
|
|
|
|
fZoomOutIcon(nullptr),
|
|
|
|
|
fWireframeIcon(nullptr),
|
|
|
|
|
fSolidIcon(nullptr),
|
|
|
|
|
fPointCloudIcon(nullptr),
|
|
|
|
|
fHiddenLineRemovalIcon(nullptr),
|
|
|
|
|
fHiddenLineAndSurfaceRemovalIcon(nullptr),
|
|
|
|
|
fPerspectiveIcon(nullptr),
|
|
|
|
@@ -176,7 +180,9 @@ G4UIQt::G4UIQt(G4int argc, char** argv)
|
|
|
|
|
fRunIcon(nullptr),
|
|
|
|
|
fParamIcon(nullptr),
|
|
|
|
|
fPickTargetIcon(nullptr),
|
|
|
|
|
fExitIcon(nullptr)
|
|
|
|
|
fExitIcon(nullptr),
|
|
|
|
|
fResetCameraIcon(nullptr),
|
|
|
|
|
fResetTargetPointIcon(nullptr)
|
|
|
|
|
#ifdef G4MULTITHREADED
|
|
|
|
|
,
|
|
|
|
|
fThreadsFilterComboBox(nullptr)
|
|
|
|
@@ -251,13 +257,15 @@ G4UIQt::G4UIQt(G4int argc, char** argv)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
fMainWindow->setWindowTitle(QFileInfo(QCoreApplication::applicationFilePath()).fileName());
|
|
|
|
|
fMainWindow->move(QPoint(50, 50));
|
|
|
|
|
|
|
|
|
|
// force the size at be correct at the beggining
|
|
|
|
|
// because the widget is not realized yet, the size of the main window is not up to date. But
|
|
|
|
|
// we need it in order to add some viewer inside
|
|
|
|
|
fMainWindow->resize(fUIDockWidget->width() + fCoutDockWidget->width() + 20,
|
|
|
|
|
fUIDockWidget->height() + fCoutDockWidget->height() + 20);
|
|
|
|
|
int width = QGuiApplication::primaryScreen()->geometry().size().width() * 0.9;
|
|
|
|
|
int height = QGuiApplication::primaryScreen()->geometry().size().height() * 0.9;
|
|
|
|
|
fMainWindow->resize(width, height);
|
|
|
|
|
fMainWindow->move((QGuiApplication::primaryScreen()->geometry().size().width() - width) / 2,
|
|
|
|
|
(QGuiApplication::primaryScreen()->geometry().size().height() - height) / 4);
|
|
|
|
|
|
|
|
|
|
// set last focus on command line
|
|
|
|
|
fCommandArea->setFocus(Qt::TabFocusReason);
|
|
|
|
@@ -334,10 +342,13 @@ void G4UIQt::SetDefaultIconsToolbar()
|
|
|
|
|
AddIcon("Hidden line and hidden surface removal", "hidden_line_and_surface_removal", "");
|
|
|
|
|
AddIcon("Surfaces", "solid", "");
|
|
|
|
|
AddIcon("Wireframe", "wireframe", "");
|
|
|
|
|
AddIcon("PointCloud", "point_cloud", "");
|
|
|
|
|
|
|
|
|
|
// Perspective/Ortho icons
|
|
|
|
|
AddIcon("Perspective", "perspective", "");
|
|
|
|
|
AddIcon("Orthographic", "ortho", "");
|
|
|
|
|
AddIcon("ResetCamera", "reset_camera", "");
|
|
|
|
|
AddIcon("Reset target point", "resetTargetPoint", "/vis/viewer/set/targetPoint 0 0 0 m");
|
|
|
|
|
AddIcon("Run beam on", "runBeamOn", "/run/beamOn 1");
|
|
|
|
|
AddIcon("Exit Application", "exit", "exit");
|
|
|
|
|
}
|
|
|
|
@@ -1455,6 +1466,126 @@ void G4UIQt::CreateIcons()
|
|
|
|
|
" "
|
|
|
|
|
};
|
|
|
|
|
fExitIcon= new QPixmap(exitIcon);
|
|
|
|
|
|
|
|
|
|
const char * const resetCamera[]={
|
|
|
|
|
"32 32 3 1",
|
|
|
|
|
" c None",
|
|
|
|
|
". c #D5D8D5",
|
|
|
|
|
"@ c #000000",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" .......................... ",
|
|
|
|
|
" .@@@@@@@@@@@@@@@@@@@@@@@@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@. .@@@@@@@@@@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@. .@. .@. ",
|
|
|
|
|
" .@. .@@@@@@@@@@. .@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@. .@. ",
|
|
|
|
|
" .@@@@@@@@@@@@@@@@@@@@@@@@. ",
|
|
|
|
|
" .......................... ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" "}
|
|
|
|
|
;
|
|
|
|
|
fResetCameraIcon = new QPixmap(resetCamera);
|
|
|
|
|
|
|
|
|
|
const char * const resetTargetPointIcon[]={
|
|
|
|
|
"32 32 3 1",
|
|
|
|
|
" c None",
|
|
|
|
|
". c #D5D8D5",
|
|
|
|
|
"@ c #000000",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@@@@@@@@@@@@@@@@@@@@ ",
|
|
|
|
|
" .@.................... ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" .@. ",
|
|
|
|
|
" ",
|
|
|
|
|
" "}
|
|
|
|
|
;
|
|
|
|
|
fResetTargetPointIcon = new QPixmap(resetTargetPointIcon);
|
|
|
|
|
|
|
|
|
|
const char * const pointCloudIcon[] = {
|
|
|
|
|
"32 32 2 1 ",
|
|
|
|
|
" c None",
|
|
|
|
|
". c black",
|
|
|
|
|
" ",
|
|
|
|
|
" ... ",
|
|
|
|
|
" .. . .. ",
|
|
|
|
|
" .. .. ",
|
|
|
|
|
" .. .. .. . .. ",
|
|
|
|
|
" .. .. .. . . . ",
|
|
|
|
|
" . .. .. . . . ",
|
|
|
|
|
" .. . ",
|
|
|
|
|
" .. . ",
|
|
|
|
|
" . .. .. . . . ",
|
|
|
|
|
" . .. .. . . . ",
|
|
|
|
|
" .. .. . ",
|
|
|
|
|
" .. . ",
|
|
|
|
|
" . .. . . . ",
|
|
|
|
|
" . .. .. . . . ",
|
|
|
|
|
" .. .. . . ",
|
|
|
|
|
" .. .. . ",
|
|
|
|
|
" . .. . . ",
|
|
|
|
|
" . .. . . . ",
|
|
|
|
|
" .. .. . . ",
|
|
|
|
|
" .. .. . ",
|
|
|
|
|
" . .. .. . . ",
|
|
|
|
|
" . .. . . . ",
|
|
|
|
|
" .. .. . . ",
|
|
|
|
|
" .. .. .. .. ",
|
|
|
|
|
" .... . . ",
|
|
|
|
|
" .. . .. ",
|
|
|
|
|
" ... ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" "
|
|
|
|
|
};
|
|
|
|
|
fPointCloudIcon = new QPixmap(pointCloudIcon);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
|
@@ -1524,13 +1655,13 @@ void G4UIQt::CreateNewSceneTreeWidget()
|
|
|
|
|
auto buttonBox = new QWidget();
|
|
|
|
|
auto buttonBoxlayout = new QHBoxLayout();
|
|
|
|
|
buttonBox->setLayout(buttonBoxlayout);
|
|
|
|
|
auto unwrapButtonWidget = new QRadioButton("Unwrap");
|
|
|
|
|
unwrapButtonWidget->setChecked(true); // Initial state
|
|
|
|
|
auto fadeButtonWidget = new QRadioButton("Fade");
|
|
|
|
|
auto xrayButtonWidget = new QRadioButton("X-ray");
|
|
|
|
|
buttonBoxlayout->addWidget(unwrapButtonWidget);
|
|
|
|
|
buttonBoxlayout->addWidget(fadeButtonWidget);
|
|
|
|
|
buttonBoxlayout->addWidget(xrayButtonWidget);
|
|
|
|
|
fUnwrapButtonWidget = new QRadioButton("Unwrap");
|
|
|
|
|
fUnwrapButtonWidget->setChecked(true); // Initial state
|
|
|
|
|
fFadeButtonWidget = new QRadioButton("Fade");
|
|
|
|
|
fXrayButtonWidget = new QRadioButton("X-ray");
|
|
|
|
|
buttonBoxlayout->addWidget(fUnwrapButtonWidget);
|
|
|
|
|
buttonBoxlayout->addWidget(fFadeButtonWidget);
|
|
|
|
|
buttonBoxlayout->addWidget(fXrayButtonWidget);
|
|
|
|
|
buttonBoxlayout->setContentsMargins(0,0,0,0);
|
|
|
|
|
buttonBox->setLayout(buttonBoxlayout);
|
|
|
|
|
// Layout
|
|
|
|
@@ -1565,11 +1696,11 @@ void G4UIQt::CreateNewSceneTreeWidget()
|
|
|
|
|
[&]{SliderReleased();});
|
|
|
|
|
|
|
|
|
|
// Connect the slider buttons
|
|
|
|
|
connect(unwrapButtonWidget, &QRadioButton::clicked,
|
|
|
|
|
connect(fUnwrapButtonWidget, &QRadioButton::clicked,
|
|
|
|
|
[&]{SliderRadioButtonClicked(1);}); // Unwrap
|
|
|
|
|
connect(fadeButtonWidget, &QRadioButton::clicked,
|
|
|
|
|
connect(fFadeButtonWidget, &QRadioButton::clicked,
|
|
|
|
|
[&]{SliderRadioButtonClicked(2);}); // Fade
|
|
|
|
|
connect(xrayButtonWidget, &QRadioButton::clicked,
|
|
|
|
|
connect(fXrayButtonWidget, &QRadioButton::clicked,
|
|
|
|
|
[&]{SliderRadioButtonClicked(3);}); // X-ray
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1626,6 +1757,61 @@ void G4UIQt::UpdateSceneTree(const G4SceneTreeItem& root)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void G4UIQt::UpdateDrawingStyle(G4int style) {
|
|
|
|
|
// Surface style
|
|
|
|
|
switch (style) {
|
|
|
|
|
case 0:
|
|
|
|
|
this->SetIconWireframeSelected();
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
this->SetIconHLRSelected();
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
this->SetIconSolidSelected();
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
this->SetIconHLHSRSelected();
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
this->SetIconCoudPointSelected();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::UpdateProjectionStyle(G4int style) {
|
|
|
|
|
if (style == 0.) { // ortho
|
|
|
|
|
this->SetIconOrthoSelected();
|
|
|
|
|
} else {
|
|
|
|
|
this->SetIconPerspectiveSelected();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::UpdateTransparencySlider(G4double depth, G4int option) {
|
|
|
|
|
fNewSceneTreeSlider->blockSignals(true);
|
|
|
|
|
fNewSceneTreeSlider->setValue(depth * maxInherentSliderValue / fMaxPVDepth);
|
|
|
|
|
fNewSceneTreeSlider->blockSignals(false);
|
|
|
|
|
if (option == 1) {
|
|
|
|
|
fUnwrapButtonWidget->blockSignals(true);
|
|
|
|
|
fUnwrapButtonWidget->setChecked(true);
|
|
|
|
|
fUnwrapButtonWidget->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
else if (option == 2) {
|
|
|
|
|
fFadeButtonWidget->blockSignals(true);
|
|
|
|
|
fFadeButtonWidget->setChecked(true);
|
|
|
|
|
fFadeButtonWidget->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
else if (option == 3) {
|
|
|
|
|
fXrayButtonWidget->blockSignals(true);
|
|
|
|
|
fXrayButtonWidget->setChecked(true);
|
|
|
|
|
fXrayButtonWidget->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Build Physical Volume tree of touchables
|
|
|
|
|
void G4UIQt::BuildPVQTree(const G4SceneTreeItem& g4stItem, QTreeWidgetItem* qtwItem)
|
|
|
|
|
{
|
|
|
|
@@ -1655,7 +1841,7 @@ void G4UIQt::BuildPVQTree(const G4SceneTreeItem& g4stItem, QTreeWidgetItem* qtwI
|
|
|
|
|
oss.str(""); oss << nameCopyNo <<
|
|
|
|
|
": Click to make visible and get more information."
|
|
|
|
|
"\n This may not work if the volume is in the \"base path\". (Hover on"
|
|
|
|
|
"\n the model to see base path.) If this is the case,"
|
|
|
|
|
"\n G4PhysicalVolumeModel to see base path.) If this is the case,"
|
|
|
|
|
"\n \"/vis/scene/add/volume " << name << "\" to bring into the displayed tree.)";
|
|
|
|
|
newQTWItem->setToolTip(0, oss.str().c_str());
|
|
|
|
|
} else { // A fully defined touchable
|
|
|
|
@@ -1724,27 +1910,14 @@ void G4UIQt::SceneTreeItemClicked(QTreeWidgetItem* item)
|
|
|
|
|
}
|
|
|
|
|
uiMan->ApplyCommand("/vis/set/touchable" + sceneTreeItem->GetPVPath());
|
|
|
|
|
uiMan->ApplyCommand("/vis/touchable/set/visibility " + argument);
|
|
|
|
|
// If daughters, set daughtersInvisible too
|
|
|
|
|
if (sceneTreeItem->GetChildren().size() > 0 ) {
|
|
|
|
|
uiMan->ApplyCommand("/vis/touchable/set/daughtersInvisible " + inverse);
|
|
|
|
|
}
|
|
|
|
|
// If not cancelled and if daughters > 0 and if making invisible
|
|
|
|
|
static G4bool wanted = true;
|
|
|
|
|
if (wanted && sceneTreeItem->GetChildren().size() > 0 && argument == "false") {
|
|
|
|
|
static G4bool first = true;
|
|
|
|
|
if (first && sceneTreeItem->GetChildren().size() > 0 && argument == "false") {
|
|
|
|
|
QMessageBox msgBox;
|
|
|
|
|
msgBox.setText
|
|
|
|
|
("This action makes this volume and all descendants invisible."
|
|
|
|
|
" To see descendants, right-click and select daughtersInvisible/false"
|
|
|
|
|
" and check visibility of descendants individually. If this gets out"
|
|
|
|
|
" of hand, \"/vis/viewer/clearVisAttributesModifiers\" and start again.");
|
|
|
|
|
msgBox.setInformativeText
|
|
|
|
|
("To suppress this message click \"Discard\" or \"Don't Save\"");
|
|
|
|
|
msgBox.setStandardButtons(QMessageBox::Discard | QMessageBox::Ok);
|
|
|
|
|
msgBox.setDefaultButton(QMessageBox::Ok);
|
|
|
|
|
auto action = msgBox.exec();
|
|
|
|
|
if (action == QMessageBox::Discard) {
|
|
|
|
|
wanted = false;
|
|
|
|
|
}
|
|
|
|
|
("To make all descendants invisible, select, then right-click/daughtersInvisible/true.");
|
|
|
|
|
msgBox.setStandardButtons(QMessageBox::Ok);
|
|
|
|
|
msgBox.exec();
|
|
|
|
|
first = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@@ -2853,29 +3026,96 @@ void G4UIQt::CreateViewerWidget()
|
|
|
|
|
// Set layouts
|
|
|
|
|
|
|
|
|
|
// clang-format off
|
|
|
|
|
SetStartPage(std::string("<table width='100%'><tr><td width='30%'></td><td><div ")+
|
|
|
|
|
"style='color: rgb(140, 31, 31); font-size: xx-large; font-family: Garamond, serif; padding-bottom: 0px; font-weight: normal'>Geant4: "+
|
|
|
|
|
QApplication::applicationName ().toStdString()+
|
|
|
|
|
"</div></td><td width='40%'> <br/><i>http://cern.ch/geant4/</i></td></tr></table>"+
|
|
|
|
|
"<p> </p>"+
|
|
|
|
|
"<div style='background:#EEEEEE;'><b>Tooltips :</b><ul>"+
|
|
|
|
|
"<li><b>Start a new viewer :</b><br />"+
|
|
|
|
|
"<i>'/vis/open/...'<br />"+
|
|
|
|
|
"For example '/vis/open OGL'</i></li>"+
|
|
|
|
|
"<li><b>Execute a macro file :</b><br />"+
|
|
|
|
|
"<i>'/control/execute my_macro_file'</i></li>"+
|
|
|
|
|
"</ul></div>"+
|
|
|
|
|
SetStartPage
|
|
|
|
|
("<table width='100%'>"
|
|
|
|
|
"<tr>"
|
|
|
|
|
"<td width='30%'></td>"
|
|
|
|
|
"<td>"
|
|
|
|
|
"<div style='color: rgb(140, 31, 31); font-size: xx-large;"
|
|
|
|
|
"font-family: Garamond, serif; padding-bottom: 0px; font-weight: normal'>"
|
|
|
|
|
"Geant4: "+QApplication::applicationName ().toStdString()+
|
|
|
|
|
"</div>"
|
|
|
|
|
"</td><td width='40%'> <br/><i>http://cern.ch/geant4/</i></td>"
|
|
|
|
|
"</tr>"
|
|
|
|
|
"</table>"
|
|
|
|
|
|
|
|
|
|
"<div style='background:#EEEEEE;'><b>Documentation :</b><ul>"+
|
|
|
|
|
"<li><b>Visualisation publication :</b><br />"+
|
|
|
|
|
"<i><a href='http://www.worldscientific.com/doi/abs/10.1142/S1793962313400011'>The Geant4 Visualization System - A Multi-Driver Graphics System</b><br />, Allison, J. et al., International Journal of Modeling, Simulation, and Scientific Computing, Vol. 4, Suppl. 1 (2013) 1340001</a>:<br/> http://www.worldscientific.com/doi/abs/10.1142/S1793962313400011</i></li>"+
|
|
|
|
|
"</ul></div>"+
|
|
|
|
|
"<p> </p>"
|
|
|
|
|
|
|
|
|
|
"<div style='background:#EEEEEE;'><b>Getting Help :</b><ul>"+
|
|
|
|
|
"<li><b>If problems arise, try <a href='https://cern.ch/geant4-forum'>browsing the user forum</a> to see whether or not your problem has already been encountered.<br /> If it hasn't, you can post it and Geant4 developers will do their best to find a solution. This is also a good place to<br /> discuss Geant4 topics in general.</b> https://cern.ch/geant4-forum"+
|
|
|
|
|
"<li><b>Get a look at <a href='http://cern.ch/geant4/support'>Geant4 User support pages</a>: <i>http://cern.ch/geant4/support</i></b></li>"+
|
|
|
|
|
"</ul></div>"
|
|
|
|
|
);
|
|
|
|
|
"<div>"
|
|
|
|
|
"<table>"
|
|
|
|
|
"<td>"
|
|
|
|
|
"<div style='background:#EEEEEE;'>"
|
|
|
|
|
"<b>Tooltips :</b>"
|
|
|
|
|
"<ul>"
|
|
|
|
|
"<li><b>Start a new viewer :</b><br />"
|
|
|
|
|
"<i>'/vis/open/...', for example '/vis/open OGL'</i>"
|
|
|
|
|
"</li>"
|
|
|
|
|
"<li><b>Draw the detector :</b><br />"
|
|
|
|
|
"<i>'/vis/drawVolume'</i>"
|
|
|
|
|
"</li>"
|
|
|
|
|
"<li><b>Execute a macro file :</b><br />"
|
|
|
|
|
"<i>'/control/execute my_macro_file'</i>"
|
|
|
|
|
"</li>"
|
|
|
|
|
"<li><b>Interacting with the viewer :</b><br />"
|
|
|
|
|
"<i>"
|
|
|
|
|
"Different viewers may behave somewhat differently, but the table gives a guide."
|
|
|
|
|
"</i>"
|
|
|
|
|
"</li>"
|
|
|
|
|
"</ul>"
|
|
|
|
|
"</div>"
|
|
|
|
|
"</td>"
|
|
|
|
|
"<td>"
|
|
|
|
|
"<div style='background:#EEEEEE;'><br><br>"
|
|
|
|
|
"<table border=\"1\">"
|
|
|
|
|
"<tr><th>Action</th><th>Mouse actions</th><th>Trackpad actions</th></tr>"
|
|
|
|
|
"<tr>"
|
|
|
|
|
"<td>Rotate</td>"
|
|
|
|
|
"<td>left-button-press move or middle-button-move</td>"
|
|
|
|
|
"<td>one-finger-press-move or three-finger-move</td>"
|
|
|
|
|
"</tr>"
|
|
|
|
|
"<tr><td>Zoom</td><td>right-button-move</td><td>two-finger-move</td></tr>"
|
|
|
|
|
"<tr><td>Zoom to cursor</td><td>SHIFT-Zoom</td><td>SHIFT-Zoom</td></tr>"
|
|
|
|
|
"<tr><td>Pan</td><td>SHIFT-Rotate</td><td>SHIFT-Rotate</td></tr>"
|
|
|
|
|
"</table>"
|
|
|
|
|
"</div>"
|
|
|
|
|
"</td>"
|
|
|
|
|
"</table>"
|
|
|
|
|
"</div>"
|
|
|
|
|
|
|
|
|
|
"<div style='background:#EEEEEE;'>"
|
|
|
|
|
"<b>Documentation :</b>"
|
|
|
|
|
"<ul>"
|
|
|
|
|
"<li><b>Visualisation publication :</b><br />"+
|
|
|
|
|
"<i>"
|
|
|
|
|
"<a href='https://doi.org/10.48550/arXiv.1212.6923'>"
|
|
|
|
|
"The Geant4 Visualisation System - A Multi-Driver Graphics System</b><br />"
|
|
|
|
|
"Allison, J. et al., International Journal of Modeling, Simulation,"
|
|
|
|
|
" and Scientific Computing, Vol. 4, Suppl. 1 (2013) 1340001"
|
|
|
|
|
"</a><br/>http://www.worldscientific.com/doi/abs/10.1142/S1793962313400011"
|
|
|
|
|
"</i>"
|
|
|
|
|
"</li>"
|
|
|
|
|
"</ul>"
|
|
|
|
|
"</div>"
|
|
|
|
|
|
|
|
|
|
"<div style='background:#EEEEEE;'>"
|
|
|
|
|
"<b>Getting Help :</b>"
|
|
|
|
|
"<ul>"
|
|
|
|
|
"<li>"
|
|
|
|
|
"<b>"
|
|
|
|
|
"If problems arise, try "
|
|
|
|
|
"<a href='https://cern.ch/geant4-forum'>"
|
|
|
|
|
"browsing the user forum"
|
|
|
|
|
"</a>"
|
|
|
|
|
"to see whether or not your problem has already been encountered.<br />"
|
|
|
|
|
"If it hasn't, you can post it and Geant4 developers will do their best to find"
|
|
|
|
|
" a solution. This is also a good place to<br />"
|
|
|
|
|
"discuss Geant4 topics in general."
|
|
|
|
|
"</b>"
|
|
|
|
|
" https://cern.ch/geant4-forum"
|
|
|
|
|
"</li>"
|
|
|
|
|
"</ul>"
|
|
|
|
|
"</div>"
|
|
|
|
|
);
|
|
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
|
|
// fill right splitter
|
|
|
|
@@ -3640,6 +3880,9 @@ void G4UIQt::AddIcon(
|
|
|
|
|
else if (std::string(aIconFile) == "solid") {
|
|
|
|
|
pix = fSolidIcon;
|
|
|
|
|
}
|
|
|
|
|
else if (std::string(aIconFile) == "point_cloud") {
|
|
|
|
|
pix = fPointCloudIcon;
|
|
|
|
|
}
|
|
|
|
|
else if (std::string(aIconFile) == "hidden_line_removal") {
|
|
|
|
|
pix = fHiddenLineRemovalIcon;
|
|
|
|
|
}
|
|
|
|
@@ -3658,6 +3901,12 @@ void G4UIQt::AddIcon(
|
|
|
|
|
else if (std::string(aIconFile) == "exit") {
|
|
|
|
|
pix = fExitIcon;
|
|
|
|
|
}
|
|
|
|
|
else if (std::string(aIconFile) == "reset_camera") {
|
|
|
|
|
pix = fResetCameraIcon;
|
|
|
|
|
}
|
|
|
|
|
else if (std::string(aIconFile) == "resetTargetPoint") {
|
|
|
|
|
pix = fResetTargetPointIcon;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
G4UImanager* UImanager = G4UImanager::GetUIpointer();
|
|
|
|
|
G4int verbose = UImanager->GetVerboseLevel();
|
|
|
|
@@ -3723,30 +3972,20 @@ void G4UIQt::AddIcon(
|
|
|
|
|
QAction* action = currentToolbar->addAction(
|
|
|
|
|
QIcon(*pix), aIconFile, this, [this, txt]() { this->ChangeCursorAction(txt); });
|
|
|
|
|
action->setCheckable(true);
|
|
|
|
|
action->setChecked(true);
|
|
|
|
|
action->setChecked(false);
|
|
|
|
|
action->setData(aIconFile);
|
|
|
|
|
|
|
|
|
|
if (std::string(aIconFile) == "move") {
|
|
|
|
|
SetIconMoveSelected();
|
|
|
|
|
}
|
|
|
|
|
if (std::string(aIconFile) == "rotate") {
|
|
|
|
|
SetIconRotateSelected();
|
|
|
|
|
}
|
|
|
|
|
if (std::string(aIconFile) == "pick") {
|
|
|
|
|
SetIconPickSelected();
|
|
|
|
|
}
|
|
|
|
|
if (std::string(aIconFile) == "zoom_in") {
|
|
|
|
|
SetIconZoomInSelected();
|
|
|
|
|
}
|
|
|
|
|
if (std::string(aIconFile) == "zoom_out") {
|
|
|
|
|
SetIconZoomOutSelected();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// special case : surface style
|
|
|
|
|
}
|
|
|
|
|
else if ((std::string(aIconFile) == "hidden_line_removal") ||
|
|
|
|
|
(std::string(aIconFile) == "hidden_line_and_surface_removal") ||
|
|
|
|
|
(std::string(aIconFile) == "solid") || (std::string(aIconFile) == "wireframe"))
|
|
|
|
|
(std::string(aIconFile) == "solid") ||
|
|
|
|
|
(std::string(aIconFile) == "wireframe") ||
|
|
|
|
|
(std::string(aIconFile) == "point_cloud"))
|
|
|
|
|
{
|
|
|
|
|
QString txt = QString(aIconFile);
|
|
|
|
|
QAction* action = currentToolbar->addAction(
|
|
|
|
@@ -3755,18 +3994,21 @@ void G4UIQt::AddIcon(
|
|
|
|
|
action->setChecked(true);
|
|
|
|
|
action->setData(aIconFile);
|
|
|
|
|
|
|
|
|
|
if (std::string(aIconFile) == "hidden_line_removal") {
|
|
|
|
|
/*if (std::string(aIconFile) == "hidden_line_removal") {
|
|
|
|
|
SetIconHLRSelected();
|
|
|
|
|
}
|
|
|
|
|
if (std::string(aIconFile) == "hidden_line_and_surface_removal") {
|
|
|
|
|
SetIconHLHSRSelected();
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
if (std::string(aIconFile) == "solid") {
|
|
|
|
|
SetIconSolidSelected();
|
|
|
|
|
}
|
|
|
|
|
if (std::string(aIconFile) == "wireframe") {
|
|
|
|
|
/*if (std::string(aIconFile) == "wireframe") {
|
|
|
|
|
SetIconWireframeSelected();
|
|
|
|
|
}
|
|
|
|
|
if (std::string(aIconFile) == "point_cloud") {
|
|
|
|
|
SetIconWireframeSelected();
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
// special case : perspective/ortho
|
|
|
|
|
}
|
|
|
|
@@ -3784,6 +4026,10 @@ void G4UIQt::AddIcon(
|
|
|
|
|
if (std::string(aIconFile) == "ortho") {
|
|
|
|
|
SetIconOrthoSelected();
|
|
|
|
|
}
|
|
|
|
|
// special cases :"resetCamera"
|
|
|
|
|
}
|
|
|
|
|
else if (std::string(aIconFile) == "reset_camera") {
|
|
|
|
|
currentToolbar->addAction(QIcon(*pix), aIconFile, this, [this]() { this->ResetCameraCallback(); });
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// Find the command in the command tree
|
|
|
|
@@ -3807,8 +4053,8 @@ void G4UIQt::AddIcon(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
QString txt = QString(aCommand);
|
|
|
|
|
currentToolbar->addAction(
|
|
|
|
|
QIcon(*pix), aCommand, this, [this, txt]() { this->ButtonCallback(txt); });
|
|
|
|
|
currentToolbar->addAction(QIcon(*pix), aCommand, this,
|
|
|
|
|
[this, txt]() { this->ButtonCallback(txt); });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -5299,6 +5545,14 @@ void G4UIQt::LookForHelpStringCallback()
|
|
|
|
|
|
|
|
|
|
void G4UIQt::OpenHelpTreeOnCommand(const QString& searchText)
|
|
|
|
|
{
|
|
|
|
|
// Invoke textual help (writes guidance to output window)
|
|
|
|
|
ApplyShellCommand("help "+G4String(searchText.toStdString()), exitSession, exitPause);
|
|
|
|
|
|
|
|
|
|
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
|
|
|
|
// The code below searches the help tree and offers a list of commands matching searchText.
|
|
|
|
|
// All is OK with Qt5, but there is an undiagnosed crash with Qt6, so disable this feature.
|
|
|
|
|
// FIXME : JA 8/8/25
|
|
|
|
|
|
|
|
|
|
// the help tree
|
|
|
|
|
G4UImanager* UI = G4UImanager::GetUIpointer();
|
|
|
|
|
if (UI == nullptr) return;
|
|
|
|
@@ -5406,6 +5660,7 @@ void G4UIQt::OpenHelpTreeOnCommand(const QString& searchText)
|
|
|
|
|
fHelpTreeWidget->resizeColumnToContents(0);
|
|
|
|
|
fHelpTreeWidget->sortItems(1, Qt::DescendingOrder);
|
|
|
|
|
// fHelpTreeWidget->setColumnWidth(1,10);//resizeColumnToContents (1);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0))
|
|
|
|
@@ -5559,38 +5814,40 @@ void G4UIQt::ChangeCursorAction(const QString& action)
|
|
|
|
|
{
|
|
|
|
|
// Theses actions should be in the app toolbar
|
|
|
|
|
|
|
|
|
|
if (fToolbarApp == nullptr) return;
|
|
|
|
|
|
|
|
|
|
QList<QAction*> list = fToolbarApp->actions();
|
|
|
|
|
|
|
|
|
|
if (action == "pick") {
|
|
|
|
|
for (auto i : list) {
|
|
|
|
|
if (i->data().toString() == "pick") {
|
|
|
|
|
fPickSelected = !fPickSelected;
|
|
|
|
|
i->setChecked(fPickSelected);
|
|
|
|
|
if (fPickSelected) {
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/picking true");
|
|
|
|
|
CreatePickInfosDialog();
|
|
|
|
|
} else {
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/picking false");
|
|
|
|
|
if (fPickInfosDialog != nullptr) fPickInfosDialog->hide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fMoveSelected = true;
|
|
|
|
|
fPickSelected = true;
|
|
|
|
|
fRotateSelected = true;
|
|
|
|
|
fZoomInSelected = true;
|
|
|
|
|
fZoomOutSelected = true;
|
|
|
|
|
|
|
|
|
|
if (fToolbarApp == nullptr) return;
|
|
|
|
|
QList<QAction*> list = fToolbarApp->actions();
|
|
|
|
|
for (auto i : list) {
|
|
|
|
|
if (i->data().toString() == action) {
|
|
|
|
|
i->setChecked(true);
|
|
|
|
|
if (i->data().toString() == "pick") {
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/picking true");
|
|
|
|
|
CreatePickInfosDialog();
|
|
|
|
|
|
|
|
|
|
fPickInfosDialog->show();
|
|
|
|
|
fPickInfosDialog->raise();
|
|
|
|
|
fPickInfosDialog->activateWindow();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "move") {
|
|
|
|
|
fMoveSelected = false;
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "pick") {
|
|
|
|
|
fPickSelected = false;
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/picking false");
|
|
|
|
|
if (fPickInfosDialog != nullptr) {
|
|
|
|
|
fPickInfosDialog->hide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "rotate") {
|
|
|
|
|
fRotateSelected = false;
|
|
|
|
|
i->setChecked(false);
|
|
|
|
@@ -5635,8 +5892,10 @@ void G4UIQt::ChangeSurfaceStyle(const QString& action)
|
|
|
|
|
else if (i->data().toString() == "wireframe") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "point_cloud") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// FIXME : Should connect this to Vis
|
|
|
|
|
|
|
|
|
|
if (action == "hidden_line_removal") {
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/style w");
|
|
|
|
@@ -5654,6 +5913,10 @@ void G4UIQt::ChangeSurfaceStyle(const QString& action)
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/style w");
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/hiddenEdge 0");
|
|
|
|
|
}
|
|
|
|
|
else if (action == "point_cloud") {
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/style c");
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/hiddenEdge 0");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::OpenIconCallback(const QString& aParam)
|
|
|
|
@@ -5810,12 +6073,15 @@ void G4UIQt::ChangePerspectiveOrtho(const QString& action)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::ResetCameraCallback() {
|
|
|
|
|
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/resetCameraParameters");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::SetIconMoveSelected()
|
|
|
|
|
{
|
|
|
|
|
// Theses actions should be in the app toolbar
|
|
|
|
|
fMoveSelected = true;
|
|
|
|
|
fRotateSelected = false;
|
|
|
|
|
fPickSelected = false;
|
|
|
|
|
fZoomInSelected = false;
|
|
|
|
|
fZoomOutSelected = false;
|
|
|
|
|
|
|
|
|
@@ -5828,9 +6094,6 @@ void G4UIQt::SetIconMoveSelected()
|
|
|
|
|
else if (i->data().toString() == "rotate") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "pick") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "zoom_in") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
@@ -5845,7 +6108,6 @@ void G4UIQt::SetIconRotateSelected()
|
|
|
|
|
// Theses actions should be in the app toolbar
|
|
|
|
|
fRotateSelected = true;
|
|
|
|
|
fMoveSelected = false;
|
|
|
|
|
fPickSelected = false;
|
|
|
|
|
fZoomInSelected = false;
|
|
|
|
|
fZoomOutSelected = false;
|
|
|
|
|
|
|
|
|
@@ -5858,9 +6120,6 @@ void G4UIQt::SetIconRotateSelected()
|
|
|
|
|
else if (i->data().toString() == "move") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "pick") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "zoom_in") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
@@ -5870,14 +6129,10 @@ void G4UIQt::SetIconRotateSelected()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::SetIconPickSelected()
|
|
|
|
|
void G4UIQt::TogglePickSelection()
|
|
|
|
|
{
|
|
|
|
|
// Theses actions should be in the app toolbar
|
|
|
|
|
fPickSelected = true;
|
|
|
|
|
fMoveSelected = false;
|
|
|
|
|
fRotateSelected = false;
|
|
|
|
|
fZoomInSelected = false;
|
|
|
|
|
fZoomOutSelected = false;
|
|
|
|
|
fPickSelected = !fPickSelected;
|
|
|
|
|
|
|
|
|
|
QToolBar* toolbar = fToolbarApp;
|
|
|
|
|
if (! fDefaultIcons) {
|
|
|
|
@@ -5888,22 +6143,10 @@ void G4UIQt::SetIconPickSelected()
|
|
|
|
|
QList<QAction*> list = toolbar->actions();
|
|
|
|
|
for (auto i : list) {
|
|
|
|
|
if (i->data().toString() == "pick") {
|
|
|
|
|
i->setChecked(true);
|
|
|
|
|
i->setChecked(fPickSelected);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "move") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "rotate") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "zoom_in") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "zoom_out") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::SetIconZoomInSelected()
|
|
|
|
|
{
|
|
|
|
@@ -5911,7 +6154,6 @@ void G4UIQt::SetIconZoomInSelected()
|
|
|
|
|
fZoomInSelected = true;
|
|
|
|
|
fMoveSelected = false;
|
|
|
|
|
fRotateSelected = false;
|
|
|
|
|
fPickSelected = false;
|
|
|
|
|
fZoomOutSelected = false;
|
|
|
|
|
|
|
|
|
|
QToolBar* toolbar = fToolbarApp;
|
|
|
|
@@ -5931,9 +6173,6 @@ void G4UIQt::SetIconZoomInSelected()
|
|
|
|
|
else if (i->data().toString() == "rotate") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "pick") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "zoom_out") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
@@ -5946,7 +6185,6 @@ void G4UIQt::SetIconZoomOutSelected()
|
|
|
|
|
fZoomOutSelected = true;
|
|
|
|
|
fMoveSelected = false;
|
|
|
|
|
fRotateSelected = false;
|
|
|
|
|
fPickSelected = false;
|
|
|
|
|
fZoomInSelected = false;
|
|
|
|
|
|
|
|
|
|
QToolBar* toolbar = fToolbarApp;
|
|
|
|
@@ -5966,9 +6204,6 @@ void G4UIQt::SetIconZoomOutSelected()
|
|
|
|
|
else if (i->data().toString() == "rotate") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "pick") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "zoom_in") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
@@ -5999,6 +6234,9 @@ void G4UIQt::SetIconSolidSelected()
|
|
|
|
|
else if (i->data().toString() == "wireframe") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "point_cloud") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -6026,6 +6264,9 @@ void G4UIQt::SetIconWireframeSelected()
|
|
|
|
|
else if (i->data().toString() == "solid") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "point_cloud") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -6053,6 +6294,9 @@ void G4UIQt::SetIconHLRSelected()
|
|
|
|
|
else if (i->data().toString() == "wireframe") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "point_cloud") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -6081,6 +6325,40 @@ void G4UIQt::SetIconHLHSRSelected()
|
|
|
|
|
else if (i->data().toString() == "wireframe") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "point_cloud") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void G4UIQt::SetIconCoudPointSelected()
|
|
|
|
|
{
|
|
|
|
|
// Theses actions should be in the app toolbar
|
|
|
|
|
|
|
|
|
|
QToolBar* toolbar = fToolbarApp;
|
|
|
|
|
if (!fDefaultIcons) {
|
|
|
|
|
toolbar = fToolbarUser;
|
|
|
|
|
}
|
|
|
|
|
if (toolbar == nullptr) return;
|
|
|
|
|
|
|
|
|
|
QList<QAction*> list = toolbar->actions();
|
|
|
|
|
for (auto i : list) {
|
|
|
|
|
if (i->data().toString() == "point_cloud") {
|
|
|
|
|
i->setChecked(true);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "wireframe") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "hidden_line_removal") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "hidden_line_and_surface_removal") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
else if (i->data().toString() == "solid") {
|
|
|
|
|
i->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|