0024754: Remove constructor for static class TopOpeBRep_PointGeomTool
[occt.git] / src / AIS / AIS_ConnectedInteractive.cxx
CommitLineData
b311480e 1// Created on: 1997-01-08
2// Created by: Robert COUBLANC
3// Copyright (c) 1997-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
17#include <Standard_NotImplemented.hxx>
18
19#include <AIS_ConnectedInteractive.ixx>
20#include <SelectMgr_EntityOwner.hxx>
21#include <Select3D_SensitiveEntity.hxx>
22#include <Geom_Transformation.hxx>
23
24#include <PrsMgr_ModedPresentation.hxx>
25#include <PrsMgr_Presentation3d.hxx>
26#include <OSD_Timer.hxx>
27
28
29//=======================================================================
30//function : AIS_ConnectedInteractive
31//purpose :
32//=======================================================================
33AIS_ConnectedInteractive::AIS_ConnectedInteractive(const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d):
34AIS_InteractiveObject(aTypeOfPresentation3d)
35{
36 SetHilightMode(0);
37}
38
39//=======================================================================
40//function : Type
41//purpose :
42//=======================================================================
43AIS_KindOfInteractive AIS_ConnectedInteractive::Type() const
44{return AIS_KOI_Object;}
45
46Standard_Integer AIS_ConnectedInteractive::Signature() const
47{return 0; }
48
49
50
51
52//=======================================================================
53//function : Connect
54//purpose :
55//=======================================================================
56void AIS_ConnectedInteractive::
57Connect(const Handle(AIS_InteractiveObject)& anotherIObj)
58{
81bba717 59 // To have the time to Disconnect below,
60 // the old is kept for a while.
7fd59977 61 if(myReference==anotherIObj) return;
62 myOldReference = myReference;
63//Disconnect();
64 myReference = anotherIObj ;
65}
66
67//=======================================================================
68//function : Connect
69//purpose :
70//=======================================================================
71void AIS_ConnectedInteractive::
72Connect(const Handle(AIS_InteractiveObject)& anotherIobj,
73 const TopLoc_Location& aLocation)
74{
75 if(myLocation!=aLocation)
76 myLocation = aLocation;
77 if(myReference!=anotherIobj) {
81bba717 78 myOldReference = myReference; // necessary to disconnect below..
7fd59977 79// Disconnect();
80 myReference = anotherIobj;}
81
82}
83
84
85//=======================================================================
86//function : Disconnect
87//purpose :
88//=======================================================================
89
90void AIS_ConnectedInteractive::Disconnect()
91{
92 for(Standard_Integer i =1;i<=myPresentations.Length();i++)
93 {
94 Handle(PrsMgr_Presentation3d) P = Handle(PrsMgr_Presentation3d)::DownCast(myPresentations(i).Presentation());
95 if(!P.IsNull()) {
96 P->Presentation()->DisconnectAll(Graphic3d_TOC_DESCENDANT);
97 }
98 }
99}
100//=======================================================================
101//function : Compute
792c785c 102//purpose :
7fd59977 103//=======================================================================
792c785c 104void AIS_ConnectedInteractive::Compute (const Handle(PrsMgr_PresentationManager3d)& thePrsMgr,
105 const Handle(Prs3d_Presentation)& thePrs,
106 const Standard_Integer theMode)
7fd59977 107{
792c785c 108 if (!(HasLocation() || HasConnection()))
109 {
110 return;
111 }
7fd59977 112
792c785c 113 if (HasConnection())
114 {
115 thePrs->Clear (Standard_False);
116 thePrs->RemoveAll();
117
118 if (!myReference->HasInteractiveContext())
119 {
120 myReference->SetContext (GetContext());
121 }
122 thePrsMgr->Connect (this, myReference, theMode, theMode);
123 if (thePrsMgr->Presentation (myReference, theMode)->MustBeUpdated())
124 {
125 thePrsMgr->Update (myReference, theMode);
126 }
127 }
128
129 if (HasLocation())
130 {
131 Handle(Geom_Transformation) aPrsTrans = new Geom_Transformation (myLocation.Transformation());
132 thePrsMgr->Transform (this, aPrsTrans, theMode);
7fd59977 133 }
792c785c 134 thePrs->ReCompute();
7fd59977 135}
136
137void AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector& aProjector, const Handle_Geom_Transformation& aTransformation, const Handle_Prs3d_Presentation& aPresentation)
138{
139// Standard_NotImplemented::Raise("AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector&, const Handle_Geom_Transformation&, const Handle_Prs3d_Presentation&)");
140 PrsMgr_PresentableObject::Compute( aProjector , aTransformation , aPresentation ) ;
141}
142
143void AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector& aProjector, const Handle_Prs3d_Presentation& aPresentation)
144{
145// Standard_NotImplemented::Raise("AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector&, const Handle_Prs3d_Presentation&)");
146 PrsMgr_PresentableObject::Compute( aProjector , aPresentation ) ;
147}
148
7fd59977 149//=======================================================================
150//function : ComputeSelection
151//purpose :
152//=======================================================================
ac04d101
SA
153
154void AIS_ConnectedInteractive::ComputeSelection(const Handle(SelectMgr_Selection)& aSel,
155 const Standard_Integer aMode)
7fd59977 156{
157 if(!(HasLocation() ||HasConnection())) return;
158
159 aSel->Clear();
160 if(!myReference->HasSelection(aMode))
161 myReference->UpdateSelection(aMode);
ac04d101 162
7fd59977 163 const Handle(SelectMgr_Selection)& TheRefSel = myReference->Selection(aMode);
164 Handle(SelectMgr_EntityOwner) OWN = new SelectMgr_EntityOwner(this);
ac04d101 165 Handle(Select3D_SensitiveEntity) SE3D, SNew;
7fd59977 166
167 if(TheRefSel->IsEmpty())
168 myReference->UpdateSelection(aMode);
ac04d101
SA
169 for(TheRefSel->Init();TheRefSel->More();TheRefSel->Next())
170 {
171 SE3D = Handle(Select3D_SensitiveEntity)::DownCast(TheRefSel->Sensitive());
172 if(!SE3D.IsNull())
173 {
174 // Get the copy of SE3D
7fd59977 175 SNew = SE3D->GetConnected(myLocation);
176 if(aMode==0)
ac04d101
SA
177 {
178 SNew->Set(OWN);
179 // In case if SE3D caches some location-dependent data
180 // that must be updated after setting OWN
181 SNew->SetLocation(myLocation);
182 }
7fd59977 183 aSel->Add(SNew);
184 }
185 }
7fd59977 186}
187
188void AIS_ConnectedInteractive::UpdateLocation()
189{
190// Standard_NotImplemented::Raise("AIS_ConnectedInteractive::UpdateLocation()");
191 SelectMgr_SelectableObject::UpdateLocation() ;
192}
193void AIS_ConnectedInteractive::UpdateLocation(const Handle(SelectMgr_Selection)& Sel)
194{
195// Standard_NotImplemented::Raise("AIS_ConnectedInteractive::UpdateLocation(const Handle(SelectMgr_Selection)& Sel)");
196 SelectMgr_SelectableObject::UpdateLocation(Sel) ;
197}
198/*void AIS_ConnectedInteractive::UpdateLocation(const Handle_Prs3d_Presentation& aPresentation)
199{
200// Standard_NotImplemented::Raise("AIS_ConnectedInteractive::UpdateLocation(const Handle_Prs3d_Presentation&)");
201 SelectMgr_SelectableObject::UpdateLocation(aPresentation) ;
202}*/