Hm, i use the GeometryAccessor for my plugin and it works for every frame.
It also gives you triangulated values back, if needed.

PolygonMesh mesh( whatever );
CGeometryAccessor ga = mesh.GetGeometryAccessor(
siConstructionModeSecondaryShape, siCatmullClark, subd.GetParameterValue(
L"gapproxmordrsl" ), false, true, subd.GetParameterValue( L"gapproxmoan",
time ) );

// Vertex positions
CDoubleArray vPosition;
ga.GetVertexPositions( vPosition );
LONG vertCount = vPosition.GetCount();

// Normal values
CFloatArray vNormal;
ga.GetNodeNormals(vNormal);
LONG normCount = vNormal.GetCount();

// First UV map
CRefArray uvProps = ga.GetUVs();
ClusterProperty cp( uvProps[0] );
CFloatArray valueArray;
CBitArray flags;
cp.GetValues( valueArray, flags );
LONG uvCount = valueArray.GetCount();

Stephan




2013/3/14 Raffaele Fragapane <[email protected]>

> Not 100% sure what you're using or trying to use.
> In 2012 or 2013 they introduced GetGeometry3() specifically for python,
> that with the time in frames argument worked ok for me.
>
> In CPP GetGeometry with a time argument also works fine in my (dated)
> experience, but the time option is only available runOnce, operators can't
> look up times other than current, so if you're doing this inside an op,
> then the time parameter won't work.
>
> You can also explicitly pass it what construction mode to look up, if
> defaulted it will use the current mode (so make sure you're not defaulting
> it and in modelling mode or something).
>
>
> On Thu, Mar 14, 2013 at 4:05 PM, ran sariel <[email protected]> wrote:
>
>> Hi
>>
>> I'm trying to get values on geometry at a certain frame.
>> when using python - as long as I roll the playControl to that frame and
>> call "refresh" (ugly I know)
>> data= mesh.GetSurfacePointLocatorsFromPoints()
>> vertices=mesh.evaluatePositions(data)
>>
>> I get the correct data.
>>
>> on C++ no matter what I do, the geometry is not reflecting the
>> deformations,
>>
>> searching through the docs,  - it suggests GetGeometry(currentTime);
>> (defaulting to current)
>> so:
>> "
>> std::vector<double>posData;
>> PolygonMesh
>> mesh=node.GetActivePrimitive(currentFrame).GetGeometry(currentFrame);"
>> PointLocatorData data = mesh.GetSurfacePointLocatorsFromPoints();
>> posData.resize(data.GetCount()*3);
>> mesh.EvaluatePositions(data,-1,0,&posData.front());
>>
>> """
>>
>> any ideas???
>>
>> cheers
>> Ran
>>
>>
>>
>>
>
>
> --
> Our users will know fear and cower before our software! Ship it! Ship it
> and let them flee like the dogs they are!
>

Reply via email to