Replacing french comments by english one
[occt.git] / src / AIS / AIS_ConnectedInteractive.cxx
1 // File:        AIS_ConnectedInteractive.cxx
2 // Created:     Wed Jan  8 15:24:35 1997
3 // Author:      Robert COUBLANC
4 //              <rob@robox.paris1.matra-dtv.fr>
5
6
7 #include <Standard_NotImplemented.hxx>
8
9 #include <AIS_ConnectedInteractive.ixx>
10 #include <SelectMgr_EntityOwner.hxx>
11 #include <Select3D_SensitiveEntity.hxx>
12 #include <Geom_Transformation.hxx>
13
14 #include <PrsMgr_ModedPresentation.hxx>
15 #include <PrsMgr_Presentation3d.hxx>
16 #include <OSD_Timer.hxx>
17
18
19 //=======================================================================
20 //function : AIS_ConnectedInteractive
21 //purpose  : 
22 //=======================================================================
23 AIS_ConnectedInteractive::AIS_ConnectedInteractive(const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d):
24 AIS_InteractiveObject(aTypeOfPresentation3d)
25 {    
26   SetHilightMode(0);
27 }
28
29 //=======================================================================
30 //function : Type
31 //purpose  : 
32 //=======================================================================
33 AIS_KindOfInteractive AIS_ConnectedInteractive::Type() const
34 {return AIS_KOI_Object;}
35
36 Standard_Integer AIS_ConnectedInteractive::Signature() const
37 {return 0; }
38
39
40
41
42 //=======================================================================
43 //function : Connect
44 //purpose  : 
45 //=======================================================================
46 void AIS_ConnectedInteractive::
47 Connect(const Handle(AIS_InteractiveObject)& anotherIObj)
48 {
49   // To have the time to Disconnect below, 
50   // the old is kept for a while. 
51   if(myReference==anotherIObj) return;
52   myOldReference = myReference;
53 //Disconnect();
54   myReference = anotherIObj ;
55 }
56
57 //=======================================================================
58 //function : Connect
59 //purpose  : 
60 //=======================================================================
61 void AIS_ConnectedInteractive::
62 Connect(const Handle(AIS_InteractiveObject)& anotherIobj, 
63         const TopLoc_Location& aLocation)
64 {
65   if(myLocation!=aLocation)
66     myLocation = aLocation;
67   if(myReference!=anotherIobj) {
68     myOldReference = myReference; // necessary to disconnect below..
69 //  Disconnect();
70     myReference = anotherIobj;}
71   
72 }
73
74
75 //=======================================================================
76 //function : Disconnect
77 //purpose  : 
78 //=======================================================================
79
80 void AIS_ConnectedInteractive::Disconnect()
81 {
82   for(Standard_Integer i =1;i<=myPresentations.Length();i++)
83     {
84       Handle(PrsMgr_Presentation3d) P = Handle(PrsMgr_Presentation3d)::DownCast(myPresentations(i).Presentation());
85       if(!P.IsNull()) {
86         P->Presentation()->DisconnectAll(Graphic3d_TOC_DESCENDANT);
87       }
88     }
89 }
90 //=======================================================================
91 //function : Compute
92 //purpose  : 
93 //=======================================================================
94
95 void AIS_ConnectedInteractive::
96 Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
97         const Handle(Prs3d_Presentation)& aPresentation, 
98         const Standard_Integer aMode)
99 {
100   static Handle(Geom_Transformation) myPrsTrans ;
101
102   if(!(HasLocation() ||HasConnection())) return;
103   
104   if(HasConnection()){
105     aPresentation->Clear(Standard_False);
106     aPresentation->RemoveAll();
107     aPresentationManager->Connect( this,myReference, aMode, aMode);
108     if(aPresentationManager->Presentation(myReference,aMode)->MustBeUpdated())
109       aPresentationManager->Update(myReference,aMode);
110     
111   }
112   if(HasLocation()){
113     myPrsTrans = new Geom_Transformation(myLocation.Transformation());
114     aPresentationManager->Transform(this, myPrsTrans, aMode);  }
115   aPresentation->ReCompute();
116 }
117
118 void AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector& aProjector, const Handle_Geom_Transformation& aTransformation, const Handle_Prs3d_Presentation& aPresentation)
119 {
120 // Standard_NotImplemented::Raise("AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector&, const Handle_Geom_Transformation&, const Handle_Prs3d_Presentation&)");
121   PrsMgr_PresentableObject::Compute( aProjector , aTransformation , aPresentation ) ;
122 }
123
124 void AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector& aProjector, const Handle_Prs3d_Presentation& aPresentation)
125 {
126 // Standard_NotImplemented::Raise("AIS_ConnectedInteractive::Compute(const Handle_Prs3d_Projector&, const Handle_Prs3d_Presentation&)");
127  PrsMgr_PresentableObject::Compute( aProjector , aPresentation ) ;
128 }
129
130 void AIS_ConnectedInteractive::Compute(const Handle_PrsMgr_PresentationManager2d& aPresentationManager2d, const Handle_Graphic2d_GraphicObject& aGraphicObject, const int anInteger)
131 {
132 // Standard_NotImplemented::Raise("AIS_ConnectedInteractive::Compute(const Handle_PrsMgr_PresentationManager2d&, const Handle_Graphic2d_GraphicObject&, const int)");
133  PrsMgr_PresentableObject::Compute( aPresentationManager2d ,aGraphicObject,anInteger) ;
134 }
135
136 //=======================================================================
137 //function : ComputeSelection
138 //purpose  : 
139 //=======================================================================
140 void AIS_ConnectedInteractive::ComputeSelection(const Handle(SelectMgr_Selection)& aSel,
141                                                 const Standard_Integer aMode)
142 {
143   if(!(HasLocation() ||HasConnection())) return;
144   
145   aSel->Clear();
146   if(!myReference->HasSelection(aMode))
147     myReference->UpdateSelection(aMode);
148   
149   
150 //  static OSD_Timer KronSel;
151 //  cout<<"debut calcul connexion primitives pour le mode "<<aMode<<endl;
152 //  KronSel.Reset();
153 //  KronSel.Start();
154   
155   const Handle(SelectMgr_Selection)& TheRefSel = myReference->Selection(aMode);
156   Handle(SelectMgr_EntityOwner) OWN = new SelectMgr_EntityOwner(this);
157   Handle(Select3D_SensitiveEntity) SE3D,SNew;
158   
159   if(TheRefSel->IsEmpty())
160     myReference->UpdateSelection(aMode);
161   for(TheRefSel->Init();TheRefSel->More();TheRefSel->Next()){
162     SE3D = *((Handle(Select3D_SensitiveEntity)*) &(TheRefSel->Sensitive()));
163     if(!SE3D.IsNull()){
164       SNew = SE3D->GetConnected(myLocation);
165       if(aMode==0)
166         SNew->Set(OWN);
167       aSel->Add(SNew);
168     }
169   }
170 //  KronSel.Stop();
171 //  cout<<"fin calcul connexion primitives pour le mode "<<aMode<<endl;
172 //  KronSel.Show();
173 }
174
175 void AIS_ConnectedInteractive::UpdateLocation()
176 {
177 // Standard_NotImplemented::Raise("AIS_ConnectedInteractive::UpdateLocation()");
178  SelectMgr_SelectableObject::UpdateLocation() ;
179 }
180 void AIS_ConnectedInteractive::UpdateLocation(const Handle(SelectMgr_Selection)& Sel)
181 {
182 // Standard_NotImplemented::Raise("AIS_ConnectedInteractive::UpdateLocation(const Handle(SelectMgr_Selection)& Sel)");
183  SelectMgr_SelectableObject::UpdateLocation(Sel) ;
184 }
185 /*void AIS_ConnectedInteractive::UpdateLocation(const Handle_Prs3d_Presentation& aPresentation)
186 {
187 // Standard_NotImplemented::Raise("AIS_ConnectedInteractive::UpdateLocation(const Handle_Prs3d_Presentation&)");
188  SelectMgr_SelectableObject::UpdateLocation(aPresentation) ;
189 }*/