--------------------------------
Mars 1992 : NW,JPB,CAL ; Creation.
04-02-97 : FMN ; Suppression de PSOutput, XWDOutput ...
- 22-04-97 : CAL ; Ajout du Plot.
03-06-97 : FMN ; Correction calcul SetRatio
06-05-97 : CAL ; Ajout du Clear sur les TOS_COMPUTED.
28-07-97 : PCT ; Ajout lumiere frontale headlight.
#include <Graphic3d_Vertex.hxx>
#include <Visual3d_Light.hxx>
-#include <Visual3d_SetOfLight.hxx>
-#include <Visual3d_HSetOfLight.hxx>
-#include <Visual3d_HSetOfView.hxx>
-#include <Visual3d_SetIteratorOfSetOfLight.hxx>
-#include <Visual3d_SetIteratorOfSetOfView.hxx>
+#include <Visual3d_HSequenceOfView.hxx>
#include <Graphic3d_TextureEnv.hxx>
return;
}
- if (MyGraphicDriver->IsDeviceLost())
- {
- MyViewManager->RecomputeStructures();
- MyViewManager->RecomputeStructures (myImmediateStructures);
- MyGraphicDriver->ResetDeviceLostFlag();
- }
+ Aspect_CLayer2d anOverCLayer, anUnderCLayer;
+ anOverCLayer.ptrLayer = anUnderCLayer.ptrLayer = NULL;
+ if (!theOverLayer .IsNull()) anOverCLayer = theOverLayer ->CLayer();
+ if (!theUnderLayer.IsNull()) anUnderCLayer = theUnderLayer->CLayer();
- // set up Z buffer state before redrawing
- if (MyViewManager->ZBufferAuto())
+ for (Standard_Integer aRetryIter = 0; aRetryIter < 2; ++aRetryIter)
{
- const Standard_Boolean hasFacet = ContainsFacet();
- const Standard_Boolean hasZBuffer = ZBufferIsActivated();
- // if the view contains facets and if ZBuffer is not active
- if (hasFacet && !hasZBuffer)
+ if (MyGraphicDriver->IsDeviceLost())
{
- SetZBufferActivity (1);
+ MyViewManager->RecomputeStructures();
+ MyViewManager->RecomputeStructures (myImmediateStructures);
+ MyGraphicDriver->ResetDeviceLostFlag();
}
- // if the view contains only facets and if ZBuffer is active
- if (!hasFacet && hasZBuffer)
+
+ // set up Z buffer state before redrawing
+ if (MyViewManager->ZBufferAuto())
{
- SetZBufferActivity (0);
+ const Standard_Boolean hasFacet = ContainsFacet();
+ const Standard_Boolean hasZBuffer = ZBufferIsActivated();
+ // if the view contains facets and if ZBuffer is not active
+ if (hasFacet && !hasZBuffer)
+ {
+ SetZBufferActivity (1);
+ }
+ // if the view contains only facets and if ZBuffer is active
+ if (!hasFacet && hasZBuffer)
+ {
+ SetZBufferActivity (0);
+ }
}
- }
- Aspect_CLayer2d anOverCLayer, anUnderCLayer;
- anOverCLayer.ptrLayer = anUnderCLayer.ptrLayer = NULL;
- if (!theOverLayer .IsNull()) anOverCLayer = theOverLayer ->CLayer();
- if (!theUnderLayer.IsNull()) anUnderCLayer = theUnderLayer->CLayer();
- MyGraphicDriver->Redraw (MyCView, anUnderCLayer, anOverCLayer, theX, theY, theWidth, theHeight);
+ MyGraphicDriver->Redraw (MyCView, anUnderCLayer, anOverCLayer, theX, theY, theWidth, theHeight);
+ if (!MyGraphicDriver->IsDeviceLost())
+ {
+ return;
+ }
+ }
}
void Visual3d_View::RedrawImmediate()
<< ", " << OldPriority << ", " << NewPriority << ")\n";
cout << flush;
#endif
- MyGraphicDriver->EraseStructure (MyCView, *(MyCOMPUTEDSequence.Value (Index)->CStructure()));
- MyGraphicDriver->DisplayStructure (MyCView, *(MyCOMPUTEDSequence.Value (Index)->CStructure()), NewPriority);
+ MyGraphicDriver->ChangePriority (*(MyCOMPUTEDSequence.Value (Index)->CStructure()), MyCView, NewPriority);
}
else
{
<< ", " << OldPriority << ", " << NewPriority << ")\n";
cout << flush;
#endif
- MyGraphicDriver->EraseStructure (MyCView, *(AStructure->CStructure()));
- MyGraphicDriver->DisplayStructure (MyCView, *(AStructure->CStructure()), NewPriority);
+ MyGraphicDriver->ChangePriority (*(AStructure->CStructure()), MyCView, NewPriority);
}
}
if (theIsSingleView)
{
- Handle(Visual3d_HSetOfView) aViews = MyViewManager->DefinedView();
- for (Visual3d_SetIteratorOfSetOfView aViewIter (aViews->Set()); aViewIter.More(); aViewIter.Next())
+ Handle(Visual3d_HSequenceOfView) aViews = MyViewManager->DefinedView();
+
+ for (int i=1;i<=aViews->Length();i++)
{
- if (aViewIter.Value().Access() != this)
+ if (aViews->Value(i).Access() != this)
{
- aViewIter.Value()->EraseImmediate (theStructure);
+ aViews->Value(i)->EraseImmediate (theStructure);
}
}
}
if (Answer == Visual3d_TOA_YES ) {
if (IsDisplayed (AStructure)) return;
+ AStructure->CalculateBoundBox();
MyGraphicDriver->DisplayStructure (MyCView, *(AStructure->CStructure()), AStructure->DisplayPriority());
MyDisplayedStructure.Add (AStructure);
if (AnUpdateMode == Aspect_TOU_ASAP) Update ();
MyCOMPUTEDSequence.Value (Index)->GraphicTransform (ATrsf);
}
+ Standard_Integer aLayerId = AStructure->GetZLayer();
+ if (!AStructure->IsMutable()
+ && !AStructure->CStructure()->IsForHighlight
+ && !AStructure->CStructure()->IsInfinite)
+ {
+ AStructure->CalculateBoundBox();
+ MyGraphicDriver->InvalidateBVHData (MyCView, aLayerId);
+ }
}
void Visual3d_View::UnHighlight (const Handle(Graphic3d_Structure)& AStructure) {
}
void Visual3d_View::ReCompute (const Handle(Graphic3d_Structure)& AStructure) {
+ if (MyCView.IsCullingEnabled)
+ {
+ AStructure->CalculateBoundBox();
+ Standard_Integer aLayerId = AStructure->DisplayPriority();
+ MyGraphicDriver->InvalidateBVHData(MyCView, aLayerId);
+ }
+
if (!ComputedMode()) return;
if (IsDeleted ()) return;
}
-void Visual3d_View::Plot (const Handle(Graphic3d_Plotter)& thePlotter) const
-{
- for (Graphic3d_MapIteratorOfMapOfStructure S1Iterator (MyDisplayedStructure); S1Iterator.More(); S1Iterator.Next())
- {
- Standard_Integer Index = IsComputed (S1Iterator.Key ());
- // displayed structure is plotted as if it was not calculated
- if (Index == 0)
- (S1Iterator.Key ())->Plot (thePlotter);
- else
- (MyCOMPUTEDSequence.Value (Index))->Plot (thePlotter);
- }
-}
-
Standard_Integer Visual3d_View::HaveTheSameOwner (const Handle(Graphic3d_Structure)& AStructure) const {
Standard_Integer Result = 0;