0030232: Visualization, StdPrs_BndBox - support Bnd_OBB in addition to Bnd_Box
[occt.git] / src / StdPrs / StdPrs_BndBox.cxx
index 3c1cf15..cbe3f20 100644 (file)
 
 #include <StdPrs_BndBox.hxx>
 
-#include <Aspect_TypeOfLine.hxx>
-#include <Graphic3d_AspectLine3d.hxx>
-#include <Graphic3d_ArrayOfPolylines.hxx>
 #include <Prs3d_LineAspect.hxx>
-#include <Quantity_Color.hxx>
-
-namespace
-{
-  static const Standard_Integer THE_INDICES[][3] =
-  { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 0, 1 }, { 0, 0, 1 },
-    { 0, 1, 1 }, { 1, 1, 1 }, { 1, 1, 0 }, { 0, 1, 0 },
-    { 0, 0, 0 }, { 0, 0, 1 }, { 1, 0, 1 }, { 1, 1, 1 },
-    { 0, 1, 1 }, { 0, 1, 0 }, { 1, 1, 0 }, { 1, 0, 0 } };
-}
 
 //=======================================================================
 //function : Add
@@ -38,25 +25,30 @@ void StdPrs_BndBox::Add (const Handle(Prs3d_Presentation)& thePresentation,
                          const Bnd_Box&                    theBndBox,
                          const Handle(Prs3d_Drawer)&       theDrawer)
 {
-  if (theBndBox.IsVoid())
+  if (!theBndBox.IsVoid())
   {
-    return;
+    Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
+    aGroup->SetGroupPrimitivesAspect (new Graphic3d_AspectLine3d (theDrawer->LineAspect()->Aspect()->Color(),
+                                                                  Aspect_TOL_DOTDASH,
+                                                                  theDrawer->LineAspect()->Aspect()->Width()));
+    aGroup->AddPrimitiveArray (FillSegments (theBndBox));
   }
+}
 
-  Standard_Real X[2], Y[2], Z[2];
-  theBndBox.Get (X[0], Y[0], Z[0], X[1], Y[1], Z[1]);
-
-  Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
-  Quantity_Color aColor = theDrawer->LineAspect()->Aspect()->Color();
-  Standard_Real  aWidth = theDrawer->LineAspect()->Aspect()->Width();
-  aGroup->SetGroupPrimitivesAspect (new Graphic3d_AspectLine3d (aColor, Aspect_TOL_DOTDASH, aWidth));
-
-  Handle(Graphic3d_ArrayOfPolylines) aPolyline = new Graphic3d_ArrayOfPolylines(16);
-  for(Standard_Integer aVertIter = 0; aVertIter < 16; ++aVertIter)
+//=======================================================================
+//function : Add
+//purpose  :
+//=======================================================================
+void StdPrs_BndBox::Add (const Handle(Prs3d_Presentation)& thePresentation,
+                         const Bnd_OBB&                    theBndBox,
+                         const Handle(Prs3d_Drawer)&       theDrawer)
+{
+  if (!theBndBox.IsVoid())
   {
-    aPolyline->AddVertex (X[THE_INDICES[aVertIter][0]],
-                          Y[THE_INDICES[aVertIter][1]],
-                          Z[THE_INDICES[aVertIter][2]]);
+    Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
+    aGroup->SetGroupPrimitivesAspect (new Graphic3d_AspectLine3d (theDrawer->LineAspect()->Aspect()->Color(),
+                                                                  Aspect_TOL_DOTDASH,
+                                                                  theDrawer->LineAspect()->Aspect()->Width()));
+    aGroup->AddPrimitiveArray (FillSegments (theBndBox));
   }
-  aGroup->AddPrimitiveArray (aPolyline);
 }