Simbody  3.7
Visualizer.h
Go to the documentation of this file.
1 #ifndef SimTK_SIMBODY_VISUALIZER_H_
2 #define SimTK_SIMBODY_VISUALIZER_H_
3 
4 /* -------------------------------------------------------------------------- *
5  * Simbody(tm) *
6  * -------------------------------------------------------------------------- *
7  * This is part of the SimTK biosimulation toolkit originating from *
8  * Simbios, the NIH National Center for Physics-Based Simulation of *
9  * Biological Structures at Stanford, funded under the NIH Roadmap for *
10  * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. *
11  * *
12  * Portions copyright (c) 2010-14 Stanford University and the Authors. *
13  * Authors: Peter Eastman, Michael Sherman *
14  * Contributors: *
15  * *
16  * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17  * not use this file except in compliance with the License. You may obtain a *
18  * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19  * *
20  * Unless required by applicable law or agreed to in writing, software *
21  * distributed under the License is distributed on an "AS IS" BASIS, *
22  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23  * See the License for the specific language governing permissions and *
24  * limitations under the License. *
25  * -------------------------------------------------------------------------- */
26 
32 
33 #include <utility> // for std::pair
34 
35 namespace SimTK {
36 
37 class MobilizedBody;
38 class MultibodySystem;
39 class DecorationGenerator;
40 
148 public:
149 class FrameController; // defined below
150 class BodyFollower; // declared below, defined in Visualizer.cpp
151 class InputListener; // defined in Visualizer_InputListener.h
152 class InputSilo; // "
153 class Reporter; // defined in Visualizer_Reporter.h
154 
155 
193 explicit Visualizer(const MultibodySystem& system);
194 
200 Visualizer(const MultibodySystem& system,
201  const Array_<String>& searchPath);
202 
206 Visualizer(const Visualizer& src);
210 Visualizer& operator=(const Visualizer& src);
213 ~Visualizer();
214 
222 void shutdown();
223 
229 Visualizer& setShutdownWhenDestructed(bool shouldShutdown);
230 
234 bool getShutdownWhenDestructed() const;
235 
239 enum Mode {
242  PassThrough = 1,
245  Sampling = 2,
247  RealTime = 3
248 };
249 
257  GroundAndSky = 1,
259  SolidColor = 2
260 };
261 
267  ViewMenuId = -1
268 };
269 
287 Visualizer& setBackgroundType(BackgroundType background);
288 
289 
297 const Visualizer& setBackgroundColor(const Vec3& color) const;
298 
307 const Visualizer& setShowShadows(bool showShadows) const;
308 
314 const Visualizer& setShowFrameRate(bool showFrameRate) const;
315 
321 const Visualizer& setShowSimTime(bool showSimTime) const;
322 
328 const Visualizer& setShowFrameNumber(bool showFrameNumber) const;
329 
341 const Visualizer& setWindowTitle(const String& title) const;
362 Visualizer& setSystemUpDirection(const CoordinateDirection& upDirection);
365 CoordinateDirection getSystemUpDirection() const;
366 
380 Visualizer& setGroundHeight(Real height);
384 Real getGroundHeight() const;
385 
386 
391 Visualizer& setMode(Mode mode);
394 Mode getMode() const;
395 
404 Visualizer& setDesiredFrameRate(Real framesPerSec);
410 Real getDesiredFrameRate() const;
411 
428 Visualizer& setRealTimeScale(Real simTimePerRealSecond);
431 Real getRealTimeScale() const;
432 
456 Visualizer& setDesiredBufferLengthInSec(Real bufferLengthInSec);
462 Real getDesiredBufferLengthInSec() const;
466 Real getActualBufferLengthInSec() const;
468 int getActualBufferLengthInFrames() const;
469 
477 int addInputListener(InputListener* listener);
479 int getNumInputListeners() const;
481 const InputListener& getInputListener(int i) const;
483 InputListener& updInputListener(int i);
484 
492 int addFrameController(FrameController* controller);
494 int getNumFrameControllers() const;
496 const FrameController& getFrameController(int i) const;
498 FrameController& updFrameController(int i);
499 
536 void report(const State& state) const;
537 
544 void flushFrames() const;
545 
550 void drawFrameNow(const State& state) const;
581 Visualizer& addMenu(const String& title, int id,
582  const Array_<std::pair<String, int> >& items);
583 
597 Visualizer& addSlider(const String& title, int id, Real min, Real max, Real value);
598 
604 int addDecoration(MobilizedBodyIndex mobodIx, const Transform& X_BD,
605  const DecorativeGeometry& geometry);
607 int getNumDecorations() const;
609 const DecorativeGeometry& getDecoration(int i) const;
612 DecorativeGeometry& updDecoration(int i) const;
613 
619 int addRubberBandLine(MobilizedBodyIndex b1, const Vec3& station1,
620  MobilizedBodyIndex b2, const Vec3& station2,
621  const DecorativeLine& line);
623 int getNumRubberBandLines() const;
625 const DecorativeLine& getRubberBandLine(int i) const;
628 DecorativeLine& updRubberBandLine(int i) const;
629 
636 int addDecorationGenerator(DecorationGenerator* generator);
639 int getNumDecorationGenerators() const;
641 const DecorationGenerator& getDecorationGenerator(int i) const;
643 DecorationGenerator& updDecorationGenerator(int i);
681 const Visualizer& setCameraTransform(const Transform& X_GC) const;
682 
685 const Visualizer& zoomCameraToShowAllGeometry() const;
686 
691 const Visualizer& pointCameraAt(const Vec3& point, const Vec3& upDirection) const;
692 
694 const Visualizer& setCameraFieldOfView(Real fov) const;
695 
697 const Visualizer& setCameraClippingPlanes(Real nearPlane, Real farPlane) const;
698 
703 const Visualizer& setSliderValue(int slider, Real value) const;
704 
711 const Visualizer& setSliderRange(int slider, Real newMin, Real newMax) const;
712 
713 
719 void dumpStats(std::ostream& o) const;
721 void clearStats();
726 const Array_<InputListener*>& getInputListeners() const;
727 const Array_<FrameController*>& getFrameControllers() const;
728 const MultibodySystem& getSystem() const;
729 int getRefCount() const;
732 class Impl;
733 //--------------------------------------------------------------------------
734  private:
735 explicit Visualizer(Impl* impl);
736 Impl* impl;
737 
738 const Impl& getImpl() const {assert(impl); return *impl;}
739 Impl& updImpl() {assert(impl); return *impl;}
740 friend class Impl;
741 };
742 
749 public:
761  virtual void generateControls(const Visualizer& viz,
762  const State& state,
763  Array_<DecorativeGeometry>& geometry) = 0;
764 
767  virtual ~FrameController() {}
768 };
769 
773 // This class is based on the BodyWatcher class that used to be in TimsBox.cpp.
776 public:
795  BodyFollower(const MobilizedBody& mobodB,
796  const Vec3& stationPinB = Vec3(0, 0, 0),
797  const Vec3& offset = Vec3(NaN),
798  const UnitVec3& upDirection = UnitVec3());
799 
800  void generateControls(
801  const Visualizer& viz,
802  const State& state,
803  Array_< DecorativeGeometry >& geometry) override;
804 
805 private:
806  const MobilizedBody& m_mobodB;
807  const Vec3& m_stationPinB;
808  const Vec3& m_offset;
809  const UnitVec3& m_upDirection;
810 };
811 
815 
816 } // namespace SimTK
817 
818 #endif // SimTK_SIMBODY_VISUALIZER_H_
Causes the camera to point at and follow a point fixed on a body (a station).
Definition: Visualizer.h:774
This is for arrays indexed by mobilized body number within a subsystem (typically the SimbodyMatterSu...
UnitVec< Real, 1 > UnitVec3
Definition: UnitVec.h:41
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
A CoordinateDirection is a CoordinateAxis plus a direction indicating the positive or negative direct...
Definition: CoordinateAxis.h:244
Mode
These are the operating modes for the Visualizer, with PassThrough the default mode.
Definition: Visualizer.h:239
ELEM min(const VectorBase< ELEM > &v)
Definition: VectorMath.h:178
This pre-built InputListener is extremely useful for processing user input that is intended to affect...
Definition: Visualizer_InputListener.h:233
Every Simbody header and source file should include this header before any other Simbody header...
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:606
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition: State.h:280
const Real NaN
This is the IEEE "not a number" constant for this implementation of the default-precision Real type; ...
This abstract class represents an object that will be invoked by the Visualizer just prior to renderi...
Definition: Visualizer.h:748
PredefinedMenuIds
The visualizer may predefine some menus; if you need to refer to one of those use its menu Id as defi...
Definition: Visualizer.h:265
A DecorationGenerator is used to define geometry that may change over the course of a simulation...
Definition: DecorationGenerator.h:45
The Array_<T> container class is a plug-compatible replacement for the C++ standard template library ...
Definition: Array.h:53
This is an EventReporter that makes it easy to generate on-screen movies of any simulation.
Definition: Visualizer_Reporter.h:51
ELEM max(const VectorBase< ELEM > &v)
Definition: VectorMath.h:251
The job of the MultibodySystem class is to coordinate the activities of various subsystems which can ...
Definition: MultibodySystem.h:48
This is the client-side interface to an implementation-independent representation of "Decorations" su...
Definition: DecorativeGeometry.h:86
Visualizer VTKVisualizer
OBSOLETE: This provides limited backwards compatibility with the old VTK Visualizer that is no longer...
Definition: Visualizer.h:814
SimTK::String is a plug-compatible std::string replacement (plus some additional functionality) inten...
Definition: String.h:62
#define SimTK_SIMBODY_EXPORT
Definition: Simbody/include/simbody/internal/common.h:68
A MobilizedBody is Simbody&#39;s fundamental body-and-joint object used to parameterize a system&#39;s motion...
Definition: MobilizedBody.h:168
BackgroundType
These are the types of backgrounds the visualizer currently supports.
Definition: Visualizer.h:254
This abstract class defines methods to be called when the Visualizer reports user activity back to th...
Definition: Visualizer_InputListener.h:47
Vec< 3 > Vec3
This is the most common 3D vector type: a column of 3 Real values stored consecutively in memory (pac...
Definition: SmallMatrix.h:129
virtual ~FrameController()
Destructor is virtual; be sure to override it if you have something to clean up at the end...
Definition: Visualizer.h:767
A line between two points.
Definition: DecorativeGeometry.h:306
Provide simple visualization of and interaction with a Simbody simulation, with real time control of ...
Definition: Visualizer.h:147