+bool GEOMGUI_Selection::isVectorsMode( const int index ) const
+{
+ bool res = false;
+
+#ifdef USE_VISUAL_PROP_MAP
+ bool found = false;
+ QVariant v = visibleProperty( entry( index ), VECTOR_MODE_PROP );
+ if ( v.canConvert( QVariant::Bool ) ) {
+ res = v.toBool();
+ found = true;
+ }
+
+ if ( !found ) {
+#endif
+ SALOME_View* view = GEOM_Displayer::GetActiveView();
+ QString viewType = activeViewType();
+ if ( view && ( viewType == OCCViewer_Viewer::Type() || viewType == SVTK_Viewer::Type() ) ) {
+ SALOME_Prs* prs = view->CreatePrs( entry( index ).toLatin1().constData() );
+ if ( prs ) {
+ if ( viewType == OCCViewer_Viewer::Type() ) { // assuming OCC
+ SOCC_Prs* occPrs = (SOCC_Prs*) prs;
+ AIS_ListOfInteractive lst;
+ occPrs->GetObjects( lst );
+ if ( lst.Extent() ) {
+ Handle(AIS_InteractiveObject) io = lst.First();
+ if ( !io.IsNull() ) {
+ Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io);
+ if ( !aSh.IsNull() )
+ res = aSh->isShowVectors();
+ }
+ }
+ } else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK
+ SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( prs );
+ vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0;
+ if ( lst ) {
+ lst->InitTraversal();
+ vtkActor* actor = lst->GetNextActor();
+ if ( actor ) {
+ GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(actor);
+ if ( aGeomActor )
+ res = aGeomActor->GetVectorMode();
+ }
+ }
+ }
+ }
+ }
+#ifdef USE_VISUAL_PROP_MAP
+ }
+#endif
+
+ return res;
+}
+
+bool GEOMGUI_Selection::hasChildren( const _PTR(SObject)& obj )
+{
+ bool ok = false;
+ if ( obj ) {
+ _PTR(ChildIterator) it ( obj->GetStudy()->NewChildIterator( obj ) );
+ for ( ; it->More() && !ok; it->Next() ) {
+ _PTR(SObject) child = it->Value();
+ if ( child ) {
+ _PTR(SObject) refObj;
+ if ( child->ReferencedObject( refObj ) ) continue; // omit references
+ if ( child->GetName() != "" ) ok = true;
+ }
+ }
+ }
+ return ok;
+}
+
+bool GEOMGUI_Selection::expandable( const _PTR(SObject)& obj )
+{
+ bool exp = true;
+ _PTR(GenericAttribute) anAttr;
+ if ( obj && obj->FindAttribute( anAttr, "AttributeExpandable" ) ) {
+ _PTR(AttributeExpandable) aAttrExp = anAttr;
+ exp = aAttrExp->IsExpandable();
+ }
+ return exp;
+}
+
+bool GEOMGUI_Selection::isCompoundOfVertices( GEOM::GEOM_Object_ptr obj )