Тема: Градиентная заливка объекта

Доброго всем дня.
Решила попробовать градиентную заливку AcDbHatch, но к сожалению ни примеров ни статей не нашла.
Предложите, пожалуйста, маленький пример (можно просто фрагмент кода), как правильно создать градиентную заливку.

Re: Градиентная заливка объекта

Вот пример создания такой штриховки:

    AcDbObjectId objId;
    AcDbCircle* pCircle = new AcDbCircle( AcGePoint3d::kOrigin, AcGeVector3d::kZAxis, 1.0);
    cmnAcadDB::addToModelSpace( pCircle, objId );

    AcDbObjectIdArray dbObjIds;
    dbObjIds.append( objId );

    AcDbHatch* pHatch = new AcDbHatch;
    pHatch->setHatchObjectType( AcDbHatch::kGradientObject );
    if( pHatch->setGradient( AcDbHatch::kPreDefinedGradient, _T("LINEAR") ) != Acad::eOk){
        acutPrintf( _T("\nError in setGradient!") );
        return;
    }

    const int nCount = 2;
    AcCmColor colors[nCount];
    colors[0].setColorIndex( 1 );
    colors[1].setColorIndex( 255 );
    float values[nCount] = {0.0, 1.0};

    if( pHatch->setGradientColors( nCount, &colors[0], &values[0] ) != Acad::eOk){
        acutPrintf( _T("\nError in setGradientColors!") );
        return;
    }
    
    if( pHatch->appendLoop( AcDbHatch::kExternal, dbObjIds ) != Acad::eOk ){
        acutPrintf( _T("\nError in appendLoop!") );
        return;
    }

    pHatch->evaluateHatch(true);

    cmnAcadDB::addToModelSpace( pHatch, AcDbObjectId() );

Re: Градиентная заливка объекта

Мой вариант. Дополнительно добавляет ассоциативность.

static void ADDGRADHATCH(void)
{
  ads_name ss;
  AcDbObjectIdArray ids;
  TCHAR* promptPtrs[] = { _T("\nВыберите объекты для штриховки: "), _T("\nУдалите из выбранного: ") };
  if (acedSSGet(_T(":$"),promptPtrs,NULL,NULL,ss) != RTNORM) return;
  acedGetCurrentSelectionSet(ids); acedSSFree(ss);
  if (ids.length() == 0) return;
  Acad::ErrorStatus es = Acad::eOk;
  AcDbHatch *pHatch = new AcDbHatch();
  pHatch->setDatabaseDefaults();
  pHatch->setHatchObjectType(AcDbHatch::kGradientObject);
  pHatch->setAssociative(true);
  for (int i = 0; i < ids.length(); i++) {
    AcDbObjectIdArray ids1; ids1.append(ids[i]);
    pHatch->appendLoop(AcDbHatch::kDefault,ids1);
  }
  pHatch->setGradient(AcDbHatch::kPreDefinedGradient,_T("LINEAR"));
  AcCmColor colors[2];  
  colors[0].setRGB(255,0,0); colors[1].setRGB(0,255,0);
  float ff[2] = {0.0, 1.0};
  pHatch->setGradientColors(2,colors,ff);
  pHatch->evaluateHatch();
  ids.setLogicalLength(0);
  pHatch->getAssocObjIds(ids);
  AcDbObjectId idHatch = postToDwgAndCloseWithId(pHatch);
  // Добавляем ассоциативность
  if (!idHatch.isNull() && ids.length() > 0) {
    for (int i = 0; i < ids.length(); i++)  {
      AcDbEntityPointer pEnt(ids[i],AcDb::kForWrite);
      if (pEnt.openStatus() == Acad::eOk) {
        pEnt->addPersistentReactor(idHatch);
      }
    }
  }
}