SPH
CameraJobs.cpp
Go to the documentation of this file.
2 #include "gui/Factory.h"
3 
5 
6 void ICameraJob::evaluate(const RunSettings& UNUSED(global), IRunCallbacks& UNUSED(callbacks)) {
7  const int width = gui.get<int>(GuiSettingsId::IMAGES_WIDTH);
8  const int height = gui.get<int>(GuiSettingsId::IMAGES_HEIGHT);
9  AutoPtr<ICamera> camera = Factory::getCamera(gui, Pixel(width, height));
11 
12  result = makeShared<CameraData>();
13  result->camera = std::move(camera);
14  result->tracker = std::move(tracker);
17 }
18 
19 // ----------------------------------------------------------------------------------------------------------
20 // OrthoCameraJob
21 // ----------------------------------------------------------------------------------------------------------
22 
23 OrthoCameraJob::OrthoCameraJob(const std::string& name)
24  : ICameraJob(name) {
26 }
27 
28 static VirtualSettings::Category& addResolutionCategory(VirtualSettings& connector, GuiSettings& gui) {
29  VirtualSettings::Category& resCat = connector.addCategory("Resolution");
30  resCat.connect<int>("Image width", gui, GuiSettingsId::IMAGES_WIDTH);
31  resCat.connect<int>("Image height", gui, GuiSettingsId::IMAGES_HEIGHT);
32  return resCat;
33 }
34 
35 static VirtualSettings::Category& addTransformCategory(VirtualSettings& connector, GuiSettings& gui) {
36  VirtualSettings::Category& transformCat = connector.addCategory("Transform");
37  transformCat.connect<Vector>("Position [km]", gui, GuiSettingsId::CAMERA_POSITION).setUnits(1.e3_f);
38  transformCat.connect<Vector>("Velocity [km/s]", gui, GuiSettingsId::CAMERA_VELOCITY)
39  .setUnits(1.e3_f)
40  .setEnabler([&gui] {
41  return gui.get<int>(GuiSettingsId::CAMERA_TRACK_PARTICLE) == -1 &&
42  !gui.get<bool>(GuiSettingsId::CAMERA_TRACK_MEDIAN);
43  });
44  transformCat.connect<Float>("Orbit speed [s^-1]", gui, GuiSettingsId::CAMERA_ORBIT);
45  transformCat.connect<Vector>("Target [km]", gui, GuiSettingsId::CAMERA_TARGET).setUnits(1.e3_f);
46  transformCat.connect<Vector>("Up-direction", gui, GuiSettingsId::CAMERA_UP)
47  .setValidator([](const IVirtualEntry::Value& value) {
48  const Vector v = value.get<Vector>();
49  return v != Vector(0._f);
50  });
51  transformCat.connect<Float>("Clip near [km]", gui, GuiSettingsId::CAMERA_CLIP_NEAR).setUnits(1.e3_f);
52  transformCat.connect<Float>("Clip far [km]", gui, GuiSettingsId::CAMERA_CLIP_FAR).setUnits(1.e3_f);
53  return transformCat;
54 }
55 
56 static void addTrackingCategory(VirtualSettings& connector, GuiSettings& gui) {
57  VirtualSettings::Category& trackingCat = connector.addCategory("Tracking");
58  trackingCat.connect<int>("Track particle", gui, GuiSettingsId::CAMERA_TRACK_PARTICLE);
59  trackingCat.connect<bool>("Track median", gui, GuiSettingsId::CAMERA_TRACK_MEDIAN).setEnabler([gui] {
60  return gui.get<int>(GuiSettingsId::CAMERA_TRACK_PARTICLE) == -1;
61  });
62  trackingCat.connect<Vector>("Tracking offset", gui, GuiSettingsId::CAMERA_TRACKING_OFFSET)
63  .setEnabler([gui] { return gui.get<bool>(GuiSettingsId::CAMERA_TRACK_MEDIAN); });
64 }
65 
67  VirtualSettings connector;
68  addGenericCategory(connector, instName);
69  addResolutionCategory(connector, gui);
70  VirtualSettings::Category& transformCat = addTransformCategory(connector, gui);
71  transformCat.connect<Float>("Ortho FoV [km]", gui, GuiSettingsId::CAMERA_ORTHO_FOV).setUnits(1.e3_f);
72  transformCat.connect<Float>("Cutoff distance [km]", gui, GuiSettingsId::CAMERA_ORTHO_CUTOFF)
73  .setUnits(1.e3_f);
74  addTrackingCategory(connector, gui);
75  return connector;
76 }
77 
79  "orthographic camera",
80  "camera",
81  "rendering",
82  [](const std::string& name) { return makeAuto<OrthoCameraJob>(name); },
83  "Creates an orthographic camera");
84 
85 // ----------------------------------------------------------------------------------------------------------
86 // PerspectiveCameraJob
87 // ----------------------------------------------------------------------------------------------------------
88 
90  : ICameraJob(name) {
92 }
93 
95  VirtualSettings connector;
96  addGenericCategory(connector, instName);
97  addResolutionCategory(connector, gui);
98  VirtualSettings::Category& transformCat = addTransformCategory(connector, gui);
99  transformCat.connect<Float>("Field of view [deg]", gui, GuiSettingsId::CAMERA_PERSPECTIVE_FOV)
100  .setUnits(DEG_TO_RAD);
101 
102  addTrackingCategory(connector, gui);
103 
104  return connector;
105 }
106 
108  "perspective camera",
109  "camera",
110  "rendering",
111  [](const std::string& name) { return makeAuto<PerspectiveCameraJob>(name); },
112  "Creates a perspective (pinhole) camera.");
113 
114 // ----------------------------------------------------------------------------------------------------------
115 // FisheyeCameraJob
116 // ----------------------------------------------------------------------------------------------------------
117 
118 FisheyeCameraJob::FisheyeCameraJob(const std::string& name)
119  : ICameraJob(name) {
121 }
122 
124  VirtualSettings connector;
125  addGenericCategory(connector, instName);
126  addResolutionCategory(connector, gui);
127  addTransformCategory(connector, gui);
128  addTrackingCategory(connector, gui);
129  return connector;
130 }
131 
133  "fisheye camera",
134  "camera",
135  "rendering",
136  [](const std::string& name) { return makeAuto<FisheyeCameraJob>(name); },
137  "Creates a fisheye camera.");
138 
NAMESPACE_SPH_BEGIN
Definition: BarnesHut.cpp:13
JobRegistrar sRegisterOrtho("orthographic camera", "camera", "rendering", [](const std::string &name) { return makeAuto< OrthoCameraJob >(name);}, "Creates an orthographic camera")
JobRegistrar sRegisterPerspective("perspective camera", "camera", "rendering", [](const std::string &name) { return makeAuto< PerspectiveCameraJob >(name);}, "Creates a perspective (pinhole) camera.")
JobRegistrar sRegisterFisheye("fisheye camera", "camera", "rendering", [](const std::string &name) { return makeAuto< FisheyeCameraJob >(name);}, "Creates a fisheye camera.")
double Float
Precision used withing the code. Use Float instead of float or double where precision is important.
Definition: Globals.h:13
VirtualSettings::Category & addGenericCategory(VirtualSettings &connector, std::string &instanceName)
Adds a common settings category, used by all jobs.
Definition: Job.cpp:43
constexpr Float DEG_TO_RAD
Definition: MathUtils.h:369
#define UNUSED(x)
Definition: Object.h:37
#define NAMESPACE_SPH_END
Definition: Object.h:12
BasicVector< Float > Vector
Definition: Vector.h:539
virtual VirtualSettings getSettings() override
Returns a settings object which allows to query and modify the state of the job.
Definition: CameraJobs.cpp:123
FisheyeCameraJob(const std::string &name)
Definition: CameraJobs.cpp:118
INLINE TValue get(const GuiSettingsId id) const
Definition: Settings.h:245
INLINE GuiSettings & set(const GuiSettingsId id, const TValue &value)
Definition: Settings.h:250
GuiSettings gui
Definition: CameraJobs.h:27
virtual void evaluate(const RunSettings &global, IRunCallbacks &callbacks) override
Runs the operation provided by the job.
Definition: CameraJobs.cpp:6
std::string instName
Definition: Job.h:100
Callbacks executed by the simulation to provide feedback to the user.
Definition: IRun.h:27
OrthoCameraJob(const std::string &name)
Definition: CameraJobs.cpp:23
virtual VirtualSettings getSettings() override
Returns a settings object which allows to query and modify the state of the job.
Definition: CameraJobs.cpp:66
PerspectiveCameraJob(const std::string &name)
Definition: CameraJobs.cpp:89
virtual VirtualSettings getSettings() override
Returns a settings object which allows to query and modify the state of the job.
Definition: CameraJobs.cpp:94
Variant, an implementation of type-safe union, similar to std::variant or boost::variant.
Definition: Variant.h:171
INLINE T & get()
Returns the stored value.
Definition: Variant.h:335
EntryControl & connect(const std::string &name, const std::string &key, TValue &value)
Connects to given reference.
Holds a map of virtual entries, associated with a unique name.
Category & addCategory(const std::string &name)
Creates a new category of entries.
@ CAMERA_ORTHO_CUTOFF
Max z-coordinate of particle to be displayed by ortho renderer.
@ CAMERA_ORTHO_FOV
View field of view (zoom). Special value 0 means the field of view is computed from the bounding box.
AutoPtr< ITracker > getTracker(const GuiSettings &settings)
Definition: Factory.cpp:15
AutoPtr< ICamera > getCamera(const GuiSettings &settings, const Pixel size)
Definition: Factory.cpp:28
GuiSettings overrides
Definition: CameraJobs.h:19
AutoPtr< ITracker > tracker
Definition: CameraJobs.h:17
AutoPtr< ICamera > camera
Definition: CameraJobs.h:16
Helper class, allowing to register job into the global list of jobs.
Definition: Job.h:203
Definition: Point.h:101