]> SALOME platform Git repositories - plugins/blsurfplugin.git/commitdiff
Salome HOME
New structure: in progress
authorgdd <gdd>
Mon, 7 Feb 2011 18:31:06 +0000 (18:31 +0000)
committergdd <gdd>
Mon, 7 Feb 2011 18:31:06 +0000 (18:31 +0000)
TODO:
- GUI
- OnLoad

src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx
src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx
src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.cxx
src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx
src/GUI/BLSURFPluginGUI_HypothesisCreator.h

index d5dc6b54a7627a77bae355fd1451c8905a14315b..21d51dd9b9ab90fa5129eac7b44ba2031e8eb937 100644 (file)
@@ -425,7 +425,7 @@ bool BLSURFPlugin_Hypothesis::SetEnforcedVertex(const TEntry& theFaceEntry, doub
       // update _faceEntryEnfVertexListMap
       TEnfVertexList& currentEnfVertexList = _faceEntryEnfVertexListMap[theFaceEntry];
       for (TEnfVertexList::iterator it = currentEnfVertexList.begin() ; it != currentEnfVertexList.end() ; ++it) {
-        if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+        if (TEnfVertexCmp(&(*it),&oldEnfVertex){
           currentEnfVertexList.erase(it);
           currentEnfVertexList.insert(newEnfVertex);
           break;
@@ -434,7 +434,7 @@ bool BLSURFPlugin_Hypothesis::SetEnforcedVertex(const TEntry& theFaceEntry, doub
 
       // update _enfVertexList
       for (TEnfVertexList::iterator it = _enfVertexList.begin() ; it != _enfVertexList.end() ; ++it) {
-        if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+        if (TEnfVertexCmp(&(*it),&oldEnfVertex){
           _enfVertexList.erase(it);
           _enfVertexList.insert(newEnfVertex);
           break;
@@ -454,7 +454,7 @@ bool BLSURFPlugin_Hypothesis::SetEnforcedVertex(const TEntry& theFaceEntry, doub
       // update _faceEntryEnfVertexListMap
       TEnfVertexList& currentEnfVertexList = _faceEntryEnfVertexListMap[theFaceEntry];
       for (TEnfVertexList::iterator it = currentEnfVertexList.begin() ; it != currentEnfVertexList.end() ; ++it) {
-        if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+        if (TEnfVertexCmp(&(*it),&oldEnfVertex){
           currentEnfVertexList.erase(it);
           currentEnfVertexList.insert(newEnfVertex);
           break;
@@ -463,7 +463,7 @@ bool BLSURFPlugin_Hypothesis::SetEnforcedVertex(const TEntry& theFaceEntry, doub
 
       // update _enfVertexList
       for (TEnfVertexList::iterator it = _enfVertexList.begin() ; it != _enfVertexList.end() ; ++it) {
-        if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+        if (TEnfVertexCmp(&(*it),&oldEnfVertex){
           _enfVertexList.erase(it);
           _enfVertexList.insert(newEnfVertex);
           break;
@@ -487,7 +487,7 @@ bool BLSURFPlugin_Hypothesis::SetEnforcedVertex(const TEntry& theFaceEntry, doub
       // update _faceEntryEnfVertexListMap
       TEnfVertexList& currentEnfVertexList = _faceEntryEnfVertexListMap[theFaceEntry];
       for (TEnfVertexList::iterator it = currentEnfVertexList.begin() ; it != currentEnfVertexList.end() ; ++it) {
-        if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+        if (TEnfVertexCmp(&(*it),&oldEnfVertex){
           currentEnfVertexList.erase(it);
           currentEnfVertexList.insert(newEnfVertex);
           break;
@@ -496,7 +496,7 @@ bool BLSURFPlugin_Hypothesis::SetEnforcedVertex(const TEntry& theFaceEntry, doub
 
       // update _enfVertexList
       for (TEnfVertexList::iterator it = _enfVertexList.begin() ; it != _enfVertexList.end() ; ++it) {
-        if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+        if (TEnfVertexCmp(&(*it),&oldEnfVertex){
           _enfVertexList.erase(it);
           _enfVertexList.insert(newEnfVertex);
           break;
@@ -685,7 +685,7 @@ bool BLSURFPlugin_Hypothesis::ClearEnforcedVertex(const TEntry& theFaceEntry, do
 
   // update _enfVertexList
   for (TEnfVertexList::iterator it = _enfVertexList.begin() ; it != _enfVertexList.end() ; ++it) {
-    if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+    if (TEnfVertexCmp(&(*it),&oldEnfVertex){
       _enfVertexList.erase(it);
       toNotify = true;
       MESSAGE("Done");
@@ -696,7 +696,7 @@ bool BLSURFPlugin_Hypothesis::ClearEnforcedVertex(const TEntry& theFaceEntry, do
   // update _faceEntryEnfVertexListMap
   TEnfVertexList& currentEnfVertexList = _faceEntryEnfVertexListMap[theFaceEntry];
   for (TEnfVertexList::iterator it = currentEnfVertexList.begin() ; it != currentEnfVertexList.end() ; ++it) {
-    if (TEnfVertexCmp(&(*it),&oldEnfVertex) == 0){
+    if (TEnfVertexCmp(&(*it),&oldEnfVertex){
       currentEnfVertexList.erase(it);
       toNotify = true;
       break;
@@ -846,27 +846,26 @@ std::ostream & BLSURFPlugin_Hypothesis::SaveTo(std::ostream & save) {
     save << " " << "__ATTRACTORS_END__";
   }
 
-  TFaceEntryCoordsListMap::const_iterator it_enf = _faceEntryCoordsListMap.begin();
-  if (it_enf != _faceEntryCoordsListMap.end()) {
+  TFaceEntryEnfVertexListMap::const_iterator it_enf = _faceEntryEnfVertexListMap.begin();
+  if (it_enf != _faceEntryEnfVertexListMap.end()) {
     save << " " << "__ENFORCED_VERTICES_BEGIN__";
-    for (; it_enf != _faceEntryCoordsListMap.end(); ++it_enf) {
+    for (; it_enf != _faceEntryEnfVertexListMap.end(); ++it_enf) {
       save << " " << it_enf->first;
-      TEnfVertexCoordsList coordsList = it_enf->second;
-      TEnfVertexCoordsList::const_iterator it_coordsList = coordsList.begin();
-      for (; it_coordsList != coordsList.end(); ++it_coordsList) {
-        TEnfVertex enfVertex = _coordsEnfVertexMap[(*it_coordsList)];
-        save << " " << enfVertex.name;
-        save << " " << enfVertex.coords[0];
-        save << " " << enfVertex.coords[1];
-        save << " " << enfVertex.coords[2];
-        /* TODO GROUPS
-         TEnfVertexGroupNameMap::const_iterator it_enfGroup = _enfVertexGroupNameMap.find(*it_evl);
-         if (it_enfGroup != _enfVertexGroupNameMap.end()) {
-         save << " " << "__ENF_GROUP_BEGIN__";
-         save << " " << it_enfGroup->second ;
-         save << " " << "__ENF_GROUP_END__";
-         }
-         */
+      TEnfVertexList enfVertexList = it_enf->second;
+      TEnfVertexList::const_iterator it_enfVertexList = enfVertexList.begin();
+      for (; it_enfVertexList != enfVertexList.end(); ++it_enfVertexList) {
+        TEnfVertex enfVertex = (*it_enfVertexList);
+        save << " " << enfVertex.name << ";";
+        save << " " << enfVertex.geomEntry << ";";
+        if (enfVertex.coords.size()) {
+          save << " " << enfVertex.coords[0] << ";";
+          save << " " << enfVertex.coords[1] << ";";
+          save << " " << enfVertex.coords[2] << ";";
+        }
+        else {
+          save <<" ; ; ;";
+        }
+        save << " " << enfVertex.grpName;
         save << " " << "$"; // "$" is a mark of enforced vertex end
       }
       save << "#"; // "#" is a mark of enforced shape end
@@ -1092,6 +1091,16 @@ std::istream & BLSURFPlugin_Hypothesis::LoadFrom(std::istream & load) {
         hasEnforcedVertex = true;
   }
 
+//  MAPS TO FILL
+//   TFaceEntryEnfVertexListMap  _faceEntryEnfVertexListMap;
+//   TEnfVertexList              _enfVertexList;
+//   // maps to get "manual" enf vertex (through their coordinates)
+//   TFaceEntryCoordsListMap     _faceEntryCoordsListMap;
+//   TCoordsEnfVertexMap         _coordsEnfVertexMap;
+//   // maps to get "geom" enf vertex (through their geom entries)
+//   TFaceEntryEnfVertexEntryListMap _faceEntryEnfVertexEntryListMap;
+//   TEnfVertexEntryEnfVertexMap     _enfVertexEntryEnfVertexMap;
+
   std::string enfVertexEntry, enfValue, enfGroup, trace;
   std::ostringstream oss;
   while (isOK && hasEnforcedVertex) {
index 65799bf91a3c827003a9e6b91de8b19d43c08a92..7019f0086b5ec1cb57f373be7ddc1a2c5968c9df 100644 (file)
@@ -155,13 +155,11 @@ public:
     TEnfGroupName grpName;
     //    TEntryList faceEntries; // any use ?
   } TEnfVertex;
+  
   struct CompareEnfVertices
   {
     bool operator () (const TEnfVertex &e1, const TEnfVertex &e2) const
-    {
-//      MESSAGE("Comparing 2 enf vertices");
       return true;
-    }
   };
 
   int TEnfVertexCmp(const TEnfVertex *e1, const TEnfVertex *e2) {
@@ -170,9 +168,8 @@ public:
       if (e1->coords.size() && e2->coords.size())
         sameCoords = (e1->coords[0] == e2->coords[0]) && (e1->coords[1] == e2->coords[1]) && (e1->coords[2]
             == e2->coords[2]);
-      if( sameCoords && (e1->geomEntry == e2->geomEntry) && (e1->grpName == e2->grpName)
-          && (e1->name == e2->name))
-        return 0;
+      return ( sameCoords && (e1->geomEntry == e2->geomEntry) && (e1->grpName == e2->grpName)
+          && (e1->name == e2->name));
     } else
       return (e1 < e2);
   }
index 0680bd14d09235472b51fd4a3b41f4edfcc240cb..e17b02bb660db1b0e863ee5cd0c67ad93351d034 100644 (file)
@@ -1034,8 +1034,21 @@ bool BLSURFPlugin_Hypothesis_i::SetEnforcedVertex(GEOM::GEOM_Object_ptr theFace,
     THROW_SALOME_CORBA_EXCEPTION("theFace shape type is not FACE or COMPOUND", SALOME::BAD_PARAM);
   }
 
-  // TODO Affecter un nom de groupe vide
   string theFaceEntry = theFace->GetStudyEntry();
+  
+  if (theFaceEntry == "") {
+    GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
+    SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
+    string aName;
+    if (theFace->GetShapeType() == GEOM::FACE)
+      aName = "Face_";
+    if (theFace->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theFace->GetEntry();
+    SALOMEDS::SObject_ptr theSFace = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theFace, aName.c_str());
+    if (!theSFace->_is_nil())
+      theFaceEntry = theSFace->GetID();
+  }
   if (theFaceEntry == "")
     THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
   MESSAGE("IDL : GetName : " << theFace->GetName());
@@ -1059,10 +1072,24 @@ bool BLSURFPlugin_Hypothesis_i::SetEnforcedVertexNamed(GEOM::GEOM_Object_ptr the
     THROW_SALOME_CORBA_EXCEPTION("theFace shape type is not FACE or COMPOUND", SALOME::BAD_PARAM);
   }
 
-  // TODO Affecter un nom de groupe vide
   string theFaceEntry = theFace->GetStudyEntry();
+  
+  if (theFaceEntry == "") {
+    GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
+    SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
+    string aName;
+    if (theFace->GetShapeType() == GEOM::FACE)
+      aName = "Face_";
+    if (theFace->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theFace->GetEntry();
+    SALOMEDS::SObject_ptr theSFace = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theFace, aName.c_str());
+    if (!theSFace->_is_nil())
+      theFaceEntry = theSFace->GetID();
+  }
   if (theFaceEntry == "")
     THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
+  
   MESSAGE("IDL : GetName : " << theFace->GetName());
   MESSAGE("IDL : SetEnforcedVertex ( "<< theFaceEntry << ", " << x << ", " << y << ", " << z << ", " << theVertexName << ")");
   try {
@@ -1098,28 +1125,37 @@ bool BLSURFPlugin_Hypothesis_i::SetEnforcedVertexGeom(GEOM::GEOM_Object_ptr theF
   //  x = y = z = 0.;
   //  measureOp->PointCoordinates(theVertex, x, y, z);
 
-  // TODO publish geom objects it not published
   string theFaceEntry = theFace->GetStudyEntry();
   string theVertexEntry = theVertex->GetStudyEntry();
+  
+  GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
+  SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
+  string aName;
+  
+  if (theFaceEntry == "") {
+    if (theFace->GetShapeType() == GEOM::FACE)
+      aName = "Face_";
+    if (theFace->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theFace->GetEntry();
+    SALOMEDS::SObject_ptr theSFace = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theFace, aName.c_str());
+    if (!theSFace->_is_nil())
+      theFaceEntry = theSFace->GetID();
+  }
+  if (theFaceEntry == "")
+    THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
+  
   if (theVertexEntry == "") {
-    GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
-    SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
-    string aName;
     if (theVertex->GetShapeType() == GEOM::VERTEX)
       aName = "Vertex_";
     if (theVertex->GetShapeType() == GEOM::COMPOUND)
       aName = "Compound_";
     aName += theVertex->GetEntry();
-    MESSAGE("Publish");
-//    geomGen->AddInStudy(smeshGen->GetCurrentStudy(), theVertex, aName.c_str(), NULL);
     SALOMEDS::SObject_ptr theSVertex = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theVertex, aName.c_str());
     if (!theSVertex->_is_nil())
       theVertexEntry = theSVertex->GetID();
-    MESSAGE("Done, study entry: " << theVertexEntry);
   }
-
-//  if ((theFaceEntry == "") || (theVertexEntry == ""))
-  if (theFaceEntry == "")
+  if (theVertexEntry == "")
     THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
 
   string theVertexName = theVertex->GetName();
@@ -1175,6 +1211,20 @@ BLSURFPlugin::TEnfVertexList* BLSURFPlugin_Hypothesis_i::GetEnforcedVertices(GEO
   }
 
   string theFaceEntry = theFace->GetStudyEntry();
+  
+  if (theFaceEntry == "") {
+    GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
+    SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
+    string aName;
+    if (theFace->GetShapeType() == GEOM::FACE)
+      aName = "Face_";
+    if (theFace->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theFace->GetEntry();
+    SALOMEDS::SObject_ptr theSFace = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theFace, aName.c_str());
+    if (!theSFace->_is_nil())
+      theFaceEntry = theSFace->GetID();
+  }
   if (theFaceEntry == "")
     THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
 
@@ -1197,6 +1247,20 @@ bool BLSURFPlugin_Hypothesis_i::UnsetEnforcedVertex(GEOM::GEOM_Object_ptr theFac
   }
 
   string theFaceEntry = theFace->GetStudyEntry();
+  
+  if (theFaceEntry == "") {
+    GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
+    SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
+    string aName;
+    if (theFace->GetShapeType() == GEOM::FACE)
+      aName = "Face_";
+    if (theFace->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theFace->GetEntry();
+    SALOMEDS::SObject_ptr theSFace = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theFace, aName.c_str());
+    if (!theSFace->_is_nil())
+      theFaceEntry = theSFace->GetID();
+  }
   if (theFaceEntry == "")
     THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
   MESSAGE("IDL : GetName : " << theFace->GetName());
@@ -1233,8 +1297,37 @@ bool BLSURFPlugin_Hypothesis_i::UnsetEnforcedVertexGeom(GEOM::GEOM_Object_ptr th
 
   std::string theFaceEntry = theFace->GetStudyEntry();
   std::string theVertexEntry = theVertex->GetStudyEntry();
-  if ((theFaceEntry == "") || (theVertexEntry == ""))
+  
+  GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
+  SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
+  string aName;
+  
+  if (theFaceEntry == "") {
+    if (theFace->GetShapeType() == GEOM::FACE)
+      aName = "Face_";
+    if (theFace->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theFace->GetEntry();
+    SALOMEDS::SObject_ptr theSFace = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theFace, aName.c_str());
+    if (!theSFace->_is_nil())
+      theFaceEntry = theSFace->GetID();
+  }
+  if (theFaceEntry == "")
+    THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
+  
+  if (theVertexEntry == "") {
+    if (theVertex->GetShapeType() == GEOM::VERTEX)
+      aName = "Vertex_";
+    if (theVertex->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theVertex->GetEntry();
+    SALOMEDS::SObject_ptr theSVertex = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theVertex, aName.c_str());
+    if (!theSVertex->_is_nil())
+      theVertexEntry = theSVertex->GetID();
+  }
+  if (theVertexEntry == "")
     THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
+  
   MESSAGE("IDL : UnsetEnforcedVertexGeom ( "<< theFaceEntry << ", " << theVertexEntry << ")");
 
   try {
@@ -1253,8 +1346,23 @@ bool BLSURFPlugin_Hypothesis_i::UnsetEnforcedVertices(GEOM::GEOM_Object_ptr theF
   }
 
   string theFaceEntry = theFace->GetStudyEntry();
+  
+  if (theFaceEntry == "") {
+    GEOM::GEOM_Gen_ptr geomGen = SMESH_Gen_i::GetGeomEngine();
+    SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen();
+    string aName;
+    if (theFace->GetShapeType() == GEOM::FACE)
+      aName = "Face_";
+    if (theFace->GetShapeType() == GEOM::COMPOUND)
+      aName = "Compound_";
+    aName += theFace->GetEntry();
+    SALOMEDS::SObject_ptr theSFace = geomGen->PublishInStudy(smeshGen->GetCurrentStudy(), NULL, theFace, aName.c_str());
+    if (!theSFace->_is_nil())
+      theFaceEntry = theSFace->GetID();
+  }
   if (theFaceEntry == "")
     THROW_SALOME_CORBA_EXCEPTION( "Geom object is not published in study" ,SALOME::BAD_PARAM );
+  
   MESSAGE("IDL : GetName : " << theFace->GetName());
   MESSAGE("IDL : UnsetEnforcedVertices ( "<< theFaceEntry << ")");
 
index 726f0d81658579f74a05e5b73af9e3450f42f680..bb7d0e230cb9301f76eaeea86933d90da7c8b22c 100644 (file)
@@ -289,12 +289,31 @@ QWidget *EnforcedTreeWidgetDelegate::createEditor(QWidget *parent,
 void EnforcedTreeWidgetDelegate::setEditorData(QWidget *editor,
                                            const QModelIndex &index) const
 {
+  QModelIndex parent = index.parent();
+  QString entry = parent.child(index.row(), ENF_VER_ENTRY_COLUMN).data(Qt::EditRole).toString();
   QString value = index.model()->data(index, Qt::EditRole).toString();
-  if (index.column() == ENF_VER_X_COLUMN || \
-    index.column() == ENF_VER_Y_COLUMN || \
-    index.column() == ENF_VER_Z_COLUMN) {
-    SMESHGUI_SpinBox *lineEdit = static_cast<SMESHGUI_SpinBox*>(editor);
+  if (index.column() == ENF_VER_X_COLUMN ||
+      index.column() == ENF_VER_Y_COLUMN ||
+      index.column() == ENF_VER_Z_COLUMN)
+  {
+    // If no entry for current index => manual enforced vertex
+    // Editor is a SMESHGUI_SpinBox
+    if (entry.isEmpty()) {
+      SMESHGUI_SpinBox *lineEdit = static_cast<SMESHGUI_SpinBox*>(editor);
+      lineEdit->setText(value);
+    } else {
+      // If there is an entry => selected enforced vertexEntry
+      // Editor is a read-only QLineEdit
+      QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+      lineEdit->setText("");
+      lineEdit->setReadOnly(true);
+    }
+  } else if ((entry.isEmpty()) && (index.column() == ENF_VER_NAME_COLUMN)) {
+    // If there is an entry => selected enforced vertexEntry
+    // Editor is a read-only QLineEdit
+    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
     lineEdit->setText(value);
+    lineEdit->setReadOnly(true);
   }
   else {
     QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
@@ -313,8 +332,7 @@ void EnforcedTreeWidgetDelegate::setModelData(QWidget *editor, QAbstractItemMode
     if (! vertexExists(model, index, lineEdit->GetString())) {
       model->setData(index, lineEdit->GetValue(), Qt::EditRole);
     }
-  }
-  else if (index.column() == ENF_VER_NAME_COLUMN) {
+  } else if (index.column() == ENF_VER_NAME_COLUMN) {
     QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
     QString value = lineEdit->text();
     if (! vertexExists(model, index, value)) {
@@ -344,7 +362,7 @@ bool EnforcedTreeWidgetDelegate::vertexExists(QAbstractItemModel *model,
   int row = index.row();
   int col = index.column();
 
-  if (parent.isValid()) {
+  if (parent.isValid() && !value.isEmpty()) {
     if (col == ENF_VER_X_COLUMN || col == ENF_VER_Y_COLUMN || col == ENF_VER_Z_COLUMN) {
       double x, y, z;
       if (col == ENF_VER_X_COLUMN) {
@@ -375,7 +393,23 @@ bool EnforcedTreeWidgetDelegate::vertexExists(QAbstractItemModel *model,
         }
       }
     }
-    else if (index.column() == ENF_VER_NAME_COLUMN) {
+//     else if (col == ENF_VER_ENTRY_COLUMN) {
+//       // Compare entries if no coords (= selected geom)
+//       xString = parent.child(row, ENF_VER_X_COLUMN).data(Qt::EditRole).toString();
+//       if (xString.isEmpty) {
+//         int nbChildren = model->rowCount(parent);
+//         for (int i = 0 ; i < nbChildren ; i++) {
+//           if (i != row) {
+//             QString childName = parent.child(i, ENF_VER_ENTRY_COLUMN).data(Qt::EditRole).toString();
+//             if (childName == value) {
+//               exists = true;
+//               break;
+//             }
+//           }
+//         }
+//       }
+//     }
+    else if (col == ENF_VER_NAME_COLUMN) {
       int nbChildren = model->rowCount(parent);
       for (int i = 0 ; i < nbChildren ; i++) {
         if (i != row) {
@@ -875,7 +909,8 @@ is synchronized with the coordinates of the enforced vertex clicked in the tree
 void BLSURFPluginGUI_HypothesisCreator::update(QTreeWidgetItem* item, int column) {
 //   MESSAGE("BLSURFPluginGUI_HypothesisCreator::updateVertexList");
   QVariant x = item->data(ENF_VER_X_COLUMN, Qt::EditRole);
-  if (! x.isNull()) {
+  QVariant entry = item->data(ENF_VER_ENTRY_COLUMN, Qt::EditRole);
+  if (!x.isNull() && !entry.isNull()) {
     QVariant y = item->data(ENF_VER_Y_COLUMN, Qt::EditRole);
     QVariant z = item->data(ENF_VER_Z_COLUMN, Qt::EditRole);
     QVariant vertexName = item->data(ENF_VER_NAME_COLUMN, Qt::EditRole);
@@ -887,10 +922,13 @@ void BLSURFPluginGUI_HypothesisCreator::update(QTreeWidgetItem* item, int column
     if (parent) {
       QString shapeName = parent->data(ENF_VER_NAME_COLUMN, Qt::EditRole).toString();
       QString toolTip = shapeName + QString(": ") + vertexName.toString();
-      toolTip += QString("(") + x.toString();
-      toolTip += QString(", ") + y.toString();
-      toolTip += QString(", ") + z.toString();
-      toolTip += QString(")");
+      QString entryName = parent->data(ENF_VER_ENTRY_COLUMN, Qt::EditRole).toString();
+      if (entryName.isEmpty()) {
+        toolTip += QString("(") + x.toString();
+        toolTip += QString(", ") + y.toString();
+        toolTip += QString(", ") + z.toString();
+        toolTip += QString(")");
+      }
       item->setToolTip(ENF_VER_NAME_COLUMN,toolTip);
     }
     myXCoord->SetValue(x.toDouble());
index 98ebfaa0c24bb325350d14a0979f9a5c93551f77..0ba44b2820ee6158e90e293d2e7e552c4ca145b0 100644 (file)
@@ -87,22 +87,43 @@ typedef std::set<TEntry> TEntryList;
 typedef std::vector<double> TEnfVertexCoords;
 // List of enforced vertices
 typedef std::set< TEnfVertexCoords > TEnfVertexCoordsList;
-  // Enforced vertex
-  typedef struct {
-    TEnfName name;
-    TEntry geomEntry;
-    TEnfVertexCoords coords;
-    TEnfName grpName;
-  } TEnfVertex;
+// Enforced vertex
+typedef struct {
+  TEnfName name;
+  TEntry geomEntry;
+  TEnfVertexCoords coords;
+  TEnfName grpName;
+} TEnfVertex;
+
+int TEnfVertexCmp(const TEnfVertex *e1, const TEnfVertex *e2) {
+  if (e1 && e2) {
+    bool sameCoords = true;
+    if (e1->coords.size() && e2->coords.size())
+      sameCoords = (e1->coords[0] == e2->coords[0]) && (e1->coords[1] == e2->coords[1]) && (e1->coords[2]
+          == e2->coords[2]);
+    return ( sameCoords && (e1->geomEntry == e2->geomEntry) && (e1->grpName == e2->grpName)
+        && (e1->name == e2->name));
+  } else
+    return (e1 < e2);
+}
+
+struct CompareEnfVertices
+{
+  bool operator () (const TEnfVertex &e1, const TEnfVertex &e2) const
+    return true;
+};
 
 // List of enforced vertices
-typedef std::set< TEnfVertex > TEnfVertexList;
+typedef std::set< TEnfVertex, CompareEnfVertices > TEnfVertexList;
 
-  // Map Coords / Enforced vertex
-typedef std::map< TEnfVertexCoords, TEnfVertex > TCoordsEnfVertexMap;
+// Map Face Entry / List of enforced vertices
+typedef std::map< TEntry, TEnfVertexList > TFaceEntryEnfVertexListMap;
 
-// Map Entry / List of coords
-typedef std::map< TEntry, TEnfVertexCoordsList > TEntryCoordsListMap;
+//   // Map Coords / Enforced vertex
+// typedef std::map< TEnfVertexCoords, TEnfVertex > TCoordsEnfVertexMap;
+// 
+// // Map Entry / List of coords
+// typedef std::map< TEntry, TEnfVertexCoordsList > TEntryCoordsListMap;
 
 typedef struct
 {
@@ -111,12 +132,12 @@ typedef struct
   double  myAngleMeshS, myAngleMeshC, myGradation;
   double  myPhySize, myGeoMin, myGeoMax, myPhyMin,myPhyMax;
   bool    myAllowQuadrangles, myDecimesh,mySmpsurface,mySmpedge,mySmppoint,myEnforcedVertex;
-  TEnfVertexCoordsList coordsList;
-  TEntryCoordsListMap entryCoordsListMap;
-  TCoordsEnfVertexMap coordsEnfVertexMap;
+  TEnfVertexList enfVertexList;
+  TFaceEntryEnfVertexListMap faceEntryEnfVertexListMap;
+//   TEntryCoordsListMap entryCoordsListMap;
+//   TCoordsEnfVertexMap coordsEnfVertexMap;
   /* TODO GROUPS
   TGroupNameEnfVertexListMap groupNameEnfVertexListMap;
-  TEnfVertexGroupNameMap enfVertexGroupNameMap;
   */
   QString myName;
 } BlsurfHypothesisData;