52class CameraManipulator;
64#pragma clang diagnostic push
65#pragma clang diagnostic ignored "-Winconsistent-missing-override"
69#pragma clang diagnostic pop
80 NODESET_TLSLINKMARKERS = 2,
82 NODESET_TLSMODELS = 4,
99 Command_TLSChange(
const MSLink*
const link, osg::Switch* switchNode);
102 virtual ~Command_TLSChange();
114 const MSLink*
const myLink;
117 osg::ref_ptr<osg::Switch> mySwitch;
124 Command_TLSChange(
const Command_TLSChange&) =
delete;
127 Command_TLSChange& operator=(
const Command_TLSChange&) =
delete;
132 osg::ref_ptr<osg::PositionAttitudeTransform> pos;
133 osg::ref_ptr<osg::ShapeDrawable> geom;
134 osg::ref_ptr<osg::Material> mat;
135 osg::ref_ptr<osg::Switch> lights;
145 virtual ~GUIOSGView();
205 void position(
int x,
int y,
int w,
int h)
override;
206 void resize(
int w,
int h)
override;
209 long onConfigure(FXObject*, FXSelector,
void*)
override;
210 long onKeyPress(FXObject*, FXSelector,
void*)
override;
211 long onKeyRelease(FXObject*, FXSelector,
void*)
override;
219 long onMouseMove(FXObject*, FXSelector,
void*)
override;
220 long onPaint(FXObject*, FXSelector,
void*)
override;
221 long onIdle(FXObject* sender, FXSelector sel,
void* ptr);
238 static osg::Vec4d toOSGColorVector(
RGBColor c,
bool useAlpha =
false);
241 void updateHUDText(
const std::string text);
247 void updatePositionInformation()
const;
250 bool getPositionAtCursor(
float xNorm,
float yNorm,
Position& pos)
const;
261 void adoptViewSettings();
264 double calculateRotation(
const osg::Vec3d& lookFrom,
const osg::Vec3d& lookAt,
const osg::Vec3d& up);
267 void updateHUDPosition(
int width,
int height);
269 class FXOSGAdapter :
public osgViewer::GraphicsWindow {
273 void grabFocusIfPointerInWindow() {}
274 void useCursor(
bool cursorOn);
276 bool makeCurrentImplementation();
277 bool releaseContext();
278 void swapBuffersImplementation();
284 bool realizeImplementation() {
287 bool isRealizedImplementation()
const {
290 void closeImplementation() {}
291 bool releaseContextImplementation() {
294 void requestWarpPointer(
float x,
float y) {
295 int xRound = std::lround(x);
296 int yRound = std::lround(y);
298 unsigned int buttons;
299 myParent->getCursorPosition(xPrev, yPrev, buttons);
300 if (xRound - xPrev != 0 || yRound - yPrev != 0) {
301 myParent->setCursorPosition(xRound, yRound);
302 getEventQueue()->mouseWarped(x, y);
310 FXCursor*
const myOldCursor;
313 class PlaneMoverCallback :
public osg::Callback {
315 PlaneMoverCallback(osg::Camera* camera) : myCamera(camera) {};
316 virtual bool run(osg::Object*
object, osg::Object* )
override {
317 osg::MatrixTransform* mt =
dynamic_cast<osg::MatrixTransform*
>(
object);
318 osg::Vec3d lookFrom, lookAt, up;
319 myCamera->getViewMatrixAsLookAt(lookFrom, lookAt, up);
320 osg::Vec3d direction = lookAt - lookFrom;
321 direction.normalize();
322 osg::Vec3d lookAtGround = lookFrom - direction * (lookFrom.z() / direction.z());
323 osg::Matrixd translateMatrix;
324 translateMatrix.makeTranslate(lookAtGround.x(), lookAtGround.y(), 0.);
325 double angle = atan2(direction.y(), direction.x());
326 osg::Matrixd rotMatrix = osg::Matrixd::rotate(angle, osg::Z_AXIS);
327 mt->setMatrix(rotMatrix * translateMatrix);
331 ~PlaneMoverCallback() {};
333 osg::Camera* myCamera;
336 class PickHandler :
public osgGA::GUIEventHandler {
338 PickHandler(GUIOSGView* parent) : myParent(parent), myDrag(false) {};
339 bool handle(
const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa);
343 GUIOSGView*
const myParent;
347 class ExcludeFromNearFarComputationCallback :
public osg::NodeCallback {
348 virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {
349 osgUtil::CullVisitor* cv =
dynamic_cast<osgUtil::CullVisitor*
>(nv);
351 osg::CullSettings::ComputeNearFarMode oldMode = osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES;
353 oldMode = cv->getComputeNearFarMode();
354 cv->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
358 cv->setComputeNearFarMode(oldMode);
368 osg::ref_ptr<FXOSGAdapter> myAdapter;
369 osg::ref_ptr<osgViewer::Viewer> myViewer;
370 osg::ref_ptr<osg::Group> myRoot;
371 osg::ref_ptr<osg::MatrixTransform> myPlane;
372 osg::ref_ptr<osg::Camera> myHUD;
373 osg::ref_ptr<osg::Geode> myTextNode;
374 osg::ref_ptr<osgText::Text> myText;
378 osg::ref_ptr<GUIOSGManipulator> myCameraManipulator;
381 float myOSGNormalizedCursorX, myOSGNormalizedCursorY;
383 std::map<MSVehicle*, OSGMovable > myVehicles;
384 std::map<MSTransportable*, OSGMovable > myPersons;
386 osg::ref_ptr<osg::Node> myGreenLight;
387 osg::ref_ptr<osg::Node> myYellowLight;
388 osg::ref_ptr<osg::Node> myRedLight;
389 osg::ref_ptr<osg::Node> myRedYellowLight;
390 osg::ref_ptr<osg::Node> myPoleBase;
391 osg::ref_ptr<osg::Node> myPlaneTransform;
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic,...
Representation of a lane in the micro simulation (gui-version)
A MSNet extended by some values for usage within the gui.
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
virtual long onVisualizationChange(FXObject *, FXSelector, void *)
hook to react on change in visualization settings
std::vector< GUIGlObject * > getGUIGlObjectsUnderCursor()
returns the GUIGlObject under the cursor using GL_SELECT (including overlapped objects)
virtual void recenterView()
recenters the view
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
virtual long onMiddleBtnRelease(FXObject *, FXSelector, void *)
virtual long onMouseMove(FXObject *, FXSelector, void *)
virtual long onCmdCloseEdge(FXObject *, FXSelector, void *)
virtual void buildViewToolBars(GUIGlChildWindow *)
builds the view toolbars
virtual void showViewportEditor()
show viewport editor
virtual void zoom2Pos(Position &camera, Position &lookAt, double zoom)
zoom interface for 3D view
virtual long onCmdCloseLane(FXObject *, FXSelector, void *)
interaction with the simulation
virtual long onLeftBtnPress(FXObject *, FXSelector, void *)
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
virtual GUILane * getLaneUnderCursor()
returns the GUILane at cursor position (implementation depends on view)
virtual void onGamingClick(Position)
on gaming click
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
keyboard functions
virtual long onMiddleBtnPress(FXObject *, FXSelector, void *)
virtual void stopTrack()
stop track
virtual Position getPositionInformation() const
Returns the cursor's x/y position within the network.
virtual long onKeyRelease(FXObject *o, FXSelector sel, void *data)
void setWindowCursorPosition(FXint x, FXint y)
Returns the gl-id of the object under the given coordinates.
virtual long onCmdShowReachability(FXObject *, FXSelector, void *)
highlight edges according to reachability
virtual void updateViewportValues()
update the viewport chooser with the current view values
virtual void startTrack(int)
star track
virtual bool is3DView() const
return whether this is a 3D view
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
virtual void copyViewportTo(GUISUMOAbstractView *view)
copy the viewport to the given view
virtual bool setColorScheme(const std::string &)
set color scheme
virtual long onCmdAddRerouter(FXObject *, FXSelector, void *)
virtual long onPaint(FXObject *, FXSelector, void *)
virtual long onRightBtnPress(FXObject *, FXSelector, void *)
virtual long onConfigure(FXObject *, FXSelector, void *)
mouse functions
virtual GUIGlID getTrackedID() const
get tracked id
A single child window which contains a view of the simulation area.
A MSVehicle extended by some values for usage within the gui.
Base class for things to execute if a tls switches to a new phase.
Representation of a vehicle in the micro simulation.
A point in 2D or 3D with translation and scaling methods.
@ object
object (unordered set of name/value pairs)