Salome HOME
0022289: EDF 2623 GEOM: Make "MakePipeWithDifferentsSections" available from GUI
authorkga <kga@opencascade.com>
Mon, 2 Dec 2013 07:11:44 +0000 (07:11 +0000)
committerkga <kga@opencascade.com>
Mon, 2 Dec 2013 07:11:44 +0000 (07:11 +0000)
Additional fixes

src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx
src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h
src/BasicGUI/BasicGUI_CurveDlg.cxx
src/GEOMBase/GEOMBase.cxx
src/GEOMBase/GEOMBase.h
src/GEOMImpl/GEOMImpl_PipeDriver.cxx
src/GenerationGUI/GenerationGUI_PipeDlg.cxx

index 9a1d4107b173815a9250871eb2dc7d3165f4cef6..50a8f8db22f17de667edc18753b737afcc3ea868 100644 (file)
@@ -217,7 +217,7 @@ bool AdvancedGUI_SmoothingSurfaceDlg::execute (ObjectList& objects)
 void AdvancedGUI_SmoothingSurfaceDlg::SelectionIntoArgument()
 {
   QList<GEOM::GeomObjPtr> points = getSelected( TopAbs_VERTEX, -1 );
-  synchronize( myPoints, points );
+  GEOMBase::Synchronize( myPoints, points );
   if ( !myPoints.isEmpty()  )
     GroupPoints->LineEdit1->setText( QString::number( myPoints.count() ) + "_" + tr( "GEOM_POINT" ) + tr( "_S_" ) );
   else
@@ -236,30 +236,3 @@ void AdvancedGUI_SmoothingSurfaceDlg::SetEditCurrentArgument()
   myEditCurrentArgument->setFocus();
   SelectionIntoArgument();
 }
-
-void AdvancedGUI_SmoothingSurfaceDlg::synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right )
-{
-  // 1. remove items from the "left" list that are not in the "right" list
-  QMutableListIterator<GEOM::GeomObjPtr> it1( left );
-  while ( it1.hasNext() ) {
-    GEOM::GeomObjPtr o1 = it1.next();
-    bool found = false;
-    QMutableListIterator<GEOM::GeomObjPtr> it2( right );
-    while ( it2.hasNext() && !found )
-      found = o1 == it2.next();
-    if ( !found )
-      it1.remove();
-  }
-  // 2. add items from the "right" list that are not in the "left" list (to keep selection order)
-  it1 = right;
-  while ( it1.hasNext() ) {
-    GEOM::GeomObjPtr o1 = it1.next();
-    bool found = false;
-    QMutableListIterator<GEOM::GeomObjPtr> it2( left );
-    while ( it2.hasNext() && !found )
-      found = o1 == it2.next();
-    if ( !found )
-      left << o1;
-  }
-}
-
index 1d84d830e91f96be9d63a074ef4676f25eac6fdb..87b33beee1c789e17b8fdae56942c6cdd9954a07 100644 (file)
@@ -50,7 +50,6 @@ protected:
 private:
   void                               Init();
   void                               enterEvent( QEvent* );
-  void                               synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right );
 
 private:
   DlgRef_1Sel*                 GroupPoints;
index 4cd535b4dbf6823155178ad2b675f1a01d2fc7b9..c9d6a06a7ade23fa1b54560ec4877e166995be5c 100644 (file)
@@ -347,43 +347,13 @@ bool BasicGUI_CurveDlg::ClickOnApply()
   return true;
 }
 
-//=================================================================================
-// function : SelectionIntoArgument()
-// purpose  : Called when selection as changed or other case
-//=================================================================================
-static void synchronize (QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right)
-{
-  // 1. remove items from the "left" list that are not in the "right" list
-  QMutableListIterator<GEOM::GeomObjPtr> it1 (left);
-  while (it1.hasNext()) {
-    GEOM::GeomObjPtr o1 = it1.next();
-    bool found = false;
-    QMutableListIterator<GEOM::GeomObjPtr> it2( right );
-    while ( it2.hasNext() && !found )
-      found = o1 == it2.next();
-    if ( !found )
-      it1.remove();
-  }
-  // 2. add items from the "right" list that are not in the "left" list (to keep selection order)
-  it1 = right;
-  while ( it1.hasNext() ) {
-    GEOM::GeomObjPtr o1 = it1.next();
-    bool found = false;
-    QMutableListIterator<GEOM::GeomObjPtr> it2( left );
-    while ( it2.hasNext() && !found )
-      found = o1 == it2.next();
-    if ( !found )
-      left << o1;
-  }
-}
-
 void BasicGUI_CurveDlg::SelectionIntoArgument()
 {
   myEditCurrentArgument->setText("");
 
   if (myEditCurrentArgument == myGroupPoints->LineEdit1) {
     QList<GEOM::GeomObjPtr> points = getSelected(TopAbs_VERTEX, -1);
-    synchronize(myPoints, points);
+    GEOMBase::Synchronize(myPoints, points);
     if (!myPoints.isEmpty())
       myGroupPoints->LineEdit1->setText(QString::number(myPoints.count()) + "_" +
                                         tr("GEOM_POINT") + tr("_S_"));
index 6b1d06ea5f216775e508958f72e05122195f6629..5bcc54e35effee8a3c1d411773ba31731adc73e1 100644 (file)
@@ -876,3 +876,33 @@ void GEOMBase::PublishSubObject( GEOM::GEOM_Object_ptr object )
     }
   }
 }
