AddJoint, SetWeight crash

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 12/10/2010 at 00:50, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   R12 
Platform:   Windows  ;   
Language(s) :     C++  ;

---------
Under what circumstances would AddJoint() from CAWeightTag return -1 for the joint index?
I use the following code after I have allocated and added all joint objects to the document. 
All joint object pointers are valid.

  
CAWeightTag* tag = CAWeightTag::Alloc();  
for(i=0; i < num_joints; i++) {  
   LONG joint_index = tag->AddJoint( joints[i].ob ); // returns -1 ???  
}  
pPoly->InsertTag( tag, NULL );  

Then later, calling tag->SetWeight( joint_index, vindex, weight ); will crash the program from passing -1 as joint_index.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 12/10/2010 at 02:31, xxxxxxxx wrote:

It seems that you have first to insert the tag before inserting the joints.

little example:

  
void StepThru(BaseObject *op, CAWeightTag *tag)  
{  
  while (op && tag)  
  {  
      if (op->GetType() == Ojoint)  
      {  
          tag->AddJoint(op);  
          tag->Message(MSG_UPDATE);  
      }  
  
      StepThru(op->GetDown(), tag);  
      op = op->GetNext();  
  }  
}  
  
Bool MenuTest::Execute(BaseDocument *doc)  
{  
  BaseObject *op = doc->GetActiveObject();  
  if (!op) return FALSE;  
  
  CAWeightTag *tag = CAWeightTag::Alloc();  
  if (!tag) return FALSE;  
        
  op->InsertTag(tag);  
  
  op->Message(MSG_UPDATE);  
  EventAdd();  
  
  StepThru(doc->GetFirstObject(), (CAWeightTag* )tag);  
  
  return TRUE;  
}  

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 12/10/2010 at 10:26, xxxxxxxx wrote:

Great, got it working!  Thanks.