WorkAxis constraints

Top  Previous  Next

To constrain two axes together programatically you can use this function:

 

bool AddMateConstraintOfTwoWorkAxisProxies (CComPtr<AssemblyComponentDefinition>& pAsmCompDef,

                                           CComPtr<WorkAxisProxy>& pWAProxyA,

                                           CComPtr<WorkAxisProxy>& pWAProxyB,

                                           const double kRadiusMm /*=0.0*/)

{

   // Get the list of constraints of the assembly so you can add a new one

   CComPtr<AssemblyConstraints> pConstraintList = nullptr ;

   HRESULT hRes = pAsmCompDef->get_Constraints(&pConstraintList) ;

   if (FAILED(hRes) || (pConstraintList == nullptr)) {

       ShowCOMError (hRes,L"AddMateConstraintOfTwoWorkAxisProxies could not get constraints.") ;

       return false ;

   }

 

   // The offset in a axis constraint is a radius about which the axes

   // can rotate. Having a non zero one means a bit more flexiblity.

   CComVariant varOffset(kRadiusMm/10.0); // in cm

 

   CComPtr<MateConstraint> pMateConstraint  = nullptr ;  

   hRes = pConstraintList->AddMateConstraint(pWAProxyA, pWAProxyB,

                                             varOffset,

                                             kNoInference,

                                             kNoInference,

                                             gkvarEmpty, gkvarEmpty,

                                             &pMateConstraint);

   if ((FAILED(hRes) || (pMateConstraint == nullptr))) {

       ShowCOMError (hRes,L"AddMateConstraintOfTwoWorkAxisProxies failed") ;

       return false ;

   }

 

   return true ;

}

 

Explanation of kRadiusMm here.

 

Text, images and diagrams © 2021 Owen F. Ransen. All rights reserved. (But copy the source code as much as you want!)