hi all,
I have duplicated shape using MEL duplicate see (duplicated_2mlg_sphere.gif - graph is looking like this), then filled in new geometry using MFnMesh::createInPlace and I got gray sphere - material assignment get lost, however connections remain.
how I can set-up material assignment for polygones?
I belive I need to set up plug values of shape.
instObjGroups
objectGroups
objectGrpCompList
objectGroupId
but I got crach when trying to pass object into objectGrpCompList plug, using MPlug::setValue, can you look at my code below what is wrong here?
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
MFnMesh outFn(inPlace);
stat = outFn.createInPlace(va.length(),fc.length(),va,fc,fv);
if(stat != MStatus::kSuccess)
MGlobal::displayError("MLMorphTarget: failed to create mesh\n");
///////////////////////// assign group ids to components ////////////
//MObject inGeom = in.data();
if(!inGeom.isNull())
{
MFnGeometryData inDataFn(inGeom);
if(inDataFn.objectGroupCount() > 0)
{
.....
{
int np = outFn.numPolygons();
MFnDependencyNode dFn(inPlace);
MObject ogA = dFn.attribute("objectGroups",&stat);
if(ogA.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError("MLMorphTarget: can not find 'objectGroups' attribute.");
return;
}
MObject gclA = dFn.attribute("objectGrpCompList",&stat);
if(gclA.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError("MLMorphTarget: can not find 'objectGrpCompList' attribute.");
return;
}
MObject gidA = dFn.attribute("objectGroupId",&stat);
if(gidA.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError("MLMorphTarget: can not find 'objectGrops' attribute.");
return;
}
MPlug iog = dFn.findPlug(MPxSurfaceShape::instObjGroups,&stat);
if(iog.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError("MLMorphTarget: can not find 'instObjGroups' plug.");
return;
}
MPlug iog0 = iog.elementByLogicalIndex(0);
if(iog0.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError("MLMorphTarget: can not find 'instObjGroups[0]' plug.");
return;
}
MPlug og = iog0.child(ogA,&stat);
if(og.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError("MLMorphTarget: can not find 'instObjGroups[0].objectGroups' plug.");
return;
}
for(unsigned int oo = 0; oo < inDataFn.objectGroupCount(); oo++)
{
MPlug ogOO = og.elementByLogicalIndex(oo,&stat);
if(ogOO.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError(MString("MLMorphTarget: can not find 'instObjGroups[0].objectGroups[") + oo + MString("]' plug."));
return;
}
unsigned int grId = inDataFn.objectGroup(oo,&stat);
if(stat == MStatus::kSuccess)
{
MFn::Type grType = inDataFn.objectGroupType(grId);
if(grType == MFn::kMeshPolygonComponent)
{
MObject comp = inDataFn.objectGroupComponent(grId,&stat);
if(stat == MStatus::kSuccess && !comp.isNull())
{
if(comp.hasFn(MFn::kSingleIndexedComponent))
{
MFnSingleIndexedComponent compFn(comp);
if(compFn.elementCount() > 0)
{
MIntArray inComps;
stat = compFn.getElements(inComps);
if(stat == MStatus::kSuccess && inComps.length() > 0)
{
#ifdef _DEBUG
MGlobal::displayInfo(MString("in groupId: ")+grId+" comps: "+inComps.length());
#endif
MPlug gcl = ogOO.child(gclA,&stat);
if(gcl.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError(MString("MLMorphTarget: can not find 'instObjGroups[0].objectGroups[") + oo + MString("].objectGrpCompList' plug."));
return;
}
MPlug gid = ogOO.child(gidA,&stat);
if(gid.isNull() || stat != MStatus::kSuccess)
{
MGlobal::displayError(MString("MLMorphTarget: can not find 'instObjGroups[0].objectGroups[") + oo + MString("].objectGroupId' plug."));
return;
}
MGlobal::displayInfo(gid.name());
MGlobal::displayInfo(gcl.name()); //names are ok
if(outlvl == 0)
{
MFnSingleIndexedComponent outCompFn;
MObject outComp = outCompFn.create(MFn::kMeshPolygonComponent,&stat);
if(stat == MStatus::kSuccess && !outComp.isNull())
{
stat = outCompFn.addElements(inComps);
if(stat == MStatus::kSuccess)
{
gid.setValue((int) grId);
MObject outCO = outCompFn.object();
gcl.setValue(outCO); //crash
