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::PositionAttitudeTransform> body;
134 osg::ref_ptr<osg::Material> mat;
135 osg::ref_ptr<osg::Switch> lights;
138 void activateMaterial(
bool state =
true) {
139 osg::ref_ptr<osg::StateSet> ss = body->getOrCreateStateSet();
141 ss->setAttribute(mat, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE | osg::StateAttribute::PROTECTED);
143 ss->setAttribute(mat, osg::StateAttribute::OFF);
154 virtual ~GUIOSGView();
214 void position(
int x,
int y,
int w,
int h)
override;
215 void resize(
int w,
int h)
override;
218 long onConfigure(FXObject*, FXSelector,
void*)
override;
219 long onKeyPress(FXObject*, FXSelector,
void*)
override;
220 long onKeyRelease(FXObject*, FXSelector,
void*)
override;
228 long onMouseMove(FXObject*, FXSelector,
void*)
override;
229 long onPaint(FXObject*, FXSelector,
void*)
override;
230 long onIdle(FXObject* sender, FXSelector sel,
void* ptr);
247 static osg::Vec4d toOSGColorVector(
RGBColor c,
bool useAlpha =
false);
250 void updateHUDText(
const std::string text);
256 void updatePositionInformation()
const;
259 bool getPositionAtCursor(
float xNorm,
float yNorm,
Position& pos)
const;
270 void adoptViewSettings();
273 double calculateRotation(
const osg::Vec3d& lookFrom,
const osg::Vec3d& lookAt,
const osg::Vec3d& up);
276 void updateHUDPosition(
int width,
int height);
278 class FXOSGAdapter :
public osgViewer::GraphicsWindow {
282 void grabFocusIfPointerInWindow() {}
283 void useCursor(
bool cursorOn);
285 bool makeCurrentImplementation();
286 bool releaseContext();
287 void swapBuffersImplementation();
293 bool realizeImplementation() {
296 bool isRealizedImplementation()
const {
299 void closeImplementation() {}
300 bool releaseContextImplementation() {
303 void requestWarpPointer(
float x,
float y) {
304 int xRound = std::lround(x);
305 int yRound = std::lround(y);
307 unsigned int buttons;
308 myParent->getCursorPosition(xPrev, yPrev, buttons);
309 if (xRound - xPrev != 0 || yRound - yPrev != 0) {
310 myParent->setCursorPosition(xRound, yRound);
311 getEventQueue()->mouseWarped(x, y);
319 FXCursor*
const myOldCursor;
322 class PlaneMoverCallback :
public osg::Callback {
324 PlaneMoverCallback(osg::Camera* camera) : myCamera(camera) {};
325 virtual bool run(osg::Object*
object, osg::Object* )
override {
326 osg::MatrixTransform* mt =
dynamic_cast<osg::MatrixTransform*
>(
object);
327 osg::Vec3d lookFrom, lookAt, up;
328 myCamera->getViewMatrixAsLookAt(lookFrom, lookAt, up);
329 osg::Vec3d direction = lookAt - lookFrom;
330 direction.normalize();
331 osg::Vec3d lookAtGround = lookFrom - direction * (lookFrom.z() / direction.z());
332 osg::Matrixd translateMatrix;
333 translateMatrix.makeTranslate(lookAtGround.x(), lookAtGround.y(), 0.);
334 double angle = atan2(direction.y(), direction.x());
335 osg::Matrixd rotMatrix = osg::Matrixd::rotate(angle, osg::Z_AXIS);
336 mt->setMatrix(rotMatrix * translateMatrix);
340 ~PlaneMoverCallback() {};
342 osg::Camera* myCamera;
345 class PickHandler :
public osgGA::GUIEventHandler {
347 PickHandler(GUIOSGView* parent) : myParent(parent), myDrag(false) {};
348 bool handle(
const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa);
349 using osgGA::GUIEventHandler::handle;
353 GUIOSGView*
const myParent;
357 class ExcludeFromNearFarComputationCallback :
public osg::NodeCallback {
358 virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {
359 osgUtil::CullVisitor* cv =
dynamic_cast<osgUtil::CullVisitor*
>(nv);
361 osg::CullSettings::ComputeNearFarMode oldMode = osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES;
363 oldMode = cv->getComputeNearFarMode();
364 cv->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
368 cv->setComputeNearFarMode(oldMode);
378 osg::ref_ptr<FXOSGAdapter> myAdapter;
379 osg::ref_ptr<osgViewer::Viewer> myViewer;
380 osg::ref_ptr<osg::Group> myRoot;
381 osg::ref_ptr<osg::MatrixTransform> myPlane;
382 osg::ref_ptr<osg::Camera> myHUD;
383 osg::ref_ptr<osg::Geode> myTextNode;
384 osg::ref_ptr<osgText::Text> myText;
388 osg::ref_ptr<GUIOSGManipulator> myCameraManipulator;
391 float myOSGNormalizedCursorX, myOSGNormalizedCursorY;
393 std::map<MSVehicle*, OSGMovable > myVehicles;
394 std::map<MSTransportable*, OSGMovable > myPersons;
396 osg::ref_ptr<osg::Node> myGreenLight;
397 osg::ref_ptr<osg::Node> myYellowLight;
398 osg::ref_ptr<osg::Node> myRedLight;
399 osg::ref_ptr<osg::Node> myRedYellowLight;
400 osg::ref_ptr<osg::Node> myPoleBase;
401 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)