Тема: Kак реализовать команду MIRROR в ARX?

Привет всем!
Подскажите, как реализовать команду mirror в arx. Необходимо получить зеркальную копию блока.
Cпасибо.

Re: Kак реализовать команду MIRROR в ARX?

> vaha
Как вариант воспользоваться методом transformBy класса примитива, предварительно правильно сформировав матрицу преобразования.

Re: Kак реализовать команду MIRROR в ARX?

> Александр
Ривилис
Cпасибо за ответ. Не могу только разобраться, как сформировать матрицу. Мне необходимо повернуть объект по оси Y на 180 градусов.

Re: Kак реализовать команду MIRROR в ARX?

> 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);
      }
    }
  }
}

Re: Kак реализовать команду MIRROR в ARX?

> Александр
Ривилис
СПАСИБО !!!

Re: Kак реализовать команду MIRROR в ARX?

> vaha
Как же не помочь земляку! :)

Re: Kак реализовать команду MIRROR в ARX?

> Александр
Ривилис
Киев ?  :)

Re: Kак реализовать команду MIRROR в ARX?

> Александр
Ривилис
Код работает. Только, если применить к объекту класса-размера, то текст размера переворачиватся. Как этого можно избежать?
Заранее спасибо

Re: Kак реализовать команду MIRROR в ARX?

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);
      }
    }
  }
}

Re: Kак реализовать команду MIRROR в ARX?

Cпасибо ! все работает

Re: Kак реализовать команду MIRROR в ARX?

Привет всем!
Подскажите, как реализовать команду "повернуть" в arx. Необходимо получить повернутую копию блока.
Cпасибо.

Re: Kак реализовать команду MIRROR в ARX?

Ответ здесь: https://www.caduser.ru/forum/topic29806.html