Suppression and Unsuppression of features

Top  Previous  Next

To suppress and unsuppress features in a part simply use the feature's suppression boolean:


   pFeature->put_Suppressed(true) ;


(Suppression of parts in an assembly has a different use).


Here is a function which will suppress a named part in a PartComponentDefinition:


void SetSuppressPartFeatureByName (CComPtr<PartComponentDefinition>& pPartCompDef,

                                  const wchar_t* const pszName,

                                  const bool bSuppress)


   TRACE (L"SetSuppressPartFeatureByName %s, %d\n",pszName,bSuppress) ;


   // Get the list of features...

   CComPtr<PartFeatures> pFeaturesList ;

   HRESULT hRes = pPartCompDef->get_Features(&pFeaturesList) ;

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

       ShowCOMError(hRes,L"SetSuppressPartFeatureByName get_Features failed");

       return ;



   const long ikNumFeats = pFeaturesList->GetCount() ;


   TRACE (L"    There are %d pattern features\n",ikNumFeats) ;


   bool bDone = false ;


   for (long iFeat = 1 ; iFeat <= ikNumFeats ; iFeat++) {

       CComPtr<PartFeature> pFeature ;

       hRes = pFeaturesList->get_Item (CComVariant(iFeat),&pFeature) ;

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

           ShowCOMError(hRes,L"SetSuppressPartFeatureByName get_Item failed");

           return ;



       BSTR bstrName ;

       pFeature->get_Name (&bstrName) ;


       if (_wcsicmp (bstrName,pszName) == 0) {

           if (bSuppress) {

               pFeature->put_Suppressed (VARIANT_TRUE) ;

               TRACE (L"Found Feature %d called %s to be suppressed\n",iFeat,bstrName)  ;


           } else {

               pFeature->put_Suppressed (VARIANT_FALSE) ;

               TRACE (L"Found Feature %d called %s to be unsuppressed\n",iFeat,bstrName)  ;


           bDone = true ;



       ::SysFreeString (bstrName) ;


       if (bDone) {

           break ;




   if (!bDone) {

       TRACE (L"Could not suppress feature by name with name = <%s>\n",pszName) ;




Within a single RectangularPattern (or any other pattern) you can use this fragment as a starting point.


In some circumstances Suppressed=VARIANT_FALSE will crash while put_Suppressed (VARIANT_FALSE) will not. A mystery wrapped inside an enigma. I always use put_Suppressed.


Note that you'll need to call Update to refresh the display:


   pPartDocument->Update () ; // Like an AutoCAD regen


You cannot suppress all types of objects. You cannot, for example, suppress workpoints.



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