// Created on: 1993-10-21
// Created by: Jean-Louis FRENKEL
// Copyright (c) 1993-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 License 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.
// Modified by rob 09-oct-96
#include <PrsMgr_Prs.hxx>
#include <PrsMgr_ModedPresentation.hxx>
#include <Visual3d_View.hxx>
-#include <Visual3d_ViewOrientation.hxx>
#include <Graphic3d_Structure.hxx>
#include <Precision.hxx>
void PrsMgr_Presentation3d::Erase ()
{
+ if (myStructure.IsNull())
+ {
+ return;
+ }
+
// Erase structure from structure manager
myStructure->Erase();
+ myStructure->Clear();
+ // Disconnect other structures
+ myStructure->DisconnectAll (Graphic3d_TOC_DESCENDANT);
// Clear groups and remove graphic structure
myStructure.Nullify();
}
// 2. The speed for animation is constant
//myPresentableObject = NULL;
SetUpdateStatus(Standard_True);
+ if (myStructure.IsNull())
+ {
+ return;
+ }
+
myStructure->Clear(Standard_True);
// myStructure->Clear(Standard_False);
-
myStructure->RemoveAll();
}
//purpose :
//=======================================================================
-Handle(Prs3d_Projector) PrsMgr_Presentation3d::Projector(const Handle(Graphic3d_DataStructureManager)& aProjector) {
- Visual3d_ViewOrientation VO = Handle(Visual3d_View)::DownCast(aProjector)->ViewOrientation();
+Handle(Prs3d_Projector) PrsMgr_Presentation3d::Projector(const Handle(Graphic3d_DataStructureManager)& aProjector)
+{
+ const Handle(Graphic3d_Camera)& aCamera = Handle(Visual3d_View)::DownCast (aProjector)->Camera();
+
Standard_Real DX, DY, DZ,XAt, YAt , ZAt,XUp, YUp, ZUp;
- VO.ViewReferencePlane().Coord(DX, DY, DZ);
- VO.ViewReferencePoint().Coord(XAt,YAt,ZAt);
- VO.ViewReferenceUp().Coord(XUp, YUp, ZUp);
- Visual3d_ViewMapping VM = Handle(Visual3d_View)::DownCast(aProjector)->ViewMapping();
- Standard_Boolean pers = (VM.Projection() == Visual3d_TOP_PERSPECTIVE);
- Standard_Real focale = 0.0 ;
- if (pers) {
- Standard_Real Xrp,Yrp,Zrp,ViewPlane,FrontPlane ;
- Graphic3d_Vertex Prp = VM.ProjectionReferencePoint() ;
- Prp.Coord(Xrp,Yrp,Zrp);
- FrontPlane = VM.FrontPlaneDistance() ;
- ViewPlane = VM.ViewPlaneDistance() ;
- focale = FrontPlane + Zrp - ViewPlane ;
- }
- Handle(Prs3d_Projector) Proj = new Prs3d_Projector(pers,focale,DX, DY, DZ,XAt, YAt , ZAt,XUp, YUp, ZUp);
- return Proj;
+ gp_Dir aDir = aCamera->Direction().Reversed();
+ DX = aDir.X(); DY = aDir.Y(); DZ = aDir.Z();
+
+ gp_Pnt anAt = aCamera->Center();
+ XAt = anAt.X(); YAt = anAt.Y(); ZAt = anAt.Z();
+
+ gp_Dir anUp = aCamera->Up();
+ XUp = anUp.X(); YUp = anUp.Y(); ZUp = anUp.Z();
+
+ Standard_Boolean pers = !aCamera->IsOrthographic();
+ Standard_Real focale = aCamera->Scale();
+
+ Handle(Prs3d_Projector) aProj =
+ new Prs3d_Projector(pers, focale, DX, DY, DZ, XAt, YAt, ZAt, XUp, YUp, ZUp);
+ return aProj;
}