0024203: Command "sameparameter" in DRAW on attached edge set tolerance equal to...
[occt.git] / src / AIS / AIS_InteractiveContext.cxx
CommitLineData
b311480e 1// Created on: 1997-01-17
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//
973c2be1 8// This library is free software; you can redistribute it and / or modify it
9// under the terms of the GNU Lesser General Public version 2.1 as published
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.
b311480e 16
7fd59977 17// Modified by XAB & Serguei Dec 97 (angle &deviation coeffts)
7fd59977 18
19#define BUC60577 //GG_101099 Enable to compute correctly
20// transparency with more than one object in the view.
21
7fd59977 22#define BUC60632 //GG 15/03/00 Add protection on SetDisplayMode()
23// method, compute only authorized presentation.
24
25#define BUC60688 //GG 25/05/00 Add SetSensitivity() methods.
26
27#define BUC60722 //GG 04/09/00 Always enable viewer update when erasing something
28
29#define IMP051001 //GG Adds SetZDetected() and ZDetected() methods
30
31#define OCC172 //SAV clear static map before destroying context.
32
33#define OCC204 //SAV 26/02/02 : pass <updateviewer> flag to
b311480e 34// AddOrRemoveCurrentObject method from ClearGlobal.
7fd59977 35
36#define OCC4373 //SAN 10/11/03 : improve display mode management in
b311480e 37// Display( IO, updateviewer ) and
38// SetDisplayMode( IO, mode, updateviewer ) methods
7fd59977 39
40#include <AIS_InteractiveContext.ixx>
41
42//#include <AIS_DataMapIteratorOfDataMapOfInteractiveInteger.hxx>
43#include <TColStd_ListIteratorOfListOfInteger.hxx>
44#include <TColStd_MapIteratorOfMapOfTransient.hxx>
45#include <AIS_LocalContext.hxx>
46#include <AIS_LocalStatus.hxx>
47#include <Precision.hxx>
48#include <AIS_Selection.hxx>
49#include <AIS_DataMapIteratorOfDataMapOfIOStatus.hxx>
50#include <AIS_ConnectedShape.hxx>
51#include <AIS_MultipleConnectedShape.hxx>
52#include <AIS_DataMapIteratorOfDataMapOfILC.hxx>
53#include <AIS_GlobalStatus.hxx>
54#include <AIS_MapIteratorOfMapOfInteractive.hxx>
55#include <PrsMgr_ModedPresentation.hxx>
56#include <Visual3d_ViewManager.hxx>
57#include <Prs3d_ShadingAspect.hxx>
58#include <AIS_Shape.hxx>
59#include <Graphic3d_AspectFillArea3d.hxx>
60#include <HLRBRep.hxx>
61#include <Prs3d_IsoAspect.hxx>
62#include <Prs3d_DatumAspect.hxx>
63#include <Prs3d_PlaneAspect.hxx>
64#include <PrsMgr_PresentableObject.hxx>
e33e7e78 65#include <Standard_Atomic.hxx>
7fd59977 66#include <UnitsAPI.hxx>
67
68#include <AIS_Trihedron.hxx>
69#include <Geom_Axis2Placement.hxx>
70#include <OSD_Environment.hxx>
71
72#include <AIS_ListIteratorOfListOfInteractive.hxx>
73
74// In the method GetDefModes() the returned value of the selection mode
75// is always equal to 0 if it is -1.
76#define BUC61051
77
0d969553 78// The local context is closed the method ::ResetOriginalState() sets the selection mode equal to 0
7fd59977 79// in spite of the selection mode of the interactive object in Natural Point.
80#define OCC166
81
7fd59977 82static Standard_Boolean AISDebugModeOn()
83{
84// static OSD_Environment aisdb("AISDEBUGMODE");
85// return !aisdb.Value().IsEmpty();
86 static Standard_Integer isDebugMode(-1);
87 if (isDebugMode < 0) {
88 isDebugMode = 1;
89 OSD_Environment aisdb("AISDEBUGMODE");
90 if (aisdb.Value().IsEmpty())
91 isDebugMode = 0;
92 }
93 return (isDebugMode != 0);
94}
95
e33e7e78 96namespace
7fd59977 97{
e33e7e78
RK
98 static volatile Standard_Integer THE_AIS_INDEX_SEL = 0;
99 static volatile Standard_Integer THE_AIS_INDEX_CUR = 0;
7fd59977 100
e33e7e78
RK
101 static TCollection_AsciiString AIS_Context_NewSelName()
102 {
103 return TCollection_AsciiString ("AIS_SelContext_")
104 + TCollection_AsciiString (Standard_Atomic_Increment (&THE_AIS_INDEX_SEL));
105 }
7fd59977 106
e33e7e78
RK
107 static TCollection_AsciiString AIS_Context_NewCurName()
108 {
109 return TCollection_AsciiString ("AIS_CurContext_")
110 + TCollection_AsciiString (Standard_Atomic_Increment (&THE_AIS_INDEX_CUR));
111 }
112};
7fd59977 113
114//=======================================================================
115//function : AIS_InteractiveContext
116//purpose :
117//=======================================================================
118
119AIS_InteractiveContext::AIS_InteractiveContext(const Handle(V3d_Viewer)& MainViewer):
120mgrSelector(new SelectMgr_SelectionManager()),
121myMainPM(new PrsMgr_PresentationManager3d(MainViewer->Viewer())),
122myMainVwr(MainViewer),
123myMainSel(new StdSelect_ViewerSelector3d()),
7fd59977 124myToHilightSelected( Standard_False ),
125myFilters(new SelectMgr_OrFilter()),
126myDefaultDrawer(new Prs3d_Drawer()),
127myDefaultColor(Quantity_NOC_GOLDENROD),
128myHilightColor(Quantity_NOC_CYAN1),
129mySelectionColor(Quantity_NOC_GRAY80),
130myPreselectionColor(Quantity_NOC_GREEN),
131mySubIntensity(Quantity_NOC_GRAY40),
132myDisplayMode(0),
133myCurLocalIndex(0),
134#ifdef IMP051001
135myZDetectionFlag(0),
136#endif
137myIsAutoActivateSelMode( Standard_True )
138{
139 InitAttributes();
140}
141
7fd59977 142void AIS_InteractiveContext::Delete() const
143{
30bf45dc 144 //Clear the static current selection. Else the memory
145 //is not release
146 AIS_Selection::ClearCurrentSelection();
7fd59977 147#ifdef OCC172
148 // to avoid an exception
149 if ( AIS_Selection::Find( mySelectionName.ToCString() ) )
150 AIS_Selection::Remove( mySelectionName.ToCString() );
151
152 // to avoid an exception
153 if ( AIS_Selection::Find( myCurrentName.ToCString() ) )
154 AIS_Selection::Remove( myCurrentName.ToCString() );
155
156 // let's remove one reference explicitly. this operation's supposed to
157 // be performed when mgrSelector will be destroyed but anyway...
158 mgrSelector->Remove( myMainSel );
159#endif
da0e82aa 160 AIS_ListOfInteractive aList;
161
162 AIS_DataMapIteratorOfDataMapOfIOStatus anIt(myObjects);
163 Handle(AIS_InteractiveContext) aNullContext;
164 for(; anIt.More() ; anIt.Next())
165 {
166 Handle(AIS_InteractiveObject) anObj = anIt.Key();
167 anObj->SetContext(aNullContext);
168
169 }
7fd59977 170 MMgt_TShared::Delete();
171}
172
173//=======================================================================
174//function : AIS_SelectionName
175//purpose :
176//=======================================================================
177const TCollection_AsciiString& AIS_InteractiveContext::SelectionName() const
178{
179 if(!HasOpenedContext())
180 return mySelectionName;
181 return myLocalContexts(myCurLocalIndex)->SelectionName();
182
183}
184
185
186
187//=======================================================================
188//function : UpdateCurrentViewer
189//purpose :
190//=======================================================================
191
192void AIS_InteractiveContext::UpdateCurrentViewer()
193{
194 if (!myMainVwr.IsNull())
195 myMainVwr->Update();
196}
197
7fd59977 198
199//=======================================================================
200//function : DomainOfMainViewer
201//purpose :
202//=======================================================================
203
204Standard_CString AIS_InteractiveContext::DomainOfMainViewer() const
205{
206 return myMainVwr->Domain();
207
208}
209
210//=======================================================================
211//function : DisplayedObjects
212//purpose :
213//=======================================================================
214
215void AIS_InteractiveContext::DisplayedObjects(AIS_ListOfInteractive& aListOfIO,
216 const Standard_Boolean OnlyFromNeutral) const
217{
218#ifdef DEBUG
219 cout<<"AIS_IC::DisplayedObjects"<<endl;
220#endif
221
222 AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
223 if(!HasOpenedContext() || OnlyFromNeutral){
224 for(;It.More();It.Next()){
225 if(It.Value()->GraphicStatus()==AIS_DS_Displayed)
226 aListOfIO.Append(It.Key());
227 }
228 }
229 else{
230 TColStd_MapOfTransient theMap;
0d969553 231 // neutral point
7fd59977 232 for(;It.More();It.Next()){
233 if(It.Value()->GraphicStatus()==AIS_DS_Displayed)
234 theMap.Add(It.Key());
235 }
236#ifdef DEBUG
237 cout<<"\tFrom Neutral Point : "<<theMap.Extent()<<endl;
238#endif
239
0d969553 240 //parse all local contexts...
96a95605 241#ifdef DEBUG
7fd59977 242 Standard_Integer NbDisp;
243 for(AIS_DataMapIteratorOfDataMapOfILC it1(myLocalContexts);it1.More();it1.Next()){
244 const Handle(AIS_LocalContext)& LC = it1.Value();
245 NbDisp = LC->DisplayedObjects(theMap);
7fd59977 246 cout<<"\tIn Local Context "<<it1.Key()<<" : "<<NbDisp<<endl;
7fd59977 247 }
96a95605 248#endif
7fd59977 249 Handle(AIS_InteractiveObject) curIO;
250 Handle(Standard_Transient) Tr;
251 for(TColStd_MapIteratorOfMapOfTransient it2(theMap);it2.More();it2.Next()){
252 Tr = it2.Key();
253 curIO = *((Handle(AIS_InteractiveObject)*) &Tr);
254 aListOfIO.Append(curIO);
255 }
256 }
257}
258//=======================================================================
259//function : DisplayedObjects
260//purpose :
261//=======================================================================
262
263void AIS_InteractiveContext::DisplayedObjects(const AIS_KindOfInteractive TheKind,
264 const Standard_Integer TheSign,
265 AIS_ListOfInteractive& aListOfIO,
266 const Standard_Boolean /*OnlyFromNeutral*/) const
267{
268 ObjectsByDisplayStatus( TheKind, TheSign, AIS_DS_Displayed, aListOfIO );
269}
270
271//=======================================================================
7fd59977 272//function : ErasedObjects
273//purpose :
274//=======================================================================
275
276void AIS_InteractiveContext::ErasedObjects(AIS_ListOfInteractive& theListOfIO) const
277{
eb4320f2 278 ObjectsByDisplayStatus( AIS_DS_Erased, theListOfIO );
7fd59977 279}
280
281//=======================================================================
282//function : ErasedObjects
283//purpose :
284//=======================================================================
285
286void AIS_InteractiveContext::ErasedObjects(const AIS_KindOfInteractive TheKind,
287 const Standard_Integer TheSign,
288 AIS_ListOfInteractive& theListOfIO) const
289{
eb4320f2 290 ObjectsByDisplayStatus( TheKind, TheSign, AIS_DS_Erased, theListOfIO );
7fd59977 291}
292
293//=======================================================================
294//function : ObjectsByDisplayStatus
295//purpose :
296//=======================================================================
297
298void AIS_InteractiveContext::ObjectsByDisplayStatus(const AIS_DisplayStatus theStatus,
299 AIS_ListOfInteractive& theListOfIO) const
300{
301 AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
302 for(;It.More();It.Next()){
303 if(It.Value()->GraphicStatus() == theStatus)
304 theListOfIO.Append(It.Key());
305 }
306}
307
308//=======================================================================
309//function : ObjectsByDisplayStatus
310//purpose :
311//=======================================================================
312
313void AIS_InteractiveContext::ObjectsByDisplayStatus(const AIS_KindOfInteractive TheKind,
314 const Standard_Integer TheSign,
315 const AIS_DisplayStatus theStatus,
316 AIS_ListOfInteractive& theListOfIO) const
317{
318 AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
319 for(;It.More();It.Next()){
320 if(It.Value()->GraphicStatus()==theStatus){
321 if(It.Key()->Type()==TheKind){
322 if(TheSign ==-1)
323 theListOfIO.Append(It.Key());
324 else{
325 if(It.Key()->Signature()==TheSign)
326 theListOfIO.Append(It.Key());
327 }
328 }
329 }
330 }
331}
332
333//=======================================================================
334//function : ObjectsInside
335//purpose :
336//=======================================================================
337
338void AIS_InteractiveContext::ObjectsInside(AIS_ListOfInteractive& aListOfIO,
339 const AIS_KindOfInteractive TheKind,
340 const Standard_Integer TheSign) const
341{
342 AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
343 if(TheKind==AIS_KOI_None && TheSign ==-1){
344 for(;It.More();It.Next()){
345 aListOfIO.Append(It.Key());
346 }
347 }
348 else{
349 for(;It.More();It.Next()){
350 if(It.Key()->Type()==TheKind){
351 if(TheSign ==-1)
352 aListOfIO.Append(It.Key());
353 else{
354 if(It.Key()->Signature()==TheSign)
355 aListOfIO.Append(It.Key());
356 }
357 }
358 }
359 }
360}
361
362//=======================================================================
363//function : Display
364//purpose :
365//=======================================================================
366
367void AIS_InteractiveContext::Display(const Handle(AIS_InteractiveObject)& anIObj,
368 const Standard_Boolean updateviewer )
369{
370 if(anIObj.IsNull()) return;
371
372 Standard_Integer DispMode,HiMod,SelMode;
373
374 GetDefModes(anIObj,DispMode,HiMod,SelMode);
375
376 Handle (AIS_InteractiveContext) aThis = this;
377 if(!anIObj->HasInteractiveContext())
378 anIObj->SetContext(aThis);
379
0d969553 380 //NO LOCAL CONTEXT OPEN
7fd59977 381 if(!HasOpenedContext()) {
382#ifndef OCC4373
383 // SAN : Do not return here. Perform advanced display mode analysis a bit later...
384 if(IsDisplayed(anIObj)) return;
385#endif
eb4320f2 386
0d969553 387 // it did not yet exist
7fd59977 388 if(!myObjects.IsBound(anIObj)){
389
390 Handle(AIS_GlobalStatus) STATUS=
391#ifdef OCC166
392 new AIS_GlobalStatus(AIS_DS_Displayed,DispMode,SelMode);
393#else
394 new AIS_GlobalStatus(AIS_DS_Displayed,DispMode,0);
395#endif
396 myObjects.Bind (anIObj,STATUS);
397 myMainPM->Display(anIObj,DispMode);
398 if( myIsAutoActivateSelMode )
399 {
400 if(!mgrSelector->Contains(anIObj))
401 mgrSelector->Load(anIObj);
402 mgrSelector->Activate(anIObj,SelMode,myMainSel);
403 }
404
405 if(updateviewer) myMainVwr->Update();
406 }
0d969553 407 // it is somewhere else...
7fd59977 408 else {
409 // CLE
410 // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
411 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
412 // ENDCLE
eb4320f2 413 if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
414 {
415 // SAN : erase presentations for all display modes different from <DispMode>;
416 // then make sure <DispMode> is displayed and maybe highlighted;
417 // Finally, activate selection mode <SelMode> if not yet activated.
7fd59977 418 TColStd_ListOfInteger aModesToRemove;
e33e7e78
RK
419 TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
420 for(;ItL.More();ItL.Next()){
7fd59977 421
422 Standard_Integer OldMode = ItL.Value();
423
424 if(OldMode!=DispMode){
425 aModesToRemove.Append(OldMode);
426 if(myMainPM->IsHighlighted(anIObj,OldMode))
427 myMainPM->Unhighlight(anIObj,OldMode);
428 myMainPM->Erase(anIObj,OldMode);
429 }
430 }
431
432 for(ItL.Initialize(aModesToRemove);ItL.More();ItL.Next())
433 STATUS->RemoveDisplayMode(ItL.Value());
434
435 if(!STATUS->IsDModeIn(DispMode))
436 STATUS->AddDisplayMode(DispMode);
437
438 myMainPM->Display(anIObj,DispMode);
eb4320f2 439 if (STATUS->GraphicStatus() == AIS_DS_Erased)
440 {
441 STATUS->SetGraphicStatus(AIS_DS_Displayed);
442 }
7fd59977 443 if(STATUS->IsHilighted()){
444 myMainPM->Highlight(anIObj,HiMod);
445 }
446 if( myIsAutoActivateSelMode )
447 {
448 if(!mgrSelector->Contains(anIObj))
449 mgrSelector->Load(anIObj);
450 if(!mgrSelector->IsActivated(anIObj,SelMode))
451 mgrSelector->Activate(anIObj,SelMode,myMainSel);
452 }
7fd59977 453 }
454 }
455
456 if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
457 myMainVwr->Viewer()->SetTransparency(Standard_True);
458 if(updateviewer) myMainVwr->Update();
7fd59977 459 }
460
0d969553 461 // LOCAL CONTEXT OPEN
7fd59977 462 else
463 {
464 myLocalContexts(myCurLocalIndex)->Display(anIObj,DispMode,anIObj->AcceptShapeDecomposition(),SelMode);
465
466 if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
467 myMainVwr->Viewer()->SetTransparency(Standard_True);
468
469
470 if(updateviewer) myMainVwr->Update();
471 }
472}
473
474//=======================================================================
475//function : Display
476//purpose :
477//=======================================================================
478
479void AIS_InteractiveContext::Display(const Handle(AIS_InteractiveObject)& anIObj,
480 const Standard_Integer aDisplayMode,
481 const Standard_Integer aSelectionMode,
482 const Standard_Boolean updateviewer,
483 const Standard_Boolean allowdecomposition)
484{
485 if(anIObj.IsNull()) return;
486
487 if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
488
0d969553 489 // if no local context...
7fd59977 490 if(!HasOpenedContext()) {
491 // if(!anIObj->HasDisplayMode())
492 // anIObj->SetDisplayMode(aDisplayMode);
493
494 if(!myObjects.IsBound(anIObj)){
495 Handle(AIS_GlobalStatus) STATUS=
496 new AIS_GlobalStatus(AIS_DS_Displayed,aDisplayMode,aSelectionMode);
497 myObjects.Bind (anIObj,STATUS);
498 myMainPM->Display(anIObj,aDisplayMode);
499 if(aSelectionMode!=-1){
500 if(!mgrSelector->Contains(anIObj))
501 mgrSelector->Load(anIObj,aSelectionMode);
502 mgrSelector->Activate(anIObj,aSelectionMode,myMainSel);
503 }
504 if(updateviewer) myMainVwr->Update();
505 }
506 // anIObj->SelectionMode(aSelectionMode);
507 else{
508 // CLE
509 // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
510 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
511 // ENDCLE
512 if(!STATUS->IsDModeIn(aDisplayMode)){
513 myMainPM->Display(anIObj,aDisplayMode);
514 STATUS->AddDisplayMode(aDisplayMode);
515 if(STATUS->IsSubIntensityOn())
516 myMainPM->Color(anIObj,mySubIntensity,aDisplayMode);
517 }
518 if(aSelectionMode!=-1){
519 STATUS->AddSelectionMode(aSelectionMode);
520 mgrSelector->Activate(anIObj,aSelectionMode,myMainSel);
521 }
522 if(updateviewer) myMainVwr->Update();
523
524 }
525 }
526 else
527 {
528 myLocalContexts(myCurLocalIndex)->Display(anIObj,aDisplayMode,allowdecomposition,aSelectionMode);
529 if(updateviewer) myMainVwr->Update();
530 }
531}
532
533
534//=======================================================================
535//function : Load
536//purpose :
537//=======================================================================
538
539void AIS_InteractiveContext::Load(const Handle(AIS_InteractiveObject)& anIObj,
540 const Standard_Integer SelMode,
541 const Standard_Boolean AllowDecomposition)
542{
543 if(anIObj.IsNull()) return;
544 if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
545
546
547 if(!HasOpenedContext()) {
548 if(SelMode==-1 && !AllowDecomposition){
549 Standard_Integer DispMode,HiMod,SelModeDef;
550
551 GetDefModes(anIObj,DispMode,HiMod,SelModeDef);
552 Handle(AIS_GlobalStatus) STATUS=
eb4320f2 553 new AIS_GlobalStatus(AIS_DS_Erased,DispMode,SelModeDef);
7fd59977 554 myObjects.Bind (anIObj,STATUS);
555 return;
556 }
557 }
558 myLocalContexts(myCurLocalIndex)->Load(anIObj,AllowDecomposition,SelMode);
559}
560
561
562//=======================================================================
563//function : Erase
564//purpose :
565//=======================================================================
566
567void AIS_InteractiveContext::Erase(const Handle(AIS_InteractiveObject)& anIObj,
eb4320f2 568 const Standard_Boolean updateviewer)
7fd59977 569{
570 if(anIObj.IsNull()) return;
571
572 if ( !anIObj->IsAutoHilight() )
573 anIObj->ClearSelected();
574
575 if(!HasOpenedContext()){
eb4320f2 576 EraseGlobal(anIObj,updateviewer);
7fd59977 577 }
578 else
579 {
0d969553
Y
580 // First it is checked if it is possible to remove in the current local context
581 // then one tries to remove in other local contexts, if they allow it...
7fd59977 582
583 Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->Erase(anIObj);
584// if(!WasInCtx) {
585 AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
586 for (;It.More();It.Next()){
587 if(It.Value()->AcceptErase())
588#ifdef BUC60722
589 WasInCtx |= It.Value()->Erase(anIObj);
590#else
591 WasInCtx = It.Value()->Erase(anIObj);
592#endif
593 }
594
595 if(!WasInCtx)
eb4320f2 596 EraseGlobal(anIObj,updateviewer);
7fd59977 597 else
598 if(updateviewer) myMainVwr->Update();
599 }
600}
7fd59977 601
602//=======================================================================
603//function : EraseAll
604//purpose :
605//=======================================================================
606
eb4320f2 607void AIS_InteractiveContext::EraseAll(const Standard_Boolean updateviewer)
7fd59977 608{
eb4320f2 609 if(!HasOpenedContext())
610 {
611 for (AIS_DataMapIteratorOfDataMapOfIOStatus ItM(myObjects); ItM.More(); ItM.Next())
612 {
7fd59977 613 if(ItM.Value()->GraphicStatus() == AIS_DS_Displayed)
eb4320f2 614 Erase(ItM.Key(),Standard_False);
7fd59977 615 }
eb4320f2 616 if(updateviewer)
617 {
7fd59977 618 myMainVwr->Update();
7fd59977 619 }
620 }
7fd59977 621}
622
623//=======================================================================
624//function : DisplayAll
625//purpose :
626//=======================================================================
627
eb4320f2 628void AIS_InteractiveContext::DisplayAll(const Standard_Boolean updateviewer)
7fd59977 629{
630 if(!HasOpenedContext()){
7fd59977 631
eb4320f2 632 AIS_DisplayStatus aStatus;
633
634 if (!HasOpenedContext())
635 {
636 for (AIS_DataMapIteratorOfDataMapOfIOStatus ItM (myObjects); ItM.More(); ItM.Next())
637 {
638 aStatus = ItM.Value()->GraphicStatus();
639 if (aStatus == AIS_DS_Erased)
7fd59977 640 Display(ItM.Key(),Standard_False);
7fd59977 641 }
eb4320f2 642 if(updateviewer)
643 {
7fd59977 644 myMainVwr->Update();
7fd59977 645 }
646 }
647 }
648
649}
650
651//=======================================================================
652//function : DisplaySelected
653//purpose :
654//=======================================================================
655
656void AIS_InteractiveContext::DisplaySelected(const Standard_Boolean updateviewer)
657{
658
eb4320f2 659 if (!HasOpenedContext())
660 {
7fd59977 661 Standard_Boolean found = Standard_False;
662 Handle(AIS_Selection) sel = AIS_Selection::Selection(myCurrentName.ToCString());
663 Handle(AIS_InteractiveObject) iObj;
eb4320f2 664 for (sel->Init(); sel->More(); sel->Next())
665 {
7fd59977 666 iObj = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
667 Display(iObj,Standard_False);
668 found = Standard_True;
669 }
eb4320f2 670 if (found && updateviewer)
671 {
7fd59977 672 myMainVwr->Update();
7fd59977 673 }
674 }
675}
676
677
678//=======================================================================
679//function : EraseSelected
680//purpose :
681//=======================================================================
682
eb4320f2 683void AIS_InteractiveContext::EraseSelected(const Standard_Boolean updateviewer)
7fd59977 684{
eb4320f2 685 if (!HasOpenedContext())
686 {
7fd59977 687 Standard_Boolean found = Standard_False;
688 Handle(AIS_Selection) sel = AIS_Selection::Selection(myCurrentName.ToCString());
689 Handle(AIS_InteractiveObject) iObj;
eb4320f2 690 for (sel->Init();sel->More();sel->Next())
691 {
7fd59977 692 iObj = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
eb4320f2 693 Erase(iObj,Standard_False);
7fd59977 694 found = Standard_True;
695 }
eb4320f2 696 if(found && updateviewer)
697 {
7fd59977 698 myMainVwr->Update();
7fd59977 699 }
700 }
701}
702//=======================================================================
703//function :
704//purpose :
705//=======================================================================
706
707Standard_Boolean AIS_InteractiveContext::KeepTemporary(const Handle(AIS_InteractiveObject)& anIObj,
708 const Standard_Integer WhichContext)
709{
710 if(anIObj.IsNull()) return Standard_False;
711
712 if(!HasOpenedContext()) return Standard_False;
713 if(myObjects.IsBound(anIObj)) return Standard_False;
714 if(WhichContext!=-1 && !myLocalContexts.IsBound(WhichContext)) return Standard_False;
715
81bba717 716 // Protection : if one tries to preserve a temporary object
717 // which is not in the local active context... rob 11-06-97
7fd59977 718
719 Standard_Integer IsItInLocal = myCurLocalIndex;
720 Standard_Boolean Found(Standard_False);
721
722 while(IsItInLocal>0 && !Found){
723 if(!myLocalContexts.IsBound(IsItInLocal))
724 IsItInLocal--;
725 else if(myLocalContexts(IsItInLocal)->IsIn(anIObj))
726 Found = Standard_True;
727 else
728 IsItInLocal--;
729 }
730
731 if(!Found) return Standard_False;
732
733
734// const Handle(AIS_LocalStatus)& LS = (WhichContext== -1) ?
735// myLocalContexts(IsItInLocal)->Status(anIObj):myLocalContexts(WhichContext)->Status(anIObj);
736 // CLE
737 // const Handle(AIS_LocalStatus)& LS = myLocalContexts(IsItInLocal)->Status(anIObj);
738 Handle(AIS_LocalStatus) LS = myLocalContexts(IsItInLocal)->Status(anIObj);
739 // ENDCLE
740
741
742 if(LS->IsTemporary()){
743 Standard_Integer DM,HM,SM;
744 GetDefModes(anIObj,DM,HM,SM);
745
746 SM = LS->SelectionModes().IsEmpty() ? SM : LS->SelectionModes().First();
747 if(LS->DisplayMode()!= DM ){
748 Standard_Integer LSM = LS->SelectionModes().IsEmpty() ? -1 : LS->SelectionModes().First();
749 myLocalContexts(IsItInLocal)->Display(anIObj,DM,LS->Decomposed(),LSM);
750 }
751
752 Handle (AIS_GlobalStatus) GS = new AIS_GlobalStatus(AIS_DS_Displayed,
753 DM,
754 SM,
755 Standard_False);
756// GS->SubIntensityOn();
757 myObjects.Bind(anIObj,GS);
758 mgrSelector->Load(anIObj);
759 mgrSelector->Activate(anIObj,SM,myMainSel);
760
761 LS->SetTemporary(Standard_False);
762 }
763 return Standard_True;
764}
765
766
767//=======================================================================
768//purpose :
769//=======================================================================
770
771AIS_DisplayStatus AIS_InteractiveContext::DisplayStatus(const Handle(AIS_InteractiveObject)& anIObj) const
772{
773 if(anIObj.IsNull()) return AIS_DS_None;
774
775 if(myObjects.IsBound(anIObj))
776 return myObjects(anIObj)->GraphicStatus();
777
778 AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
779 for(;ItM.More();ItM.Next()){
780 if(ItM.Value()->IsIn(anIObj))
781 return AIS_DS_Temporary;
782 }
783
784 return AIS_DS_None;
785
786}
787
788
789
790
791//=======================================================================
792//function : DisplayedModes
793//purpose :
794//=======================================================================
795
796const TColStd_ListOfInteger& AIS_InteractiveContext::
797DisplayedModes(const Handle(AIS_InteractiveObject)& anIObj) const
798{
799 return myObjects(anIObj)->DisplayedModes();
800}
801
802
803//=======================================================================
804//function : Remove
805//purpose :
806//=======================================================================
807void AIS_InteractiveContext::Remove(const Handle(AIS_InteractiveObject)& anIObj,
808 const Standard_Boolean updateviewer)
809{
810
811 if(anIObj.IsNull()) return;
812
813 if(!HasOpenedContext()){
814 ClearGlobal(anIObj,updateviewer);
815 }
816 else
817 {
96a95605 818 myLocalContexts(myCurLocalIndex)->Remove(anIObj);
7fd59977 819 AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
820 for (;It.More() ;It.Next()){
821 if(It.Value()->AcceptErase())
96a95605 822 It.Value()->Remove(anIObj);
7fd59977 823
824 }
825 // if(!WasInCtx)
826 ClearGlobal(anIObj,updateviewer);
827// else
828// if(updateviewer) myMainVwr->Update();
829 }
830}
831
832//=======================================================================
833//function : RemoveAll
834//purpose :
835//=======================================================================
836void AIS_InteractiveContext::RemoveAll(const Standard_Boolean updateviewer)
837{
838 AIS_ListOfInteractive aList;
839 ObjectsInside(aList);
840 AIS_ListIteratorOfListOfInteractive aListIterator;
841 for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
842 Remove(aListIterator.Value(), Standard_False);
843 }
844
845 if(updateviewer)
846 myMainVwr->Update();
847}
848
849//=======================================================================
850//function : Clear
851//purpose :
852//=======================================================================
853
854void AIS_InteractiveContext::Clear(const Handle(AIS_InteractiveObject)& anIObj,
855 const Standard_Boolean updateviewer)
856{
857 if(anIObj.IsNull()) return;
858
859 if(!HasOpenedContext()){
860 ClearGlobal(anIObj,updateviewer);
861 }
862 else
863 {
864
865 Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->Remove(anIObj);
866 AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
867 for (;It.More() ;It.Next()){
868 if(It.Value()->AcceptErase())
869 WasInCtx = It.Value()->Remove(anIObj);
870
871 }
872 if(!WasInCtx)
873 ClearGlobal(anIObj,updateviewer);
874 else
875 if(updateviewer) myMainVwr->Update();
876 }
877}
878
879
880
881
882//=======================================================================
883//function : ClearPrs
884//purpose :
885//=======================================================================
886
887void AIS_InteractiveContext::ClearPrs(const Handle(AIS_InteractiveObject)& anIObj,
888 const Standard_Integer aMode,
889 const Standard_Boolean updateviewer)
890{
891 if(anIObj.IsNull()) return;
892
893 if(!HasOpenedContext()){
894 ClearGlobalPrs(anIObj,aMode,updateviewer);
895 }
896 else
897 {
898 Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->ClearPrs(anIObj,aMode);
899 AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
900 for (;It.More() ;It.Next()){
901 if(It.Value()->AcceptErase())
902 WasInCtx = It.Value()->ClearPrs(anIObj,aMode);
903 }
904 if(!WasInCtx)
905 ClearGlobalPrs(anIObj,aMode,updateviewer);
906 else
907 if(updateviewer) myMainVwr->Update();
908
909 }
910}
911
912//=======================================================================
913//function : Hilight
914//purpose :
915//=======================================================================
916
917void AIS_InteractiveContext::Hilight(const Handle(AIS_InteractiveObject)& anIObj,
918 const Standard_Boolean updateviewer)
919{
920 if(anIObj.IsNull()) return;
921
922 if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
923 if (!HasOpenedContext())
eb4320f2 924 {
925 if(!myObjects.IsBound(anIObj)) return;
7fd59977 926
eb4320f2 927 // CLE
928 // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
929 // const TColStd_ListOfInteger& LL = STATUS->DisplayedModes();
930 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
7fd59977 931
eb4320f2 932 // ENDCLE
933 STATUS->SetHilightStatus (Standard_True);
934
935 if (STATUS->GraphicStatus() == AIS_DS_Displayed)
936 {
937 Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
938 myMainPM->Highlight (anIObj, aHilightMode);
7fd59977 939 }
eb4320f2 940 }
7fd59977 941 else
eb4320f2 942 {
7fd59977 943 myLocalContexts(myCurLocalIndex)->Hilight(anIObj);
eb4320f2 944 }
945
7fd59977 946 if(updateviewer) myMainVwr->Update();
947}
948//=======================================================================
949//function : Hilight
950//purpose :
951//=======================================================================
952
953void AIS_InteractiveContext::HilightWithColor(const Handle(AIS_InteractiveObject)& anIObj,
954 const Quantity_NameOfColor aCol,
955 const Standard_Boolean updateviewer)
956{
957 if(anIObj.IsNull()) return;
958
959 if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
960
961 if (!HasOpenedContext())
eb4320f2 962 {
963 if(!myObjects.IsBound(anIObj)) return;
7fd59977 964
eb4320f2 965 const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
966 STATUS->SetHilightStatus (Standard_True);
967
968 if (STATUS->GraphicStatus() == AIS_DS_Displayed)
969 {
970 Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
971 myMainPM->Color (anIObj, aCol, aHilightMode);
972 STATUS->SetHilightColor (aCol);
7fd59977 973 }
eb4320f2 974 }
7fd59977 975 else
eb4320f2 976 {
7fd59977 977 myLocalContexts(myCurLocalIndex)->Hilight(anIObj,aCol);
eb4320f2 978 }
7fd59977 979 if(updateviewer) myMainVwr->Update();
980}
981
982//=======================================================================
983//function : Unhilight
984//purpose :
985//=======================================================================
986
987void AIS_InteractiveContext::Unhilight(const Handle(AIS_InteractiveObject)& anIObj, const Standard_Boolean updateviewer)
988{
989 if(anIObj.IsNull()) return;
990
991 if (!HasOpenedContext())
eb4320f2 992 {
993 if(!myObjects.IsBound(anIObj)) return;
7fd59977 994
eb4320f2 995 const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
996 STATUS->SetHilightStatus (Standard_False);
997 STATUS->SetHilightColor(Quantity_NOC_WHITE);
998
999 if (STATUS->GraphicStatus() == AIS_DS_Displayed)
1000 {
1001 Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
1002 myMainPM->Unhighlight (anIObj, aHilightMode);
7fd59977 1003 }
eb4320f2 1004 }
7fd59977 1005 else
eb4320f2 1006 {
7fd59977 1007 myLocalContexts(myCurLocalIndex)->Unhilight(anIObj);
eb4320f2 1008 }
7fd59977 1009 if(updateviewer) myMainVwr->Update();
1010}
1011
1012//=======================================================================
1013//function : IsHilighted
1014//purpose :
1015//=======================================================================
1016
1017Standard_Boolean AIS_InteractiveContext::IsHilighted(const Handle(AIS_InteractiveObject)& anIObj) const
1018{
1019 if(anIObj.IsNull()) return Standard_False;
1020
1021 if (!HasOpenedContext()){
1022 if(!myObjects.IsBound(anIObj))
1023 return Standard_False;
1024 return myObjects(anIObj)->IsHilighted();
1025 }
1026 AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
1027 for(;ItM.More();ItM.Next()){
1028 if(ItM.Value()->IsHilighted(anIObj))
1029 return Standard_True;
1030 }
1031 return Standard_False;
1032}
1033
1034Standard_Boolean AIS_InteractiveContext::IsHilighted(const Handle(AIS_InteractiveObject)& anIObj,
1035 Standard_Boolean& WithColor,
1036 Quantity_NameOfColor& TheHiCol) const
1037{
1038 if(!HasOpenedContext()){
1039 if(myObjects.IsBound(anIObj)){
1040 const Handle(AIS_GlobalStatus)& STAT = myObjects(anIObj);
1041 if(STAT->IsHilighted()){
1042 if(STAT->HilightColor()!=Quantity_NOC_WHITE){
1043 WithColor=Standard_True;
1044 TheHiCol = STAT->HilightColor();
1045 }
1046 else
1047 WithColor = Standard_False;
1048 return Standard_True;
1049 }
1050 }
1051 return Standard_False;
1052 }
1053 Standard_Integer MaxIndex = HighestIndex();
1054 for(Standard_Integer i=MaxIndex;i>=1 ; i--){
1055 if(myLocalContexts.IsBound(i)){
1056 if(myLocalContexts(i)->IsHilighted(anIObj,WithColor,TheHiCol))
1057 return Standard_True;
1058 }
1059
1060 }
1061 return Standard_False;
1062}
1063
1064
1065
1066//=======================================================================
1067//function : IsDisplayed
1068//purpose :
1069//=======================================================================
1070
1071Standard_Boolean AIS_InteractiveContext::IsDisplayed(const Handle(AIS_InteractiveObject)& anIObj) const
1072{
1073 if(anIObj.IsNull()) return Standard_False;
1074
1075
1076 if(myObjects.IsBound(anIObj))
1077 if(myObjects(anIObj)->GraphicStatus()==AIS_DS_Displayed)
1078 return Standard_True;
1079
1080 AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
1081 for(;ItM.More();ItM.Next()){
1082 if(ItM.Value()->IsDisplayed(anIObj))
1083 return Standard_True;
1084 }
1085 return Standard_False;
1086
1087}
7fd59977 1088
1089//=======================================================================
1090//function : IsDisplayed
1091//purpose :
1092//=======================================================================
1093
1094Standard_Boolean AIS_InteractiveContext::
1095IsDisplayed(const Handle(AIS_InteractiveObject)& anIObj,
1096 const Standard_Integer aMode) const
1097{
1098 if(anIObj.IsNull()) return Standard_False;
1099 if(myObjects.IsBound(anIObj)) {
1100 if(myObjects(anIObj)->GraphicStatus()==AIS_DS_Displayed &&
1101 myObjects(anIObj)->IsDModeIn(aMode))
1102 return Standard_True;
1103 }
1104
1105 AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
1106 for(;ItM.More();ItM.Next()){
1107 if(ItM.Value()->IsDisplayed(anIObj,aMode))
1108 return Standard_True;
1109 }
1110 return Standard_False;
1111}
1112
1113
1114//=======================================================================
1115//function : DisplayPriority
1116//purpose :
1117//=======================================================================
1118
1119Standard_Integer AIS_InteractiveContext::
1120DisplayPriority(const Handle(AIS_InteractiveObject)& anIObj) const
1121{
1122 if(anIObj.IsNull()) return -1;
eb4320f2 1123
1124 if (myObjects.IsBound(anIObj))
1125 {
7fd59977 1126 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
eb4320f2 1127 if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
1128 {
1129 Standard_Integer aDispMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
1130 (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
1131 return myMainPM->DisplayPriority (anIObj, aDispMode);
7fd59977 1132 }
7fd59977 1133 }
1134 return 0;
1135}
1136//=======================================================================
1137//function : SetDisplayPriority
1138//purpose :
1139//=======================================================================
1140
1141void AIS_InteractiveContext::SetDisplayPriority(const Handle(AIS_InteractiveObject)& anIObj,
1142 const Standard_Integer aPriority)
1143{
1144 if(anIObj.IsNull())
1145 return;
1146 if(!anIObj->HasInteractiveContext())
1147 anIObj->SetContext(this);
eb4320f2 1148 if(myObjects.IsBound(anIObj))
1149 {
7fd59977 1150 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
eb4320f2 1151
1152 if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
1153 {
1154 Standard_Integer aDisplayMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
1155 (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
1156 myMainPM->SetDisplayPriority (anIObj, aDisplayMode, aPriority);
7fd59977 1157 }
1158 }
1159 else if (HasOpenedContext())
eb4320f2 1160 {
1161 myLocalContexts(myCurLocalIndex)->SetDisplayPriority(anIObj,aPriority);
1162 }
7fd59977 1163}
1164
1165//=======================================================================
1166//function : Redisplay
1167//purpose :
1168//=======================================================================
1169
1170void AIS_InteractiveContext::Redisplay(const Handle(AIS_InteractiveObject)& anIObj,
1171 const Standard_Boolean updateviewer,
1172 const Standard_Boolean allmodes)
1173{
1174 if(AISDebugModeOn()){
1175 cout<<"===>AIS_InteractiveContext::Redisplay de :";
1176 cout<<anIObj->DynamicType()->Name()<<endl;
1177 }
1178
1179 RecomputePrsOnly(anIObj,updateviewer,allmodes);
1180 RecomputeSelectionOnly(anIObj);
1181}
1182
1183//=======================================================================
1184//function : Redisplay
1185//purpose :
1186//=======================================================================
1187
1188void AIS_InteractiveContext::Redisplay(const AIS_KindOfInteractive KOI,
1189 const Standard_Integer /*Sign*/,
1190 const Standard_Boolean updateviewer)
1191{
eb4320f2 1192 Standard_Boolean found_viewer(Standard_False);
7fd59977 1193 // update
1194 for(AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);It.More();It.Next()){
1195 // CLE
1196 // const Handle(AIS_InteractiveObject)& IO = It.Key();
1197 Handle(AIS_InteractiveObject) IO = It.Key();
1198 // ENDCLE
1199 if(IO->Type()== KOI){
1200#ifdef DEB
1201// Standard_Boolean good = (Sign==-1)? Standard_True :
1202// ((IO->Signature()==Sign)? Standard_True:Standard_False);
1203#endif
1204 Redisplay(IO,Standard_False);
eb4320f2 1205 if (It.Value()->GraphicStatus() == AIS_DS_Displayed)
1206 {
7fd59977 1207 found_viewer = Standard_True;
7fd59977 1208 }
1209 }
1210 }
1211 // update viewer...
eb4320f2 1212 if(updateviewer && found_viewer)
1213 {
1214 myMainVwr->Update();
7fd59977 1215 }
1216}
1217
1218
1219//=======================================================================
1220//function : RecomputePrsOnly
1221//purpose :
1222//=======================================================================
1223
1224void AIS_InteractiveContext::RecomputePrsOnly(const Handle(AIS_InteractiveObject)& anIObj,
1225 const Standard_Boolean updateviewer,
1226 const Standard_Boolean allmodes)
1227{
1228 if(anIObj.IsNull()) return;
1229 anIObj->Update(allmodes);
eb4320f2 1230
1231 if (!updateviewer)
1232 {
1233 return;
1234 }
1235
1236 if (HasOpenedContext() ||
1237 (myObjects.IsBound(anIObj) && myObjects(anIObj)->GraphicStatus() == AIS_DS_Displayed))
1238 {
1239 myMainVwr->Update();
7fd59977 1240 }
1241}
1242//=======================================================================
1243//function : RecomputeSelectionOnly
1244//purpose :
1245//=======================================================================
1246void AIS_InteractiveContext::RecomputeSelectionOnly(const Handle(AIS_InteractiveObject)& anIObj)
1247{
1248 if(anIObj.IsNull()) return;
1249 mgrSelector->RecomputeSelection(anIObj);
1250
1251
0d969553 1252
7fd59977 1253 TColStd_ListOfInteger LI;
1254 TColStd_ListIteratorOfListOfInteger Lit;
1255 ActivatedModes(anIObj,LI);
1256 if(!HasOpenedContext()){
1257 if(!myObjects.IsBound(anIObj)) return;
eb4320f2 1258
1259 if (myObjects(anIObj)->GraphicStatus() == AIS_DS_Displayed)
1260 {
1261 for(Lit.Initialize(LI);Lit.More();Lit.Next())
7fd59977 1262 {
eb4320f2 1263 mgrSelector->Activate(anIObj,Lit.Value(),myMainSel);
7fd59977 1264 }
eb4320f2 1265 }
7fd59977 1266 }
1267}
1268
1269//=======================================================================
1270//function : Update
1271//purpose :
1272//=======================================================================
1273
1274void AIS_InteractiveContext::Update(const Handle(AIS_InteractiveObject)& anIObj,
1275 const Standard_Boolean updateviewer)
1276{
1277 if(anIObj.IsNull()) return;
1278
1279
1280
1281 TColStd_ListOfInteger LL;
1282 anIObj->ToBeUpdated(LL);
1283 TColStd_ListIteratorOfListOfInteger ITI(LL);
1284 Standard_Boolean wasupdated(Standard_False);
1285
1286 for (;ITI.More();ITI.Next()){
1287 anIObj->Update(ITI.Value(),Standard_False);
1288 wasupdated = Standard_True;
1289 }
1290
1291 if(wasupdated)
1292 mgrSelector->Update(anIObj);
1293
1294 if(updateviewer){
1295 if(!myObjects.IsBound(anIObj)) return;
1296 switch(myObjects(anIObj)->GraphicStatus()){
1297 case AIS_DS_Displayed:
1298 case AIS_DS_Temporary:
1299 myMainVwr->Update();
1300 break;
7fd59977 1301 default:
1302 break;
1303 }
1304 }
1305}
1306
1307
1308
1309//=======================================================================
1310//function : SetLocation
1311//purpose :
1312//=======================================================================
1313
1314void AIS_InteractiveContext::SetLocation(const Handle(AIS_InteractiveObject)& anIObj,
1315 const TopLoc_Location& aLoc)
1316{
1317 if(anIObj.IsNull()) return;
1318
1319
1320 if(anIObj->HasLocation() && aLoc.IsIdentity()){
1321 anIObj->ResetLocation();
1322 mgrSelector->Update(anIObj,Standard_False);
1323 return;
1324 }
1325 if(aLoc.IsIdentity()) return ;
1326
0d969553 1327 // first reset the previous location to properly clean everything...
7fd59977 1328 if(anIObj->HasLocation())
1329 anIObj->ResetLocation();
1330
1331
1332 anIObj->SetLocation(aLoc);
1333
1334 if(!HasOpenedContext())
1335 mgrSelector->Update(anIObj,Standard_False);
1336 else
1337 {
1338 // CLE
1339 // const Handle(StdSelect_ViewerSelector3d)& tempSel = myLocalContexts(myCurLocalIndex)->MainSelector();
1340 Handle(StdSelect_ViewerSelector3d) tempSel = myLocalContexts(myCurLocalIndex)->MainSelector();
1341 // ENDCLE
1342 mgrSelector->Update(anIObj,tempSel,Standard_False);
1343 }
1344}
1345//=======================================================================
1346//function : ResetLocation
1347//purpose :
1348//=======================================================================
1349void AIS_InteractiveContext::ResetLocation(const Handle(AIS_InteractiveObject)& anIObj)
1350{
1351 if(anIObj.IsNull()) return;
1352
1353 anIObj->ResetLocation();
1354 mgrSelector->Update(anIObj,Standard_False);
1355}
1356
1357//=======================================================================
1358//function : HasLocation
1359//purpose :
1360//=======================================================================
1361
1362Standard_Boolean AIS_InteractiveContext::
1363HasLocation(const Handle(AIS_InteractiveObject)& anIObj) const
1364{
1365 if(anIObj.IsNull()) return Standard_False;
1366
1367 return anIObj->HasLocation();
1368}
1369
1370const TopLoc_Location& AIS_InteractiveContext::
1371Location(const Handle(AIS_InteractiveObject)& anIObj) const
1372{
1373 return anIObj->Location();
1374}
1375
1376//=======================================================================
1377//function : SetDeviationCoefficient
1378//purpose :
1379//=======================================================================
1380
1381void AIS_InteractiveContext::SetDeviationCoefficient(const Standard_Real aCoefficient)
1382{
1383 myDefaultDrawer->SetDeviationCoefficient(aCoefficient);
1384}
1385//=======================================================================
1386//function : SetDeviationAngle
1387//purpose :
1388//=======================================================================
1389
1390void AIS_InteractiveContext::SetDeviationAngle(const Standard_Real anAngle)
1391{
1392 myDefaultDrawer->SetDeviationCoefficient(anAngle);
1393}
1394
1395//=======================================================================
1396//function : DeviationAngle
1397//purpose : Gets deviationAngle
1398//=======================================================================
1399
1400Standard_Real AIS_InteractiveContext::DeviationAngle() const
1401{
cb15fdf7
P
1402 //return M_PI/180.0e0 ;
1403 return myDefaultDrawer->DeviationAngle();
7fd59977 1404}
1405
1406//=======================================================================
1407//function : DeviationCoefficient
1408//purpose :
1409//=======================================================================
1410
1411Standard_Real AIS_InteractiveContext::DeviationCoefficient() const
1412{
1413 return myDefaultDrawer->DeviationCoefficient();
1414}
1415//=======================================================================
1416//function : SetHLRDeviationCoefficient
1417//purpose :
1418//=======================================================================
1419
1420void AIS_InteractiveContext::SetHLRDeviationCoefficient(const Standard_Real aCoefficient)
1421{
1422 myDefaultDrawer->SetHLRDeviationCoefficient(aCoefficient);
1423}
1424
1425//=======================================================================
1426//function : HLRDeviationCoefficient
1427//purpose :
1428//=======================================================================
1429
1430Standard_Real AIS_InteractiveContext::HLRDeviationCoefficient() const
1431{
1432 return myDefaultDrawer->HLRDeviationCoefficient();
1433}
1434
1435//=======================================================================
1436//function : SetHLRAngle
1437//purpose :
1438//=======================================================================
1439
1440void AIS_InteractiveContext::SetHLRAngle(const Standard_Real anAngle)
1441{
1442 myDefaultDrawer->SetHLRAngle(anAngle);
1443}
1444
1445//=======================================================================
1446//function : SetHLRAngleAndDeviation
1447//purpose : compute with anangle a HLRAngle and a HLRDeviationCoefficient
1448// and set them in myHLRAngle and in myHLRDeviationCoefficient
1449// of myDefaultDrawer
1450//=======================================================================
1451
1452void AIS_InteractiveContext::SetHLRAngleAndDeviation(const Standard_Real anAngle)
1453{
1454
1455 Standard_Real OutAngl,OutDefl;
1456 HLRBRep::PolyHLRAngleAndDeflection(anAngle,OutAngl,OutDefl);
1457
1458 myDefaultDrawer->SetHLRAngle(OutAngl);
1459 myDefaultDrawer->SetHLRDeviationCoefficient(OutDefl);
1460
1461}
1462
1463//=======================================================================
1464//function : HLRAngle
1465//purpose :
1466//=======================================================================
1467
1468Standard_Real AIS_InteractiveContext::HLRAngle() const
1469{
1470 return myDefaultDrawer->HLRAngle();
1471}
1472
1473//=======================================================================
1474//function : SetDisplayMode
1475//purpose :
1476//=======================================================================
1477
1478void AIS_InteractiveContext::SetDisplayMode(const AIS_DisplayMode aMode,
1479 const Standard_Boolean updateviewer)
1480{
1481 if(aMode==myDisplayMode) return;
1482 AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
1483
1484 for(;It.More();It.Next()){
1485 // CLE
1486 // const Handle(AIS_InteractiveObject)& anObj = It.Key();
1487 Handle(AIS_InteractiveObject) anObj = It.Key();
1488 // ENDCLE
1489 Standard_Boolean Processed = (anObj->IsKind(STANDARD_TYPE(AIS_Shape)) ||
1490 anObj->IsKind(STANDARD_TYPE(AIS_ConnectedShape)) ||
1491 anObj->IsKind(STANDARD_TYPE(AIS_MultipleConnectedShape)) );
1492
1493 if ((!anObj->HasDisplayMode()) && Processed)
1494 {
1495 if(anObj->AcceptDisplayMode(aMode)){
1496 // CLE
1497 // const Handle(AIS_GlobalStatus)& STATUS = It.Value();
1498 Handle(AIS_GlobalStatus) STATUS = It.Value();
1499 // ENDCLE
1500 if(STATUS->IsDModeIn(myDisplayMode))
1501 STATUS->RemoveDisplayMode(myDisplayMode);
1502
1503 STATUS->AddDisplayMode(aMode);
1504
1505 if(STATUS->GraphicStatus()== AIS_DS_Displayed){
eb4320f2 1506 myMainPM->SetVisibility (anObj, myDisplayMode, Standard_False);
7fd59977 1507 myMainPM->Display(anObj, aMode);
1508 if(STATUS->IsSubIntensityOn())
1509 myMainPM->Color(anObj,mySubIntensity,aMode);
1510 }
1511 // myDisplayMode = aMode;
1512 }
1513 }
1514
1515 }
1516 myDisplayMode = aMode;
1517 if(updateviewer) myMainVwr->Update();
1518}
1519
1520//=======================================================================
1521//function : SetDisplayMode
1522//purpose :
1523//=======================================================================
1524
1525void AIS_InteractiveContext::SetDisplayMode(const Handle(AIS_InteractiveObject)& anIObj,
1526 const Standard_Integer aMode,
1527 const Standard_Boolean updateviewer)
1528{
1529
1530 if(!anIObj->HasInteractiveContext())
1531 anIObj->SetContext(this);
1532 if(!HasOpenedContext()){
1533
1534 if(!myObjects.IsBound(anIObj))
1535 anIObj->SetDisplayMode(aMode);
7fd59977 1536 else if( anIObj->AcceptDisplayMode(aMode) )
7fd59977 1537 {
1538 // CLE
1539 // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
1540 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
1541 // ENDCLE
7fd59977 1542 // SAN : erase presentations for all display modes different from <aMode>
1543 if(STATUS->GraphicStatus()==AIS_DS_Displayed){
1544 TColStd_ListOfInteger aModesToRemove;
e33e7e78
RK
1545 TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
1546 for(;ItL.More();ItL.Next()){
7fd59977 1547
1548 Standard_Integer OldMode = ItL.Value();
1549
1550 if(OldMode!=aMode){
1551 aModesToRemove.Append(OldMode);
1552 if(myMainPM->IsHighlighted(anIObj,OldMode))
1553 myMainPM->Unhighlight(anIObj,OldMode);
eb4320f2 1554 myMainPM->SetVisibility (anIObj, OldMode, Standard_False);
7fd59977 1555 }
1556 }
1557
1558 for(ItL.Initialize(aModesToRemove);ItL.More();ItL.Next())
1559 STATUS->RemoveDisplayMode(ItL.Value());
1560
1561 if(!STATUS->IsDModeIn(aMode))
1562 STATUS->AddDisplayMode(aMode);
eb4320f2 1563
7fd59977 1564 myMainPM->Display(anIObj,aMode);
1565 Standard_Integer DM,HM,SM;
1566 GetDefModes(anIObj,DM,HM,SM);
1567 if(STATUS->IsHilighted()){
1568 myMainPM->Highlight(anIObj,HM);
1569 }
1570 if(STATUS->IsSubIntensityOn()){
1571 myMainPM->Color(anIObj,mySubIntensity,aMode);
1572 }
1573 if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
1574 myMainVwr->Viewer()->SetTransparency(Standard_True);
1575
1576 if(updateviewer) myMainVwr->Update();
7fd59977 1577 }
1578 anIObj->SetDisplayMode(aMode);
1579 }
1580 }
1581}
1582
1583//=======================================================================
1584//function : UnsetDisplayMode
1585//purpose :
1586//=======================================================================
1587
1588void AIS_InteractiveContext::
1589UnsetDisplayMode(const Handle(AIS_InteractiveObject)& anIObj,
1590 const Standard_Boolean updateviewer)
1591{
1592 if(anIObj.IsNull()) return ;
1593 if(!anIObj->HasDisplayMode()) return;
1594
1595 if(!myObjects.IsBound(anIObj))
1596 anIObj->UnsetDisplayMode();
1597 else
1598 {
1599 Standard_Integer OldMode = anIObj->DisplayMode();
1600 if(myDisplayMode==OldMode) return;
1601 const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
1602 STATUS->RemoveDisplayMode(OldMode);
1603 if(!STATUS->IsDModeIn(myDisplayMode))
1604 STATUS->AddDisplayMode(myDisplayMode);
1605 if(STATUS->GraphicStatus()==AIS_DS_Displayed){
1606 if(myMainPM->IsHighlighted(anIObj,OldMode))
1607 myMainPM->Unhighlight(anIObj,OldMode);
eb4320f2 1608 myMainPM->SetVisibility (anIObj, OldMode, Standard_False);
7fd59977 1609 myMainPM->Display(anIObj,myDisplayMode);
1610 Standard_Integer DM,HM,SM;
1611 GetDefModes(anIObj,DM,HM,SM);
1612 if(STATUS->IsHilighted()){
1613 myMainPM->Highlight(anIObj,HM);
1614 }
1615 if(STATUS->IsSubIntensityOn()){
1616 myMainPM->Color(anIObj,mySubIntensity,myDisplayMode);
1617 }
1618 if(updateviewer) myMainVwr->Update();
1619 }
1620 anIObj->UnsetDisplayMode();
1621
1622 }
1623}
1624
1625//=======================================================================
1626//function : SetCurrentFacingModel
1627//purpose :
1628//=======================================================================
1629
7fd59977 1630void AIS_InteractiveContext::SetCurrentFacingModel(
1631 const Handle(AIS_InteractiveObject)& anIObj,
b8ddfc2f 1632 const Aspect_TypeOfFacingModel aModel)
1633{
1634 if ( !anIObj.IsNull () )
1635 anIObj->SetCurrentFacingModel(aModel);
7fd59977 1636}
7fd59977 1637
1638//=======================================================================
1639//function : SetColor
1640//purpose :
1641//=======================================================================
1642
1643void AIS_InteractiveContext::SetColor(const Handle(AIS_InteractiveObject)& anIObj,
1644 const Quantity_NameOfColor aColor,
1645 const Standard_Boolean updateviewer)
7fd59977 1646{
1647 SetColor(anIObj,Quantity_Color(aColor),updateviewer);
1648}
1649
1650void AIS_InteractiveContext::SetColor(const Handle(AIS_InteractiveObject)& anIObj,
1651 const Quantity_Color &aColor,
1652 const Standard_Boolean updateviewer)
7fd59977 1653{
1654 if(anIObj.IsNull()) return ;
1655
1656 if(!anIObj->HasInteractiveContext())
1657 anIObj->SetContext(this);
1658 anIObj->SetColor(aColor);
1659 if(anIObj->RecomputeEveryPrs())
1660 anIObj->Redisplay();
1661 else
1662 {
1663 Standard_Integer NbDisp=0;
1664 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
1665 for (;ITI.More();ITI.Next())
1666 {
1667 anIObj->Update(ITI.Value(),Standard_False);
1668 NbDisp++;
1669 }
1670 anIObj->SetRecomputeOk();
1671#ifdef DEB
0d969553 1672 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 1673#endif
1674 }
1675
1676
1677#ifdef DEB
1678// // pour isg
1679// if(anIObj->Type()==AIS_KOI_Datum && anIObj->Signature()==3){
1680// Handle(AIS_Trihedron) Tr = *((Handle(AIS_Trihedron)*)&anIObj);
1681// Standard_Real Lx = myDefaultDrawer->DatumAspect()->FirstAxisLength();
1682// gp_Trsf T;
1683// gp_Dir D =Tr->Component()->XDirection();
1684// gp_Pnt O = Tr->Component()->Location();
1685// gp_Vec V(D);V*=Lx/5.;
c6541a0c 1686// T.SetRotation(gp_Ax1(O,D),M_PI/6.);
7fd59977 1687// T.SetTranslationPart(V);
1688// TopLoc_Location L,IncLoc(T);
1689
1690// for(Standard_Integer I=1;I<90;I++){
1691// if(anIObj->HasLocation())
1692// L = anIObj->Location() * IncLoc;
1693// else
1694// L = IncLoc;
1695// SetLocation(anIObj,L);
1696// UpdateCurrentViewer();
1697// }
1698// for(I=1;I<90;I++){
1699// L = anIObj->Location() /IncLoc;
1700// SetLocation(anIObj,L);
1701// UpdateCurrentViewer();
1702// }
1703// ResetLocation(anIObj);
1704// }
1705 #endif
1706 if(updateviewer) UpdateCurrentViewer();
1707}
1708
1709//=======================================================================
1710//function : SetDeviationCoefficient
1711//purpose :
1712//=======================================================================
1713
1714void AIS_InteractiveContext::SetDeviationCoefficient(
1715 const Handle(AIS_InteractiveObject)& anIObj,
1716 const Standard_Real aCoefficient,
1717 const Standard_Boolean updateviewer)
1718{
1719// cout<<" Coefficient:"<< aCoefficient <<endl;
1720 if(anIObj.IsNull()) return ;
1721
1722 if(!anIObj->HasInteractiveContext())
1723 anIObj->SetContext(this);
1724
81bba717 1725 // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
7fd59977 1726 if(anIObj->Type()!=AIS_KOI_Object && anIObj->Type()!=AIS_KOI_Shape) return;
1727 if(anIObj->Signature()!=0) return;
1728 (*((Handle(AIS_Shape)*)&anIObj))->SetOwnDeviationCoefficient(aCoefficient);
1729
1730
1731
1732 if(anIObj->RecomputeEveryPrs())
1733 anIObj->Redisplay();
1734 else
1735 {
1736 Standard_Integer NbDisp=0;
1737 TColStd_ListOfInteger LL;
1738 anIObj->ToBeUpdated(LL);
1739 TColStd_ListIteratorOfListOfInteger ITI(LL);
1740 for (;ITI.More();ITI.Next())
1741 {
1742 anIObj->Update(ITI.Value(),Standard_False);
1743 NbDisp++;
1744 }
1745 anIObj->SetRecomputeOk();
1746#ifdef DEB
0d969553 1747 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 1748#endif
1749 }
1750 if(updateviewer) UpdateCurrentViewer();
1751}
1752
1753//=======================================================================
1754//function : SetHLRDeviationCoefficient
1755//purpose :
1756//=======================================================================
1757
1758void AIS_InteractiveContext::SetHLRDeviationCoefficient(
1759 const Handle(AIS_InteractiveObject)& anIObj,
1760 const Standard_Real aCoefficient,
1761 const Standard_Boolean updateviewer)
1762{
1763// cout<<" HLRCoefficient:"<< aCoefficient <<endl;
1764 if(anIObj.IsNull()) return ;
1765
1766 if(!anIObj->HasInteractiveContext())
1767 anIObj->SetContext(this);
81bba717 1768 // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
7fd59977 1769 if(anIObj->Type()!=AIS_KOI_Object && anIObj->Type()!=AIS_KOI_Shape) return;
1770 if(anIObj->Signature()!=0) return;
1771 (*((Handle(AIS_Shape)*)&anIObj))->SetOwnHLRDeviationCoefficient(aCoefficient);
1772
1773
1774
1775 if(anIObj->RecomputeEveryPrs())
1776 anIObj->Redisplay();
1777 else
1778 {
1779 Standard_Integer NbDisp=0;
1780
1781 TColStd_ListOfInteger LL;
1782 anIObj->ToBeUpdated(LL);
1783 TColStd_ListIteratorOfListOfInteger ITI(LL);
1784 for (;ITI.More();ITI.Next())
1785 {
1786 anIObj->Update(ITI.Value(),Standard_False);
1787 NbDisp++;
1788 }
1789 anIObj->SetRecomputeOk();
1790#ifdef DEB
0d969553 1791 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 1792#endif
1793 }
1794 if(updateviewer) UpdateCurrentViewer();
1795}
1796
1797
1798//=======================================================================
1799//function : SetDeviationAngle
1800//purpose :
1801//=======================================================================
1802
1803void AIS_InteractiveContext::SetDeviationAngle(
1804 const Handle(AIS_InteractiveObject)& anIObj,
1805 const Standard_Real anAngle,
1806 const Standard_Boolean updateviewer)
1807{
1808// cout<<" Angle:"<< anAngle <<endl;
1809 if(anIObj.IsNull()) return ;
1810
1811 if(!anIObj->HasInteractiveContext())
1812 anIObj->SetContext(this);
e33e7e78 1813 // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
7fd59977 1814 if(anIObj->Type()!=AIS_KOI_Shape) return;
1815 if(anIObj->Signature()!=0) return;
1816 (*((Handle(AIS_Shape)*)&anIObj))->SetOwnDeviationAngle(anAngle);
1817
1818
1819 if(anIObj->RecomputeEveryPrs())
1820 anIObj->Redisplay();
1821 else
1822 {
1823 Standard_Integer NbDisp=0;
1824 TColStd_ListOfInteger LL;
1825 anIObj->ToBeUpdated(LL);
1826 TColStd_ListIteratorOfListOfInteger ITI(LL);
1827 for (;ITI.More();ITI.Next())
1828 {
1829 anIObj->Update(ITI.Value(),Standard_False);
1830 NbDisp++;
1831 }
1832 anIObj->SetRecomputeOk();
1833#ifdef DEB
0d969553 1834 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 1835#endif
1836 }
1837 if(updateviewer) UpdateCurrentViewer();
1838}
1839//=======================================================================
1840//function : SetDeviationAngle
1841//purpose :
1842//=======================================================================
1843
1844void AIS_InteractiveContext::SetAngleAndDeviation(
1845 const Handle(AIS_InteractiveObject)& anIObj,
1846 const Standard_Real anAngle,
1847 const Standard_Boolean updateviewer)
1848{
1849// cout<<" Angle:"<< anAngle <<endl;
1850 if(anIObj.IsNull()) return ;
c6541a0c 1851// Standard_Real anAngleRad = M_PI*anAngle/180; test rob...
7fd59977 1852 if(!anIObj->HasInteractiveContext())
1853 anIObj->SetContext(this);
1854
e33e7e78 1855 // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
7fd59977 1856 if(anIObj->Type()!=AIS_KOI_Shape) return;
1857 if(anIObj->Signature()!=0) return;
1858 (*((Handle(AIS_Shape)*)&anIObj))->SetAngleAndDeviation(anAngle);
1859
1860
1861 if(anIObj->RecomputeEveryPrs())
1862 anIObj->Redisplay();
1863 else
1864 Update(anIObj,updateviewer);
1865}
1866
1867//=======================================================================
1868//function : SetDeviationAngle
1869//purpose :
1870//=======================================================================
1871
1872void AIS_InteractiveContext::SetHLRAngleAndDeviation(
1873 const Handle(AIS_InteractiveObject)& anIObj,
1874 const Standard_Real anAngle,
1875 const Standard_Boolean updateviewer)
1876{
1877// cout<<" Angle:"<< anAngle <<endl;
1878
1879 if(anIObj.IsNull()) return ;
1880 if(!anIObj->HasInteractiveContext())
1881 anIObj->SetContext(this);
1882
e33e7e78 1883 // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
7fd59977 1884 if(anIObj->Type()!=AIS_KOI_Shape) return;
1885 if(anIObj->Signature()!=0) return;
1886 (*((Handle(AIS_Shape)*)&anIObj))->SetHLRAngleAndDeviation(anAngle);
1887
1888
1889 if(anIObj->RecomputeEveryPrs())
1890 anIObj->Redisplay();
1891 else
1892 {
1893 Standard_Integer NbDisp=0;
1894
1895 TColStd_ListOfInteger LL;
1896 anIObj->ToBeUpdated(LL);
1897 TColStd_ListIteratorOfListOfInteger ITI(LL);
1898 for (;ITI.More();ITI.Next())
1899 {
1900 anIObj->Update(ITI.Value(),Standard_False);
1901 NbDisp++;
1902 }
1903 anIObj->SetRecomputeOk();
1904#ifdef DEB
0d969553 1905 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 1906#endif
1907 }
1908 if(updateviewer) UpdateCurrentViewer();
1909}
1910
1911//=======================================================================
1912//function : SetHLRDeviationAngle
1913//purpose :
1914//=======================================================================
1915
1916void AIS_InteractiveContext::SetHLRDeviationAngle(
1917 const Handle(AIS_InteractiveObject)& anIObj,
1918 const Standard_Real anAngle,
1919 const Standard_Boolean updateviewer)
1920{
1921// cout<<" HLRAngle:"<< anAngle <<endl;
1922 if(anIObj.IsNull()) return ;
1923
1924 if(!anIObj->HasInteractiveContext())
1925 anIObj->SetContext(this);
e33e7e78 1926 // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
7fd59977 1927 if( anIObj->Type()!=AIS_KOI_Shape) return;
1928 if(anIObj->Signature()!=0) return;
1929 (*((Handle(AIS_Shape)*)&anIObj))->SetOwnHLRDeviationAngle(anAngle);
1930
1931
1932 if(anIObj->RecomputeEveryPrs())
1933 anIObj->Redisplay();
1934 else
1935 {
1936 Standard_Integer NbDisp=0;
1937 TColStd_ListOfInteger LL;
1938 anIObj->ToBeUpdated(LL);
1939 TColStd_ListIteratorOfListOfInteger ITI(LL);
1940 for (;ITI.More();ITI.Next())
1941 {
1942 anIObj->Update(ITI.Value(),Standard_False);
1943 NbDisp++;
1944 }
1945 anIObj->SetRecomputeOk();
1946#ifdef DEB
0d969553 1947 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 1948#endif
1949 }
1950 if(updateviewer) UpdateCurrentViewer();
1951}
1952
1953//=======================================================================
1954//function : UnsetColor
1955//purpose :
1956//=======================================================================
1957
1958void AIS_InteractiveContext::UnsetColor(const Handle(AIS_InteractiveObject)& anIObj,
1959 const Standard_Boolean updateviewer)
1960{
1961 if(anIObj.IsNull()) return ;
1962 anIObj->UnsetColor();
1963 if(anIObj->RecomputeEveryPrs())
1964 anIObj->Redisplay();
1965 else
1966 {
1967 Standard_Integer NbDisp =0;
1968 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
1969 for (;ITI.More();ITI.Next())
1970 {
1971 anIObj->Update(ITI.Value(),Standard_False);
1972 NbDisp++;
1973 }
1974#ifdef DEB
0d969553 1975 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 1976#endif
1977 anIObj->SetRecomputeOk();
1978 }
1979 if(updateviewer)
1980 UpdateCurrentViewer();
1981}
1982
1983//=======================================================================
1984//function : HasColor
1985//purpose :
1986//=======================================================================
1987
1988Standard_Boolean AIS_InteractiveContext::HasColor(const Handle(AIS_InteractiveObject)& anIObj) const
1989{
1990 return anIObj->HasColor();
1991
1992}
1993
1994//=======================================================================
1995//function : Color
1996//purpose :
1997//=======================================================================
1998
1999Quantity_NameOfColor AIS_InteractiveContext::Color(const Handle(AIS_InteractiveObject)& anIObj) const
2000{
2001 return anIObj->Color();
2002}
2003
7fd59977 2004void AIS_InteractiveContext::Color(const Handle(AIS_InteractiveObject)& anIObj,
b8ddfc2f 2005 Quantity_Color &aColor) const
7fd59977 2006{
2007 anIObj->Color(aColor);
2008}
7fd59977 2009
2010//=======================================================================
2011//function : Width
2012//purpose :
2013//=======================================================================
2014
2015Standard_Real AIS_InteractiveContext::Width(const Handle(AIS_InteractiveObject)& anIObj) const
2016{
2017 return anIObj->Width();
2018}
2019
2020//=======================================================================
2021//function : SetWidth
2022//purpose :
2023//=======================================================================
2024
2025void AIS_InteractiveContext::SetWidth(const Handle(AIS_InteractiveObject)& anIObj,
2026 const Standard_Real aValue,
2027 const Standard_Boolean updateviewer)
2028{
2029 if(anIObj.IsNull()) return ;
2030
2031 if(!anIObj->HasInteractiveContext())
2032 anIObj->SetContext(this);
2033 anIObj->SetWidth(aValue);
2034 if(anIObj->RecomputeEveryPrs())
2035 anIObj->Redisplay();
2036 else
2037 {
2038 Standard_Integer NbDisp=0;
2039 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
2040 for (;ITI.More();ITI.Next())
2041 {
2042 anIObj->Update(ITI.Value(),Standard_False);
2043 NbDisp++;
2044 }
2045#ifdef DEB
0d969553 2046 cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
7fd59977 2047#endif
2048 anIObj->SetRecomputeOk();
2049 }
2050 if(updateviewer)
2051 UpdateCurrentViewer();
2052}
2053
2054//=======================================================================
2055//function : UnsetWidth
2056//purpose :
2057//=======================================================================
2058
2059void AIS_InteractiveContext::UnsetWidth(const Handle(AIS_InteractiveObject)& anIObj,
2060 const Standard_Boolean updateviewer)
2061{
2062 if(anIObj.IsNull()) return ;
2063 anIObj->UnsetWidth();
2064 if(anIObj->RecomputeEveryPrs())
2065 anIObj->Redisplay();
2066 else
2067 {
2068 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
2069 for (;ITI.More();ITI.Next())
2070 {
2071 anIObj->Update(ITI.Value(),Standard_False);
2072 }
2073 anIObj->SetRecomputeOk();
2074 }
2075 if(updateviewer)
2076 UpdateCurrentViewer();
2077}
2078
2079//=======================================================================
2080//function : SetMaterial
2081//purpose :
2082//=======================================================================
2083
2084void AIS_InteractiveContext::SetMaterial(const Handle(AIS_InteractiveObject)& anIObj,
2085//POP pour K4L
2086 const Graphic3d_NameOfMaterial aName,
2087// const Graphic3d_NameOfPhysicalMaterial aName,
2088 const Standard_Boolean updateviewer)
2089{
2090 if(!anIObj->HasInteractiveContext())
2091 anIObj->SetContext(this);
2092 anIObj->SetMaterial(aName);
2093 if(anIObj->RecomputeEveryPrs())
2094 anIObj->Redisplay();
2095 else
2096 {
2097 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
2098 for (;ITI.More();ITI.Next())
2099 {
2100 anIObj->Update(ITI.Value(),Standard_False);
2101 }
2102 anIObj->SetRecomputeOk();
2103 }
2104 if(updateviewer)
2105 UpdateCurrentViewer();
2106
2107}
2108
2109//=======================================================================
2110//function : UnsetMaterial
2111//purpose :
2112//=======================================================================
2113
2114void AIS_InteractiveContext::UnsetMaterial(const Handle(AIS_InteractiveObject)& anIObj,
2115 const Standard_Boolean updateviewer)
2116{
2117 if(anIObj.IsNull()) return ;
2118 anIObj->UnsetMaterial();
2119 if(anIObj->RecomputeEveryPrs())
2120 anIObj->Redisplay();
2121 else
2122 {
2123 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
2124 for (;ITI.More();ITI.Next())
2125 {
2126 anIObj->Update(ITI.Value(),Standard_False);
2127 }
2128 anIObj->SetRecomputeOk();
2129 }
2130 if(updateviewer)
2131 UpdateCurrentViewer();
2132}
2133
2134//=======================================================================
2135//function : SetTransparency
2136//purpose :
2137//=======================================================================
2138
2139void AIS_InteractiveContext::SetTransparency(const Handle(AIS_InteractiveObject)& anIObj,
2140 const Standard_Real aValue,
2141 const Standard_Boolean updateviewer)
2142{
2143 if(anIObj.IsNull()) return ;
2144 if(!anIObj->HasInteractiveContext())
2145 anIObj->SetContext(this);
2146
2147#ifdef BUC60577 //right optimization
2148 if(!anIObj->IsTransparent() && aValue<=0.05) return;
2149#else
2150// if(!anIObj->IsTransparent() && aValue<=0.05) return;
2151#endif
2152 if(aValue<=0.05){
2153 UnsetTransparency(anIObj,updateviewer);
2154 return;
2155 }
2156
2157 if(!myMainVwr->Viewer()->Transparency())
2158 myMainVwr->Viewer()->SetTransparency(Standard_True);
2159 anIObj->SetTransparency(aValue);
2160 if(anIObj->RecomputeEveryPrs())
2161 anIObj->Redisplay();
2162 else
2163 {
2164 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
2165 for (;ITI.More();ITI.Next())
2166 {
2167 anIObj->Update(ITI.Value(),Standard_False);
2168 }
2169 anIObj->SetRecomputeOk();
2170 }
2171 if(updateviewer)
2172 UpdateCurrentViewer();
2173}
2174
2175//=======================================================================
2176//function : UnsetTransparency
2177//purpose :
2178//=======================================================================
2179
2180void AIS_InteractiveContext::UnsetTransparency(const Handle(AIS_InteractiveObject)& anIObj,
2181 const Standard_Boolean updateviewer)
2182{
2183 if(anIObj.IsNull()) return ;
2184 anIObj->UnsetTransparency();
2185 if(anIObj->RecomputeEveryPrs())
2186 anIObj->Redisplay();
2187 else
2188 {
2189 TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
2190 for (;ITI.More();ITI.Next())
2191 {
2192 anIObj->Update(ITI.Value(),Standard_False);
2193 }
2194 anIObj->SetRecomputeOk();
2195 }
2196
2197 // To Unset transparency in the viewer, if no other object is transparent ...(Speed)
2198 AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
2199 Standard_Boolean FoundTransp(Standard_False);
2200 for(;It.More() && !FoundTransp ;It.Next()){
2201 if(It.Key()->IsTransparent())
2202 FoundTransp = Standard_True;
2203 }
2204 if(!FoundTransp)
2205 myMainVwr->Viewer()->SetTransparency(Standard_False);
2206
2207
2208 if(updateviewer)
2209 UpdateCurrentViewer();
2210}
2211
2212//=======================================================================
7fd59977 2213//function : SetSelectedAspect
2214//purpose :
2215//=======================================================================
2216void AIS_InteractiveContext::SetSelectedAspect(
2217 const Handle(Prs3d_BasicAspect)& anAspect,
2218 const Standard_Boolean globalChange,
b8ddfc2f 2219 const Standard_Boolean updateViewer)
2220{
7fd59977 2221 if( !HasOpenedContext() ) {
2222 Standard_Boolean found = Standard_False;
2223 Handle(AIS_Selection) sel =
2224 AIS_Selection::Selection(myCurrentName.ToCString());
2225 Handle(AIS_InteractiveObject) object;
2226 for( sel->Init() ; sel->More() ; sel->Next()) {
2227 found = Standard_True;
2228 object = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
2229 object->SetAspect(anAspect,globalChange);
2230 }
2231 if( found && updateViewer) {
2232 myMainVwr->Update();
7fd59977 2233 }
2234 }
2235}
7fd59977 2236
2237//=======================================================================
2238//function : SetLocalAttributes
2239//purpose :
2240//=======================================================================
2241
2242void AIS_InteractiveContext::SetLocalAttributes(const Handle(AIS_InteractiveObject)& anIObj,
2243 const Handle(AIS_Drawer)& aDrawer,
2244 const Standard_Boolean updateviewer)
2245{
2246 if(anIObj.IsNull()) return ;
2247 if(!anIObj->HasInteractiveContext())
2248 anIObj->SetContext(this);
2249 anIObj->SetAttributes(aDrawer);
2250 Update(anIObj,updateviewer);
2251
2252}
2253
2254//=======================================================================
2255//function : UnsetLocalAttributes
2256//purpose :
2257//=======================================================================
2258void AIS_InteractiveContext::UnsetLocalAttributes(const Handle(AIS_InteractiveObject)& anIObj,
2259 const Standard_Boolean updateviewer)
2260{
2261 if(anIObj.IsNull()) return ;
2262 if(!anIObj->HasInteractiveContext())
2263 anIObj->SetContext(this);
2264 anIObj->UnsetAttributes();
2265 Update(anIObj,updateviewer);
2266}
2267
2268
2269//=======================================================================
2270//function : Status
2271//purpose :
2272//=======================================================================
2273
2274void AIS_InteractiveContext::Status(const Handle(AIS_InteractiveObject)& anIObj, TCollection_ExtendedString& astatus) const
2275{
2276 astatus = "";
2277
2278 if(anIObj.IsNull()) return ;
2279 if(myObjects.IsBound(anIObj)){
2280 astatus += "\t ____________________________________________";
2281 astatus += "\t| Known at Neutral Point:\n\tDisplayStatus:";
2282 const Handle(AIS_GlobalStatus)& ST = myObjects(anIObj);
2283 switch(ST->GraphicStatus()){
2284 case AIS_DS_Displayed:
2285 {
2286 astatus +="\t| -->Displayed\n";
2287 break;
2288 }
2289 case AIS_DS_Erased:
2290 {
2291 astatus +="\t| -->Erased\n";
2292 break;
2293 }
7fd59977 2294 default:
2295 break;
2296 }
2297 astatus += "\t| Active Display Modes in the MainViewer :\n";
e33e7e78
RK
2298 TColStd_ListIteratorOfListOfInteger ItL (ST->DisplayedModes());
2299 for(;ItL.More();ItL.Next()){
7fd59977 2300 astatus += "\t|\t Mode ";
2301 astatus += TCollection_AsciiString(ItL.Value());
2302 astatus+="\n";
2303 }
2304 if(IsCurrent(anIObj)) astatus +="\t| Current\n";
2305 if(IsSelected(anIObj)) astatus +="\t| Selected\n";
2306
2307 astatus += "\t| Active Selection Modes in the MainViewer :\n";
2308 for(ItL.Initialize(ST->SelectionModes());ItL.More();ItL.Next()){
2309 astatus += "\t\t Mode ";
2310 astatus += TCollection_AsciiString(ItL.Value());
2311 astatus+="\n";
2312 }
2313 astatus += "\t ____________________________________________";
2314
2315 }
2316}
2317
2318
2319//=======================================================================
2320//function : GetDefModes
2321//purpose :
2322//=======================================================================
2323
2324void AIS_InteractiveContext::GetDefModes(const Handle(AIS_InteractiveObject)& anIObj,
2325 Standard_Integer& DispMode,
2326 Standard_Integer& HiMode,
2327 Standard_Integer& SelMode) const
2328{
2329 if(anIObj.IsNull()) return ;
2330 DispMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
2331 (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
2332
2333 HiMode = anIObj->HasHilightMode()? anIObj->HilightMode():DispMode;
2334#ifdef BUC61051
2335 SelMode = anIObj->HasSelectionMode()? anIObj->SelectionMode() : -1;
2336#else
2337 SelMode = anIObj->HasSelectionMode()? anIObj->SelectionMode() : 0;
2338#endif
2339}
2340
2341
2342//=======================================================================
2343//function : EraseGlobal
2344//purpose :
2345//=======================================================================
2346
2347void AIS_InteractiveContext::EraseGlobal(const Handle(AIS_InteractiveObject)& anIObj,
eb4320f2 2348 const Standard_Boolean updateviewer)
7fd59977 2349{
2350 if(anIObj.IsNull()) return ;
2351 if(!myObjects.IsBound(anIObj)) return;
2352
2353 // CLE
2354 // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
2355 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
2356 // ENDCLE
2357 Standard_Integer Dmode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
2358 if(STATUS->GraphicStatus()==AIS_DS_Displayed){
2359
e33e7e78
RK
2360 TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
2361 for(;ItL.More();ItL.Next()){
7fd59977 2362 if(myMainPM->IsHighlighted(anIObj,ItL.Value()))
2363 myMainPM->Unhighlight(anIObj,ItL.Value());
eb4320f2 2364 myMainPM->SetVisibility (anIObj, ItL.Value(), Standard_False);
7fd59977 2365 }
2366 if(IsCurrent(anIObj) && !STATUS->IsDModeIn(Dmode))
eb4320f2 2367 myMainPM->SetVisibility (anIObj, Dmode, Standard_False);
7fd59977 2368
2369 for(ItL.Initialize(STATUS->SelectionModes());ItL.More();ItL.Next())
2370 mgrSelector->Deactivate(anIObj,ItL.Value(),myMainSel);
2371 if(updateviewer) myMainVwr->Update();
2372 }
eb4320f2 2373 STATUS->SetGraphicStatus(AIS_DS_Erased);
7fd59977 2374
2375}
2376
2377//=======================================================================
2378//function : ClearGlobal
2379//purpose :
2380//=======================================================================
2381
2382void AIS_InteractiveContext::ClearGlobal(const Handle(AIS_InteractiveObject)& anIObj,
2383 const Standard_Boolean updateviewer)
2384{
2385 if(anIObj.IsNull()) return ;
2386 if(!myObjects.IsBound(anIObj)) return;
2387 // CLE
2388 // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
2389 Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
2390 // ENDCLE
e33e7e78
RK
2391 TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
2392 for(;ItL.More();ItL.Next()){
7fd59977 2393 if(STATUS->IsHilighted()){
2394 if(IsCurrent(anIObj))
2395#ifdef OCC204
2396 AddOrRemoveCurrentObject( anIObj, updateviewer );
2397#else
2398 AddOrRemoveCurrentObject(anIObj);
2399#endif
2400 else if(myMainPM->IsHighlighted(anIObj,ItL.Value()))
2401 myMainPM->Unhighlight(anIObj,ItL.Value());
2402 }
2403 myMainPM->Erase(anIObj,ItL.Value());
2404 myMainPM->Clear(anIObj,ItL.Value());
2405 if(anIObj->HasHilightMode()){
2406 Standard_Integer im = anIObj->HilightMode();
2407 myMainPM->Unhighlight(anIObj,im);
2408 myMainPM->Erase(anIObj,im);
2409
2410 }
2411 }
2412
2413 //Object removes from Detected sequence
2414 Standard_Integer i = 1;
2415 for(i = 1; i < myAISDetectedSeq.Length(); i++)
2416 {
2417 Handle(AIS_InteractiveObject) anObj = DetectedCurrentObject();
2418 if( !anObj.IsNull() && anObj != anIObj )
2419 myAISDetectedSeq.Remove( i );
2420 }
2421
44d9ae89
A
2422 if(myLastinMain == anIObj)
2423 myLastinMain.Nullify();
7fd59977 2424
2425 if(myLastPicked == anIObj)
2426 myLastPicked.Nullify();
2427
2428 // OCC21671: Remove IO from the selection manager in any case
2429 // to avoid memory leaks
2430 mgrSelector->Remove(anIObj);
2431
eb4320f2 2432 if (updateviewer && (STATUS->GraphicStatus() == AIS_DS_Displayed))
2433 {
2434 myMainVwr->Update();
2435 }
2436
7fd59977 2437 myObjects.UnBind(anIObj);
2438
2439}
2440
2441//=======================================================================
2442//function : ClearGlobalPrs
2443//purpose :
2444//=======================================================================
2445
2446void AIS_InteractiveContext::ClearGlobalPrs(const Handle(AIS_InteractiveObject)& anIObj,
2447 const Standard_Integer aMode,
2448 const Standard_Boolean updateviewer)
2449{
2450 if(anIObj.IsNull()) return ;
2451 if(!myObjects.IsBound(anIObj)) return;
2452 const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
2453
2454 Standard_Integer DM = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
2455 if(STATUS->IsDModeIn(aMode)){
2456 if(DM==aMode && myMainPM->IsHighlighted(anIObj,aMode))
2457 myMainPM->Unhighlight(anIObj,aMode);
2458
2459 myMainPM->Erase(anIObj,aMode);
2460 myMainPM->Clear(anIObj,aMode);
2461 }
2462
eb4320f2 2463
2464 if(STATUS->GraphicStatus()==AIS_DS_Displayed && updateviewer)
7fd59977 2465 myMainVwr->Update();
2466}
2467
2468//=======================================================================
2469//function : DrawHiddenLine
2470//purpose :
2471//=======================================================================
2472
2473Standard_Boolean AIS_InteractiveContext::DrawHiddenLine () const {
2474
2475 return myDefaultDrawer->DrawHiddenLine();
2476}
2477
2478//=======================================================================
2479//function : EnableDrawHiddenLine
2480//purpose :
2481//=======================================================================
2482
2483void AIS_InteractiveContext::EnableDrawHiddenLine () const {
2484 myDefaultDrawer->EnableDrawHiddenLine();
2485}
2486
2487//=======================================================================
2488//function : DisableDrawHiddenLine
2489//purpose :
2490//=======================================================================
2491
2492void AIS_InteractiveContext::DisableDrawHiddenLine () const {
2493 myDefaultDrawer->DisableDrawHiddenLine();
2494}
2495
2496//=======================================================================
2497//function : HiddenLineAspect
2498//purpose :
2499//=======================================================================
2500
2501Handle (Prs3d_LineAspect) AIS_InteractiveContext::HiddenLineAspect () const {
2502 return myDefaultDrawer->HiddenLineAspect();
2503}
2504
2505//=======================================================================
2506//function : SetHiddenLineAspect
2507//purpose :
2508//=======================================================================
2509
2510void AIS_InteractiveContext::SetHiddenLineAspect ( const Handle(Prs3d_LineAspect)& anAspect) const {
2511 myDefaultDrawer->SetHiddenLineAspect(anAspect);
2512}
2513
2514//=======================================================================
2515//function : SetIsoNumber
2516//purpose :
2517//=======================================================================
2518
2519void AIS_InteractiveContext::SetIsoNumber(const Standard_Integer Nb,const AIS_TypeOfIso Type)
2520{
2521 switch(Type){
2522 case AIS_TOI_IsoU:
2523 myDefaultDrawer->UIsoAspect()->SetNumber(Nb);
2524 break;
2525 case AIS_TOI_IsoV:
2526 myDefaultDrawer->VIsoAspect()->SetNumber(Nb);
2527 break;
2528 case AIS_TOI_Both:
2529 myDefaultDrawer->UIsoAspect()->SetNumber(Nb);
2530 myDefaultDrawer->VIsoAspect()->SetNumber(Nb);
2531 break;
2532
2533 }
2534}
2535//=======================================================================
2536//function : IsoNumber
2537//purpose :
2538//=======================================================================
2539
2540Standard_Integer AIS_InteractiveContext::IsoNumber(const AIS_TypeOfIso Type)
2541{
2542
2543 switch(Type){
2544 case AIS_TOI_IsoU:
2545 return myDefaultDrawer->UIsoAspect()->Number();
2546 case AIS_TOI_IsoV:
2547 return myDefaultDrawer->VIsoAspect()->Number();
2548 case AIS_TOI_Both:
2549 return (myDefaultDrawer->UIsoAspect()->Number()==
2550 myDefaultDrawer->VIsoAspect()->Number()) ?
2551 myDefaultDrawer->UIsoAspect()->Number(): -1;
2552 }
2553 return 0;
2554}
2555
2556//=======================================================================
2557//function : IsoOnPlane
2558//purpose :
2559//=======================================================================
2560
2561void AIS_InteractiveContext::IsoOnPlane(const Standard_Boolean SwitchOn)
2562{
2563 myDefaultDrawer->SetIsoOnPlane(SwitchOn);
2564}
2565
2566//=======================================================================
2567//function : IsoOnPlane
2568//purpose :
2569//=======================================================================
2570
2571Standard_Boolean AIS_InteractiveContext::IsoOnPlane() const
2572{
2573 return myDefaultDrawer->IsoOnPlane();
2574}
2575
2576//=======================================================================
2577//function : SetSelectionMode
2578//purpose :
2579//=======================================================================
2580
2581void AIS_InteractiveContext::SetSelectionMode(const Handle_AIS_InteractiveObject&, const Standard_Integer )
2582{
2583}
2584
2585//=======================================================================
2586//function : UnsetSelectionMode
2587//purpose :
2588//=======================================================================
2589
2590void AIS_InteractiveContext::UnsetSelectionMode(const Handle_AIS_InteractiveObject&)
2591{
2592}
2593
3c982548 2594//=======================================================================
2595//function : SetSensitivityMode
2596//purpose :
2597//=======================================================================
2598
2599void AIS_InteractiveContext::SetSensitivityMode(const StdSelect_SensitivityMode aMode) {
2600
2601 if( HasOpenedContext() )
2602 myLocalContexts(myCurLocalIndex)->SetSensitivityMode(aMode);
2603 else {
2604 myMainSel->SetSensitivityMode(aMode);
3c982548 2605 }
2606}
2607
2608//=======================================================================
2609//function : SensitivityMode
2610//purpose :
2611//=======================================================================
2612
2613StdSelect_SensitivityMode AIS_InteractiveContext::SensitivityMode() const {
2614
2615 if( HasOpenedContext() )
2616 return myLocalContexts(myCurLocalIndex)->SensitivityMode();
2617 return myMainSel->SensitivityMode();
2618}
2619
7fd59977 2620//=======================================================================
2621//function : SetSensitivity
2622//purpose :
2623//=======================================================================
2624
2625void AIS_InteractiveContext::SetSensitivity(const Standard_Real aPrecision) {
2626
2627 if( HasOpenedContext() )
2628 myLocalContexts(myCurLocalIndex)->SetSensitivity(aPrecision);
2629 else {
2630 myMainSel->SetSensitivity(aPrecision);
7fd59977 2631 }
2632}
2633
2634//=======================================================================
3c982548 2635//function : Sensitivity
7fd59977 2636//purpose :
2637//=======================================================================
2638
3c982548 2639Standard_Real AIS_InteractiveContext::Sensitivity() const {
7fd59977 2640
2641 if( HasOpenedContext() )
3c982548 2642 return myLocalContexts(myCurLocalIndex)->Sensitivity();
2643 return myMainSel->Sensitivity();
2644}
2645
2646//=======================================================================
2647//function : SetPixelTolerance
2648//purpose :
2649//=======================================================================
2650
2651void AIS_InteractiveContext::SetPixelTolerance(const Standard_Integer aPrecision) {
2652
2653 if( HasOpenedContext() )
2654 myLocalContexts(myCurLocalIndex)->SetPixelTolerance(aPrecision);
7fd59977 2655 else {
3c982548 2656 myMainSel->SetPixelTolerance(aPrecision);
7fd59977 2657 }
2658}
3c982548 2659
2660//=======================================================================
2661//function : PixelTolerance
2662//purpose :
2663//=======================================================================
2664
2665Standard_Integer AIS_InteractiveContext::PixelTolerance() const {
2666
2667 if( HasOpenedContext() )
2668 return myLocalContexts(myCurLocalIndex)->PixelTolerance();
2669 return myMainSel->PixelTolerance();
2670}
7fd59977 2671
2672//=======================================================================
2673//function : IsInLocal
2674//purpose :
2675//=======================================================================
2676
2677Standard_Boolean AIS_InteractiveContext::IsInLocal(const Handle_AIS_InteractiveObject& anIObj,
2678 Standard_Integer& TheIndex) const
2679{
2680 if(anIObj.IsNull()) return Standard_False;
81bba717 2681 // if it exists at neutral point 0 index is returned
7fd59977 2682 if(myObjects.IsBound(anIObj)) {
2683 TheIndex = 0;
2684 return Standard_False;
2685 }
2686 for(Standard_Integer I=1;I<=myLocalContexts.Extent();I++){
2687 if(myLocalContexts.IsBound(I)){
2688 if(myLocalContexts(I)->IsIn(anIObj)){
2689 TheIndex = I;
2690 return Standard_True;
2691
2692 }
2693 }
2694 }
2695 TheIndex =-1;
2696 return Standard_False;
2697}
2698
2699//=======================================================================
2700//function : InitAttributes
2701//purpose :
2702//=======================================================================
2703
2704void AIS_InteractiveContext::InitAttributes()
2705{
2706
2707 mgrSelector->Add(myMainSel);
2708 myCurrentName = AIS_Context_NewCurName();
2709 mySelectionName = AIS_Context_NewSelName();
2710
2711 AIS_Selection::CreateSelection(mySelectionName.ToCString());
2712 AIS_Selection::CreateSelection(myCurrentName.ToCString());
2713
2714
2715 myDefaultDrawer->SetShadingAspectGlobal(Standard_False);
2716 Graphic3d_MaterialAspect aMat(Graphic3d_NOM_BRASS);
2717 myDefaultDrawer->ShadingAspect()->SetMaterial(aMat);
2718
2719// myDefaultDrawer->ShadingAspect()->SetColor(Quantity_NOC_GRAY70);
2720 Handle (Prs3d_LineAspect) HLA = myDefaultDrawer->HiddenLineAspect();
2721 HLA->SetColor(Quantity_NOC_GRAY20);
2722 HLA->SetWidth(1);
2723 HLA->SetTypeOfLine(Aspect_TOL_DASH);
2724
81bba717 2725 // tolerance to 4 pixels...
3c982548 2726 SetPixelTolerance();
7fd59977 2727
2728 // Customizing the drawer for trihedrons and planes...
2729
2730 Handle (Prs3d_DatumAspect) DA = myDefaultDrawer->DatumAspect();
2731 Standard_Real aLength(100.);
2732 DA->SetAxisLength(aLength,aLength,aLength);
2733 Quantity_NameOfColor col = Quantity_NOC_LIGHTSTEELBLUE4;
2734 DA->FirstAxisAspect()->SetColor(col);
2735 DA->SecondAxisAspect()->SetColor(col);
2736 DA->ThirdAxisAspect()->SetColor(col);
2737
2738 Handle(Prs3d_PlaneAspect)PA = myDefaultDrawer->PlaneAspect();
2739 aLength =200.;
2740 PA->SetPlaneLength(aLength,aLength);
2741 PA->EdgesAspect()->SetColor(Quantity_NOC_SKYBLUE);
2742
2743
2744}
2745
2746
2747//=======================================================================
2748//function : TrihedronSize
2749//purpose :
2750//=======================================================================
2751Standard_Real AIS_InteractiveContext::TrihedronSize() const
2752{
2753 return myDefaultDrawer->DatumAspect()->FirstAxisLength();
2754}
2755//=======================================================================
2756//function : SetTrihedronSize
2757//purpose :
2758//=======================================================================
2759void AIS_InteractiveContext::SetTrihedronSize(const Standard_Real aVal,const Standard_Boolean /*updateviewer*/)
2760{
2761 myDefaultDrawer->DatumAspect()->SetAxisLength(aVal,aVal,aVal);
2762 Redisplay(AIS_KOI_Datum,3,Standard_False);
2763 Redisplay(AIS_KOI_Datum,4,Standard_True);
2764}
2765
2766
2767
2768//=======================================================================
2769//function : SetPlaneSize
2770//purpose :
2771//=======================================================================
2772void AIS_InteractiveContext::SetPlaneSize(const Standard_Real aValX,
2773 const Standard_Real aValY,
2774 const Standard_Boolean /*updateviewer*/)
2775{
2776 myDefaultDrawer->PlaneAspect()->SetPlaneLength(aValX,aValY);
2777 Redisplay(AIS_KOI_Datum,7);
2778}
2779
2780//=======================================================================
2781//function : SetPlaneSize
2782//purpose :
2783//=======================================================================
2784
2785void AIS_InteractiveContext::SetPlaneSize(const Standard_Real aVal,
2786 const Standard_Boolean updateviewer)
2787{
2788 SetPlaneSize(aVal,aVal,updateviewer);
2789}
2790
2791//=======================================================================
2792//function : PlaneSize
2793//purpose :
2794//=======================================================================
2795
2796Standard_Boolean AIS_InteractiveContext::PlaneSize(Standard_Real& LX,Standard_Real& LY) const
2797{
2798 LX = myDefaultDrawer->PlaneAspect()->PlaneXLength();
2799 LY = myDefaultDrawer->PlaneAspect()->PlaneYLength();
2800 return (Abs(LX-LY)<=Precision::Confusion());
2801}
2802
2803
2804
2805//=======================================================================
2806//function :
2807//purpose :
2808//=======================================================================
2809void AIS_InteractiveContext::SetAutoActivateSelection( const Standard_Boolean Auto )
2810{
2811 myIsAutoActivateSelMode = Auto;
2812}
2813
2814//=======================================================================
2815//function :
2816//purpose :
2817//=======================================================================
2818Standard_Boolean AIS_InteractiveContext::GetAutoActivateSelection() const
2819{
2820 return myIsAutoActivateSelMode;
2821}
59f45b7c 2822
2823//=======================================================================
2824//function : SetZLayer
2825//purpose :
2826//=======================================================================
2827
2828void AIS_InteractiveContext::SetZLayer (const Handle(AIS_InteractiveObject)& theIObj,
2829 const Standard_Integer theLayerId)
2830{
2831 if (theIObj.IsNull ())
2832 return;
2833
2834 if (myObjects.IsBound (theIObj))
2835 {
eb4320f2 2836 if (myObjects (theIObj)->GraphicStatus() == AIS_DS_Displayed || myObjects (theIObj)->GraphicStatus() == AIS_DS_Erased)
59f45b7c 2837 {
eb4320f2 2838 theIObj->SetZLayer (myMainPM, theLayerId);
59f45b7c 2839 }
2840 }
2841 else if (HasOpenedContext ())
2842 {
2843 myLocalContexts (myCurLocalIndex)->SetZLayer (theIObj, theLayerId);
2844 }
2845}
2846
2847//=======================================================================
2848//function : GetZLayer
2849//purpose :
2850//=======================================================================
2851
2852Standard_Integer AIS_InteractiveContext::GetZLayer (const Handle(AIS_InteractiveObject)& theIObj) const
2853{
2854 if (theIObj.IsNull ())
2855 return -1;
2856
2857 if (myObjects.IsBound (theIObj))
71c4f9c6 2858 {
59f45b7c 2859 return theIObj->GetZLayer (myMainPM);
71c4f9c6 2860 }
2861 else if (HasOpenedContext ())
2862 {
2863 return myLocalContexts (myCurLocalIndex)->GetZLayer (theIObj);
2864 }
59f45b7c 2865
71c4f9c6 2866 return -1;
59f45b7c 2867}