Тема: повернуть блок

Как реализовать команду "повернуть" в ARX. Необходимо получить повернутую копию блока

(изменено: Александр Ривилис, 25 января 2011г. 15:43:31)

Re: повернуть блок

Приблизительно так:

static void Rotate(void)
{
  double ang = 0;
  ads_point p;
  ads_name  ent;
  if (acedEntSel("\nВыберите примитив для вращения: ",ent,p) == RTNORM) {
    AcDbObjectId id; acdbGetObjectId(id,ent);
    AcDbObjectPointer<AcDbEntity> pEnt(id,AcDb::kForRead);
    if (pEnt.openStatus() == Acad::eOk)
    {
      AcGePoint3d p1,p2;
      if (acedGetPoint(NULL,"\nУкажите первую точку оси - базовую точку для поворота: ",asDblArray(p1)) == RTNORM &&
          acedGetPoint(asDblArray(p1),"\nУкажите вторую точку оси: ",asDblArray(p2)) == RTNORM &&
          acedGetAngle(asDblArray(p1),"\nУкажите угол поворота: ", &ang) == RTNORM) {
        if (pEnt->upgradeOpen() == Acad::eOk) {
          acdbUcs2Wcs(asDblArray(p1),asDblArray(p1),false);
          acdbUcs2Wcs(asDblArray(p2),asDblArray(p2),false);
          AcGeMatrix3d mat; mat.setToRotation(ang,p2-p1,p1);
          AcGeVector3d norm;
          AcDbDimension *pDim = AcDbDimension::cast(pEnt.object());
          if (pDim) norm = pDim->normal();
          pEnt->transformBy(mat);
          if (pDim) pDim->setNormal(norm);
        }
      }
    }
  }
}

Re: повернуть блок

Большое спасибо за помощь.