1 // Copyright (c) 1998-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
15 #include <PrsMgr_PresentationManager3d.ixx>
16 #include <PrsMgr_Presentation3d.hxx>
17 #include <Prs3d_ShadingAspect.hxx>
18 #include <Visual3d_TransientManager.hxx>
19 #include <V3d_View.hxx>
20 #include <TColStd_ListIteratorOfListOfTransient.hxx>
22 PrsMgr_PresentationManager3d::PrsMgr_PresentationManager3d (const Handle(Graphic3d_StructureManager)& aStructureManager):myStructureManager(aStructureManager) {}
24 Standard_Boolean PrsMgr_PresentationManager3d::Is3D() const
25 {return Standard_True;}
27 Handle(PrsMgr_Presentation) PrsMgr_PresentationManager3d::newPresentation (const Handle(PrsMgr_PresentableObject) & aPresentableObject) {
29 return new PrsMgr_Presentation3d(this,aPresentableObject);
32 void PrsMgr_PresentationManager3d::Connect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Handle(PrsMgr_PresentableObject)& anOtherObject, const Standard_Integer aMode, const Standard_Integer anOtherMode) {
33 if (!HasPresentation(aPresentableObject,aMode)){
34 AddPresentation(aPresentableObject,aMode);
36 if (!HasPresentation(anOtherObject,anOtherMode)){
37 AddPresentation(anOtherObject,anOtherMode);
39 CastPresentation(aPresentableObject,aMode)->Connect(CastPresentation(anOtherObject,aMode));
42 //=======================================================================
43 //function : Transform
45 //=======================================================================
46 void PrsMgr_PresentationManager3d::Transform(const Handle(PrsMgr_PresentableObject)& aPresentableObject,const Handle(Geom_Transformation)& aTransformation, const Standard_Integer aMode) {
47 CastPresentation(aPresentableObject,aMode)->Transform(aTransformation);
50 //=======================================================================
53 //=======================================================================
55 void PrsMgr_PresentationManager3d::Place(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_Length X,const Quantity_Length Y,const Quantity_Length Z,const Standard_Integer aMode) {
56 CastPresentation(aPresentableObject,aMode)->Place(X,Y,Z);
59 //=======================================================================
62 //=======================================================================
64 void PrsMgr_PresentationManager3d::Multiply(const Handle(PrsMgr_PresentableObject)& aPresentableObject,const Handle(Geom_Transformation)& aTransformation, const Standard_Integer aMode) {
65 CastPresentation(aPresentableObject,aMode)->Multiply(aTransformation);
68 //=======================================================================
71 //=======================================================================
73 void PrsMgr_PresentationManager3d::Move(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_Length X,const Quantity_Length Y,const Quantity_Length Z,const Standard_Integer aMode) {
74 CastPresentation(aPresentableObject,aMode)->Move(X,Y,Z);
77 //=======================================================================
80 //=======================================================================
82 void PrsMgr_PresentationManager3d::Color(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_NameOfColor aColor, const Standard_Integer aMode) {
83 if (!HasPresentation(aPresentableObject,aMode)){
84 AddPresentation(aPresentableObject,aMode);
86 else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
87 Update(aPresentableObject,aMode);
89 CastPresentation(aPresentableObject,aMode)->Color(aColor);
92 Add(aPresentableObject,aMode);
96 //=======================================================================
99 //=======================================================================
101 void PrsMgr_PresentationManager3d::BoundBox(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Standard_Integer aMode) {
102 if (!HasPresentation(aPresentableObject,aMode)){
103 AddPresentation(aPresentableObject,aMode);
105 else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
106 Update(aPresentableObject,aMode);
108 CastPresentation(aPresentableObject,aMode)->BoundBox();
110 //=======================================================================
111 //function : SetShadingAspect
113 //=======================================================================
116 void PrsMgr_PresentationManager3d::SetShadingAspect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_NameOfColor aColor, const Graphic3d_NameOfMaterial aMaterial, const Standard_Integer aMode) {
117 //void PrsMgr_PresentationManager3d::SetShadingAspect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_NameOfColor aColor, const Graphic3d_NameOfPhysicalMaterial aMaterial, const Standard_Integer aMode) {
119 Handle(Prs3d_ShadingAspect) sa = new Prs3d_ShadingAspect;
120 sa->SetColor(aColor);
121 sa->SetMaterial(aMaterial);
122 SetShadingAspect(aPresentableObject,sa,aMode);
125 void PrsMgr_PresentationManager3d::SetShadingAspect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Handle(Prs3d_ShadingAspect)& aShadingAspect, const Standard_Integer aMode) {
127 if (HasPresentation(aPresentableObject,aMode)){
128 CastPresentation(aPresentableObject,aMode)->SetShadingAspect(aShadingAspect);
133 //=======================================================================
134 //function : CastPresentation
136 //=======================================================================
138 Handle(PrsMgr_Presentation3d) PrsMgr_PresentationManager3d::CastPresentation(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Standard_Integer aMode) const {
139 return Handle(PrsMgr_Presentation3d)::DownCast(Presentation(aPresentableObject,aMode));
144 //=======================================================================
145 //function : BeginDraw
147 //=======================================================================
149 void PrsMgr_PresentationManager3d::BeginDraw()
151 PrsMgr_PresentationManager::BeginDraw();
155 //=======================================================================
158 //=======================================================================
160 void PrsMgr_PresentationManager3d::EndDraw(const Handle(V3d_View)& theView, const Standard_Boolean DoubleBuffer)
162 if (!theView->TransientManagerBeginDraw (DoubleBuffer, Standard_True))
164 myImmediateMode = Standard_False;
167 if(myImmediateList.IsEmpty() && myStrList.IsEmpty()) {
168 Visual3d_TransientManager::EndDraw();
169 myImmediateMode = Standard_False;
172 TColStd_ListIteratorOfListOfTransient it(myImmediateList);
173 Handle(PrsMgr_Presentation3d) P3d;
174 for (; it.More(); it.Next()) {
175 P3d = *((Handle(PrsMgr_Presentation3d)*)&(it.Value()));
176 Visual3d_TransientManager::DrawStructure(P3d->Presentation());
179 Handle(Standard_Transient) Tr;
180 for(it.Initialize(myStrList);it.More();it.Next()){
182 Visual3d_TransientManager::DrawStructure(*((Handle(Prs3d_Presentation)*)&Tr));
185 Visual3d_TransientManager::EndDraw();
186 myImmediateMode = Standard_False;
190 //=======================================================================
193 //=======================================================================
194 void PrsMgr_PresentationManager3d::AddToImmediateList(const Handle(Prs3d_Presentation)& P){