1 // Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/
19 #include "SOCC_ViewModel.h"
\r
21 #include "SOCC_Prs.h"
\r
22 #include "SOCC_ViewWindow.h"
\r
24 #include "SUIT_Session.h"
\r
25 #include "SUIT_Application.h"
\r
27 //#include "ToolsGUI.h"
\r
29 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
30 // TODO: better mechanism of storing display/erse status in a study
\r
31 // should be provided...
\r
32 //#include <SALOMEconfig.h>
\r
33 //#include CORBA_CLIENT_HEADER(SALOMEDS)
\r
35 #include <AIS_ListIteratorOfListOfInteractive.hxx>
\r
36 #include <Visual3d_View.hxx>
\r
38 #include <SALOME_AISShape.hxx>
\r
39 #include <SALOME_AISObject.hxx>
\r
41 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
42 // TODO: better mechanism of storing display/erse status in a study
\r
43 // should be provided...
\r
44 //#include <Utils_ORB_INIT.hxx>
\r
45 //#include <Utils_SINGLETON.hxx>
\r
46 //#include <SALOME_ModuleCatalog_impl.hxx>
\r
47 //#include <SALOME_NamingService.hxx>
\r
49 //#include "SALOMEDSClient.hxx"
\r
50 //#include "SALOMEDS_StudyManager.hxx"
\r
52 #include <AIS_TypeOfIso.hxx>
\r
54 // in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study.
\r
55 // SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from
\r
56 // SALOMEDS::StudyManager - no linkage with SalomeApp.
\r
58 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
59 // TODO: better mechanism of storing display/erse status in a study
\r
60 // should be provided...
\r
61 //static _PTR(Study) getStudyDS()
\r
63 // SALOMEDSClient_Study* aStudy = NULL;
\r
64 // _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() );
\r
66 // get id of SUIT_Study, if it's a SalomeApp_Study, it will return
\r
67 // id of its underlying SALOMEDS::Study
\r
68 // SUIT_Application* app = SUIT_Session::session()->activeApplication();
\r
69 // if ( !app ) return _PTR(Study)(aStudy);
\r
70 // SUIT_Study* stud = app->activeStudy();
\r
71 // if ( !stud ) return _PTR(Study)(aStudy);
\r
72 // const int id = stud->id(); // virtual method, must return SALOMEDS_Study id
\r
73 // get SALOMEDS_Study with this id from StudyMgr
\r
74 // return aMgr->GetStudyByID( id );
\r
77 SOCC_Viewer::SOCC_Viewer( bool DisplayTrihedron )
\r
78 : OCCViewer_Viewer( DisplayTrihedron )
\r
82 SOCC_Viewer::~SOCC_Viewer()
\r
86 bool SOCC_Viewer::highlight( const Handle(SALOME_InteractiveObject)& obj,
\r
87 bool hilight, bool upd )
\r
89 bool isInLocal = getAISContext()->HasOpenedContext();
\r
90 //SUIT_Study* ActiveStudy = SUIT_Application::getDesktop()->getActiveStudy();
\r
91 //SALOME_Selection* Sel = SALOME_Selection::Selection( ActiveStudy->getSelection() );
\r
93 AIS_ListOfInteractive List;
\r
94 getAISContext()->DisplayedObjects(List);
\r
96 AIS_ListIteratorOfListOfInteractive ite(List);
\r
97 for ( ; ite.More(); ite.Next() )
\r
99 Handle(SALOME_InteractiveObject) anObj =
\r
100 Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
\r
102 if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
\r
105 OCCViewer_Viewer::highlight( ite.Value(), hilight, false );
\r
106 // highlight subshapes only when local selection is active
\r
109 /*if ( ite.Value()->IsKind( STANDARD_TYPE( SALOME_AISShape ) ) )
\r
111 Handle(SALOME_AISShape) aSh = Handle(SALOME_AISShape)::DownCast( ite.Value() );
\r
112 TColStd_IndexedMapOfInteger MapIndex;
\r
113 Sel->GetIndex( IObject, MapIndex );
\r
114 aSh->highlightSubShapes( MapIndex, highlight );
\r
127 bool SOCC_Viewer::isInViewer( const Handle(SALOME_InteractiveObject)& obj,
\r
128 bool onlyInViewer )
\r
130 AIS_ListOfInteractive List;
\r
131 getAISContext()->DisplayedObjects(List);
\r
133 if( !onlyInViewer ) {
\r
134 AIS_ListOfInteractive List1;
\r
135 getAISContext()->ObjectsInCollector(List1);
\r
136 List.Append(List1);
\r
139 AIS_ListIteratorOfListOfInteractive ite(List);
\r
140 for ( ; ite.More(); ite.Next() )
\r
142 Handle(SALOME_InteractiveObject) anObj =
\r
143 Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
\r
145 if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
\r
151 bool SOCC_Viewer::isVisible( const Handle(SALOME_InteractiveObject)& obj )
\r
153 AIS_ListOfInteractive List;
\r
154 getAISContext()->DisplayedObjects( List );
\r
156 AIS_ListIteratorOfListOfInteractive ite( List );
\r
157 for ( ; ite.More(); ite.Next() )
\r
159 Handle(SALOME_InteractiveObject) anObj =
\r
160 Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
\r
162 if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
\r
163 return getAISContext()->IsDisplayed( ite.Value() );
\r
169 void SOCC_Viewer::setColor( const Handle(SALOME_InteractiveObject)& obj,
\r
170 const QColor& color, bool update )
\r
172 AIS_ListOfInteractive List;
\r
173 getAISContext()->DisplayedObjects(List);
\r
175 AIS_ListIteratorOfListOfInteractive ite(List);
\r
176 for ( ; ite.More(); ite.Next() )
\r
178 Handle(SALOME_InteractiveObject) anObj =
\r
179 Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
\r
181 if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
\r
183 OCCViewer_Viewer::setColor( ite.Value(), color, update );
\r
189 void SOCC_Viewer::switchRepresentation( const Handle(SALOME_InteractiveObject)& obj,
\r
190 int mode, bool update )
\r
192 AIS_ListOfInteractive List;
\r
193 getAISContext()->DisplayedObjects(List);
\r
195 AIS_ListIteratorOfListOfInteractive ite(List);
\r
196 for ( ; ite.More(); ite.Next() )
\r
198 Handle(SALOME_InteractiveObject) anObj =
\r
199 Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
\r
201 if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
\r
203 OCCViewer_Viewer::switchRepresentation( ite.Value(), mode, update );
\r
209 void SOCC_Viewer::setTransparency( const Handle(SALOME_InteractiveObject)& obj,
\r
210 float trans, bool update )
\r
212 AIS_ListOfInteractive List;
\r
213 getAISContext()->DisplayedObjects( List );
\r
215 AIS_ListIteratorOfListOfInteractive ite( List );
\r
216 for ( ; ite.More(); ite.Next() )
\r
218 Handle(SALOME_InteractiveObject) anObj =
\r
219 Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
\r
221 if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
\r
223 OCCViewer_Viewer::setTransparency( ite.Value(), trans, update );
\r
229 void SOCC_Viewer::rename( const Handle(SALOME_InteractiveObject)& obj,
\r
230 const QString& name )
\r
232 AIS_ListOfInteractive List;
\r
233 getAISContext()->DisplayedObjects(List);
\r
235 AIS_ListIteratorOfListOfInteractive ite(List);
\r
238 if (ite.Value()->IsKind(STANDARD_TYPE(SALOME_AISShape)))
\r
240 Handle(SALOME_AISShape) aSh = Handle(SALOME_AISShape)::DownCast(ite.Value());
\r
242 if ( aSh->hasIO() )
\r
244 Handle(SALOME_InteractiveObject) IO = aSh->getIO();
\r
245 if ( IO->isSame( obj ) )
\r
247 aSh->setName( (char*)name.latin1() );
\r
252 else if ( ite.Value()->IsKind( STANDARD_TYPE( SALOME_AISObject ) ) )
\r
254 Handle(SALOME_AISObject) aSh = Handle(SALOME_AISObject)::DownCast( ite.Value() );
\r
256 // Add code here, if someone create a MODULE_AISObject.
\r
262 //=======================================================================
\r
264 // Purpose : Display presentation
\r
265 //=======================================================================
\r
266 void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
\r
268 // try do downcast object
\r
269 const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( prs );
\r
270 if ( !anOCCPrs || anOCCPrs->IsNull() )
\r
273 // get SALOMEDS Study
\r
274 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
275 // TODO: better mechanism of storing display/erse status in a study
\r
276 // should be provided...
\r
277 // _PTR(Study) study(getStudyDS());
\r
280 Handle (AIS_InteractiveContext) ic = getAISContext();
\r
282 // get all displayed objects
\r
283 AIS_ListOfInteractive List;
\r
284 ic->DisplayedObjects( List );
\r
285 // get objects in the collector
\r
286 AIS_ListOfInteractive ListCollector;
\r
287 ic->ObjectsInCollector( ListCollector );
\r
289 // get objects to be displayed
\r
290 AIS_ListOfInteractive anAISObjects;
\r
291 anOCCPrs->GetObjects( anAISObjects );
\r
293 AIS_ListIteratorOfListOfInteractive aIter( anAISObjects );
\r
294 for ( ; aIter.More(); aIter.Next() )
\r
296 Handle(AIS_InteractiveObject) anAIS = aIter.Value();
\r
297 if ( !anAIS.IsNull() )
\r
299 // try to find presentation in the viewer
\r
300 bool bDisplayed = false;
\r
301 AIS_ListIteratorOfListOfInteractive ite( List );
\r
302 for ( ; ite.More(); ite.Next() )
\r
304 // compare presentations by handles
\r
305 // if the object is already displayed - nothing to do more
\r
306 if ( ite.Value() == anAIS )
\r
308 // Deactivate object if necessary
\r
309 if ( !anOCCPrs->ToActivate() )
\r
310 ic->Deactivate( anAIS );
\r
319 // then try to find presentation in the collector
\r
320 bDisplayed = false;
\r
321 ite.Initialize( ListCollector );
\r
322 for ( ; ite.More(); ite.Next() )
\r
324 // compare presentations by handles
\r
325 // if the object is in collector - display it
\r
326 if ( ite.Value() == anAIS )
\r
328 ic->DisplayFromCollector( anAIS, false );
\r
330 // Deactivate object if necessary
\r
331 if ( !anOCCPrs->ToActivate() )
\r
332 ic->Deactivate( anAIS );
\r
335 // Set visibility flag
\r
336 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
337 // TODO: better mechanism of storing display/erse status in a study
\r
338 // should be provided...
\r
339 //Handle(SALOME_InteractiveObject) anObj =
\r
340 // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
\r
341 //if ( !anObj.IsNull() && anObj->hasEntry() )
\r
344 // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
\r
352 // if object is not displayed and not found in the collector - display it
\r
353 if ( anAIS->IsKind( STANDARD_TYPE(AIS_Trihedron) ) )
\r
355 Handle(AIS_Trihedron) aTrh = Handle(AIS_Trihedron)::DownCast( anAIS );
\r
356 double aNewSize = 100, aSize = 100;
\r
357 getTrihedronSize( aNewSize, aSize );
\r
358 aTrh->SetSize( aTrh == getTrihedron() ? aNewSize : 0.5 * aNewSize );
\r
361 ic->Display( anAIS, false );
\r
363 // Set visibility flag
\r
364 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
365 // TODO: better mechanism of storing display/erse status in a study
\r
366 // should be provided...
\r
367 //Handle(SALOME_InteractiveObject) anObj =
\r
368 // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
\r
369 //if ( !anObj.IsNull() && anObj->hasEntry() )
\r
372 // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
\r
375 // Deactivate object if necessary
\r
376 if ( !anOCCPrs->ToActivate() )
\r
377 ic->Deactivate( anAIS );
\r
382 //=======================================================================
\r
384 // Purpose : Erase presentation
\r
385 //=======================================================================
\r
386 void SOCC_Viewer::Erase( const SALOME_OCCPrs* prs, const bool forced )
\r
388 // try do downcast object
\r
389 const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( prs );
\r
390 if ( !anOCCPrs || anOCCPrs->IsNull() )
\r
393 // get SALOMEDS Study
\r
394 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
395 // TODO: better mechanism of storing display/erse status in a study
\r
396 // should be provided...
\r
397 // _PTR(Study) study(getStudyDS());
\r
400 Handle(AIS_InteractiveContext) ic = getAISContext();
\r
402 // get objects to be erased
\r
403 AIS_ListOfInteractive anAISObjects;
\r
404 anOCCPrs->GetObjects( anAISObjects );
\r
406 AIS_ListIteratorOfListOfInteractive aIter( anAISObjects );
\r
407 for ( ; aIter.More(); aIter.Next() ) {
\r
408 Handle(AIS_InteractiveObject) anAIS = aIter.Value();
\r
409 if ( !anAIS.IsNull() ) {
\r
410 // erase the object from context : move it to collector
\r
411 ic->Erase( anAIS, false, forced ? false : true );
\r
413 // Set visibility flag if necessary
\r
414 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
415 // TODO: better mechanism of storing display/erse status in a study
\r
416 // should be provided...
\r
419 // Handle(SALOME_InteractiveObject) anObj =
\r
420 // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
\r
421 // if ( !anObj.IsNull() && anObj->hasEntry() )
\r
424 // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
\r
431 //=======================================================================
\r
433 // Purpose : Erase all presentations
\r
434 //=======================================================================
\r
435 void SOCC_Viewer::EraseAll( const bool forced )
\r
437 // get SALOMEDS Study
\r
438 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
439 // TODO: better mechanism of storing display/erse status in a study
\r
440 // should be provided...
\r
441 // _PTR(Study) study(getStudyDS());
\r
444 Handle(AIS_InteractiveContext) ic = getAISContext();
\r
446 // check if trihedron is displayed
\r
447 Standard_Boolean isTrihedronDisplayed = ic->IsDisplayed( getTrihedron() );
\r
449 // get objects to be erased (all currently displayed objects)
\r
450 AIS_ListOfInteractive aList;
\r
451 ic->DisplayedObjects( aList );
\r
452 AIS_ListIteratorOfListOfInteractive anIter( aList );
\r
453 for ( ; anIter.More(); anIter.Next() ) {
\r
454 if ( isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) )
\r
458 Handle(AIS_InteractiveObject) anIO = anIter.Value();
\r
459 ic->Erase( anIO, false, forced ? false : true );
\r
461 // Set visibility flag if necessary
\r
462 // Temporarily commented to avoid awful dependecy on SALOMEDS
\r
463 // TODO: better mechanism of storing display/erse status in a study
\r
464 // should be provided...
\r
466 // Handle(SALOME_InteractiveObject) anObj =
\r
467 // Handle(SALOME_InteractiveObject)::DownCast( anIO->GetOwner() );
\r
469 // if ( !anObj.IsNull() && anObj->hasEntry() ) {
\r
471 // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
\r
476 // display trihedron if necessary
\r
477 if ( isTrihedronDisplayed )
\r
478 getAISContext()->Display( getTrihedron() );
\r
483 //=======================================================================
\r
484 // name : CreatePrs
\r
485 // Purpose : Create presentation corresponding to the entry
\r
486 //=======================================================================
\r
487 SALOME_Prs* SOCC_Viewer::CreatePrs( const char* entry )
\r
489 SOCC_Prs* prs = new SOCC_Prs();
\r
493 Handle(AIS_InteractiveContext) ic = getAISContext();
\r
495 // get displayed objects
\r
496 AIS_ListOfInteractive List;
\r
497 ic->DisplayedObjects( List );
\r
498 // get objects in the collector
\r
499 AIS_ListOfInteractive ListCollector;
\r
500 ic->ObjectsInCollector( ListCollector );
\r
501 List.Append( ListCollector );
\r
503 AIS_ListIteratorOfListOfInteractive ite( List );
\r
504 for ( ; ite.More(); ite.Next() )
\r
506 Handle(SALOME_InteractiveObject) anObj =
\r
507 Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
\r
509 if ( !anObj.IsNull() && anObj->hasEntry() && strcmp( anObj->getEntry(), entry ) == 0 )
\r
510 prs->AddObject( ite.Value() );
\r
516 //=======================================================================
\r
517 // name : LocalSelection
\r
518 // Purpose : Activates selection of sub shapes
\r
519 //=======================================================================
\r
520 void SOCC_Viewer::LocalSelection( const SALOME_OCCPrs* thePrs, const int theMode )
\r
522 Handle(AIS_InteractiveContext) ic = getAISContext();
\r
524 const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( thePrs );
\r
528 // Open local context if there is no one
\r
529 bool allObjects = thePrs == 0 || thePrs->IsNull();
\r
530 if ( !ic->HasOpenedContext() ) {
\r
531 ic->ClearCurrents( false );
\r
532 ic->OpenLocalContext( allObjects, true, true );
\r
535 AIS_ListOfInteractive anObjs;
\r
536 // Get objects to be activated
\r
538 ic->DisplayedObjects( anObjs );
\r
540 anOCCPrs->GetObjects( anObjs );
\r
542 // Activate selection of objects from prs
\r
543 AIS_ListIteratorOfListOfInteractive aIter( anObjs );
\r
544 for ( ; aIter.More(); aIter.Next() ) {
\r
545 Handle(AIS_InteractiveObject) anAIS = aIter.Value();
\r
546 if ( !anAIS.IsNull() )
\r
548 if ( anAIS->IsKind( STANDARD_TYPE( AIS_Shape ) ) )
\r
550 ic->Load( anAIS, -1, false );
\r
551 ic->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)theMode ) );
\r
553 else if ( anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron) )
\r
555 ic->Load( anAIS, -1, false );
\r
556 ic->Activate( anAIS, theMode );
\r
562 //=======================================================================
\r
563 // name : GlobalSelection
\r
564 // Purpose : Deactivates selection of sub shapes
\r
565 //=======================================================================
\r
566 void SOCC_Viewer::GlobalSelection( const bool update ) const
\r
568 Handle(AIS_InteractiveContext) ic = getAISContext();
\r
569 if ( !ic.IsNull() )
\r
571 ic->CloseAllContexts( false );
\r
573 ic->CurrentViewer()->Redraw();
\r
577 //=======================================================================
\r
578 // name : BeforeDisplay
\r
579 // Purpose : Axiluary method called before displaying of objects
\r
580 //=======================================================================
\r
581 void SOCC_Viewer::BeforeDisplay( SALOME_Displayer* d )
\r
583 d->BeforeDisplay( this, SALOME_OCCViewType() );
\r
586 //=======================================================================
\r
587 // name : AfterDisplay
\r
588 // Purpose : Axiluary method called after displaying of objects
\r
589 //=======================================================================
\r
590 void SOCC_Viewer::AfterDisplay( SALOME_Displayer* d )
\r
592 d->AfterDisplay( this, SALOME_OCCViewType() );
\r
595 //=======================================================================
\r
596 // name : getTrihedronSize
\r
597 // Purpose : Get new and current trihedron size corresponding to the
\r
598 // current model size
\r
599 //=======================================================================
\r
600 bool SOCC_Viewer::getTrihedronSize( double& theNewSize, double& theSize )
\r
605 //SRN: BUG IPAL8996, a usage of method ActiveView without an initialization
\r
606 Handle(V3d_Viewer) viewer = getViewer3d();
\r
607 viewer->InitActiveViews();
\r
608 if(!viewer->MoreActiveViews()) return false;
\r
610 Handle(V3d_View) view3d = viewer->ActiveView();
\r
613 if ( view3d.IsNull() )
\r
616 double Xmin = 0, Ymin = 0, Zmin = 0, Xmax = 0, Ymax = 0, Zmax = 0;
\r
619 view3d->View()->MinMaxValues( Xmin, Ymin, Zmin, Xmax, Ymax, Zmax );
\r
621 if ( Xmin == RealFirst() || Ymin == RealFirst() || Zmin == RealFirst() ||
\r
622 Xmax == RealLast() || Ymax == RealLast() || Zmax == RealLast() )
\r
625 aMaxSide = Xmax - Xmin;
\r
626 if ( aMaxSide < Ymax -Ymin ) aMaxSide = Ymax -Ymin;
\r
627 if ( aMaxSide < Zmax -Zmin ) aMaxSide = Zmax -Zmin;
\r
629 float aSizeInPercents = SUIT_Session::session()->resourceMgr()->doubleValue("Viewer","TrihedronSize", 105.);
\r
631 static float EPS = 5.0E-3;
\r
632 theSize = getTrihedron()->Size();
\r
633 theNewSize = aMaxSide*aSizeInPercents / 100.0;
\r
635 return fabs( theNewSize - theSize ) > theSize * EPS ||
\r
636 fabs( theNewSize - theSize) > theNewSize * EPS;
\r
639 //=======================================================================
\r
642 //=======================================================================
\r
643 void SOCC_Viewer::Repaint()
\r
645 // onAdjustTrihedron();
\r
646 getViewer3d()->Update();
\r
649 //=======================================================================
\r
650 // name : createView
\r
651 // Purpose : create SOCC_ViewWindow
\r
652 //=======================================================================
\r
653 SUIT_ViewWindow* SOCC_Viewer::createView( SUIT_Desktop* theDesktop )
\r
655 SOCC_ViewWindow* view = new SOCC_ViewWindow(theDesktop, this);
\r