Hello,
I am trying to create a deformer plugin that will work on splines by modifying the positions of the points.
Using the code below I am getting the points from a spline and offsetting its position along the Z axis as a simple test.
Bool DeformPlugin::ModifyObject(BaseObject* mod, BaseDocument* doc, BaseObject* op, const Matrix& op_mg, const Matrix& mod_mg, Float lod, Int32 flags, BaseThread* thread)
{
// Check the input parameters validity.
if (!mod || !op || !doc)
return false;
// Retrieve BaseContainer instance pointer and check for validity
BaseContainer* bc = mod->GetDataInstance();
if (!bc)
return false;
// Verify the modifier inherits from PointObject and cast the pointer to the corresponding PointObject.
if (!mod->IsInstanceOf(Opoint))
return false;
// Verify the modified object inherits from PointObject and cast the pointer to the corresponding PointObject.
if (!op->IsInstanceOf(Opoint))
return true;
SplineObject *opSplineObj = static_cast<SplineObject*>(op);
iferr(MovePoints(opSplineObj, modPointObj))
{
return false;
}
return true;
}
maxon::Result<void> DeformPlugin::MovePoints(SplineObject* opSplineObj, PointObject* modPointObj)
{
if (!opSplineObj)
return maxon::OK;
const Vector* opPointsR = opSplineObj->GetPointR();
const Int32 opPointsCnt = opSplineObj->GetPointCount();
Vector* opPointsW = opSplineObj->GetPointW();
if (!opPointsCnt)
return maxon::OK;
for (Int32 opPointIdx = 0; opPointIdx < opPointsCnt; opPointIdx++)
{
opPointsW[opPointIdx] = opPointsR[opPointIdx];
opPointsW[opPointIdx].z = opPointsR[opPointIdx].z + 20;
}
return maxon::OK;
}
The code is working to properly move the points, the problem is that I am getting the line points of the spline that I am deforming when I am trying to get the spline points.
This is the selection of points I am getting.
This is the selection of points I want to get.
I tried using the base SDK examples and they are also using the line points instead of the spline points.
Is there a way to get and use the spline points or do deformers only utilize the line points?
Any help would be greatly appreciated.
John Thomas