Создание штриховки и установка её масштаба
Вопрос:
Как можно создать штриховку и установить ей масштаб? Я написал функцию, которая создаёт штриховку. Но я обратил внимание, что она не в состоянии назначить масштаб штриховки и мне приходится это делать вручную. Почему это происходит?
Ответ:
Причина может быть в том, что вызов метода setPatternScale() происходит не в тот момент, когда это следует делать. Обратите внимание, что вы должны установить свойства штриховки, такие как угол, масштаб, ассоциативность и имя штриховки сразу же после создания AcDbHatch. После добавления границ штриховки вы можете установить другие свойства, такие как слой, цвет, стиль штриховки и т.д. Затем следует вызвать метод evaluateHatch() чтобы штриховка правильно отобразилась на экране. И после этого штриховку следует добавить к базе чертежа AutoCAD и закрыть. Следующий код показывает как это следует делать. Более детальную информацию можно найти в ObjectARX документации для класса AcDbHatch.
- #define AOK(es) if(es != Acad::eOk) throw es;
- void createHatch(void)
- {
- AcDbObjectId objId;
- AcDbEntity* pEnt;
- ads_name ent;
- ads_point point;
- if (RTNORM !=
- acedEntSel(_T("Выберите примитив для штриховки: "),
- ent,
- point))
- return;
- assert(objId.setFromOldId(ent[0]));
- AOK( acdbOpenObject(pEnt,objId,AcDb::kForRead) );
- AcDbHatch *pHatch = new AcDbHatch;
- assert(pHatch);
- try
- {
- AcDbBlockTableRecordPointer pBtr(
- ACDB_MODEL_SPACE,
- curDoc()->database(),
- AcDb::kForWrite);
- AOK(pBtr.openStatus());
- AOK(pHatch->setPatternAngle(0));
- AOK(pHatch->setPatternScale(10));
- AOK(pHatch->setAssociative(Adesk::kFalse));
- AOK(pHatch->setPattern(AcDbHatch::kPreDefined,
- _T("ANSI32")));
- // Добавляем границу к штриховке
- AcDbObjectIdArray dbObjIds;
- int objNum =
- dbObjIds.append(pEnt->objectId());
- acutPrintf(_T("\nЧисло объектов: %d."), objNum);
- AOK(pHatch->appendLoop(AcDbHatch::kExternal,
- dbObjIds));
- AOK(pHatch->setLayer(pEnt->layer()));
- AOK(pHatch->setColorIndex(256));
- // цвет послою
- AOK(pHatch->setHatchStyle(AcDbHatch::kNormal));
- AOK(pHatch->evaluateHatch());
- AOK(pBtr->appendAcDbEntity(pHatch));
- AOK(pHatch->close());
- }
- catch (const Acad::ErrorStatus es)
- {
- acutPrintf(_T("Error: %s"),
- acadErrorStatusText(es));
- delete pHatch;
- }
- }
Источник: 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