+
+//================================================================
+// Function : synchronize
+// Purpose  : 
+//================================================================
+void GEOMBase::Synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right )
+{
+  // 1. remove items from the "left" list that are not in the "right" list
+  QMutableListIterator<GEOM::GeomObjPtr> it1( left );
+  while ( it1.hasNext() ) {
+    GEOM::GeomObjPtr o1 = it1.next();
+    bool found = false;
+    QMutableListIterator<GEOM::GeomObjPtr> it2( right );
+    while ( it2.hasNext() && !found )
+      found = o1 == it2.next();
+    if ( !found )
+      it1.remove();
+  }
+  // 2. add items from the "right" list that are not in the "left" list (to keep selection order)
+  it1 = right;
+  while ( it1.hasNext() ) {
+    GEOM::GeomObjPtr o1 = it1.next();
+    bool found = false;
+    QMutableListIterator<GEOM::GeomObjPtr> it2( left );
+    while ( it2.hasNext() && !found )
+      found = o1 == it2.next();
+    if ( !found )
+      left << o1;
+  }
+}
index f52c3c178b26d1b4b1d2bff92c8d81bbee6e0520..d1f8cbfcb1f32810eef864ab17b4147c41eb1c9d 100644 (file)
@@ -31,6 +31,7 @@
 
 // SALOME Includes
 #include <GEOM_AISShape.hxx>
+#include "GEOM_GenericObjPtr.h"
 
 // IDL Headers
 #include <SALOMEconfig.h>
@@ -133,6 +134,8 @@ public :
 
   /* Publish sub-shape under the main object */
   static void         PublishSubObject( GEOM::GEOM_Object_ptr object );
+
+  static void         Synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right );
 };
 
 #endif // GEOMBASE_H
index 7a9f7d85f4cb093d84f75ace93b5478e73bb1aed..b339a722368954427beaf1acf75e4902e05e8a42 100644 (file)
@@ -858,14 +858,17 @@ TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections
   // and seguences of shapes, perform pipe for each
   // and make sewing after that
   double fp,lp;
-  Handle(Geom_Curve) C = BRep_Tool::Curve(TopoDS::Edge(Edges.Value(1)),fp,lp);
   gp_Pnt P1,P2;
   gp_Vec Vec1,Vec2;
-  C->D1(fp,P1,Vec1);
-  C->D1(lp,P2,Vec2);
-  double SumAng = fabs(Vec1.Angle(Vec2));
-  Vec1 = Vec2;
-  P1 = P2;
+  double SumAng = 0;
+  if ( Edges.Length() > 0 ) {
+    Handle(Geom_Curve) C = BRep_Tool::Curve(TopoDS::Edge(Edges.Value(1)),fp,lp);
+    C->D1(fp,P1,Vec1);
+    C->D1(lp,P2,Vec2);
+    SumAng = fabs(Vec1.Angle(Vec2));
+    Vec1 = Vec2;
+    P1 = P2;
+  }
   TColStd_SequenceOfInteger SplitEdgeNums,SplitLocNums;
   int LastLoc = 1;
   //cout<<"Edges.Length()="<<Edges.Length()<<endl;
index 43854d469b9c80bd86de46ebbca27360945f2a0d..621ff95afa2a0046cf27e8c19074926b92c1ded8 100644 (file)
@@ -322,13 +322,10 @@ void GenerationGUI_PipeDlg::SelectionIntoArgument()
   }
   else if ( myEditCurrentArgument == GroupMakePoints->LineEdit1 ) {
     myBaseObjects.clear();
-    QList<GEOM::GeomObjPtr> objects = getSelected( TopAbs_SHAPE, -1 );
-    for ( int i = 0; i < objects.count(); i++ ) {
-      GEOM::shape_type stype = objects[i]->GetMaxShapeType();
-      if ( stype < GEOM::SHELL || stype > GEOM::VERTEX )
-        continue;
-      myBaseObjects << objects[i];
-    }
+    QList<TopAbs_ShapeEnum> types;
+    types << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL;
+    QList<GEOM::GeomObjPtr> objects = getSelected( types, -1 );
+    GEOMBase::Synchronize( myBaseObjects, objects );
     if ( !myBaseObjects.isEmpty() ) {
       QString aName = myBaseObjects.count() > 1 ? QString( "%1_objects").arg( myBaseObjects.count() ) : GEOMBase::GetName( myBaseObjects[0].get() );
       myEditCurrentArgument->setText( aName );
@@ -336,13 +333,9 @@ void GenerationGUI_PipeDlg::SelectionIntoArgument()
   }
   else if ( myEditCurrentArgument == GroupMakePoints->LineEdit2 ) {
     myLocations.clear();
-    QList<GEOM::GeomObjPtr> objects = getSelected( TopAbs_SHAPE, -1 );
-    for ( int i = 0; i < objects.count(); i++ ) {
-      GEOM::shape_type stype = objects[i]->GetMaxShapeType();
-      if ( stype < GEOM::SHELL || stype > GEOM::VERTEX )
-        continue;
-      myLocations << objects[i];
-    }
+    localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
+    QList<GEOM::GeomObjPtr> objects = getSelected( TopAbs_VERTEX, -1 );
+    GEOMBase::Synchronize( myLocations, objects );
     if ( !myLocations.isEmpty() ) {
       QString aName = myLocations.count() > 1 ? QString( "%1_objects").arg( myLocations.count() ) : GEOMBase::GetName( myLocations[0].get() );
       myEditCurrentArgument->setText( aName );