ADN Open CIS
Сообщество программистов Autodesk в СНГ

27/07/2018

Создание штриховки и установка её масштаба

Вопрос:

Как можно создать штриховку и установить ей масштаб? Я написал функцию, которая создаёт штриховку. Но я обратил внимание, что она не в состоянии назначить масштаб штриховки и мне приходится это делать вручную. Почему это происходит?

Ответ:

Причина может быть в том, что вызов метода setPatternScale() происходит не в тот момент, когда это следует делать. Обратите внимание, что вы должны установить свойства штриховки, такие как угол, масштаб, ассоциативность и имя штриховки сразу же после создания AcDbHatch. После добавления границ штриховки вы можете установить другие свойства, такие как слой, цвет, стиль штриховки и т.д. Затем следует вызвать метод evaluateHatch() чтобы штриховка правильно отобразилась на экране. И после этого штриховку следует добавить к базе чертежа AutoCAD и закрыть. Следующий код показывает как это следует делать. Более детальную информацию можно найти в ObjectARX документации для класса AcDbHatch.

 

Код - C++: [Выделить]
  1. #define AOK(es) if(es != Acad::eOk) throw es;
  2. void createHatch(void)
  3. {    
  4.     AcDbObjectId objId;
  5.       AcDbEntity* pEnt; 
  6.       ads_name ent;
  7.       ads_point point; 
  8.       if (RTNORM !=
  9.           acedEntSel(_T("Выберите примитив для штриховки: "),
  10.           ent,
  11.           point))  
  12.            return;  
  13.       assert(objId.setFromOldId(ent[0]));  
  14.       AOK( acdbOpenObject(pEnt,objId,AcDb::kForRead) );
  15.       AcDbHatch *pHatch = new AcDbHatch;  
  16.       assert(pHatch); 
  17.       try 
  18.       {   
  19.            AcDbBlockTableRecordPointer pBtr(
  20.                ACDB_MODEL_SPACE,
  21.                curDoc()->database(),
  22.                AcDb::kForWrite);   
  23.            AOK(pBtr.openStatus());    
  24.            AOK(pHatch->setPatternAngle(0));  
  25.            AOK(pHatch->setPatternScale(10)); 
  26.            AOK(pHatch->setAssociative(Adesk::kFalse));
  27.            AOK(pHatch->setPattern(AcDbHatch::kPreDefined,
  28.                _T("ANSI32")));
  29.            // Добавляем границу к штриховке   
  30.            AcDbObjectIdArray dbObjIds; 
  31.            int objNum =
  32.                dbObjIds.append(pEnt->objectId());
  33.            acutPrintf(_T("\nЧисло объектов: %d."), objNum);   
  34.            AOK(pHatch->appendLoop(AcDbHatch::kExternal,
  35.                dbObjIds));    
  36.            AOK(pHatch->setLayer(pEnt->layer()));     
  37.            AOK(pHatch->setColorIndex(256));  
  38.            // цвет послою      
  39.            AOK(pHatch->setHatchStyle(AcDbHatch::kNormal));   
  40.            AOK(pHatch->evaluateHatch()); 
  41.            AOK(pBtr->appendAcDbEntity(pHatch));  
  42.            AOK(pHatch->close());  
  43.       } 
  44.       catch (const Acad::ErrorStatus es) 
  45.       {     
  46.            acutPrintf(_T("Error: %s"),
  47.                acadErrorStatusText(es)); 
  48.            delete pHatch; 
  49.       }
  50. }

Источник: http://adndevblog.typepad.com/autocad/2013/01/create-a-hatch-object-and-set-its-scale.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 27.07.2018
Отредактировано 27.07.2018 в 02:13:06