橡皮 发表于 2025-5-23 14:13:48

绘制曲线两种矩形包围盒(aabb, obb)



static void TaoDemoGetMinRectangle()
{
    AcDbObjectIdArray polyIdArray;
    if(CPromptSelectEx::PromptSelectEnts(L"\n请拾取曲线:", AcDbCurve::desc(), polyIdArray, true))
    {
      AcDbCurve* pCurve = NULL;
      AcGeCurve3d * pGeCurve = NULL;
      AcGePoint3d base;
      AcGeVector3d dir1, dir2, dir3;
      AcGePoint3dArray ptArray;
      ptArray.setLogicalLength(4);
      for (const auto& id : polyIdArray)
      {
      if (Acad::eOk == acdbOpenObject(pCurve, id, AcDb::kForRead))
      {
         
          if(Acad::eOk == pCurve->getAcGeCurve(pGeCurve))
          {
            auto obb = pGeCurve->boundBlock();

            obb.get(base, dir1, dir2, dir3);
            ptArray = base;
            ptArray = base + dir1;
            ptArray = base + dir2 + dir1;
            ptArray = base + dir2;
            CDbPolylineEx::Add3dPolyline(ptArray, AcDb::k3dSimplePoly, true, 1);

            auto aabb = pGeCurve->orthoBoundBlock();

            aabb.get(base, dir1, dir2, dir3);
            ptArray = base;
            ptArray = base + dir1;
            ptArray = base + dir2 + dir1;
            ptArray = base + dir2;
            CDbPolylineEx::Add3dPolyline(ptArray, AcDb::k3dSimplePoly, true, 2);

          }

          pCurve->close();
      }
      }
    }
}
页: [1]
查看完整版本: 绘制曲线两种矩形包围盒(aabb, obb)