Simbody  3.5
CablePath.h
Go to the documentation of this file.
1 #ifndef SimTK_SIMBODY_CABLE_PATH_H_
2 #define SimTK_SIMBODY_CABLE_PATH_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) 2012 Stanford University and the Authors. *
13  * Authors: Michael Sherman, Ian Stavness *
14  * Contributors: Andreas Scholz *
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 
30 #include "SimTKmath.h"
32 
33 namespace SimTK {
34 
38 SimTK_DEFINE_UNIQUE_INDEX_TYPE(CableObstacleIndex);
39 
40 class CableTrackerSubsystem;
41 class MobilizedBody;
42 class CableObstacle;
43 
44 //==============================================================================
45 // CABLE PATH
46 //==============================================================================
93 public:
94 
99  const MobilizedBody& originBody,
100  const Vec3& defaultOriginPoint,
101  const MobilizedBody& terminationBody,
102  const Vec3& defaultTerminationPoint);
103 
108  const MobilizedBody& originBody,
109  const MobilizedBody& terminationBody);
110 
112 CablePath(const CablePath& source);
113 
115 CablePath& operator=(const CablePath& source);
116 
118 ~CablePath() {clear();}
119 
141 void solveForInitialCablePath(State& state) const;
142 
146 int getNumObstacles() const;
149 const CableObstacle& getObstacle(CableObstacleIndex obstacleIx) const;
150 
154 Real getCableLength(const State& state) const;
155 
161 Real getCableLengthDot(const State& state) const;
162 
168 void applyBodyForces(const State& state, Real tension,
169  Vector_<SpatialVec>& bodyForcesInG) const;
170 
177 Real calcCablePower(const State& state, Real tension) const;
178 
182 Real getIntegratedCableLengthDot(const State& state) const;
183 
188 void setIntegratedCableLengthDot(State& state, Real value) const;
189 
190 
193 CablePath() : impl(0) {}
194 class Impl;
195 const Impl& getImpl() const {assert(impl); return *impl;}
196 Impl& updImpl() {assert(impl); return *impl;}
197 //--------------------------------------------------------------------------
198 private:
199 void clear();
200 Impl* impl;
201 };
202 
203 
204 //==============================================================================
205 // CABLE OBSTACLE
206 //==============================================================================
211 public:
212 class ViaPoint; // also used for end points
213 class Surface;
214 
216 CableObstacle() : impl(0) {}
217 
219 explicit CableObstacle(CablePath& path);
225 CableObstacle& operator=(const CableObstacle& source);
228 ~CableObstacle() {clear();}
229 
233 const Transform& getDefaultTransform() const;
237 const MobilizedBody& getMobilizedBody() const;
239 const CablePath& getCablePath() const;
241 CableObstacleIndex getObstacleIndex() const;
245 const DecorativeGeometry& getDecorativeGeometry() const;
249 DecorativeGeometry& updDecorativeGeometry();
250 
254 bool isDisabledByDefault() const;
255 
259 CableObstacle& setDisabledByDefault(bool shouldBeDisabled);
260 
263 CableObstacle& setDefaultTransform(const Transform& X_BS);
264 
269 CableObstacle& setDecorativeGeometry(const DecorativeGeometry& viz);
270 
273 void clear();
275 bool isEmpty() const {return impl==0;}
276 
277 //--------------------------------------------------------------------------
278 class Impl;
279 const Impl& getImpl() const {assert(impl); return *impl;}
280 Impl& updImpl() {assert(impl); return *impl;}
281 
282 protected:
283 explicit CableObstacle(Impl* impl);
284 
285 private:
286 Impl* impl; // opaque pointer to reference-counted implementation object
287 };
288 
289 
290 //==============================================================================
291 // CABLE OBSTACLE :: VIA POINT
292 //==============================================================================
295 public:
299 ViaPoint(CablePath& path, const MobilizedBody& viaMobod,
300  const Vec3& defaultStation);
301 
303 static bool isInstance(const CableObstacle&);
306 static const ViaPoint& downcast(const CableObstacle&);
309 static ViaPoint& updDowncast(CableObstacle&);
310 
311 class Impl;
312 };
313 
314 //==============================================================================
315 // CABLE OBSTACLE :: SURFACE
316 //==============================================================================
321 public:
324 
329 Surface(CablePath& path, const MobilizedBody& mobod,
330  const Transform& X_BS, const ContactGeometry& surface);
331 
336 { CableObstacle::setDecorativeGeometry(viz); return *this; }
337 
348 Surface& setNearPoint(const Vec3& point);
349 
354 Surface& setContactPointHints(const Vec3& startHint,
355  const Vec3& endHint);
356 
358 static bool isInstance(const CableObstacle&);
361 static const Surface& downcast(const CableObstacle&);
364 static Surface& updDowncast(CableObstacle&);
365 class Impl;
366 };
367 
368 
369 } // namespace SimTK
370 
371 #endif // SimTK_SIMBODY_CABLE_PATH_H_
SimTK_DEFINE_UNIQUE_INDEX_TYPE(AssemblyConditionIndex)
This is the vector class intended to appear in user code for large, variable size column vectors...
Definition: BigMatrix.h:171
Apache License January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation source
Definition: LICENSE.txt:26
Surface & setDecorativeGeometry(const DecorativeGeometry &viz)
Provide visualization geometry to be used to display this obstacle.
Definition: CablePath.h:335
This is a unique integer type for identifying obstacles comprising a particular cable path...
CableObstacle & setDecorativeGeometry(const DecorativeGeometry &viz)
Replace the decorative geometry used for automatically-generated visualization of this obstacle when ...
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
Impl & updImpl()
Definition: CablePath.h:280
~CablePath()
Delete the cable path if this handle was the last reference to it.
Definition: CablePath.h:118
Every Simbody header and source file should include this header before any other Simbody header...
This is a point through which the cable must pass.
Definition: CablePath.h:294
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:593
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition: State.h:276
Impl & updImpl()
Definition: CablePath.h:196
This subsystem tracks the paths of massless, frictionless cables that take the shortest route between...
Definition: CableTrackerSubsystem.h:68
A ContactGeometry object describes the shape of all or part of the boundary of a solid object...
Definition: ContactGeometry.h:110
CablePath()
Default constructor creates an empty cable path not associated with any subsystem; don&#39;t use this...
Definition: CablePath.h:193
const Impl & getImpl() const
Definition: CablePath.h:195
~CableObstacle()
Destructor clears the handle, deleting the referenced object if this was the last reference...
Definition: CablePath.h:228
This is the client-side interface to an implementation-independent representation of "Decorations" su...
Definition: DecorativeGeometry.h:86
#define SimTK_SIMBODY_EXPORT
Definition: Simbody/include/simbody/internal/common.h:72
A MobilizedBody is Simbody&#39;s fundamental body-and-joint object used to parameterize a system&#39;s motion...
Definition: MobilizedBody.h:167
ViaPoint()
Default constructor creates an empty handle.
Definition: CablePath.h:297
An obstacle is any significant object along the cable path – one of the end points, a via point, or a surface.
Definition: CablePath.h:210
This class represents the path of a frictionless cable from an origin point fixed to a body...
Definition: CablePath.h:92
Surface()
Default constructor creates an empty handle.
Definition: CablePath.h:323
bool isEmpty() const
See if this handle is empty.
Definition: CablePath.h:275
however the hybrid system can request that if in which case “end of step” is treated like any other event External events are typically handled through the end of step event mechanism For the end of step function can look at the keyboard etc and respond accordingly a termination event occurs either when the integrator advances to a designated “final time” for the or when an event handler indicates that the simulation must be terminated for some other reason Event trigger transition details This section probably covers more than you really want to know about event triggers But if you run into some mysterious behavior regarding your event trigger functions at some point
Definition: SimmathUserGuide.doc:228
This obstacle is a solid object represented by a ContactGeometry surface.
Definition: CablePath.h:320
CableObstacle()
Create an empty obstacle handle that can refer to any type of obstacle.
Definition: CablePath.h:216
const Impl & getImpl() const
Definition: CablePath.h:279