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

ADN Club => ObjectARX => Тема начата: Debalance от 27-05-2018, 20:24:42

Название: AcDbWipeout: проблема с ориентацией.
Отправлено: Debalance от 27-05-2018, 20:24:42
Пытаюсь по координатам замкнутой полилинии создать вайпаут. В результате получаю странное перевёрнуто-смещённое отображение последнего.
Вот тестовый код:
Код - C++ [Выбрать]
  1. AcDbPolyline* TmpPolyline = new AcDbPolyline(3);
  2. TmpPolyline->addVertexAt(0, AcGePoint2d::kOrigin);
  3. TmpPolyline->addVertexAt(1, AcGePoint2d(0.0, 50.0));
  4. TmpPolyline->addVertexAt(2, AcGePoint2d(70.0, 0.0));
  5. TmpPolyline->setNormal(AcGeVector3d::kZAxis);
  6. TmpPolyline->setClosed(Adesk::kTrue);
  7. TmpPolyline->setColorIndex(1);
  8. AddEntityToBtr(ModelSpaceId, TmpPolyline);
  9.  
  10. Acad::ErrorStatus es = AcDbWipeout::createImageDefinition();
  11. if (es == Acad::eOk)
  12. {
  13.         AcDbWipeout *TmpWipe = new AcDbWipeout();
  14.         TmpWipe->setDatabaseDefaults();
  15.  
  16.         AcGePoint2dArray VertexArray;
  17.         VertexArray.setLogicalLength(TmpPolyline->numVerts());
  18.         for (int i = 0; i < TmpPolyline->numVerts(); i++)
  19.         {
  20.                 AcGePoint2d TmpPt;
  21.                 TmpPolyline->getPointAt(i, TmpPt);
  22.                 VertexArray.setAt(i, TmpPt);
  23.         }
  24.         VertexArray.append(VertexArray.at(0));
  25.  
  26.         if (TmpWipe->setClipBoundary(AcDbRasterImage::kPoly, VertexArray) == Acad::eOk)
  27.         {
  28.                 TmpWipe->setColorIndex(2);
  29.                 AddEntityToBtr(ModelSpaceId, TmpWipe);
  30.         }
  31. }
  32. else
  33. {
  34.         OutputDebugStringA((boost::format("\nError: <%d>") % es).str().c_str());
  35. }
  36.  

На выходе имеем такую картину:
(https://farm1.staticflickr.com/889/27520004487_8e4c6f85bc_o.png)

Как с этим бороться? Как сориентировать?

Название: Re: AcDbWipeout: проблема с ориентацией.
Отправлено: Debalance от 28-05-2018, 14:32:49
Код - C++ [Выбрать]
  1. TmpWipe->setOrientation(AcGePoint3d::kOrigin + AcGeVector3d(-0.5, 0.5, 0.0), AcGeVector3d::kXAxis, AcGeVector3d(AcGeVector3d::kYAxis).negate());