本文整理汇总了C++中MItGeometry::setAllPositions方法的典型用法代码示例。如果您正苦于以下问题:C++ MItGeometry::setAllPositions方法的具体用法?C++ MItGeometry::setAllPositions怎么用?C++ MItGeometry::setAllPositions使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MItGeometry
的用法示例。
在下文中一共展示了MItGeometry::setAllPositions方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: deform
MStatus PushDeformer::deform(MDataBlock& dataBlock,
MItGeometry& itGeo,
const MMatrix& localToWorldMatrix,
unsigned int geomIndex)
{
MStatus status;
//get attribute handles
double bulgeAmount = dataBlock.inputValue(aAmount, &status).asDouble();
CHECK_MSTATUS_AND_RETURN_IT(status);
m_taskData.envelope = dataBlock.inputValue(envelope, &status).asFloat();
CHECK_MSTATUS_AND_RETURN_IT(status);
bool useStressV = dataBlock.inputValue(aUseStress, &status).asBool();
CHECK_MSTATUS_AND_RETURN_IT(status);
int multiThreadingType = dataBlock.inputValue(aMultiThreadingType, &status).asBool();
CHECK_MSTATUS_AND_RETURN_IT(status);
if (m_taskData.envelope <= 0.001)
{
return MS::kSuccess;
}
// if the use stress plug is turned on pull
MDoubleArray stressV;
if (useStressV == true)
{
//pull out the raw data as an Mobject
MObject stressMap = dataBlock.inputValue(aStressMap, &status).data();
CHECK_MSTATUS_AND_RETURN_IT(status);
MFnDoubleArrayData stressDataFn(stressMap);
m_taskData.stressV = stressDataFn.array();
}
//retrieve the handle to the output array attribute
MArrayDataHandle hInput = dataBlock.outputArrayValue(input, &status);
CHECK_MSTATUS_AND_RETURN_IT(status);
//get the input array index handle
status = hInput.jumpToElement(geomIndex);
//get the handle of geomIndex attribute
MDataHandle hInputElement = hInput.outputValue(&status);
CHECK_MSTATUS_AND_RETURN_IT(status);
//Get the MObject of the input geometry of geomindex
MObject oInputGeom = hInputElement.child(inputGeom).asMesh();
MFnMesh fnMesh(oInputGeom, &status);
CHECK_MSTATUS_AND_RETURN_IT(status);
fnMesh.getVertexNormals(false, m_taskData.normals, MSpace::kWorld);
itGeo.allPositions(m_taskData.points, MSpace::kWorld);
//MGlobal::displayInfo( "test" );
/*for (int i = 0; i < itGeo.count(); i++)
{
MGlobal::displayInfo( MFnAttribute(weightList).isArray );
}*/
m_taskData.bulgeAmount = bulgeAmount;
if(multiThreadingType == 1)
{
ThreadData* pThreadData = createThreadData( NUM_TASKS, &m_taskData );
MThreadPool::newParallelRegion( createTasks, (void*)pThreadData );
itGeo.setAllPositions(m_taskData.points);
delete [] pThreadData;
return MS::kSuccess;
}
else if(multiThreadingType == 2)
{
tbb::parallel_for(size_t(0), size_t(itGeo.count()), [this](size_t i)
{
//const float w = weightValue(dataBlock, geomIndex, i);
const float w = 1.0;
if (m_taskData.useStressV == true && (m_taskData.stressV.length() > 0))
{
//deform
m_taskData.points[i] += (MVector(m_taskData.normals[i]) * m_taskData.bulgeAmount * m_taskData.envelope * w * m_taskData.stressV[i]);
}
else
{
//deform
m_taskData.points[i] += m_taskData.normals[i] * m_taskData.bulgeAmount * m_taskData.envelope * w;
}
});
}
//
else if(multiThreadingType == 3)
#pragma omp parallel for
for (int i = 0; i < itGeo.count(); i++)
{
float w = weightValue(dataBlock, geomIndex, itGeo.index());
if (useStressV == true && (stressV.length() > 0))
{
//deform
m_taskData.points[i] += (MVector(m_taskData.normals[i]) * bulgeAmount * m_taskData.envelope * w * m_taskData.stressV[i]);
}
else
{
//.........这里部分代码省略.........
示例2: deform
MStatus sphericalBlendShape::deform(MDataBlock& data, MItGeometry& itGeo, const MMatrix& mat, unsigned int geomIndex)
{
MStatus status = MS::kSuccess;
float env = data.inputValue(envelope).asFloat();
if (env <= 0.0f) {
return MS::kSuccess;
}
MMatrix spaceMatrix = data.inputValue(aSpaceMatrix).asMatrix();
short poleAxis = data.inputValue(aPoleAxis).asShort();
short seamAxis = data.inputValue(aSeamAxis).asShort();
short method = data.inputValue(aMethod).asShort();
MMatrix warpMatrix = data.inputValue(aWarpMatrix).asMatrix();
MTransformationMatrix warpTransMatrix(warpMatrix);
MPoint warpPoint = warpTransMatrix.getTranslation(MSpace::kWorld);
status = checkPoleAndSeam(poleAxis, seamAxis);
CHECK_MSTATUS_AND_RETURN_IT(status);
MMatrix invGeoMatrix = mat.inverse();
MMatrix invSpaceMatrix = spaceMatrix.inverse();
MPointArray defPoints;
MPoint* defPoint;
MPoint inPoint, returnPoint;
itGeo.allPositions(defPoints);
unsigned int count = defPoints.length();
unsigned int i;
switch(method) {
// XYZ to Spherical
case 0:
for (i=0; i<count; i++) {
defPoint = &defPoints[i];
inPoint = *defPoint;
// bring the point into world space
inPoint *= invGeoMatrix;
// bring into local space of the input matrix
inPoint *= invSpaceMatrix;
cartesianToSpherical(inPoint, poleAxis, seamAxis, warpPoint, returnPoint);
// bring the point back into world space
returnPoint *= spaceMatrix;
// bring the point back into local space
returnPoint *= mat;
lerp(*defPoint, returnPoint, env, *defPoint);
}
break;
case 1:
for (i=0; i<count; i++) {
defPoint = &defPoints[i];
inPoint = *defPoint;
// bring the point into world space
inPoint *= invGeoMatrix;
// bring into local space of the input matrix
inPoint *= invSpaceMatrix;
sphericalToCartesian(inPoint, poleAxis, seamAxis, warpPoint, returnPoint);
// bring the point back into world space
returnPoint *= spaceMatrix;
// bring the point back into local space
returnPoint *= mat;
lerp(*defPoint, returnPoint, env, *defPoint);
}
break;
}
itGeo.setAllPositions(defPoints);
return MS::kSuccess;
}
示例3: deform
//.........这里部分代码省略.........
blendMatList(L, weight, AL);
if(blendMode==BM_SRL) {
blendMatList(logR, weight, AR);
blendMatList(logS, weight, AS);
#pragma omp parallel for
for(int i=0; i<numTet; i++) {
AR[i] = expSO(AR[i]);
AS[i] = expSym(AS[i]);
}
} else if(blendMode == BM_LOG3) { // log
blendMatList(logGL, weight, AR);
#pragma omp parallel for
for(int i=0; i<numTet; i++) {
AR[i] = AR[i].exp();
AS[i] = Matrix3d::Identity();
}
} else if(blendMode == BM_SQL) { // quaternion
std::vector<Vector4d> Aq(numTet);
blendMatLinList(S, weight, AS);
blendQuatList(quat, weight, Aq);
#pragma omp parallel for
for(int i=0; i<numTet; i++) {
Quaternion<double> Q(Aq[i]);
AR[i] = Q.matrix().transpose();
}
} else if(blendMode == BM_SlRL) { // expSO+linear Sym
blendMatList(logR, weight, AR);
blendMatLinList(S, weight, AS);
#pragma omp parallel for
for(int i=0; i<numTet; i++) {
AR[i] = expSO(AR[i]);
}
} else if(blendMode == BM_AFF) { // linear
blendMatLinList(GL, weight, AR);
for(int i=0; i<numTet; i++) {
AS[i] = Matrix3d::Identity();
}
} else {
return MS::kFailure;
}
MatrixXd G(dim+1,3),Sol;
std::vector<double> tetEnergy(numTet);
// iterate to determine vertices position
for(int k=0; k<numIter; k++) {
for(int i=0; i<numTet; i++) {
A[i]=pad(AS[i]*AR[i],AL[i]);
}
// solve ARAP
std::vector<Vector3d> constraintVector(0);
std::vector<double> tetWeight(numTet,1.0);
//constraintVector[0]=pts[0];
ARAPSolve(A, PI, tetList, tetWeight, constraintVector, EPSILON, dim, constraintMat, solver, Sol);
// set new vertices position
for(int i=0; i<numPts; i++) {
new_pts[i][0]=Sol(i,0);
new_pts[i][1]=Sol(i,1);
new_pts[i][2]=Sol(i,2);
}
// if iteration continues
if(k+1<numIter || visualiseEnergy) {
std::vector<Matrix4d> Q(numTet);
makeTetMatrix(tetMode, new_pts, tetList, faceList, edgeList, vertexList, Q);
Matrix3d S,R;
#pragma omp parallel for
for(int i=0; i<numTet; i++) {
polarHigham((PI[i]*Q[i]).block(0,0,3,3), S, AR[i]);
tetEnergy[i] = (S-AS[i]).squaredNorm();
}
}
}
// set new vertex position
for(int i=0; i<numPts; i++) {
Mpts[i].x=Sol(i,0);
Mpts[i].y=Sol(i,1);
Mpts[i].z=Sol(i,2);
}
itGeo.setAllPositions(Mpts);
// set vertex color according to ARAP energy
if(visualiseEnergy) {
std::vector<double> ptsEnergy;
makePtsWeightList(tetMode, numPts, tetList, faceList, edgeList, vertexList, tetEnergy, ptsEnergy);
//double max_energy = *std::max_element(ptsEnergy.begin(), ptsEnergy.end());
outputAttr(data, aEnergy, ptsEnergy);
for(int i=0; i<numPts; i++) {
ptsEnergy[i] *= visualisationMultiplier; // or /= max_energy
}
visualise(data, outputGeom, ptsEnergy);
}
// MString es="Runtime timing: ";
// double timing=(double)(clock()- clock_start)/CLOCKS_PER_SEC;
// es += timing;
// MGlobal::displayInfo(es);
return MS::kSuccess;
}
示例4: deform
MStatus sgBulgeDeformer::deform(MDataBlock& dataBlock, MItGeometry& iter, const MMatrix& mtx, unsigned int index)
{
MStatus status;
float bulgeWeight = dataBlock.inputValue(aBulgeWeight).asFloat();
double bulgeRadius = dataBlock.inputValue(aBulgeRadius).asDouble();
MArrayDataHandle hArrInputs = dataBlock.inputArrayValue(aBulgeInputs);
MPointArray allPositions;
iter.allPositions(allPositions);
if (mem_resetElements)
{
unsigned int elementCount = hArrInputs.elementCount();
mem_meshInfosInner.resize(mem_maxLogicalIndex);
mem_meshInfosOuter.resize(mem_maxLogicalIndex);
for (unsigned int i = 0; i < elementCount; i++, hArrInputs.next())
{
MDataHandle hInput = hArrInputs.inputValue();
MDataHandle hMatrix = hInput.child(aMatrix);
MDataHandle hMesh = hInput.child(aMesh);
MMatrix mtxMesh = hMatrix.asMatrix();
MObject oMesh = hMesh.asMesh();
MFnMeshData meshDataInner, meshDataOuter;
MObject oMeshInner = meshDataInner.create();
MObject oMeshOuter = meshDataOuter.create();
MFnMesh fnMesh;
fnMesh.copy(oMesh, oMeshInner);
fnMesh.copy(oMesh, oMeshOuter);
sgMeshInfo* newMeshInfoInner = new sgMeshInfo(oMeshInner, hMatrix.asMatrix());
sgMeshInfo* newMeshInfoOuter = new sgMeshInfo(oMeshOuter, hMatrix.asMatrix());
mem_meshInfosInner[hArrInputs.elementIndex()] = newMeshInfoInner;
mem_meshInfosOuter[hArrInputs.elementIndex()] = newMeshInfoOuter;
}
}
for (unsigned int i = 0; i < elementCount; i++)
{
mem_meshInfosInner[i]->setBulge(bulgeWeight, MSpace::kWorld );
}
MFloatArray weightList;
weightList.setLength(allPositions.length());
for (unsigned int i = 0; i < weightList.length(); i++)
weightList[i] = 0.0f;
MMatrixArray inputMeshMatrixInverses;
inputMeshMatrixInverses.setLength(elementCount);
for (unsigned int i = 0; i < elementCount; i++)
{
inputMeshMatrixInverses[i] = mem_meshInfosInner[i]->matrix();
}
for (unsigned int i = 0; i < allPositions.length(); i++)
{
float resultWeight = 0;
for (unsigned int infoIndex = 0; infoIndex < elementCount; infoIndex++)
{
MPoint localPoint = allPositions[i] * mtx* inputMeshMatrixInverses[infoIndex];
MPoint innerPoint = mem_meshInfosInner[infoIndex]->getClosestPoint(localPoint);
MPoint outerPoint = mem_meshInfosOuter[infoIndex]->getClosestPoint(localPoint);
MVector innerVector = innerPoint - localPoint;
MVector outerVector = outerPoint - localPoint;
if (innerVector * outerVector < 0)
{
double innerLength = innerVector.length();
double outerLength = outerVector.length();
double allLength = innerLength + outerLength;
float numerator = float( innerLength * outerLength );
float denominator = float( pow(allLength / 2.0, 2) );
resultWeight = numerator / denominator;
}
}
weightList[i] = resultWeight;
}
for (unsigned int i = 0; i < allPositions.length(); i++)
{
allPositions[i] += weightList[i] * MVector(0, 1, 0);
}
iter.setAllPositions(allPositions);
return MS::kSuccess;
}
示例5: deform
//.........这里部分代码省略.........
if(blendMode == 0){ // Rotational log
logR[i]=logSOc(R[i], prevThetas[i], prevNs[i]);
}else if(blendMode == 1){ // Eucledian log
SE[i]=affine(R[i], L[i]);
logSE[i]=logSEc(SE[i], prevThetas[i], prevNs[i]);
}else if(blendMode == 5){ // quaternion
Quaternion<double> Q(R[i].transpose());
quat[i] << Q.x(), Q.y(), Q.z(), Q.w();
}
}
}else if(blendMode == 2){ //logmatrix3
for(unsigned int i=0;i<numPrb;i++){
logGL[i] = aff[i].block(0,0,3,3).log();
L[i] = transPart(aff[i]);
}
}else if(blendMode == 3){ // logmatrix4
for(unsigned int i=0;i<numPrb;i++){
logAff[i] = aff[i].log();
}
}
// compute blended matrices
#pragma omp parallel for
std::vector<Matrix4d> At(numTet);
for(int j=0; j<numTet; j++ ){
if(blendMode==0){
Matrix3d RR=Matrix3d::Zero();
Matrix3d SS=Matrix3d::Zero();
Vector3d l=Vector3d::Zero();
for(unsigned int i=0; i<numPrb; i++){
RR += w[j][i] * logR[i];
SS += w[j][i] * logS[i];
l += w[j][i] * L[i];
}
SS = expSym(SS);
if(frechetSum){
RR = frechetSO(R, w[j]);
}else{
RR = expSO(RR);
}
At[j] = affine(SS*RR, l);
}else if(blendMode==1){ // rigid transformation
Matrix4d EE=Matrix4d::Zero();
Matrix3d SS=Matrix3d::Zero();
for(unsigned int i=0; i<numPrb; i++){
EE += w[j][i] * logSE[i];
SS += w[j][i] * logS[i];
}
if(frechetSum){
EE = frechetSE(SE, w[j]);
}else{
EE = expSE(EE);
}
At[j] = affine(expSym(SS),Vector3d::Zero())*EE;
}else if(blendMode == 2){ //logmatrix3
Matrix3d G=Matrix3d::Zero();
Vector3d l=Vector3d::Zero();
for(unsigned int i=0; i<numPrb; i++){
G += w[j][i] * logGL[i];
l += w[j][i] * L[i];
}
At[j] = affine(G.exp(), l);
}else if(blendMode == 3){ // logmatrix4
Matrix4d A=Matrix4d::Zero();
for(unsigned int i=0; i<numPrb; i++)
A += w[j][i] * logAff[i];
At[j] = A.exp();
}else if(blendMode == 5){ // quaternion
Vector4d q=Vector4d::Zero();
Matrix3d SS=Matrix3d::Zero();
Vector3d l=Vector3d::Zero();
for(unsigned int i=0; i<numPrb; i++){
q += w[j][i] * quat[i];
SS += w[j][i] * logS[i];
l += w[j][i] * L[i];
}
SS = expSym(SS);
Quaternion<double> Q(q);
Matrix3d RR = Q.matrix().transpose();
At[j] = affine(SS*RR, l);
}else if(blendMode==10){
At[j] = Matrix4d::Zero();
for(unsigned int i=0; i<numPrb; i++){
At[j] += w[j][i] * aff[i];
}
}
}
// compute target vertices position
MatrixXd G=MatrixXd::Zero(numTet+numPts,3);
arapG(At, PI, meshTriangles, aff, G);
MatrixXd Sol = solver.solve(G);
for(unsigned int i=0;i<numPts;i++){
pts[i].x=Sol(i,0);
pts[i].y=Sol(i,1);
pts[i].z=Sol(i,2);
pts[i] *= localToWorldMatrix.inverse();
}
itGeo.setAllPositions(pts);
return MS::kSuccess;
}
示例6: deform
//.........这里部分代码省略.........
else if (blendMode == BM_SQL){
Vector4d q = blendQuat(B.quat, wr[j]);
Vector3d l = blendMat(B.L, wl[j]);
blendedS[j] = blendMatLin(B.S, ws[j]);
Quaternion<double> RQ(q);
blendedR[j] = RQ.matrix().transpose();
A[j] = pad(blendedS[j]*blendedR[j], l);
}
else if (blendMode == BM_AFF){
A[j] = blendMatLin(B.Aff, wr[j]);
}
}
// compute target vertices position
tetEnergy.resize(mesh.numTet);
// set constraint
int numConstraints = constraint.size();
mesh.constraintVal.resize(numConstraints,3);
RowVector4d cv;
for(int cur=0;cur<numConstraints;cur++){
cv = pad(pts[constraint[cur].col()]) * B.Aff[constraint[cur].row()];
mesh.constraintVal(cur,0) = cv[0];
mesh.constraintVal(cur,1) = cv[1];
mesh.constraintVal(cur,2) = cv[2];
}
// iterate to determine vertices position
for(int k=0;k<numIter;k++){
// solve ARAP
mesh.ARAPSolve(A);
// set new vertices position
new_pts.resize(numPts);
for(int i=0;i<numPts;i++){
new_pts[i][0]=mesh.Sol(i,0);
new_pts[i][1]=mesh.Sol(i,1);
new_pts[i][2]=mesh.Sol(i,2);
}
// if iteration continues
if(k+1<numIter || visualisationMode == VM_ENERGY){
std::vector<double> dummy_weight;
makeTetMatrix(tetMode, new_pts, mesh.tetList, faceList, edgeList, vertexList, Q, dummy_weight);
Matrix3d S,R,newS,newR;
if(blendMode == BM_AFF || blendMode == BM_LOG4 || blendMode == BM_LOG3){
for(int i=0;i<mesh.numTet;i++){
polarHigham(A[i].block(0,0,3,3), blendedS[i], blendedR[i]);
}
}
#pragma omp parallel for
for(int i=0;i<mesh.numTet;i++){
polarHigham((mesh.tetMatrixInverse[i]*Q[i]).block(0,0,3,3), newS, newR);
tetEnergy[i] = (newS-blendedS[i]).squaredNorm();
A[i].block(0,0,3,3) = blendedS[i]*newR;
// polarHigham((A[i].transpose()*PI[i]*Q[i]).block(0,0,3,3), newS, newR);
// A[i].block(0,0,3,3) *= newR;
}
}
}
for(int i=0;i<numPts;i++){
Mpts[i].x=mesh.Sol(i,0);
Mpts[i].y=mesh.Sol(i,1);
Mpts[i].z=mesh.Sol(i,2);
}
if(worldMode){
for(int i=0;i<numPts;i++)
Mpts[i] *= localToWorldMatrix.inverse();
}
itGeo.setAllPositions(Mpts);
// set vertex colour
if(visualisationMode != VM_OFF){
std::vector<double> ptsColour(numPts, 0.0);
if(visualisationMode == VM_ENERGY){
makePtsWeightList(tetMode, numPts, mesh.tetList, faceList, edgeList, vertexList, tetEnergy, ptsColour);
for(int i=0;i<numPts;i++){
ptsColour[i] *= visualisationMultiplier;
}
}else if(visualisationMode == VM_STIFFNESS){
makePtsWeightList(tetMode, numPts, mesh.tetList, faceList, edgeList, vertexList, mesh.tetWeight, ptsColour);
double maxval = *std::max_element(ptsColour.begin(), ptsColour.end());
for(int i=0;i<numPts;i++){
ptsColour[i] = 1.0 - ptsColour[i]/maxval;
}
}else if(visualisationMode == VM_CONSTRAINT){
for(int i=0;i<constraint.size();i++){
ptsColour[constraint[i].col()] += constraint[i].value();
}
}else if(visualisationMode == VM_EFFECT){
std:vector<double> wsum(mesh.numTet);
for(int j=0;j<mesh.numTet;j++){
//wsum[j] = std::accumulate(wr[j].begin(), wr[j].end(), 0.0);
wsum[j]= visualisationMultiplier * wr[j][numPrb-1];
}
makePtsWeightList(tetMode, numPts, mesh.tetList, faceList, edgeList, vertexList, wsum, ptsColour);
}
visualise(data, outputGeom, ptsColour);
}
return MS::kSuccess;
}
示例7: deform
MStatus inverseSkinCluster::deform(MDataBlock& data,
MItGeometry& itGeo,
const MMatrix& localToWorldMatrix,
unsigned int geomIndex)
{
MStatus status;
MMatrix geomMatrix;
bool updateSkinInfo;
MDataHandle hInMesh = data.inputValue( aInMesh, &status );
CHECK_MSTATUS_AND_RETURN_IT( status );
MObject oInMesh = hInMesh.asMesh();
if( oInMesh.isNull() )
return MS::kFailure;
MFnMesh inMesh = oInMesh;
inMesh.getPoints( m_meshPoints );
if( originalMeshUpdated )
{
itGeo.allPositions( pTaskData->basePoints );
originalMeshUpdated = false;
}
MDataHandle hGeomMatrix = data.inputValue( aGeomMatrix );
geomMatrix = hGeomMatrix.asMatrix();
MDataHandle hUpdateWeightList = data.inputValue( aUpdateWeightList );
updateSkinInfo = hUpdateWeightList.asBool();
MDataHandle hEnvelop = data.inputValue( envelope );
envelopValue = hEnvelop.asFloat();
pTaskData->envelop = envelopValue;
pTaskData->invEnv = 1.0f - envelopValue;
pTaskData->beforePoints = m_meshPoints;
if( updateSkinInfo )
{
MDataHandle hUpdateSkinInfoOutput = data.outputValue( aUpdateWeightList );
hUpdateSkinInfoOutput.set( false );
weightListUpdated = false;
}
if( logicalIndexArray.length() == 0 )
updateLogicalIndexArray();
MDataHandle hUpdateMatrix = data.inputValue( aUpdateMatrix );
if( hUpdateMatrix.asBool() )
{
matrixAttrUpdated = false;
matrixInfoUpdated = false;
}
MArrayDataHandle hArrMatrix = data.inputArrayValue( aMatrix );
MArrayDataHandle hArrBindPreMatrix = data.inputArrayValue( aBindPreMatrix );
updateMatrixAttribute( hArrMatrix, hArrBindPreMatrix );
if( !matrixInfoUpdated )
{
updateMatrixInfo( hArrMatrix, hArrBindPreMatrix );
}
if( !weightListUpdated )
{
pTaskData->afterPoints.setLength( m_meshPoints.length() );
pTaskData->envPoints.setLength( m_meshPoints.length() );
updateWeightList();
}
if( !matrixInfoUpdated || !weightListUpdated )
{
if( pSkinInfo->weightsArray.size() > 0 )
getWeightedMatrices( geomMatrix );
else
return MS::kFailure;
matrixInfoUpdated = true;
weightListUpdated = true;
}
if( envelopValue )
{
setThread();
MThreadPool::newParallelRegion( parallelCompute, pThread );
endThread();
itGeo.setAllPositions( pTaskData->envPoints );
}
else
{
itGeo.setAllPositions( pTaskData->basePoints );
}
return MS::kSuccess;
}