19 template <
typename Real>
33 std::function<Real(Real)>
const& radial,
bool closed,
37 inline std::shared_ptr<ParametricCurve<3, Real>>
const&
GetMedial()
const;
38 inline std::function<Real(Real)>
const&
GetRadial()
const;
47 std::shared_ptr<ParametricCurve<3, Real>>
mMedial;
53 std::function<std::array<Vector3<Real>, 4>(Real)>
mFSampler;
54 std::unique_ptr<FrenetFrame3<Real>>
mFrenet;
62 template <
typename Real>
65 std::function<Real(Real)>
const& radial,
bool closed,
bool sampleByArcLength,
84 LogWarning(
"A nonnull medial curve is required.");
114 factor =
mMedial->GetTotalLength() * invDenom;
133 std::array<Vector3<Real>, 4> frame;
137 frame[2] =
UnitCross(frame[3], frame[1]);
146 std::array<Vector3<Real>, 4> frame;
147 (*mFrenet)(
t, frame[0], frame[1], frame[2], frame[3]);
186 template <
typename Real>
192 template <
typename Real>
198 template <
typename Real>
204 template <
typename Real>
210 template <
typename Real>
216 template <
typename Real>
231 template <
typename Real>
234 uint32_t
row, col,
v, save;
240 std::array<Vector3<Real>, 4> frame =
mFSampler(t);
std::shared_ptr< ParametricCurve< 3, Real > > mMedial
MeshDescription mDescription
std::vector< Vector2< Real > > mDefaultTCoords
std::vector< Real > mCosAngle
Vector3< Real > mUpVector
virtual void UpdateNormals()
Vector< N, Real > UnitCross(Vector< N, Real > const &v0, Vector< N, Real > const &v1, bool robust=false)
std::shared_ptr< ParametricCurve< 3, Real > > const & GetMedial() const
GLenum GLenum GLsizei void * row
bool wantDynamicTangentSpaceUpdate
std::unique_ptr< FrenetFrame3< Real > > mFrenet
Vector3< Real > * mNormals
std::function< Real(unsigned int)> mTSampler
#define LogWarning(message)
virtual void UpdateFrame()
virtual void UpdatePositions() override
std::vector< Real > mSinAngle
Vector2< Real > & TCoord(uint32_t i)
Vector2< Real > * mTCoords
bool hasTangentSpaceVectors
std::function< std::array< Vector3< Real >, 4 >Real)> mFSampler
Vector3< Real > & Position(uint32_t i)
TubeMesh(MeshDescription const &description, std::shared_ptr< ParametricCurve< 3, Real >> const &medial, std::function< Real(Real)> const &radial, bool closed, bool sampleByArcLength, Vector3< Real > upVector)
std::function< Real(Real)> const & GetRadial() const
bool IsSampleByArcLength() const
std::function< Real(Real)> mRadial
Vector3< Real > const & GetUpVector() const