// Copyright (c) 1995-1999 Matra Datavision
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// This library is free software; you can redistribute it and / or modify it
+// under the terms of the GNU Lesser General Public version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
/***********************************************************************
??-11-97 : CAL ; Retrait de la dependance avec math. Calcul developpe.
??-11-97 : CAL ; Ajout de NumberOfDisplayedStructures
07-08-97 : PCT ; ajout support texture mapping
- 05-01-98 : CAL ; Ajout de AnimationMode
15-01-98 : FMN ; FRA60019 calcul Ratio pour MyViewMappingReset
15-01-98 : CAL ; Ajout de la transformation d'une TOS_COMPUTED
26-01-98 : CAL ; Ajout de la methode HaveTheSameOwner
#define BUC60572 //GG_03-08-99 Add protection on Zclipping & Zcueing planes
// positions.
-#define BUC60570 //GG 14-09-99 Don't activates lighting
-// when the view shading model is NONE.
-
#define GER61454 //GG 14-09-99 Activates model clipping planes
-#define G003 //EUG 30-09-00 Degeneration management
-// Backfacing management
-
#define RIC120302 //GG Add a NEW SetWindow method which enable
// to connect a graphic widget and context to OGL.
#include <Visual3d_HSetOfLight.hxx>
#include <Visual3d_SetIteratorOfSetOfLight.hxx>
-#include <Visual3d_ClipPlane.hxx>
-#include <Visual3d_SetOfClipPlane.hxx>
-#include <Visual3d_HSetOfClipPlane.hxx>
-#include <Visual3d_SetIteratorOfSetOfClipPlane.hxx>
-
#include <Visual3d_SetIteratorOfSetOfView.hxx>
#include <Graphic3d_TextureEnv.hxx>
MyCView.DefWindow.IsDefined = 0;
MyCView.Context.NbActiveLight = 0;
- MyCView.Context.NbActivePlane = 0;
-#ifdef GER61454
- MyCView.Context.ActivePlane = NULL;
-#endif
for (i=0; i<=3; i++)
for (j=0; j<=3; j++)
MyMatOfMapIsEvaluated = Standard_False;
MyMatOfOriIsEvaluated = Standard_False;
- DegenerateModeIsActive = Standard_False;
- AnimationModeIsActive = Standard_False;
-
IsInitialized = Standard_False;
-#ifdef G003
- MyCView.IsDegenerates = 0;
- MyCView.IsDegeneratesPrev = 0;
ComputedModeIsActive = Standard_False;
MyCView.Backfacing = 0;
-#endif // G003
MyCView.ptrUnderLayer = 0;
MyCView.ptrOverLayer = 0;
MyCView.DefWindow.IsDefined = 0;
MyCView.Context.NbActiveLight = 0;
- MyCView.Context.NbActivePlane = 0;
-#ifdef GER61454
- MyCView.Context.ActivePlane = NULL;
-#endif
for (i=0; i<=3; i++)
for (j=0; j<=3; j++)
MyCView.Orientation.IsCustomMatrix = 1;
for ( i = 0; i < 4; i++)
for ( j = 0; j < 4; j++)
- MyCView.Orientation.ModelViewMatrix[i][j] = MyViewOrientation.MyModelViewMatrix->Value(i,j);
+ MyCView.Orientation.ModelViewMatrix[i][j] =
+ (Standard_ShortReal)MyViewOrientation.MyModelViewMatrix->Value(i,j);
}
else {
MyCView.Orientation.IsCustomMatrix = 0;
MyCView.Mapping.IsCustomMatrix = 1;
for ( i = 0; i < 4; i++)
for ( j = 0; j < 4; j++)
- MyCView.Mapping.ProjectionMatrix[i][j] = MyViewMapping.MyProjectionMatrix->Value(i,j);
+ MyCView.Mapping.ProjectionMatrix[i][j] =
+ (Standard_ShortReal)MyViewMapping.MyProjectionMatrix->Value(i,j);
}
else {
MyCView.Mapping.IsCustomMatrix = 0;
MyMatOfOriIsEvaluated = Standard_False;
IsInitialized = Standard_False;
-#ifdef G003
- AnimationModeIsActive = Standard_False;
- MyCView.IsDegenerates = 0;
- MyCView.IsDegeneratesPrev = 0;
ComputedModeIsActive = Standard_False;
-#endif // G003
MyCView.ptrUnderLayer = 0;
MyCView.ptrOverLayer = 0;
#else
const Handle(Xw_Window) aWin = Handle(Xw_Window)::DownCast (theWindow);
MyCView.DefWindow.XWindow = aWin->XWindow();
- MyCView.DefWindow.XParentWindow = aWin->XParentWindow();
+ //MyCView.DefWindow.XParentWindow = aWin->XParentWindow();
#endif
Standard_Integer Width, Height;
}
-void Visual3d_View::UpdateLights () {
+void Visual3d_View::UpdateLights()
+{
+ if (IsDeleted()
+ || !IsDefined())
+ {
+ return;
+ }
-Standard_Integer i, j;
-CALL_DEF_LIGHT *lights=NULL;
+ if (MyContext.Model() == Visual3d_TOM_NONE)
+ {
+ // activate only a white ambient light
+ Graphic3d_CLight aCLight;
+ aCLight.Type = Visual3d_TOLS_AMBIENT;
+ aCLight.IsHeadlight = Standard_False;
+ aCLight.Color.r() = aCLight.Color.g() = aCLight.Color.b() = 1.0f;
-#ifdef BUC60570
- if( MyContext.Model() == Visual3d_TOM_NONE ) {
-// Activates only a white ambient light
MyCView.Context.NbActiveLight = 1;
- lights = new CALL_DEF_LIGHT [MyCView.Context.NbActiveLight];
- MyCView.Context.ActiveLight = lights;
-
- lights[0].WsId = MyCView.ViewId;
- lights[0].ViewId = MyCView.ViewId;
- lights[0].LightType = int (Visual3d_TOLS_AMBIENT);
- lights[0].Active = 1;
- lights[0].LightId = 0;
- lights[0].Headlight = 0;
- lights[0].Color.r = lights[0].Color.g = lights[0].Color.b = 1.;
- } else {
-#endif
- i = MyContext.NumberOfActivatedLights ();
- j = MyGraphicDriver->InquireLightLimit ();
- MyCView.Context.NbActiveLight = (i > j ? j : i);
-
- if (MyCView.Context.NbActiveLight > 0) {
-
- // Dynamic Allocation
- lights = new CALL_DEF_LIGHT [MyCView.Context.NbActiveLight];
-
- MyCView.Context.ActiveLight = lights;
-
-Standard_Real X, Y, Z;
-
-Standard_Real LightConcentration;
-Standard_Real LightAttenuation1;
-Standard_Real LightAttenuation2;
-Standard_Real LightAngle;
-Quantity_Color LightColor;
-Graphic3d_Vertex LightPosition;
-Graphic3d_Vector LightDirection;
-Visual3d_TypeOfLightSource LightType=Visual3d_TOLS_AMBIENT;
-
- // Parcing of light sources
- for (j=0; j<MyCView.Context.NbActiveLight; j++) {
- LightType = (MyContext.ActivatedLight (j+1))->LightType ();
-
- lights[j].WsId = MyCView.ViewId;
- lights[j].ViewId = MyCView.ViewId;
-
- lights[j].LightType = int (LightType);
- lights[j].Active = 1;
- lights[j].LightId =
- int ((MyContext.ActivatedLight (j+1))->Identification ());
- lights[j].Headlight = (MyContext.ActivatedLight (j+1))->Headlight ()? 1:0;
-
- switch (LightType) {
-
- case Visual3d_TOLS_AMBIENT :
- (MyContext.ActivatedLight (j+1))->Values (
- LightColor
- );
- break;
-
- case Visual3d_TOLS_POSITIONAL :
- (MyContext.ActivatedLight (j+1))->Values (
- LightColor,
- LightPosition,
- LightAttenuation1,
- LightAttenuation2
- );
- break;
-
- case Visual3d_TOLS_DIRECTIONAL :
- (MyContext.ActivatedLight (j+1))->Values (
- LightColor,
- LightDirection
- );
- break;
-
- case Visual3d_TOLS_SPOT :
- (MyContext.ActivatedLight (j+1))->Values (
- LightColor,
- LightPosition,
- LightDirection,
- LightConcentration,
- LightAttenuation1,
- LightAttenuation2,
- LightAngle
- );
- break;
-
- }
-
- lights[j].Color.r = float (LightColor.Red ());
- lights[j].Color.g = float (LightColor.Green ());
- lights[j].Color.b = float (LightColor.Blue ());
-
- if ( (LightType == Visual3d_TOLS_POSITIONAL) ||
- (LightType == Visual3d_TOLS_SPOT) ) {
- LightPosition.Coord (X, Y, Z);
- lights[j].Position.x = float (X);
- lights[j].Position.y = float (Y);
- lights[j].Position.z = float (Z);
- }
-
- if ( (LightType == Visual3d_TOLS_DIRECTIONAL) ||
- (LightType == Visual3d_TOLS_SPOT) ) {
- LightDirection.Coord (X, Y, Z);
- lights[j].Direction.x = float (X);
- lights[j].Direction.y = float (Y);
- lights[j].Direction.z = float (Z);
- }
-
- if ( (LightType == Visual3d_TOLS_POSITIONAL) ||
- (LightType == Visual3d_TOLS_SPOT) ) {
- lights[j].Attenuation[0] =
- float (LightAttenuation1);
- lights[j].Attenuation[1] =
- float (LightAttenuation2);
- }
-
- if (LightType == Visual3d_TOLS_SPOT) {
- lights[j].Concentration =
- float (LightConcentration);
- lights[j].Angle =
- float (LightAngle);
- }
- }
-
- }
-#ifdef BUC60570
+ MyCView.Context.ActiveLight = &aCLight;
+ MyGraphicDriver->SetLight (MyCView);
+ MyCView.Context.ActiveLight = NULL;
+ return;
}
-#endif
- // management of light sources
- if (! IsDeleted ())
- if (IsDefined ())
- MyGraphicDriver->SetLight (MyCView);
- // Dynamic allocation
- if (MyCView.Context.NbActiveLight > 0) delete [] lights;
+ MyCView.Context.NbActiveLight = Min (MyContext.NumberOfActivatedLights(),
+ MyGraphicDriver->InquireLightLimit());
+ if (MyCView.Context.NbActiveLight < 1)
+ {
+ MyGraphicDriver->SetLight (MyCView);
+ return;
+ }
+ // parcing of light sources
+ MyCView.Context.ActiveLight = new Graphic3d_CLight[MyCView.Context.NbActiveLight];
+ for (Standard_Integer aLightIter = 0; aLightIter < MyCView.Context.NbActiveLight; ++aLightIter)
+ {
+ MyCView.Context.ActiveLight[aLightIter] = MyContext.ActivatedLight (aLightIter + 1)->CLight();
+ }
+ MyGraphicDriver->SetLight (MyCView);
+ delete[] MyCView.Context.ActiveLight;
+ MyCView.Context.ActiveLight = NULL;
}
-void Visual3d_View::UpdatePlanes () {
-
-Standard_Integer i, j;
-CALL_DEF_PLANE *planes=NULL;
-
- i = MyContext.NumberOfActivatedClipPlanes ();
- j = MyGraphicDriver->InquirePlaneLimit ();
- MyCView.Context.NbActivePlane = (i > j ? j : i);
-
- if (MyCView.Context.NbActivePlane > 0) {
-
- // Dynamic Allocation
-#ifdef GER61454 //Keep the plane address for the next Update !
- if( !MyCView.Context.ActivePlane )
- MyCView.Context.ActivePlane = new CALL_DEF_PLANE [j];
- planes = MyCView.Context.ActivePlane;
-#else
- planes = new CALL_DEF_PLANE [MyCView.Context.NbActivePlane];
-
- MyCView.Context.ActivePlane = planes;
-#endif
-Standard_Real A, B, C, D;
-
- // Parcing of clipping planes
- for (j=0; j<MyCView.Context.NbActivePlane; j++) {
-
- planes[j].WsId = MyCView.ViewId;
- planes[j].ViewId = MyCView.ViewId;
-
- planes[j].Active = 1;
- planes[j].PlaneId =
- int ((MyContext.ActivatedClipPlane (j+1))->Identification ());
-
- (MyContext.ActivatedClipPlane (j+1))->Plane (A, B, C, D);
- planes[j].CoefA = float (A);
- planes[j].CoefB = float (B);
- planes[j].CoefC = float (C);
- planes[j].CoefD = float (D);
- }
-
- }
-
- // Management of planes of clipping model
- if (! IsDeleted ())
- if (IsDefined ())
- MyGraphicDriver->SetPlane (MyCView);
-
- // Dynamic allocation
-#ifdef GER61454
- if ( MyCView.Context.ActivePlane && (MyCView.Context.NbActivePlane == 0)
- ) {
- delete [] MyCView.Context.ActivePlane;
- MyCView.Context.ActivePlane = NULL;
- }
-#else
- if (MyCView.Context.NbActivePlane > 0) delete [] planes;
-#endif
+void Visual3d_View::UpdatePlanes()
+{
+ MyCView.Context.ClipPlanes = MyContext.ClipPlanes();
+ if (IsDeleted() || !IsDefined())
+ {
+ return;
+ }
+ MyGraphicDriver->SetClipPlanes (MyCView);
}
void Visual3d_View::SetBackground (const Aspect_Background& ABack) {
if (IsDeleted ()) return;
MyViewOrientation = VO;
-
+
Standard_Real X, Y, Z;
// Tests on modification of parameters.
Standard_Boolean VUPIsModified = Standard_False;
MyCView.Orientation.ViewScaleZ = float (Z);
CustomIsModified =
- MyCView.Orientation.IsCustomMatrix != MyViewOrientation.IsCustomMatrix();
+ (MyCView.Orientation.IsCustomMatrix != MyViewOrientation.IsCustomMatrix());
MyCView.Orientation.IsCustomMatrix = MyViewOrientation.IsCustomMatrix();
if ( MyViewOrientation.IsCustomMatrix() ) {
Standard_Integer i, j;
MyMatOfOriIsEvaluated = !VUPIsModified && !VRPIsModified
&& !VRUIsModified && !ScaleIsModified;
-
+
if (! IsDefined ()) return;
-
+
Standard_Boolean AWait = Standard_False; // => immediate update
MyGraphicDriver->ViewOrientation (MyCView, AWait);
IsInitialized = Standard_True;
// Restart if one of parameters is modified
if (!IsInitialized || VUPIsModified || VRPIsModified
|| VRUIsModified || ScaleIsModified || CustomIsModified) {
-
+
MyMatOfOriIsEvaluated = !VUPIsModified && !VRPIsModified
&& !VRUIsModified && !ScaleIsModified;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
MyCView.Mapping.ProjectionMatrix[i][j] =
- MyViewMapping.MyProjectionMatrix->Value(i,j);
+ (Standard_ShortReal)MyViewMapping.MyProjectionMatrix->Value(i,j);
}
MyMatOfMapIsEvaluated = Standard_False;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
MyCView.Mapping.ProjectionMatrix[i][j] =
- MyViewMapping.MyProjectionMatrix->Value(i,j);
+ (Standard_ShortReal)MyViewMapping.MyProjectionMatrix->Value(i,j);
}
MyMatOfMapIsEvaluated = Standard_False;
if (! MyWindow->IsMapped ()) return;
+ if (MyGraphicDriver->IsDeviceLost())
+ {
+ MyViewManager->ReComputeStructures();
+ MyGraphicDriver->ResetDeviceLostFlag();
+ }
+
// If activation/desactivation of ZBuffer should be automatic
// depending on the presence or absence of facets.
if (MyViewManager->ZBufferAuto ()) {
}
-void Visual3d_View::ChangeDisplayPriority (const Handle(Graphic3d_Structure)& AStructure, const Standard_Integer OldPriority, const Standard_Integer NewPriority) {
+void Visual3d_View::ChangeDisplayPriority (const Handle(Graphic3d_Structure)& AStructure, const Standard_Integer /*OldPriority*/, const Standard_Integer NewPriority) {
if (IsDeleted ()) return;
if (! IsDefined ()) return;
if (! IsDisplayed (AStructure)) return;
Standard_Integer Index = IsComputed (AStructure);
-#ifdef G003
- if ( Index != 0 && ComputedMode () && !DegenerateModeIsOn () )
-#else
- if ((Index != 0) && (! DegenerateModeIsOn ()))
-#endif // G003
+ if (Index != 0 && ComputedMode())
{
#ifdef TRACE
Standard_Integer StructId = MyCOMPUTEDSequence.Value (Index)->Identification ();
Standard_Integer Index = IsComputed (AStructure);
if ((Index != 0) && (AStructure->Visual () != Graphic3d_TOS_COMPUTED)) {
-
-#ifdef TRACE_LENGTH
- if (MyTOCOMPUTESequence.Length () != MyCOMPUTEDSequence.Length ()) {
- cout << "In Visual3d_View::Display, ";
- cout << "TOCOMPUTE " << MyTOCOMPUTESequence.Length ()
- << " != COMPUTED " << MyCOMPUTEDSequence.Length ()
- << "\n" << flush;
- }
-#endif
MyTOCOMPUTESequence.Remove (Index);
MyCOMPUTEDSequence.Remove (Index);
-
-#ifdef TRACE_LENGTH
- if (MyTOCOMPUTESequence.Length () != MyCOMPUTEDSequence.Length ())
- cout << "\tTOCOMPUTE " << MyTOCOMPUTESequence.Length ()
- << " != COMPUTED " << MyCOMPUTEDSequence.Length ()
- << "\n" << flush;
-#endif
Index = 0;
}
Visual3d_TypeOfAnswer Answer = AcceptDisplay (AStructure);
-#ifdef TRACE_DISPLAY
- Standard_Integer StructId = AStructure->Identification ();
- cout << "Visual3d_View" << MyCView.ViewId << "::Display ("
- << StructId << ");\n";
- cout << flush;
-#endif
-
if (Answer == Visual3d_TOA_NO) {
-#ifdef TRACE_DISPLAY
- cout << "Answer : Visual3d_TOA_NO\n";
- cout << flush;
-#endif
return;
}
- // Mode degenerated active
-#ifdef G003
- if ( !ComputedMode () || DegenerateModeIsOn () )
- Answer = Visual3d_TOA_YES;
-#else
- if (DegenerateModeIsOn ()) Answer = Visual3d_TOA_YES;
-;
-#endif // G003
+ if (!ComputedMode())
+ {
+ Answer = Visual3d_TOA_YES;
+ }
if (Answer == Visual3d_TOA_YES ) {
-#ifdef TRACE_DISPLAY
- cout << "Answer : Visual3d_TOA_YES\n";
- cout << flush;
-#endif
if (IsDisplayed (AStructure)) return;
MyGraphicDriver->DisplayStructure (
MyCView,
}
if (Answer == Visual3d_TOA_COMPUTE) {
-#ifdef TRACE_DISPLAY
- cout << "Answer : Visual3d_TOA_COMPUTE\n";
- cout << "Index : " << Index << "\n" << flush;
-#endif
if (Index != 0) {
// Already computed, is COMPUTED still valid?
-#ifdef TRACE_DISPLAY
- if (MyCOMPUTEDSequence.Value (Index)->HLRValidation ()) {
- cout << "Structure "
- << MyTOCOMPUTESequence.Value (Index)->Identification ()
- << "already calculated, in the view "
- << Identification () << ", par la structure "
- << MyCOMPUTEDSequence.Value (Index)->Identification ()
- << "\n was not recalculated as HLR is valid\n";
- cout << flush;
- }
- else {
- cout << "Structure "
- << MyTOCOMPUTESequence.Value (Index)->Identification ()
- << " already calculated, in the view "
- << Identification () << ", by the structure "
- << MyCOMPUTEDSequence.Value (Index)->Identification ()
- << "\n should be recalculated as HLR is invalid\n";
- cout << flush;
- }
-#endif
Standard_Integer OldStructId =
MyCOMPUTEDSequence.Value (Index)->Identification ();
#endif
TheStructure->SetHLRValidation (Standard_True);
-#ifdef TRACE_LENGTH
- if (MyTOCOMPUTESequence.Length () != MyCOMPUTEDSequence.Length ())
- cout << "\tTOCOMPUTE " << MyTOCOMPUTESequence.Length ()
- << " != COMPUTED " << MyCOMPUTEDSequence.Length ()
- << "\n" << flush;
-#endif
-
// TOCOMPUTE and COMPUTED associated to sequences are added
MyTOCOMPUTESequence.Append (AStructure);
MyCOMPUTEDSequence.Append (TheStructure);
-#ifdef TRACE_LENGTH
- if (MyTOCOMPUTESequence.Length () != MyCOMPUTEDSequence.Length ())
- cout << "\tTOCOMPUTE " << MyTOCOMPUTESequence.Length ()
- << " != COMPUTED " << MyCOMPUTEDSequence.Length ()
- << "\n" << flush;
-#endif
-
// The previous are removed if necessary
if (Index != 0) {
MyTOCOMPUTESequence.Remove (Index);
MyCOMPUTEDSequence.Remove (Index);
}
-#ifdef TRACE_LENGTH
- if (MyTOCOMPUTESequence.Length () != MyCOMPUTEDSequence.Length ())
- cout << "\tTOCOMPUTE " << MyTOCOMPUTESequence.Length ()
- << " != COMPUTED " << MyCOMPUTEDSequence.Length ()
- << "\n" << flush;
-#endif
-
// Return type of visualisation of the view
Visual3d_TypeOfVisualization ViewType = MyContext.Visualization ();
TheStructure->GraphicHighlight (Aspect_TOHM_COLOR);
}
-#ifdef TRACE_DISPLAY
- cout << "Structure " << StructId
- << " in the view " << Identification ()
- << " is calculated by the structure "
- << TheStructure->Identification ();
- if (Answer == Visual3d_TOA_YES)
- cout << " and displayed\n";
- else
- cout << " but not displayed\n";
- cout << flush;
-#endif
-
// It is displayed only if the calculated structure
// has a proper type corresponding to the one of the view.
if (Answer != Visual3d_TOA_NO) {
if (IsDisplayed (AStructure)) {
Visual3d_TypeOfAnswer Answer = AcceptDisplay (AStructure);
- // Degenerated mode is active
-#ifdef G003
- if ( !ComputedMode () || DegenerateModeIsOn () )
- Answer = Visual3d_TOA_YES;
-#else
- if (DegenerateModeIsOn ()) Answer = Visual3d_TOA_YES;
-#endif // G003
+ if (!ComputedMode())
+ {
+ Answer = Visual3d_TOA_YES;
+ }
if (Answer != Visual3d_TOA_COMPUTE) {
MyGraphicDriver->EraseStructure (
cout << "Index : " << Index << "\n";
cout << flush;
#endif
-#ifdef G003
- if ( Index != 0 && ComputedMode () &&
- !DegenerateModeIsOn () )
-#else
- if ((Index != 0) && (! DegenerateModeIsOn ()))
-#endif // G003
+
+ if (Index != 0 && ComputedMode())
{
StructId =
MyCOMPUTEDSequence.Value (Index)->Identification ();
Iterator.More ();
Iterator.Next ()) {
+ if (!Iterator.Key()->IsVisible())
+ {
+ continue;
+ }
+
if ( (Iterator.Key ())->IsInfinite ()){
//XMin, YMin .... ZMax are initialized by means of infinite line data
(Iterator.Key ())->MinMaxValues (Xm, Ym, Zm, XM, YM, ZM);
for (i=1; i<=Length; i++)
(MyCOMPUTEDSequence.Value (i))->SetHLRValidation (Standard_False);
- // if the degenerated node is active, nothing is recomputed
-#ifdef G003
- if ( DegenerateModeIsOn () || !ComputedMode () ) return;
-#else
- if (DegenerateModeIsOn ()) return;
-#endif // G003
+ if (!ComputedMode())
+ {
+ return;
+ }
/*
* Force HLRValidation to False on all structures
* Remove structures that were calculated for the
* previous orientation.
* Recalculation of new structures.
- * Passage of the degenerated mode ON to OFF =>
- * Remove structures that were calculated before
- * the degenerated mode passed to ON.
- * Recalculate new structures.
*/
Graphic3d_MapIteratorOfMapOfStructure S1Iterator (MyDisplayedStructure);
Visual3d_TypeOfAnswer Answer;
}
void Visual3d_View::ReCompute (const Handle(Graphic3d_Structure)& AStructure) {
-#ifdef G003
- if ( DegenerateModeIsOn () || !ComputedMode () ) return;
-#else
- if (DegenerateModeIsOn()) return;
-#endif // G003
+ if (!ComputedMode()) return;
if (IsDeleted ()) return;
}
-void
-#ifdef G003
-Visual3d_View::SetAnimationModeOn ( const Standard_Boolean degenerate ) {
-#else
-Visual3d_View::SetAnimationModeOn () {
-#endif
-
- if (AnimationModeIsOn ()) return;
-
- AnimationModeIsActive = Standard_True;
-#ifdef G003
- if ( degenerate )
- SetDegenerateModeOn ();
- else
- SetDegenerateModeOff ();
-#endif // G003
- MyGraphicDriver->BeginAnimation (MyCView);
-
-}
-
-void Visual3d_View::SetAnimationModeOff () {
-
- if (! AnimationModeIsOn ()) return;
-
- AnimationModeIsActive = Standard_False;
-#ifdef G003
- SetDegenerateModeOff ();
-#endif // G003
- MyGraphicDriver->EndAnimation (MyCView);
-
-}
-
-Standard_Boolean Visual3d_View::AnimationModeIsOn () const {
-
- return AnimationModeIsActive;
-
-}
-
-void Visual3d_View::SetDegenerateModeOn () {
-
-#ifdef TRACE
- cout << "Visual3d_View" << MyCView.ViewId
- << "::SetDegenerateModeOn ();\n";
- cout << flush;
-#endif
-
- // If the degenerated mode is already active, nothing is recalculated
- if (DegenerateModeIsOn ()) return;
- DegenerateModeIsActive = Standard_True;
-
-#ifdef G003
- MyCView.IsDegenerates = 1;
-#else
- /*
- * Change of activity of the degenerated mode
- * Remove structures that were calculated
- * and displayed when the mode was off.
- * Display of non-calculated structures.
- */
-Graphic3d_MapIteratorOfMapOfStructure S1Iterator (MyDisplayedStructure);
-Visual3d_TypeOfAnswer Answer;
-Standard_Integer StructId;
-
- while (S1Iterator.More ()) {
-
- Answer = AcceptDisplay (S1Iterator.Key ());
- // If the structure was calculated, the previous one is
- // removed and the new one is displayed
- // (This is the role of passage into degenerated mode)
-
- if (Answer == Visual3d_TOA_COMPUTE) {
-Standard_Integer Index = IsComputed (S1Iterator.Key ());
- if (Index != 0) {
- StructId =
- MyCOMPUTEDSequence.Value (Index)->Identification ();
-#ifdef TRACE_COMP
- cout << "Structure " << S1Iterator.Key ()->Identification ()
- << " calculated, in the view "
- << Identification () << ", by structure "
- << StructId << " passes in degenerated mode.\n";
- cout << "Remove" << StructId << " then display "
- << S1Iterator.Key ()->Identification () << "\n";
- cout << flush;
-#endif
- MyGraphicDriver->EraseStructure
- (MyCView, *(Graphic3d_CStructure *)MyCOMPUTEDSequence.Value (Index)->CStructure ());
- MyGraphicDriver->DisplayStructure (
- MyCView,
- *(Graphic3d_CStructure *)S1Iterator.Key ()->CStructure (),
- int (S1Iterator.Key ()->DisplayPriority ())
- );
- }
- else {
- // Else is impossible)
- // If the mode was not degenerated previously, the
- // calculated structure associated to S1Iterator.Key ()
- // really exists and Index != 0
- }
- }
-
- // S1Iterator.Next () is located on the next structure
- S1Iterator.Next ();
- }
-#endif //G003
-}
-
-void Visual3d_View::SetDegenerateModeOff () {
-
-#ifdef TRACE
- cout << "Visual3d_View" << MyCView.ViewId
- << "::SetDegenerateModeOff ();\n";
- cout << flush;
-#endif
-
- // If the degenerated mode is already inactive, nothing is recalculated
- if (! DegenerateModeIsOn ()) return;
-
- DegenerateModeIsActive = Standard_False;
-
-#ifdef G003
- MyCView.IsDegenerates = 0;
-#else
- /*
- * Change of activity of degenerated mode
- * Remove structures that were displayed
- * when the mode was on.
- * Calculation of structures.
- */
-Graphic3d_MapIteratorOfMapOfStructure S1Iterator (MyDisplayedStructure);
-Visual3d_TypeOfAnswer Answer;
-Standard_Integer StructId;
-
- Standard_Integer i = MyDisplayedStructure.Extent ();
-
- while (S1Iterator.More ()) {
-
- Answer = AcceptDisplay (S1Iterator.Key ());
- // If the structure was calculated, the previous one is
- // removed and the new one is displayed
- // (This is the role of passage into degenerated mode)
-
- if (Answer == Visual3d_TOA_COMPUTE) {
-Standard_Integer Index = IsComputed (S1Iterator.Key ());
- if (Index != 0) {
- StructId =
- MyCOMPUTEDSequence.Value (Index)->Identification ();
-#ifdef TRACE_COMP
- cout << "Structure " << S1Iterator.Key ()->Identification ()
- << " calculated, in the view "
- << Identification () << ", by the structure "
- << StructId << " passes into normal mode.\n";
- cout << "Remove " << S1Iterator.Key ()->Identification ()
- << " then display " << StructId << "\n";
- cout << flush;
-#endif
- MyGraphicDriver->EraseStructure
- (MyCView,
- *(Graphic3d_CStructure *)S1Iterator.Key ()->CStructure ());
- MyGraphicDriver->DisplayStructure (
- MyCView,
- *(Graphic3d_CStructure *)MyCOMPUTEDSequence.Value (Index)->CStructure (),
- int (S1Iterator.Key ()->DisplayPriority ())
- );
-
- Display (S1Iterator.Key (), Aspect_TOU_WAIT);
-
- if ((S1Iterator.Key ())->IsHighlighted()) {
- if (! (MyCOMPUTEDSequence.Value (Index))->IsHighlighted()) {
- (MyCOMPUTEDSequence.Value (Index))->SetHighlightColor
- ((S1Iterator.Key ())->HighlightColor ());
- (MyCOMPUTEDSequence.Value (Index))->GraphicHighlight (Aspect_TOHM_COLOR);
- }
- }
- }
- else {
- // Else is impossible
- // Degenerated mode was activated before display of the
- // structure. So the structure was displayed in the
- // degenerated mode, but the calculated structure didn't exist.
- // It is calculated.
-
- // Compute + Validation
-Handle(Graphic3d_Structure) AStructure = (S1Iterator.Key ());
-#ifdef OLD
-Handle(Graphic3d_Structure) TheStructure = AStructure->Compute (this);
-#else
-Handle(Graphic3d_Structure) TheStructure;
-TColStd_Array2OfReal ATrsf (0, 3, 0, 3);
- AStructure->Transform (ATrsf);
- if (Index != 0) {
-TColStd_Array2OfReal Ident (0, 3, 0, 3);
-Standard_Integer ii, jj;
- for (ii=0; ii<=3; ii++)
- for (jj=0; jj<=3; jj++)
- Ident (ii, jj) = (ii == jj ? 1.0 : 0.0);
- TheStructure = MyCOMPUTEDSequence.Value (Index);
- TheStructure->SetTransform (Ident, Graphic3d_TOC_REPLACE);
- if (AStructure->IsTransformed ()) {
- AStructure->Compute (this, ATrsf, TheStructure);
- }
- else {
- AStructure->Compute (this, TheStructure);
- }
- }
- else {
- if (AStructure->IsTransformed ()) {
- TheStructure = AStructure->Compute (this, ATrsf);
- }
- else {
- TheStructure = AStructure->Compute (this);
- }
- }
-#endif
- TheStructure->SetHLRValidation (Standard_True);
-
-// Return type of visualisation of the view
-Visual3d_TypeOfVisualization ViewType = MyContext.Visualization ();
-
-// Of which type will be the computed ?
-Standard_Boolean ComputeWireframe = ((ViewType == Visual3d_TOV_WIREFRAME) &&
- ((S1Iterator.Key ())->ComputeVisual () != Graphic3d_TOS_SHADING));
-
-Standard_Boolean ComputeShading = ((ViewType == Visual3d_TOV_SHADING) &&
- ((S1Iterator.Key ())->ComputeVisual () != Graphic3d_TOS_WIREFRAME));
-
- if (ComputeWireframe)
- TheStructure->SetVisual (Graphic3d_TOS_WIREFRAME);
- if (ComputeShading)
- TheStructure->SetVisual (Graphic3d_TOS_SHADING);
-
- if ((S1Iterator.Key ())->IsHighlighted()) {
- TheStructure->SetHighlightColor
- ((S1Iterator.Key ())->HighlightColor ());
- TheStructure->GraphicHighlight (Aspect_TOHM_COLOR);
- }
-
- // Make range
-Standard_Integer Result = 0;
-Standard_Integer Length = MyTOCOMPUTESequence.Length ();
- // Find structure <S1Iterator.Key ()>
- // in the sequence of structures to be calculated
- StructId = (S1Iterator.Key ())->Identification ();
- for (i=1; i<=Length && Result==0; i++)
- if ((MyTOCOMPUTESequence.Value (i))->Identification () ==
- StructId) Result = i;
- if (Result != 0)
- MyCOMPUTEDSequence.ChangeValue (Result) = TheStructure;
- else {
- // hlhsr and the associated new compute are added
-#ifdef TRACE_LENGTH
- if (MyTOCOMPUTESequence.Length () != MyCOMPUTEDSequence.Length ()) {
- cout << "In Visual3d_View::SetDegenerateModeOff, ";
- cout << "TOCOMPUTE " << MyTOCOMPUTESequence.Length ()
- << " != COMPUTED " << MyCOMPUTEDSequence.Length ()
- << "\n" << flush;
- }
-#endif
- MyTOCOMPUTESequence.Append (S1Iterator.Key ());
- MyCOMPUTEDSequence.Append (TheStructure);
-#ifdef TRACE_LENGTH
- if (MyTOCOMPUTESequence.Length () != MyCOMPUTEDSequence.Length ())
- cout << "\tTOCOMPUTE " << MyTOCOMPUTESequence.Length ()
- << " != COMPUTED " << MyCOMPUTEDSequence.Length ()
- << "\n" << flush;
-#endif
- }
-
- // The degenerated is removed and the calculated is displayed
- MyGraphicDriver->EraseStructure
- (MyCView,
- *(Graphic3d_CStructure *)(S1Iterator.Key ()->CStructure ()));
- MyGraphicDriver->DisplayStructure (
- MyCView,
- *(Graphic3d_CStructure *)TheStructure->CStructure (),
- int (S1Iterator.Key ()->DisplayPriority ())
- );
- }
- }
-
- // S1Iterator.Next () is located on the next structure
- S1Iterator.Next ();
- }
-
- if (MyViewManager->UpdateMode () == Aspect_TOU_ASAP) Update ();
-#endif //G003
-}
-
-Standard_Boolean Visual3d_View::DegenerateModeIsOn () const {
-
- return DegenerateModeIsActive;
-
-}
-
-const Handle(Aspect_GraphicDriver)& Visual3d_View::GraphicDriver () const {
+const Handle(Graphic3d_GraphicDriver)& Visual3d_View::GraphicDriver () const {
return MyGraphicDriver;
}
-void Visual3d_View::Plot (const Handle(Graphic3d_Plotter)& APlotter) const {
-
-Graphic3d_MapIteratorOfMapOfStructure S1Iterator (MyDisplayedStructure);
-
- while (S1Iterator.More ()) {
-
- if (DegenerateModeIsOn ())
- // As the mode is degenerated the displayed structure
- // is plotted without taking into account if it is calculated or not
- (S1Iterator.Key ())->Plot (APlotter);
- else {
-Standard_Integer Index = IsComputed (S1Iterator.Key ());
- // As the mode is not degenerated the displayed structure
- // is plotted as if it was not calculated, otherwise the
- // associated calculated structure is plotted.
- if (Index == 0)
- (S1Iterator.Key ())->Plot (APlotter);
- else
- (MyCOMPUTEDSequence.Value (Index))->Plot (APlotter);
- }
-
- // S1Iterator.Next () is located on the next structure
- S1Iterator.Next ();
- }
-
+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_Boolean checkFloat(const Standard_Real value)
+static Standard_Boolean checkFloat(const Standard_Real value)
{
return value > -FLT_MAX && value < FLT_MAX;
}
-void SetMinMaxValuesCallback(void* Visual3dView)
+static void SetMinMaxValuesCallback(Visual3d_View* theView)
{
Standard_Real xmin, ymin, zmin, xmax, ymax, zmax;
-
- Handle(Visual3d_View) view = (Handle(Visual3d_View)&) Visual3dView;
- view->MinMaxValues(xmin, ymin, zmin, xmax, ymax, zmax);
+ theView->MinMaxValues(xmin, ymin, zmin, xmax, ymax, zmax);
if (checkFloat(xmin) && checkFloat(ymin) && checkFloat(zmin) &&
checkFloat(xmax) && checkFloat(ymax) && checkFloat(zmax))
{
- Handle(Graphic3d_GraphicDriver) driver = Handle(Graphic3d_GraphicDriver)::DownCast(view->GraphicDriver());
+ Handle(Graphic3d_GraphicDriver) driver = Handle(Graphic3d_GraphicDriver)::DownCast(theView->GraphicDriver());
driver->GraduatedTrihedronMinMaxValues((Standard_ShortReal)xmin, (Standard_ShortReal)ymin, (Standard_ShortReal)zmin,
(Standard_ShortReal)xmax, (Standard_ShortReal)ymax, (Standard_ShortReal)zmax);
}
return MyPtrViewManager;
}
-#ifdef G003
-void Visual3d_View :: SetComputedMode ( const Standard_Boolean aMode ) {
-
- if ( ( (aMode && ComputedModeIsActive) ||
- (!aMode && !ComputedModeIsActive)
- ) || DegenerateModeIsOn ()
- ) return;
+void Visual3d_View :: SetComputedMode ( const Standard_Boolean aMode )
+{
+ if ((aMode && ComputedModeIsActive) ||
+ (!aMode && !ComputedModeIsActive))
+ {
+ return;
+ }
Graphic3d_MapIteratorOfMapOfStructure S1Iterator ( MyDisplayedStructure );
Visual3d_TypeOfAnswer Answer;
Standard_Integer StructId;
Standard_Integer i = MyDisplayedStructure.Extent ();
-
- if ( !( ComputedModeIsActive = aMode ) ) {
+ ComputedModeIsActive = aMode;
+ if (!ComputedModeIsActive) {
while ( S1Iterator.More () ) {
return Visual3d_TOBM_DISABLE;
} // end Visual3d_View :: BackFacingModel
-#endif // G003
void Visual3d_View::EnableDepthTest( const Standard_Boolean enable ) const
{