Trax3 3.1.0
trax track library
Loading...
Searching...
No Matches
SupportUSD_Reader.h
1// Copyright (c) 2013 - 2019 Marc-Michael Horstmann;
2// Copyright (c) 2020 - 2025 Trend Verlag;
3//
4// trax track library
5// AD 2024
6//
7// "the resolution of all the fruitless searches"
8//
9// Peter Gabriel
10
11
12#pragma once
13
14#include "SupportUSD.h"
15
16#include "common/Interval.h"
17#include "spat/Frame.h"
18#include "trax/Track.h"
19
20#include <filesystem>
21
22namespace trax{
23
27 class USDReader{
28 public:
29 USDReader( pxr::UsdStageRefPtr pStage );
30
31 // todo: return Module ...
32 std::vector<std::shared_ptr<TrackSystem>> Read();
33
34
37 std::shared_ptr<TrackSystem> ReadTrackSystem( const pxr::UsdPrim& trackSystem );
38
39 inline pxr::UsdStageRefPtr GetStage() const noexcept{
40 return m_pStage;
41 }
42
43 protected:
44 virtual std::shared_ptr<TrackBuilder> ReadTrack( const pxr::UsdPrim& track, double metersPerUnit );
45 virtual TrackBuilder::TrackType ReadTrackType( const pxr::UsdPrim& track ) const noexcept;
46 virtual std::shared_ptr<TrackBuilder> MakeTrack( TrackBuilder::TrackType type ) const noexcept;
47
48 std::shared_ptr<TrackSystem> m_pTrackSystem;
49 private:
50 void ReadTrackCollection( const pxr::UsdPrim& trackCollection, double metersPerUnit );
51
52 static common::Interval<dim::Length> ReadInterval( const pxr::UsdPrim& interval );
53 static spat::Position<dim::Length> ReadPosition( const pxr::UsdPrim& position );
54 static spat::Vector<dim::One> ReadVector( const pxr::UsdPrim& vector );
55 static spat::Vector<dim::Length> ReadDistance( const pxr::UsdPrim& distance );
56 static spat::VectorBundle<dim::Length,dim::One> ReadVectorBundle( const pxr::UsdPrim& vectorBundle );
57 static spat::VectorBundle2<dim::Length,dim::One> ReadVectorBundle2( const pxr::UsdPrim& vectorBundle2 );
58 static spat::VectorBundle3<dim::Length,dim::One> ReadVectorBundle3( const pxr::UsdPrim& vectorBundle3 );
59
60 static CurveSample ReadCurveSample( const pxr::UsdPrim& curveSample );
61 static CubicData ReadCubicData( const pxr::UsdPrim& cubicData );
62 static std::tuple<dim::Angle,dim::Angle,dim::Length> ReadRotatorChainData( const pxr::UsdPrim& data );
63 static std::pair<dim::Length,dim::Angle> ReadLinearTwistData( const pxr::UsdPrim& data );
64 static const std::pair<dim::Length,spat::Vector<dim::One>> ReadDirectionalTwistData( const pxr::UsdPrim& data );
65
66 static std::unique_ptr<Curve> ReadCurve( const pxr::UsdPrim& curve );
67 static std::unique_ptr<Line> ReadLine( const pxr::UsdPrim& line );
68 static std::unique_ptr<LineP> ReadLineP( const pxr::UsdPrim& lineP );
69 static std::unique_ptr<Arc> ReadArc( const pxr::UsdPrim& arc );
70 static std::unique_ptr<ArcP> ReadArcP( const pxr::UsdPrim& arcP );
71 static std::unique_ptr<Helix> ReadHelix( const pxr::UsdPrim& helix );
72 static std::unique_ptr<HelixP> ReadHelixP( const pxr::UsdPrim& helixP );
73 static std::unique_ptr<Cubic> ReadCubic( const pxr::UsdPrim& cubic );
74 static std::unique_ptr<Spline> ReadSpline( const pxr::UsdPrim& spline );
75 static std::unique_ptr<Clothoid> ReadClothoid( const pxr::UsdPrim& clothoid );
76 static std::unique_ptr<Rotator> ReadRotator( const pxr::UsdPrim& rotator );
77 static std::unique_ptr<RotatorChain> ReadRotatorChain( const pxr::UsdPrim& rotatorChain );
78 static std::unique_ptr<PolygonalChain> ReadPolygonalChain( const pxr::UsdPrim& polygonalChain );
79 static std::unique_ptr<SampledCurve> ReadSampledCurve( const pxr::UsdPrim& sampledCurve );
80
81 static std::pair<std::unique_ptr<Curve>,std::unique_ptr<RoadwayTwist>> ReadBasisCurve( const pxr::UsdPrim& basisCurve, bool bLocalTransformation );
82 static std::unique_ptr<DirectionalTwist> ReadUpTwist( const pxr::UsdStage& stage );
83
84 static std::unique_ptr<RoadwayTwist> ReadTwist( const pxr::UsdPrim& twist );
85 static std::unique_ptr<ConstantTwist> ReadConstantTwist( const pxr::UsdPrim& constantTwist );
86 static std::unique_ptr<LinearTwist> ReadLinearTwist( const pxr::UsdPrim& linearTwist );
87 static std::unique_ptr<PiecewiseTwist> ReadPiecewiseTwist( const pxr::UsdPrim& piecewiseTwist );
88 static std::unique_ptr<DirectionalTwist> ReadDirectionalTwist( const pxr::UsdPrim& directionalTwist );
89 static std::unique_ptr<PiecewiseDirectionalTwist> ReadPiecewiseDirectionalTwist( const pxr::UsdPrim& piecewiseDirectionalTwist );
90 static std::unique_ptr<CombinedTwist> ReadCombinedTwist( const pxr::UsdPrim& combinedTwist );
91
92 static std::unique_ptr<Section> ReadSection( const pxr::UsdPrim& section );
93
94 void ReadSwitches( pxr::UsdPrim scopePrim );
95 std::unique_ptr<Connector> ReadTwoWaySwitch( pxr::UsdPrim switchPrim );
96 std::unique_ptr<Connector> ReadThreeWaySwitch( pxr::UsdPrim switchPrim );
97 std::unique_ptr<Connector> ReadSingleSlipSwitch( pxr::UsdPrim switchPrim );
98 std::unique_ptr<Connector> ReadDoubleSlipSwitch( pxr::UsdPrim switchPrim );
99
100
101 pxr::UsdStageRefPtr m_pStage;
102 std::map<pxr::SdfPath,std::pair<std::shared_ptr<Curve>,std::unique_ptr<RoadwayTwist>>> m_Curves;
103
104 public:
105 static spat::Frame<dim::Length,dim::One> ReadTransformationNormalized( const pxr::UsdPrim& prim, double metersPerUnit );
106 static spat::Frame<dim::Length,dim::One> ReadTransformation( const pxr::UsdPrim& prim, double metersPerUnit );
107 static spat::Frame<dim::Length,dim::One> ReadTransformation( const pxr::UsdAttribute& xformOpOrderAttribute, double metersPerUnit );
108 static spat::Frame<dim::Length,dim::One> ReadChildFrame( const pxr::UsdPrim& prim );
109 static spat::Frame<dim::Length,dim::One> ReadFrame( const pxr::UsdAttribute& opAttribute, double metersPerUnit );
110 private:
111 static spat::Frame<dim::Length,dim::One> ComputeLocalToWorldTransform( pxr::UsdPrim forPrim );
112
113 static void Connect( trax::TrackSystem& trackSystem );
114
115 static const dim::Length scm_EpsilonTrackGap;
116 static const dim::Angle scm_EpsilonTrackKink;
117 };
118
119}
Home of the Track and TrackBuilder interfaces.
std::shared_ptr< TrackSystem > ReadTrackSystem(const pxr::UsdPrim &trackSystem)
Called to reads a track system from and USD definition.
Value< Dimension< 1, 0, 0 > > Length
Length.
Definition DimensionedValues.h:324
Value< Dimension< 0, 0, 0 > > Angle
Angle in radians.
Definition DimensionedValues.h:320
Frame< Valtype, ValtypeT > VectorBundle3
Different name for Frame.
Definition Frame.h:380
Namespace of all the trax track libraries classes and methods.
Definition Collection.h:17
An interval describes the area between two numbers. It is understood to contain the near one and exlu...
Definition Interval.h:42
A Frame ("TNBFrame") describes a location in 3d space and an orientation using a right handed coordin...
Definition Frame.h:52
Implements a 3D - position in cartesian coordinates.
Definition Position.h:46
Implements a tangential space bundle.
Definition VectorBundle2.h:43
Implements a Vector bundle.
Definition VectorBundle.h:42
Implements a 3D - vector in cartesian coordinates.
Definition Vector.h:48
Data definig a cubic curve.
Definition Curve.h:434
The dynamic data of a curve at one point.
Definition Curve.h:410
A track system is the container for tracks.
Definition TrackSystem.h:56