28#ifndef G4TOOLSSGVIEWER_HH
29#define G4TOOLSSGVIEWER_HH
37#include <tools/sg/device_interactor>
38#include <tools/sg/separator>
39#include <tools/sg/ortho>
40#include <tools/sg/perspective>
41#include <tools/sg/torche>
42#include <tools/sg/blend>
43#include <tools/sg/noderef>
44#include <tools/sg/keys>
46#include <tools/tokenize>
47#include <tools/sg/write_paper>
49template <
class SG_SESSION,
class SG_VIEWER>
54 virtual void key_press(
const tools::sg::key_down_event& a_event) {
56 fKeyShift = a_event.key() == tools::sg::key_shift()?
true:
false;
59 virtual void mouse_press(
const tools::sg::mouse_down_event& a_event) {
65 virtual void mouse_move(
const tools::sg::mouse_move_event& a_event) {
79 const G4double dxScene = dx*sceneRadius/scale;
80 const G4double dyScene = dy*sceneRadius/scale;
90 newViewpointDirection += dx*x_prime/scale;
91 newViewpointDirection += dy*y_prime/scale;
96 newUpVector += dx*x_prime/scale;
97 newUpVector += dy*y_prime/scale;
106 virtual void wheel_rotate(
const tools::sg::wheel_rotate_event& a_event) {
107 const G4double angleY = a_event.angle();
120 :
parent(a_scene_handler,a_scene_handler.IncrementViewCount(),a_name)
172 G4cerr <<
"G4ToolsSGViewer::Initialise : SG_VIEWER::has_window() failed." <<
G4endl;
181 fSGViewer->set_clear_color(0.3,0.3,0.3,1);
182 G4cerr <<
"G4ToolsSGViewer::SetView : no G4Scene.." <<
G4endl;
194 if(radius<=0.) radius = 1.;
205 tools::vec3f dir(
float(targetPoint.
x()-cameraPosition.
x()),
206 float(targetPoint.
y()-cameraPosition.
y()),
207 float(targetPoint.
z()-cameraPosition.
z()));
209 fSGViewer->set_clear_color(0.3,0.3,0.3,1);
210 G4cerr <<
"G4ToolsSGViewer::SetView : null size viewer area." <<
G4endl;
231 tools::sg::base_camera* _camera =
nullptr;
234 if((top-bottom)<=0) {
235 fSGViewer->set_clear_color(0.3,0.3,0.3,1);
236 G4cerr <<
"G4ToolsSGViewer::SetView : for ortho camera, (top-bottom)<=0." <<
G4endl;
239 tools::sg::ortho* ortho_camera =
new tools::sg::ortho;
240 ortho_camera->height.value(
float(top-bottom));
241 _camera = ortho_camera;
244 tools::sg::perspective* perspective_camera =
new tools::sg::perspective;
246 _camera = perspective_camera;
249 _camera->position.value
250 (tools::vec3f(
float(cameraPosition.
x()),
251 float(cameraPosition.
y()),
252 float(cameraPosition.
z())));
253 _camera->znear.value(
float(pnear));
254 _camera->zfar.value(
float(pfar));
256 _camera->look_at(dir,tools::vec3f(up.
x(),up.
y(),up.
z()));
278 if (kernelVisitWasNeeded) {
296#ifdef G4MULTITHREADED
297 virtual void SwitchToVisSubThread() {}
299 virtual void SwitchToMasterThread() {
388 tools::sg::group& _parent =
fSGViewer->sg();
394 tools::sg::separator* scene_2D =
new tools::sg::separator;
395 _parent.add(scene_2D);
402 tools::sg::separator* scene_3D =
new tools::sg::separator;
403 _parent.add(scene_3D);
405 scene_3D->add(a_camera);
407 {tools::sg::torche* light =
new tools::sg::torche;
409 light->direction = tools::vec3f(-a_light_dir.
x(),-a_light_dir.
y(),-a_light_dir.
z());
410 scene_3D->add(light);}
412 {tools::sg::blend* blend =
new tools::sg::blend;
414 scene_3D->add(blend);}
427 G4cout <<
"G4ToolsSGViewer::Export: write_paper() failed." <<
G4endl;
474 G4cout <<
"G4ToolsSGViewer::SetNewValue:"
475 <<
" current viewer is not a G4ToolsSGViewer." <<
G4endl;
478 std::vector<std::string>
args;
479 tools::double_quotes_tokenize(a_value,
args);
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
G4double GetAlpha() const
G4double GetGreen() const
const G4VisExtent & GetExtent() const
const G4Point3D & GetStandardTargetPoint() const
std::size_t GetParameterEntries() const
void SetParameter(G4UIparameter *const newParameter)
void SetGuidance(const char *aGuidance)
void SetDefaultValue(const char *theDefaultValue)
G4Scene * GetScene() const
G4VSceneHandler & fSceneHandler
G4ViewParameters fDefaultVP
static G4VisManager * fpVisManager
void SetViewpointDirection(const G4Vector3D &viewpointDirection)
const std::vector< G4ModelingParameters::VisAttributesModifier > & GetVisAttributesModifiers() const
void SetAutoRefresh(G4bool)
G4int GetNoOfSides() const
G4bool IsSpecialMeshRendering() const
G4int GetWindowAbsoluteLocationHintY(G4int) const
G4double GetCameraDistance(G4double radius) const
G4double GetExplodeFactor() const
G4int GetNumberOfCloudPoints() const
G4bool IsMarkerNotHidden() const
unsigned int GetWindowSizeHintX() const
G4double GetGlobalLineWidthScale() const
G4Vector3D & GetActualLightpointDirection()
const G4Colour & GetBackgroundColour() const
const G4Vector3D & GetViewpointDirection() const
const G4Point3D & GetCurrentTargetPoint() const
G4double GetFarDistance(G4double cameraDistance, G4double nearDistance, G4double radius) const
G4double GetFieldHalfAngle() const
G4double GetFrontHalfHeight(G4double nearDistance, G4double radius) const
const G4VisAttributes * GetDefaultTextVisAttributes() const
void SetDolly(G4double dolly)
G4int GetWindowAbsoluteLocationHintX(G4int) const
void IncrementPan(G4double right, G4double up)
const G4Vector3D & GetUpVector() const
const std::vector< G4double > & GetCBDParameters() const
G4int GetCBDAlgorithmNumber() const
const std::vector< G4ModelingParameters::PVNameCopyNo > & GetSpecialMeshVolumes() const
G4double GetGlobalMarkerScale() const
G4bool IsCullingInvisible() const
const G4VisAttributes * GetDefaultVisAttributes() const
void SetUpVector(const G4Vector3D &upVector)
RotationStyle GetRotationStyle() const
G4bool IsDensityCulling() const
void MultiplyZoomFactor(G4double zoomFactorMultiplier)
G4double GetVisibleDensity() const
unsigned int GetWindowSizeHintY() const
G4bool IsCullingCovered() const
G4double GetNearDistance(G4double cameraDistance, G4double radius) const
DrawingStyle GetDrawingStyle() const
G4bool IsAuxEdgeVisible() const
G4double GetDolly() const
const G4Colour & GetColour() const
G4double GetExtentRadius() const
static Verbosity GetVerbosity()
BasicVector3D< T > cross(const BasicVector3D< T > &v) const
BasicVector3D< T > unit() const
static constexpr double deg
G4bool IsMultithreadedApplication()