Тема: Создание штриховок UserDefined

Не подскажет ли кто - как создавать вручную штриховки. Нигде в документации ничего подобного не нашел, не нашел также в примерах. Максимум, до чего додудмался, что после оздания AcDbHatch требуется создать AcDbLinetypeTableRecord и занести её в AcDbLinetypeTable. В AcDbLinetypeTableRecord необходимо до этого занести графические примитивы - dash, но как их туда заносить - непонятно. Буду признателен за любую информацию. А может кто приведет пример создания штриховки. Заранее благодарен.

Re: Создание штриховок UserDefined

віавіа

Re: Создание штриховок UserDefined

AcDbObjectId makeFill(    AcDbObjectIdArray objIds, // контура
                char * patternName, // имя
                double patternAngle, // угол поворота
                double patternScale, // масштаб
                const char* Layer, // слой
                Adesk::UInt16 Color // цвет
                     )
{
    AcDbObjectId hatchId;
    if(objIds == NULL) return NULL;
    AcDbHatch* pHatch = new AcDbHatch();
    AcGeVector3d normal(0.0, 0.0, 1.0);
    pHatch->setNormal(normal);
    pHatch->setElevation(0.0);
    pHatch->setAssociative(Adesk::kFalse);
    pHatch->setPattern(AcDbHatch::kPreDefined, patternName);
    pHatch->setHatchStyle(AcDbHatch::kNormal);
    if (strcmp(patternName,"SOLID") != 0)
    {
        pHatch->setPatternAngle(patternAngle);
        pHatch->setPatternScale(patternScale);
    }
    AcDbObjectIdArray Ids;
    Ids.setLogicalLength(1);
    for (int i = 0; i < objIds.length(); i++)
    {
        Ids[0] = objIds[i];
        pHatch->appendLoop(AcDbHatch::kDefault, Ids);
    }
    pHatch->setColorIndex(Color);
    if ( Layer != NULL ) pHatch->setLayer(Layer);
    pHatch->evaluateHatch();
      postToDatabase(pHatch, hatchId);
    
    pHatch->upgradeOpen();
    pHatch->draw();
      pHatch->close();
    return hatchId;
}

AcDbObjectIdArray objIds - это массив замкрутых контуров, которые образубт штриховку с островками. Если надо просто заштриховать контур, то в него впиши ID этого контура. Функция вроде рабочая. Но если найдешь ошибки напиши, плиз.
Еще есть функция postToDatabase. Выглядит она так:

Acad::ErrorStatus postToDatabase(AcDbEntity* pEnt,AcDbObjectId& idObj)
{
    Acad::ErrorStatus es;
    AcDbBlockTable * pBlockTable;
    AcDbBlockTableRecord * pSpaceRecord;
    if (acdbCurDwg()==NULL) return Acad::eNoDatabase;
    if ((es = acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead))==Acad::eOk)
    {
        if ((es = pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord, AcDb::kForWrite))==Acad::eOk)
        {
            if ((es = pSpaceRecord->appendAcDbEntity(idObj, pEnt))==Acad::eOk)pEnt->close();
            pSpaceRecord->close();
        }
        pBlockTable->close();
    }
    return es;
}

Кстати, эта тема уже обсуждалась. Если этого не достаточно, внимательно просмотри форум

Re: Создание штриховок UserDefined

> Николай
:) Этот вопрос был задан почти три года назад!

Re: Создание штриховок UserDefined

:) Не обратил внимания на дату. Он был одним из первых на странице с глупым ответом. Просто не люблю глупых ответов. Вот и решил помочь :)