Salome HOME
updated copyright message
[modules/geom.git] / src / GEOMToolsGUI / GEOMToolsGUI_MarkerDlg.cxx
index 1af76cae138435c22c7382a358c401b5f7887b0a..4ff6bcec0be9eeae7e24f39fc3f927819bc3527d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -169,11 +169,7 @@ void GEOMToolsGUI_MarkerDlg::setStandardMarker( GEOM::marker_type type, GEOM::ma
     myTypeGroup->button( 0 )->setChecked( true );
     myWGStack->setCurrentIndex( 0 );
     myStdTypeCombo->setCurrentId( (int)type );
-#ifdef WIN32
-    int asize = max( (int)GEOM::MS_10, min( (int)GEOM::MS_70, (int)size ) );
-#else
     int asize = std::max( (int)GEOM::MS_10, std::min( (int)GEOM::MS_70, (int)size ) );
-#endif
     myStdScaleCombo->setCurrentId( asize );
   }
 }
@@ -220,19 +216,21 @@ void GEOMToolsGUI_MarkerDlg::accept()
             _PTR(SObject) aSObject( study->FindObjectID( it.Value()->getEntry() ) );
             GEOM::GEOM_Object_var anObject =
               GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( aSObject ) );
-            if ( !anObject->_is_nil() ) {
-              if ( myWGStack->currentIndex() == 0 ) {
+            if ( myWGStack->currentIndex() == 0 ) {
+              if ( !anObject->_is_nil() && GeometryGUI::IsInGeomComponent( aSObject )) {
                 anObject->SetMarkerStd( getMarkerType(), getStandardMarkerScale() );
-                QString aMarker = "%1%2%3";
-                aMarker = aMarker.arg(getMarkerType());
-                aMarker = aMarker.arg(GEOM::subSectionSeparator());
-                aMarker = aMarker.arg(getStandardMarkerScale());
-                getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),GEOM::propertyName( GEOM::PointMarker ), aMarker);
               }
-              else if ( getCustomMarkerID() > 0 ) {
+              QString aMarker = "%1%2%3";
+              aMarker = aMarker.arg(getMarkerType());
+              aMarker = aMarker.arg(GEOM::subSectionSeparator());
+              aMarker = aMarker.arg(getStandardMarkerScale());
+              getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),GEOM::propertyName( GEOM::PointMarker ), aMarker);
+            }
+            else if ( getCustomMarkerID() > 0 ) {
+              if ( !anObject->_is_nil() && GeometryGUI::IsInGeomComponent( aSObject )) {
                 anObject->SetMarkerTexture( getCustomMarkerID() );
-                getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),GEOM::propertyName( GEOM::PointMarker ), QString::number(getCustomMarkerID()));
               }
+              getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),GEOM::propertyName( GEOM::PointMarker ), QString::number(getCustomMarkerID()));
             }
           }
           GEOM_Displayer displayer;
@@ -277,7 +275,7 @@ void GEOMToolsGUI_MarkerDlg::init()
   GEOM::GEOM_Gen_var engine = GeometryGUI::GetGeomGen();
   myOperation = engine->GetIInsertOperations();
   GEOM::ListOfLong_var ids = myOperation->GetAllTextures();
-  for ( int i = 0; i < ids->length(); i++ )
+  for ( int i = 0; i < (int)ids->length(); i++ )
     addTexture( ids[i] );
 
   // ---
@@ -296,8 +294,9 @@ void GEOMToolsGUI_MarkerDlg::init()
           _PTR(SObject) aSObject( study->FindObjectID( it.Value()->getEntry() ) );
           GEOM::GEOM_Object_var anObject =
             GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( aSObject ) );
-          if ( !anObject->_is_nil() ) {
+          if ( !anObject->_is_nil() && GeometryGUI::IsInGeomComponent( aSObject )) {
             GEOM::marker_type mtype = anObject->GetMarkerType();
+
             if ( aType == -1 )
               aType = mtype;
             else if ( aType != mtype ) {
@@ -319,6 +318,47 @@ void GEOMToolsGUI_MarkerDlg::init()
                 break;
             }
           }
+          else {
+            // try study object properties
+            QStringList aMarkerProp;
+            SUIT_ViewWindow* window = getStudy()->application()->desktop()->activeWindow();
+            if (window && window->getViewManager()) {
+              int mgrId = window->getViewManager()->getGlobalId();
+              PropMap aPropMap = getStudy()->getObjectProperties(mgrId, it.Value()->getEntry());
+              aMarkerProp = aPropMap.value(GEOM::propertyName(GEOM::PointMarker)).toString().split( GEOM::subSectionSeparator());
+            }
+            if ( aMarkerProp.size() == 2 ) {
+              // standard marker string contains "TypeOfMarker:ScaleOfMarker"
+              GEOM::marker_type mtype = (GEOM::marker_type)aMarkerProp[0].toInt();
+              GEOM::marker_size msize = (GEOM::marker_size)aMarkerProp[1].toInt();
+
+              if ( aType == -1 )
+                aType = mtype;
+              else if ( aType != mtype ) {
+                aType = (GEOM::marker_type)-1;
+                break;
+              }
+              if ( aSize == -1 )
+                aSize = msize;
+              else if ( aSize != msize )
+                break;
+            }
+            else if ( aMarkerProp.size() == 1 ) {
+              // custom marker string contains "IdOfTexture"
+              int mtexture = aMarkerProp[0].toInt();
+
+              if ( aType == -1 )
+                aType = GEOM::MT_USER;
+              else if ( aType !=  GEOM::MT_USER) {
+                aType = (GEOM::marker_type)-1;
+                break;
+              }
+              if ( aTexture == 0 )
+                aTexture = mtexture;
+              else if ( aTexture != mtexture )
+                break;
+            }
+          }
         }
       }
     }