@@ -56,15 +56,15 @@ using namespace IECoreUSD;
5656namespace
5757{
5858
59- IECore::ObjectPtr readCurves ( pxr::UsdGeomCurves &curves, pxr::UsdTimeCode time, const IECore::CubicBasisf &basis, bool periodic , const Canceller *canceller )
59+ IECore::ObjectPtr readCurves ( pxr::UsdGeomCurves &curves, pxr::UsdTimeCode time, const IECore::CubicBasisf &basis, CurvesPrimitive::Wrap wrap , const Canceller *canceller )
6060{
6161 Canceller::check ( canceller );
6262 pxr::VtIntArray vertexCountsArray;
6363 curves.GetCurveVertexCountsAttr ().Get ( &vertexCountsArray, time );
6464 IECore::IntVectorDataPtr countData = DataAlgo::fromUSD ( vertexCountsArray );
6565
6666 Canceller::check ( canceller );
67- IECoreScene::CurvesPrimitivePtr newCurves = new IECoreScene::CurvesPrimitive ( countData, basis, periodic );
67+ IECoreScene::CurvesPrimitivePtr newCurves = new IECoreScene::CurvesPrimitive ( countData. get () , basis, wrap );
6868 PrimitiveAlgo::readPrimitiveVariables ( curves, time, newCurves.get (), canceller );
6969
7070 Canceller::check ( canceller );
@@ -116,19 +116,23 @@ IECore::ObjectPtr readBasisCurves( pxr::UsdGeomBasisCurves &curves, pxr::UsdTime
116116
117117 // Wrap
118118
119- bool periodic = false ;
120- pxr::TfToken wrap;
121- curves.GetWrapAttr ().Get ( &wrap, time );
122- if ( wrap == pxr::UsdGeomTokens->periodic )
119+ CurvesPrimitive::Wrap wrap = IECoreScene::CurvesPrimitive::Wrap::NonPeriodic;
120+ pxr::TfToken usdWrap;
121+ curves.GetWrapAttr ().Get ( &usdWrap, time );
122+ if ( usdWrap == pxr::UsdGeomTokens->periodic )
123+ {
124+ wrap = IECoreScene::CurvesPrimitive::Wrap::Periodic;
125+ }
126+ else if ( usdWrap == pxr::UsdGeomTokens->pinned )
123127 {
124- periodic = true ;
128+ wrap = IECoreScene::CurvesPrimitive::Wrap::Pinned ;
125129 }
126- else if ( wrap != pxr::UsdGeomTokens->nonperiodic )
130+ else if ( usdWrap != pxr::UsdGeomTokens->nonperiodic )
127131 {
128- IECore::msg ( IECore::Msg::Warning, " USDScene" , " Unsupported wrap \" {}\" reading \" {}\" " , wrap .GetString (), curves.GetPath ().GetAsString () );
132+ IECore::msg ( IECore::Msg::Warning, " USDScene" , " Unsupported wrap \" {}\" reading \" {}\" " , usdWrap .GetString (), curves.GetPath ().GetAsString () );
129133 }
130134
131- return readCurves ( curves, time, basis, periodic , canceller );
135+ return readCurves ( curves, time, basis, wrap , canceller );
132136}
133137
134138bool basisCurvesMightBeTimeVarying ( pxr::UsdGeomBasisCurves &curves )
@@ -153,7 +157,7 @@ IECore::ObjectPtr readNurbsCurves( pxr::UsdGeomNurbsCurves &curves, pxr::UsdTime
153157 basis = CubicBasisf::bSpline ();
154158 }
155159
156- return readCurves ( curves, time, basis, false , canceller );
160+ return readCurves ( curves, time, basis, CurvesPrimitive::Wrap::NonPeriodic , canceller );
157161}
158162
159163bool nurbsCurvesMightBeTimeVarying ( pxr::UsdGeomNurbsCurves &curves )
@@ -185,10 +189,20 @@ bool writeCurves( const IECoreScene::CurvesPrimitive *curves, const pxr::UsdStag
185189
186190 usdCurves.CreateCurveVertexCountsAttr ().Set ( DataAlgo::toUSD ( curves->verticesPerCurve () ), time );
187191
188- usdCurves.CreateWrapAttr ().Set (
189- curves->periodic () ? pxr::UsdGeomTokens->periodic : pxr::UsdGeomTokens->nonperiodic ,
190- time
191- );
192+ pxr::TfToken wrap;
193+ switch ( curves->wrap () )
194+ {
195+ case CurvesPrimitive::Wrap::NonPeriodic :
196+ wrap = pxr::UsdGeomTokens->nonperiodic ;
197+ break ;
198+ case CurvesPrimitive::Wrap::Periodic :
199+ wrap = pxr::UsdGeomTokens->periodic ;
200+ break ;
201+ case CurvesPrimitive::Wrap::Pinned :
202+ wrap = pxr::UsdGeomTokens->pinned ;
203+ break ;
204+ }
205+ usdCurves.CreateWrapAttr ().Set ( wrap, time );
192206
193207 pxr::TfToken basis;
194208 if ( curves->basis () == CubicBasisf::bezier () )
0 commit comments