]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
DCQ : Merge Kinematic
authordcq <dcq@opencascade.com>
Fri, 16 Apr 2004 15:40:29 +0000 (15:40 +0000)
committerdcq <dcq@opencascade.com>
Fri, 16 Apr 2004 15:40:29 +0000 (15:40 +0000)
133 files changed:
Makefile.in
idl/GEOM_Gen.idl
idl/GEOM_Kinematic.idl [new file with mode: 0644]
idl/Makefile.in
resources/GEOM_en.xml
resources/GEOM_fr.xml
resources/anim_first.png [new file with mode: 0644]
resources/anim_last.png [new file with mode: 0644]
resources/anim_next.png [new file with mode: 0644]
resources/anim_play.png [new file with mode: 0644]
resources/anim_prev.png [new file with mode: 0644]
resources/anim_stop.png [new file with mode: 0644]
resources/animation.png [new file with mode: 0644]
resources/assembly.png [new file with mode: 0644]
resources/contact.png [new file with mode: 0644]
resources/position.png [new file with mode: 0644]
resources/positionface.png [new file with mode: 0644]
resources/positionpoint.png [new file with mode: 0644]
resources/positionvect.png [new file with mode: 0644]
resources/tree_animation.png [new file with mode: 0644]
resources/tree_assembly.png [new file with mode: 0644]
resources/tree_contact.png [new file with mode: 0644]
src/BasicGUI/Makefile.in
src/BooleanGUI/Makefile.in
src/BuildGUI/Makefile.in
src/DisplayGUI/DisplayGUI.cxx
src/DisplayGUI/Makefile.in
src/EntityGUI/Makefile.in
src/GEOM/GEOM_Animation_i.cc [new file with mode: 0644]
src/GEOM/GEOM_Animation_i.hh [new file with mode: 0644]
src/GEOM/GEOM_Assembly_i.cc [new file with mode: 0644]
src/GEOM/GEOM_Assembly_i.hh [new file with mode: 0644]
src/GEOM/GEOM_Contact_i.cc [new file with mode: 0644]
src/GEOM/GEOM_Contact_i.hh [new file with mode: 0644]
src/GEOM/GEOM_Gen_i.cc
src/GEOM/GEOM_Gen_i.hh
src/GEOM/GEOM_Position_i.cc [new file with mode: 0644]
src/GEOM/GEOM_Position_i.hh [new file with mode: 0644]
src/GEOM/GEOM_Rotation_i.cc [new file with mode: 0644]
src/GEOM/GEOM_Rotation_i.hh [new file with mode: 0644]
src/GEOM/GEOM_Translation_i.cc [new file with mode: 0644]
src/GEOM/GEOM_Translation_i.hh [new file with mode: 0644]
src/GEOM/Makefile.in
src/GEOMBase/GEOMBase.cxx
src/GEOMBase/GEOMBase.h
src/GEOMBase/Makefile.in
src/GEOMClient/Makefile.in
src/GEOMContext/GEOM_icons.po
src/GEOMContext/GEOM_msg_en.po
src/GEOMContext/GEOM_msg_fr.po
src/GEOMContext/Makefile.in
src/GEOMDS/GEOMDS_Commands.cxx
src/GEOMDS/GEOMDS_Commands.hxx
src/GEOMFiltersSelection/Makefile.in
src/GEOMGUI/GeometryGUI.cxx
src/GEOMGUI/GeometryGUI_Swig.cxx
src/GEOMGUI/Makefile.in
src/GEOMToolsGUI/GEOMToolsGUI.cxx
src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx
src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h
src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx
src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h
src/GEOMToolsGUI/Makefile.in
src/GEOM_SWIG/Makefile.in
src/GEOM_SWIG/batchmode_geompy.py
src/GEOM_SWIG/geompy.py
src/GenerationGUI/Makefile.in
src/KINEMATIC/Kinematic_Animation.cxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Animation.hxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Assembly.cxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Assembly.hxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Contact.cxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Contact.hxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Position.cxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Position.hxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Rotation.cxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Rotation.hxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Translation.cxx [new file with mode: 0644]
src/KINEMATIC/Kinematic_Translation.hxx [new file with mode: 0644]
src/KINEMATIC/Makefile.in [new file with mode: 0644]
src/KinematicGUI/KinematicGUI.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_12Spin.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_12Spin.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_12Spin_QTD.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_12Spin_QTD.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3List3Spin.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3List3Spin.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3List3Spin_QTD.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3List3Spin_QTD.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3Sel1List_QTD.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3Sel1List_QTD.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3Sel1Spin.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3Sel1Spin.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3Sel1Spin_QTD.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_3Sel1Spin_QTD.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_AnimDlg.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_AnimDlg.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_Anim_QTD.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_Anim_QTD.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_AnimationDlg.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_AnimationDlg.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_ContactDlg.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_ContactDlg.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_ContactHDlg.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_ContactHDlg.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_PositionDlg.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_PositionDlg.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_RotationDlg.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_RotationDlg.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_Skeleton_QTD.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_Skeleton_QTD.h [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_TranslationDlg.cxx [new file with mode: 0644]
src/KinematicGUI/KinematicGUI_TranslationDlg.h [new file with mode: 0644]
src/KinematicGUI/Makefile.in [new file with mode: 0644]
src/KinematicGUI/UIFiles/KinematicGUI_12Spin_QTD.ui [new file with mode: 0644]
src/KinematicGUI/UIFiles/KinematicGUI_3List3Spin_QTD.ui [new file with mode: 0644]
src/KinematicGUI/UIFiles/KinematicGUI_3Sel1List_QTD.ui [new file with mode: 0644]
src/KinematicGUI/UIFiles/KinematicGUI_3Sel1Spin_QTD.ui [new file with mode: 0644]
src/KinematicGUI/UIFiles/KinematicGUI_Anim_QTD.ui [new file with mode: 0644]
src/KinematicGUI/UIFiles/KinematicGUI_Skeleton_QTD.ui [new file with mode: 0644]
src/KinematicGUI/UIFiles/ui_to_cxx [new file with mode: 0755]
src/Makefile.in
src/MeasureGUI/Makefile.in
src/OperationGUI/Makefile.in
src/PrimitiveGUI/Makefile.in
src/RepairGUI/Makefile.in
src/SKETCHER/Makefile.in
src/TransformationGUI/Makefile.in
src/TransformationGUI/TransformationGUI.cxx
src/TransformationGUI/TransformationGUI.h
src/TransformationGUI/TransformationGUI_PositionDlg.cxx [new file with mode: 0644]
src/TransformationGUI/TransformationGUI_PositionDlg.h [new file with mode: 0644]

index d5c51e9cfe23eefd5605515ca262fdbc2ad3cc9b..e9764ee8e99462446995c71a4f91188c7512bf08 100644 (file)
@@ -22,8 +22,16 @@ GEOM_fr.xml \
 GEOM.config \
 GEOMCatalog.xml \
 GEOMDS_Resources \
+animation.png \
+anim_first.png \
+anim_last.png \
+anim_next.png \
+anim_play.png \
+anim_prev.png \
+anim_stop.png \
 arc.png \
 archimede.png \
+assembly.png \
 axisinertia.png \
 basicproperties.png \
 bounding.png \
@@ -48,6 +56,7 @@ common.png \
 cone.png \
 conedxyz.png \
 conepointvector.png \
+contact.png \
 cut.png \
 cylinder.png \
 cylinderdxyz.png \
@@ -89,6 +98,10 @@ planepointvector.png \
 planeworkingface.png \
 point2.png \
 pointonedge.png \
+position.png \
+positionface.png \
+positionpoint.png \
+positionvect.png \
 prism.png \
 revol.png \
 rotate.png \
@@ -110,8 +123,11 @@ torus.png \
 torusdxyz.png \
 toruspointvector.png \
 translation.png \
+tree_animation.png \
+tree_assembly.png \
 tree_compound.png \
 tree_compsolid.png \
+tree_contact.png \
 tree_edge.png \
 tree_face.png \
 tree_shape.png \
index 9b085c4038f5d012bc4a10dd5036aae625aa78e6..4b2f3c3c9563d96648240e4e2fd6c54a6f1a41aa 100644 (file)
@@ -29,6 +29,7 @@
 #include "SALOME_Component.idl"
 #include "SALOMEDS.idl"
 #include "GEOM_Shape.idl"
+#include "GEOM_Kinematic.idl"
 
 module GEOM
 {
@@ -119,6 +120,11 @@ module GEOM
     GEOM_Shape MakeRotation(in GEOM_Shape shape,
                            in AxisStruct axis,
                            in double angle) raises (SALOME::SALOME_Exception) ;
+    GEOM_Shape MakePosition(in GEOM_Shape shape1,
+                           in GEOM_Shape shape2,
+                           in GEOM_Shape::ListOfSubShapeID ListOfID1,
+                           in GEOM_Shape::ListOfSubShapeID ListOfID2,
+                           in short typeofshape) raises (SALOME::SALOME_Exception) ;
     GEOM_Shape MakeScaleTransform(in GEOM_Shape shape,
                                  in PointStruct theCenterofScale,
                                  in double factor) raises (SALOME::SALOME_Exception) ;
@@ -322,6 +328,28 @@ module GEOM
     //-----------------------------------------------------------//
     boolean CheckShape(in GEOM_Shape shape) raises (SALOME::SALOME_Exception) ;
 
+    //-----------------------------------------------------------//
+    // Kinematic                                                 //
+    //-----------------------------------------------------------//
+    GEOM_Assembly InitAssembly() raises (SALOME::SALOME_Exception) ;
+
+    GEOM_Contact AddContact(in GEOM_Assembly Ass,
+                           in GEOM_Shape Shape1,
+                           in GEOM_Shape Shape2,
+                           in short type,
+                           in double step) raises (SALOME::SALOME_Exception) ;
+
+    GEOM_Animation AddAnimation(in GEOM_Assembly Ass,
+                               in GEOM_Shape Shape1,
+                               in double Duration,
+                               in short NbSeq) raises (SALOME::SALOME_Exception) ;
+
+    void SetPosition(in GEOM_Contact Contact) raises (SALOME::SALOME_Exception) ;
+
+    void SetRotation(in GEOM_Contact Contact) raises (SALOME::SALOME_Exception) ;
+
+    void SetTranslation(in GEOM_Contact Contact) raises (SALOME::SALOME_Exception) ;
+
   };
 };
 
diff --git a/idl/GEOM_Kinematic.idl b/idl/GEOM_Kinematic.idl
new file mode 100644 (file)
index 0000000..cf102c2
--- /dev/null
@@ -0,0 +1,186 @@
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Kinematic.idl
+//  Author : Damien COQUERET
+
+#ifndef __GEOM_Kinematic__
+#define __GEOM_Kinematic__
+
+#include "SALOME_Exception.idl"
+#include "GEOM_Shape.idl"
+
+module GEOM
+{
+
+  interface GEOM_Contact;
+  typedef sequence<GEOM_Contact> ListOfContact;
+
+  //-----------------------------------------------------------------//
+  //  interface GEOM_Position methods                                //
+  //-----------------------------------------------------------------//
+  interface GEOM_Position {
+
+    void SetOrigin(in GEOM::PointStruct P0)
+      raises (SALOME::SALOME_Exception);
+
+    void SetVX(in GEOM::DirStruct Vect)
+      raises (SALOME::SALOME_Exception);
+
+    void SetVY(in GEOM::DirStruct Vect)
+      raises (SALOME::SALOME_Exception);
+
+    void SetVZ(in GEOM::DirStruct Vect)
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::PointStruct GetOrigin()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::DirStruct GetVX()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::DirStruct GetVY()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::DirStruct GetVZ()
+      raises (SALOME::SALOME_Exception);
+
+  };
+
+  //-----------------------------------------------------------------//
+  //  interface GEOM_Rotation methods                                //
+  //-----------------------------------------------------------------//
+  interface GEOM_Rotation {
+
+    void SetRotation(in long Rot1, in long Rot2, in long Rot3,
+                    in double Val1, in double Val2, in double Val3)
+      raises (SALOME::SALOME_Exception);
+
+    long GetRot1()
+      raises (SALOME::SALOME_Exception);
+    long GetRot2()
+      raises (SALOME::SALOME_Exception);
+    long GetRot3()
+      raises (SALOME::SALOME_Exception);
+
+    double GetVal1()
+      raises (SALOME::SALOME_Exception);
+    double GetVal2()
+      raises (SALOME::SALOME_Exception);
+    double GetVal3()
+      raises (SALOME::SALOME_Exception);
+
+  };
+
+  //-----------------------------------------------------------------//
+  //  interface GEOM_Translation methods                             //
+  //-----------------------------------------------------------------//
+  interface GEOM_Translation {
+
+    void SetTranslation(in double ValX, in double ValY, in double ValZ)
+      raises (SALOME::SALOME_Exception);
+
+    double GetValX()
+      raises (SALOME::SALOME_Exception);
+    double GetValY()
+      raises (SALOME::SALOME_Exception);
+    double GetValZ()
+      raises (SALOME::SALOME_Exception);
+
+  };
+
+  //-----------------------------------------------------------------//
+  //  interface GEOM_Assembly methods                                //
+  //-----------------------------------------------------------------//
+  interface GEOM_Assembly {
+
+    void AddContact(in GEOM::GEOM_Contact aContact)
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::ListOfContact GetContactList()
+      raises (SALOME::SALOME_Exception);
+
+    long NbContacts()
+      raises (SALOME::SALOME_Exception);
+
+    attribute string Name;
+    attribute string ShapeId;
+    attribute string StudyShapeId;
+
+  };
+
+  //-----------------------------------------------------------------//
+  //   interface GEOM_Contact methods                                //
+  //-----------------------------------------------------------------//
+  interface GEOM_Contact {
+
+    long GetType()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::GEOM_Shape GetShape1()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::GEOM_Shape GetShape2()
+      raises (SALOME::SALOME_Exception);
+
+    double GetStep()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::GEOM_Position GetPosition()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::GEOM_Rotation GetRotation()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::GEOM_Translation GetTranslation()
+      raises (SALOME::SALOME_Exception);
+
+    attribute string Name;
+    attribute string ShapeId;
+    attribute string StudyShapeId;
+
+  };
+
+  //-----------------------------------------------------------------//
+  //   interface GEOM_Animation methods                              //
+  //-----------------------------------------------------------------//
+  interface GEOM_Animation {
+
+    GEOM::GEOM_Assembly GetAssembly()
+      raises (SALOME::SALOME_Exception);
+
+    GEOM::GEOM_Shape GetFrame()
+      raises (SALOME::SALOME_Exception);
+
+    double GetDuration()
+      raises (SALOME::SALOME_Exception);
+
+    long GetNbSeq()
+      raises (SALOME::SALOME_Exception);
+
+    attribute string Name;
+    attribute string ShapeId;
+    attribute string StudyShapeId;
+
+  };
+
+};
+#endif
index d7d1cae797ce702283a19671828d1957b6c29c66..6c28c839df9bdd6369e5e0dd727448a7e0fa069a 100644 (file)
@@ -12,6 +12,7 @@ VPATH=.:${KERNEL_ROOT_DIR}/idl/salome
 
 IDL_FILES = \
   GEOM_Shape.idl \
+  GEOM_Kinematic.idl \
   GEOM_Gen.idl
 
 PY_CLIENT_IDL = $(IDL_FILES)
index 1b6fdcc207444d1c45caad8ca7db0e6ebaa5dc89..785c8e68b107c34ff69584aa2ff1fa744ecf0804 100644 (file)
    <submenu label-id="Transformation" item-id="502" pos-id="2">
        <popup-item item-id="5021" pos-id="" label-id="Translation" icon-id="translation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
        <popup-item item-id="5022" pos-id="" label-id="Rotation" icon-id="rotate.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="5023" pos-id="" label-id="Mirror by plane" icon-id="mirrorPlane.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="5024" pos-id="" label-id="Scale transform" icon-id="scale.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5023" pos-id="" label-id="Position" icon-id="position.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5024" pos-id="" label-id="Mirror by plane" icon-id="mirrorPlane.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5025" pos-id="" label-id="Scale transform" icon-id="scale.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
        <separator pos-id=""/>  
-       <popup-item item-id="5025" pos-id="" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="5026" pos-id="" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5026" pos-id="" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5027" pos-id="" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    </submenu>
    <endsubmenu />
    <popup-item item-id="503" pos-id="" label-id="Partition" icon-id="partition.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
 </menu-item>
 
 
+<!-- ************************** Kinematic  (menubar)  ************************************ -->
+<menu-item label-id="Kinematic" item-id="61" pos-id="6">
+   <popup-item item-id="611" pos-id="" label-id="Add Assembly" icon-id="assembly.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <submenu label-id="Add Contact" item-id="612" icon-id="" pos-id="">
+       <popup-item item-id="61201" pos-id="" label-id="Embedding" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61202" pos-id="" label-id="Pivot" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61203" pos-id="" label-id="Slide" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61204" pos-id="" label-id="Sliding Pivot" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61205" pos-id="" label-id="Spherical" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61206" pos-id="" label-id="Plane" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61207" pos-id="" label-id="Annular" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61208" pos-id="" label-id="Rectilinear" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61209" pos-id="" label-id="Ponctual" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+        <separator pos-id=""/>
+        <popup-item item-id="61210" pos-id="" label-id="Helicoïdal" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   </submenu>
+   <endsubmenu />
+   <popup-item item-id="614" pos-id="" label-id="Add Animation" icon-id="animation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</menu-item>
+
+
 <!-- ************************** Mesures  (menubar)  ************************************ -->
-<menu-item label-id="Measures" item-id="70" pos-id="6">
+<menu-item label-id="Measures" item-id="70" pos-id="7">
    <popup-item item-id="701" pos-id="" label-id="Basic properties" icon-id="basicproperties.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id="4"/>
    <popup-item item-id="702" pos-id="" label-id="Center of gravity" icon-id="centergravity.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 <toolbar label-id="Transformation">
    <toolbutton-item item-id="5021" label-id="Translation" icon-id="translation.png" tooltip-id="Translate a shape"accel-id="" toggle-id="" execute-action=""/>
    <toolbutton-item item-id="5022" label-id="Rotation" icon-id="rotate.png" tooltip-id="Rotate a shape" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="5023" label-id="Mirror by plane" icon-id="mirrorPlane.png" tooltip-id="Mirror a shape" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="5024" label-id="Scale transform" icon-id="scale.png" tooltip-id="Scale a shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5023" label-id="Position" icon-id="position.png" tooltip-id="Position a shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5024" label-id="Mirror by plane" icon-id="mirrorPlane.png" tooltip-id="Mirror a shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5025" label-id="Scale transform" icon-id="scale.png" tooltip-id="Scale a shape" accel-id="" toggle-id="" execute-action=""/>
    <separatorTB/>
-   <toolbutton-item item-id="5025" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="Multi-translate a shape" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="5026" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="Multi-rotate a shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5026" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="Multi-translate a shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5027" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="Multi-rotate a shape" accel-id="" toggle-id="" execute-action=""/>
 </toolbar>
 
 
    <popup-item item-id="901" pos-id="" label-id="Rename" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 </popupmenu>
 
+<popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="Assembly">
+   <popup-item item-id="901" pos-id="" label-id="Rename" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id=""/>
+   <popup-item item-id="61201" pos-id="" label-id="Add Contact" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</popupmenu>
+
+<popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="Contact">
+   <popup-item item-id="901" pos-id="" label-id="Rename" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id=""/>
+   <popup-item item-id="6131" pos-id="" label-id="Position" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="6132" pos-id="" label-id="Rotation" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="6133" pos-id="" label-id="Translation" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</popupmenu>
+
+<popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="Animation">
+   <popup-item item-id="901" pos-id="" label-id="Rename" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id=""/>
+   <popup-item item-id="6141" pos-id="" label-id="Run Animation" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</popupmenu>
+
 <popupmenu label-id="Sketch" context-id="Sketch" parent-id="Viewer" object-id="">
    <popup-item item-id="4041" pos-id="" label-id="Segment" icon-id="" tooltip-id="" accel-id="" toggle-id="true" execute-action=""/>
    <popup-item item-id="4042" pos-id="" label-id="Arc" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
index 855153c6f645d91a2388ee5985004877a8c07731..38ac158a7287ba86054bb25ced567061a6845829 100644 (file)
 </menu-item>
 
 <!-- ************************* New Entity  (menubar) ******************************* -->
-<menu-item label-id="Nouvelle entité" item-id="30" pos-id="3">
-   <submenu label-id="Construction basique" item-id="301" pos-id="1">
-       <popup-item item-id="3011" pos-id="" label-id="Point" icon-id="point2.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="3012" pos-id="" label-id="Ligne" icon-id="line.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="3013" pos-id="" label-id="Cercle" icon-id="circle.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="3014" pos-id="" label-id="Ellipse" icon-id="ellipse.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="3015" pos-id="" label-id="Arc" icon-id="arc.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+<menu-item label-id="Nouvelle entité" item-id="40" pos-id="3">
+   <submenu label-id="Construction basique" item-id="401" pos-id="1">
+       <popup-item item-id="4011" pos-id="" label-id="Point" icon-id="point2.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4012" pos-id="" label-id="Ligne" icon-id="line.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4013" pos-id="" label-id="Cercle" icon-id="circle.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4014" pos-id="" label-id="Ellipse" icon-id="ellipse.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4015" pos-id="" label-id="Arc" icon-id="arc.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
        <separator pos-id="6"/>
-       <popup-item item-id="3016" pos-id="" label-id="Vecteur" icon-id="vector.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="3017" pos-id="" label-id="Plan" icon-id="plane.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="3018" pos-id="" label-id="Plan de travail" icon-id="planeWorking.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4016" pos-id="" label-id="Vecteur" icon-id="vector.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4017" pos-id="" label-id="Plan" icon-id="plane.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4018" pos-id="" label-id="Plan de travail" icon-id="planeWorking.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    </submenu>
    <endsubmenu />
-   <submenu label-id="Primitives" item-id="302" pos-id="2">
-   <popup-item item-id="3021" pos-id="" label-id="Boite" icon-id="box.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="3022" pos-id="" label-id="Cylindre" icon-id="cylinder.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="3023" pos-id="" label-id="Sphère" icon-id="sphere.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="3024" pos-id="" label-id="Tore" icon-id="torus.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-
+   <submenu label-id="Primitives" item-id="402" pos-id="2">
+      <popup-item item-id="4021" pos-id="" label-id="Boite" icon-id="box.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="4022" pos-id="" label-id="Cylindre" icon-id="cylinder.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="4023" pos-id="" label-id="Sphère" icon-id="sphere.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="4024" pos-id="" label-id="Tore" icon-id="torus.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="4025" pos-id="" label-id="Cone" icon-id="cone.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   </submenu>
+   <endsubmenu />
+   <submenu label-id="Generation" item-id="403" pos-id="3">
+       <popup-item item-id="4031" pos-id="" label-id="Extrusion" icon-id="prism.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="4032" pos-id="" label-id="Revolution" icon-id="revol.png"tooltip-id="" accel-id="" toggle-id="" execute-action=""/>        
+       <popup-item item-id="4033" pos-id="" label-id="Filling" icon-id="filling.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
+       <popup-item item-id="4034" pos-id="" label-id="Pipe" icon-id="pipe.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
+   </submenu>
+   <endsubmenu />
+   <separator pos-id=""/>
+   <popup-item item-id="404" pos-id="" label-id="Sketch" icon-id="sketch.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <submenu label-id="Sketch Constraintes" item-id="405" pos-id="">
+      <popup-item item-id="4051" pos-id="" label-id="Définir le Plan" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <separator pos-id=""/>
+      <popup-item item-id="4052" pos-id="" label-id="Tangent" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="4053" pos-id="" label-id="Perpendiculaire" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   </submenu>
+   <endsubmenu />
+   <submenu label-id="Sketch Options" item-id="406" pos-id="">
+      <popup-item item-id="4061" pos-id="" label-id="Longueur Dimension" icon-id="" tooltip-id="" accel-id="" toggle-id="true" execute-action=""/>
+      <popup-item item-id="4062" pos-id="" label-id="Angle Dimension" icon-id="" tooltip-id="" accel-id="" toggle-id="true" execute-action=""/>
+      <popup-item item-id="4063" pos-id="" label-id="Rayon Dimension" icon-id="" tooltip-id="" accel-id="" toggle-id="true" execute-action=""/>
+      <popup-item item-id="4064" pos-id="" label-id="X Dimension" icon-id="" tooltip-id="" accel-id="" toggle-id="false" execute-action=""/>
+      <popup-item item-id="4065" pos-id="" label-id="Y Dimension" icon-id="" tooltip-id="" accel-id="" toggle-id="false" execute-action=""/>
    </submenu>
-   <popup-item item-id="303" pos-id="" label-id="Eclater" icon-id="subshape.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="309" pos-id="" label-id="Supprime des faces" icon-id="supressface.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="314" pos-id="" label-id="Supprime un trou" icon-id="supresshole.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <endsubmenu />
    <separator pos-id=""/>
-   <popup-item item-id="304" pos-id="" label-id="Arête" icon-id="build_edge.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
-   <popup-item item-id="305" pos-id="" label-id="Wire" icon-id="build_wire.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
-   <popup-item item-id="306" pos-id="" label-id="Face" icon-id="build_face.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
-   <popup-item item-id="308" pos-id="" label-id="Compound" icon-id="build_compound.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="407" pos-id="" label-id="Eclater" icon-id="subshape.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <submenu label-id="Build" item-id="408" pos-id="">
+      <popup-item item-id="4081" pos-id="" label-id="Arête" icon-id="build_edge.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+      <popup-item item-id="4082" pos-id="" label-id="Wire" icon-id="build_wire.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+      <popup-item item-id="4083" pos-id="" label-id="Face" icon-id="build_face.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
+      <popup-item item-id="4084" pos-id="" label-id="Shell" icon-id="build_shell.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="4085" pos-id="" label-id="Solid" icon-id="build_solid.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="4086" pos-id="" label-id="Compound" icon-id="build_compound.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   </submenu>
+   <endsubmenu />
 </menu-item>
 
 
 <!-- ************************ Operations  (menubar) *********************************** -->
-<menu-item label-id="Opérations" item-id="40" pos-id="4">
-   <submenu label-id="Booléennes" item-id="401" pos-id="1">
-      <popup-item item-id="4011" pos-id="" label-id="Union" icon-id="fuse.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="4012" pos-id="" label-id="Commun" icon-id="common.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="4013" pos-id="" label-id="Couper" icon-id="cut.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="4014" pos-id="" label-id="Section" icon-id="section.png"tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+<menu-item label-id="Opérations" item-id="50" pos-id="4">
+   <submenu label-id="Booléennes" item-id="501" pos-id="1">
+      <popup-item item-id="5011" pos-id="" label-id="Union" icon-id="fuse.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="5012" pos-id="" label-id="Commun" icon-id="common.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="5013" pos-id="" label-id="Couper" icon-id="cut.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="5014" pos-id="" label-id="Section" icon-id="section.png"tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    </submenu>
    <endsubmenu />
-   <submenu label-id="Transformation" item-id="402" pos-id="2">
-       <popup-item item-id="4021" pos-id="" label-id="Translation" icon-id="translation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="4022" pos-id="" label-id="Rotation" icon-id="rotate.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="4023" pos-id="" label-id="Symétrie par un plan" icon-id="mirrorPlane.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="4024" pos-id="" label-id="Facteur d'échelle" icon-id="scale.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
-       <separator pos-id=""/>\r
-       <popup-item item-id="4030" pos-id="" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>\r
-       <popup-item item-id="4040" pos-id="" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>\r
-   </submenu>
-   <endsubmenu />
-   <submenu label-id="Construction" item-id="403" pos-id="3">
-       <popup-item item-id="4031" pos-id="" label-id="Extrusion" icon-id="prism.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="4032" pos-id="" label-id="Révolution" icon-id="revol.png"tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="4033" pos-id="" label-id="Filling" icon-id="filling.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
-       <popup-item item-id="4034" pos-id="" label-id="Pipe création ?" icon-id="pipe.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
+   <submenu label-id="Transformation" item-id="502" pos-id="2">
+       <popup-item item-id="5021" pos-id="" label-id="Translation" icon-id="translation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5022" pos-id="" label-id="Rotation" icon-id="rotate.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5023" pos-id="" label-id="Position" icon-id="position.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5024" pos-id="" label-id="Symétrie par un plan" icon-id="mirrorPlane.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="5025" pos-id="" label-id="Facteur d'échelle" icon-id="scale.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
+       <separator pos-id=""/>
+       <popup-item item-id="5026" pos-id="" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>\r
+       <popup-item item-id="5027" pos-id="" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>\r
    </submenu>
    <endsubmenu />
-   <popup-item item-id="4025" pos-id="" label-id="Partition" icon-id="partition.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
-   <popup-item item-id="4026" pos-id="" label-id="Archimede" icon-id="archimede.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
-   <popup-item item-id="4027" pos-id="" label-id="Congé" icon-id="fillet.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
-   <popup-item item-id="4028" pos-id="" label-id="Chanfrein" icon-id="chamfer.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
+   <popup-item item-id="503" pos-id="" label-id="Partition" icon-id="partition.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
+   <popup-item item-id="504" pos-id="" label-id="Archimede" icon-id="archimede.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
+   <separator pos-id=""/>
+   <popup-item item-id="505" pos-id="" label-id="Congé" icon-id="fillet.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
+   <popup-item item-id="506" pos-id="" label-id="Chanfrein" icon-id="chamfer.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>  
 </menu-item>
 
 
 <!-- ************************** Advanced  (menubar) ************************************** -->
-<menu-item label-id="Avancé" item-id="50" pos-id="5">
-   <popup-item item-id="501" pos-id="" label-id="Couture" icon-id="sewing.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="502" pos-id="" label-id="Orientation" icon-id="orientation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+<menu-item label-id="Avancé" item-id="60" pos-id="5">
+   <popup-item item-id="601" pos-id="" label-id="Couture" icon-id="sewing.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="602" pos-id="" label-id="Orientation" icon-id="orientation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="603" pos-id="" label-id="Suppression de faces" icon-id="supressface.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="604" pos-id="" label-id="Suppression de trou" icon-id="supresshole.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</menu-item>
+
+
+<!-- ************************** Kinematic  (menubar)  ************************************ -->
+<menu-item label-id="Cinématique" item-id="61" pos-id="6">
+   <popup-item item-id="611" pos-id="" label-id="Ajouter un assemblage" icon-id="assembly.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <submenu label-id="Ajouter un Contact" item-id="612" icon-id="" pos-id="">
+       <popup-item item-id="61201" pos-id="" label-id="Encastrement" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61202" pos-id="" label-id="Pivot" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61203" pos-id="" label-id="Glissière" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61204" pos-id="" label-id="Pivot Glissant" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61205" pos-id="" label-id="Spherique" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61206" pos-id="" label-id="Appui Plan" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61207" pos-id="" label-id="Annulaire" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61208" pos-id="" label-id="Rectilineaire" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="61209" pos-id="" label-id="Ponctuel" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+        <separator pos-id=""/>
+        <popup-item item-id="61210" pos-id="" label-id="Helicoïdale" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   </submenu>
+   <endsubmenu />
+   <popup-item item-id="614" pos-id="" label-id="Ajouter une Animation" icon-id="animation.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 </menu-item>
 
 
 <!-- ************************** Mesures  (menubar)  ************************************ -->
-<menu-item label-id="Mesures" item-id="60" pos-id="6">
-    <popup-item item-id="601" pos-id="" label-id="Fondamentales" icon-id="linear.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-    <separator pos-id="4"/>
-    <popup-item item-id="604" pos-id="" label-id="Centre de gravité" icon-id="centergravity.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-    <popup-item item-id="605" pos-id="" label-id="Axes d'inertie" icon-id="axisinertia.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-    <separator pos-id="7"/>
-    <submenu label-id="Dimensions" item-id="606" pos-id="8">
-       <popup-item item-id="6060" pos-id="" label-id="Boite englobante" icon-id="bounding.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="6061" pos-id="" label-id="Distance minimale" icon-id="mindist.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-    </submenu>
+<menu-item label-id="Mesures" item-id="70" pos-id="7">
+   <popup-item item-id="701" pos-id="" label-id="Fondamentales" icon-id="linear.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id="4"/>
+   <popup-item item-id="702" pos-id="" label-id="Centre de gravité" icon-id="centergravity.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="703" pos-id="" label-id="Axes d'inertie" icon-id="axisinertia.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id="7"/>
+   <submenu label-id="Dimensions" item-id="704" pos-id="8">
+      <popup-item item-id="7041" pos-id="" label-id="Boite englobante" icon-id="bounding.png"  tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="7042" pos-id="" label-id="Distance minimale" icon-id="mindist.png"  tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   </submenu>
    <endsubmenu />
    <separator pos-id="9"/>
-   <popup-item item-id="607" pos-id="" label-id="Tolérance" icon-id="tolerance.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="705" pos-id="" label-id="Tolérance" icon-id="tolerance.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
-   <popup-item item-id="608" pos-id="" label-id="Whatis" icon-id="whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="609" pos-id="" label-id="Check" icon-id="check.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="706" pos-id="" label-id="Whatis" icon-id="whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="707" pos-id="" label-id="Check" icon-id="check.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
  </menu-item>
 
 <!-- ********************************* Tools  (menubar) ************************************ -->
 <menu-item label-id="Outils" item-id="5" pos-id="">
    <separator pos-id=""/>
-   <popup-item item-id="5001" pos-id="" label-id="Check Géométrie" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="5103" pos-id="" label-id="Check Géométrie" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="5104" pos-id="" label-id="Charger Script" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 </menu-item>
 
 <!-- ********************************* Settings         (menubar) ********************************* -->
 <menu-item label-id="Préférences" item-id="4" pos-id="">
-   <submenu label-id="Géométry" item-id="40" pos-id="-1">
-      <popup-item item-id="701" pos-id="" label-id="Avec copie" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="702" pos-id="" label-id="Nommer/Ranger automatiquement" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="703" pos-id="" label-id="Couleur" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="704" pos-id="" label-id="Isos" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="705" pos-id="" label-id="Valeur d'increment" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>     
+   <submenu label-id="Géométry" item-id="41" pos-id="-1">
+      <popup-item item-id="411" pos-id="" label-id="Nommer/Ranger automatiquement" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <separator pos-id=""/>
+      <popup-item item-id="412" pos-id="" label-id="Couleur" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="413" pos-id="" label-id="Isos" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+      <popup-item item-id="414" pos-id="" label-id="Valeur d'increment" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>     
    </submenu>
    <endsubmenu />
    <separator pos-id="-1"/>
 
 <!-- ***************************** View (menubar) ************************************ -->
 <menu-item label-id="Affichage" item-id="2" pos-id="">
-   <submenu label-id="Mode d'affichage" item-id="21" pos-id="6">
-       <popup-item item-id="6021" pos-id="" label-id="Ombré" icon-id="shading.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <submenu label-id="Mode d'affichage" item-id="21" pos-id="5">
+       <popup-item item-id="211" pos-id="" label-id="Ombré" icon-id="shading.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
        <separator pos-id=""/>
-       <popup-item item-id="6022" pos-id="" label-id="Afficher tout" icon-id="displayall.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="6023" pos-id="" label-id="Afficher seulement" icon-id="display.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="6024" pos-id="" label-id="Effacer tout" icon-id="eraseall.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-       <popup-item item-id="6025" pos-id="" label-id="Effacer seulement" icon-id="erase.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="212" pos-id="" label-id="Afficher tout" icon-id="displayall.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="213" pos-id="" label-id="Afficher seulement" icon-id="display.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="214" pos-id="" label-id="Effacer tout" icon-id="eraseall.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="215" pos-id="" label-id="Effacer seulement" icon-id="erase.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    </submenu>
    <endsubmenu />
-   <separator pos-id="7"/>
 </menu-item>
 
 </menubar> <!-- MENUBAR END  -->
 
 <!-- ///////////////////////////////////// TOOLBARS ////////////////////////////////////// -->
 <toolbar label-id="Construction basique">
-  <toolbutton-item item-id="3011" pos-id="" label-id="Point" icon-id="point2.png" tooltip-id="Point" accel-id="" toggle-id="" execute-action=""/>
-  <toolbutton-item item-id="3012" pos-id="" label-id="Ligne" icon-id="line.png" tooltip-id="Ligne" accel-id="" toggle-id="" execute-action=""/>
-  <toolbutton-item item-id="3013" pos-id="" label-id="Cercle" icon-id="circle.png" tooltip-id="Cercle" accel-id="" toggle-id="" execute-action=""/>
-  <toolbutton-item item-id="3014" pos-id="" label-id="Ellipse" icon-id="ellipse.png" tooltip-id="Ellipse" accel-id="" toggle-id="" execute-action=""/>
-  <toolbutton-item item-id="3015" pos-id="" label-id="Arc" icon-id="arc.png" tooltip-id="Arc" accel-id="" toggle-id="" execute-action=""/>
-  <toolbutton-item item-id="3016" pos-id="" label-id="Vecteur" icon-id="vector.png" tooltip-id="Vecteur" accel-id="" toggle-id="" execute-action=""/>
-  <toolbutton-item item-id="3017" pos-id="" label-id="Plan" icon-id="plane.png" tooltip-id="Plan" accel-id="" toggle-id="" execute-action=""/>         
-  <toolbutton-item item-id="3018" pos-id="" label-id="Plan de travail" icon-id="planeWorking.png" tooltip-id="Plan de travail" accel-id="" toggle-id="" execute-action=""/>
+  <toolbutton-item item-id="4011" pos-id="" label-id="Point" icon-id="point2.png" tooltip-id="Point" accel-id="" toggle-id="" execute-action=""/>
+  <toolbutton-item item-id="4012" pos-id="" label-id="Ligne" icon-id="line.png" tooltip-id="Ligne" accel-id="" toggle-id="" execute-action=""/>
+  <toolbutton-item item-id="4013" pos-id="" label-id="Cercle" icon-id="circle.png" tooltip-id="Cercle" accel-id="" toggle-id="" execute-action=""/>
+  <toolbutton-item item-id="4014" pos-id="" label-id="Ellipse" icon-id="ellipse.png" tooltip-id="Ellipse" accel-id="" toggle-id="" execute-action=""/>
+  <toolbutton-item item-id="4015" pos-id="" label-id="Arc" icon-id="arc.png" tooltip-id="Arc" accel-id="" toggle-id="" execute-action=""/>
+  <toolbutton-item item-id="4016" pos-id="" label-id="Vecteur" icon-id="vector.png" tooltip-id="Vecteur" accel-id="" toggle-id="" execute-action=""/>
+  <toolbutton-item item-id="4017" pos-id="" label-id="Plan" icon-id="plane.png" tooltip-id="Plan" accel-id="" toggle-id="" execute-action=""/>         
+  <toolbutton-item item-id="4018" pos-id="" label-id="Plan de travail" icon-id="planeWorking.png" tooltip-id="Plan de travail" accel-id="" toggle-id="" execute-action=""/>
 </toolbar>
 
 <toolbar label-id="Primitives">
-   <toolbutton-item item-id="3021" label-id="Boite" icon-id="box.png" tooltip-id="Construction d'une boite" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="3022" label-id="Cylindre" icon-id="cylinder.png" tooltip-id="Construction d'un cylindre" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="3023" label-id="Sphère" icon-id="sphere.png" tooltip-id="Construction d'une sphère" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="3024" label-id="Tore" icon-id="torus.png" tooltip-id="Construction d'un tore" accel-id="" toggle-id="" execute-action=""/>  
+   <toolbutton-item item-id="4021" label-id="Boite" icon-id="box.png" tooltip-id="Construction d'une boite" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="4022" label-id="Cylindre" icon-id="cylinder.png" tooltip-id="Construction d'un cylindre" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="4023" label-id="Sphère" icon-id="sphere.png" tooltip-id="Construction d'une sphère" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="4024" label-id="Tore" icon-id="torus.png" tooltip-id="Construction d'un tore" accel-id="" toggle-id="" execute-action=""/> 
+   <toolbutton-item item-id="4025" label-id="Cone" icon-id="cone.png" tooltip-id="Cone" accel-id="" toggle-id="" execute-action=""/> 
 </toolbar>
 
 <toolbar label-id="Opé. Booléennes">
-   <toolbutton-item item-id="4011" label-id="Union" icon-id="fuse.png" tooltip-id="Union de deux shapes" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="4012" label-id="Commun" icon-id="common.png" tooltip-id="Partie commune entre deux shapes" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="4013" label-id="Couper" icon-id="cut.png" tooltip-id="Coupe la première shape par la seconde" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="4014" label-id="Section" icon-id="section.png" tooltip-id="Section entre deux shapes" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5011" label-id="Union" icon-id="fuse.png" tooltip-id="Union de deux shapes" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5012" label-id="Commun" icon-id="common.png" tooltip-id="Partie commune entre deux shapes" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5013" label-id="Couper" icon-id="cut.png" tooltip-id="Coupe la première shape par la seconde" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5014" label-id="Section" icon-id="section.png" tooltip-id="Section entre deux shapes" accel-id="" toggle-id="" execute-action=""/>
 </toolbar>
 
 <toolbar label-id="Construction">
    <toolbutton-item item-id="4031" label-id="Extrusion" icon-id="prism.png" tooltip-id="Shape construite par extrusion" accel-id="" toggle-id="" execute-action=""/>
    <toolbutton-item item-id="4032" label-id="Révolution" icon-id="revol.png" tooltip-id="Shape construite par révolution" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="4033" pos-id="" label-id="'Filling'" icon-id="filling.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="4034" pos-id="" label-id="'Pipe' création" icon-id="pipe.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="4033" label-id="Filling" icon-id="filling.png" tooltip-id="Generation by filling" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="4034" label-id="Pipe" icon-id="pipe.png" tooltip-id="Pipe mode generation" accel-id="" toggle-id="" execute-action=""/>
 </toolbar>
 
 <toolbar label-id="Transformation">
-   <toolbutton-item item-id="4021" label-id="Translation" icon-id="translation.png" tooltip-id="Translation d'une shape"accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="4022" label-id="Rotation" icon-id="rotate.png" tooltip-id="Rotation d'une shape" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="4023" label-id="Symétrie" icon-id="mirrorPlane.png" tooltip-id="Symétrie" accel-id="" toggle-id="" execute-action=""/>
-   <toolbutton-item item-id="4024" label-id="Facteur d'échelle" icon-id="scale.png" tooltip-id="Facteur d'échelle" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5021" label-id="Translation" icon-id="translation.png" tooltip-id="Translation d'une shape"accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5022" label-id="Rotation" icon-id="rotate.png" tooltip-id="Rotation d'une shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5023" label-id="Position" icon-id="position.png" tooltip-id="Position a shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5024" label-id="Symétrie" icon-id="mirrorPlane.png" tooltip-id="Symétrie" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5025" label-id="Facteur d'échelle" icon-id="scale.png" tooltip-id="Facteur d'échelle" accel-id="" toggle-id="" execute-action=""/>
    <separatorTB/>
-   <toolbutton-item item-id="4030" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="Multi-translation d'une shape" accel-id="" toggle-id="" execute-action=""/>\r
-   <toolbutton-item item-id="4040" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="Multi-rotation d'une shape" accel-id="" toggle-id="" execute-action=""/>\r
+   <toolbutton-item item-id="5026" label-id="Multi-Translation" icon-id="multitranslation.png" tooltip-id="Multi-translation d'une shape" accel-id="" toggle-id="" execute-action=""/>
+   <toolbutton-item item-id="5027" label-id="Multi-Rotation" icon-id="multirotation.png" tooltip-id="Multi-rotation d'une shape" accel-id="" toggle-id="" execute-action=""/>
 </toolbar>
 
 
 <!-- ################################# POPUP MENU #################################  -->
 <popupmenu label-id="Menu contextuel du Viewer" context-id="" parent-id="Viewer" object-id="">
    <submenu label-id="Propriétés" item-id="803" pos-id="6">
-       <popup-item item-id="8021" pos-id="" label-id="Filaire/Ombré" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="8031" pos-id="" label-id="Filaire/Ombré" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
        <separator pos-id=""/>
-       <popup-item item-id="8031" pos-id="" label-id="Couleur" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="8032" pos-id="" label-id="Transparence" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-      <popup-item item-id="8033" pos-id="" label-id="Isos" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="8032" pos-id="" label-id="Couleur" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="8033" pos-id="" label-id="Transparence" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+       <popup-item item-id="8034" pos-id="" label-id="Isos" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    </submenu>
    <endsubmenu />
    <separator pos-id=""/>
-   <popup-item item-id="801" pos-id="" label-id="Ajouter dans l'étude" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="804" pos-id="" label-id="Ajouter dans l'étude" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 </popupmenu>
 
 <popupmenu label-id="Menu contextuel" context-id="" parent-id="ObjectBrowser" object-id="">
    <popup-item item-id="9024" pos-id="" label-id="Ouverture" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
-   <popup-item item-id="901" pos-id="2" label-id="Renommer" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="901" pos-id="" label-id="Renommer" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</popupmenu>
+
+<popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="Assembly">
+   <popup-item item-id="901" pos-id="" label-id="Renommer" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id=""/>
+   <popup-item item-id="61201" pos-id="" label-id="Ajouter un Contact" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</popupmenu>
+
+<popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="Contact">
+   <popup-item item-id="901" pos-id="" label-id="Renommer" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id=""/>
+   <popup-item item-id="6131" pos-id="" label-id="Position" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="6132" pos-id="" label-id="Rotation" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="6133" pos-id="" label-id="Translation" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+</popupmenu>
+
+<popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="Animation">
+   <popup-item item-id="901" pos-id="" label-id="Renommer" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <separator pos-id=""/>
+   <popup-item item-id="6141" pos-id="" label-id="Lancer l'Animation" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 </popupmenu>
 
 <popupmenu label-id="Sketch" context-id="Sketch" parent-id="Viewer" object-id="">
-   <popup-item item-id="10000" pos-id="" label-id="Segment" icon-id="" tooltip-id="" accel-id="" toggle-id="true" execute-action=""/>
-   <popup-item item-id="10001" pos-id="" label-id="Arc" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="4041" pos-id="" label-id="Segment" icon-id="" tooltip-id="" accel-id="" toggle-id="true" execute-action=""/>
+   <popup-item item-id="4042" pos-id="" label-id="Arc" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
-   <popup-item item-id="10002" pos-id="" label-id="Set Angle" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="10003" pos-id="" label-id="Set X" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="10004" pos-id="" label-id="Set Y" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="4043" pos-id="" label-id="Set Angle" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="4044" pos-id="" label-id="Set X" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="4045" pos-id="" label-id="Set Y" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
-   <popup-item item-id="10006" pos-id="" label-id="Undo" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="4046" pos-id="" label-id="Undo" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
-   <popup-item item-id="10007" pos-id="" label-id="End" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-   <popup-item item-id="10008" pos-id="" label-id="Close" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="4047" pos-id="" label-id="End" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+   <popup-item item-id="4048" pos-id="" label-id="Close" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 </popupmenu>
 
 </desktop>     <!--   DESKTOP END    -->
diff --git a/resources/anim_first.png b/resources/anim_first.png
new file mode 100644 (file)
index 0000000..7f823ee
Binary files /dev/null and b/resources/anim_first.png differ
diff --git a/resources/anim_last.png b/resources/anim_last.png
new file mode 100644 (file)
index 0000000..005637e
Binary files /dev/null and b/resources/anim_last.png differ
diff --git a/resources/anim_next.png b/resources/anim_next.png
new file mode 100644 (file)
index 0000000..2b7c58b
Binary files /dev/null and b/resources/anim_next.png differ
diff --git a/resources/anim_play.png b/resources/anim_play.png
new file mode 100644 (file)
index 0000000..9e5cf2b
Binary files /dev/null and b/resources/anim_play.png differ
diff --git a/resources/anim_prev.png b/resources/anim_prev.png
new file mode 100644 (file)
index 0000000..684dc9c
Binary files /dev/null and b/resources/anim_prev.png differ
diff --git a/resources/anim_stop.png b/resources/anim_stop.png
new file mode 100644 (file)
index 0000000..482e271
Binary files /dev/null and b/resources/anim_stop.png differ
diff --git a/resources/animation.png b/resources/animation.png
new file mode 100644 (file)
index 0000000..1c8fb05
Binary files /dev/null and b/resources/animation.png differ
diff --git a/resources/assembly.png b/resources/assembly.png
new file mode 100644 (file)
index 0000000..87c6bdd
Binary files /dev/null and b/resources/assembly.png differ
diff --git a/resources/contact.png b/resources/contact.png
new file mode 100644 (file)
index 0000000..4ae105f
Binary files /dev/null and b/resources/contact.png differ
diff --git a/resources/position.png b/resources/position.png
new file mode 100644 (file)
index 0000000..7048b5e
Binary files /dev/null and b/resources/position.png differ
diff --git a/resources/positionface.png b/resources/positionface.png
new file mode 100644 (file)
index 0000000..df0dc44
Binary files /dev/null and b/resources/positionface.png differ
diff --git a/resources/positionpoint.png b/resources/positionpoint.png
new file mode 100644 (file)
index 0000000..58dcc6f
Binary files /dev/null and b/resources/positionpoint.png differ
diff --git a/resources/positionvect.png b/resources/positionvect.png
new file mode 100644 (file)
index 0000000..9994dd2
Binary files /dev/null and b/resources/positionvect.png differ
diff --git a/resources/tree_animation.png b/resources/tree_animation.png
new file mode 100644 (file)
index 0000000..874f02f
Binary files /dev/null and b/resources/tree_animation.png differ
diff --git a/resources/tree_assembly.png b/resources/tree_assembly.png
new file mode 100644 (file)
index 0000000..7fa7237
Binary files /dev/null and b/resources/tree_assembly.png differ
diff --git a/resources/tree_contact.png b/resources/tree_contact.png
new file mode 100644 (file)
index 0000000..be3238d
Binary files /dev/null and b/resources/tree_contact.png differ
index 2dc8edf1bba988d6cf656b9db153f0166f073d85..0c1125f6021fbe704725bf87e1021131444b1a5a 100644 (file)
@@ -61,7 +61,7 @@ LIB_MOC = \
                BasicGUI_PlaneDlg.h \
                BasicGUI_WorkingPlaneDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 92de526ff41235fa11bdd98ca155d8b4cab57584..ae4412ecc75221cebf6ad5dde026017c9d87205a 100644 (file)
@@ -53,7 +53,7 @@ LIB_MOC = \
                BooleanGUI_CutDlg.h \
                BooleanGUI_SectionDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 3b29f7b598248de9002658e5187060e7f2dbf707..e853304002a2596de27e60cce633d0c91b0c6c70 100644 (file)
@@ -57,7 +57,7 @@ LIB_MOC = \
                BuildGUI_SolidDlg.h \
                BuildGUI_CompoundDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 73235ed1b2638f44061cac6da7de74c624048df7..45dc97b162c98b9bccf7af63f36c7927ea896996 100644 (file)
@@ -232,6 +232,11 @@ void DisplayGUI::BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO
   if(theIO.IsNull())
     MESSAGE("BuildPresentation(): null SALOME_InteractiveObject passed")
 
+  Standard_Boolean testResult;
+  GEOM::GEOM_Shape_var myGeomShape = myDisplayGUI->myGeomBase->ConvertIOinGEOMShape(theIO, testResult);
+  if(!testResult)
+    return;
+
   if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
     // VTK
          
index d1cd6aa6a1d3476ade36217809f1dcfcad3f4d11..8be49b7afb936897c8fa542cb83b30936cfa3781 100644 (file)
@@ -45,7 +45,7 @@ LIB_SRC =     DisplayGUI.cxx
 LIB_MOC = \
                DisplayGUI.h
 
-LIB_CLIENT_IDL = SALOME_Exception.idl
+LIB_CLIENT_IDL = SALOME_Exception.idl GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 3883eebab7aca3d9325357b6901b82e2327d981b..7a82dddd19fd14655f0d3a77df8ca86af24f3337 100644 (file)
@@ -47,7 +47,7 @@ LIB_MOC = \
                EntityGUI.h \
                EntityGUI_SubShapeDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
diff --git a/src/GEOM/GEOM_Animation_i.cc b/src/GEOM/GEOM_Animation_i.cc
new file mode 100644 (file)
index 0000000..1007a50
--- /dev/null
@@ -0,0 +1,152 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Animation_i.cc
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+using namespace std;
+#include "GEOM_Animation_i.hh"
+
+//=================================================================================
+// function : GEOM_Animation_i() constructor (no arguments)
+// purpose  : for what now ?
+//=================================================================================
+GEOM_Animation_i::GEOM_Animation_i()
+{
+}
+
+
+//=================================================================================
+// function : constructor
+// purpose  : constructor for servant creation
+//=================================================================================
+GEOM_Animation_i::GEOM_Animation_i(Kinematic_Animation* Animation,
+                                  GEOM::GEOM_Assembly_ptr Ass,
+                                  GEOM::GEOM_Shape_ptr Frame)
+{
+  _Animation = Animation;
+  _Ass = GEOM::GEOM_Assembly::_duplicate(Ass);
+  _Frame = GEOM::GEOM_Shape::_duplicate(Frame);
+
+  _shapeid = "";
+  _studyshapeid = "";
+
+  _name = "";
+}
+
+
+//=================================================================================
+// function : destructor
+// purpose  : 
+//=================================================================================
+GEOM_Animation_i::~GEOM_Animation_i() { delete &_Animation; }
+
+
+//=================================================================================
+// function : GetAssembly()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Assembly_ptr GEOM_Animation_i::GetAssembly() throw(SALOME::SALOME_Exception)
+{
+  return GEOM::GEOM_Assembly::_duplicate(_Ass);
+}
+
+
+//=================================================================================
+// function : GetFrame()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Shape_ptr GEOM_Animation_i::GetFrame() throw(SALOME::SALOME_Exception)
+{
+  return GEOM::GEOM_Shape::_duplicate(_Frame);
+}
+
+
+//=================================================================================
+// function : GetDuration()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Animation_i::GetDuration() throw(SALOME::SALOME_Exception)
+{
+  return _Animation->Duration();
+}
+
+
+//=================================================================================
+// function : GetNbSeq()
+// purpose  : 
+//=================================================================================
+CORBA::Long GEOM_Animation_i::GetNbSeq() throw(SALOME::SALOME_Exception)
+{
+  return _Animation->NbSeq();
+}
+
+
+//=================================================================================
+// function : Name (set method)
+// purpose  : to set the attribute 'name'.
+//          : WARNING : Register to naming service actually removed !
+//=================================================================================
+void GEOM_Animation_i::Name(const char* name)
+{
+  _name = strdup(name);
+  GEOM::GEOM_Animation_ptr g = GEOM::GEOM_Animation::_narrow(_this());
+}
+
+
+//=================================================================================
+// function : Name (get method)
+// purpose  : to get the attribute 'name' of this shape
+//=================================================================================
+char* GEOM_Animation_i::Name() { return strdup(_name); }
+
+
+//=================================================================================
+// function : ShapeId
+// purpose  : to get the id of this shape from GEOM (OCAF entry)
+//=================================================================================
+char* GEOM_Animation_i::ShapeId() { return strdup(_shapeid); }
+
+
+//=================================================================================
+// function : ShapeId (set method) 
+// purpose  : to set the id of this shape in GEOM/OCAF doc
+//=================================================================================
+void GEOM_Animation_i::ShapeId(const char * shapeid) { _shapeid = strdup(shapeid); }
+
+
+//=================================================================================
+// function : StudyShapeId (get method)
+// purpose  : to get the id of this shape from the study document (OCAF entry)
+//=================================================================================
+char* GEOM_Animation_i::StudyShapeId() { return strdup(_studyshapeid) ; }
+
+
+//=================================================================================
+// function : StudyShapeId (set method) 
+// purpose  : to set the id of this shape in the Study document (OCAF entry)
+//=================================================================================
+void GEOM_Animation_i::StudyShapeId(const char * studyshapeid)
+{ _studyshapeid = strdup(studyshapeid); }
diff --git a/src/GEOM/GEOM_Animation_i.hh b/src/GEOM/GEOM_Animation_i.hh
new file mode 100644 (file)
index 0000000..4cc925f
--- /dev/null
@@ -0,0 +1,88 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Animation_i.hh
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+#ifndef __GEOM_ANIMATION_I_H__
+#define __GEOM_ANIMATION_I_H__
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
+
+#include "GEOM_Shape_i.hh"
+#include "Kinematic_Animation.hxx"
+
+//=====================================================================
+// GEOM_Animation_i : class definition
+//=====================================================================
+class GEOM_Animation_i: 
+  public POA_GEOM::GEOM_Animation
+{
+public:
+  GEOM_Animation_i();
+  GEOM_Animation_i(Kinematic_Animation* Animation,
+                  GEOM::GEOM_Assembly_ptr Ass,
+                  GEOM::GEOM_Shape_ptr Frame);
+
+  ~GEOM_Animation_i();
+
+private:
+  Kinematic_Animation* _Animation;
+  GEOM::GEOM_Assembly_ptr _Ass;
+  GEOM::GEOM_Shape_ptr _Frame;
+  
+  char* _name;
+  char* _shapeid;
+  char* _studyshapeid; // exists only if added in the study document
+
+public:
+  GEOM::GEOM_Assembly_ptr GetAssembly()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::GEOM_Shape_ptr GetFrame()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetDuration()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Long GetNbSeq()
+    throw (SALOME::SALOME_Exception);
+
+  char* Name();
+  void  Name(const char* name);
+
+  char* ShapeId(); 
+  void  ShapeId(const char* shapeid);
+
+  char* StudyShapeId();
+  void  StudyShapeId(const char* studyshapeid);
+
+};
+
+#endif
diff --git a/src/GEOM/GEOM_Assembly_i.cc b/src/GEOM/GEOM_Assembly_i.cc
new file mode 100644 (file)
index 0000000..bd151fd
--- /dev/null
@@ -0,0 +1,149 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Assembly_i.cc
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+using namespace std;
+#include "GEOM_Assembly_i.hh"
+
+//=================================================================================
+// function : GEOM_Assembly_i() constructor (no arguments)
+// purpose  : for what now ?
+//=================================================================================
+GEOM_Assembly_i::GEOM_Assembly_i()
+{
+}
+
+
+//=================================================================================
+// function : constructor
+// purpose  : constructor for servant creation
+//=================================================================================
+GEOM_Assembly_i::GEOM_Assembly_i(Kinematic_Assembly* Ass)
+{
+  _Ass = Ass;
+
+  _aContactList.length(0);
+  _NbContact = 0;
+
+  _shapeid = "";
+  _studyshapeid = "";
+
+  _name = "";
+}
+
+
+//=================================================================================
+// function : destructor
+// purpose  : 
+//=================================================================================
+GEOM_Assembly_i::~GEOM_Assembly_i() { delete &_Ass; }
+
+
+//=================================================================================
+// function : AddContact()
+// purpose  : 
+//=================================================================================
+void GEOM_Assembly_i::AddContact(GEOM::GEOM_Contact_ptr aContact) throw(SALOME::SALOME_Exception)
+{
+  _aContactList.length(_NbContact + 1);
+  _aContactList[_NbContact] = GEOM::GEOM_Contact::_duplicate(aContact);
+  _NbContact++;
+
+  return;
+}
+
+//=================================================================================
+// function : GetContactList()
+// purpose  : 
+//=================================================================================
+GEOM::ListOfContact* GEOM_Assembly_i::GetContactList() throw(SALOME::SALOME_Exception)
+{
+  GEOM::ListOfContact_var aContactList = new GEOM::ListOfContact;
+  aContactList->length(_aContactList.length());
+  for(int i = 0; i < _NbContact; i++) {
+    aContactList[i] = GEOM::GEOM_Contact::_duplicate(_aContactList[i]);
+  }
+  return aContactList._retn();
+}
+
+
+//=================================================================================
+// function : NbContacts()
+// purpose  : 
+//=================================================================================
+CORBA::Long GEOM_Assembly_i::NbContacts() throw(SALOME::SALOME_Exception)
+{
+  return _NbContact;
+}
+
+
+//=================================================================================
+// function : Name (set method)
+// purpose  : to set the attribute 'name'.
+//          : WARNING : Register to naming service actually removed !
+//=================================================================================
+void GEOM_Assembly_i::Name(const char* name)
+{
+  _name = strdup(name);
+  GEOM::GEOM_Assembly_ptr g = GEOM::GEOM_Assembly::_narrow(_this());
+}
+
+
+//=================================================================================
+// function : Name (get method)
+// purpose  : to get the attribute 'name' of this shape
+//=================================================================================
+char* GEOM_Assembly_i::Name() { return strdup(_name); }
+
+
+//=================================================================================
+// function : ShapeId
+// purpose  : to get the id of this shape from GEOM (OCAF entry)
+//=================================================================================
+char* GEOM_Assembly_i::ShapeId() { return strdup(_shapeid); }
+
+
+//=================================================================================
+// function : ShapeId (set method) 
+// purpose  : to set the id of this shape in GEOM/OCAF doc
+//=================================================================================
+void GEOM_Assembly_i::ShapeId(const char * shapeid) { _shapeid = strdup(shapeid); }
+
+
+//=================================================================================
+// function : StudyShapeId (get method)
+// purpose  : to get the id of this shape from the study document (OCAF entry)
+//=================================================================================
+char* GEOM_Assembly_i::StudyShapeId() { return strdup(_studyshapeid) ; }
+
+
+//=================================================================================
+// function : StudyShapeId (set method) 
+// purpose  : to set the id of this shape in the Study document (OCAF entry)
+//=================================================================================
+void GEOM_Assembly_i::StudyShapeId(const char * studyshapeid)
+{ _studyshapeid = strdup(studyshapeid); }
diff --git a/src/GEOM/GEOM_Assembly_i.hh b/src/GEOM/GEOM_Assembly_i.hh
new file mode 100644 (file)
index 0000000..288b33f
--- /dev/null
@@ -0,0 +1,83 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Assembly_i.hh
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+#ifndef __GEOM_ASSEMBLY_I_H__
+#define __GEOM_ASSEMBLY_I_H__
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
+
+#include "Kinematic_Assembly.hxx"
+
+//=====================================================================
+// GEOM_Assembly_i : class definition
+//=====================================================================
+class GEOM_Assembly_i: 
+  public POA_GEOM::GEOM_Assembly
+{
+public:
+  GEOM_Assembly_i();
+  GEOM_Assembly_i(Kinematic_Assembly* Ass);
+
+  ~GEOM_Assembly_i();
+
+private:
+  Kinematic_Assembly* _Ass;
+
+  GEOM::ListOfContact _aContactList;
+  CORBA::Long _NbContact;
+  
+  char* _name;
+  char* _shapeid;
+  char* _studyshapeid; // exists only if added in the study document
+
+public:
+  void AddContact(GEOM::GEOM_Contact_ptr aContact)
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::ListOfContact* GetContactList()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Long NbContacts()
+    throw (SALOME::SALOME_Exception);
+
+  char* Name();
+  void  Name(const char* name);
+
+  char* ShapeId(); 
+  void  ShapeId(const char* shapeid);
+
+  char* StudyShapeId();
+  void  StudyShapeId(const char* studyshapeid);
+
+};
+
+#endif
diff --git a/src/GEOM/GEOM_Contact_i.cc b/src/GEOM/GEOM_Contact_i.cc
new file mode 100644 (file)
index 0000000..051118a
--- /dev/null
@@ -0,0 +1,214 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Contact_i.cc
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+using namespace std;
+#include "GEOM_Contact_i.hh"
+#include "GEOM_Position_i.hh"
+#include "GEOM_Rotation_i.hh"
+#include "GEOM_Translation_i.hh"
+
+//=================================================================================
+// function : GEOM_Contact_i() constructor (no arguments)
+// purpose  : for what now ?
+//=================================================================================
+GEOM_Contact_i::GEOM_Contact_i()
+{
+}
+
+
+//=================================================================================
+// function : constructor
+// purpose  : constructor for servant creation
+//=================================================================================
+GEOM_Contact_i::GEOM_Contact_i(Kinematic_Contact* Contact,
+                              GEOM::GEOM_Shape_ptr Shape1,
+                              GEOM::GEOM_Shape_ptr Shape2,
+                              GEOM::GEOM_Gen_ptr engine)
+{
+  _Contact = Contact;
+  _Shape1 = GEOM::GEOM_Shape::_duplicate(Shape1);
+  _Shape2 = GEOM::GEOM_Shape::_duplicate(Shape2);
+
+  GEOM::PointStruct p0 = engine->MakePointStruct(Contact->Position().Origin().X(),
+                                                Contact->Position().Origin().Y(),
+                                                Contact->Position().Origin().Z());
+  GEOM::PointStruct pX = engine->MakePointStruct(Contact->Position().DirX().X(),
+                                                Contact->Position().DirX().Y(),
+                                                Contact->Position().DirX().Z());
+  GEOM::PointStruct pY = engine->MakePointStruct(Contact->Position().DirY().X(),
+                                                Contact->Position().DirY().Y(),
+                                                Contact->Position().DirY().Z());
+  GEOM::PointStruct pZ = engine->MakePointStruct(Contact->Position().DirZ().X(),
+                                                Contact->Position().DirZ().Y(),
+                                                Contact->Position().DirZ().Z());
+  GEOM::DirStruct VX = engine->MakeDirection(pX);
+  GEOM::DirStruct VY = engine->MakeDirection(pY);
+  GEOM::DirStruct VZ = engine->MakeDirection(pZ);
+  GEOM_Position_i * Position_servant = new GEOM_Position_i(p0, VX, VY, VZ);
+  _Position = GEOM::GEOM_Position::_narrow(Position_servant->_this());
+
+  GEOM_Rotation_i * Rotation_servant = new GEOM_Rotation_i(Contact->Rotation().Rot1(),
+                                                          Contact->Rotation().Rot2(),
+                                                          Contact->Rotation().Rot3(),
+                                                          Contact->Rotation().ValX(),
+                                                          Contact->Rotation().ValY(),
+                                                          Contact->Rotation().ValZ());
+  _Rotation = GEOM::GEOM_Rotation::_narrow(Rotation_servant->_this());
+  GEOM_Translation_i * Translation_servant = new GEOM_Translation_i(0, 0, 0);
+  _Translation = GEOM::GEOM_Translation::_narrow(Translation_servant->_this());
+
+  _shapeid = "";
+  _studyshapeid = "";
+
+  _name = "";
+}
+
+
+//=================================================================================
+// function : destructor
+// purpose  : 
+//=================================================================================
+GEOM_Contact_i::~GEOM_Contact_i() { delete &_Contact; }
+
+
+//=================================================================================
+// function : GetType()
+// purpose  : 
+//=================================================================================
+CORBA::Long GEOM_Contact_i::GetType() throw(SALOME::SALOME_Exception)
+{
+  return _Contact->Type();
+}
+
+
+//=================================================================================
+// function : GetShape1()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Shape_ptr GEOM_Contact_i::GetShape1() throw(SALOME::SALOME_Exception)
+{
+  return GEOM::GEOM_Shape::_duplicate(_Shape1);
+}
+
+
+//=================================================================================
+// function : GetShape2()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Shape_ptr GEOM_Contact_i::GetShape2() throw(SALOME::SALOME_Exception)
+{
+  return GEOM::GEOM_Shape::_duplicate(_Shape2);
+}
+
+
+//=================================================================================
+// function : GetPosition()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Position_ptr GEOM_Contact_i::GetPosition() throw(SALOME::SALOME_Exception)
+{
+  return GEOM::GEOM_Position::_duplicate(_Position);
+}
+
+
+//=================================================================================
+// function : GetRotation()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Rotation_ptr GEOM_Contact_i::GetRotation() throw(SALOME::SALOME_Exception)
+{
+  return GEOM::GEOM_Rotation::_duplicate(_Rotation);
+}
+
+
+//=================================================================================
+// function : GetTranslation()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Translation_ptr GEOM_Contact_i::GetTranslation() throw(SALOME::SALOME_Exception)
+{
+  return GEOM::GEOM_Translation::_duplicate(_Translation);
+}
+
+
+//=================================================================================
+// function : GetStep()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Contact_i::GetStep() throw(SALOME::SALOME_Exception)
+{
+  return _Contact->Step();
+}
+
+
+//=================================================================================
+// function : Name (set method)
+// purpose  : to set the attribute 'name'.
+//          : WARNING : Register to naming service actually removed !
+//=================================================================================
+void GEOM_Contact_i::Name(const char* name)
+{
+  _name = strdup(name);
+  GEOM::GEOM_Contact_ptr g = GEOM::GEOM_Contact::_narrow(_this());
+}
+
+
+//=================================================================================
+// function : Name (get method)
+// purpose  : to get the attribute 'name' of this shape
+//=================================================================================
+char* GEOM_Contact_i::Name() { return strdup(_name); }
+
+
+//=================================================================================
+// function : ShapeId
+// purpose  : to get the id of this shape from GEOM (OCAF entry)
+//=================================================================================
+char* GEOM_Contact_i::ShapeId() { return strdup(_shapeid); }
+
+
+//=================================================================================
+// function : ShapeId (set method) 
+// purpose  : to set the id of this shape in GEOM/OCAF doc
+//=================================================================================
+void GEOM_Contact_i::ShapeId(const char * shapeid) { _shapeid = strdup(shapeid); }
+
+
+//=================================================================================
+// function : StudyShapeId (get method)
+// purpose  : to get the id of this shape from the study document (OCAF entry)
+//=================================================================================
+char* GEOM_Contact_i::StudyShapeId() { return strdup(_studyshapeid) ; }
+
+
+//=================================================================================
+// function : StudyShapeId (set method) 
+// purpose  : to set the id of this shape in the Study document (OCAF entry)
+//=================================================================================
+void GEOM_Contact_i::StudyShapeId(const char * studyshapeid)
+{ _studyshapeid = strdup(studyshapeid); }
diff --git a/src/GEOM/GEOM_Contact_i.hh b/src/GEOM/GEOM_Contact_i.hh
new file mode 100644 (file)
index 0000000..6cd7ff9
--- /dev/null
@@ -0,0 +1,101 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Contact_i.hh
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+#ifndef __GEOM_CONTACT_I_H__
+#define __GEOM_CONTACT_I_H__
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
+
+#include "GEOM_Shape_i.hh"
+#include "Kinematic_Contact.hxx"
+
+//=====================================================================
+// GEOM_Contact_i : class definition
+//=====================================================================
+class GEOM_Contact_i: 
+  public POA_GEOM::GEOM_Contact
+{
+public:
+  GEOM_Contact_i();
+  GEOM_Contact_i(Kinematic_Contact* Contact,
+                GEOM::GEOM_Shape_ptr Shape1,
+                GEOM::GEOM_Shape_ptr Shape2,
+                GEOM::GEOM_Gen_ptr engine);
+
+  ~GEOM_Contact_i();
+
+private:
+  Kinematic_Contact* _Contact;
+  GEOM::GEOM_Shape_ptr _Shape1;
+  GEOM::GEOM_Shape_ptr _Shape2;
+  GEOM::GEOM_Position_ptr _Position;
+  GEOM::GEOM_Rotation_ptr _Rotation;
+  GEOM::GEOM_Translation_ptr _Translation;
+  
+  char* _name;
+  char* _shapeid;
+  char* _studyshapeid; // exists only if added in the study document
+
+public:
+  CORBA::Long GetType()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::GEOM_Shape_ptr GetShape1()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::GEOM_Shape_ptr GetShape2()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::GEOM_Position_ptr GetPosition()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::GEOM_Rotation_ptr GetRotation()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::GEOM_Translation_ptr GetTranslation()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetStep()
+    throw (SALOME::SALOME_Exception);
+
+  char* Name();
+  void  Name(const char* name);
+
+  char* ShapeId(); 
+  void  ShapeId(const char* shapeid);
+
+  char* StudyShapeId();
+  void  StudyShapeId(const char* studyshapeid);
+
+};
+
+#endif
index 2463789daa2b80f6b8763ab17aaba6543a9faefc..48d9101687b0a9189931e3238813d8fb3d62b84b 100644 (file)
@@ -46,6 +46,7 @@ using namespace std;
 #include <gp_Elips.hxx>
 #include <Geom_Plane.hxx>
 #include <Geom_Line.hxx>
+#include <Geom2d_Curve.hxx>
 #include <Geom_BezierCurve.hxx>
 #include <Geom_BSplineCurve.hxx>
 #include <GeomFill_Line.hxx>
@@ -65,6 +66,7 @@ using namespace std;
 #endif
 #include <BRepAlgo_FaceRestrictor.hxx>
 #include <BRepAdaptor_Surface.hxx>
+#include <BRepAdaptor_Curve.hxx>
 #include <BRepBuilderAPI_Copy.hxx>
 #include <BRepAlgoAPI_Common.hxx>
 #include <BRepAlgoAPI_Cut.hxx>
@@ -146,6 +148,8 @@ using namespace std;
 #include <TDF_Label.hxx>
 #include <TDataStd_Name.hxx>
 #include <TDataStd_Comment.hxx>
+#include <TDataStd_Integer.hxx>
+#include <TDataStd_Real.hxx>
 #include <TDF_Reference.hxx>
 #include <TDF_Data.hxx>
 #include <TNaming_Builder.hxx>
@@ -213,6 +217,18 @@ char* GEOM_Gen_i::IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
   if (!CORBA::is_nil(aShape)) {
     return strdup(aShape->ShapeId());
   }
+  GEOM::GEOM_Assembly_var aAssembly = GEOM::GEOM_Assembly::_narrow(_orb->string_to_object(IORString));
+  if (!CORBA::is_nil(aAssembly)) {
+    return strdup(aAssembly->ShapeId());
+  }
+  GEOM::GEOM_Contact_var aContact = GEOM::GEOM_Contact::_narrow(_orb->string_to_object(IORString));
+  if (!CORBA::is_nil(aContact)) {
+    return strdup(aContact->ShapeId());
+  }
+  GEOM::GEOM_Animation_var aAnimation = GEOM::GEOM_Animation::_narrow(_orb->string_to_object(IORString));
+  if (!CORBA::is_nil(aAnimation)) {
+    return strdup(aAnimation->ShapeId());
+  }
   return 0;
 }
 
@@ -238,110 +254,227 @@ char* GEOM_Gen_i::LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
   TDF_Label Lab;
   TDF_Tool::Label(aDoc->GetData(), aPersRefString, Lab );
   
-  Handle(TNaming_NamedShape) NS;
-  Lab.FindAttribute( TNaming_NamedShape::GetID(), NS );
-  TopoDS_Shape S = TNaming_Tool::GetShape(NS);
-
   /* shapetype, index=0, topo, orb, shapetype, ismain=true and name are setted and modified later ? */
-  GEOM::GEOM_Shape_var result = CreateObject(S);
   GEOMDS_Commands GC( aDoc->Main() ) ;
-  
   if ( GC.HasIOR(Lab) ) { /* shape already created/loaded */
     return 0 ;
   }
 
+  Handle(TNaming_NamedShape) NS;
+  Lab.FindAttribute( TNaming_NamedShape::GetID(), NS );
+  TopoDS_Shape S;
+
+  Kinematic_Assembly* Assembly = new Kinematic_Assembly();
+  Kinematic_Contact* Contact = new Kinematic_Contact();
+  Kinematic_Animation* Animation = new Kinematic_Animation();
+
+  if(GC.GetShape(Lab, S)) {
+    S = TNaming_Tool::GetShape(NS);
+    GEOM::GEOM_Shape_var result = CreateObject(S);
+
   /******************* Dependent object (not a main shape) *********************/
-  if( GC.IsDependentShape(Lab) ) {
-    
-    TDF_Label mainLabel ;
-    Standard_Boolean mainShapeOk = GC.GetMainShapeLabel(Lab, mainLabel) ;
-    
-    /* Main object not yet loaded we load/create it */
-    if( !GC.HasIOR(mainLabel) ) {
+    if( GC.IsDependentShape(Lab) ) {
       
-      TCollection_AsciiString entry;
-      TDF_Tool::Entry(mainLabel,entry);
-      CORBA::String_var ent = strdup(entry.ToCString());
+      TDF_Label mainLabel ;
+      Standard_Boolean mainShapeOk = GC.GetMainShapeLabel(Lab, mainLabel) ;
       
-      /* Create the main object recursively */
-      MainIOR = LocalPersistentIDToIOR(theSObject, ent, isMultiFile, isASCII) ;
-    } else {
-      GC.ReturnNameIOR( mainLabel, MainIOR ); 
-    }
-    
-    result->MainName( TCollection_AsciiString(MainIOR).ToCString() ) ;      
-    result->IsMainShape(false) ;
-    result->ShapeId(aPersRefString);
-    
-    Handle(TDF_Reference) aRef;
-    Lab.FindAttribute( TDF_Reference::GetID(), aRef );
-    TDF_Label myL = aRef->Get() ;
-    Handle(TNaming_NamedShape) NN;
-    myL.FindAttribute( TNaming_NamedShape::GetID(), NN );
-    TopoDS_Shape mainTopo = TNaming_Tool::GetShape(NN);
-
-    GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
-    
-    if(S.ShapeType() != TopAbs_COMPOUND) {
-      /* to set the index of a unique sub shape (Explode All ONLY for the moment !) */
-      ListOfID->length(1);
-      int index = 1;
-      TopTools_MapOfShape M;
-      TopExp_Explorer Exp ;
-      for( Exp.Init(mainTopo, TopAbs_ShapeEnum( result->ShapeType() )) ; Exp.More(); Exp.Next() )  {
-       if ( M.Add(Exp.Current()) ) {
-         if(Exp.Current().IsSame(S) ) {
-           ListOfID[0] = index;
-           break;
-         }
-         index++ ;
-       }       
+      /* Main object not yet loaded we load/create it */
+      if( !GC.HasIOR(mainLabel) ) {
+       
+       TCollection_AsciiString entry;
+       TDF_Tool::Entry(mainLabel,entry);
+       CORBA::String_var ent = strdup(entry.ToCString());
+       
+       /* Create the main object recursively */
+       MainIOR = LocalPersistentIDToIOR(theSObject, ent, isMultiFile, isASCII) ;
+      } else {
+       GC.ReturnNameIOR( mainLabel, MainIOR ); 
       }
-      result->Index(ListOfID) ;
-      return result->Name(); 
-    }
-    else {
-      /* Here is a TopAbs_COMPOUND : we set the list/index for a compound : containing two or more sub shapes  */
-      /* Warning : the Corba shape has a shapetype Compound : in GEOMDS_Client we have to retrieve the kind of */
-      /* subshapes contained in this compound !                                                                */
-      TopTools_SequenceOfShape SS;
-      TopoDS_Iterator it ;
-      TopExp_Explorer exp ;
-      TopAbs_ShapeEnum subType ;
       
-      /* Set all sub shapes in a sequence of shapes  */
-      for ( it.Initialize( S, true, true ) ; it.More(); it.Next() ) {
-       subType = it.Value().ShapeType() ;
-       SS.Append( it.Value() ) ;
-      }
+      result->MainName( TCollection_AsciiString(MainIOR).ToCString() ) ;      
+      result->IsMainShape(false) ;
+      result->ShapeId(aPersRefString);
       
-      ListOfID->length( SS.Length() ) ;
-      int j, k ;  /* in TopTools_SequenceOfShape index start at 1 */
+      Handle(TDF_Reference) aRef;
+      Lab.FindAttribute( TDF_Reference::GetID(), aRef );
+      TDF_Label myL = aRef->Get() ;
+      Handle(TNaming_NamedShape) NN;
+      myL.FindAttribute( TNaming_NamedShape::GetID(), NN );
+      TopoDS_Shape mainTopo = TNaming_Tool::GetShape(NN);
       
-      for( k=1; k<=SS.Length(); k++ ) {
-       j = 1 ;
-       for( exp.Init( mainTopo, subType ); exp.More(); exp.Next() ) {  
-         if( exp.Current().IsSame( SS.Value(k) ) ) {
-           ListOfID[k-1] = j ;
+      GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
+      
+      if(S.ShapeType() != TopAbs_COMPOUND) {
+       /* to set the index of a unique sub shape (Explode All ONLY for the moment !) */
+       ListOfID->length(1);
+       int index = 1;
+       TopTools_MapOfShape M;
+       TopExp_Explorer Exp ;
+       for( Exp.Init(mainTopo, TopAbs_ShapeEnum( result->ShapeType() )) ; Exp.More(); Exp.Next() )  {
+         if ( M.Add(Exp.Current()) ) {
+           if(Exp.Current().IsSame(S) ) {
+             ListOfID[0] = index;
+             break;
+           }
+           index++ ;
+         }     
+       }
+       result->Index(ListOfID) ;
+       return result->Name(); 
+      }
+      else {
+       /* Here is a TopAbs_COMPOUND : we set the list/index for a compound : containing two or more sub shapes  */
+       /* Warning : the Corba shape has a shapetype Compound : in GEOMDS_Client we have to retrieve the kind of */
+       /* subshapes contained in this compound !                                                                */
+       TopTools_SequenceOfShape SS;
+       TopoDS_Iterator it ;
+       TopExp_Explorer exp ;
+       TopAbs_ShapeEnum subType ;
+       
+       /* Set all sub shapes in a sequence of shapes  */
+       for ( it.Initialize( S, true, true ) ; it.More(); it.Next() ) {
+         subType = it.Value().ShapeType() ;
+         SS.Append( it.Value() ) ;
+       }
+       
+       ListOfID->length( SS.Length() ) ;
+       int j, k ;  /* in TopTools_SequenceOfShape index start at 1 */
+       
+       for( k=1; k<=SS.Length(); k++ ) {
+         j = 1 ;
+         for( exp.Init( mainTopo, subType ); exp.More(); exp.Next() ) {
+           if( exp.Current().IsSame( SS.Value(k) ) ) {
+             ListOfID[k-1] = j ;
+           }
+           j++ ;
          }
-         j++ ;
        }
+       result->Index(ListOfID) ;
+       return result->Name();
       }
-      result->Index(ListOfID) ;
-      return result->Name();
-    }
     
-  }
+    }
   /******************* Independent object (not a sub shape) *********************/
-  else {
-    result->IsMainShape(true) ;
-    if( !GC.AddIORNameAttribute(Lab, result->Name() ) )  {
+    else {
+      result->IsMainShape(true) ;
+      if( !GC.AddIORNameAttribute(Lab, result->Name() ) )  {
+       MESSAGE("in LocalPersistentIDToIOR, NAME/IOR attribute already exist." << endl ) ;
+      }
+      Handle(TNaming_NamedShape) NamedShape ;  
+      bool notTested = Lab.FindAttribute(TNaming_NamedShape::GetID(), NamedShape) ;
+      result->ShapeId(aPersRefString);
+      return result->Name(); 
+    }
+  }
+  else if(GC.GetAssembly(Lab, *Assembly)) {
+    /* Create the CORBA servant holding the TopoDS_Shape */
+    GEOM_Assembly_i * Assembly_servant = new GEOM_Assembly_i(Assembly);
+    GEOM::GEOM_Assembly_var result = GEOM::GEOM_Assembly::_narrow(Assembly_servant->_this()); 
+  
+    /* Create and set the name (IOR of shape converted into a string) */
+    string name_ior = _orb->object_to_string(result);
+    result->Name(name_ior.c_str());
+
+    if( !GC.AddIORNameAttribute(Lab, result->Name()))  {
+      MESSAGE("in LocalPersistentIDToIOR, NAME/IOR attribute already exist." << endl ) ;
+    }
+
+    result->ShapeId(aPersRefString);
+    return result->Name();
+  }
+  else if(GC.GetContact(Lab, *Contact)) {
+    TDF_ChildIterator it;
+    int i = 1;
+    GEOM::GEOM_Shape_var aShape1;
+    GEOM::GEOM_Shape_var aShape2;
+    TCollection_ExtendedString str;
+    Handle(TDF_Reference) aRef;
+    for(it.Initialize(Lab, Standard_False); it.More(); it.Next()) {
+      TDF_Label L = it.Value();
+      if(i == 3) {
+       L.FindAttribute(TDF_Reference::GetID(), aRef);
+       TDF_Label myL = aRef->Get();
+       GC.ReturnNameIOR(myL, str);
+       aShape1 = GetIORFromString(TCollection_AsciiString(str).ToCString());
+      }
+      if(i == 4) {
+       L.FindAttribute(TDF_Reference::GetID(), aRef);
+       TDF_Label myL = aRef->Get();
+       GC.ReturnNameIOR(myL, str);
+       aShape2 = GetIORFromString(TCollection_AsciiString(str).ToCString());
+      }
+      i++;
+    }
+
+    /* Create the CORBA servant holding the TopoDS_Shape */
+    GEOM::GEOM_Gen_ptr engine = POA_GEOM::GEOM_Gen::_this();
+    GEOM_Contact_i * Contact_servant = new GEOM_Contact_i(Contact, aShape1, aShape2, engine);
+    GEOM::GEOM_Contact_var result = GEOM::GEOM_Contact::_narrow(Contact_servant->_this()); 
+
+    /* Create and set the name (IOR of shape converted into a string) */
+    string name_ior = _orb->object_to_string(result);
+    result->Name(name_ior.c_str());
+
+    if( !GC.AddIORNameAttribute(Lab, result->Name()))  {
       MESSAGE("in LocalPersistentIDToIOR, NAME/IOR attribute already exist." << endl ) ;
     }
-    Handle(TNaming_NamedShape) NamedShape ;  
-    bool notTested = Lab.FindAttribute(TNaming_NamedShape::GetID(), NamedShape) ;
+
     result->ShapeId(aPersRefString);
-    return result->Name(); 
+
+    GEOM::GEOM_Assembly_var aAssPtr;
+    TDF_Label AssLab = Lab.Father();
+    GC.ReturnNameIOR(AssLab, str);
+    if(strcmp(TCollection_AsciiString(str).ToCString(),"") != 0) {
+      CORBA::Object_var anObject = _orb->string_to_object(TCollection_AsciiString(str).ToCString());
+      if(!CORBA::is_nil(anObject))
+       aAssPtr = GEOM::GEOM_Assembly::_narrow(anObject.in());
+    }
+    aAssPtr->AddContact(result);
+
+    return result->Name();
+  }
+  else if(GC.GetAnimation(Lab, *Animation)) {
+    TDF_ChildIterator it;
+    int i = 1;
+    GEOM::GEOM_Assembly_var aAssPtr;
+    GEOM::GEOM_Shape_var aFramePtr;
+    TCollection_ExtendedString str;
+    Handle(TDF_Reference) aRef;
+    for(it.Initialize(Lab, Standard_False); it.More(); it.Next()) {
+      TDF_Label L = it.Value();
+      if(i == 2) {
+       L.FindAttribute(TDF_Reference::GetID(), aRef);
+       TDF_Label myL = aRef->Get();
+       GC.ReturnNameIOR(myL, str);
+       if(strcmp(TCollection_AsciiString(str).ToCString(),"") != 0) {
+         CORBA::Object_var anObject = _orb->string_to_object(TCollection_AsciiString(str).ToCString());
+         if(!CORBA::is_nil(anObject))
+           aAssPtr = GEOM::GEOM_Assembly::_narrow(anObject.in());
+       }
+      }
+      if(i == 3) {
+       L.FindAttribute(TDF_Reference::GetID(), aRef);
+       TDF_Label myL = aRef->Get();
+       GC.ReturnNameIOR(myL, str);
+       aFramePtr = GetIORFromString(TCollection_AsciiString(str).ToCString());
+      }
+      i++;
+    }
+
+    /* Create the CORBA servant holding the TopoDS_Shape */
+    GEOM_Animation_i * Animation_servant = new GEOM_Animation_i(Animation, aAssPtr, aFramePtr);
+    GEOM::GEOM_Animation_var result = GEOM::GEOM_Animation::_narrow(Animation_servant->_this()); 
+  
+    /* Create and set the name (IOR of shape converted into a string) */
+    string name_ior = _orb->object_to_string(result);
+    result->Name(name_ior.c_str());
+
+    if( !GC.AddIORNameAttribute(Lab, result->Name()))  {
+      MESSAGE("in LocalPersistentIDToIOR, NAME/IOR attribute already exist." << endl ) ;
+    }
+
+    result->ShapeId(aPersRefString);
+    return result->Name();
   }
 }
 
@@ -4416,6 +4549,121 @@ GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeRotation( GEOM::GEOM_Shape_ptr myShape,
 }
 
 
+//=================================================================================
+// function : MakePosition()
+// purpose  : 
+//=================================================================================
+GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakePosition(GEOM::GEOM_Shape_ptr shape1,
+                                             GEOM::GEOM_Shape_ptr shape2,
+                                             const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID1,
+                                             const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID2,
+                                             const CORBA::Short typeofshape)
+  throw (SALOME::SALOME_Exception)
+{
+  GEOM::GEOM_Shape_var result;
+  TopoDS_Shape tds;
+  TopoDS_Shape aShape1 = GetTopoShape(shape1);
+  TopoDS_Shape aShape2 = GetTopoShape(shape2);
+  if(aShape1.IsNull() || aShape2.IsNull()) {
+    THROW_SALOME_CORBA_EXCEPTION("MakePosition aborted : null shape during operation", SALOME::BAD_PARAM);
+  }
+  
+  try {
+    gp_Trsf theTransformation;
+    TopoDS_Shape S1, S2;
+
+    GetShapeFromIndex(aShape1, (TopAbs_ShapeEnum)typeofshape, ListOfID1[0], S1);
+    GetShapeFromIndex(aShape2, (TopAbs_ShapeEnum)typeofshape, ListOfID2[0], S2);
+
+    if(S1.ShapeType() == TopAbs_VERTEX && S2.ShapeType() == TopAbs_VERTEX) {
+      gp_Pnt Pt1 = BRep_Tool::Pnt(TopoDS::Vertex(S1));
+      gp_Pnt Pt2 = BRep_Tool::Pnt(TopoDS::Vertex(S2));
+
+      gp_Vec theVector(Pt1, Pt2);
+      theTransformation.SetTranslation(theVector);
+    }
+    else if(S1.ShapeType() == TopAbs_EDGE && S2.ShapeType() == TopAbs_EDGE) {
+      Standard_Real f, l;
+      gp_Pnt Pt1, Pt2;
+      gp_Vec V1, V2;
+
+      Handle(Geom_Curve) C = BRep_Tool::Curve(TopoDS::Edge(S1), f, l);
+      C->D1(f, Pt1, V1);
+      C = BRep_Tool::Curve(TopoDS::Edge(S2), f, l);
+      C->D1(f, Pt2, V2);
+
+      gp_Vec theVector(Pt1, Pt2);
+      theTransformation.SetTranslation(theVector);
+
+      if(!V1.IsParallel(V2, Precision::Angular())) {
+       gp_Vec VN = V1.Crossed(V2);
+       double Angle = V1.Angle(V2);
+       
+       gp_Dir D(VN.X(), VN.Y(), VN.Z());
+       gp_Ax1 AX(Pt1, D);
+       
+       gp_Trsf TheRot;
+       TheRot.SetRotation(AX, Angle);
+       theTransformation = theTransformation * TheRot;
+      }
+    }
+    else if(S1.ShapeType() == TopAbs_FACE && S2.ShapeType() == TopAbs_FACE) {
+      TopoDS_Edge E1, E2;
+      Standard_Real f, l;
+      gp_Pnt P1, P2;
+      gp_Vec D1, D2, N1, N2, V1, V2;
+
+      TopExp_Explorer Exp1(S1, TopAbs_EDGE);
+      TopExp_Explorer Exp2(S2, TopAbs_EDGE);
+
+      for(; Exp1.More(); Exp1.Next()) {
+       E1 = TopoDS::Edge(Exp1.Current());
+       if(!BRep_Tool::Degenerated(E1))
+         break;
+      }
+      for(; Exp2.More(); Exp2.Next()) {
+       E2 = TopoDS::Edge(Exp2.Current());
+       if(!BRep_Tool::Degenerated(E2))
+         break;
+      }
+
+      Handle(Geom_Curve) C = BRep_Tool::Curve(E1, f, l);
+      C->D1(f, P1, D1);
+      Handle(Geom2d_Curve) C2 = BRep_Tool::CurveOnSurface(E1, TopoDS::Face(S1), f, l);
+      gp_Pnt2d P2d = C2->Value(f);
+      Handle(Geom_Surface) S = BRep_Tool::Surface(TopoDS::Face(S1));
+      S->D1(P2d.X(), P2d.Y(), P1, V1, V2);
+      N1 = V1^V2;
+
+      C = BRep_Tool::Curve(E2, f, l);
+      C->D1(f, P2, D2);
+      C2 = BRep_Tool::CurveOnSurface(E2, TopoDS::Face(S2), f, l);
+      P2d = C2->Value(f);
+      S = BRep_Tool::Surface(TopoDS::Face(S2));
+      S->D1(P2d.X(), P2d.Y(), P2, V1, V2);
+      N2 = V1^V2;
+
+      gp_Ax3 Ax1(P1, N1, D1);
+      gp_Ax3 Ax2(P2, N2, D2);
+
+      theTransformation.SetDisplacement(Ax1, Ax2);
+    }
+
+    BRepBuilderAPI_Transform myBRepTransformation(aShape1, theTransformation, Standard_False);
+    tds = myBRepTransformation.Shape();
+  }
+  catch(Standard_Failure) {
+    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakePosition", SALOME::BAD_PARAM);
+  }
+  
+  if(!tds.IsNull()) {
+    result = CreateObject(tds);
+    InsertInLabelOneArgument(aShape1, shape1, tds, result, myCurrentOCAFDoc);
+  }
+  return result;
+}
+
+
 //=================================================================================
 // function : MakeScaleTransform()
 // purpose  : Make a shape multipling another by a scale factor
@@ -5173,6 +5421,215 @@ void GEOM_Gen_i::ExportSTEP(const char* filename,GEOM::GEOM_Shape_ptr theShape)
 }
 
 
+//=================================================================================
+// function : InitAssembly()
+// purpose  :
+//=================================================================================
+GEOM::GEOM_Assembly_ptr GEOM_Gen_i::InitAssembly() throw (SALOME::SALOME_Exception)
+{
+  Kinematic_Assembly* tds;
+
+  try {
+    tds = new Kinematic_Assembly();
+  }
+  catch(Standard_Failure)
+    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::InitAssembly", SALOME::BAD_PARAM);
+
+  /* Create the CORBA servant holding the TopoDS_Shape */
+  GEOM_Assembly_i * Assembly_servant = new GEOM_Assembly_i(tds);
+  GEOM::GEOM_Assembly_var Assembly = GEOM::GEOM_Assembly::_narrow(Assembly_servant->_this()); 
+  
+  /* Create and set the name (IOR of shape converted into a string) */
+  string name_ior = _orb->object_to_string(Assembly);
+  Assembly->Name(name_ior.c_str());
+
+  GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
+  /* add attributs S and mystr in a new label */
+  TDF_Label Lab = GC.AddAssembly(*tds, Assembly->Name());
+
+  TCollection_AsciiString entry;
+  TDF_Tool::Entry(Lab, entry);
+  const char *ent = entry.ToCString();
+
+  Assembly->ShapeId(ent);
+  return Assembly;  
+}
+
+
+//=================================================================================
+// function : AddContact()
+// purpose  :
+//=================================================================================
+GEOM::GEOM_Contact_ptr GEOM_Gen_i::AddContact(GEOM::GEOM_Assembly_ptr Ass,
+                                             GEOM::GEOM_Shape_ptr Shape1,
+                                             GEOM::GEOM_Shape_ptr Shape2, 
+                                             const short type,
+                                             CORBA::Double step)
+  throw (SALOME::SALOME_Exception)
+{
+  Kinematic_Contact* tds;
+  TDF_Label mainRefLab;
+  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), Ass->ShapeId(), mainRefLab);
+
+  try {
+    TopoDS_Shape aShape1 = GetTopoShape(Shape1);
+    TopoDS_Shape aShape2 = GetTopoShape(Shape2);
+    tds = new Kinematic_Contact(aShape1, aShape2, type, step);
+  }
+  catch(Standard_Failure)
+    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::AddContact", SALOME::BAD_PARAM);
+
+  /* Create the CORBA servant holding the TopoDS_Shape */
+  GEOM::GEOM_Gen_ptr engine = POA_GEOM::GEOM_Gen::_this();
+  GEOM_Contact_i * Contact_servant = new GEOM_Contact_i(tds, Shape1, Shape2, engine);
+  GEOM::GEOM_Contact_var Contact = GEOM::GEOM_Contact::_narrow(Contact_servant->_this());
+
+  /* Create and set the name (IOR of shape converted into a string) */
+  string name_ior = _orb->object_to_string(Contact);
+  Contact->Name(name_ior.c_str());
+
+  GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
+  /* add attributs S and mystr in a new label */
+  TDF_Label LabContact = GC.AddContact(*tds, mainRefLab, Contact->Name());
+
+  TCollection_AsciiString entry;
+  TDF_Tool::Entry(LabContact, entry);
+  Contact->ShapeId(entry.ToCString());
+
+  Ass->AddContact(Contact);
+  return Contact;
+}
+
+
+//=================================================================================
+// function : AddAnimation()
+// purpose  :
+//=================================================================================
+GEOM::GEOM_Animation_ptr GEOM_Gen_i::AddAnimation(GEOM::GEOM_Assembly_ptr Ass, 
+                                                 GEOM::GEOM_Shape_ptr Shape1,
+                                                 CORBA::Double Duration,
+                                                 const short NbSeq)
+  throw (SALOME::SALOME_Exception)
+{
+  Kinematic_Animation* tds;
+  TDF_Label mainRefLab;
+  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), Ass->ShapeId(), mainRefLab);
+  GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
+
+  try {
+    Kinematic_Assembly* aAss = new Kinematic_Assembly();
+    Standard_Boolean test = GC.GetAssembly(mainRefLab, *aAss);
+    TopoDS_Shape aShape1 = GetTopoShape(Shape1);
+    tds = new Kinematic_Animation(aAss, aShape1, Duration, NbSeq);
+  }
+  catch(Standard_Failure)
+    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::AddAnimation", SALOME::BAD_PARAM);
+
+  /* Create the CORBA servant holding the TopoDS_Shape */
+  GEOM_Animation_i * Animation_servant = new GEOM_Animation_i(tds, Ass, Shape1);
+  GEOM::GEOM_Animation_var Animation = GEOM::GEOM_Animation::_narrow(Animation_servant->_this());
+  
+  /* Create and set the name (IOR of shape converted into a string) */
+  string name_ior = _orb->object_to_string(Animation);
+  Animation->Name(name_ior.c_str());
+
+  /* add attributs S and mystr in a new label */
+  TDF_Label Lab = GC.AddAnimation(*tds, mainRefLab, Animation->Name());
+
+  TCollection_AsciiString entry;
+  TDF_Tool::Entry(Lab, entry);
+  const char *ent = entry.ToCString();
+
+  Animation->ShapeId(ent);
+  return Animation;  
+}
+
+
+//=================================================================================
+// function : SetPosition()
+// purpose  :
+//=================================================================================
+void GEOM_Gen_i::SetPosition(GEOM::GEOM_Contact_ptr Contact)
+  throw (SALOME::SALOME_Exception)
+{
+  try {
+    TDF_Label mainRefLab;
+    TDF_Tool::Label(myCurrentOCAFDoc->GetData(), Contact->ShapeId(), mainRefLab);
+    GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
+    
+    GEOM::GEOM_Position_var myGeomPosition = GEOM::GEOM_Position::_narrow(Contact->GetPosition());
+    GEOM::PointStruct P0 = myGeomPosition->GetOrigin();
+    GEOM::DirStruct VX = myGeomPosition->GetVX();
+    GEOM::DirStruct VY = myGeomPosition->GetVY();
+    GEOM::DirStruct VZ = myGeomPosition->GetVZ();
+
+    GC.SetPosition(mainRefLab, P0.x, P0.y, P0.z,
+                  VX.PS.x, VX.PS.y, VX.PS.z,
+                  VY.PS.x, VY.PS.y, VY.PS.z,
+                  VZ.PS.x, VZ.PS.y, VZ.PS.z);
+  }
+  catch(Standard_Failure)
+    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::SetPosition", SALOME::BAD_PARAM);
+
+  return;
+}
+
+
+//=================================================================================
+// function : SetRotation()
+// purpose  :
+//=================================================================================
+void GEOM_Gen_i::SetRotation(GEOM::GEOM_Contact_ptr Contact)
+  throw (SALOME::SALOME_Exception)
+{
+  try {
+    TDF_Label mainRefLab;
+    TDF_Tool::Label(myCurrentOCAFDoc->GetData(), Contact->ShapeId(), mainRefLab);
+    GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
+
+    GEOM::GEOM_Rotation_var myGeomRotation = GEOM::GEOM_Rotation::_narrow(Contact->GetRotation());
+    int aRot1 = myGeomRotation->GetRot1();
+    int aRot2 = myGeomRotation->GetRot2();
+    int aRot3 = myGeomRotation->GetRot3();
+    double aVal1 = myGeomRotation->GetVal1();
+    double aVal2 = myGeomRotation->GetVal2();
+    double aVal3 = myGeomRotation->GetVal3();
+
+    GC.SetRotation(mainRefLab, aRot1, aRot2, aRot3, aVal1, aVal2, aVal3);
+  }
+  catch(Standard_Failure)
+    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::SetRotation", SALOME::BAD_PARAM);
+
+  return;
+}
+
+
+//=================================================================================
+// function : SetTranslation()
+// purpose  :
+//=================================================================================
+void GEOM_Gen_i::SetTranslation(GEOM::GEOM_Contact_ptr Contact)
+  throw (SALOME::SALOME_Exception)
+{
+  try {
+    TDF_Label mainRefLab;
+    TDF_Tool::Label(myCurrentOCAFDoc->GetData(), Contact->ShapeId(), mainRefLab);
+    GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
+
+    GEOM::GEOM_Translation_var myGeomTranslation = GEOM::GEOM_Translation::_narrow(Contact->GetTranslation());
+    double aValX = myGeomTranslation->GetValX();
+    double aValY = myGeomTranslation->GetValY();
+    double aValZ = myGeomTranslation->GetValZ();
+
+    GC.SetTranslation(mainRefLab, aValX, aValY, aValZ);
+  }
+  catch(Standard_Failure)
+    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::SetTranslation", SALOME::BAD_PARAM);
+
+  return;
+}
+
+
 //=====================================================================================
 // EXPORTED METHODS
 //=====================================================================================
index 6d74fa198cf9708c5fa0ad995b77430ff80bd6d9..83a9a72c2f5279fb25c8943382e91eb0db082bb6 100644 (file)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(GEOM_Gen)
 #include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
 #include CORBA_SERVER_HEADER(SALOMEDS)
 
 #include "SALOME_Component_i.hxx"
 #include "GEOM_Shape_i.hh"
+#include "GEOM_Assembly_i.hh"
+#include "GEOM_Contact_i.hh"
+#include "GEOM_Animation_i.hh"
 
 #include "SALOME_NamingService.hxx"
 #include <iostream.h>
@@ -396,21 +400,28 @@ class GEOM_Gen_i: public POA_GEOM::GEOM_Gen,
   //---------------------------------------------------------------------//
   // Transformations Operations                                          //
   //---------------------------------------------------------------------//
-  // Copy 
-  GEOM::GEOM_Shape_ptr MakeCopy( GEOM::GEOM_Shape_ptr shape)
+  // Copy
+  GEOM::GEOM_Shape_ptr MakeCopy(GEOM::GEOM_Shape_ptr shape)
     throw (SALOME::SALOME_Exception) ;
 
   // Translation
-  GEOM::GEOM_Shape_ptr MakeTranslation( GEOM::GEOM_Shape_ptr shape,
+  GEOM::GEOM_Shape_ptr MakeTranslation(GEOM::GEOM_Shape_ptr shape,
                                       CORBA::Double x,
                                       CORBA::Double y,
                                       CORBA::Double z)
     throw (SALOME::SALOME_Exception) ;
   // Rotation
-  GEOM::GEOM_Shape_ptr MakeRotation( GEOM::GEOM_Shape_ptr shape,
+  GEOM::GEOM_Shape_ptr MakeRotation(GEOM::GEOM_Shape_ptr shape,
                                    const GEOM::AxisStruct& axis,
                                    CORBA::Double angle)
     throw (SALOME::SALOME_Exception) ;
+  // Position
+  GEOM::GEOM_Shape_ptr MakePosition(GEOM::GEOM_Shape_ptr shape1,
+                                   GEOM::GEOM_Shape_ptr shape2,
+                                   const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID1,
+                                   const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID2,
+                                   const CORBA::Short typeofshape)
+    throw (SALOME::SALOME_Exception) ;
   // Create a shape using a scale factor
   GEOM::GEOM_Shape_ptr MakeScaleTransform(GEOM::GEOM_Shape_ptr shape,
                                          const GEOM::PointStruct& theCenterOfScale,
@@ -603,6 +614,29 @@ class GEOM_Gen_i: public POA_GEOM::GEOM_Gen,
                                  CORBA::Double aMeshingDeflection)
     throw (SALOME::SALOME_Exception) ;
 
+  //-------------------------------------------------------------------//
+  // Specific method Kinematic                                         //
+  //-------------------------------------------------------------------//
+  GEOM::GEOM_Assembly_ptr InitAssembly() 
+    throw (SALOME::SALOME_Exception) ;
+  GEOM::GEOM_Contact_ptr AddContact(GEOM::GEOM_Assembly_ptr Ass, 
+                                   GEOM::GEOM_Shape_ptr Shape1,
+                                   GEOM::GEOM_Shape_ptr Shape2, 
+                                   const short type,
+                                   CORBA::Double step) 
+    throw (SALOME::SALOME_Exception) ;
+  GEOM::GEOM_Animation_ptr AddAnimation(GEOM::GEOM_Assembly_ptr Ass, 
+                                       GEOM::GEOM_Shape_ptr Shape1,
+                                       CORBA::Double Duration,
+                                       const short NbSeq) 
+    throw (SALOME::SALOME_Exception) ;
+  void SetPosition(GEOM::GEOM_Contact_ptr Contact) 
+    throw (SALOME::SALOME_Exception) ;
+  void SetRotation(GEOM::GEOM_Contact_ptr Contact) 
+    throw (SALOME::SALOME_Exception) ;
+  void SetTranslation(GEOM::GEOM_Contact_ptr Contact) 
+    throw (SALOME::SALOME_Exception) ;
+
 };
 
 #endif 
diff --git a/src/GEOM/GEOM_Position_i.cc b/src/GEOM/GEOM_Position_i.cc
new file mode 100644 (file)
index 0000000..3db2cf7
--- /dev/null
@@ -0,0 +1,147 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Position_i.cc
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+using namespace std;
+#include "GEOM_Position_i.hh"
+
+//=================================================================================
+// function : GEOM_Position_i() constructor (no arguments)
+// purpose  : for what now ?
+//=================================================================================
+GEOM_Position_i::GEOM_Position_i()
+{
+}
+
+
+//=================================================================================
+// function : constructor
+// purpose  : constructor for servant creation
+//=================================================================================
+GEOM_Position_i::GEOM_Position_i(const GEOM::PointStruct& P0, const GEOM::DirStruct& VX,
+                                const GEOM::DirStruct& VY, const GEOM::DirStruct& VZ)
+{
+
+  SetOrigin(P0);
+  SetVX(VX);
+  SetVY(VY);
+  SetVZ(VZ);
+  return;
+
+}
+
+
+//=================================================================================
+// function : destructor
+// purpose  : 
+//=================================================================================
+GEOM_Position_i::~GEOM_Position_i() {}
+
+
+//=================================================================================
+// function : SetOrigin()
+// purpose  : 
+//=================================================================================
+void GEOM_Position_i::SetOrigin(const GEOM::PointStruct& P0)
+  throw(SALOME::SALOME_Exception)
+{
+  _P0 = P0;
+  return;
+}
+
+//=================================================================================
+// function : SetVX()
+// purpose  : 
+//=================================================================================
+void GEOM_Position_i::SetVX(const GEOM::DirStruct& Vect)
+  throw(SALOME::SALOME_Exception)
+{
+  _VX = Vect;
+  return;
+}
+
+//=================================================================================
+// function : SetVY()
+// purpose  : 
+//=================================================================================
+void GEOM_Position_i::SetVY(const GEOM::DirStruct& Vect)
+  throw(SALOME::SALOME_Exception)
+{
+  _VY = Vect;
+  return;
+}
+
+//=================================================================================
+// function : SetVZ()
+// purpose  : 
+//=================================================================================
+void GEOM_Position_i::SetVZ(const GEOM::DirStruct& Vect)
+  throw(SALOME::SALOME_Exception)
+{
+  _VZ = Vect;
+  return;
+}
+
+//=================================================================================
+// function : GetOrigin()
+// purpose  : 
+//=================================================================================
+GEOM::PointStruct GEOM_Position_i::GetOrigin()
+  throw(SALOME::SALOME_Exception)
+{
+  return _P0;
+}
+
+//=================================================================================
+// function : GetVX()
+// purpose  : 
+//=================================================================================
+GEOM::DirStruct GEOM_Position_i::GetVX()
+  throw(SALOME::SALOME_Exception)
+{
+  return _VX;
+}
+
+//=================================================================================
+// function : GetVY()
+// purpose  : 
+//=================================================================================
+GEOM::DirStruct GEOM_Position_i::GetVY()
+  throw(SALOME::SALOME_Exception)
+{
+  return _VY;
+}
+
+//=================================================================================
+// function : GetVZ()
+// purpose  : 
+//=================================================================================
+GEOM::DirStruct GEOM_Position_i::GetVZ()
+  throw(SALOME::SALOME_Exception)
+{
+  return _VZ;
+}
diff --git a/src/GEOM/GEOM_Position_i.hh b/src/GEOM/GEOM_Position_i.hh
new file mode 100644 (file)
index 0000000..57b66a0
--- /dev/null
@@ -0,0 +1,84 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Position_i.hh
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+#ifndef __GEOM_POSITION_I_H__
+#define __GEOM_POSITION_I_H__
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
+
+//=====================================================================
+// GEOM_Position_i : class definition
+//=====================================================================
+class GEOM_Position_i: 
+  public POA_GEOM::GEOM_Position
+{
+public:
+  GEOM_Position_i();
+  GEOM_Position_i(const GEOM::PointStruct& P0, const GEOM::DirStruct& VX,
+                 const GEOM::DirStruct& VY, const GEOM::DirStruct& VZ);
+
+  ~GEOM_Position_i();
+
+private:
+  GEOM::PointStruct _P0;
+  GEOM::DirStruct _VX;
+  GEOM::DirStruct _VY;
+  GEOM::DirStruct _VZ;
+
+public:
+  void SetOrigin(const GEOM::PointStruct& P0)
+    throw (SALOME::SALOME_Exception);
+
+  void SetVX(const GEOM::DirStruct& Vect)
+    throw (SALOME::SALOME_Exception);
+
+  void SetVY(const GEOM::DirStruct& Vect)
+    throw (SALOME::SALOME_Exception);
+
+  void SetVZ(const GEOM::DirStruct& Vect)
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::PointStruct GetOrigin()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::DirStruct GetVX()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::DirStruct GetVY()
+    throw (SALOME::SALOME_Exception);
+
+  GEOM::DirStruct GetVZ()
+    throw (SALOME::SALOME_Exception);
+
+};
+
+#endif
diff --git a/src/GEOM/GEOM_Rotation_i.cc b/src/GEOM/GEOM_Rotation_i.cc
new file mode 100644 (file)
index 0000000..c0fa004
--- /dev/null
@@ -0,0 +1,135 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Rotation_i.cc
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+using namespace std;
+#include "GEOM_Rotation_i.hh"
+
+//=================================================================================
+// function : GEOM_Rotation_i() constructor (no arguments)
+// purpose  : for what now ?
+//=================================================================================
+GEOM_Rotation_i::GEOM_Rotation_i()
+{
+}
+
+
+//=================================================================================
+// function : constructor
+// purpose  : constructor for servant creation
+//=================================================================================
+GEOM_Rotation_i::GEOM_Rotation_i(CORBA::Long Rot1, CORBA::Long Rot2, CORBA::Long Rot3, 
+                                CORBA::Double Val1, CORBA::Double Val2, CORBA::Double Val3)
+{
+
+  SetRotation(Rot1, Rot2, Rot3, Val1, Val2, Val3);
+  return;
+
+}
+
+
+//=================================================================================
+// function : destructor
+// purpose  : 
+//=================================================================================
+GEOM_Rotation_i::~GEOM_Rotation_i() {}
+
+
+//=================================================================================
+// function : SetRotation()
+// purpose  : 
+//=================================================================================
+void GEOM_Rotation_i::SetRotation(CORBA::Long Rot1, CORBA::Long Rot2, CORBA::Long Rot3, 
+                                 CORBA::Double Val1, CORBA::Double Val2, CORBA::Double Val3)
+  throw(SALOME::SALOME_Exception)
+{
+  
+  _Rot1 = Rot1;
+  _Rot2 = Rot2;
+  _Rot3 = Rot3;
+
+  _Val1 = Val1;
+  _Val2 = Val2;
+  _Val3 = Val3;
+
+  return;
+
+}
+
+//=================================================================================
+// function : GetRot1()
+// purpose  : 
+//=================================================================================
+CORBA::Long GEOM_Rotation_i::GetRot1() throw(SALOME::SALOME_Exception)
+{
+  return _Rot1;
+}
+
+//=================================================================================
+// function : GetRot2()
+// purpose  : 
+//=================================================================================
+CORBA::Long GEOM_Rotation_i::GetRot2() throw(SALOME::SALOME_Exception)
+{
+  return _Rot2;
+}
+
+//=================================================================================
+// function : GetRot3()
+// purpose  : 
+//=================================================================================
+CORBA::Long GEOM_Rotation_i::GetRot3() throw(SALOME::SALOME_Exception)
+{
+  return _Rot3;
+}
+
+//=================================================================================
+// function : GetVal1()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Rotation_i::GetVal1() throw(SALOME::SALOME_Exception)
+{
+  return _Val1;
+}
+
+//=================================================================================
+// function : GetVal2()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Rotation_i::GetVal2() throw(SALOME::SALOME_Exception)
+{
+  return _Val2;
+}
+
+//=================================================================================
+// function : GetVal3()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Rotation_i::GetVal3() throw(SALOME::SALOME_Exception)
+{
+  return _Val3;
+}
diff --git a/src/GEOM/GEOM_Rotation_i.hh b/src/GEOM/GEOM_Rotation_i.hh
new file mode 100644 (file)
index 0000000..5980730
--- /dev/null
@@ -0,0 +1,85 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Rotation_i.hh
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+#ifndef __GEOM_ROTATION_I_H__
+#define __GEOM_ROTATION_I_H__
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
+
+//=====================================================================
+// GEOM_Rotation_i : class definition
+//=====================================================================
+class GEOM_Rotation_i: 
+  public POA_GEOM::GEOM_Rotation
+{
+public:
+  GEOM_Rotation_i();
+  GEOM_Rotation_i(CORBA::Long Rot1, CORBA::Long Rot2, CORBA::Long Rot3, 
+                 CORBA::Double Val1, CORBA::Double Val2, CORBA::Double Val3);
+
+  ~GEOM_Rotation_i();
+
+private:
+  CORBA::Long _Rot1;
+  CORBA::Long _Rot2;
+  CORBA::Long _Rot3;
+
+  CORBA::Double _Val1;
+  CORBA::Double _Val2;
+  CORBA::Double _Val3;
+
+public:
+  void SetRotation(CORBA::Long Rot1, CORBA::Long Rot2, CORBA::Long Rot3, 
+                  CORBA::Double Val1, CORBA::Double Val2, CORBA::Double Val3)
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Long GetRot1()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Long GetRot2()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Long GetRot3()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetVal1()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetVal2()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetVal3()
+    throw (SALOME::SALOME_Exception);
+
+};
+
+#endif
diff --git a/src/GEOM/GEOM_Translation_i.cc b/src/GEOM/GEOM_Translation_i.cc
new file mode 100644 (file)
index 0000000..a92d47a
--- /dev/null
@@ -0,0 +1,101 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Translation_i.cc
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+using namespace std;
+#include "GEOM_Translation_i.hh"
+
+//=================================================================================
+// function : GEOM_Translation_i() constructor (no arguments)
+// purpose  : for what now ?
+//=================================================================================
+GEOM_Translation_i::GEOM_Translation_i()
+{
+}
+
+
+//=================================================================================
+// function : constructor
+// purpose  : constructor for servant creation
+//=================================================================================
+GEOM_Translation_i::GEOM_Translation_i(CORBA::Double ValX, CORBA::Double ValY, CORBA::Double ValZ)
+{
+
+  SetTranslation(ValX, ValY, ValZ);
+  return;
+
+}
+
+
+//=================================================================================
+// function : destructor
+// purpose  : 
+//=================================================================================
+GEOM_Translation_i::~GEOM_Translation_i() {}
+
+
+//=================================================================================
+// function : SetTranslation()
+// purpose  : 
+//=================================================================================
+void GEOM_Translation_i::SetTranslation(CORBA::Double ValX, CORBA::Double ValY, CORBA::Double ValZ)
+  throw(SALOME::SALOME_Exception)
+{
+  
+  _ValX = ValX;
+  _ValY = ValY;
+  _ValZ = ValZ;
+  return;
+
+}
+
+//=================================================================================
+// function : GetValX()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Translation_i::GetValX() throw(SALOME::SALOME_Exception)
+{
+  return _ValX;
+}
+
+//=================================================================================
+// function : GetValY()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Translation_i::GetValY() throw(SALOME::SALOME_Exception)
+{
+  return _ValY;
+}
+
+//=================================================================================
+// function : GetValZ()
+// purpose  : 
+//=================================================================================
+CORBA::Double GEOM_Translation_i::GetValZ() throw(SALOME::SALOME_Exception)
+{
+  return _ValZ;
+}
diff --git a/src/GEOM/GEOM_Translation_i.hh b/src/GEOM/GEOM_Translation_i.hh
new file mode 100644 (file)
index 0000000..9232077
--- /dev/null
@@ -0,0 +1,70 @@
+//  GEOM GEOM : 
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : GEOM_Translation_i.hh
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header$
+
+#ifndef __GEOM_TRANSLATION_I_H__
+#define __GEOM_TRANSLATION_I_H__
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
+
+//=====================================================================
+// GEOM_Translation_i : class definition
+//=====================================================================
+class GEOM_Translation_i: 
+  public POA_GEOM::GEOM_Translation
+{
+public:
+  GEOM_Translation_i();
+  GEOM_Translation_i(CORBA::Double ValX, CORBA::Double ValY, CORBA::Double ValZ);
+
+  ~GEOM_Translation_i();
+
+private:
+  CORBA::Double _ValX;
+  CORBA::Double _ValY;
+  CORBA::Double _ValZ;
+
+public:
+  void SetTranslation(CORBA::Double ValX, CORBA::Double ValY, CORBA::Double ValZ)
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetValX()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetValY()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Double GetValZ()
+    throw (SALOME::SALOME_Exception);
+
+};
+
+#endif
index 738e9ae649be5aeff5dde623fb0e5af10c45715c..03e5d9640a8f19914aac859ecc6d3f884b420884 100644 (file)
@@ -37,8 +37,8 @@ VPATH=.:@srcdir@:@top_srcdir@/idl
 # Libraries targets
 
 LIB = libGEOMEngine.la
-LIB_SRC = GEOM_Shape_i.cc GEOM_Gen_i.cc
-LIB_SERVER_IDL = SALOME_Component.idl SALOMEDS.idl SALOME_Exception.idl GEOM_Gen.idl GEOM_Shape.idl
+LIB_SRC = GEOM_Shape_i.cc GEOM_Position_i.cc GEOM_Rotation_i.cc GEOM_Translation_i.cc GEOM_Contact_i.cc GEOM_Assembly_i.cc GEOM_Animation_i.cc GEOM_Gen_i.cc
+LIB_SERVER_IDL = SALOME_Component.idl SALOMEDS.idl SALOME_Exception.idl GEOM_Gen.idl GEOM_Shape.idl GEOM_Kinematic.idl
 
 # Executables targets
 BIN = 
@@ -51,7 +51,7 @@ EXPORT_HEADERS =
 # additionnal information to compil and link file
 CPPFLAGS += $(OCC_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome
 CXXFLAGS += $(OCC_CXXFLAGS) -I${KERNEL_ROOT_DIR}/include/salome
-LDFLAGS  += -lGEOMDS -lTOOLSDS -lSalomeNS -lSalomeContainer -lGEOMPartition -lGEOMArchimede $(CAS_LDPATH) -lTKIGES -lTKSTEP -lTKFillet -lTKOffset -L${KERNEL_ROOT_DIR}/lib/salome
+LDFLAGS  += -lGEOMDS -lTOOLSDS -lSalomeNS -lSalomeContainer -lGEOMPartition -lGEOMArchimede -lGEOMKinematic $(CAS_LDPATH) -lTKIGES -lTKSTEP -lTKFillet -lTKOffset -L${KERNEL_ROOT_DIR}/lib/salome
 
 # additional file to be cleaned
 MOSTLYCLEAN =
index 05992b8325d5ccbf3c84710ca42b8e34569db63e..f3c845c66898e0a44cd3848bba69f75e42494624 100644 (file)
@@ -206,7 +206,28 @@ bool GEOMBase::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString
       int id = popup->idAt(0); // separator
       if(id < 0)
        popup->removeItem(id);
-           
+      
+      if(theObject.compare("Assembly") == 0 || theObject.compare("Animation") == 0) {
+       popup->removeItem(QAD_DisplayOnly_Popup_ID);
+       popup->removeItem(QAD_Display_Popup_ID);
+       popup->removeItem(QAD_Erase_Popup_ID);
+       return true;
+      }
+      else if(theObject.compare("Contact") == 0) {
+       Standard_Boolean testResult;
+       Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
+       GEOM::GEOM_Contact_ptr myGeomContact = myGeomBase->ConvertIOinContact(IO, testResult);
+       int type = myGeomContact->GetType();
+       if(type == 0 || type == 2) //EMBEDDING || SLIDE
+         popup->removeItem(6132); //ROTATION
+       if(type == 0 || type == 1 || type == 4) //EMBEDDING || PIVOT || SPHERICAL
+         popup->removeItem(6133); //TRANSLATION
+       popup->removeItem(QAD_DisplayOnly_Popup_ID);
+       popup->removeItem(QAD_Display_Popup_ID);
+       popup->removeItem(QAD_Erase_Popup_ID);
+       return true;
+      }
+
       // checking for GEOM label in the selected list
       SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
       Handle(SALOME_InteractiveObject) anIObject;
@@ -349,6 +370,27 @@ bool GEOMBase::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString
       if(id < 0)
        popup->removeItem(id);
 
+      if(theObject.compare("Assembly") == 0 || theObject.compare("Animation") == 0) {
+       popup->removeItem(QAD_DisplayOnly_Popup_ID);
+       popup->removeItem(QAD_Display_Popup_ID);
+       popup->removeItem(QAD_Erase_Popup_ID);
+       return true;
+      }
+      else if(theObject.compare("Contact") == 0) {
+       Standard_Boolean testResult;
+       Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
+       GEOM::GEOM_Contact_ptr myGeomContact = myGeomBase->ConvertIOinContact(IO, testResult);
+       int type = myGeomContact->GetType();
+       if(type == 0 || type == 2) //EMBEDDING || SLIDE
+         popup->removeItem(6132); //ROTATION
+       if(type == 0 || type == 1 || type == 4) //EMBEDDING || PIVOT || SPHERICAL
+         popup->removeItem(6133); //TRANSLATION
+       popup->removeItem(QAD_DisplayOnly_Popup_ID);
+       popup->removeItem(QAD_Display_Popup_ID);
+       popup->removeItem(QAD_Erase_Popup_ID);
+       return true;
+      }
+
       // checking for GEOM label in the selected list
       SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
       Handle(SALOME_InteractiveObject) anIObject;
@@ -1187,6 +1229,102 @@ GEOM::GEOM_Shape_ptr GEOMBase::ConvertIOinGEOMShape(const Handle(SALOME_Interact
 }
 
 
+//=======================================================================
+// function : ConvertIOinAssembly()
+// purpose  : 
+//=======================================================================
+GEOM::GEOM_Assembly_ptr GEOMBase::ConvertIOinAssembly(const Handle(SALOME_InteractiveObject)& IO, Standard_Boolean& testResult)
+{
+  GEOM::GEOM_Assembly_var aAss;
+  testResult = false;
+  
+  /* case SObject */
+  if(IO->hasEntry()) {
+    SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+    SALOMEDS::SObject_var obj = aStudy->FindObjectID(IO->getEntry());
+    SALOMEDS::GenericAttribute_var anAttr;
+    SALOMEDS::AttributeIOR_var anIOR;
+    if(!obj->_is_nil()) {
+      if(obj->FindAttribute(anAttr, "AttributeIOR")) {
+       anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+       if(strcmp(anIOR->Value(),"") != 0){
+         CORBA::Object_var anObject = aStudy->ConvertIORToObject(anIOR->Value());
+         if(!CORBA::is_nil(anObject))
+           aAss = GEOM::GEOM_Assembly::_narrow(anObject.in());
+       }
+       if(!CORBA::is_nil(aAss))
+         testResult = true;
+      }
+    }
+  }
+  return aAss._retn();
+}
+
+
+//=======================================================================
+// function : ConvertIOinContact()
+// purpose  : 
+//=======================================================================
+GEOM::GEOM_Contact_ptr GEOMBase::ConvertIOinContact(const Handle(SALOME_InteractiveObject)& IO, Standard_Boolean& testResult)
+{
+  GEOM::GEOM_Contact_var aContact;
+  testResult = false;
+  
+  /* case SObject */
+  if(IO->hasEntry()) {
+    SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+    SALOMEDS::SObject_var obj = aStudy->FindObjectID(IO->getEntry());
+    SALOMEDS::GenericAttribute_var anAttr;
+    SALOMEDS::AttributeIOR_var anIOR;
+    if(!obj->_is_nil()) {
+      if(obj->FindAttribute(anAttr, "AttributeIOR")) {
+       anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+       if(strcmp(anIOR->Value(),"") != 0){
+         CORBA::Object_var anObject = aStudy->ConvertIORToObject(anIOR->Value());
+         if(!CORBA::is_nil(anObject))
+           aContact = GEOM::GEOM_Contact::_narrow(anObject.in());
+       }
+       if(!CORBA::is_nil(aContact))
+         testResult = true;
+      }
+    }
+  }
+  return aContact._retn();
+}
+
+
+//=======================================================================
+// function : ConvertIOinContact()
+// purpose  : 
+//=======================================================================
+GEOM::GEOM_Animation_ptr GEOMBase::ConvertIOinAnimation(const Handle(SALOME_InteractiveObject)& IO, Standard_Boolean& testResult)
+{
+  GEOM::GEOM_Animation_var aAnimation;
+  testResult = false;
+  
+  /* case SObject */
+  if(IO->hasEntry()) {
+    SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+    SALOMEDS::SObject_var obj = aStudy->FindObjectID(IO->getEntry());
+    SALOMEDS::GenericAttribute_var anAttr;
+    SALOMEDS::AttributeIOR_var anIOR;
+    if(!obj->_is_nil()) {
+      if(obj->FindAttribute(anAttr, "AttributeIOR")) {
+       anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+       if(strcmp(anIOR->Value(),"") != 0){
+         CORBA::Object_var anObject = aStudy->ConvertIORToObject(anIOR->Value());
+         if(!CORBA::is_nil(anObject))
+           aAnimation = GEOM::GEOM_Animation::_narrow(anObject.in());
+       }
+       if(!CORBA::is_nil(aAnimation))
+         testResult = true;
+      }
+    }
+  }
+  return aAnimation._retn();
+}
+
+
 //=======================================================================
 // function : ConvertListOfIOInListOfIOR()
 // purpose  : 
index db3bb1daa8b22993527ad4a14ccf6df6d67a0c57..12cbd728fd64f7c19c6a5dbcdc1b94444e324130 100644 (file)
@@ -72,6 +72,12 @@ public :
   bool GetShapeTypeString(const TopoDS_Shape& aShape, Standard_CString& aTypeString);
 
   /* Convertions */
+  GEOM::GEOM_Assembly_ptr ConvertIOinAssembly(const Handle(SALOME_InteractiveObject)& IO,
+                                             Standard_Boolean& testResult);
+  GEOM::GEOM_Contact_ptr ConvertIOinContact(const Handle(SALOME_InteractiveObject)& IO,
+                                           Standard_Boolean& testResult);
+  GEOM::GEOM_Animation_ptr ConvertIOinAnimation(const Handle(SALOME_InteractiveObject)& IO,
+                                               Standard_Boolean& testResult);
   GEOM::GEOM_Shape_ptr ConvertIOinGEOMShape(const Handle(SALOME_InteractiveObject)& IO, 
                                            Standard_Boolean& testResult);
   Handle(GEOM_AISShape) ConvertIOinGEOMAISShape(const Handle(SALOME_InteractiveObject)& IO,
index 42082e5fe0880c5093e7844cb6efca3a6906d1c1..0ce139cad27a01c769ba0b75594bf8efa9446582 100644 (file)
@@ -52,7 +52,8 @@ LIB_MOC = \
 
 LIB_CLIENT_IDL = SALOME_Exception.idl \
                 SALOMEDS.idl \
-                SALOMEDS_Attributes.idl
+                SALOMEDS_Attributes.idl \
+                GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 32db3e2204940c449419088c49c1ae96226814c1..726c35a98bf338ad6f3b8fc1b355f16203d01006 100644 (file)
@@ -42,7 +42,7 @@ EXPORT_HEADERS = \
 
 LIB = libGEOMClient.la
 LIB_SRC = GEOM_Client.cxx
-LIB_SERVER_IDL = SALOME_Component.idl SALOMEDS.idl SALOME_Exception.idl GEOM_Shape.idl GEOM_Gen.idl
+LIB_SERVER_IDL = SALOME_Component.idl SALOMEDS.idl SALOME_Exception.idl GEOM_Shape.idl GEOM_Gen.idl GEOM_Kinematic.idl
 
 # Executables targets
 BIN = 
index ed64a379c1efce8595017238020a0e111ee34b05..08e173903dc7b7592cca2b86166a3a658672d91b 100644 (file)
@@ -18,6 +18,18 @@ msgstr "select1.png"
 msgid "ICON_OBJBROWSER_Geometry"
 msgstr "geometry.png"
 
+#: 
+msgid "ICON_OBJBROWSER_ANIMATION"
+msgstr "tree_animation.png"
+
+#: 
+msgid "ICON_OBJBROWSER_ASSEMBLY"
+msgstr "tree_assembly.png"
+
+#: 
+msgid "ICON_OBJBROWSER_CONTACT"
+msgstr "tree_contact.png"
+
 #: QAD_ObjectBrowser.cxx:140
 msgid "ICON_OBJBROWSER_COMPOUND"
 msgstr "tree_compound.png"
@@ -358,5 +370,54 @@ msgstr "bezier.png"
 msgid "ICON_DLG_INTERPOL"
 msgstr "interpol.png"
 
+#PositionDlg
+msgid "ICON_DLG_POSITION"
+msgstr "position.png"
+
+#PositionDlg
+msgid "ICON_DLG_POS_POINT"
+msgstr "positionpoint.png"
+
+#PositionDlg
+msgid "ICON_DLG_POS_VECT"
+msgstr "positionvect.png"
+
+#PositionDlg
+msgid "ICON_DLG_POS_FACE"
+msgstr "positionface.png"
+
+#: 
+msgid "ICON_ANIMATION"
+msgstr "animation.png"
+
+#: 
+msgid "ICON_ASSEMBLY"
+msgstr "assembly.png"
+
+#: 
+msgid "ICON_CONTACT"
+msgstr "contact.png"
+
+#: 
+msgid "ICON_ANIM_FIRST"
+msgstr "anim_first.png"
+
+#: 
+msgid "ICON_ANIM_PREV"
+msgstr "anim_prev.png"
+
+#: 
+msgid "ICON_ANIM_PLAY"
+msgstr "anim_play.png"
+
+#: 
+msgid "ICON_ANIM_STOP"
+msgstr "anim_stop.png"
 
+#: 
+msgid "ICON_ANIM_NEXT"
+msgstr "anim_next.png"
 
+#: 
+msgid "ICON_ANIM_LAST"
+msgstr "anim_last.png"
index 34834bc660abe320038e8384dd6b452b4a9ef109..bee59ab470cc00b7f6a88c3469ce22e51deff777 100644 (file)
@@ -1207,13 +1207,13 @@ msgid "GEOM_SKETCHER_EL"
 msgstr "Element Type"
 
 msgid "GEOM_BUT_CLOSE_SKETCH"
-msgstr "Close Sketcher"
+msgstr "Close Sketch"
 
 msgid "GEOM_BUT_END_SKETCH"
-msgstr "End Sketcher"
+msgstr "End Sketch"
 
 msgid "GEOM_SKETCHER_TITLE"
-msgstr "Spline Construction"
+msgstr "Sketch Construction"
 
 msgid "GEOM_SKETCHER_POINT"
 msgstr "Point"
@@ -1314,3 +1314,101 @@ msgstr "Fillet can't be computed with radius %1"
 msgid "GEOM_CHAMFER_ABORT"
 msgstr "Chamfer can't be computed with %1 and %2"
 
+msgid "GEOM_CONTACT_TITLE"
+msgstr "Add Contact"
+
+msgid "GEOM_ASSEMBLY"
+msgstr "Assembly"
+
+msgid "GEOM_CONTACT"
+msgstr "Contact"
+
+msgid "GEOM_TYPE"
+msgstr "Type"
+
+msgid "GEOM_KROTATION_TITLE"
+msgstr "Edit Rotation"
+
+msgid "GEOM_KTRANSLATION_TITLE"
+msgstr "Edit Translation"
+
+msgid "GEOM_KROTATION"
+msgstr "Rotation"
+
+msgid "GEOM_KTRANSLATION"
+msgstr "Translation"
+
+msgid "GEOM_VALUE"
+msgstr "Value"
+
+msgid "GEOM_1ROT"
+msgstr "1st Rot."
+
+msgid "GEOM_2ROT"
+msgstr "2nd Rot."
+
+msgid "GEOM_3ROT"
+msgstr "3rd Rot."
+
+msgid "GEOM_KPOSITION_TITLE"
+msgstr "Set Position"
+
+msgid "GEOM_KPOSITION"
+msgstr "Position"
+
+msgid "GEOM_POS"
+msgstr "Position :"
+
+msgid "GEOM_VX"
+msgstr "VX :"
+
+msgid "GEOM_VY"
+msgstr "VY :"
+
+msgid "GEOM_VZ"
+msgstr "VZ :"
+
+msgid "GEOM_ANIMATION_TITLE"
+msgstr "Add Animation"
+
+msgid "GEOM_ANIMATION"
+msgstr "Animation"
+
+msgid "GEOM_FRAME"
+msgstr "Frame"
+
+msgid "GEOM_DURATION"
+msgstr "Duration"
+
+msgid "GEOM_NBSEQ"
+msgstr "Nb. Sequences"
+
+msgid "GEOM_ANIM_EXPORT"
+msgstr "Export Animation"
+
+msgid "GEOM_ANIM_SHADING"
+msgstr "In Shading"
+
+msgid "GEOM_ANIM_TITLE"
+msgstr "Animate an Assembly"
+
+msgid "GEOM_ANIM"
+msgstr "Animation"
+
+msgid "GEOM_ANIM_INLOOP"
+msgstr "In Loop"
+
+msgid "GEOM_POSITION"
+msgstr "Position"
+
+msgid "GEOM_POSITION_TITLE"
+msgstr "Position Of An Object"
+
+msgid "GEOM_POS_VERTEX"
+msgstr "Position by Points"
+
+msgid "GEOM_POS_EDGE"
+msgstr "Position by Edges"
+
+msgid "GEOM_POS_FACE"
+msgstr "Position by Faces"
index 9bde4dfce7ef38ef9f6052e8901af9c53ccff4ef..bdf18ab6fcc1ccb2d18f870db58ded9138206248 100644 (file)
@@ -34,6 +34,10 @@ msgstr "&Ok"
 msgid "GEOM_BUT_YES"
 msgstr "&Oui"
 
+#Button No
+msgid "GEOM_BUT_NO"
+msgstr "&Non"
+
 #Button Help
 msgid "GEOM_BUT_HELP"
 msgstr "&Aide"
@@ -153,6 +157,10 @@ msgstr "Fichiers IGES ( *.iges *.igs )"
 msgid "GEOM_MEN_IMPORT_STEP"
 msgstr "Fichiers STEP ( *.step *.stp )"
 
+#: GeometryGUI.cxx:3763
+msgid "GEOM_MEN_LOAD_SCRIPT"
+msgstr "Fichiers PYTHON ( *.py )"
+
 #: GeometryGUI.cxx:2931
 msgid "GEOM_MEN_ISOS"
 msgstr "Choisir un nombre d'isos"
@@ -216,6 +224,10 @@ msgstr "Le rayon est nul"
 msgid "GEOM_WRN_WARNING"
 msgstr "Avertissement"
 
+#: GeometryGUI.cxx:3854
+msgid "GEOM_REALLY_DELETE"
+msgstr "Voulez-vous supprimer l'object(s) ?"
+
 #
 #==============================================================================
 #
@@ -265,7 +277,7 @@ msgid "GEOM_CENTER_POINT"
 msgstr "Point Centre"
 
 #Diagonal Points
-msgid "GEOM__DIAGONAL_POINTS"
+msgid "GEOM_DIAGONAL_POINTS"
 msgstr "Points Diagonaux"
 
 #Central Point
@@ -544,6 +556,21 @@ msgstr "Boite"
 msgid "GEOM_CIRCLE"
 msgstr "Cercle"
 
+#Ellipse
+msgid "GEOM_ELLIPSE"
+msgstr "Ellipse"
+
+msgid "GEOM_ELLIPSE_TITLE"
+msgstr "Construction d'Ellipses"
+
+#Radius major
+msgid "GEOM_RADIUS_MAJOR"
+msgstr "Rayon max. :"
+
+#Radius minor
+msgid "GEOM_RADIUS_MINOR"
+msgstr "Rayon min. :"
+
 #Compound
 msgid "GEOM_COMPOUND"
 msgstr "Compound"
@@ -992,9 +1019,9 @@ msgstr "Coudre des Topologies"
 msgid "GEOM_SHELL_TITLE"
 msgstr "Construction d'une Shell"
 
-#: GeometryGUI_ShellDlg.cxx:74
-msgid "GEOM_SHELL_LIST"
-msgstr "List de Faces Connectees"
+#: GeometryGUI_SolidDlg.cxx:74
+msgid "GEOM_SOLID_TITLE"
+msgstr "Construction d'un Solid"
 
 #: GeometryGUI_SphereDlg.cxx:50
 msgid "GEOM_SPHERE_TITLE"
@@ -1091,11 +1118,11 @@ msgid "GEOM_WIRE_CONNECT"
 msgstr "Creation d'un Wire a partir de wires/edges connectes"
 
 #: GeometryGUI_WorkingPlaneDlg.cxx:50
-msgid "GEOM_WPALNE_TITLE"
+msgid "GEOM_WPLANE_TITLE"
 msgstr "plan de travail"
 
 #: GeometryGUI_WorkingPlaneDlg.cxx:107
-msgid "GEOM_WPALNE_FACE"
+msgid "GEOM_WPLANE_FACE"
 msgstr "Plan Ou Face plane"
 
 #: GeometryGUI_multiTranslationDlg.cxx:107
@@ -1137,9 +1164,252 @@ msgstr "Filaire"
 msgid "GEOM_MEN_SHADING"
 msgstr "Ombré"
 
+msgid "GEOM_RECONSTRUCTION_LIMIT"
+msgstr "Limite de Reconstruction"
+
+msgid "GEOM_SUPPRESS_RESULT"
+msgstr "Supprimer le Resultat"
+
+msgid "GEOM_SUPPRESS_RESULT_INSIDE"
+msgstr "Intérieur"
+
+msgid "GEOM_SUPPRESS_RESULT_OUTSIDE"
+msgstr "Extérieur"
+
+msgid "GEOM_RECONSTRUCTION_LIMIT_SHAPE"
+msgstr "Shape"
+msgid "GEOM_RECONSTRUCTION_LIMIT_SOLID"
+msgstr "Solid"
+msgid "GEOM_RECONSTRUCTION_LIMIT_SHELL"
+msgstr "Shell"
+msgid "GEOM_RECONSTRUCTION_LIMIT_FACE"
+msgstr "Face"
+msgid "GEOM_RECONSTRUCTION_LIMIT_WIRE"
+msgstr "Wire"
+msgid "GEOM_RECONSTRUCTION_LIMIT_EDGE"
+msgstr "Edge"
+msgid "GEOM_RECONSTRUCTION_LIMIT_VERTEX"
+msgstr "Vertex"
+
+msgid "GEOM_SPLINE_TITLE"
+msgstr "Construction de Splines"
+msgid "GEOM_SPLINE"
+msgstr "Spline"
+msgid "GEOM_BEZIER"
+msgstr "Bezier"
+msgid "GEOM_INTERPOL"
+msgstr "Interpolation"
+
+#
+#==============================================================================
+#
+
+msgid "GEOM_SKETCHER_EL"
+msgstr "Type d'Element"
+
+msgid "GEOM_BUT_CLOSE_SKETCH"
+msgstr "Fermer Sketch"
+
+msgid "GEOM_BUT_END_SKETCH"
+msgstr "Terminer Sketch"
+
+msgid "GEOM_SKETCHER_TITLE"
+msgstr "Construction de Sketch"
+
+msgid "GEOM_SKETCHER_POINT"
+msgstr "Point"
+
+msgid "GEOM_SKETCHER_SEGMENT"
+msgstr "Sègment"
+
+msgid "GEOM_SKETCHER_ARC"
+msgstr "Arc"
+
+msgid "GEOM_SKETCHER_DIR"
+msgstr "Direction"
+
+msgid "GEOM_SKETCHER_POINT2"
+msgstr "Point :"
+
+msgid "GEOM_SKETCHER_DEST"
+msgstr "Destination"
+
+msgid "GEOM_SKETCHER_ABS"
+msgstr "Absolu"
+
+msgid "GEOM_SKETCHER_REL"
+msgstr "Relative"
+
+msgid "GEOM_SKETCHER_SEL"
+msgstr "Sélection"
+
+msgid "GEOM_SKETCHER_ANGLE"
+msgstr "Angle"
+
+msgid "GEOM_SKETCHER_PER"
+msgstr "Perpendiculaire"
+
+msgid "GEOM_SKETCHER_TAN"
+msgstr "Tangent"
+
+msgid "GEOM_SKETCHER_VXVY"
+msgstr "VX-VY"
+
+msgid "GEOM_SKETCHER_LENGTH"
+msgstr "Longueur"
+
+msgid "GEOM_SKETCHER_X"
+msgstr "X"
+
+msgid "GEOM_SKETCHER_Y"
+msgstr "Y"
+
+msgid "GEOM_SKETCHER_X2"
+msgstr "X :"
+
+msgid "GEOM_SKETCHER_Y2"
+msgstr "Y :"
+
+msgid "GEOM_SKETCHER_X3"
+msgstr "Abs. X :"
+
+msgid "GEOM_SKETCHER_Y3"
+msgstr "Abs. Y :"
+
+msgid "GEOM_SKETCHER_DX2"
+msgstr "DX :"
+
+msgid "GEOM_SKETCHER_DY2"
+msgstr "DY :"
+
+msgid "GEOM_SKETCHER_VX2"
+msgstr "VX :"
+
+msgid "GEOM_SKETCHER_VY2"
+msgstr "VY :"
+
+msgid "GEOM_SKETCHER_LENGTH2"
+msgstr "Longueur :"
+
+msgid "GEOM_SKETCHER_ANGLE2"
+msgstr "Angle :"
+
+msgid "GEOM_SKETCHER_RADIUS2"
+msgstr "Radius :"
+
+msgid "GEOM_SKETCHER_UNDO"
+msgstr "Undo"
+
+msgid "GEOM_SKETCHER_APPLY"
+msgstr "Appliquer"
+
+msgid "GEOM_SKETCHER_VALUES"
+msgstr "Valeurs"
+
+msgid "GEOM_SKETCHER_TYPE"
+msgstr "Type"
+
 msgid "GEOM_FILLET_ABORT"
 msgstr "Le congé ne peut-être realisé avec un rayon de %1 "
 
 msgid "GEOM_CHAMFER_ABORT"
 msgstr "Le chanfrein ne peut-être realisé avec %1 et %2 "
 
+msgid "GEOM_CONTACT_TITLE"
+msgstr "Nouveau Contact"
+
+msgid "GEOM_ASSEMBLY"
+msgstr "Assemblage"
+
+msgid "GEOM_CONTACT"
+msgstr "Contact"
+
+msgid "GEOM_TYPE"
+msgstr "Type"
+
+msgid "GEOM_KROTATION_TITLE"
+msgstr "Modif. Rotation"
+
+msgid "GEOM_KTRANSLATION_TITLE"
+msgstr "Modif. Translation"
+
+msgid "GEOM_KROTATION"
+msgstr "Rotation"
+
+msgid "GEOM_KTRANSLATION"
+msgstr "Translation"
+
+msgid "GEOM_VALUE"
+msgstr "Valeur"
+
+msgid "GEOM_1ROT"
+msgstr "1e Rot."
+
+msgid "GEOM_2ROT"
+msgstr "2e Rot."
+
+msgid "GEOM_3ROT"
+msgstr "3e Rot."
+
+msgid "GEOM_KPOSITION_TITLE"
+msgstr "Modif. Position"
+
+msgid "GEOM_KPOSITION"
+msgstr "Position"
+
+msgid "GEOM_POS"
+msgstr "Position :"
+
+msgid "GEOM_VX"
+msgstr "VX :"
+
+msgid "GEOM_VY"
+msgstr "VY :"
+
+msgid "GEOM_VZ"
+msgstr "VZ :"
+
+msgid "GEOM_ANIMATION_TITLE"
+msgstr "Nouvelle Animation"
+
+msgid "GEOM_ANIMATION"
+msgstr "Animation"
+
+msgid "GEOM_FRAME"
+msgstr "Bati"
+
+msgid "GEOM_DURATION"
+msgstr "Durée"
+
+msgid "GEOM_NBSEQ"
+msgstr "Nb. Séquences"
+
+msgid "GEOM_ANIM_EXPORT"
+msgstr "Export Animation"
+
+msgid "GEOM_ANIM_SHADING"
+msgstr "En Shading"
+
+msgid "GEOM_ANIM_TITLE"
+msgstr "Animer un Assemblage"
+
+msgid "GEOM_ANIM"
+msgstr "Animation"
+
+msgid "GEOM_ANIM_INLOOP"
+msgstr "En boucle"
+
+msgid "GEOM_POSITION"
+msgstr "Position"
+
+msgid "GEOM_POSITION_TITLE"
+msgstr "Position d'un Objet"
+
+msgid "GEOM_POS_VERTEX"
+msgstr "Position par Points"
+
+msgid "GEOM_POS_EDGE"
+msgstr "Position par Edges"
+
+msgid "GEOM_POS_FACE"
+msgstr "Position par Faces"
index ffb2730154c1d2a036bb942bb4f7ec057885093d..9215429ea8abe0048e9ba9b761159338a6178e63 100644 (file)
@@ -51,7 +51,7 @@ LIB_SRC =     GEOMContext.cxx
 LIB_MOC = \
                GEOMContext.h
 
-LIB_CLIENT_IDL = SALOME_Exception.idl
+LIB_CLIENT_IDL = SALOME_Exception.idl GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 17f7e5764e4f3f0181b77776cbd0f34973c4c7e0..aad0042005fc83af52fc54954d45f8c220421db4 100644 (file)
@@ -34,9 +34,16 @@ using namespace std;
 #include <TNaming_NamedShape.hxx>
 #include <TDataStd_Name.hxx>
 #include <TDataStd_Integer.hxx>
+#include <TDataStd_Real.hxx>
+#include <TDataStd_RealArray.hxx>
+#include <TDataStd_IntegerArray.hxx>
 #include <TDF_Reference.hxx>
 #include <TNaming_Tool.hxx>
 #include <TDF_ChildIterator.hxx>
+#include <TDF_Tool.hxx>
+
+#include "Kinematic_Contact.hxx"
+#include "Kinematic_Animation.hxx"
 
 
 //=======================================================================
@@ -264,9 +271,10 @@ Standard_Boolean GEOMDS_Commands::ClearAllIOR(const TDF_Label& aLabel)
     TDF_Label L = it.Value() ;
     if( L.FindAttribute(TDataStd_Name::GetID(), anAttName) ) {
       notTested = L.ForgetAttribute(TDataStd_Name::GetID()) ;
+      if(notTested)
+       MESSAGE("in GEOMDS_Commands::ClearAllIOR : IOR CLEARED" )
+    ClearAllIOR(L);
     }
-    if(notTested)
-      MESSAGE("in GEOMDS_Commands::ClearAllIOR : IOR CLEARED" )
   }
   return true ;
 }
@@ -300,3 +308,368 @@ Standard_Boolean GEOMDS_Commands::ReturnNameIOR(const TDF_Label& aLabel,
     return true ;
   }
 }
+
+
+//=======================================================================
+// function : AddAssembly()
+// purpose  :
+//=======================================================================
+TDF_Label GEOMDS_Commands::AddAssembly(Kinematic_Assembly& KAss,
+                                      const TCollection_ExtendedString& Name)
+{
+  TDF_Label LabAssembly = myLab.NewChild();
+  TDataStd_Name::Set(LabAssembly, Name);
+
+  TDF_Label LabType = LabAssembly.NewChild();
+  TDataStd_Integer::Set(LabType, 1);
+
+  return LabAssembly;
+}
+
+
+//=======================================================================
+// function : AddContact()
+// purpose  :
+//=======================================================================
+TDF_Label GEOMDS_Commands::AddContact(Kinematic_Contact& KContact,
+                                     const TDF_Label& mainRefLab,
+                                     const TCollection_ExtendedString& Name)
+{
+  TDF_Label LabContact = mainRefLab.NewChild();
+  TDataStd_Name::Set(LabContact, Name);
+
+  TDF_Label LabContactType = LabContact.NewChild();
+  TDataStd_Integer::Set(LabContactType, 2);
+
+  TDF_Label LabType = LabContact.NewChild();
+  TDataStd_Integer::Set(LabType, KContact.Type());
+  
+  int ret;
+  TDF_Label NewLab1 = LabContact.NewChild();
+  TNaming_Builder B1(NewLab1);
+  B1.Select(KContact.Shape1(), KContact.Shape1());
+  TDF_Label RefLab1 = TNaming_Tool::Label(myLab, KContact.Shape1(), ret);
+  TDF_Reference::Set(NewLab1, RefLab1);
+
+  TDF_Label NewLab2 = LabContact.NewChild();
+  TNaming_Builder B2(NewLab2);
+  B2.Select(KContact.Shape2(), KContact.Shape2());
+  TDF_Label RefLab2 = TNaming_Tool::Label(myLab, KContact.Shape2(), ret);
+  TDF_Reference::Set(NewLab2, RefLab2);
+
+  TDF_Label LabPosition = LabContact.NewChild();
+  Handle(TDataStd_RealArray) RealArrayP = TDataStd_RealArray::Set(LabPosition, 1, 12);
+  RealArrayP->SetValue(1, KContact.Position().Origin().X());
+  RealArrayP->SetValue(2, KContact.Position().Origin().Y());
+  RealArrayP->SetValue(3, KContact.Position().Origin().Z());
+  RealArrayP->SetValue(4, KContact.Position().DirX().X());
+  RealArrayP->SetValue(5, KContact.Position().DirX().Y());
+  RealArrayP->SetValue(6, KContact.Position().DirX().Z());
+  RealArrayP->SetValue(7, KContact.Position().DirY().X());
+  RealArrayP->SetValue(8, KContact.Position().DirY().Y());
+  RealArrayP->SetValue(9, KContact.Position().DirY().Z());
+  RealArrayP->SetValue(10, KContact.Position().DirZ().X());
+  RealArrayP->SetValue(11, KContact.Position().DirZ().Y());
+  RealArrayP->SetValue(12, KContact.Position().DirZ().Z());
+
+  TDF_Label LabRotation1 = LabContact.NewChild();
+  Handle(TDataStd_IntegerArray) IntegerArrayR = TDataStd_IntegerArray::Set(LabRotation1, 1, 3);
+  IntegerArrayR->SetValue(1, KContact.Rotation().Rot1());
+  IntegerArrayR->SetValue(2, KContact.Rotation().Rot2());
+  IntegerArrayR->SetValue(3, KContact.Rotation().Rot3());
+
+  TDF_Label LabRotation2 = LabContact.NewChild();
+  Handle(TDataStd_RealArray) RealArrayR = TDataStd_RealArray::Set(LabRotation2, 1, 3);
+  RealArrayR->SetValue(1, KContact.Rotation().ValX());
+  RealArrayR->SetValue(2, KContact.Rotation().ValY());
+  RealArrayR->SetValue(3, KContact.Rotation().ValZ());
+
+  TDF_Label LabTranslation = LabContact.NewChild();
+  Handle(TDataStd_RealArray) RealArrayT = TDataStd_RealArray::Set(LabTranslation, 1, 3);
+  RealArrayT->SetValue(1, KContact.Translation().ValX());
+  RealArrayT->SetValue(2, KContact.Translation().ValY());
+  RealArrayT->SetValue(3, KContact.Translation().ValZ());
+
+  TDF_Label LabStep = LabContact.NewChild();
+  TDataStd_Real::Set(LabStep, KContact.Step());
+
+  return LabContact;
+}
+
+
+//=======================================================================
+// function : AddAnimation()
+// purpose  :
+//=======================================================================
+TDF_Label GEOMDS_Commands::AddAnimation(Kinematic_Animation& KAnimation,
+                                       const TDF_Label& AssLab,
+                                       const TCollection_ExtendedString& Name)
+{
+  TDF_Label LabAnimation = myLab.NewChild();
+  TDataStd_Name::Set(LabAnimation, Name);
+
+  TDF_Label LabType = LabAnimation.NewChild();
+  TDataStd_Integer::Set(LabType, 3);
+
+  TDF_Label LabAssembly = LabAnimation.NewChild();
+  TDF_Reference::Set(LabAssembly, AssLab);
+
+  int ret;
+  TDF_Label LabFrame = LabAnimation.NewChild();
+  TNaming_Builder B1(LabFrame);
+  B1.Select(KAnimation.Frame(), KAnimation.Frame());
+  TDF_Label RefLab = TNaming_Tool::Label(myLab, KAnimation.Frame(), ret);
+  TDF_Reference::Set(LabFrame, RefLab);
+
+  TDF_Label LabDuration = LabAnimation.NewChild();
+  Standard_Real duration = double(KAnimation.Duration());
+  TDataStd_Real::Set(LabDuration, duration);
+
+  TDF_Label LabNbSeq = LabAnimation.NewChild();
+  TDataStd_Integer::Set(LabNbSeq, KAnimation.NbSeq());
+
+  return LabAnimation;
+}
+
+
+//=======================================================================
+// function : GetAssembly()
+// purpose  : 
+//=======================================================================
+Standard_Boolean GEOMDS_Commands::GetAssembly(const TDF_Label& aLabel,
+                                             Kinematic_Assembly& returnAss)
+{
+  Kinematic_Assembly* Ass = new Kinematic_Assembly();
+
+  TDF_ChildIterator it;
+  for(it.Initialize(aLabel, Standard_False); it.More(); it.Next()) {
+    TDF_Label L = it.Value();
+    Handle(TDataStd_Integer) anAttInteger;
+    if(L.FindAttribute(TDataStd_Integer::GetID(), anAttInteger)) {
+      if(anAttInteger->Get() != 1) {
+       returnAss = *Ass;
+       return false;
+      }
+    }
+    else {
+      Kinematic_Contact* aContact = new Kinematic_Contact();
+      if(GetContact(L, *aContact))
+       Ass->AddContact(aContact);
+    }
+  }
+  returnAss = *Ass;
+  return true;
+}
+
+
+//=======================================================================
+// function : GetContact()
+// purpose  : 
+//=======================================================================
+Standard_Boolean GEOMDS_Commands::GetContact(const TDF_Label& aLabel,
+                                            Kinematic_Contact& returnContact)
+{
+  Kinematic_Contact* Contact = new Kinematic_Contact();
+
+  TDF_ChildIterator it;
+  int i = 1;
+  for(it.Initialize(aLabel, Standard_False); it.More(); it.Next()) {
+    TDF_Label L = it.Value();
+    Handle(TNaming_NamedShape) anAttTopo1;
+    Handle(TNaming_NamedShape) anAttTopo2;
+    Handle(TDataStd_Integer) anAttInteger1;
+    Handle(TDataStd_Integer) anAttInteger2;
+    Handle(TDataStd_Real) anAttReal;
+    Handle(TDataStd_IntegerArray) anAttIntegerArrayR;
+    Handle(TDataStd_RealArray) anAttRealArrayP;
+    Handle(TDataStd_RealArray) anAttRealArrayR;
+    Handle(TDataStd_RealArray) anAttRealArrayT;
+
+    if(i == 1 && L.FindAttribute(TDataStd_Integer::GetID(), anAttInteger1)) {
+      if(anAttInteger1->Get() != 2) {
+       returnContact = *Contact;
+       return false;
+      }
+    }
+    if(i == 2 && L.FindAttribute(TDataStd_Integer::GetID(), anAttInteger2)) {
+      Contact->Type(anAttInteger2->Get());
+    }
+    if(i == 3 && L.FindAttribute(TNaming_NamedShape::GetID(), anAttTopo1)) {
+      Contact->Shape1(TNaming_Tool::GetShape(anAttTopo1));
+    }
+    if(i == 4 && L.FindAttribute(TNaming_NamedShape::GetID(), anAttTopo2)) {
+      Contact->Shape2(TNaming_Tool::GetShape(anAttTopo2));
+    }
+    if(i == 5 && L.FindAttribute(TDataStd_RealArray::GetID(), anAttRealArrayP)) {
+      gp_Pnt Center(anAttRealArrayP->Value(1), anAttRealArrayP->Value(2), anAttRealArrayP->Value(3));
+      gp_Dir aDirX(anAttRealArrayP->Value(4), anAttRealArrayP->Value(5), anAttRealArrayP->Value(6));
+      gp_Dir aDirY(anAttRealArrayP->Value(7), anAttRealArrayP->Value(8), anAttRealArrayP->Value(9));
+      gp_Dir aDirZ(anAttRealArrayP->Value(10), anAttRealArrayP->Value(11), anAttRealArrayP->Value(12));
+      Contact->Position().Origin(Center);
+      Contact->Position().DirX(aDirX);
+      Contact->Position().DirY(aDirY);
+      Contact->Position().DirZ(aDirZ);
+    }
+    if(i == 6 && L.FindAttribute(TDataStd_IntegerArray::GetID(), anAttIntegerArrayR)) {
+      Contact->Rotation().Rot1(anAttIntegerArrayR->Value(1));
+      Contact->Rotation().Rot2(anAttIntegerArrayR->Value(2));
+      Contact->Rotation().Rot3(anAttIntegerArrayR->Value(3));
+    }
+    if(i == 7 && L.FindAttribute(TDataStd_RealArray::GetID(), anAttRealArrayR)) {
+      Contact->Rotation().ValX(anAttRealArrayR->Value(1));
+      Contact->Rotation().ValY(anAttRealArrayR->Value(2));
+      Contact->Rotation().ValZ(anAttRealArrayR->Value(3));
+    }
+    if(i == 8 && L.FindAttribute(TDataStd_RealArray::GetID(), anAttRealArrayT)) {
+      Contact->Translation().ValX(anAttRealArrayT->Value(1));
+      Contact->Translation().ValY(anAttRealArrayT->Value(2));
+      Contact->Translation().ValZ(anAttRealArrayT->Value(3));
+    }
+    if(i == 9 && L.FindAttribute(TDataStd_Real::GetID(), anAttReal)) {
+      Contact->Step(anAttReal->Get());
+    }
+    i++;
+  }
+  returnContact = *Contact;
+  return true;
+}
+
+
+//=======================================================================
+// function : GetAnimation()
+// purpose  : 
+//=======================================================================
+Standard_Boolean GEOMDS_Commands::GetAnimation(const TDF_Label& aLabel,
+                                              Kinematic_Animation& returnAnim)
+{
+  Kinematic_Animation* Anim = new Kinematic_Animation();
+
+  TDF_ChildIterator it;
+  int i = 1;
+  for(it.Initialize(aLabel, Standard_False); it.More(); it.Next()) {
+    TDF_Label L = it.Value();
+    Handle(TNaming_NamedShape) anAttTopo;
+    Handle(TDataStd_Real) anAttReal;
+    Handle(TDataStd_Integer) anAttInteger;
+    Handle(TDataStd_Integer) anAttInteger1;
+
+    if(i == 1 && L.FindAttribute(TDataStd_Integer::GetID(), anAttInteger)) {
+      if(anAttInteger->Get() != 3) {
+       returnAnim = *Anim;
+       return false;
+      }
+    }
+    if(i == 2) {
+      Kinematic_Assembly* aAss =  new Kinematic_Assembly();
+      Standard_Boolean test = GetAssembly(L, *aAss);
+      Anim->Assembly(aAss);
+    }
+    if(i == 3 && L.FindAttribute(TNaming_NamedShape::GetID(), anAttTopo)) {
+      Anim->Frame(TNaming_Tool::GetShape(anAttTopo));
+    }
+    if(i == 4 && L.FindAttribute(TDataStd_Real::GetID(), anAttReal)) {
+      Anim->Duration(anAttReal->Get());
+    }
+    if(i == 5 && L.FindAttribute(TDataStd_Integer::GetID(), anAttInteger1)) {
+      Anim->NbSeq(anAttInteger1->Get());
+    }
+    i++;
+  }
+  Anim->SetMap();
+  returnAnim = *Anim;
+  return true;
+}
+
+
+//=======================================================================
+// function : SetPosition()
+// purpose  : 
+//=======================================================================
+void GEOMDS_Commands::SetPosition(const TDF_Label& aLabel,
+                                 double P0x, double P0y, double P0z,
+                                 double VXx, double VXy, double VXz,
+                                 double VYx, double VYy, double VYz,
+                                 double VZx, double VZy, double VZz)
+{
+  TDF_ChildIterator it;
+  int i = 1;
+  for(it.Initialize(aLabel, Standard_False); it.More(); it.Next()) {
+    TDF_Label L = it.Value();
+    Handle(TDataStd_RealArray) anAttRealArrayP;
+
+    if(i == 5 && L.FindAttribute(TDataStd_RealArray::GetID(), anAttRealArrayP)) {
+      anAttRealArrayP->SetValue(1, P0x);
+      anAttRealArrayP->SetValue(2, P0y);
+      anAttRealArrayP->SetValue(3, P0z);
+      anAttRealArrayP->SetValue(4, VXx);
+      anAttRealArrayP->SetValue(5, VXy);
+      anAttRealArrayP->SetValue(6, VXz);
+      anAttRealArrayP->SetValue(7, VYx);
+      anAttRealArrayP->SetValue(8, VYy);
+      anAttRealArrayP->SetValue(9, VYz);
+      anAttRealArrayP->SetValue(10, VZx);
+      anAttRealArrayP->SetValue(11, VZy);
+      anAttRealArrayP->SetValue(12, VZz);
+      return;
+    }
+    i++;
+  }
+  return;
+}
+
+
+//=======================================================================
+// function : SetRotation()
+// purpose  : 
+//=======================================================================
+void GEOMDS_Commands::SetRotation(const TDF_Label& aLabel,
+                                 int Rot1, int Rot2, int Rot3, 
+                                 double Val1, double Val2, double Val3)
+{
+  TDF_ChildIterator it;
+  int i = 1;
+  for(it.Initialize(aLabel, Standard_False); it.More(); it.Next()) {
+    TDF_Label L = it.Value();
+    Handle(TDataStd_IntegerArray) anAttIntegerArrayR;
+    Handle(TDataStd_RealArray) anAttRealArrayR;
+
+    if(i == 6 && L.FindAttribute(TDataStd_IntegerArray::GetID(), anAttIntegerArrayR)) {
+      anAttIntegerArrayR->SetValue(1, Rot1);
+      anAttIntegerArrayR->SetValue(2, Rot2);
+      anAttIntegerArrayR->SetValue(3, Rot3);
+    }
+    if(i == 7 && L.FindAttribute(TDataStd_RealArray::GetID(), anAttRealArrayR)) {
+      anAttRealArrayR->SetValue(1, Val1);
+      anAttRealArrayR->SetValue(2, Val2);
+      anAttRealArrayR->SetValue(3, Val3);
+      return;
+    }
+    i++;
+  }
+  return;
+}
+
+
+//=======================================================================
+// function : SetTranslation()
+// purpose  : 
+//=======================================================================
+void GEOMDS_Commands::SetTranslation(const TDF_Label& aLabel, 
+                                    double Val1, double Val2, double Val3)
+{
+  TDF_ChildIterator it;
+  int i = 1;
+  for(it.Initialize(aLabel, Standard_False); it.More(); it.Next()) {
+    TDF_Label L = it.Value();
+    Handle(TDataStd_RealArray) anAttRealArrayT;
+
+    if(i == 8 && L.FindAttribute(TDataStd_RealArray::GetID(), anAttRealArrayT)) {
+      anAttRealArrayT->SetValue(1, Val1);
+      anAttRealArrayT->SetValue(2, Val2);
+      anAttRealArrayT->SetValue(3, Val3);
+      return;
+    }
+    i++;
+  }
+  return;
+}
index 0e2403920806bf87874eb7e52a8e46bbeb85f488..f45516a7ab78f605b043dbdf41f074f0a6fa0ecd 100644 (file)
@@ -34,6 +34,9 @@
 #endif
 class TDF_Label;
 class TopoDS_Shape;
+class Kinematic_Assembly;
+class Kinematic_Contact;
+class Kinematic_Animation;
 class TCollection_ExtendedString;
 
 
@@ -123,6 +126,31 @@ public:
   Standard_EXPORT Standard_Boolean ReturnNameIOR(const TDF_Label& aLabel,
                                                 TCollection_ExtendedString& returnNameIOR) ;
   
+  /* Kinematic */
+  Standard_EXPORT TDF_Label AddAssembly(Kinematic_Assembly& KAss,
+                                       const TCollection_ExtendedString& Name) ;
+  Standard_EXPORT TDF_Label AddContact(Kinematic_Contact& KContact,
+                                      const TDF_Label& mainRefLab,
+                                      const TCollection_ExtendedString& Name) ;
+  Standard_EXPORT TDF_Label AddAnimation(Kinematic_Animation& KAnimation,
+                                        const TDF_Label& AssLab,
+                                        const TCollection_ExtendedString& Name) ;
+  Standard_EXPORT Standard_Boolean GetAssembly(const TDF_Label& aLabel,
+                                              Kinematic_Assembly& returnAss) ;
+  Standard_EXPORT Standard_Boolean GetContact(const TDF_Label& aLabel,
+                                              Kinematic_Contact& returnContact) ;
+  Standard_EXPORT Standard_Boolean GetAnimation(const TDF_Label& aLabel,
+                                               Kinematic_Animation& returnAnimation) ;
+  Standard_EXPORT void SetPosition(const TDF_Label& aLabel,
+                                  double P0x, double P0y, double P0z,
+                                  double VXx, double VXy, double VXz,
+                                  double VYx, double VYy, double VYz,
+                                  double VZx, double VZy, double VZz) ;
+  Standard_EXPORT void SetRotation(const TDF_Label& aLabel, int Rot1, int Rot2, int Rot3, 
+                                  double Val1, double Val2, double Val3) ;
+  Standard_EXPORT void SetTranslation(const TDF_Label& aLabel, 
+                                     double Val1, double Val2, double Val3) ;
+
 protected:
   
   // Methods PROTECTED
index 851695357d739835a58712d1d6c5671f561f06a2..99a6ed3a81ba994e6fe56af12834c7549533f7ea 100644 (file)
@@ -41,7 +41,7 @@ LIB_SRC = GEOM_ShapeTypeFilter.cxx \
          GEOM_FaceFilter.cxx \
          GEOM_EdgeFilter.cxx
 
-LIB_CLIENT_IDL = SALOME_Component.idl SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Exception.idl GEOM_Shape.idl GEOM_Gen.idl
+LIB_CLIENT_IDL = SALOME_Component.idl SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Exception.idl GEOM_Shape.idl GEOM_Gen.idl GEOM_Kinematic.idl
 
 # header files 
 EXPORT_HEADERS= GEOM_ShapeTypeFilter.hxx \
index 961533df5f2db559da432cfad7b373a332a9eb76..139007359c17655be247bca3c6abcba35533b361 100644 (file)
 
 #include "SALOME_Selection.h"
 
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOMEDS)
+#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
+
 using namespace std;
 
 /* The object itself created in the static method 'GetOrCreateGEOMBase()' */
@@ -219,10 +224,11 @@ bool GeometryGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
     }
     else if(theCommandID == 5021 || // MENU TRANSFORMATION - TRANSLATION
            theCommandID == 5022 || // MENU TRANSFORMATION - ROTATION
-           theCommandID == 5023 || // MENU TRANSFORMATION - MIRROR
-           theCommandID == 5024 || // MENU TRANSFORMATION - SCALE
-           theCommandID == 5025 || // MENU TRANSFORMATION - MULTI-TRANSLATION
-           theCommandID == 5026) { // MENU TRANSFORMATION - MULTI-ROTATION
+           theCommandID == 5023 || // MENU TRANSFORMATION - POSITION
+           theCommandID == 5024 || // MENU TRANSFORMATION - MIRROR
+           theCommandID == 5025 || // MENU TRANSFORMATION - SCALE
+           theCommandID == 5026 || // MENU TRANSFORMATION - MULTI-TRANSLATION
+           theCommandID == 5027) { // MENU TRANSFORMATION - MULTI-ROTATION
       if(!GeomGUI->LoadLibrary("libTransformationGUI.so")) 
        return false;
     }
@@ -240,6 +246,25 @@ bool GeometryGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
       if(!GeomGUI->LoadLibrary("libRepairGUI.so")) 
        return false;
     }
+    else if(theCommandID == 611 ||  // MENU KINEMATIC - ASSEMBLY
+           theCommandID == 61201 ||  // MENU KINEMATIC - EMBEDDING
+           theCommandID == 61202 ||  // MENU KINEMATIC - PIVOT
+           theCommandID == 61203 ||  // MENU KINEMATIC - SLIDE
+           theCommandID == 61204 ||  // MENU KINEMATIC - SLIDING PIVOT
+           theCommandID == 61205 ||  // MENU KINEMATIC - SPHERICAL
+           theCommandID == 61206 ||  // MENU KINEMATIC - PLANE
+           theCommandID == 61207 ||  // MENU KINEMATIC - ANNULAR
+           theCommandID == 61208 ||  // MENU KINEMATIC - RECTILINEAR
+           theCommandID == 61209 ||  // MENU KINEMATIC - PONCTUAL
+           theCommandID == 61210 ||  // MENU KINEMATIC - HELICOIDAL
+           theCommandID == 6131 ||  // MENU KINEMATIC - POSITION
+           theCommandID == 6132 ||  // MENU KINEMATIC - ROTATION
+           theCommandID == 6133 ||  // MENU KINEMATIC - TRANSLATION
+           theCommandID == 614 ||  // MENU KINEMATIC - ANIMATION
+           theCommandID == 6141) {  // MENU KINEMATIC - RUN ANIMATION
+      if(!GeomGUI->LoadLibrary("libKinematicGUI.so")) 
+       return false;
+    }
     else if(theCommandID == 701 ||  // MENU MEASURE - PROPERTIES
            theCommandID == 702 ||  // MENU MEASURE - CDG
            theCommandID == 703 ||  // MENU MEASURE - INERTIA
@@ -472,7 +497,23 @@ void GeometryGUI::DefinePopup(QString & theContext, QString & theParent, QString
        if(strcmp(scomp->GetID(), IO->getEntry()) == 0) {
          // component is selected
          theObject = "Component";
+         return;
        }
+
+       SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+       SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+       SALOMEDS::GenericAttribute_var anAttr;
+       SALOMEDS::AttributeComment_var aType;
+       anAttr = aStudyBuilder->FindOrCreateAttribute(sobj, "AttributeComment");
+       aType = SALOMEDS::AttributeComment::_narrow(anAttr);
+       QString val = QString(strdup(aType->Value()));
+       if(val == "Kinematic_Assembly")
+         theObject = "Assembly";
+       else if(val == "Kinematic_Contact")
+         theObject = "Contact";
+       else if(val == "Kinematic_Animation")
+         theObject = "Animation";
+       return;
       }
     }
   }
index 55727f9099936b9f827d6860f72fb4a8ff02be84..81e1f1b457a983fd4f9b3d381eb7ed7015031792 100644 (file)
@@ -40,6 +40,8 @@ using namespace std;
 #include "OCCViewer_Viewer3d.h"
 #include <TopExp_Explorer.hxx>
 #include <TopTools_MapOfShape.hxx>
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <BRepAdaptor_Surface.hxx>
 #include <BRepAdaptor_Curve.hxx>
 #include <GeomAbs_CurveType.hxx>
@@ -47,6 +49,7 @@ using namespace std;
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopoDS_Face.hxx>
+#include <TopoDS_Iterator.hxx>
 
 #include "VTKViewer_RenderWindowInteractor.h"
 #include "VTKViewer_ViewFrame.h"
@@ -164,17 +167,36 @@ int  GEOM_Swig::getIndexTopology(const char* SubIOR, const char* IOR)
   GEOM::GEOM_Shape_var aSubShape = Geom->GetIORFromString(SubIOR);
   TopoDS_Shape subshape    = ShapeReader.GetShape(Geom, aSubShape);
 
-  TopExp_Explorer Exp ( shape, subshape.ShapeType() );
   int index = 1;
-  TopTools_MapOfShape M;
-  while ( Exp.More() ) {
-    if ( M.Add(Exp.Current()) ) {
-      if ( Exp.Current().IsSame(subshape) )
-       return index;
-      index++;
-    }
-    Exp.Next();
-  }
+  if(subshape.ShapeType() == TopAbs_COMPOUND) { 
+    TopoDS_Iterator it; 
+    TopTools_ListOfShape CL; 
+    CL.Append(shape); 
+    TopTools_ListIteratorOfListOfShape itC; 
+    for(itC.Initialize(CL); itC.More(); itC.Next()) {
+      for(it.Initialize(itC.Value()); it.More(); it.Next()) { 
+       if (it.Value().ShapeType() == TopAbs_COMPOUND) {
+         if (it.Value().IsSame(subshape))
+           return index; 
+         else 
+           index++; 
+         CL.Append(it.Value()); 
+       }
+      } 
+    } 
+  } 
+  else { 
+    TopExp_Explorer Exp(shape, subshape.ShapeType()); 
+    TopTools_MapOfShape M; 
+    while(Exp.More()) { 
+      if(M.Add(Exp.Current())) {
+       if(Exp.Current().IsSame(subshape)) 
+         return index; 
+       index++; 
+      } 
+      Exp.Next(); 
+    } 
+  } 
   return -1;
 }
 
index 9576c2d3569ebed02c2ae1dc710bcc805682f5b1..1a1f35d64a1da3fc41019ad5abeb762b889dbc03 100644 (file)
@@ -48,7 +48,8 @@ LIB_MOC = \
 
 LIB_CLIENT_IDL = SALOME_Exception.idl \
                 SALOMEDS.idl \
-                SALOMEDS_Attributes.idl
+                SALOMEDS_Attributes.idl \
+                GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 08a0e7d8c7d8b1274a0be63d11e7b05d12a30a67..591c97c3c9b840976bfc2b7f14c85b1dab2f9156 100644 (file)
@@ -21,7 +21,7 @@
 //
 //
 //
-//  File   : GEOMBase_Tools.cxx
+//  File   : GEOMToolsGUI.cxx
 //  Author : Damien COQUERET
 //  Module : GEOM
 //  $Header: 
@@ -213,7 +213,7 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
        else
          IsoV = "1";
        
-       GEOMBase_NbIsosDlg* NbIsosDlg = new GEOMBase_NbIsosDlg(QAD_Application::getDesktop(), tr("GEOM_MEN_ISOS"), TRUE);       
+       GEOMToolsGUI_NbIsosDlg* NbIsosDlg = new GEOMToolsGUI_NbIsosDlg(QAD_Application::getDesktop(), tr("GEOM_MEN_ISOS"), TRUE);       
        int UIso = IsoU.toInt();
        int VIso = IsoV.toInt();
        
@@ -401,7 +401,7 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
          OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
          ic = v3d->getAISContext();
        }
-       GEOMBase_TransparencyDlg *aDlg = new GEOMBase_TransparencyDlg(parent, "", Sel, ic);
+       GEOMToolsGUI_TransparencyDlg *aDlg = new GEOMToolsGUI_TransparencyDlg(parent, "", Sel, ic);
        break;
       }
     case 8034: // ISOS - POPUP VIEWER
@@ -427,8 +427,8 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
          else
            IsoV = "1";
            
-         GEOMBase_NbIsosDlg * NbIsosDlg =
-           new GEOMBase_NbIsosDlg(QAD_Application::getDesktop(), tr("GEOM_MEN_ISOS"), TRUE);
+         GEOMToolsGUI_NbIsosDlg * NbIsosDlg =
+           new GEOMToolsGUI_NbIsosDlg(QAD_Application::getDesktop(), tr("GEOM_MEN_ISOS"), TRUE);
     
          NbIsosDlg->SpinBoxU->setValue(IsoU.toInt());
          NbIsosDlg->SpinBoxV->setValue(IsoV.toInt());
index 5ef80f650da355d8e4ead29c0427aed93f03abe7..842332015e77f594e5d97bf67b9b6115c97337a8 100644 (file)
@@ -21,7 +21,7 @@
 //
 //
 //
-//  File   : GEOMBase_NbIsosDlg.cxx
+//  File   : GEOMToolsGUI_NbIsosDlg.cxx
 //  Author : 
 //  Module : GEOM
 //  $Header: 
@@ -37,17 +37,17 @@ using namespace std;
 #include <qspinbox.h>
 
 //=================================================================================
-// class    : GEOMBase_NbIsosDlg()
-// purpose  : Constructs a GEOMBase_NbIsosDlg which is a child of 'parent', with the 
+// class    : GEOMToolsGUI_NbIsosDlg()
+// purpose  : Constructs a GEOMToolsGUI_NbIsosDlg which is a child of 'parent', with the 
 //            name 'name' and widget flags set to 'f'.
 //            The dialog will by default be modeless, unless you set 'modal' to
 //            TRUE to construct a modal dialog.
 //=================================================================================
-GEOMBase_NbIsosDlg::GEOMBase_NbIsosDlg(QWidget* parent, const char* name, bool modal, WFlags fl)
+GEOMToolsGUI_NbIsosDlg::GEOMToolsGUI_NbIsosDlg(QWidget* parent, const char* name, bool modal, WFlags fl)
   :QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
 {
   if( !name )
-    setName("GEOMBase_NbIsosDlg");
+    setName("GEOMToolsGUI_NbIsosDlg");
   setCaption(name);
   setSizeGripEnabled(TRUE);
   QGridLayout* MyDialogLayout = new QGridLayout(this); 
@@ -122,10 +122,10 @@ GEOMBase_NbIsosDlg::GEOMBase_NbIsosDlg(QWidget* parent, const char* name, bool m
 
 
 //=================================================================================
-// function : ~GEOMBase_NbIsosDlg()
+// function : ~GEOMToolsGUI_NbIsosDlg()
 // purpose  : Destroys the object and frees any allocated resources
 //=================================================================================
-GEOMBase_NbIsosDlg::~GEOMBase_NbIsosDlg()
+GEOMToolsGUI_NbIsosDlg::~GEOMToolsGUI_NbIsosDlg()
 {
     // no need to delete child widgets, Qt does it all for us
 }
index 48c70c5635bc6ace1e870294b91c9b3e9d2c9afe..07e471200ef111e1adc188dd915c26940bcc9320 100644 (file)
 //
 //
 //
-//  File   : GEOMBase_NbIsosDlg.h
+//  File   : GEOMToolsGUI_NbIsosDlg.h
 //  Author : 
 //  Module : GEOM
 //  $Header: 
 
-#ifndef GEOMBASE_NBISOSDLG_H
-#define GEOMBASE_NBISOSDLG_H
+#ifndef GEOMTOOLSGUI_NBISOSDLG_H
+#define GEOMTOOLSGUI_NBISOSDLG_H
 
 #include <qdialog.h>
 
@@ -36,16 +36,16 @@ class QSpinBox;
 class QPushButton;
 
 //=================================================================================
-// class    : GEOMBase_NbIsosDlg
+// class    : GEOMToolsGUI_NbIsosDlg
 // purpose  :
 //=================================================================================
-class GEOMBase_NbIsosDlg : public QDialog
+class GEOMToolsGUI_NbIsosDlg : public QDialog
 { 
     Q_OBJECT
 
 public:
-    GEOMBase_NbIsosDlg(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0);
-    ~GEOMBase_NbIsosDlg();
+    GEOMToolsGUI_NbIsosDlg(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0);
+    ~GEOMToolsGUI_NbIsosDlg();
 
     QPushButton* buttonOk;
     QPushButton* buttonCancel;
@@ -56,4 +56,4 @@ public:
 
 };
 
-#endif // GEOMETRYGUI_NBISOSDLG_H
+#endif // GEOMTOOLSGUI_NBISOSDLG_H
index 122cc9848e9abec8a74f0d28fab9f15726743786..12beaaaa52b974cb187dc54a61824d811ce2b1fd 100644 (file)
@@ -21,7 +21,7 @@
 //
 //
 //
-//  File   : GEOMBase_TransparencyDlg.cxx
+//  File   : GEOMToolsGUI_TransparencyDlg.cxx
 //  Author : Lucien PIGNOLONI
 //  Module : GEOM
 
@@ -48,24 +48,24 @@ using namespace std;
 #include "VTKViewer_RenderWindowInteractor.h"
 
 //=================================================================================
-// class    : GEOMBase_TransparencyDlg()
+// class    : GEOMToolsGUI_TransparencyDlg()
 // purpose  : Constructs a GEOMBase_SUBSHAPE which is a child of 'parent', with the
 //            name 'name' and widget flags set to 'f'.
 //
 //          : WARNING : this dialog is modal !
 //
 //=================================================================================
-GEOMBase_TransparencyDlg::GEOMBase_TransparencyDlg(QWidget* parent, const char* name, SALOME_Selection* Sel, const Handle(AIS_InteractiveContext)& ic, bool modal, WFlags fl)
+GEOMToolsGUI_TransparencyDlg::GEOMToolsGUI_TransparencyDlg(QWidget* parent, const char* name, SALOME_Selection* Sel, const Handle(AIS_InteractiveContext)& ic, bool modal, WFlags fl)
   :QDialog(parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
 {
   if(!name)
-    setName("GEOMBase_TransparencyDlg");
+    setName("GEOMToolsGUI_TransparencyDlg");
   resize(152, 107); 
   setCaption(tr("GEOM_TRANSPARENCY_TITLE"));
   setSizeGripEnabled(TRUE);
-  GEOMBase_TransparencyDlgLayout = new QGridLayout(this); 
-  GEOMBase_TransparencyDlgLayout->setSpacing(6);
-  GEOMBase_TransparencyDlgLayout->setMargin(11);
+  GEOMToolsGUI_TransparencyDlgLayout = new QGridLayout(this); 
+  GEOMToolsGUI_TransparencyDlgLayout->setSpacing(6);
+  GEOMToolsGUI_TransparencyDlgLayout->setMargin(11);
 
   /*************************************************************************/
   QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
@@ -112,8 +112,8 @@ GEOMBase_TransparencyDlg::GEOMBase_TransparencyDlg(QWidget* parent, const char*
   GroupC1Layout->addMultiCellWidget( Slider1, 1, 1, 0, 2 );
   /*************************************************************************/
   
-  GEOMBase_TransparencyDlgLayout->addWidget(GroupC1, 0,  0);
-  GEOMBase_TransparencyDlgLayout->addWidget(GroupButtons, 1, 0);
+  GEOMToolsGUI_TransparencyDlgLayout->addWidget(GroupC1, 0,  0);
+  GEOMToolsGUI_TransparencyDlgLayout->addWidget(GroupButtons, 1, 0);
   
   /* Initialisations */
   this->myGeomGUI = GEOMContext::GetGeomGUI();
@@ -133,18 +133,18 @@ GEOMBase_TransparencyDlg::GEOMBase_TransparencyDlg(QWidget* parent, const char*
   connect(Slider1, SIGNAL(valueChanged(int)), this, SLOT(ValueHasChanged(int)));
   
   /* Move widget on the botton right corner of main widget */
-  int x, y ;
-  myGeomBase->DefineDlgPosition(this, x, y);
-  this->move(x, y) ;
+//   int x, y ;
+//   myGeomBase->DefineDlgPosition(this, x, y);
+//   this->move(x, y) ;
   this->show() ; /* Displays this Dialog */
 }
 
 
 //=================================================================================
-// function : ~GEOMBase_TransparencyDlg()
+// function : ~GEOMToolsGUI_TransparencyDlg()
 // purpose  :
 //=================================================================================
-GEOMBase_TransparencyDlg::~GEOMBase_TransparencyDlg()
+GEOMToolsGUI_TransparencyDlg::~GEOMToolsGUI_TransparencyDlg()
 {
     // no need to delete child widgets, Qt does it all for us
 }
@@ -154,7 +154,7 @@ GEOMBase_TransparencyDlg::~GEOMBase_TransparencyDlg()
 // function : ClickOnOk()
 // purpose  :
 //=======================================================================
-void GEOMBase_TransparencyDlg::ClickOnOk()
+void GEOMToolsGUI_TransparencyDlg::ClickOnOk()
 {
   accept();
   return;
@@ -165,7 +165,7 @@ void GEOMBase_TransparencyDlg::ClickOnOk()
 // function : ClickOnClose()
 // purpose  :
 //=======================================================================
-void GEOMBase_TransparencyDlg::ClickOnClose()
+void GEOMToolsGUI_TransparencyDlg::ClickOnClose()
 {
   accept();
   return;
@@ -177,7 +177,7 @@ void GEOMBase_TransparencyDlg::ClickOnClose()
 // purpose  : Called when value of slider change
 //          : or the first time as initilisation
 //=================================================================================
-void GEOMBase_TransparencyDlg::ValueHasChanged(int newValue)
+void GEOMToolsGUI_TransparencyDlg::ValueHasChanged(int newValue)
 {
   if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
     // VTK
index fbcc4efcd0b73514bcabb2f6ac8225d93273ff5f..8ae122d1bea3ae723ed79f6a2d5ad215eacc7a02 100644 (file)
@@ -21,7 +21,7 @@
 //
 //
 //
-//  File   : GEOMBase_TransparencyDlg.h
+//  File   : GEOMToolsGUI_TransparencyDlg.h
 //  Author : Lucien PIGNOLONI
 //  Module : GEOM
 //  $Header$
@@ -51,23 +51,23 @@ class QSlider;
 
 
 //=================================================================================
-// class    : GEOMBase_TransparencyDlg
+// class    : GEOMToolsGUI_TransparencyDlg
 // purpose  :
 //          : WARNING : that is a MODAL dialog.
 //=================================================================================
-class GEOMBase_TransparencyDlg : public QDialog
+class GEOMToolsGUI_TransparencyDlg : public QDialog
 { 
     Q_OBJECT
 
 public:
-    GEOMBase_TransparencyDlg( QWidget* parent = 0,
+    GEOMToolsGUI_TransparencyDlg( QWidget* parent = 0,
                                 const char* name = 0,
                                 SALOME_Selection* Sel = 0,
                                 const Handle(AIS_InteractiveContext)& ic = 0,
                                 bool modal = TRUE,
                                 WFlags fl = 0 );
 
-    ~GEOMBase_TransparencyDlg();
+    ~GEOMToolsGUI_TransparencyDlg();
 
 private :
 
@@ -89,7 +89,7 @@ public slots:
     void ValueHasChanged( int newValue ) ;
     
 protected:
-    QGridLayout* GEOMBase_TransparencyDlgLayout;
+    QGridLayout* GEOMToolsGUI_TransparencyDlgLayout;
     QHBoxLayout* Layout1;
     QHBoxLayout* Layout2;
 };
index 95cc8b8f8531fdfc5109aaf709e6eb83f3a4c129..45aae6e3ad9ffcd8f2e7d8563b4e1c910ba1f8cd 100644 (file)
@@ -49,7 +49,7 @@ LIB_MOC = \
                GEOMToolsGUI_NbIsosDlg.h \
                GEOMToolsGUI_TransparencyDlg.h
 
-LIB_CLIENT_IDL = SALOMEDS_Attributes.idl
+LIB_CLIENT_IDL = SALOMEDS_Attributes.idl GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 6ea27169e5a6c5df7004bcd6b1824540c6a7c841..5984c7dce0277ba9f2243654523829a9d974b5ab 100644 (file)
@@ -58,6 +58,7 @@ LIB_CLIENT_IDL = SALOMEDS.idl \
                 SALOME_Exception.idl \
                 GEOM_Gen.idl \
                 GEOM_Shape.idl \
+                GEOM_Kinematic.idl \
                 SALOME_Component.idl 
 
 EXPORT_SHAREDPYSCRIPTS=\
index 633e9d4d634c1e5ee0c9cb74a8d579aaa85d9ca7..7d1ae1db89c77791bb8e42ac992597a5ed2d8aa6 100644 (file)
@@ -222,7 +222,7 @@ def MakeFace(aShapeWire,WantPlanarFace):
 
 def MakeFaces(ListShape,WantPlanarFace):
     anObj = geom.MakeFaces(ListShape,WantPlanarFace)
-    ior = salome.orb.object_to_string(anObj)
+    ior = orb.object_to_string(anObj)
     anObj._set_Name(ior)
     return anObj
 
@@ -368,10 +368,11 @@ def Partition(ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[],
     return anObj
 
 def SuppressFaces(aShape,ListOfId):
-    anObj = geom.SuppressFaces(aShape,ListOfId)
-    ior = orb.object_to_string(anObj)
-    anObj._set_Name(ior)
-    return anObj
+    ListObj = geom.SuppressFaces(aShape,ListOfId)
+    for anObj in ListObj :
+           ior = orb.object_to_string(anObj)
+           anObj._set_Name(ior)
+    return ListObj
 
 def SuppressHole(aShape,ListOfFace,ListOfWire,ListOfEndFace):
     anObj = geom.SuppressHole(aShape,ListOfFace,ListOfWire,ListOfEndFace)
@@ -460,3 +461,166 @@ def Archimede(aShape,weight,WaterDensity,MeshingDeflection):
 def CheckShape(aShape):        
     Status = geom.CheckShape(aShape)
     return Status
+
+# -----------------------------------------------------------------------------
+# Kinematic objects
+# -----------------------------------------------------------------------------
+
+def InitAssembly():
+    anObj = geom.InitAssembly()
+    ior = orb.object_to_string(anObj)
+    anObj._set_Name(ior)
+    return anObj
+
+def AddContact(Ass,Shape1,Shape2,Type,Step):
+    anObj = geom.AddContact(Ass,Shape1,Shape2,Type,Step)
+    ior = orb.object_to_string(anObj)
+    anObj._set_Name(ior)
+    return anObj
+
+def AddAnimation(Ass,Frame,Duration,NbSeq):
+    anObj = geom.AddAnimation(Ass,Frame,Duration,NbSeq)
+    ior = orb.object_to_string(anObj)
+    anObj._set_Name(ior)
+    return anObj
+
+def SetPosition(aContact):
+    geom.SetPosition(aContact)
+
+def SetRotation(aContact):
+    geom.SetRotation(aContact)
+
+def SetTranslation(aContact):
+    geom.SetTranslation(aContact)
+
+def addAssemblyToStudy(anAss, aName):
+    myBuilder.NewCommand()
+    newObj = myBuilder.NewObject(father)
+    ior = orb.object_to_string(anAss)
+    A1 = myBuilder.FindOrCreateAttribute(newObj, "AttributeIOR");
+    ObjIOR = A1._narrow(SALOMEDS.AttributeIOR)
+    ObjIOR.SetValue(ior)
+    A2 = myBuilder.FindOrCreateAttribute(newObj, "AttributeName");
+    ObjName = A2._narrow(SALOMEDS.AttributeName)
+    ObjName.SetValue(aName)
+    A3 = myBuilder.FindOrCreateAttribute(newObj, "AttributeComment");
+    ObjType = A3._narrow(SALOMEDS.AttributeComment)
+    ObjType.SetValue("Kinematic_Assembly")
+    A4 = myBuilder.FindOrCreateAttribute(newObj, "AttributePixMap");
+    ObjPixmap = A4._narrow(SALOMEDS.AttributePixMap)
+    ObjPixmap.SetPixMap("ICON_OBJBROWSER_ASSEMBLY")
+    
+    id = newObj.GetID()
+    anAss._set_StudyShapeId(id)
+    myBuilder.CommitCommand()
+    return id
+
+def addContactToStudy(anAss, aContact, aName):
+    myBuilder.NewCommand()
+    newObj = myBuilder.NewObject(salome.IDToSObject(anAss._get_StudyShapeId()))
+    ior = orb.object_to_string(aContact)
+    A1 = myBuilder.FindOrCreateAttribute(newObj, "AttributeIOR");
+    ObjIOR = A1._narrow(SALOMEDS.AttributeIOR)
+    ObjIOR.SetValue(ior)
+    A2 = myBuilder.FindOrCreateAttribute(newObj, "AttributeName");
+    ObjName = A2._narrow(SALOMEDS.AttributeName)
+    ObjName.SetValue(aName)
+    A3 = myBuilder.FindOrCreateAttribute(newObj, "AttributeComment");
+    ObjType = A3._narrow(SALOMEDS.AttributeComment)
+    ObjType.SetValue("Kinematic_Contact")
+    A4 = myBuilder.FindOrCreateAttribute(newObj, "AttributePixMap");
+    ObjPixmap = A4._narrow(SALOMEDS.AttributePixMap)
+    ObjPixmap.SetPixMap("ICON_OBJBROWSER_CONTACT")
+
+    aTypeName = GetContactName(aContact.GetType())
+    ObjRef = myBuilder.NewObject(newObj)
+    A5 = myBuilder.FindOrCreateAttribute(ObjRef, "AttributeName");
+    ObjRefName = A5._narrow(SALOMEDS.AttributeName)
+    ObjRefName.SetValue(aTypeName)
+    A6 = myBuilder.FindOrCreateAttribute(ObjRef, "AttributeSelectable");
+    ObjRefSel = A6._narrow(SALOMEDS.AttributeSelectable)
+    ObjRefSel.SetSelectable(0)
+
+    aShape = aContact.GetShape1()
+    if aShape is not None:
+           if aShape._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(aShape._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+
+    aShape = aContact.GetShape2()
+    if aShape is not None:
+           if aShape._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(aShape._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+    
+    id = newObj.GetID()
+    aContact._set_StudyShapeId(id)
+    myBuilder.CommitCommand()
+    return id
+
+def addAnimationToStudy(anAnim, aName):
+    myBuilder.NewCommand()
+    newObj = myBuilder.NewObject(father)
+    ior = orb.object_to_string(anAnim)
+    A1 = myBuilder.FindOrCreateAttribute(newObj, "AttributeIOR");
+    ObjIOR = A1._narrow(SALOMEDS.AttributeIOR)
+    ObjIOR.SetValue(ior)
+    A2 = myBuilder.FindOrCreateAttribute(newObj, "AttributeName");
+    ObjName = A2._narrow(SALOMEDS.AttributeName)
+    ObjName.SetValue(aName)
+    A3 = myBuilder.FindOrCreateAttribute(newObj, "AttributeComment");
+    ObjType = A3._narrow(SALOMEDS.AttributeComment)
+    ObjType.SetValue("Kinematic_Animation")
+    A4 = myBuilder.FindOrCreateAttribute(newObj, "AttributePixMap");
+    ObjPixmap = A4._narrow(SALOMEDS.AttributePixMap)
+    ObjPixmap.SetPixMap("ICON_OBJBROWSER_ANIMATION")
+
+    anAss = anAnim.GetAssembly()
+    if anAss is not None:
+           if anAss._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(anAss._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+
+    aFrame = anAnim.GetFrame()
+    if aFrame is not None:
+           if aFrame._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(aFrame._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+    
+    id = newObj.GetID()
+    anAnim._set_StudyShapeId(id)
+    myBuilder.CommitCommand()
+    return id
+
+def GetContactName(aType):
+    if aType == 0:
+           aName = "Embedding"
+    elif aType == 1:
+           aName = "Pivot"
+    elif aType == 2:
+           aName = "Slide"
+    elif aType == 3:
+           aName = "Sliding Pivot"
+    elif aType == 4:
+           aName = "Spherical"
+    elif aType == 5:
+           aName = "Plane"
+    elif aType == 6:
+           aName = "Annular"
+    elif aType == 7:
+           aName = "Rectilinear"
+    elif aType == 8:
+           aName = "Ponctual"
+    elif aType == 9:
+           aName = "Helicoidal"
+    else:
+           aName = "Contact"
+    return aName
index 93ef60c3b2c8361d5a4f3fd12baf7049c02e5246..2a128aebe717e62ad214a3332ec281e07782254e 100644 (file)
@@ -180,7 +180,7 @@ def MakeCircle(p1,d1,radius):
 
 def MakeEllipse(p1,d1,radiusMaj,radiusMin):  
     anObj = geom.MakeEllipse(p1,d1,radiusMaj, radiusMin)
-    ior = orb.object_to_string(anObj)
+    ior = salome.orb.object_to_string(anObj)
     anObj._set_Name(ior)
     return anObj
 
@@ -394,10 +394,11 @@ def Partition(ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[],
     return anObj
 
 def SuppressFaces(aShape,ListOfId):
-    anObj = geom.SuppressFaces(aShape,ListOfId)
-    ior = salome.orb.object_to_string(anObj)
-    anObj._set_Name(ior)
-    return anObj
+    ListObj = geom.SuppressFaces(aShape,ListOfId)
+    for anObj in ListObj :
+           ior = salome.orb.object_to_string(anObj)
+           anObj._set_Name(ior)
+    return ListObj
 
 def SuppressHole(aShape,ListOfFace,ListOfWire,ListOfEndFace):
     anObj = geom.SuppressHole(aShape,ListOfFace,ListOfWire,ListOfEndFace)
@@ -486,3 +487,166 @@ def Archimede(aShape,weight,WaterDensity,MeshingDeflection):
 def CheckShape(aShape):        
     Status = geom.CheckShape(aShape)
     return Status
+
+# -----------------------------------------------------------------------------
+# Kinematic objects
+# -----------------------------------------------------------------------------
+
+def InitAssembly():
+    anObj = geom.InitAssembly()
+    ior = salome.orb.object_to_string(anObj)
+    anObj._set_Name(ior)
+    return anObj
+
+def AddContact(Ass,Shape1,Shape2,Type,Step):
+    anObj = geom.AddContact(Ass,Shape1,Shape2,Type,Step)
+    ior = salome.orb.object_to_string(anObj)
+    anObj._set_Name(ior)
+    return anObj
+
+def AddAnimation(Ass,Frame,Duration,NbSeq):
+    anObj = geom.AddAnimation(Ass,Frame,Duration,NbSeq)
+    ior = salome.orb.object_to_string(anObj)
+    anObj._set_Name(ior)
+    return anObj
+
+def SetPosition(aContact):
+    geom.SetPosition(aContact)
+
+def SetRotation(aContact):
+    geom.SetRotation(aContact)
+
+def SetTranslation(aContact):
+    geom.SetTranslation(aContact)
+
+def addAssemblyToStudy(anAss, aName):
+    myBuilder.NewCommand()
+    newObj = myBuilder.NewObject(father)
+    ior = salome.orb.object_to_string(anAss)
+    A1 = myBuilder.FindOrCreateAttribute(newObj, "AttributeIOR");
+    ObjIOR = A1._narrow(SALOMEDS.AttributeIOR)
+    ObjIOR.SetValue(ior)
+    A2 = myBuilder.FindOrCreateAttribute(newObj, "AttributeName");
+    ObjName = A2._narrow(SALOMEDS.AttributeName)
+    ObjName.SetValue(aName)
+    A3 = myBuilder.FindOrCreateAttribute(newObj, "AttributeComment");
+    ObjType = A3._narrow(SALOMEDS.AttributeComment)
+    ObjType.SetValue("Kinematic_Assembly")
+    A4 = myBuilder.FindOrCreateAttribute(newObj, "AttributePixMap");
+    ObjPixmap = A4._narrow(SALOMEDS.AttributePixMap)
+    ObjPixmap.SetPixMap("ICON_OBJBROWSER_ASSEMBLY")
+    
+    id = newObj.GetID()
+    anAss._set_StudyShapeId(id)
+    myBuilder.CommitCommand()
+    return id
+
+def addContactToStudy(anAss, aContact, aName):
+    myBuilder.NewCommand()
+    newObj = myBuilder.NewObject(salome.IDToSObject(anAss._get_StudyShapeId()))
+    ior = salome.orb.object_to_string(aContact)
+    A1 = myBuilder.FindOrCreateAttribute(newObj, "AttributeIOR");
+    ObjIOR = A1._narrow(SALOMEDS.AttributeIOR)
+    ObjIOR.SetValue(ior)
+    A2 = myBuilder.FindOrCreateAttribute(newObj, "AttributeName");
+    ObjName = A2._narrow(SALOMEDS.AttributeName)
+    ObjName.SetValue(aName)
+    A3 = myBuilder.FindOrCreateAttribute(newObj, "AttributeComment");
+    ObjType = A3._narrow(SALOMEDS.AttributeComment)
+    ObjType.SetValue("Kinematic_Contact")
+    A4 = myBuilder.FindOrCreateAttribute(newObj, "AttributePixMap");
+    ObjPixmap = A4._narrow(SALOMEDS.AttributePixMap)
+    ObjPixmap.SetPixMap("ICON_OBJBROWSER_CONTACT")
+
+    aTypeName = GetContactName(aContact.GetType())
+    ObjRef = myBuilder.NewObject(newObj)
+    A5 = myBuilder.FindOrCreateAttribute(ObjRef, "AttributeName");
+    ObjRefName = A5._narrow(SALOMEDS.AttributeName)
+    ObjRefName.SetValue(aTypeName)
+    A6 = myBuilder.FindOrCreateAttribute(ObjRef, "AttributeSelectable");
+    ObjRefSel = A6._narrow(SALOMEDS.AttributeSelectable)
+    ObjRefSel.SetSelectable(0)
+
+    aShape = aContact.GetShape1()
+    if aShape is not None:
+           if aShape._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(aShape._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+
+    aShape = aContact.GetShape2()
+    if aShape is not None:
+           if aShape._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(aShape._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+    
+    id = newObj.GetID()
+    aContact._set_StudyShapeId(id)
+    myBuilder.CommitCommand()
+    return id
+
+def addAnimationToStudy(anAnim, aName):
+    myBuilder.NewCommand()
+    newObj = myBuilder.NewObject(father)
+    ior = salome.orb.object_to_string(anAnim)
+    A1 = myBuilder.FindOrCreateAttribute(newObj, "AttributeIOR");
+    ObjIOR = A1._narrow(SALOMEDS.AttributeIOR)
+    ObjIOR.SetValue(ior)
+    A2 = myBuilder.FindOrCreateAttribute(newObj, "AttributeName");
+    ObjName = A2._narrow(SALOMEDS.AttributeName)
+    ObjName.SetValue(aName)
+    A3 = myBuilder.FindOrCreateAttribute(newObj, "AttributeComment");
+    ObjType = A3._narrow(SALOMEDS.AttributeComment)
+    ObjType.SetValue("Kinematic_Animation")
+    A4 = myBuilder.FindOrCreateAttribute(newObj, "AttributePixMap");
+    ObjPixmap = A4._narrow(SALOMEDS.AttributePixMap)
+    ObjPixmap.SetPixMap("ICON_OBJBROWSER_ANIMATION")
+
+    anAss = anAnim.GetAssembly()
+    if anAss is not None:
+           if anAss._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(anAss._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+
+    aFrame = anAnim.GetFrame()
+    if aFrame is not None:
+           if aFrame._get_StudyShapeId()!="":
+                   Obj = salome.IDToSObject(aFrame._get_StudyShapeId())
+                   if Obj is not None:
+                           Obj1 = myBuilder.NewObject(newObj)
+                           myBuilder.Addreference(Obj1, Obj)
+    
+    id = newObj.GetID()
+    anAnim._set_StudyShapeId(id)
+    myBuilder.CommitCommand()
+    return id
+
+def GetContactName(aType):
+    if aType == 0:
+           aName = "Embedding"
+    elif aType == 1:
+           aName = "Pivot"
+    elif aType == 2:
+           aName = "Slide"
+    elif aType == 3:
+           aName = "Sliding Pivot"
+    elif aType == 4:
+           aName = "Spherical"
+    elif aType == 5:
+           aName = "Plane"
+    elif aType == 6:
+           aName = "Annular"
+    elif aType == 7:
+           aName = "Rectilinear"
+    elif aType == 8:
+           aName = "Ponctual"
+    elif aType == 9:
+           aName = "Helicoidal"
+    else:
+           aName = "Contact"
+    return aName
index 06eb796c094e82a596bc978d58c7862f4c82b6bf..f0da705f02edd4b04cca5c4b78fcafcdcbe7f3b4 100644 (file)
@@ -53,7 +53,7 @@ LIB_MOC = \
                GenerationGUI_FillingDlg.h \
                GenerationGUI_PipeDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
diff --git a/src/KINEMATIC/Kinematic_Animation.cxx b/src/KINEMATIC/Kinematic_Animation.cxx
new file mode 100644 (file)
index 0000000..935443e
--- /dev/null
@@ -0,0 +1,189 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Animation.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "Kinematic_Animation.hxx"
+
+#include <Geom_Transformation.hxx>
+#include <AIS_Shape.hxx>
+#include <unistd.h>
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Animation::Kinematic_Animation()
+{
+  myIsShading = false;
+  IsCreated = false;
+  myNbAIS = 0;
+  return;
+}
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Animation::Kinematic_Animation(Kinematic_Assembly* Ass, TopoDS_Shape frame,
+                                        double duration, int nbseq)
+{
+  myAss = Ass;
+  myFrame = frame;
+  myDuration = duration;
+  myNbSeq = nbseq;
+  myIsShading = false;
+  IsCreated = false;
+  myNbAIS = 0;
+  this->SetMap();
+  return;
+}
+
+
+//=================================================================================
+// function : ~Kinematic_Animation()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+Kinematic_Animation::~Kinematic_Animation() {}
+
+
+//=================================================================================
+// function : SetMap()
+// purpose  : 
+//=================================================================================
+void Kinematic_Animation::SetMap()
+{
+  list <Kinematic_Contact *> ContactList = myAss->GetContactList();
+  Kinematic_Contact* aContact;
+
+  list <Kinematic_Contact *>::const_iterator it = ContactList.begin();
+  while(it != ContactList.end()) {
+    aContact = *it;
+    if(!myIndexToShape.Contains(aContact->Shape1()))
+      myIndexToShape.Add(aContact->Shape1());
+
+    if(!myIndexToShape.Contains(aContact->Shape2()))
+      myIndexToShape.Add(aContact->Shape2());
+    
+    it++;
+  }
+
+  for(int i = 1; i <= myIndexToShape.Extent(); i++) {
+    it = ContactList.begin();
+    list <Kinematic_Contact *> ContactListOfShape;
+    TopoDS_Shape myShape = myIndexToShape.FindKey(i);
+    while(it != ContactList.end()) {
+      aContact = *it;
+      if(myShape == aContact->Shape1() || myShape == aContact->Shape2())
+      ContactListOfShape.push_back(aContact);
+      it++;
+    }
+    myStlMapofShapeListOfContact[i] = ContactListOfShape;
+  }
+
+  return;
+}
+
+
+//=================================================================================
+// function : GetNextShape()
+// purpose  : 
+//=================================================================================
+void Kinematic_Animation::GetNextShape(const Handle(AIS_InteractiveContext)& ic,
+                                      gp_Trsf& aLoc, TopoDS_Shape Shape1, double Step)
+{
+  int j = 0;
+  list <Kinematic_Contact *> ContactListOfShape;
+  Kinematic_Contact* aContact;
+  TopoDS_Shape myShape, myShape2, aNewShape;
+
+  for(int i = 1; i <= myIndexToShape.Extent(); i++) {
+    myShape = myIndexToShape.FindKey(i);
+    if(myShape == Shape1) {
+      gp_Trsf aNewLoc = aLoc;
+      ContactListOfShape = myStlMapofShapeListOfContact[i];
+      list <Kinematic_Contact *>::const_iterator it = ContactListOfShape.begin();
+      while(it != ContactListOfShape.end()) {
+       aContact = *it;
+       if(aContact->Shape1() == Shape1)
+         myShape2 = aContact->Shape2();
+       else if(aContact->Shape2() == Shape1)
+         myShape2 = aContact->Shape1();
+
+       if(!myMovedShape.Contains(myShape2)) {
+         myMovedShape.Add(myShape2);
+
+         if(!IsCreated) {
+           Handle(AIS_Shape) mySimulationShape;
+           mySimulationShape = new AIS_Shape(TopoDS_Shape());
+           mySimulationShape->Set(myShape2);
+           ListOfAIS.Append(mySimulationShape);
+         }
+         else
+           MoveShape(ic, aLoc, aContact, Step);
+
+         GetNextShape(ic, aLoc, myShape2, Step);
+       }
+       aLoc = aNewLoc;
+       it++;
+      }
+      return;
+    }
+  }
+  return;
+}
+
+
+//=================================================================================
+// function : CreateShape()
+// purpose  : 
+//=================================================================================
+void Kinematic_Animation::MoveShape(const Handle(AIS_InteractiveContext)& ic,
+                                   gp_Trsf& aLoc, Kinematic_Contact* aContact,
+                                   double Step)
+{
+  gp_Trsf aTrans = aContact->GetTransformation(Step);
+  aLoc = aLoc * aTrans;
+
+  myNbAIS++;
+  Handle(AIS_Shape) mySimulationShape = Handle(AIS_Shape)::DownCast(ListOfAIS.Value(myNbAIS));
+  Handle(Geom_Transformation) aGTrans = new Geom_Transformation();
+  aGTrans->SetTrsf(aLoc);
+  mySimulationShape->SetTransformation(aGTrans, false, false);
+
+  if(myIsShading) {
+    mySimulationShape->SetColor(Quantity_NOC_GOLDENROD);
+    ic->SetDisplayMode(mySimulationShape, 1, Standard_False);
+  }
+  else {
+    mySimulationShape->SetColor(Quantity_NOC_GREEN);
+    ic->SetDisplayMode(mySimulationShape, 0, Standard_False);
+  }
+  ic->Display(mySimulationShape, Standard_False);
+  return;
+}
diff --git a/src/KINEMATIC/Kinematic_Animation.hxx b/src/KINEMATIC/Kinematic_Animation.hxx
new file mode 100644 (file)
index 0000000..258665a
--- /dev/null
@@ -0,0 +1,85 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Animation.hxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef _KINEMATIC_ANIMATION_HXX
+#define _KINEMATIC_ANIMATION_HXX
+
+#include "Kinematic_Assembly.hxx"
+
+#include <TopoDS_Shape.hxx>
+#include <TDF_Label.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <AIS_InteractiveContext.hxx>
+#include <AIS_SequenceOfInteractive.hxx>
+
+#include <list>
+#include <map>
+
+class Kinematic_Animation
+{
+public:
+  Kinematic_Animation();
+  Kinematic_Animation(Kinematic_Assembly* Ass, TopoDS_Shape frame,
+                     double duration, int nbseq);
+  ~Kinematic_Animation();
+
+private:
+  map <int, list <Kinematic_Contact *> > myStlMapofShapeListOfContact;
+  Kinematic_Assembly* myAss;
+  TopoDS_Shape myFrame;
+  double myDuration;
+  int myNbSeq;
+
+public:
+  AIS_SequenceOfInteractive ListOfAIS;
+  TopTools_IndexedMapOfShape myIndexToShape;
+  TopTools_IndexedMapOfShape myMovedShape;
+  bool IsCreated;
+  int myNbAIS;
+  bool myIsShading;
+
+  void SetMap();
+  void GetNextShape(const Handle (AIS_InteractiveContext)& ic, 
+                   gp_Trsf& aLoc, TopoDS_Shape Shape1, double Step);
+  void MoveShape(const Handle(AIS_InteractiveContext)& ic,
+                gp_Trsf& aLoc, Kinematic_Contact* aContact,
+                double Step);
+
+  void Assembly(Kinematic_Assembly* Assembly){myAss = Assembly;};
+  void Frame(TopoDS_Shape Frame){myFrame = Frame;};
+  void Duration(double Duration){myDuration = Duration;};
+  void NbSeq(int NbSeq){myNbSeq = NbSeq;};
+
+  Kinematic_Assembly* Assembly(){return myAss;};
+  TopoDS_Shape& Frame(){return myFrame;};
+  double& Duration(){return myDuration;};
+  int& NbSeq(){return myNbSeq;};
+
+};
+
+#endif
diff --git a/src/KINEMATIC/Kinematic_Assembly.cxx b/src/KINEMATIC/Kinematic_Assembly.cxx
new file mode 100644 (file)
index 0000000..4616304
--- /dev/null
@@ -0,0 +1,69 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Assembly.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "Kinematic_Assembly.hxx"
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Assembly::Kinematic_Assembly()
+{
+
+}
+
+
+//=================================================================================
+// function : ~Kinematic_Assembly()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+Kinematic_Assembly::~Kinematic_Assembly()
+{  
+}
+
+
+//=================================================================================
+// function : GetContactList()
+// purpose  : 
+//=================================================================================
+list <Kinematic_Contact *> Kinematic_Assembly::GetContactList()
+{
+  return ContactList;
+}
+
+
+//=================================================================================
+// function : AddContact()
+// purpose  : 
+//=================================================================================
+void Kinematic_Assembly::AddContact(Kinematic_Contact* aContact)
+{
+  ContactList.push_back(aContact);
+}
diff --git a/src/KINEMATIC/Kinematic_Assembly.hxx b/src/KINEMATIC/Kinematic_Assembly.hxx
new file mode 100644 (file)
index 0000000..ecd5d04
--- /dev/null
@@ -0,0 +1,52 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Assembly.hxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef _KINEMATIC_ASSEMBLY_HXX
+#define _KINEMATIC_ASSEMBLY_HXX
+
+#include "Kinematic_Contact.hxx"
+
+#include <list>
+
+class Kinematic_Assembly
+{
+
+public:
+  Kinematic_Assembly();
+  ~Kinematic_Assembly();
+
+private:
+  list <Kinematic_Contact *> ContactList;
+
+public:
+  list <Kinematic_Contact *> GetContactList();
+  void AddContact(Kinematic_Contact* aContact);
+
+};
+
+#endif
diff --git a/src/KINEMATIC/Kinematic_Contact.cxx b/src/KINEMATIC/Kinematic_Contact.cxx
new file mode 100644 (file)
index 0000000..e4c8ceb
--- /dev/null
@@ -0,0 +1,133 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Contact.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "Kinematic_Contact.hxx"
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Contact::Kinematic_Contact(){}
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Contact::Kinematic_Contact(TopoDS_Shape Shape1, TopoDS_Shape Shape2,
+                                    int type, double step)
+{
+  myType = type;
+  myShape1 = Shape1;
+  myShape2 = Shape2;
+  myStep = step;
+
+  gp_Pnt Origin(0, 0, 0);
+  gp_Dir DirX(1, 0, 0);
+  gp_Dir DirY(0, 1, 0);
+  gp_Dir DirZ(0, 0, 1);
+
+  Kinematic_Position Pos(Origin, DirX, DirY, DirZ);
+  Kinematic_Rotation Rot(1, 2, 3, 0, 0, 0);
+  Kinematic_Translation Trans(0, 0, 0);
+
+  myPosition = Pos;
+  myRotation = Rot;
+  myTranslation = Trans;
+}
+
+
+//=================================================================================
+// function : ~Kinematic_Contact()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+Kinematic_Contact::~Kinematic_Contact() {}
+
+
+//=================================================================================
+// function : GetTransformation()
+// purpose  : 
+//=================================================================================
+gp_Trsf Kinematic_Contact::GetTransformation(double Step)
+{
+  gp_Vec aVect;
+  gp_Trsf aTransformation, aRot, aRot1, aRot2, aRot3;
+
+  aVect.SetCoord(Step * myTranslation.ValX(), Step * myTranslation.ValY(), Step * myTranslation.ValZ());
+  aTransformation.SetTranslation(aVect);
+
+  if(myRotation.Rot1() == 1) { //Axe X
+    aRot1.SetRotation(myPosition.AxeX(), Step * myRotation.ValX() * PI / 180);
+    if(myRotation.Rot2() == 2) {
+      aRot2.SetRotation(myPosition.AxeY(), Step * myRotation.ValY() * PI / 180);
+      aRot3.SetRotation(myPosition.AxeZ(), Step * myRotation.ValZ() * PI / 180);
+    } else {
+      aRot2.SetRotation(myPosition.AxeZ(), Step * myRotation.ValZ() * PI / 180);
+      aRot3.SetRotation(myPosition.AxeY(), Step * myRotation.ValY() * PI / 180);
+    }
+  } else if(myRotation.Rot1() == 2) { //Axe Y
+    aRot1.SetRotation(myPosition.AxeY(), Step * myRotation.ValY() * PI / 180);
+    if(myRotation.Rot2() == 1) {
+      aRot2.SetRotation(myPosition.AxeX(), Step * myRotation.ValX() * PI / 180);
+      aRot3.SetRotation(myPosition.AxeZ(), Step * myRotation.ValZ() * PI / 180);
+    } else {
+      aRot2.SetRotation(myPosition.AxeZ(), Step * myRotation.ValZ() * PI / 180);
+      aRot3.SetRotation(myPosition.AxeX(), Step * myRotation.ValX() * PI / 180);
+    }
+  } else if(myRotation.Rot1() == 3) { //Axe Z
+    aRot1.SetRotation(myPosition.AxeZ(), Step * myRotation.ValZ() * PI / 180);
+    if(myRotation.Rot2() == 1) {
+      aRot2.SetRotation(myPosition.AxeX(), Step * myRotation.ValX() * PI / 180);
+      aRot3.SetRotation(myPosition.AxeY(), Step * myRotation.ValY() * PI / 180);
+    } else {
+      aRot2.SetRotation(myPosition.AxeY(), Step * myRotation.ValY() * PI / 180);
+      aRot3.SetRotation(myPosition.AxeX(), Step * myRotation.ValX() * PI / 180);
+    }
+  }
+
+  aRot = aRot1 * aRot2 * aRot3;
+  aTransformation = aTransformation * aRot;
+
+  return aTransformation;
+}
+
+
+//=================================================================================
+// function : GetLocation()
+// purpose  : 
+//=================================================================================
+TopLoc_Location Kinematic_Contact::GetLocation()
+{
+  gp_Trsf aTrans;
+
+  aTrans.SetTransformation(myPosition.Axe3());
+  TopLoc_Location aLoc(aTrans);
+
+  return aLoc;
+}
diff --git a/src/KINEMATIC/Kinematic_Contact.hxx b/src/KINEMATIC/Kinematic_Contact.hxx
new file mode 100644 (file)
index 0000000..ac5678e
--- /dev/null
@@ -0,0 +1,80 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Contact.hxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef _KINEMATIC_CONTACT_HXX
+#define _KINEMATIC_CONTACT_HXX
+
+#include <TopoDS_Shape.hxx>
+#include <TDF_Label.hxx>
+#include <gp_Trsf.hxx>
+#include <TopLoc_Location.hxx>
+
+#include "Kinematic_Position.hxx"
+#include "Kinematic_Rotation.hxx"
+#include "Kinematic_Translation.hxx"
+
+class Kinematic_Contact
+{
+public:
+  Kinematic_Contact();
+  Kinematic_Contact(TopoDS_Shape Shape1, TopoDS_Shape Shape2,
+                   int type, double step);
+  ~Kinematic_Contact();
+
+private:
+  int myType;
+  TopoDS_Shape myShape1;
+  TopoDS_Shape myShape2;
+  double myStep;
+  Kinematic_Position myPosition;
+  Kinematic_Rotation myRotation;
+  Kinematic_Translation myTranslation;
+
+public:
+  gp_Trsf GetTransformation(double Step = 1);
+  TopLoc_Location GetLocation();
+
+  void Type(int Type){myType = Type;};
+  void Shape1(TopoDS_Shape Shape1){myShape1 = Shape1;};
+  void Shape2(TopoDS_Shape Shape2){myShape2 = Shape2;};
+  void Step(double Step){myStep = Step;};
+  void Position(Kinematic_Position& Position){myPosition = Position;};
+  void Rotation(Kinematic_Rotation& Rotation){myRotation = Rotation;};
+  void Translation(Kinematic_Translation& Translation){myTranslation = Translation;};
+
+  int& Type(){return myType;};
+  TopoDS_Shape& Shape1(){return myShape1;};
+  TopoDS_Shape& Shape2(){return myShape2;};
+  double& Step(){return myStep;};
+  Kinematic_Position& Position(){return myPosition;};
+  Kinematic_Rotation& Rotation(){return myRotation;};
+  Kinematic_Translation& Translation(){return myTranslation;};
+
+};
+
+#endif
diff --git a/src/KINEMATIC/Kinematic_Position.cxx b/src/KINEMATIC/Kinematic_Position.cxx
new file mode 100644 (file)
index 0000000..926fd2e
--- /dev/null
@@ -0,0 +1,107 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Position.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "Kinematic_Position.hxx"
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Position::Kinematic_Position(){}
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Position::Kinematic_Position(gp_Pnt Origin, gp_Dir DirX, gp_Dir DirY, gp_Dir DirZ)
+{
+  myOrigin = Origin;
+  myDirX = DirX;
+  myDirY = DirY;
+  myDirZ = DirZ;
+}
+
+
+//=================================================================================
+// function : ~Kinematic_Position()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+Kinematic_Position::~Kinematic_Position() {}
+
+
+//=================================================================================
+// function : AxeX()
+// purpose  : 
+//=================================================================================
+gp_Ax1 Kinematic_Position::AxeX()
+{
+  gp_Ax1 anAxe;
+  anAxe.SetLocation(myOrigin);
+  anAxe.SetDirection(myDirX);
+  return anAxe;
+}
+
+
+//=================================================================================
+// function : AxeY()
+// purpose  : 
+//=================================================================================
+gp_Ax1 Kinematic_Position::AxeY()
+{
+  gp_Ax1 anAxe;
+  anAxe.SetLocation(myOrigin);
+  anAxe.SetDirection(myDirY);
+  return anAxe;
+}
+
+
+//=================================================================================
+// function : AxeZ()
+// purpose  : 
+//=================================================================================
+gp_Ax1 Kinematic_Position::AxeZ()
+{
+  gp_Ax1 anAxe;
+  anAxe.SetLocation(myOrigin);
+  anAxe.SetDirection(myDirZ);
+  return anAxe;
+}
+
+
+//=================================================================================
+// function : Axe3()
+// purpose  : 
+//=================================================================================
+gp_Ax3 Kinematic_Position::Axe3()
+{
+  gp_Ax3 anAxe3(myOrigin, myDirZ, myDirX);
+  return anAxe3;
+}
diff --git a/src/KINEMATIC/Kinematic_Position.hxx b/src/KINEMATIC/Kinematic_Position.hxx
new file mode 100644 (file)
index 0000000..b03fd9a
--- /dev/null
@@ -0,0 +1,70 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Position.hxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef _KINEMATIC_POSITION_HXX
+#define _KINEMATIC_POSITION_HXX
+
+#include <TopoDS_Shape.hxx>
+#include <gp_Dir.hxx>
+#include <gp_Pnt.hxx>
+#include <gp_Ax1.hxx>
+#include <gp_Ax3.hxx>
+
+class Kinematic_Position
+{
+public:
+  Kinematic_Position();
+  Kinematic_Position(gp_Pnt Origin, gp_Dir DirX, gp_Dir DirY, gp_Dir DirZ);
+  ~Kinematic_Position();
+
+private:
+  gp_Pnt myOrigin;
+  gp_Dir myDirX;
+  gp_Dir myDirY;
+  gp_Dir myDirZ;
+
+public:
+  void Origin(const gp_Pnt& Origin){myOrigin = Origin;};
+  void DirX(const gp_Dir& DirX){myDirX = DirX;};
+  void DirY(const gp_Dir& DirY){myDirY = DirY;};
+  void DirZ(const gp_Dir& DirZ){myDirZ = DirZ;};
+
+  gp_Pnt& Origin(){return myOrigin;};
+  gp_Dir& DirX(){return myDirX;};
+  gp_Dir& DirY(){return myDirY;};
+  gp_Dir& DirZ(){return myDirZ;};
+
+  gp_Ax1 AxeX();
+  gp_Ax1 AxeY();
+  gp_Ax1 AxeZ();
+
+  gp_Ax3 Axe3();
+
+};
+
+#endif
diff --git a/src/KINEMATIC/Kinematic_Rotation.cxx b/src/KINEMATIC/Kinematic_Rotation.cxx
new file mode 100644 (file)
index 0000000..6a78955
--- /dev/null
@@ -0,0 +1,60 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Rotation.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "Kinematic_Rotation.hxx"
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Rotation::Kinematic_Rotation(){}
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Rotation::Kinematic_Rotation(int Rot1, int Rot2, int Rot3, double ValX, double ValY, double ValZ)
+{
+  myRot1 = Rot1;
+  myRot2 = Rot2;
+  myRot3 = Rot3;
+
+  myValX = ValX;
+  myValY = ValY;
+  myValZ = ValZ;
+}
+
+
+//=================================================================================
+// function : ~Kinematic_Rotation()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+Kinematic_Rotation::~Kinematic_Rotation() {}
diff --git a/src/KINEMATIC/Kinematic_Rotation.hxx b/src/KINEMATIC/Kinematic_Rotation.hxx
new file mode 100644 (file)
index 0000000..c6018e6
--- /dev/null
@@ -0,0 +1,65 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Rotation.hxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef _KINEMATIC_ROTATION_HXX
+#define _KINEMATIC_ROTATION_HXX
+
+class Kinematic_Rotation
+{
+public:
+  Kinematic_Rotation();
+  Kinematic_Rotation(int Rot1, int Rot2, int Rot3, double ValX, double ValY, double ValZ);
+  ~Kinematic_Rotation();
+
+private:
+  int myRot1;
+  int myRot2; 
+  int myRot3;
+
+  double myValX;
+  double myValY;
+  double myValZ;
+
+public:
+  void Rot1(int Rot1){myRot1 = Rot1;};
+  void Rot2(int Rot2){myRot2 = Rot2;};
+  void Rot3(int Rot3){myRot3 = Rot3;};
+  void ValX(double ValX){myValX = ValX;};
+  void ValY(double ValY){myValY = ValY;};
+  void ValZ(double ValZ){myValZ = ValZ;};
+
+  int& Rot1(){return myRot1;};
+  int& Rot2(){return myRot2;};
+  int& Rot3(){return myRot3;};
+  double& ValX(){return myValX;};
+  double& ValY(){return myValY;};
+  double& ValZ(){return myValZ;};
+
+};
+
+#endif
diff --git a/src/KINEMATIC/Kinematic_Translation.cxx b/src/KINEMATIC/Kinematic_Translation.cxx
new file mode 100644 (file)
index 0000000..7b8914a
--- /dev/null
@@ -0,0 +1,56 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Translation.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "Kinematic_Translation.hxx"
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Translation::Kinematic_Translation(){}
+
+
+//=======================================================================
+// profile
+// command to build a profile
+//=======================================================================
+Kinematic_Translation::Kinematic_Translation(double ValX, double ValY, double ValZ)
+{
+  myValX = ValX;
+  myValY = ValY;
+  myValZ = ValZ;
+}
+
+
+//=================================================================================
+// function : ~Kinematic_Translation()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+Kinematic_Translation::~Kinematic_Translation() {}
diff --git a/src/KINEMATIC/Kinematic_Translation.hxx b/src/KINEMATIC/Kinematic_Translation.hxx
new file mode 100644 (file)
index 0000000..de5faa8
--- /dev/null
@@ -0,0 +1,55 @@
+//  GEOM KINEMATIC
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : Kinematic_Translation.hxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef _KINEMATIC_TRANSLATION_HXX
+#define _KINEMATIC_TRANSLATION_HXX
+
+class Kinematic_Translation
+{
+public:
+  Kinematic_Translation();
+  Kinematic_Translation(double ValX, double ValY, double ValZ);
+  ~Kinematic_Translation();
+
+private:
+  double myValX;
+  double myValY;
+  double myValZ;
+
+public:
+  void ValX(double ValX){myValX = ValX;};
+  void ValY(double ValY){myValY = ValY;};
+  void ValZ(double ValZ){myValZ = ValZ;};
+
+  double& ValX(){return myValX;};
+  double& ValY(){return myValY;};
+  double& ValZ(){return myValZ;};
+
+};
+
+#endif
diff --git a/src/KINEMATIC/Makefile.in b/src/KINEMATIC/Makefile.in
new file mode 100644 (file)
index 0000000..7084320
--- /dev/null
@@ -0,0 +1,62 @@
+#  GEOM GEOMBASE : 
+#
+#  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+# 
+#  This library is free software; you can redistribute it and/or 
+#  modify it under the terms of the GNU Lesser General Public 
+#  License as published by the Free Software Foundation; either 
+#  version 2.1 of the License. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+# 
+#  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+#
+#
+#
+#  File   : Makefile.in
+#  Author : Damien COQUERET (OCC)
+#  Module : GEOM
+#  $Header: 
+
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl
+
+
+@COMMENCE@
+
+# Libraries targets
+LIB = libGEOMKinematic.la 
+LIB_SRC =      Kinematic_Position.cxx \
+               Kinematic_Rotation.cxx \
+               Kinematic_Translation.cxx \
+               Kinematic_Contact.cxx \
+               Kinematic_Assembly.cxx \
+               Kinematic_Animation.cxx
+
+LIB_CLIENT_IDL = 
+
+# header files 
+EXPORT_HEADERS =       Kinematic_Position.hxx \
+                       Kinematic_Rotation.hxx \
+                       Kinematic_Translation.hxx \
+                       Kinematic_Contact.hxx \
+                       Kinematic_Assembly.hxx \
+                       Kinematic_Animation.hxx
+
+# additionnal information to compil and link file
+CPPFLAGS += $(OCC_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome
+CXXFLAGS += $(OCC_CXXFLAGS) -I${KERNEL_ROOT_DIR}/include/salome
+
+LDFLAGS += -L${KERNEL_ROOT_DIR}/lib/salome
+
+@CONCLUDE@
diff --git a/src/KinematicGUI/KinematicGUI.cxx b/src/KinematicGUI/KinematicGUI.cxx
new file mode 100644 (file)
index 0000000..51ac476
--- /dev/null
@@ -0,0 +1,686 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI.h"
+
+#include "QAD_RightFrame.h"
+#include "OCCViewer_Viewer3d.h"
+#include "SALOMEGUI_QtCatchCorbaException.hxx"
+#include "SALOMEGUI_ImportOperation.h"
+
+#include <list>
+#include <map>
+
+#include "KinematicGUI_ContactDlg.h"     // Method CONTACT
+#include "KinematicGUI_ContactHDlg.h"    // Method CONTACT HELICOIDAL
+#include "KinematicGUI_PositionDlg.h"    // Method POSITION
+#include "KinematicGUI_RotationDlg.h"    // Method ROTATION
+#include "KinematicGUI_TranslationDlg.h" // Method TRANSLATION
+#include "KinematicGUI_AnimationDlg.h"   // Method Create ANIMATION
+#include "KinematicGUI_AnimDlg.h"        // Method Play ANIMATION
+
+//=======================================================================
+// function : KinematicGUI()
+// purpose  : Constructor
+//=======================================================================
+KinematicGUI::KinematicGUI() :
+  QObject()
+{
+  myGeomBase = new GEOMBase();
+  myGeomGUI = GEOMContext::GetGeomGUI();
+  myGeom = myGeomGUI->myComponentGeom;
+}
+
+
+//=======================================================================
+// function : ~KinematicGUI()
+// purpose  : Destructor
+//=======================================================================
+KinematicGUI::~KinematicGUI()
+{
+}
+
+
+//=======================================================================
+// function : OnGUIEvent()
+// purpose  : 
+//=======================================================================
+bool KinematicGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
+{
+  KinematicGUI* myKinematicGUI = new KinematicGUI();
+  myKinematicGUI->myGeomGUI->EmitSignalDeactivateDialog();
+  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
+
+  switch (theCommandID)
+    {
+    case 611: // ASSEMBLY
+      {
+       myKinematicGUI->AddNewAssembly();
+       break;
+      }
+    case 61201: // EMBEDDING
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 0);
+       break;
+      }
+    case 61202: // PIVOT
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 1);
+       break;
+      }
+    case 61203: // SLIDE
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 2);
+       break;
+      }
+    case 61204: // SLIDING PIVOT
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 3);
+       break;
+      }
+    case 61205: // SPHERICAL
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 4);
+       break;
+      }
+    case 61206: // PLANE
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 5);
+       break;
+      }
+    case 61207: // ANNULAR
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 6);
+       break;
+      }
+    case 61208: // RECTILINEAR
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 7);
+       break;
+      }
+    case 61209: // PONCTUAL
+      {
+       KinematicGUI_ContactDlg *aDlg = new KinematicGUI_ContactDlg(parent, "", myKinematicGUI, Sel, 8);
+       break;
+      }
+    case 61210: // HELICOIDAL
+      {
+       KinematicGUI_ContactHDlg *aDlg = new KinematicGUI_ContactHDlg(parent, "", myKinematicGUI, Sel);
+       break;
+      }
+    case 6131: // ROTATION
+      {
+       KinematicGUI_PositionDlg *aDlg = new KinematicGUI_PositionDlg(parent, "", myKinematicGUI, Sel, true);
+       break;
+      }
+    case 6132: // ROTATION
+      {
+       KinematicGUI_RotationDlg *aDlg = new KinematicGUI_RotationDlg(parent, "", myKinematicGUI, Sel, true);
+       break;
+      }
+    case 6133: // TRANSLATION
+      {
+       KinematicGUI_TranslationDlg *aDlg = new KinematicGUI_TranslationDlg(parent, "", myKinematicGUI, Sel, true);
+       break;
+      }
+    case 614: // ANIMATION
+      {
+       KinematicGUI_AnimationDlg *aDlg = new KinematicGUI_AnimationDlg(parent, "", myKinematicGUI, Sel);
+       break;
+      }
+    case 6141: // RUN ANIMATION
+      {
+       if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
+         Handle(AIS_InteractiveContext) ic;
+         OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
+         ic = v3d->getAISContext();
+         KinematicGUI_AnimDlg *aDlg = new KinematicGUI_AnimDlg(parent, "", myKinematicGUI, Sel, ic, true);
+       }
+       break;
+      }
+    default:
+      {
+       parent->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
+       break;
+      }
+    }
+  return true;
+}
+
+
+//=======================================================================
+// function : AddNewAssembly()
+// purpose  : 
+//=======================================================================
+void KinematicGUI::AddNewAssembly()
+{
+  try {
+    GEOM::GEOM_Assembly_ptr result = myGeom->InitAssembly();
+    if(result->_is_nil()) {
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_NULLSHAPE")); 
+      return;
+    }  
+
+    if(this->AddAssemblyInStudy(result))
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
+  }
+  catch(const SALOME::SALOME_Exception& S_ex) {
+    QtCatchCorbaException(S_ex);
+  }
+  return;
+}
+
+
+//=======================================================================
+// function : AddContact()
+// purpose  : 
+//=======================================================================
+void KinematicGUI::AddContact(GEOM::GEOM_Assembly_ptr Ass, GEOM::GEOM_Shape_ptr Shape1,
+                             GEOM::GEOM_Shape_ptr Shape2, int type, double step)
+{
+  try {
+    GEOM::GEOM_Contact_ptr result = myGeom->AddContact(Ass, Shape1, Shape2, type, step);
+    if(result->_is_nil()) {
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_NULLSHAPE")); 
+      return;
+    }  
+    
+    if(this->AddContactInStudy(Ass, result))
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
+  }
+  catch(const SALOME::SALOME_Exception& S_ex) {
+    QtCatchCorbaException(S_ex);
+  }
+  return;
+}
+
+
+//=======================================================================
+// function : AddAnimation()
+// purpose  : 
+//=======================================================================
+void KinematicGUI::AddAnimation(GEOM::GEOM_Assembly_ptr Ass, GEOM::GEOM_Shape_ptr Shape1,
+                               double Duration, int NbSeq)
+{
+  try {
+    GEOM::GEOM_Animation_ptr result = myGeom->AddAnimation(Ass, Shape1, Duration, NbSeq);
+    if(result->_is_nil()) {
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_NULLSHAPE")); 
+      return;
+    }  
+
+    if(this->AddAnimationInStudy(result))
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
+  }
+  catch(const SALOME::SALOME_Exception& S_ex) {
+    QtCatchCorbaException(S_ex);
+  }
+  return;
+}
+
+
+//=====================================================================================
+// function : AddAssemblyInStudy()
+// purpose  : 
+//=====================================================================================
+bool KinematicGUI::AddAssemblyInStudy(GEOM::GEOM_Assembly_ptr aAssembly)
+{
+  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var aName;
+  SALOMEDS::AttributePixMap_var aPixmap;
+  SALOMEDS::AttributeIOR_var anIOR;
+  SALOMEDS::AttributeComment_var aType;
+
+  SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
+  int aLocked = false;
+  if(father->_is_nil()) {
+    QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
+    op->start();
+    aLocked = aStudy->GetProperties()->IsLocked();
+    if(aLocked)
+      aStudy->GetProperties()->SetLocked(false);
+    father = aStudyBuilder->NewComponent("GEOM");
+    anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(QAD_Application::getDesktop()->getComponentUserName("GEOM"));
+    anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap("ICON_OBJBROWSER_Geometry");
+    if(aLocked)
+      aStudy->GetProperties()->SetLocked(true);
+    op->finish();
+  }
+
+  aStudyBuilder->DefineComponentInstance(father, myGeom);
+  father->ComponentIOR(myGeomGUI->GetFatherior());
+  
+  SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry());
+  
+  TCollection_AsciiString nameG("Assembly_");
+  nameG += TCollection_AsciiString(myGeomGUI->GetNbGeom()++) + TCollection_AsciiString("\0");
+
+  // open transaction
+  QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
+  op->start();
+
+  SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(father);
+  /* For the shape inserted into the study we set its field 'studyshapeid'    */
+  /* so the shape will contain its corresponding entry in the study Ocaf doc. */
+  aAssembly->StudyShapeId(newObj->GetID());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
+  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+  anIOR->SetValue(aAssembly->Name());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
+  aName = SALOMEDS::AttributeName::_narrow(anAttr);
+  aName->SetValue(nameG.ToCString());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment");
+  aType = SALOMEDS::AttributeComment::_narrow(anAttr);
+  aType->SetValue("Kinematic_Assembly");
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
+  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+  aPixmap->SetPixMap("ICON_OBJBROWSER_ASSEMBLY");
+
+  SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
+  aStudyBuilder->Addreference(newObj1, newObj);
+
+  op->finish();
+
+  QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
+  return true;
+}
+
+
+//=====================================================================================
+// function : AddContactInStudy()
+// purpose  : 
+//=====================================================================================
+bool KinematicGUI::AddContactInStudy(GEOM::GEOM_Assembly_ptr Ass, GEOM::GEOM_Contact_ptr aContact)
+{
+  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var aName;
+  SALOMEDS::AttributeName_var aTypeName;
+  SALOMEDS::AttributePixMap_var aPixmap;
+  SALOMEDS::AttributeIOR_var anIOR;
+  SALOMEDS::AttributeComment_var aType;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+
+  SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry());
+
+  TCollection_AsciiString nameG("Contact_");
+  nameG += TCollection_AsciiString(myGeomGUI->GetNbGeom()++) + TCollection_AsciiString("\0");
+
+  // open transaction
+  QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
+  op->start();
+
+  Standard_CString AssIOR = aStudy->ConvertObjectToIOR(Ass);
+  SALOMEDS::SObject_var theAss = aStudy->FindObjectIOR(AssIOR);
+  SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(theAss);
+  /* For the shape inserted into the study we set its field 'studyshapeid'    */
+  /* so the shape will contain its corresponding entry in the study Ocaf doc. */
+  aContact->StudyShapeId(newObj->GetID());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
+  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+  anIOR->SetValue(aContact->Name());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
+  aName = SALOMEDS::AttributeName::_narrow(anAttr);
+  aName->SetValue(nameG.ToCString());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment");
+  aType = SALOMEDS::AttributeComment::_narrow(anAttr);
+  aType->SetValue("Kinematic_Contact");
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
+  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+  aPixmap->SetPixMap("ICON_OBJBROWSER_CONTACT");
+
+  SALOMEDS::SObject_var RefType = aStudyBuilder->NewObject(newObj);
+  anAttr = aStudyBuilder->FindOrCreateAttribute(RefType, "AttributeName");
+  aTypeName = SALOMEDS::AttributeName::_narrow(anAttr);
+  aTypeName->SetValue(this->GetNameFromType(aContact->GetType()).ToCString());
+  anAttr = aStudyBuilder->FindOrCreateAttribute(RefType, "AttributeSelectable");
+  aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+  aSelAttr->SetSelectable(false);
+
+  Standard_CString Shape1IOR = aStudy->ConvertObjectToIOR(aContact->GetShape1());
+  SALOMEDS::SObject_var theSh1 = aStudy->FindObjectIOR(Shape1IOR);
+  if(!theSh1->_is_nil()) {
+    SALOMEDS::SObject_var RefObject1 = aStudyBuilder->NewObject(newObj);
+    aStudyBuilder->Addreference(RefObject1, theSh1);
+  }
+
+  Standard_CString Shape2IOR = aStudy->ConvertObjectToIOR(aContact->GetShape2());
+  SALOMEDS::SObject_var theSh2 = aStudy->FindObjectIOR(Shape2IOR);
+  if(!theSh2->_is_nil()) {
+    SALOMEDS::SObject_var RefObject2 = aStudyBuilder->NewObject(newObj);
+    aStudyBuilder->Addreference(RefObject2, theSh2);
+  }
+
+  SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
+  aStudyBuilder->Addreference(newObj1, newObj);
+
+  op->finish();
+
+  QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
+  return true;
+}
+
+
+//=====================================================================================
+// function : AddAnimationInStudy()
+// purpose  : 
+//=====================================================================================
+bool KinematicGUI::AddAnimationInStudy(GEOM::GEOM_Animation_ptr aAnimation)
+{
+  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var aName;
+  SALOMEDS::AttributePixMap_var aPixmap;
+  SALOMEDS::AttributeIOR_var anIOR;
+  SALOMEDS::AttributeComment_var aType;
+
+  SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
+  aStudyBuilder->DefineComponentInstance(father, myGeom);
+  father->ComponentIOR(myGeomGUI->GetFatherior());
+  
+  SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry());
+  
+  TCollection_AsciiString nameG("Animation_");
+  nameG += TCollection_AsciiString(myGeomGUI->GetNbGeom()++) + TCollection_AsciiString("\0");
+
+  // open transaction
+  QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
+  op->start();
+
+  SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(father);
+  /* For the shape inserted into the study we set its field 'studyshapeid'    */
+  /* so the shape will contain its corresponding entry in the study Ocaf doc. */
+  aAnimation->StudyShapeId(newObj->GetID());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
+  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+  anIOR->SetValue(aAnimation->Name());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
+  aName = SALOMEDS::AttributeName::_narrow(anAttr);
+  aName->SetValue(nameG.ToCString());
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment");
+  aType = SALOMEDS::AttributeComment::_narrow(anAttr);
+  aType->SetValue("Kinematic_Animation");
+
+  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
+  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+  aPixmap->SetPixMap("ICON_OBJBROWSER_ANIMATION");
+
+  Standard_CString assIOR = aStudy->ConvertObjectToIOR(aAnimation->GetAssembly());
+  SALOMEDS::SObject_var theAss = aStudy->FindObjectIOR(assIOR);
+  if(!theAss->_is_nil()) {
+    SALOMEDS::SObject_var RefObject = aStudyBuilder->NewObject(newObj);
+    aStudyBuilder->Addreference(RefObject, theAss);
+  }
+
+  Standard_CString Shape1IOR = aStudy->ConvertObjectToIOR(aAnimation->GetFrame());
+  SALOMEDS::SObject_var theSh1 = aStudy->FindObjectIOR(Shape1IOR);
+  if(!theSh1->_is_nil()) {
+    SALOMEDS::SObject_var RefObject1 = aStudyBuilder->NewObject(newObj);
+    aStudyBuilder->Addreference(RefObject1, theSh1);
+  }
+
+  SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
+  aStudyBuilder->Addreference(newObj1, newObj);
+
+  op->finish();
+
+  QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
+  return true;
+}
+
+
+//=======================================================================
+// function : SetPosition()
+// purpose  : 
+//=======================================================================
+void KinematicGUI::SetPosition(GEOM::GEOM_Contact_ptr aContact, GEOM::PointStruct P0,
+                              GEOM::DirStruct VX, GEOM::DirStruct VY, GEOM::DirStruct VZ)
+{
+  try {
+    GEOM::GEOM_Position_var myGeomPosition = GEOM::GEOM_Position::_narrow(aContact->GetPosition());
+    myGeomPosition->SetOrigin(P0);
+    myGeomPosition->SetVX(VX);
+    myGeomPosition->SetVY(VY);
+    myGeomPosition->SetVZ(VZ);
+
+    myGeom->SetPosition(aContact);
+  }
+  catch(const SALOME::SALOME_Exception& S_ex) {
+    QtCatchCorbaException(S_ex);
+  }
+  return;
+}
+
+
+//=======================================================================
+// function : SetRotation()
+// purpose  : 
+//=======================================================================
+void KinematicGUI::SetRotation(GEOM::GEOM_Contact_ptr aContact,
+                              int Rot1, int Rot2, int Rot3,
+                              double Val1, double Val2, double Val3)
+{
+  try {
+    GEOM::GEOM_Rotation_var myGeomRotation = GEOM::GEOM_Rotation::_narrow(aContact->GetRotation());
+    myGeomRotation->SetRotation(Rot1, Rot2, Rot3, Val1, Val2, Val3);
+    int type = aContact->GetType();
+    if(type == 9) { //HELICOIDAL
+      GEOM::GEOM_Translation_var myGeomTranslation = GEOM::GEOM_Translation::_narrow(aContact->GetTranslation());
+      double aValY = myGeomTranslation->GetValY();
+      double aValZ = myGeomTranslation->GetValZ();
+      double aStep = aContact->GetStep();
+      double aValX = aStep * Val1 / 360;
+      myGeomTranslation->SetTranslation(aValX, aValY, aValZ);
+    }
+    myGeom->SetRotation(aContact);
+  }
+  catch(const SALOME::SALOME_Exception& S_ex) {
+    QtCatchCorbaException(S_ex);
+  }
+  return;
+}
+
+
+//=======================================================================
+// function : SetTranslation()
+// purpose  : 
+//=======================================================================
+void KinematicGUI::SetTranslation(GEOM::GEOM_Contact_ptr aContact,
+                                 double ValX, double ValY, double ValZ)
+{
+  try {
+    GEOM::GEOM_Translation_var myGeomTranslation = GEOM::GEOM_Translation::_narrow(aContact->GetTranslation());
+    myGeomTranslation->SetTranslation(ValX, ValY, ValZ);
+    int type = aContact->GetType();
+    if(type == 9) { //HELICOIDAL
+      GEOM::GEOM_Rotation_var myGeomRotation = GEOM::GEOM_Rotation::_narrow(aContact->GetRotation());
+      int aRot1 = myGeomRotation->GetRot1();
+      int aRot2 = myGeomRotation->GetRot2();
+      int aRot3 = myGeomRotation->GetRot3();
+      double aVal2 = myGeomRotation->GetVal2();
+      double aVal3 = myGeomRotation->GetVal3();
+      double aStep = aContact->GetStep();
+      double aVal1 = 360 * ValX / aStep;
+      myGeomRotation->SetRotation(aRot1, aRot2, aRot3, aVal1, aVal2, aVal3);
+    }
+    myGeom->SetTranslation(aContact);
+  }
+  catch(const SALOME::SALOME_Exception& S_ex) {
+    QtCatchCorbaException(S_ex);
+  }
+  return;
+}
+
+
+//=====================================================================================
+// function : AddContactInStudy()
+// purpose  : 
+//=====================================================================================
+TCollection_AsciiString KinematicGUI::GetNameFromType(int type)
+{
+  TCollection_AsciiString name("");
+  switch (type)
+    {
+    case 0:
+      {        name = "Embedding"; break; }
+    case 1:
+      {        name = "Pivot"; break; }
+    case 2:
+      {        name = "Slide"; break; }
+    case 3:
+      {        name = "Sliding Pivot"; break; }
+    case 4:
+      {        name = "Spherical"; break; }
+    case 5:
+      {        name = "Plane"; break; }
+    case 6:
+      {        name = "Annular"; break; }
+    case 7:
+      {        name = "Rectilinear"; break; }
+    case 8:
+      {        name = "Ponctual"; break; }
+    case 9:
+      {        name = "Helicoidal"; break; }
+    default:
+      {        name = "Contact"; break; }
+    }
+  return name;
+}
+
+
+//=======================================================================
+// function : CreateContact()
+// purpose  : 
+//=======================================================================
+Kinematic_Contact* KinematicGUI::CreateContact(GEOM::GEOM_Contact_ptr aContact)
+{
+  GEOM::GEOM_Shape_var myShape1 = aContact->GetShape1();
+  GEOM::GEOM_Shape_var myShape2 = aContact->GetShape2();
+  GEOM::GEOM_Position_var myPosition = aContact->GetPosition();
+  GEOM::GEOM_Rotation_var myRotation = aContact->GetRotation();
+  GEOM::GEOM_Translation_var myTranslation = aContact->GetTranslation();
+  int Type = aContact->GetType();
+  double Step = aContact->GetStep();
+
+
+  TopoDS_Shape aShape1 = myGeomGUI->GetShapeReader().GetShape(myGeom, myShape1);
+  TopoDS_Shape aShape2 = myGeomGUI->GetShapeReader().GetShape(myGeom, myShape2);
+  Kinematic_Contact* KContact = new Kinematic_Contact(aShape1, aShape2, Type, Step);
+
+  gp_Pnt Origin(myPosition->GetOrigin().x, myPosition->GetOrigin().y, myPosition->GetOrigin().z);
+  gp_Dir aDirX(myPosition->GetVX().PS.x, myPosition->GetVX().PS.y, myPosition->GetVX().PS.z);
+  gp_Dir aDirY(myPosition->GetVY().PS.x, myPosition->GetVY().PS.y, myPosition->GetVY().PS.z);
+  gp_Dir aDirZ(myPosition->GetVZ().PS.x, myPosition->GetVZ().PS.y, myPosition->GetVZ().PS.z);
+
+  KContact->Position().Origin(Origin);
+  KContact->Position().DirX(aDirX);
+  KContact->Position().DirY(aDirY);
+  KContact->Position().DirZ(aDirZ);
+
+  KContact->Rotation().Rot1(myRotation->GetRot1());
+  KContact->Rotation().Rot2(myRotation->GetRot2());
+  KContact->Rotation().Rot3(myRotation->GetRot3());
+
+  KContact->Rotation().ValX(myRotation->GetVal1());
+  KContact->Rotation().ValY(myRotation->GetVal2());
+  KContact->Rotation().ValZ(myRotation->GetVal3());
+
+  KContact->Translation().ValX(myTranslation->GetValX());
+  KContact->Translation().ValY(myTranslation->GetValY());
+  KContact->Translation().ValZ(myTranslation->GetValZ());
+
+  return KContact;
+}
+
+
+//=======================================================================
+// function : CreateAssembly()
+// purpose  : 
+//=======================================================================
+Kinematic_Assembly* KinematicGUI::CreateAssembly(GEOM::GEOM_Assembly_ptr aAssembly)
+{
+  int NbContact = aAssembly->NbContacts();
+  GEOM::ListOfContact_var aContactList = aAssembly->GetContactList();
+  Kinematic_Assembly* KAssembly = new Kinematic_Assembly();
+
+  for(int i = 0; i < NbContact; i++) {
+    GEOM::GEOM_Contact_var myContact = aContactList[i];
+    Kinematic_Contact* KContact = CreateContact(myContact);
+    KAssembly->AddContact(KContact);
+  }
+  return KAssembly;
+}
+
+
+//=======================================================================
+// function : ()
+// purpose  : 
+//=======================================================================
+Kinematic_Animation* KinematicGUI::CreateAnimation(GEOM::GEOM_Animation_ptr aAnimation)
+{
+  GEOM::GEOM_Shape_var aFrame = aAnimation->GetFrame();
+  double Duration = aAnimation->GetDuration();
+  int NbSeq = aAnimation->GetNbSeq();
+
+  GEOM::GEOM_Assembly_var myAssembly = aAnimation->GetAssembly();
+  Kinematic_Assembly* KAssembly = CreateAssembly(myAssembly);
+  TopoDS_Shape myFrame = myGeomGUI->GetShapeReader().GetShape(myGeom, aFrame);
+
+  Kinematic_Animation* KAnimation = new Kinematic_Animation(KAssembly, myFrame, Duration, NbSeq);
+  return KAnimation;
+}
+
+
+//=====================================================================================
+// EXPORTED METHODS
+//=====================================================================================
+extern "C"
+{
+  bool OnGUIEvent(int theCommandID, QAD_Desktop* parent)
+  {return KinematicGUI::OnGUIEvent(theCommandID, parent);}
+}
diff --git a/src/KinematicGUI/KinematicGUI.h b/src/KinematicGUI/KinematicGUI.h
new file mode 100644 (file)
index 0000000..41d7d57
--- /dev/null
@@ -0,0 +1,87 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef KINEMATICGUI_H
+#define KINEMATICGUI_H
+
+#include "GEOMBase.h"
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+#include CORBA_SERVER_HEADER(GEOM_Kinematic)
+
+#include "Kinematic_Animation.hxx"
+#include "Kinematic_Contact.hxx"
+
+//=================================================================================
+// class    : KinematicGUI
+// purpose  :
+//=================================================================================
+class KinematicGUI : public QObject
+{
+  Q_OBJECT /* for QT compatibility */
+
+public :
+  KinematicGUI();
+  ~KinematicGUI();
+
+  static bool OnGUIEvent(int theCommandID, QAD_Desktop* parent);
+
+  void AddNewAssembly();
+  void AddContact(GEOM::GEOM_Assembly_ptr Ass, GEOM::GEOM_Shape_ptr Shape1,
+                 GEOM::GEOM_Shape_ptr Shape2, int type, double step = 0);
+  void AddAnimation(GEOM::GEOM_Assembly_ptr Ass, GEOM::GEOM_Shape_ptr Shape1,
+                   double Duration, int NbSeq);
+
+  bool AddContactInStudy(GEOM::GEOM_Assembly_ptr Ass, 
+                        GEOM::GEOM_Contact_ptr aContact);
+  bool AddAssemblyInStudy(GEOM::GEOM_Assembly_ptr aAssembly);
+  bool AddAnimationInStudy(GEOM::GEOM_Animation_ptr aAnimation);
+  TCollection_AsciiString GetNameFromType(int type);
+
+  void SetPosition(GEOM::GEOM_Contact_ptr aContact, GEOM::PointStruct P0,
+                              GEOM::DirStruct VX, GEOM::DirStruct VY, GEOM::DirStruct VZ);
+  void SetRotation(GEOM::GEOM_Contact_ptr aContact,
+                  int Rot1, int Rot2, int Rot3,
+                  double Val1, double Val2, double Val3);
+  void SetTranslation(GEOM::GEOM_Contact_ptr aContact,
+                     double ValX, double ValY, double ValZ);
+
+  Kinematic_Contact* CreateContact(GEOM::GEOM_Contact_ptr aContact);
+  Kinematic_Assembly* CreateAssembly(GEOM::GEOM_Assembly_ptr aAssembly);
+  Kinematic_Animation* CreateAnimation(GEOM::GEOM_Animation_ptr aAnimation);
+
+  GEOMBase* myGeomBase;
+  GEOMContext* myGeomGUI;
+  GEOM::GEOM_Gen_var myGeom;   /* Current Geom Component */
+
+};
+
+#endif
diff --git a/src/KinematicGUI/KinematicGUI_12Spin.cxx b/src/KinematicGUI/KinematicGUI_12Spin.cxx
new file mode 100644 (file)
index 0000000..7cee18f
--- /dev/null
@@ -0,0 +1,87 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_12Spin.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#include "KinematicGUI_12Spin.h"
+
+#include <qlayout.h>
+#include <qspinbox.h>
+#include <qgroupbox.h>
+
+/* 
+ *  Constructs a KinematicGUI_12Spin which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f' 
+ */
+KinematicGUI_12Spin::KinematicGUI_12Spin(QWidget* parent,  const char* name, WFlags fl)
+  :KinematicGUI_12Spin_QTD(parent, name, fl)
+{
+  SpinBox1->close(TRUE);
+  SpinBox2->close(TRUE);
+  SpinBox3->close(TRUE);
+  SpinBox4->close(TRUE);
+  SpinBox5->close(TRUE);
+  SpinBox6->close(TRUE);
+  SpinBox7->close(TRUE);
+  SpinBox8->close(TRUE);
+  SpinBox9->close(TRUE);
+  SpinBox10->close(TRUE);
+  SpinBox11->close(TRUE);
+  SpinBox12->close(TRUE);
+  SpinBox_11 = new DlgRef_SpinBox(GroupBox1, "SpinBox_11");
+  SpinBox_12 = new DlgRef_SpinBox(GroupBox1, "SpinBox_12");
+  SpinBox_13 = new DlgRef_SpinBox(GroupBox1, "SpinBox_13");
+  SpinBox_21 = new DlgRef_SpinBox(GroupBox1, "SpinBox_21");
+  SpinBox_22 = new DlgRef_SpinBox(GroupBox1, "SpinBox_22");
+  SpinBox_23 = new DlgRef_SpinBox(GroupBox1, "SpinBox_23");
+  SpinBox_31 = new DlgRef_SpinBox(GroupBox1, "SpinBox_31");
+  SpinBox_32 = new DlgRef_SpinBox(GroupBox1, "SpinBox_32");
+  SpinBox_33 = new DlgRef_SpinBox(GroupBox1, "SpinBox_33");
+  SpinBox_41 = new DlgRef_SpinBox(GroupBox1, "SpinBox_41");
+  SpinBox_42 = new DlgRef_SpinBox(GroupBox1, "SpinBox_42");
+  SpinBox_43 = new DlgRef_SpinBox(GroupBox1, "SpinBox_43");
+  Layout1->addWidget(SpinBox_11, 0, 2);
+  Layout1->addWidget(SpinBox_12, 0, 4);
+  Layout1->addWidget(SpinBox_13, 0, 6);
+  Layout1->addWidget(SpinBox_21, 1, 2);
+  Layout1->addWidget(SpinBox_22, 1, 4);
+  Layout1->addWidget(SpinBox_23, 1, 6);
+  Layout1->addWidget(SpinBox_31, 2, 2);
+  Layout1->addWidget(SpinBox_32, 2, 4);
+  Layout1->addWidget(SpinBox_33, 2, 6);
+  Layout1->addWidget(SpinBox_41, 3, 2);
+  Layout1->addWidget(SpinBox_42, 3, 4);
+  Layout1->addWidget(SpinBox_43, 3, 6);
+}
+
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_12Spin::~KinematicGUI_12Spin()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
diff --git a/src/KinematicGUI/KinematicGUI_12Spin.h b/src/KinematicGUI/KinematicGUI_12Spin.h
new file mode 100644 (file)
index 0000000..8f39989
--- /dev/null
@@ -0,0 +1,58 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_12Spin.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef KINEMATICGUI_12SPIN_H
+#define KINEMATICGUI_12SPIN_H
+
+#include "KinematicGUI_12Spin_QTD.h"
+#include "DlgRef_SpinBox.h"
+
+class KinematicGUI_12Spin : public KinematicGUI_12Spin_QTD
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_12Spin( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_12Spin();
+
+    DlgRef_SpinBox* SpinBox_11;
+    DlgRef_SpinBox* SpinBox_12;
+    DlgRef_SpinBox* SpinBox_13;
+    DlgRef_SpinBox* SpinBox_21;
+    DlgRef_SpinBox* SpinBox_22;
+    DlgRef_SpinBox* SpinBox_23;
+    DlgRef_SpinBox* SpinBox_31;
+    DlgRef_SpinBox* SpinBox_32;
+    DlgRef_SpinBox* SpinBox_33;
+    DlgRef_SpinBox* SpinBox_41;
+    DlgRef_SpinBox* SpinBox_42;
+    DlgRef_SpinBox* SpinBox_43;
+
+};
+
+#endif // KINEMATICGUI_12SPIN_H
diff --git a/src/KinematicGUI/KinematicGUI_12Spin_QTD.cxx b/src/KinematicGUI/KinematicGUI_12Spin_QTD.cxx
new file mode 100644 (file)
index 0000000..302079d
--- /dev/null
@@ -0,0 +1,213 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'KinematicGUI_12Spin_QTD.ui'
+**
+** Created: ven fév 6 12:39:44 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "KinematicGUI_12Spin_QTD.h"
+
+#include <qvariant.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qspinbox.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/* 
+ *  Constructs a KinematicGUI_12Spin_QTD which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f'.
+ */
+KinematicGUI_12Spin_QTD::KinematicGUI_12Spin_QTD( QWidget* parent,  const char* name, WFlags fl )
+    : QWidget( parent, name, fl )
+{
+    if ( !name )
+       setName( "KinematicGUI_12Spin_QTD" );
+    resize( 396, 139 ); 
+    setCaption( trUtf8( "KinematicGUI_12Spin_QTD" ) );
+    KinematicGUI_12Spin_QTDLayout = new QGridLayout( this, 1, 1, 0, 6, "KinematicGUI_12Spin_QTDLayout"); 
+
+    GroupBox1 = new QGroupBox( this, "GroupBox1" );
+    GroupBox1->setTitle( trUtf8( "" ) );
+    GroupBox1->setColumnLayout(0, Qt::Vertical );
+    GroupBox1->layout()->setSpacing( 6 );
+    GroupBox1->layout()->setMargin( 11 );
+    GroupBox1Layout = new QGridLayout( GroupBox1->layout() );
+    GroupBox1Layout->setAlignment( Qt::AlignTop );
+
+    Layout1 = new QGridLayout( 0, 1, 1, 0, 6, "Layout1"); 
+
+    TextLabel15 = new QLabel( GroupBox1, "TextLabel15" );
+    TextLabel15->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel15->sizePolicy().hasHeightForWidth() ) );
+    TextLabel15->setText( trUtf8( "TL15" ) );
+
+    Layout1->addWidget( TextLabel15, 3, 3 );
+    QSpacerItem* spacer = new QSpacerItem( 0, 80, QSizePolicy::Minimum, QSizePolicy::Expanding );
+    Layout1->addItem( spacer, 4, 4 );
+
+    TextLabel14 = new QLabel( GroupBox1, "TextLabel14" );
+    TextLabel14->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel14->sizePolicy().hasHeightForWidth() ) );
+    TextLabel14->setText( trUtf8( "TL14" ) );
+
+    Layout1->addWidget( TextLabel14, 3, 1 );
+
+    SpinBox5 = new QSpinBox( GroupBox1, "SpinBox5" );
+    SpinBox5->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox5->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox5, 1, 4 );
+
+    TextLabel3 = new QLabel( GroupBox1, "TextLabel3" );
+    TextLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel3->sizePolicy().hasHeightForWidth() ) );
+    TextLabel3->setText( trUtf8( "TL3" ) );
+
+    Layout1->addWidget( TextLabel3, 0, 3 );
+
+    TextLabel11 = new QLabel( GroupBox1, "TextLabel11" );
+    TextLabel11->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel11->sizePolicy().hasHeightForWidth() ) );
+    TextLabel11->setText( trUtf8( "TL11" ) );
+
+    Layout1->addWidget( TextLabel11, 2, 3 );
+
+    TextLabel8 = new QLabel( GroupBox1, "TextLabel8" );
+    TextLabel8->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel8->sizePolicy().hasHeightForWidth() ) );
+    TextLabel8->setText( trUtf8( "TL8" ) );
+
+    Layout1->addWidget( TextLabel8, 1, 5 );
+
+    TextLabel4 = new QLabel( GroupBox1, "TextLabel4" );
+    TextLabel4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel4->sizePolicy().hasHeightForWidth() ) );
+    TextLabel4->setText( trUtf8( "TL4" ) );
+
+    Layout1->addWidget( TextLabel4, 0, 5 );
+
+    TextLabel7 = new QLabel( GroupBox1, "TextLabel7" );
+    TextLabel7->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel7->sizePolicy().hasHeightForWidth() ) );
+    TextLabel7->setText( trUtf8( "TL7" ) );
+
+    Layout1->addWidget( TextLabel7, 1, 3 );
+
+    TextLabel12 = new QLabel( GroupBox1, "TextLabel12" );
+    TextLabel12->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel12->sizePolicy().hasHeightForWidth() ) );
+    TextLabel12->setText( trUtf8( "TL12" ) );
+
+    Layout1->addWidget( TextLabel12, 2, 5 );
+
+    TextLabel13 = new QLabel( GroupBox1, "TextLabel13" );
+    TextLabel13->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel13->sizePolicy().hasHeightForWidth() ) );
+    TextLabel13->setText( trUtf8( "TL13" ) );
+
+    Layout1->addWidget( TextLabel13, 3, 0 );
+
+    SpinBox12 = new QSpinBox( GroupBox1, "SpinBox12" );
+    SpinBox12->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox12->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox12, 3, 6 );
+
+    SpinBox11 = new QSpinBox( GroupBox1, "SpinBox11" );
+    SpinBox11->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox11->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox11, 3, 4 );
+
+    SpinBox9 = new QSpinBox( GroupBox1, "SpinBox9" );
+    SpinBox9->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox9->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox9, 2, 6 );
+
+    SpinBox8 = new QSpinBox( GroupBox1, "SpinBox8" );
+    SpinBox8->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox8->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox8, 2, 4 );
+
+    SpinBox7 = new QSpinBox( GroupBox1, "SpinBox7" );
+    SpinBox7->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox7->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox7, 2, 2 );
+
+    SpinBox6 = new QSpinBox( GroupBox1, "SpinBox6" );
+    SpinBox6->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox6->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox6, 1, 6 );
+
+    SpinBox3 = new QSpinBox( GroupBox1, "SpinBox3" );
+    SpinBox3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox3->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox3, 0, 6 );
+
+    TextLabel16 = new QLabel( GroupBox1, "TextLabel16" );
+    TextLabel16->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel16->sizePolicy().hasHeightForWidth() ) );
+    TextLabel16->setText( trUtf8( "TL16" ) );
+
+    Layout1->addWidget( TextLabel16, 3, 5 );
+
+    TextLabel1 = new QLabel( GroupBox1, "TextLabel1" );
+    TextLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel1->sizePolicy().hasHeightForWidth() ) );
+    TextLabel1->setText( trUtf8( "TL1" ) );
+
+    Layout1->addWidget( TextLabel1, 0, 0 );
+
+    TextLabel10 = new QLabel( GroupBox1, "TextLabel10" );
+    TextLabel10->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel10->sizePolicy().hasHeightForWidth() ) );
+    TextLabel10->setText( trUtf8( "TL10" ) );
+
+    Layout1->addWidget( TextLabel10, 2, 1 );
+
+    SpinBox4 = new QSpinBox( GroupBox1, "SpinBox4" );
+    SpinBox4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox4->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox4, 1, 2 );
+
+    TextLabel6 = new QLabel( GroupBox1, "TextLabel6" );
+    TextLabel6->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel6->sizePolicy().hasHeightForWidth() ) );
+    TextLabel6->setText( trUtf8( "TL6" ) );
+
+    Layout1->addWidget( TextLabel6, 1, 1 );
+
+    SpinBox10 = new QSpinBox( GroupBox1, "SpinBox10" );
+    SpinBox10->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox10->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox10, 3, 2 );
+
+    SpinBox2 = new QSpinBox( GroupBox1, "SpinBox2" );
+    SpinBox2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox2->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox2, 0, 4 );
+
+    TextLabel2 = new QLabel( GroupBox1, "TextLabel2" );
+    TextLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel2->sizePolicy().hasHeightForWidth() ) );
+    TextLabel2->setText( trUtf8( "TL2" ) );
+
+    Layout1->addWidget( TextLabel2, 0, 1 );
+
+    TextLabel9 = new QLabel( GroupBox1, "TextLabel9" );
+    TextLabel9->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel9->sizePolicy().hasHeightForWidth() ) );
+    TextLabel9->setText( trUtf8( "TL9" ) );
+
+    Layout1->addWidget( TextLabel9, 2, 0 );
+
+    TextLabel5 = new QLabel( GroupBox1, "TextLabel5" );
+    TextLabel5->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel5->sizePolicy().hasHeightForWidth() ) );
+    TextLabel5->setText( trUtf8( "TL5" ) );
+
+    Layout1->addWidget( TextLabel5, 1, 0 );
+
+    SpinBox1 = new QSpinBox( GroupBox1, "SpinBox1" );
+    SpinBox1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox1, 0, 2 );
+
+    GroupBox1Layout->addLayout( Layout1, 0, 0 );
+
+    KinematicGUI_12Spin_QTDLayout->addWidget( GroupBox1, 0, 0 );
+}
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_12Spin_QTD::~KinematicGUI_12Spin_QTD()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/src/KinematicGUI/KinematicGUI_12Spin_QTD.h b/src/KinematicGUI/KinematicGUI_12Spin_QTD.h
new file mode 100644 (file)
index 0000000..2b2f041
--- /dev/null
@@ -0,0 +1,66 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'KinematicGUI_12Spin_QTD.ui'
+**
+** Created: ven fév 6 12:39:44 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef KINEMATICGUI_12SPIN_QTD_H
+#define KINEMATICGUI_12SPIN_QTD_H
+
+#include <qvariant.h>
+#include <qwidget.h>
+class QVBoxLayout; 
+class QHBoxLayout; 
+class QGridLayout; 
+class QGroupBox;
+class QLabel;
+class QSpinBox;
+
+class KinematicGUI_12Spin_QTD : public QWidget
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_12Spin_QTD( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_12Spin_QTD();
+
+    QGroupBox* GroupBox1;
+    QLabel* TextLabel15;
+    QLabel* TextLabel14;
+    QSpinBox* SpinBox5;
+    QLabel* TextLabel3;
+    QLabel* TextLabel11;
+    QLabel* TextLabel8;
+    QLabel* TextLabel4;
+    QLabel* TextLabel7;
+    QLabel* TextLabel12;
+    QLabel* TextLabel13;
+    QSpinBox* SpinBox12;
+    QSpinBox* SpinBox11;
+    QSpinBox* SpinBox9;
+    QSpinBox* SpinBox8;
+    QSpinBox* SpinBox7;
+    QSpinBox* SpinBox6;
+    QSpinBox* SpinBox3;
+    QLabel* TextLabel16;
+    QLabel* TextLabel1;
+    QLabel* TextLabel10;
+    QSpinBox* SpinBox4;
+    QLabel* TextLabel6;
+    QSpinBox* SpinBox10;
+    QSpinBox* SpinBox2;
+    QLabel* TextLabel2;
+    QLabel* TextLabel9;
+    QLabel* TextLabel5;
+    QSpinBox* SpinBox1;
+
+
+protected:
+    QGridLayout* KinematicGUI_12Spin_QTDLayout;
+    QGridLayout* GroupBox1Layout;
+    QGridLayout* Layout1;
+};
+
+#endif // KINEMATICGUI_12SPIN_QTD_H
diff --git a/src/KinematicGUI/KinematicGUI_3List3Spin.cxx b/src/KinematicGUI/KinematicGUI_3List3Spin.cxx
new file mode 100644 (file)
index 0000000..7cbc46c
--- /dev/null
@@ -0,0 +1,60 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_3List3Spin.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#include "KinematicGUI_3List3Spin.h"
+
+#include <qlayout.h>
+#include <qspinbox.h>
+#include <qgroupbox.h>
+
+/* 
+ *  Constructs a KinematicGUI_3List3Spin which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f' 
+ */
+KinematicGUI_3List3Spin::KinematicGUI_3List3Spin(QWidget* parent,  const char* name, WFlags fl)
+  :KinematicGUI_3List3Spin_QTD(parent, name, fl)
+{
+  SpinBox1->close(TRUE);
+  SpinBox2->close(TRUE);
+  SpinBox3->close(TRUE);
+  SpinBox_DX = new DlgRef_SpinBox(GroupBox1, "SpinBox_DX");
+  SpinBox_DY = new DlgRef_SpinBox(GroupBox1, "SpinBox_DY");
+  SpinBox_DZ = new DlgRef_SpinBox(GroupBox1, "SpinBox_DZ");
+  Layout1->addWidget(SpinBox_DX, 0, 3);
+  Layout1->addWidget(SpinBox_DY, 1, 3);
+  Layout1->addWidget(SpinBox_DZ, 2, 3);
+}
+
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_3List3Spin::~KinematicGUI_3List3Spin()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
diff --git a/src/KinematicGUI/KinematicGUI_3List3Spin.h b/src/KinematicGUI/KinematicGUI_3List3Spin.h
new file mode 100644 (file)
index 0000000..c1363fa
--- /dev/null
@@ -0,0 +1,49 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_3List3Spin.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef KINEMATICGUI_3LIST3SPIN_H
+#define KINEMATICGUI_3LIST3SPIN_H
+
+#include "KinematicGUI_3List3Spin_QTD.h"
+#include "DlgRef_SpinBox.h"
+
+class KinematicGUI_3List3Spin : public KinematicGUI_3List3Spin_QTD
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_3List3Spin( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_3List3Spin();
+
+    DlgRef_SpinBox* SpinBox_DX;
+    DlgRef_SpinBox* SpinBox_DY;
+    DlgRef_SpinBox* SpinBox_DZ;
+
+};
+
+#endif // KINEMATICGUI_3LIST3SPIN_H
diff --git a/src/KinematicGUI/KinematicGUI_3List3Spin_QTD.cxx b/src/KinematicGUI/KinematicGUI_3List3Spin_QTD.cxx
new file mode 100644 (file)
index 0000000..70b9234
--- /dev/null
@@ -0,0 +1,125 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'KinematicGUI_3List3Spin_QTD.ui'
+**
+** Created: mer fév 4 16:57:37 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "KinematicGUI_3List3Spin_QTD.h"
+
+#include <qvariant.h>
+#include <qcombobox.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qspinbox.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/* 
+ *  Constructs a KinematicGUI_3List3Spin_QTD which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f'.
+ */
+KinematicGUI_3List3Spin_QTD::KinematicGUI_3List3Spin_QTD( QWidget* parent,  const char* name, WFlags fl )
+    : QWidget( parent, name, fl )
+{
+    if ( !name )
+       setName( "KinematicGUI_3List3Spin_QTD" );
+    resize( 279, 111 ); 
+    setMinimumSize( QSize( 100, 0 ) );
+    setCaption( trUtf8( "KinematicGUI_3List3Spin_QTD" ) );
+    KinematicGUI_3List3Spin_QTDLayout = new QGridLayout( this, 1, 1, 0, 6, "KinematicGUI_3List3Spin_QTDLayout"); 
+
+    GroupBox1 = new QGroupBox( this, "GroupBox1" );
+    GroupBox1->setTitle( trUtf8( "" ) );
+    GroupBox1->setColumnLayout(0, Qt::Vertical );
+    GroupBox1->layout()->setSpacing( 6 );
+    GroupBox1->layout()->setMargin( 11 );
+    GroupBox1Layout = new QGridLayout( GroupBox1->layout() );
+    GroupBox1Layout->setAlignment( Qt::AlignTop );
+
+    Layout1 = new QGridLayout( 0, 1, 1, 0, 6, "Layout1"); 
+
+    TextLabel2 = new QLabel( GroupBox1, "TextLabel2" );
+    TextLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel2->sizePolicy().hasHeightForWidth() ) );
+    TextLabel2->setText( trUtf8( "TL2" ) );
+
+    Layout1->addWidget( TextLabel2, 0, 2 );
+    QSpacerItem* spacer = new QSpacerItem( 0, 100, QSizePolicy::Minimum, QSizePolicy::Expanding );
+    Layout1->addItem( spacer, 3, 3 );
+
+    SpinBox1 = new QSpinBox( GroupBox1, "SpinBox1" );
+    SpinBox1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox1, 0, 3 );
+
+    TextLabel4 = new QLabel( GroupBox1, "TextLabel4" );
+    TextLabel4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel4->sizePolicy().hasHeightForWidth() ) );
+    TextLabel4->setText( trUtf8( "TL4" ) );
+
+    Layout1->addWidget( TextLabel4, 1, 2 );
+
+    TextLabel3 = new QLabel( GroupBox1, "TextLabel3" );
+    TextLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel3->sizePolicy().hasHeightForWidth() ) );
+    TextLabel3->setText( trUtf8( "TL3" ) );
+
+    Layout1->addWidget( TextLabel3, 1, 0 );
+
+    TextLabel1 = new QLabel( GroupBox1, "TextLabel1" );
+    TextLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel1->sizePolicy().hasHeightForWidth() ) );
+    TextLabel1->setText( trUtf8( "TL1" ) );
+
+    Layout1->addWidget( TextLabel1, 0, 0 );
+
+    ComboBox3 = new QComboBox( FALSE, GroupBox1, "ComboBox3" );
+    ComboBox3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, ComboBox3->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( ComboBox3, 2, 1 );
+
+    SpinBox2 = new QSpinBox( GroupBox1, "SpinBox2" );
+    SpinBox2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox2->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox2, 1, 3 );
+
+    SpinBox3 = new QSpinBox( GroupBox1, "SpinBox3" );
+    SpinBox3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox3->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( SpinBox3, 2, 3 );
+
+    TextLabel6 = new QLabel( GroupBox1, "TextLabel6" );
+    TextLabel6->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel6->sizePolicy().hasHeightForWidth() ) );
+    TextLabel6->setText( trUtf8( "TL6" ) );
+
+    Layout1->addWidget( TextLabel6, 2, 2 );
+
+    ComboBox1 = new QComboBox( FALSE, GroupBox1, "ComboBox1" );
+    ComboBox1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, ComboBox1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( ComboBox1, 0, 1 );
+
+    ComboBox2 = new QComboBox( FALSE, GroupBox1, "ComboBox2" );
+    ComboBox2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, ComboBox2->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( ComboBox2, 1, 1 );
+
+    TextLabel5 = new QLabel( GroupBox1, "TextLabel5" );
+    TextLabel5->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel5->sizePolicy().hasHeightForWidth() ) );
+    TextLabel5->setText( trUtf8( "TL5" ) );
+
+    Layout1->addWidget( TextLabel5, 2, 0 );
+
+    GroupBox1Layout->addLayout( Layout1, 0, 0 );
+
+    KinematicGUI_3List3Spin_QTDLayout->addWidget( GroupBox1, 0, 0 );
+}
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_3List3Spin_QTD::~KinematicGUI_3List3Spin_QTD()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/src/KinematicGUI/KinematicGUI_3List3Spin_QTD.h b/src/KinematicGUI/KinematicGUI_3List3Spin_QTD.h
new file mode 100644 (file)
index 0000000..9d8c702
--- /dev/null
@@ -0,0 +1,51 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'KinematicGUI_3List3Spin_QTD.ui'
+**
+** Created: mer fév 4 16:57:37 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef KINEMATICGUI_3LIST3SPIN_QTD_H
+#define KINEMATICGUI_3LIST3SPIN_QTD_H
+
+#include <qvariant.h>
+#include <qwidget.h>
+class QVBoxLayout; 
+class QHBoxLayout; 
+class QGridLayout; 
+class QComboBox;
+class QGroupBox;
+class QLabel;
+class QSpinBox;
+
+class KinematicGUI_3List3Spin_QTD : public QWidget
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_3List3Spin_QTD( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_3List3Spin_QTD();
+
+    QGroupBox* GroupBox1;
+    QLabel* TextLabel2;
+    QSpinBox* SpinBox1;
+    QLabel* TextLabel4;
+    QLabel* TextLabel3;
+    QLabel* TextLabel1;
+    QComboBox* ComboBox3;
+    QSpinBox* SpinBox2;
+    QSpinBox* SpinBox3;
+    QLabel* TextLabel6;
+    QComboBox* ComboBox1;
+    QComboBox* ComboBox2;
+    QLabel* TextLabel5;
+
+
+protected:
+    QGridLayout* KinematicGUI_3List3Spin_QTDLayout;
+    QGridLayout* GroupBox1Layout;
+    QGridLayout* Layout1;
+};
+
+#endif // KINEMATICGUI_3LIST3SPIN_QTD_H
diff --git a/src/KinematicGUI/KinematicGUI_3Sel1List_QTD.cxx b/src/KinematicGUI/KinematicGUI_3Sel1List_QTD.cxx
new file mode 100644 (file)
index 0000000..67ac66d
--- /dev/null
@@ -0,0 +1,117 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'KinematicGUI_3Sel1List_QTD.ui'
+**
+** Created: mer fév 4 13:09:40 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "KinematicGUI_3Sel1List_QTD.h"
+
+#include <qvariant.h>
+#include <qcombobox.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/* 
+ *  Constructs a KinematicGUI_3Sel1List_QTD which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f'.
+ */
+KinematicGUI_3Sel1List_QTD::KinematicGUI_3Sel1List_QTD( QWidget* parent,  const char* name, WFlags fl )
+    : QWidget( parent, name, fl )
+{
+    if ( !name )
+       setName( "KinematicGUI_3Sel1List_QTD" );
+    resize( 129, 145 ); 
+    setCaption( trUtf8( "KinematicGUI_3Sel1List_QTD" ) );
+    KinematicGUI_3Sel1List_QTDLayout = new QGridLayout( this, 1, 1, 0, 6, "KinematicGUI_3Sel1List_QTDLayout"); 
+
+    GroupBox1 = new QGroupBox( this, "GroupBox1" );
+    GroupBox1->setTitle( trUtf8( "" ) );
+    GroupBox1->setColumnLayout(0, Qt::Vertical );
+    GroupBox1->layout()->setSpacing( 6 );
+    GroupBox1->layout()->setMargin( 11 );
+    GroupBox1Layout = new QGridLayout( GroupBox1->layout() );
+    GroupBox1Layout->setAlignment( Qt::AlignTop );
+
+    Layout1 = new QGridLayout( 0, 1, 1, 0, 6, "Layout1"); 
+    QSpacerItem* spacer = new QSpacerItem( 0, 90, QSizePolicy::Minimum, QSizePolicy::Expanding );
+    Layout1->addItem( spacer, 4, 2 );
+
+    PushButton2 = new QPushButton( GroupBox1, "PushButton2" );
+    PushButton2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton2->sizePolicy().hasHeightForWidth() ) );
+    PushButton2->setText( trUtf8( "" ) );
+
+    Layout1->addWidget( PushButton2, 2, 1 );
+
+    TextLabel1 = new QLabel( GroupBox1, "TextLabel1" );
+    TextLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel1->sizePolicy().hasHeightForWidth() ) );
+    TextLabel1->setText( trUtf8( "TL1" ) );
+
+    Layout1->addWidget( TextLabel1, 0, 0 );
+
+    TextLabel4 = new QLabel( GroupBox1, "TextLabel4" );
+    TextLabel4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel4->sizePolicy().hasHeightForWidth() ) );
+    TextLabel4->setText( trUtf8( "TL4" ) );
+
+    Layout1->addWidget( TextLabel4, 3, 0 );
+
+    LineEdit1 = new QLineEdit( GroupBox1, "LineEdit1" );
+
+    Layout1->addWidget( LineEdit1, 0, 2 );
+
+    PushButton1 = new QPushButton( GroupBox1, "PushButton1" );
+    PushButton1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton1->sizePolicy().hasHeightForWidth() ) );
+    PushButton1->setText( trUtf8( "" ) );
+
+    Layout1->addWidget( PushButton1, 0, 1 );
+
+    TextLabel3 = new QLabel( GroupBox1, "TextLabel3" );
+    TextLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel3->sizePolicy().hasHeightForWidth() ) );
+    TextLabel3->setText( trUtf8( "TL3" ) );
+
+    Layout1->addWidget( TextLabel3, 2, 0 );
+
+    PushButton3 = new QPushButton( GroupBox1, "PushButton3" );
+    PushButton3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton3->sizePolicy().hasHeightForWidth() ) );
+    PushButton3->setText( trUtf8( "" ) );
+
+    Layout1->addWidget( PushButton3, 3, 1 );
+
+    ComboBox1 = new QComboBox( FALSE, GroupBox1, "ComboBox1" );
+    ComboBox1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, ComboBox1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( ComboBox1, 1, 2 );
+
+    LineEdit2 = new QLineEdit( GroupBox1, "LineEdit2" );
+
+    Layout1->addWidget( LineEdit2, 2, 2 );
+
+    LineEdit3 = new QLineEdit( GroupBox1, "LineEdit3" );
+
+    Layout1->addWidget( LineEdit3, 3, 2 );
+
+    TextLabel2 = new QLabel( GroupBox1, "TextLabel2" );
+    TextLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel2->sizePolicy().hasHeightForWidth() ) );
+    TextLabel2->setText( trUtf8( "TL2" ) );
+
+    Layout1->addWidget( TextLabel2, 1, 0 );
+
+    GroupBox1Layout->addLayout( Layout1, 0, 0 );
+
+    KinematicGUI_3Sel1List_QTDLayout->addWidget( GroupBox1, 0, 0 );
+}
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_3Sel1List_QTD::~KinematicGUI_3Sel1List_QTD()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/src/KinematicGUI/KinematicGUI_3Sel1List_QTD.h b/src/KinematicGUI/KinematicGUI_3Sel1List_QTD.h
new file mode 100644 (file)
index 0000000..e9cbbe2
--- /dev/null
@@ -0,0 +1,51 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'KinematicGUI_3Sel1List_QTD.ui'
+**
+** Created: mer fév 4 13:09:40 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef KINEMATICGUI_3SEL1LIST_QTD_H
+#define KINEMATICGUI_3SEL1LIST_QTD_H
+
+#include <qvariant.h>
+#include <qwidget.h>
+class QVBoxLayout; 
+class QHBoxLayout; 
+class QGridLayout; 
+class QComboBox;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+
+class KinematicGUI_3Sel1List_QTD : public QWidget
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_3Sel1List_QTD( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_3Sel1List_QTD();
+
+    QGroupBox* GroupBox1;
+    QPushButton* PushButton2;
+    QLabel* TextLabel1;
+    QLabel* TextLabel4;
+    QLineEdit* LineEdit1;
+    QPushButton* PushButton1;
+    QLabel* TextLabel3;
+    QPushButton* PushButton3;
+    QComboBox* ComboBox1;
+    QLineEdit* LineEdit2;
+    QLineEdit* LineEdit3;
+    QLabel* TextLabel2;
+
+
+protected:
+    QGridLayout* KinematicGUI_3Sel1List_QTDLayout;
+    QGridLayout* GroupBox1Layout;
+    QGridLayout* Layout1;
+};
+
+#endif // KINEMATICGUI_3SEL1LIST_QTD_H
diff --git a/src/KinematicGUI/KinematicGUI_3Sel1Spin.cxx b/src/KinematicGUI/KinematicGUI_3Sel1Spin.cxx
new file mode 100644 (file)
index 0000000..b4e46ac
--- /dev/null
@@ -0,0 +1,54 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_3Sel1Spin.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#include "KinematicGUI_3Sel1Spin.h"
+
+#include <qlayout.h>
+#include <qspinbox.h>
+#include <qgroupbox.h>
+
+/* 
+ *  Constructs a KinematicGUI_3Sel1Spin which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f' 
+ */
+KinematicGUI_3Sel1Spin::KinematicGUI_3Sel1Spin(QWidget* parent,  const char* name, WFlags fl)
+  :KinematicGUI_3Sel1Spin_QTD(parent, name, fl)
+{
+  SpinBox1->close(TRUE);
+  SpinBox_DX = new DlgRef_SpinBox(GroupBox1, "SpinBox_DX");
+  Layout2->addWidget(SpinBox_DX, 0, 1);
+}
+
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_3Sel1Spin::~KinematicGUI_3Sel1Spin()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
diff --git a/src/KinematicGUI/KinematicGUI_3Sel1Spin.h b/src/KinematicGUI/KinematicGUI_3Sel1Spin.h
new file mode 100644 (file)
index 0000000..143274e
--- /dev/null
@@ -0,0 +1,47 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_3Sel1Spin.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef KINEMATICGUI_3SEL1SPIN_H
+#define KINEMATICGUI_3SEL1SPIN_H
+
+#include "KinematicGUI_3Sel1Spin_QTD.h"
+#include "DlgRef_SpinBox.h"
+
+class KinematicGUI_3Sel1Spin : public KinematicGUI_3Sel1Spin_QTD
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_3Sel1Spin( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_3Sel1Spin();
+
+    DlgRef_SpinBox* SpinBox_DX;
+
+};
+
+#endif // KINEMATICGUI_3SEL1SPIN_H
diff --git a/src/KinematicGUI/KinematicGUI_3Sel1Spin_QTD.cxx b/src/KinematicGUI/KinematicGUI_3Sel1Spin_QTD.cxx
new file mode 100644 (file)
index 0000000..bb5c787
--- /dev/null
@@ -0,0 +1,121 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'KinematicGUI_3Sel1Spin_QTD.ui'
+**
+** Created: mer fév 4 13:09:41 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "KinematicGUI_3Sel1Spin_QTD.h"
+
+#include <qvariant.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qspinbox.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/* 
+ *  Constructs a KinematicGUI_3Sel1Spin_QTD which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f'.
+ */
+KinematicGUI_3Sel1Spin_QTD::KinematicGUI_3Sel1Spin_QTD( QWidget* parent,  const char* name, WFlags fl )
+    : QWidget( parent, name, fl )
+{
+    if ( !name )
+       setName( "KinematicGUI_3Sel1Spin_QTD" );
+    resize( 129, 147 ); 
+    setCaption( trUtf8( "KinematicGUI_3Sel1Spin_QTD" ) );
+    KinematicGUI_3Sel1Spin_QTDLayout = new QGridLayout( this, 1, 1, 0, 6, "KinematicGUI_3Sel1Spin_QTDLayout"); 
+
+    GroupBox1 = new QGroupBox( this, "GroupBox1" );
+    GroupBox1->setTitle( trUtf8( "" ) );
+    GroupBox1->setColumnLayout(0, Qt::Vertical );
+    GroupBox1->layout()->setSpacing( 6 );
+    GroupBox1->layout()->setMargin( 11 );
+    GroupBox1Layout = new QGridLayout( GroupBox1->layout() );
+    GroupBox1Layout->setAlignment( Qt::AlignTop );
+
+    Layout1 = new QGridLayout( 0, 1, 1, 0, 6, "Layout1"); 
+
+    LineEdit1 = new QLineEdit( GroupBox1, "LineEdit1" );
+
+    Layout1->addWidget( LineEdit1, 0, 2 );
+
+    PushButton3 = new QPushButton( GroupBox1, "PushButton3" );
+    PushButton3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton3->sizePolicy().hasHeightForWidth() ) );
+    PushButton3->setText( trUtf8( "" ) );
+
+    Layout1->addWidget( PushButton3, 2, 1 );
+
+    Layout2 = new QGridLayout( 0, 1, 1, 0, 6, "Layout2"); 
+
+    TextLabel4 = new QLabel( GroupBox1, "TextLabel4" );
+    TextLabel4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel4->sizePolicy().hasHeightForWidth() ) );
+    TextLabel4->setText( trUtf8( "TL4" ) );
+
+    Layout2->addWidget( TextLabel4, 0, 0 );
+
+    SpinBox1 = new QSpinBox( GroupBox1, "SpinBox1" );
+    SpinBox1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout2->addWidget( SpinBox1, 0, 1 );
+
+    Layout1->addMultiCellLayout( Layout2, 3, 3, 0, 2 );
+
+    TextLabel3 = new QLabel( GroupBox1, "TextLabel3" );
+    TextLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel3->sizePolicy().hasHeightForWidth() ) );
+    TextLabel3->setText( trUtf8( "TL3" ) );
+
+    Layout1->addWidget( TextLabel3, 2, 0 );
+
+    LineEdit3 = new QLineEdit( GroupBox1, "LineEdit3" );
+
+    Layout1->addWidget( LineEdit3, 2, 2 );
+
+    LineEdit2 = new QLineEdit( GroupBox1, "LineEdit2" );
+
+    Layout1->addWidget( LineEdit2, 1, 2 );
+
+    PushButton2 = new QPushButton( GroupBox1, "PushButton2" );
+    PushButton2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton2->sizePolicy().hasHeightForWidth() ) );
+    PushButton2->setText( trUtf8( "" ) );
+
+    Layout1->addWidget( PushButton2, 1, 1 );
+
+    TextLabel2 = new QLabel( GroupBox1, "TextLabel2" );
+    TextLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel2->sizePolicy().hasHeightForWidth() ) );
+    TextLabel2->setText( trUtf8( "TL2" ) );
+
+    Layout1->addWidget( TextLabel2, 1, 0 );
+    QSpacerItem* spacer = new QSpacerItem( 0, 100, QSizePolicy::Minimum, QSizePolicy::Expanding );
+    Layout1->addItem( spacer, 4, 2 );
+
+    TextLabel1 = new QLabel( GroupBox1, "TextLabel1" );
+    TextLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel1->sizePolicy().hasHeightForWidth() ) );
+    TextLabel1->setText( trUtf8( "TL1" ) );
+
+    Layout1->addWidget( TextLabel1, 0, 0 );
+
+    PushButton1 = new QPushButton( GroupBox1, "PushButton1" );
+    PushButton1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton1->sizePolicy().hasHeightForWidth() ) );
+    PushButton1->setText( trUtf8( "" ) );
+
+    Layout1->addWidget( PushButton1, 0, 1 );
+
+    GroupBox1Layout->addLayout( Layout1, 0, 0 );
+
+    KinematicGUI_3Sel1Spin_QTDLayout->addWidget( GroupBox1, 0, 0 );
+}
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_3Sel1Spin_QTD::~KinematicGUI_3Sel1Spin_QTD()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/src/KinematicGUI/KinematicGUI_3Sel1Spin_QTD.h b/src/KinematicGUI/KinematicGUI_3Sel1Spin_QTD.h
new file mode 100644 (file)
index 0000000..dac9815
--- /dev/null
@@ -0,0 +1,52 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'KinematicGUI_3Sel1Spin_QTD.ui'
+**
+** Created: mer fév 4 13:09:40 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef KINEMATICGUI_3SEL1SPIN_QTD_H
+#define KINEMATICGUI_3SEL1SPIN_QTD_H
+
+#include <qvariant.h>
+#include <qwidget.h>
+class QVBoxLayout; 
+class QHBoxLayout; 
+class QGridLayout; 
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QSpinBox;
+
+class KinematicGUI_3Sel1Spin_QTD : public QWidget
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_3Sel1Spin_QTD( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_3Sel1Spin_QTD();
+
+    QGroupBox* GroupBox1;
+    QLineEdit* LineEdit1;
+    QPushButton* PushButton3;
+    QLabel* TextLabel4;
+    QSpinBox* SpinBox1;
+    QLabel* TextLabel3;
+    QLineEdit* LineEdit3;
+    QLineEdit* LineEdit2;
+    QPushButton* PushButton2;
+    QLabel* TextLabel2;
+    QLabel* TextLabel1;
+    QPushButton* PushButton1;
+
+
+protected:
+    QGridLayout* KinematicGUI_3Sel1Spin_QTDLayout;
+    QGridLayout* GroupBox1Layout;
+    QGridLayout* Layout1;
+    QGridLayout* Layout2;
+};
+
+#endif // KINEMATICGUI_3SEL1SPIN_QTD_H
diff --git a/src/KinematicGUI/KinematicGUI_AnimDlg.cxx b/src/KinematicGUI/KinematicGUI_AnimDlg.cxx
new file mode 100644 (file)
index 0000000..15fe8e6
--- /dev/null
@@ -0,0 +1,596 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_AnimDlg.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI_AnimDlg.h"
+
+#include "QAD_RightFrame.h"
+#include "OCCViewer_ViewFrame.h"
+#include "QAD_FileDlg.h"
+#include "QAD_Tools.h"
+
+//=================================================================================
+// class    : MyThread()
+// purpose  : 
+//=================================================================================
+MyThread::MyThread(Kinematic_Animation* KAnimation, Handle(AIS_InteractiveContext) ic)
+{
+  myIC = ic;
+  myKAnimation = KAnimation;
+  myIsActive = false;
+}
+
+//=================================================================================
+// function : ~MyThread()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+MyThread::~MyThread() {}
+
+//=================================================================================
+// class    : run()
+// purpose  : 
+//=================================================================================
+void MyThread::run()
+{
+  qApp->lock();
+  while(myIsActive) {
+    emit frameChanged();
+
+    qApp->syncX();
+
+    double Step, Val;
+    Step = 1.0 / myKAnimation->NbSeq();
+    Val = myValue * Step;
+
+    myKAnimation->myMovedShape.Clear();
+    myKAnimation->myMovedShape.Add(myKAnimation->Frame());
+
+    myKAnimation->myNbAIS = 0;
+    myKAnimation->GetNextShape(myIC, myLoc, myKAnimation->Frame(), Val);
+
+    myIC->UpdateCurrentViewer();
+
+    qApp->unlock();
+    usleep((int)(myKAnimation->Duration() / myKAnimation->NbSeq() * 1e6));
+    qApp->lock();
+
+    if (!myIsActive) break;
+  }
+
+  qApp->unlock();
+  emit stopped();
+  QThread::exit();
+  return;
+}
+
+//=================================================================================
+// class    : InitAnim()
+// purpose  : 
+//=================================================================================
+void MyThread::InitAnim()
+{
+  myKAnimation->myMovedShape.Clear();
+  myKAnimation->myMovedShape.Add(myKAnimation->Frame());
+
+  gp_Trsf aLoc;
+  myLoc = aLoc;
+  if(!myKAnimation->IsCreated)
+    myKAnimation->GetNextShape(myIC, myLoc, myKAnimation->Frame(), 1);
+  myKAnimation->IsCreated = true;
+
+  myAISFrame = new AIS_Shape(TopoDS_Shape());
+  myAISFrame->Set(myKAnimation->Frame());
+  if(myKAnimation->myIsShading) {
+    myAISFrame->SetColor(Quantity_NOC_GOLDENROD);
+    myIC->Display(myAISFrame, 1, 1, Standard_False);
+  }
+  else {
+    myAISFrame->SetColor(Quantity_NOC_RED);
+    myIC->Display(myAISFrame, 0, 1, Standard_False);
+  }
+  return;
+}
+
+//=================================================================================
+// class    : ClearAnim()
+// purpose  : 
+//=================================================================================
+void MyThread::ClearAnim(int ClearPrs)
+{
+  myIC->Erase(myAISFrame, Standard_False, Standard_False);
+  myIC->ClearPrs(myAISFrame);
+
+  if(!myKAnimation->ListOfAIS.IsEmpty()) {
+    for(int i = 1; i <= myKAnimation->myNbAIS; i++) {
+      Handle(AIS_Shape) myShape = Handle(AIS_Shape)::DownCast(myKAnimation->ListOfAIS.Value(i));
+      myIC->Erase(myShape, Standard_False, Standard_False);
+      if(ClearPrs)
+       myIC->ClearPrs(myShape);
+    }
+  }
+  myIC->UpdateCurrentViewer();
+  return;
+}
+
+//=================================================================================
+// class    : NextFrame()
+// purpose  : 
+//=================================================================================
+void MyThread::NextFrame() {
+  double Step, Val;
+  Step = 1.0 / myKAnimation->NbSeq();
+  Val = myValue * Step;
+
+  myKAnimation->myMovedShape.Clear();
+  myKAnimation->myMovedShape.Add(myKAnimation->Frame());
+
+  myKAnimation->myNbAIS = 0;
+  myKAnimation->GetNextShape(myIC, myLoc, myKAnimation->Frame(), Val);
+
+  myIC->UpdateCurrentViewer();
+  return;
+}
+
+//=================================================================================
+// class    : startAnimation()
+// purpose  : 
+//=================================================================================
+void MyThread::startAnimation() {
+  //DCQ : QThread doesn't work...
+//   if(!myIsActive) {
+//     myIsActive = true;
+//     QThread::start();
+//   }
+
+  QApplication::setOverrideCursor(Qt::waitCursor);
+  myIsActive = true;
+  qApp->lock();
+  while(myIsActive) {
+    emit frameChanged();
+
+    qApp->syncX();
+
+    double Step, Val;
+    Step = 1.0 / myKAnimation->NbSeq();
+    Val = myValue * Step;
+
+    myKAnimation->myMovedShape.Clear();
+    myKAnimation->myMovedShape.Add(myKAnimation->Frame());
+
+    myKAnimation->myNbAIS = 0;
+    myKAnimation->GetNextShape(myIC, myLoc, myKAnimation->Frame(), Val);
+
+    myIC->UpdateCurrentViewer();
+
+    qApp->unlock();
+    usleep((int)(myKAnimation->Duration() / myKAnimation->NbSeq() * 1e6));
+    qApp->lock();
+
+    if (!myIsActive) break;
+  }
+
+  QApplication::restoreOverrideCursor();
+  qApp->unlock();
+  emit stopped();
+  return;
+}
+
+//=================================================================================
+// class    : stopAnimation()
+// purpose  : 
+//=================================================================================
+void MyThread::stopAnimation() {
+  myIsActive = false;
+  return;
+}
+
+
+//=================================================================================
+// class    : KinematicGUI_AnimDlg()
+// purpose  : Constructs a KinematicGUI_AnimDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+KinematicGUI_AnimDlg::KinematicGUI_AnimDlg(QWidget* parent, const char* name, KinematicGUI* theKinematicGUI, SALOME_Selection* Sel, Handle(AIS_InteractiveContext) ic, bool modal, WFlags fl)
+  :KinematicGUI_Skeleton_QTD(parent, name, modal, fl)
+{
+  if (!name)
+    setName("KinematicGUI_AnimDlg");
+
+  buttonClose->setText(tr("GEOM_BUT_CLOSE"));
+  GroupMedium->close(TRUE);
+  resize(0, 0);
+
+  setCaption(tr("GEOM_ANIM_TITLE"));
+
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIMATION")));
+  QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIM_FIRST")));
+  QPixmap image2(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIM_PREV")));
+  QPixmap image3(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIM_STOP")));
+  QPixmap image4(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIM_PLAY")));
+  QPixmap image5(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIM_NEXT")));
+  QPixmap image6(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIM_LAST")));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_ANIM"));
+  RadioButton1->setPixmap(image0);
+
+  Group1 = new KinematicGUI_Anim_QTD(this, "Group1");
+  Group1->PushButton1->setPixmap(image1);
+  Group1->PushButton2->setPixmap(image2);
+  Group1->PushButton3->setPixmap(image3);
+  Group1->PushButton4->setPixmap(image4);
+  Group1->PushButton5->setPixmap(image5);
+  Group1->PushButton6->setPixmap(image6);
+  Group1->PushButton7->setText(tr("GEOM_ANIM_EXPORT"));
+  Group1->CheckButton1->setText(tr("GEOM_ANIM_SHADING"));
+  Group1->CheckButton2->setText(tr("GEOM_ANIM_INLOOP"));
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisation */
+  myKinematicGUI = theKinematicGUI;
+  QApplication::setOverrideCursor(Qt::waitCursor);
+  Init(Sel, ic);
+  QApplication::restoreOverrideCursor();
+}
+
+
+//=================================================================================
+// function : ~KinematicGUI_AnimDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+KinematicGUI_AnimDlg::~KinematicGUI_AnimDlg()
+{
+  // no need to delete child widgets, Qt does it all for us
+  this->destroy(TRUE, TRUE);
+}
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::Init(SALOME_Selection* Sel, Handle(AIS_InteractiveContext) ic)
+{
+  /* init variables */
+  mySelection = Sel;
+
+  myGeomBase = new GEOMBase();
+  myGeomGUI = GEOMContext::GetGeomGUI();
+  myGeomGUI->SetActiveDialogBox((QDialog*)this);
+  myGeom = myGeomGUI->myComponentGeom;
+
+  
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+  GEOM::GEOM_Animation_var myGeomAnim = myGeomBase->ConvertIOinAnimation(IO, testResult);
+  if(!testResult)
+    ClickOnCancel();
+
+  Kinematic_Animation* KAnimation = myKinematicGUI->CreateAnimation(myGeomAnim);
+
+  bool IsOk = false;
+  for(int cpt = 1; cpt <= KAnimation->myIndexToShape.Extent(); cpt++) {
+    TopoDS_Shape myShape = KAnimation->myIndexToShape.FindKey(cpt);
+    if(myShape == KAnimation->Frame())
+      IsOk = true;
+  }
+  if(!IsOk)
+    ClickOnCancel();
+
+  Group1->CheckButton2->setEnabled(false);
+
+  Group1->Slider1->setMaxValue(KAnimation->NbSeq());
+  Group1->Slider1->setPageStep(1);
+  Group1->Slider1->setValue(0);
+
+  /* signals and slots connections */
+  connect(buttonClose, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
+  connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
+  connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
+
+  connect(Group1->Slider1, SIGNAL(valueChanged(int)), this, SLOT(ClickOnSlider(int)));
+  connect(Group1->PushButton1, SIGNAL(clicked()), this, SLOT(ClickOnFirst()));
+  connect(Group1->PushButton2, SIGNAL(clicked()), this, SLOT(ClickOnPrevious()));
+  connect(Group1->PushButton3, SIGNAL(clicked()), this, SLOT(ClickOnStop()));
+  connect(Group1->PushButton4, SIGNAL(clicked()), this, SLOT(ClickOnPlay()));
+  connect(Group1->PushButton5, SIGNAL(clicked()), this, SLOT(ClickOnNext()));
+  connect(Group1->PushButton6, SIGNAL(clicked()), this, SLOT(ClickOnLast()));
+  connect(Group1->PushButton7, SIGNAL(clicked()), this, SLOT(ClickOnExport()));
+  connect(Group1->CheckButton1, SIGNAL(clicked()), this, SLOT(ClickOnShading()));
+
+  myAnimator = new MyThread(KAnimation, ic);
+  connect(myAnimator, SIGNAL(frameChanged()), this, SLOT(OnNext()));
+  connect(myAnimator, SIGNAL(stopped()), this, SLOT(ClickOnStop()));
+  myAnimator->InitAnim();
+  myAnimator->myValue = 0;
+  myAnimator->NextFrame();
+
+  /* Move widget on the botton right corner of main widget */
+//   int x, y;
+//   myGeomBase->DefineDlgPosition(this, x, y);
+//   this->move(x, y);
+
+  /* displays Dialog */
+  RadioButton1->setChecked(TRUE);
+  Group1->show();
+  this->show();
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnCancel()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnCancel()
+{
+  this->ClickOnStop();
+  myAnimator->ClearAnim(true);
+  disconnect(mySelection, 0, this, 0);
+  reject();
+  QApplication::restoreOverrideCursor();
+  return;
+}
+
+
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::DeactivateActiveDialog()
+{
+  this->setEnabled(false);
+  disconnect(mySelection, 0, this, 0);
+  myGeomGUI->SetActiveDialogBox(0);
+  return;
+}
+
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ActivateThisDialog()
+{
+  /* Emit a signal to deactivate the active dialog */
+  myGeomGUI->EmitSignalDeactivateDialog();
+  this->setEnabled(true);
+  myGeomGUI->SetActiveDialogBox((QDialog*)this);
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  return;
+}
+
+
+//=================================================================================
+// function : closeEvent()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::closeEvent(QCloseEvent* e)
+{
+  /* same than click on cancel button */
+  this->ClickOnCancel();
+  return;
+}
+
+
+//=================================================================================
+// function : enterEvent()
+// purpose  : when mouse enter onto the QWidget
+//=================================================================================
+void KinematicGUI_AnimDlg::enterEvent(QEvent * e)
+{
+  if(GroupConstructors->isEnabled())
+    return;
+  this->ActivateThisDialog();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnSlider()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnSlider(int newValue)
+{
+  myAnimator->myValue = newValue;
+  if(!myAnimator->running())
+    myAnimator->NextFrame();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnFirst()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnFirst()
+{
+  this->ClickOnStop();
+  int aVal = Group1->Slider1->value();
+  if(aVal == 0) {
+    myAnimator->myValue = 0;
+    myAnimator->NextFrame();
+  }
+  else
+    Group1->Slider1->setValue(0);
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnPrevious()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnPrevious()
+{
+  this->ClickOnStop();
+  int aVal = Group1->Slider1->value();
+  if(aVal != 0)
+    Group1->Slider1->setValue(aVal - 1);
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnStop()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnStop()
+{
+  myAnimator->stopAnimation();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnPlay()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnPlay()
+{
+  if(!myAnimator->running())
+    myAnimator->startAnimation();
+  return;
+}
+
+
+//=================================================================================
+// function : OnNext()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::OnNext()
+{
+  int aVal = Group1->Slider1->value();
+  if(aVal != myAnimator->myKAnimation->NbSeq())
+    Group1->Slider1->setValue(aVal + 1);
+  else {
+    if(Group1->CheckButton2->isChecked())
+      Group1->Slider1->setValue(0);
+    else
+      this->ClickOnStop();
+  }
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnNext()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnNext()
+{
+  this->ClickOnStop();
+  this->OnNext();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnLast()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnLast()
+{
+  this->ClickOnStop();
+  int aVal = Group1->Slider1->value();
+  if(aVal == myAnimator->myKAnimation->NbSeq()) {
+    myAnimator->myValue = myAnimator->myKAnimation->NbSeq();
+    myAnimator->NextFrame();
+  }
+  else
+    Group1->Slider1->setValue(myAnimator->myKAnimation->NbSeq());
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnShading()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnShading()
+{
+  QApplication::setOverrideCursor(Qt::waitCursor);
+  this->ClickOnStop();
+  myAnimator->ClearAnim(false);
+  myAnimator->myKAnimation->myIsShading = Group1->CheckButton1->isChecked();
+  myAnimator->InitAnim();
+  this->ClickOnFirst();
+  QApplication::restoreOverrideCursor();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnExport()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimDlg::ClickOnExport()
+{
+  this->ClickOnFirst();
+
+  QString fName = QAD_FileDlg::getFileName(QAD_Application::getDesktop(), QString::null, tr("OCC_IMAGE_FILES"), tr("INF_APP_DUMP_VIEW"), false);
+
+  QString TestFile = QAD_Tools::getFileNameFromPath(fName, false);
+  if(TestFile.isEmpty())
+    return;
+
+  QApplication::setOverrideCursor(Qt::waitCursor);
+  qApp->processEvents();
+
+  for(int i = 0; i <= myAnimator->myKAnimation->NbSeq(); i++) {
+    qApp->processEvents();
+    QWidget* qw = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewWidget();
+    QPixmap px = QPixmap::grabWindow(qw->winId());
+
+    QString fileName = QAD_Tools::getDirFromPath(fName, false);
+    fileName = QAD_Tools::addSlash(fileName);
+    fileName.append(TestFile);
+    fileName.append(QString("_%1.").arg(i));
+    QString fmt = QAD_Tools::getFileExtensionFromPath(fName);
+    fileName.append(fmt);
+
+    fmt = fmt.upper();
+    if(fmt.isEmpty())
+      fmt = QString("BMP"); // default format
+    if(fmt == "JPG")
+      fmt = "JPEG";
+  
+    bool bOk = px.save(fileName, fmt.latin1());
+
+    this->OnNext();
+  }
+
+  QApplication::restoreOverrideCursor();
+  return;
+}
diff --git a/src/KinematicGUI/KinematicGUI_AnimDlg.h b/src/KinematicGUI/KinematicGUI_AnimDlg.h
new file mode 100644 (file)
index 0000000..2634513
--- /dev/null
@@ -0,0 +1,119 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_AnimDlg.h
+//  Author : Damine COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef KINEMATICGUI_ANIMDLG_H
+#define KINEMATICGUI_ANIMDLG_H
+
+#include "KinematicGUI_Skeleton_QTD.h"
+#include "KinematicGUI_Anim_QTD.h"
+
+#include "KinematicGUI.h"
+
+#include <qwidget.h>
+#include <qgroupbox.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include <qslider.h>
+#include <qthread.h>
+
+class MyThread : public QObject, public QThread
+{
+    Q_OBJECT
+
+public:
+    MyThread(Kinematic_Animation* KAnimation = 0, Handle(AIS_InteractiveContext) ic = 0);
+    ~MyThread();
+
+private:
+    bool myIsActive;
+    Handle(AIS_Shape) myAISFrame;
+    Handle(AIS_InteractiveContext) myIC;   /* Interactive context */
+    gp_Trsf myLoc;
+
+public:
+    Kinematic_Animation* myKAnimation;
+
+    int myValue;
+    virtual void run();
+    void startAnimation();
+    void stopAnimation();
+    void InitAnim();
+    void ClearAnim(int ClearPrs);
+    void NextFrame();
+
+signals:
+    void frameChanged();
+    void stopped();
+
+};
+
+
+class KinematicGUI_AnimDlg : public KinematicGUI_Skeleton_QTD
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_AnimDlg(QWidget* parent = 0, const char* name = 0, KinematicGUI* theKinematicGUI = 0, SALOME_Selection* Sel = 0, Handle(AIS_InteractiveContext) ic = 0, bool modal = FALSE, WFlags fl = 0);
+    ~KinematicGUI_AnimDlg();
+
+private :
+    void Init(SALOME_Selection* Sel, Handle(AIS_InteractiveContext) ic);
+    void enterEvent(QEvent * e);
+    void closeEvent(QCloseEvent* e);
+
+    KinematicGUI* myKinematicGUI;
+
+    MyThread* myAnimator;
+
+    SALOME_Selection* mySelection;      /* User shape selection */
+    GEOM::GEOM_Gen_var myGeom;          /* Current GeomI object */
+    GEOMBase* myGeomBase;
+    GEOMContext* myGeomGUI;  /* Current GeomGUI object */
+
+    KinematicGUI_Anim_QTD* Group1;
+
+private slots:
+    void ClickOnCancel();
+    void DeactivateActiveDialog();
+    void ActivateThisDialog();
+    void ClickOnSlider(int newValue);
+    void ClickOnFirst();
+    void ClickOnPrevious();
+    void ClickOnStop();
+    void ClickOnPlay();
+    void OnNext();
+    void ClickOnNext();
+    void ClickOnLast();
+    void ClickOnShading();
+    void ClickOnExport();
+
+};
+
+#endif // KINEMATICGUI_ANIMDLG_H
diff --git a/src/KinematicGUI/KinematicGUI_Anim_QTD.cxx b/src/KinematicGUI/KinematicGUI_Anim_QTD.cxx
new file mode 100644 (file)
index 0000000..5584151
--- /dev/null
@@ -0,0 +1,122 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'KinematicGUI_Anim_QTD.ui'
+**
+** Created: jeu mar 4 16:48:10 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "KinematicGUI_Anim_QTD.h"
+
+#include <qvariant.h>
+#include <qgroupbox.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qslider.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/* 
+ *  Constructs a KinematicGUI_Anim_QTD which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f'.
+ */
+KinematicGUI_Anim_QTD::KinematicGUI_Anim_QTD( QWidget* parent,  const char* name, WFlags fl )
+    : QWidget( parent, name, fl )
+{
+    if ( !name )
+       setName( "KinematicGUI_Anim_QTD" );
+    resize( 334, 121 ); 
+    setCaption( trUtf8( "KinematicGUI_Anim_QTD" ) );
+    KinematicGUI_Anim_QTDLayout = new QGridLayout( this, 1, 1, 0, 6, "KinematicGUI_Anim_QTDLayout"); 
+
+    GroupBox1 = new QGroupBox( this, "GroupBox1" );
+    GroupBox1->setTitle( trUtf8( "" ) );
+    GroupBox1->setColumnLayout(0, Qt::Vertical );
+    GroupBox1->layout()->setSpacing( 6 );
+    GroupBox1->layout()->setMargin( 11 );
+    GroupBox1Layout = new QGridLayout( GroupBox1->layout() );
+    GroupBox1Layout->setAlignment( Qt::AlignTop );
+
+    Layout1 = new QGridLayout( 0, 1, 1, 0, 6, "Layout1"); 
+    QSpacerItem* spacer = new QSpacerItem( 0, 156, QSizePolicy::Minimum, QSizePolicy::Expanding );
+    Layout1->addItem( spacer, 3, 0 );
+
+    Layout2 = new QGridLayout( 0, 1, 1, 0, 6, "Layout2"); 
+
+    PushButton3 = new QPushButton( GroupBox1, "PushButton3" );
+    PushButton3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton3->sizePolicy().hasHeightForWidth() ) );
+    PushButton3->setText( trUtf8( "" ) );
+
+    Layout2->addWidget( PushButton3, 0, 2 );
+
+    PushButton5 = new QPushButton( GroupBox1, "PushButton5" );
+    PushButton5->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton5->sizePolicy().hasHeightForWidth() ) );
+    PushButton5->setText( trUtf8( "" ) );
+
+    Layout2->addWidget( PushButton5, 0, 4 );
+
+    PushButton2 = new QPushButton( GroupBox1, "PushButton2" );
+    PushButton2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton2->sizePolicy().hasHeightForWidth() ) );
+    PushButton2->setText( trUtf8( "" ) );
+
+    Layout2->addWidget( PushButton2, 0, 1 );
+
+    PushButton4 = new QPushButton( GroupBox1, "PushButton4" );
+    PushButton4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton4->sizePolicy().hasHeightForWidth() ) );
+    PushButton4->setText( trUtf8( "" ) );
+
+    Layout2->addWidget( PushButton4, 0, 3 );
+
+    PushButton6 = new QPushButton( GroupBox1, "PushButton6" );
+    PushButton6->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton6->sizePolicy().hasHeightForWidth() ) );
+    PushButton6->setText( trUtf8( "" ) );
+
+    Layout2->addWidget( PushButton6, 0, 5 );
+
+    PushButton1 = new QPushButton( GroupBox1, "PushButton1" );
+    PushButton1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton1->sizePolicy().hasHeightForWidth() ) );
+    PushButton1->setText( trUtf8( "" ) );
+
+    Layout2->addWidget( PushButton1, 0, 0 );
+
+    Layout1->addLayout( Layout2, 1, 0 );
+
+    Slider1 = new QSlider( GroupBox1, "Slider1" );
+    Slider1->setOrientation( QSlider::Horizontal );
+
+    Layout1->addWidget( Slider1, 0, 0 );
+
+    Layout3 = new QGridLayout( 0, 1, 1, 0, 6, "Layout3"); 
+
+    CheckButton1 = new QRadioButton( GroupBox1, "CheckButton1" );
+    CheckButton1->setText( trUtf8( "" ) );
+
+    Layout3->addWidget( CheckButton1, 0, 0 );
+
+    PushButton7 = new QPushButton( GroupBox1, "PushButton7" );
+    PushButton7->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton7->sizePolicy().hasHeightForWidth() ) );
+    PushButton7->setText( trUtf8( "" ) );
+
+    Layout3->addWidget( PushButton7, 0, 2 );
+
+    CheckButton2 = new QRadioButton( GroupBox1, "CheckButton2" );
+    CheckButton2->setText( trUtf8( "" ) );
+
+    Layout3->addWidget( CheckButton2, 0, 1 );
+
+    Layout1->addLayout( Layout3, 2, 0 );
+
+    GroupBox1Layout->addLayout( Layout1, 0, 0 );
+
+    KinematicGUI_Anim_QTDLayout->addWidget( GroupBox1, 0, 0 );
+}
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_Anim_QTD::~KinematicGUI_Anim_QTD()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/src/KinematicGUI/KinematicGUI_Anim_QTD.h b/src/KinematicGUI/KinematicGUI_Anim_QTD.h
new file mode 100644 (file)
index 0000000..2630f6c
--- /dev/null
@@ -0,0 +1,51 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'KinematicGUI_Anim_QTD.ui'
+**
+** Created: jeu mar 4 16:48:10 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef KINEMATICGUI_ANIM_QTD_H
+#define KINEMATICGUI_ANIM_QTD_H
+
+#include <qvariant.h>
+#include <qwidget.h>
+class QVBoxLayout; 
+class QHBoxLayout; 
+class QGridLayout; 
+class QGroupBox;
+class QPushButton;
+class QRadioButton;
+class QSlider;
+
+class KinematicGUI_Anim_QTD : public QWidget
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_Anim_QTD( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~KinematicGUI_Anim_QTD();
+
+    QGroupBox* GroupBox1;
+    QPushButton* PushButton3;
+    QPushButton* PushButton5;
+    QPushButton* PushButton2;
+    QPushButton* PushButton4;
+    QPushButton* PushButton6;
+    QPushButton* PushButton1;
+    QSlider* Slider1;
+    QRadioButton* CheckButton1;
+    QPushButton* PushButton7;
+    QRadioButton* CheckButton2;
+
+
+protected:
+    QGridLayout* KinematicGUI_Anim_QTDLayout;
+    QGridLayout* GroupBox1Layout;
+    QGridLayout* Layout1;
+    QGridLayout* Layout2;
+    QGridLayout* Layout3;
+};
+
+#endif // KINEMATICGUI_ANIM_QTD_H
diff --git a/src/KinematicGUI/KinematicGUI_AnimationDlg.cxx b/src/KinematicGUI/KinematicGUI_AnimationDlg.cxx
new file mode 100644 (file)
index 0000000..a852339
--- /dev/null
@@ -0,0 +1,280 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_AnimationDlg.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI_AnimationDlg.h"
+
+//=================================================================================
+// class    : KinematicGUI_AnimationDlg()
+// purpose  : Constructs a KinematicGUI_AnimationDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+KinematicGUI_AnimationDlg::KinematicGUI_AnimationDlg(QWidget* parent, const char* name, KinematicGUI* theKinematicGUI, SALOME_Selection* Sel, bool modal, WFlags fl)
+  :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_ANIMATION")));
+  QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_SELECT")));
+
+  setCaption(tr("GEOM_ANIMATION_TITLE"));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_ANIMATION"));
+  RadioButton1->setPixmap(image0);
+  RadioButton2->close(TRUE);
+  RadioButton3->close(TRUE);
+
+  Group1 = new DlgRef_2Sel2Spin(this, "Group1");
+  Group1->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  Group1->TextLabel1->setText(tr("GEOM_ASSEMBLY"));
+  Group1->TextLabel2->setText(tr("GEOM_FRAME"));
+  Group1->TextLabel3->setText(tr("GEOM_DURATION"));
+  Group1->TextLabel4->setText(tr("GEOM_NBSEQ"));
+  Group1->PushButton1->setPixmap(image1);
+  Group1->PushButton2->setPixmap(image1);
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisation */
+  myKinematicGUI = theKinematicGUI;
+  Init();
+}
+
+
+//=================================================================================
+// function : ~KinematicGUI_AnimationDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+KinematicGUI_AnimationDlg::~KinematicGUI_AnimationDlg()
+{  
+  /* no need to delete child widgets, Qt does it all for us */
+}
+
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimationDlg::Init()
+{
+  /* init variables */
+  myEditCurrentArgument = Group1->LineEdit1;
+  myOkAssembly = myOkShape1 = false;
+
+  myDuration = 5.0;
+  myNbSeq = 50;
+  /* min, max, step and decimals for spin boxes & initial values */
+  Group1->SpinBox_DX->RangeStepAndValidator(0.001, 99999.999, 0.1, 3);
+  Group1->SpinBox_DY->RangeStepAndValidator(1, 99999.999, 5, 3);
+
+  Group1->SpinBox_DX->SetValue(myDuration);
+  Group1->SpinBox_DY->SetValue(myNbSeq);
+
+   /* signals and slots connections */
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+
+  connect(Group1->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(Group1->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+
+  connect(Group1->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(Group1->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+
+  connect(Group1->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DX, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DY, SLOT(SetStep(double)));
+
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+
+  /* displays Dialog */
+  Group1->show();
+  this->show();
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimationDlg::ClickOnOk()
+{
+  this->ClickOnApply();
+  ClickOnCancel();
+  return ;
+}
+
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimationDlg::ClickOnApply()
+{
+  QAD_Application::getDesktop()->putInfo(tr(""));
+
+  if(myOkAssembly && myOkShape1)
+    myKinematicGUI->AddAnimation(myGeomAssembly, myGeomShape1, myDuration, myNbSeq);
+
+  return;
+}
+
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection has changed
+//=================================================================================
+void KinematicGUI_AnimationDlg::SelectionIntoArgument()
+{
+  myEditCurrentArgument->setText("");
+  QString aString = "";
+
+  int nbSel = myGeomBase->GetNameOfSelectedIObjects(mySelection, aString);
+  if(nbSel != 1) {
+    if(myEditCurrentArgument == Group1->LineEdit1)
+      myOkAssembly = false;
+    else if( myEditCurrentArgument == Group1->LineEdit2)
+      myOkShape1 = false;
+    return;
+  }
+
+  /*  nbSel == 1  */
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+
+  if(myEditCurrentArgument == Group1->LineEdit1) {
+    myGeomAssembly = myGeomBase->ConvertIOinAssembly(IO, testResult);
+    if(!testResult)
+      return;
+    Group1->LineEdit1->setText(aString);
+    myOkAssembly = true;
+  }
+  else {
+    TopoDS_Shape S;
+    if(!myGeomBase->GetTopoFromSelection(mySelection, S))
+      return;
+
+    if(myEditCurrentArgument == Group1->LineEdit2) {
+      myGeomShape1 = myGeomBase->ConvertIOinGEOMShape(IO, testResult);
+      if(!testResult)
+       return;
+      Group1->LineEdit2->setText(aString);
+      myOkShape1 = true;
+    }
+  }
+  return;
+}
+
+
+//=================================================================================
+// function : SetEditCurrentArgument()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimationDlg::SetEditCurrentArgument()
+{
+  QPushButton* send = (QPushButton*)sender();
+
+  if(send == Group1->PushButton1) {
+    Group1->LineEdit1->setFocus();
+    myEditCurrentArgument = Group1->LineEdit1;
+  }
+  else if(send == Group1->PushButton2) {
+    Group1->LineEdit2->setFocus();
+    myEditCurrentArgument = Group1->LineEdit2;
+  }
+  SelectionIntoArgument();
+
+  return;
+}
+
+
+
+//=================================================================================
+// function : LineEditReturnPressed()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimationDlg::LineEditReturnPressed()
+{
+  QLineEdit* send = (QLineEdit*)sender();
+  if(send == Group1->LineEdit1)
+    myEditCurrentArgument = Group1->LineEdit1;
+  else if(send == Group1->LineEdit2)
+    myEditCurrentArgument = Group1->LineEdit2;
+  else
+    return;
+
+  GEOMBase_Skeleton::LineEditReturnPressed();
+  return;
+}
+
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimationDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  return;
+}
+
+
+//=================================================================================
+// function : enterEvent()
+// purpose  : when mouse enter onto the QWidget
+//=================================================================================
+void KinematicGUI_AnimationDlg::enterEvent(QEvent * e)
+{
+  if (GroupConstructors->isEnabled())
+    return;
+  this->ActivateThisDialog();
+  return;
+}
+
+
+//=================================================================================
+// function : ValueChangedInSpinBox()
+// purpose  :
+//=================================================================================
+void KinematicGUI_AnimationDlg::ValueChangedInSpinBox(double newValue)
+{
+  DlgRef_SpinBox* send = (DlgRef_SpinBox*)sender();
+
+  if(send == Group1->SpinBox_DX)
+    myDuration = newValue;
+  else if(send == Group1->SpinBox_DY)
+    myNbSeq = newValue;
+
+  return;
+}
diff --git a/src/KinematicGUI/KinematicGUI_AnimationDlg.h b/src/KinematicGUI/KinematicGUI_AnimationDlg.h
new file mode 100644 (file)
index 0000000..a8b058e
--- /dev/null
@@ -0,0 +1,75 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_AnimationDlg.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef DIALOGBOX_ANIMATION_H
+#define DIALOGBOX_ANIMATION_H
+
+#include "GEOMBase_Skeleton.h"
+#include "DlgRef_2Sel2Spin.h"
+
+#include "KinematicGUI.h"
+
+//=================================================================================
+// class    : KinematicGUI_AnimationDlg
+// purpose  :
+//=================================================================================
+class KinematicGUI_AnimationDlg : public GEOMBase_Skeleton
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_AnimationDlg(QWidget* parent = 0, const char* name = 0, KinematicGUI* theKinematicGUI = 0, SALOME_Selection* Sel = 0, bool modal = FALSE, WFlags fl = 0);
+    ~KinematicGUI_AnimationDlg();
+
+private:
+    void Init();
+    void enterEvent(QEvent * e);
+
+    KinematicGUI* myKinematicGUI;
+
+    GEOM::GEOM_Assembly_var myGeomAssembly;
+    GEOM::GEOM_Shape_var myGeomShape1;          /* is myShape1 */
+    bool myOkAssembly;
+    bool myOkShape1;            /* to check when arguments are defined */
+    double myDuration;
+    int  myNbSeq;
+
+    DlgRef_2Sel2Spin* Group1;
+
+private slots:
+    void ClickOnOk();
+    void ClickOnApply();
+    void SetEditCurrentArgument();
+    void SelectionIntoArgument();
+    void LineEditReturnPressed();
+    void ActivateThisDialog();
+    void ValueChangedInSpinBox(double newValue);
+
+};
+
+#endif // DIALOGBOX_ANIMATION_H
diff --git a/src/KinematicGUI/KinematicGUI_ContactDlg.cxx b/src/KinematicGUI/KinematicGUI_ContactDlg.cxx
new file mode 100644 (file)
index 0000000..cd0ab2f
--- /dev/null
@@ -0,0 +1,294 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_ContactDlg.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI_ContactDlg.h"
+
+//=================================================================================
+// class    : KinematicGUI_ContactDlg()
+// purpose  : Constructs a KinematicGUI_ContactDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+KinematicGUI_ContactDlg::KinematicGUI_ContactDlg(QWidget* parent, const char* name, KinematicGUI* theKinematicGUI, SALOME_Selection* Sel, int type, bool modal, WFlags fl)
+  :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_CONTACT")));
+  QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_SELECT")));
+
+  setCaption(tr("GEOM_CONTACT_TITLE"));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_CONTACT"));
+  RadioButton1->setPixmap(image0);
+  RadioButton2->close(TRUE);
+  RadioButton3->close(TRUE);
+
+  Group1 = new KinematicGUI_3Sel1List_QTD(this, "Group1");
+  Group1->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  Group1->TextLabel1->setText(tr("GEOM_ASSEMBLY"));
+  Group1->TextLabel2->setText(tr("GEOM_TYPE"));
+  Group1->TextLabel3->setText(tr("GEOM_OBJECT_I").arg("1"));
+  Group1->TextLabel4->setText(tr("GEOM_OBJECT_I").arg("2"));
+  Group1->PushButton1->setPixmap(image1);
+  Group1->PushButton2->setPixmap(image1);
+  Group1->PushButton3->setPixmap(image1);
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisation */
+  myKinematicGUI = theKinematicGUI;
+  myType = type;
+  Init();
+}
+
+
+//=================================================================================
+// function : ~KinematicGUI_ContactDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+KinematicGUI_ContactDlg::~KinematicGUI_ContactDlg()
+{  
+  /* no need to delete child widgets, Qt does it all for us */
+}
+
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactDlg::Init()
+{
+  /* init variables */
+  myEditCurrentArgument = Group1->LineEdit1;
+  myOkAssembly = myOkShape1 = myOkShape2 = false;
+
+  /* type for sub shape selection */
+  Group1->ComboBox1->insertItem("Embedding");
+  Group1->ComboBox1->insertItem("Pivot");
+  Group1->ComboBox1->insertItem("Slide");
+  Group1->ComboBox1->insertItem("Sliding Pivot");
+  Group1->ComboBox1->insertItem("Spherical");
+  Group1->ComboBox1->insertItem("Plane");
+  Group1->ComboBox1->insertItem("Annular");
+  Group1->ComboBox1->insertItem("Rectilinear");
+  Group1->ComboBox1->insertItem("Ponctual");
+
+  Group1->ComboBox1->setCurrentItem(myType);
+
+   /* signals and slots connections */
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+
+  connect(Group1->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(Group1->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(Group1->LineEdit3, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+
+  connect(Group1->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(Group1->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(Group1->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+
+  connect(Group1->ComboBox1, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
+
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+
+  /* displays Dialog */
+  Group1->show();
+  this->show();
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactDlg::ClickOnOk()
+{
+  this->ClickOnApply();
+  ClickOnCancel();
+  return ;
+}
+
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactDlg::ClickOnApply()
+{
+  QAD_Application::getDesktop()->putInfo(tr(""));
+
+  if(myOkAssembly && myOkShape1 && myOkShape2)
+    myKinematicGUI->AddContact(myGeomAssembly, myGeomShape1, myGeomShape2, myType);
+
+  return;
+}
+
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection has changed
+//=================================================================================
+void KinematicGUI_ContactDlg::SelectionIntoArgument()
+{
+  myEditCurrentArgument->setText("");
+  QString aString = "";
+
+  int nbSel = myGeomBase->GetNameOfSelectedIObjects(mySelection, aString);
+  if(nbSel != 1) {
+    if(myEditCurrentArgument == Group1->LineEdit1)
+      myOkAssembly = false;
+    else if( myEditCurrentArgument == Group1->LineEdit2)
+      myOkShape1 = false;
+    else if( myEditCurrentArgument == Group1->LineEdit3)
+      myOkShape2 = false;
+    return;
+  }
+
+  /*  nbSel == 1  */
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+
+  if(myEditCurrentArgument == Group1->LineEdit1) {
+    myGeomAssembly = myGeomBase->ConvertIOinAssembly(IO, testResult);
+    if(!testResult)
+      return;
+    Group1->LineEdit1->setText(aString);
+    myOkAssembly = true;
+  }
+  else {
+    TopoDS_Shape S;
+    if(!myGeomBase->GetTopoFromSelection(mySelection, S))
+      return;
+
+    if(myEditCurrentArgument == Group1->LineEdit2) {
+      myGeomShape1 = myGeomBase->ConvertIOinGEOMShape(IO, testResult);
+      if(!testResult)
+       return;
+      Group1->LineEdit2->setText(aString);
+      myOkShape1 = true;
+    }
+    else if(myEditCurrentArgument == Group1->LineEdit3) {
+      myGeomShape2 = myGeomBase->ConvertIOinGEOMShape(IO, testResult);
+      if(!testResult)
+       return;
+      Group1->LineEdit3->setText(aString);
+      myOkShape2 = true;
+    }
+  }
+  return;
+}
+
+
+//=================================================================================
+// function : SetEditCurrentArgument()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactDlg::SetEditCurrentArgument()
+{
+  QPushButton* send = (QPushButton*)sender();
+
+  if(send == Group1->PushButton1) {
+    Group1->LineEdit1->setFocus();
+    myEditCurrentArgument = Group1->LineEdit1;
+  }
+  else if(send == Group1->PushButton2) {
+    Group1->LineEdit2->setFocus();
+    myEditCurrentArgument = Group1->LineEdit2;
+  }
+  else if(send == Group1->PushButton3) {
+    Group1->LineEdit3->setFocus();
+    myEditCurrentArgument = Group1->LineEdit3;
+  }
+  SelectionIntoArgument();
+
+  return;
+}
+
+
+
+//=================================================================================
+// function : LineEditReturnPressed()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactDlg::LineEditReturnPressed()
+{
+  QLineEdit* send = (QLineEdit*)sender();
+  if(send == Group1->LineEdit1)
+    myEditCurrentArgument = Group1->LineEdit1;
+  else if(send == Group1->LineEdit2)
+    myEditCurrentArgument = Group1->LineEdit2;
+  else if(send == Group1->LineEdit3)
+    myEditCurrentArgument = Group1->LineEdit3;
+  else
+    return;
+
+  GEOMBase_Skeleton::LineEditReturnPressed();
+  return;
+}
+
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  return;
+}
+
+
+//=================================================================================
+// function : enterEvent()
+// purpose  : when mouse enter onto the QWidget
+//=================================================================================
+void KinematicGUI_ContactDlg::enterEvent(QEvent * e)
+{
+  if (GroupConstructors->isEnabled())
+    return;
+  this->ActivateThisDialog();
+  return;
+}
+
+
+//=================================================================================
+// function : ComboTextChanged()
+// purpose  : 
+//=================================================================================
+void KinematicGUI_ContactDlg::ComboTextChanged()
+{
+  myType = Group1->ComboBox1->currentItem();
+  return;
+}
diff --git a/src/KinematicGUI/KinematicGUI_ContactDlg.h b/src/KinematicGUI/KinematicGUI_ContactDlg.h
new file mode 100644 (file)
index 0000000..c5967ef
--- /dev/null
@@ -0,0 +1,76 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_ContactDlg.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef DIALOGBOX_CONTACT_H
+#define DIALOGBOX_CONTACT_H
+
+#include "GEOMBase_Skeleton.h"
+#include "KinematicGUI_3Sel1List_QTD.h"
+
+#include "KinematicGUI.h"
+
+//=================================================================================
+// class    : KinematicGUI_ContactDlg
+// purpose  :
+//=================================================================================
+class KinematicGUI_ContactDlg : public GEOMBase_Skeleton
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_ContactDlg(QWidget* parent = 0, const char* name = 0, KinematicGUI* theKinematicGUI = 0, SALOME_Selection* Sel = 0, int type = 0, bool modal = FALSE, WFlags fl = 0);
+    ~KinematicGUI_ContactDlg();
+
+private:
+    void Init();
+    void enterEvent(QEvent * e);
+
+    KinematicGUI* myKinematicGUI;
+
+    GEOM::GEOM_Assembly_var myGeomAssembly;
+    GEOM::GEOM_Shape_var myGeomShape1;          /* is myShape1 */
+    GEOM::GEOM_Shape_var myGeomShape2;          /* is myShape2 */
+    bool myOkAssembly;
+    bool myOkShape1;
+    bool myOkShape2;            /* to check when arguments are defined */
+    int myType;
+
+    KinematicGUI_3Sel1List_QTD* Group1;
+
+private slots:
+    void ClickOnOk();
+    void ClickOnApply();
+    void SetEditCurrentArgument();
+    void SelectionIntoArgument();
+    void LineEditReturnPressed();
+    void ActivateThisDialog();
+    void ComboTextChanged();
+
+};
+
+#endif // DIALOGBOX_CONTACT_H
diff --git a/src/KinematicGUI/KinematicGUI_ContactHDlg.cxx b/src/KinematicGUI/KinematicGUI_ContactHDlg.cxx
new file mode 100644 (file)
index 0000000..7f4433e
--- /dev/null
@@ -0,0 +1,286 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_ContactHDlg.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI_ContactHDlg.h"
+
+//=================================================================================
+// class    : KinematicGUI_ContactHDlg()
+// purpose  : Constructs a KinematicGUI_ContactHDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+KinematicGUI_ContactHDlg::KinematicGUI_ContactHDlg(QWidget* parent, const char* name, KinematicGUI* theKinematicGUI, SALOME_Selection* Sel, bool modal, WFlags fl)
+  :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_CONTACT")));
+  QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_SELECT")));
+
+  setCaption(tr("GEOM_CONTACT_TITLE"));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_CONTACT"));
+  RadioButton1->setPixmap(image0);
+  RadioButton2->close(TRUE);
+  RadioButton3->close(TRUE);
+
+  Group1 = new KinematicGUI_3Sel1Spin(this, "Group1");
+  Group1->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  Group1->TextLabel1->setText(tr("GEOM_ASSEMBLY"));
+  Group1->TextLabel2->setText(tr("GEOM_OBJECT_I").arg("1"));
+  Group1->TextLabel3->setText(tr("GEOM_OBJECT_I").arg("2"));
+  Group1->TextLabel4->setText(tr("GEOM_STEP"));
+  Group1->PushButton1->setPixmap(image1);
+  Group1->PushButton2->setPixmap(image1);
+  Group1->PushButton3->setPixmap(image1);
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisation */
+  myKinematicGUI = theKinematicGUI;
+  Init();
+}
+
+
+//=================================================================================
+// function : ~KinematicGUI_ContactHDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+KinematicGUI_ContactHDlg::~KinematicGUI_ContactHDlg()
+{  
+  /* no need to delete child widgets, Qt does it all for us */
+}
+
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactHDlg::Init()
+{
+  /* init variables */
+  myEditCurrentArgument = Group1->LineEdit1;
+  myOkAssembly = myOkShape1 = myOkShape2 = false;
+
+  myStep = 1.0;
+  /* min, max, step and decimals for spin boxes & initial values */
+  Group1->SpinBox_DX->RangeStepAndValidator(0.001, 999.999, 0.1, 3);
+  Group1->SpinBox_DX->SetValue(myStep);
+
+   /* signals and slots connections */
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+
+  connect(Group1->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(Group1->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(Group1->LineEdit3, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+
+  connect(Group1->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(Group1->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(Group1->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+
+  connect(Group1->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DX, SLOT(SetStep(double)));
+
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+
+  /* displays Dialog */
+  Group1->show();
+  this->show();
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactHDlg::ClickOnOk()
+{
+  this->ClickOnApply();
+  ClickOnCancel();
+  return ;
+}
+
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactHDlg::ClickOnApply()
+{
+  QAD_Application::getDesktop()->putInfo(tr(""));
+
+  if(myOkAssembly && myOkShape1 && myOkShape2)
+    myKinematicGUI->AddContact(myGeomAssembly, myGeomShape1, myGeomShape2, 9, myStep);
+
+  return;
+}
+
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection has changed
+//=================================================================================
+void KinematicGUI_ContactHDlg::SelectionIntoArgument()
+{
+  myEditCurrentArgument->setText("");
+  QString aString = "";
+
+  int nbSel = myGeomBase->GetNameOfSelectedIObjects(mySelection, aString);
+  if(nbSel != 1) {
+    if(myEditCurrentArgument == Group1->LineEdit1)
+      myOkAssembly = false;
+    else if( myEditCurrentArgument == Group1->LineEdit2)
+      myOkShape1 = false;
+    else if( myEditCurrentArgument == Group1->LineEdit3)
+      myOkShape2 = false;
+    return;
+  }
+
+  /*  nbSel == 1  */
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+
+  if(myEditCurrentArgument == Group1->LineEdit1) {
+    myGeomAssembly = myGeomBase->ConvertIOinAssembly(IO, testResult);
+    if(!testResult)
+      return;
+    Group1->LineEdit1->setText(aString);
+    myOkAssembly = true;
+  }
+  else {
+    TopoDS_Shape S;
+    if(!myGeomBase->GetTopoFromSelection(mySelection, S))
+      return;
+
+    if(myEditCurrentArgument == Group1->LineEdit2) {
+      myGeomShape1 = myGeomBase->ConvertIOinGEOMShape(IO, testResult);
+      if(!testResult)
+       return;
+      Group1->LineEdit2->setText(aString);
+      myOkShape1 = true;
+    }
+    else if(myEditCurrentArgument == Group1->LineEdit3) {
+      myGeomShape2 = myGeomBase->ConvertIOinGEOMShape(IO, testResult);
+      if(!testResult)
+       return;
+      Group1->LineEdit3->setText(aString);
+      myOkShape2 = true;
+    }
+  }
+  return;
+}
+
+
+//=================================================================================
+// function : SetEditCurrentArgument()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactHDlg::SetEditCurrentArgument()
+{
+  QPushButton* send = (QPushButton*)sender();
+
+  if(send == Group1->PushButton1) {
+    Group1->LineEdit1->setFocus();
+    myEditCurrentArgument = Group1->LineEdit1;
+  }
+  else if(send == Group1->PushButton2) {
+    Group1->LineEdit2->setFocus();
+    myEditCurrentArgument = Group1->LineEdit2;
+  }
+  else if(send == Group1->PushButton3) {
+    Group1->LineEdit3->setFocus();
+    myEditCurrentArgument = Group1->LineEdit3;
+  }
+  SelectionIntoArgument();
+
+  return;
+}
+
+
+
+//=================================================================================
+// function : LineEditReturnPressed()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactHDlg::LineEditReturnPressed()
+{
+  QLineEdit* send = (QLineEdit*)sender();
+  if(send == Group1->LineEdit1)
+    myEditCurrentArgument = Group1->LineEdit1;
+  else if(send == Group1->LineEdit2)
+    myEditCurrentArgument = Group1->LineEdit2;
+  else if(send == Group1->LineEdit3)
+    myEditCurrentArgument = Group1->LineEdit3;
+  else
+    return;
+
+  GEOMBase_Skeleton::LineEditReturnPressed();
+  return;
+}
+
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactHDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  return;
+}
+
+
+//=================================================================================
+// function : enterEvent()
+// purpose  : when mouse enter onto the QWidget
+//=================================================================================
+void KinematicGUI_ContactHDlg::enterEvent(QEvent * e)
+{
+  if (GroupConstructors->isEnabled())
+    return;
+  this->ActivateThisDialog();
+  return;
+}
+
+
+//=================================================================================
+// function : ValueChangedInSpinBox()
+// purpose  :
+//=================================================================================
+void KinematicGUI_ContactHDlg::ValueChangedInSpinBox(double newValue)
+{
+  myStep = newValue;
+  return;
+}
diff --git a/src/KinematicGUI/KinematicGUI_ContactHDlg.h b/src/KinematicGUI/KinematicGUI_ContactHDlg.h
new file mode 100644 (file)
index 0000000..8a77fab
--- /dev/null
@@ -0,0 +1,76 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_ContactHDlg.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef DIALOGBOX_CONTACTH_H
+#define DIALOGBOX_CONTACTH_H
+
+#include "GEOMBase_Skeleton.h"
+#include "KinematicGUI_3Sel1Spin.h"
+
+#include "KinematicGUI.h"
+
+//=================================================================================
+// class    : KinematicGUI_ContactHDlg
+// purpose  :
+//=================================================================================
+class KinematicGUI_ContactHDlg : public GEOMBase_Skeleton
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_ContactHDlg(QWidget* parent = 0, const char* name = 0, KinematicGUI* theKinematicGUI = 0, SALOME_Selection* Sel = 0, bool modal = FALSE, WFlags fl = 0);
+    ~KinematicGUI_ContactHDlg();
+
+private:
+    void Init();
+    void enterEvent(QEvent * e);
+
+    KinematicGUI* myKinematicGUI;
+
+    GEOM::GEOM_Assembly_var myGeomAssembly;
+    GEOM::GEOM_Shape_var myGeomShape1;          /* is myShape1 */
+    GEOM::GEOM_Shape_var myGeomShape2;          /* is myShape2 */
+    bool myOkAssembly;
+    bool myOkShape1;
+    bool myOkShape2;            /* to check when arguments are defined */
+    double myStep;
+
+    KinematicGUI_3Sel1Spin* Group1;
+
+private slots:
+    void ClickOnOk();
+    void ClickOnApply();
+    void SetEditCurrentArgument();
+    void SelectionIntoArgument();
+    void LineEditReturnPressed();
+    void ActivateThisDialog();
+    void ValueChangedInSpinBox(double newValue);
+
+};
+
+#endif // DIALOGBOX_CONTACT_H
diff --git a/src/KinematicGUI/KinematicGUI_PositionDlg.cxx b/src/KinematicGUI/KinematicGUI_PositionDlg.cxx
new file mode 100644 (file)
index 0000000..a0b2f2c
--- /dev/null
@@ -0,0 +1,300 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_PositionDlg.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI_PositionDlg.h"
+
+//=================================================================================
+// class    : KinematicGUI_PositionDlg()
+// purpose  : Constructs a KinematicGUI_PositionDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+KinematicGUI_PositionDlg::KinematicGUI_PositionDlg(QWidget* parent, const char* name, KinematicGUI* theKinematicGUI, SALOME_Selection* Sel, bool modal, WFlags fl)
+  :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_CONTACT")));
+
+  setCaption(tr("GEOM_KPOSITION_TITLE"));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_KPOSITION"));
+  RadioButton1->setPixmap(image0);
+  RadioButton2->close(TRUE);
+  RadioButton3->close(TRUE);
+
+  Group1 = new KinematicGUI_12Spin(this, "Group1");
+  Group1->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  Group1->TextLabel1->setText(tr("GEOM_POS"));
+  Group1->TextLabel2->setText(tr("GEOM_X"));
+  Group1->TextLabel3->setText(tr("GEOM_Y"));
+  Group1->TextLabel4->setText(tr("GEOM_Z"));
+  Group1->TextLabel5->setText(tr("GEOM_VX"));
+  Group1->TextLabel6->setText(tr("GEOM_X"));
+  Group1->TextLabel7->setText(tr("GEOM_Y"));
+  Group1->TextLabel8->setText(tr("GEOM_Z"));
+  Group1->TextLabel9->setText(tr("GEOM_VY"));
+  Group1->TextLabel10->setText(tr("GEOM_X"));
+  Group1->TextLabel11->setText(tr("GEOM_Y"));
+  Group1->TextLabel12->setText(tr("GEOM_Z"));
+  Group1->TextLabel13->setText(tr("GEOM_VZ"));
+  Group1->TextLabel14->setText(tr("GEOM_X"));
+  Group1->TextLabel15->setText(tr("GEOM_Y"));
+  Group1->TextLabel16->setText(tr("GEOM_Z"));
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisation */
+  myKinematicGUI = theKinematicGUI;
+  Init();
+}
+
+
+//=================================================================================
+// function : ~KinematicGUI_PositionDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+KinematicGUI_PositionDlg::~KinematicGUI_PositionDlg()
+{  
+  /* no need to delete child widgets, Qt does it all for us */
+}
+
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void KinematicGUI_PositionDlg::Init()
+{
+  /* Get setting of step value from file configuration */
+  QString St = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
+  double step = St.toDouble();
+  double specificstep = 1.0;
+
+  Group1->SpinBox_11->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+  Group1->SpinBox_12->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+  Group1->SpinBox_13->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+  Group1->SpinBox_21->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_22->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_23->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_31->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_32->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_33->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_41->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_42->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+  Group1->SpinBox_43->RangeStepAndValidator(-99999.999, 99999.999, specificstep, 3);
+
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+  myGeomContact = myGeomBase->ConvertIOinContact(IO, testResult);
+  if(!testResult)
+    ClickOnCancel();
+
+  myGeomPosition = GEOM::GEOM_Position::_narrow(myGeomContact->GetPosition());
+
+  P0 = myGeomPosition->GetOrigin();
+  VX = myGeomPosition->GetVX();
+  VY = myGeomPosition->GetVY();
+  VZ = myGeomPosition->GetVZ();
+
+  Group1->SpinBox_11->SetValue(P0.x);
+  Group1->SpinBox_12->SetValue(P0.y);
+  Group1->SpinBox_13->SetValue(P0.z);
+  Group1->SpinBox_21->SetValue(VX.PS.x);
+  Group1->SpinBox_22->SetValue(VX.PS.y);
+  Group1->SpinBox_23->SetValue(VX.PS.z);
+  Group1->SpinBox_31->SetValue(VY.PS.x);
+  Group1->SpinBox_32->SetValue(VY.PS.y);
+  Group1->SpinBox_33->SetValue(VY.PS.z);
+  Group1->SpinBox_41->SetValue(VZ.PS.x);
+  Group1->SpinBox_42->SetValue(VZ.PS.y);
+  Group1->SpinBox_43->SetValue(VZ.PS.z);
+
+  SetEnabledValues();
+
+   /* signals and slots connections */
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+
+  connect(Group1->SpinBox_11, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_12, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_13, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_21, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_22, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_23, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_31, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_32, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_33, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_41, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_42, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_43, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_11, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_12, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_13, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_21, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_22, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_23, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_31, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_32, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_33, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_41, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_42, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_43, SLOT(SetStep(double)));
+
+  /* displays Dialog */
+  Group1->show();
+  this->show();
+  return;
+}
+
+
+//=================================================================================
+// function : InitValues()
+// purpose  :
+//=================================================================================
+void KinematicGUI_PositionDlg::SetEnabledValues()
+{
+  int type = myGeomContact->GetType();
+
+  if(type == 0) { //EMBEDDING
+    Group1->SpinBox_21->setEnabled(false);
+    Group1->SpinBox_22->setEnabled(false);
+    Group1->SpinBox_23->setEnabled(false);
+    Group1->SpinBox_31->setEnabled(false);
+    Group1->SpinBox_32->setEnabled(false);
+    Group1->SpinBox_33->setEnabled(false);
+    Group1->SpinBox_41->setEnabled(false);
+    Group1->SpinBox_42->setEnabled(false);
+    Group1->SpinBox_43->setEnabled(false);
+    Group1->TextLabel5->setEnabled(false);
+    Group1->TextLabel6->setEnabled(false);
+    Group1->TextLabel7->setEnabled(false);
+    Group1->TextLabel8->setEnabled(false);
+    Group1->TextLabel9->setEnabled(false);
+    Group1->TextLabel10->setEnabled(false);
+    Group1->TextLabel11->setEnabled(false);
+    Group1->TextLabel12->setEnabled(false);
+    Group1->TextLabel13->setEnabled(false);
+    Group1->TextLabel14->setEnabled(false);
+    Group1->TextLabel15->setEnabled(false);
+    Group1->TextLabel16->setEnabled(false);
+  }
+  else if(type == 1 || type == 3 || type == 5 || type == 9) { //PIVOT || SLIDING PIVOT || PLANE || HELICOIDAL
+    Group1->SpinBox_31->setEnabled(false);
+    Group1->SpinBox_32->setEnabled(false);
+    Group1->SpinBox_33->setEnabled(false);
+    Group1->SpinBox_41->setEnabled(false);
+    Group1->SpinBox_42->setEnabled(false);
+    Group1->SpinBox_43->setEnabled(false);
+    Group1->TextLabel9->setEnabled(false);
+    Group1->TextLabel10->setEnabled(false);
+    Group1->TextLabel11->setEnabled(false);
+    Group1->TextLabel12->setEnabled(false);
+    Group1->TextLabel13->setEnabled(false);
+    Group1->TextLabel14->setEnabled(false);
+    Group1->TextLabel15->setEnabled(false);
+    Group1->TextLabel16->setEnabled(false);
+  }
+  else if(type == 7) { //RECTILINEAR
+    Group1->SpinBox_41->setEnabled(false);
+    Group1->SpinBox_42->setEnabled(false);
+    Group1->SpinBox_43->setEnabled(false);
+    Group1->TextLabel13->setEnabled(false);
+    Group1->TextLabel14->setEnabled(false);
+    Group1->TextLabel15->setEnabled(false);
+    Group1->TextLabel16->setEnabled(false);
+  }
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void KinematicGUI_PositionDlg::ClickOnOk()
+{
+  this->ClickOnApply();
+  ClickOnCancel();
+  return ;
+}
+
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+void KinematicGUI_PositionDlg::ClickOnApply()
+{
+  QAD_Application::getDesktop()->putInfo(tr(""));
+
+  myKinematicGUI->SetPosition(myGeomContact, P0, VX, VY, VZ);
+
+  return;
+}
+
+
+//=================================================================================
+// function : ValueChangedInSpinBox()
+// purpose  :
+//=================================================================================
+void KinematicGUI_PositionDlg::ValueChangedInSpinBox(double newValue)
+{
+  DlgRef_SpinBox* send = (DlgRef_SpinBox*)sender();
+
+  if(send == Group1->SpinBox_11)
+    P0.x = newValue;
+  else if(send == Group1->SpinBox_12)
+    P0.y = newValue;
+  else if(send == Group1->SpinBox_13)
+    P0.z = newValue;
+  else if(send == Group1->SpinBox_21)
+    VX.PS.x = newValue;
+  else if(send == Group1->SpinBox_22)
+    VX.PS.y = newValue;
+  else if(send == Group1->SpinBox_23)
+    VX.PS.z = newValue;
+  else if(send == Group1->SpinBox_31)
+    VY.PS.x = newValue;
+  else if(send == Group1->SpinBox_32)
+    VY.PS.y = newValue;
+  else if(send == Group1->SpinBox_33)
+    VY.PS.z = newValue;
+  else if(send == Group1->SpinBox_41)
+    VZ.PS.x = newValue;
+  else if(send == Group1->SpinBox_42)
+    VZ.PS.y = newValue;
+  else if(send == Group1->SpinBox_43)
+    VZ.PS.z = newValue;
+
+  return;
+}
diff --git a/src/KinematicGUI/KinematicGUI_PositionDlg.h b/src/KinematicGUI/KinematicGUI_PositionDlg.h
new file mode 100644 (file)
index 0000000..2c7dd0d
--- /dev/null
@@ -0,0 +1,72 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_PositionDlg.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef DIALOGBOX_POSITION_H
+#define DIALOGBOX_POSITION_H
+
+#include "GEOMBase_Skeleton.h"
+#include "KinematicGUI_12Spin.h"
+
+#include "KinematicGUI.h"
+
+//=================================================================================
+// class    : KinematicGUI_PositionDlg
+// purpose  :
+//=================================================================================
+class KinematicGUI_PositionDlg : public GEOMBase_Skeleton
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_PositionDlg(QWidget* parent = 0, const char* name = 0, KinematicGUI* theKinematicGUI = 0, SALOME_Selection* Sel = 0, bool modal = FALSE, WFlags fl = 0);
+    ~KinematicGUI_PositionDlg();
+
+private:
+    void Init();
+    void SetEnabledValues();
+
+    KinematicGUI* myKinematicGUI;
+
+    GEOM::GEOM_Contact_var myGeomContact;
+    GEOM::GEOM_Position_var myGeomPosition;
+
+    GEOM::PointStruct P0;
+    GEOM::DirStruct VX;
+    GEOM::DirStruct VY;
+    GEOM::DirStruct VZ;
+    KinematicGUI_12Spin* Group1;
+
+private slots:
+    void ClickOnOk();
+    void ClickOnApply();
+    void ValueChangedInSpinBox(double newValue);
+
+};
+
+#endif // DIALOGBOX_TRANSLATION_H
diff --git a/src/KinematicGUI/KinematicGUI_RotationDlg.cxx b/src/KinematicGUI/KinematicGUI_RotationDlg.cxx
new file mode 100644 (file)
index 0000000..6669138
--- /dev/null
@@ -0,0 +1,319 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_RotationDlg.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI_RotationDlg.h"
+
+//=================================================================================
+// class    : KinematicGUI_RotationDlg()
+// purpose  : Constructs a KinematicGUI_RotationDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+KinematicGUI_RotationDlg::KinematicGUI_RotationDlg(QWidget* parent, const char* name, KinematicGUI* theKinematicGUI, SALOME_Selection* Sel, bool modal, WFlags fl)
+  :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_CONTACT")));
+
+  setCaption(tr("GEOM_KROTATION_TITLE"));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_KROTATION"));
+  RadioButton1->setPixmap(image0);
+  RadioButton2->close(TRUE);
+  RadioButton3->close(TRUE);
+
+  Group1 = new KinematicGUI_3List3Spin(this, "Group1");
+  Group1->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  Group1->TextLabel1->setText(tr("GEOM_1ROT"));
+  Group1->TextLabel2->setText(tr("GEOM_VALUE"));
+  Group1->TextLabel3->setText(tr("GEOM_2ROT"));
+  Group1->TextLabel4->setText(tr("GEOM_VALUE"));
+  Group1->TextLabel5->setText(tr("GEOM_3ROT"));
+  Group1->TextLabel6->setText(tr("GEOM_VALUE"));
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisation */
+  myKinematicGUI = theKinematicGUI;
+  Init();
+}
+
+
+//=================================================================================
+// function : ~KinematicGUI_RotationDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+KinematicGUI_RotationDlg::~KinematicGUI_RotationDlg()
+{  
+  /* no need to delete child widgets, Qt does it all for us */
+}
+
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void KinematicGUI_RotationDlg::Init()
+{
+  double step = 5.0;
+
+  Group1->SpinBox_DX->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+  Group1->SpinBox_DY->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+  Group1->SpinBox_DZ->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+  myGeomContact = myGeomBase->ConvertIOinContact(IO, testResult);
+  if(!testResult)
+    ClickOnCancel();
+
+  myGeomRotation = GEOM::GEOM_Rotation::_narrow(myGeomContact->GetRotation());
+
+  myVal1 = myGeomRotation->GetVal1();
+  myVal2 = myGeomRotation->GetVal2();
+  myVal3 = myGeomRotation->GetVal3();
+
+  Group1->SpinBox_DX->SetValue(myVal1);
+  Group1->SpinBox_DY->SetValue(myVal2);
+  Group1->SpinBox_DZ->SetValue(myVal3);
+
+  myRot1 = myGeomRotation->GetRot1();
+  myRot2 = myGeomRotation->GetRot2();
+  myRot3 = myGeomRotation->GetRot3();
+
+  Group1->ComboBox1->insertItem("X");
+  Group1->ComboBox1->insertItem("Y");
+  Group1->ComboBox1->insertItem("Z");
+  Group1->ComboBox2->insertItem("Y");
+  Group1->ComboBox2->insertItem("Z");
+  Group1->ComboBox3->insertItem("Z");
+
+  Group1->ComboBox1->setCurrentItem(myRot1 - 1);
+
+  InitValues();
+  SetEnabledValues();
+
+   /* signals and slots connections */
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+
+  connect(Group1->ComboBox1, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
+  connect(Group1->ComboBox2, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
+  connect(Group1->ComboBox3, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
+
+  connect(Group1->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DX, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DY, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DZ, SLOT(SetStep(double)));
+
+  /* displays Dialog */
+  Group1->show();
+  this->show();
+
+  return;
+}
+
+
+//=================================================================================
+// function : InitValues()
+// purpose  :
+//=================================================================================
+void KinematicGUI_RotationDlg::InitValues()
+{
+  if(myRot1 == 1) {
+    Group1->ComboBox2->changeItem("Y", 0);
+    Group1->ComboBox2->changeItem("Z", 1);
+    if(myRot2 == 2) {
+      Group1->ComboBox3->changeItem("Z", 0);
+      Group1->ComboBox2->setCurrentItem(0);
+    }
+    else if(myRot2 == 3) {
+      Group1->ComboBox3->changeItem("Y", 0);
+      Group1->ComboBox2->setCurrentItem(1);
+    }
+  }
+  else if(myRot1 == 2) {
+    Group1->ComboBox2->changeItem("X", 0);
+    Group1->ComboBox2->changeItem("Z", 1);
+    if(myRot2 == 1) {
+      Group1->ComboBox3->changeItem("Z", 0);
+      Group1->ComboBox2->setCurrentItem(0);
+    }
+    else if(myRot2 == 3) {
+      Group1->ComboBox3->changeItem("X", 0);
+      Group1->ComboBox2->setCurrentItem(1);
+    }
+  }
+  else if(myRot1 == 3) {
+    Group1->ComboBox2->changeItem("X", 0);
+    Group1->ComboBox2->changeItem("Y", 1);
+    if(myRot2 == 1) {
+      Group1->ComboBox3->changeItem("Y", 0);
+      Group1->ComboBox2->setCurrentItem(0);
+    }
+    else if(myRot2 == 2) {
+      Group1->ComboBox3->changeItem("X", 0);
+      Group1->ComboBox2->setCurrentItem(1);
+    }
+  }
+ return;
+}
+
+
+//=================================================================================
+// function : InitValues()
+// purpose  :
+//=================================================================================
+void KinematicGUI_RotationDlg::SetEnabledValues()
+{
+  int type = myGeomContact->GetType();
+
+  if(type == 1 || type == 3 || type == 5 || type == 9) { //PIVOT || SLIDING PIVOT || PLANE || HELICOIDAL
+    Group1->TextLabel3->setEnabled(false);
+    Group1->ComboBox2->setEnabled(false);
+    Group1->TextLabel4->setEnabled(false);
+    Group1->SpinBox_DY->setEnabled(false);
+    Group1->TextLabel5->setEnabled(false);
+    Group1->ComboBox3->setEnabled(false);
+    Group1->TextLabel6->setEnabled(false);
+    Group1->SpinBox_DZ->setEnabled(false);
+  }
+  else if(type == 7) { //RECTILINEAR
+    Group1->TextLabel5->setEnabled(false);
+    Group1->ComboBox3->setEnabled(false);
+    Group1->TextLabel6->setEnabled(false);
+    Group1->SpinBox_DZ->setEnabled(false);
+  }
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void KinematicGUI_RotationDlg::ClickOnOk()
+{
+  this->ClickOnApply();
+  ClickOnCancel();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+void KinematicGUI_RotationDlg::ClickOnApply()
+{
+  QAD_Application::getDesktop()->putInfo(tr(""));
+
+  myKinematicGUI->SetRotation(myGeomContact, myRot1, myRot2, myRot3,
+                             myVal1, myVal2, myVal3);
+
+  return;
+}
+
+
+//=================================================================================
+// function : ComboTextChanged()
+// purpose  : 
+//=================================================================================
+void KinematicGUI_RotationDlg::ComboTextChanged()
+{
+  QComboBox* send = (QComboBox*)sender();
+
+  if(send == Group1->ComboBox1) {
+    myRot1 = Group1->ComboBox1->currentItem() + 1;
+    if(myRot1 == 1) { //X
+      myRot2 = 2; //Y
+      myRot3 = 3; //Z
+    } else if(myRot1 == 2) { //Y
+      myRot2 = 1;//X
+      myRot3 = 3;//Z
+    } else if(myRot1 == 3) { //Z
+      myRot2 = 1;//X
+      myRot3 = 2;//Y
+    }
+  } else if(send == Group1->ComboBox2) {
+    if(myRot1 == 1) {
+      if(Group1->ComboBox2->currentItem() == 0) {
+       myRot2 = 2;
+       myRot3 = 3;
+      } else if(Group1->ComboBox2->currentItem() == 1) {
+       myRot2 = 3;
+       myRot3 = 2;
+      }
+    } else if(myRot1 == 2) {
+      if(Group1->ComboBox2->currentItem() == 0) {
+       myRot2 = 1;
+       myRot3 = 3;
+      } else if(Group1->ComboBox2->currentItem() == 1) {
+       myRot2 = 3;
+       myRot3 = 1;
+      }
+    } else if(myRot1 == 3) {
+      if(Group1->ComboBox2->currentItem() == 0) {
+       myRot2 = 1;
+       myRot3 = 2;
+      } else if(Group1->ComboBox2->currentItem() == 1) {
+       myRot2 = 2;
+       myRot3 = 1;
+      }
+    }
+  }
+
+  InitValues();
+  return;
+}
+
+
+//=================================================================================
+// function : ValueChangedInSpinBox()
+// purpose  :
+//=================================================================================
+void KinematicGUI_RotationDlg::ValueChangedInSpinBox(double newValue)
+{
+  DlgRef_SpinBox* send = (DlgRef_SpinBox*)sender();
+
+  if(send == Group1->SpinBox_DX)
+    myVal1 = newValue;
+  else if(send == Group1->SpinBox_DY)
+    myVal2 = newValue;
+  else if(send == Group1->SpinBox_DZ)
+    myVal3 = newValue;
+
+  return;
+}
diff --git a/src/KinematicGUI/KinematicGUI_RotationDlg.h b/src/KinematicGUI/KinematicGUI_RotationDlg.h
new file mode 100644 (file)
index 0000000..b8e55f0
--- /dev/null
@@ -0,0 +1,77 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_RotationDlg.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef DIALOGBOX_ROTATION_H
+#define DIALOGBOX_ROTATION_H
+
+#include "GEOMBase_Skeleton.h"
+#include "KinematicGUI_3List3Spin.h"
+
+#include "KinematicGUI.h"
+
+//=================================================================================
+// class    : KinematicGUI_RotationDlg
+// purpose  :
+//=================================================================================
+class KinematicGUI_RotationDlg : public GEOMBase_Skeleton
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_RotationDlg(QWidget* parent = 0, const char* name = 0, KinematicGUI* theKinematicGUI = 0, SALOME_Selection* Sel = 0, bool modal = FALSE, WFlags fl = 0);
+    ~KinematicGUI_RotationDlg();
+
+private:
+    void Init();
+    void InitValues();
+    void SetEnabledValues();
+
+    KinematicGUI* myKinematicGUI;
+
+    GEOM::GEOM_Contact_var myGeomContact;
+    GEOM::GEOM_Rotation_var myGeomRotation;
+
+    int myRot1;
+    int myRot2;
+    int myRot3;
+
+    double myVal1;
+    double myVal2;
+    double myVal3;
+
+    KinematicGUI_3List3Spin* Group1;
+
+private slots:
+    void ClickOnOk();
+    void ClickOnApply();
+    void ComboTextChanged();
+    void ValueChangedInSpinBox(double newValue);
+
+};
+
+#endif // DIALOGBOX_ROTATION_H
diff --git a/src/KinematicGUI/KinematicGUI_Skeleton_QTD.cxx b/src/KinematicGUI/KinematicGUI_Skeleton_QTD.cxx
new file mode 100644 (file)
index 0000000..c190f95
--- /dev/null
@@ -0,0 +1,99 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'KinematicGUI_Skeleton_QTD.ui'
+**
+** Created: mer mar 3 16:54:07 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "KinematicGUI_Skeleton_QTD.h"
+
+#include <qvariant.h>
+#include <qbuttongroup.h>
+#include <qgroupbox.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/* 
+ *  Constructs a KinematicGUI_Skeleton_QTD which is a child of 'parent', with the 
+ *  name 'name' and widget flags set to 'f'.
+ *
+ *  The dialog will by default be modeless, unless you set 'modal' to
+ *  TRUE to construct a modal dialog.
+ */
+KinematicGUI_Skeleton_QTD::KinematicGUI_Skeleton_QTD( QWidget* parent,  const char* name, bool modal, WFlags fl )
+    : QDialog( parent, name, modal, fl )
+{
+    if ( !name )
+       setName( "KinematicGUI_Skeleton_QTD" );
+    resize( 228, 266 ); 
+    setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)7, 0, 0, sizePolicy().hasHeightForWidth() ) );
+    setCaption( trUtf8( "KinematicGUI_Skeleton_QTD" ) );
+    setSizeGripEnabled( TRUE );
+    KinematicGUI_Skeleton_QTDLayout = new QGridLayout( this, 1, 1, 11, 6, "KinematicGUI_Skeleton_QTDLayout"); 
+
+    Layout1 = new QGridLayout( 0, 1, 1, 0, 6, "Layout1"); 
+
+    GroupButtons = new QGroupBox( this, "GroupButtons" );
+    GroupButtons->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, GroupButtons->sizePolicy().hasHeightForWidth() ) );
+    GroupButtons->setTitle( trUtf8( "" ) );
+    GroupButtons->setColumnLayout(0, Qt::Vertical );
+    GroupButtons->layout()->setSpacing( 6 );
+    GroupButtons->layout()->setMargin( 11 );
+    GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
+    GroupButtonsLayout->setAlignment( Qt::AlignTop );
+
+    Layout3 = new QGridLayout( 0, 1, 1, 0, 6, "Layout3"); 
+    QSpacerItem* spacer = new QSpacerItem( 120, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
+    Layout3->addItem( spacer, 0, 2 );
+    QSpacerItem* spacer_2 = new QSpacerItem( 120, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
+    Layout3->addItem( spacer_2, 0, 0 );
+
+    buttonClose = new QPushButton( GroupButtons, "buttonClose" );
+    buttonClose->setText( trUtf8( "&Close" ) );
+
+    Layout3->addWidget( buttonClose, 0, 1 );
+
+    GroupButtonsLayout->addLayout( Layout3, 0, 0 );
+
+    Layout1->addWidget( GroupButtons, 2, 0 );
+
+    GroupConstructors = new QButtonGroup( this, "GroupConstructors" );
+    GroupConstructors->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, GroupConstructors->sizePolicy().hasHeightForWidth() ) );
+    GroupConstructors->setTitle( trUtf8( "" ) );
+    GroupConstructors->setColumnLayout(0, Qt::Vertical );
+    GroupConstructors->layout()->setSpacing( 6 );
+    GroupConstructors->layout()->setMargin( 11 );
+    GroupConstructorsLayout = new QGridLayout( GroupConstructors->layout() );
+    GroupConstructorsLayout->setAlignment( Qt::AlignTop );
+
+    Layout2 = new QHBoxLayout( 0, 0, 6, "Layout2"); 
+
+    RadioButton1 = new QRadioButton( GroupConstructors, "RadioButton1" );
+    RadioButton1->setText( trUtf8( "" ) );
+    Layout2->addWidget( RadioButton1 );
+
+    GroupConstructorsLayout->addLayout( Layout2, 0, 0 );
+
+    Layout1->addWidget( GroupConstructors, 0, 0 );
+
+    GroupMedium = new QGroupBox( this, "GroupMedium" );
+    GroupMedium->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, GroupMedium->sizePolicy().hasHeightForWidth() ) );
+    GroupMedium->setTitle( trUtf8( "" ) );
+
+    Layout1->addWidget( GroupMedium, 1, 0 );
+
+    KinematicGUI_Skeleton_QTDLayout->addLayout( Layout1, 0, 0 );
+}
+
+/*  
+ *  Destroys the object and frees any allocated resources
+ */
+KinematicGUI_Skeleton_QTD::~KinematicGUI_Skeleton_QTD()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/src/KinematicGUI/KinematicGUI_Skeleton_QTD.h b/src/KinematicGUI/KinematicGUI_Skeleton_QTD.h
new file mode 100644 (file)
index 0000000..efc25e5
--- /dev/null
@@ -0,0 +1,46 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'KinematicGUI_Skeleton_QTD.ui'
+**
+** Created: mer mar 3 16:54:07 2004
+**      by:  The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef KINEMATICGUI_SKELETON_QTD_H
+#define KINEMATICGUI_SKELETON_QTD_H
+
+#include <qvariant.h>
+#include <qdialog.h>
+class QVBoxLayout; 
+class QHBoxLayout; 
+class QGridLayout; 
+class QButtonGroup;
+class QGroupBox;
+class QPushButton;
+class QRadioButton;
+
+class KinematicGUI_Skeleton_QTD : public QDialog
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_Skeleton_QTD( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+    ~KinematicGUI_Skeleton_QTD();
+
+    QGroupBox* GroupButtons;
+    QPushButton* buttonClose;
+    QButtonGroup* GroupConstructors;
+    QRadioButton* RadioButton1;
+    QGroupBox* GroupMedium;
+
+
+protected:
+    QGridLayout* KinematicGUI_Skeleton_QTDLayout;
+    QGridLayout* Layout1;
+    QGridLayout* GroupButtonsLayout;
+    QGridLayout* Layout3;
+    QGridLayout* GroupConstructorsLayout;
+    QHBoxLayout* Layout2;
+};
+
+#endif // KINEMATICGUI_SKELETON_QTD_H
diff --git a/src/KinematicGUI/KinematicGUI_TranslationDlg.cxx b/src/KinematicGUI/KinematicGUI_TranslationDlg.cxx
new file mode 100644 (file)
index 0000000..2789eb1
--- /dev/null
@@ -0,0 +1,198 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_TranslationDlg.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "KinematicGUI_TranslationDlg.h"
+
+//=================================================================================
+// class    : KinematicGUI_TranslationDlg()
+// purpose  : Constructs a KinematicGUI_TranslationDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+KinematicGUI_TranslationDlg::KinematicGUI_TranslationDlg(QWidget* parent, const char* name, KinematicGUI* theKinematicGUI, SALOME_Selection* Sel, bool modal, WFlags fl)
+  :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_CONTACT")));
+
+  setCaption(tr("GEOM_KTRANSLATION_TITLE"));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_KTRANSLATION"));
+  RadioButton1->setPixmap(image0);
+  RadioButton2->close(TRUE);
+  RadioButton3->close(TRUE);
+
+  Group1 = new DlgRef_3Spin(this, "Group1");
+  Group1->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  Group1->TextLabel1->setText(tr("GEOM_X"));
+  Group1->TextLabel2->setText(tr("GEOM_Y"));
+  Group1->TextLabel3->setText(tr("GEOM_Z"));
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisation */
+  myKinematicGUI = theKinematicGUI;
+  Init();
+}
+
+
+//=================================================================================
+// function : ~KinematicGUI_TranslationDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+KinematicGUI_TranslationDlg::~KinematicGUI_TranslationDlg()
+{  
+  /* no need to delete child widgets, Qt does it all for us */
+}
+
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void KinematicGUI_TranslationDlg::Init()
+{
+  /* Get setting of step value from file configuration */
+  QString St = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
+  double step = St.toDouble();
+
+  Group1->SpinBox_DX->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+  Group1->SpinBox_DY->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+  Group1->SpinBox_DZ->RangeStepAndValidator(-99999.999, 99999.999, step, 3);
+
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+  myGeomContact = myGeomBase->ConvertIOinContact(IO, testResult);
+  if(!testResult)
+    ClickOnCancel();
+
+  myGeomTranslation = GEOM::GEOM_Translation::_narrow(myGeomContact->GetTranslation());
+
+  myValX = myGeomTranslation->GetValX();
+  myValY = myGeomTranslation->GetValY();
+  myValZ = myGeomTranslation->GetValZ();
+
+  Group1->SpinBox_DX->SetValue(myValX);
+  Group1->SpinBox_DY->SetValue(myValY);
+  Group1->SpinBox_DZ->SetValue(myValZ);
+
+  SetEnabledValues();
+
+   /* signals and slots connections */
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+
+  connect(Group1->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group1->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DX, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DY, SLOT(SetStep(double)));
+  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), Group1->SpinBox_DZ, SLOT(SetStep(double)));
+
+  /* displays Dialog */
+  Group1->show();
+  this->show();
+
+  return;
+}
+
+
+//=================================================================================
+// function : InitValues()
+// purpose  :
+//=================================================================================
+void KinematicGUI_TranslationDlg::SetEnabledValues()
+{
+  int type = myGeomContact->GetType();
+
+  if(type == 2 || type == 3 || type == 6 || type == 9) { //SLIDE || SLIDING PIVOT || ANNULAR || HELICOIDAL
+    Group1->TextLabel2->setEnabled(false);
+    Group1->SpinBox_DY->setEnabled(false);
+    Group1->TextLabel3->setEnabled(false);
+    Group1->SpinBox_DZ->setEnabled(false);
+  }
+  else if(type == 7) { //RECTILINEAR
+    Group1->TextLabel2->setEnabled(false);
+    Group1->SpinBox_DY->setEnabled(false);
+  }
+  else if(type == 5 || type == 8) { //PLANE || PONCTUAL
+    Group1->TextLabel1->setEnabled(false);
+    Group1->SpinBox_DX->setEnabled(false);
+  }
+
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void KinematicGUI_TranslationDlg::ClickOnOk()
+{
+  this->ClickOnApply();
+  ClickOnCancel();
+  return ;
+}
+
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+void KinematicGUI_TranslationDlg::ClickOnApply()
+{
+  QAD_Application::getDesktop()->putInfo(tr(""));
+
+  myKinematicGUI->SetTranslation(myGeomContact, myValX, myValY, myValZ);
+
+  return;
+}
+
+
+//=================================================================================
+// function : ValueChangedInSpinBox()
+// purpose  :
+//=================================================================================
+void KinematicGUI_TranslationDlg::ValueChangedInSpinBox(double newValue)
+{
+  DlgRef_SpinBox* send = (DlgRef_SpinBox*)sender();
+
+  if(send == Group1->SpinBox_DX)
+    myValX = newValue;
+  else if(send == Group1->SpinBox_DY)
+    myValY = newValue;
+  else if(send == Group1->SpinBox_DZ)
+    myValZ = newValue;
+
+  return;
+}
diff --git a/src/KinematicGUI/KinematicGUI_TranslationDlg.h b/src/KinematicGUI/KinematicGUI_TranslationDlg.h
new file mode 100644 (file)
index 0000000..6045e05
--- /dev/null
@@ -0,0 +1,71 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : KinematicGUI_TranslationDlg.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef DIALOGBOX_TRANSLATION_H
+#define DIALOGBOX_TRANSLATION_H
+
+#include "GEOMBase_Skeleton.h"
+#include "DlgRef_3Spin.h"
+
+#include "KinematicGUI.h"
+
+//=================================================================================
+// class    : KinematicGUI_TranslationDlg
+// purpose  :
+//=================================================================================
+class KinematicGUI_TranslationDlg : public GEOMBase_Skeleton
+{ 
+    Q_OBJECT
+
+public:
+    KinematicGUI_TranslationDlg(QWidget* parent = 0, const char* name = 0, KinematicGUI* theKinematicGUI = 0, SALOME_Selection* Sel = 0, bool modal = FALSE, WFlags fl = 0);
+    ~KinematicGUI_TranslationDlg();
+
+private:
+    void Init();
+    void SetEnabledValues();
+
+    KinematicGUI* myKinematicGUI;
+
+    GEOM::GEOM_Contact_var myGeomContact;
+    GEOM::GEOM_Translation_var myGeomTranslation;
+
+    double myValX;
+    double myValY;
+    double myValZ;
+
+    DlgRef_3Spin* Group1;
+
+private slots:
+    void ClickOnOk();
+    void ClickOnApply();
+    void ValueChangedInSpinBox(double newValue);
+
+};
+
+#endif // DIALOGBOX_TRANSLATION_H
diff --git a/src/KinematicGUI/Makefile.in b/src/KinematicGUI/Makefile.in
new file mode 100644 (file)
index 0000000..fd4ac85
--- /dev/null
@@ -0,0 +1,91 @@
+#  GEOM KINETICGUI : 
+#
+#  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+# 
+#  This library is free software; you can redistribute it and/or 
+#  modify it under the terms of the GNU Lesser General Public 
+#  License as published by the Free Software Foundation; either 
+#  version 2.1 of the License. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+# 
+#  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+#
+#
+#
+#  File   : Makefile.in
+#  Author : Damien COQUERET (OCC)
+#  Module : GEOM
+#  $Header: 
+
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl
+
+
+@COMMENCE@
+
+# header files 
+EXPORT_HEADERS=
+
+# Libraries targets
+LIB = libKinematicGUI.la 
+
+LIB_SRC =      KinematicGUI.cxx \
+               KinematicGUI_3Sel1List_QTD.cxx \
+               KinematicGUI_3Sel1Spin_QTD.cxx \
+               KinematicGUI_3List3Spin_QTD.cxx \
+               KinematicGUI_12Spin_QTD.cxx \
+               KinematicGUI_Skeleton_QTD.cxx \
+               KinematicGUI_Anim_QTD.cxx \
+               KinematicGUI_3Sel1Spin.cxx \
+               KinematicGUI_3List3Spin.cxx \
+               KinematicGUI_12Spin.cxx \
+               KinematicGUI_ContactDlg.cxx \
+               KinematicGUI_ContactHDlg.cxx \
+               KinematicGUI_PositionDlg.cxx \
+               KinematicGUI_RotationDlg.cxx \
+               KinematicGUI_TranslationDlg.cxx \
+               KinematicGUI_AnimDlg.cxx \
+               KinematicGUI_AnimationDlg.cxx
+
+LIB_MOC = \
+               KinematicGUI.h \
+               KinematicGUI_3Sel1List_QTD.h \
+               KinematicGUI_3Sel1Spin_QTD.h \
+               KinematicGUI_3List3Spin_QTD.h \
+               KinematicGUI_12Spin_QTD.h \
+               KinematicGUI_Skeleton_QTD.h \
+               KinematicGUI_Anim_QTD.h \
+               KinematicGUI_3Sel1Spin.h \
+               KinematicGUI_3List3Spin.h \
+               KinematicGUI_12Spin.h \
+               KinematicGUI_ContactDlg.h \
+               KinematicGUI_ContactHDlg.h \
+               KinematicGUI_PositionDlg.h \
+               KinematicGUI_RotationDlg.h \
+               KinematicGUI_TranslationDlg.h \
+               KinematicGUI_AnimDlg.h \
+               KinematicGUI_AnimationDlg.h
+
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
+
+LIB_SERVER_IDL = 
+
+# additionnal information to compil and link file
+
+CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome
+CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome
+
+LDFLAGS += -lGEOMBase -lGEOMKinematic
+
+@CONCLUDE@
diff --git a/src/KinematicGUI/UIFiles/KinematicGUI_12Spin_QTD.ui b/src/KinematicGUI/UIFiles/KinematicGUI_12Spin_QTD.ui
new file mode 100644 (file)
index 0000000..b149653
--- /dev/null
@@ -0,0 +1,495 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KinematicGUI_12Spin_QTD</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>KinematicGUI_12Spin_QTD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>396</width>
+            <height>139</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>KinematicGUI_12Spin_QTD</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <property name="margin">
+            <number>0</number>
+        </property>
+        <property name="spacing">
+            <number>6</number>
+        </property>
+        <widget class="QGroupBox" row="0" column="0">
+            <property name="name">
+                <cstring>GroupBox1</cstring>
+            </property>
+            <property name="title">
+                <string></string>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>11</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QLayoutWidget" row="0" column="0">
+                    <property name="name">
+                        <cstring>Layout1</cstring>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>0</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <widget class="QLabel" row="3" column="3">
+                            <property name="name">
+                                <cstring>TextLabel15</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL15</string>
+                            </property>
+                        </widget>
+                        <spacer row="4" column="4">
+                            <property name="name">
+                                <cstring>Spacer7</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Vertical</enum>
+                            </property>
+                            <property name="sizeType">
+                                <enum>Expanding</enum>
+                            </property>
+                            <property name="sizeHint">
+                                <size>
+                                    <width>0</width>
+                                    <height>80</height>
+                                </size>
+                            </property>
+                        </spacer>
+                        <widget class="QLabel" row="3" column="1">
+                            <property name="name">
+                                <cstring>TextLabel14</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL14</string>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="1" column="4">
+                            <property name="name">
+                                <cstring>SpinBox5</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="0" column="3">
+                            <property name="name">
+                                <cstring>TextLabel3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL3</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="2" column="3">
+                            <property name="name">
+                                <cstring>TextLabel11</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL11</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="5">
+                            <property name="name">
+                                <cstring>TextLabel8</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL8</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="0" column="5">
+                            <property name="name">
+                                <cstring>TextLabel4</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL4</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="3">
+                            <property name="name">
+                                <cstring>TextLabel7</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL7</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="2" column="5">
+                            <property name="name">
+                                <cstring>TextLabel12</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL12</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="3" column="0">
+                            <property name="name">
+                                <cstring>TextLabel13</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL13</string>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="3" column="6">
+                            <property name="name">
+                                <cstring>SpinBox12</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="3" column="4">
+                            <property name="name">
+                                <cstring>SpinBox11</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="2" column="6">
+                            <property name="name">
+                                <cstring>SpinBox9</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="2" column="4">
+                            <property name="name">
+                                <cstring>SpinBox8</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="2" column="2">
+                            <property name="name">
+                                <cstring>SpinBox7</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="1" column="6">
+                            <property name="name">
+                                <cstring>SpinBox6</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="0" column="6">
+                            <property name="name">
+                                <cstring>SpinBox3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="3" column="5">
+                            <property name="name">
+                                <cstring>TextLabel16</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL16</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="0" column="0">
+                            <property name="name">
+                                <cstring>TextLabel1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL1</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="2" column="1">
+                            <property name="name">
+                                <cstring>TextLabel10</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL10</string>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="1" column="2">
+                            <property name="name">
+                                <cstring>SpinBox4</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="1">
+                            <property name="name">
+                                <cstring>TextLabel6</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL6</string>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="3" column="2">
+                            <property name="name">
+                                <cstring>SpinBox10</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="0" column="4">
+                            <property name="name">
+                                <cstring>SpinBox2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="0" column="1">
+                            <property name="name">
+                                <cstring>TextLabel2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL2</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="2" column="0">
+                            <property name="name">
+                                <cstring>TextLabel9</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL9</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="0">
+                            <property name="name">
+                                <cstring>TextLabel5</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL5</string>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="0" column="2">
+                            <property name="name">
+                                <cstring>SpinBox1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                    </grid>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/KinematicGUI/UIFiles/KinematicGUI_3List3Spin_QTD.ui b/src/KinematicGUI/UIFiles/KinematicGUI_3List3Spin_QTD.ui
new file mode 100644 (file)
index 0000000..24e8d0e
--- /dev/null
@@ -0,0 +1,263 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KinematicGUI_3List3Spin_QTD</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>KinematicGUI_3List3Spin_QTD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>279</width>
+            <height>111</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>100</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>KinematicGUI_3List3Spin_QTD</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <property name="margin">
+            <number>0</number>
+        </property>
+        <property name="spacing">
+            <number>6</number>
+        </property>
+        <widget class="QGroupBox" row="0" column="0">
+            <property name="name">
+                <cstring>GroupBox1</cstring>
+            </property>
+            <property name="title">
+                <string></string>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>11</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QLayoutWidget" row="0" column="0">
+                    <property name="name">
+                        <cstring>Layout1</cstring>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>0</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <widget class="QLabel" row="0" column="2">
+                            <property name="name">
+                                <cstring>TextLabel2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL2</string>
+                            </property>
+                        </widget>
+                        <spacer row="3" column="3">
+                            <property name="name">
+                                <cstring>Spacer7</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Vertical</enum>
+                            </property>
+                            <property name="sizeType">
+                                <enum>Expanding</enum>
+                            </property>
+                            <property name="sizeHint">
+                                <size>
+                                    <width>0</width>
+                                    <height>100</height>
+                                </size>
+                            </property>
+                        </spacer>
+                        <widget class="QSpinBox" row="0" column="3">
+                            <property name="name">
+                                <cstring>SpinBox1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="2">
+                            <property name="name">
+                                <cstring>TextLabel4</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL4</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="0">
+                            <property name="name">
+                                <cstring>TextLabel3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL3</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="0" column="0">
+                            <property name="name">
+                                <cstring>TextLabel1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL1</string>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="2" column="1">
+                            <property name="name">
+                                <cstring>ComboBox3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="1" column="3">
+                            <property name="name">
+                                <cstring>SpinBox2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QSpinBox" row="2" column="3">
+                            <property name="name">
+                                <cstring>SpinBox3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="2" column="2">
+                            <property name="name">
+                                <cstring>TextLabel6</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL6</string>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="0" column="1">
+                            <property name="name">
+                                <cstring>ComboBox1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="1" column="1">
+                            <property name="name">
+                                <cstring>ComboBox2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="2" column="0">
+                            <property name="name">
+                                <cstring>TextLabel5</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL5</string>
+                            </property>
+                        </widget>
+                    </grid>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/KinematicGUI/UIFiles/KinematicGUI_3Sel1List_QTD.ui b/src/KinematicGUI/UIFiles/KinematicGUI_3Sel1List_QTD.ui
new file mode 100644 (file)
index 0000000..e38d3d6
--- /dev/null
@@ -0,0 +1,223 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KinematicGUI_3Sel1List_QTD</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>KinematicGUI_3Sel1List_QTD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>129</width>
+            <height>145</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>KinematicGUI_3Sel1List_QTD</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <property name="margin">
+            <number>0</number>
+        </property>
+        <property name="spacing">
+            <number>6</number>
+        </property>
+        <widget class="QGroupBox" row="0" column="0">
+            <property name="name">
+                <cstring>GroupBox1</cstring>
+            </property>
+            <property name="title">
+                <string></string>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>11</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QLayoutWidget" row="0" column="0">
+                    <property name="name">
+                        <cstring>Layout1</cstring>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>0</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <spacer row="4" column="2">
+                            <property name="name">
+                                <cstring>Spacer5</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Vertical</enum>
+                            </property>
+                            <property name="sizeType">
+                                <enum>Expanding</enum>
+                            </property>
+                            <property name="sizeHint">
+                                <size>
+                                    <width>0</width>
+                                    <height>90</height>
+                                </size>
+                            </property>
+                        </spacer>
+                        <widget class="QPushButton" row="2" column="1">
+                            <property name="name">
+                                <cstring>PushButton2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="0" column="0">
+                            <property name="name">
+                                <cstring>TextLabel1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL1</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="3" column="0">
+                            <property name="name">
+                                <cstring>TextLabel4</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL4</string>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit" row="0" column="2">
+                            <property name="name">
+                                <cstring>LineEdit1</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="0" column="1">
+                            <property name="name">
+                                <cstring>PushButton1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="2" column="0">
+                            <property name="name">
+                                <cstring>TextLabel3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL3</string>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="3" column="1">
+                            <property name="name">
+                                <cstring>PushButton3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="1" column="2">
+                            <property name="name">
+                                <cstring>ComboBox1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>7</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit" row="2" column="2">
+                            <property name="name">
+                                <cstring>LineEdit2</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit" row="3" column="2">
+                            <property name="name">
+                                <cstring>LineEdit3</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="0">
+                            <property name="name">
+                                <cstring>TextLabel2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL2</string>
+                            </property>
+                        </widget>
+                    </grid>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/KinematicGUI/UIFiles/KinematicGUI_3Sel1Spin_QTD.ui b/src/KinematicGUI/UIFiles/KinematicGUI_3Sel1Spin_QTD.ui
new file mode 100644 (file)
index 0000000..1af933d
--- /dev/null
@@ -0,0 +1,239 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KinematicGUI_3Sel1Spin_QTD</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>KinematicGUI_3Sel1Spin_QTD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>129</width>
+            <height>147</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>KinematicGUI_3Sel1Spin_QTD</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <property name="margin">
+            <number>0</number>
+        </property>
+        <property name="spacing">
+            <number>6</number>
+        </property>
+        <widget class="QGroupBox" row="0" column="0">
+            <property name="name">
+                <cstring>GroupBox1</cstring>
+            </property>
+            <property name="title">
+                <string></string>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>11</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QLayoutWidget" row="0" column="0">
+                    <property name="name">
+                        <cstring>Layout1</cstring>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>0</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <widget class="QLineEdit" row="0" column="2">
+                            <property name="name">
+                                <cstring>LineEdit1</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="2" column="1">
+                            <property name="name">
+                                <cstring>PushButton3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                        <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="3">
+                            <property name="name">
+                                <cstring>Layout2</cstring>
+                            </property>
+                            <grid>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <property name="margin">
+                                    <number>0</number>
+                                </property>
+                                <property name="spacing">
+                                    <number>6</number>
+                                </property>
+                                <widget class="QLabel" row="0" column="0">
+                                    <property name="name">
+                                        <cstring>TextLabel4</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string>TL4</string>
+                                    </property>
+                                </widget>
+                                <widget class="QSpinBox" row="0" column="1">
+                                    <property name="name">
+                                        <cstring>SpinBox1</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>7</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                </widget>
+                            </grid>
+                        </widget>
+                        <widget class="QLabel" row="2" column="0">
+                            <property name="name">
+                                <cstring>TextLabel3</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL3</string>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit" row="2" column="2">
+                            <property name="name">
+                                <cstring>LineEdit3</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit" row="1" column="2">
+                            <property name="name">
+                                <cstring>LineEdit2</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="1" column="1">
+                            <property name="name">
+                                <cstring>PushButton2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="0">
+                            <property name="name">
+                                <cstring>TextLabel2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL2</string>
+                            </property>
+                        </widget>
+                        <spacer row="4" column="2">
+                            <property name="name">
+                                <cstring>Spacer5</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Vertical</enum>
+                            </property>
+                            <property name="sizeType">
+                                <enum>Expanding</enum>
+                            </property>
+                            <property name="sizeHint">
+                                <size>
+                                    <width>0</width>
+                                    <height>100</height>
+                                </size>
+                            </property>
+                        </spacer>
+                        <widget class="QLabel" row="0" column="0">
+                            <property name="name">
+                                <cstring>TextLabel1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL1</string>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="0" column="1">
+                            <property name="name">
+                                <cstring>PushButton1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                    </grid>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/KinematicGUI/UIFiles/KinematicGUI_Anim_QTD.ui b/src/KinematicGUI/UIFiles/KinematicGUI_Anim_QTD.ui
new file mode 100644 (file)
index 0000000..c66425a
--- /dev/null
@@ -0,0 +1,251 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KinematicGUI_Anim_QTD</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>KinematicGUI_Anim_QTD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>334</width>
+            <height>121</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>KinematicGUI_Anim_QTD</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <property name="margin">
+            <number>0</number>
+        </property>
+        <property name="spacing">
+            <number>6</number>
+        </property>
+        <widget class="QGroupBox" row="0" column="0">
+            <property name="name">
+                <cstring>GroupBox1</cstring>
+            </property>
+            <property name="title">
+                <string></string>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>11</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QLayoutWidget" row="0" column="0">
+                    <property name="name">
+                        <cstring>Layout1</cstring>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>0</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <spacer row="3" column="0">
+                            <property name="name">
+                                <cstring>Spacer5</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Vertical</enum>
+                            </property>
+                            <property name="sizeType">
+                                <enum>Expanding</enum>
+                            </property>
+                            <property name="sizeHint">
+                                <size>
+                                    <width>0</width>
+                                    <height>156</height>
+                                </size>
+                            </property>
+                        </spacer>
+                        <widget class="QLayoutWidget" row="1" column="0">
+                            <property name="name">
+                                <cstring>Layout2</cstring>
+                            </property>
+                            <grid>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <property name="margin">
+                                    <number>0</number>
+                                </property>
+                                <property name="spacing">
+                                    <number>6</number>
+                                </property>
+                                <widget class="QPushButton" row="0" column="2">
+                                    <property name="name">
+                                        <cstring>PushButton3</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QPushButton" row="0" column="4">
+                                    <property name="name">
+                                        <cstring>PushButton5</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QPushButton" row="0" column="1">
+                                    <property name="name">
+                                        <cstring>PushButton2</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QPushButton" row="0" column="3">
+                                    <property name="name">
+                                        <cstring>PushButton4</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QPushButton" row="0" column="5">
+                                    <property name="name">
+                                        <cstring>PushButton6</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QPushButton" row="0" column="0">
+                                    <property name="name">
+                                        <cstring>PushButton1</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                            </grid>
+                        </widget>
+                        <widget class="QSlider" row="0" column="0">
+                            <property name="name">
+                                <cstring>Slider1</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Horizontal</enum>
+                            </property>
+                        </widget>
+                        <widget class="QLayoutWidget" row="2" column="0">
+                            <property name="name">
+                                <cstring>Layout3</cstring>
+                            </property>
+                            <grid>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <property name="margin">
+                                    <number>0</number>
+                                </property>
+                                <property name="spacing">
+                                    <number>6</number>
+                                </property>
+                                <widget class="QRadioButton" row="0" column="0">
+                                    <property name="name">
+                                        <cstring>CheckButton1</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QPushButton" row="0" column="2">
+                                    <property name="name">
+                                        <cstring>PushButton7</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QRadioButton" row="0" column="1">
+                                    <property name="name">
+                                        <cstring>CheckButton2</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                            </grid>
+                        </widget>
+                    </grid>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/KinematicGUI/UIFiles/KinematicGUI_Skeleton_QTD.ui b/src/KinematicGUI/UIFiles/KinematicGUI_Skeleton_QTD.ui
new file mode 100644 (file)
index 0000000..139d0aa
--- /dev/null
@@ -0,0 +1,210 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KinematicGUI_Skeleton_QTD</class>
+<widget class="QDialog">
+    <property name="name">
+        <cstring>KinematicGUI_Skeleton_QTD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>228</width>
+            <height>266</height>
+        </rect>
+    </property>
+    <property name="sizePolicy">
+        <sizepolicy>
+            <hsizetype>5</hsizetype>
+            <vsizetype>7</vsizetype>
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+        </sizepolicy>
+    </property>
+    <property name="caption">
+        <string>KinematicGUI_Skeleton_QTD</string>
+    </property>
+    <property name="sizeGripEnabled">
+        <bool>true</bool>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <property name="margin">
+            <number>11</number>
+        </property>
+        <property name="spacing">
+            <number>6</number>
+        </property>
+        <widget class="QLayoutWidget" row="0" column="0">
+            <property name="name">
+                <cstring>Layout1</cstring>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>0</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QGroupBox" row="2" column="0">
+                    <property name="name">
+                        <cstring>GroupButtons</cstring>
+                    </property>
+                    <property name="sizePolicy">
+                        <sizepolicy>
+                            <hsizetype>7</hsizetype>
+                            <vsizetype>0</vsizetype>
+                            <horstretch>0</horstretch>
+                            <verstretch>0</verstretch>
+                        </sizepolicy>
+                    </property>
+                    <property name="title">
+                        <string></string>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>11</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <widget class="QLayoutWidget" row="0" column="0">
+                            <property name="name">
+                                <cstring>Layout3</cstring>
+                            </property>
+                            <grid>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <property name="margin">
+                                    <number>0</number>
+                                </property>
+                                <property name="spacing">
+                                    <number>6</number>
+                                </property>
+                                <spacer row="0" column="2">
+                                    <property name="name">
+                                        <cstring>Spacer2</cstring>
+                                    </property>
+                                    <property name="orientation">
+                                        <enum>Horizontal</enum>
+                                    </property>
+                                    <property name="sizeType">
+                                        <enum>Expanding</enum>
+                                    </property>
+                                    <property name="sizeHint">
+                                        <size>
+                                            <width>120</width>
+                                            <height>0</height>
+                                        </size>
+                                    </property>
+                                </spacer>
+                                <spacer row="0" column="0">
+                                    <property name="name">
+                                        <cstring>Spacer1</cstring>
+                                    </property>
+                                    <property name="orientation">
+                                        <enum>Horizontal</enum>
+                                    </property>
+                                    <property name="sizeType">
+                                        <enum>Expanding</enum>
+                                    </property>
+                                    <property name="sizeHint">
+                                        <size>
+                                            <width>120</width>
+                                            <height>0</height>
+                                        </size>
+                                    </property>
+                                </spacer>
+                                <widget class="QPushButton" row="0" column="1">
+                                    <property name="name">
+                                        <cstring>buttonClose</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string>&amp;Close</string>
+                                    </property>
+                                </widget>
+                            </grid>
+                        </widget>
+                    </grid>
+                </widget>
+                <widget class="QButtonGroup" row="0" column="0">
+                    <property name="name">
+                        <cstring>GroupConstructors</cstring>
+                    </property>
+                    <property name="sizePolicy">
+                        <sizepolicy>
+                            <hsizetype>5</hsizetype>
+                            <vsizetype>0</vsizetype>
+                            <horstretch>0</horstretch>
+                            <verstretch>0</verstretch>
+                        </sizepolicy>
+                    </property>
+                    <property name="title">
+                        <string></string>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>11</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <widget class="QLayoutWidget" row="0" column="0">
+                            <property name="name">
+                                <cstring>Layout2</cstring>
+                            </property>
+                            <hbox>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <property name="margin">
+                                    <number>0</number>
+                                </property>
+                                <property name="spacing">
+                                    <number>6</number>
+                                </property>
+                                <widget class="QRadioButton">
+                                    <property name="name">
+                                        <cstring>RadioButton1</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                            </hbox>
+                        </widget>
+                    </grid>
+                </widget>
+                <widget class="QGroupBox" row="1" column="0">
+                    <property name="name">
+                        <cstring>GroupMedium</cstring>
+                    </property>
+                    <property name="sizePolicy">
+                        <sizepolicy>
+                            <hsizetype>7</hsizetype>
+                            <vsizetype>7</vsizetype>
+                            <horstretch>0</horstretch>
+                            <verstretch>0</verstretch>
+                        </sizepolicy>
+                    </property>
+                    <property name="title">
+                        <string></string>
+                    </property>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/KinematicGUI/UIFiles/ui_to_cxx b/src/KinematicGUI/UIFiles/ui_to_cxx
new file mode 100755 (executable)
index 0000000..575739b
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+#uic -o KinematicGUI_3Sel1List_QTD.h KinematicGUI_3Sel1List_QTD.ui
+#uic -o KinematicGUI_3Sel1List_QTD.cxx -impl KinematicGUI_3Sel1List_QTD.h KinematicGUI_3Sel1List_QTD.ui
+
+#uic -o KinematicGUI_3Sel1Spin_QTD.h KinematicGUI_3Sel1Spin_QTD.ui
+#uic -o KinematicGUI_3Sel1Spin_QTD.cxx -impl KinematicGUI_3Sel1Spin_QTD.h KinematicGUI_3Sel1Spin_QTD.ui
+
+#uic -o KinematicGUI_3List3Spin_QTD.h KinematicGUI_3List3Spin_QTD.ui
+#uic -o KinematicGUI_3List3Spin_QTD.cxx -impl KinematicGUI_3List3Spin_QTD.h KinematicGUI_3List3Spin_QTD.ui
+
+#uic -o KinematicGUI_12Spin_QTD.h KinematicGUI_12Spin_QTD.ui
+#uic -o KinematicGUI_12Spin_QTD.cxx -impl KinematicGUI_12Spin_QTD.h KinematicGUI_12Spin_QTD.ui
+
+#uic -o KinematicGUI_2Sel2Spin2Check_QTD.h KinematicGUI_2Sel2Spin2Check_QTD.ui
+#uic -o KinematicGUI_2Sel2Spin2Check_QTD.cxx -impl KinematicGUI_2Sel2Spin2Check_QTD.h KinematicGUI_2Sel2Spin2Check_QTD.ui
+
+uic -o KinematicGUI_Anim_QTD.h KinematicGUI_Anim_QTD.ui
+uic -o KinematicGUI_Anim_QTD.cxx -impl KinematicGUI_Anim_QTD.h KinematicGUI_Anim_QTD.ui
+
+#uic -o KinematicGUI_Skeleton_QTD.h KinematicGUI_Skeleton_QTD.ui
+#uic -o KinematicGUI_Skeleton_QTD.cxx -impl KinematicGUI_Skeleton_QTD.h KinematicGUI_Skeleton_QTD.ui
index 766733aad6cd6e4df2320a78e6a522b84b5bbd89..921628b054eea46f1ad21b2d11f17f6f18440901 100644 (file)
@@ -32,6 +32,6 @@ VPATH=.:@srcdir@
 
 @COMMENCE@
 
-SUBDIRS = OBJECT ARCHIMEDE PARTITION SKETCHER GEOMDS GEOM GEOMClient GEOMFiltersSelection DlgRef GEOMContext GEOMBase DisplayGUI GEOMToolsGUI BasicGUI PrimitiveGUI GenerationGUI EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI RepairGUI MeasureGUI GEOMGUI GEOM_SWIG
+SUBDIRS = OBJECT ARCHIMEDE PARTITION SKETCHER KINEMATIC GEOMDS GEOM GEOMClient GEOMFiltersSelection DlgRef GEOMContext GEOMBase DisplayGUI GEOMToolsGUI BasicGUI PrimitiveGUI GenerationGUI EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI RepairGUI KinematicGUI MeasureGUI GEOMGUI GEOM_SWIG
 
 @MODULE@
index 2b983be0d546cb12a8f949130ee1a2ced1fbe6a3..c4ab29a8ab90a021fc29b0bde2b9acc3f7db7196 100644 (file)
@@ -75,7 +75,7 @@ LIB_MOC = \
                MeasureGUI_WhatisDlg.h \
                MeasureGUI_CheckShapeDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index fe9386d87415806cf8c139715b34af4cca46ca5c..802f1167c8680ab7ba5f89958cd49ec0bdcf3ea1 100644 (file)
@@ -53,7 +53,7 @@ LIB_MOC = \
                OperationGUI_FilletDlg.h \
                OperationGUI_ChamferDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index d7407c810908ddf09d034163775dbf0298d05844..6005cacbd3533c0fe622f1e078b680dcb10f7a31 100644 (file)
@@ -55,7 +55,7 @@ LIB_MOC = \
                PrimitiveGUI_TorusDlg.h \
                PrimitiveGUI_ConeDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 3b4d328f11e1b7743212a9f6dcccafdd347023c2..b920f6cd566723bb8281e27cbaa5f27cbea3322a 100644 (file)
@@ -53,7 +53,7 @@ LIB_MOC = \
                RepairGUI_SuppressFacesDlg.h \
                RepairGUI_SuppressHoleDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
index 3e988eb32831aca57b2f92958018e9b542f142c6..7b8a2758e2caa7eb33195f3cd6753cf6bd42d4b5 100644 (file)
@@ -37,7 +37,7 @@ VPATH=.:@srcdir@:@top_srcdir@/idl
 # Libraries targets
 LIB = libGEOMSketcher.la 
 LIB_SRC = GEOM_Sketcher.cxx
-LIB_CLIENT_IDL = SALOME_Component.idl SALOMEDS.idl SALOME_Exception.idl GEOM_Shape.idl GEOM_Gen.idl
+LIB_CLIENT_IDL = SALOME_Component.idl SALOMEDS.idl SALOME_Exception.idl GEOM_Shape.idl GEOM_Gen.idl GEOM_Kinematic.idl
 
 # header files 
 EXPORT_HEADERS= GEOM_Sketcher.h \
index bf544b5770064f3a0c141bd28a15a7695546a6df..0c3495e544e2efe54dc43f1fcaf56bda0c3f5383 100644 (file)
@@ -45,6 +45,7 @@ LIB_SRC =     TransformationGUI.cxx \
                TransformationGUI_MultiRotationDlg.cxx \
                TransformationGUI_TranslationDlg.cxx \
                TransformationGUI_RotationDlg.cxx \
+               TransformationGUI_PositionDlg.cxx \
                TransformationGUI_MirrorDlg.cxx \
                TransformationGUI_ScaleDlg.cxx
 
@@ -54,10 +55,11 @@ LIB_MOC = \
                TransformationGUI_MultiRotationDlg.h \
                TransformationGUI_TranslationDlg.h \
                TransformationGUI_RotationDlg.h \
+               TransformationGUI_PositionDlg.h \
                TransformationGUI_MirrorDlg.h \
                TransformationGUI_ScaleDlg.h
 
-LIB_CLIENT_IDL = 
+LIB_CLIENT_IDL = GEOM_Kinematic.idl
 
 LIB_SERVER_IDL = 
 
@@ -66,6 +68,6 @@ LIB_SERVER_IDL =
 CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome
 CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome
 
-LDFLAGS += -lGEOMFiltersSelection -lGEOMBase
+LDFLAGS += -lGEOMFiltersSelection -lDisplayGUI
 
 @CONCLUDE@
index 54ea7d019348351a884e5b882e33bc100f9722b2..c19d3f657a73dbaaa65de1ed5a1c1b1cf4664c14 100644 (file)
 using namespace std;
 #include "TransformationGUI.h"
 
+#include "BRepAdaptor_Curve.hxx"
+#include "QAD_RightFrame.h"
+#include "OCCViewer_Viewer3d.h"
 #include "SALOMEGUI_QtCatchCorbaException.hxx"
 
 #include "TransformationGUI_MultiTranslationDlg.h"   // Method MULTI TRANSLATION
 #include "TransformationGUI_MultiRotationDlg.h"      // Method MULTI ROTATION
 #include "TransformationGUI_TranslationDlg.h"        // Method TRANSLATION
 #include "TransformationGUI_RotationDlg.h"           // Method ROTATION
+#include "TransformationGUI_PositionDlg.h"           // Method POSITION
 #include "TransformationGUI_MirrorDlg.h"             // Method MIRROR
 #include "TransformationGUI_ScaleDlg.h"              // Method SCALE
 
@@ -82,22 +86,32 @@ bool TransformationGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
        TransformationGUI_RotationDlg *aDlg = new TransformationGUI_RotationDlg(parent, "", myTransformationGUI, Sel);
        break;
       }
-    case 5023: // MIRROR
-      {        
+    case 5023: // POSITION
+      {
+       Handle(AIS_InteractiveContext) ic;
+       if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
+         OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
+         ic = v3d->getAISContext();
+       }
+       TransformationGUI_PositionDlg *aDlg = new TransformationGUI_PositionDlg(parent, "", myTransformationGUI, Sel, ic);
+       break;
+      }
+    case 5024: // MIRROR
+      {
        TransformationGUI_MirrorDlg *aDlg = new TransformationGUI_MirrorDlg(parent, "", myTransformationGUI, Sel);
        break;
       }
-    case 5024: // SCALE
+    case 5025: // SCALE
       {        
        TransformationGUI_ScaleDlg *aDlg = new TransformationGUI_ScaleDlg(parent, "", myTransformationGUI, Sel );
        break;
       }
-    case 5025: // MULTI TRANSLATION
+    case 5026: // MULTI TRANSLATION
       {        
        TransformationGUI_MultiTranslationDlg *aDlg = new TransformationGUI_MultiTranslationDlg(parent, "", myTransformationGUI, Sel);
        break;
       }
-    case 5026: // MULTI ROTATION
+    case 5027: // MULTI ROTATION
       {        
        TransformationGUI_MultiRotationDlg *aDlg = new TransformationGUI_MultiRotationDlg(parent, "", myTransformationGUI, Sel);
        break;
@@ -148,7 +162,7 @@ void TransformationGUI::MakeRotationAndDisplay(GEOM::GEOM_Shape_ptr Shape, const
     GEOM::GEOM_Shape_var result = myGeom->MakeRotation(Shape, axis, angle);
     if(result->_is_nil()) {
       QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_ABORT"));
-      return ;
+      return;
     }
     result->NameType(Shape->NameType());
     if(myGeomBase->Display(result))
@@ -161,6 +175,48 @@ void TransformationGUI::MakeRotationAndDisplay(GEOM::GEOM_Shape_ptr Shape, const
 }
 
 
+//=======================================================================================
+// function : MakePositionAndDisplay()
+// purpose  :
+//=======================================================================================
+void TransformationGUI::MakePositionAndDisplay(GEOM::GEOM_Shape_ptr ShapePtr1,
+                                              GEOM::GEOM_Shape_ptr ShapePtr2,
+                                              const TopoDS_Shape& Shape1,
+                                              const TopoDS_Shape& Shape2,
+                                              const TopoDS_Shape& SubShape1, 
+                                              const TopoDS_Shape& SubShape2)
+{
+  try {
+    GEOM::GEOM_Shape_var result;
+
+    if(SubShape1.ShapeType() == SubShape2.ShapeType()) {
+      GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID1 = new GEOM::GEOM_Shape::ListOfSubShapeID;
+      GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID2 = new GEOM::GEOM_Shape::ListOfSubShapeID;
+
+      ListOfID1->length(1);
+      ListOfID2->length(1);
+
+      ListOfID1[0] = myGeomBase->GetIndex(SubShape1, Shape1, SubShape1.ShapeType());
+      ListOfID2[0] = myGeomBase->GetIndex(SubShape2, Shape2, SubShape2.ShapeType());
+
+      result = myGeom->MakePosition(ShapePtr1, ShapePtr2, ListOfID1, ListOfID2, SubShape1.ShapeType());
+    }
+
+    if(result->_is_nil()) {
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_ABORT"));
+      return;
+    }
+    result->NameType(ShapePtr1->NameType());
+    if(myGeomBase->Display(result))
+      QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
+  }
+  catch(const SALOME::SALOME_Exception& S_ex) {
+    QtCatchCorbaException(S_ex);
+  }  
+  return;
+}
+
+
 //=====================================================================================
 // function : MakeMirrorAndDisplay()
 // purpose  :
index f8451c60e72a055d8c232ac487030ac901c8ea62..73995005ba43d4dd8170bc6321d534e471e9e831 100644 (file)
@@ -49,6 +49,10 @@ public :
   void MakeTranslationAndDisplay(GEOM::GEOM_Shape_ptr Shape, const gp_Vec V);
   void MakeRotationAndDisplay(GEOM::GEOM_Shape_ptr Shape, const gp_Pnt loc,
                              const gp_Dir dir, const Standard_Real angle);
+  void MakePositionAndDisplay(GEOM::GEOM_Shape_ptr ShapePtr1,
+                             GEOM::GEOM_Shape_ptr ShapePtr2,
+                             const TopoDS_Shape& Shape1, const TopoDS_Shape& Shape2,
+                             const TopoDS_Shape& SubShape1, const TopoDS_Shape& SubShape2);
   void MakeMirrorAndDisplay(GEOM::GEOM_Shape_ptr Shape1, GEOM::GEOM_Shape_ptr Shape2);
   void MakeScaleAndDisplay(GEOM::GEOM_Shape_ptr Shape, const gp_Pnt centralPoint,
                           const Standard_Real factor);
diff --git a/src/TransformationGUI/TransformationGUI_PositionDlg.cxx b/src/TransformationGUI/TransformationGUI_PositionDlg.cxx
new file mode 100644 (file)
index 0000000..fa6f48c
--- /dev/null
@@ -0,0 +1,419 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : TransformationGUI_PositionDlg.cxx
+//  Author : Lucien PIGNOLONI
+//  Module : GEOM
+//  $Header$
+
+using namespace std;
+#include "TransformationGUI_PositionDlg.h"
+
+#include "DisplayGUI.h"
+
+#include <AIS_InteractiveContext.hxx>
+
+//=================================================================================
+// class    : TransformationGUI_PositionDlg()
+// purpose  : Constructs a TransformationGUI_PositionDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+TransformationGUI_PositionDlg::TransformationGUI_PositionDlg(QWidget* parent,  const char* name, TransformationGUI* theTransformationGUI, SALOME_Selection* Sel, Handle(AIS_InteractiveContext) ic, bool modal, WFlags fl)
+  :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_DLG_POS_POINT")));
+  QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_DLG_POS_VECT")));
+  QPixmap image2(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_DLG_POS_FACE")));
+  QPixmap image3(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_SELECT")));
+
+  setCaption(tr("GEOM_POSITION_TITLE"));
+
+  /***************************************************************/
+  GroupConstructors->setTitle(tr("GEOM_POSITION"));
+  RadioButton1->setPixmap(image0);
+  RadioButton2->setPixmap(image1);
+  RadioButton3->setPixmap(image2);
+
+  Group1 = new DlgRef_2Sel_QTD(this, "Group1");
+  Group1->GroupBox1->setTitle(tr("GEOM_POS_VERTEX"));
+  Group1->TextLabel1->setText(tr("GEOM_OBJECT_I").arg("1"));
+  Group1->TextLabel2->setText(tr("GEOM_OBJECT_I").arg("2"));
+  Group1->PushButton1->setPixmap(image3);
+  Group1->PushButton2->setPixmap(image3);
+
+  Layout1->addWidget(Group1, 1, 0);
+  /***************************************************************/
+
+  /* Initialisations */
+  myTransformationGUI = theTransformationGUI;
+  Init(ic);
+}
+
+
+//=================================================================================
+// function : ~TransformationGUI_PositionDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+TransformationGUI_PositionDlg::~TransformationGUI_PositionDlg()
+{
+  // no need to delete child widgets, Qt does it all for us
+}
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::Init(Handle (AIS_InteractiveContext) ic)
+{
+  /* init variables */
+  myConstructorId = 0;
+  myShapeType = 7;
+  myEditCurrentArgument = Group1->LineEdit1;
+
+  myOkBase1 = myOkBase2 = myOkObj1 = myOkObj2 = false;
+  myIC = ic;
+  myLocalContextId = -1;
+  myUseLocalContext = false;
+
+  /* signals and slots connections */
+  connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
+  connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
+  connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
+
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+  connect(GroupConstructors, SIGNAL(clicked(int)), this, SLOT(ConstructorsClicked(int)));
+
+  connect(Group1->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(Group1->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+
+  connect(Group1->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(Group1->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())) ;
+
+  /* displays Dialog */
+  Group1->show();
+  this->show();
+
+  return;
+}
+
+
+//=================================================================================
+// function : ConstructorsClicked()
+// purpose  : Radio button management
+//=================================================================================
+void TransformationGUI_PositionDlg::ConstructorsClicked(int constructorId)
+{
+  resize(0, 0);
+  myConstructorId = constructorId;
+  disconnect(mySelection, 0, this, 0);
+  myOkBase1 = myOkBase2 = myOkObj1 = myOkObj2 = false;
+  myEditCurrentArgument = Group1->LineEdit1;
+  Group1->LineEdit1->setText("");
+  Group1->LineEdit2->setText("");
+
+  if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC && myUseLocalContext) {
+    myIC->CloseLocalContext(myLocalContextId);
+    DisplayGUI* myDisplayGUI = new DisplayGUI();
+    myDisplayGUI->OnDisplayAll(true);
+    myUseLocalContext = false;
+  }
+
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+
+  if(constructorId == 0) {
+    Group1->GroupBox1->setTitle(tr("GEOM_POS_VERTEX"));
+    myShapeType = 7; //Vertex
+  }
+  else if(constructorId == 1) {
+    Group1->GroupBox1->setTitle(tr("GEOM_POS_EDGE"));
+    myShapeType = 6; //Edge
+  }
+  else if(constructorId == 2) {
+    Group1->GroupBox1->setTitle(tr("GEOM_POS_FACE"));
+    myShapeType = 4; //Face
+  }
+
+ return;
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::ClickOnOk()
+{
+  this->ClickOnApply();
+  this->ClickOnCancel();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::ClickOnApply()
+{
+  QAD_Application::getDesktop()->putInfo(tr(""));
+
+  if(myEditCurrentArgument == Group1->LineEdit2 && myUseLocalContext) {
+    if(myOkBase2) {
+      myIC->InitSelected();
+      if(myIC->NbSelected() == 1) {
+       myIC->InitSelected();
+       myIC->MoreSelected();
+       myObj2 = myIC->SelectedShape();
+       myOkObj2 = true;
+      }
+    }
+  }
+  else if(myEditCurrentArgument == Group1->LineEdit1 && myUseLocalContext) {
+    if(myOkBase1) {
+      myIC->InitSelected();
+      if(myIC->NbSelected() == 1) {
+       myIC->InitSelected();
+       myIC->MoreSelected();
+       myObj1 = myIC->SelectedShape();
+       myOkObj1 = true;
+      }
+    }
+  }
+
+  if(myOkBase1 && myOkBase2 && myOkObj1 && myOkObj2)
+    myTransformationGUI->MakePositionAndDisplay(myGeomShape1, myGeomShape2, myShape1, myShape2, myObj1, myObj2);
+
+  this->ResetStateOfDialog();
+  return;
+}
+
+
+//=================================================================================
+// function : ClickOnCancel()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::ClickOnCancel()
+{
+  this->ResetStateOfDialog();
+  GEOMBase_Skeleton::ClickOnCancel();
+  return;
+}
+
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection as changed or other case
+//=================================================================================
+void TransformationGUI_PositionDlg::SelectionIntoArgument()
+{
+  if(myEditCurrentArgument == Group1->LineEdit1 && myUseLocalContext) {
+    if(myOkBase2) {
+      myIC->InitSelected();
+      if(myIC->NbSelected() == 1) {
+       myIC->InitSelected();
+       myIC->MoreSelected();
+       myObj2 = myIC->SelectedShape();
+       myOkObj2 = true;
+      }
+    }
+  }
+  else if(myEditCurrentArgument == Group1->LineEdit2 && myUseLocalContext) {
+    if(myOkBase1) {
+      myIC->InitSelected();
+      if(myIC->NbSelected() == 1) {
+       myIC->InitSelected();
+       myIC->MoreSelected();
+       myObj1 = myIC->SelectedShape();
+       myOkObj1 = true;
+      }
+    }
+  }
+
+  this->ResetStateOfDialog();
+  myEditCurrentArgument->setText("");
+  QString aString = ""; /* name of selection */
+  
+  int nbSel = myGeomBase->GetNameOfSelectedIObjects(mySelection, aString);
+  if(nbSel != 1)
+    return;
+  
+  // nbSel == 1
+  TopoDS_Shape S; 
+  Standard_Boolean testResult;
+  Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
+  if(!myGeomBase->GetTopoFromSelection(mySelection, S))
+    return;
+
+  if(myConstructorId == 1) {
+    if(S.ShapeType() > TopAbs_EDGE)
+      return;
+  }
+  else if(myConstructorId == 2) {
+    if(S.ShapeType() > TopAbs_FACE)
+      return;
+  }
+
+  if(myEditCurrentArgument == Group1->LineEdit1) {
+    myShape1 = S;
+    myGeomShape1 = myGeomBase->ConvertIOinGEOMShape(IO, testResult);
+    if(!testResult)
+      return;
+    myEditCurrentArgument->setText(aString);
+    myOkBase1 = true;
+  }
+  else if(myEditCurrentArgument == Group1->LineEdit2) {
+    myShape2 = S;
+    myGeomShape2 = myGeomBase->ConvertIOinGEOMShape(IO, testResult);
+    if(!testResult)
+      return;
+    myEditCurrentArgument->setText(aString);
+    myOkBase2 = true;
+  }
+
+  /* local context is defined into the method */
+  DisplayGUI* myDisplayGUI = new DisplayGUI();
+  myDisplayGUI->PrepareSubShapeSelection(myShapeType, myLocalContextId);  
+  myUseLocalContext = true;
+
+  return; 
+}
+
+
+//=================================================================================
+// function : SetEditCurrentArgument()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::SetEditCurrentArgument()
+{
+  QPushButton* send = (QPushButton*)sender();
+
+  if(send == Group1->PushButton1) {
+    Group1->LineEdit1->setFocus();
+    myEditCurrentArgument = Group1->LineEdit1;
+    myOkBase1 = false;
+    myOkObj1 = false;
+  }
+  else if(send == Group1->PushButton2) {
+    Group1->LineEdit2->setFocus();
+    myEditCurrentArgument = Group1->LineEdit2;
+    myOkBase2 = false;
+    myOkObj2 = false;
+  }
+  mySelection->ClearIObjects();
+  this->SelectionIntoArgument();
+
+  return;
+}
+
+
+//=================================================================================
+// function : LineEditReturnPressed()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::LineEditReturnPressed()
+{  
+  QLineEdit* send = (QLineEdit*)sender();
+  if(send == Group1->LineEdit1)
+    myEditCurrentArgument = Group1->LineEdit1;
+  else if (send == Group1->LineEdit2)
+    myEditCurrentArgument = Group1->LineEdit2;
+  else
+    return;
+
+  GEOMBase_Skeleton::LineEditReturnPressed();
+  return;
+}
+
+
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::DeactivateActiveDialog()
+{
+  this->ResetStateOfDialog();
+  GEOMBase_Skeleton::DeactivateActiveDialog();
+  return;
+}
+
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+  connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  Group1->LineEdit1->setFocus();
+  myEditCurrentArgument = Group1->LineEdit1;
+  return;
+}
+
+
+//=================================================================================
+// function : enterEvent()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::enterEvent(QEvent* e)
+{
+  if (GroupConstructors->isEnabled())
+    return;
+  this->ActivateThisDialog();
+  return;
+}
+
+
+//=================================================================================
+// function : closeEvent()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::closeEvent(QCloseEvent* e)
+{ 
+  /* same than click on cancel button */
+  this->ClickOnCancel();
+  return;
+}
+
+
+//=================================================================================
+// function : ResetStateOfDialog()
+// purpose  :
+//=================================================================================
+void TransformationGUI_PositionDlg::ResetStateOfDialog()
+{
+  /* Close its local contact if opened */
+  if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC && myUseLocalContext) {
+    myIC->CloseLocalContext(myLocalContextId);
+    myUseLocalContext = false;
+    DisplayGUI* myDisplayGUI = new DisplayGUI();
+    myDisplayGUI->OnDisplayAll();
+  }
+  return;
+}
diff --git a/src/TransformationGUI/TransformationGUI_PositionDlg.h b/src/TransformationGUI/TransformationGUI_PositionDlg.h
new file mode 100644 (file)
index 0000000..5fca4a6
--- /dev/null
@@ -0,0 +1,91 @@
+//  GEOM GEOMGUI : GUI for Geometry component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : TransformationGUI_PositionDlg.h
+//  Author : Lucien PIGNOLONI
+//  Module : GEOM
+//  $Header$
+
+#ifndef DIALOGBOX_POSITION_H
+#define DIALOGBOX_POSITION_H
+
+#include "GEOMBase_Skeleton.h"
+#include "DlgRef_2Sel_QTD.h"
+
+#include "TransformationGUI.h"
+
+//=================================================================================
+// class    : TransformationGUI_PositionDlg
+// purpose  :
+//=================================================================================
+class TransformationGUI_PositionDlg : public GEOMBase_Skeleton
+{ 
+    Q_OBJECT
+
+public:
+    TransformationGUI_PositionDlg(QWidget* parent = 0, const char* name = 0, TransformationGUI* theTransformationGUI = 0, SALOME_Selection* Sel = 0, Handle(AIS_InteractiveContext) ic = 0, bool modal = FALSE, WFlags fl = 0);
+    ~TransformationGUI_PositionDlg();
+
+private :
+    void Init(Handle(AIS_InteractiveContext) ic);
+    void enterEvent(QEvent* e);
+    void closeEvent(QCloseEvent* e);
+    void ResetStateOfDialog();
+
+    TransformationGUI* myTransformationGUI;
+
+    int myConstructorId;   /* Current constructor id = radio button id */
+
+    /* Interactive and local context management see also : bool myUseLocalContext() */
+    Handle(AIS_InteractiveContext) myIC;   /* Interactive context */ 
+    Standard_Integer myLocalContextId;   /* identify a local context used by this method */
+    bool myUseLocalContext;   /* true when this method as opened a local context  */
+
+    TopoDS_Shape myShape1;
+    TopoDS_Shape myShape2;
+    TopoDS_Shape myObj1;
+    TopoDS_Shape myObj2;
+    int myShapeType;
+    GEOM::GEOM_Shape_var myGeomShape1;
+    GEOM::GEOM_Shape_var myGeomShape2;
+    bool myOkBase1;
+    bool myOkBase2;
+    bool myOkObj1;
+    bool myOkObj2;
+
+    DlgRef_2Sel_QTD* Group1;
+
+private slots:
+    void ClickOnOk();
+    void ClickOnApply();
+    void ClickOnCancel();
+    void ActivateThisDialog();
+    void DeactivateActiveDialog();
+    void LineEditReturnPressed();
+    void SelectionIntoArgument();
+    void SetEditCurrentArgument();
+    void ConstructorsClicked(int constructorId);
+
+};
+
+#endif // DIALOGBOX_POSITION_H