Тема: Kак реализовать команду MIRROR в ARX?
Привет всем!
Подскажите, как реализовать команду mirror в arx. Необходимо получить зеркальную копию блока.
Cпасибо.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → Kак реализовать команду MIRROR в ARX?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Привет всем!
Подскажите, как реализовать команду mirror в arx. Необходимо получить зеркальную копию блока.
Cпасибо.
> vaha
Как вариант воспользоваться методом transformBy класса примитива, предварительно правильно сформировав матрицу преобразования.
> Александр
Ривилис
Cпасибо за ответ. Не могу только разобраться, как сформировать матрицу. Мне необходимо повернуть объект по оси Y на 180 градусов.
> vaha
static void Mirror(void) { ads_point p; ads_name ent; if (acedEntSel("\nВыберите примитив для отзеркаливания: ",ent,p) == RTNORM) { AcDbObjectId id; acdbGetObjectId(id,ent); AcDbObjectPointer<AcDbEntity> pEnt(id,AcDb::kForWrite); if (pEnt.openStatus() == Acad::eOk) { AcGePoint3d p1,p2; if (acedGetPoint(NULL,"\nУкажите первую точку оси: ",asDblArray(p1)) && acedGetPoint(asDblArray(p1),"\nУкажите вторую точку оси: ",asDblArray(p2))) { acdbUcs2Wcs(asDblArray(p1),asDblArray(p1),false); acdbUcs2Wcs(asDblArray(p2),asDblArray(p2),false); AcGeMatrix3d mat; mat.setToMirroring(AcGeLine3d(p1,p2)); pEnt->transformBy(mat); } } } }
> vaha
Как же не помочь земляку! :)
> Александр
Ривилис
Код работает. Только, если применить к объекту класса-размера, то текст размера переворачиватся. Как этого можно избежать?
Заранее спасибо
Киев ? :)
Именно! :)
Попробуй этот код:
static void Mirror(void) { ads_point p; ads_name ent; if (acedEntSel("\nВыберите примитив для отзеркаливания: ",ent,p) == RTNORM) { AcDbObjectId id; acdbGetObjectId(id,ent); AcDbObjectPointer<AcDbEntity> pEnt(id,AcDb::kForWrite); if (pEnt.openStatus() == Acad::eOk) { AcGePoint3d p1,p2; if (acedGetPoint(NULL,"\nУкажите первую точку оси: ",asDblArray(p1)) && acedGetPoint(asDblArray(p1),"\nУкажите вторую точку оси: ",asDblArray(p2))) { acdbUcs2Wcs(asDblArray(p1),asDblArray(p1),false); acdbUcs2Wcs(asDblArray(p2),asDblArray(p2),false); AcGeMatrix3d mat; mat.setToMirroring(AcGeLine3d(p1,p2)); AcGeVector3d norm; AcDbDimension *pDim = AcDbDimension::cast(pEnt.object()); if (pDim) norm = pDim->normal(); pEnt->transformBy(mat); if (pDim) pDim->setNormal(norm); } } } }
Привет всем!
Подскажите, как реализовать команду "повернуть" в arx. Необходимо получить повернутую копию блока.
Cпасибо.
Ответ здесь: https://www.caduser.ru/forum/topic29806.html
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → Kак реализовать команду MIRROR в ARX?
Форум работает на PunBB, при поддержке Informer Technologies, Inc