From 808810c38814cfbb0e7a6951540ed5dc3b16ef8d Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 15 May 2014 12:25:55 +0400 Subject: [PATCH 001/118] 1st version of algorithm of collecting dependencies. --- src/GEOMToolsGUI/GEOMToolsGUI.cxx | 141 +++++++++++++++++++++++++++++- src/GEOMToolsGUI/GEOMToolsGUI.h | 14 +++ 2 files changed, 154 insertions(+), 1 deletion(-) diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index daf888e2d..ca6f6d3f2 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -29,7 +29,6 @@ #include #include "GeometryGUI_Operations.h" -#include #include #include @@ -1045,6 +1044,146 @@ void GEOMToolsGUI::deactivate() } } +//======================================================================= +// function : +// purpose : +//======================================================================= +std::string GEOMToolsGUI::getDependencyTree( QStringList rootObjectIORs ) +{ + // fill in the tree structure + DependencyTree tree; + foreach( QString ior, rootObjectIORs ) { + GEOM::GEOM_Object_ptr anObj = GEOMBase::GetObjectFromIOR( ior ); + QList upLevelList; + getUpwardDependency( anObj, upLevelList ); + QList downLevelList; + getDownwardDependency( anObj, downLevelList ); + tree.insert( ior, QPair, QList >( upLevelList, downLevelList ) ); + } + // translation the tree into string + std::string treeStr; + DependencyTree::iterator i; + for ( i = tree.begin(); i != tree.end(); ++i ) { + treeStr.append( i.key().toUtf8().constData() ); + treeStr.append( "-" ); + QList upLevelList = i.value().first; + treeStr.append( "upward" ); + treeStr.append( "{" ); + foreach( NodeLevel level, upLevelList ) { + NodeLevel::iterator upIter; + for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { + treeStr.append( upIter.key().toUtf8().constData() ); + treeStr.append( "_" ); + treeStr.append( QStringList(upIter.value()).join("_").toUtf8().constData() ); + treeStr.append( upIter+1 == level.end() ? ";" : "," ); + } + } + treeStr.append( "}" ); + QList downLevelList = i.value().second; + treeStr.append( "downward" ); + treeStr.append( "{" ); + foreach( NodeLevel level, downLevelList ) { + NodeLevel::iterator downIter; + for ( downIter = level.begin(); downIter != level.end(); ++downIter ) { + treeStr.append( downIter.key().toUtf8().constData() ); + treeStr.append( "_" ); + treeStr.append( QStringList(downIter.value()).join("_").toUtf8().constData() ); + treeStr.append( downIter+1 == level.end() ? ";" : "," ); + } + } + treeStr.append("}"); + } + return treeStr; +} + +//======================================================================= +// function : +// purpose : +//======================================================================= +void GEOMToolsGUI::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, + QList &upLevelList, + int level ) +{ + QString aGboIOR = GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(gbo)); + GEOM::ListOfGBO_var depList = gbo->GetDependency(); + for( int j = 0; j < depList->length(); j++ ) { + if ( level > 0 ) { + QStringList anIORs; + NodeLevel aLevelMap; + if ( level-1 >= upLevelList.size() ) { + upLevelList.append( aLevelMap ); + } else { + aLevelMap = upLevelList.at(level-1); + if ( aLevelMap.contains( aGboIOR ) ) + anIORs = aLevelMap.value( aGboIOR ); + } + anIORs << GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(depList[j])); + aLevelMap.insert( aGboIOR, anIORs ); + } + getUpwardDependency(depList[j], upLevelList, level++); + } +} + +//======================================================================= +// function : +// purpose : +//======================================================================= +void GEOMToolsGUI::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, + QList &downLevelList, + int level ) +{ + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) + return; + + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if ( !appStudy ) + return; + + _PTR(Study) aStudy = appStudy->studyDS(); + + // get GEOM component + CORBA::String_var geomIOR = app->orb()->object_to_string( GeometryGUI::GetGeomGen() ); + QString geomComp = getParentComponent( aStudy->FindObjectIOR( geomIOR.in() ) ); + + _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() ); + if ( !comp ) + return; + + _PTR(ChildIterator) it ( aStudy->NewChildIterator( comp ) ); + for ( it->InitEx( true ); it->More(); it->Next() ) { + _PTR(SObject) child( it->Value() ); + CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child ); + GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); + if( CORBA::is_nil( geomObj ) ) + continue; + + GEOM::ListOfGBO_var depList = geomObj->GetDependency(); + if( depList->length() == 0 ) + continue; + QString aGoIOR = GEOMBase::GetIORFromObject( geomObj ); + + for( int i = 0; i < depList->length(); i++ ) { + if ( depList[i]->IsSame( gbo ) ) { + QStringList anIORs; + NodeLevel aLevelMap; + if ( level >= downLevelList.size() ) { + aLevelMap = NodeLevel(); + downLevelList.append( aLevelMap ); + } else { + aLevelMap = downLevelList.at(level); + if ( aLevelMap.contains( aGoIOR ) ) + anIORs = aLevelMap.value( aGoIOR ); + } + anIORs << GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(depList[i])); + aLevelMap.insert( aGoIOR, anIORs ); + } + } + getDownwardDependency(geomObj, downLevelList, level++); + } +} + //===================================================================================== // EXPORTED METHODS //===================================================================================== diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 683fffc7c..4d27b0656 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -30,6 +30,7 @@ #include "GEOM_ToolsGUI.hxx" #include +#include #include class GEOM_Displayer; @@ -42,6 +43,11 @@ class Handle_SALOME_InteractiveObject; class Handle_AIS_InteractiveContext; #include +#include +#include + +typedef QMap< QString, QStringList > NodeLevel; +typedef QMap< QString, QPair, QList > > DependencyTree; //================================================================================= // class : GEOMToolsGUI @@ -60,6 +66,14 @@ public: enum ActionType { SHOWDLG, INCR, DECR }; + std::string getDependencyTree( QStringList rootObjectIORs ); + void getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, + QList &upLevelList, + int level = 0 ); + void getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, + QList &downLevelList, + int level = 0 ); + private: // Import and export topology methods bool Import(); From 6f0049749dcb25a4e92c1f1b8d4e2eb0b14f2ec2 Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 16 May 2014 16:49:16 +0400 Subject: [PATCH 002/118] Stub of algorithm in new place. --- idl/GEOM_Gen.idl | 13 +++++++++++++ src/GEOM_I/GEOM_Gen_i.cc | 8 ++++++++ src/GEOM_I/GEOM_Gen_i.hh | 2 ++ 3 files changed, 23 insertions(+) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index ecf0308db..5ab5f679a 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -5089,6 +5089,19 @@ module GEOM void Move( in object_list what, in SALOMEDS::SObject where, in long row ); + + /*! + * \brief Get dependencies of the given object from other objects in study + * \param list of IORs + * \return texture byte array + * Example of using: + * SALOMEDS::TMPFile_var SeqFile = + * myGeometryGUI->GetGeomGen()->GetDependencyTree( aListOfIORs ); + * char* buf; + * buf = (char*) &SeqFile[0]; + */ + SALOMEDS::TMPFile GetDependencyTree(in string_array strValues); + }; }; diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 4732c1f5a..8ef75a6f0 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3039,6 +3039,14 @@ Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId) return aResult._retn(); } +//======================================================================= +// function : +// purpose : +//======================================================================= +SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree(const GEOM::string_array&) { + +} + //===================================================================================== // EXPORTED METHODS //===================================================================================== diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh index 81771124b..0a4f42b8f 100644 --- a/src/GEOM_I/GEOM_Gen_i.hh +++ b/src/GEOM_I/GEOM_Gen_i.hh @@ -197,6 +197,8 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi CORBA::Boolean theInheritFirstArg, CORBA::Boolean theAddPrefix); + SALOMEDS::TMPFile* GetDependencyTree(const GEOM::string_array&); + //-----------------------------------------------------------------------// // Transaction methods // //-----------------------------------------------------------------------// From fa14a07690f382aa725c3b494d903a08ead4df52 Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 21 May 2014 13:24:03 +0400 Subject: [PATCH 003/118] Algorithm of dependencies definition was updated and replaced. Auxiliry convertation functions were added. --- idl/GEOM_Gen.idl | 5 +- src/GEOMToolsGUI/GEOMToolsGUI.cxx | 141 +-------- src/GEOMToolsGUI/GEOMToolsGUI.h | 14 - src/GEOMUtils/GEOMUtils.cxx | 494 +++++++++++++++++++----------- src/GEOMUtils/GEOMUtils.hxx | 55 ++-- src/GEOM_I/CMakeLists.txt | 1 + src/GEOM_I/GEOM_Gen_i.cc | 101 +++++- src/GEOM_I/GEOM_Gen_i.hh | 14 +- 8 files changed, 464 insertions(+), 361 deletions(-) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 5ab5f679a..01187280d 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -5096,11 +5096,12 @@ module GEOM * \return texture byte array * Example of using: * SALOMEDS::TMPFile_var SeqFile = - * myGeometryGUI->GetGeomGen()->GetDependencyTree( aListOfIORs ); + * myGeometryGUI->GetGeomGen()->GetDependencyTree( aStudy, aListOfIORs ); * char* buf; * buf = (char*) &SeqFile[0]; */ - SALOMEDS::TMPFile GetDependencyTree(in string_array strValues); + SALOMEDS::TMPFile GetDependencyTree(in SALOMEDS::Study theStudy, + in string_array strValues); }; }; diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index ca6f6d3f2..daf888e2d 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -29,6 +29,7 @@ #include #include "GeometryGUI_Operations.h" +#include #include #include @@ -1044,146 +1045,6 @@ void GEOMToolsGUI::deactivate() } } -//======================================================================= -// function : -// purpose : -//======================================================================= -std::string GEOMToolsGUI::getDependencyTree( QStringList rootObjectIORs ) -{ - // fill in the tree structure - DependencyTree tree; - foreach( QString ior, rootObjectIORs ) { - GEOM::GEOM_Object_ptr anObj = GEOMBase::GetObjectFromIOR( ior ); - QList upLevelList; - getUpwardDependency( anObj, upLevelList ); - QList downLevelList; - getDownwardDependency( anObj, downLevelList ); - tree.insert( ior, QPair, QList >( upLevelList, downLevelList ) ); - } - // translation the tree into string - std::string treeStr; - DependencyTree::iterator i; - for ( i = tree.begin(); i != tree.end(); ++i ) { - treeStr.append( i.key().toUtf8().constData() ); - treeStr.append( "-" ); - QList upLevelList = i.value().first; - treeStr.append( "upward" ); - treeStr.append( "{" ); - foreach( NodeLevel level, upLevelList ) { - NodeLevel::iterator upIter; - for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { - treeStr.append( upIter.key().toUtf8().constData() ); - treeStr.append( "_" ); - treeStr.append( QStringList(upIter.value()).join("_").toUtf8().constData() ); - treeStr.append( upIter+1 == level.end() ? ";" : "," ); - } - } - treeStr.append( "}" ); - QList downLevelList = i.value().second; - treeStr.append( "downward" ); - treeStr.append( "{" ); - foreach( NodeLevel level, downLevelList ) { - NodeLevel::iterator downIter; - for ( downIter = level.begin(); downIter != level.end(); ++downIter ) { - treeStr.append( downIter.key().toUtf8().constData() ); - treeStr.append( "_" ); - treeStr.append( QStringList(downIter.value()).join("_").toUtf8().constData() ); - treeStr.append( downIter+1 == level.end() ? ";" : "," ); - } - } - treeStr.append("}"); - } - return treeStr; -} - -//======================================================================= -// function : -// purpose : -//======================================================================= -void GEOMToolsGUI::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, - QList &upLevelList, - int level ) -{ - QString aGboIOR = GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(gbo)); - GEOM::ListOfGBO_var depList = gbo->GetDependency(); - for( int j = 0; j < depList->length(); j++ ) { - if ( level > 0 ) { - QStringList anIORs; - NodeLevel aLevelMap; - if ( level-1 >= upLevelList.size() ) { - upLevelList.append( aLevelMap ); - } else { - aLevelMap = upLevelList.at(level-1); - if ( aLevelMap.contains( aGboIOR ) ) - anIORs = aLevelMap.value( aGboIOR ); - } - anIORs << GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(depList[j])); - aLevelMap.insert( aGboIOR, anIORs ); - } - getUpwardDependency(depList[j], upLevelList, level++); - } -} - -//======================================================================= -// function : -// purpose : -//======================================================================= -void GEOMToolsGUI::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, - QList &downLevelList, - int level ) -{ - SalomeApp_Application* app = - dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if ( !app ) - return; - - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - if ( !appStudy ) - return; - - _PTR(Study) aStudy = appStudy->studyDS(); - - // get GEOM component - CORBA::String_var geomIOR = app->orb()->object_to_string( GeometryGUI::GetGeomGen() ); - QString geomComp = getParentComponent( aStudy->FindObjectIOR( geomIOR.in() ) ); - - _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() ); - if ( !comp ) - return; - - _PTR(ChildIterator) it ( aStudy->NewChildIterator( comp ) ); - for ( it->InitEx( true ); it->More(); it->Next() ) { - _PTR(SObject) child( it->Value() ); - CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child ); - GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); - if( CORBA::is_nil( geomObj ) ) - continue; - - GEOM::ListOfGBO_var depList = geomObj->GetDependency(); - if( depList->length() == 0 ) - continue; - QString aGoIOR = GEOMBase::GetIORFromObject( geomObj ); - - for( int i = 0; i < depList->length(); i++ ) { - if ( depList[i]->IsSame( gbo ) ) { - QStringList anIORs; - NodeLevel aLevelMap; - if ( level >= downLevelList.size() ) { - aLevelMap = NodeLevel(); - downLevelList.append( aLevelMap ); - } else { - aLevelMap = downLevelList.at(level); - if ( aLevelMap.contains( aGoIOR ) ) - anIORs = aLevelMap.value( aGoIOR ); - } - anIORs << GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(depList[i])); - aLevelMap.insert( aGoIOR, anIORs ); - } - } - getDownwardDependency(geomObj, downLevelList, level++); - } -} - //===================================================================================== // EXPORTED METHODS //===================================================================================== diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 4d27b0656..683fffc7c 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -30,7 +30,6 @@ #include "GEOM_ToolsGUI.hxx" #include -#include #include class GEOM_Displayer; @@ -43,11 +42,6 @@ class Handle_SALOME_InteractiveObject; class Handle_AIS_InteractiveContext; #include -#include -#include - -typedef QMap< QString, QStringList > NodeLevel; -typedef QMap< QString, QPair, QList > > DependencyTree; //================================================================================= // class : GEOMToolsGUI @@ -66,14 +60,6 @@ public: enum ActionType { SHOWDLG, INCR, DECR }; - std::string getDependencyTree( QStringList rootObjectIORs ); - void getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, - QList &upLevelList, - int level = 0 ); - void getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, - QList &downLevelList, - int level = 0 ); - private: // Import and export topology methods bool Import(); diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx index 468a7f883..95aca3a39 100644 --- a/src/GEOMUtils/GEOMUtils.cxx +++ b/src/GEOMUtils/GEOMUtils.cxx @@ -87,6 +87,7 @@ #include #include +#include #include #include @@ -94,11 +95,13 @@ #define STD_SORT_ALGO 1 +namespace GEOMUtils { + //======================================================================= //function : GetPosition //purpose : //======================================================================= -gp_Ax3 GEOMUtils::GetPosition (const TopoDS_Shape& theShape) +gp_Ax3 GetPosition (const TopoDS_Shape& theShape) { gp_Ax3 aResult; @@ -158,7 +161,7 @@ gp_Ax3 GEOMUtils::GetPosition (const TopoDS_Shape& theShape) //function : GetVector //purpose : //======================================================================= -gp_Vec GEOMUtils::GetVector (const TopoDS_Shape& theShape, +gp_Vec GetVector (const TopoDS_Shape& theShape, Standard_Boolean doConsiderOrientation) { if (theShape.IsNull()) @@ -227,7 +230,7 @@ std::pair ShapeToDouble (const TopoDS_Shape& S, bool isOldSortin //function : CompareShapes::operator() //purpose : used by std::sort(), called from SortShapes() //======================================================================= -bool GEOMUtils::CompareShapes::operator() (const TopoDS_Shape& theShape1, +bool CompareShapes::operator() (const TopoDS_Shape& theShape1, const TopoDS_Shape& theShape2) { if (!myMap.IsBound(theShape1)) { @@ -287,7 +290,7 @@ bool GEOMUtils::CompareShapes::operator() (const TopoDS_Shape& theShape1, //function : SortShapes //purpose : //======================================================================= -void GEOMUtils::SortShapes (TopTools_ListOfShape& SL, +void SortShapes (TopTools_ListOfShape& SL, const Standard_Boolean isOldSorting) { #ifdef STD_SORT_ALGO @@ -425,7 +428,7 @@ void GEOMUtils::SortShapes (TopTools_ListOfShape& SL, //function : CompsolidToCompound //purpose : //======================================================================= -TopoDS_Shape GEOMUtils::CompsolidToCompound (const TopoDS_Shape& theCompsolid) +TopoDS_Shape CompsolidToCompound (const TopoDS_Shape& theCompsolid) { if (theCompsolid.ShapeType() != TopAbs_COMPSOLID) { return theCompsolid; @@ -452,7 +455,7 @@ TopoDS_Shape GEOMUtils::CompsolidToCompound (const TopoDS_Shape& theCompsolid) //function : AddSimpleShapes //purpose : //======================================================================= -void GEOMUtils::AddSimpleShapes (const TopoDS_Shape& theShape, TopTools_ListOfShape& theList) +void AddSimpleShapes (const TopoDS_Shape& theShape, TopTools_ListOfShape& theList) { if (theShape.ShapeType() != TopAbs_COMPOUND && theShape.ShapeType() != TopAbs_COMPSOLID) { @@ -480,7 +483,7 @@ void GEOMUtils::AddSimpleShapes (const TopoDS_Shape& theShape, TopTools_ListOfSh //function : CheckTriangulation //purpose : //======================================================================= -bool GEOMUtils::CheckTriangulation (const TopoDS_Shape& aShape) +bool CheckTriangulation (const TopoDS_Shape& aShape) { bool isTriangulation = true; @@ -530,7 +533,7 @@ bool GEOMUtils::CheckTriangulation (const TopoDS_Shape& aShape) //function : GetTypeOfSimplePart //purpose : //======================================================================= -TopAbs_ShapeEnum GEOMUtils::GetTypeOfSimplePart (const TopoDS_Shape& theShape) +TopAbs_ShapeEnum GetTypeOfSimplePart (const TopoDS_Shape& theShape) { TopAbs_ShapeEnum aType = theShape.ShapeType(); if (aType == TopAbs_VERTEX) return TopAbs_VERTEX; @@ -551,7 +554,7 @@ TopAbs_ShapeEnum GEOMUtils::GetTypeOfSimplePart (const TopoDS_Shape& theShape) //function : GetEdgeNearPoint //purpose : //======================================================================= -TopoDS_Shape GEOMUtils::GetEdgeNearPoint (const TopoDS_Shape& theShape, +TopoDS_Shape GetEdgeNearPoint (const TopoDS_Shape& theShape, const TopoDS_Vertex& thePoint) { TopoDS_Shape aResult; @@ -619,7 +622,7 @@ TopoDS_Shape GEOMUtils::GetEdgeNearPoint (const TopoDS_Shape& theShape, //function : PreciseBoundingBox //purpose : //======================================================================= -Standard_Boolean GEOMUtils::PreciseBoundingBox +Standard_Boolean PreciseBoundingBox (const TopoDS_Shape &theShape, Bnd_Box &theBox) { Standard_Real aBound[6]; @@ -665,7 +668,7 @@ Standard_Boolean GEOMUtils::PreciseBoundingBox // Get minimal distance between planar face and shape. Standard_Real aMinDist = - GEOMUtils::GetMinDistance(aFace, theShape, aPMin[0], aPMin[1]); + GetMinDistance(aFace, theShape, aPMin[0], aPMin[1]); if (aMinDist < 0.) { return Standard_False; @@ -681,173 +684,20 @@ Standard_Boolean GEOMUtils::PreciseBoundingBox return Standard_True; } -//======================================================================= -//function : GetMinDistanceSingular -//purpose : -//======================================================================= -double GEOMUtils::GetMinDistanceSingular(const TopoDS_Shape& aSh1, - const TopoDS_Shape& aSh2, - gp_Pnt& Ptmp1, gp_Pnt& Ptmp2) -{ - TopoDS_Shape tmpSh1; - TopoDS_Shape tmpSh2; - Standard_Real AddDist1 = 0.; - Standard_Real AddDist2 = 0.; - Standard_Boolean IsChange1 = GEOMUtils::ModifyShape(aSh1, tmpSh1, AddDist1); - Standard_Boolean IsChange2 = GEOMUtils::ModifyShape(aSh2, tmpSh2, AddDist2); - - if( !IsChange1 && !IsChange2 ) - return -2.0; - - BRepExtrema_DistShapeShape dst(tmpSh1,tmpSh2); - if (dst.IsDone()) { - double MinDist = 1.e9; - gp_Pnt PMin1, PMin2, P1, P2; - for (int i = 1; i <= dst.NbSolution(); i++) { - P1 = dst.PointOnShape1(i); - P2 = dst.PointOnShape2(i); - Standard_Real Dist = P1.Distance(P2); - if (MinDist > Dist) { - MinDist = Dist; - PMin1 = P1; - PMin2 = P2; - } - } - if(MinDist<1.e-7) { - Ptmp1 = PMin1; - Ptmp2 = PMin2; - } - else { - gp_Dir aDir(gp_Vec(PMin1,PMin2)); - if( MinDist > (AddDist1+AddDist2) ) { - Ptmp1 = gp_Pnt( PMin1.X() + aDir.X()*AddDist1, - PMin1.Y() + aDir.Y()*AddDist1, - PMin1.Z() + aDir.Z()*AddDist1 ); - Ptmp2 = gp_Pnt( PMin2.X() - aDir.X()*AddDist2, - PMin2.Y() - aDir.Y()*AddDist2, - PMin2.Z() - aDir.Z()*AddDist2 ); - return (MinDist - AddDist1 - AddDist2); - } - else { - if( AddDist1 > 0 ) { - Ptmp1 = gp_Pnt( PMin1.X() + aDir.X()*AddDist1, - PMin1.Y() + aDir.Y()*AddDist1, - PMin1.Z() + aDir.Z()*AddDist1 ); - Ptmp2 = Ptmp1; - } - else { - Ptmp2 = gp_Pnt( PMin2.X() - aDir.X()*AddDist2, - PMin2.Y() - aDir.Y()*AddDist2, - PMin2.Z() - aDir.Z()*AddDist2 ); - Ptmp1 = Ptmp2; - } - } - } - double res = MinDist - AddDist1 - AddDist2; - if(res<0.) res = 0.0; - return res; - } - return -2.0; -} - -//======================================================================= -//function : GetMinDistance -//purpose : -//======================================================================= -Standard_Real GEOMUtils::GetMinDistance - (const TopoDS_Shape& theShape1, - const TopoDS_Shape& theShape2, - gp_Pnt& thePnt1, gp_Pnt& thePnt2) -{ - Standard_Real aResult = 1.e9; - - // Issue 0020231: A min distance bug with torus and vertex. - // Make GetMinDistance() return zero if a sole VERTEX is inside any of SOLIDs - - // which of shapes consists of only one vertex? - TopExp_Explorer exp1(theShape1,TopAbs_VERTEX), exp2(theShape2,TopAbs_VERTEX); - TopoDS_Shape V1 = exp1.More() ? exp1.Current() : TopoDS_Shape(); - TopoDS_Shape V2 = exp2.More() ? exp2.Current() : TopoDS_Shape(); - exp1.Next(); exp2.Next(); - if ( exp1.More() ) V1.Nullify(); - if ( exp2.More() ) V2.Nullify(); - // vertex and container of solids - TopoDS_Shape V = V1.IsNull() ? V2 : V1; - TopoDS_Shape S = V1.IsNull() ? theShape1 : theShape2; - if ( !V.IsNull() ) { - // classify vertex against solids - gp_Pnt p = BRep_Tool::Pnt( TopoDS::Vertex( V ) ); - for ( exp1.Init( S, TopAbs_SOLID ); exp1.More(); exp1.Next() ) { - BRepClass3d_SolidClassifier classifier( exp1.Current(), p, 1e-6); - if ( classifier.State() == TopAbs_IN ) { - thePnt1 = p; - thePnt2 = p; - return 0.0; - } - } - } - // End Issue 0020231 - - // skl 30.06.2008 - // additional workaround for bugs 19899, 19908 and 19910 from Mantis - double dist = GEOMUtils::GetMinDistanceSingular - (theShape1, theShape2, thePnt1, thePnt2); - - if (dist > -1.0) { - return dist; - } - - BRepExtrema_DistShapeShape dst (theShape1, theShape2); - if (dst.IsDone()) { - gp_Pnt P1, P2; - - for (int i = 1; i <= dst.NbSolution(); i++) { - P1 = dst.PointOnShape1(i); - P2 = dst.PointOnShape2(i); - - Standard_Real Dist = P1.Distance(P2); - if (aResult > Dist) { - aResult = Dist; - thePnt1 = P1; - thePnt2 = P2; - } - } - } - - return aResult; -} - -//======================================================================= -// function : ConvertClickToPoint() -// purpose : Returns the point clicked in 3D view -//======================================================================= -gp_Pnt GEOMUtils::ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) -{ - V3d_Coordinate XEye, YEye, ZEye, XAt, YAt, ZAt; - aView->Eye( XEye, YEye, ZEye ); - - aView->At( XAt, YAt, ZAt ); - gp_Pnt EyePoint( XEye, YEye, ZEye ); - gp_Pnt AtPoint( XAt, YAt, ZAt ); - - gp_Vec EyeVector( EyePoint, AtPoint ); - gp_Dir EyeDir( EyeVector ); - - gp_Pln PlaneOfTheView = gp_Pln( AtPoint, EyeDir ); - Standard_Real X, Y, Z; - aView->Convert( x, y, X, Y, Z ); - gp_Pnt ConvertedPoint( X, Y, Z ); - - gp_Pnt2d ConvertedPointOnPlane = ProjLib::Project( PlaneOfTheView, ConvertedPoint ); - gp_Pnt ResultPoint = ElSLib::Value( ConvertedPointOnPlane.X(), ConvertedPointOnPlane.Y(), PlaneOfTheView ); - return ResultPoint; -} - //======================================================================= // function : ModifyShape -// purpose : +// purpose : This function constructs and returns modified shape +// from the original one for singular cases. +// It is used for the method GetMinDistanceSingular. +// +// \param theShape the original shape +// \param theModifiedShape output parameter. The modified shape. +// \param theAddDist output parameter. The added distance for modified shape. +// \retval true if the shape is modified; false otherwise. +// + //======================================================================= -Standard_Boolean GEOMUtils::ModifyShape(const TopoDS_Shape &theShape, +Standard_Boolean ModifyShape(const TopoDS_Shape &theShape, TopoDS_Shape &theModifiedShape, Standard_Real &theAddDist) { @@ -950,3 +800,297 @@ Standard_Boolean GEOMUtils::ModifyShape(const TopoDS_Shape &theShape, return isModified; } + +//======================================================================= +//function : GetMinDistanceSingular +//purpose : +//======================================================================= +double GetMinDistanceSingular(const TopoDS_Shape& aSh1, + const TopoDS_Shape& aSh2, + gp_Pnt& Ptmp1, gp_Pnt& Ptmp2) +{ + TopoDS_Shape tmpSh1; + TopoDS_Shape tmpSh2; + Standard_Real AddDist1 = 0.; + Standard_Real AddDist2 = 0.; + Standard_Boolean IsChange1 = ModifyShape(aSh1, tmpSh1, AddDist1); + Standard_Boolean IsChange2 = ModifyShape(aSh2, tmpSh2, AddDist2); + + if( !IsChange1 && !IsChange2 ) + return -2.0; + + BRepExtrema_DistShapeShape dst(tmpSh1,tmpSh2); + if (dst.IsDone()) { + double MinDist = 1.e9; + gp_Pnt PMin1, PMin2, P1, P2; + for (int i = 1; i <= dst.NbSolution(); i++) { + P1 = dst.PointOnShape1(i); + P2 = dst.PointOnShape2(i); + Standard_Real Dist = P1.Distance(P2); + if (MinDist > Dist) { + MinDist = Dist; + PMin1 = P1; + PMin2 = P2; + } + } + if(MinDist<1.e-7) { + Ptmp1 = PMin1; + Ptmp2 = PMin2; + } + else { + gp_Dir aDir(gp_Vec(PMin1,PMin2)); + if( MinDist > (AddDist1+AddDist2) ) { + Ptmp1 = gp_Pnt( PMin1.X() + aDir.X()*AddDist1, + PMin1.Y() + aDir.Y()*AddDist1, + PMin1.Z() + aDir.Z()*AddDist1 ); + Ptmp2 = gp_Pnt( PMin2.X() - aDir.X()*AddDist2, + PMin2.Y() - aDir.Y()*AddDist2, + PMin2.Z() - aDir.Z()*AddDist2 ); + return (MinDist - AddDist1 - AddDist2); + } + else { + if( AddDist1 > 0 ) { + Ptmp1 = gp_Pnt( PMin1.X() + aDir.X()*AddDist1, + PMin1.Y() + aDir.Y()*AddDist1, + PMin1.Z() + aDir.Z()*AddDist1 ); + Ptmp2 = Ptmp1; + } + else { + Ptmp2 = gp_Pnt( PMin2.X() - aDir.X()*AddDist2, + PMin2.Y() - aDir.Y()*AddDist2, + PMin2.Z() - aDir.Z()*AddDist2 ); + Ptmp1 = Ptmp2; + } + } + } + double res = MinDist - AddDist1 - AddDist2; + if(res<0.) res = 0.0; + return res; + } + return -2.0; +} + +//======================================================================= +//function : GetMinDistance +//purpose : +//======================================================================= +Standard_Real GetMinDistance + (const TopoDS_Shape& theShape1, + const TopoDS_Shape& theShape2, + gp_Pnt& thePnt1, gp_Pnt& thePnt2) +{ + Standard_Real aResult = 1.e9; + + // Issue 0020231: A min distance bug with torus and vertex. + // Make GetMinDistance() return zero if a sole VERTEX is inside any of SOLIDs + + // which of shapes consists of only one vertex? + TopExp_Explorer exp1(theShape1,TopAbs_VERTEX), exp2(theShape2,TopAbs_VERTEX); + TopoDS_Shape V1 = exp1.More() ? exp1.Current() : TopoDS_Shape(); + TopoDS_Shape V2 = exp2.More() ? exp2.Current() : TopoDS_Shape(); + exp1.Next(); exp2.Next(); + if ( exp1.More() ) V1.Nullify(); + if ( exp2.More() ) V2.Nullify(); + // vertex and container of solids + TopoDS_Shape V = V1.IsNull() ? V2 : V1; + TopoDS_Shape S = V1.IsNull() ? theShape1 : theShape2; + if ( !V.IsNull() ) { + // classify vertex against solids + gp_Pnt p = BRep_Tool::Pnt( TopoDS::Vertex( V ) ); + for ( exp1.Init( S, TopAbs_SOLID ); exp1.More(); exp1.Next() ) { + BRepClass3d_SolidClassifier classifier( exp1.Current(), p, 1e-6); + if ( classifier.State() == TopAbs_IN ) { + thePnt1 = p; + thePnt2 = p; + return 0.0; + } + } + } + // End Issue 0020231 + + // skl 30.06.2008 + // additional workaround for bugs 19899, 19908 and 19910 from Mantis + double dist = GetMinDistanceSingular + (theShape1, theShape2, thePnt1, thePnt2); + + if (dist > -1.0) { + return dist; + } + + BRepExtrema_DistShapeShape dst (theShape1, theShape2); + if (dst.IsDone()) { + gp_Pnt P1, P2; + + for (int i = 1; i <= dst.NbSolution(); i++) { + P1 = dst.PointOnShape1(i); + P2 = dst.PointOnShape2(i); + + Standard_Real Dist = P1.Distance(P2); + if (aResult > Dist) { + aResult = Dist; + thePnt1 = P1; + thePnt2 = P2; + } + } + } + + return aResult; +} + +//======================================================================= +// function : ConvertClickToPoint() +// purpose : Returns the point clicked in 3D view +//======================================================================= +gp_Pnt ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) +{ + V3d_Coordinate XEye, YEye, ZEye, XAt, YAt, ZAt; + aView->Eye( XEye, YEye, ZEye ); + + aView->At( XAt, YAt, ZAt ); + gp_Pnt EyePoint( XEye, YEye, ZEye ); + gp_Pnt AtPoint( XAt, YAt, ZAt ); + + gp_Vec EyeVector( EyePoint, AtPoint ); + gp_Dir EyeDir( EyeVector ); + + gp_Pln PlaneOfTheView = gp_Pln( AtPoint, EyeDir ); + Standard_Real X, Y, Z; + aView->Convert( x, y, X, Y, Z ); + gp_Pnt ConvertedPoint( X, Y, Z ); + + gp_Pnt2d ConvertedPointOnPlane = ProjLib::Project( PlaneOfTheView, ConvertedPoint ); + gp_Pnt ResultPoint = ElSLib::Value( ConvertedPointOnPlane.X(), ConvertedPointOnPlane.Y(), PlaneOfTheView ); + return ResultPoint; +} + +//======================================================================= +// function : ConvertTreeToString() +// purpose : Returns the string representation of dependency tree +//======================================================================= +void ConvertTreeToString( const TreeModel &tree, + std::string &treeStr ) +{ + TreeModel::const_iterator i; + for ( i = tree.begin(); i != tree.end(); ++i ) { + treeStr.append( i->first ); + treeStr.append( "-" ); + std::vector upLevelList = i->second.first; + treeStr.append( "upward" ); + treeStr.append( "{" ); + for( std::vector::iterator j = upLevelList.begin(); + j != upLevelList.end(); ++j ) { + LevelInfo level = (*j); + LevelInfo::iterator upIter; + for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { + treeStr.append( upIter->first ); + for ( std::vector::iterator k = upIter->second.begin(); + k != upIter->second.end(); ++k ) { + treeStr.append( "_" ); + treeStr.append( *k ); + } + treeStr.append( upIter++ == level.end() ? ";" : "," ); + upIter--; + } + } + treeStr.append( "}" ); + std::vector downLevelList = i->second.second; + treeStr.append( "downward" ); + treeStr.append( "{" ); + for( std::vector::iterator j = downLevelList.begin(); + j != downLevelList.end(); ++j ) { + LevelInfo level = (*j); + LevelInfo::iterator downIter; + for ( downIter = level.begin(); downIter != level.end(); ++downIter ) { + treeStr.append( downIter->first ); + for ( std::vector::iterator k = downIter->second.begin(); + k != downIter->second.end(); ++k ) { + treeStr.append( "_" ); + treeStr.append( *k ); + } + treeStr.append( downIter++ == level.end() ? ";" : "," ); + downIter--; + } + } + treeStr.append("}"); + } +} + +LevelsList parseWard( const std::string& theData, std::size_t& theCursor ) +{ + std::size_t indexStart = theData.find( "{", theCursor ) + 1; + std::size_t indexEnd = theData.find( "}", indexStart ); + + std::string ward = theData.substr( indexStart, indexEnd - indexStart ); + std::stringstream ss(ward); + std::string substr; + std::vector levelsListStr; + while ( std::getline( ss, substr, ';' ) ) { + if ( !substr.empty() ) + levelsListStr.push_back( substr ); + } + LevelsList levelsListData; + for( int level = 0; level < levelsListStr.size(); level++ ) { + std::cout<<" Level" << level + 1 << ":" << std::endl; + std::vector namesListStr; + ss.str( levelsListStr[level] ); + while ( std::getline( ss, substr, ',' ) ) { + if ( !substr.empty() ) + namesListStr.push_back( substr ); + } + LevelInfo levelInfoData; + for( int node = 0; node < namesListStr.size(); node++ ) { + std::vector linksListStr; + ss.str( namesListStr[node] ); + while ( std::getline( ss, substr, '_' ) ) { + if ( !substr.empty() ) + linksListStr.push_back( substr ); + } + std::string nodeItem = linksListStr[0]; + if( !nodeItem.empty() ) { + NodeLinks linksListData; + std::cout<<" " << nodeItem << " - "; + for( int link = 1; link < linksListStr.size(); link++ ) { + std::string linkItem = linksListStr[link]; + linksListData.push_back( linkItem ); + std::cout << linkItem << ", "; + }// Links + levelInfoData[nodeItem] = linksListData; + std::cout << std::endl; + } + }// Level's objects + levelsListData.push_back(levelInfoData); + }// Levels + + theCursor = indexEnd + 1; + return levelsListData; +} + +//======================================================================= +// function : ConvertStringToTree() +// purpose : Returns the dependency tree +//======================================================================= +void ConvertStringToTree( const std::string &theData, + TreeModel &tree ) +{ + std::size_t cursor = 0; + + while( theData.find('-',cursor) != std::string::npos ) //find next selected object + { + std::size_t objectIndex = theData.find( '-', cursor ); + std::string objectEntry = theData.substr( cursor, objectIndex - cursor ); + std::cout<<"\n\nMainObject = " << objectEntry <( upwardList, downwardList ); + } +} + +} //namespace GEOMUtils diff --git a/src/GEOMUtils/GEOMUtils.hxx b/src/GEOMUtils/GEOMUtils.hxx index bbf8a7dbe..b35495b62 100644 --- a/src/GEOMUtils/GEOMUtils.hxx +++ b/src/GEOMUtils/GEOMUtils.hxx @@ -40,6 +40,11 @@ #include +#include +#include +#include +#include + class Bnd_Box; inline Standard_Boolean IsEqual (const TopoDS_Shape& S1, const TopoDS_Shape& S2) @@ -47,9 +52,13 @@ inline Standard_Boolean IsEqual (const TopoDS_Shape& S1, const TopoDS_Shape& S2) return S1.IsSame(S2); } -class GEOMUtils { +namespace GEOMUtils { + + typedef std::vector NodeLinks; + typedef std::map LevelInfo; + typedef std::vector LevelsList; + typedef std::map > TreeModel; - public: /*! * \brief Get Local Coordinate System, corresponding to the given shape. * @@ -57,7 +66,7 @@ class GEOMUtils { * Axes of the LCS are obtained from shape's location or, * if the shape is a planar face, from position of its plane. */ - Standard_EXPORT static gp_Ax3 GetPosition (const TopoDS_Shape& theShape); + Standard_EXPORT gp_Ax3 GetPosition (const TopoDS_Shape& theShape); /*! * \brief Get vector, defined by the given edge. @@ -67,7 +76,7 @@ class GEOMUtils { * the same edge can have different orientation depending on the way it was * extracted from a shape. */ - Standard_EXPORT static gp_Vec GetVector (const TopoDS_Shape& theShape, + Standard_EXPORT gp_Vec GetVector (const TopoDS_Shape& theShape, Standard_Boolean doConsiderOrientation); /*! @@ -89,7 +98,7 @@ class GEOMUtils { /*! * \brief Sort shapes by their centers of mass, using formula X*999 + Y*99 + Z*0.9 */ - Standard_EXPORT static void SortShapes (TopTools_ListOfShape& SL, + Standard_EXPORT void SortShapes (TopTools_ListOfShape& SL, const Standard_Boolean isOldSorting = Standard_True); /*! @@ -100,7 +109,7 @@ class GEOMUtils { * \param theCompsolid The compsolid to be converted. * \retval TopoDS_Shape Returns the resulting compound. */ - Standard_EXPORT static TopoDS_Shape CompsolidToCompound (const TopoDS_Shape& theCompsolid); + Standard_EXPORT TopoDS_Shape CompsolidToCompound (const TopoDS_Shape& theCompsolid); /*! * \brief Recursively extract all shapes from compounds and compsolids of the given shape into theList. @@ -110,7 +119,7 @@ class GEOMUtils { * \param theShape The shape to be exploded. * \param theList Output parameter. */ - Standard_EXPORT static void AddSimpleShapes (const TopoDS_Shape& theShape, + Standard_EXPORT void AddSimpleShapes (const TopoDS_Shape& theShape, TopTools_ListOfShape& theList); /*! @@ -118,14 +127,14 @@ class GEOMUtils { * \param theShape The shape to check/build triangulation on. * \retval bool Returns false if the shape has no faces, i.e. impossible to build triangulation. */ - Standard_EXPORT static bool CheckTriangulation (const TopoDS_Shape& theShape); + Standard_EXPORT bool CheckTriangulation (const TopoDS_Shape& theShape); /*! * \brief Return type of shape for explode. In case of compound it will be a type of its first sub shape. * \param theShape The shape to get type of. * \retval TopAbs_ShapeEnum Return type of shape for explode. */ - Standard_EXPORT static TopAbs_ShapeEnum GetTypeOfSimplePart (const TopoDS_Shape& theShape); + Standard_EXPORT TopAbs_ShapeEnum GetTypeOfSimplePart (const TopoDS_Shape& theShape); /*! * \brief Find an edge of theShape, closest to thePoint. @@ -134,7 +143,7 @@ class GEOMUtils { * \param thePoint The point near the required edge. * \retval TopoDS_Shape Returns the found edge or an empty shape if multiple edges found. */ - Standard_EXPORT static TopoDS_Shape GetEdgeNearPoint (const TopoDS_Shape& theShape, + Standard_EXPORT TopoDS_Shape GetEdgeNearPoint (const TopoDS_Shape& theShape, const TopoDS_Vertex& thePoint); /*! @@ -144,7 +153,7 @@ class GEOMUtils { * \param theBox rough bounding box on input; precise bounding box on output. * \retval Standard_True in case of success; Standard_False otherwise. */ - Standard_EXPORT static Standard_Boolean PreciseBoundingBox + Standard_EXPORT Standard_Boolean PreciseBoundingBox (const TopoDS_Shape &theShape, Bnd_Box &theBox); /*! @@ -157,7 +166,7 @@ class GEOMUtils { * \param Ptmp2 the output result point on the second shape * \retval negative value if it is not a singular case; actual distance for singular case. */ - Standard_EXPORT static Standard_Real GetMinDistanceSingular + Standard_EXPORT Standard_Real GetMinDistanceSingular (const TopoDS_Shape& aSh1, const TopoDS_Shape& aSh2, gp_Pnt& Ptmp1, gp_Pnt& Ptmp2); @@ -171,7 +180,7 @@ class GEOMUtils { * \param thePnt2 the output result point on the second shape * \retval negative value in case of failure; otherwise the real distance. */ - Standard_EXPORT static Standard_Real GetMinDistance + Standard_EXPORT Standard_Real GetMinDistance (const TopoDS_Shape& theShape1, const TopoDS_Shape& theShape2, gp_Pnt& thePnt1, gp_Pnt& thePnt2); @@ -184,23 +193,13 @@ class GEOMUtils { * \param theView View where the given point takes place. * \retval gp_Pnt Returns the point clicked in 3D view */ - Standard_EXPORT static gp_Pnt ConvertClickToPoint( int x, int y, Handle(V3d_View) theView ); + Standard_EXPORT gp_Pnt ConvertClickToPoint( int x, int y, Handle(V3d_View) theView ); -private: - - /** - * This function constructs and returns modified shape from the original one - * for singular cases. It is used for the method GetMinDistanceSingular. - * - * \param theShape the original shape - * \param theModifiedShape output parameter. The modified shape. - * \param theAddDist output parameter. The added distance for modified shape. - * \retval true if the shape is modified; false otherwise. - */ - static Standard_Boolean ModifyShape(const TopoDS_Shape &theShape, - TopoDS_Shape &theModifiedShape, - Standard_Real &theAddDist); + Standard_EXPORT void ConvertTreeToString( const TreeModel &theTree, + std::string &DependencyStr ); + Standard_EXPORT void ConvertStringToTree( const std::string &theDependencyStr, + TreeModel &tree ); }; diff --git a/src/GEOM_I/CMakeLists.txt b/src/GEOM_I/CMakeLists.txt index fb2a677a7..ca49d2aca 100755 --- a/src/GEOM_I/CMakeLists.txt +++ b/src/GEOM_I/CMakeLists.txt @@ -28,6 +28,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOMImpl ${PROJECT_SOURCE_DIR}/src/GEOM ${PROJECT_SOURCE_DIR}/src/GEOMAlgo + ${PROJECT_SOURCE_DIR}/src/GEOMUtils ${PROJECT_SOURCE_DIR}/src/XAO ${PROJECT_BINARY_DIR}/idl ${CMAKE_CURRENT_SOURCE_DIR} diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 8ef75a6f0..eca0f4336 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3043,8 +3043,107 @@ Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId) // function : // purpose : //======================================================================= -SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree(const GEOM::string_array&) { +SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, + const GEOM::string_array& theObjectIORs ) { + // fill in the tree structure + GEOMUtils::TreeModel tree; + // foreach( QString ior, theObjectIORs ) { + std::string ior; + for ( int i = 0; i < theObjectIORs.length(); i++ ) { + ior = theObjectIORs[i].in(); + GEOM::GEOM_Object_ptr anObj = GetIORFromString( ior.c_str() ); + GEOMUtils::LevelsList upLevelList; + getUpwardDependency( anObj, upLevelList ); + GEOMUtils::LevelsList downLevelList; + getDownwardDependency( theStudy, anObj, downLevelList ); + tree.insert( std::pair >(ior, std::pair( upLevelList, downLevelList ) ) ); + } + + // translation the tree into string + std::string treeStr; + GEOMUtils::ConvertTreeToString( tree, treeStr ); + + char* aBuffer = (char*)CORBA::string_dup(treeStr.c_str()); + int aBufferSize = strlen((char*)aBuffer); + + CORBA::Octet* anOctetBuf = (CORBA::Octet*)aBuffer; + + SALOMEDS::TMPFile_var aStream = new SALOMEDS::TMPFile(aBufferSize, aBufferSize, anOctetBuf, 1); + + return aStream._retn(); +} + +//======================================================================= +// function : +// purpose : +//======================================================================= +void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, + GEOMUtils::LevelsList &upLevelList, + int level ) { + std::string aGboIOR = GetStringFromIOR(GEOM::GEOM_Object::_narrow(gbo)); + GEOM::ListOfGBO_var depList = gbo->GetDependency(); + for( int j = 0; j < depList->length(); j++ ) { + if ( level > 0 ) { + GEOMUtils::NodeLinks anIORs; + GEOMUtils::LevelInfo aLevelMap; + if ( level-1 >= upLevelList.size() ) { + upLevelList.push_back( aLevelMap ); + } else { + aLevelMap = upLevelList.at(level-1); + if ( aLevelMap.count( aGboIOR ) > 0 ) + anIORs = aLevelMap[ aGboIOR ]; + } + anIORs.push_back( GetStringFromIOR(GEOM::GEOM_Object::_narrow(depList[j])) ); + aLevelMap.insert( std::pair(aGboIOR, anIORs) ); + } + getUpwardDependency(depList[j], upLevelList, level++); + } +} + +//======================================================================= +// function : +// purpose : +//======================================================================= +void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, + GEOM::GEOM_BaseObject_ptr gbo, + GEOMUtils::LevelsList &downLevelList, + int level ) { + SALOMEDS::SComponent_var comp = theStudy->FindComponent("GEOM"); + if ( !comp ) + return; + + SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator( comp ); + for ( it->InitEx( true ); it->More(); it->Next() ) { + SALOMEDS::SObject_var child = it->Value(); + CORBA::Object_var corbaObj = child->GetObject(); + GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); + if( CORBA::is_nil( geomObj ) ) + continue; + + GEOM::ListOfGBO_var depList = geomObj->GetDependency(); + if( depList->length() == 0 ) + continue; + std::string aGoIOR = GetStringFromIOR( geomObj ); + + for( int i = 0; i < depList->length(); i++ ) { + if ( depList[i]->IsSame( gbo ) ) { + GEOMUtils::NodeLinks anIORs; + GEOMUtils::LevelInfo aLevelMap; + if ( level >= downLevelList.size() ) { + aLevelMap = GEOMUtils::LevelInfo(); + downLevelList.push_back( aLevelMap ); + } else { + aLevelMap = downLevelList.at(level); + if ( aLevelMap.count( aGoIOR ) > 0 ) + anIORs = aLevelMap[ aGoIOR ]; + } + anIORs.push_back( GetStringFromIOR(GEOM::GEOM_Object::_narrow(depList[i]))); + aLevelMap.insert( std::pair(aGoIOR, anIORs) ); + } + } + getDownwardDependency(theStudy, geomObj, downLevelList, level++); + } } //===================================================================================== diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh index 0a4f42b8f..429e4e2f5 100644 --- a/src/GEOM_I/GEOM_Gen_i.hh +++ b/src/GEOM_I/GEOM_Gen_i.hh @@ -51,11 +51,13 @@ #include "GEOM_IMeasureOperations_i.hh" #include "GEOM_IGroupOperations_i.hh" #include "GEOM_IFieldOperations_i.hh" +#include "GEOMUtils.hxx" #include #include #include +#include #include //#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC @@ -197,7 +199,8 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi CORBA::Boolean theInheritFirstArg, CORBA::Boolean theAddPrefix); - SALOMEDS::TMPFile* GetDependencyTree(const GEOM::string_array&); + SALOMEDS::TMPFile* GetDependencyTree(SALOMEDS::Study_ptr theStudy, + const GEOM::string_array& theObjectIORs); //-----------------------------------------------------------------------// // Transaction methods // @@ -368,6 +371,15 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi const Standard_CString& GrName, GEOM::ListOfGO_var aResList); + void getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, + GEOMUtils::LevelsList &upLevelList, + int level = 0 ); + + void getDownwardDependency( SALOMEDS::Study_ptr theStudy, + GEOM::GEOM_BaseObject_ptr gbo, + GEOMUtils::LevelsList &downLevelList, + int level = 0 ); + private: ::GEOMImpl_Gen* _impl; From bec320673b7507612a07e033cb3d576eb5d1607b Mon Sep 17 00:00:00 2001 From: mpa Date: Wed, 21 May 2014 17:42:20 +0400 Subject: [PATCH 004/118] Creation of GUI part --- CMakeLists.txt | 2 +- SalomeGEOMConfig.cmake.in | 1 + adm_local/cmake_files/FindGEOM.cmake | 1 + resources/SalomeApp.xml.in | 9 + src/CMakeLists.txt | 2 +- src/DependencyTree/CMakeLists.txt | 114 +++ src/DependencyTree/DependencyTree.cxx | 114 +++ src/DependencyTree/DependencyTree.h | 44 + src/DependencyTree/DependencyTree_Arrow.cxx | 258 ++++++ src/DependencyTree/DependencyTree_Arrow.h | 71 ++ src/DependencyTree/DependencyTree_Object.cxx | 224 +++++ src/DependencyTree/DependencyTree_Object.h | 70 ++ src/DependencyTree/DependencyTree_View.cxx | 782 ++++++++++++++++++ src/DependencyTree/DependencyTree_View.h | 178 ++++ .../DependencyTree_ViewModel.cxx | 88 ++ src/DependencyTree/DependencyTree_ViewModel.h | 39 + .../resources/DependencyTree_msg_en.ts | 35 + .../resources/DependencyTree_msg_fr.ts | 12 + .../resources/DependencyTree_msg_ja.ts | 12 + src/GEOMGUI/CMakeLists.txt | 2 + src/GEOMGUI/GEOM_msg_en.ts | 56 ++ src/GEOMGUI/GeometryGUI.cxx | 103 +++ src/GEOMGUI/GeometryGUI_Operations.h | 1 + src/GEOMToolsGUI/CMakeLists.txt | 2 + src/GEOMToolsGUI/GEOMToolsGUI.cxx | 2 + src/GEOMToolsGUI/GEOMToolsGUI.h | 1 + src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 7 + 27 files changed, 2228 insertions(+), 2 deletions(-) create mode 100644 src/DependencyTree/CMakeLists.txt create mode 100644 src/DependencyTree/DependencyTree.cxx create mode 100644 src/DependencyTree/DependencyTree.h create mode 100644 src/DependencyTree/DependencyTree_Arrow.cxx create mode 100644 src/DependencyTree/DependencyTree_Arrow.h create mode 100644 src/DependencyTree/DependencyTree_Object.cxx create mode 100644 src/DependencyTree/DependencyTree_Object.h create mode 100644 src/DependencyTree/DependencyTree_View.cxx create mode 100644 src/DependencyTree/DependencyTree_View.h create mode 100644 src/DependencyTree/DependencyTree_ViewModel.cxx create mode 100644 src/DependencyTree/DependencyTree_ViewModel.h create mode 100644 src/DependencyTree/resources/DependencyTree_msg_en.ts create mode 100644 src/DependencyTree/resources/DependencyTree_msg_fr.ts create mode 100644 src/DependencyTree/resources/DependencyTree_msg_ja.ts diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c9446aa6..111061ef8 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -243,7 +243,7 @@ IF(SALOME_BUILD_GUI) LIST(APPEND _${PROJECT_NAME}_exposed_targets AdvancedGUI BasicGUI BlocksGUI BooleanGUI BuildGUI DisplayGUI DlgRef EntityGUI GEOMBase GEOMFiltersSelection GEOM GEOMToolsGUI GenerationGUI GroupGUI Material MeasureGUI GEOMObject - OperationGUI PrimitiveGUI RepairGUI TransformationGUI ImportExportGUI + OperationGUI PrimitiveGUI RepairGUI TransformationGUI ImportExportGUI DependencyTree ) ENDIF(SALOME_BUILD_GUI) diff --git a/SalomeGEOMConfig.cmake.in b/SalomeGEOMConfig.cmake.in index 9e0392028..c72af1a38 100644 --- a/SalomeGEOMConfig.cmake.in +++ b/SalomeGEOMConfig.cmake.in @@ -162,6 +162,7 @@ SET(GEOM_GEOMBase GEOMBase) SET(GEOM_GEOMFiltersSelection GEOMFiltersSelection) SET(GEOM_GEOM GEOM) SET(GEOM_GEOMToolsGUI GEOMToolsGUI) +SET(GEOM_DependencyTree DependencyTree) SET(GEOM_GenerationGUI GenerationGUI) SET(GEOM_GroupGUI GroupGUI) SET(GEOM_Material Material) diff --git a/adm_local/cmake_files/FindGEOM.cmake b/adm_local/cmake_files/FindGEOM.cmake index 1f882bc78..69722aa4e 100644 --- a/adm_local/cmake_files/FindGEOM.cmake +++ b/adm_local/cmake_files/FindGEOM.cmake @@ -54,6 +54,7 @@ FIND_LIBRARY(GEOM_GEOMBase GEOMBase ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMFiltersSelection GEOMFiltersSelection ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOM GEOM ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMToolsGUI GEOMToolsGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_DependencyTree DependencyTree ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GenerationGUI GenerationGUI ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GroupGUI GroupGUI ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_Material Material ${GEOM_ROOT_DIR}/lib/salome) diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 0cdf1cf72..d8d3253d4 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -67,6 +67,15 @@ + + + + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a40066e58..624c14bcc 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -50,7 +50,7 @@ ENDIF() ## IF(SALOME_BUILD_GUI) SET(SUBDIRS_GUI - OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI + DependencyTree OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI GEOMBase GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI ImportExportGUI diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt new file mode 100644 index 000000000..ac2b89353 --- /dev/null +++ b/src/DependencyTree/CMakeLists.txt @@ -0,0 +1,114 @@ +# Copyright (C) 2012-2014 CEA/DEN, EDF R&D +# +# 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, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE(UseQt4Ext) +INCLUDE(${QT_USE_FILE}) + +# --- options --- + +# additional include directories +INCLUDE_DIRECTORIES( + ${QT_INCLUDES} + ${GUI_INCLUDE_DIRS} + ${CAS_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/src/GEOMGUI + ${PROJECT_SOURCE_DIR}/src/GEOMBase + ${PROJECT_SOURCE_DIR}/src/GEOM + + + ${PROJECT_BINARY_DIR}/idl + ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/src/OBJECT + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/DlgRef + ${PROJECT_BINARY_DIR}/src/DlgRef + + ) + +# additional preprocessor / compiler flags +ADD_DEFINITIONS( + ${QT_DEFINITIONS} + ${GUI_DEFINITIONS} + ${CAS_DEFINITIONS} + ${OMNIORB_DEFINITIONS} + ) + +# libraries to link to +SET(_link_LIBRARIES + ${QT_LIBRARIES} + ${GUI_SalomeApp} + ${GUI_suit} + ${GUI_qtx} + ${GUI_QxScene} + ${GUI_GraphicsView} + ${GUI_SalomeObject} + GEOMUtils +) + +# --- headers --- + +SET(DependencyTree_HEADERS + DependencyTree.h + DependencyTree_Object.h + DependencyTree_Arrow.h + DependencyTree_ViewModel.h + ) + +# header files / to be processed by moc +SET(_moc_HEADERS + DependencyTree_View.h +) + +# --- sources --- + +# sources / moc wrappings +QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) + +SET(DependencyTree_SOURCES + DependencyTree.cxx + DependencyTree_View.cxx + DependencyTree_Object.cxx + DependencyTree_Arrow.cxx + #arrow.cxx + DependencyTree_ViewModel.cxx + ${_moc_SOURCES} +) + +# --- resources --- + +# resource files / to be processed by lrelease +SET(_res_files + resources/DependencyTree_msg_en.ts + resources/DependencyTree_msg_fr.ts + resources/DependencyTree_msg_ja.ts +) +# --- rules --- + +ADD_LIBRARY(DependencyTree ${DependencyTree_SOURCES}) +TARGET_LINK_LIBRARIES(DependencyTree ${_link_LIBRARIES}) +INSTALL(TARGETS DependencyTree EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +#INSTALL(FILES ${_res_files} DESTINATION ${SALOME_GEOM_INSTALL_RES_DATA}) +QT4_INSTALL_TS_RESOURCES("${_res_files}" "${SALOME_GEOM_INSTALL_RES_DATA}") + +INSTALL(FILES ${DependencyTree_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/DependencyTree/DependencyTree.cxx b/src/DependencyTree/DependencyTree.cxx new file mode 100644 index 000000000..c3de20da4 --- /dev/null +++ b/src/DependencyTree/DependencyTree.cxx @@ -0,0 +1,114 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include + +#include "DependencyTree.h" +#include "DependencyTree_ViewModel.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "DependencyTree_View.h" +#include +#include +#include + +#include +#include +#include + +#include +#include + + +#include +DependencyTree::DependencyTree() +{ + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + SUIT_ViewManager *svm = app->getViewManager(GraphicsView_Viewer::Type(), false ); + + if(!svm) { + myView = new DependencyTree_View(); + DependencyTree_ViewModel* ViewModel = new DependencyTree_ViewModel(GraphicsView_Viewer::Type(), myView); + SUIT_ViewManager *svm = app->createViewManager( ViewModel ); + SUIT_ViewWindow* svw = svm->getActiveView(); + GraphicsView_ViewFrame* aViewFrame = 0; + if (!svw) svw = svm->createViewWindow(); + if (svw) aViewFrame = dynamic_cast(svw); + + myView->init( aViewFrame ); + svm->setTitle("DEPENDENCY_TREE"); + } + else { + svm->getActiveView()->setFocus(); + } + + +} + +DependencyTree::~DependencyTree() +{ +} + +//void DependencyTree::setBackgroundColor( const QColor& theColor ) +//{ +// //myView->setBackgroundColor( theColor ); +// myBackgroundColor = theColor; +//} +//void DependencyTree::setNodeColor( const QColor& theColor ) +//{ +// myView->setNodeColor( theColor ); +//} +//void DependencyTree::setMainNodeColor( const QColor& theColor ) +//{ +// myView->setMainNodeColor( theColor ); +//} +//void DependencyTree::setSelectNodeColor( const QColor& theColor ) +//{ +// myView->setSelectNodeColor( theColor ); +//} +//void DependencyTree::setArrowColor( const QColor& theColor ) +//{ +// myView->setArrowColor( theColor ); +//} +//void DependencyTree::setHighlightArrowColor( const QColor& theColor ) +//{ +// myView->setHighlightArrowColor( theColor ); +//} +//void DependencyTree::setSelectArrowColor( const QColor& theColor ) +//{ +// myView->setSelectArrowColor( theColor ); +//} diff --git a/src/DependencyTree/DependencyTree.h b/src/DependencyTree/DependencyTree.h new file mode 100644 index 000000000..4b5d54eae --- /dev/null +++ b/src/DependencyTree/DependencyTree.h @@ -0,0 +1,44 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include + +#include + +#include "DependencyTree_View.h" +class DependencyTree +{ +public: + DependencyTree(); + ~DependencyTree(); + +// static void setBackgroundColor( const QColor& ); +// static void setNodeColor( const QColor& ); +// static void setMainNodeColor( const QColor& ); +// static void setSelectNodeColor( const QColor& ); +// static void setArrowColor( const QColor& ); +// static void setHighlightArrowColor( const QColor& ); +// static void setSelectArrowColor( const QColor& ); + +private: + DependencyTree_View* myView; + + QColor* myBackgroundColor; +}; + diff --git a/src/DependencyTree/DependencyTree_Arrow.cxx b/src/DependencyTree/DependencyTree_Arrow.cxx new file mode 100644 index 000000000..3f6925ad8 --- /dev/null +++ b/src/DependencyTree/DependencyTree_Arrow.cxx @@ -0,0 +1,258 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "DependencyTree_Arrow.h" +#include "DependencyTree_Object.h" + +// GUI includes +#include +#include + +// Qt includes +#include + +#include + +const qreal arrowSize = 20; + +DependencyTree_Arrow::DependencyTree_Arrow( DependencyTree_Object* theStartItem, + DependencyTree_Object* theEndItem, + QGraphicsItem* parent, QGraphicsScene* scene ) +:QGraphicsLineItem( parent, scene ), +myIsBiLink( false ), +myStartItem( theStartItem ), +myEndItem( theEndItem ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + myColor = resMgr->colorValue( "Geometry", "dependency_tree_arrow_color", QColor( 0, 0, 130 ) ); + myHighlightColor = resMgr->colorValue( "Geometry", "dependency_tree_highlight_arrow_color", QColor( 0, 0, 255 ) ); + mySelectColor = resMgr->colorValue( "Geometry", "dependency_tree_select_arrow_color", QColor( 255, 0, 0 ) ); + + myStartItem = theStartItem; + myEndItem = theEndItem; + + myArrowHead = createArrowHead( myStartItem->pos(), myEndItem->pos() ); + myReverseArrowHead = createArrowHead( myEndItem->pos(), myStartItem->pos() ); + + mySelfDependencyArrow = QRectF(); + + setPen( QPen( myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin ) ); + setColor( myColor ); + + setFlag( QGraphicsItem::ItemIsSelectable, true ); + setZValue( -1000.0 ); +} + +DependencyTree_Arrow::~DependencyTree_Arrow() +{ +} + +//================================================================================= +// function : boundingRect() +// purpose : return the outer bounds of the item as a rectangle. +// QGraphicsView uses this to determine whether the item requires redrawing +//================================================================================= +QRectF DependencyTree_Arrow::boundingRect() const +{ + qreal extra; + QRectF boundingRect; + if( myStartItem == myEndItem ) { + extra = arrowSize / 2.0; + boundingRect = mySelfDependencyArrow; + } + else { + extra = ( pen().width() + 20 ) / 2.0; + boundingRect = QRectF( line().p1(), QSizeF( line().p2().x() - line().p1().x(), + line().p2().y() - line().p1().y() ) ); + } + return boundingRect.normalized().adjusted( -extra, -extra, extra, extra ); +} + +//================================================================================= +// function : shape() +// purpose : return the shape of this item to define an area of preselection +//================================================================================= +QPainterPath DependencyTree_Arrow::shape() const +{ + QPainterPath path; + + if( myStartItem == myEndItem ) { + qreal extra = 5; + QPolygonF aPolygonBigger( mySelfDependencyArrow.normalized() + .adjusted( -extra, -extra, extra, extra ) ); + QPolygonF aPolygonSmaller( mySelfDependencyArrow.normalized() + .adjusted( extra, extra, -extra, -extra ) ); + path.addPolygon( aPolygonBigger.subtracted( aPolygonSmaller ) ); + path.addPolygon(myArrowHead); + } + else { + QPolygonF aShapePolygon; + QPolygon anArrowHead = myArrowHead.toPolygon(); + QPolygon anReverseArrowHead = myReverseArrowHead.toPolygon(); + aShapePolygon << anArrowHead.point(1) << anArrowHead.point(0) << anArrowHead.point(2) << + anReverseArrowHead.point(1) << anReverseArrowHead.point(0) << anReverseArrowHead.point(2); + path.addPolygon( aShapePolygon ); + } + return path; + } + +//================================================================================= +// function : setColor() +// purpose : set default color for arrow +//================================================================================= +void DependencyTree_Arrow::setColor( const QColor& theColor ) +{ + myColor = theColor; +} + +//================================================================================= +// function : setHighlightColor() +// purpose : set color for highlighted arrow +//================================================================================= +void DependencyTree_Arrow::setHighlightColor( const QColor& theColor ) +{ + myHighlightColor = theColor; +} + +//================================================================================= +// function : setSelectColor() +// purpose : set color for selected arrow +//================================================================================= +void DependencyTree_Arrow::setSelectColor( const QColor& theColor ) +{ + mySelectColor = theColor; +} + +//================================================================================= +// function : getStartItem() +// purpose : get start item of arrow +//================================================================================= +DependencyTree_Object* DependencyTree_Arrow::getStartItem() const +{ + return myStartItem; +} + +//================================================================================= +// function : getEndItem() +// purpose : get end item of arrow +//================================================================================= +DependencyTree_Object* DependencyTree_Arrow::getEndItem() const +{ + return myEndItem; +} + +//================================================================================= +// function : setIsBiLink() +// purpose : set true if current arrow is bi-directional link, else set false +//================================================================================= +void DependencyTree_Arrow::setIsBiLink( bool theIsBiLink ) +{ + myIsBiLink = theIsBiLink; +} + +//================================================================================= +// function : paint() +// purpose : paint the contents of an item in local coordinates (called by QGraphicsView) +//================================================================================= +void DependencyTree_Arrow::paint( QPainter* painter, const QStyleOptionGraphicsItem*, QWidget* ) +{ + if( isSelected() ) { + painter->setBrush( mySelectColor ); + painter->setPen( QPen( mySelectColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin ) ); + } + else if( isUnderMouse() ) { + painter->setBrush( myHighlightColor ); + painter->setPen( QPen( myHighlightColor, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin ) ); + } + else { + painter->setBrush( myColor ); + painter->setPen( QPen( myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin ) ); + } + + if( myStartItem == myEndItem ) { + int lineSize = 60; + QPointF p1( myStartItem->pos().x() - myStartItem->boundingRect().width()/2, + myStartItem->pos().y() ); + QPointF p2( p1.x() - lineSize + myStartItem->boundingRect().height()/2, p1.y() ); + QPointF p3( p2.x(), p2.y() - lineSize ); + QPointF p4( p3.x() + lineSize, p3.y() ); + QPointF p5( p4.x(), p4.y() + lineSize - myStartItem->boundingRect().height()/2 ); + mySelfDependencyArrow = QRectF( p3.x(), p3.y(), lineSize, lineSize ); + myArrowHead = createArrowHead( p4, p5, false ); + QVector pointVector; + pointVector << p1 << p2 << p2 << p3 << p3 << p4 << p4 << p5; + + painter->drawLines( pointVector); + painter->drawPolygon(myArrowHead); + } + else { + if (myStartItem->collidesWithItem(myEndItem)) + return; + + myArrowHead = createArrowHead( myStartItem->pos(), myEndItem->pos() ); + myReverseArrowHead = createArrowHead( myEndItem->pos(), myStartItem->pos() ); + + painter->drawLine( line() ); + painter->drawPolygon( myArrowHead ); + if( myIsBiLink ) + painter->drawPolygon( myReverseArrowHead ); + } +} + +//================================================================================= +// function : createArrowHead() +// purpose : create a head of arrow from start point to end point +//================================================================================= +QPolygonF DependencyTree_Arrow::createArrowHead( QPointF theStartPoint, QPointF theEndPoint, + bool theIsDynamic ) +{ + if( theIsDynamic ) { + QLineF centerLine( theStartPoint, theEndPoint ); + QPolygonF endPolygon = QPolygonF( myEndItem->boundingRect() ); + QPointF p1 = endPolygon.first() + theEndPoint; + QPointF p2; + QPointF intersectPoint; + QLineF polyLine; + for( int i = 1; i < endPolygon.count(); ++i ) { + p2 = endPolygon.at(i) + theEndPoint; + polyLine = QLineF( p1, p2 ); + QLineF::IntersectType intersectType = polyLine.intersect( centerLine, &intersectPoint ); + if( intersectType == QLineF::BoundedIntersection ) + break; + p1 = p2; + } + setLine( QLineF( intersectPoint, theStartPoint ) ); + } + else + setLine( QLineF( theEndPoint, theStartPoint ) ); + + double angle = acos(line().dx() / line().length()); + if( line().dy() >= 0 ) + angle = ( M_PI * 2 ) - angle; + + QPointF arrowP1 = line().p1() + QPointF( sin( angle + M_PI / 3 ) * arrowSize, + cos( angle + M_PI / 3 ) * arrowSize ); + QPointF arrowP2 = line().p1() + QPointF( sin( angle + M_PI - M_PI / 3 ) * arrowSize, + cos( angle + M_PI - M_PI / 3 ) * arrowSize ); + + QPolygonF anArrowHead; + anArrowHead << line().p1() << arrowP1 << arrowP2; + return anArrowHead; +} diff --git a/src/DependencyTree/DependencyTree_Arrow.h b/src/DependencyTree/DependencyTree_Arrow.h new file mode 100644 index 000000000..abf227540 --- /dev/null +++ b/src/DependencyTree/DependencyTree_Arrow.h @@ -0,0 +1,71 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef DEPENDENCYTREE_ARROW_H +#define DEPENDENCYTREE_ARROW_H + +#include + +class DependencyTree_Object; + +class DependencyTree_Arrow : public QGraphicsLineItem +{ +public: + + DependencyTree_Arrow( DependencyTree_Object* startItem, DependencyTree_Object* endItem, + QGraphicsItem* parent = 0, QGraphicsScene* scene = 0 ); + ~DependencyTree_Arrow(); + + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + + void setColor(const QColor& ); + void setHighlightColor(const QColor& ); + void setSelectColor(const QColor& ); + + DependencyTree_Object* getStartItem() const; + DependencyTree_Object* getEndItem() const; + + void setIsBiLink( bool ); + +protected: + + void paint( QPainter*, const QStyleOptionGraphicsItem*, QWidget* = 0 ); + +private: + + QPolygonF createArrowHead( QPointF , QPointF, bool = true ); + + DependencyTree_Object* myStartItem; + DependencyTree_Object* myEndItem; + + QColor myColor; + QColor mySelectColor; + QColor myHighlightColor; + + QPolygonF myArrowHead; + QPolygonF myReverseArrowHead; + + bool myIsBiLink; + + QRectF mySelfDependencyArrow; + +}; + +#endif diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx new file mode 100644 index 000000000..ab0c2c1fa --- /dev/null +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -0,0 +1,224 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "DependencyTree_Object.h" + +// GUI includes +#include +#include + +// Qt includes +#include + +const int itemH = 20; +const int itemW = 90; + +DependencyTree_Object::DependencyTree_Object( const QString& theEntry, QGraphicsItem* theParent ) +:GraphicsView_Object( theParent ), +myIsMainObject( false ), +myIsLongName( false ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + myColor = resMgr->colorValue( "Geometry", "dependency_tree_node_color", QColor( 62, 180, 238 ) ); + mySelectColor = resMgr->colorValue( "Geometry", "dependency_tree_select_node_color", QColor( 237, 243, 58 ) ); + myMainObjectColor = resMgr->colorValue( "Geometry", "dependency_tree_main_node_color", QColor( 238, 90, 125 ) ); + + myPolygonItem = new QGraphicsPolygonItem(); + QPolygonF myPolygon; + myPolygon << QPointF( -itemW, -itemH ) << QPointF( itemW, -itemH ) << QPointF( itemW, itemH ) + << QPointF( -itemW, itemH ) << QPointF( -itemW, -itemH ); + + myPolygonItem->setPolygon( myPolygon ); + myPolygonItem->setBrush( myColor ); + myPolygonItem->setPen( getPen( myColor ) ); + + myTextItem = new QGraphicsSimpleTextItem(); + QFont textFont; + textFont.setPointSize( itemH ); + myTextItem->setFont( textFont ); + + myEntry = theEntry; + updateName(); + + addToGroup( myPolygonItem ); + addToGroup( myTextItem ); +} + +DependencyTree_Object::~DependencyTree_Object() +{ +} + +//================================================================================= +// function : highlight() +// purpose : highlight current item +//================================================================================= +bool DependencyTree_Object::highlight( double theX, double theY ) +{ + if( !isHighlighted() ) { + QColor color = myPolygonItem->brush().color(); + int saturation = ( color.saturation() - 100 ) > 10 ? color.saturation() - 100 : 10; + color.setHsv( color.hsvHue(), saturation, color.value() ); + + myPolygonItem->setBrush( color ); + myPolygonItem->setPen( getPen( color ) ); + + if( myIsLongName ) + myPolygonItem->setToolTip( getName() ); + } + return GraphicsView_Object::highlight( theX, theY ); +} + +//================================================================================= +// function : unhighlight() +// purpose : set properties for unhighlighted item +//================================================================================= +void DependencyTree_Object::unhighlight() +{ + if( isSelected() ) + myPolygonItem->setBrush( mySelectColor ); + else if( myIsMainObject ) + myPolygonItem->setBrush( myMainObjectColor ); + else + myPolygonItem->setBrush( myColor ); + + myPolygonItem->setPen( getPen( myPolygonItem->brush().color() ) ); + + GraphicsView_Object::unhighlight(); +} + +//================================================================================= +// function : select() +// purpose : select current item +//================================================================================= +bool DependencyTree_Object::select( double theX, double theY, const QRectF& theRect ) +{ + myPolygonItem->setBrush( mySelectColor ); + myPolygonItem->setPen( getPen( mySelectColor ) ); + + return GraphicsView_Object::select( theX, theY, theRect ); +} + +//================================================================================= +// function : unselect() +// purpose : set properties for unselected item +//================================================================================= +void DependencyTree_Object::unselect() +{ + if( myIsMainObject ) + myPolygonItem->setBrush( myMainObjectColor ); + else + myPolygonItem->setBrush( myColor ); + + myPolygonItem->setPen( getPen( myPolygonItem->brush().color() ) ); + + GraphicsView_Object::unselect(); +} + +//================================================================================= +// function : getEntry() +// purpose : get entry of current item +//================================================================================= +QString DependencyTree_Object::getEntry() const +{ + return myEntry; +} + +//================================================================================= +// function : updateName() +// purpose : update name of current item using its entry +//================================================================================= +void DependencyTree_Object::updateName() +{ + QString name = myEntry; + + setName( myEntry ); + + myTextItem->setText( name ); + double textWidth = myTextItem->sceneBoundingRect().width(); + double textHeight = myTextItem->sceneBoundingRect().height(); + + double polygonWidth = myPolygonItem->sceneBoundingRect().width(); + double polygonHeight = myPolygonItem->sceneBoundingRect().height(); + + if( ( textWidth - 4 ) > polygonWidth ) { + myIsLongName = true; + int numberSymbol = int( polygonWidth * name.length() / textWidth ); + QString newName = name.left( numberSymbol - 3 ) + "..."; + myTextItem->setText( newName ); + textWidth = myTextItem->sceneBoundingRect().width(); + } + myTextItem->setPos( ( polygonWidth - textWidth ) / 2 - itemW, + ( polygonHeight - textHeight ) / 2 - itemH ); +} + +//================================================================================= +// function : setColor() +// purpose : set default color of current item +//================================================================================= +void DependencyTree_Object::setColor( const QColor& theColor ) +{ + myColor = theColor; +} + +//================================================================================= +// function : setSelectColor() +// purpose : set color of selected item +//================================================================================= +void DependencyTree_Object::setSelectColor( const QColor& theColor ) +{ + mySelectColor = theColor; +} + +//================================================================================= +// function : setMainObjectColor() +// purpose : set color if current item is main object of dependency tree +//================================================================================= +void DependencyTree_Object::setMainObjectColor( const QColor& theColor ) +{ + myMainObjectColor = theColor; +} + +//================================================================================= +// function : setIsMainObject() +// purpose : set true if current item is main object of dependency tree +//================================================================================= +void DependencyTree_Object::setIsMainObject( bool theIsMainObject ) +{ + myIsMainObject = theIsMainObject; + + if( myIsMainObject ) + myPolygonItem->setBrush( myMainObjectColor ); + else + myPolygonItem->setBrush( myColor ); + + myPolygonItem->setPen( getPen( myPolygonItem->brush().color() ) ); +} + +//================================================================================= +// function : getPen() +// purpose : get pen which is dependent of current color +//================================================================================= +QPen DependencyTree_Object::getPen( const QColor& theColor ) +{ + int value = ( theColor.value() - 100 ) > 10 ? theColor.value() - 100 : 10; + QColor penColor; + penColor.setHsv( theColor.hsvHue(), theColor.saturation(), value ); + return QPen( QBrush( penColor ), 4 ); +} diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h new file mode 100644 index 000000000..4f4eaf147 --- /dev/null +++ b/src/DependencyTree/DependencyTree_Object.h @@ -0,0 +1,70 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef DEPENDENCYTREE_OBJECT_H +#define DEPENDENCYTREE_OBJECT_H + +#include + +#include + +class DependencyTree_Object: public GraphicsView_Object +{ + +public: + DependencyTree_Object( const QString&, QGraphicsItem* = 0 ); + ~DependencyTree_Object(); + + virtual void compute() {}; + + virtual bool highlight( double, double ); + virtual void unhighlight(); + + virtual bool select( double, double, const QRectF& ); + virtual void unselect(); + + QString getEntry() const; + + void updateName(); + + void setColor(const QColor& ); + void setSelectColor(const QColor& ); + void setMainObjectColor(const QColor& ); + + void setIsMainObject( bool ); + +private: + + QPen getPen( const QColor& ); + + QColor myColor; + QColor mySelectColor; + QColor myMainObjectColor; + + QGraphicsPolygonItem* myPolygonItem; + QGraphicsSimpleTextItem* myTextItem; + + QString myEntry; + + bool myIsMainObject; + bool myIsLongName; + +}; + +#endif diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx new file mode 100644 index 000000000..7c6270f56 --- /dev/null +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -0,0 +1,782 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include +#include +#include + + +#include "DependencyTree_View.h" +#include "DependencyTree_Object.h" +#include "DependencyTree_Arrow.h" + + +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +// GUI includes +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + + + + +int iter = 0; + +DependencyTree_View::DependencyTree_View( QWidget* theParent ) +:GraphicsView_ViewPort(theParent), +myMaxDownwardLevelsNumber(0), +myMaxUpwardLevelsNumber(0), +myLevelsNumber(0), +myIsCompute(true), +myIsUpdate( true ) +{ + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + SalomeApp_Study* study = dynamic_cast(app->activeStudy()); + + _PTR(Study) aStudy = study->studyDS(); + if ( !aStudy ) + return; + + SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy(aStudy); + + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; + + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + + GEOM::string_array_var ObjectIORs = new GEOM::string_array(); + ObjectIORs->length( aSelList.Extent()); + int aaa=0; + + for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); +// if ( io->IsKind(STANDARD_TYPE(GEOM_InteractiveObject))) { +// Handle(GEOM_InteractiveObject) objectGEOM = Handle(GEOM_InteractiveObject)::DownCast( io ); + +// const char* ior = objectGEOM->getIOR(); +// objectGEOM.getEntry(); +// objectGEOM.getName(); +// std::cout << "\n\n\n !!!!! IOR = " << ior << std::endl; +// } + + GEOM::GEOM_Object_var myObject = GEOM::GEOM_Object::_nil(); + myObject = GEOMBase::ConvertIOinGEOMObject( io ); + QString ior = GEOMBase::GetIORFromObject(myObject); + ObjectIORs[aaa] = ior.toLatin1().constData(); + aaa++; + + std::cout << "\n\n IOR = " << ior.toStdString() << std::endl; +// if ( !CORBA::is_nil( myObject ) ) +// myGrp->LineEdit1->setText( GEOMBase::GetName( myObject ) ); + } +// +// SALOME_ListIO selected; +// aSelMgr->selectedObjects( selected ); +// if ( selected.IsEmpty() ) return; +// +// GEOM::string_array ObjectIORs; +// ObjectIORs.lenght( selected.Extent()) +// for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { +// Handle( SALOME_InteractiveObject ) io = It.Value(); +// const char* entry = io->getEntry(); +// ObjectIORs.push_back( entry ); +// //CORBA::String_var IOR = app->orb()->object_to_string( io ); +// //if ( strcmp(IOR.in(), "") != 0 ) +// //{ +//// QString objIOR = GEOMBase::GetIORFromObject( io ); +// //char* GetStringFromIOR(GEOM::GEOM_Object_ptr theObject) +// +// } + + SALOMEDS::TMPFile_var SeqFile = + GeometryGUI::GetGeomGen()->GetDependencyTree( aStudyDS, ObjectIORs ); + char* buf; + buf = (char*) &SeqFile[0]; + + std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; +} + +DependencyTree_View::~DependencyTree_View() +{ + +} + +void DependencyTree_View::drawArrows() +{ + QMap >::iterator i; + for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { + DependencyTree_Object* Main_object = myTreeMap[i.key()]; + LevelInfo Levelup = i.value().first.at(0); + if( myDisplayAscendants ->isChecked() ) { + QMap::iterator node; + for (node = Levelup.begin(); node != Levelup.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node.key()]; + addArrow(Main_object, object); + } + } + if( myDisplayAscendants ->isChecked() ) + drawWardArrows( i.value().first ); + if( myDisplayDescendants->isChecked() ) + drawWardArrows( i.value().second ); + + } +} + +void DependencyTree_View::drawWardArrows( LevelsList theWard ) +{ + for(int j = 0; j < theWard.size(); j++ ) { + if( j >= myLevelsNumber ) + break; + LevelInfo Level = theWard.at(j); + QMap::iterator node; + for (node = Level.begin(); node != Level.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node.key()]; + QList Links = node.value(); + for( int link = 0; link < Links.size(); link++ ) { + DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; + if( isItemAdded( object ) && isItemAdded( LinkObject ) ) { + addArrow(object, LinkObject); + } + } + } + } +} + + +void DependencyTree_View::parseData( QString& theData ) +{ + int cursor = 0; + + while( theData.indexOf('-',cursor) != -1 ) //find next selected object + { + int objectIndex = theData.indexOf( '-', cursor ); + QString objectEntry = theData.mid( cursor, objectIndex - cursor ); + addNode( objectEntry ); + std::cout<<"\n\nMainObject = " << objectEntry.toStdString() < myMaxUpwardLevelsNumber ) + myMaxUpwardLevelsNumber = upwardList.size(); + std::cout<<" Downward:" << std::endl; + LevelsList downwardList = parseWard( theData, cursor ); + if( downwardList.size() > myMaxDownwardLevelsNumber ) + myMaxDownwardLevelsNumber = downwardList.size(); + + myTreeModel[objectEntry] = QPair( upwardList, downwardList ); + } +} + +void DependencyTree_View::addNode( const QString& theEntry ) +{ + if( !myTreeMap[theEntry] ) + myTreeMap[theEntry] = new DependencyTree_Object( theEntry ); +} + +void DependencyTree_View::addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ) +{ + bool isFind = false; + + std::cout << " " << startItem->getEntry().toStdString() << " " << endItem->getEntry().toStdString() << std::endl; + for( int i = 0; i < Arrows.size(); i++ ) { + DependencyTree_Arrow* arrow = Arrows.at(i); + if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) { + isFind = true; + std::cout<<" theSame " << std::endl; + } + else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) { + arrow->setIsBiLink( true ); + std::cout<<" Bilink " << std::endl; + isFind = true; + } + } + + if( !isFind ) { + DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem); + Arrows.append( arrow ); + addItem(arrow); + std::cout<<" addArrow " << std::endl; + } +} + +DependencyTree_View::LevelsList DependencyTree_View::parseWard( const QString& theData, int& theCursor ) +{ + int indexStart = theData.indexOf( "{", theCursor ) + 1; + int indexEnd = theData.indexOf( "}", indexStart ); + + QString ward = theData.mid( indexStart, indexEnd - indexStart ); + QStringList levelsListStr = ward.split( ';' ); + LevelsList levelsListData; + for( int level = 0; level < levelsListStr.size(); level++ ) { + std::cout<<" Level" << level + 1 << ":" << std::endl; + QStringList namesListStr = levelsListStr[level].split( ',' ); + LevelInfo levelInfoData; + for( int node = 0; node < namesListStr.size(); node++ ) { + QStringList linksListStr = namesListStr[node].split( '_' ); + QString nodeItem = linksListStr[0]; + if( !nodeItem.isEmpty() ) { + addNode( nodeItem ); + NodeLinks linksListData; + std::cout<<" " << nodeItem.toStdString() << " - "; + for( int link = 1; link < linksListStr.size(); link++ ) { + QString linkItem = linksListStr[link]; + addNode( linkItem ); + linksListData.append( linkItem ); + std::cout << linkItem.toStdString() << ", "; + }// Links + levelInfoData[nodeItem] = linksListData; + std::cout << std::endl; + } + }// Level's objects + levelsListData.append(levelInfoData); + }// Levels + + theCursor = indexEnd + 1; + + return levelsListData; +} + +void DependencyTree_View::drawTree() +{ + + int horDistance, verDistance; + myCurrentLevel = 0; + std::cout<<"\n\n\n\n MY TREE MODEL SIZE = " << myTreeModel.size() << std::endl; + std::cout<<"\n\n\n\n MY TREE MAP SIZE = " << myTreeMap.size() << std::endl; + for( int j = 0; j < myTreeModel.keys().size(); j++ ) + std::cout<< " STRING = " << myTreeModel.keys().at(j).toStdString() << std::endl; + QMap >::iterator i; + for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { + myCurrentLevel = 0; + QString objectEntry = i.key(); + std::cout<< " NAME = " << objectEntry.toStdString() << std::endl; + DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; + objectItem->setEnabled(true); + if( objectItem->isEnabled() ) + std::cout<<"OK!!! "<< std::endl; + horDistance = 100 + int( objectItem->boundingRect().width() ); + verDistance = 3 * int( objectItem->boundingRect().height() ); + if( isItemAdded( objectItem ) ) { + myCurrentLevel = myLevelMap[ objectEntry ]; + } + else { + addItem( objectItem ); + std::cout<<"\nLevel = " << myCurrentLevel << " Object = " << objectEntry.toStdString() << std::endl; + myLevelMap[ objectEntry ] = myCurrentLevel; + myLevelsObject[ myCurrentLevel ].append( objectEntry ); + } + objectItem->setIsMainObject( true ); + + int levelposition = myCurrentLevel; + if( myDisplayAscendants ->isChecked() ){ + drawWard( i.value().first, -1 ); + myCurrentLevel = levelposition; + } + if( myDisplayDescendants->isChecked() ) + drawWard( i.value().second, 1 ); + + //centerOn( objectItem ); + } + + QMap< int, QList >::iterator j; + for (j = myLevelsObject.begin(); j != myLevelsObject.end(); j++ ) { + int step = -horDistance*( j.value().size() - 1 )/2; + std::cout<<"\n\n LEVEL = " << j.key() << std::endl; + for( int object = 0; object < j.value().size(); object++ ) { + if( myIsCompute ) { + std::cout << j.value().at( object ).toStdString() << ", "; + DependencyTree_Object* anObject = myTreeMap[ j.value().at( object ) ]; + anObject->setPos( step, verDistance*j.key() ); + step += horDistance; + //sleep(1); + } + } + } + +} + +void DependencyTree_View::drawWard( const DependencyTree_View::LevelsList theWard, const int theLevelStep ) +{ + int levelsNumber = theWard.size(); + for( int level = 0; level < levelsNumber; level++ ) { + if( level >= myLevelsNumber ) + return; + myCurrentLevel += theLevelStep; + LevelInfo levelInfo = theWard.at( level ); + QMap::iterator node; + for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[ node.key() ]; + if( !isItemAdded( object ) ) { + addItem( object ); + myLevelMap[ node.key() ] = myCurrentLevel; + myLevelsObject[ myCurrentLevel ].append( node.key() ); + } + } + } +} + +void DependencyTree_View::onUpdateTree() +{ + myLevelMap.clear(); + myLevelsObject.clear(); + + + QMap::iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i.key() ]; + if( isItemAdded( object ) && object ) + removeItem( object ); + + } + + + std::cout<<"\n\n\n\n ARROWS = " << Arrows.size() << std::endl; + + for(int j = 0; jisChecked() && myDisplayDescendants->isChecked() ) + return myMaxUpwardLevelsNumber>myMaxDownwardLevelsNumber?myMaxUpwardLevelsNumber:myMaxDownwardLevelsNumber; + else if( myDisplayAscendants ->isChecked() ) + return myMaxUpwardLevelsNumber; + else if( myDisplayDescendants->isChecked() ) + return myMaxDownwardLevelsNumber; +} + + +void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + QString Data = "MainObject1-upward{up11_up21_up22,up12_up23,up13_up24;up21_up11,up22_up21_up12,up23_up23,up24}" + "downward{down11_MainObject1,down12_MainObject1;down21_down11,down22_down12,down23_down12,down24_down24_down11,down25_down12;down31_down11_down23,down32_down25}" + "down23-upward{down12_MainObject1;MainObject1_up11_up12_up13;up11_up21_up22,up12_up23,up13_up24;up21,up22_up21_up12,up23,up24}" + "downward{down31_down11_down23}" + "MainObject2-upward{up21,newup11_newup31,newup12_newup21;newup21_newup31LongName;newup31LongName}downward{newdown11_MainObject2,newdown12_MainObject2,newdown13_MainObject2;newdown21_newdown13,down21;newdown31_newdown11}"; + + parseData( Data ); + + + myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) ); + QWidgetAction* moveNodesAction = new QWidgetAction( theViewFrame ); + moveNodesAction->setDefaultWidget( myNodesMovable ); + + myDisplayAscendants = new QCheckBox( tr( "DISPLAY_ASCENDANTS" )); + myDisplayAscendants ->setChecked( true ); + QWidgetAction* ShowParentsAction = new QWidgetAction(theViewFrame); + ShowParentsAction->setDefaultWidget( myDisplayAscendants ); + + myDisplayDescendants = new QCheckBox(tr("DISPLAY_DESCENDANTS")); + QWidgetAction* ShowChildrenAction = new QWidgetAction(theViewFrame); + ShowChildrenAction->setDefaultWidget( myDisplayDescendants ); + + myLevelsNumber = checkMaxLevelsNumber(); + myHierarchyDepth = new QSpinBox(); + myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); + myHierarchyDepth->setValue( 0 ); + myHierarchyDepth->setSpecialValueText( "All" ); + QWidgetAction* LevelsAction = new QWidgetAction(theViewFrame); + LevelsAction->setDefaultWidget( myHierarchyDepth ); + + QLabel* LevelsLabel = new QLabel( tr("HIERARCHY_DEPTH") ); + QWidgetAction* LevelsLebelAction = new QWidgetAction(theViewFrame); + LevelsLebelAction->setDefaultWidget( LevelsLabel ); + + + QPushButton* UpdateButton = new QPushButton(tr("Update")); + QWidgetAction* UpdateAction = new QWidgetAction(theViewFrame); + UpdateAction->setDefaultWidget( UpdateButton ); + + cancelButton = new QPushButton(tr("CANCEL")); + cancelButton->setCheckable(true); + cancelButton->setVisible( false ); + cancelAction = new QWidgetAction(theViewFrame); + cancelAction->setDefaultWidget( cancelButton ); + cancelAction->setVisible(false); + + progressBar = new QProgressBar(this); + progressBar->setMinimum( 0 ); + progressBar->setMaximum( 1000 ); + progressBar->setFixedWidth(100); + progressAction = new QWidgetAction(theViewFrame); + progressAction->setDefaultWidget( progressBar ); + progressAction->setVisible(false); + + QAction* separator = theViewFrame->toolMgr()->separator(false); + theViewFrame->toolMgr()->append( separator, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( moveNodesAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( LevelsLebelAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( LevelsAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() ); + QAction* separator2 = theViewFrame->toolMgr()->separator(false); + theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( UpdateAction, theViewFrame->getToolBarId() ); + std::cout<<"\n\n\n\n ToolBarId = " << theViewFrame->getToolBarId() << std::endl; + theViewFrame->toolMgr()->append( progressAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( cancelAction, theViewFrame->getToolBarId() ); + + connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); + + connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) ); + connect( myDisplayAscendants , SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) ); + connect( myDisplayDescendants, SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) ); + connect( UpdateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) ); + connect( myNodesMovable, SIGNAL( toggled(bool) ), this, SLOT( onMoveNodes( bool ) ) ); + + setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); + setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); + setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); + +} + +void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) +{ + QMap::iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i.key() ]; + object->setMovable( theIsMoveNodes ); + } +} + +void DependencyTree_View::onHierarchyType() +{ + myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); + if( myHierarchyDepth->value() > checkMaxLevelsNumber() ) + myHierarchyDepth->setValue( checkMaxLevelsNumber() ); + + if( myHierarchyDepth->value() == 0 ) + myLevelsNumber = myHierarchyDepth->maximum(); + else + myLevelsNumber = myHierarchyDepth->value(); + + updateView(); +} +void DependencyTree_View::updateView() +{ + + if( !myIsUpdate ) + return; + + myLevelMap.clear(); + myLevelsObject.clear(); + + + QMap::iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i.key() ]; + if( isItemAdded( object ) && object ) + removeItem( object ); + + } + + + std::cout<<"\n\n\n\n ARROWS = " << Arrows.size() << std::endl; + + for(int j = 0; j(this) ); + cancelAction->setVisible( true ); + progressAction->setVisible(true); + startTimer(100); // millisecs + qthread->start(); +} + +void DependencyTree_View::onRedrawTree() +{ + drawTree(); + drawArrows(); +} +void DependencyTree_View::onCancel() +{ + qthread->cancel(); + cancelButton->setText( tr("CANCELING")); + cancelButton->setEnabled(false); +} + +void DependencyTree_View::timerEvent(QTimerEvent *event) +{ + if ( !cancelButton->isChecked() ) // not yet cancelled + // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() ); + progressBar->setValue( iter++ ); + + if(!myIsCompute || qthread->isFinished()) + { + cancelAction->setVisible( false ); + progressAction->setVisible(false); + cancelButton->setText( tr("CANCEL")); + cancelButton->setEnabled(true); + } + + event->accept(); +} + +void DependencyTree_View::closeEvent(QCloseEvent *event) +{ + if(qthread->isRunning()) + { + event->ignore(); + return; + } + event->accept(); +} + +void DependencyTree_View::setIsCompute( bool theIsCompute ) +{ + myIsCompute = theIsCompute; +} + +void DependencyTree_View::setHierarchyType( const int theType ) +{ + myIsUpdate = false; + switch( theType ) { + case 0: + myDisplayAscendants->setChecked( true ); + myDisplayDescendants->setChecked( true ); + break; + case 1: + myDisplayAscendants->setChecked( true ); + myDisplayDescendants->setChecked( false ); + break; + case 2: + myDisplayAscendants->setChecked( false ); + myDisplayDescendants->setChecked( true ); + break; + } + myIsUpdate = true; + onHierarchyType(); +} + +void DependencyTree_View::setNodesMovable( const bool theIsMovable ) +{ + myNodesMovable->setChecked( theIsMovable ); +} + +void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor ) +{ + if( isForegroundEnabled() ) + { + setForegroundColor( theColor ); + updateForeground(); + } + else + setBackgroundColor( theColor ); +} + +void DependencyTree_View::setNodeColor( const QColor& theColor ) +{ + QMap::iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i.key() ]; + object->setColor( theColor ); + } +} + +void DependencyTree_View::setMainNodeColor( const QColor& theColor ) +{ + QMap::iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i.key() ]; + object->setMainObjectColor( theColor ); + } +} + +void DependencyTree_View::setSelectNodeColor( const QColor& theColor ) +{ + QMap::iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i.key() ]; + object->setSelectColor( theColor ); + } +} + +void DependencyTree_View::setArrowColor( const QColor& theColor ) +{ + for( int i = 0; i < Arrows.size(); i++ ) { + DependencyTree_Arrow* arrow = Arrows[i]; + arrow->setColor( theColor ); + } +} + +void DependencyTree_View::setHighlightArrowColor( const QColor& theColor ) +{ + for( int i = 0; i < Arrows.size(); i++ ) { + DependencyTree_Arrow* arrow = Arrows[i]; + arrow->setHighlightColor( theColor ); + } +} + +void DependencyTree_View::setSelectArrowColor( const QColor& theColor ) +{ + for( int i = 0; i < Arrows.size(); i++ ) { + DependencyTree_Arrow* arrow = Arrows[i]; + arrow->setSelectColor( theColor ); + } +} + +//================================================================================ +//================================================================================ + +DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread(DependencyTree_View* theView) +{ + myView = theView; +} + +void DependencyTree_ComputeDlg_QThread::run() +{ + myView->setIsCompute( true ); + myView->onRedrawTree(); +} + +bool DependencyTree_ComputeDlg_QThread::result() +{ + +} + +void DependencyTree_ComputeDlg_QThread::cancel() +{ + myView->setIsCompute( false ); +} + +////================================================================================ +////================================================================================ +// +//DependencyTree_ComputeDlg_QThreadQDialog::DependencyTree_ComputeDlg_QThreadQDialog(QWidget* parent, +// DependencyTree_View* theView) +// : QDialog(parent, +// Qt::WindowSystemMenuHint | +// Qt::WindowCloseButtonHint | +// Qt::Dialog | +// Qt::WindowMaximizeButtonHint), +// qthread( theView ) +//{ +// // -- +// setWindowTitle(tr("TITLE")); +// setMinimumWidth( 200 ); +// +// cancelButton = new QPushButton(tr("CANCEL")); +// cancelButton->setDefault(true); +// cancelButton->setCheckable(true); +// +// progressBar = new QProgressBar(this); +// progressBar->setMinimum( 0 ); +// progressBar->setMaximum( 1000 ); +// +// QGridLayout* layout = new QGridLayout(this); +// layout->setMargin( 11 ); +// layout->setSpacing( 6 ); +// int row = 0; +// layout->addWidget(progressBar, row++, 0, 1, 2); +// layout->addWidget(cancelButton, row++, 0, 1, 2); +// adjustSize(); +// update(); +// +// connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); +// // -- +// startTimer(300); // millisecs +// qthread.start(); +//} +// +//bool DependencyTree_ComputeDlg_QThreadQDialog::result() +//{ +// return qthread.result(); +//} +// +//void DependencyTree_ComputeDlg_QThreadQDialog::onCancel() +//{ +// qthread.cancel(); +// cancelButton->setText( tr("CANCELING")); +// cancelButton->setEnabled(false); +//} +// +//void DependencyTree_ComputeDlg_QThreadQDialog::timerEvent(QTimerEvent *event) +//{ +// if ( !cancelButton->isChecked() ) // not yet cancelled +// // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() ); +// progressBar->setValue( 10 ); +// +// if(qthread.isFinished()) +// { +// close(); +// } +// +// event->accept(); +//} +// +//void DependencyTree_ComputeDlg_QThreadQDialog::closeEvent(QCloseEvent *event) +//{ +// if(qthread.isRunning()) +// { +// event->ignore(); +// return; +// } +// event->accept(); +//} +// + + diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h new file mode 100644 index 000000000..02d0e322e --- /dev/null +++ b/src/DependencyTree/DependencyTree_View.h @@ -0,0 +1,178 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef DEPENDENCYTREE_VIEW_H +#define DEPENDENCYTREE_VIEW_H + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "DependencyTree_Arrow.h" + +class DependencyTree_Object; +class DependencyTree_View; + + +class DependencyTree_ComputeDlg_QThread : public QThread +{ + Q_OBJECT + +public: + DependencyTree_ComputeDlg_QThread(DependencyTree_View*); + bool result(); + void cancel(); + + DependencyTree_View* getView() { return myView; }; + +protected: + void run(); + +private: + DependencyTree_View* myView; +}; + +class DependencyTree_View: public GraphicsView_ViewPort +{ + Q_OBJECT +public: + + + DependencyTree_View( QWidget* theParent=0 ); + ~DependencyTree_View(); + + void setHierarchyType( const int ); + void setNodesMovable( const bool ); + void setPrefBackgroundColor( const QColor& ); + void setNodeColor( const QColor& ); + void setMainNodeColor( const QColor& ); + void setSelectNodeColor( const QColor& ); + void setArrowColor( const QColor& ); + void setHighlightArrowColor( const QColor& ); + void setSelectArrowColor( const QColor& ); + + typedef QList NodeLinks; + typedef QMap LevelInfo; + typedef QList LevelsList; + typedef QMap > TreeModel; + + TreeModel myTreeModel; + QMap myTreeMap; + QList Arrows; + + QMap myLevelMap; + + QMap< int, QList > myLevelsObject; + int myCurrentLevel; + + void init( GraphicsView_ViewFrame* ); + + void onRedrawTree(); + + void setIsCompute( bool theIsCompute ); + bool getIsCompute() { return myIsCompute; }; +private slots: + void onUpdateTree(); + void updateView(); + void onMoveNodes( bool ); + void onHierarchyType(); + +protected: + void timerEvent(QTimerEvent *timer); + void closeEvent(QCloseEvent *event); + +private slots: + void onCancel(); + +private: + void parseData( QString& data ); + void addNode( const QString& entry ); + void addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ); + void findArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ); + DependencyTree_View::LevelsList parseWard( const QString& data, int& cursor ); + void drawTree(); + void drawWard( DependencyTree_View::LevelsList ward, const int levelStep ); + void drawArrows(); + void drawWardArrows( LevelsList ); + + int checkMaxLevelsNumber(); + int myLevelsNumber; + int myMaxDownwardLevelsNumber; + int myMaxUpwardLevelsNumber; + + QCheckBox* myNodesMovable; + QSpinBox* myHierarchyDepth; + QCheckBox* myDisplayAscendants; + QCheckBox* myDisplayDescendants; + + QString myData; + + bool myIsUpdate; + + GraphicsView_ViewFrame* myViewFrame; + + bool myIsCompute; + DependencyTree_ComputeDlg_QThread* qthread; + QPushButton * cancelButton; + QProgressBar* progressBar; + QWidgetAction* cancelAction; + QWidgetAction* progressAction; + +}; + + + +///*! +// * \brief Dialog to display Cancel button +// */ +// +//class DependencyTree_ComputeDlg_QThreadQDialog : public QDialog +//{ +// Q_OBJECT +// +//public: +// DependencyTree_ComputeDlg_QThreadQDialog(QWidget* parent, DependencyTree_View*); +// bool result(); +// +//protected: +// void timerEvent(QTimerEvent *timer); +// void closeEvent(QCloseEvent *event); +// +//private slots: +// void onCancel(); +// +//private: +// +// DependencyTree_ComputeDlg_QThread qthread; +// QPushButton * cancelButton; +// QProgressBar* progressBar; +//}; + +#endif diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx new file mode 100644 index 000000000..deb504074 --- /dev/null +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -0,0 +1,88 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include + +#include "DependencyTree_ViewModel.h" +#include "DependencyTree_View.h" + +#include + +#include +#include + +DependencyTree_ViewModel::DependencyTree_ViewModel( const QString& title ) +: GraphicsView_Viewer( title ) +{ +} + +DependencyTree_ViewModel::DependencyTree_ViewModel( const QString& title, QWidget* w ) +: GraphicsView_Viewer( title, w ) +{ + +} + +DependencyTree_ViewModel::~DependencyTree_ViewModel() +{ +} + +void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) +{ + GraphicsView_Viewer::contextMenuPopup( theMenu ); + std::cout<<"\n\n\n\n *****contextMenuPopup " << std::endl; + + if( DependencyTree_View* aViewPort = dynamic_cast(getActiveViewPort()) ) + { + int aNbSelected = aViewPort->nbSelected(); + std::cout<<"\n aNbSelected " << aNbSelected << std::endl; + } + + +} + + +//SUIT_ViewWindow* DependencyTree_ViewModel::createView( SUIT_Desktop* theDesktop ) +//{ +// DependencyTree_ViewWindow* aViewFrame; +//if( myWidget ) +// aViewFrame = new DependencyTree_ViewWindow( theDesktop, this, myWidget ); +//else +// aViewFrame = new DependencyTree_ViewWindow( theDesktop, this ); +// +//connect( aViewFrame, SIGNAL( keyPressed( QKeyEvent* ) ), +// this, SLOT( onKeyEvent( QKeyEvent* ) ) ); +// +//connect( aViewFrame, SIGNAL( keyReleased( QKeyEvent* ) ), +// this, SLOT( onKeyEvent( QKeyEvent* ) ) ); +// +//connect( aViewFrame, SIGNAL( mousePressed( QGraphicsSceneMouseEvent* ) ), +// this, SLOT( onMouseEvent( QGraphicsSceneMouseEvent* ) ) ); +// +//connect( aViewFrame, SIGNAL( mouseMoving( QGraphicsSceneMouseEvent* ) ), +// this, SLOT( onMouseEvent( QGraphicsSceneMouseEvent* ) ) ); +// +//connect( aViewFrame, SIGNAL( mouseReleased( QGraphicsSceneMouseEvent* ) ), +// this, SLOT( onMouseEvent( QGraphicsSceneMouseEvent* ) ) ); +// +//connect( aViewFrame, SIGNAL( wheeling( QGraphicsSceneWheelEvent* ) ), +// this, SLOT( onWheelEvent( QGraphicsSceneWheelEvent* ) ) ); +// +//return aViewFrame; +//} + diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h new file mode 100644 index 000000000..3223a00dc --- /dev/null +++ b/src/DependencyTree/DependencyTree_ViewModel.h @@ -0,0 +1,39 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include +#include + +class DependencyTree_ViewModel: public GraphicsView_Viewer +{ + +public: + + DependencyTree_ViewModel( const QString& title ); + DependencyTree_ViewModel( const QString& title, QWidget* w ); + ~DependencyTree_ViewModel(); + +public: + virtual void contextMenuPopup( QMenu* ); +// virtual SUIT_ViewWindow* createView( SUIT_Desktop* ); + +// static QString Type() { return "DependencyTree"; } + + +}; diff --git a/src/DependencyTree/resources/DependencyTree_msg_en.ts b/src/DependencyTree/resources/DependencyTree_msg_en.ts new file mode 100644 index 000000000..c62ab0de1 --- /dev/null +++ b/src/DependencyTree/resources/DependencyTree_msg_en.ts @@ -0,0 +1,35 @@ + + + + + DependencyTree_View + + DEPENDENCY_TREE + Dependency Tree + + + MOVE_NODES + Move nodes + + + HIERARCHY_DEPTH + Hierarchy depth + + + DISPLAY_ASCENDANTS + Display ascendants + + + DISPLAY_DESCENDANTS + Display descendants + + + CANCEL + Cancel + + + CANCELING + Canceling... + + + diff --git a/src/DependencyTree/resources/DependencyTree_msg_fr.ts b/src/DependencyTree/resources/DependencyTree_msg_fr.ts new file mode 100644 index 000000000..b4eae6fca --- /dev/null +++ b/src/DependencyTree/resources/DependencyTree_msg_fr.ts @@ -0,0 +1,12 @@ + + + + + @default + + MEN_TEXTURE + Texture + + + + diff --git a/src/DependencyTree/resources/DependencyTree_msg_ja.ts b/src/DependencyTree/resources/DependencyTree_msg_ja.ts new file mode 100644 index 000000000..26250801e --- /dev/null +++ b/src/DependencyTree/resources/DependencyTree_msg_ja.ts @@ -0,0 +1,12 @@ + + + + + @default + + MEN_TEXTURE + Texture + + + + diff --git a/src/GEOMGUI/CMakeLists.txt b/src/GEOMGUI/CMakeLists.txt index c5dc25f8a..9ac751273 100755 --- a/src/GEOMGUI/CMakeLists.txt +++ b/src/GEOMGUI/CMakeLists.txt @@ -39,6 +39,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOMClient ${PROJECT_SOURCE_DIR}/src/GEOMImpl ${PROJECT_SOURCE_DIR}/src/GEOMUtils + ${PROJECT_SOURCE_DIR}/src/DependencyTree ${CMAKE_CURRENT_SOURCE_DIR} ) @@ -58,6 +59,7 @@ SET(_link_LIBRARIES Material GEOMImpl GEOMUtils + DependencyTree ${KERNEL_SALOMELocalTrace} ${KERNEL_SalomeDS} ${KERNEL_SalomeDSClient} diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 30942dd61..39e2393f5 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -5024,6 +5024,62 @@ Please, select face, shell or solid and try again GEOM_PREVIEW Preview + + PREF_TAB_DEPENDENCY_VIEW + Dependency Tree + + + PREF_HIERARCHY_TYPE + Hierarchy type + + + MEN_ONLY_ASCENDANTS + Display only ascendants tree + + + MEN_ONLY_DESCENDANTS + Display only descendants tree + + + MEN_BOTH_ASCENDANTS_DESCENDANTS + Display both ascendants and descendants trees + + + GEOM_MOVE_POSSIBILITY + Possibility to move nodes + + + PREF_GROUP_DEPENDENCY_VIEW_COLOR + Color + + + PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR + Background color + + + PREF_DEPENDENCY_VIEW_NODE_COLOR + Default node color + + + PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR + Main node color + + + PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR + Selected node color + + + PREF_DEPENDENCY_VIEW_ARROW_COLOR + Arrow color + + + PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR + Highlighted arrow color + + + PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR + Selected arrow color + GEOM_ALL_IMPORT_FILES All supported formats ( %1 ) diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index f10e4a026..3e9a1c2c8 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -75,6 +75,10 @@ #include #include +#include +#include +#include + #include // #include #include @@ -502,6 +506,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpClsBringToFront: // case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS + case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE libName = "GEOMToolsGUI"; break; case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME @@ -1077,6 +1082,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" ); createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" ); createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" ); + createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" ); createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" ); createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" ); @@ -1622,6 +1628,10 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule ); + mgr->insert( separator(), -1, -1 ); // ----------- + mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree + mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->hide( mgr->actionId( action( myEraseAll ) ) ); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); @@ -2617,6 +2627,50 @@ void GeometryGUI::createPreferences() addPreference( tr( "GEOM_PREVIEW" ), operationsGroup, LightApp_Preferences::Bool, "Geometry", "geom_preview" ); + + int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) ); + + int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), DependencyViewId, + LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" ); + + QStringList aHierarchyTypeList; + aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") ); + aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") ); + aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") ); + + QList aHierarchyTypeIndexesList; + aHierarchyTypeIndexesList.append(0); + aHierarchyTypeIndexesList.append(1); + aHierarchyTypeIndexesList.append(2); + + setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList ); + setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList ); + + addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), DependencyViewId, + LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" ); + + int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId ); + + addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" ); + + addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" ); + + addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" ); + + + + } void GeometryGUI::preferencesChanged( const QString& section, const QString& param ) @@ -2687,6 +2741,55 @@ void GeometryGUI::preferencesChanged( const QString& section, const QString& par aDisplayer.UpdateViewer(); } + else if ( param.startsWith( "dependency_tree") ) + { + SalomeApp_Application* app = getApp(); + if ( !app ) return; + + SUIT_ViewManager *svm = app->getViewManager( GraphicsView_Viewer::Type(), false ); + if( !svm ) return; + + if( DependencyTree_ViewModel* viewModel = dynamic_cast( svm->getViewModel() ) ) + if( DependencyTree_View* view = dynamic_cast( viewModel->getActiveViewPort() ) ) { + if( param == QString("dependency_tree_hierarchy_type") ) { + int hierarchyType = aResourceMgr->integerValue( section, param, 0); + view->setHierarchyType( hierarchyType ); + } + else if( param == QString("dependency_tree_move_nodes") ) { + bool isNodesMovable = aResourceMgr->booleanValue( section, param, true); + view->setNodesMovable( isNodesMovable ); + } + else if( param == QString("dependency_tree_background_color") ) { + QColor c = aResourceMgr->colorValue( section, param, QColor( 255, 255, 255 ) ); + view->setPrefBackgroundColor( c ); + } + else if( param == QString("dependency_tree_node_color") ) { + QColor c = aResourceMgr->colorValue( section, param, QColor( 62, 180, 238 ) ); + view->setNodeColor( c ); + } + else if( param == QString("dependency_tree_main_node_color") ) { + QColor c = aResourceMgr->colorValue( section, param, QColor( 238, 90, 125 ) ); + view->setMainNodeColor( c ); + } + else if( param == QString("dependency_tree_select_node_color") ) { + QColor c = aResourceMgr->colorValue( section, param, QColor( 237, 243, 58 ) ); + view->setSelectNodeColor( c ); + } + else if( param == QString("dependency_tree_arrow_color") ) { + QColor c = aResourceMgr->colorValue( section, param, QColor( 0, 0, 130 ) ); + view->setArrowColor( c ); + } + else if( param == QString("dependency_tree_highlight_arrow_color") ) { + QColor c = aResourceMgr->colorValue( section, param, QColor( 0, 0, 255 ) ); + view->setHighlightArrowColor( c ); + } + else if( param == QString("dependency_tree_select_arrow_color") ) { + QColor c = aResourceMgr->colorValue( section, param, QColor( 255, 0, 0 ) ); + view->setSelectArrowColor( c ); + } + + } + } } } diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index 1f2dc8186..3f7f51d4d 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -61,6 +61,7 @@ namespace GEOMOp { OpIsosWidth = 1261, // POPUP MENU - LINE WIDTH - ISOS WIDTH OpCreateFolder = 1262, // POPUP MENU - CREATE FOLDER OpSortChildren = 1263, // POPUP MENU - SORT CHILD ITEMS + OpShowDependencyTree = 1264, // POPUP MENU - SHOW DEPENDENCY TREE // DisplayGUI ------------------//-------------------------------- OpSwitchVectors = 2001, // MENU VIEW - DISPLAY MODE - SHOW/HIDE EDGE DIRECTION OpShowAll = 2002, // MENU VIEW - SHOW ALL diff --git a/src/GEOMToolsGUI/CMakeLists.txt b/src/GEOMToolsGUI/CMakeLists.txt index 143d07826..8d6a756de 100755 --- a/src/GEOMToolsGUI/CMakeLists.txt +++ b/src/GEOMToolsGUI/CMakeLists.txt @@ -38,6 +38,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOMGUI ${PROJECT_SOURCE_DIR}/src/GEOMBase ${PROJECT_SOURCE_DIR}/src/Material + ${PROJECT_SOURCE_DIR}/src/DependencyTree ${CMAKE_CURRENT_SOURCE_DIR} ) @@ -56,6 +57,7 @@ SET(_link_LIBRARIES GEOM GEOMBase Material + DependencyTree ) # --- headers --- diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index daf888e2d..62f145411 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -422,6 +422,8 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) break; case GEOMOp::OpSortChildren: OnSortChildren(); + case GEOMOp::OpShowDependencyTree: + OnShowDependencyTree(); break; default: SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 683fffc7c..a0e1049f7 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -90,6 +90,7 @@ private: void OnClsBringToFront(); void OnCreateFolder(); void OnSortChildren(); + void OnShowDependencyTree(); // Shortcut commands void OnChangeTransparency( bool ); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index ea5f7b1c9..fd817c14a 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -46,6 +46,8 @@ #include #include +#include + #include #include @@ -862,3 +864,8 @@ void GEOMToolsGUI::OnSortChildren() app->updateObjectBrowser( true ); } + +void GEOMToolsGUI::OnShowDependencyTree() +{ + DependencyTree(); +} From 0fd903e83ee17ffc9f010bcd65d9286172ec40c8 Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 23 May 2014 09:11:17 +0400 Subject: [PATCH 005/118] Debug of GetDependencyTree. --- src/DependencyTree/CMakeLists.txt | 7 +- src/DependencyTree/DependencyTree_View.cxx | 20 ++++-- src/GEOMUtils/GEOMUtils.cxx | 60 +++++++--------- src/GEOM_I/GEOM_Gen_i.cc | 81 ++++++++++++++-------- 4 files changed, 97 insertions(+), 71 deletions(-) diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index ac2b89353..9a1fb4398 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -26,13 +26,13 @@ INCLUDE(${QT_USE_FILE}) INCLUDE_DIRECTORIES( ${QT_INCLUDES} ${GUI_INCLUDE_DIRS} - ${CAS_INCLUDE_DIRS} - ${OMNIORB_INCLUDE_DIR} + ${CAS_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src/GEOMGUI ${PROJECT_SOURCE_DIR}/src/GEOMBase - ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOM ${PROJECT_BINARY_DIR}/idl @@ -40,6 +40,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/OBJECT ${PROJECT_SOURCE_DIR}/src/GEOMClient ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/GEOMUtils ${PROJECT_SOURCE_DIR}/src/DlgRef ${PROJECT_BINARY_DIR}/src/DlgRef diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 7c6270f56..82efb1ef2 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -58,6 +58,7 @@ #include #include #include +#include "GEOMUtils.hxx" @@ -85,7 +86,7 @@ myIsUpdate( true ) LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); if ( !aSelMgr ) return; - + SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); @@ -106,7 +107,8 @@ myIsUpdate( true ) GEOM::GEOM_Object_var myObject = GEOM::GEOM_Object::_nil(); myObject = GEOMBase::ConvertIOinGEOMObject( io ); - QString ior = GEOMBase::GetIORFromObject(myObject); + //QString ior = GEOMBase::GetIORFromObject(myObject); + QString ior = myObject->GetEntry(); ObjectIORs[aaa] = ior.toLatin1().constData(); aaa++; @@ -133,12 +135,18 @@ myIsUpdate( true ) // // } + // get dependencies tree as a stream SALOMEDS::TMPFile_var SeqFile = - GeometryGUI::GetGeomGen()->GetDependencyTree( aStudyDS, ObjectIORs ); - char* buf; - buf = (char*) &SeqFile[0]; + GeometryGUI::GetGeomGen()->GetDependencyTree( aStudyDS, ObjectIORs ); + // convert stream into string + char* treeStr; + treeStr = (char*) &SeqFile[0]; - std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; + std::cout << "\n TREE = " << treeStr << std::endl; + + // parse string to deal with 'TreeModel' object + GEOMUtils::TreeModel tree; + GEOMUtils::ConvertStringToTree( treeStr, tree ); } DependencyTree_View::~DependencyTree_View() diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx index 95aca3a39..9412e55e3 100644 --- a/src/GEOMUtils/GEOMUtils.cxx +++ b/src/GEOMUtils/GEOMUtils.cxx @@ -963,6 +963,30 @@ gp_Pnt ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) return ResultPoint; } +void parseWard( const LevelsList &theLevelList, std::string &treeStr ) +{ + treeStr.append( "{" ); + for( LevelsList::const_iterator j = theLevelList.begin(); + j != theLevelList.end(); ++j ) { + if ( j != theLevelList.begin() ) { + treeStr.append( ";" ); + } + LevelInfo level = (*j); + LevelInfo::iterator upIter; + for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { + if ( upIter != level.begin() ) { + treeStr.append( "," ); + } + treeStr.append( upIter->first ); + for ( std::vector::iterator k = upIter->second.begin(); k != upIter->second.end(); ++k ) { + treeStr.append( "_" ); + treeStr.append( *k ); + } + } + } + treeStr.append( "}" ); +} + //======================================================================= // function : ConvertTreeToString() // purpose : Returns the string representation of dependency tree @@ -976,42 +1000,10 @@ void ConvertTreeToString( const TreeModel &tree, treeStr.append( "-" ); std::vector upLevelList = i->second.first; treeStr.append( "upward" ); - treeStr.append( "{" ); - for( std::vector::iterator j = upLevelList.begin(); - j != upLevelList.end(); ++j ) { - LevelInfo level = (*j); - LevelInfo::iterator upIter; - for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { - treeStr.append( upIter->first ); - for ( std::vector::iterator k = upIter->second.begin(); - k != upIter->second.end(); ++k ) { - treeStr.append( "_" ); - treeStr.append( *k ); - } - treeStr.append( upIter++ == level.end() ? ";" : "," ); - upIter--; - } - } - treeStr.append( "}" ); + parseWard( upLevelList, treeStr ); std::vector downLevelList = i->second.second; treeStr.append( "downward" ); - treeStr.append( "{" ); - for( std::vector::iterator j = downLevelList.begin(); - j != downLevelList.end(); ++j ) { - LevelInfo level = (*j); - LevelInfo::iterator downIter; - for ( downIter = level.begin(); downIter != level.end(); ++downIter ) { - treeStr.append( downIter->first ); - for ( std::vector::iterator k = downIter->second.begin(); - k != downIter->second.end(); ++k ) { - treeStr.append( "_" ); - treeStr.append( *k ); - } - treeStr.append( downIter++ == level.end() ? ";" : "," ); - downIter--; - } - } - treeStr.append("}"); + parseWard( downLevelList, treeStr ); } } diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index eca0f4336..cd667ba7f 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3052,7 +3052,7 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, std::string ior; for ( int i = 0; i < theObjectIORs.length(); i++ ) { ior = theObjectIORs[i].in(); - GEOM::GEOM_Object_ptr anObj = GetIORFromString( ior.c_str() ); + GEOM::GEOM_BaseObject_var anObj = GetObject( theStudy->StudyId(), ior.c_str() ); GEOMUtils::LevelsList upLevelList; getUpwardDependency( anObj, upLevelList ); GEOMUtils::LevelsList downLevelList; @@ -3081,23 +3081,38 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &upLevelList, int level ) { - std::string aGboIOR = GetStringFromIOR(GEOM::GEOM_Object::_narrow(gbo)); + std::string aGboIOR = gbo->GetEntry(); + //std::cout << "\n\nAKL: upnode IOR: " << aGboIOR << endl; + //std::cout << "AKL: level: " << level << endl; + GEOMUtils::NodeLinks anIORs; + GEOMUtils::LevelInfo aLevelMap; + if ( level > 0 ) { + if ( level-1 >= upLevelList.size() ) { + upLevelList.push_back( aLevelMap ); + //std::cout << "AKL: new map" << endl; + } else { + aLevelMap = upLevelList.at(level-1); + if ( aLevelMap.count( aGboIOR ) > 0 ) { + anIORs = aLevelMap[ aGboIOR ]; + //std::cout << "AKL: get already added iors list: " << endl; + } + } + } GEOM::ListOfGBO_var depList = gbo->GetDependency(); for( int j = 0; j < depList->length(); j++ ) { if ( level > 0 ) { - GEOMUtils::NodeLinks anIORs; - GEOMUtils::LevelInfo aLevelMap; - if ( level-1 >= upLevelList.size() ) { - upLevelList.push_back( aLevelMap ); - } else { - aLevelMap = upLevelList.at(level-1); - if ( aLevelMap.count( aGboIOR ) > 0 ) - anIORs = aLevelMap[ aGboIOR ]; - } - anIORs.push_back( GetStringFromIOR(GEOM::GEOM_Object::_narrow(depList[j])) ); - aLevelMap.insert( std::pair(aGboIOR, anIORs) ); + anIORs.push_back( depList[j]->GetEntry() ); + //std::cout << "AKL: add link ior: " << depList[j]->GetEntry() << endl; } - getUpwardDependency(depList[j], upLevelList, level++); + //std::cout << "AKL: <<<<<<<< start next step: " << endl; + getUpwardDependency(depList[j], upLevelList, level+1); + //std::cout << "AKL: end next step >>>>>>>> : " << endl; + } + if ( level > 0 ) { + //std::cout << "AKL: insert links for node: " << aGboIOR << endl; + aLevelMap.insert( std::pair(aGboIOR, anIORs) ); + //std::cout << "AKL: insert level map: " << endl; + upLevelList[level-1] = aLevelMap; } } @@ -3113,6 +3128,21 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, if ( !comp ) return; + GEOMUtils::NodeLinks anIORs; + GEOMUtils::LevelInfo aLevelMap; + std::string aGboIOR = gbo->GetEntry(); + if ( level > 0 ) { + if ( level-1 >= downLevelList.size() ) { + downLevelList.push_back( aLevelMap ); + //std::cout << "AKL: new map" << endl; + } else { + aLevelMap = downLevelList.at(level-1); + if ( aLevelMap.count( aGboIOR ) > 0 ) { + anIORs = aLevelMap[ aGboIOR ]; + //std::cout << "AKL: get already added iors list: " << endl; + } + } + } SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator( comp ); for ( it->InitEx( true ); it->More(); it->Next() ) { SALOMEDS::SObject_var child = it->Value(); @@ -3124,25 +3154,20 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, GEOM::ListOfGBO_var depList = geomObj->GetDependency(); if( depList->length() == 0 ) continue; - std::string aGoIOR = GetStringFromIOR( geomObj ); + std::string aGoIOR = geomObj->GetEntry(); for( int i = 0; i < depList->length(); i++ ) { if ( depList[i]->IsSame( gbo ) ) { - GEOMUtils::NodeLinks anIORs; - GEOMUtils::LevelInfo aLevelMap; - if ( level >= downLevelList.size() ) { - aLevelMap = GEOMUtils::LevelInfo(); - downLevelList.push_back( aLevelMap ); - } else { - aLevelMap = downLevelList.at(level); - if ( aLevelMap.count( aGoIOR ) > 0 ) - anIORs = aLevelMap[ aGoIOR ]; - } - anIORs.push_back( GetStringFromIOR(GEOM::GEOM_Object::_narrow(depList[i]))); - aLevelMap.insert( std::pair(aGoIOR, anIORs) ); + if ( level > 0 ) { + anIORs.push_back( geomObj->GetEntry()); + } + getDownwardDependency(theStudy, geomObj, downLevelList, level+1); } } - getDownwardDependency(theStudy, geomObj, downLevelList, level++); + } + if ( level > 0 ) { + aLevelMap.insert( std::pair(aGboIOR, anIORs) ); + downLevelList[level-1] = aLevelMap; } } From 48a0c1cf096942629557bb3cd09ecf2d053e4a4b Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 23 May 2014 10:09:17 +0400 Subject: [PATCH 006/118] Fix the parsing string to tree. --- src/GEOMUtils/GEOMUtils.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx index 9412e55e3..69e474e02 100644 --- a/src/GEOMUtils/GEOMUtils.cxx +++ b/src/GEOMUtils/GEOMUtils.cxx @@ -1024,16 +1024,16 @@ LevelsList parseWard( const std::string& theData, std::size_t& theCursor ) for( int level = 0; level < levelsListStr.size(); level++ ) { std::cout<<" Level" << level + 1 << ":" << std::endl; std::vector namesListStr; - ss.str( levelsListStr[level] ); - while ( std::getline( ss, substr, ',' ) ) { + std::stringstream ss1( levelsListStr[level] ); + while ( std::getline( ss1, substr, ',' ) ) { if ( !substr.empty() ) namesListStr.push_back( substr ); } LevelInfo levelInfoData; for( int node = 0; node < namesListStr.size(); node++ ) { std::vector linksListStr; - ss.str( namesListStr[node] ); - while ( std::getline( ss, substr, '_' ) ) { + std::stringstream ss2( namesListStr[node] ); + while ( std::getline( ss2, substr, '_' ) ) { if ( !substr.empty() ) linksListStr.push_back( substr ); } From a782d52dec860bd9d13f65ccfdad6def082bb92c Mon Sep 17 00:00:00 2001 From: mpa Date: Fri, 23 May 2014 12:09:19 +0400 Subject: [PATCH 007/118] Correction of GUI part --- src/DependencyTree/CMakeLists.txt | 4 +- src/DependencyTree/DependencyTree_Arrow.h | 1 + src/DependencyTree/DependencyTree_Object.cxx | 23 +- src/DependencyTree/DependencyTree_Object.h | 7 +- src/DependencyTree/DependencyTree_View.cxx | 496 ++++++++++--------- src/DependencyTree/DependencyTree_View.h | 91 ++-- src/GEOMToolsGUI/CMakeLists.txt | 1 + 7 files changed, 315 insertions(+), 308 deletions(-) diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 9a1fb4398..30d86cbad 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -32,7 +32,8 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src/GEOMGUI ${PROJECT_SOURCE_DIR}/src/GEOMBase - ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMUtils ${PROJECT_BINARY_DIR}/idl @@ -64,6 +65,7 @@ SET(_link_LIBRARIES ${GUI_GraphicsView} ${GUI_SalomeObject} GEOMUtils + ${KERNEL_SalomeDS} ) # --- headers --- diff --git a/src/DependencyTree/DependencyTree_Arrow.h b/src/DependencyTree/DependencyTree_Arrow.h index abf227540..1518c72ea 100644 --- a/src/DependencyTree/DependencyTree_Arrow.h +++ b/src/DependencyTree/DependencyTree_Arrow.h @@ -26,6 +26,7 @@ class DependencyTree_Object; class DependencyTree_Arrow : public QGraphicsLineItem { + public: DependencyTree_Arrow( DependencyTree_Object* startItem, DependencyTree_Object* endItem, diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx index ab0c2c1fa..0f85a0405 100644 --- a/src/DependencyTree/DependencyTree_Object.cxx +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -19,9 +19,15 @@ #include "DependencyTree_Object.h" +// GEOM includes +#include +#include + // GUI includes #include #include +#include +#include // Qt includes #include @@ -29,7 +35,7 @@ const int itemH = 20; const int itemW = 90; -DependencyTree_Object::DependencyTree_Object( const QString& theEntry, QGraphicsItem* theParent ) +DependencyTree_Object::DependencyTree_Object( const std::string& theEntry, QGraphicsItem* theParent ) :GraphicsView_Object( theParent ), myIsMainObject( false ), myIsLongName( false ) @@ -135,7 +141,7 @@ void DependencyTree_Object::unselect() // function : getEntry() // purpose : get entry of current item //================================================================================= -QString DependencyTree_Object::getEntry() const +std::string DependencyTree_Object::getEntry() const { return myEntry; } @@ -146,9 +152,18 @@ QString DependencyTree_Object::getEntry() const //================================================================================= void DependencyTree_Object::updateName() { - QString name = myEntry; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + SalomeApp_Study* study = dynamic_cast(app->activeStudy()); + SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS()); + int StudyId = aStudyDS->StudyId(); + GEOM::_objref_GEOM_BaseObject* object = GeometryGUI::GetGeomGen()->GetObject( StudyId, myEntry.c_str() ); - setName( myEntry ); + QString name = object->GetName(); + +// QString name = myEntry.c_str(); + + setName( name ); myTextItem->setText( name ); double textWidth = myTextItem->sceneBoundingRect().width(); diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h index 4f4eaf147..da04b6901 100644 --- a/src/DependencyTree/DependencyTree_Object.h +++ b/src/DependencyTree/DependencyTree_Object.h @@ -28,7 +28,8 @@ class DependencyTree_Object: public GraphicsView_Object { public: - DependencyTree_Object( const QString&, QGraphicsItem* = 0 ); + + DependencyTree_Object( const std::string&, QGraphicsItem* = 0 ); ~DependencyTree_Object(); virtual void compute() {}; @@ -39,7 +40,7 @@ public: virtual bool select( double, double, const QRectF& ); virtual void unselect(); - QString getEntry() const; + std::string getEntry() const; void updateName(); @@ -60,7 +61,7 @@ private: QGraphicsPolygonItem* myPolygonItem; QGraphicsSimpleTextItem* myTextItem; - QString myEntry; + std::string myEntry; bool myIsMainObject; bool myIsLongName; diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 82efb1ef2..198a50bc6 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -17,52 +17,30 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include -#include -#include - - #include "DependencyTree_View.h" #include "DependencyTree_Object.h" #include "DependencyTree_Arrow.h" - -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include +#include +#include +#include // GUI includes #include #include - -#include - #include #include +#include #include #include -#include -#include -#include -#include "GEOMUtils.hxx" - - + +// Qt includes +#include +#include +#include +#include int iter = 0; DependencyTree_View::DependencyTree_View( QWidget* theParent ) @@ -77,16 +55,11 @@ myIsUpdate( true ) if ( !app ) return; SalomeApp_Study* study = dynamic_cast(app->activeStudy()); - - _PTR(Study) aStudy = study->studyDS(); - if ( !aStudy ) - return; - - SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy(aStudy); + SALOMEDS::Study_var myStudy = GeometryGUI::ClientStudyToStudy( study->studyDS()); LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); if ( !aSelMgr ) return; - + SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); @@ -96,57 +69,26 @@ myIsUpdate( true ) for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next() ) { Handle( SALOME_InteractiveObject ) io = It.Value(); -// if ( io->IsKind(STANDARD_TYPE(GEOM_InteractiveObject))) { -// Handle(GEOM_InteractiveObject) objectGEOM = Handle(GEOM_InteractiveObject)::DownCast( io ); -// const char* ior = objectGEOM->getIOR(); -// objectGEOM.getEntry(); -// objectGEOM.getName(); -// std::cout << "\n\n\n !!!!! IOR = " << ior << std::endl; -// } GEOM::GEOM_Object_var myObject = GEOM::GEOM_Object::_nil(); myObject = GEOMBase::ConvertIOinGEOMObject( io ); - //QString ior = GEOMBase::GetIORFromObject(myObject); QString ior = myObject->GetEntry(); ObjectIORs[aaa] = ior.toLatin1().constData(); aaa++; std::cout << "\n\n IOR = " << ior.toStdString() << std::endl; -// if ( !CORBA::is_nil( myObject ) ) -// myGrp->LineEdit1->setText( GEOMBase::GetName( myObject ) ); } -// -// SALOME_ListIO selected; -// aSelMgr->selectedObjects( selected ); -// if ( selected.IsEmpty() ) return; -// -// GEOM::string_array ObjectIORs; -// ObjectIORs.lenght( selected.Extent()) -// for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { -// Handle( SALOME_InteractiveObject ) io = It.Value(); -// const char* entry = io->getEntry(); -// ObjectIORs.push_back( entry ); -// //CORBA::String_var IOR = app->orb()->object_to_string( io ); -// //if ( strcmp(IOR.in(), "") != 0 ) -// //{ -//// QString objIOR = GEOMBase::GetIORFromObject( io ); -// //char* GetStringFromIOR(GEOM::GEOM_Object_ptr theObject) -// -// } - // get dependencies tree as a stream SALOMEDS::TMPFile_var SeqFile = - GeometryGUI::GetGeomGen()->GetDependencyTree( aStudyDS, ObjectIORs ); - // convert stream into string - char* treeStr; - treeStr = (char*) &SeqFile[0]; + GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, ObjectIORs ); + char* buf; + buf = (char*) &SeqFile[0]; - std::cout << "\n TREE = " << treeStr << std::endl; + std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; + + GEOMUtils::ConvertStringToTree( buf, myTreeModel ); - // parse string to deal with 'TreeModel' object - GEOMUtils::TreeModel tree; - GEOMUtils::ConvertStringToTree( treeStr, tree ); } DependencyTree_View::~DependencyTree_View() @@ -156,74 +98,133 @@ DependencyTree_View::~DependencyTree_View() void DependencyTree_View::drawArrows() { - QMap >::iterator i; + GEOMUtils::TreeModel::const_iterator i; for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { - DependencyTree_Object* Main_object = myTreeMap[i.key()]; - LevelInfo Levelup = i.value().first.at(0); + DependencyTree_Object* Main_object = myTreeMap[i->first]; + GEOMUtils::LevelInfo Levelup = i->second.first.at(0); if( myDisplayAscendants ->isChecked() ) { - QMap::iterator node; + GEOMUtils::LevelInfo::const_iterator node; for (node = Levelup.begin(); node != Levelup.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node.key()]; - addArrow(Main_object, object); + DependencyTree_Object* object = myTreeMap[node->first]; + DependencyTree_Arrow* arrow = Arrows[std::pair(Main_object, object)]; + if( arrow && !isItemAdded( arrow) ) + addItem( arrow ); } } if( myDisplayAscendants ->isChecked() ) - drawWardArrows( i.value().first ); + drawWardArrows( i->second.first ); if( myDisplayDescendants->isChecked() ) - drawWardArrows( i.value().second ); + drawWardArrows( i->second.second ); } } -void DependencyTree_View::drawWardArrows( LevelsList theWard ) +void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) { for(int j = 0; j < theWard.size(); j++ ) { if( j >= myLevelsNumber ) break; - LevelInfo Level = theWard.at(j); - QMap::iterator node; + GEOMUtils::LevelInfo Level = theWard.at(j); + GEOMUtils::LevelInfo::const_iterator node; for (node = Level.begin(); node != Level.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node.key()]; - QList Links = node.value(); + DependencyTree_Object* object = myTreeMap[node->first]; + GEOMUtils::NodeLinks Links = node->second; for( int link = 0; link < Links.size(); link++ ) { DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; if( isItemAdded( object ) && isItemAdded( LinkObject ) ) { - addArrow(object, LinkObject); - } + DependencyTree_Arrow* arrow = Arrows[std::pair(object, LinkObject)]; + if( arrow && !isItemAdded( arrow) ) + addItem( arrow ); + } } } } } - -void DependencyTree_View::parseData( QString& theData ) +void DependencyTree_View::parseTree() { - int cursor = 0; - while( theData.indexOf('-',cursor) != -1 ) //find next selected object - { - int objectIndex = theData.indexOf( '-', cursor ); - QString objectEntry = theData.mid( cursor, objectIndex - cursor ); - addNode( objectEntry ); - std::cout<<"\n\nMainObject = " << objectEntry.toStdString() <first; + addNode( objectEntry ); + parseTreeWard( i->second.first ); + if( i->second.first.size() > myMaxUpwardLevelsNumber ) + myMaxUpwardLevelsNumber = i->second.first.size(); + parseTreeWard( i->second.second ); + if( i->second.second.size() > myMaxDownwardLevelsNumber ) + myMaxDownwardLevelsNumber = i->second.second.size(); + } + + for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { + DependencyTree_Object* Main_object = myTreeMap[i->first]; + GEOMUtils::LevelInfo Levelup = i->second.first.at(0); + GEOMUtils::LevelInfo::const_iterator node; + for (node = Levelup.begin(); node != Levelup.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node->first]; + addArrow( Main_object, object ); + } + parseTreeWardArrow( i->second.first ); + parseTreeWardArrow( i->second.second ); + } - int upwardIndexBegin = theData.indexOf("{",cursor) + 1; - int upwardIndexFinish = theData.indexOf("}",upwardIndexBegin); - std::cout<<" Upward:" << std::endl; - LevelsList upwardList = parseWard( theData, cursor ); - if( upwardList.size() > myMaxUpwardLevelsNumber ) - myMaxUpwardLevelsNumber = upwardList.size(); - std::cout<<" Downward:" << std::endl; - LevelsList downwardList = parseWard( theData, cursor ); - if( downwardList.size() > myMaxDownwardLevelsNumber ) - myMaxDownwardLevelsNumber = downwardList.size(); - myTreeModel[objectEntry] = QPair( upwardList, downwardList ); - } } +void DependencyTree_View::parseTreeWard(const GEOMUtils::LevelsList theWard) +{ + int levelsNumber = theWard.size(); + for( int level = 0; level < levelsNumber; level++ ) { + GEOMUtils::LevelInfo levelInfo = theWard[ level ]; + GEOMUtils::LevelInfo::const_iterator node; + for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { + addNode( node->first ); + } + } +} +void DependencyTree_View::parseTreeWardArrow(const GEOMUtils::LevelsList theWard) +{ + for(int j = 0; j < theWard.size(); j++ ) { + GEOMUtils::LevelInfo Level = theWard.at(j); + GEOMUtils::LevelInfo::const_iterator node; + for (node = Level.begin(); node != Level.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node->first]; + std::vector Links = node->second; + for( int link = 0; link < Links.size(); link++ ) { + DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; + if( object && LinkObject ) + addArrow( object, LinkObject ); + } + } + } +} +//void DependencyTree_View::parseData( QString& theData ) +//{ +// int cursor = 0; +// +// while( theData.indexOf('-',cursor) != -1 ) //find next selected object +// { +// int objectIndex = theData.indexOf( '-', cursor ); +// QString objectEntry = theData.mid( cursor, objectIndex - cursor ); +// //addNode( objectEntry ); +// std::cout<<"\n\nMainObject = " << objectEntry.toStdString() < myMaxUpwardLevelsNumber ) +// myMaxUpwardLevelsNumber = upwardList.size(); +// std::cout<<" Downward:" << std::endl; +// LevelsList downwardList = parseWard( theData, cursor ); +// if( downwardList.size() > myMaxDownwardLevelsNumber ) +// myMaxDownwardLevelsNumber = downwardList.size(); +// +// myTreeModel[objectEntry] = QPair( upwardList, downwardList ); +// } +//} -void DependencyTree_View::addNode( const QString& theEntry ) +void DependencyTree_View::addNode( const std::string& theEntry ) { if( !myTreeMap[theEntry] ) myTreeMap[theEntry] = new DependencyTree_Object( theEntry ); @@ -233,9 +234,10 @@ void DependencyTree_View::addArrow( DependencyTree_Object *startItem, Dependency { bool isFind = false; - std::cout << " " << startItem->getEntry().toStdString() << " " << endItem->getEntry().toStdString() << std::endl; - for( int i = 0; i < Arrows.size(); i++ ) { - DependencyTree_Arrow* arrow = Arrows.at(i); + std::cout << " " << startItem->getEntry() << " " << endItem->getEntry() << std::endl; + std::map, DependencyTree_Arrow* >::const_iterator i; + for (i = Arrows.begin(); i != Arrows.end(); i++ ) { + DependencyTree_Arrow* arrow = i->second; if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) { isFind = true; std::cout<<" theSame " << std::endl; @@ -249,126 +251,121 @@ void DependencyTree_View::addArrow( DependencyTree_Object *startItem, Dependency if( !isFind ) { DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem); - Arrows.append( arrow ); - addItem(arrow); + //Arrows.append( arrow ); + //addItem(arrow); + Arrows[std::pair( startItem, endItem )] = arrow; std::cout<<" addArrow " << std::endl; } } -DependencyTree_View::LevelsList DependencyTree_View::parseWard( const QString& theData, int& theCursor ) -{ - int indexStart = theData.indexOf( "{", theCursor ) + 1; - int indexEnd = theData.indexOf( "}", indexStart ); - - QString ward = theData.mid( indexStart, indexEnd - indexStart ); - QStringList levelsListStr = ward.split( ';' ); - LevelsList levelsListData; - for( int level = 0; level < levelsListStr.size(); level++ ) { - std::cout<<" Level" << level + 1 << ":" << std::endl; - QStringList namesListStr = levelsListStr[level].split( ',' ); - LevelInfo levelInfoData; - for( int node = 0; node < namesListStr.size(); node++ ) { - QStringList linksListStr = namesListStr[node].split( '_' ); - QString nodeItem = linksListStr[0]; - if( !nodeItem.isEmpty() ) { - addNode( nodeItem ); - NodeLinks linksListData; - std::cout<<" " << nodeItem.toStdString() << " - "; - for( int link = 1; link < linksListStr.size(); link++ ) { - QString linkItem = linksListStr[link]; - addNode( linkItem ); - linksListData.append( linkItem ); - std::cout << linkItem.toStdString() << ", "; - }// Links - levelInfoData[nodeItem] = linksListData; - std::cout << std::endl; - } - }// Level's objects - levelsListData.append(levelInfoData); - }// Levels - - theCursor = indexEnd + 1; - - return levelsListData; -} +//DependencyTree_View::LevelsList DependencyTree_View::parseWard( const QString& theData, int& theCursor ) +//{ +// int indexStart = theData.indexOf( "{", theCursor ) + 1; +// int indexEnd = theData.indexOf( "}", indexStart ); +// +// QString ward = theData.mid( indexStart, indexEnd - indexStart ); +// QStringList levelsListStr = ward.split( ';' ); +// LevelsList levelsListData; +// for( int level = 0; level < levelsListStr.size(); level++ ) { +// std::cout<<" Level" << level + 1 << ":" << std::endl; +// QStringList namesListStr = levelsListStr[level].split( ',' ); +// LevelInfo levelInfoData; +// for( int node = 0; node < namesListStr.size(); node++ ) { +// QStringList linksListStr = namesListStr[node].split( '_' ); +// QString nodeItem = linksListStr[0]; +// if( !nodeItem.isEmpty() ) { +// //addNode( nodeItem ); +// NodeLinks linksListData; +// std::cout<<" " << nodeItem.toStdString() << " - "; +// for( int link = 1; link < linksListStr.size(); link++ ) { +// QString linkItem = linksListStr[link]; +// //addNode( linkItem ); +// linksListData.append( linkItem ); +// std::cout << linkItem.toStdString() << ", "; +// }// Links +// levelInfoData[nodeItem] = linksListData; +// std::cout << std::endl; +// } +// }// Level's objects +// levelsListData.append(levelInfoData); +// }// Levels +// +// theCursor = indexEnd + 1; +// +// return levelsListData; +//} void DependencyTree_View::drawTree() { - int horDistance, verDistance; - myCurrentLevel = 0; - std::cout<<"\n\n\n\n MY TREE MODEL SIZE = " << myTreeModel.size() << std::endl; - std::cout<<"\n\n\n\n MY TREE MAP SIZE = " << myTreeMap.size() << std::endl; - for( int j = 0; j < myTreeModel.keys().size(); j++ ) - std::cout<< " STRING = " << myTreeModel.keys().at(j).toStdString() << std::endl; - QMap >::iterator i; - for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { - myCurrentLevel = 0; - QString objectEntry = i.key(); - std::cout<< " NAME = " << objectEntry.toStdString() << std::endl; - DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; - objectItem->setEnabled(true); - if( objectItem->isEnabled() ) - std::cout<<"OK!!! "<< std::endl; - horDistance = 100 + int( objectItem->boundingRect().width() ); - verDistance = 3 * int( objectItem->boundingRect().height() ); - if( isItemAdded( objectItem ) ) { - myCurrentLevel = myLevelMap[ objectEntry ]; - } - else { - addItem( objectItem ); - std::cout<<"\nLevel = " << myCurrentLevel << " Object = " << objectEntry.toStdString() << std::endl; - myLevelMap[ objectEntry ] = myCurrentLevel; - myLevelsObject[ myCurrentLevel ].append( objectEntry ); - } - objectItem->setIsMainObject( true ); + int horDistance, verDistance; + myCurrentLevel = 0; + GEOMUtils::TreeModel::const_iterator i; + for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { + myCurrentLevel = 0; + std::string objectEntry = i->first; + DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; + horDistance = 100 + int( objectItem->boundingRect().width() ); + verDistance = 3 * int( objectItem->boundingRect().height() ); + if( isItemAdded( objectItem ) ) { + myCurrentLevel = myLevelMap[ objectEntry ]; + } + else { + addItem( objectItem ); + myLevelMap[ objectEntry ] = myCurrentLevel; + myLevelsObject[ myCurrentLevel ].push_back( objectEntry ); + } + objectItem->setIsMainObject( true ); - int levelposition = myCurrentLevel; - if( myDisplayAscendants ->isChecked() ){ - drawWard( i.value().first, -1 ); - myCurrentLevel = levelposition; - } - if( myDisplayDescendants->isChecked() ) - drawWard( i.value().second, 1 ); + int levelposition = myCurrentLevel; + if( myDisplayAscendants ->isChecked() ){ + drawWard( i->second.first, -1 ); + myCurrentLevel = levelposition; + } + if( myDisplayDescendants->isChecked() ) + drawWard( i->second.second, 1 ); + } - //centerOn( objectItem ); - } - - QMap< int, QList >::iterator j; + std::map< int, std::vector >::const_iterator j; for (j = myLevelsObject.begin(); j != myLevelsObject.end(); j++ ) { - int step = -horDistance*( j.value().size() - 1 )/2; - std::cout<<"\n\n LEVEL = " << j.key() << std::endl; - for( int object = 0; object < j.value().size(); object++ ) { + int step = -horDistance*( j->second.size() - 1 )/2; + std::cout<<"\n\n LEVEL = " << j->first << std::endl; + for( int object = 0; object < j->second.size(); object++ ) { if( myIsCompute ) { - std::cout << j.value().at( object ).toStdString() << ", "; - DependencyTree_Object* anObject = myTreeMap[ j.value().at( object ) ]; - anObject->setPos( step, verDistance*j.key() ); + std::cout << j->second.at( object ) << ", "; + DependencyTree_Object* anObject = myTreeMap[ j->second.at( object ) ]; + anObject->setPos( step, verDistance*j->first ); step += horDistance; //sleep(1); } } } + centerOn( scene()->sceneRect().center() ); } -void DependencyTree_View::drawWard( const DependencyTree_View::LevelsList theWard, const int theLevelStep ) +void DependencyTree_View::drawWard( const GEOMUtils::LevelsList theWard, const int theLevelStep ) { + std::cout << "\n\n myLevelsNumber2 = " << myLevelsNumber << std::endl; int levelsNumber = theWard.size(); + std::cout << "\n\n levelsNumber = " << levelsNumber << std::endl; for( int level = 0; level < levelsNumber; level++ ) { if( level >= myLevelsNumber ) return; myCurrentLevel += theLevelStep; - LevelInfo levelInfo = theWard.at( level ); - QMap::iterator node; + GEOMUtils::LevelInfo levelInfo = theWard.at( level ); + GEOMUtils::LevelInfo::const_iterator node; for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[ node.key() ]; + DependencyTree_Object* object = myTreeMap[ node->first ]; if( !isItemAdded( object ) ) { + std::cout<< "\n\n\n addItem = " << object->getEntry() << std::endl; addItem( object ); - myLevelMap[ node.key() ] = myCurrentLevel; - myLevelsObject[ myCurrentLevel ].append( node.key() ); + myLevelMap[ node->first ] = myCurrentLevel; + myLevelsObject[ myCurrentLevel ].push_back( node->first ); } } } + } void DependencyTree_View::onUpdateTree() @@ -377,22 +374,20 @@ void DependencyTree_View::onUpdateTree() myLevelsObject.clear(); - QMap::iterator i; + std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i.key() ]; + DependencyTree_Object* object = myTreeMap[ i->first ]; if( isItemAdded( object ) && object ) removeItem( object ); } - - std::cout<<"\n\n\n\n ARROWS = " << Arrows.size() << std::endl; - - for(int j = 0; j, DependencyTree_Arrow* >::const_iterator j; + for (j = Arrows.begin(); j != Arrows.end(); j++ ) { + DependencyTree_Arrow* object = Arrows[ j->first ]; + if( isItemAdded( object ) && object ) + removeItem( object ); + } drawTree(); drawArrows(); @@ -413,13 +408,26 @@ int DependencyTree_View::checkMaxLevelsNumber() void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) { SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - QString Data = "MainObject1-upward{up11_up21_up22,up12_up23,up13_up24;up21_up11,up22_up21_up12,up23_up23,up24}" + + std::string Data = "MainObject1-upward{up11_up21_up22,up12_up23,up13_up24;up21_up11,up22_up21_up12,up23_up23,up24}" "downward{down11_MainObject1,down12_MainObject1;down21_down11,down22_down12,down23_down12,down24_down24_down11,down25_down12;down31_down11_down23,down32_down25}" "down23-upward{down12_MainObject1;MainObject1_up11_up12_up13;up11_up21_up22,up12_up23,up13_up24;up21,up22_up21_up12,up23,up24}" "downward{down31_down11_down23}" - "MainObject2-upward{up21,newup11_newup31,newup12_newup21;newup21_newup31LongName;newup31LongName}downward{newdown11_MainObject2,newdown12_MainObject2,newdown13_MainObject2;newdown21_newdown13,down21;newdown31_newdown11}"; + "MainObject2-upward{up21,newup11_newup31,newup12_newup21;newup21_newup31LongName;newup31LongName}downward{newdown11_MainObject2,newdown12_MainObject2,newdown13_MainObject2;newdown21_newdown13,down21;newdown31_newdown11}" + "MainObject3-upward{moUP1_moUP4,moUP2_moUP3;moUP4,moUP3_down23}downward{moDOWN1_MainObject3}"; - parseData( Data ); + + //GEOMUtils::ConvertStringToTree( Data, myTreeModel ); + + + +// GEOMUtils::TreeModel::const_iterator i; +// for ( i = aTreeModel.begin(); i != aTreeModel.end(); i++ ) { +// std::string objectEntry = i->first; +// std::cout << "\n\n Main object = " << objectEntry << std::endl; +// } +// parseData( Data ); + parseTree(); myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) ); @@ -436,6 +444,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) ShowChildrenAction->setDefaultWidget( myDisplayDescendants ); myLevelsNumber = checkMaxLevelsNumber(); + std::cout << "\n\n myLevelsNumber1 = " << myLevelsNumber << std::endl; myHierarchyDepth = new QSpinBox(); myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); myHierarchyDepth->setValue( 0 ); @@ -497,10 +506,11 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) { - QMap::iterator i; + std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i.key() ]; - object->setMovable( theIsMoveNodes ); + DependencyTree_Object* object = myTreeMap[ i->first ]; + if( object ) + object->setMovable( theIsMoveNodes ); } } @@ -527,22 +537,21 @@ void DependencyTree_View::updateView() myLevelsObject.clear(); - QMap::iterator i; + std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i.key() ]; + DependencyTree_Object* object = myTreeMap[ i->first ]; if( isItemAdded( object ) && object ) removeItem( object ); } - std::cout<<"\n\n\n\n ARROWS = " << Arrows.size() << std::endl; - - for(int j = 0; j, DependencyTree_Arrow* >::const_iterator j; + for (j = Arrows.begin(); j != Arrows.end(); j++ ) { + DependencyTree_Arrow* object = Arrows[ j->first ]; + if( isItemAdded( object ) && object ) + removeItem( object ); + } @@ -638,51 +647,54 @@ void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor ) void DependencyTree_View::setNodeColor( const QColor& theColor ) { - QMap::iterator i; + std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i.key() ]; + DependencyTree_Object* object = myTreeMap[ i->first ]; object->setColor( theColor ); } } void DependencyTree_View::setMainNodeColor( const QColor& theColor ) { - QMap::iterator i; + std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i.key() ]; + DependencyTree_Object* object = myTreeMap[ i->first ]; object->setMainObjectColor( theColor ); } } void DependencyTree_View::setSelectNodeColor( const QColor& theColor ) { - QMap::iterator i; + std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i.key() ]; + DependencyTree_Object* object = myTreeMap[ i->first ]; object->setSelectColor( theColor ); } } void DependencyTree_View::setArrowColor( const QColor& theColor ) { - for( int i = 0; i < Arrows.size(); i++ ) { - DependencyTree_Arrow* arrow = Arrows[i]; + std::map, DependencyTree_Arrow* >::const_iterator j; + for (j = Arrows.begin(); j != Arrows.end(); j++ ) { + DependencyTree_Arrow* arrow = Arrows[ j->first ]; arrow->setColor( theColor ); } } void DependencyTree_View::setHighlightArrowColor( const QColor& theColor ) { - for( int i = 0; i < Arrows.size(); i++ ) { - DependencyTree_Arrow* arrow = Arrows[i]; + std::map, DependencyTree_Arrow* >::const_iterator j; + for (j = Arrows.begin(); j != Arrows.end(); j++ ) { + DependencyTree_Arrow* arrow = Arrows[ j->first ]; arrow->setHighlightColor( theColor ); } } void DependencyTree_View::setSelectArrowColor( const QColor& theColor ) { - for( int i = 0; i < Arrows.size(); i++ ) { - DependencyTree_Arrow* arrow = Arrows[i]; + std::map, DependencyTree_Arrow* >::const_iterator j; + for (j = Arrows.begin(); j != Arrows.end(); j++ ) { + DependencyTree_Arrow* arrow = Arrows[ j->first ]; arrow->setSelectColor( theColor ); } } diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 02d0e322e..059770757 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -23,32 +23,28 @@ #include #include -#include -#include -#include -#include -#include +#include + #include +#include #include #include #include #include -#include - -#include "DependencyTree_Arrow.h" class DependencyTree_Object; +class DependencyTree_Arrow; class DependencyTree_View; - class DependencyTree_ComputeDlg_QThread : public QThread { Q_OBJECT public: - DependencyTree_ComputeDlg_QThread(DependencyTree_View*); - bool result(); - void cancel(); + + DependencyTree_ComputeDlg_QThread( DependencyTree_View* ); + bool result(); + void cancel(); DependencyTree_View* getView() { return myView; }; @@ -61,11 +57,11 @@ private: class DependencyTree_View: public GraphicsView_ViewPort { - Q_OBJECT + Q_OBJECT + public: - - DependencyTree_View( QWidget* theParent=0 ); + DependencyTree_View( QWidget* = 0 ); ~DependencyTree_View(); void setHierarchyType( const int ); @@ -78,18 +74,18 @@ public: void setHighlightArrowColor( const QColor& ); void setSelectArrowColor( const QColor& ); - typedef QList NodeLinks; - typedef QMap LevelInfo; - typedef QList LevelsList; - typedef QMap > TreeModel; +// typedef QList NodeLinks; +// typedef QMap LevelInfo; +// typedef QList LevelsList; +// typedef QMap > TreeModel; - TreeModel myTreeModel; - QMap myTreeMap; - QList Arrows; + GEOMUtils::TreeModel myTreeModel; + std::map myTreeMap; + std::map,DependencyTree_Arrow*> Arrows; - QMap myLevelMap; + std::map myLevelMap; - QMap< int, QList > myLevelsObject; + std::map< int, std::vector > myLevelsObject; int myCurrentLevel; void init( GraphicsView_ViewFrame* ); @@ -112,15 +108,20 @@ private slots: void onCancel(); private: - void parseData( QString& data ); - void addNode( const QString& entry ); +// void parseData( QString& data ); + + void parseTree(); + void parseTreeWard(const GEOMUtils::LevelsList); + void parseTreeWardArrow(const GEOMUtils::LevelsList); + + void addNode( const std::string& entry ); void addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ); void findArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ); - DependencyTree_View::LevelsList parseWard( const QString& data, int& cursor ); +// GEOMUtils::LevelsList parseWard( const QString& data, int& cursor ); void drawTree(); - void drawWard( DependencyTree_View::LevelsList ward, const int levelStep ); + void drawWard( GEOMUtils::LevelsList ward, const int levelStep ); void drawArrows(); - void drawWardArrows( LevelsList ); + void drawWardArrows( GEOMUtils::LevelsList ); int checkMaxLevelsNumber(); int myLevelsNumber; @@ -132,7 +133,7 @@ private: QCheckBox* myDisplayAscendants; QCheckBox* myDisplayDescendants; - QString myData; + std::string myData; bool myIsUpdate; @@ -145,34 +146,8 @@ private: QWidgetAction* cancelAction; QWidgetAction* progressAction; + //SALOMEDS::Study_var myStudy; + }; - - -///*! -// * \brief Dialog to display Cancel button -// */ -// -//class DependencyTree_ComputeDlg_QThreadQDialog : public QDialog -//{ -// Q_OBJECT -// -//public: -// DependencyTree_ComputeDlg_QThreadQDialog(QWidget* parent, DependencyTree_View*); -// bool result(); -// -//protected: -// void timerEvent(QTimerEvent *timer); -// void closeEvent(QCloseEvent *event); -// -//private slots: -// void onCancel(); -// -//private: -// -// DependencyTree_ComputeDlg_QThread qthread; -// QPushButton * cancelButton; -// QProgressBar* progressBar; -//}; - #endif diff --git a/src/GEOMToolsGUI/CMakeLists.txt b/src/GEOMToolsGUI/CMakeLists.txt index 8d6a756de..7861b2f37 100755 --- a/src/GEOMToolsGUI/CMakeLists.txt +++ b/src/GEOMToolsGUI/CMakeLists.txt @@ -39,6 +39,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOMBase ${PROJECT_SOURCE_DIR}/src/Material ${PROJECT_SOURCE_DIR}/src/DependencyTree + ${PROJECT_SOURCE_DIR}/src/GEOMUtils ${CMAKE_CURRENT_SOURCE_DIR} ) From e39d0de8bc80f6a1a52a086edb9fd131bc2dfddb Mon Sep 17 00:00:00 2001 From: mpa Date: Fri, 23 May 2014 15:43:01 +0400 Subject: [PATCH 008/118] Correction 2 of GUI part --- src/DependencyTree/DependencyTree_Object.cxx | 10 ++- src/DependencyTree/DependencyTree_View.cxx | 71 ++++++++++++++++---- src/DependencyTree/DependencyTree_View.h | 2 + 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx index 0f85a0405..2f839df33 100644 --- a/src/DependencyTree/DependencyTree_Object.cxx +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -152,6 +152,7 @@ std::string DependencyTree_Object::getEntry() const //================================================================================= void DependencyTree_Object::updateName() { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; SalomeApp_Study* study = dynamic_cast(app->activeStudy()); @@ -160,8 +161,15 @@ void DependencyTree_Object::updateName() GEOM::_objref_GEOM_BaseObject* object = GeometryGUI::GetGeomGen()->GetObject( StudyId, myEntry.c_str() ); QString name = object->GetName(); + QString StudyEntry = object->GetStudyEntry(); + std::cout << "\n\n\n StudyEntry = " << StudyEntry.toStdString() << " " << StudyEntry.isEmpty() << std::endl; -// QString name = myEntry.c_str(); + + if( StudyEntry.isEmpty() ) { + if( name.isEmpty() ) + name = "unpublished"; + myColor = resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ); + } setName( name ); diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 198a50bc6..9a3a50774 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -101,16 +101,18 @@ void DependencyTree_View::drawArrows() GEOMUtils::TreeModel::const_iterator i; for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { DependencyTree_Object* Main_object = myTreeMap[i->first]; - GEOMUtils::LevelInfo Levelup = i->second.first.at(0); - if( myDisplayAscendants ->isChecked() ) { - GEOMUtils::LevelInfo::const_iterator node; - for (node = Levelup.begin(); node != Levelup.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; - DependencyTree_Arrow* arrow = Arrows[std::pair(Main_object, object)]; - if( arrow && !isItemAdded( arrow) ) - addItem( arrow ); + if( i->second.first.size() > 0 ) { + GEOMUtils::LevelInfo Levelup = i->second.first.at(0); + if( myDisplayAscendants ->isChecked() ) { + GEOMUtils::LevelInfo::const_iterator node; + for (node = Levelup.begin(); node != Levelup.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node->first]; + DependencyTree_Arrow* arrow = Arrows[std::pair(Main_object, object)]; + if( arrow && !isItemAdded( arrow) ) + addItem( arrow ); + } } - } + } if( myDisplayAscendants ->isChecked() ) drawWardArrows( i->second.first ); if( myDisplayDescendants->isChecked() ) @@ -158,11 +160,13 @@ void DependencyTree_View::parseTree() for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { DependencyTree_Object* Main_object = myTreeMap[i->first]; - GEOMUtils::LevelInfo Levelup = i->second.first.at(0); - GEOMUtils::LevelInfo::const_iterator node; - for (node = Levelup.begin(); node != Levelup.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; - addArrow( Main_object, object ); + if( i->second.first.size() > 0 ) { + GEOMUtils::LevelInfo Levelup = i->second.first.at(0); + GEOMUtils::LevelInfo::const_iterator node; + for (node = Levelup.begin(); node != Levelup.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node->first]; + addArrow( Main_object, object ); + } } parseTreeWardArrow( i->second.first ); parseTreeWardArrow( i->second.second ); @@ -699,6 +703,45 @@ void DependencyTree_View::setSelectArrowColor( const QColor& theColor ) } } +int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) +{ + GraphicsView_ViewPort::select( theRect, theIsAppend ); + +// SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); +// +// LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); +// +// // get selection +// SALOME_ListIO listIO; +// +// SalomeApp_Study* study = dynamic_cast(app->activeStudy()); +// SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS()); +// int StudyId = aStudyDS->StudyId(); +// for( initSelected(); moreSelected(); nextSelected() ) +// if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { +// +// _PTR(SObject) SO ( aStudyDS->FindObjectID( aDepObject->getEntry().c_str() ) ); +// if ( SO ) { //;&& QString(SO->GetID().c_str()) == QString(SO->GetFatherComponent()->GetID().c_str()) ) { +// _PTR(SComponent) SC ( SO->GetFatherComponent() ); +// // if component is selected +// _PTR(ChildIterator) anIter ( aStudyDS->NewChildIterator( SO ) ); +// anIter->InitEx( true ); +// while( anIter->More() ) { +// _PTR(SObject) valSO ( anIter->Value() ); +// _PTR(SObject) refSO; +// if ( !valSO->ReferencedObject( refSO ) ) { +// listIO.Append( new SALOME_InteractiveObject(valSO->GetID().c_str(), +// SC->ComponentDataType().c_str(), +// valSO->GetName().c_str()) ); +// } +// anIter->Next(); +// } +// break; +// } +// } +// aSelMgr->setSelectedObjects( listIO, true ); +} + //================================================================================ //================================================================================ diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 059770757..97d5811b5 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -74,6 +74,8 @@ public: void setHighlightArrowColor( const QColor& ); void setSelectArrowColor( const QColor& ); + virtual int select( const QRectF&, bool ); + // typedef QList NodeLinks; // typedef QMap LevelInfo; // typedef QList LevelsList; From 30c1376c61e8e9637017df1932c41412bc069b9b Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 23 May 2014 15:55:57 +0400 Subject: [PATCH 009/118] Fix of self depending case. --- src/GEOM_I/GEOM_Gen_i.cc | 45 +++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index cd667ba7f..e982b12b8 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3105,7 +3105,9 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, //std::cout << "AKL: add link ior: " << depList[j]->GetEntry() << endl; } //std::cout << "AKL: <<<<<<<< start next step: " << endl; - getUpwardDependency(depList[j], upLevelList, level+1); + if ( !depList[j]->IsSame( gbo ) ) { + getUpwardDependency(depList[j], upLevelList, level+1); + } //std::cout << "AKL: end next step >>>>>>>> : " << endl; } if ( level > 0 ) { @@ -3128,21 +3130,20 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, if ( !comp ) return; - GEOMUtils::NodeLinks anIORs; - GEOMUtils::LevelInfo aLevelMap; std::string aGboIOR = gbo->GetEntry(); - if ( level > 0 ) { - if ( level-1 >= downLevelList.size() ) { + cout << "for " << aGboIOR << " at level " << level << endl; + /*if ( level > 0 ) { + if ( level >= downLevelList.size() ) { downLevelList.push_back( aLevelMap ); //std::cout << "AKL: new map" << endl; } else { - aLevelMap = downLevelList.at(level-1); + aLevelMap = downLevelList.at(level); if ( aLevelMap.count( aGboIOR ) > 0 ) { anIORs = aLevelMap[ aGboIOR ]; //std::cout << "AKL: get already added iors list: " << endl; } } - } + }*/ SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator( comp ); for ( it->InitEx( true ); it->More(); it->Next() ) { SALOMEDS::SObject_var child = it->Value(); @@ -3155,20 +3156,40 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, if( depList->length() == 0 ) continue; std::string aGoIOR = geomObj->GetEntry(); + //cout << "check " << aGoIOR << endl; for( int i = 0; i < depList->length(); i++ ) { + //cout << "depends on " << depList[i]->GetEntry() << endl; if ( depList[i]->IsSame( gbo ) ) { - if ( level > 0 ) { - anIORs.push_back( geomObj->GetEntry()); + //cout << " the same! " << endl; + //if ( level > 0 ) { + GEOMUtils::NodeLinks anIORs; + GEOMUtils::LevelInfo aLevelMap; + anIORs.push_back( gbo->GetEntry()); + if ( level >= downLevelList.size() ) { + downLevelList.push_back( aLevelMap ); + //std::cout << "AKL: new map" << endl; + } else { + aLevelMap = downLevelList.at(level); + if ( aLevelMap.count( aGoIOR ) > 0 ) { + anIORs = aLevelMap[ aGoIOR ]; + //std::cout << "AKL: get already added iors list: " << endl; + } + } + aLevelMap.insert( std::pair(aGoIOR, anIORs) ); + downLevelList[level] = aLevelMap; + //} + if ( !depList[i]->IsSame( geomObj ) ) { + //cout << " go on! " << endl; + getDownwardDependency(theStudy, geomObj, downLevelList, level+1); } - getDownwardDependency(theStudy, geomObj, downLevelList, level+1); } } } - if ( level > 0 ) { + /*if ( level > 0 ) { aLevelMap.insert( std::pair(aGboIOR, anIORs) ); downLevelList[level-1] = aLevelMap; - } + }*/ } //===================================================================================== From 328ea5246ced56e456cb8297b0ff1cd0465e6a4a Mon Sep 17 00:00:00 2001 From: mpa Date: Fri, 23 May 2014 17:04:32 +0400 Subject: [PATCH 010/118] Add object selection in Dependency Tree --- src/DependencyTree/DependencyTree_View.cxx | 70 +++++++++++----------- src/DependencyTree/DependencyTree_View.h | 2 + 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 9a3a50774..4785f4101 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -89,6 +89,7 @@ myIsUpdate( true ) GEOMUtils::ConvertStringToTree( buf, myTreeModel ); + aSelMgr->clearSelected(); } DependencyTree_View::~DependencyTree_View() @@ -345,6 +346,7 @@ void DependencyTree_View::drawTree() } } centerOn( scene()->sceneRect().center() ); + fitAll( true ); } @@ -362,7 +364,6 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList theWard, const i for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { DependencyTree_Object* object = myTreeMap[ node->first ]; if( !isItemAdded( object ) ) { - std::cout<< "\n\n\n addItem = " << object->getEntry() << std::endl; addItem( object ); myLevelMap[ node->first ] = myCurrentLevel; myLevelsObject[ myCurrentLevel ].push_back( node->first ); @@ -506,6 +507,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); + } void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) @@ -564,7 +566,11 @@ void DependencyTree_View::updateView() qthread = new DependencyTree_ComputeDlg_QThread(this);// = DependencyTree_ComputeDlg_QThread(this);// const_cast(this) ); cancelAction->setVisible( true ); progressAction->setVisible(true); - startTimer(100); // millisecs + myNodesMovable->setEnabled(false); + myHierarchyDepth->setEnabled( false); + myDisplayAscendants->setEnabled( false ); + myDisplayDescendants->setEnabled( false ); + myTimer = startTimer(100); // millisecs qthread->start(); } @@ -578,6 +584,10 @@ void DependencyTree_View::onCancel() qthread->cancel(); cancelButton->setText( tr("CANCELING")); cancelButton->setEnabled(false); + killTimer( myTimer ); + qthread->killTimer( myTimer ); + qthread->deleteLater(); + } void DependencyTree_View::timerEvent(QTimerEvent *event) @@ -592,6 +602,10 @@ void DependencyTree_View::timerEvent(QTimerEvent *event) progressAction->setVisible(false); cancelButton->setText( tr("CANCEL")); cancelButton->setEnabled(true); + myNodesMovable->setEnabled( true ); + myHierarchyDepth->setEnabled( true ); + myDisplayAscendants->setEnabled( true ); + myDisplayDescendants->setEnabled( true ); } event->accept(); @@ -707,39 +721,25 @@ int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) { GraphicsView_ViewPort::select( theRect, theIsAppend ); -// SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); -// -// LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); -// -// // get selection -// SALOME_ListIO listIO; -// -// SalomeApp_Study* study = dynamic_cast(app->activeStudy()); -// SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS()); -// int StudyId = aStudyDS->StudyId(); -// for( initSelected(); moreSelected(); nextSelected() ) -// if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { -// -// _PTR(SObject) SO ( aStudyDS->FindObjectID( aDepObject->getEntry().c_str() ) ); -// if ( SO ) { //;&& QString(SO->GetID().c_str()) == QString(SO->GetFatherComponent()->GetID().c_str()) ) { -// _PTR(SComponent) SC ( SO->GetFatherComponent() ); -// // if component is selected -// _PTR(ChildIterator) anIter ( aStudyDS->NewChildIterator( SO ) ); -// anIter->InitEx( true ); -// while( anIter->More() ) { -// _PTR(SObject) valSO ( anIter->Value() ); -// _PTR(SObject) refSO; -// if ( !valSO->ReferencedObject( refSO ) ) { -// listIO.Append( new SALOME_InteractiveObject(valSO->GetID().c_str(), -// SC->ComponentDataType().c_str(), -// valSO->GetName().c_str()) ); -// } -// anIter->Next(); -// } -// break; -// } -// } -// aSelMgr->setSelectedObjects( listIO, true ); + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + + // get selection + SALOME_ListIO listIO; +aSelMgr->clearSelected(); + SalomeApp_Study* study = dynamic_cast(app->activeStudy()); + SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS()); + int StudyId = aStudyDS->StudyId(); + for( initSelected(); moreSelected(); nextSelected() ) + if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { + GEOM::_objref_GEOM_BaseObject* object = GeometryGUI::GetGeomGen()->GetObject( StudyId, aDepObject->getEntry().c_str() ); + CORBA::String_var aChildEntry = object->GetStudyEntry(); + Handle(SALOME_InteractiveObject) tmpIO = + new SALOME_InteractiveObject( aChildEntry.in(), "GEOM", "TEMP_IO"); + listIO.Append(tmpIO); + } + aSelMgr->setSelectedObjects( listIO, true ); } //================================================================================ diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 97d5811b5..19c5d0b23 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -137,6 +137,8 @@ private: std::string myData; + int myTimer; + bool myIsUpdate; GraphicsView_ViewFrame* myViewFrame; From ff4c9a27179d5b56d2a6b4c66c7dff15a0fef4d9 Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 28 May 2014 09:11:20 +0400 Subject: [PATCH 011/118] Implementation of 'Show' and 'Show Only' actions from popup menu for selected objects in Dependency tree. --- src/DependencyTree/CMakeLists.txt | 2 +- .../DependencyTree_ViewModel.cxx | 83 ++++++++++++++++++- src/DependencyTree/DependencyTree_ViewModel.h | 4 + 3 files changed, 84 insertions(+), 5 deletions(-) diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 30d86cbad..36d212005 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -74,12 +74,12 @@ SET(DependencyTree_HEADERS DependencyTree.h DependencyTree_Object.h DependencyTree_Arrow.h - DependencyTree_ViewModel.h ) # header files / to be processed by moc SET(_moc_HEADERS DependencyTree_View.h + DependencyTree_ViewModel.h ) # --- sources --- diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index deb504074..b3301b981 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -17,14 +17,24 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include - #include "DependencyTree_ViewModel.h" -#include "DependencyTree_View.h" +#include "DependencyTree_View.h" +#include "GEOM_Displayer.h" + +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include DependencyTree_ViewModel::DependencyTree_ViewModel( const QString& title ) @@ -42,6 +52,68 @@ DependencyTree_ViewModel::~DependencyTree_ViewModel() { } +void activateOCCViewer() { +} + +void DependencyTree_ViewModel::onShowSelected() +{ + std::cout<<"\n\n\n\n *****onShowSelected " << std::endl; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + app->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true); + + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; + + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + + SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); + GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); + + OCCViewer_ViewManager* anOCCVM = (OCCViewer_ViewManager*) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/true ); + + if ( SUIT_ViewModel* vmod = anOCCVM->getViewModel() ) { + if ( SALOME_View* aViewFrame = dynamic_cast( vmod ) ) { + SALOME_ListIteratorOfListIO Iter( aSelList ); + for ( ; Iter.More(); Iter.Next() ) { + disp->Display( Iter.Value(), false, aViewFrame ); + } + aViewFrame->Repaint(); + } + } +} + +void DependencyTree_ViewModel::onShowOnlySelected() +{ + std::cout<<"\n\n\n\n *****onShowOnlySelected " << std::endl; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; + + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + + SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); + GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); + + OCCViewer_ViewManager* anOCCVM = (OCCViewer_ViewManager*) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/true ); + + if ( SUIT_ViewModel* vmod = anOCCVM->getViewModel() ) { + if ( SALOME_View* aViewFrame = dynamic_cast( vmod ) ) { + disp->EraseAll( true, false, aViewFrame ); + SALOME_ListIteratorOfListIO Iter( aSelList ); + for ( ; Iter.More(); Iter.Next() ) { + disp->Display( Iter.Value(), false, aViewFrame ); + } + aViewFrame->Repaint(); + } + } +} + void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) { GraphicsView_Viewer::contextMenuPopup( theMenu ); @@ -51,12 +123,15 @@ void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) { int aNbSelected = aViewPort->nbSelected(); std::cout<<"\n aNbSelected " << aNbSelected << std::endl; + if( aNbSelected > 0 ) { + theMenu->addAction( tr( "MEN_DISPLAY" ), this, SLOT( onShowSelected() ) ); + theMenu->addAction( tr( "MEN_DISPLAY_ONLY" ), this, SLOT( onShowOnlySelected() ) ); + } } } - //SUIT_ViewWindow* DependencyTree_ViewModel::createView( SUIT_Desktop* theDesktop ) //{ // DependencyTree_ViewWindow* aViewFrame; diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h index 3223a00dc..e41fd8156 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.h +++ b/src/DependencyTree/DependencyTree_ViewModel.h @@ -22,6 +22,7 @@ class DependencyTree_ViewModel: public GraphicsView_Viewer { + Q_OBJECT public: @@ -35,5 +36,8 @@ public: // static QString Type() { return "DependencyTree"; } +private slots: + void onShowSelected(); + void onShowOnlySelected(); }; From 2bda43c6b29609d3fce84dae90fcc2862ecc0518 Mon Sep 17 00:00:00 2001 From: mpa Date: Wed, 28 May 2014 15:06:55 +0400 Subject: [PATCH 012/118] - add new method for view - edit the work of thread --- src/DependencyTree/CMakeLists.txt | 2 +- src/DependencyTree/DependencyTree.cxx | 6 +- src/DependencyTree/DependencyTree_Arrow.cxx | 21 +- src/DependencyTree/DependencyTree_Arrow.h | 2 + src/DependencyTree/DependencyTree_Object.cxx | 42 +- src/DependencyTree/DependencyTree_Object.h | 46 +- src/DependencyTree/DependencyTree_View.cxx | 1175 ++++++++---------- src/DependencyTree/DependencyTree_View.h | 93 +- 8 files changed, 630 insertions(+), 757 deletions(-) diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 36d212005..2ab2bc271 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -72,8 +72,8 @@ SET(_link_LIBRARIES SET(DependencyTree_HEADERS DependencyTree.h - DependencyTree_Object.h DependencyTree_Arrow.h + DependencyTree_Object.h ) # header files / to be processed by moc diff --git a/src/DependencyTree/DependencyTree.cxx b/src/DependencyTree/DependencyTree.cxx index c3de20da4..6fdc892ba 100644 --- a/src/DependencyTree/DependencyTree.cxx +++ b/src/DependencyTree/DependencyTree.cxx @@ -73,7 +73,11 @@ DependencyTree::DependencyTree() svm->setTitle("DEPENDENCY_TREE"); } else { - svm->getActiveView()->setFocus(); + if( DependencyTree_ViewModel* viewModel = dynamic_cast( svm->getViewModel() ) ) + if( DependencyTree_View* view = dynamic_cast( viewModel->getActiveViewPort() ) ) { + svm->getActiveView()->setFocus(); + view->updateModel(); + } } diff --git a/src/DependencyTree/DependencyTree_Arrow.cxx b/src/DependencyTree/DependencyTree_Arrow.cxx index 3f6925ad8..f403cd906 100644 --- a/src/DependencyTree/DependencyTree_Arrow.cxx +++ b/src/DependencyTree/DependencyTree_Arrow.cxx @@ -48,6 +48,7 @@ myEndItem( theEndItem ) myStartItem = theStartItem; myEndItem = theEndItem; + myLine = QLineF( myStartItem->pos(), myEndItem->pos() ); myArrowHead = createArrowHead( myStartItem->pos(), myEndItem->pos() ); myReverseArrowHead = createArrowHead( myEndItem->pos(), myStartItem->pos() ); @@ -79,8 +80,8 @@ QRectF DependencyTree_Arrow::boundingRect() const } else { extra = ( pen().width() + 20 ) / 2.0; - boundingRect = QRectF( line().p1(), QSizeF( line().p2().x() - line().p1().x(), - line().p2().y() - line().p1().y() ) ); + boundingRect = QRectF( myLine.p1(), QSizeF( myLine.p2().x() - myLine.p1().x(), + myLine.p2().y() - myLine.p1().y() ) ); } return boundingRect.normalized().adjusted( -extra, -extra, extra, extra ); } @@ -209,7 +210,7 @@ void DependencyTree_Arrow::paint( QPainter* painter, const QStyleOptionGraphicsI myArrowHead = createArrowHead( myStartItem->pos(), myEndItem->pos() ); myReverseArrowHead = createArrowHead( myEndItem->pos(), myStartItem->pos() ); - painter->drawLine( line() ); + painter->drawLine( myLine ); painter->drawPolygon( myArrowHead ); if( myIsBiLink ) painter->drawPolygon( myReverseArrowHead ); @@ -238,21 +239,21 @@ QPolygonF DependencyTree_Arrow::createArrowHead( QPointF theStartPoint, QPointF break; p1 = p2; } - setLine( QLineF( intersectPoint, theStartPoint ) ); + myLine = QLineF( intersectPoint, theStartPoint ); } else - setLine( QLineF( theEndPoint, theStartPoint ) ); + myLine = QLineF( theEndPoint, theStartPoint ); - double angle = acos(line().dx() / line().length()); - if( line().dy() >= 0 ) + double angle = acos(myLine.dx() / myLine.length()); + if( myLine.dy() >= 0 ) angle = ( M_PI * 2 ) - angle; - QPointF arrowP1 = line().p1() + QPointF( sin( angle + M_PI / 3 ) * arrowSize, + QPointF arrowP1 = myLine.p1() + QPointF( sin( angle + M_PI / 3 ) * arrowSize, cos( angle + M_PI / 3 ) * arrowSize ); - QPointF arrowP2 = line().p1() + QPointF( sin( angle + M_PI - M_PI / 3 ) * arrowSize, + QPointF arrowP2 = myLine.p1() + QPointF( sin( angle + M_PI - M_PI / 3 ) * arrowSize, cos( angle + M_PI - M_PI / 3 ) * arrowSize ); QPolygonF anArrowHead; - anArrowHead << line().p1() << arrowP1 << arrowP2; + anArrowHead << myLine.p1() << arrowP1 << arrowP2; return anArrowHead; } diff --git a/src/DependencyTree/DependencyTree_Arrow.h b/src/DependencyTree/DependencyTree_Arrow.h index 1518c72ea..087755651 100644 --- a/src/DependencyTree/DependencyTree_Arrow.h +++ b/src/DependencyTree/DependencyTree_Arrow.h @@ -67,6 +67,8 @@ private: QRectF mySelfDependencyArrow; + QLineF myLine; + }; #endif diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx index 2f839df33..21d2f7971 100644 --- a/src/DependencyTree/DependencyTree_Object.cxx +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -37,8 +37,7 @@ const int itemW = 90; DependencyTree_Object::DependencyTree_Object( const std::string& theEntry, QGraphicsItem* theParent ) :GraphicsView_Object( theParent ), -myIsMainObject( false ), -myIsLongName( false ) +myIsMainObject( false ) { SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); @@ -61,6 +60,13 @@ myIsLongName( false ) myTextItem->setFont( textFont ); myEntry = theEntry; + + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + SalomeApp_Study* study = dynamic_cast(app->activeStudy()); + int studyId = GeometryGUI::ClientStudyToStudy( study->studyDS())->StudyId(); + myGeomObject = GeometryGUI::GetGeomGen()->GetObject( studyId, myEntry.c_str() ); + updateName(); addToGroup( myPolygonItem ); @@ -85,8 +91,7 @@ bool DependencyTree_Object::highlight( double theX, double theY ) myPolygonItem->setBrush( color ); myPolygonItem->setPen( getPen( color ) ); - if( myIsLongName ) - myPolygonItem->setToolTip( getName() ); + myPolygonItem->setToolTip( getName() ); } return GraphicsView_Object::highlight( theX, theY ); } @@ -146,29 +151,31 @@ std::string DependencyTree_Object::getEntry() const return myEntry; } +//================================================================================= +// function : getGeomObject() +// purpose : get geometry object of current item +//================================================================================= +GEOM::GEOM_BaseObject_var DependencyTree_Object::getGeomObject() const +{ + return myGeomObject; +} + //================================================================================= // function : updateName() // purpose : update name of current item using its entry //================================================================================= void DependencyTree_Object::updateName() { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if ( !app ) return; - SalomeApp_Study* study = dynamic_cast(app->activeStudy()); - SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS()); - int StudyId = aStudyDS->StudyId(); - GEOM::_objref_GEOM_BaseObject* object = GeometryGUI::GetGeomGen()->GetObject( StudyId, myEntry.c_str() ); - QString name = object->GetName(); - QString StudyEntry = object->GetStudyEntry(); - std::cout << "\n\n\n StudyEntry = " << StudyEntry.toStdString() << " " << StudyEntry.isEmpty() << std::endl; + QString name = myGeomObject->GetName(); + QString studyEntry = myGeomObject->GetStudyEntry(); - - if( StudyEntry.isEmpty() ) { + if( studyEntry.isEmpty() ) { if( name.isEmpty() ) name = "unpublished"; - myColor = resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ); + myColor = QColor( 255, 255, 255 ); + myPolygonItem->setBrush( myColor ); + myPolygonItem->setPen( getPen( myColor ) ); } setName( name ); @@ -181,7 +188,6 @@ void DependencyTree_Object::updateName() double polygonHeight = myPolygonItem->sceneBoundingRect().height(); if( ( textWidth - 4 ) > polygonWidth ) { - myIsLongName = true; int numberSymbol = int( polygonWidth * name.length() / textWidth ); QString newName = name.left( numberSymbol - 3 ) + "..."; myTextItem->setText( newName ); diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h index da04b6901..a4a27b303 100644 --- a/src/DependencyTree/DependencyTree_Object.h +++ b/src/DependencyTree/DependencyTree_Object.h @@ -22,6 +22,10 @@ #include +// GEOM includes +#include +#include + #include class DependencyTree_Object: public GraphicsView_Object @@ -32,39 +36,41 @@ public: DependencyTree_Object( const std::string&, QGraphicsItem* = 0 ); ~DependencyTree_Object(); - virtual void compute() {}; + virtual void compute() {}; - virtual bool highlight( double, double ); - virtual void unhighlight(); + virtual bool highlight( double, double ); + virtual void unhighlight(); - virtual bool select( double, double, const QRectF& ); - virtual void unselect(); + virtual bool select( double, double, const QRectF& ); + virtual void unselect(); - std::string getEntry() const; + std::string getEntry() const; - void updateName(); + GEOM::GEOM_BaseObject_var getGeomObject() const; - void setColor(const QColor& ); - void setSelectColor(const QColor& ); - void setMainObjectColor(const QColor& ); + void updateName(); - void setIsMainObject( bool ); + void setColor(const QColor& ); + void setSelectColor(const QColor& ); + void setMainObjectColor(const QColor& ); + + void setIsMainObject( bool ); private: - QPen getPen( const QColor& ); + QPen getPen( const QColor& ); - QColor myColor; - QColor mySelectColor; - QColor myMainObjectColor; + QColor myColor; + QColor mySelectColor; + QColor myMainObjectColor; - QGraphicsPolygonItem* myPolygonItem; - QGraphicsSimpleTextItem* myTextItem; + QGraphicsPolygonItem* myPolygonItem; + QGraphicsSimpleTextItem* myTextItem; - std::string myEntry; + GEOM::GEOM_BaseObject_var myGeomObject; + std::string myEntry; - bool myIsMainObject; - bool myIsLongName; + bool myIsMainObject; }; diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 4785f4101..674850696 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -28,7 +28,6 @@ // GUI includes #include #include -#include #include #include #include @@ -41,7 +40,6 @@ #include -int iter = 0; DependencyTree_View::DependencyTree_View( QWidget* theParent ) :GraphicsView_ViewPort(theParent), @@ -49,99 +47,424 @@ myMaxDownwardLevelsNumber(0), myMaxUpwardLevelsNumber(0), myLevelsNumber(0), myIsCompute(true), -myIsUpdate( true ) +myIsUpdate( true ), +myTotalCost(0), +myComputedCost(0) { SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; - SalomeApp_Study* study = dynamic_cast(app->activeStudy()); - SALOMEDS::Study_var myStudy = GeometryGUI::ClientStudyToStudy( study->studyDS()); + SalomeApp_Study* study = dynamic_cast( app->activeStudy() ); + myStudy = GeometryGUI::ClientStudyToStudy( study->studyDS()); - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if ( !aSelMgr ) return; + mySelectionMgr = app->selectionMgr(); + if ( !mySelectionMgr ) return; - SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); - - GEOM::string_array_var ObjectIORs = new GEOM::string_array(); - ObjectIORs->length( aSelList.Extent()); - int aaa=0; - - for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next() ) { - Handle( SALOME_InteractiveObject ) io = It.Value(); - - - GEOM::GEOM_Object_var myObject = GEOM::GEOM_Object::_nil(); - myObject = GEOMBase::ConvertIOinGEOMObject( io ); - QString ior = myObject->GetEntry(); - ObjectIORs[aaa] = ior.toLatin1().constData(); - aaa++; - - std::cout << "\n\n IOR = " << ior.toStdString() << std::endl; - } - - SALOMEDS::TMPFile_var SeqFile = - GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, ObjectIORs ); - char* buf; - buf = (char*) &SeqFile[0]; - - std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; - - GEOMUtils::ConvertStringToTree( buf, myTreeModel ); - - aSelMgr->clearSelected(); + getNewTreeModel(); } DependencyTree_View::~DependencyTree_View() { - } -void DependencyTree_View::drawArrows() +void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) { - GEOMUtils::TreeModel::const_iterator i; - for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { - DependencyTree_Object* Main_object = myTreeMap[i->first]; - if( i->second.first.size() > 0 ) { - GEOMUtils::LevelInfo Levelup = i->second.first.at(0); - if( myDisplayAscendants ->isChecked() ) { - GEOMUtils::LevelInfo::const_iterator node; - for (node = Levelup.begin(); node != Levelup.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; - DependencyTree_Arrow* arrow = Arrows[std::pair(Main_object, object)]; - if( arrow && !isItemAdded( arrow) ) - addItem( arrow ); - } - } - } - if( myDisplayAscendants ->isChecked() ) - drawWardArrows( i->second.first ); - if( myDisplayDescendants->isChecked() ) - drawWardArrows( i->second.second ); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - } + myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) ); + QWidgetAction* nodesMovableAction = new QWidgetAction( theViewFrame ); + nodesMovableAction->setDefaultWidget( myNodesMovable ); + + myDisplayAscendants = new QCheckBox( tr( "DISPLAY_ASCENDANTS" ) ); + QWidgetAction* ShowParentsAction = new QWidgetAction( theViewFrame ); + ShowParentsAction->setDefaultWidget( myDisplayAscendants ); + + myDisplayDescendants = new QCheckBox(tr("DISPLAY_DESCENDANTS")); + QWidgetAction* ShowChildrenAction = new QWidgetAction(theViewFrame); + ShowChildrenAction->setDefaultWidget( myDisplayDescendants ); + + QLabel* hierarchyDepthLabel = new QLabel( tr( "HIERARCHY_DEPTH" ) ); + QWidgetAction* hierarchyDepthLabelAction = new QWidgetAction(theViewFrame); + hierarchyDepthLabelAction->setDefaultWidget( hierarchyDepthLabel ); + + myLevelsNumber = checkMaxLevelsNumber(); + + myHierarchyDepth = new QSpinBox(); + myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); + myHierarchyDepth->setSpecialValueText( tr( "SHOW_ALL" ) ); + myHierarchyDepth->setValue( 0 ); + QWidgetAction* hierarchyDepthAction = new QWidgetAction( theViewFrame ); + hierarchyDepthAction->setDefaultWidget( myHierarchyDepth ); + + QPushButton* updateButton = new QPushButton( tr( "UPDATE" ) ); + QWidgetAction* updateAction = new QWidgetAction( theViewFrame ); + updateAction->setDefaultWidget( updateButton ); + + QPushButton* cancelButton = new QPushButton( tr( "CANCEL" ) ); + cancelButton->setCheckable( true ); + cancelAction = new QWidgetAction( theViewFrame ); + cancelAction->setDefaultWidget( cancelButton ); + cancelAction->setVisible( false ); + + QProgressBar* progressBar = new QProgressBar( this ); + progressBar->setMinimum( 0 ); + progressBar->setMaximum( 100 ); + progressBar->setFixedWidth( 100 ); + progressAction = new QWidgetAction( theViewFrame ); + progressAction->setDefaultWidget( progressBar ); + progressAction->setVisible( false ); + + QAction* separator1 = theViewFrame->toolMgr()->separator( false ); + QAction* separator2 = theViewFrame->toolMgr()->separator( false ); + + theViewFrame->toolMgr()->append( separator1, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( nodesMovableAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( hierarchyDepthLabelAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( hierarchyDepthAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() ); + + theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( updateAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( progressAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( cancelAction, theViewFrame->getToolBarId() ); + + connect( myNodesMovable, SIGNAL( toggled( bool ) ), this, SLOT( onMoveNodes( bool ) ) ); + connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) ); + connect( myDisplayAscendants , SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); + connect( myDisplayDescendants, SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); + connect( updateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) ); + connect( cancelButton, SIGNAL( clicked() ), this, SLOT( onCancel() ) ); + + setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); + setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); + setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); } -void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) +void DependencyTree_View::updateModel() { - for(int j = 0; j < theWard.size(); j++ ) { - if( j >= myLevelsNumber ) - break; - GEOMUtils::LevelInfo Level = theWard.at(j); - GEOMUtils::LevelInfo::const_iterator node; - for (node = Level.begin(); node != Level.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; - GEOMUtils::NodeLinks Links = node->second; - for( int link = 0; link < Links.size(); link++ ) { - DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; - if( isItemAdded( object ) && isItemAdded( LinkObject ) ) { - DependencyTree_Arrow* arrow = Arrows[std::pair(object, LinkObject)]; - if( arrow && !isItemAdded( arrow) ) - addItem( arrow ); - } - } - } - } + getNewTreeModel(); + + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); + setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); + setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); +} + +void DependencyTree_View::drawTree() +{ + myComputedCost = 0; + calcTotalCost(); + std::cout << "\n\n\n TOTAL COST = " << myTotalCost << std::endl; + + clearSelected(); + + // draw nodes on scene + std::map< std::string, int > entryLevelMap; + std::map< int, std::vector< std::string > > levelObjects; + int currentLevel; + int horDistance, verDistance; + GEOMUtils::TreeModel::const_reverse_iterator i; + for( i = myTreeModel.rbegin(); i != myTreeModel.rend(); i++ ) { + if( !myIsCompute ) + return; + currentLevel = 0; + myComputedCost++; + sleep(1); + std::string objectEntry = i->first; + DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; + horDistance = 100 + int( objectItem->boundingRect().width() ); + verDistance = 3 * int( objectItem->boundingRect().height() ); + if( isItemAdded( objectItem ) ) + currentLevel = entryLevelMap[ objectEntry ]; + else { + addItem( objectItem ); + objectItem->unselect(); + entryLevelMap[ objectEntry ] = currentLevel; + levelObjects[ currentLevel ].push_back( objectEntry ); + } + objectItem->setIsMainObject( true ); + + if( myDisplayAscendants->isChecked() ) + drawWard( i->second.first, entryLevelMap, levelObjects, currentLevel, -1 ); + if( myDisplayDescendants->isChecked() ) + drawWard( i->second.second, entryLevelMap, levelObjects, currentLevel, 1 ); + } + + std::map< int, std::vector< std::string > >::const_iterator level; + for( level = levelObjects.begin(); level != levelObjects.end(); level++ ) { + int step = -horDistance * ( level->second.size() - 1 ) / 2; + std::cout<<"\n\n LEVEL = " << level->first << std::endl; + for( int objIter = 0; objIter < level->second.size(); objIter++ ) { + std::cout << level->second.at( objIter ) << ", "; + DependencyTree_Object* anObject = myTreeMap[ level->second.at( objIter ) ]; + anObject->setPos( step, verDistance * level->first ); + step += horDistance; + } + } + + // draw arrows on scene + GEOMUtils::TreeModel::const_iterator j; + for( j = myTreeModel.begin(); j != myTreeModel.end(); j++ ) { + DependencyTree_Object* Main_object = myTreeMap[ j->first ]; + if( j->second.first.size() > 0 ) { + GEOMUtils::LevelInfo Levelup = j->second.first.at(0); + if( myDisplayAscendants ->isChecked() ) { + GEOMUtils::LevelInfo::const_iterator node; + for (node = Levelup.begin(); node != Levelup.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node->first]; + DependencyTree_Arrow* arrow = myArrows[std::pair(Main_object, object)]; + if( arrow && !isItemAdded( arrow) ) + addItem( arrow ); + } + } + } + if( myDisplayAscendants->isChecked() ) + drawWardArrows( j->second.first ); + if( myDisplayDescendants->isChecked() ) + drawWardArrows( j->second.second ); + } + std::cout << "\n ComputedCost = " << myComputedCost << std::endl; + fitAll( true ); +} + +int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) +{ + GraphicsView_ViewPort::select( theRect, theIsAppend ); + + mySelectionMgr->clearSelected(); + + // get selection + SALOME_ListIO listIO; + int StudyId = myStudy->StudyId(); + for( initSelected(); moreSelected(); nextSelected() ) + if( DependencyTree_Object* treeObject = dynamic_cast( selectedObject() ) ) { + CORBA::String_var studyEntry = treeObject->getGeomObject()->GetStudyEntry(); + Handle(SALOME_InteractiveObject) tmpIO = + new SALOME_InteractiveObject( studyEntry.in(), "GEOM", "TEMP_IO"); + listIO.Append( tmpIO ); + } + mySelectionMgr->setSelectedObjects( listIO, true ); +} + +void DependencyTree_View::mouseMoveEvent(QMouseEvent *event) +{ + QGraphicsView::mouseMoveEvent( event ); + ArrowsInfo::const_iterator j; + for (j = myArrows.begin(); j != myArrows.end(); j++ ) { + DependencyTree_Arrow* arrow = myArrows[ j->first ]; + arrow->update(); + } +} + +void DependencyTree_View::setHierarchyType( const int theType ) +{ + myIsUpdate = false; + switch( theType ) { + case 0: + myDisplayAscendants->setChecked( true ); + myDisplayDescendants->setChecked( true ); + break; + case 1: + myDisplayAscendants->setChecked( true ); + myDisplayDescendants->setChecked( false ); + break; + case 2: + myDisplayAscendants->setChecked( false ); + myDisplayDescendants->setChecked( true ); + break; + } + myIsUpdate = true; + + myLevelsNumber = checkMaxLevelsNumber(); + + onHierarchyType(); +} + +void DependencyTree_View::setNodesMovable( const bool theIsMovable ) +{ + myNodesMovable->setChecked( theIsMovable ); +} + +void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor ) +{ + if( isForegroundEnabled() ) + { + setForegroundColor( theColor ); + updateForeground(); + } + else + setBackgroundColor( theColor ); +} + +void DependencyTree_View::setNodeColor( const QColor& theColor ) +{ + EntryObjectMap::const_iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i->first ]; + object->setColor( theColor ); + } +} + +void DependencyTree_View::setMainNodeColor( const QColor& theColor ) +{ + EntryObjectMap::const_iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i->first ]; + object->setMainObjectColor( theColor ); + } +} + +void DependencyTree_View::setSelectNodeColor( const QColor& theColor ) +{ + EntryObjectMap::const_iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i->first ]; + object->setSelectColor( theColor ); + } +} + +void DependencyTree_View::setArrowColor( const QColor& theColor ) +{ + ArrowsInfo::const_iterator j; + for (j = myArrows.begin(); j != myArrows.end(); j++ ) { + DependencyTree_Arrow* arrow = myArrows[ j->first ]; + arrow->setColor( theColor ); + } +} + +void DependencyTree_View::setHighlightArrowColor( const QColor& theColor ) +{ + ArrowsInfo::const_iterator j; + for (j = myArrows.begin(); j != myArrows.end(); j++ ) { + DependencyTree_Arrow* arrow = myArrows[ j->first ]; + arrow->setHighlightColor( theColor ); + } +} + +void DependencyTree_View::setSelectArrowColor( const QColor& theColor ) +{ + ArrowsInfo::const_iterator j; + for (j = myArrows.begin(); j != myArrows.end(); j++ ) { + DependencyTree_Arrow* arrow = myArrows[ j->first ]; + arrow->setSelectColor( theColor ); + } +} + +void DependencyTree_View::setIsCompute( bool theIsCompute ) +{ + myIsCompute = theIsCompute; +} + +bool DependencyTree_View::getIsCompute() +{ + return myIsCompute; +} + +void DependencyTree_View::timerEvent(QTimerEvent *event) +{ + QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); + QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); + + std::cout << "TIMER! " << std::endl; + if ( !cancelButton->isChecked() ) + progressBar->setValue( progressBar->maximum() * getComputeProgress() ); + + if( !myIsCompute || qthread->isFinished() ) { + changeWidgetState( false ); + killTimer( myTimer ); + cancelButton->setChecked( false ); + progressBar->setValue(0); + } + event->accept(); +} + +void DependencyTree_View::closeEvent( QCloseEvent* event ) +{ + if(qthread->isRunning()) + { + event->ignore(); + return; + } + event->accept(); +} + +void DependencyTree_View::updateView() +{ + if( !myIsUpdate ) + return; + + clearView( false ); + + qthread = new DependencyTree_ComputeDlg_QThread( this ); + + changeWidgetState( true ); + + myTimer = startTimer( 100 ); // millisecs + qthread->start(); +} + +void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) +{ + EntryObjectMap::const_iterator i; + for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i->first ]; + if( object ) + object->setMovable( theIsMoveNodes ); + } +} + +void DependencyTree_View::onHierarchyType() +{ + myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); + if( myHierarchyDepth->value() > checkMaxLevelsNumber() ) + myHierarchyDepth->setValue( checkMaxLevelsNumber() ); + + if( myHierarchyDepth->value() == 0 ) + myLevelsNumber = myHierarchyDepth->maximum(); + else + myLevelsNumber = myHierarchyDepth->value(); + + updateView(); +} + +void DependencyTree_View::onCancel() +{ + qthread->cancel(); + //qthread->deleteLater(); +} + +void DependencyTree_View::addNode( const std::string& theEntry ) +{ + if( !myTreeMap[theEntry] ) + myTreeMap[theEntry] = new DependencyTree_Object( theEntry ); +} + +void DependencyTree_View::addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ) +{ + bool isFind = false; + + std::cout << " " << startItem->getEntry() << " " << endItem->getEntry() << std::endl; + ArrowsInfo::const_iterator i; + for (i = myArrows.begin(); i != myArrows.end(); i++ ) { + DependencyTree_Arrow* arrow = i->second; + if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) { + isFind = true; + std::cout<<" theSame " << std::endl; + } + else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) { + arrow->setIsBiLink( true ); + std::cout<<" Bilink " << std::endl; + isFind = true; + } + } + + if( !isFind ) { + DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem); + myArrows[std::pair( startItem, endItem )] = arrow; + std::cout<<" addArrow " << std::endl; + } } void DependencyTree_View::parseTree() @@ -202,206 +525,121 @@ void DependencyTree_View::parseTreeWardArrow(const GEOMUtils::LevelsList theWard } } } -//void DependencyTree_View::parseData( QString& theData ) -//{ -// int cursor = 0; -// -// while( theData.indexOf('-',cursor) != -1 ) //find next selected object -// { -// int objectIndex = theData.indexOf( '-', cursor ); -// QString objectEntry = theData.mid( cursor, objectIndex - cursor ); -// //addNode( objectEntry ); -// std::cout<<"\n\nMainObject = " << objectEntry.toStdString() < myMaxUpwardLevelsNumber ) -// myMaxUpwardLevelsNumber = upwardList.size(); -// std::cout<<" Downward:" << std::endl; -// LevelsList downwardList = parseWard( theData, cursor ); -// if( downwardList.size() > myMaxDownwardLevelsNumber ) -// myMaxDownwardLevelsNumber = downwardList.size(); -// -// myTreeModel[objectEntry] = QPair( upwardList, downwardList ); -// } -//} -void DependencyTree_View::addNode( const std::string& theEntry ) +void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard, + std::map< std::string, int >& theEntryLevelMap, + std::map< int, std::vector< std::string > >& theLevelObjects, + int theCurrentLevel, const int theLevelStep ) { - if( !myTreeMap[theEntry] ) - myTreeMap[theEntry] = new DependencyTree_Object( theEntry ); -} - -void DependencyTree_View::addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ) -{ - bool isFind = false; - - std::cout << " " << startItem->getEntry() << " " << endItem->getEntry() << std::endl; - std::map, DependencyTree_Arrow* >::const_iterator i; - for (i = Arrows.begin(); i != Arrows.end(); i++ ) { - DependencyTree_Arrow* arrow = i->second; - if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) { - isFind = true; - std::cout<<" theSame " << std::endl; - } - else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) { - arrow->setIsBiLink( true ); - std::cout<<" Bilink " << std::endl; - isFind = true; + for( int level = 0; level < theWard.size(); level++ ) { + if( level >= myLevelsNumber || !myIsCompute ) + return; + myComputedCost++; + sleep(1); + theCurrentLevel += theLevelStep; + GEOMUtils::LevelInfo levelInfo = theWard.at( level ); + GEOMUtils::LevelInfo::const_iterator node; + for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[ node->first ]; + if( !isItemAdded( object ) ) { + addItem( object ); + object->unselect(); + theEntryLevelMap[ node->first ] = theCurrentLevel; + theLevelObjects[ theCurrentLevel ].push_back( node->first ); + } } } +} - if( !isFind ) { - DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem); - //Arrows.append( arrow ); - //addItem(arrow); - Arrows[std::pair( startItem, endItem )] = arrow; - std::cout<<" addArrow " << std::endl; +void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) +{ + for(int j = 0; j < theWard.size(); j++ ) { + if( j >= myLevelsNumber || !myIsCompute ) + break; + myComputedCost++; + sleep(1); + GEOMUtils::LevelInfo Level = theWard.at(j); + GEOMUtils::LevelInfo::const_iterator node; + for (node = Level.begin(); node != Level.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[node->first]; + GEOMUtils::NodeLinks Links = node->second; + for( int link = 0; link < Links.size(); link++ ) { + DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; + if( isItemAdded( object ) && isItemAdded( LinkObject ) ) { + DependencyTree_Arrow* arrow = myArrows[std::pair(object, LinkObject)]; + if( arrow && !isItemAdded( arrow) ) + addItem( arrow ); + } + } + } } } -//DependencyTree_View::LevelsList DependencyTree_View::parseWard( const QString& theData, int& theCursor ) -//{ -// int indexStart = theData.indexOf( "{", theCursor ) + 1; -// int indexEnd = theData.indexOf( "}", indexStart ); -// -// QString ward = theData.mid( indexStart, indexEnd - indexStart ); -// QStringList levelsListStr = ward.split( ';' ); -// LevelsList levelsListData; -// for( int level = 0; level < levelsListStr.size(); level++ ) { -// std::cout<<" Level" << level + 1 << ":" << std::endl; -// QStringList namesListStr = levelsListStr[level].split( ',' ); -// LevelInfo levelInfoData; -// for( int node = 0; node < namesListStr.size(); node++ ) { -// QStringList linksListStr = namesListStr[node].split( '_' ); -// QString nodeItem = linksListStr[0]; -// if( !nodeItem.isEmpty() ) { -// //addNode( nodeItem ); -// NodeLinks linksListData; -// std::cout<<" " << nodeItem.toStdString() << " - "; -// for( int link = 1; link < linksListStr.size(); link++ ) { -// QString linkItem = linksListStr[link]; -// //addNode( linkItem ); -// linksListData.append( linkItem ); -// std::cout << linkItem.toStdString() << ", "; -// }// Links -// levelInfoData[nodeItem] = linksListData; -// std::cout << std::endl; -// } -// }// Level's objects -// levelsListData.append(levelInfoData); -// }// Levels -// -// theCursor = indexEnd + 1; -// -// return levelsListData; -//} - -void DependencyTree_View::drawTree() +void DependencyTree_View::getNewTreeModel() { + clearView( true ); - int horDistance, verDistance; - myCurrentLevel = 0; - GEOMUtils::TreeModel::const_iterator i; - for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { - myCurrentLevel = 0; - std::string objectEntry = i->first; - DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; - horDistance = 100 + int( objectItem->boundingRect().width() ); - verDistance = 3 * int( objectItem->boundingRect().height() ); - if( isItemAdded( objectItem ) ) { - myCurrentLevel = myLevelMap[ objectEntry ]; - } - else { - addItem( objectItem ); - myLevelMap[ objectEntry ] = myCurrentLevel; - myLevelsObject[ myCurrentLevel ].push_back( objectEntry ); - } - objectItem->setIsMainObject( true ); + SALOME_ListIO aSelList; + mySelectionMgr->selectedObjects( aSelList ); - int levelposition = myCurrentLevel; - if( myDisplayAscendants ->isChecked() ){ - drawWard( i->second.first, -1 ); - myCurrentLevel = levelposition; - } - if( myDisplayDescendants->isChecked() ) - drawWard( i->second.second, 1 ); - } + // create a list of selected object entry + GEOM::string_array_var objectsEntry = new GEOM::string_array(); + objectsEntry->length( aSelList.Extent()); + int iter = 0; + for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next(), iter++ ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil(); + geomObject = GEOMBase::ConvertIOinGEOMObject( io ); + QString entry = geomObject->GetEntry(); + objectsEntry[ iter ] = entry.toLatin1().constData(); + } - std::map< int, std::vector >::const_iterator j; - for (j = myLevelsObject.begin(); j != myLevelsObject.end(); j++ ) { - int step = -horDistance*( j->second.size() - 1 )/2; - std::cout<<"\n\n LEVEL = " << j->first << std::endl; - for( int object = 0; object < j->second.size(); object++ ) { - if( myIsCompute ) { - std::cout << j->second.at( object ) << ", "; - DependencyTree_Object* anObject = myTreeMap[ j->second.at( object ) ]; - anObject->setPos( step, verDistance*j->first ); - step += horDistance; - //sleep(1); - } - } - } - centerOn( scene()->sceneRect().center() ); - fitAll( true ); + // get string which describes dependency tree structure + SALOMEDS::TMPFile_var SeqFile = + GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, objectsEntry ); + char* buf = (char*) &SeqFile[0]; + + std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; + + // get dependency tree structure + GEOMUtils::ConvertStringToTree( buf, myTreeModel ); + + mySelectionMgr->clearSelected(); + + parseTree(); } -void DependencyTree_View::drawWard( const GEOMUtils::LevelsList theWard, const int theLevelStep ) +void DependencyTree_View::clearView( bool isClearModel ) { - std::cout << "\n\n myLevelsNumber2 = " << myLevelsNumber << std::endl; - int levelsNumber = theWard.size(); - std::cout << "\n\n levelsNumber = " << levelsNumber << std::endl; - for( int level = 0; level < levelsNumber; level++ ) { - if( level >= myLevelsNumber ) - return; - myCurrentLevel += theLevelStep; - GEOMUtils::LevelInfo levelInfo = theWard.at( level ); - GEOMUtils::LevelInfo::const_iterator node; - for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[ node->first ]; - if( !isItemAdded( object ) ) { - addItem( object ); - myLevelMap[ node->first ] = myCurrentLevel; - myLevelsObject[ myCurrentLevel ].push_back( node->first ); - } - } - } + EntryObjectMap::const_iterator objectIter; + for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) { + DependencyTree_Object* object = objectIter->second; + if( isItemAdded( object ) && object ) + removeItem( object ); + } + ArrowsInfo::const_iterator arrowIter; + for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) { + DependencyTree_Arrow* object = arrowIter->second; + if( isItemAdded( object ) && object ) + removeItem( object ); + } + if( isClearModel ) { + myTreeMap.clear(); + myArrows.clear(); + myTreeModel.clear(); + myMaxDownwardLevelsNumber = 0; + myMaxUpwardLevelsNumber = 0; + myLevelsNumber = 0; + myIsCompute = true; + myIsUpdate = true; + } } -void DependencyTree_View::onUpdateTree() -{ - myLevelMap.clear(); - myLevelsObject.clear(); - - - std::map::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i->first ]; - if( isItemAdded( object ) && object ) - removeItem( object ); - - } - - std::map, DependencyTree_Arrow* >::const_iterator j; - for (j = Arrows.begin(); j != Arrows.end(); j++ ) { - DependencyTree_Arrow* object = Arrows[ j->first ]; - if( isItemAdded( object ) && object ) - removeItem( object ); - } - - drawTree(); - drawArrows(); -} - - int DependencyTree_View::checkMaxLevelsNumber() { - if( myDisplayAscendants ->isChecked() && myDisplayDescendants->isChecked() ) + if( myDisplayAscendants->isChecked() && myDisplayDescendants->isChecked() ) return myMaxUpwardLevelsNumber>myMaxDownwardLevelsNumber?myMaxUpwardLevelsNumber:myMaxDownwardLevelsNumber; else if( myDisplayAscendants ->isChecked() ) return myMaxUpwardLevelsNumber; @@ -409,343 +647,34 @@ int DependencyTree_View::checkMaxLevelsNumber() return myMaxDownwardLevelsNumber; } - -void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) +void DependencyTree_View::calcTotalCost() { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - - std::string Data = "MainObject1-upward{up11_up21_up22,up12_up23,up13_up24;up21_up11,up22_up21_up12,up23_up23,up24}" - "downward{down11_MainObject1,down12_MainObject1;down21_down11,down22_down12,down23_down12,down24_down24_down11,down25_down12;down31_down11_down23,down32_down25}" - "down23-upward{down12_MainObject1;MainObject1_up11_up12_up13;up11_up21_up22,up12_up23,up13_up24;up21,up22_up21_up12,up23,up24}" - "downward{down31_down11_down23}" - "MainObject2-upward{up21,newup11_newup31,newup12_newup21;newup21_newup31LongName;newup31LongName}downward{newdown11_MainObject2,newdown12_MainObject2,newdown13_MainObject2;newdown21_newdown13,down21;newdown31_newdown11}" - "MainObject3-upward{moUP1_moUP4,moUP2_moUP3;moUP4,moUP3_down23}downward{moDOWN1_MainObject3}"; - - - //GEOMUtils::ConvertStringToTree( Data, myTreeModel ); - - - -// GEOMUtils::TreeModel::const_iterator i; -// for ( i = aTreeModel.begin(); i != aTreeModel.end(); i++ ) { -// std::string objectEntry = i->first; -// std::cout << "\n\n Main object = " << objectEntry << std::endl; -// } -// parseData( Data ); - parseTree(); - - - myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) ); - QWidgetAction* moveNodesAction = new QWidgetAction( theViewFrame ); - moveNodesAction->setDefaultWidget( myNodesMovable ); - - myDisplayAscendants = new QCheckBox( tr( "DISPLAY_ASCENDANTS" )); - myDisplayAscendants ->setChecked( true ); - QWidgetAction* ShowParentsAction = new QWidgetAction(theViewFrame); - ShowParentsAction->setDefaultWidget( myDisplayAscendants ); - - myDisplayDescendants = new QCheckBox(tr("DISPLAY_DESCENDANTS")); - QWidgetAction* ShowChildrenAction = new QWidgetAction(theViewFrame); - ShowChildrenAction->setDefaultWidget( myDisplayDescendants ); - - myLevelsNumber = checkMaxLevelsNumber(); - std::cout << "\n\n myLevelsNumber1 = " << myLevelsNumber << std::endl; - myHierarchyDepth = new QSpinBox(); - myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); - myHierarchyDepth->setValue( 0 ); - myHierarchyDepth->setSpecialValueText( "All" ); - QWidgetAction* LevelsAction = new QWidgetAction(theViewFrame); - LevelsAction->setDefaultWidget( myHierarchyDepth ); - - QLabel* LevelsLabel = new QLabel( tr("HIERARCHY_DEPTH") ); - QWidgetAction* LevelsLebelAction = new QWidgetAction(theViewFrame); - LevelsLebelAction->setDefaultWidget( LevelsLabel ); - - - QPushButton* UpdateButton = new QPushButton(tr("Update")); - QWidgetAction* UpdateAction = new QWidgetAction(theViewFrame); - UpdateAction->setDefaultWidget( UpdateButton ); - - cancelButton = new QPushButton(tr("CANCEL")); - cancelButton->setCheckable(true); - cancelButton->setVisible( false ); - cancelAction = new QWidgetAction(theViewFrame); - cancelAction->setDefaultWidget( cancelButton ); - cancelAction->setVisible(false); - - progressBar = new QProgressBar(this); - progressBar->setMinimum( 0 ); - progressBar->setMaximum( 1000 ); - progressBar->setFixedWidth(100); - progressAction = new QWidgetAction(theViewFrame); - progressAction->setDefaultWidget( progressBar ); - progressAction->setVisible(false); - - QAction* separator = theViewFrame->toolMgr()->separator(false); - theViewFrame->toolMgr()->append( separator, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( moveNodesAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( LevelsLebelAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( LevelsAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() ); - QAction* separator2 = theViewFrame->toolMgr()->separator(false); - theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( UpdateAction, theViewFrame->getToolBarId() ); - std::cout<<"\n\n\n\n ToolBarId = " << theViewFrame->getToolBarId() << std::endl; - theViewFrame->toolMgr()->append( progressAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( cancelAction, theViewFrame->getToolBarId() ); - - connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); - - connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) ); - connect( myDisplayAscendants , SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) ); - connect( myDisplayDescendants, SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) ); - connect( UpdateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) ); - connect( myNodesMovable, SIGNAL( toggled(bool) ), this, SLOT( onMoveNodes( bool ) ) ); - - setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); - setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); - setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); - - -} - -void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) -{ - std::map::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i->first ]; - if( object ) - object->setMovable( theIsMoveNodes ); + myTotalCost = myTreeModel.size(); + GEOMUtils::TreeModel::const_iterator i; + for( i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { + if( myDisplayAscendants->isChecked() ) + myTotalCost += 2*( myLevelsNumber < i->second.first.size() ? myLevelsNumber : i->second.first.size() ); + if( myDisplayDescendants->isChecked() ) + myTotalCost += 2*( myLevelsNumber < i->second.second.size() ? myLevelsNumber : i->second.second.size() ); } } -void DependencyTree_View::onHierarchyType() +double DependencyTree_View::getComputeProgress() { - myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); - if( myHierarchyDepth->value() > checkMaxLevelsNumber() ) - myHierarchyDepth->setValue( checkMaxLevelsNumber() ); - - if( myHierarchyDepth->value() == 0 ) - myLevelsNumber = myHierarchyDepth->maximum(); - else - myLevelsNumber = myHierarchyDepth->value(); - - updateView(); -} -void DependencyTree_View::updateView() -{ - - if( !myIsUpdate ) - return; - - myLevelMap.clear(); - myLevelsObject.clear(); - - - std::map::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i->first ]; - if( isItemAdded( object ) && object ) - removeItem( object ); - - } - - - std::map, DependencyTree_Arrow* >::const_iterator j; - for (j = Arrows.begin(); j != Arrows.end(); j++ ) { - DependencyTree_Arrow* object = Arrows[ j->first ]; - if( isItemAdded( object ) && object ) - removeItem( object ); - } - - - - - iter = 0; - qthread = new DependencyTree_ComputeDlg_QThread(this);// = DependencyTree_ComputeDlg_QThread(this);// const_cast(this) ); - cancelAction->setVisible( true ); - progressAction->setVisible(true); - myNodesMovable->setEnabled(false); - myHierarchyDepth->setEnabled( false); - myDisplayAscendants->setEnabled( false ); - myDisplayDescendants->setEnabled( false ); - myTimer = startTimer(100); // millisecs - qthread->start(); + return double( myComputedCost ) / double( myTotalCost ); } -void DependencyTree_View::onRedrawTree() +void DependencyTree_View::changeWidgetState( bool theIsCompute ) { - drawTree(); - drawArrows(); -} -void DependencyTree_View::onCancel() -{ - qthread->cancel(); - cancelButton->setText( tr("CANCELING")); - cancelButton->setEnabled(false); - killTimer( myTimer ); - qthread->killTimer( myTimer ); - qthread->deleteLater(); + cancelAction->setVisible( theIsCompute ); + progressAction->setVisible( theIsCompute ); + myHierarchyDepth->setEnabled( !theIsCompute ); + myDisplayAscendants->setEnabled( !theIsCompute ); + myDisplayDescendants->setEnabled( !theIsCompute ); } -void DependencyTree_View::timerEvent(QTimerEvent *event) -{ - if ( !cancelButton->isChecked() ) // not yet cancelled - // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() ); - progressBar->setValue( iter++ ); - - if(!myIsCompute || qthread->isFinished()) - { - cancelAction->setVisible( false ); - progressAction->setVisible(false); - cancelButton->setText( tr("CANCEL")); - cancelButton->setEnabled(true); - myNodesMovable->setEnabled( true ); - myHierarchyDepth->setEnabled( true ); - myDisplayAscendants->setEnabled( true ); - myDisplayDescendants->setEnabled( true ); - } - - event->accept(); -} - -void DependencyTree_View::closeEvent(QCloseEvent *event) -{ - if(qthread->isRunning()) - { - event->ignore(); - return; - } - event->accept(); -} - -void DependencyTree_View::setIsCompute( bool theIsCompute ) -{ - myIsCompute = theIsCompute; -} - -void DependencyTree_View::setHierarchyType( const int theType ) -{ - myIsUpdate = false; - switch( theType ) { - case 0: - myDisplayAscendants->setChecked( true ); - myDisplayDescendants->setChecked( true ); - break; - case 1: - myDisplayAscendants->setChecked( true ); - myDisplayDescendants->setChecked( false ); - break; - case 2: - myDisplayAscendants->setChecked( false ); - myDisplayDescendants->setChecked( true ); - break; - } - myIsUpdate = true; - onHierarchyType(); -} - -void DependencyTree_View::setNodesMovable( const bool theIsMovable ) -{ - myNodesMovable->setChecked( theIsMovable ); -} - -void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor ) -{ - if( isForegroundEnabled() ) - { - setForegroundColor( theColor ); - updateForeground(); - } - else - setBackgroundColor( theColor ); -} - -void DependencyTree_View::setNodeColor( const QColor& theColor ) -{ - std::map::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i->first ]; - object->setColor( theColor ); - } -} - -void DependencyTree_View::setMainNodeColor( const QColor& theColor ) -{ - std::map::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i->first ]; - object->setMainObjectColor( theColor ); - } -} - -void DependencyTree_View::setSelectNodeColor( const QColor& theColor ) -{ - std::map::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { - DependencyTree_Object* object = myTreeMap[ i->first ]; - object->setSelectColor( theColor ); - } -} - -void DependencyTree_View::setArrowColor( const QColor& theColor ) -{ - std::map, DependencyTree_Arrow* >::const_iterator j; - for (j = Arrows.begin(); j != Arrows.end(); j++ ) { - DependencyTree_Arrow* arrow = Arrows[ j->first ]; - arrow->setColor( theColor ); - } -} - -void DependencyTree_View::setHighlightArrowColor( const QColor& theColor ) -{ - std::map, DependencyTree_Arrow* >::const_iterator j; - for (j = Arrows.begin(); j != Arrows.end(); j++ ) { - DependencyTree_Arrow* arrow = Arrows[ j->first ]; - arrow->setHighlightColor( theColor ); - } -} - -void DependencyTree_View::setSelectArrowColor( const QColor& theColor ) -{ - std::map, DependencyTree_Arrow* >::const_iterator j; - for (j = Arrows.begin(); j != Arrows.end(); j++ ) { - DependencyTree_Arrow* arrow = Arrows[ j->first ]; - arrow->setSelectColor( theColor ); - } -} - -int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) -{ - GraphicsView_ViewPort::select( theRect, theIsAppend ); - - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - - // get selection - SALOME_ListIO listIO; -aSelMgr->clearSelected(); - SalomeApp_Study* study = dynamic_cast(app->activeStudy()); - SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS()); - int StudyId = aStudyDS->StudyId(); - for( initSelected(); moreSelected(); nextSelected() ) - if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { - GEOM::_objref_GEOM_BaseObject* object = GeometryGUI::GetGeomGen()->GetObject( StudyId, aDepObject->getEntry().c_str() ); - CORBA::String_var aChildEntry = object->GetStudyEntry(); - Handle(SALOME_InteractiveObject) tmpIO = - new SALOME_InteractiveObject( aChildEntry.in(), "GEOM", "TEMP_IO"); - listIO.Append(tmpIO); - } - aSelMgr->setSelectedObjects( listIO, true ); -} - -//================================================================================ -//================================================================================ - -DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread(DependencyTree_View* theView) +DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( DependencyTree_View* theView ) { myView = theView; } @@ -753,7 +682,7 @@ DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread(DependencyT void DependencyTree_ComputeDlg_QThread::run() { myView->setIsCompute( true ); - myView->onRedrawTree(); + myView->drawTree(); } bool DependencyTree_ComputeDlg_QThread::result() @@ -765,81 +694,3 @@ void DependencyTree_ComputeDlg_QThread::cancel() { myView->setIsCompute( false ); } - -////================================================================================ -////================================================================================ -// -//DependencyTree_ComputeDlg_QThreadQDialog::DependencyTree_ComputeDlg_QThreadQDialog(QWidget* parent, -// DependencyTree_View* theView) -// : QDialog(parent, -// Qt::WindowSystemMenuHint | -// Qt::WindowCloseButtonHint | -// Qt::Dialog | -// Qt::WindowMaximizeButtonHint), -// qthread( theView ) -//{ -// // -- -// setWindowTitle(tr("TITLE")); -// setMinimumWidth( 200 ); -// -// cancelButton = new QPushButton(tr("CANCEL")); -// cancelButton->setDefault(true); -// cancelButton->setCheckable(true); -// -// progressBar = new QProgressBar(this); -// progressBar->setMinimum( 0 ); -// progressBar->setMaximum( 1000 ); -// -// QGridLayout* layout = new QGridLayout(this); -// layout->setMargin( 11 ); -// layout->setSpacing( 6 ); -// int row = 0; -// layout->addWidget(progressBar, row++, 0, 1, 2); -// layout->addWidget(cancelButton, row++, 0, 1, 2); -// adjustSize(); -// update(); -// -// connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); -// // -- -// startTimer(300); // millisecs -// qthread.start(); -//} -// -//bool DependencyTree_ComputeDlg_QThreadQDialog::result() -//{ -// return qthread.result(); -//} -// -//void DependencyTree_ComputeDlg_QThreadQDialog::onCancel() -//{ -// qthread.cancel(); -// cancelButton->setText( tr("CANCELING")); -// cancelButton->setEnabled(false); -//} -// -//void DependencyTree_ComputeDlg_QThreadQDialog::timerEvent(QTimerEvent *event) -//{ -// if ( !cancelButton->isChecked() ) // not yet cancelled -// // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() ); -// progressBar->setValue( 10 ); -// -// if(qthread.isFinished()) -// { -// close(); -// } -// -// event->accept(); -//} -// -//void DependencyTree_ComputeDlg_QThreadQDialog::closeEvent(QCloseEvent *event) -//{ -// if(qthread.isRunning()) -// { -// event->ignore(); -// return; -// } -// event->accept(); -//} -// - - diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 19c5d0b23..a640462ca 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -22,6 +22,9 @@ #include #include +#include + +#include #include @@ -55,6 +58,9 @@ private: DependencyTree_View* myView; }; +typedef std::map EntryObjectMap; +typedef std::map,DependencyTree_Arrow*> ArrowsInfo; + class DependencyTree_View: public GraphicsView_ViewPort { Q_OBJECT @@ -64,6 +70,13 @@ public: DependencyTree_View( QWidget* = 0 ); ~DependencyTree_View(); + void init( GraphicsView_ViewFrame* ); + void updateModel(); + void drawTree(); + + virtual int select( const QRectF&, bool ); + void mouseMoveEvent(QMouseEvent *event); + void setHierarchyType( const int ); void setNodesMovable( const bool ); void setPrefBackgroundColor( const QColor& ); @@ -74,58 +87,48 @@ public: void setHighlightArrowColor( const QColor& ); void setSelectArrowColor( const QColor& ); - virtual int select( const QRectF&, bool ); + void setIsCompute( bool ); + bool getIsCompute(); -// typedef QList NodeLinks; -// typedef QMap LevelInfo; -// typedef QList LevelsList; -// typedef QMap > TreeModel; +protected: + void timerEvent( QTimerEvent* ); + void closeEvent( QCloseEvent* ); - GEOMUtils::TreeModel myTreeModel; - std::map myTreeMap; - std::map,DependencyTree_Arrow*> Arrows; - - std::map myLevelMap; - - std::map< int, std::vector > myLevelsObject; - int myCurrentLevel; - - void init( GraphicsView_ViewFrame* ); - - void onRedrawTree(); - - void setIsCompute( bool theIsCompute ); - bool getIsCompute() { return myIsCompute; }; private slots: - void onUpdateTree(); void updateView(); void onMoveNodes( bool ); void onHierarchyType(); - -protected: - void timerEvent(QTimerEvent *timer); - void closeEvent(QCloseEvent *event); - -private slots: void onCancel(); +signals: + private: -// void parseData( QString& data ); + + void addNode( const std::string& ); + void addArrow( DependencyTree_Object*, DependencyTree_Object* ); void parseTree(); void parseTreeWard(const GEOMUtils::LevelsList); void parseTreeWardArrow(const GEOMUtils::LevelsList); - void addNode( const std::string& entry ); - void addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ); - void findArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ); -// GEOMUtils::LevelsList parseWard( const QString& data, int& cursor ); - void drawTree(); - void drawWard( GEOMUtils::LevelsList ward, const int levelStep ); - void drawArrows(); + void drawWard( const GEOMUtils::LevelsList&, std::map< std::string, int >&, + std::map< int, std::vector< std::string > >&, int, const int ); void drawWardArrows( GEOMUtils::LevelsList ); + void getNewTreeModel(); + void clearView( bool ); + int checkMaxLevelsNumber(); + void calcTotalCost(); + double getComputeProgress(); + + void changeWidgetState( bool ); + + GEOMUtils::TreeModel myTreeModel; + + EntryObjectMap myTreeMap; + ArrowsInfo myArrows; + int myLevelsNumber; int myMaxDownwardLevelsNumber; int myMaxUpwardLevelsNumber; @@ -134,23 +137,23 @@ private: QSpinBox* myHierarchyDepth; QCheckBox* myDisplayAscendants; QCheckBox* myDisplayDescendants; - - std::string myData; + QWidgetAction* cancelAction; + QWidgetAction* progressAction; int myTimer; bool myIsUpdate; - GraphicsView_ViewFrame* myViewFrame; - bool myIsCompute; - DependencyTree_ComputeDlg_QThread* qthread; - QPushButton * cancelButton; - QProgressBar* progressBar; - QWidgetAction* cancelAction; - QWidgetAction* progressAction; - //SALOMEDS::Study_var myStudy; + int myTotalCost; + int myComputedCost; + + DependencyTree_ComputeDlg_QThread* qthread; + + + SALOMEDS::Study_var myStudy; + LightApp_SelectionMgr* mySelectionMgr; }; From 5434de9c2b32126a95a3e84392d38478bc9f9049 Mon Sep 17 00:00:00 2001 From: mpa Date: Wed, 28 May 2014 15:07:18 +0400 Subject: [PATCH 013/118] - add new method for view - edit the work of thread --- src/DependencyTree/DependencyTree_View.cxx | 90 +++++++++++++++------- src/DependencyTree/DependencyTree_View.h | 7 +- 2 files changed, 68 insertions(+), 29 deletions(-) diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 674850696..a0e065fea 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -35,9 +35,10 @@ // Qt includes #include -#include +#include #include +#define DRAW_EVENT ( QEvent::User + 1 ) #include @@ -96,7 +97,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) QWidgetAction* hierarchyDepthAction = new QWidgetAction( theViewFrame ); hierarchyDepthAction->setDefaultWidget( myHierarchyDepth ); - QPushButton* updateButton = new QPushButton( tr( "UPDATE" ) ); + updateButton = new QPushButton( tr( "UPDATE" ) ); QWidgetAction* updateAction = new QWidgetAction( theViewFrame ); updateAction->setDefaultWidget( updateButton ); @@ -159,6 +160,7 @@ void DependencyTree_View::drawTree() std::cout << "\n\n\n TOTAL COST = " << myTotalCost << std::endl; clearSelected(); + clearView( false ); // draw nodes on scene std::map< std::string, int > entryLevelMap; @@ -171,7 +173,6 @@ void DependencyTree_View::drawTree() return; currentLevel = 0; myComputedCost++; - sleep(1); std::string objectEntry = i->first; DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; horDistance = 100 + int( objectItem->boundingRect().width() ); @@ -226,7 +227,6 @@ void DependencyTree_View::drawTree() drawWardArrows( j->second.second ); } std::cout << "\n ComputedCost = " << myComputedCost << std::endl; - fitAll( true ); } int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) @@ -248,6 +248,40 @@ int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) mySelectionMgr->setSelectedObjects( listIO, true ); } +void DependencyTree_View::customEvent ( QEvent * event ) +{ + if( event->type() == DRAW_EVENT ) { + //qthread->sleepDraw(); + + std::cout << "\n\n\n DRAW_EVENT!!! " << std::endl; + QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); + QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); + + std::cout << "\n\n *** myIsCompute " << myIsCompute << std::endl; + if ( !cancelButton->isChecked() ) { + std::cout << "\n\n *** getComputeProgress = " << getComputeProgress() << std::endl; + progressBar->setValue( progressBar->maximum() * getComputeProgress() ); + + } + + std::cout << "\n\n *** qthread->isFinished() = " << qthread->isFinished() << std::endl; + if( !myIsCompute || qthread->isFinished() ) { + changeWidgetState( false ); + cancelButton->setChecked( false ); + progressBar->setValue(0); + } + } + event->accept(); +} + +void DependencyTree_View::addItem( QGraphicsItem* theObject ) +{ + GraphicsView_ViewPort::addItem( theObject ); + qthread->sleepDraw(); + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + QApplication::postEvent( this, new QEvent( ( QEvent::Type )DRAW_EVENT ) ); +} + void DependencyTree_View::mouseMoveEvent(QMouseEvent *event) { QGraphicsView::mouseMoveEvent( event ); @@ -362,23 +396,23 @@ bool DependencyTree_View::getIsCompute() return myIsCompute; } -void DependencyTree_View::timerEvent(QTimerEvent *event) -{ - QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); - QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); - - std::cout << "TIMER! " << std::endl; - if ( !cancelButton->isChecked() ) - progressBar->setValue( progressBar->maximum() * getComputeProgress() ); - - if( !myIsCompute || qthread->isFinished() ) { - changeWidgetState( false ); - killTimer( myTimer ); - cancelButton->setChecked( false ); - progressBar->setValue(0); - } - event->accept(); -} +//void DependencyTree_View::timerEvent(QTimerEvent *event) +//{ +// QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); +// QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); +// +// std::cout << "TIMER! " << std::endl; +// if ( !cancelButton->isChecked() ) +// progressBar->setValue( progressBar->maximum() * getComputeProgress() ); +// +// if( !myIsCompute || qthread->isFinished() ) { +// changeWidgetState( false ); +// killTimer( myTimer ); +// cancelButton->setChecked( false ); +// progressBar->setValue(0); +// } +// event->accept(); +//} void DependencyTree_View::closeEvent( QCloseEvent* event ) { @@ -395,13 +429,13 @@ void DependencyTree_View::updateView() if( !myIsUpdate ) return; - clearView( false ); +// clearView( false ); qthread = new DependencyTree_ComputeDlg_QThread( this ); changeWidgetState( true ); - myTimer = startTimer( 100 ); // millisecs + //myTimer = startTimer( 100 ); // millisecs qthread->start(); } @@ -535,7 +569,6 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard, if( level >= myLevelsNumber || !myIsCompute ) return; myComputedCost++; - sleep(1); theCurrentLevel += theLevelStep; GEOMUtils::LevelInfo levelInfo = theWard.at( level ); GEOMUtils::LevelInfo::const_iterator node; @@ -557,7 +590,6 @@ void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) if( j >= myLevelsNumber || !myIsCompute ) break; myComputedCost++; - sleep(1); GEOMUtils::LevelInfo Level = theWard.at(j); GEOMUtils::LevelInfo::const_iterator node; for (node = Level.begin(); node != Level.end(); node++ ) { @@ -672,6 +704,7 @@ void DependencyTree_View::changeWidgetState( bool theIsCompute ) myHierarchyDepth->setEnabled( !theIsCompute ); myDisplayAscendants->setEnabled( !theIsCompute ); myDisplayDescendants->setEnabled( !theIsCompute ); + updateButton->setEnabled( !theIsCompute ); } DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( DependencyTree_View* theView ) @@ -683,11 +716,14 @@ void DependencyTree_ComputeDlg_QThread::run() { myView->setIsCompute( true ); myView->drawTree(); + myView->fitAll( true ); + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + QApplication::postEvent( myView, new QEvent( ( QEvent::Type )DRAW_EVENT ) ); } -bool DependencyTree_ComputeDlg_QThread::result() +void DependencyTree_ComputeDlg_QThread::sleepDraw() { - + msleep(10); } void DependencyTree_ComputeDlg_QThread::cancel() diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index a640462ca..13a3a976e 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -46,7 +46,7 @@ class DependencyTree_ComputeDlg_QThread : public QThread public: DependencyTree_ComputeDlg_QThread( DependencyTree_View* ); - bool result(); + void sleepDraw(); void cancel(); DependencyTree_View* getView() { return myView; }; @@ -75,6 +75,8 @@ public: void drawTree(); virtual int select( const QRectF&, bool ); + virtual void customEvent ( QEvent* ); + void addItem( QGraphicsItem* ); void mouseMoveEvent(QMouseEvent *event); void setHierarchyType( const int ); @@ -91,7 +93,7 @@ public: bool getIsCompute(); protected: - void timerEvent( QTimerEvent* ); +// void timerEvent( QTimerEvent* ); void closeEvent( QCloseEvent* ); private slots: @@ -139,6 +141,7 @@ private: QCheckBox* myDisplayDescendants; QWidgetAction* cancelAction; QWidgetAction* progressAction; + QPushButton* updateButton; int myTimer; From 2d26f49c9fdfafe22e8d80d692054150c35b6061 Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 29 May 2014 14:19:20 +0400 Subject: [PATCH 014/118] Don't process already processed objects. --- src/GEOM_I/GEOM_Gen_i.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index e982b12b8..3578df7b9 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3082,6 +3082,11 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &upLevelList, int level ) { std::string aGboIOR = gbo->GetEntry(); + for (int i=0; i < upLevelList.size(); i++ ) { + GEOMUtils::LevelInfo aMap = upLevelList.at(i); + if ( aMap.count( aGboIOR ) > 0 ) + return; + } //std::cout << "\n\nAKL: upnode IOR: " << aGboIOR << endl; //std::cout << "AKL: level: " << level << endl; GEOMUtils::NodeLinks anIORs; @@ -3131,7 +3136,7 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, return; std::string aGboIOR = gbo->GetEntry(); - cout << "for " << aGboIOR << " at level " << level << endl; + //cout << "for " << aGboIOR << " at level " << level << endl; /*if ( level > 0 ) { if ( level >= downLevelList.size() ) { downLevelList.push_back( aLevelMap ); From 66d16d30f7a96a46754373ad9e8957418c3f4b95 Mon Sep 17 00:00:00 2001 From: mpa Date: Thu, 29 May 2014 15:18:22 +0400 Subject: [PATCH 015/118] - add possibility to rebuild dependency tree by selecting objects --- src/DependencyTree/DependencyTree.cxx | 30 ------- src/DependencyTree/DependencyTree_Object.cxx | 1 + src/DependencyTree/DependencyTree_View.cxx | 82 +++++++++++-------- src/DependencyTree/DependencyTree_View.h | 18 +++- .../DependencyTree_ViewModel.cxx | 3 + 5 files changed, 65 insertions(+), 69 deletions(-) diff --git a/src/DependencyTree/DependencyTree.cxx b/src/DependencyTree/DependencyTree.cxx index 6fdc892ba..583ba43e8 100644 --- a/src/DependencyTree/DependencyTree.cxx +++ b/src/DependencyTree/DependencyTree.cxx @@ -86,33 +86,3 @@ DependencyTree::DependencyTree() DependencyTree::~DependencyTree() { } - -//void DependencyTree::setBackgroundColor( const QColor& theColor ) -//{ -// //myView->setBackgroundColor( theColor ); -// myBackgroundColor = theColor; -//} -//void DependencyTree::setNodeColor( const QColor& theColor ) -//{ -// myView->setNodeColor( theColor ); -//} -//void DependencyTree::setMainNodeColor( const QColor& theColor ) -//{ -// myView->setMainNodeColor( theColor ); -//} -//void DependencyTree::setSelectNodeColor( const QColor& theColor ) -//{ -// myView->setSelectNodeColor( theColor ); -//} -//void DependencyTree::setArrowColor( const QColor& theColor ) -//{ -// myView->setArrowColor( theColor ); -//} -//void DependencyTree::setHighlightArrowColor( const QColor& theColor ) -//{ -// myView->setHighlightArrowColor( theColor ); -//} -//void DependencyTree::setSelectArrowColor( const QColor& theColor ) -//{ -// myView->setSelectArrowColor( theColor ); -//} diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx index 21d2f7971..cffd24a1d 100644 --- a/src/DependencyTree/DependencyTree_Object.cxx +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -169,6 +169,7 @@ void DependencyTree_Object::updateName() QString name = myGeomObject->GetName(); QString studyEntry = myGeomObject->GetStudyEntry(); + std::cout<<"\n\n name = " << name.toStdString() << " studyEntry = " << studyEntry.toStdString() << std::endl; if( studyEntry.isEmpty() ) { if( name.isEmpty() ) diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index a0e065fea..5d1323278 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -47,7 +47,7 @@ DependencyTree_View::DependencyTree_View( QWidget* theParent ) myMaxDownwardLevelsNumber(0), myMaxUpwardLevelsNumber(0), myLevelsNumber(0), -myIsCompute(true), +myIsCompute(false), myIsUpdate( true ), myTotalCost(0), myComputedCost(0) @@ -70,6 +70,8 @@ DependencyTree_View::~DependencyTree_View() void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) { + qthread = new DependencyTree_ComputeDlg_QThread( this ); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) ); @@ -134,7 +136,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayAscendants , SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayDescendants, SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); - connect( updateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) ); + connect( updateButton, SIGNAL( clicked() ), this, SLOT( onUpdateModel( false ) ) ); connect( cancelButton, SIGNAL( clicked() ), this, SLOT( onCancel() ) ); setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); @@ -142,9 +144,9 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); } -void DependencyTree_View::updateModel() +void DependencyTree_View::updateModel( bool getSelectedObjects ) { - getNewTreeModel(); + getNewTreeModel( getSelectedObjects ); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); @@ -159,8 +161,11 @@ void DependencyTree_View::drawTree() calcTotalCost(); std::cout << "\n\n\n TOTAL COST = " << myTotalCost << std::endl; - clearSelected(); + if( !myIsCompute ) + return; + clearView( false ); + clearSelected(); // draw nodes on scene std::map< std::string, int > entryLevelMap; @@ -180,7 +185,7 @@ void DependencyTree_View::drawTree() if( isItemAdded( objectItem ) ) currentLevel = entryLevelMap[ objectEntry ]; else { - addItem( objectItem ); + addNewItem( objectItem ); objectItem->unselect(); entryLevelMap[ objectEntry ] = currentLevel; levelObjects[ currentLevel ].push_back( objectEntry ); @@ -217,7 +222,7 @@ void DependencyTree_View::drawTree() DependencyTree_Object* object = myTreeMap[node->first]; DependencyTree_Arrow* arrow = myArrows[std::pair(Main_object, object)]; if( arrow && !isItemAdded( arrow) ) - addItem( arrow ); + addNewItem( arrow ); } } } @@ -227,6 +232,7 @@ void DependencyTree_View::drawTree() drawWardArrows( j->second.second ); } std::cout << "\n ComputedCost = " << myComputedCost << std::endl; + } int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) @@ -248,36 +254,33 @@ int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) mySelectionMgr->setSelectedObjects( listIO, true ); } -void DependencyTree_View::customEvent ( QEvent * event ) +void DependencyTree_View::customEvent( QEvent * event ) { if( event->type() == DRAW_EVENT ) { - //qthread->sleepDraw(); - std::cout << "\n\n\n DRAW_EVENT!!! " << std::endl; QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); - std::cout << "\n\n *** myIsCompute " << myIsCompute << std::endl; - if ( !cancelButton->isChecked() ) { - std::cout << "\n\n *** getComputeProgress = " << getComputeProgress() << std::endl; + if ( !cancelButton->isChecked() ) progressBar->setValue( progressBar->maximum() * getComputeProgress() ); - } - std::cout << "\n\n *** qthread->isFinished() = " << qthread->isFinished() << std::endl; if( !myIsCompute || qthread->isFinished() ) { changeWidgetState( false ); cancelButton->setChecked( false ); progressBar->setValue(0); + fitAll(); + QApplication::removePostedEvents( this, ( QEvent::Type )DRAW_EVENT ); } } event->accept(); } -void DependencyTree_View::addItem( QGraphicsItem* theObject ) +void DependencyTree_View::addNewItem( QGraphicsItem* theObject ) { - GraphicsView_ViewPort::addItem( theObject ); qthread->sleepDraw(); + if( theObject ) + addItem( theObject ); SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); QApplication::postEvent( this, new QEvent( ( QEvent::Type )DRAW_EVENT ) ); } @@ -424,19 +427,23 @@ void DependencyTree_View::closeEvent( QCloseEvent* event ) event->accept(); } +void DependencyTree_View::onUpdateModel( bool getSelectedObjects ) +{ + updateModel( getSelectedObjects ); +} + void DependencyTree_View::updateView() { if( !myIsUpdate ) return; -// clearView( false ); - - qthread = new DependencyTree_ComputeDlg_QThread( this ); - changeWidgetState( true ); - //myTimer = startTimer( 100 ); // millisecs qthread->start(); + + + + } void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) @@ -575,7 +582,7 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard, for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { DependencyTree_Object* object = myTreeMap[ node->first ]; if( !isItemAdded( object ) ) { - addItem( object ); + addNewItem( object ); object->unselect(); theEntryLevelMap[ node->first ] = theCurrentLevel; theLevelObjects[ theCurrentLevel ].push_back( node->first ); @@ -600,25 +607,25 @@ void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) if( isItemAdded( object ) && isItemAdded( LinkObject ) ) { DependencyTree_Arrow* arrow = myArrows[std::pair(object, LinkObject)]; if( arrow && !isItemAdded( arrow) ) - addItem( arrow ); + addNewItem( arrow ); } } } } } -void DependencyTree_View::getNewTreeModel() +void DependencyTree_View::getNewTreeModel( bool getSelectedObjects ) { clearView( true ); - SALOME_ListIO aSelList; - mySelectionMgr->selectedObjects( aSelList ); + if( getSelectedObjects ) + mySelectionMgr->selectedObjects( myMainObjects ); // create a list of selected object entry GEOM::string_array_var objectsEntry = new GEOM::string_array(); - objectsEntry->length( aSelList.Extent()); + objectsEntry->length( myMainObjects.Extent()); int iter = 0; - for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next(), iter++ ) { + for ( SALOME_ListIteratorOfListIO It( myMainObjects ); It.More(); It.Next(), iter++ ) { Handle( SALOME_InteractiveObject ) io = It.Value(); GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil(); geomObject = GEOMBase::ConvertIOinGEOMObject( io ); @@ -647,14 +654,16 @@ void DependencyTree_View::clearView( bool isClearModel ) EntryObjectMap::const_iterator objectIter; for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) { DependencyTree_Object* object = objectIter->second; - if( isItemAdded( object ) && object ) + if( object ) + if( isItemAdded( object ) ) removeItem( object ); } ArrowsInfo::const_iterator arrowIter; for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) { DependencyTree_Arrow* object = arrowIter->second; - if( isItemAdded( object ) && object ) + if( object ) + if( isItemAdded( object ) ) removeItem( object ); } if( isClearModel ) { @@ -664,7 +673,7 @@ void DependencyTree_View::clearView( bool isClearModel ) myMaxDownwardLevelsNumber = 0; myMaxUpwardLevelsNumber = 0; myLevelsNumber = 0; - myIsCompute = true; + myIsCompute = false; myIsUpdate = true; } } @@ -714,16 +723,19 @@ DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( Dependency void DependencyTree_ComputeDlg_QThread::run() { + myView->myMutex.lock(); + // QMutexLocker lock( &myView->myMutex ); myView->setIsCompute( true ); myView->drawTree(); - myView->fitAll( true ); - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + QApplication::postEvent( myView, new QEvent( ( QEvent::Type )DRAW_EVENT ) ); + myView->myMutex.unlock(); + //exec(); } void DependencyTree_ComputeDlg_QThread::sleepDraw() { - msleep(10); + msleep(1); } void DependencyTree_ComputeDlg_QThread::cancel() diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 13a3a976e..e9b52f357 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -26,6 +26,8 @@ #include +#include + #include #include @@ -34,6 +36,7 @@ #include #include #include +#include class DependencyTree_Object; class DependencyTree_Arrow; @@ -71,12 +74,11 @@ public: ~DependencyTree_View(); void init( GraphicsView_ViewFrame* ); - void updateModel(); + void updateModel( bool = true ); void drawTree(); virtual int select( const QRectF&, bool ); virtual void customEvent ( QEvent* ); - void addItem( QGraphicsItem* ); void mouseMoveEvent(QMouseEvent *event); void setHierarchyType( const int ); @@ -92,8 +94,13 @@ public: void setIsCompute( bool ); bool getIsCompute(); + + QMutex myMutex; + +public slots: + void onUpdateModel( bool = true ); + protected: -// void timerEvent( QTimerEvent* ); void closeEvent( QCloseEvent* ); private slots: @@ -108,6 +115,7 @@ private: void addNode( const std::string& ); void addArrow( DependencyTree_Object*, DependencyTree_Object* ); + void addNewItem( QGraphicsItem* ); void parseTree(); void parseTreeWard(const GEOMUtils::LevelsList); @@ -117,7 +125,7 @@ private: std::map< int, std::vector< std::string > >&, int, const int ); void drawWardArrows( GEOMUtils::LevelsList ); - void getNewTreeModel(); + void getNewTreeModel( bool = true ); void clearView( bool ); int checkMaxLevelsNumber(); @@ -154,10 +162,12 @@ private: DependencyTree_ComputeDlg_QThread* qthread; + SALOME_ListIO myMainObjects; SALOMEDS::Study_var myStudy; LightApp_SelectionMgr* mySelectionMgr; + }; #endif diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index b3301b981..813e94c72 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -119,13 +119,16 @@ void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) GraphicsView_Viewer::contextMenuPopup( theMenu ); std::cout<<"\n\n\n\n *****contextMenuPopup " << std::endl; + if( DependencyTree_View* aViewPort = dynamic_cast(getActiveViewPort()) ) { int aNbSelected = aViewPort->nbSelected(); std::cout<<"\n aNbSelected " << aNbSelected << std::endl; if( aNbSelected > 0 ) { + theMenu->clear(); theMenu->addAction( tr( "MEN_DISPLAY" ), this, SLOT( onShowSelected() ) ); theMenu->addAction( tr( "MEN_DISPLAY_ONLY" ), this, SLOT( onShowOnlySelected() ) ); + theMenu->addAction( tr( "REBUILD_THE_TREE"), aViewPort, SLOT( onUpdateModel() ) ); } } From f084f3e3cd2846d1a606ae1fe29b94fcbf6f10c9 Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 29 May 2014 17:44:36 +0400 Subject: [PATCH 016/118] Automatic update of Dependency tree after object renaming. --- src/DependencyTree/DependencyTree_View.cxx | 12 ++++++++++++ src/DependencyTree/DependencyTree_View.h | 1 + src/GEOMGUI/GeometryGUI.cxx | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 5d1323278..8841b0474 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -716,6 +716,18 @@ void DependencyTree_View::changeWidgetState( bool theIsCompute ) updateButton->setEnabled( !theIsCompute ); } +bool DependencyTree_View::updateObjectName( const std::string &theEntry ) +{ + bool res = false; + for( initSelected(); moreSelected(); nextSelected() ) { + if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { + aDepObject->updateName(); + res = true; + } + } + return res; +} + DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( DependencyTree_View* theView ) { myView = theView; diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index e9b52f357..accc5e624 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -94,6 +94,7 @@ public: void setIsCompute( bool ); bool getIsCompute(); + bool updateObjectName( const std::string &theEntry ); QMutex myMutex; diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 3e9a1c2c8..c93a28241 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -3343,6 +3343,11 @@ bool GeometryGUI::renameObject( const QString& entry, const QString& name) GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj)); if (!CORBA::is_nil(anObj)) { anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object + // rename the given object in the dependency tree + if ( SUIT_ViewManager *svm = app->getViewManager( GraphicsView_Viewer::Type(), false ) ) + if ( DependencyTree_ViewModel* viewModel = dynamic_cast( svm->getViewModel() ) ) + if ( DependencyTree_View* view = dynamic_cast( viewModel->getActiveViewPort() ) ) + view->updateObjectName( anObj->GetEntry() ); } result = true; } From 3acd20a785405e977ccf60772028e7be107f5c6b Mon Sep 17 00:00:00 2001 From: akl Date: Mon, 2 Jun 2014 10:56:14 +0400 Subject: [PATCH 017/118] OCAF tree traversal to get the downward dependencies including 'unpublished' objects. --- src/GEOM_I/GEOM_Gen_i.cc | 96 ++++++++++++++++++++++++---------------- 1 file changed, 59 insertions(+), 37 deletions(-) diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 3578df7b9..a12db0011 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -60,6 +60,8 @@ #include #include #include +#include +#include #include #include @@ -3149,45 +3151,65 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, } } }*/ - SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator( comp ); - for ( it->InitEx( true ); it->More(); it->Next() ) { - SALOMEDS::SObject_var child = it->Value(); - CORBA::Object_var corbaObj = child->GetObject(); - GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); - if( CORBA::is_nil( geomObj ) ) - continue; + Handle(TDocStd_Document) aDoc = GEOM_Engine::GetEngine()->GetDocument(gbo->GetStudyID()); + Handle(TDataStd_TreeNode) aNode, aRoot; + Handle(GEOM_Function) aFunction; + if (aDoc->Main().FindAttribute(GEOM_Function::GetFunctionTreeID(), aRoot)) { + TDataStd_ChildNodeIterator Itr( aRoot ); + for (; Itr.More(); Itr.Next()) { + aNode = Itr.Value(); + aFunction = GEOM_Function::GetFunction(aNode->Label()); + if (aFunction.IsNull()) { + //MESSAGE ( "Null function !!!!" ); + continue; + } + TDF_Label aLabel = aFunction->GetOwnerEntry(); + if(aLabel.IsNull()) continue; + TCollection_AsciiString anEntry; + TDF_Tool::Entry(aLabel, anEntry); + GEOM::GEOM_BaseObject_var geomObj = GetObject( gbo->GetStudyID(), anEntry.ToCString() ); + /* + SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator( comp ); + for ( it->InitEx( true ); it->More(); it->Next() ) { + SALOMEDS::SObject_var child = it->Value(); + CORBA::Object_var corbaObj = child->GetObject(); + GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); + */ + if( CORBA::is_nil( geomObj ) ) + continue; - GEOM::ListOfGBO_var depList = geomObj->GetDependency(); - if( depList->length() == 0 ) - continue; - std::string aGoIOR = geomObj->GetEntry(); - //cout << "check " << aGoIOR << endl; + GEOM::ListOfGBO_var depList = geomObj->GetDependency(); + if( depList->length() == 0 ) + continue; + std::string aGoIOR = geomObj->GetEntry(); + //cout << "check " << aGoIOR << endl; - for( int i = 0; i < depList->length(); i++ ) { - //cout << "depends on " << depList[i]->GetEntry() << endl; - if ( depList[i]->IsSame( gbo ) ) { - //cout << " the same! " << endl; - //if ( level > 0 ) { - GEOMUtils::NodeLinks anIORs; - GEOMUtils::LevelInfo aLevelMap; - anIORs.push_back( gbo->GetEntry()); - if ( level >= downLevelList.size() ) { - downLevelList.push_back( aLevelMap ); - //std::cout << "AKL: new map" << endl; - } else { - aLevelMap = downLevelList.at(level); - if ( aLevelMap.count( aGoIOR ) > 0 ) { - anIORs = aLevelMap[ aGoIOR ]; - //std::cout << "AKL: get already added iors list: " << endl; - } - } - aLevelMap.insert( std::pair(aGoIOR, anIORs) ); - downLevelList[level] = aLevelMap; - //} - if ( !depList[i]->IsSame( geomObj ) ) { - //cout << " go on! " << endl; - getDownwardDependency(theStudy, geomObj, downLevelList, level+1); - } + for( int i = 0; i < depList->length(); i++ ) { + //cout << "depends on " << depList[i]->GetEntry() << endl; + if ( depList[i]->IsSame( gbo ) ) { + //cout << " the same! " << endl; + //if ( level > 0 ) { + GEOMUtils::NodeLinks anIORs; + GEOMUtils::LevelInfo aLevelMap; + anIORs.push_back( gbo->GetEntry()); + if ( level >= downLevelList.size() ) { + downLevelList.push_back( aLevelMap ); + //std::cout << "AKL: new map" << endl; + } else { + aLevelMap = downLevelList.at(level); + if ( aLevelMap.count( aGoIOR ) > 0 ) { + anIORs = aLevelMap[ aGoIOR ]; + //std::cout << "AKL: get already added iors list: " << endl; + } + } + aLevelMap.insert( std::pair(aGoIOR, anIORs) ); + downLevelList[level] = aLevelMap; + //} + if ( !depList[i]->IsSame( geomObj ) ) { + //cout << " go on! " << endl; + getDownwardDependency(theStudy, geomObj, downLevelList, level+1); + } + } } } } From 1673cb51cebf68db0c529273851e41a696c38358 Mon Sep 17 00:00:00 2001 From: mpa Date: Mon, 2 Jun 2014 12:20:08 +0400 Subject: [PATCH 018/118] - add new Dependency Tree selector --- src/DependencyTree/CMakeLists.txt | 2 + src/DependencyTree/DependencyTree.cxx | 8 ++ .../DependencyTree_Selector.cxx | 101 ++++++++++++++++++ src/DependencyTree/DependencyTree_Selector.h | 44 ++++++++ src/DependencyTree/DependencyTree_View.cxx | 92 ++++++++-------- src/DependencyTree/DependencyTree_View.h | 15 ++- .../DependencyTree_ViewModel.cxx | 2 +- src/GEOMGUI/GeometryGUI.cxx | 2 +- 8 files changed, 213 insertions(+), 53 deletions(-) create mode 100644 src/DependencyTree/DependencyTree_Selector.cxx create mode 100644 src/DependencyTree/DependencyTree_Selector.h diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 2ab2bc271..4b5943fcd 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -74,6 +74,7 @@ SET(DependencyTree_HEADERS DependencyTree.h DependencyTree_Arrow.h DependencyTree_Object.h + DependencyTree_Selector.h ) # header files / to be processed by moc @@ -92,6 +93,7 @@ SET(DependencyTree_SOURCES DependencyTree_View.cxx DependencyTree_Object.cxx DependencyTree_Arrow.cxx + DependencyTree_Selector.cxx #arrow.cxx DependencyTree_ViewModel.cxx ${_moc_SOURCES} diff --git a/src/DependencyTree/DependencyTree.cxx b/src/DependencyTree/DependencyTree.cxx index 583ba43e8..97b428988 100644 --- a/src/DependencyTree/DependencyTree.cxx +++ b/src/DependencyTree/DependencyTree.cxx @@ -39,14 +39,18 @@ #include #include "DependencyTree_View.h" +#include + #include #include #include #include #include +#include #include + #include #include @@ -58,12 +62,16 @@ DependencyTree::DependencyTree() SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; + LightApp_SelectionMgr* mySelMgr = app->selectionMgr(); + SUIT_ViewManager *svm = app->getViewManager(GraphicsView_Viewer::Type(), false ); if(!svm) { myView = new DependencyTree_View(); DependencyTree_ViewModel* ViewModel = new DependencyTree_ViewModel(GraphicsView_Viewer::Type(), myView); SUIT_ViewManager *svm = app->createViewManager( ViewModel ); + new DependencyTree_Selector( ViewModel, + ( SUIT_SelectionMgr*)mySelMgr ); SUIT_ViewWindow* svw = svm->getActiveView(); GraphicsView_ViewFrame* aViewFrame = 0; if (!svw) svw = svm->createViewWindow(); diff --git a/src/DependencyTree/DependencyTree_Selector.cxx b/src/DependencyTree/DependencyTree_Selector.cxx new file mode 100644 index 000000000..5c1c9a7e5 --- /dev/null +++ b/src/DependencyTree/DependencyTree_Selector.cxx @@ -0,0 +1,101 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "DependencyTree_Selector.h" +#include "DependencyTree_View.h" +#include "DependencyTree_ViewModel.h" +#include "DependencyTree_Object.h" + +// GUI includes +#include + +//GEOM includes +#include + +#include + +DependencyTree_Selector::DependencyTree_Selector( DependencyTree_ViewModel* theModel, SUIT_SelectionMgr* theSelMgr ) +:LightApp_GVSelector( (GraphicsView_Viewer*)theModel, theSelMgr ) +{ + myView = dynamic_cast( theModel->getActiveViewPort() ); +} + +DependencyTree_Selector::~DependencyTree_Selector() +{ +} + +//================================================================================= +// function : getSelection() +// purpose : get list of selected Data Owner objects. +//================================================================================= +void DependencyTree_Selector::getSelection( SUIT_DataOwnerPtrList& theList ) const +{ + for( myView->initSelected(); myView->moreSelected(); myView->nextSelected() ) + if( DependencyTree_Object* treeObject = dynamic_cast( myView->selectedObject() ) ) { + const char* entry; + const char* name; + QString studyEntry = treeObject->getGeomObject()->GetStudyEntry(); + if( studyEntry.isEmpty() ) { + entry = treeObject->getEntry().c_str(); + name = "TEMP_IO_UNPUBLISHED"; + } + else { + entry = studyEntry.toStdString().c_str(); + name = "TEMP_IO"; + } + Handle(SALOME_InteractiveObject) tmpIO = + new SALOME_InteractiveObject( entry, "GEOM", name); + + theList.append( new LightApp_DataOwner( tmpIO ) ); + } +} + +//================================================================================= +// function : setSelection() +// purpose : set to selected list of Data Owner objects. +//================================================================================= +void DependencyTree_Selector::setSelection( const SUIT_DataOwnerPtrList& theList ) +{ + myView->clearSelected(); + + for ( SUIT_DataOwnerPtrList::const_iterator it = theList.begin(); it != theList.end(); ++it ) { + const LightApp_DataOwner* owner = dynamic_cast( (*it).operator->() ); + if ( owner ) + if( !owner->IO().IsNull() ) { + const char* name = owner->IO()->getName(); + const char* entry; + if( strcmp( owner->IO()->getComponentDataType(), "GEOM" ) != 0 ) + return; + + if( strcmp( name, "TEMP_IO_UNPUBLISHED" ) == 0 ) + entry = owner->IO()->getEntry(); + else { + GEOM::GEOM_Object_var geomObject = GEOMBase::ConvertIOinGEOMObject( owner->IO() ); + if( geomObject->_is_nil() ) + return; + entry = geomObject->GetEntry(); + } + DependencyTree_Object* object = myView->getObjectByEntry( QString( entry ) ); + if( object ) { + myView->setSelected( object ); + object->select( object->pos().x(), object->pos().y(), object->getRect() ); + } + } + } +} diff --git a/src/DependencyTree/DependencyTree_Selector.h b/src/DependencyTree/DependencyTree_Selector.h new file mode 100644 index 000000000..9ff9c9e7e --- /dev/null +++ b/src/DependencyTree/DependencyTree_Selector.h @@ -0,0 +1,44 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef DEPENDENCYTREE_SELECTOR_H +#define DEPENDENCYTREE_SELECTOR_H + +#include + +class DependencyTree_ViewModel; +class DependencyTree_View; + +class DependencyTree_Selector: public LightApp_GVSelector +{ + +public: + DependencyTree_Selector( DependencyTree_ViewModel*, SUIT_SelectionMgr* ); + ~DependencyTree_Selector(); + +protected: + virtual void getSelection( SUIT_DataOwnerPtrList& ) const; + virtual void setSelection( const SUIT_DataOwnerPtrList& ); + +private: + DependencyTree_View* myView; + +}; + +#endif diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 8841b0474..e17a506e2 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -21,8 +21,6 @@ #include "DependencyTree_Object.h" #include "DependencyTree_Arrow.h" -#include -#include #include // GUI includes @@ -61,6 +59,8 @@ myComputedCost(0) mySelectionMgr = app->selectionMgr(); if ( !mySelectionMgr ) return; + myMainEntries = new GEOM::string_array(); + getNewTreeModel(); } @@ -136,7 +136,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayAscendants , SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayDescendants, SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); - connect( updateButton, SIGNAL( clicked() ), this, SLOT( onUpdateModel( false ) ) ); + connect( updateButton, SIGNAL( clicked() ), this, SLOT( onUpdateModel() ) ); connect( cancelButton, SIGNAL( clicked() ), this, SLOT( onCancel() ) ); setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); @@ -144,15 +144,10 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); } -void DependencyTree_View::updateModel( bool getSelectedObjects ) +void DependencyTree_View::updateModel( bool theUseSelectedObject, bool theUseOB ) { - getNewTreeModel( getSelectedObjects ); - - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - - setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); - setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); - setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); + getNewTreeModel( theUseSelectedObject, theUseOB ); + onHierarchyType(); } void DependencyTree_View::drawTree() @@ -235,25 +230,6 @@ void DependencyTree_View::drawTree() } -int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) -{ - GraphicsView_ViewPort::select( theRect, theIsAppend ); - - mySelectionMgr->clearSelected(); - - // get selection - SALOME_ListIO listIO; - int StudyId = myStudy->StudyId(); - for( initSelected(); moreSelected(); nextSelected() ) - if( DependencyTree_Object* treeObject = dynamic_cast( selectedObject() ) ) { - CORBA::String_var studyEntry = treeObject->getGeomObject()->GetStudyEntry(); - Handle(SALOME_InteractiveObject) tmpIO = - new SALOME_InteractiveObject( studyEntry.in(), "GEOM", "TEMP_IO"); - listIO.Append( tmpIO ); - } - mySelectionMgr->setSelectedObjects( listIO, true ); -} - void DependencyTree_View::customEvent( QEvent * event ) { if( event->type() == DRAW_EVENT ) { @@ -295,6 +271,11 @@ void DependencyTree_View::mouseMoveEvent(QMouseEvent *event) } } +DependencyTree_Object* DependencyTree_View::getObjectByEntry( QString theEntry ) +{ + return myTreeMap[theEntry.toStdString()]; +} + void DependencyTree_View::setHierarchyType( const int theType ) { myIsUpdate = false; @@ -427,9 +408,14 @@ void DependencyTree_View::closeEvent( QCloseEvent* event ) event->accept(); } -void DependencyTree_View::onUpdateModel( bool getSelectedObjects ) +void DependencyTree_View::onUpdateModel() { - updateModel( getSelectedObjects ); + updateModel( false ); +} + +void DependencyTree_View::onRebuildModel() +{ + updateModel( true, false ); } void DependencyTree_View::updateView() @@ -614,32 +600,46 @@ void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) } } -void DependencyTree_View::getNewTreeModel( bool getSelectedObjects ) +void DependencyTree_View::getNewTreeModel( bool theUseSelectedObject, bool theUseOB ) { - clearView( true ); - if( getSelectedObjects ) - mySelectionMgr->selectedObjects( myMainObjects ); - - // create a list of selected object entry GEOM::string_array_var objectsEntry = new GEOM::string_array(); - objectsEntry->length( myMainObjects.Extent()); int iter = 0; - for ( SALOME_ListIteratorOfListIO It( myMainObjects ); It.More(); It.Next(), iter++ ) { - Handle( SALOME_InteractiveObject ) io = It.Value(); - GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil(); - geomObject = GEOMBase::ConvertIOinGEOMObject( io ); - QString entry = geomObject->GetEntry(); - objectsEntry[ iter ] = entry.toLatin1().constData(); + + if( theUseSelectedObject ) { + if( theUseOB ) { + SALOME_ListIO mainObjects; + mySelectionMgr->selectedObjects( mainObjects ); + // create a list of selected object entry + objectsEntry->length( mainObjects.Extent()); + for ( SALOME_ListIteratorOfListIO It( mainObjects ); It.More(); It.Next(), iter++ ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil(); + geomObject = GEOMBase::ConvertIOinGEOMObject( io ); + QString entry = geomObject->GetEntry(); + objectsEntry[ iter ] = entry.toLatin1().constData(); + } + } + else { + objectsEntry->length( nbSelected() ); + for( initSelected(); moreSelected(); nextSelected(), iter++ ) + if( DependencyTree_Object* treeObject = dynamic_cast( selectedObject() ) ) { + objectsEntry[ iter ] = treeObject->getEntry().c_str(); + std::cout << "\n\n\n ----------- entry = " << treeObject->getEntry() << std::endl; + } + } + + myMainEntries = objectsEntry; } // get string which describes dependency tree structure SALOMEDS::TMPFile_var SeqFile = - GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, objectsEntry ); + GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, myMainEntries ); char* buf = (char*) &SeqFile[0]; std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; + clearView( true ); // get dependency tree structure GEOMUtils::ConvertStringToTree( buf, myTreeModel ); diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index accc5e624..4c1b86e8d 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -29,6 +29,9 @@ #include #include +#include +#include + #include #include @@ -74,13 +77,14 @@ public: ~DependencyTree_View(); void init( GraphicsView_ViewFrame* ); - void updateModel( bool = true ); + void updateModel( bool = true, bool = true ); void drawTree(); - virtual int select( const QRectF&, bool ); virtual void customEvent ( QEvent* ); void mouseMoveEvent(QMouseEvent *event); + DependencyTree_Object* getObjectByEntry( QString ); + void setHierarchyType( const int ); void setNodesMovable( const bool ); void setPrefBackgroundColor( const QColor& ); @@ -99,7 +103,8 @@ public: QMutex myMutex; public slots: - void onUpdateModel( bool = true ); + void onUpdateModel(); + void onRebuildModel(); protected: void closeEvent( QCloseEvent* ); @@ -126,7 +131,7 @@ private: std::map< int, std::vector< std::string > >&, int, const int ); void drawWardArrows( GEOMUtils::LevelsList ); - void getNewTreeModel( bool = true ); + void getNewTreeModel( bool = true, bool = true ); void clearView( bool ); int checkMaxLevelsNumber(); @@ -163,7 +168,7 @@ private: DependencyTree_ComputeDlg_QThread* qthread; - SALOME_ListIO myMainObjects; + GEOM::string_array_var myMainEntries; SALOMEDS::Study_var myStudy; LightApp_SelectionMgr* mySelectionMgr; diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index 813e94c72..afeda3d61 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -128,7 +128,7 @@ void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) theMenu->clear(); theMenu->addAction( tr( "MEN_DISPLAY" ), this, SLOT( onShowSelected() ) ); theMenu->addAction( tr( "MEN_DISPLAY_ONLY" ), this, SLOT( onShowOnlySelected() ) ); - theMenu->addAction( tr( "REBUILD_THE_TREE"), aViewPort, SLOT( onUpdateModel() ) ); + theMenu->addAction( tr( "REBUILD_THE_TREE"), aViewPort, SLOT( onRebuildModel() ) ); } } diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index c93a28241..8fed3dfef 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1630,7 +1630,7 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree - mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule ); mgr->hide( mgr->actionId( action( myEraseAll ) ) ); From d2cf8fc7f2a74179cedb626f7463da23534142da Mon Sep 17 00:00:00 2001 From: akl Date: Mon, 2 Jun 2014 17:30:05 +0400 Subject: [PATCH 019/118] Correct checking objects. --- src/GEOM_I/GEOM_Gen_i.cc | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index a12db0011..f6c82c869 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3055,6 +3055,8 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, for ( int i = 0; i < theObjectIORs.length(); i++ ) { ior = theObjectIORs[i].in(); GEOM::GEOM_BaseObject_var anObj = GetObject( theStudy->StudyId(), ior.c_str() ); + if ( anObj->_is_nil() ) + continue; GEOMUtils::LevelsList upLevelList; getUpwardDependency( anObj, upLevelList ); GEOMUtils::LevelsList downLevelList; @@ -3073,6 +3075,7 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, SALOMEDS::TMPFile_var aStream = new SALOMEDS::TMPFile(aBufferSize, aBufferSize, anOctetBuf, 1); + //std::cout << "AKL: end of get" << endl; return aStream._retn(); } @@ -3107,12 +3110,15 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, } GEOM::ListOfGBO_var depList = gbo->GetDependency(); for( int j = 0; j < depList->length(); j++ ) { + if ( depList[j]->_is_nil() ) + continue; if ( level > 0 ) { anIORs.push_back( depList[j]->GetEntry() ); //std::cout << "AKL: add link ior: " << depList[j]->GetEntry() << endl; } //std::cout << "AKL: <<<<<<<< start next step: " << endl; - if ( !depList[j]->IsSame( gbo ) ) { + //if ( !depList[j]->IsSame( gbo ) ) { + if ( !depList[j]->_is_equivalent( gbo ) ) { getUpwardDependency(depList[j], upLevelList, level+1); } //std::cout << "AKL: end next step >>>>>>>> : " << endl; @@ -3185,8 +3191,11 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, //cout << "check " << aGoIOR << endl; for( int i = 0; i < depList->length(); i++ ) { + if ( depList[i]->_is_nil() ) + continue; //cout << "depends on " << depList[i]->GetEntry() << endl; - if ( depList[i]->IsSame( gbo ) ) { + //if ( depList[i]->IsSame( gbo ) ) { + if ( depList[i]->_is_equivalent( gbo ) ) { //cout << " the same! " << endl; //if ( level > 0 ) { GEOMUtils::NodeLinks anIORs; @@ -3205,7 +3214,8 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, aLevelMap.insert( std::pair(aGoIOR, anIORs) ); downLevelList[level] = aLevelMap; //} - if ( !depList[i]->IsSame( geomObj ) ) { + //if ( !depList[i]->IsSame( geomObj ) ) { + if ( !depList[i]->_is_equivalent( geomObj ) ) { //cout << " go on! " << endl; getDownwardDependency(theStudy, geomObj, downLevelList, level+1); } From 589fb207408493772bb70da19f9dc2d6b35372f3 Mon Sep 17 00:00:00 2001 From: mpa Date: Tue, 3 Jun 2014 10:14:22 +0400 Subject: [PATCH 020/118] - add new translation - correct some files --- resources/SalomeApp.xml.in | 1 + src/DependencyTree/CMakeLists.txt | 9 +- src/DependencyTree/DependencyTree.cxx | 96 ----------------- src/DependencyTree/DependencyTree.h | 44 -------- src/DependencyTree/DependencyTree_Object.h | 2 +- .../DependencyTree_Selector.cxx | 28 ++--- src/DependencyTree/DependencyTree_View.cxx | 39 ++++--- src/DependencyTree/DependencyTree_View.h | 23 ++-- .../DependencyTree_ViewModel.cxx | 100 +++++------------- src/DependencyTree/DependencyTree_ViewModel.h | 14 +-- .../resources/DependencyTree_msg_en.ts | 17 ++- .../resources/DependencyTree_msg_fr.ts | 40 ++++++- .../resources/DependencyTree_msg_ja.ts | 46 ++++++-- src/GEOMGUI/GEOM_msg_en.ts | 4 + src/GEOMGUI/GEOM_msg_fr.ts | 4 + src/GEOMGUI/GEOM_msg_ja.ts | 4 + src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 34 +++++- 17 files changed, 220 insertions(+), 285 deletions(-) delete mode 100644 src/DependencyTree/DependencyTree.cxx delete mode 100644 src/DependencyTree/DependencyTree.h diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index d8d3253d4..465b04884 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -38,6 +38,7 @@ +
diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 4b5943fcd..a3807832a 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -71,7 +71,6 @@ SET(_link_LIBRARIES # --- headers --- SET(DependencyTree_HEADERS - DependencyTree.h DependencyTree_Arrow.h DependencyTree_Object.h DependencyTree_Selector.h @@ -89,12 +88,10 @@ SET(_moc_HEADERS QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) SET(DependencyTree_SOURCES - DependencyTree.cxx DependencyTree_View.cxx DependencyTree_Object.cxx DependencyTree_Arrow.cxx DependencyTree_Selector.cxx - #arrow.cxx DependencyTree_ViewModel.cxx ${_moc_SOURCES} ) @@ -107,13 +104,13 @@ SET(_res_files resources/DependencyTree_msg_fr.ts resources/DependencyTree_msg_ja.ts ) + # --- rules --- ADD_LIBRARY(DependencyTree ${DependencyTree_SOURCES}) TARGET_LINK_LIBRARIES(DependencyTree ${_link_LIBRARIES}) INSTALL(TARGETS DependencyTree EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -#INSTALL(FILES ${_res_files} DESTINATION ${SALOME_GEOM_INSTALL_RES_DATA}) -QT4_INSTALL_TS_RESOURCES("${_res_files}" "${SALOME_GEOM_INSTALL_RES_DATA}") - INSTALL(FILES ${DependencyTree_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) + +QT4_INSTALL_TS_RESOURCES("${_res_files}" "${SALOME_GEOM_INSTALL_RES_DATA}") diff --git a/src/DependencyTree/DependencyTree.cxx b/src/DependencyTree/DependencyTree.cxx deleted file mode 100644 index 97b428988..000000000 --- a/src/DependencyTree/DependencyTree.cxx +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#include "DependencyTree.h" -#include "DependencyTree_ViewModel.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "DependencyTree_View.h" -#include - -#include -#include -#include - -#include -#include -#include -#include - - -#include -#include - - -#include -DependencyTree::DependencyTree() -{ - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if ( !app ) return; - - LightApp_SelectionMgr* mySelMgr = app->selectionMgr(); - - SUIT_ViewManager *svm = app->getViewManager(GraphicsView_Viewer::Type(), false ); - - if(!svm) { - myView = new DependencyTree_View(); - DependencyTree_ViewModel* ViewModel = new DependencyTree_ViewModel(GraphicsView_Viewer::Type(), myView); - SUIT_ViewManager *svm = app->createViewManager( ViewModel ); - new DependencyTree_Selector( ViewModel, - ( SUIT_SelectionMgr*)mySelMgr ); - SUIT_ViewWindow* svw = svm->getActiveView(); - GraphicsView_ViewFrame* aViewFrame = 0; - if (!svw) svw = svm->createViewWindow(); - if (svw) aViewFrame = dynamic_cast(svw); - - myView->init( aViewFrame ); - svm->setTitle("DEPENDENCY_TREE"); - } - else { - if( DependencyTree_ViewModel* viewModel = dynamic_cast( svm->getViewModel() ) ) - if( DependencyTree_View* view = dynamic_cast( viewModel->getActiveViewPort() ) ) { - svm->getActiveView()->setFocus(); - view->updateModel(); - } - } - - -} - -DependencyTree::~DependencyTree() -{ -} diff --git a/src/DependencyTree/DependencyTree.h b/src/DependencyTree/DependencyTree.h deleted file mode 100644 index 4b5d54eae..000000000 --- a/src/DependencyTree/DependencyTree.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#include - -#include "DependencyTree_View.h" -class DependencyTree -{ -public: - DependencyTree(); - ~DependencyTree(); - -// static void setBackgroundColor( const QColor& ); -// static void setNodeColor( const QColor& ); -// static void setMainNodeColor( const QColor& ); -// static void setSelectNodeColor( const QColor& ); -// static void setArrowColor( const QColor& ); -// static void setHighlightArrowColor( const QColor& ); -// static void setSelectArrowColor( const QColor& ); - -private: - DependencyTree_View* myView; - - QColor* myBackgroundColor; -}; - diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h index a4a27b303..64be40adc 100644 --- a/src/DependencyTree/DependencyTree_Object.h +++ b/src/DependencyTree/DependencyTree_Object.h @@ -46,7 +46,7 @@ public: std::string getEntry() const; - GEOM::GEOM_BaseObject_var getGeomObject() const; + GEOM::GEOM_BaseObject_var getGeomObject() const; void updateName(); diff --git a/src/DependencyTree/DependencyTree_Selector.cxx b/src/DependencyTree/DependencyTree_Selector.cxx index 5c1c9a7e5..78b72c371 100644 --- a/src/DependencyTree/DependencyTree_Selector.cxx +++ b/src/DependencyTree/DependencyTree_Selector.cxx @@ -50,20 +50,22 @@ void DependencyTree_Selector::getSelection( SUIT_DataOwnerPtrList& theList ) con if( DependencyTree_Object* treeObject = dynamic_cast( myView->selectedObject() ) ) { const char* entry; const char* name; - QString studyEntry = treeObject->getGeomObject()->GetStudyEntry(); - if( studyEntry.isEmpty() ) { - entry = treeObject->getEntry().c_str(); - name = "TEMP_IO_UNPUBLISHED"; - } - else { - entry = studyEntry.toStdString().c_str(); - name = "TEMP_IO"; - } - Handle(SALOME_InteractiveObject) tmpIO = - new SALOME_InteractiveObject( entry, "GEOM", name); + if( !treeObject->getGeomObject()->_is_nil() ) { + QString studyEntry = treeObject->getGeomObject()->GetStudyEntry(); + if( studyEntry.isEmpty() ) { + entry = treeObject->getEntry().c_str(); + name = "TEMP_IO_UNPUBLISHED"; + } + else { + entry = studyEntry.toStdString().c_str(); + name = "TEMP_IO"; + } + Handle(SALOME_InteractiveObject) tmpIO = + new SALOME_InteractiveObject( entry, "GEOM", name); - theList.append( new LightApp_DataOwner( tmpIO ) ); - } + theList.append( new LightApp_DataOwner( tmpIO ) ); + } + } } //================================================================================= diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index e17a506e2..6faf9da62 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -17,12 +17,11 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Internal includes #include "DependencyTree_View.h" #include "DependencyTree_Object.h" #include "DependencyTree_Arrow.h" -#include - // GUI includes #include #include @@ -31,17 +30,20 @@ #include #include +// GEOM includes +#include + // Qt includes #include #include -#include +#include -#define DRAW_EVENT ( QEvent::User + 1 ) +#define UPDATE_EVENT ( QEvent::User + 1 ) #include DependencyTree_View::DependencyTree_View( QWidget* theParent ) -:GraphicsView_ViewPort(theParent), +:GraphicsView_ViewPort( theParent ), myMaxDownwardLevelsNumber(0), myMaxUpwardLevelsNumber(0), myLevelsNumber(0), @@ -70,7 +72,7 @@ DependencyTree_View::~DependencyTree_View() void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) { - qthread = new DependencyTree_ComputeDlg_QThread( this ); + qthread = new DependencyTree_QThread( this ); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); @@ -121,11 +123,11 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) QAction* separator2 = theViewFrame->toolMgr()->separator( false ); theViewFrame->toolMgr()->append( separator1, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( nodesMovableAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( hierarchyDepthLabelAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( hierarchyDepthAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( nodesMovableAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( updateAction, theViewFrame->getToolBarId() ); @@ -150,6 +152,11 @@ void DependencyTree_View::updateModel( bool theUseSelectedObject, bool theUseOB onHierarchyType(); } +QString DependencyTree_View::getViewName() const +{ + return tr( "DEPENDENCY_TREE" ); +} + void DependencyTree_View::drawTree() { myComputedCost = 0; @@ -232,7 +239,7 @@ void DependencyTree_View::drawTree() void DependencyTree_View::customEvent( QEvent * event ) { - if( event->type() == DRAW_EVENT ) { + if( event->type() == UPDATE_EVENT ) { QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); @@ -246,7 +253,7 @@ void DependencyTree_View::customEvent( QEvent * event ) cancelButton->setChecked( false ); progressBar->setValue(0); fitAll(); - QApplication::removePostedEvents( this, ( QEvent::Type )DRAW_EVENT ); + QApplication::removePostedEvents( this, ( QEvent::Type )UPDATE_EVENT ); } } event->accept(); @@ -254,11 +261,11 @@ void DependencyTree_View::customEvent( QEvent * event ) void DependencyTree_View::addNewItem( QGraphicsItem* theObject ) { - qthread->sleepDraw(); if( theObject ) addItem( theObject ); + qthread->sleepDraw(); SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - QApplication::postEvent( this, new QEvent( ( QEvent::Type )DRAW_EVENT ) ); + QApplication::postEvent( this, new QEvent( ( QEvent::Type )UPDATE_EVENT ) ); } void DependencyTree_View::mouseMoveEvent(QMouseEvent *event) @@ -728,29 +735,29 @@ bool DependencyTree_View::updateObjectName( const std::string &theEntry ) return res; } -DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( DependencyTree_View* theView ) +DependencyTree_QThread::DependencyTree_QThread( DependencyTree_View* theView ) { myView = theView; } -void DependencyTree_ComputeDlg_QThread::run() +void DependencyTree_QThread::run() { myView->myMutex.lock(); // QMutexLocker lock( &myView->myMutex ); myView->setIsCompute( true ); myView->drawTree(); - QApplication::postEvent( myView, new QEvent( ( QEvent::Type )DRAW_EVENT ) ); + QApplication::postEvent( myView, new QEvent( ( QEvent::Type )UPDATE_EVENT ) ); myView->myMutex.unlock(); //exec(); } -void DependencyTree_ComputeDlg_QThread::sleepDraw() +void DependencyTree_QThread::sleepDraw() { msleep(1); } -void DependencyTree_ComputeDlg_QThread::cancel() +void DependencyTree_QThread::cancel() { myView->setIsCompute( false ); } diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 4c1b86e8d..e589958ce 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -20,24 +20,21 @@ #ifndef DEPENDENCYTREE_VIEW_H #define DEPENDENCYTREE_VIEW_H +// GEOM includes +#include +#include + +// GUI includes #include #include -#include #include -#include - -#include -#include -#include - - +// QT includes #include #include #include #include -#include #include #include @@ -45,13 +42,13 @@ class DependencyTree_Object; class DependencyTree_Arrow; class DependencyTree_View; -class DependencyTree_ComputeDlg_QThread : public QThread +class DependencyTree_QThread : public QThread { Q_OBJECT public: - DependencyTree_ComputeDlg_QThread( DependencyTree_View* ); + DependencyTree_QThread( DependencyTree_View* ); void sleepDraw(); void cancel(); @@ -80,6 +77,8 @@ public: void updateModel( bool = true, bool = true ); void drawTree(); + QString getViewName() const; + virtual void customEvent ( QEvent* ); void mouseMoveEvent(QMouseEvent *event); @@ -166,7 +165,7 @@ private: int myTotalCost; int myComputedCost; - DependencyTree_ComputeDlg_QThread* qthread; + DependencyTree_QThread* qthread; GEOM::string_array_var myMainEntries; diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index afeda3d61..a2638b82b 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -18,24 +18,21 @@ // #include "DependencyTree_ViewModel.h" - #include "DependencyTree_View.h" -#include "GEOM_Displayer.h" -#include -#include -#include +// GUI includes +#include #include #include -#include #include -#include -#include #include -#include +// GEOM includes +#include + +// QT includes #include -#include + DependencyTree_ViewModel::DependencyTree_ViewModel( const QString& title ) : GraphicsView_Viewer( title ) @@ -45,23 +42,18 @@ DependencyTree_ViewModel::DependencyTree_ViewModel( const QString& title ) DependencyTree_ViewModel::DependencyTree_ViewModel( const QString& title, QWidget* w ) : GraphicsView_Viewer( title, w ) { - } DependencyTree_ViewModel::~DependencyTree_ViewModel() { } -void activateOCCViewer() { -} - void DependencyTree_ViewModel::onShowSelected() { - std::cout<<"\n\n\n\n *****onShowSelected " << std::endl; SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; - app->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true); + app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/ true ); LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); if ( !aSelMgr ) return; @@ -69,25 +61,23 @@ void DependencyTree_ViewModel::onShowSelected() SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); - SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); - OCCViewer_ViewManager* anOCCVM = (OCCViewer_ViewManager*) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/true ); + OCCViewer_ViewManager* anOCCVM = ( OCCViewer_ViewManager* ) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/ true ); - if ( SUIT_ViewModel* vmod = anOCCVM->getViewModel() ) { - if ( SALOME_View* aViewFrame = dynamic_cast( vmod ) ) { + if ( SUIT_ViewModel* viewModel = anOCCVM->getViewModel() ) { + if ( SALOME_View* viewFrame = dynamic_cast( viewModel ) ) { SALOME_ListIteratorOfListIO Iter( aSelList ); - for ( ; Iter.More(); Iter.Next() ) { - disp->Display( Iter.Value(), false, aViewFrame ); - } - aViewFrame->Repaint(); + for ( ; Iter.More(); Iter.Next() ) + disp->Display( Iter.Value(), false, viewFrame ); + viewFrame->Repaint(); } } } void DependencyTree_ViewModel::onShowOnlySelected() { - std::cout<<"\n\n\n\n *****onShowOnlySelected " << std::endl; SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; @@ -95,21 +85,20 @@ void DependencyTree_ViewModel::onShowOnlySelected() if ( !aSelMgr ) return; SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); + aSelMgr->selectedObjects( aSelList ); - SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); - OCCViewer_ViewManager* anOCCVM = (OCCViewer_ViewManager*) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/true ); + OCCViewer_ViewManager* anOCCVM = (OCCViewer_ViewManager*) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/ true ); - if ( SUIT_ViewModel* vmod = anOCCVM->getViewModel() ) { - if ( SALOME_View* aViewFrame = dynamic_cast( vmod ) ) { - disp->EraseAll( true, false, aViewFrame ); + if ( SUIT_ViewModel* viewModel = anOCCVM->getViewModel() ) { + if ( SALOME_View* viewFrame = dynamic_cast( viewModel ) ) { + disp->EraseAll( true, false, viewFrame ); SALOME_ListIteratorOfListIO Iter( aSelList ); - for ( ; Iter.More(); Iter.Next() ) { - disp->Display( Iter.Value(), false, aViewFrame ); - } - aViewFrame->Repaint(); + for ( ; Iter.More(); Iter.Next() ) + disp->Display( Iter.Value(), false, viewFrame ); + viewFrame->Repaint(); } } } @@ -117,50 +106,15 @@ void DependencyTree_ViewModel::onShowOnlySelected() void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) { GraphicsView_Viewer::contextMenuPopup( theMenu ); - std::cout<<"\n\n\n\n *****contextMenuPopup " << std::endl; - - if( DependencyTree_View* aViewPort = dynamic_cast(getActiveViewPort()) ) + if( DependencyTree_View* viewPort = dynamic_cast( getActiveViewPort() ) ) { - int aNbSelected = aViewPort->nbSelected(); - std::cout<<"\n aNbSelected " << aNbSelected << std::endl; + int aNbSelected = viewPort->nbSelected(); if( aNbSelected > 0 ) { theMenu->clear(); theMenu->addAction( tr( "MEN_DISPLAY" ), this, SLOT( onShowSelected() ) ); theMenu->addAction( tr( "MEN_DISPLAY_ONLY" ), this, SLOT( onShowOnlySelected() ) ); - theMenu->addAction( tr( "REBUILD_THE_TREE"), aViewPort, SLOT( onRebuildModel() ) ); + theMenu->addAction( tr( "REBUILD_THE_TREE"), viewPort, SLOT( onRebuildModel() ) ); } } - - } - -//SUIT_ViewWindow* DependencyTree_ViewModel::createView( SUIT_Desktop* theDesktop ) -//{ -// DependencyTree_ViewWindow* aViewFrame; -//if( myWidget ) -// aViewFrame = new DependencyTree_ViewWindow( theDesktop, this, myWidget ); -//else -// aViewFrame = new DependencyTree_ViewWindow( theDesktop, this ); -// -//connect( aViewFrame, SIGNAL( keyPressed( QKeyEvent* ) ), -// this, SLOT( onKeyEvent( QKeyEvent* ) ) ); -// -//connect( aViewFrame, SIGNAL( keyReleased( QKeyEvent* ) ), -// this, SLOT( onKeyEvent( QKeyEvent* ) ) ); -// -//connect( aViewFrame, SIGNAL( mousePressed( QGraphicsSceneMouseEvent* ) ), -// this, SLOT( onMouseEvent( QGraphicsSceneMouseEvent* ) ) ); -// -//connect( aViewFrame, SIGNAL( mouseMoving( QGraphicsSceneMouseEvent* ) ), -// this, SLOT( onMouseEvent( QGraphicsSceneMouseEvent* ) ) ); -// -//connect( aViewFrame, SIGNAL( mouseReleased( QGraphicsSceneMouseEvent* ) ), -// this, SLOT( onMouseEvent( QGraphicsSceneMouseEvent* ) ) ); -// -//connect( aViewFrame, SIGNAL( wheeling( QGraphicsSceneWheelEvent* ) ), -// this, SLOT( onWheelEvent( QGraphicsSceneWheelEvent* ) ) ); -// -//return aViewFrame; -//} - diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h index e41fd8156..d33f1de4b 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.h +++ b/src/DependencyTree/DependencyTree_ViewModel.h @@ -17,27 +17,27 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +#ifndef DEPENDENCYTREE_VIEWMODEL_H +#define DEPENDENCYTREE_VIEWMODEL_H + #include -#include class DependencyTree_ViewModel: public GraphicsView_Viewer { + Q_OBJECT public: - DependencyTree_ViewModel( const QString& title ); DependencyTree_ViewModel( const QString& title, QWidget* w ); ~DependencyTree_ViewModel(); -public: - virtual void contextMenuPopup( QMenu* ); -// virtual SUIT_ViewWindow* createView( SUIT_Desktop* ); - -// static QString Type() { return "DependencyTree"; } + virtual void contextMenuPopup( QMenu* ); private slots: void onShowSelected(); void onShowOnlySelected(); }; + +#endif diff --git a/src/DependencyTree/resources/DependencyTree_msg_en.ts b/src/DependencyTree/resources/DependencyTree_msg_en.ts index c62ab0de1..42bf72258 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_en.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_en.ts @@ -13,7 +13,7 @@ HIERARCHY_DEPTH - Hierarchy depth + Hierarchy depth DISPLAY_ASCENDANTS @@ -23,13 +23,22 @@ DISPLAY_DESCENDANTS Display descendants + + SHOW_ALL + Show all + + + UPDATE + Update + CANCEL Cancel - - CANCELING - Canceling... + DependencyTree_ViewModel + + REBUILD_THE_TREE + Rebuild the tree diff --git a/src/DependencyTree/resources/DependencyTree_msg_fr.ts b/src/DependencyTree/resources/DependencyTree_msg_fr.ts index b4eae6fca..5f3cbad93 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_fr.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_fr.ts @@ -2,11 +2,43 @@ - @default + DependencyTree_View - MEN_TEXTURE - Texture + DEPENDENCY_TREE + Dependency Tree + + + MOVE_NODES + Move nodes + + + HIERARCHY_DEPTH + Hierarchy depth + + + DISPLAY_ASCENDANTS + Display ascendants + + + DISPLAY_DESCENDANTS + Display descendants + + + SHOW_ALL + Show all + + + UPDATE + Update + + + CANCEL + Cancel + + DependencyTree_ViewModel + + REBUILD_THE_TREE + Rebuild the tree - diff --git a/src/DependencyTree/resources/DependencyTree_msg_ja.ts b/src/DependencyTree/resources/DependencyTree_msg_ja.ts index 26250801e..3636aab07 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_ja.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_ja.ts @@ -1,12 +1,44 @@ - - @default + + DependencyTree_View - MEN_TEXTURE - Texture + DEPENDENCY_TREE + Dependency Tree - - - + + MOVE_NODES + Move nodes + + + HIERARCHY_DEPTH + Hierarchy depth + + + DISPLAY_ASCENDANTS + Display ascendants + + + DISPLAY_DESCENDANTS + Display descendants + + + SHOW_ALL + Show all + + + UPDATE + Update + + + CANCEL + Cancel + + DependencyTree_ViewModel + + REBUILD_THE_TREE + Rebuild the tree + + + \ No newline at end of file diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 39e2393f5..5f45808a3 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -4760,6 +4760,10 @@ Please, select face, shell or solid and try again STB_MANAGE_DIMENSIONS Manage measurement dimensions of an object + + MEN_POP_SHOW_DEPENDENCY_TREE + Show dependency tree + MEN_POP_SHOW_ALL_DIMENSIONS Show all dimensions diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index df93751d1..7c7878d86 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -4760,6 +4760,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_MANAGE_DIMENSIONS Gérer la cotation d'un objet + + MEN_POP_SHOW_DEPENDENCY_TREE + Show dependency tree + MEN_POP_SHOW_ALL_DIMENSIONS Afficher les cotations diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index d445fab84..ecad4cb1f 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -4735,6 +4735,10 @@ STB_MANAGE_DIMENSIONS Manage measurement dimensions of an object + + MEN_POP_SHOW_DEPENDENCY_TREE + Show dependency tree + MEN_POP_SHOW_ALL_DIMENSIONS Show all dimensions diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index fd817c14a..90ea6bf25 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -46,7 +46,9 @@ #include #include -#include +#include +#include +#include #include @@ -867,5 +869,33 @@ void GEOMToolsGUI::OnSortChildren() void GEOMToolsGUI::OnShowDependencyTree() { - DependencyTree(); + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + SUIT_ViewManager *svm = app->getViewManager( GraphicsView_Viewer::Type(), false ); + + if( !svm ) { + DependencyTree_View* view = new DependencyTree_View(); + DependencyTree_ViewModel* viewModel = new DependencyTree_ViewModel( GraphicsView_Viewer::Type(), view ); + SUIT_ViewManager *svm = app->createViewManager( viewModel ); + + LightApp_SelectionMgr* selMgr = app->selectionMgr(); + new DependencyTree_Selector( viewModel, (SUIT_SelectionMgr*)selMgr ); + + SUIT_ViewWindow* svw = svm->getActiveView(); + GraphicsView_ViewFrame* aViewFrame = 0; + if (!svw) svw = svm->createViewWindow(); + if (svw) aViewFrame = dynamic_cast(svw); + + view->init( aViewFrame ); + svm->setTitle( view->getViewName() ); + } + else + if( DependencyTree_ViewModel* viewModel = dynamic_cast( svm->getViewModel() ) ) + if( DependencyTree_View* view = dynamic_cast( viewModel->getActiveViewPort() ) ) { + svm->getActiveView()->setFocus(); + view->updateModel(); + } } From 182e941e7e490ba79dd98173f2a7a77a00a90be3 Mon Sep 17 00:00:00 2001 From: mpa Date: Wed, 4 Jun 2014 13:01:12 +0400 Subject: [PATCH 021/118] - clean programming code --- src/DependencyTree/DependencyTree_Arrow.cxx | 3 +- src/DependencyTree/DependencyTree_Object.cxx | 2 +- .../DependencyTree_Selector.cxx | 35 +- src/DependencyTree/DependencyTree_Selector.h | 9 +- src/DependencyTree/DependencyTree_View.cxx | 755 ++++++++---------- src/DependencyTree/DependencyTree_View.h | 145 ++-- .../DependencyTree_ViewModel.cxx | 14 +- src/DependencyTree/DependencyTree_ViewModel.h | 8 +- .../resources/DependencyTree_msg_en.ts | 4 - .../resources/DependencyTree_msg_fr.ts | 4 - .../resources/DependencyTree_msg_ja.ts | 4 - 11 files changed, 441 insertions(+), 542 deletions(-) diff --git a/src/DependencyTree/DependencyTree_Arrow.cxx b/src/DependencyTree/DependencyTree_Arrow.cxx index f403cd906..81784d1a0 100644 --- a/src/DependencyTree/DependencyTree_Arrow.cxx +++ b/src/DependencyTree/DependencyTree_Arrow.cxx @@ -17,6 +17,7 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// internal includes #include "DependencyTree_Arrow.h" #include "DependencyTree_Object.h" @@ -75,7 +76,7 @@ QRectF DependencyTree_Arrow::boundingRect() const qreal extra; QRectF boundingRect; if( myStartItem == myEndItem ) { - extra = arrowSize / 2.0; + extra = arrowSize / 2.0 + 2.0; boundingRect = mySelfDependencyArrow; } else { diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx index cffd24a1d..ebe0cfe90 100644 --- a/src/DependencyTree/DependencyTree_Object.cxx +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -17,6 +17,7 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// internal includes #include "DependencyTree_Object.h" // GEOM includes @@ -169,7 +170,6 @@ void DependencyTree_Object::updateName() QString name = myGeomObject->GetName(); QString studyEntry = myGeomObject->GetStudyEntry(); - std::cout<<"\n\n name = " << name.toStdString() << " studyEntry = " << studyEntry.toStdString() << std::endl; if( studyEntry.isEmpty() ) { if( name.isEmpty() ) diff --git a/src/DependencyTree/DependencyTree_Selector.cxx b/src/DependencyTree/DependencyTree_Selector.cxx index 78b72c371..7d17d63c8 100644 --- a/src/DependencyTree/DependencyTree_Selector.cxx +++ b/src/DependencyTree/DependencyTree_Selector.cxx @@ -17,6 +17,7 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// internal includes #include "DependencyTree_Selector.h" #include "DependencyTree_View.h" #include "DependencyTree_ViewModel.h" @@ -28,8 +29,6 @@ //GEOM includes #include -#include - DependencyTree_Selector::DependencyTree_Selector( DependencyTree_ViewModel* theModel, SUIT_SelectionMgr* theSelMgr ) :LightApp_GVSelector( (GraphicsView_Viewer*)theModel, theSelMgr ) { @@ -50,21 +49,23 @@ void DependencyTree_Selector::getSelection( SUIT_DataOwnerPtrList& theList ) con if( DependencyTree_Object* treeObject = dynamic_cast( myView->selectedObject() ) ) { const char* entry; const char* name; - if( !treeObject->getGeomObject()->_is_nil() ) { - QString studyEntry = treeObject->getGeomObject()->GetStudyEntry(); - if( studyEntry.isEmpty() ) { - entry = treeObject->getEntry().c_str(); - name = "TEMP_IO_UNPUBLISHED"; - } - else { - entry = studyEntry.toStdString().c_str(); - name = "TEMP_IO"; - } - Handle(SALOME_InteractiveObject) tmpIO = - new SALOME_InteractiveObject( entry, "GEOM", name); - - theList.append( new LightApp_DataOwner( tmpIO ) ); + GEOM::GEOM_BaseObject_var anObj = GeometryGUI::GetGeomGen()->GetObject( myView->getStudyId(), + treeObject->getEntry().c_str() ); + if( anObj->_is_nil() ) + continue; + QString studyEntry = anObj->GetStudyEntry(); + if( studyEntry.isEmpty() ) { + entry = treeObject->getEntry().c_str(); + name = "TEMP_IO_UNPUBLISHED"; } + else { + entry = studyEntry.toStdString().c_str(); + name = "TEMP_IO"; + } + Handle(SALOME_InteractiveObject) tmpIO = + new SALOME_InteractiveObject( entry, "GEOM", name); + + theList.append( new LightApp_DataOwner( tmpIO ) ); } } @@ -93,7 +94,7 @@ void DependencyTree_Selector::setSelection( const SUIT_DataOwnerPtrList& theList return; entry = geomObject->GetEntry(); } - DependencyTree_Object* object = myView->getObjectByEntry( QString( entry ) ); + DependencyTree_Object* object = myView->getObjectByEntry( entry ); if( object ) { myView->setSelected( object ); object->select( object->pos().x(), object->pos().y(), object->getRect() ); diff --git a/src/DependencyTree/DependencyTree_Selector.h b/src/DependencyTree/DependencyTree_Selector.h index 9ff9c9e7e..b5096920a 100644 --- a/src/DependencyTree/DependencyTree_Selector.h +++ b/src/DependencyTree/DependencyTree_Selector.h @@ -29,15 +29,18 @@ class DependencyTree_Selector: public LightApp_GVSelector { public: + DependencyTree_Selector( DependencyTree_ViewModel*, SUIT_SelectionMgr* ); ~DependencyTree_Selector(); protected: - virtual void getSelection( SUIT_DataOwnerPtrList& ) const; - virtual void setSelection( const SUIT_DataOwnerPtrList& ); + + virtual void getSelection( SUIT_DataOwnerPtrList& ) const; + virtual void setSelection( const SUIT_DataOwnerPtrList& ); private: - DependencyTree_View* myView; + + DependencyTree_View* myView; }; diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 6faf9da62..e675dc410 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -34,23 +34,15 @@ #include // Qt includes -#include #include -#include - -#define UPDATE_EVENT ( QEvent::User + 1 ) - -#include +#include DependencyTree_View::DependencyTree_View( QWidget* theParent ) :GraphicsView_ViewPort( theParent ), +myLevelsNumber(0), myMaxDownwardLevelsNumber(0), myMaxUpwardLevelsNumber(0), -myLevelsNumber(0), -myIsCompute(false), -myIsUpdate( true ), -myTotalCost(0), -myComputedCost(0) +myIsUpdate( true ) { SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; @@ -68,28 +60,29 @@ myComputedCost(0) DependencyTree_View::~DependencyTree_View() { + clearView( true ); } +//================================================================================= +// function : init() +// purpose : this method is obligatory for initialize view frame actions +//================================================================================= void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) { - qthread = new DependencyTree_QThread( this ); - - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) ); QWidgetAction* nodesMovableAction = new QWidgetAction( theViewFrame ); nodesMovableAction->setDefaultWidget( myNodesMovable ); myDisplayAscendants = new QCheckBox( tr( "DISPLAY_ASCENDANTS" ) ); - QWidgetAction* ShowParentsAction = new QWidgetAction( theViewFrame ); - ShowParentsAction->setDefaultWidget( myDisplayAscendants ); + QWidgetAction* displayAscendantsAction = new QWidgetAction( theViewFrame ); + displayAscendantsAction->setDefaultWidget( myDisplayAscendants ); myDisplayDescendants = new QCheckBox(tr("DISPLAY_DESCENDANTS")); - QWidgetAction* ShowChildrenAction = new QWidgetAction(theViewFrame); - ShowChildrenAction->setDefaultWidget( myDisplayDescendants ); + QWidgetAction* displayDescendantsAction = new QWidgetAction( theViewFrame ); + displayDescendantsAction->setDefaultWidget( myDisplayDescendants ); QLabel* hierarchyDepthLabel = new QLabel( tr( "HIERARCHY_DEPTH" ) ); - QWidgetAction* hierarchyDepthLabelAction = new QWidgetAction(theViewFrame); + QWidgetAction* hierarchyDepthLabelAction = new QWidgetAction( theViewFrame ); hierarchyDepthLabelAction->setDefaultWidget( hierarchyDepthLabel ); myLevelsNumber = checkMaxLevelsNumber(); @@ -105,184 +98,103 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) QWidgetAction* updateAction = new QWidgetAction( theViewFrame ); updateAction->setDefaultWidget( updateButton ); - QPushButton* cancelButton = new QPushButton( tr( "CANCEL" ) ); - cancelButton->setCheckable( true ); - cancelAction = new QWidgetAction( theViewFrame ); - cancelAction->setDefaultWidget( cancelButton ); - cancelAction->setVisible( false ); - - QProgressBar* progressBar = new QProgressBar( this ); - progressBar->setMinimum( 0 ); - progressBar->setMaximum( 100 ); - progressBar->setFixedWidth( 100 ); - progressAction = new QWidgetAction( theViewFrame ); - progressAction->setDefaultWidget( progressBar ); - progressAction->setVisible( false ); - QAction* separator1 = theViewFrame->toolMgr()->separator( false ); QAction* separator2 = theViewFrame->toolMgr()->separator( false ); theViewFrame->toolMgr()->append( separator1, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( hierarchyDepthLabelAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( hierarchyDepthAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( displayAscendantsAction, theViewFrame->getToolBarId() ); + theViewFrame->toolMgr()->append( displayDescendantsAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( nodesMovableAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( updateAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( progressAction, theViewFrame->getToolBarId() ); - theViewFrame->toolMgr()->append( cancelAction, theViewFrame->getToolBarId() ); connect( myNodesMovable, SIGNAL( toggled( bool ) ), this, SLOT( onMoveNodes( bool ) ) ); connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayAscendants , SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayDescendants, SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); connect( updateButton, SIGNAL( clicked() ), this, SLOT( onUpdateModel() ) ); - connect( cancelButton, SIGNAL( clicked() ), this, SLOT( onCancel() ) ); + + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); } +//================================================================================= +// function : updateModel() +// purpose : run all stage of dependency tree creation +//================================================================================= void DependencyTree_View::updateModel( bool theUseSelectedObject, bool theUseOB ) { getNewTreeModel( theUseSelectedObject, theUseOB ); onHierarchyType(); } +//================================================================================= +// function : mouseMoveEvent() +// purpose : make some actions when mouse was moved +//================================================================================= +void DependencyTree_View::mouseMoveEvent( QMouseEvent *event ) +{ + QGraphicsView::mouseMoveEvent( event ); + ArrowsInfo::const_iterator i; + for( i = myArrows.begin(); i != myArrows.end(); i++ ) { + DependencyTree_Arrow* arrow = myArrows[ i->first ]; + arrow->update(); + } +} + +//================================================================================= +// function : getViewName() +// purpose : return the name of current view +//================================================================================= QString DependencyTree_View::getViewName() const { return tr( "DEPENDENCY_TREE" ); } -void DependencyTree_View::drawTree() +//================================================================================= +// function : getStudyId() +// purpose : return Id of current study +//================================================================================= +int DependencyTree_View::getStudyId() const { - myComputedCost = 0; - calcTotalCost(); - std::cout << "\n\n\n TOTAL COST = " << myTotalCost << std::endl; + return myStudy->StudyId(); +} - if( !myIsCompute ) - return; +//================================================================================= +// function : getObjectByEntry() +// purpose : return DependencyTree_Object by entry +//================================================================================= +DependencyTree_Object* DependencyTree_View::getObjectByEntry( const std::string& theEntry ) +{ + return myTreeMap[ theEntry ]; +} - clearView( false ); - clearSelected(); - - // draw nodes on scene - std::map< std::string, int > entryLevelMap; - std::map< int, std::vector< std::string > > levelObjects; - int currentLevel; - int horDistance, verDistance; - GEOMUtils::TreeModel::const_reverse_iterator i; - for( i = myTreeModel.rbegin(); i != myTreeModel.rend(); i++ ) { - if( !myIsCompute ) - return; - currentLevel = 0; - myComputedCost++; - std::string objectEntry = i->first; - DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; - horDistance = 100 + int( objectItem->boundingRect().width() ); - verDistance = 3 * int( objectItem->boundingRect().height() ); - if( isItemAdded( objectItem ) ) - currentLevel = entryLevelMap[ objectEntry ]; - else { - addNewItem( objectItem ); - objectItem->unselect(); - entryLevelMap[ objectEntry ] = currentLevel; - levelObjects[ currentLevel ].push_back( objectEntry ); - } - objectItem->setIsMainObject( true ); - - if( myDisplayAscendants->isChecked() ) - drawWard( i->second.first, entryLevelMap, levelObjects, currentLevel, -1 ); - if( myDisplayDescendants->isChecked() ) - drawWard( i->second.second, entryLevelMap, levelObjects, currentLevel, 1 ); - } - - std::map< int, std::vector< std::string > >::const_iterator level; - for( level = levelObjects.begin(); level != levelObjects.end(); level++ ) { - int step = -horDistance * ( level->second.size() - 1 ) / 2; - std::cout<<"\n\n LEVEL = " << level->first << std::endl; - for( int objIter = 0; objIter < level->second.size(); objIter++ ) { - std::cout << level->second.at( objIter ) << ", "; - DependencyTree_Object* anObject = myTreeMap[ level->second.at( objIter ) ]; - anObject->setPos( step, verDistance * level->first ); - step += horDistance; +//================================================================================= +// function : updateObjectName() +// purpose : update object name, having edited it in Object Browser +//================================================================================= +bool DependencyTree_View::updateObjectName( const std::string& theEntry ) +{ + bool res = false; + for( initSelected(); moreSelected(); nextSelected() ) { + if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { + aDepObject->updateName(); + res = true; } } - - // draw arrows on scene - GEOMUtils::TreeModel::const_iterator j; - for( j = myTreeModel.begin(); j != myTreeModel.end(); j++ ) { - DependencyTree_Object* Main_object = myTreeMap[ j->first ]; - if( j->second.first.size() > 0 ) { - GEOMUtils::LevelInfo Levelup = j->second.first.at(0); - if( myDisplayAscendants ->isChecked() ) { - GEOMUtils::LevelInfo::const_iterator node; - for (node = Levelup.begin(); node != Levelup.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; - DependencyTree_Arrow* arrow = myArrows[std::pair(Main_object, object)]; - if( arrow && !isItemAdded( arrow) ) - addNewItem( arrow ); - } - } - } - if( myDisplayAscendants->isChecked() ) - drawWardArrows( j->second.first ); - if( myDisplayDescendants->isChecked() ) - drawWardArrows( j->second.second ); - } - std::cout << "\n ComputedCost = " << myComputedCost << std::endl; - -} - -void DependencyTree_View::customEvent( QEvent * event ) -{ - if( event->type() == UPDATE_EVENT ) { - - QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); - QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); - - if ( !cancelButton->isChecked() ) - progressBar->setValue( progressBar->maximum() * getComputeProgress() ); - - std::cout << "\n\n *** qthread->isFinished() = " << qthread->isFinished() << std::endl; - if( !myIsCompute || qthread->isFinished() ) { - changeWidgetState( false ); - cancelButton->setChecked( false ); - progressBar->setValue(0); - fitAll(); - QApplication::removePostedEvents( this, ( QEvent::Type )UPDATE_EVENT ); - } - } - event->accept(); -} - -void DependencyTree_View::addNewItem( QGraphicsItem* theObject ) -{ - if( theObject ) - addItem( theObject ); - qthread->sleepDraw(); - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - QApplication::postEvent( this, new QEvent( ( QEvent::Type )UPDATE_EVENT ) ); -} - -void DependencyTree_View::mouseMoveEvent(QMouseEvent *event) -{ - QGraphicsView::mouseMoveEvent( event ); - ArrowsInfo::const_iterator j; - for (j = myArrows.begin(); j != myArrows.end(); j++ ) { - DependencyTree_Arrow* arrow = myArrows[ j->first ]; - arrow->update(); - } -} - -DependencyTree_Object* DependencyTree_View::getObjectByEntry( QString theEntry ) -{ - return myTreeMap[theEntry.toStdString()]; + return res; } +//================================================================================= +// function : setHierarchyType() +// purpose : set hierarchy type of dependency tree +//================================================================================= void DependencyTree_View::setHierarchyType( const int theType ) { myIsUpdate = false; @@ -301,17 +213,23 @@ void DependencyTree_View::setHierarchyType( const int theType ) break; } myIsUpdate = true; - myLevelsNumber = checkMaxLevelsNumber(); - onHierarchyType(); } +//================================================================================= +// function : setNodesMovable() +// purpose : set possibility to move nodes or not +//================================================================================= void DependencyTree_View::setNodesMovable( const bool theIsMovable ) { myNodesMovable->setChecked( theIsMovable ); } +//================================================================================= +// function : setPrefBackgroundColor() +// purpose : set background color from preferences +//================================================================================= void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor ) { if( isForegroundEnabled() ) @@ -323,132 +241,120 @@ void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor ) setBackgroundColor( theColor ); } +//================================================================================= +// function : setNodeColor() +// purpose : set node color from preferences +//================================================================================= void DependencyTree_View::setNodeColor( const QColor& theColor ) { EntryObjectMap::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + for( i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; object->setColor( theColor ); } } +//================================================================================= +// function : setMainNodeColor() +// purpose : set main node color from preferences +//================================================================================= void DependencyTree_View::setMainNodeColor( const QColor& theColor ) { EntryObjectMap::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + for( i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; object->setMainObjectColor( theColor ); } } +//================================================================================= +// function : setSelectNodeColor() +// purpose : set selected node color from preferences +//================================================================================= void DependencyTree_View::setSelectNodeColor( const QColor& theColor ) { EntryObjectMap::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + for( i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; object->setSelectColor( theColor ); } } +//================================================================================= +// function : setArrowColor() +// purpose : set arrow color from preferences +//================================================================================= void DependencyTree_View::setArrowColor( const QColor& theColor ) { - ArrowsInfo::const_iterator j; - for (j = myArrows.begin(); j != myArrows.end(); j++ ) { - DependencyTree_Arrow* arrow = myArrows[ j->first ]; + ArrowsInfo::const_iterator i; + for( i = myArrows.begin(); i != myArrows.end(); i++ ) { + DependencyTree_Arrow* arrow = myArrows[ i->first ]; arrow->setColor( theColor ); } } +//================================================================================= +// function : setHighlightArrowColor() +// purpose : set highlighted arrow color from preferences +//================================================================================= void DependencyTree_View::setHighlightArrowColor( const QColor& theColor ) { - ArrowsInfo::const_iterator j; - for (j = myArrows.begin(); j != myArrows.end(); j++ ) { - DependencyTree_Arrow* arrow = myArrows[ j->first ]; + ArrowsInfo::const_iterator i; + for( i = myArrows.begin(); i != myArrows.end(); i++ ) { + DependencyTree_Arrow* arrow = myArrows[ i->first ]; arrow->setHighlightColor( theColor ); } } +//================================================================================= +// function : setSelectArrowColor() +// purpose : set selected arrow color from preferences +//================================================================================= void DependencyTree_View::setSelectArrowColor( const QColor& theColor ) { - ArrowsInfo::const_iterator j; - for (j = myArrows.begin(); j != myArrows.end(); j++ ) { - DependencyTree_Arrow* arrow = myArrows[ j->first ]; + ArrowsInfo::const_iterator i; + for( i = myArrows.begin(); i != myArrows.end(); i++ ) { + DependencyTree_Arrow* arrow = myArrows[ i->first ]; arrow->setSelectColor( theColor ); } } -void DependencyTree_View::setIsCompute( bool theIsCompute ) -{ - myIsCompute = theIsCompute; -} - -bool DependencyTree_View::getIsCompute() -{ - return myIsCompute; -} - -//void DependencyTree_View::timerEvent(QTimerEvent *event) -//{ -// QPushButton* cancelButton = dynamic_cast( cancelAction->defaultWidget() ); -// QProgressBar* progressBar = dynamic_cast( progressAction->defaultWidget() ); -// -// std::cout << "TIMER! " << std::endl; -// if ( !cancelButton->isChecked() ) -// progressBar->setValue( progressBar->maximum() * getComputeProgress() ); -// -// if( !myIsCompute || qthread->isFinished() ) { -// changeWidgetState( false ); -// killTimer( myTimer ); -// cancelButton->setChecked( false ); -// progressBar->setValue(0); -// } -// event->accept(); -//} - -void DependencyTree_View::closeEvent( QCloseEvent* event ) -{ - if(qthread->isRunning()) - { - event->ignore(); - return; - } - event->accept(); -} - -void DependencyTree_View::onUpdateModel() -{ - updateModel( false ); -} - +//================================================================================= +// function : onRebuildModel() +// purpose : slot for updating tree model using selected objects in viewer +//================================================================================= void DependencyTree_View::onRebuildModel() { updateModel( true, false ); } -void DependencyTree_View::updateView() +//================================================================================= +// function : onUpdateModel() +// purpose : slot for updating tree model for main objects in viewer +//================================================================================= +void DependencyTree_View::onUpdateModel() { - if( !myIsUpdate ) - return; - - changeWidgetState( true ); - - qthread->start(); - - - - + updateModel( false ); } +//================================================================================= +// function : onMoveNodes() +// purpose : slot for setting the possibility to move nodes in viewer +//================================================================================= void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) { EntryObjectMap::const_iterator i; - for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + for( i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; if( object ) object->setMovable( theIsMoveNodes ); } } +//================================================================================= +// function : onHierarchyType() +// purpose : slot for setting the hierarchy type of tree +//================================================================================= void DependencyTree_View::onHierarchyType() { myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); @@ -463,49 +369,14 @@ void DependencyTree_View::onHierarchyType() updateView(); } -void DependencyTree_View::onCancel() -{ - qthread->cancel(); - //qthread->deleteLater(); -} - -void DependencyTree_View::addNode( const std::string& theEntry ) -{ - if( !myTreeMap[theEntry] ) - myTreeMap[theEntry] = new DependencyTree_Object( theEntry ); -} - -void DependencyTree_View::addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ) -{ - bool isFind = false; - - std::cout << " " << startItem->getEntry() << " " << endItem->getEntry() << std::endl; - ArrowsInfo::const_iterator i; - for (i = myArrows.begin(); i != myArrows.end(); i++ ) { - DependencyTree_Arrow* arrow = i->second; - if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) { - isFind = true; - std::cout<<" theSame " << std::endl; - } - else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) { - arrow->setIsBiLink( true ); - std::cout<<" Bilink " << std::endl; - isFind = true; - } - } - - if( !isFind ) { - DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem); - myArrows[std::pair( startItem, endItem )] = arrow; - std::cout<<" addArrow " << std::endl; - } -} - +//================================================================================= +// function : parseTree() +// purpose : parse created model to initialize all nodes and arrows +//================================================================================= void DependencyTree_View::parseTree() { - GEOMUtils::TreeModel::const_iterator i; - for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { + for( i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { std::string objectEntry = i->first; addNode( objectEntry ); parseTreeWard( i->second.first ); @@ -516,43 +387,50 @@ void DependencyTree_View::parseTree() myMaxDownwardLevelsNumber = i->second.second.size(); } - for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { - DependencyTree_Object* Main_object = myTreeMap[i->first]; + for( i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { + DependencyTree_Object* Main_object = myTreeMap[ i->first ]; if( i->second.first.size() > 0 ) { GEOMUtils::LevelInfo Levelup = i->second.first.at(0); GEOMUtils::LevelInfo::const_iterator node; - for (node = Levelup.begin(); node != Levelup.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; + for( node = Levelup.begin(); node != Levelup.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[ node->first ]; addArrow( Main_object, object ); } } parseTreeWardArrow( i->second.first ); parseTreeWardArrow( i->second.second ); } - - } -void DependencyTree_View::parseTreeWard(const GEOMUtils::LevelsList theWard) + +//================================================================================= +// function : parseTreeWard() +// purpose : parse tree ward to initialize all nodes of current ward +//================================================================================= +void DependencyTree_View::parseTreeWard( const GEOMUtils::LevelsList& theWard ) { int levelsNumber = theWard.size(); for( int level = 0; level < levelsNumber; level++ ) { GEOMUtils::LevelInfo levelInfo = theWard[ level ]; GEOMUtils::LevelInfo::const_iterator node; - for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { + for( node = levelInfo.begin(); node != levelInfo.end(); node++ ) addNode( node->first ); - } } } -void DependencyTree_View::parseTreeWardArrow(const GEOMUtils::LevelsList theWard) + +//================================================================================= +// function : parseTreeWardArrow() +// purpose : parse tree ward to initialize all arrows of current ward +//================================================================================= +void DependencyTree_View::parseTreeWardArrow( const GEOMUtils::LevelsList& theWard) { - for(int j = 0; j < theWard.size(); j++ ) { - GEOMUtils::LevelInfo Level = theWard.at(j); - GEOMUtils::LevelInfo::const_iterator node; - for (node = Level.begin(); node != Level.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; + for( int j = 0; j < theWard.size(); j++ ) { + GEOMUtils::LevelInfo Level = theWard.at(j); + GEOMUtils::LevelInfo::const_iterator node; + for( node = Level.begin(); node != Level.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[ node->first ]; std::vector Links = node->second; for( int link = 0; link < Links.size(); link++ ) { - DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; + DependencyTree_Object* LinkObject = myTreeMap[ Links[ link ] ]; if( object && LinkObject ) addArrow( object, LinkObject ); } @@ -560,22 +438,130 @@ void DependencyTree_View::parseTreeWardArrow(const GEOMUtils::LevelsList theWard } } +//================================================================================= +// function : addNode() +// purpose : add node to viewer +//================================================================================= +void DependencyTree_View::addNode( const std::string& theEntry ) +{ + if( !myTreeMap[theEntry] ) + myTreeMap[theEntry] = new DependencyTree_Object( theEntry ); +} + +//================================================================================= +// function : addArrow() +// purpose : add arrow to viewer +//================================================================================= +void DependencyTree_View::addArrow( DependencyTree_Object* startItem, DependencyTree_Object* endItem ) +{ + bool isFind = false; + + ArrowsInfo::const_iterator i; + for( i = myArrows.begin(); i != myArrows.end(); i++ ) { + DependencyTree_Arrow* arrow = i->second; + if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) + isFind = true; + else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) { + arrow->setIsBiLink( true ); + isFind = true; + } + } + if( !isFind ) { + DependencyTree_Arrow *arrow = new DependencyTree_Arrow( startItem, endItem ); + myArrows[ std::pair( startItem, endItem ) ] = arrow; + } +} + +//================================================================================= +// function : drawTree() +// purpose : redraw dependency tree using existing model +//================================================================================= +void DependencyTree_View::drawTree() +{ + clearView( false ); + clearSelected(); + + // draw nodes on scene + std::map< std::string, int > entryLevelMap; + std::map< int, std::vector< std::string > > levelObjects; + int currentLevel; + int horDistance, verDistance; + GEOMUtils::TreeModel::const_reverse_iterator i; + for( i = myTreeModel.rbegin(); i != myTreeModel.rend(); i++ ) { + currentLevel = 0; + std::string objectEntry = i->first; + DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; + horDistance = 100 + int( objectItem->boundingRect().width() ); + verDistance = 3 * int( objectItem->boundingRect().height() ); + if( isItemAdded( objectItem ) ) + currentLevel = entryLevelMap[ objectEntry ]; + else { + addItem( objectItem ); + objectItem->unselect(); + entryLevelMap[ objectEntry ] = currentLevel; + levelObjects[ currentLevel ].push_back( objectEntry ); + } + objectItem->setIsMainObject( true ); + + if( myDisplayAscendants->isChecked() ) + drawWard( i->second.first, entryLevelMap, levelObjects, currentLevel, -1 ); + if( myDisplayDescendants->isChecked() ) + drawWard( i->second.second, entryLevelMap, levelObjects, currentLevel, 1 ); + } + + std::map< int, std::vector< std::string > >::const_iterator level; + for( level = levelObjects.begin(); level != levelObjects.end(); level++ ) { + int step = -horDistance * ( level->second.size() - 1 ) / 2; + for( int objIter = 0; objIter < level->second.size(); objIter++ ) { + DependencyTree_Object* anObject = myTreeMap[ level->second.at( objIter ) ]; + anObject->setPos( step, verDistance * level->first ); + step += horDistance; + } + } + + // draw arrows on scene + GEOMUtils::TreeModel::const_iterator j; + for( j = myTreeModel.begin(); j != myTreeModel.end(); j++ ) { + DependencyTree_Object* Main_object = myTreeMap[ j->first ]; + if( j->second.first.size() > 0 ) { + GEOMUtils::LevelInfo Levelup = j->second.first.at(0); + if( myDisplayAscendants ->isChecked() ) { + GEOMUtils::LevelInfo::const_iterator node; + for( node = Levelup.begin(); node != Levelup.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[ node->first ]; + DependencyTree_Arrow* arrow = + myArrows[ std::pair( Main_object, object )]; + if( arrow && !isItemAdded( arrow ) ) + addItem( arrow ); + } + } + } + if( myDisplayAscendants->isChecked() ) + drawWardArrows( j->second.first ); + if( myDisplayDescendants->isChecked() ) + drawWardArrows( j->second.second ); + } +} + +//================================================================================= +// function : drawWard() +// purpose : draw nodes of dependency tree ward (ascendant or descendant) +//================================================================================= void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard, std::map< std::string, int >& theEntryLevelMap, std::map< int, std::vector< std::string > >& theLevelObjects, int theCurrentLevel, const int theLevelStep ) { for( int level = 0; level < theWard.size(); level++ ) { - if( level >= myLevelsNumber || !myIsCompute ) + if( level >= myLevelsNumber ) return; - myComputedCost++; theCurrentLevel += theLevelStep; GEOMUtils::LevelInfo levelInfo = theWard.at( level ); GEOMUtils::LevelInfo::const_iterator node; - for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { + for( node = levelInfo.begin(); node != levelInfo.end(); node++ ) { DependencyTree_Object* object = myTreeMap[ node->first ]; - if( !isItemAdded( object ) ) { - addNewItem( object ); + if( object && !isItemAdded( object ) ) { + addItem( object ); object->unselect(); theEntryLevelMap[ node->first ] = theCurrentLevel; theLevelObjects[ theCurrentLevel ].push_back( node->first ); @@ -584,32 +570,84 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard, } } -void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) +//================================================================================= +// function : drawWardArrows() +// purpose : draw arrows of dependency tree ward (ascendant or descendant) +//================================================================================= +void DependencyTree_View::drawWardArrows( const GEOMUtils::LevelsList& theWard ) { - for(int j = 0; j < theWard.size(); j++ ) { - if( j >= myLevelsNumber || !myIsCompute ) + for( int j = 0; j < theWard.size(); j++ ) { + if( j >= myLevelsNumber ) break; - myComputedCost++; GEOMUtils::LevelInfo Level = theWard.at(j); GEOMUtils::LevelInfo::const_iterator node; - for (node = Level.begin(); node != Level.end(); node++ ) { - DependencyTree_Object* object = myTreeMap[node->first]; + for( node = Level.begin(); node != Level.end(); node++ ) { + DependencyTree_Object* object = myTreeMap[ node->first ]; GEOMUtils::NodeLinks Links = node->second; for( int link = 0; link < Links.size(); link++ ) { - DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; + DependencyTree_Object* LinkObject = myTreeMap[ Links[ link ] ]; if( isItemAdded( object ) && isItemAdded( LinkObject ) ) { - DependencyTree_Arrow* arrow = myArrows[std::pair(object, LinkObject)]; - if( arrow && !isItemAdded( arrow) ) - addNewItem( arrow ); + DependencyTree_Arrow* arrow = myArrows[ std::pair( object, LinkObject ) ]; + if( arrow && !isItemAdded( arrow ) ) + addItem( arrow ); } } } } } +//================================================================================= +// function : updateView() +// purpose : update viewer using created dependency tree model +//================================================================================= +void DependencyTree_View::updateView() +{ + if( !myIsUpdate ) + return; + + drawTree(); + fitAll(); +} + +//================================================================================= +// function : clearView() +// purpose : clear viewer and initialize all variables +//================================================================================= +void DependencyTree_View::clearView( bool isClearModel ) +{ + EntryObjectMap::const_iterator objectIter; + for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) { + DependencyTree_Object* object = objectIter->second; + if( object ) + if( isItemAdded( object ) ) + removeItem( object ); + } + + ArrowsInfo::const_iterator arrowIter; + for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) { + DependencyTree_Arrow* object = arrowIter->second; + if( object ) + if( isItemAdded( object ) ) + removeItem( object ); + } + + if( isClearModel ) { + myTreeMap.clear(); + myArrows.clear(); + myTreeModel.clear(); + myLevelsNumber = 0; + myMaxDownwardLevelsNumber = 0; + myMaxUpwardLevelsNumber = 0; + myIsUpdate = true; + } +} + +//================================================================================= +// function : getNewTreeModel() +// purpose : get dependency tree model from engine +//================================================================================= void DependencyTree_View::getNewTreeModel( bool theUseSelectedObject, bool theUseOB ) { - GEOM::string_array_var objectsEntry = new GEOM::string_array(); int iter = 0; @@ -618,7 +656,7 @@ void DependencyTree_View::getNewTreeModel( bool theUseSelectedObject, bool theUs SALOME_ListIO mainObjects; mySelectionMgr->selectedObjects( mainObjects ); // create a list of selected object entry - objectsEntry->length( mainObjects.Extent()); + objectsEntry->length( mainObjects.Extent() ); for ( SALOME_ListIteratorOfListIO It( mainObjects ); It.More(); It.Next(), iter++ ) { Handle( SALOME_InteractiveObject ) io = It.Value(); GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil(); @@ -630,134 +668,37 @@ void DependencyTree_View::getNewTreeModel( bool theUseSelectedObject, bool theUs else { objectsEntry->length( nbSelected() ); for( initSelected(); moreSelected(); nextSelected(), iter++ ) - if( DependencyTree_Object* treeObject = dynamic_cast( selectedObject() ) ) { + if( DependencyTree_Object* treeObject = dynamic_cast( selectedObject() ) ) objectsEntry[ iter ] = treeObject->getEntry().c_str(); - std::cout << "\n\n\n ----------- entry = " << treeObject->getEntry() << std::endl; - } } - myMainEntries = objectsEntry; } // get string which describes dependency tree structure SALOMEDS::TMPFile_var SeqFile = GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, myMainEntries ); - char* buf = (char*) &SeqFile[0]; - - std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; + char* buf = (char*)&SeqFile[0]; clearView( true ); + mySelectionMgr->clearSelected(); + // get dependency tree structure GEOMUtils::ConvertStringToTree( buf, myTreeModel ); - mySelectionMgr->clearSelected(); - parseTree(); - -} - -void DependencyTree_View::clearView( bool isClearModel ) -{ - EntryObjectMap::const_iterator objectIter; - for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) { - DependencyTree_Object* object = objectIter->second; - if( object ) - if( isItemAdded( object ) ) - removeItem( object ); - } - - ArrowsInfo::const_iterator arrowIter; - for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) { - DependencyTree_Arrow* object = arrowIter->second; - if( object ) - if( isItemAdded( object ) ) - removeItem( object ); - } - if( isClearModel ) { - myTreeMap.clear(); - myArrows.clear(); - myTreeModel.clear(); - myMaxDownwardLevelsNumber = 0; - myMaxUpwardLevelsNumber = 0; - myLevelsNumber = 0; - myIsCompute = false; - myIsUpdate = true; - } } +//================================================================================= +// function : checkMaxLevelsNumber() +// purpose : calculate max levels number +//================================================================================= int DependencyTree_View::checkMaxLevelsNumber() { if( myDisplayAscendants->isChecked() && myDisplayDescendants->isChecked() ) - return myMaxUpwardLevelsNumber>myMaxDownwardLevelsNumber?myMaxUpwardLevelsNumber:myMaxDownwardLevelsNumber; + return myMaxUpwardLevelsNumber > myMaxDownwardLevelsNumber ? + myMaxUpwardLevelsNumber : myMaxDownwardLevelsNumber; else if( myDisplayAscendants ->isChecked() ) return myMaxUpwardLevelsNumber; else if( myDisplayDescendants->isChecked() ) return myMaxDownwardLevelsNumber; } - -void DependencyTree_View::calcTotalCost() -{ - myTotalCost = myTreeModel.size(); - GEOMUtils::TreeModel::const_iterator i; - for( i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { - if( myDisplayAscendants->isChecked() ) - myTotalCost += 2*( myLevelsNumber < i->second.first.size() ? myLevelsNumber : i->second.first.size() ); - if( myDisplayDescendants->isChecked() ) - myTotalCost += 2*( myLevelsNumber < i->second.second.size() ? myLevelsNumber : i->second.second.size() ); - } -} - -double DependencyTree_View::getComputeProgress() -{ - return double( myComputedCost ) / double( myTotalCost ); -} - -void DependencyTree_View::changeWidgetState( bool theIsCompute ) -{ - cancelAction->setVisible( theIsCompute ); - progressAction->setVisible( theIsCompute ); - - myHierarchyDepth->setEnabled( !theIsCompute ); - myDisplayAscendants->setEnabled( !theIsCompute ); - myDisplayDescendants->setEnabled( !theIsCompute ); - updateButton->setEnabled( !theIsCompute ); -} - -bool DependencyTree_View::updateObjectName( const std::string &theEntry ) -{ - bool res = false; - for( initSelected(); moreSelected(); nextSelected() ) { - if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { - aDepObject->updateName(); - res = true; - } - } - return res; -} - -DependencyTree_QThread::DependencyTree_QThread( DependencyTree_View* theView ) -{ - myView = theView; -} - -void DependencyTree_QThread::run() -{ - myView->myMutex.lock(); - // QMutexLocker lock( &myView->myMutex ); - myView->setIsCompute( true ); - myView->drawTree(); - - QApplication::postEvent( myView, new QEvent( ( QEvent::Type )UPDATE_EVENT ) ); - myView->myMutex.unlock(); - //exec(); -} - -void DependencyTree_QThread::sleepDraw() -{ - msleep(1); -} - -void DependencyTree_QThread::cancel() -{ - myView->setIsCompute( false ); -} diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index e589958ce..94943ab7d 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -31,36 +31,14 @@ #include // QT includes -#include #include #include #include -#include -#include class DependencyTree_Object; class DependencyTree_Arrow; class DependencyTree_View; -class DependencyTree_QThread : public QThread -{ - Q_OBJECT - -public: - - DependencyTree_QThread( DependencyTree_View* ); - void sleepDraw(); - void cancel(); - - DependencyTree_View* getView() { return myView; }; - -protected: - void run(); - -private: - DependencyTree_View* myView; -}; - typedef std::map EntryObjectMap; typedef std::map,DependencyTree_Arrow*> ArrowsInfo; @@ -73,105 +51,78 @@ public: DependencyTree_View( QWidget* = 0 ); ~DependencyTree_View(); - void init( GraphicsView_ViewFrame* ); - void updateModel( bool = true, bool = true ); - void drawTree(); + void init( GraphicsView_ViewFrame* ); + void updateModel( bool = true, bool = true ); - QString getViewName() const; + void mouseMoveEvent(QMouseEvent *event); - virtual void customEvent ( QEvent* ); - void mouseMoveEvent(QMouseEvent *event); + QString getViewName() const; + int getStudyId() const; - DependencyTree_Object* getObjectByEntry( QString ); + DependencyTree_Object* getObjectByEntry( const std::string& ); + bool updateObjectName( const std::string& theEntry ); - void setHierarchyType( const int ); - void setNodesMovable( const bool ); - void setPrefBackgroundColor( const QColor& ); - void setNodeColor( const QColor& ); - void setMainNodeColor( const QColor& ); - void setSelectNodeColor( const QColor& ); - void setArrowColor( const QColor& ); - void setHighlightArrowColor( const QColor& ); - void setSelectArrowColor( const QColor& ); - - void setIsCompute( bool ); - bool getIsCompute(); - - bool updateObjectName( const std::string &theEntry ); - - QMutex myMutex; + void setHierarchyType( const int ); + void setNodesMovable( const bool ); + void setPrefBackgroundColor( const QColor& ); + void setNodeColor( const QColor& ); + void setMainNodeColor( const QColor& ); + void setSelectNodeColor( const QColor& ); + void setArrowColor( const QColor& ); + void setHighlightArrowColor( const QColor& ); + void setSelectArrowColor( const QColor& ); public slots: - void onUpdateModel(); - void onRebuildModel(); -protected: - void closeEvent( QCloseEvent* ); + void onRebuildModel(); private slots: - void updateView(); - void onMoveNodes( bool ); - void onHierarchyType(); - void onCancel(); -signals: + void onUpdateModel(); + void onMoveNodes( bool ); + void onHierarchyType(); private: - void addNode( const std::string& ); - void addArrow( DependencyTree_Object*, DependencyTree_Object* ); - void addNewItem( QGraphicsItem* ); + void parseTree(); + void parseTreeWard( const GEOMUtils::LevelsList& ); + void parseTreeWardArrow( const GEOMUtils::LevelsList& ); - void parseTree(); - void parseTreeWard(const GEOMUtils::LevelsList); - void parseTreeWardArrow(const GEOMUtils::LevelsList); + void addNode( const std::string& ); + void addArrow( DependencyTree_Object*, DependencyTree_Object* ); - void drawWard( const GEOMUtils::LevelsList&, std::map< std::string, int >&, - std::map< int, std::vector< std::string > >&, int, const int ); - void drawWardArrows( GEOMUtils::LevelsList ); + void drawTree(); + void drawWard( const GEOMUtils::LevelsList&, std::map< std::string, int >&, + std::map< int, std::vector< std::string > >&, int, const int ); + void drawWardArrows( const GEOMUtils::LevelsList& ); - void getNewTreeModel( bool = true, bool = true ); - void clearView( bool ); + void updateView(); + void clearView( bool ); - int checkMaxLevelsNumber(); - void calcTotalCost(); - double getComputeProgress(); + void getNewTreeModel( bool = true, bool = true ); - void changeWidgetState( bool ); + int checkMaxLevelsNumber(); - GEOMUtils::TreeModel myTreeModel; + GEOMUtils::TreeModel myTreeModel; - EntryObjectMap myTreeMap; - ArrowsInfo myArrows; + EntryObjectMap myTreeMap; + ArrowsInfo myArrows; - int myLevelsNumber; - int myMaxDownwardLevelsNumber; - int myMaxUpwardLevelsNumber; + int myLevelsNumber; + int myMaxDownwardLevelsNumber; + int myMaxUpwardLevelsNumber; - QCheckBox* myNodesMovable; - QSpinBox* myHierarchyDepth; - QCheckBox* myDisplayAscendants; - QCheckBox* myDisplayDescendants; - QWidgetAction* cancelAction; - QWidgetAction* progressAction; - QPushButton* updateButton; + QCheckBox* myNodesMovable; + QSpinBox* myHierarchyDepth; + QCheckBox* myDisplayAscendants; + QCheckBox* myDisplayDescendants; + QPushButton* updateButton; - int myTimer; - - bool myIsUpdate; - - bool myIsCompute; - - int myTotalCost; - int myComputedCost; - - DependencyTree_QThread* qthread; - - GEOM::string_array_var myMainEntries; - - SALOMEDS::Study_var myStudy; - LightApp_SelectionMgr* mySelectionMgr; + SALOMEDS::Study_var myStudy; + LightApp_SelectionMgr* mySelectionMgr; + GEOM::string_array_var myMainEntries; + bool myIsUpdate; }; diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index a2638b82b..bc62e35c6 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -17,6 +17,7 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// internal includes #include "DependencyTree_ViewModel.h" #include "DependencyTree_View.h" @@ -33,7 +34,6 @@ // QT includes #include - DependencyTree_ViewModel::DependencyTree_ViewModel( const QString& title ) : GraphicsView_Viewer( title ) { @@ -48,6 +48,10 @@ DependencyTree_ViewModel::~DependencyTree_ViewModel() { } +//================================================================================= +// function : onShowSelected() +// purpose : slot for showing selected objects in OCC Viewer +//================================================================================= void DependencyTree_ViewModel::onShowSelected() { SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); @@ -76,6 +80,10 @@ void DependencyTree_ViewModel::onShowSelected() } } +//================================================================================= +// function : onShowOnlySelected() +// purpose : slot for showing only selected objects in OCC Viewer +//================================================================================= void DependencyTree_ViewModel::onShowOnlySelected() { SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); @@ -103,6 +111,10 @@ void DependencyTree_ViewModel::onShowOnlySelected() } } +//================================================================================= +// function : contextMenuPopup() +// purpose : process calling of context menu popup +//================================================================================= void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) { GraphicsView_Viewer::contextMenuPopup( theMenu ); diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h index d33f1de4b..910afb236 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.h +++ b/src/DependencyTree/DependencyTree_ViewModel.h @@ -28,15 +28,17 @@ class DependencyTree_ViewModel: public GraphicsView_Viewer Q_OBJECT public: + DependencyTree_ViewModel( const QString& title ); DependencyTree_ViewModel( const QString& title, QWidget* w ); ~DependencyTree_ViewModel(); - virtual void contextMenuPopup( QMenu* ); + virtual void contextMenuPopup( QMenu* ); private slots: - void onShowSelected(); - void onShowOnlySelected(); + + void onShowSelected(); + void onShowOnlySelected(); }; diff --git a/src/DependencyTree/resources/DependencyTree_msg_en.ts b/src/DependencyTree/resources/DependencyTree_msg_en.ts index 42bf72258..a4a763781 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_en.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_en.ts @@ -31,10 +31,6 @@ UPDATE Update - - CANCEL - Cancel - DependencyTree_ViewModel REBUILD_THE_TREE diff --git a/src/DependencyTree/resources/DependencyTree_msg_fr.ts b/src/DependencyTree/resources/DependencyTree_msg_fr.ts index 5f3cbad93..ab3e08246 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_fr.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_fr.ts @@ -31,10 +31,6 @@ UPDATE Update - - CANCEL - Cancel - DependencyTree_ViewModel REBUILD_THE_TREE diff --git a/src/DependencyTree/resources/DependencyTree_msg_ja.ts b/src/DependencyTree/resources/DependencyTree_msg_ja.ts index 3636aab07..1f3400058 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_ja.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_ja.ts @@ -31,10 +31,6 @@ UPDATE Update - - CANCEL - Cancel - DependencyTree_ViewModel REBUILD_THE_TREE From 633e63eb2ef3a098557062bdc8cfa52a458be35d Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 4 Jun 2014 15:57:33 +0400 Subject: [PATCH 022/118] Add comments, remove outputs and put some things in order. --- idl/GEOM_Gen.idl | 14 ++-- src/GEOMUtils/GEOMUtils.cxx | 7 -- src/GEOM_I/GEOM_Gen_i.cc | 130 +++++++++++++----------------------- src/GEOM_I/GEOM_Gen_i.hh | 6 +- 4 files changed, 53 insertions(+), 104 deletions(-) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 01187280d..7e91ac4df 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -5091,17 +5091,13 @@ module GEOM in long row ); /*! - * \brief Get dependencies of the given object from other objects in study - * \param list of IORs - * \return texture byte array - * Example of using: - * SALOMEDS::TMPFile_var SeqFile = - * myGeometryGUI->GetGeomGen()->GetDependencyTree( aStudy, aListOfIORs ); - * char* buf; - * buf = (char*) &SeqFile[0]; + * \brief Collects dependencies of the given objects from other ones + * \param theStudy The study in which the object is published + * \param theListOfEntries List of GEOM object entries in OCAF tree (not in study) + * \return Struct of dependent entries and its links as a byte array */ SALOMEDS::TMPFile GetDependencyTree(in SALOMEDS::Study theStudy, - in string_array strValues); + in string_array theListOfEntries); }; }; diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx index 69e474e02..89b13d96b 100644 --- a/src/GEOMUtils/GEOMUtils.cxx +++ b/src/GEOMUtils/GEOMUtils.cxx @@ -1022,7 +1022,6 @@ LevelsList parseWard( const std::string& theData, std::size_t& theCursor ) } LevelsList levelsListData; for( int level = 0; level < levelsListStr.size(); level++ ) { - std::cout<<" Level" << level + 1 << ":" << std::endl; std::vector namesListStr; std::stringstream ss1( levelsListStr[level] ); while ( std::getline( ss1, substr, ',' ) ) { @@ -1040,14 +1039,11 @@ LevelsList parseWard( const std::string& theData, std::size_t& theCursor ) std::string nodeItem = linksListStr[0]; if( !nodeItem.empty() ) { NodeLinks linksListData; - std::cout<<" " << nodeItem << " - "; for( int link = 1; link < linksListStr.size(); link++ ) { std::string linkItem = linksListStr[link]; linksListData.push_back( linkItem ); - std::cout << linkItem << ", "; }// Links levelInfoData[nodeItem] = linksListData; - std::cout << std::endl; } }// Level's objects levelsListData.push_back(levelInfoData); @@ -1070,15 +1066,12 @@ void ConvertStringToTree( const std::string &theData, { std::size_t objectIndex = theData.find( '-', cursor ); std::string objectEntry = theData.substr( cursor, objectIndex - cursor ); - std::cout<<"\n\nMainObject = " << objectEntry <( upwardList, downwardList ); diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index f6c82c869..02bf4be17 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3042,32 +3042,35 @@ Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId) } //======================================================================= -// function : -// purpose : +// function : GetDependencyTree +// purpose : Collects dependencies of the given objects from other ones //======================================================================= SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, - const GEOM::string_array& theObjectIORs ) { + const GEOM::string_array& theObjectEntries ) { // fill in the tree structure GEOMUtils::TreeModel tree; - // foreach( QString ior, theObjectIORs ) { - std::string ior; - for ( int i = 0; i < theObjectIORs.length(); i++ ) { - ior = theObjectIORs[i].in(); - GEOM::GEOM_BaseObject_var anObj = GetObject( theStudy->StudyId(), ior.c_str() ); + std::string entry; + for ( int i = 0; i < theObjectEntries.length(); i++ ) { + // process objects one-by-one + entry = theObjectEntries[i].in(); + GEOM::GEOM_BaseObject_var anObj = GetObject( theStudy->StudyId(), entry.c_str() ); if ( anObj->_is_nil() ) continue; GEOMUtils::LevelsList upLevelList; + // get objects from which current one depends on recursively getUpwardDependency( anObj, upLevelList ); GEOMUtils::LevelsList downLevelList; - getDownwardDependency( theStudy, anObj, downLevelList ); - tree.insert( std::pair >(ior, std::pair( upLevelList, downLevelList ) ) ); + // get objects that depends on current one recursively + getDownwardDependency( anObj, downLevelList ); + tree.insert( std::pair >(entry, std::pair( upLevelList, downLevelList ) ) ); } // translation the tree into string std::string treeStr; GEOMUtils::ConvertTreeToString( tree, treeStr ); + // put string into stream char* aBuffer = (char*)CORBA::string_dup(treeStr.c_str()); int aBufferSize = strlen((char*)aBuffer); @@ -3075,98 +3078,73 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, SALOMEDS::TMPFile_var aStream = new SALOMEDS::TMPFile(aBufferSize, aBufferSize, anOctetBuf, 1); - //std::cout << "AKL: end of get" << endl; return aStream._retn(); } //======================================================================= -// function : -// purpose : +// function : getUpwardDependency +// purpose : Collects the entries of objects on that the given one depends //======================================================================= void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &upLevelList, int level ) { - std::string aGboIOR = gbo->GetEntry(); + std::string aGboEntry = gbo->GetEntry(); for (int i=0; i < upLevelList.size(); i++ ) { GEOMUtils::LevelInfo aMap = upLevelList.at(i); - if ( aMap.count( aGboIOR ) > 0 ) + if ( aMap.count( aGboEntry ) > 0 ) + // this object has been processed earlier return; } - //std::cout << "\n\nAKL: upnode IOR: " << aGboIOR << endl; - //std::cout << "AKL: level: " << level << endl; - GEOMUtils::NodeLinks anIORs; + GEOMUtils::NodeLinks anEntries; GEOMUtils::LevelInfo aLevelMap; if ( level > 0 ) { if ( level-1 >= upLevelList.size() ) { + // create a new map upLevelList.push_back( aLevelMap ); - //std::cout << "AKL: new map" << endl; } else { + // get the existent map aLevelMap = upLevelList.at(level-1); - if ( aLevelMap.count( aGboIOR ) > 0 ) { - anIORs = aLevelMap[ aGboIOR ]; - //std::cout << "AKL: get already added iors list: " << endl; + if ( aLevelMap.count( aGboEntry ) > 0 ) { + anEntries = aLevelMap[ aGboEntry ]; } } } + // get objects on that the current one depends GEOM::ListOfGBO_var depList = gbo->GetDependency(); for( int j = 0; j < depList->length(); j++ ) { if ( depList[j]->_is_nil() ) continue; if ( level > 0 ) { - anIORs.push_back( depList[j]->GetEntry() ); - //std::cout << "AKL: add link ior: " << depList[j]->GetEntry() << endl; + anEntries.push_back( depList[j]->GetEntry() ); } - //std::cout << "AKL: <<<<<<<< start next step: " << endl; - //if ( !depList[j]->IsSame( gbo ) ) { - if ( !depList[j]->_is_equivalent( gbo ) ) { + // get dependencies recursively + if ( !depList[j]->_is_equivalent( gbo ) ) { // avoid self-recursion getUpwardDependency(depList[j], upLevelList, level+1); } - //std::cout << "AKL: end next step >>>>>>>> : " << endl; } if ( level > 0 ) { - //std::cout << "AKL: insert links for node: " << aGboIOR << endl; - aLevelMap.insert( std::pair(aGboIOR, anIORs) ); - //std::cout << "AKL: insert level map: " << endl; + aLevelMap.insert( std::pair(aGboEntry, anEntries) ); upLevelList[level-1] = aLevelMap; } } //======================================================================= -// function : -// purpose : +// function : getDownwardDependency +// purpose : Collects the entries of objects that depends on the given one //======================================================================= -void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, - GEOM::GEOM_BaseObject_ptr gbo, +void GEOM_Gen_i::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &downLevelList, int level ) { - SALOMEDS::SComponent_var comp = theStudy->FindComponent("GEOM"); - if ( !comp ) - return; - - std::string aGboIOR = gbo->GetEntry(); - //cout << "for " << aGboIOR << " at level " << level << endl; - /*if ( level > 0 ) { - if ( level >= downLevelList.size() ) { - downLevelList.push_back( aLevelMap ); - //std::cout << "AKL: new map" << endl; - } else { - aLevelMap = downLevelList.at(level); - if ( aLevelMap.count( aGboIOR ) > 0 ) { - anIORs = aLevelMap[ aGboIOR ]; - //std::cout << "AKL: get already added iors list: " << endl; - } - } - }*/ Handle(TDocStd_Document) aDoc = GEOM_Engine::GetEngine()->GetDocument(gbo->GetStudyID()); Handle(TDataStd_TreeNode) aNode, aRoot; Handle(GEOM_Function) aFunction; if (aDoc->Main().FindAttribute(GEOM_Function::GetFunctionTreeID(), aRoot)) { + // go through the whole OCAF tree TDataStd_ChildNodeIterator Itr( aRoot ); for (; Itr.More(); Itr.Next()) { aNode = Itr.Value(); aFunction = GEOM_Function::GetFunction(aNode->Label()); if (aFunction.IsNull()) { - //MESSAGE ( "Null function !!!!" ); continue; } TDF_Label aLabel = aFunction->GetOwnerEntry(); @@ -3174,59 +3152,41 @@ void GEOM_Gen_i::getDownwardDependency( SALOMEDS::Study_ptr theStudy, TCollection_AsciiString anEntry; TDF_Tool::Entry(aLabel, anEntry); GEOM::GEOM_BaseObject_var geomObj = GetObject( gbo->GetStudyID(), anEntry.ToCString() ); - /* - SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator( comp ); - for ( it->InitEx( true ); it->More(); it->Next() ) { - SALOMEDS::SObject_var child = it->Value(); - CORBA::Object_var corbaObj = child->GetObject(); - GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); - */ if( CORBA::is_nil( geomObj ) ) continue; - + // get dependencies for current object in the tree GEOM::ListOfGBO_var depList = geomObj->GetDependency(); if( depList->length() == 0 ) continue; - std::string aGoIOR = geomObj->GetEntry(); - //cout << "check " << aGoIOR << endl; - + std::string aGoEntry = geomObj->GetEntry(); + // go through dependencies of current object to check whether it depends on the given object for( int i = 0; i < depList->length(); i++ ) { if ( depList[i]->_is_nil() ) continue; - //cout << "depends on " << depList[i]->GetEntry() << endl; - //if ( depList[i]->IsSame( gbo ) ) { if ( depList[i]->_is_equivalent( gbo ) ) { - //cout << " the same! " << endl; - //if ( level > 0 ) { - GEOMUtils::NodeLinks anIORs; + // yes, the current object depends on the given object + GEOMUtils::NodeLinks anEntries; GEOMUtils::LevelInfo aLevelMap; - anIORs.push_back( gbo->GetEntry()); + anEntries.push_back( gbo->GetEntry()); if ( level >= downLevelList.size() ) { downLevelList.push_back( aLevelMap ); - //std::cout << "AKL: new map" << endl; } else { aLevelMap = downLevelList.at(level); - if ( aLevelMap.count( aGoIOR ) > 0 ) { - anIORs = aLevelMap[ aGoIOR ]; - //std::cout << "AKL: get already added iors list: " << endl; + if ( aLevelMap.count( aGoEntry ) > 0 ) { + anEntries = aLevelMap[ aGoEntry ]; } } - aLevelMap.insert( std::pair(aGoIOR, anIORs) ); + aLevelMap.insert( std::pair(aGoEntry, anEntries) ); downLevelList[level] = aLevelMap; - //} - //if ( !depList[i]->IsSame( geomObj ) ) { - if ( !depList[i]->_is_equivalent( geomObj ) ) { - //cout << " go on! " << endl; - getDownwardDependency(theStudy, geomObj, downLevelList, level+1); + // get dependencies of the current object recursively + if ( !depList[i]->_is_equivalent( geomObj ) ) { // avoid self-recursion + getDownwardDependency(geomObj, downLevelList, level+1); } + break; } } } } - /*if ( level > 0 ) { - aLevelMap.insert( std::pair(aGboIOR, anIORs) ); - downLevelList[level-1] = aLevelMap; - }*/ } //===================================================================================== diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh index 429e4e2f5..43c086cdc 100644 --- a/src/GEOM_I/GEOM_Gen_i.hh +++ b/src/GEOM_I/GEOM_Gen_i.hh @@ -199,8 +199,9 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi CORBA::Boolean theInheritFirstArg, CORBA::Boolean theAddPrefix); + //Collects dependencies of the given objects from other ones SALOMEDS::TMPFile* GetDependencyTree(SALOMEDS::Study_ptr theStudy, - const GEOM::string_array& theObjectIORs); + const GEOM::string_array& theObjectEntries); //-----------------------------------------------------------------------// // Transaction methods // @@ -375,8 +376,7 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi GEOMUtils::LevelsList &upLevelList, int level = 0 ); - void getDownwardDependency( SALOMEDS::Study_ptr theStudy, - GEOM::GEOM_BaseObject_ptr gbo, + void getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &downLevelList, int level = 0 ); From 6076f118e7c6a05b3bc6ae9033b99397496af783 Mon Sep 17 00:00:00 2001 From: mpa Date: Thu, 5 Jun 2014 11:44:52 +0400 Subject: [PATCH 023/118] - clean programming code - add signals for GEOMGUI-->DependecyTree cooperation - begin of documentation --- doc/salome/gui/GEOM/images/pref15.png | Bin 76726 -> 130990 bytes doc/salome/gui/GEOM/images/pref_dep_tree.png | Bin 0 -> 42323 bytes .../gui/GEOM/input/geometry_preferences.doc | 29 +++++ resources/SalomeApp.xml.in | 17 +-- src/CMakeLists.txt | 4 +- src/DependencyTree/CMakeLists.txt | 42 +++----- src/DependencyTree/DependencyTree_Object.cxx | 30 ++++-- src/DependencyTree/DependencyTree_Object.h | 12 ++- .../DependencyTree_Selector.cxx | 1 + src/DependencyTree/DependencyTree_View.cxx | 99 +++++++++++++++--- src/DependencyTree/DependencyTree_View.h | 26 ++--- .../DependencyTree_ViewModel.cxx | 1 + src/GEOMGUI/CMakeLists.txt | 2 - src/GEOMGUI/GEOM_msg_en.ts | 6 +- src/GEOMGUI/GEOM_msg_fr.ts | 60 +++++++++++ src/GEOMGUI/GEOM_msg_ja.ts | 60 +++++++++++ src/GEOMGUI/GeometryGUI.cxx | 67 ++---------- src/GEOMGUI/GeometryGUI.h | 2 + 18 files changed, 315 insertions(+), 143 deletions(-) mode change 100755 => 100644 doc/salome/gui/GEOM/images/pref15.png create mode 100644 doc/salome/gui/GEOM/images/pref_dep_tree.png diff --git a/doc/salome/gui/GEOM/images/pref15.png b/doc/salome/gui/GEOM/images/pref15.png old mode 100755 new mode 100644 index c4b2cac4d3f13ce5d1f6d50a098b8efda028763f..0fec2802ae0f8d6e8402420c3854ed17363a3c41 GIT binary patch literal 130990 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 literal 76726 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

rUQd|5B68 z;rc>P&>mQdo7)xc=1kk^POrEy%of&7o2z9|%NQjbCyxPaogV(6yJqEpO&K?lm`6m6 z_*ZsG2AS_D|CJo((oU=|l}B@U1WSmpu&!3QUK%=Zec5M-@(tIF?*eq%_YnG* z-LvxNrab+cgXOa&;(S;!=OLrX0XE_e4rEtR*eQMB%g?B=2<<&e4FlDw<9_3-EGp1I zQ>(l(M8Z%CiyszwsZB0A(RuPCGi4|ut{6(FZy6SYb+TgbL`W#T?5u?=eMw$RSi8O*S<*mezwxJ$Z0n;rxQ-X z#9*UW-e{-uHiB;dxDn)dU`5&;&26HnC%b~KN350B{4S=dpeoXfCy!0ty#$-zl_|;p ztICvp$PKw#*uUiOn>>+t<4^#eT-*$Lt@tnYjFtv|kD&59|MOUFVJLO{9s)dnkJ!JA z4MEB$Co2>IaiR^JgZ|XB%;Bfken0GY@T#Bxwd4WsM?(Jw^@Q9@!WaJB#J}3Z?Q!_E z2Txsu11yV)APyX#muc94VQHm&LC#?*c>aHg$A7<%+#nuo*T)Cq2LDj^#tL6?;C|8H zAJH3fPnBn?dh1eic!m4l9cMsvD6~cek{QIS;ssZk{vGN7LcR49lM>qR7~8F&;8=S9 zfgSkgxlKg7cR{zCscSoZEj;q-dTt&LO@ekjA1peCvh?TQjM(rW4B~_A$FA$;xaGUK zclL=N#5zsCeP`fl)!5%}vnrrEjl2x+=2PZDjg4aXH`*HQlWp(Q(gyJRbD54Rhcnv+ z7MlFsLfhg}in(@rM<<=~m?A%+;dzWwO@Dqx+hD6jd>S0J`%v4U0WykiPPp&?GIF!F zhJoKP1I}$vg|%KTjWTVA{A4E$Cl66AEG(!Vjtnb5ryTPjxogM>{OFn8j}f1JIB*}& zL)g1nG0 zstz=Lhon2D6!gk2)-5MEe#<>-$K#2T#OKHr3TEc%F7%`)KTjxksRoUhRphqm1{RR z81QbnnfMPN88y+vnP5{B9x4VEe+(XtPbJ9ePh;4d=+{}mKOM6}LF*XJwA4@nN0t7qG zSUgoR@K7~0j?#I$9neG)&go*+R<^0PRqrd!&w6t7m8g#^?LdiyjlzSA=tT8S6C4J6 z4-q+zV^COafBEjK)9YdH8Y{9hLg|O-oR47gdZcdqpCKH4NhH^xO+Yi+(~CIwTY;?S zC=!pmDr49&`f*z+!upvQT?bYg(heP^RJS5-1;yj%l0QYbB|JuW*oL?5$@6ID`qWv) zMbf=ubi&+KEHY>L^KA^UvcIc^$KG_`MLHu3kocd@$Amz0#nGC&mT}OVBb1K(J+5x~ zRJi&xZ6GG(Y>;M<=E>H{L%%B;8%!C=qaErjeQE$yb3*zWOC?D^8$JxoiY2X0A$oi{ z-X0KCR%?ZqsB^{Iq1zfRmav%1rmH`rJNGBnv_eU-#6FW!jT1uZ74^J$3^6{29Jh9Pm6 zv$85ii;N2F)lVJqwA2+?E%Jla0#L%V=J0>v%8(vMgkt!an$?l_Bo)HwrtTuL~j85DqWa2;A=)*Gi+oJ-oJf4*?rKi`;AV zVN6gOkdo=?QH`pUoLE{I=u%T+4StV3xGm+_3jO^_>1S;>@MHwnFGVnh7Ho;No<33# zloYU(wr&vE46adYQ+V}_4FR@NXk|G>}ik+OKNliZJj%(s^vOCtLJ)TQ!QB=5a z%jg{PbNOCGK;O05#wk9=-^8N$IiOO%kED-ORB8)#sVTAs`5blB(qoFgjxJ&h=$=rkm!2Y~cGuU&zPaK3VDTlh8AvZ}+;T zT)H<&OP%~KdX4w&*C~Jy@gIJo=acRh1tFCXwWmD@AWPTq$rBTj!L+CGb#n;X0^OXR zzv<>QD#klRDFY|+vgsJ{kNZcP98Rqp_A?U_+ORm;sX8IMN4fNa>cO=`B>{gcTm zTWg--fu^CNX5X3v^O}Z1nLS@9Pg75p3+p~exbIOp)9evq`Rk*P%y6HmszUi=qea)) z^xidid8NVq+3X3E%2?Nmwx0R0{ZyG1|+`G2{!JYMIjr+EGzAs=EfGvT_ zb~@fGk>;`@IP&mFy+Fs1%GWWJ?tR>EnbS7(m;-G@Ompn9qZVH;jg9YQ6MsPwZByNt zk^YQ#m5=tyZEE%bT}oSA0DyL3UV<5NfHY4yqnoR+EmoFC`%5aKi?c6GY};K#Qu3I3 z()KYxw-Q2aVLHOn(wlCJwH;6LIoQt}?2-Aj`U>AM`WkKP)E){zy&?2Lm(zL&QcZ4| z-Rdi@1bF((TY|AeFrPBa@jPz4oBl}WY>iiYJQTG?2(b)2M6-isr?$IBH_2Ah zcl!iQzwax2)fT>nO+qPb`05ef_n2dQy~MC_RAz$Ro#d@FkPynmf{uuOTgluVL}BWe zzC@lcw6WK{^4I$Gy)F$g$laF$JH4GeCC$hYealcYwp3?g1if2HavOTQ5t*Ft(X0z( z3TMXKj(aGK>{8GqkH;Llzq%UplMTt+fO~m>5sUsb;x((lPn{3H|Ose-1cF4oQ5D`%BAPhQ}{>QPvd+LoqO&RG(82`X#M{<*`>Hh`eI z3^q{bxnW=`=_jm(SE)O3^GZ&XRFh7GBwb9cw|(tiom$=!>VMU?+k3@;OeHKk%=0C+ za$r<$Ajj>B!G^KAJ@6EhY~vEO7K{SxwW9JFuPTF`P~^!!IY)RBJHLlyD!de@N;b+? ztC~Bux*kp)-iEIktjl8;ouT!!p39%|vQ&`PD3Q>vym?S>B{k-PCB+;hA3XSRUBI|0z+K?i0OM3GkXMD%RKUz9u4_>u_>;m4QKO_WzbZ^kZ~mIS2Q~I4taR_X}S-)TPJR>TCcpM(CewiHHs<~(w_X6is6;x=&B(=sU_xC?oq(ft8ycRN3iH==}6)^r`8b0;gzQE0x`EZ~z0*seMba zBkSInxAWeN#zD5!^v4qx+^(uA3xlfEpa8%V;*}@C(sa%zsQc4O#8|^SKby-@SR2wt zEWRzqFo%}0qhZrKB&=c3cjkC8TCI6tBi-cYTh8SYchZ^**T7j0QXoHB;GhBJn~;p< z$n{3nkLe(*uc^9Wv~CRNRMa*mFD{ za=+h_dnmur9IuRwZyG(K(9EFC8Ww^?nO=Z;gM!?w4|~uP(nRsClHW8Qwc~U3GNB5f zezTw^04jqUdZnR-)L!XcP*wv=l>Y{h*V`0KAT`ph* zX;gxfR;2(PW}(l_ePp($-e?Zyr+GX11aoXba~SYEZy%1Tg*E|(U&La0pQp(qwH0K# zO;#{WZB5O+1M7I;eZ{5nG&$$yzn5qCJv#MTak|g_LYsd_wz`mI{&V6h;~c%!pBMA;4qo*aF;;nc z79c9M&hRUAs=l?|UZ)v6}4r++guP1BfWCJQDc!@4$GJp_vYzr9&ke1~ooHBE7z4y(Vis-v~ zk~7-VD*$I;s%T5^MN0}l<`gRWF=JlmNEO)xDO_HxRb0_;GqV5d#W;v{dk@ak!?P3q z5O2L~6@pL`>EVgl@NzXlz8TIBZ$W@ibVop$0GQj7)p?8pIv{pCv@wXNJpqipMm_0l zdNJJDIsFq-Q~I>0b0-$!jbwi=*y>?sUOcqJ3)!CC>`^#$K7t`RqxC6#(xv^wtBO}d zd8`?WqKd0F&JKrX@q4;W?(cc1Fzfp~G?tQ|y>;7ZdX*Nyjw?dT3@MoW2$JL-@R?~4=rvA-Jx~e zey2u6n$&5UqC`Y?f{SL+A4AN@D|XjDIyRcS$NyRs&bi6Rz)fJ>;Dg9J05`96~#QDe0cKH1!3K$P?y@W1cIz= zYz6EV_D(MUtR1`d+z;5tT%esXuVe6y^1O#D=QtNw>Er2qEM5b*Xun_hoV+0{XgQ34r&bjMH)9q{&c)bih zx~MfGK(uIx^7f8`#OnxQGNeA#oaQbqHhJ2L!dIKH<1wqgV{`vv+_p}f%XkxhptiM$ ze;8&va|s!aSn& zvOC-hn@ep=0PyEBp&qL$e38n?x8IDb1^&SvJAh$ zB_m7MB)dlS!9j!>)CaS^$Vd=w)qXbSR#$T915Q}s%?O{r6KTs5&3$lD^MmosB(8%J z&g?YgNb#@axMT>i#?7jg;}>&2jNOyKmSeMg8--@5tE(~y-I8{5J(Rrm$gpkNsN@#I zKx*luDBC*RiKp=FYZr(@zEW1XmX9h+7>?`UMOEfIzWvybfi@{OzDd0HAn1n?edz>fQXyOGA}zc9sNagcrCAz1As9%8|M$HlAgL|EKHE zve0uZ^&9#j_Dx|b)+FW|rj-JJSfs!yv>VfMjJdtBgG`%;yzPs$`V39_J3WEI^ZB`0 zi{G+4B8G9!M0iuQ%gIc3-#)(FAtJM7=Uyzm;xwCir_Lc-&sn^$q5A3NMCW3Ma*-}* zwODEPy*`@FdyJvXEA;$m$P6EKwyM%a1iT{ni@2l6h4=fbQwej^;Hgyv%Tmw zk;$cFxV4<^`zmRi<5uFnS_t-|!`}@)=BI!yqiEPii)I2U4F_(BYW5xVragR`qnYPl& zkkt3uSbHzOKj^^7td2|Z`W^1k5NN6O9*7qr5(qb$Ja18AedrIRa$#TDe`$F7I1~rA zLgQaR<#;m?Dh-nhpbYmhxNyH#kN6c0^zD>iOKnZ;IrKIg()4|kj>%by%>E%toe^dQ zY$UNmBdn+zR`az)+#tVI6Gv*#if=I_m~YuQqPi>2)hox`p5*o=j&bSLu>%F4 zTl=LkBYPbJmHa~?Wn{5OaK(QVKx9)Uc*;+wU9%GNcjYObnHnAmC?b|W_@ zd3?KjbX~I1`8^P1r6!K(SdQxE4yJ_8)E=*=LuX@(RUcfXO;nO@HIsTvKceM4PmA$K zT)cz6cWV3fFLJC?vaxP3%uE_obeQxi3&9w-AA>h(JwZO-)I=J5^xwtH^Clv}DX{;lemuDXu#{vb}Frcv$vd=_T#6)PSf#)8@&h_TGNDeYBQ8=5Csvgk!AJPKX|%I!QRek`bXRH;REmsK7?$wcYA^JR6_Kt={}cYfa=6Huk-=M3#{5NLhmZE2jIb7obb*Fx z&z;1cJ$TKaRIcwnuCKC`8D?~=jqVYDIW0bs*k?53i_J=4LTT^EA@CC@+nd!7?u1Z$ z4PDy{<(&=Vd}@LgCd#u65q+z-cb@jcHv5#`nw|EpNFqA^EYk~0>;iv5^W!mj@9Kl} z>t*E1S*Ajv7iT23EqDEM8dGM^Fq(5N#s>kI(!e7EclVsdEg1bYYTUh;nH x7Qb&H6yfEU;0y3t64~(k!uxFMt0Ze~xo48o)1f0fF7rM)YI@>e_5r)={{dxf8Xy1w diff --git a/doc/salome/gui/GEOM/images/pref_dep_tree.png b/doc/salome/gui/GEOM/images/pref_dep_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..c02134335afbac72ced4f13abc73ee906cf3771e GIT binary patch literal 42323 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 CNMEo3 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc index 6ad3270cb..f06e510bb 100644 --- a/doc/salome/gui/GEOM/input/geometry_preferences.doc +++ b/doc/salome/gui/GEOM/input/geometry_preferences.doc @@ -128,5 +128,34 @@ system immediately after the module activation. +Also you can set preferences for visualisation of Dependency Tree in 2D Viewer. + +\image html pref_dep_tree.png + +

    +
  • General
  • +
      +
    • Hierarchy type - allows to choose between display only ascendants tree, +display only descendants tree or display both ascendants and descendants trees.
    • +
    • Possibility to move nodes - allows to customize the moving nodes by default.
    • +
    +
+ +
    +
  • Color
  • +
      +
    • Background color - allows to select default background color.
    • +
    • Default node color - allows to select default node color.
    • +
    • Main node color - allows to select default main node color.
    • +
    • Unpublished node color - allows to select default node color +for unpublished objects.
    • +
    • Selected node color - allows to select default selected node color.
    • +
    • Default arrow color - allows to select default arrow color.
    • +
    • Highlighted arrow color - allows to select default highlighted +arrow color.
    • +
    • Selected arrow color - allows to select default selected +arrow color.
    • +
    +
*/ diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 465b04884..24a0f148d 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -68,15 +68,16 @@ - - - - - - - + + + + + + + + - + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 624c14bcc..641853c22 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -50,8 +50,8 @@ ENDIF() ## IF(SALOME_BUILD_GUI) SET(SUBDIRS_GUI - DependencyTree OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI - GEOMBase GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI + OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI + GEOMBase DependencyTree GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI ImportExportGUI GEOM_SWIG_WITHIHM diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index a3807832a..b57dce943 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -18,7 +18,6 @@ # INCLUDE(UseQt4Ext) -INCLUDE(${QT_USE_FILE}) # --- options --- @@ -26,47 +25,30 @@ INCLUDE(${QT_USE_FILE}) INCLUDE_DIRECTORIES( ${QT_INCLUDES} ${GUI_INCLUDE_DIRS} - ${CAS_INCLUDE_DIRS} - ${OMNIORB_INCLUDE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src/GEOMGUI ${PROJECT_SOURCE_DIR}/src/GEOMBase - ${PROJECT_SOURCE_DIR}/src/GEOM - ${PROJECT_SOURCE_DIR}/src/GEOMUtils - - - ${PROJECT_BINARY_DIR}/idl - ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/src/GEOM ${PROJECT_SOURCE_DIR}/src/OBJECT - ${PROJECT_SOURCE_DIR}/src/GEOMClient - ${PROJECT_SOURCE_DIR}/src/GEOMImpl ${PROJECT_SOURCE_DIR}/src/GEOMUtils - ${PROJECT_SOURCE_DIR}/src/DlgRef - ${PROJECT_BINARY_DIR}/src/DlgRef - + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_BINARY_DIR}/idl ) # additional preprocessor / compiler flags ADD_DEFINITIONS( ${QT_DEFINITIONS} ${GUI_DEFINITIONS} - ${CAS_DEFINITIONS} - ${OMNIORB_DEFINITIONS} + ${CAS_DEFINITIONS} ) # libraries to link to SET(_link_LIBRARIES ${QT_LIBRARIES} ${GUI_SalomeApp} - ${GUI_suit} - ${GUI_qtx} - ${GUI_QxScene} ${GUI_GraphicsView} - ${GUI_SalomeObject} - GEOMUtils - ${KERNEL_SalomeDS} -) + GEOM + GEOMBase + ) # --- headers --- @@ -80,7 +62,7 @@ SET(DependencyTree_HEADERS SET(_moc_HEADERS DependencyTree_View.h DependencyTree_ViewModel.h -) + ) # --- sources --- @@ -88,13 +70,13 @@ SET(_moc_HEADERS QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) SET(DependencyTree_SOURCES - DependencyTree_View.cxx - DependencyTree_Object.cxx DependencyTree_Arrow.cxx + DependencyTree_Object.cxx DependencyTree_Selector.cxx + DependencyTree_View.cxx DependencyTree_ViewModel.cxx ${_moc_SOURCES} -) + ) # --- resources --- @@ -103,7 +85,7 @@ SET(_res_files resources/DependencyTree_msg_en.ts resources/DependencyTree_msg_fr.ts resources/DependencyTree_msg_ja.ts -) + ) # --- rules --- diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx index ebe0cfe90..a25f4caa3 100644 --- a/src/DependencyTree/DependencyTree_Object.cxx +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -22,7 +22,6 @@ // GEOM includes #include -#include // GUI includes #include @@ -45,6 +44,7 @@ myIsMainObject( false ) myColor = resMgr->colorValue( "Geometry", "dependency_tree_node_color", QColor( 62, 180, 238 ) ); mySelectColor = resMgr->colorValue( "Geometry", "dependency_tree_select_node_color", QColor( 237, 243, 58 ) ); myMainObjectColor = resMgr->colorValue( "Geometry", "dependency_tree_main_node_color", QColor( 238, 90, 125 ) ); + myUnpublishObjectColor = resMgr->colorValue( "Geometry", "dependency_tree_unpublish_node_color", QColor( 255, 255, 255 ) ); myPolygonItem = new QGraphicsPolygonItem(); QPolygonF myPolygon; @@ -52,8 +52,6 @@ myIsMainObject( false ) << QPointF( -itemW, itemH ) << QPointF( -itemW, -itemH ); myPolygonItem->setPolygon( myPolygon ); - myPolygonItem->setBrush( myColor ); - myPolygonItem->setPen( getPen( myColor ) ); myTextItem = new QGraphicsSimpleTextItem(); QFont textFont; @@ -174,11 +172,12 @@ void DependencyTree_Object::updateName() if( studyEntry.isEmpty() ) { if( name.isEmpty() ) name = "unpublished"; - myColor = QColor( 255, 255, 255 ); - myPolygonItem->setBrush( myColor ); - myPolygonItem->setPen( getPen( myColor ) ); + myColor = myUnpublishObjectColor; } + myPolygonItem->setBrush( myColor ); + myPolygonItem->setPen( getPen( myColor ) ); + setName( name ); myTextItem->setText( name ); @@ -204,7 +203,12 @@ void DependencyTree_Object::updateName() //================================================================================= void DependencyTree_Object::setColor( const QColor& theColor ) { - myColor = theColor; + QString studyEntry = myGeomObject->GetStudyEntry(); + if( studyEntry.isEmpty() ) + myColor = myUnpublishObjectColor; + else + myColor = theColor; + } //================================================================================= @@ -225,6 +229,18 @@ void DependencyTree_Object::setMainObjectColor( const QColor& theColor ) myMainObjectColor = theColor; } +//================================================================================= +// function : setUnpublishObjectColor() +// purpose : set color if current item is unpublished object +//================================================================================= +void DependencyTree_Object::setUnpublishObjectColor( const QColor& theColor ) +{ + myUnpublishObjectColor = theColor; + QString studyEntry = myGeomObject->GetStudyEntry(); + if( studyEntry.isEmpty() ) + myColor = myUnpublishObjectColor; +} + //================================================================================= // function : setIsMainObject() // purpose : set true if current item is main object of dependency tree diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h index 64be40adc..fae775edc 100644 --- a/src/DependencyTree/DependencyTree_Object.h +++ b/src/DependencyTree/DependencyTree_Object.h @@ -23,8 +23,8 @@ #include // GEOM includes -#include -#include +#include +#include CORBA_CLIENT_HEADER(GEOM_Gen) #include @@ -50,9 +50,10 @@ public: void updateName(); - void setColor(const QColor& ); - void setSelectColor(const QColor& ); - void setMainObjectColor(const QColor& ); + void setColor( const QColor& ); + void setSelectColor( const QColor& ); + void setMainObjectColor( const QColor& ); + void setUnpublishObjectColor( const QColor& ); void setIsMainObject( bool ); @@ -63,6 +64,7 @@ private: QColor myColor; QColor mySelectColor; QColor myMainObjectColor; + QColor myUnpublishObjectColor; QGraphicsPolygonItem* myPolygonItem; QGraphicsSimpleTextItem* myTextItem; diff --git a/src/DependencyTree/DependencyTree_Selector.cxx b/src/DependencyTree/DependencyTree_Selector.cxx index 7d17d63c8..370e4511c 100644 --- a/src/DependencyTree/DependencyTree_Selector.cxx +++ b/src/DependencyTree/DependencyTree_Selector.cxx @@ -28,6 +28,7 @@ //GEOM includes #include +#include DependencyTree_Selector::DependencyTree_Selector( DependencyTree_ViewModel* theModel, SUIT_SelectionMgr* theSelMgr ) :LightApp_GVSelector( (GraphicsView_Viewer*)theModel, theSelMgr ) diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index e675dc410..42e8715e7 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -117,8 +117,16 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) connect( myDisplayDescendants, SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) ); connect( updateButton, SIGNAL( clicked() ), this, SLOT( onUpdateModel() ) ); - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + GeometryGUI* aGeomGUI = dynamic_cast( app->module( "Geometry" ) ); + if ( aGeomGUI ) { + connect( aGeomGUI, SIGNAL( SignalDependencyTreeParamChanged( const QString&, const QString& ) ), + this, SLOT( onPreferenceChanged( const QString&, const QString& ) ) ); + connect( aGeomGUI, SIGNAL( SignalDependencyTreeRenameObject( const QString& ) ), + this, SLOT( onRenameObject( const QString& ) ) ); + } + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); @@ -175,22 +183,6 @@ DependencyTree_Object* DependencyTree_View::getObjectByEntry( const std::string& return myTreeMap[ theEntry ]; } -//================================================================================= -// function : updateObjectName() -// purpose : update object name, having edited it in Object Browser -//================================================================================= -bool DependencyTree_View::updateObjectName( const std::string& theEntry ) -{ - bool res = false; - for( initSelected(); moreSelected(); nextSelected() ) { - if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { - aDepObject->updateName(); - res = true; - } - } - return res; -} - //================================================================================= // function : setHierarchyType() // purpose : set hierarchy type of dependency tree @@ -267,6 +259,19 @@ void DependencyTree_View::setMainNodeColor( const QColor& theColor ) } } +//================================================================================= +// function : setUnpublishNodeColor() +// purpose : set unpublished node color from preferences +//================================================================================= +void DependencyTree_View::setUnpublishNodeColor( const QColor& theColor ) +{ + EntryObjectMap::const_iterator i; + for( i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { + DependencyTree_Object* object = myTreeMap[ i->first ]; + object->setUnpublishObjectColor( theColor ); + } +} + //================================================================================= // function : setSelectNodeColor() // purpose : set selected node color from preferences @@ -369,6 +374,66 @@ void DependencyTree_View::onHierarchyType() updateView(); } +//================================================================================= +// function : onPreferencesChanged() +// purpose : slot for changing tree parameters from preferences +//================================================================================= +void DependencyTree_View::onPreferenceChanged( const QString& section, const QString& param ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + if( param == QString("dependency_tree_hierarchy_type") ) { + int hierarchyType = resMgr->integerValue( section, param, 0); + setHierarchyType( hierarchyType ); + } + else if( param == QString("dependency_tree_move_nodes") ) { + bool isNodesMovable = resMgr->booleanValue( section, param, true); + setNodesMovable( isNodesMovable ); + } + else if( param == QString("dependency_tree_background_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 255, 255, 255 ) ); + setPrefBackgroundColor( c ); + } + else if( param == QString("dependency_tree_node_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 62, 180, 238 ) ); + setNodeColor( c ); + } + else if( param == QString("dependency_tree_main_node_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 238, 90, 125 ) ); + setMainNodeColor( c ); + } + else if( param == QString("dependency_tree_unpublish_node_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 255, 255, 255 ) ); + setUnpublishNodeColor( c ); + } + else if( param == QString("dependency_tree_select_node_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 237, 243, 58 ) ); + setSelectNodeColor( c ); + } + else if( param == QString("dependency_tree_arrow_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 0, 0, 130 ) ); + setArrowColor( c ); + } + else if( param == QString("dependency_tree_highlight_arrow_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 0, 0, 255 ) ); + setHighlightArrowColor( c ); + } + else if( param == QString("dependency_tree_select_arrow_color") ) { + QColor c = resMgr->colorValue( section, param, QColor( 255, 0, 0 ) ); + setSelectArrowColor( c ); + } +} + +//================================================================================= +// function : onRenameObject() +// purpose : update object name, having edited it in Object Browser +//================================================================================= +void DependencyTree_View::onRenameObject( const QString& theEntry ) +{ + DependencyTree_Object* object = getObjectByEntry( theEntry.toStdString() ); + object->updateName(); +} + //================================================================================= // function : parseTree() // purpose : parse created model to initialize all nodes and arrows diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 94943ab7d..29d16bae5 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -60,17 +60,6 @@ public: int getStudyId() const; DependencyTree_Object* getObjectByEntry( const std::string& ); - bool updateObjectName( const std::string& theEntry ); - - void setHierarchyType( const int ); - void setNodesMovable( const bool ); - void setPrefBackgroundColor( const QColor& ); - void setNodeColor( const QColor& ); - void setMainNodeColor( const QColor& ); - void setSelectNodeColor( const QColor& ); - void setArrowColor( const QColor& ); - void setHighlightArrowColor( const QColor& ); - void setSelectArrowColor( const QColor& ); public slots: @@ -81,6 +70,8 @@ private slots: void onUpdateModel(); void onMoveNodes( bool ); void onHierarchyType(); + void onPreferenceChanged( const QString&, const QString& ); + void onRenameObject( const QString& theEntry ); private: @@ -99,9 +90,20 @@ private: void updateView(); void clearView( bool ); + int checkMaxLevelsNumber(); + void getNewTreeModel( bool = true, bool = true ); - int checkMaxLevelsNumber(); + void setHierarchyType( const int ); + void setNodesMovable( const bool ); + void setPrefBackgroundColor( const QColor& ); + void setNodeColor( const QColor& ); + void setMainNodeColor( const QColor& ); + void setUnpublishNodeColor( const QColor& ); + void setSelectNodeColor( const QColor& ); + void setArrowColor( const QColor& ); + void setHighlightArrowColor( const QColor& ); + void setSelectArrowColor( const QColor& ); GEOMUtils::TreeModel myTreeModel; diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index bc62e35c6..74bf9f2c4 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -26,6 +26,7 @@ #include #include #include +#include #include // GEOM includes diff --git a/src/GEOMGUI/CMakeLists.txt b/src/GEOMGUI/CMakeLists.txt index 9ac751273..c5dc25f8a 100755 --- a/src/GEOMGUI/CMakeLists.txt +++ b/src/GEOMGUI/CMakeLists.txt @@ -39,7 +39,6 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOMClient ${PROJECT_SOURCE_DIR}/src/GEOMImpl ${PROJECT_SOURCE_DIR}/src/GEOMUtils - ${PROJECT_SOURCE_DIR}/src/DependencyTree ${CMAKE_CURRENT_SOURCE_DIR} ) @@ -59,7 +58,6 @@ SET(_link_LIBRARIES Material GEOMImpl GEOMUtils - DependencyTree ${KERNEL_SALOMELocalTrace} ${KERNEL_SalomeDS} ${KERNEL_SalomeDSClient} diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 5f45808a3..6f21d29b1 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -5068,13 +5068,17 @@ Please, select face, shell or solid and try again PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR Main node color
+ + PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR + Unpublished node color + PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR Selected node color PREF_DEPENDENCY_VIEW_ARROW_COLOR - Arrow color + Default arrow color PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 7c7878d86..1c3146a9a 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -5028,6 +5028,66 @@ Choisissez une face, une coque ou un solide et essayez de nouveau GEOM_PREVIEW Prévisualiser + + PREF_TAB_DEPENDENCY_VIEW + Dependency Tree + + + PREF_HIERARCHY_TYPE + Hierarchy type + + + MEN_ONLY_ASCENDANTS + Display only ascendants tree + + + MEN_ONLY_DESCENDANTS + Display only descendants tree + + + MEN_BOTH_ASCENDANTS_DESCENDANTS + Display both ascendants and descendants trees + + + GEOM_MOVE_POSSIBILITY + Possibility to move nodes + + + PREF_GROUP_DEPENDENCY_VIEW_COLOR + Color + + + PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR + Background color + + + PREF_DEPENDENCY_VIEW_NODE_COLOR + Default node color + + + PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR + Main node color + + + PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR + Unpublished node color + + + PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR + Selected node color + + + PREF_DEPENDENCY_VIEW_ARROW_COLOR + Arrow color + + + PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR + Highlighted arrow color + + + PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR + Selected arrow color + GEOM_ALL_IMPORT_FILES Tous les formats supportés ( %1 ) diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index ecad4cb1f..0609b2ae2 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -5003,6 +5003,66 @@ GEOM_PREVIEW プレビュー + + PREF_TAB_DEPENDENCY_VIEW + Dependency Tree + + + PREF_HIERARCHY_TYPE + Hierarchy type + + + MEN_ONLY_ASCENDANTS + Display only ascendants tree + + + MEN_ONLY_DESCENDANTS + Display only descendants tree + + + MEN_BOTH_ASCENDANTS_DESCENDANTS + Display both ascendants and descendants trees + + + GEOM_MOVE_POSSIBILITY + Possibility to move nodes + + + PREF_GROUP_DEPENDENCY_VIEW_COLOR + Color + + + PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR + Background color + + + PREF_DEPENDENCY_VIEW_NODE_COLOR + Default node color + + + PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR + Main node color + + + PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR + Unpublished node color + + + PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR + Selected node color + + + PREF_DEPENDENCY_VIEW_ARROW_COLOR + Arrow color + + + PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR + Highlighted arrow color + + + PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR + Selected arrow color + GEOM_ALL_IMPORT_FILES サポートされているすべての形式 (%1) diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 8fed3dfef..0da53dde9 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -75,10 +75,6 @@ #include #include -#include -#include -#include - #include // #include #include @@ -2630,7 +2626,9 @@ void GeometryGUI::createPreferences() int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) ); - int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), DependencyViewId, + int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId ); + + int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup, LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" ); QStringList aHierarchyTypeList; @@ -2646,7 +2644,7 @@ void GeometryGUI::createPreferences() setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList ); setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList ); - addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), DependencyViewId, + addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup, LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" ); int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId ); @@ -2658,6 +2656,8 @@ void GeometryGUI::createPreferences() LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" ); addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup, LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" ); addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup, LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" ); @@ -2742,54 +2742,7 @@ void GeometryGUI::preferencesChanged( const QString& section, const QString& par aDisplayer.UpdateViewer(); } else if ( param.startsWith( "dependency_tree") ) - { - SalomeApp_Application* app = getApp(); - if ( !app ) return; - - SUIT_ViewManager *svm = app->getViewManager( GraphicsView_Viewer::Type(), false ); - if( !svm ) return; - - if( DependencyTree_ViewModel* viewModel = dynamic_cast( svm->getViewModel() ) ) - if( DependencyTree_View* view = dynamic_cast( viewModel->getActiveViewPort() ) ) { - if( param == QString("dependency_tree_hierarchy_type") ) { - int hierarchyType = aResourceMgr->integerValue( section, param, 0); - view->setHierarchyType( hierarchyType ); - } - else if( param == QString("dependency_tree_move_nodes") ) { - bool isNodesMovable = aResourceMgr->booleanValue( section, param, true); - view->setNodesMovable( isNodesMovable ); - } - else if( param == QString("dependency_tree_background_color") ) { - QColor c = aResourceMgr->colorValue( section, param, QColor( 255, 255, 255 ) ); - view->setPrefBackgroundColor( c ); - } - else if( param == QString("dependency_tree_node_color") ) { - QColor c = aResourceMgr->colorValue( section, param, QColor( 62, 180, 238 ) ); - view->setNodeColor( c ); - } - else if( param == QString("dependency_tree_main_node_color") ) { - QColor c = aResourceMgr->colorValue( section, param, QColor( 238, 90, 125 ) ); - view->setMainNodeColor( c ); - } - else if( param == QString("dependency_tree_select_node_color") ) { - QColor c = aResourceMgr->colorValue( section, param, QColor( 237, 243, 58 ) ); - view->setSelectNodeColor( c ); - } - else if( param == QString("dependency_tree_arrow_color") ) { - QColor c = aResourceMgr->colorValue( section, param, QColor( 0, 0, 130 ) ); - view->setArrowColor( c ); - } - else if( param == QString("dependency_tree_highlight_arrow_color") ) { - QColor c = aResourceMgr->colorValue( section, param, QColor( 0, 0, 255 ) ); - view->setHighlightArrowColor( c ); - } - else if( param == QString("dependency_tree_select_arrow_color") ) { - QColor c = aResourceMgr->colorValue( section, param, QColor( 255, 0, 0 ) ); - view->setSelectArrowColor( c ); - } - - } - } + emit SignalDependencyTreeParamChanged( section, param ); } } @@ -3343,11 +3296,7 @@ bool GeometryGUI::renameObject( const QString& entry, const QString& name) GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj)); if (!CORBA::is_nil(anObj)) { anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object - // rename the given object in the dependency tree - if ( SUIT_ViewManager *svm = app->getViewManager( GraphicsView_Viewer::Type(), false ) ) - if ( DependencyTree_ViewModel* viewModel = dynamic_cast( svm->getViewModel() ) ) - if ( DependencyTree_View* view = dynamic_cast( viewModel->getActiveViewPort() ) ) - view->updateObjectName( anObj->GetEntry() ); + emit SignalDependencyTreeRenameObject( anObj->GetEntry() ); } result = true; } diff --git a/src/GEOMGUI/GeometryGUI.h b/src/GEOMGUI/GeometryGUI.h index 4f28fc928..f2f2ad8e5 100644 --- a/src/GEOMGUI/GeometryGUI.h +++ b/src/GEOMGUI/GeometryGUI.h @@ -182,6 +182,8 @@ signals : void SignalDeactivateActiveDialog(); void SignalCloseAllDialogs(); void SignalDefaultStepValueChanged( double newVal ); + void SignalDependencyTreeParamChanged( const QString&, const QString& ); + void SignalDependencyTreeRenameObject( const QString& ); protected: virtual LightApp_Selection* createSelection() const; From bd9c3283e5b3a75c90fa521cea3b66957d9a9497 Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 5 Jun 2014 15:17:59 +0400 Subject: [PATCH 024/118] Fix upward cycling if two objects depend on each other. --- src/GEOM_I/GEOM_Gen_i.cc | 18 +++++++++++++----- src/GEOM_I/GEOM_Gen_i.hh | 2 ++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 02bf4be17..09d880306 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3057,12 +3057,14 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, GEOM::GEOM_BaseObject_var anObj = GetObject( theStudy->StudyId(), entry.c_str() ); if ( anObj->_is_nil() ) continue; + std::set passedEntries; + passedEntries.insert( entry ); GEOMUtils::LevelsList upLevelList; // get objects from which current one depends on recursively - getUpwardDependency( anObj, upLevelList ); + getUpwardDependency( anObj, upLevelList, passedEntries ); GEOMUtils::LevelsList downLevelList; // get objects that depends on current one recursively - getDownwardDependency( anObj, downLevelList ); + //getDownwardDependency( anObj, downLevelList, passedEntries ); tree.insert( std::pair >(entry, std::pair( upLevelList, downLevelList ) ) ); } @@ -3087,14 +3089,18 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, //======================================================================= void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &upLevelList, + std::set &passedEntries, int level ) { std::string aGboEntry = gbo->GetEntry(); + passedEntries.insert( aGboEntry ); + /* for (int i=0; i < upLevelList.size(); i++ ) { GEOMUtils::LevelInfo aMap = upLevelList.at(i); if ( aMap.count( aGboEntry ) > 0 ) // this object has been processed earlier return; } + */ GEOMUtils::NodeLinks anEntries; GEOMUtils::LevelInfo aLevelMap; if ( level > 0 ) { @@ -3118,8 +3124,9 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, anEntries.push_back( depList[j]->GetEntry() ); } // get dependencies recursively - if ( !depList[j]->_is_equivalent( gbo ) ) { // avoid self-recursion - getUpwardDependency(depList[j], upLevelList, level+1); + if ( !depList[j]->_is_equivalent( gbo ) && /*avoid self-recursion*/ + passedEntries.count( depList[j]->GetEntry() ) == 0 /*avoid checking the passed objects*/ ) { + getUpwardDependency(depList[j], upLevelList, passedEntries, level+1); } } if ( level > 0 ) { @@ -3134,6 +3141,7 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, //======================================================================= void GEOM_Gen_i::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &downLevelList, + std::set &passedEntries, int level ) { Handle(TDocStd_Document) aDoc = GEOM_Engine::GetEngine()->GetDocument(gbo->GetStudyID()); Handle(TDataStd_TreeNode) aNode, aRoot; @@ -3180,7 +3188,7 @@ void GEOM_Gen_i::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, downLevelList[level] = aLevelMap; // get dependencies of the current object recursively if ( !depList[i]->_is_equivalent( geomObj ) ) { // avoid self-recursion - getDownwardDependency(geomObj, downLevelList, level+1); + getDownwardDependency(geomObj, downLevelList, passedEntries, level+1); } break; } diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh index 43c086cdc..94c0b544a 100644 --- a/src/GEOM_I/GEOM_Gen_i.hh +++ b/src/GEOM_I/GEOM_Gen_i.hh @@ -374,10 +374,12 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi void getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &upLevelList, + std::set &passedEntries, int level = 0 ); void getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &downLevelList, + std::set &passedEntries, int level = 0 ); private: From 965dcbfba80bb2873ee1e49d0385d2d0c4a3d9c3 Mon Sep 17 00:00:00 2001 From: mpa Date: Thu, 5 Jun 2014 15:55:29 +0400 Subject: [PATCH 025/118] Correction of code for bi-linked nodes --- src/DependencyTree/DependencyTree_View.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 42e8715e7..3f1c51bfa 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -151,8 +151,8 @@ void DependencyTree_View::mouseMoveEvent( QMouseEvent *event ) QGraphicsView::mouseMoveEvent( event ); ArrowsInfo::const_iterator i; for( i = myArrows.begin(); i != myArrows.end(); i++ ) { - DependencyTree_Arrow* arrow = myArrows[ i->first ]; - arrow->update(); + if( DependencyTree_Arrow* arrow = myArrows[ i->first ] ) + arrow->update(); } } @@ -724,6 +724,8 @@ void DependencyTree_View::getNewTreeModel( bool theUseSelectedObject, bool theUs objectsEntry->length( mainObjects.Extent() ); for ( SALOME_ListIteratorOfListIO It( mainObjects ); It.More(); It.Next(), iter++ ) { Handle( SALOME_InteractiveObject ) io = It.Value(); + if( !io->hasEntry() ) + continue; GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil(); geomObject = GEOMBase::ConvertIOinGEOMObject( io ); QString entry = geomObject->GetEntry(); From 178a0726fb856ad0007d106aaf972112b4c174f9 Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 6 Jun 2014 09:31:57 +0400 Subject: [PATCH 026/118] Correction of case with bi-directional links. --- src/GEOM_I/GEOM_Gen_i.cc | 42 ++++++++++++++++++++++------------------ src/GEOM_I/GEOM_Gen_i.hh | 4 ++-- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 09d880306..eeda4adad 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3057,14 +3057,13 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, GEOM::GEOM_BaseObject_var anObj = GetObject( theStudy->StudyId(), entry.c_str() ); if ( anObj->_is_nil() ) continue; - std::set passedEntries; - passedEntries.insert( entry ); + std::map< std::string, std::set > passedEntries; GEOMUtils::LevelsList upLevelList; // get objects from which current one depends on recursively getUpwardDependency( anObj, upLevelList, passedEntries ); GEOMUtils::LevelsList downLevelList; // get objects that depends on current one recursively - //getDownwardDependency( anObj, downLevelList, passedEntries ); + getDownwardDependency( anObj, downLevelList, passedEntries ); tree.insert( std::pair >(entry, std::pair( upLevelList, downLevelList ) ) ); } @@ -3089,18 +3088,9 @@ SALOMEDS::TMPFile* GEOM_Gen_i::GetDependencyTree( SALOMEDS::Study_ptr theStudy, //======================================================================= void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &upLevelList, - std::set &passedEntries, + std::map< std::string, std::set > &passedEntries, int level ) { std::string aGboEntry = gbo->GetEntry(); - passedEntries.insert( aGboEntry ); - /* - for (int i=0; i < upLevelList.size(); i++ ) { - GEOMUtils::LevelInfo aMap = upLevelList.at(i); - if ( aMap.count( aGboEntry ) > 0 ) - // this object has been processed earlier - return; - } - */ GEOMUtils::NodeLinks anEntries; GEOMUtils::LevelInfo aLevelMap; if ( level > 0 ) { @@ -3117,15 +3107,22 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, } // get objects on that the current one depends GEOM::ListOfGBO_var depList = gbo->GetDependency(); + std::string aDepEntry; for( int j = 0; j < depList->length(); j++ ) { if ( depList[j]->_is_nil() ) continue; + aDepEntry = depList[j]->GetEntry(); + if ( passedEntries.count( aGboEntry ) > 0 && + passedEntries[aGboEntry].count( aDepEntry ) > 0 ) { + //avoid checking the passed objects + continue; + } + passedEntries[aGboEntry].insert( aDepEntry ); if ( level > 0 ) { - anEntries.push_back( depList[j]->GetEntry() ); + anEntries.push_back( aDepEntry ); } // get dependencies recursively - if ( !depList[j]->_is_equivalent( gbo ) && /*avoid self-recursion*/ - passedEntries.count( depList[j]->GetEntry() ) == 0 /*avoid checking the passed objects*/ ) { + if ( !depList[j]->_is_equivalent( gbo ) /*avoid self-recursion*/ ) { getUpwardDependency(depList[j], upLevelList, passedEntries, level+1); } } @@ -3141,8 +3138,9 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, //======================================================================= void GEOM_Gen_i::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &downLevelList, - std::set &passedEntries, + std::map< std::string, std::set > &passedEntries, int level ) { + std::string aGboEntry = gbo->GetEntry(); Handle(TDocStd_Document) aDoc = GEOM_Engine::GetEngine()->GetDocument(gbo->GetStudyID()); Handle(TDataStd_TreeNode) aNode, aRoot; Handle(GEOM_Function) aFunction; @@ -3172,10 +3170,16 @@ void GEOM_Gen_i::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, if ( depList[i]->_is_nil() ) continue; if ( depList[i]->_is_equivalent( gbo ) ) { - // yes, the current object depends on the given object + // yes, the current object depends on the given object + if ( passedEntries.count( aGoEntry ) > 0 && + passedEntries[aGoEntry].count( aGboEntry ) > 0 ) { + //avoid checking the passed objects + continue; + } + passedEntries[aGoEntry].insert( aGboEntry ); GEOMUtils::NodeLinks anEntries; GEOMUtils::LevelInfo aLevelMap; - anEntries.push_back( gbo->GetEntry()); + anEntries.push_back( aGboEntry ); if ( level >= downLevelList.size() ) { downLevelList.push_back( aLevelMap ); } else { diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh index 94c0b544a..f0690d019 100644 --- a/src/GEOM_I/GEOM_Gen_i.hh +++ b/src/GEOM_I/GEOM_Gen_i.hh @@ -374,12 +374,12 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi void getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &upLevelList, - std::set &passedEntries, + std::map< std::string, std::set > &passedEntries, int level = 0 ); void getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, GEOMUtils::LevelsList &downLevelList, - std::set &passedEntries, + std::map< std::string, std::set > &passedEntries, int level = 0 ); private: From 9d9a82504916b449047e78f2e47b69ee7eee282d Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 6 Jun 2014 12:42:57 +0400 Subject: [PATCH 027/118] Fix case of only one link - self-depending link. --- src/GEOM_I/GEOM_Gen_i.cc | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index eeda4adad..b052e5d24 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -3122,9 +3122,7 @@ void GEOM_Gen_i::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, anEntries.push_back( aDepEntry ); } // get dependencies recursively - if ( !depList[j]->_is_equivalent( gbo ) /*avoid self-recursion*/ ) { - getUpwardDependency(depList[j], upLevelList, passedEntries, level+1); - } + getUpwardDependency(depList[j], upLevelList, passedEntries, level+1); } if ( level > 0 ) { aLevelMap.insert( std::pair(aGboEntry, anEntries) ); @@ -3190,11 +3188,9 @@ void GEOM_Gen_i::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, } aLevelMap.insert( std::pair(aGoEntry, anEntries) ); downLevelList[level] = aLevelMap; - // get dependencies of the current object recursively - if ( !depList[i]->_is_equivalent( geomObj ) ) { // avoid self-recursion - getDownwardDependency(geomObj, downLevelList, passedEntries, level+1); - } - break; + // get dependencies of the current object recursively + getDownwardDependency(geomObj, downLevelList, passedEntries, level+1); + break; } } } From 87f1141aa9d78102f59a9d20ace2180cb580c466 Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 6 Jun 2014 15:03:22 +0400 Subject: [PATCH 028/118] Add comment that it is for GUI only. --- idl/GEOM_Gen.idl | 1 + 1 file changed, 1 insertion(+) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 7e91ac4df..8f75248b5 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -5095,6 +5095,7 @@ module GEOM * \param theStudy The study in which the object is published * \param theListOfEntries List of GEOM object entries in OCAF tree (not in study) * \return Struct of dependent entries and its links as a byte array + * \note This method is supposed to be used by GUI only. */ SALOMEDS::TMPFile GetDependencyTree(in SALOMEDS::Study theStudy, in string_array theListOfEntries); From 8dd08cf7fe70dc1117b7b75544eab22af5f4f9fc Mon Sep 17 00:00:00 2001 From: mpa Date: Fri, 6 Jun 2014 16:08:47 +0400 Subject: [PATCH 029/118] add documentation about dependency tree functionality --- doc/salome/gui/GEOM/images/dialog.png | Bin 10146 -> 22968 bytes doc/salome/gui/GEOM/images/ob_popup_menu.png | Bin 35819 -> 40674 bytes .../gui/GEOM/images/tree_bidir_link.png | Bin 0 -> 1772 bytes .../gui/GEOM/images/tree_button_update.png | Bin 0 -> 1081 bytes .../gui/GEOM/images/tree_cycldep_link.png | Bin 0 -> 6807 bytes .../gui/GEOM/images/tree_default_node.png | Bin 0 -> 3175 bytes .../gui/GEOM/images/tree_disp_ascendants.png | Bin 0 -> 2021 bytes .../gui/GEOM/images/tree_disp_descendants.png | Bin 0 -> 2374 bytes doc/salome/gui/GEOM/images/tree_example.png | Bin 0 -> 36829 bytes .../gui/GEOM/images/tree_hierarchy_type.png | Bin 0 -> 2940 bytes .../gui/GEOM/images/tree_highlighted_node.png | Bin 0 -> 4456 bytes doc/salome/gui/GEOM/images/tree_main_node.png | Bin 0 -> 2407 bytes .../gui/GEOM/images/tree_move_nodes.png | Bin 0 -> 1460 bytes .../gui/GEOM/images/tree_popup_menu.png | Bin 0 -> 5237 bytes .../gui/GEOM/images/tree_popup_menu2.png | Bin 0 -> 5133 bytes .../gui/GEOM/images/tree_selected_node.png | Bin 0 -> 3068 bytes .../gui/GEOM/images/tree_selfdep_link.png | Bin 0 -> 1915 bytes doc/salome/gui/GEOM/images/tree_tool_bar.png | Bin 0 -> 12477 bytes .../gui/GEOM/images/tree_unidir_link.png | Bin 0 -> 1822 bytes .../gui/GEOM/images/tree_unpublished_node.png | Bin 0 -> 2076 bytes doc/salome/gui/GEOM/images/tree_view_dump.png | Bin 0 -> 682 bytes .../gui/GEOM/images/tree_view_fitall.png | Bin 0 -> 816 bytes .../gui/GEOM/images/tree_view_fitarea.png | Bin 0 -> 815 bytes .../gui/GEOM/images/tree_view_fitselect.png | Bin 0 -> 857 bytes .../gui/GEOM/images/tree_view_glpan.png | Bin 0 -> 1086 bytes doc/salome/gui/GEOM/images/tree_view_pan.png | Bin 0 -> 982 bytes doc/salome/gui/GEOM/images/tree_view_zoom.png | Bin 0 -> 797 bytes .../input/arranging_study_objects_page.doc | 3 + doc/salome/gui/GEOM/input/dependency_tree.doc | 205 ++++++++++++++++++ .../gui/GEOM/input/geometry_preferences.doc | 4 + .../gui/GEOM/input/viewing_geom_obj.doc | 3 + src/DependencyTree/DependencyTree_View.cxx | 25 ++- .../resources/tree_view_dump.png | Bin 0 -> 682 bytes .../resources/tree_view_fitall.png | Bin 0 -> 797 bytes .../resources/tree_view_fitarea.png | Bin 0 -> 815 bytes .../resources/tree_view_fitselect.png | Bin 0 -> 857 bytes .../resources/tree_view_glpan.png | Bin 0 -> 1086 bytes .../resources/tree_view_pan.png | Bin 0 -> 982 bytes .../resources/tree_view_reset.png | Bin 0 -> 918 bytes .../resources/tree_view_zoom.png | Bin 0 -> 797 bytes 40 files changed, 232 insertions(+), 8 deletions(-) mode change 100755 => 100644 doc/salome/gui/GEOM/images/dialog.png create mode 100644 doc/salome/gui/GEOM/images/tree_bidir_link.png create mode 100644 doc/salome/gui/GEOM/images/tree_button_update.png create mode 100644 doc/salome/gui/GEOM/images/tree_cycldep_link.png create mode 100644 doc/salome/gui/GEOM/images/tree_default_node.png create mode 100644 doc/salome/gui/GEOM/images/tree_disp_ascendants.png create mode 100644 doc/salome/gui/GEOM/images/tree_disp_descendants.png create mode 100644 doc/salome/gui/GEOM/images/tree_example.png create mode 100644 doc/salome/gui/GEOM/images/tree_hierarchy_type.png create mode 100644 doc/salome/gui/GEOM/images/tree_highlighted_node.png create mode 100644 doc/salome/gui/GEOM/images/tree_main_node.png create mode 100644 doc/salome/gui/GEOM/images/tree_move_nodes.png create mode 100644 doc/salome/gui/GEOM/images/tree_popup_menu.png create mode 100644 doc/salome/gui/GEOM/images/tree_popup_menu2.png create mode 100644 doc/salome/gui/GEOM/images/tree_selected_node.png create mode 100644 doc/salome/gui/GEOM/images/tree_selfdep_link.png create mode 100644 doc/salome/gui/GEOM/images/tree_tool_bar.png create mode 100644 doc/salome/gui/GEOM/images/tree_unidir_link.png create mode 100644 doc/salome/gui/GEOM/images/tree_unpublished_node.png create mode 100644 doc/salome/gui/GEOM/images/tree_view_dump.png create mode 100644 doc/salome/gui/GEOM/images/tree_view_fitall.png create mode 100644 doc/salome/gui/GEOM/images/tree_view_fitarea.png create mode 100755 doc/salome/gui/GEOM/images/tree_view_fitselect.png create mode 100644 doc/salome/gui/GEOM/images/tree_view_glpan.png create mode 100644 doc/salome/gui/GEOM/images/tree_view_pan.png create mode 100644 doc/salome/gui/GEOM/images/tree_view_zoom.png create mode 100644 doc/salome/gui/GEOM/input/dependency_tree.doc create mode 100644 src/DependencyTree/resources/tree_view_dump.png create mode 100644 src/DependencyTree/resources/tree_view_fitall.png create mode 100644 src/DependencyTree/resources/tree_view_fitarea.png create mode 100755 src/DependencyTree/resources/tree_view_fitselect.png create mode 100644 src/DependencyTree/resources/tree_view_glpan.png create mode 100644 src/DependencyTree/resources/tree_view_pan.png create mode 100644 src/DependencyTree/resources/tree_view_reset.png create mode 100644 src/DependencyTree/resources/tree_view_zoom.png diff --git a/doc/salome/gui/GEOM/images/dialog.png b/doc/salome/gui/GEOM/images/dialog.png old mode 100755 new mode 100644 index c46b6b5714467fe4f320a7123f138c0ed54606f6..7fa63d1524c9677b3740d74f2ed5f3857bff0175 GIT binary patch literal 22968 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 literal 10146 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 E1GGvCCjbBd diff --git a/doc/salome/gui/GEOM/images/ob_popup_menu.png b/doc/salome/gui/GEOM/images/ob_popup_menu.png index 1d9f0e321674d3df40f8b16843a05637b8be76fc..1f5435a7ab4fd3238f9b4e77e6c00586b3a72445 100644 GIT binary patch literal 40674 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 Ud1xZ#fQX3640EF^hAVddA4@O7ivR!s literal 35819 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Ξ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 FV1gvsUA6!K literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_default_node.png b/doc/salome/gui/GEOM/images/tree_default_node.png new file mode 100644 index 0000000000000000000000000000000000000000..2a369dd3ac1faf7a8ae0bec3eed7f3d1b5d3c43f GIT binary patch literal 3175 zcmV-t44CtYP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ1_lZu0t(>YSpWbF`AI}URA}Dq zT4{6?RTjRts(MLxmQK>yAprt81PF@?vWg%mj3PKXfXm2;11QSi!X{^6h9k-%0^)Iy zQ9)5*K$Z~%M@2y}j0gfj6bKL?``+nvy1Tln-n;XoLeeDZuttY-`kwsAdHw3$`|kJd zckjDZNJJ2n-&%yA3xY5Nr70MK1oc~qbSVb7V9Rco*LSm6A7V5hqDNK$Zw`YIVEU+m zHfu=3asLRIxN`HCS!X0M$W$#T5f;<_S0|ecQq$1@06$$Qkwk%rh?xvW(oz#aQPJ70EwX6 zS|B|K?+wB0TTrgz-VjKL2qi;ZL=m9QSfr@{1Xr0uP%;t`B9W#MT|4;^5h9`_k*3ue zpwf}Y09fIp@*3lWmyD!`k)}cE9$YuG=TVqX0{}stzaOY%HV2(>^W`6x(gK__voRQB9OalNA#8bQg_GriORu5j*4&@_7YOD*XKYs-t@VplHW? z7608Sh1uFZJ_isy7k+UZ{nl4}K`@!a(|g(bjU+|Zkz=0fb8BBt9y84p6|bX0oaemz z*YHla#}0TvcV(@JV&2AO?%Zqu$X@XraE_wbe)5tAgo!AW?Ea)C=co3Q7CL_XrsB{S zD2OqAM}(*MB0Yd=vzMXx%Mab>ei4i&Tlay{y@qkwUFTmxGM4Y#>ip$^Xtu-+9s`2t zmnr~>&}epM?R6a4%{;DC~n|G{xBd2a%mn{JOCgUxkYSA9few8a>sVnINz$cm%X z+OCT=xns#!A74Y!$u$*#0{~YQuK2j>Yle|CUfwL4EzIK*Oy=Z2Jg2!FT=oz^P0n%W z@yyu4qeI(uVX~Xao;HunG}vM77EqJj03erKu%>iu8BzjN93=o?ZJPl=n%fBgYE_wr^;t`hBwLR` zD2Yvkp=3Dy_KcEU>rx(@ZSOn65Eg}^cx?7arK+rj8*Cy-5@>4OF7&g3h|J>x04X%m zf0KsrXaHcUtjQh#FoZ{=U&$+l*Y~TL+XVoc$K@+80IEM5w(fW8w9z6k2&Rzo%xwS= zKV%GXE?FV~AZ^MUAxZ5U1&z|^fD@BFg`d3}-S_^KM`jXdKm-I#_V|}Jbyp7kY!YWp z+)?Taxhpb!3Sw=4SSc@H-kN~N++@BgG#ZzG5uJJiK;EY1 zK&ZpdRi)^QwWiosXfl(g+PV(#=A9NKqki2%K`h(5rEURpd|Sb6$yxJvrpW#txQM|G z>97)!;^UgaWVf%Z;Oy$TS<{CDV3&Ct5fKqX;@idzeXQd9ofpp51m>% zS?_{0*tBS}m=jaW_H34m&jSjIqx9IU5gL#on^l) z8c&)6h{d};F4^_5-woH?;hANcv;5?16Et@;#rbPA}sxztXmwHGL z(`USMjPGWMj8h#YF@r{c*Jemj>N_$S$tx_ zpQKQm=B)vyB|Y$rz26A^ni6&UuvQOF$>02DMdo(FWM*D>+6ybQmp-lAKun7pG}>E~ zle>O#+1|~Dh#01Lxwpog&;~{6`f>vz5G9YD##L31D#2j3B&A0694cDF$tTy5H6oHA zcAB-?H}Tc-%N14n0 z%d}y1o9mvff6z};V@m?*ZDx^XjBG|-qZMkabWhJT~C zt_TMGRfX!RD*S3~&~Y~&31S!^QC|W>a!f?2(}jq{gVE43NB~4xL+oMJfRz#vDH@yk z;m&H067*Ng0rB#~cPB+hG*_?&s!fB^;t4!h6#YL)@N=;s3_-al{{v{pG#TcJywCsu N002ovPDHLkV1ivz_~ifq literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_disp_ascendants.png b/doc/salome/gui/GEOM/images/tree_disp_ascendants.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7debc305417770118eef1662c90af23831334b GIT binary patch literal 2021 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_example.png b/doc/salome/gui/GEOM/images/tree_example.png new file mode 100644 index 0000000000000000000000000000000000000000..e41c1b1f857dc47a80fc62eeb3a7792a52a19d22 GIT binary patch literal 36829 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 mj9gX00001b5ch_0Itp) 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_main_node.png b/doc/salome/gui/GEOM/images/tree_main_node.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4009b661f9fa27312a8ceed0db7776af45bb47 GIT binary patch literal 2407 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_popup_menu2.png b/doc/salome/gui/GEOM/images/tree_popup_menu2.png new file mode 100644 index 0000000000000000000000000000000000000000..f33e4f3cc7a9af6c41e9146652860952dadd2852 GIT binary patch literal 5133 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 KMNUMnLSTY{593+@ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_selfdep_link.png b/doc/salome/gui/GEOM/images/tree_selfdep_link.png new file mode 100644 index 0000000000000000000000000000000000000000..21121230b99ab82fac6f533b3e5045165c91ad82 GIT binary patch literal 1915 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_unidir_link.png b/doc/salome/gui/GEOM/images/tree_unidir_link.png new file mode 100644 index 0000000000000000000000000000000000000000..6afe3f35b611ccea97b3b9f2c513ae87fd55eca0 GIT binary patch literal 1822 zcmV+(2jTdMP)Px#32;bRa{vGibpQYkbpg3!Q8EAk00(qQO+^RZ1_lcrBQ&_&&j0`hut`KgRCwC$ zTxo1nRTMtwzBhfdv@@NyKuTIDixjJX3RJ8L21J3%^2a5O0fdAajUgJAXe35J4WgnF zSwc-ARUxUkq#__H#E=j`5lRcCh!n7N0XmdvXL-v#{&;PHvds*dych15$s{u`lic^+ z`T+{VvRM3+Ur4SBW+PR`+!kcq#H0r9;O*^YjIFlSC z+2y)im$PPlTU&d<{KgjS zA%LN4TChb82Gn3c4YqJiMM*ZtZ`mG+Y>)b$u_cFgeptQxsjS?u#yqE!=#In|DH#E{ zN=pxymhLYuet6BALe4p3Ru7;A7&>+I&$*9X`DOY;lLs#>ktFM`SbKOp)i5^KRY`!m z8c(*W5s{kW3GpUeYuE0}%=}=*ioM+|pOrCq!Mb6~w+&sseb8&GFYKxKqd1>AJwi*j zg@78VYrnW~$e1==tq-+=aC(U-N@{Ej&zn~hkZgnIMc$ji$N z&_ye!rRJUGD9M1RU25^>jq(k7l(=EpR-VFMEgGh`_aB_}!c`!h!u z4IA64MXWPU!=OhV=`&%`1nUe**NrV(YJ)-T8Yvo1r?Pi%v69Zlzg=SGqX9$S`@x+x z5QrS9sWtDvbl~NJ2UhJ#&K@K@Ui=;puvLp}sjp2}+*5xkGsFA2Xy{y|z4Bs1jwel2 zL~()x&?lcvoH64*pHHc&Z?^n+4d4a>s29%nEt=o3rKDy5c2A#N6k3X3PJHR1T?}wa z_T6D!Ga2lk;{UP!_=0`gz8+g7wwYos;W;9kJbBRi_0#-*mtA_|=HNL2GDe&O5NVp| zJtP8^^UZZth1t0)M?Doa46}lgkogbnDE;d|P>Z_dB+<}|WjPKQ;NP)hdQML2m1Ugu zAt?%TdWe8AR=v203_W?^P&Au4LQ8QWpoZ$hmtOBZCZg+IyY&X~C$jGPv}Vttmc~bW zgz-8FH%a;<(;&*wBP*u1}!MN=u(EEF1`(4?38M z-4>&F_3nS~;&MO)0s>IdGQERG@MxI0jsVtdM|!f(dvR} z03d{P69NIi6w;NZ&KB+t5gi_H+5_XRYC}ZYyT)(Ldl2WB1O)zvyu<({L_<947KgD% zhG_Tx2O=U9Q8nH))V=<^tR;r5Dbgml0*TI8?8Y8Q0v6J3Y&DU|ZFNkn0bH-D*|B`LTAF5I`Zz> zkLQ~wEV1(}Ju%^!Z#&Y9jpI9T(xJ1v*r6ZBm^fW``$7^N-pPvk7cdGZt){*DLjV8( M07*qoM6N<$g0UWI1poj5 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_unpublished_node.png b/doc/salome/gui/GEOM/images/tree_unpublished_node.png new file mode 100644 index 0000000000000000000000000000000000000000..95f9b162928a847ac247838ae3ea09fdd09e1f64 GIT binary patch literal 2076 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 OD+W(jKbLh*2~7Z6;rO)x literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_view_fitall.png b/doc/salome/gui/GEOM/images/tree_view_fitall.png new file mode 100644 index 0000000000000000000000000000000000000000..87e001dd80b2755858d4599857106a0c9c0b3500 GIT binary patch literal 816 zcmV-01JC@4P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;rb$FWRCwBA{Qv(y12q9a0I`6G?+lD6rgAd;XCy{5 zHhlmA#Dc^@mIHB63}s|w3&>x^7VEp$V z!_S{T8NPo0%wTSB4^{^=10aA{2t*_sGYc!&H9+&gF8uxbH^cX@Ux5bxVEFUvH&_hp zNhkmaASMC^p1OMBJi~90i+=rL`10u!!-sco89u&$$ME^%M~1IozA)UpbP22urU4*; z81W@+U>Ndq^YVU}wt5|dps+B*k8j@@e*E~(@bkwHhQELQGJN^`k)bg^7i72+(46}q zJpciO*M(YIT7fc>k_-*mnGENS9|s!*!oPv8y?^^ALw|iO$gn1uVITkyKn&QD3J3!Y zt1#5l`yc4!^j}9?`#%#C(;-P2+5cJwhW{mHWkKFL1H{Sb`Tzn5YousvYge$bu(Yd+ zi!(g^@BtL?iGTn8T>uOM_2*9>%K?=<1!}&AO)o$IVT2*juu`C5U1~tXo&y8^?Uyf= zSFc{}AhvJ-2p}dj!}3{~naMT`1ONgE>_SkfVWO=i2{i0E$eXW$2^NUUfQEGwYY@l` zP;LPTAh-*gnwp;TadI-eff!amiebp56hHvMT?i_^fL=}k3i1H)bfAI1NHGa!20#G8 u4Wv>5%K#8S$g%vNP}zvfo5&o100RIgKz|e1YHVKs0000aa literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_view_fitarea.png b/doc/salome/gui/GEOM/images/tree_view_fitarea.png new file mode 100644 index 0000000000000000000000000000000000000000..e83d023a332df9a7d3ed0eb708e13260fb870af9 GIT binary patch literal 815 zcmV+~1JL}5P)Zvh0=!8? zK~xyios>&x6Hyd~zu0NDs70YTKG0afETV$oLIhFjgVtKmO2r4bsVfyxv7#GMx+ypn z*KVtBRD6IBT&PP0->u@KRa=@dHc8XYOs35woqJv6M*Fah_J_me-Z|&voOACSq?AZ0 zv1M@7I#mluDaos)rRC3N3TkX@3@|c7!!V>RgA@7J0XKk`z%5|^$d86$NB}K=P!{OM zFmme{tpN^IR&P64y|a#miNd5hI_;uymBe{-f4fYooV+1{{Y&t8O-ITI3J3Vb1`tf{4H=PrPg{|ek) zS+gBqN_-(179wZ9!1Fv@$6@WpjQ|Jo6&EVGv`8z)7Xl%3U}dUOJ7JPLs`K_}=lEOXtqw zSk`+Wu0n<;>|r<@J~Lg@nwOTB)6v^Y)A6G*ec_^cbIZ%=?@JKv=}7{ez$c(rg{8EK zU?rN?yj<5Y2L_16;}3-p@o1!{EE?&V4R}BjNCQ#ey$bcTzraqFXj*ef*NIvdT|a(2 ziN#`FfUSB}49rl__=qe4UW5tZ3HWj}%JL_k{xDGPLC%it*B3}6+oLABz! tx&&)7*jSAOYQQ{TnVN53)MfmaegTLEj1qkO@u>g+002ovPDHLkV1g{1YhM5W literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_view_fitselect.png b/doc/salome/gui/GEOM/images/tree_view_fitselect.png new file mode 100755 index 0000000000000000000000000000000000000000..e52598d7b5b26b8fb5c5097dc02fc59ec43606c1 GIT binary patch literal 857 zcmV-f1E&0mP)`6sbB}}ri!6#cjYNKxH+dMXhntu59dfWHkT)PgGfFRb+3KSzb$mip9 zUq{#Hd)l_|Km$r^GRs%6ZqsJgY}ja@JbVxphVq%f;_0&hOgb(bTDI=_@Z;?$t*3xW z6KX}MG|ero{Cw*cH?CYd5^EDPVP0>ah{HFt7n@tQ5^7DTG?PkAMX2z7AJ27Jy?#Bw zuGpZQFenM$i??L7qI*4*IzRDXFs0nP;?wT*Ja%ED2-1rnzQ)s@qxI#OW5=KzXc+n21`lVxy&#y3k9r^ksC^> z5vwq^JGXQZ;+-X=-pC*lf<$#SI-QQCzMKWto|3XNV;DTPZ3eU1o0eq_0#2f;l8VMv z;1v-XL}eOTGavt6Pb}B}16CxHpT@8O)BMpi%>f_}+(}l?Bh}Ohwu1;m5(p9kf@#$! zr#XA;tL|==83x0S!(T%~H?!I70AK-kfL{{nG{I+QKx+_Fe})hOAq2BMz1BCYs>r!6 zt=qN%ydT9&|A(pi`ud|m5Hy;mITShjEs8ua{-VH2U?uQg^u~XR3f2b7&+9NbtuKMe j$jL+CLF7!m$d>;B!^B5bH!%%h00000NkvXXu0mjfuh)e| literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_view_glpan.png b/doc/salome/gui/GEOM/images/tree_view_glpan.png new file mode 100644 index 0000000000000000000000000000000000000000..28ab547eab2e4614b8061252f5cbb4da079c7666 GIT binary patch literal 1086 zcmV-E1i|}>P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZc>jKeOv$OzL15I`)*h9FA-UC3*1Z~uwm?OTSQ4<0bQ ze(?e}13&j7BtjOg8oBY{u_wj195)S?b{&f6+rwNh(Uq* zK0ZGF9!TB4fBzVey$%pSph#d!NlE$3!NI}s_3KxL7r?*=#V#=XRDg2aKr9Qy%0Mg# zwcu`6R@RnZzkY$$K7Ra|;oiM_44*%L1}7(g00Oy$^}~k`3@Z!_7=WS-7i47_^npo& z_1d*NKskL-Yy$BYAm#zl;o;#2riOWv!1Q5tTw%b52J!EBN z_zMj9Ye2(a0MpVAL405VabQDXA%mWt-g{_beh*a#GW3?PurN#?D4ah51P}|7@?T7UooaWF76FUtY(e=N8Ih<%~* zEa-Xx0ti>}^$+SLM<6zX=4AnBQUWFN&ro@cDgYqB0GrW?VpB4t`v3p{07*qoM6N<$ Eg6tg6&Hw-a literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_view_pan.png b/doc/salome/gui/GEOM/images/tree_view_pan.png new file mode 100644 index 0000000000000000000000000000000000000000..ec56cacc779342a978f183ecf747860c8b6dafb4 GIT binary patch literal 982 zcmV;{11bE8P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZb!otG-18H_3W&!c>DFz52f`;Yh z=KlYG@Zf(vJw1@2;y}!e&rpB>!e<*(Vq)UoNnv3OZ?0TnIIE=v5_imOsnQ(>_Q@}D9Q|HpzmfY=u#@9*!A5&HlE#0WDiKR^HPSD@Ek zzkbaCa@oa;7a4y4{_O{p(+6UCAm#(&Px|`$DQaqJ3~X#{4Da5(V|e)RA;Yz6*FdiR z0t!=r00NsF6BF}yLQoI`!>?Zq4Bx&nFns>Zz!(z)vWNqS-$A_va>-9lVB{=URRycP zpsdWG&(6-kdhOZ^SVRE?5Q~nE&fmqMp$spM9AUWs@+E@^Q1mI#KqwFe;@8la1=_~I z2J*$jJ9ilVe*DOA?ZXF#7k~dU%-7RnNW63j9QyzP#B$}z6$wUv{}&HSOBrrFdBPyW z&(HAr=TDe{d{D#gLnA=o6)=Lf|NhPJ2I#_XKyN<>8oU@7aj@722p~`x$^o%15O2W} zQ4K(R5QwirT?%sXD=g|(05K?CodF0SP#A)o^9gFhL?B)Zjj^{zMn(Vgg6j zxpU_jK79D#4wN$jVr3vsfvN|&{yoSXfB<5F#?CWnLd}P!GmwE_`1tr3R)vHxJUVoU z;RMiI;U7Ty82F(McnHLu(3}E_l-nS400M{wntfhCo&E)yX#avZ-#{@A45MF<9x;Hz z4lSY{BV~fOP)EH02p|@y4KPE$Kyv_tjEu~^`}glN965WI;l_&>3~!m4VFpeGVn3)0 zVaeeeEFA&_5G?D#4E+fW52hzio+tt7dm^Ah;l~e#JMZ4X4D5u`pP`QU2lWw%{s$01 zxUwNTH0uR`vRkc+3M|{L0pd2OxFS>?3IGToW*i2Bk`pV``xg$qd*=yF8X#vr0J$9M zy07T20tg^xJOwPwRUpGpK{Y>y#^wX4;lH73-~b@N0A_|Q{Wj4Xb^rhX07*qoM6N<$ Ef)-GsSpWb4 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/tree_view_zoom.png b/doc/salome/gui/GEOM/images/tree_view_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..386c966d156f0a6f53e780aed211b78aa473a11b GIT binary patch literal 797 zcmV+&1LFLNP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;lSxEDRCwBA{Qv(y12q9a05LI882|(j3yAp6z=+{Y zPKN)C$b3dd#y}ty1;mO#{0NBG0DZR%T^~RIu^?$iH}pTm97baxo$2V|nd}h|$RH&v z$MF2=6XU&Gw*&&^{D5-Pfd(IhX#xl!22dE{!$2^nw!8QLxyR4`p9SL6kDmTN`QXX_ zWA`8bZ*#;G5q}bli};<&kW}F_F#1|4FCbe zLcl;aW)@bkYk=l~UHJR=Z-(z*zXA>X!SLtTZ?G6R8lV6mfC#zp)YS{;8GeIY^y?SH zmrtJL&@bUdShR+{AGJO5=h2iF{4FCbeh%aFS!;qhwm-oZ8)$14pg@qY@ zeEZJuHQCMa{8~Mt^J>giRqA}jO>3c z1H=E4va%p=odM!xbbSB;gf&vMwY4kQSXkOs#l;z(e)s?i_{6_||1JOqf%@|&kL7?$ zo&q&r!=@J?fH1-kXjm!Gur4*AVb6g9|Mtt5%Bxqec3{&C%ChKL6d-_@&RKiH#D= b009O7QZ{F9XF19?00000NkvXXu0mjfwM|pG literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc b/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc index 8821198e3..fcf4b26cd 100644 --- a/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc +++ b/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc @@ -34,6 +34,9 @@ and then displays only the children of the selected object(s). unpublished objects are sorted by name in ascending order. It is possible to change the order (ascending / descending) by clicking the corresponding title bar of the objects list. + +

  • \subpage dependency_tree_page "Show dependency tree" - shows dependency tree of selected objects +in new 2D View Window.
  • Folders

    diff --git a/doc/salome/gui/GEOM/input/dependency_tree.doc b/doc/salome/gui/GEOM/input/dependency_tree.doc new file mode 100644 index 000000000..ec4aa11e3 --- /dev/null +++ b/doc/salome/gui/GEOM/input/dependency_tree.doc @@ -0,0 +1,205 @@ +/*! + +\page dependency_tree_page Dependency Tree + +\n In order to better understand the relations between the %GEOM +objects in a study the user has the possibility to display the +ascendants and descendant of an object in a family tree. + +User can build the dependency tree with new main objects by selecting +them in Object Browser, in OCC Viewer or in Dependency Tree Viewer +and calling corresponding popup menu. When invoked, this menu item +will open a 2D view window and display a dependency tree for the +selected object or objects (multiple selection is supported). + +\image html tree_example.png + +User can change all necessary parameters of Dependency Tree Viewer +in \ref pref_dependency_tree "Preferences". + +
    +\anchor dependency_tree_nodes

    Nodes

    + +Tree nodes in the Dependency Viewer are named according to the study +names of the corresponding objects. + +Non-published objects are shown in the tree as "unpublished" and are +colored in special for non-published objects color. + +The long name of the object is displayed in a shortened version; +full name of the object can be seen in the tool tip when the cursor +is on the node. + +Dependency Tree Viewer supports the following states of nodes: + +\image html tree_main_node.png +
    • Main node - node of main object, selected in Object +Browser, OCC Viewer or Dependency Tree Viewer in order to build the +dependency tree;
    + +\image html tree_default_node.png +
    • Default node - node, which participate in building of +dependency tree as ascendant or descendant;
    + +\image html tree_unpublished_node.png +
    • Unpublished node - node of non-published in study +object;
    + +\image html tree_highlighted_node.png +
    • Highlighted node - the state of node when mouse is +near or on it;
    + +\image html tree_selected_node.png +
    • Selected node - the state of selected node when +clicking left mouse button on node.
    + +
    +\anchor dependency_tree_links

    Links

    + +Dependency Tree Viewer shows oriented links between nodes to +represent dependency direction. Viewer supports the following states +of links: + +\image html tree_unidir_link.png +
    • Unidirectional link - shows that object A depends on +the object B;
    + +\image html tree_bidir_link.png +
    • Bidirectional link - shows that object A depends on +the object B and at the same time object B depends on +the object A;
    + +\image html tree_selfdep_link.png +
    • Self-dependency link - shows that object depends on +itself;
    + +\image html tree_cycldep_link.png +
    • Cyclic dependency links - shows cyclic dependency of +some nodes.
    + +
    +\anchor dependency_tree_operations

    Operations

    + +The dependency tree of a chosen %GEOM object is displayed in +the dedicated 2D view window. +\n The functionalities of 2D viewer are available via its Viewer +Toolbar. + +Buttons marked with small downward triangles have extended +functionality which can be accessed by locking on them with left +mouse button. + +\image tree_tool_bar + +\image html tree_view_dump.png + +Dump View - exports an object from the viewer in bmp, png or +jpeg image format. + +\image html tree_view_fitall.png + +Fit all - scales the presentation so that it could fit within +the Viewer boundaries. + +\image html tree_view_fitarea.png + +Fit area - resizes the view to place in the visible area only +the contents of a frame drawn with pressed left mouse button. + +\image html tree_view_fitselect.png + +Fit selection - resizes the view to fit in the visible area +only currently selected objects. + +\image html tree_view_zoom.png + +Zoom - allows to zoom in and out. + +\image html tree_view_pan.png + +Panning - if the represented objects are greater that the +visible area and you don't wish to use Fit all functionality, +click on this button and you'll be able to drag the scene to see its +remote parts. + +\image html tree_view_glpan.png + +Global panning - allows to select a point to be the center of +the presentation showing all displayed objects in the visible ares. + +\image html tree_hierarchy_type.png + +Hierarchy depth - allows to change the number of hierarchy +levels to be shown in the dependency tree. +
      +
    • Level 1 corresponds to the parents and children of the selected +object(s);
    • +
    • Level 2 is Level 1 plus the grand-parents and grand-children +of the selected object(s);
    • +
    • etc...
    • +
    + +\image html tree_disp_ascendants.png + +Display ascendants - allows to customize the display +of ascendants. + +\image html tree_disp_descendants.png + +Display descendants - allows to customize the display +of descendants. + +\image html tree_move_nodes.png + +Move nodes - allows to customize the moving of nodes. + +\image html tree_button_update.png + +Update - allows to update a dependency tree model and a view. + +
    +\anchor dependency_tree_navigation

    Navigation

    + +Dependency Tree 2D Viewer supports the following navigation mode: + +Rectangle selection in this mode is performed by the left mouse +button; multiple selection is available when \b Shift button +is pressed. + +Also, holding \b Ctrl key with pressed mouse buttons performs +the following view transformations: +
      +
    • Ctrl + left mouse button - zooming;
    • +
    • Ctrl + middle mouse button - panning;
    • +
    + +
    +\anchor dependency_tree_popup_menu

    Popup Menu

    + +After the object has appeared in the Dependency Tree 2D Viewer, +you can select it with left mouse click to change its presentation +parameters and access to other useful options by right-clicking on +the selected object. + +\image html tree_popup_menu.png + +
      +
    • \b Show - allows to show selected object(s) in OCC 3D Viewer;
    • +
    • Show Only - allows to show only selected object(s) +in OCC 3D Viewer;
    • +
    • Rebuild the tree - allows to rebuild the dependency tree +for selected object(s);
    • +
    + +Some functionalities are available through right-clicking on +the viewer background: + +\image html tree_popup_menu2.png + +Dependency Tree 2D Viewer background can be customized using the +"Change background" popup menu command that opens standard +"Select Color" dialog box: + +\image html selectcolor.png + +*/ diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc index f06e510bb..ca4375244 100644 --- a/doc/salome/gui/GEOM/input/geometry_preferences.doc +++ b/doc/salome/gui/GEOM/input/geometry_preferences.doc @@ -2,6 +2,8 @@ \page geometry_preferences_page Geometry preferences +\anchor pref_settings

    Settings

    + In the \b Geometry module you can set preferences for visualisation of geometrical figures, which can be used in later sessions with this module. There is also a special group of preferences controlling input @@ -128,6 +130,8 @@ system immediately after the module activation. +\anchor pref_dependency_tree

    Dependency Tree

    + Also you can set preferences for visualisation of Dependency Tree in 2D Viewer. \image html pref_dep_tree.png diff --git a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc index 38246c570..56b74c093 100644 --- a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc +++ b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc @@ -21,6 +21,7 @@ other useful options by right-clicking on the selected object. object.
  • Delete - irreversibly deletes the selected object from the viewer and from the Object Browser.
  • +
  • Create Group - allows to create group.
  • \subpage display_mode_page "Display Mode" - allows to select between Wireframe and Shading presentation.
  • \subpage bring_to_front_page "Bring To Front" - allows to bring to @@ -63,6 +64,8 @@ geometrical object. TUI Command: sg.DisplayOnly(ID)
  • Show all dimensions - shows all of the persistent dimensions created for the selected geometrical object.
  • Hide all dimensions - hides all of the persistent dimensions created for the selected geometrical object.
  • +
  • \subpage dependency_tree_page "Show dependency tree" - shows dependency tree of selected objects +in new 2D View Window.
  • Dump view - exports an object from the viewer in bmp, png, jpg or jpeg image format.
  • Change background - allows to redefine the background diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 3f1c51bfa..24d9abae3 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -430,8 +430,8 @@ void DependencyTree_View::onPreferenceChanged( const QString& section, const QSt //================================================================================= void DependencyTree_View::onRenameObject( const QString& theEntry ) { - DependencyTree_Object* object = getObjectByEntry( theEntry.toStdString() ); - object->updateName(); + if( DependencyTree_Object* object = getObjectByEntry( theEntry.toStdString() ) ) + object->updateName(); } //================================================================================= @@ -682,21 +682,30 @@ void DependencyTree_View::clearView( bool isClearModel ) { EntryObjectMap::const_iterator objectIter; for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) { - DependencyTree_Object* object = objectIter->second; - if( object ) + if( DependencyTree_Object* object = objectIter->second ) if( isItemAdded( object ) ) removeItem( object ); } ArrowsInfo::const_iterator arrowIter; for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) { - DependencyTree_Arrow* object = arrowIter->second; - if( object ) - if( isItemAdded( object ) ) - removeItem( object ); + if( DependencyTree_Arrow* arrow = arrowIter->second ) + if( isItemAdded( arrow ) ) + removeItem( arrow ); } if( isClearModel ) { + EntryObjectMap::const_iterator objectIter; + for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) { + if( DependencyTree_Object* object = objectIter->second ) + delete object; + } + + ArrowsInfo::const_iterator arrowIter; + for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) { + if( DependencyTree_Arrow* arrow = arrowIter->second ) + delete arrow; + } myTreeMap.clear(); myArrows.clear(); myTreeModel.clear(); diff --git a/src/DependencyTree/resources/tree_view_dump.png b/src/DependencyTree/resources/tree_view_dump.png new file mode 100644 index 0000000000000000000000000000000000000000..b02616f2975e7a3865a236ee75380bdae5ce59f7 GIT binary patch literal 682 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6l6(v z^mSxl*w|O|J8&|PuaN8!GAr-fh{`~)M&uq%*z+h+?Aj!ZYz}<83#0idNZ{NHLm{arOf}-0Di4NZr z4h;-Rj?WrQvR=Mwyy^F?%;4dFDJdx)KR>?&vt5iYrhzo>YRaCjpLk={x^?G1e0dpc zAf2Wt^rJsV!+{}D;>9cZGar846mH{Q?tkd0S>BzF%TD3t{4*BXIQ-IfVA%M8i#s*c zlr1kVj?FMpku6S6PGNSxV@Sx9M(Gn`0zzpIgandKboIMkOJX=8&cMX6ys@Kkl!Hi5Cs~Z*GuUfUrsH3ynxPybcSy{#2e*VG@J6ax= z#n~Osp1^ImwK3)gt3rdprHAi&vk!iGdwaWNpPVI=nU9lGQ{we?u{?kG+WrXQ(cn=9 z+IG10^fX=PhwiSfjl8q1O0@zxr4<@xOt_qoo~}Mam+y-f$9#+0wuLz-jo8f1&D+fL z?z+m40n#|u4mYG61ddHVaiyUq`r4~d9q8ZdYn zozP=;ncaEPUC6S9SjZ)j11xdTOVx|PwNDx OD+W(jKbLh*2~7Z6;rO)x literal 0 HcmV?d00001 diff --git a/src/DependencyTree/resources/tree_view_fitall.png b/src/DependencyTree/resources/tree_view_fitall.png new file mode 100644 index 0000000000000000000000000000000000000000..386c966d156f0a6f53e780aed211b78aa473a11b GIT binary patch literal 797 zcmV+&1LFLNP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;lSxEDRCwBA{Qv(y12q9a05LI882|(j3yAp6z=+{Y zPKN)C$b3dd#y}ty1;mO#{0NBG0DZR%T^~RIu^?$iH}pTm97baxo$2V|nd}h|$RH&v z$MF2=6XU&Gw*&&^{D5-Pfd(IhX#xl!22dE{!$2^nw!8QLxyR4`p9SL6kDmTN`QXX_ zWA`8bZ*#;G5q}bli};<&kW}F_F#1|4FCbe zLcl;aW)@bkYk=l~UHJR=Z-(z*zXA>X!SLtTZ?G6R8lV6mfC#zp)YS{;8GeIY^y?SH zmrtJL&@bUdShR+{AGJO5=h2iF{4FCbeh%aFS!;qhwm-oZ8)$14pg@qY@ zeEZJuHQCMa{8~Mt^J>giRqA}jO>3c z1H=E4va%p=odM!xbbSB;gf&vMwY4kQSXkOs#l;z(e)s?i_{6_||1JOqf%@|&kL7?$ zo&q&r!=@J?fH1-kXjm!Gur4*AVb6g9|Mtt5%Bxqec3{&C%ChKL6d-_@&RKiH#D= b009O7QZ{F9XF19?00000NkvXXu0mjfwM|pG literal 0 HcmV?d00001 diff --git a/src/DependencyTree/resources/tree_view_fitarea.png b/src/DependencyTree/resources/tree_view_fitarea.png new file mode 100644 index 0000000000000000000000000000000000000000..e83d023a332df9a7d3ed0eb708e13260fb870af9 GIT binary patch literal 815 zcmV+~1JL}5P)Zvh0=!8? zK~xyios>&x6Hyd~zu0NDs70YTKG0afETV$oLIhFjgVtKmO2r4bsVfyxv7#GMx+ypn z*KVtBRD6IBT&PP0->u@KRa=@dHc8XYOs35woqJv6M*Fah_J_me-Z|&voOACSq?AZ0 zv1M@7I#mluDaos)rRC3N3TkX@3@|c7!!V>RgA@7J0XKk`z%5|^$d86$NB}K=P!{OM zFmme{tpN^IR&P64y|a#miNd5hI_;uymBe{-f4fYooV+1{{Y&t8O-ITI3J3Vb1`tf{4H=PrPg{|ek) zS+gBqN_-(179wZ9!1Fv@$6@WpjQ|Jo6&EVGv`8z)7Xl%3U}dUOJ7JPLs`K_}=lEOXtqw zSk`+Wu0n<;>|r<@J~Lg@nwOTB)6v^Y)A6G*ec_^cbIZ%=?@JKv=}7{ez$c(rg{8EK zU?rN?yj<5Y2L_16;}3-p@o1!{EE?&V4R}BjNCQ#ey$bcTzraqFXj*ef*NIvdT|a(2 ziN#`FfUSB}49rl__=qe4UW5tZ3HWj}%JL_k{xDGPLC%it*B3}6+oLABz! tx&&)7*jSAOYQQ{TnVN53)MfmaegTLEj1qkO@u>g+002ovPDHLkV1g{1YhM5W literal 0 HcmV?d00001 diff --git a/src/DependencyTree/resources/tree_view_fitselect.png b/src/DependencyTree/resources/tree_view_fitselect.png new file mode 100755 index 0000000000000000000000000000000000000000..e52598d7b5b26b8fb5c5097dc02fc59ec43606c1 GIT binary patch literal 857 zcmV-f1E&0mP)`6sbB}}ri!6#cjYNKxH+dMXhntu59dfWHkT)PgGfFRb+3KSzb$mip9 zUq{#Hd)l_|Km$r^GRs%6ZqsJgY}ja@JbVxphVq%f;_0&hOgb(bTDI=_@Z;?$t*3xW z6KX}MG|ero{Cw*cH?CYd5^EDPVP0>ah{HFt7n@tQ5^7DTG?PkAMX2z7AJ27Jy?#Bw zuGpZQFenM$i??L7qI*4*IzRDXFs0nP;?wT*Ja%ED2-1rnzQ)s@qxI#OW5=KzXc+n21`lVxy&#y3k9r^ksC^> z5vwq^JGXQZ;+-X=-pC*lf<$#SI-QQCzMKWto|3XNV;DTPZ3eU1o0eq_0#2f;l8VMv z;1v-XL}eOTGavt6Pb}B}16CxHpT@8O)BMpi%>f_}+(}l?Bh}Ohwu1;m5(p9kf@#$! zr#XA;tL|==83x0S!(T%~H?!I70AK-kfL{{nG{I+QKx+_Fe})hOAq2BMz1BCYs>r!6 zt=qN%ydT9&|A(pi`ud|m5Hy;mITShjEs8ua{-VH2U?uQg^u~XR3f2b7&+9NbtuKMe j$jL+CLF7!m$d>;B!^B5bH!%%h00000NkvXXu0mjfuh)e| literal 0 HcmV?d00001 diff --git a/src/DependencyTree/resources/tree_view_glpan.png b/src/DependencyTree/resources/tree_view_glpan.png new file mode 100644 index 0000000000000000000000000000000000000000..28ab547eab2e4614b8061252f5cbb4da079c7666 GIT binary patch literal 1086 zcmV-E1i|}>P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZc>jKeOv$OzL15I`)*h9FA-UC3*1Z~uwm?OTSQ4<0bQ ze(?e}13&j7BtjOg8oBY{u_wj195)S?b{&f6+rwNh(Uq* zK0ZGF9!TB4fBzVey$%pSph#d!NlE$3!NI}s_3KxL7r?*=#V#=XRDg2aKr9Qy%0Mg# zwcu`6R@RnZzkY$$K7Ra|;oiM_44*%L1}7(g00Oy$^}~k`3@Z!_7=WS-7i47_^npo& z_1d*NKskL-Yy$BYAm#zl;o;#2riOWv!1Q5tTw%b52J!EBN z_zMj9Ye2(a0MpVAL405VabQDXA%mWt-g{_beh*a#GW3?PurN#?D4ah51P}|7@?T7UooaWF76FUtY(e=N8Ih<%~* zEa-Xx0ti>}^$+SLM<6zX=4AnBQUWFN&ro@cDgYqB0GrW?VpB4t`v3p{07*qoM6N<$ Eg6tg6&Hw-a literal 0 HcmV?d00001 diff --git a/src/DependencyTree/resources/tree_view_pan.png b/src/DependencyTree/resources/tree_view_pan.png new file mode 100644 index 0000000000000000000000000000000000000000..ec56cacc779342a978f183ecf747860c8b6dafb4 GIT binary patch literal 982 zcmV;{11bE8P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZb!otG-18H_3W&!c>DFz52f`;Yh z=KlYG@Zf(vJw1@2;y}!e&rpB>!e<*(Vq)UoNnv3OZ?0TnIIE=v5_imOsnQ(>_Q@}D9Q|HpzmfY=u#@9*!A5&HlE#0WDiKR^HPSD@Ek zzkbaCa@oa;7a4y4{_O{p(+6UCAm#(&Px|`$DQaqJ3~X#{4Da5(V|e)RA;Yz6*FdiR z0t!=r00NsF6BF}yLQoI`!>?Zq4Bx&nFns>Zz!(z)vWNqS-$A_va>-9lVB{=URRycP zpsdWG&(6-kdhOZ^SVRE?5Q~nE&fmqMp$spM9AUWs@+E@^Q1mI#KqwFe;@8la1=_~I z2J*$jJ9ilVe*DOA?ZXF#7k~dU%-7RnNW63j9QyzP#B$}z6$wUv{}&HSOBrrFdBPyW z&(HAr=TDe{d{D#gLnA=o6)=Lf|NhPJ2I#_XKyN<>8oU@7aj@722p~`x$^o%15O2W} zQ4K(R5QwirT?%sXD=g|(05K?CodF0SP#A)o^9gFhL?B)Zjj^{zMn(Vgg6j zxpU_jK79D#4wN$jVr3vsfvN|&{yoSXfB<5F#?CWnLd}P!GmwE_`1tr3R)vHxJUVoU z;RMiI;U7Ty82F(McnHLu(3}E_l-nS400M{wntfhCo&E)yX#avZ-#{@A45MF<9x;Hz z4lSY{BV~fOP)EH02p|@y4KPE$Kyv_tjEu~^`}glN965WI;l_&>3~!m4VFpeGVn3)0 zVaeeeEFA&_5G?D#4E+fW52hzio+tt7dm^Ah;l~e#JMZ4X4D5u`pP`QU2lWw%{s$01 zxUwNTH0uR`vRkc+3M|{L0pd2OxFS>?3IGToW*i2Bk`pV``xg$qd*=yF8X#vr0J$9M zy07T20tg^xJOwPwRUpGpK{Y>y#^wX4;lH73-~b@N0A_|Q{Wj4Xb^rhX07*qoM6N<$ Ef)-GsSpWb4 literal 0 HcmV?d00001 diff --git a/src/DependencyTree/resources/tree_view_reset.png b/src/DependencyTree/resources/tree_view_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..66f81e60471b7b587c37166a4e206b45f74e7fc2 GIT binary patch literal 918 zcmV;H18Mw;P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ<3`s;mRCwBA`2YVu0}KO!sHi9>h~bSaP6`GHAOZXQ009Iu ztVK?a_y6WCKL3CH$@>5IfA;^Iw`2aBnTdlW&7exTp@zi+u{AD30Ro7Lk&#hUNQk5Q z?D;STpjR1~nHj+nii&(-KGfwPzyqZXfLH~Ij{*P!hzW=@vvYJAfQEtvwrzdL@b~Y3 zhTx#>3=Q?CrT~SeL)CtP(l4O+3pN7*0*D2Ojg5^(!JOKflMHLu++jF%N|j;rru$QX z!I2B}0Zi>zGy}h4GY}wvKrZ|XauEp3n0^K5WhREsj&mSx69e%89{T_R1ajfcn>Rmz zIq%;60AXz)^A6B;zi?=K-}sfC-?tzTH62r z+1dZM`}+RpVPyp=a)o&VAb=Q=3jlDg;ox}n@#jy5zyJSR0p*SZ#Xz=e0L9NFXlO8m zC@V8qN=Sg!-~8}_;lk_J40EqvXW0Gtu^UimH$VWPmo_{g8)rH={0C|R3ET$aE+9^W z#_sAO0|T(@KsZfX8>D6hvI_wMh!MSr0=mcm=$i9OU0oSe`1u*u-@C_f=i^5PHYO$p zdueHgKqVyxW?=4l`t>V=_OfLRAAkK40Gja;rXL`H7_pRjAVWa`o#`Ya<56K`#Na9` ziz0vj(z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;lSxEDRCwBA{Qv(y12q9a05LI882|(j3yAp6z=+{Y zPKN)C$b3dd#y}ty1;mO#{0NBG0DZR%T^~RIu^?$iH}pTm97baxo$2V|nd}h|$RH&v z$MF2=6XU&Gw*&&^{D5-Pfd(IhX#xl!22dE{!$2^nw!8QLxyR4`p9SL6kDmTN`QXX_ zWA`8bZ*#;G5q}bli};<&kW}F_F#1|4FCbe zLcl;aW)@bkYk=l~UHJR=Z-(z*zXA>X!SLtTZ?G6R8lV6mfC#zp)YS{;8GeIY^y?SH zmrtJL&@bUdShR+{AGJO5=h2iF{4FCbeh%aFS!;qhwm-oZ8)$14pg@qY@ zeEZJuHQCMa{8~Mt^J>giRqA}jO>3c z1H=E4va%p=odM!xbbSB;gf&vMwY4kQSXkOs#l;z(e)s?i_{6_||1JOqf%@|&kL7?$ zo&q&r!=@J?fH1-kXjm!Gur4*AVb6g9|Mtt5%Bxqec3{&C%ChKL6d-_@&RKiH#D= b009O7QZ{F9XF19?00000NkvXXu0mjfwM|pG literal 0 HcmV?d00001 From f76dd3adb8d73d3771700b528c7fefd5538dcb48 Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 6 Jun 2014 18:25:29 +0400 Subject: [PATCH 030/118] Correction of 'dependency tree' functionality description. --- doc/salome/gui/GEOM/input/dependency_tree.doc | 116 +++++++++--------- .../gui/GEOM/input/geometry_preferences.doc | 7 +- 2 files changed, 58 insertions(+), 65 deletions(-) diff --git a/doc/salome/gui/GEOM/input/dependency_tree.doc b/doc/salome/gui/GEOM/input/dependency_tree.doc index ec4aa11e3..fc3a6422b 100644 --- a/doc/salome/gui/GEOM/input/dependency_tree.doc +++ b/doc/salome/gui/GEOM/input/dependency_tree.doc @@ -3,14 +3,17 @@ \page dependency_tree_page Dependency Tree \n In order to better understand the relations between the %GEOM -objects in a study the user has the possibility to display the -ascendants and descendant of an object in a family tree. +objects in a study the user has a possibility to display the +ascendants and descendant of the object(s) in a family tree. -User can build the dependency tree with new main objects by selecting -them in Object Browser, in OCC Viewer or in Dependency Tree Viewer -and calling corresponding popup menu. When invoked, this menu item -will open a 2D view window and display a dependency tree for the -selected object or objects (multiple selection is supported). +User can build the dependency tree by selecting desirable object +in Object Browser or OCC Viewer and calling "Show dependency tree" +popup item. It will open a new or clear the existing "Dependency +Tree" view window (only one view is supported) and display a +dependency tree for the selected object or objects (multiple +selection is supported). Also user can rebuild the tree if to select +some object(s) right in the "Dependency Tree" view and call +"Rebuild the tree" popup item. \image html tree_example.png @@ -23,35 +26,35 @@ in \ref pref_dependency_tree "Preferences". Tree nodes in the Dependency Viewer are named according to the study names of the corresponding objects. -Non-published objects are shown in the tree as "unpublished" and are -colored in special for non-published objects color. +Non-published objects are shown in the tree as "unpublished" and +not colored in any color. -The long name of the object is displayed in a shortened version; -full name of the object can be seen in the tool tip when the cursor -is on the node. +All nodes have the fixed size, so the long names are cut and shown +with ellipsis; full name of the object can be seen in the tooltip +if to keep the cursor over the node. -Dependency Tree Viewer supports the following states of nodes: +"Dependency Tree" view supports the following states of nodes: -\image html tree_main_node.png -

    Folders

    diff --git a/doc/salome/gui/GEOM/input/dependency_tree.doc b/doc/salome/gui/GEOM/input/dependency_tree.doc index 12d0387e2..e44dba400 100644 --- a/doc/salome/gui/GEOM/input/dependency_tree.doc +++ b/doc/salome/gui/GEOM/input/dependency_tree.doc @@ -2,7 +2,18 @@ \page dependency_tree_page Dependency Tree -\n In order to better understand the relations between the %GEOM +
      +
    • \ref dependency_tree_general_description_anchor "General description"
    • +
    • \ref dependency_tree_nodes_anchor "Nodes"
    • +
    • \ref dependency_tree_links_anchor "Links"
    • +
    • \ref dependency_tree_operations_anchor "Operations"
    • +
    • \ref dependency_tree_navigation_anchor "Navigation"
    • +
    • \ref dependency_tree_popup_menu_anchor "Context menu"
    • +
    + +\anchor dependency_tree_general_description_anchor

    General description

    + +In order to better understand the relations between the %GEOM objects in a study the user has a possibility to display the ascendants and descendant of the object(s) in a family tree. @@ -21,7 +32,7 @@ User can change all necessary parameters of Dependency Tree Viewer in \ref pref_dependency_tree "Preferences".
    -\anchor dependency_tree_nodes

    Nodes

    +\anchor dependency_tree_nodes_anchor

    Nodes

    Tree nodes in the Dependency Viewer are named according to the study names of the corresponding objects. @@ -57,7 +68,7 @@ clicks the left mouse button on node.
  • \image html tree_selected_node.png
    -\anchor dependency_tree_links

    Links

    +\anchor dependency_tree_links_anchor

    Links

    Dependency Tree Viewer shows oriented links between nodes to represent dependency direction. Viewer supports the following states @@ -81,7 +92,7 @@ some nodes. \image html tree_cycldep_link.png
    -\anchor dependency_tree_operations

    Operations

    +\anchor dependency_tree_operations_anchor

    Operations

    The dependency tree of a chosen %GEOM object is displayed in the dedicated 2D view window. @@ -149,7 +160,7 @@ of descendants. \image html tree_button_update.png
    -\anchor dependency_tree_navigation

    Navigation

    +\anchor dependency_tree_navigation_anchor

    Navigation

    Dependency Tree 2D Viewer supports the following navigation mode: @@ -168,7 +179,7 @@ the following view transformations:
    -\anchor dependency_tree_popup_menu

    Popup Menu

    +\anchor dependency_tree_popup_menu_anchor

    Popup Menu

    After the object has appeared in the Dependency Tree 2D Viewer, user can select it with left mouse click to change its presentation diff --git a/doc/salome/gui/GEOM/input/reduce_study.doc b/doc/salome/gui/GEOM/input/reduce_study.doc index 8a4f03943..8a3c7e766 100644 --- a/doc/salome/gui/GEOM/input/reduce_study.doc +++ b/doc/salome/gui/GEOM/input/reduce_study.doc @@ -18,39 +18,41 @@ Browser or OCC Viewer and calling "Reduce study" popup item.
      -
    • Objects to be kept - objects will be kept in the study after +
    • Objects to be kept - objects that will be kept in the study after applying operation of reduce study. The list of objects being selected by -the user are highlighted in bold font. -\n Moreover user can show and hide object(s) in current OCC Viewer using -"eye" icons near each item of tree. It's possible to click on "eye" icon -in the head of tree in order to show/hide all objects.
    • +the user are highlighted in bold font. -
    • Objects to be removed - objects will be deleted by the -function if it is applied.
    • +
    • Objects to be removed - objects that will be deleted.
    • -
    • Intermediate objects - allows to choose future action with -the objects, being in the operations chains to produce final objects: +\note Mentioned views provide possibility to show/hide object(s) in +current Viewer using "eye" icon near each item of tree. Also user can +show/hide ALL objects in tree by clicking "eye" icon in the head of tree view. + +
    • Intermediate objects group box allows to choose an action +that will be performed with the objects that took part in the operations +chain to produce the selected object(s):
      • Keep - object(s) will be kept in the study;
      • -
      • Unpublish - object(s) will be automatically unpublished (hidden) -from the study;
      • -
      • Remove - object(s) will be removed from the study. Since using of -this option can lead to the broken Dump Python, the warning message -will be shown to the user.
      • +
      • Unpublish - object(s) will be unpublished (hidden) from the study;
      • +
      • Remove - object(s) will be removed from the study. \note Since use of +this option can lead to the broken Dump Python script, the warning message +will be shown at the operation commiting to confirm/reject removing +intermediate objects.
    • -
    • Sub-objects - allows to choose the same operations for +
    • Sub-objects group box allows to choose the same operations for sub-objects of selected item(s): keep, unpublish or remove.
    • -
    • Remove empty folders - if this option is checked, all folders, -which will become empty after removal of the unused objects from the -study, will be also removed; otherwise, empty folders will be kept.
    • +
    • Remove empty folders - if this option is checked, then all folders, +which will become empty after removing unused objects from the study, +will be also removed; otherwise, empty folders will be kept.
    • Soft removal - if this option is checked, operation will just -unpublish the redundant objects from the study instead of their hard removal. -\n Soft removal would keep all the data in the study to give the user -chance to rollback this operation using "Publish Objects" dialog box.
    • +unpublish the redundant objects from the study instead of their hard delete. +\n Soft removal would keep all the data in the study to give the user a +chance to revert this operation using \ref publish_hidden_objects +"Publish Objects" dialog box.
    */ diff --git a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc index d5bd74fea..29a43cfbf 100644 --- a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc +++ b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc @@ -66,7 +66,8 @@ geometrical object. TUI Command: sg.DisplayOnly(ID)
  • Hide all dimensions - hides all of the persistent dimensions created for the selected geometrical object.
  • \subpage dependency_tree_page "Show dependency tree" - shows dependency tree of selected objects in new 2D View Window.
  • -
  • \subpage reduce_study_page "Reduce study" - allows to reduce study.
  • +
  • \subpage reduce_study_page "Reduce study" - allows to reduce study +by automatic removing objects according to user's options.
  • Dump view - exports an object from the viewer in bmp, png, jpg or jpeg image format.
  • Change background - allows to redefine the background From c53193642977279fc6be831334e6d8e0882ef467 Mon Sep 17 00:00:00 2001 From: akl Date: Tue, 24 Jun 2014 17:20:50 +0400 Subject: [PATCH 049/118] Small code refactoring. --- .../GEOMToolsGUI_ReduceStudyDlg.cxx | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx index 272d63d65..4fa9d4efa 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx @@ -641,21 +641,16 @@ void GEOMToolsGUI_ReduceStudyDlg::clickOnOk() objectsToBeUnpublished.insert( *iter ); } if( myGroupIntermediates->checkedId() == 2 ) { // remove - if( myCBSoftRemoval->isChecked() ) - for( iter = myListParents.begin(); iter != myListParents.end(); ++iter ) - objectsToBeRemoved.insert( *iter ); - else { - if ( SUIT_MessageBox::question( this, - tr( "GEOM_WRN_WARNING" ), - tr( "GEOM_REDUCE_STUDY_WARNING_DELETE" ), - QMessageBox::Yes | QMessageBox::No, - QMessageBox::Yes ) == QMessageBox::Yes ) { - for( iter = myListParents.begin(); iter != myListParents.end(); ++iter ) - objectsToBeRemoved.insert( *iter ); - } - else - return; - } + if( !myCBSoftRemoval->isChecked() && + SUIT_MessageBox::question( this, + tr( "GEOM_WRN_WARNING" ), + tr( "GEOM_REDUCE_STUDY_WARNING_DELETE" ), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::Yes ) == QMessageBox::No ) { + return; + } + for( iter = myListParents.begin(); iter != myListParents.end(); ++iter ) + objectsToBeRemoved.insert( *iter ); } // Create lists of sub-objects to be removed or to be unpublished From f84f4018610d895438da74136e5ece7dc0c2cbf6 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 25 Jun 2014 18:28:02 +0400 Subject: [PATCH 050/118] 0022566: EDF GEOM : Performance regression in MakeCompound operation --- src/GEOM/GEOM_Engine.cxx | 2 +- src/GEOM_SWIG/geomBuilder.py | 1033 ++++++++++++++++++++++------------ 2 files changed, 686 insertions(+), 349 deletions(-) diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx index 9d804abfd..b83233ff5 100644 --- a/src/GEOM/GEOM_Engine.cxx +++ b/src/GEOM/GEOM_Engine.cxx @@ -215,7 +215,7 @@ GEOM_Engine::GEOM_Engine() TFunction_DriverTable::Get()->AddDriver(GEOM_Object::GetSubShapeID(), new GEOM_SubShapeDriver()); _OCAFApp = new GEOM_Application(); - _UndoLimit = 10; + _UndoLimit = 0; } /*! diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 38255ac1b..9452921e9 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -39,16 +39,16 @@ ## by means of \ref geomBuilder.geomBuilder.addToStudy() "addToStudy()" ## or \ref geomBuilder.geomBuilder.addToStudyInFather() "addToStudyInFather()" ## functions. -## +## ## However, it is possible to publish result data in the study ## automatically. For this, almost each function of ## \ref geomBuilder.geomBuilder "geomBuilder" class has ## an additional @a theName parameter (@c None by default). ## As soon as non-empty string value is passed to this parameter, ## the result object is published in the study automatically. -## +## ## For example, consider the following Python script: -## +## ## @code ## import salome ## from salome.geom import geomBuilder @@ -56,15 +56,15 @@ ## box = geompy.MakeBoxDXDYDZ(100, 100, 100) # box is not published in the study yet ## geompy.addToStudy(box, "box") # explicit publishing ## @endcode -## +## ## Last two lines can be replaced by one-line instruction: -## +## ## @code ## box = geompy.MakeBoxDXDYDZ(100, 100, 100, theName="box") # box is published in the study with "box" name ## @endcode -## +## ## ... or simply -## +## ## @code ## box = geompy.MakeBoxDXDYDZ(100, 100, 100, "box") # box is published in the study with "box" name ## @endcode @@ -102,8 +102,8 @@ ## value passed as parameter has the same effect. ## - if @a maxNbSubShapes is any positive value, automatic publishing is enabled and ## maximum number of sub-shapes allowed for publishing is set to specified value. -## -## When automatic publishing is enabled, you even do not need to pass @a theName parameter +## +## When automatic publishing is enabled, you even do not need to pass @a theName parameter ## to the functions creating objects, instead default names will be used. However, you ## can always change the behavior, by passing explicit name to the @a theName parameter ## and it will be used instead default one. @@ -117,7 +117,7 @@ ## from salome.geom import geomBuilder ## geompy = geomBuilder.New(salome.myStudy) ## geompy.addToStudyAuto() # enable automatic publication -## box = geompy.MakeBoxDXDYDZ(100, 100, 100) +## box = geompy.MakeBoxDXDYDZ(100, 100, 100) ## # the box is created and published in the study with default name ## geompy.addToStudyAuto(5) # set max allowed number of sub-shapes to 5 ## vertices = geompy.SubShapeAll(box, geomBuilder.ShapeType['VERTEX']) @@ -146,44 +146,44 @@ ## ## It is possible to customize the representation of the geometrical ## data in the data tree; this can be done by using folders. A folder can -## be created in the study tree using function -## \ref geomBuilder.geomBuilder.NewFolder() "NewFolder()" -## (by default it is created under the "Geometry" root object). -## As soon as folder is created, any published geometry object +## be created in the study tree using function +## \ref geomBuilder.geomBuilder.NewFolder() "NewFolder()" +## (by default it is created under the "Geometry" root object). +## As soon as folder is created, any published geometry object ## can be moved into it. -## +## ## For example: -## +## ## @code ## import salome ## from salome.geom import geomBuilder ## geompy = geomBuilder.New(salome.myStudy) -## box = geompy.MakeBoxDXDYDZ(100, 100, 100, "Box") +## box = geompy.MakeBoxDXDYDZ(100, 100, 100, "Box") ## # the box was created and published in the study ## folder = geompy.NewFolder("Primitives") ## # an empty "Primitives" folder was created under default "Geometry" root object ## geompy.PutToFolder(box, folder) ## # the box was moved into "Primitives" folder ## @endcode -## +## ## Subfolders are also can be created by specifying another folder as a parent: -## +## ## @code ## subfolder = geompy.NewFolder("3D", folder) ## # "3D" folder was created under "Primitives" folder ## @endcode -## +## ## @note ## - Folder container is just a representation layer object that -## deals with already published objects only. So, any geometry object -## should be published in the study (for example, with +## deals with already published objects only. So, any geometry object +## should be published in the study (for example, with ## \ref geomBuilder.geomBuilder.PutToFolder() "addToStudy()" function) ## BEFORE moving it into any existing folder. ## - \ref geomBuilder.geomBuilder.PutToFolder() "PutToFolder()" function ## does not change physical position of geometry object in the study tree, ## it only affects on the representation of the data tree. ## - It is impossible to publish geometry object using any folder as father. -## +## ## \defgroup l1_publish_data ## \defgroup l1_geomBuilder_auxiliary ## \defgroup l1_geomBuilder_purpose @@ -254,6 +254,7 @@ from salome_notebook import * import GEOM import math import os +import functools from salome.geom.gsketcher import Sketcher3D, Sketcher2D @@ -269,15 +270,33 @@ def _toListOfNames(_names, _size=-1): for i in range(len(l), _size): l.append("%s_%d"%(l[0],i)) return l +# Decorator function to manage transactions for all geometric operations. +def ManageTransactions(theOpeName): + def MTDecorator(theFunction): + # To keep the original function name an documentation. + @functools.wraps(theFunction) + def OpenCallClose(self, *args, **kwargs): + # Open transaction + anOperation = getattr(self, theOpeName) + anOperation.StartOperation() + try: + # Call the function + res = theFunction(self, *args, **kwargs) + # Commit transaction + anOperation.FinishOperation() + return res + except: + # Abort transaction + anOperation.AbortOperation() + raise + return OpenCallClose + return MTDecorator + ## Raise an Error, containing the Method_name, if Operation is Failed ## @ingroup l1_geomBuilder_auxiliary def RaiseIfFailed (Method_name, Operation): if Operation.IsDone() == 0 and Operation.GetErrorCode() != "NOT_FOUND_ANY": - Operation.AbortOperation() raise RuntimeError, Method_name + " : " + Operation.GetErrorCode() - else: - Operation.FinishOperation() - pass ## Return list of variables value from salome notebook ## @ingroup l1_geomBuilder_auxiliary @@ -385,7 +404,7 @@ def PackData(data): Returns: data packed to the byte stream - + Example of usage: val = PackData("10001110") # val = 0xAE val = PackData("1") # val = 0x80 @@ -436,13 +455,13 @@ def ReadTexture(fname): texture bitmap itself. This function can be used to read the texture to the byte stream in order to pass it to the AddTexture() function of geomBuilder class. - + Parameters: fname texture file name Returns: sequence of tree values: texture's width, height in pixels and its byte stream - + Example of usage: from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) @@ -515,6 +534,7 @@ class PluginOperation: self.function = function pass + @ManageTransactions("operation") def __call__(self, *args): res = self.function(self.operation, *args) RaiseIfFailed(self.function.__name__, self.operation) @@ -783,7 +803,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return op ## Enable / disable results auto-publishing - # + # # The automatic publishing is managed in the following way: # - if @a maxNbSubShapes = 0, automatic publishing is disabled. # - if @a maxNbSubShapes = -1 (default), automatic publishing is enabled and @@ -829,6 +849,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Get name for sub-shape aSubObj of shape aMainObj # # @ref swig_SubShapeName "Example" + @ManageTransactions("ShapesOp") def SubShapeName(self,aSubObj, aMainObj): """ Get name for sub-shape aSubObj of shape aMainObj @@ -1038,7 +1059,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theAddPrefix add prefix "from_" to names of restored sub-shapes, and prefix "from_subshapes_of_" to names of partially restored sub-shapes. - Returns: + Returns: list of published sub-shapes """ # Example: see GEOM_TestAll.py @@ -1062,6 +1083,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertex(self, theX, theY, theZ, theName=None): """ Create point by three coordinates. @@ -1073,8 +1095,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - - Returns: + + Returns: New GEOM.GEOM_Object, containing the created point. """ # Example: see GEOM_TestAll.py @@ -1098,6 +1120,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexWithRef(self, theReference, theX, theY, theZ, theName=None): """ Create a point, distant from the referenced point @@ -1133,6 +1156,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexOnCurve(self, theRefCurve, theParameter, theName=None): """ Create a point, corresponding to the given parameter on the given curve. @@ -1170,10 +1194,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexOnCurveByCoord(self, theRefCurve, theX, theY, theZ, theName=None): """ Create a point by projection give coordinates on the given curve - + Parameters: theRefCurve The referenced curve. theX X-coordinate in 3D space @@ -1209,6 +1234,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexOnCurveByLength(self, theRefCurve, theLength, theStartPoint = None, theName=None): """ Create a point, corresponding to the given length on the given curve. @@ -1245,6 +1271,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexOnSurface "Example" + @ManageTransactions("BasicOp") def MakeVertexOnSurface(self, theRefSurf, theUParameter, theVParameter, theName=None): """ Create a point, corresponding to the given parameters on the @@ -1284,6 +1311,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexOnSurfaceByCoord "Example" + @ManageTransactions("BasicOp") def MakeVertexOnSurfaceByCoord(self, theRefSurf, theX, theY, theZ, theName=None): """ Create a point by projection give coordinates on the given surface @@ -1324,6 +1352,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexInsideFace "Example" + @ManageTransactions("BasicOp") def MakeVertexInsideFace (self, theFace, theName=None): """ Create a point, which lays on the given face. @@ -1359,6 +1388,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexOnLinesIntersection "Example" + @ManageTransactions("BasicOp") def MakeVertexOnLinesIntersection(self, theRefLine1, theRefLine2, theName=None): """ Create a point on intersection of two lines. @@ -1388,6 +1418,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created tangent. # # @ref swig_MakeTangentOnCurve "Example" + @ManageTransactions("BasicOp") def MakeTangentOnCurve(self, theRefCurve, theParameter, theName=None): """ Create a tangent, corresponding to the given parameter on the given curve. @@ -1422,6 +1453,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created tangent. # # @ref swig_MakeTangentPlaneOnFace "Example" + @ManageTransactions("BasicOp") def MakeTangentPlaneOnFace(self, theFace, theParameterU, theParameterV, theTrimSize, theName=None): """ Create a tangent plane, corresponding to the given parameter on the given face. @@ -1435,7 +1467,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created tangent. Example of usage: @@ -1457,6 +1489,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vector. # # @ref tui_creation_vector "Example" + @ManageTransactions("BasicOp") def MakeVectorDXDYDZ(self, theDX, theDY, theDZ, theName=None): """ Create a vector with the given components. @@ -1469,7 +1502,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vector. """ # Example: see GEOM_TestAll.py @@ -1490,6 +1523,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vector. # # @ref tui_creation_vector "Example" + @ManageTransactions("BasicOp") def MakeVector(self, thePnt1, thePnt2, theName=None): """ Create a vector between two points. @@ -1501,7 +1535,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vector. """ # Example: see GEOM_TestAll.py @@ -1521,6 +1555,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created line. # # @ref tui_creation_line "Example" + @ManageTransactions("BasicOp") def MakeLine(self, thePnt, theDir, theName=None): """ Create a line, passing through the given point @@ -1552,6 +1587,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created line. # # @ref tui_creation_line "Example" + @ManageTransactions("BasicOp") def MakeLineTwoPnt(self, thePnt1, thePnt2, theName=None): """ Create a line, passing through the given points @@ -1582,6 +1618,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created line. # # @ref swig_MakeLineTwoFaces "Example" + @ManageTransactions("BasicOp") def MakeLineTwoFaces(self, theFace1, theFace2, theName=None): """ Create a line on two faces intersection. @@ -1614,6 +1651,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlane(self, thePnt, theVec, theTrimSize, theName=None): """ Create a plane, passing through the given point @@ -1627,7 +1665,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created plane. """ # Example: see GEOM_TestAll.py @@ -1650,6 +1688,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlaneThreePnt(self, thePnt1, thePnt2, thePnt3, theTrimSize, theName=None): """ Create a plane, passing through the three given points @@ -1684,6 +1723,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlaneFace(self, theFace, theTrimSize, theName=None): """ Create a plane, similar to the existing one, but with another size of representing face. @@ -1718,6 +1758,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlane2Vec(self, theVec1, theVec2, theTrimSize, theName=None): """ Create a plane, passing through the 2 vectors @@ -1731,7 +1772,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created plane. """ # Example: see GEOM_TestAll.py @@ -1753,11 +1794,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlaneLCS(self, theLCS, theTrimSize, theOrientation, theName=None): """ Create a plane, based on a Local coordinate system. - Parameters: + Parameters: theLCS coordinate system, defining plane. theTrimSize Half size of a side of quadrangle face, representing the plane. theOrientation OXY, OYZ or OZX orientation - (1, 2 or 3) @@ -1765,7 +1807,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created plane. """ # Example: see GEOM_TestAll.py @@ -1787,11 +1829,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created coordinate system. # # @ref swig_MakeMarker "Example" + @ManageTransactions("BasicOp") def MakeMarker(self, OX,OY,OZ, XDX,XDY,XDZ, YDX,YDY,YDZ, theName=None): """ Create a local coordinate system. - Parameters: + Parameters: OX,OY,OZ Three coordinates of coordinate system origin. XDX,XDY,XDZ Three components of OX direction YDX,YDY,YDZ Three components of OY direction @@ -1799,7 +1842,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created coordinate system. """ # Example: see GEOM_TestAll.py @@ -1819,6 +1862,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created coordinate system. # # @ref tui_creation_lcs "Example" + @ManageTransactions("BasicOp") def MakeMarkerFromShape(self, theShape, theName=None): """ Create a local coordinate system from shape. @@ -1828,8 +1872,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - - Returns: + + Returns: New GEOM.GEOM_Object, containing the created coordinate system. """ anObj = self.BasicOp.MakeMarkerFromShape(theShape) @@ -1848,6 +1892,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created coordinate system. # # @ref tui_creation_lcs "Example" + @ManageTransactions("BasicOp") def MakeMarkerPntTwoVec(self, theOrigin, theXVec, theYVec, theName=None): """ Create a local coordinate system from point and two vectors. @@ -1860,7 +1905,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created coordinate system. """ @@ -1886,6 +1931,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created arc. # # @ref swig_MakeArc "Example" + @ManageTransactions("CurvesOp") def MakeArc(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create an arc of circle, passing through three given points. @@ -1898,7 +1944,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created arc. """ # Example: see GEOM_TestAll.py @@ -1919,6 +1965,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created arc. # # @ref swig_MakeArc "Example" + @ManageTransactions("CurvesOp") def MakeArcCenter(self, thePnt1, thePnt2, thePnt3, theSense=False, theName=None): """ Create an arc of circle from a center and 2 points. @@ -1952,6 +1999,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created arc. # # @ref swig_MakeArc "Example" + @ManageTransactions("CurvesOp") def MakeArcOfEllipse(self, theCenter, thePnt1, thePnt2, theName=None): """ Create an arc of ellipse, of center and two points. @@ -1984,6 +2032,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created circle. # # @ref tui_creation_circle "Example" + @ManageTransactions("CurvesOp") def MakeCircle(self, thePnt, theVec, theR, theName=None): """ Create a circle with given center, normal vector and radius. @@ -2016,6 +2065,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing the created circle. + @ManageTransactions("CurvesOp") def MakeCircleR(self, theR, theName=None): """ Create a circle with given radius. @@ -2045,6 +2095,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created circle. # # @ref tui_creation_circle "Example" + @ManageTransactions("CurvesOp") def MakeCircleThreePnt(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create a circle, passing through three given points @@ -2075,6 +2126,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created circle. # # @ref swig_MakeCircle "Example" + @ManageTransactions("CurvesOp") def MakeCircleCenter2Pnt(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create a circle, with given point1 as center, @@ -2109,6 +2161,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created ellipse. # # @ref tui_creation_ellipse "Example" + @ManageTransactions("CurvesOp") def MakeEllipse(self, thePnt, theVec, theRMajor, theRMinor, theVecMaj=None, theName=None): """ Create an ellipse with given center, normal vector and radiuses. @@ -2123,7 +2176,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created ellipse. """ # Example: see GEOM_TestAll.py @@ -2148,6 +2201,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing the created ellipse. + @ManageTransactions("CurvesOp") def MakeEllipseRR(self, theRMajor, theRMinor, theName=None): """ Create an ellipse with given radiuses. @@ -2179,6 +2233,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created polyline. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakePolyline(self, thePoints, theIsClosed=False, theName=None): """ Create a polyline on the set of points. @@ -2209,6 +2264,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created bezier curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeBezier(self, thePoints, theIsClosed=False, theName=None): """ Create bezier curve on the set of points. @@ -2241,6 +2297,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created B-Spline curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeInterpol(self, thePoints, theIsClosed=False, theDoReordering=False, theName=None): """ Create B-Spline curve on the set of points. @@ -2254,7 +2311,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created B-Spline curve. """ # Example: see GEOM_TestAll.py @@ -2274,6 +2331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created B-Spline curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeInterpolWithTangents(self, thePoints, theFirstVec, theLastVec, theName=None): """ Create B-Spline curve on the set of points. @@ -2286,7 +2344,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created B-Spline curve. """ # Example: see GEOM_TestAll.py @@ -2312,6 +2370,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeCurveParametric(self, thexExpr, theyExpr, thezExpr, theParamMin, theParamMax, theParamStep, theCurveType, theNewMethod=False, theName=None ): """ @@ -2339,7 +2398,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): if theNewMethod: anObj = self.CurvesOp.MakeCurveParametricNew(thexExpr,theyExpr,thezExpr,theParamMin,theParamMax,theParamStep,theCurveType) else: - anObj = self.CurvesOp.MakeCurveParametric(thexExpr,theyExpr,thezExpr,theParamMin,theParamMax,theParamStep,theCurveType) + anObj = self.CurvesOp.MakeCurveParametric(thexExpr,theyExpr,thezExpr,theParamMin,theParamMax,theParamStep,theCurveType) RaiseIfFailed("MakeSplineInterpolation", self.CurvesOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "curve") @@ -2359,6 +2418,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # a compound of edges. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeIsoline(self, theFace, IsUIsoline, theParameter, theName=None): """ Create an isoline curve on a face. @@ -2447,6 +2507,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_sketcher_page "Example" + @ManageTransactions("CurvesOp") def MakeSketcher(self, theCommand, theWorkingPlane = [0,0,0, 0,0,1, 1,0,0], theName=None): """ Create a sketcher (wire or face), following the textual description, passed @@ -2459,7 +2520,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): - CMD is one of - "R angle" : Set the direction by angle - "D dx dy" : Set the direction by DX & DY - + - "TT x y" : Create segment by point at X & Y - "T dx dy" : Create segment by point with DX & DY - "L length" : Create segment by direction & Length @@ -2476,11 +2537,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): - "WW" : Close Wire (to finish) - "WF" : Close Wire and build face (to finish) - + - Flag1 (= reverse) is 0 or 2 ... - if 0 the drawn arc is the one of lower angle (< Pi) - if 2 the drawn arc ius the one of greater angle (> Pi) - + - Flag2 (= control tolerance) is 0 or 1 ... - if 0 the specified end point can be at a distance of the arc greater than the tolerance (10^-7) - if 1 the wire is built only if the end point is on the arc @@ -2519,6 +2580,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_sketcher_page "Example" + @ManageTransactions("CurvesOp") def MakeSketcherOnPlane(self, theCommand, theWorkingPlane, theName=None): """ Create a sketcher (wire or face), following the textual description, @@ -2544,7 +2606,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## Obtain a 2D sketcher interface - # @return An instance of @ref gsketcher.Sketcher2D "Sketcher2D" interface + # @return An instance of @ref gsketcher.Sketcher2D "Sketcher2D" interface def Sketcher2D (self): """ Obtain a 2D sketcher interface. @@ -2562,7 +2624,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ sk = Sketcher2D (self) return sk - + ## Create a sketcher wire, following the numerical description, # passed through theCoordinates argument. \n # @param theCoordinates double values, defining points to create a wire, @@ -2574,6 +2636,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_3dsketcher_page "Example" + @ManageTransactions("CurvesOp") def Make3DSketcher(self, theCoordinates, theName=None): """ Create a sketcher wire, following the numerical description, @@ -2636,14 +2699,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def MakeBox(self, x1, y1, z1, x2, y2, z2, theName=None): """ Create a box by coordinates of two opposite vertices. - + Parameters: x1,y1,z1 double values, defining first point. x2,y2,z2 double values, defining second point. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: New GEOM.GEOM_Object, containing the created box. """ @@ -2666,6 +2729,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created box. # # @ref tui_creation_box "Example" + @ManageTransactions("PrimOp") def MakeBoxDXDYDZ(self, theDX, theDY, theDZ, theName=None): """ Create a box with specified dimensions along the coordinate axes @@ -2680,7 +2744,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created box. """ # Example: see GEOM_TestAll.py @@ -2702,6 +2766,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created box. # # @ref tui_creation_box "Example" + @ManageTransactions("PrimOp") def MakeBoxTwoPnt(self, thePnt1, thePnt2, theName=None): """ Create a box with two specified opposite vertices, @@ -2734,6 +2799,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("PrimOp") def MakeFaceHW(self, theH, theW, theOrientation, theName=None): """ Create a face with specified dimensions with edges parallel to coordinate axes. @@ -2770,6 +2836,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("PrimOp") def MakeFaceObjHW(self, theObj, theH, theW, theName=None): """ Create a face from another plane and two sizes, @@ -2806,6 +2873,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created disk. # # @ref tui_creation_disk "Example" + @ManageTransactions("PrimOp") def MakeDiskPntVecR(self, thePnt, theVec, theR, theName=None): """ Create a disk with given center, normal vector and radius. @@ -2818,7 +2886,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created disk. """ # Example: see GEOM_TestAll.py @@ -2838,6 +2906,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created disk. # # @ref tui_creation_disk "Example" + @ManageTransactions("PrimOp") def MakeDiskThreePnt(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create a disk, passing through three given points @@ -2848,7 +2917,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created disk. """ # Example: see GEOM_TestAll.py @@ -2867,6 +2936,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created disk. # # @ref tui_creation_face "Example" + @ManageTransactions("PrimOp") def MakeDiskR(self, theR, theOrientation, theName=None): """ Create a disk with specified dimensions along OX-OY coordinate axes. @@ -2878,7 +2948,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created disk. Example of usage: @@ -2904,6 +2974,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cylinder. # # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") def MakeCylinder(self, thePnt, theAxis, theR, theH, theName=None): """ Create a cylinder with given base point, axis, radius and height. @@ -2917,7 +2988,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py @@ -2940,6 +3011,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cylinder. # # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") def MakeCylinderRH(self, theR, theH, theName=None): """ Create a cylinder with given radius and height at @@ -2953,7 +3025,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py @@ -2974,6 +3046,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created sphere. # # @ref tui_creation_sphere "Example" + @ManageTransactions("PrimOp") def MakeSpherePntR(self, thePnt, theR, theName=None): """ Create a sphere with given center and radius. @@ -2985,8 +3058,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: - New GEOM.GEOM_Object, containing the created sphere. + Returns: + New GEOM.GEOM_Object, containing the created sphere. """ # Example: see GEOM_TestAll.py theR,Parameters = ParseParameters(theR) @@ -3010,7 +3083,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Create a sphere with given center and radius. - Parameters: + Parameters: x,y,z Coordinates of sphere center. theR Sphere radius. theName Object name; when specified, this parameter is used @@ -3035,18 +3108,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created sphere. # # @ref tui_creation_sphere "Example" + @ManageTransactions("PrimOp") def MakeSphereR(self, theR, theName=None): """ Create a sphere with given radius at the origin of coordinate system. - Parameters: + Parameters: theR Sphere radius. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created sphere. + New GEOM.GEOM_Object, containing the created sphere. """ # Example: see GEOM_TestAll.py theR,Parameters = ParseParameters(theR) @@ -3071,11 +3145,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cone. # # @ref tui_creation_cone "Example" + @ManageTransactions("PrimOp") def MakeCone(self, thePnt, theAxis, theR1, theR2, theH, theName=None): """ Create a cone with given base point, axis, height and radiuses. - Parameters: + Parameters: thePnt Central point of the first cone base. theAxis Cone axis. theR1 Radius of the first cone base. @@ -3115,13 +3190,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cone. # # @ref tui_creation_cone "Example" + @ManageTransactions("PrimOp") def MakeConeR1R2H(self, theR1, theR2, theH, theName=None): """ Create a cone with given height and radiuses at the origin of coordinate system. Axis of the cone will be collinear to the OZ axis of the coordinate system. - Parameters: + Parameters: theR1 Radius of the first cone base. theR2 Radius of the second cone base. theH Cone height. @@ -3156,11 +3232,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created torus. # # @ref tui_creation_torus "Example" + @ManageTransactions("PrimOp") def MakeTorus(self, thePnt, theVec, theRMajor, theRMinor, theName=None): """ Create a torus with given center, normal vector and radiuses. - Parameters: + Parameters: thePnt Torus central point. theVec Torus axis of symmetry. theRMajor Torus major radius. @@ -3190,11 +3267,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created torus. # # @ref tui_creation_torus "Example" + @ManageTransactions("PrimOp") def MakeTorusRR(self, theRMajor, theRMinor, theName=None): """ Create a torus with given radiuses at the origin of coordinate system. - Parameters: + Parameters: theRMajor Torus major radius. theRMinor Torus minor radius. theName Object name; when specified, this parameter is used @@ -3202,7 +3280,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created torus. + New GEOM.GEOM_Object, containing the created torus. """ # Example: see GEOM_TestAll.py theRMajor,theRMinor,Parameters = ParseParameters(theRMajor,theRMinor) @@ -3231,11 +3309,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrism(self, theBase, thePoint1, thePoint2, theScaleFactor = -1.0, theName=None): """ Create a shape by extrusion of the base shape along a vector, defined by two points. - Parameters: + Parameters: theBase Base shape to be extruded. thePoint1 First end of extrusion vector. thePoint2 Second end of extrusion vector. @@ -3273,12 +3352,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrism2Ways(self, theBase, thePoint1, thePoint2, theName=None): """ Create a shape by extrusion of the base shape along a vector, defined by two points, in 2 Ways (forward/backward). - Parameters: + Parameters: theBase Base shape to be extruded. thePoint1 First end of extrusion vector. thePoint2 Second end of extrusion vector. @@ -3310,13 +3390,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismVecH(self, theBase, theVec, theH, theScaleFactor = -1.0, theName=None): """ Create a shape by extrusion of the base shape along the vector, i.e. all the space, transfixed by the base shape during its translation along the vector on the given distance. - Parameters: + Parameters: theBase Base shape to be extruded. theVec Direction of extrusion. theH Prism dimension along theVec. @@ -3356,6 +3437,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismVecH2Ways(self, theBase, theVec, theH, theName=None): """ Create a shape by extrusion of the base shape along the vector, @@ -3393,6 +3475,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismDXDYDZ(self, theBase, theDX, theDY, theDZ, theScaleFactor = -1.0, theName=None): """ Create a shape by extrusion of the base shape along the dx, dy, dz direction @@ -3406,7 +3489,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created prism. """ # Example: see GEOM_TestAll.py @@ -3435,6 +3518,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismDXDYDZ2Ways(self, theBase, theDX, theDY, theDZ, theName=None): """ Create a shape by extrusion of the base shape along the dx, dy, dz direction @@ -3472,6 +3556,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created revolution. # # @ref tui_creation_revolution "Example" + @ManageTransactions("PrimOp") def MakeRevolution(self, theBase, theAxis, theAngle, theName=None): """ Create a shape by revolution of the base shape around the axis @@ -3486,7 +3571,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created revolution. """ # Example: see GEOM_TestAll.py @@ -3511,6 +3596,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created revolution. # # @ref tui_creation_revolution "Example" + @ManageTransactions("PrimOp") def MakeRevolution2Ways(self, theBase, theAxis, theAngle, theName=None): """ Create a shape by revolution of the base shape around the axis @@ -3526,7 +3612,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created revolution. """ theAngle,Parameters = ParseParameters(theAngle) @@ -3556,6 +3642,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created filling surface. # # @ref tui_creation_filling "Example" + @ManageTransactions("PrimOp") def MakeFilling(self, theShape, theMinDeg=2, theMaxDeg=5, theTol2D=0.0001, theTol3D=0.0001, theNbIter=0, theMethod=GEOM.FOM_Default, isApprox=0, theName=None): """ @@ -3578,7 +3665,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created filling surface. Example of usage: @@ -3608,6 +3695,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created filling surface. # # @ref tui_creation_filling "Example" + @ManageTransactions("PrimOp") def MakeFillingNew(self, theShape, theMinDeg=2, theMaxDeg=5, theTol3D=0.0001, theName=None): """ Create a filling from the given compound of contours. @@ -3622,7 +3710,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created filling surface. Example of usage: @@ -3649,6 +3737,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created shell or solid. # # @ref swig_todo "Example" + @ManageTransactions("PrimOp") def MakeThruSections(self, theSeqSections, theModeSolid, thePreci, theRuled, theName=None): """ Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices. @@ -3682,6 +3771,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created pipe. # # @ref tui_creation_pipe "Example" + @ManageTransactions("PrimOp") def MakePipe(self, theBase, thePath, theName=None): """ Create a shape by extrusion of the base shape along @@ -3722,6 +3812,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created pipe. # # @ref tui_creation_pipe_with_diff_sec "Example" + @ManageTransactions("PrimOp") def MakePipeWithDifferentSections(self, theSeqBases, theLocations, thePath, theWithContact, theWithCorrection, theName=None): @@ -3782,6 +3873,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created solids. # # @ref tui_creation_pipe_with_shell_sec "Example" + @ManageTransactions("PrimOp") def MakePipeWithShellSections(self, theSeqBases, theSeqSubBases, theLocations, thePath, theWithContact, theWithCorrection, theName=None): @@ -3813,7 +3905,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created solids. """ anObj = self.PrimOp.MakePipeWithShellSections(theSeqBases, theSeqSubBases, @@ -3828,6 +3920,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # functionality - it is a version of function MakePipeWithShellSections() # which give a possibility to recieve information about # creating pipe between each pair of sections step by step. + @ManageTransactions("PrimOp") def MakePipeWithShellSectionsBySteps(self, theSeqBases, theSeqSubBases, theLocations, thePath, theWithContact, theWithCorrection, theName=None): @@ -3878,6 +3971,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created solids. # # @ref tui_creation_pipe_without_path "Example" + @ManageTransactions("PrimOp") def MakePipeShellsWithoutPath(self, theSeqBases, theLocations, theName=None): """ Create solids between given sections @@ -3912,6 +4006,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created pipe. # # @ref tui_creation_pipe "Example" + @ManageTransactions("PrimOp") def MakePipeBiNormalAlongVector(self, theBase, thePath, theVec, theName=None): """ Create a shape by extrusion of the base shape along @@ -3928,7 +4023,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created pipe. """ # Example: see GEOM_TestAll.py @@ -3936,7 +4031,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakePipeBiNormalAlongVector", self.PrimOp) self._autoPublish(anObj, theName, "pipe") return anObj - + ## Makes a thick solid from a face or a shell # @param theShape Face or Shell to be thicken # @param theThickness Thickness of the resulting solid @@ -3946,6 +4041,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @return New GEOM.GEOM_Object, containing the created solid # + @ManageTransactions("PrimOp") def MakeThickSolid(self, theShape, theThickness, theName=None): """ Make a thick solid from a face or a shell @@ -3956,7 +4052,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: New GEOM.GEOM_Object, containing the created solid """ @@ -3965,7 +4061,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakeThickening", self.PrimOp) self._autoPublish(anObj, theName, "pipe") return anObj - + ## Modifies a face or a shell to make it a thick solid # @param theShape Face or Shell to be thicken @@ -3973,6 +4069,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @return The modified shape # + @ManageTransactions("PrimOp") def Thicken(self, theShape, theThickness): """ Modifies a face or a shell to make it a thick solid @@ -4013,6 +4110,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # source pipe's "path". # # @ref tui_creation_pipe_path "Example" + @ManageTransactions("PrimOp") def RestorePath (self, theShape, theBase1, theBase2, theName=None): """ Build a middle path of a pipe-like shape. @@ -4057,6 +4155,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # source pipe's "path". # # @ref tui_creation_pipe_path "Example" + @ManageTransactions("PrimOp") def RestorePathEdges (self, theShape, listEdges1, listEdges2, theName=None): """ Build a middle path of a pipe-like shape. @@ -4096,6 +4195,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created edge. # # @ref tui_creation_edge "Example" + @ManageTransactions("ShapesOp") def MakeEdge(self, thePnt1, thePnt2, theName=None): """ Create a linear edge with specified ends. @@ -4107,7 +4207,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created edge. """ # Example: see GEOM_TestAll.py @@ -4129,6 +4229,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created edge. # # @ref tui_creation_edge "Example" + @ManageTransactions("ShapesOp") def MakeEdgeOnCurveByLength(self, theRefCurve, theLength, theStartPoint = None, theName=None): """ Create a new edge, corresponding to the given length on the given curve. @@ -4143,7 +4244,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created edge. """ # Example: see GEOM_TestAll.py @@ -4165,6 +4266,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created edge. # # @ref tui_creation_edge "Example" + @ManageTransactions("ShapesOp") def MakeEdgeWire(self, theWire, theLinearTolerance = 1e-07, theAngularTolerance = 1e-12, theName=None): """ Create an edge from specified wire. @@ -4197,6 +4299,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_creation_wire "Example" + @ManageTransactions("ShapesOp") def MakeWire(self, theEdgesAndWires, theTolerance = 1e-07, theName=None): """ Create a wire from the set of edges and wires. @@ -4209,7 +4312,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created wire. """ # Example: see GEOM_TestAll.py @@ -4232,6 +4335,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("ShapesOp") def MakeFace(self, theWire, isPlanarWanted, theName=None): """ Create a face on the given wire. @@ -4273,6 +4377,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("ShapesOp") def MakeFaceWires(self, theWires, isPlanarWanted, theName=None): """ Create a face on the given wires set. @@ -4288,7 +4393,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. """ # Example: see GEOM_TestAll.py @@ -4322,6 +4427,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created shell. # # @ref tui_creation_shell "Example" + @ManageTransactions("ShapesOp") def MakeShell(self, theFacesAndShells, theName=None): """ Create a shell from the set of faces and shells. @@ -4350,6 +4456,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created solid. # # @ref tui_creation_solid "Example" + @ManageTransactions("ShapesOp") def MakeSolid(self, theShells, theName=None): """ Create a solid, bounded by the given shells. @@ -4365,7 +4472,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ # Example: see GEOM_TestAll.py if len(theShells) == 1: - descr = self.MeasuOp.IsGoodForSolid(theShells[0]) + descr = self._IsGoodForSolid(theShells[0]) #if len(descr) > 0: # raise RuntimeError, "MakeSolidShells : " + descr if descr == "WRN_SHAPE_UNCLOSED": @@ -4384,6 +4491,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created compound. # # @ref tui_creation_compound "Example" + @ManageTransactions("ShapesOp") def MakeCompound(self, theShapes, theName=None): """ Create a compound of the given shapes. @@ -4398,7 +4506,6 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created compound. """ # Example: see GEOM_TestAll.py - self.ShapesOp.StartOperation() anObj = self.ShapesOp.MakeCompound(theShapes) RaiseIfFailed("MakeCompound", self.ShapesOp) self._autoPublish(anObj, theName, "compound") @@ -4415,6 +4522,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of faces. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfFaces(self, theShape): """ Gives quantity of faces in the given shape. @@ -4422,7 +4530,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theShape Shape to count faces of. - Returns: + Returns: Quantity of faces. """ # Example: see GEOM_TestOthers.py @@ -4435,6 +4543,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of edges. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfEdges(self, theShape): """ Gives quantity of edges in the given shape. @@ -4442,7 +4551,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theShape Shape to count edges of. - Returns: + Returns: Quantity of edges. """ # Example: see GEOM_TestOthers.py @@ -4456,6 +4565,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of sub-shapes of given type. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfSubShapes(self, theShape, theShapeType): """ Gives quantity of sub-shapes of type theShapeType in the given shape. @@ -4477,6 +4587,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of solids. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfSolids(self, theShape): """ Gives quantity of solids in the given shape. @@ -4507,6 +4618,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return The reversed copy of theShape. # # @ref swig_ChangeOrientation "Example" + @ManageTransactions("ShapesOp") def ChangeOrientation(self, theShape, theName=None): """ Reverses an orientation the given shape. @@ -4517,7 +4629,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: The reversed copy of theShape. """ # Example: see GEOM_TestAll.py @@ -4550,6 +4662,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of IDs of all free faces, contained in theShape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("ShapesOp") def GetFreeFacesIDs(self,theShape): """ Retrieve all free faces from the given shape. @@ -4577,6 +4690,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of theShape1, shared with theShape2. # # @ref swig_GetSharedShapes "Example" + @ManageTransactions("ShapesOp") def GetSharedShapes(self, theShape1, theShape2, theShapeType, theName=None): """ Get all sub-shapes of theShape1 of the given type, shared with theShape2. @@ -4608,6 +4722,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of objects, that are sub-shapes of all given shapes. # # @ref swig_GetSharedShapes "Example" + @ManageTransactions("ShapesOp") def GetSharedShapesMulti(self, theShapes, theShapeType, theName=None): """ Get all sub-shapes, shared by all shapes in the list theShapes. @@ -4619,7 +4734,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of GEOM.GEOM_Object, that are sub-shapes of all given shapes. """ # Example: see GEOM_TestOthers.py @@ -4643,6 +4758,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnPlane "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlane(self, theShape, theShapeType, theAx1, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -4680,6 +4796,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnPlaneIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlaneIDs(self, theShape, theShapeType, theAx1, theState): """ Find in theShape all sub-shapes of type theShapeType, @@ -4717,6 +4834,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnPlaneWithLocation "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlaneWithLocation(self, theShape, theShapeType, theAx1, thePnt, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -4757,6 +4875,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnPlaneWithLocationIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlaneWithLocationIDs(self, theShape, theShapeType, theAx1, thePnt, theState): """ Find in theShape all sub-shapes of type theShapeType, @@ -4795,6 +4914,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnCylinder "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinder(self, theShape, theShapeType, theAxis, theRadius, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4832,6 +4952,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnCylinderIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinderIDs(self, theShape, theShapeType, theAxis, theRadius, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4869,6 +4990,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnCylinderWithLocation "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinderWithLocation(self, theShape, theShapeType, theAxis, thePnt, theRadius, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4907,6 +5029,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices # # @ref swig_GetShapesOnCylinderWithLocationIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinderWithLocationIDs(self, theShape, theShapeType, theAxis, thePnt, theRadius, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4921,7 +5044,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theState The state of the sub-shapes to find (see GEOM::shape_state) Returns: - List of all found sub-shapes indices. + List of all found sub-shapes indices. """ # Example: see GEOM_TestOthers.py aList = self.ShapesOp.GetShapesOnCylinderWithLocationIDs(theShape, theShapeType, theAxis, thePnt, theRadius, theState) @@ -4942,6 +5065,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnSphere "Example" + @ManageTransactions("ShapesOp") def GetShapesOnSphere(self, theShape, theShapeType, theCenter, theRadius, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4977,6 +5101,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnSphereIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnSphereIDs(self, theShape, theShapeType, theCenter, theRadius, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -5013,6 +5138,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnQuadrangle "Example" + @ManageTransactions("ShapesOp") def GetShapesOnQuadrangle(self, theShape, theShapeType, theTopLeftPoint, theTopRigthPoint, theBottomLeftPoint, theBottomRigthPoint, theState, theName=None): @@ -5056,6 +5182,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnQuadrangleIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnQuadrangleIDs(self, theShape, theShapeType, theTopLeftPoint, theTopRigthPoint, theBottomLeftPoint, theBottomRigthPoint, theState): @@ -5096,6 +5223,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnBox "Example" + @ManageTransactions("ShapesOp") def GetShapesOnBox(self, theBox, theShape, theShapeType, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -5129,6 +5257,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnBoxIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnBoxIDs(self, theBox, theShape, theShapeType, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -5153,7 +5282,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # certain way, defined through \a theState parameter. # @param theCheckShape Shape for relative comparing. It must be a solid. # @param theShape Shape to find sub-shapes of. - # @param theShapeType Type of sub-shapes to be retrieved (see ShapeType()) + # @param theShapeType Type of sub-shapes to be retrieved (see ShapeType()) # @param theState The state of the sub-shapes to find (see GEOM::shape_state) # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic @@ -5162,6 +5291,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnShape "Example" + @ManageTransactions("ShapesOp") def GetShapesOnShape(self, theCheckShape, theShape, theShapeType, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -5201,6 +5331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return All found sub-shapes as compound. # # @ref swig_GetShapesOnShapeAsCompound "Example" + @ManageTransactions("ShapesOp") def GetShapesOnShapeAsCompound(self, theCheckShape, theShape, theShapeType, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -5237,6 +5368,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnShapeIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnShapeIDs(self, theCheckShape, theShape, theShapeType, theState): """ Find in theShape all sub-shapes of type theShapeType, @@ -5277,6 +5409,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @image html get_in_place_lost_part.png # # @ref swig_GetInPlace "Example" + @ManageTransactions("ShapesOp") def GetInPlace(self, theShapeWhere, theShapeWhat, isNewImplementation = False, theName=None): """ Get sub-shape(s) of theShapeWhere, which are @@ -5294,7 +5427,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Returns: Group of all found sub-shapes or a single found sub-shape. - + Note: This function has a restriction on argument shapes. If theShapeWhere has curved parts with significantly @@ -5331,6 +5464,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Group of all found sub-shapes or a single found sub-shape. # # @ref swig_GetInPlace "Example" + @ManageTransactions("ShapesOp") def GetInPlaceByHistory(self, theShapeWhere, theShapeWhat, theName=None): """ Implementation of this method is based on a saved history of an operation, @@ -5367,6 +5501,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object for found sub-shape. # # @ref swig_GetSame "Example" + @ManageTransactions("ShapesOp") def GetSame(self, theShapeWhere, theShapeWhat, theName=None): """ Get sub-shape of theShapeWhere, which is @@ -5392,9 +5527,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # equal to \a theShapeWhat. # @param theShapeWhere Shape to find sub-shape of. # @param theShapeWhat Shape, specifying what to find. - # @return List of all found sub-shapes indices. + # @return List of all found sub-shapes indices. # # @ref swig_GetSame "Example" + @ManageTransactions("ShapesOp") def GetSameIDs(self, theShapeWhere, theShapeWhat): """ Get sub-shape indices of theShapeWhere, which is @@ -5456,6 +5592,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return ID of found sub-shape. # # @ref swig_all_decompose "Example" + @ManageTransactions("LocalOp") def GetSubShapeID(self, aShape, aSubShape): """ Obtain unique ID of sub-shape aSubShape inside aShape @@ -5472,7 +5609,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): anID = self.LocalOp.GetSubShapeIndex(aShape, aSubShape) RaiseIfFailed("GetSubShapeIndex", self.LocalOp) return anID - + ## Obtain unique IDs of sub-shapes aSubShapes inside aShape # This function is provided for performance purpose. The complexity is O(n) with n # the number of subobjects of aShape @@ -5481,6 +5618,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return list of IDs of found sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def GetSubShapesIDs(self, aShape, aSubShapes): """ Obtain a list of IDs of sub-shapes aSubShapes inside aShape @@ -5513,6 +5651,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of existing sub-objects of \a theShape. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def GetExistingSubObjects(self, theShape, theGroupsOnly = False): """ Get all sub-shapes and groups of theShape, @@ -5537,6 +5676,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of existing groups of \a theShape. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def GetGroups(self, theShape): """ Get all groups of theShape, @@ -5556,7 +5696,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Explode a shape on sub-shapes of a given type. # If the shape itself matches the type, it is also returned. # @param aShape Shape to be exploded. - # @param aType Type of sub-shapes to be retrieved (see ShapeType()) + # @param aType Type of sub-shapes to be retrieved (see ShapeType()) # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -5564,6 +5704,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of type theShapeType, contained in theShape. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapeAll(self, aShape, aType, theName=None): """ Explode a shape on sub-shapes of a given type. @@ -5571,7 +5712,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: aShape Shape to be exploded. - aType Type of sub-shapes to be retrieved (see geompy.ShapeType) + aType Type of sub-shapes to be retrieved (see geompy.ShapeType) theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -5591,6 +5732,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of IDs of sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapeAllIDs(self, aShape, aType): """ Explode a shape on sub-shapes of a given type. @@ -5624,7 +5766,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Obtain a compound of sub-shapes of aShape, selected by their indices in list of all sub-shapes of type aType. Each index is in range [1, Nb_Sub-Shapes_Of_Given_Type] - + Parameters: aShape Shape to get sub-shape of. ListOfID List of sub-shapes indices. @@ -5657,20 +5799,21 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of type theShapeType, contained in theShape. # # @ref swig_SubShapeAllSorted "Example" + @ManageTransactions("ShapesOp") def SubShapeAllSortedCentres(self, aShape, aType, theName=None): """ Explode a shape on sub-shapes of a given type. Sub-shapes will be sorted by coordinates of their gravity centers. If the shape itself matches the type, it is also returned. - Parameters: + Parameters: aShape Shape to be exploded. aType Type of sub-shapes to be retrieved (see geompy.ShapeType) theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of sub-shapes of type theShapeType, contained in theShape. """ # Example: see GEOM_TestAll.py @@ -5686,16 +5829,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of IDs of sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapeAllSortedCentresIDs(self, aShape, aType): """ Explode a shape on sub-shapes of a given type. Sub-shapes will be sorted by coordinates of their gravity centers. - Parameters: + Parameters: aShape Shape to be exploded. aType Type of sub-shapes to be retrieved (see geompy.ShapeType) - Returns: + Returns: List of IDs of sub-shapes. """ ListIDs = self.ShapesOp.GetAllSubShapesIDs(aShape, EnumToLong( aType ), True) @@ -5752,6 +5896,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of type aType, contained in aShape. # # @ref swig_FilletChamfer "Example" + @ManageTransactions("ShapesOp") def ExtractShapes(self, aShape, aType, isSorted = False, theName=None): """ Extract shapes (excluding the main shape) of given type. @@ -5764,7 +5909,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of sub-shapes of type aType, contained in aShape. """ # Example: see GEOM_TestAll.py @@ -5782,6 +5927,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, corresponding to found sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapes(self, aShape, anIDs, theName=None): """ Get a set of sub-shapes defined by their unique IDs inside theMainShape @@ -5793,7 +5939,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of GEOM.GEOM_Object, corresponding to found sub-shapes. """ # Example: see GEOM_TestAll.py @@ -5811,6 +5957,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Deprecated method # It works like SubShapeAllSortedCentres(), but wrongly # defines centres of faces, shells and solids. + @ManageTransactions("ShapesOp") def SubShapeAllSorted(self, aShape, aType, theName=None): """ Deprecated method @@ -5825,6 +5972,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Deprecated method # It works like SubShapeAllSortedCentresIDs(), but wrongly # defines centres of faces, shells and solids. + @ManageTransactions("ShapesOp") def SubShapeAllSortedIDs(self, aShape, aType): """ Deprecated method @@ -5900,7 +6048,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # are coincidental. The curves or surfaces may still meet at an angle, giving rise to a sharp corner or edge).\n # \b C1 (Tangential Continuity): first derivatives are equal (the end vectors of curves or surfaces are parallel, # ruling out sharp edges).\n - # \b C2 (Curvature Continuity): first and second derivatives are equal (the end vectors of curves or surfaces + # \b C2 (Curvature Continuity): first and second derivatives are equal (the end vectors of curves or surfaces # are of the same magnitude).\n # \b CN N-th derivatives are equal (both the direction and the magnitude of the Nth derivatives of curves # or surfaces (d/du C(u)) are the same at junction. \n @@ -5939,6 +6087,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # \n @ref tui_shape_processing "Example" + @ManageTransactions("HealOp") def ProcessShape(self, theShape, theOperators, theParameters, theValues, theName=None): """ Apply a sequence of Shape Healing operators to the given object. @@ -5976,7 +6125,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): * SplitContinuity.SurfaceContinuity - required continuity for surfaces. * SplitContinuity.CurveContinuity - required continuity for curves. This and the previous parameters can take the following values: - + Parametric Continuity: C0 (Positional Continuity): curves are joined (the end positions of curves or surfaces are coincidental. The curves or surfaces may still meet at an angle, @@ -5987,7 +6136,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): or surfaces are of the same magnitude). CN N-th derivatives are equal (both the direction and the magnitude of the Nth derivatives of curves or surfaces (d/du C(u)) are the same at junction. - + Geometric Continuity: G1: first derivatives are proportional at junction. The curve tangents thus have the same direction, but not necessarily the same magnitude. @@ -6047,6 +6196,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_suppress_faces "Example" + @ManageTransactions("HealOp") def SuppressFaces(self, theObject, theFaces, theName=None): """ Remove faces from the given object (shape). @@ -6109,6 +6259,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing processed shape. + @ManageTransactions("HealOp") def Sew(self, theObject, theTolerance, AllowNonManifold=False, theName=None): """ Sewing of the given object. @@ -6148,6 +6299,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_remove_webs "Example" + @ManageTransactions("HealOp") def RemoveInternalFaces (self, theCompound, theName=None): """ Rebuild the topology of theCompound of solids by removing @@ -6179,6 +6331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_suppress_internal_wires "Example" + @ManageTransactions("HealOp") def SuppressInternalWires(self, theObject, theWires, theName=None): """ Remove internal wires and edges from the given object (face). @@ -6191,7 +6344,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py @@ -6211,6 +6364,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_suppress_holes "Example" + @ManageTransactions("HealOp") def SuppressHoles(self, theObject, theWires, theName=None): """ Remove internal closed contours (holes) from the given object. @@ -6223,7 +6377,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py @@ -6245,11 +6399,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_close_contour "Example" + @ManageTransactions("HealOp") def CloseContour(self,theObject, theWires, isCommonVertex, theName=None): """ Close an open wire. - Parameters: + Parameters: theObject Shape to be processed. theWires Indexes of edge(s) and wire(s) to be closed within theObject's shape, if [ ], then theObject itself is a wire. @@ -6259,8 +6414,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: - New GEOM.GEOM_Object, containing processed shape. + Returns: + New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py anObj = self.HealOp.CloseContour(theObject, theWires, isCommonVertex) @@ -6283,11 +6438,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_add_point_on_edge "Example" + @ManageTransactions("HealOp") def DivideEdge(self, theObject, theEdgeIndex, theValue, isByParameter, theName=None): """ Addition of a point to a given edge object. - Parameters: + Parameters: theObject Shape to be processed. theEdgeIndex Index of edge to be divided within theObject's shape, if -1, then theObject itself is the edge. @@ -6299,7 +6455,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py @@ -6321,11 +6477,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object with modified wire. # # @ref tui_fuse_collinear_edges "Example" + @ManageTransactions("HealOp") def FuseCollinearEdgesWithinWire(self, theWire, theVertices = [], theName=None): """ Suppress the vertices in the wire in case if adjacent edges are C1 continuous. - Parameters: + Parameters: theWire Wire to minimize the number of C1 continuous edges in. theVertices A list of vertices to suppress. If the list is empty, all vertices in a wire will be assumed. @@ -6333,7 +6490,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object with modified wire. """ anObj = self.HealOp.FuseCollinearEdgesWithinWire(theWire, theVertices) @@ -6346,14 +6503,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Updated theObject # # @ref swig_todo "Example" + @ManageTransactions("HealOp") def ChangeOrientationShell(self,theObject): """ Change orientation of the given object. Updates given shape. - Parameters: + Parameters: theObject Shape to be processed. - Returns: + Returns: Updated theObject """ theObject = self.HealOp.ChangeOrientation(theObject) @@ -6369,6 +6527,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref swig_todo "Example" + @ManageTransactions("HealOp") def ChangeOrientationShellCopy(self, theObject, theName=None): """ Change orientation of the given object. @@ -6379,7 +6538,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ anObj = self.HealOp.ChangeOrientationCopy(theObject) @@ -6397,6 +6556,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_limit_tolerance "Example" + @ManageTransactions("HealOp") def LimitTolerance(self, theObject, theTolerance = 1e-07, theName=None): """ Try to limit tolerance of the given object by value theTolerance. @@ -6408,7 +6568,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ anObj = self.HealOp.LimitTolerance(theObject, theTolerance) @@ -6429,6 +6589,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \n \a theOpenWires: Open wires on the free boundary of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("HealOp") def GetFreeBoundary(self, theObject, theName=None): """ Get a list of wires (wrapped in GEOM.GEOM_Object-s), @@ -6440,7 +6601,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: [status, theClosedWires, theOpenWires] status: FALSE, if an error(s) occured during the method execution. theClosedWires: Closed wires on the free boundary of the given shape. @@ -6465,6 +6626,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing a copy of theShape without coincident faces. # # @ref tui_glue_faces "Example" + @ManageTransactions("ShapesOp") def MakeGlueFaces(self, theShape, theTolerance, doKeepNonSolids=True, theName=None): """ Replace coincident faces in theShape by one face. @@ -6501,6 +6663,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return GEOM.ListOfGO # # @ref tui_glue_faces "Example" + @ManageTransactions("ShapesOp") def GetGlueFaces(self, theShape, theTolerance, theName=None): """ Find coincident faces in theShape for possible gluing. @@ -6513,7 +6676,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: GEOM.ListOfGO """ anObj = self.ShapesOp.GetGlueFaces(theShape, theTolerance) @@ -6540,6 +6703,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # without some faces. # # @ref tui_glue_faces "Example" + @ManageTransactions("ShapesOp") def MakeGlueFacesByList(self, theShape, theTolerance, theFaces, doKeepNonSolids=True, doGlueAllEdges=True, theName=None): """ @@ -6581,6 +6745,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing a copy of theShape without coincident edges. # # @ref tui_glue_edges "Example" + @ManageTransactions("ShapesOp") def MakeGlueEdges(self, theShape, theTolerance, theName=None): """ Replace coincident edges in theShape by one edge. @@ -6592,7 +6757,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing a copy of theShape without coincident edges. """ theTolerance,Parameters = ParseParameters(theTolerance) @@ -6614,6 +6779,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return GEOM.ListOfGO # # @ref tui_glue_edges "Example" + @ManageTransactions("ShapesOp") def GetGlueEdges(self, theShape, theTolerance, theName=None): """ Find coincident edges in theShape for possible gluing. @@ -6626,7 +6792,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: GEOM.ListOfGO """ anObj = self.ShapesOp.GetGlueEdges(theShape, theTolerance) @@ -6648,6 +6814,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # without some edges. # # @ref tui_glue_edges "Example" + @ManageTransactions("ShapesOp") def MakeGlueEdgesByList(self, theShape, theTolerance, theEdges, theName=None): """ Replace coincident edges in theShape by one edge @@ -6662,7 +6829,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing a copy of theShape without some edges. """ @@ -6704,11 +6871,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fuse "Example" + @ManageTransactions("BoolOp") def MakeBoolean(self, theShape1, theShape2, theOperation, checkSelfInte=False, theName=None): """ Perform one of boolean operations on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. theOperation Indicates the operation to be done: @@ -6729,7 +6897,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestAll.py @@ -6764,7 +6932,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Perform Common boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6783,7 +6951,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestOthers.py @@ -6815,7 +6983,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Perform Cut boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6834,9 +7002,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py # note: auto-publishing is done in self.MakeBoolean() @@ -6865,12 +7033,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_fuse "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeFuse(self, theShape1, theShape2, checkSelfInte=False, rmExtraEdges=False, theName=None): """ Perform Fuse boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6891,9 +7060,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeFuse(theShape1, theShape2, @@ -6927,7 +7096,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Perform Section boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6946,9 +7115,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py # note: auto-publishing is done in self.MakeBoolean() @@ -6976,12 +7145,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_fuse "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeFuseList(self, theShapesList, checkSelfInte=False, rmExtraEdges=False, theName=None): """ Perform Fuse boolean operation on the list of shapes. - Parameters: + Parameters: theShapesList Shapes to be fused. checkSelfInte The flag that tells if the arguments should be checked for self-intersection prior to @@ -7001,9 +7171,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeFuseList(theShapesList, checkSelfInte, @@ -7032,11 +7202,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_common "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeCommonList(self, theShapesList, checkSelfInte=False, theName=None): """ Perform Common boolean operation on the list of shapes. - Parameters: + Parameters: theShapesList Shapes for Common operation. checkSelfInte The flag that tells if the arguments should be checked for self-intersection prior to @@ -7054,9 +7225,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeCommonList(theShapesList, checkSelfInte) @@ -7085,11 +7256,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_cut "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeCutList(self, theMainShape, theShapesList, checkSelfInte=False, theName=None): """ Perform Cut boolean operation on one object and the list of tools. - Parameters: + Parameters: theMainShape The object of the operation. theShapesList The list of tools of the operation. checkSelfInte The flag that tells if the arguments should @@ -7108,9 +7280,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeCutList(theMainShape, theShapesList, checkSelfInte) @@ -7156,13 +7328,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shapes. # # @ref tui_partition "Example" + @ManageTransactions("BoolOp") def MakePartition(self, ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[], Limit=ShapeType["AUTO"], RemoveWebs=0, ListMaterials=[], KeepNonlimitShapes=0, theName=None): """ Perform partition operation. - Parameters: + Parameters: ListShapes Shapes to be intersected. ListTools Shapes to intersect theShapes. Limit Type of resulting shapes (see geompy.ShapeType) @@ -7180,11 +7353,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Each compound from ListShapes and ListTools will be exploded in order to avoid possible intersection between shapes from this compound. - + After implementation new version of PartitionAlgo (October 2006) other parameters are ignored by current functionality. They are kept in this function only for support old versions. - + Ignored parameters: ListKeepInside Shapes, outside which the results will be deleted. Each shape from theKeepInside must belong to theShapes also. @@ -7193,7 +7366,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RemoveWebs If TRUE, perform Glue 3D algorithm. ListMaterials Material indices for each shape. Make sence, only if theRemoveWebs is TRUE. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shapes. """ # Example: see GEOM_TestAll.py @@ -7235,6 +7408,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shapes. # # @ref swig_todo "Example" + @ManageTransactions("BoolOp") def MakePartitionNonSelfIntersectedShape(self, ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[], Limit=ShapeType["AUTO"], RemoveWebs=0, @@ -7246,7 +7420,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): compound contains nonintersected shapes. Performance will be better since intersection between shapes from compound is not performed. - Parameters: + Parameters: Description of all parameters as in method geompy.MakePartition. One additional parameter is provided: checkSelfInte The flag that tells if the arguments should @@ -7261,12 +7435,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): time-consuming operation that gives an impact on performance. To find all self-intersections please use CheckSelfIntersections() method. - + NOTE: Passed compounds (via ListShapes or via ListTools) have to consist of nonintersecting shapes. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shapes. """ if Limit == self.ShapeType["AUTO"]: @@ -7311,18 +7485,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_partition "Example" + @ManageTransactions("BoolOp") def MakeHalfPartition(self, theShape, thePlane, theName=None): """ Perform partition of the Shape with the Plane - Parameters: + Parameters: theShape Shape to be intersected. thePlane Tool shape, to intersect theShape. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestAll.py @@ -7345,17 +7520,18 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to translate object itself or create a copy. # @return Translated @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def TranslateTwoPoints(self, theObject, thePoint1, thePoint2, theCopy=False): """ Translate the given object along the vector, specified by its end points. - Parameters: + Parameters: theObject The object to be translated. thePoint1 Start point of translation vector. thePoint2 End point of translation vector. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7379,12 +7555,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_translation "Example 1" # \n @ref swig_MakeTranslationTwoPoints "Example 2" + @ManageTransactions("TrsfOp") def MakeTranslationTwoPoints(self, theObject, thePoint1, thePoint2, theName=None): """ Translate the given object along the vector, specified by its end points, creating its copy before the translation. - Parameters: + Parameters: theObject The object to be translated. thePoint1 Start point of translation vector. thePoint2 End point of translation vector. @@ -7392,7 +7569,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7409,16 +7586,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def TranslateDXDYDZ(self, theObject, theDX, theDY, theDZ, theCopy=False): """ Translate the given object along the vector, specified by its components. - Parameters: + Parameters: theObject The object to be translated. theDX,theDY,theDZ Components of translation vector. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7443,19 +7621,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the translated object. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def MakeTranslation(self,theObject, theDX, theDY, theDZ, theName=None): """ Translate the given object along the vector, specified by its components, creating its copy before the translation. - Parameters: + Parameters: theObject The object to be translated. theDX,theDY,theDZ Components of translation vector. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7472,16 +7651,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to translate object itself or create a copy. # @return Translated @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def TranslateVector(self, theObject, theVector, theCopy=False): """ Translate the given object along the given vector. - Parameters: + Parameters: theObject The object to be translated. theVector The translation vector. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7503,19 +7683,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the translated object. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def MakeTranslationVector(self, theObject, theVector, theName=None): """ Translate the given object along the given vector, creating its copy before the translation. - Parameters: + Parameters: theObject The object to be translated. theVector The translation vector. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7533,17 +7714,18 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def TranslateVectorDistance(self, theObject, theVector, theDistance, theCopy=False): """ Translate the given object along the given vector on given distance. - Parameters: + Parameters: theObject The object to be translated. theVector The translation vector. theDistance The translation distance. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7566,6 +7748,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the translated object. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def MakeTranslationVectorDistance(self, theObject, theVector, theDistance, theName=None): """ Translate the given object along the given vector on given distance, @@ -7579,7 +7762,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7600,6 +7783,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the rotated object if @a theCopy flag is @c True. # # @ref tui_rotation "Example" + @ManageTransactions("TrsfOp") def Rotate(self, theObject, theAxis, theAngle, theCopy=False): """ Rotate the given object around the given axis on the given angle. @@ -7641,6 +7825,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the rotated object. # # @ref tui_rotation "Example" + @ManageTransactions("TrsfOp") def MakeRotation(self, theObject, theAxis, theAngle, theName=None): """ Rotate the given object around the given axis @@ -7679,6 +7864,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to rotate object itself or create a copy. # @return Rotated @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the rotated object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def RotateThreePoints(self, theObject, theCentPoint, thePoint1, thePoint2, theCopy=False): """ Rotate given object around vector perpendicular to plane @@ -7715,6 +7901,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the rotated object. # # @ref tui_rotation "Example" + @ManageTransactions("TrsfOp") def MakeRotationThreePoints(self, theObject, theCentPoint, thePoint1, thePoint2, theName=None): """ Rotate given object around vector perpendicular to plane @@ -7746,6 +7933,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to scale object itself or create a copy. # @return Scaled @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the scaled object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def Scale(self, theObject, thePoint, theFactor, theCopy=False): """ Scale the given object by the specified factor. @@ -7757,7 +7945,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theFactor Scaling factor value. theCopy Flag used to scale object itself or create a copy. - Returns: + Returns: Scaled theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the scaled object if theCopy flag is True. """ @@ -7783,6 +7971,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the scaled shape. # # @ref tui_scale "Example" + @ManageTransactions("TrsfOp") def MakeScaleTransform(self, theObject, thePoint, theFactor, theName=None): """ Scale the given object by the factor, creating its copy before the scaling. @@ -7796,7 +7985,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the scaled shape. """ # Example: see GEOM_TestAll.py @@ -7815,6 +8004,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to scale object itself or create a copy. # @return Scaled @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the scaled object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def ScaleAlongAxes(self, theObject, thePoint, theFactorX, theFactorY, theFactorZ, theCopy=False): """ Scale the given object by different factors along coordinate axes. @@ -7826,7 +8016,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theFactorX,theFactorY,theFactorZ Scaling factors along each axis. theCopy Flag used to scale object itself or create a copy. - Returns: + Returns: Scaled theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the scaled object if theCopy flag is True. """ @@ -7855,6 +8045,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the scaled shape. # # @ref swig_scale "Example" + @ManageTransactions("TrsfOp") def MakeScaleAlongAxes(self, theObject, thePoint, theFactorX, theFactorY, theFactorZ, theName=None): """ Scale the given object by different factors along coordinate axes, @@ -7887,6 +8078,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to mirror object itself or create a copy. # @return Mirrored @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the mirrored object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def MirrorByPlane(self, theObject, thePlane, theCopy=False): """ Mirror an object relatively the given plane. @@ -7918,6 +8110,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the mirrored shape. # # @ref tui_mirror "Example" + @ManageTransactions("TrsfOp") def MakeMirrorByPlane(self, theObject, thePlane, theName=None): """ Create an object, symmetrical to the given one relatively the given plane. @@ -7944,6 +8137,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to mirror object itself or create a copy. # @return Mirrored @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the mirrored object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def MirrorByAxis(self, theObject, theAxis, theCopy=False): """ Mirror an object relatively the given axis. @@ -7975,6 +8169,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the mirrored shape. # # @ref tui_mirror "Example" + @ManageTransactions("TrsfOp") def MakeMirrorByAxis(self, theObject, theAxis, theName=None): """ Create an object, symmetrical to the given one relatively the given axis. @@ -7986,7 +8181,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the mirrored shape. """ # Example: see GEOM_TestAll.py @@ -8001,6 +8196,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to mirror object itself or create a copy. # @return Mirrored @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the mirrored object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def MirrorByPoint(self, theObject, thePoint, theCopy=False): """ Mirror an object relatively the given point. @@ -8033,6 +8229,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the mirrored shape. # # @ref tui_mirror "Example" + @ManageTransactions("TrsfOp") def MakeMirrorByPoint(self, theObject, thePoint, theName=None): """ Create an object, symmetrical @@ -8045,7 +8242,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the mirrored shape. """ # Example: see GEOM_TestAll.py @@ -8065,6 +8262,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to displace object itself or create a copy. # @return Displaced @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the displaced object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def Position(self, theObject, theStartLCS, theEndLCS, theCopy=False): """ Modify the Location of the given object by LCS, creating its copy before the setting. @@ -8107,6 +8305,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the displaced shape. # # @ref tui_modify_location "Example" + @ManageTransactions("TrsfOp") def MakePosition(self, theObject, theStartLCS, theEndLCS, theName=None): """ Modify the Location of the given object by LCS, creating its copy before the setting. @@ -8123,7 +8322,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the displaced shape. Example of usage: @@ -8149,6 +8348,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the displaced shape if @a theCopy is @c True. # # @ref tui_modify_location "Example" + @ManageTransactions("TrsfOp") def PositionAlongPath(self,theObject, thePath, theDistance, theCopy, theReverse): """ Modify the Location of the given object by Path. @@ -8160,7 +8360,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theCopy is to create a copy objects if true. theReverse 0 - for usual direction, 1 - to reverse path direction. - Returns: + Returns: Displaced theObject (GEOM.GEOM_Object) if theCopy is False or new GEOM.GEOM_Object, containing the displaced shape if theCopy is True. @@ -8182,6 +8382,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing the displaced shape. + @ManageTransactions("TrsfOp") def MakePositionAlongPath(self, theObject, thePath, theDistance, theReverse, theName=None): """ Modify the Location of the given object by Path, creating its copy before the operation. @@ -8195,7 +8396,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the displaced shape. """ # Example: see GEOM_TestAll.py @@ -8210,6 +8411,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to offset object itself or create a copy. # @return Modified @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the result of offset operation if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def Offset(self, theObject, theOffset, theCopy=False): """ Offset given shape. @@ -8219,7 +8421,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theOffset Offset value. theCopy Flag used to offset object itself or create a copy. - Returns: + Returns: Modified theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the result of offset operation if theCopy flag is True. """ @@ -8242,6 +8444,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the offset object. # # @ref tui_offset "Example" + @ManageTransactions("TrsfOp") def MakeOffset(self, theObject, theOffset, theName=None): """ Create new object as offset of the given one. @@ -8253,7 +8456,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the offset object. Example of usage: @@ -8279,6 +8482,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the projection. # # @ref tui_projection "Example" + @ManageTransactions("TrsfOp") def MakeProjection(self, theSource, theTarget, theName=None): """ Create new object as projection of the given one on a 2D surface. @@ -8290,7 +8494,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the projection. """ # Example: see GEOM_TestAll.py @@ -8298,7 +8502,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("ProjectShapeCopy", self.TrsfOp) self._autoPublish(anObj, theName, "projection") return anObj - + ## Create a projection projection of the given point on a wire or an edge. # If there are no solutions or there are 2 or more solutions It throws an # exception. @@ -8314,19 +8518,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \n \a EdgeInWireIndex: The index of an edge in a wire. # # @ref tui_projection "Example" + @ManageTransactions("TrsfOp") def MakeProjectionOnWire(self, thePoint, theWire, theName=None): """ Create a projection projection of the given point on a wire or an edge. If there are no solutions or there are 2 or more solutions It throws an exception. - + Parameters: thePoint the point to be projected. theWire the wire. The edge is accepted as well. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: [u, PointOnEdge, EdgeInWireIndex] u: The parameter of projection point on edge. @@ -8356,6 +8561,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # the shapes, obtained after each translation. # # @ref tui_multi_translation "Example" + @ManageTransactions("TrsfOp") def MakeMultiTranslation1D(self, theObject, theVector, theStep, theNbTimes, theName=None): """ Translate the given object along the given vector a given number times @@ -8369,7 +8575,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each translation. @@ -8400,6 +8606,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # the shapes, obtained after each translation. # # @ref tui_multi_translation "Example" + @ManageTransactions("TrsfOp") def MakeMultiTranslation2D(self, theObject, theVector1, theStep1, theNbTimes1, theVector2, theStep2, theNbTimes2, theName=None): """ @@ -8446,6 +8653,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each rotation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate1DNbTimes (self, theObject, theAxis, theNbTimes, theName=None): """ Rotate the given object around the given axis a given number times. @@ -8459,7 +8667,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each rotation. @@ -8488,6 +8696,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each rotation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate1DByStep(self, theObject, theAxis, theAngleStep, theNbTimes, theName=None): """ Rotate the given object around the given axis @@ -8502,7 +8711,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each rotation. @@ -8535,6 +8744,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each transformation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate2DNbTimes(self, theObject, theAxis, theNbTimes1, theRadialStep, theNbTimes2, theName=None): """ Rotate the given object around the @@ -8553,7 +8763,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each transformation. @@ -8587,6 +8797,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each transformation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate2DByStep (self, theObject, theAxis, theAngleStep, theNbTimes1, theRadialStep, theNbTimes2, theName=None): """ Rotate the given object around the @@ -8606,7 +8817,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each transformation. @@ -8663,7 +8874,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def MakeMultiRotation2DNbTimes(self, aShape, aDir, aPoint, nbtimes1, aStep, nbtimes2, theName=None): """ The same, as MultiRotate2DNbTimes(), but axis is given by direction and point - + Example of usage: pz = geompy.MakeVertex(0, 0, 100) vy = geompy.MakeVectorDXDYDZ(0, 100, 0) @@ -8681,7 +8892,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def MakeMultiRotation2DByStep(self, aShape, aDir, aPoint, anAngle, nbtimes1, aStep, nbtimes2, theName=None): """ The same, as MultiRotate2DByStep(), but axis is given by direction and point - + Example of usage: pz = geompy.MakeVertex(0, 0, 100) vy = geompy.MakeVectorDXDYDZ(0, 100, 0) @@ -8709,6 +8920,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## The same, as MultiRotate2DByStep(), but theAngle is in degrees. # This method is DEPRECATED. Use MultiRotate2DByStep() instead. + @ManageTransactions("TrsfOp") def MultiRotate2D(self, theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2, theName=None): """ The same, as MultiRotate2DByStep(), but theAngle is in degrees. @@ -8749,7 +8961,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ The same, as MultiRotate2D(), but axis is given by direction and point This method is DEPRECATED. Use MakeMultiRotation2DByStep instead. - + Example of usage: pz = geompy.MakeVertex(0, 0, 100) vy = geompy.MakeVectorDXDYDZ(0, 100, 0) @@ -8778,6 +8990,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_fillet "Example 1" # \n @ref swig_MakeFilletAll "Example 2" + @ManageTransactions("LocalOp") def MakeFilletAll(self, theShape, theR, theName=None): """ Perform a fillet on all edges of the given shape. @@ -8789,10 +9002,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - Example of usage: + Example of usage: filletall = geompy.MakeFilletAll(prism, 10.) """ # Example: see GEOM_TestOthers.py @@ -8817,6 +9030,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fillet "Example" + @ManageTransactions("LocalOp") def MakeFillet(self, theShape, theR, theShapeType, theListShapes, theName=None): """ Perform a fillet on the specified edges/faces of the given shape @@ -8833,7 +9047,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -8860,6 +9074,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## The same that MakeFillet() but with two Fillet Radius R1 and R2 + @ManageTransactions("LocalOp") def MakeFilletR1R2(self, theShape, theR1, theR2, theShapeType, theListShapes, theName=None): """ The same that geompy.MakeFillet but with two Fillet Radius R1 and R2 @@ -8906,6 +9121,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fillet2d "Example" + @ManageTransactions("LocalOp") def MakeFillet1D(self, theShape, theR, theListOfVertexes, doIgnoreSecantVertices = True, theName=None): """ Perform a fillet on the specified edges of the given shape @@ -8928,10 +9144,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): The list of vertices could be empty,in this case fillet will done done at all vertices in wire - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - Example of usage: + Example of usage: # create wire Wire_1 = geompy.MakeWire([Edge_12, Edge_7, Edge_11, Edge_6, Edge_1,Edge_4]) # make fillet at given wire vertices with giver radius @@ -8958,6 +9174,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fillet2d "Example" + @ManageTransactions("LocalOp") def MakeFillet2D(self, theShape, theR, theListOfVertexes, theName=None): """ Perform a fillet at the specified vertices of the given face/shell. @@ -8972,7 +9189,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -8998,6 +9215,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_chamfer "Example 1" # \n @ref swig_MakeChamferAll "Example 2" + @ManageTransactions("LocalOp") def MakeChamferAll(self, theShape, theD, theName=None): """ Perform a symmetric chamfer on all edges of the given shape. @@ -9009,7 +9227,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -9038,6 +9256,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_chamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferEdge(self, theShape, theD1, theD2, theFace1, theFace2, theName=None): """ Perform a chamfer on edges, common to the specified faces, @@ -9055,7 +9274,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -9084,6 +9303,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @note Global index of sub-shape can be obtained, using method GetSubShapeID(). # # @return New GEOM.GEOM_Object, containing the result shape. + @ManageTransactions("LocalOp") def MakeChamferEdgeAD(self, theShape, theD, theAngle, theFace1, theFace2, theName=None): """ Perform a chamfer on edges @@ -9100,7 +9320,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -9139,6 +9359,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_chamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferFaces(self, theShape, theD1, theD2, theFaces, theName=None): """ Perform a chamfer on all edges of the specified faces, @@ -9154,10 +9375,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID(). - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestAll.py @@ -9172,6 +9393,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # theAngle is Angle of chamfer (angle in radians or a name of variable which defines angle in degrees) # # @ref swig_FilletChamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferFacesAD(self, theShape, theD, theAngle, theFaces, theName=None): """ The Same that geompy.MakeChamferFaces but with params theD is chamfer lenght and @@ -9201,11 +9423,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref swig_FilletChamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferEdges(self, theShape, theD1, theD2, theEdges, theName=None): """ Perform a chamfer on edges, with distance D1 on the first specified face (if several for one edge) - + Parameters: theShape Shape, to perform chamfer on. theD1,theD2 Chamfer size @@ -9226,6 +9449,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## The Same that MakeChamferEdges() but with params theD is chamfer lenght and # theAngle is Angle of chamfer (angle in radians or a name of variable which defines angle in degrees) + @ManageTransactions("LocalOp") def MakeChamferEdgesAD(self, theShape, theD, theAngle, theEdges, theName=None): """ The Same that geompy.MakeChamferEdges but with params theD is chamfer lenght and @@ -9258,9 +9482,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): else: anObj = self.MakeChamferFaces(aShape,d1,d2,ListShape,theName) return anObj - + ## Remove material from a solid by extrusion of the base shape on the given distance. - # @param theInit Shape to remove material from. It must be a solid or + # @param theInit Shape to remove material from. It must be a solid or # a compound made of a single solid. # @param theBase Closed edge or wire defining the base shape to be extruded. # @param theH Prism dimension along the normal to theBase @@ -9269,9 +9493,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the initial shape with removed material + # @return New GEOM.GEOM_Object, containing the initial shape with removed material # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakeExtrudedCut(self, theInit, theBase, theH, theAngle, theName=None): """ Add material to a solid by extrusion of the base shape on the given distance. @@ -9294,10 +9519,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakeExtrudedBoss", self.PrimOp) #anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "extrudedCut") - return anObj - + return anObj + ## Add material to a solid by extrusion of the base shape on the given distance. - # @param theInit Shape to add material to. It must be a solid or + # @param theInit Shape to add material to. It must be a solid or # a compound made of a single solid. # @param theBase Closed edge or wire defining the base shape to be extruded. # @param theH Prism dimension along the normal to theBase @@ -9306,9 +9531,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the initial shape with added material + # @return New GEOM.GEOM_Object, containing the initial shape with added material # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakeExtrudedBoss(self, theInit, theBase, theH, theAngle, theName=None): """ Add material to a solid by extrusion of the base shape on the given distance. @@ -9331,7 +9557,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakeExtrudedBoss", self.PrimOp) #anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "extrudedBoss") - return anObj + return anObj # end of l3_local ## @} @@ -9353,12 +9579,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # by a plane, corresponding to water level. # # @ref tui_archimede "Example" + @ManageTransactions("LocalOp") def Archimede(self, theShape, theWeight, theWaterDensity, theMeshDeflection, theName=None): """ Perform an Archimde operation on the given shape with given parameters. The object presenting the resulting face is returned. - Parameters: + Parameters: theShape Shape to be put in water. theWeight Weight og the shape. theWaterDensity Density of the water. @@ -9367,7 +9594,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing a section of theShape by a plane, corresponding to water level. """ @@ -9390,6 +9617,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return [x, y, z] # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def PointCoordinates(self,Point): """ Get point coordinates @@ -9400,8 +9628,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Example: see GEOM_TestMeasures.py aTuple = self.MeasuOp.PointCoordinates(Point) RaiseIfFailed("PointCoordinates", self.MeasuOp) - return aTuple - + return aTuple + ## Get vector coordinates # @return [x, y, z] # @@ -9416,7 +9644,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): p1=self.GetFirstVertex(Vector) p2=self.GetLastVertex(Vector) - + X1=self.PointCoordinates(p1) X2=self.PointCoordinates(p2) @@ -9428,31 +9656,31 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_measurement_tools_page "Example" def CrossProduct(self, Vector1, Vector2): - """ + """ Compute cross product - + Returns: vector w=u^v """ u=self.VectorCoordinates(Vector1) v=self.VectorCoordinates(Vector2) w=self.MakeVectorDXDYDZ(u[1]*v[2]-u[2]*v[1], u[2]*v[0]-u[0]*v[2], u[0]*v[1]-u[1]*v[0]) - + return w - + ## Compute cross product # @return dot product p=u.v # # @ref tui_measurement_tools_page "Example" def DotProduct(self, Vector1, Vector2): - """ + """ Compute cross product - + Returns: dot product p=u.v """ u=self.VectorCoordinates(Vector1) v=self.VectorCoordinates(Vector2) p=u[0]*v[0]+u[1]*v[1]+u[2]*v[2] - + return p @@ -9465,12 +9693,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # theVolume: Volume of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def BasicProperties(self,theShape): """ Get summarized length of all wires, area of surface and volume of the given shape. - Parameters: + Parameters: theShape Shape to define properties of. Returns: @@ -9493,11 +9722,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Zmin,Zmax: Limits of shape along OZ axis. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def BoundingBox (self, theShape, precise=False): """ Get parameters of bounding box of the given shape - Parameters: + Parameters: theShape Shape to obtain bounding box of. precise TRUE for precise computation; FALSE for fast one. @@ -9522,11 +9752,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created box. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def MakeBoundingBox (self, theShape, precise=False, theName=None): """ Get bounding box of the given shape - Parameters: + Parameters: theShape Shape to obtain bounding box of. precise TRUE for precise computation; FALSE for fast one. theName Object name; when specified, this parameter is used @@ -9549,11 +9780,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Ix,Iy,Iz: Moments of inertia of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def Inertia(self,theShape): """ Get inertia matrix and moments of inertia of theShape. - Parameters: + Parameters: theShape Shape to calculate inertia of. Returns: @@ -9571,11 +9803,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param coords list of points coordinates [x1, y1, z1, x2, y2, z2, ...] # @param tolerance to be used (default is 1.0e-7) # @return list_of_boolean = [res1, res2, ...] + @ManageTransactions("MeasuOp") def AreCoordsInside(self, theShape, coords, tolerance=1.e-7): """ Get if coords are included in the shape (ST_IN or ST_ON) - - Parameters: + + Parameters: theShape Shape coords list of points coordinates [x1, y1, z1, x2, y2, z2, ...] tolerance to be used (default is 1.0e-7) @@ -9590,14 +9823,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the minimal distance between the given shapes. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def MinDistance(self, theShape1, theShape2): """ Get minimal distance between the given shapes. - - Parameters: + + Parameters: theShape1,theShape2 Shapes to find minimal distance between. - Returns: + Returns: Value of the minimal distance between the given shapes. """ # Example: see GEOM_TestMeasures.py @@ -9611,14 +9845,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # [Distance, DX, DY, DZ]. # # @ref swig_all_measure "Example" + @ManageTransactions("MeasuOp") def MinDistanceComponents(self, theShape1, theShape2): """ Get minimal distance between the given shapes. - Parameters: + Parameters: theShape1,theShape2 Shapes to find minimal distance between. - Returns: + Returns: Value of the minimal distance between the given shapes, in form of list [Distance, DX, DY, DZ] """ @@ -9634,14 +9869,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # solutions) and a list of (X, Y, Z) coordinates for all couples of points. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def ClosestPoints (self, theShape1, theShape2): """ Get closest points of the given shapes. - Parameters: + Parameters: theShape1,theShape2 Shapes to find closest points of. - Returns: + Returns: The number of found solutions (-1 in case of infinite number of solutions) and a list of (X, Y, Z) coordinates for all couples of points. """ @@ -9657,18 +9893,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the angle between the given shapes in degrees. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetAngle(self, theShape1, theShape2): """ Get angle between the given shapes in degrees. - Parameters: + Parameters: theShape1,theShape2 Lines or linear edges to find angle between. Note: If both arguments are vectors, the angle is computed in accordance with their orientations, otherwise the minimum angle is computed. - Returns: + Returns: Value of the angle between the given shapes in degrees. """ # Example: see GEOM_TestMeasures.py @@ -9683,19 +9920,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the angle between the given shapes in radians. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetAngleRadians(self, theShape1, theShape2): """ Get angle between the given shapes in radians. - Parameters: + Parameters: theShape1,theShape2 Lines or linear edges to find angle between. - + Note: If both arguments are vectors, the angle is computed in accordance with their orientations, otherwise the minimum angle is computed. - Returns: + Returns: Value of the angle between the given shapes in radians. """ # Example: see GEOM_TestMeasures.py @@ -9710,16 +9948,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the angle between the given vectors in degrees. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetAngleVectors(self, theShape1, theShape2, theFlag = True): """ Get angle between the given vectors in degrees. - Parameters: + Parameters: theShape1,theShape2 Vectors to find angle between. theFlag If True, the normal vector is defined by the two vectors cross, if False, the opposite vector to the normal vector is used. - Returns: + Returns: Value of the angle between the given vectors in degrees. """ anAngle = self.MeasuOp.GetAngleBtwVectors(theShape1, theShape2) @@ -9733,12 +9972,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Get angle between the given vectors in radians. - Parameters: + Parameters: theShape1,theShape2 Vectors to find angle between. theFlag If True, the normal vector is defined by the two vectors cross, if False, the opposite vector to the normal vector is used. - Returns: + Returns: Value of the angle between the given vectors in radians. """ anAngle = self.GetAngleVectors(theShape1, theShape2, theFlag)*math.pi/180. @@ -9755,15 +9994,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return radius of curvature of \a theCurve. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def CurveCurvatureByParam(self, theCurve, theParam): """ Measure curvature of a curve at a point, set by parameter. - Parameters: + Parameters: theCurve a curve. theParam parameter. - Returns: + Returns: radius of curvature of theCurve. """ # Example: see GEOM_TestMeasures.py @@ -9777,16 +10017,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return radius of curvature of \a theCurve. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def CurveCurvatureByPoint(self, theCurve, thePoint): """ Measure curvature of a curve at a point. - Parameters: + Parameters: theCurve a curve. thePoint given point. - Returns: - radius of curvature of theCurve. + Returns: + radius of curvature of theCurve. """ aCurv = self.MeasuOp.CurveCurvatureByPoint(theCurve,thePoint) RaiseIfFailed("CurveCurvatureByPoint", self.MeasuOp) @@ -9805,16 +10046,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return max radius of curvature of theSurf. # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MaxSurfaceCurvatureByParam(self, theSurf, theUParam, theVParam): """ Measure max radius of curvature of surface. - Parameters: + Parameters: theSurf the given surface. theUParam Value of U-parameter on the referenced surface. theVParam Value of V-parameter on the referenced surface. - - Returns: + + Returns: max radius of curvature of theSurf. """ # Example: see GEOM_TestMeasures.py @@ -9828,16 +10070,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return max radius of curvature of theSurf. # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MaxSurfaceCurvatureByPoint(self, theSurf, thePoint): """ Measure max radius of curvature of surface in the given point. - Parameters: + Parameters: theSurf the given surface. thePoint given point. - - Returns: - max radius of curvature of theSurf. + + Returns: + max radius of curvature of theSurf. """ aSurf = self.MeasuOp.MaxSurfaceCurvatureByPoint(theSurf,thePoint) RaiseIfFailed("MaxSurfaceCurvatureByPoint", self.MeasuOp) @@ -9848,18 +10091,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theUParam Value of U-parameter on the referenced surface. # @param theVParam Value of V-parameter on the referenced surface. # @return min radius of curvature of theSurf. - # + # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MinSurfaceCurvatureByParam(self, theSurf, theUParam, theVParam): """ Measure min radius of curvature of surface. - Parameters: + Parameters: theSurf the given surface. theUParam Value of U-parameter on the referenced surface. theVParam Value of V-parameter on the referenced surface. - - Returns: + + Returns: Min radius of curvature of theSurf. """ aSurf = self.MeasuOp.MinSurfaceCurvatureByParam(theSurf,theUParam,theVParam) @@ -9872,16 +10116,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return min radius of curvature of theSurf. # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MinSurfaceCurvatureByPoint(self, theSurf, thePoint): """ Measure min radius of curvature of surface in the given point. - Parameters: + Parameters: theSurf the given surface. thePoint given point. - - Returns: - Min radius of curvature of theSurf. + + Returns: + Min radius of curvature of theSurf. """ aSurf = self.MeasuOp.MinSurfaceCurvatureByPoint(theSurf,thePoint) RaiseIfFailed("MinSurfaceCurvatureByPoint", self.MeasuOp) @@ -9896,14 +10141,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # VertMin,VertMax: Min and max tolerances of the vertices. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def Tolerance(self,theShape): """ Get min and max tolerances of sub-shapes of theShape - Parameters: + Parameters: theShape Shape, to get tolerances of. - Returns: + Returns: [FaceMin,FaceMax, EdgeMin,EdgeMax, VertMin,VertMax] FaceMin,FaceMax: Min and max tolerances of the faces. EdgeMin,EdgeMax: Min and max tolerances of the edges. @@ -9919,6 +10165,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Description of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def WhatIs(self,theShape): """ Obtain description of the given shape (number of sub-shapes of each type) @@ -10005,6 +10252,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def MakeCDG(self, theShape, theName=None): """ Get a point, situated at the centre of mass of theShape. @@ -10034,6 +10282,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vertex. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetVertexByIndex(self, theShape, theIndex, theName=None): """ Get a vertex sub-shape by index depended with orientation. @@ -10073,14 +10322,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vertex. """ # Example: see GEOM_TestMeasures.py # note: auto-publishing is done in self.GetVertexByIndex() - anObj = self.GetVertexByIndex(theShape, 0, theName) - RaiseIfFailed("GetFirstVertex", self.MeasuOp) - return anObj + return self.GetVertexByIndex(theShape, 0, theName) ## Get the last vertex of wire/edge depended orientation. # @param theShape Shape to find last vertex. @@ -10095,21 +10342,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Get the last vertex of wire/edge depended orientation. - Parameters: + Parameters: theShape Shape to find last vertex. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vertex. """ # Example: see GEOM_TestMeasures.py - nb_vert = self.ShapesOp.NumberOfSubShapes(theShape, self.ShapeType["VERTEX"]) + nb_vert = self.NumberOfSubShapes(theShape, self.ShapeType["VERTEX"]) # note: auto-publishing is done in self.GetVertexByIndex() - anObj = self.GetVertexByIndex(theShape, (nb_vert-1), theName) - RaiseIfFailed("GetLastVertex", self.MeasuOp) - return anObj + return self.GetVertexByIndex(theShape, (nb_vert-1), theName) ## Get a normale to the given face. If the point is not given, # the normale is calculated at the center of mass. @@ -10122,19 +10367,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vector. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def GetNormal(self, theFace, theOptionalPoint = None, theName=None): """ Get a normale to the given face. If the point is not given, the normale is calculated at the center of mass. - - Parameters: + + Parameters: theFace Face to define normale of. theOptionalPoint Point to compute the normale at. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vector. """ # Example: see GEOM_TestMeasures.py @@ -10152,6 +10398,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Otherwise doesn't return anything. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def PrintShapeErrors(self, theShape, theShapeErrors, theReturnStatus = 0): """ Print shape errors obtained from CheckShape. @@ -10191,11 +10438,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # returned along with IsValid flag. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def CheckShape(self,theShape, theIsCheckGeom = 0, theReturnStatus = 0): """ Check a topology of the given shape. - Parameters: + Parameters: theShape Shape to check validity of. theIsCheckGeom If FALSE, only the shape's topology will be checked, if TRUE, the shape's geometry will be checked also. @@ -10206,7 +10454,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): If 2 IsValid flag and the list of error data is returned. - Returns: + Returns: TRUE, if the shape "seems to be valid". If theShape is invalid, prints a description of problem. If theReturnStatus is equal to 1 the description is returned @@ -10237,14 +10485,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return TRUE, if the shape contains no self-intersections. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def CheckSelfIntersections(self, theShape): """ Detect self-intersections in the given shape. - Parameters: + Parameters: theShape Shape to check. - Returns: + Returns: TRUE, if the shape contains no self-intersections. """ # Example: see GEOM_TestMeasures.py @@ -10265,6 +10514,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Xx,Xy,Xz: Coordinates of shape's LCS X direction. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def GetPosition(self,theShape): """ Get position (LCS) of theShape. @@ -10272,10 +10522,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Axes of the LCS are obtained from shape's location or, if the shape is a planar face, from position of its plane. - Parameters: + Parameters: theShape Shape to calculate position of. - Returns: + Returns: [Ox,Oy,Oz, Zx,Zy,Zz, Xx,Xy,Xz]. Ox,Oy,Oz: Coordinates of shape's LCS origin. Zx,Zy,Zz: Coordinates of shape's LCS normal(main) direction. @@ -10295,11 +10545,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # or \a theDoubles list depends on the kind() of the shape. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def KindOfShape(self,theShape): """ Get kind of theShape. - - Parameters: + + Parameters: theShape Shape to get a kind of. Returns: @@ -10328,6 +10579,28 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return aKindTuple + ## Returns the string that describes if the shell is good for solid. + # This is a support method for MakeSolid. + # + # @param theShell the shell to be checked. + # @return Returns a string that describes the shell validity for + # solid construction. + @ManageTransactions("MeasuOp") + def _IsGoodForSolid(self, theShell): + """ + Returns the string that describes if the shell is good for solid. + This is a support method for MakeSolid. + + Parameter: + theShell the shell to be checked. + + Returns: + Returns a string that describes the shell validity for + solid construction. + """ + aDescr = self.MeasuOp.IsGoodForSolid(theShell) + return aDescr + # end of l2_measure ## @} @@ -10354,12 +10627,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # material groups are not automatically published. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def ImportFile(self, theFileName, theFormatName, theName=None): """ Import a shape from the BREP or IGES or STEP file (depends on given format) with given name. - Parameters: + Parameters: theFileName The file, containing the shape. theFormatName Specify format for the file reading. Available formats can be obtained with geompy.InsertOp.ImportTranslators() method. @@ -10413,7 +10687,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): geompy.ImportFile(...) function for BREP format Import a shape from the BREP file with given name. - Parameters: + Parameters: theFileName The file, containing the shape. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -10466,6 +10740,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return String, containing the units name. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def GetIGESUnit(self, theFileName): """ Return length units from given IGES file @@ -10531,6 +10806,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return String, containing the units name. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def GetSTEPUnit(self, theFileName): """ Return length units from given STEP file @@ -10556,6 +10832,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the shape, read from theStream. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def RestoreShape (self, theStream, theName=None): """ Read a shape from the binary stream, containing its bounding representation (BRep). @@ -10563,7 +10840,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: shape.GetShapeStream() method can be used to obtain the shape's BRep stream. - Parameters: + Parameters: theStream The BRep binary stream. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -10586,11 +10863,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # geompy.InsertOp.ExportTranslators()[0] method. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def Export(self, theObject, theFileName, theFormatName): """ Export the given shape into a file with given name. - Parameters: + Parameters: theObject Shape to be stored in the file. theFileName Name of the file to store the given shape in. theFormatName Specify format for the shape storage. @@ -10650,21 +10928,22 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_building_by_blocks_page "Example" + @ManageTransactions("BlocksOp") def MakeQuad(self, E1, E2, E3, E4, theName=None): """ Create a quadrangle face from four edges. Order of Edges is not important. It is not necessary that edges share the same vertex. - Parameters: + Parameters: E1,E2,E3,E4 Edges for the face bound. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. - Example of usage: + Example of usage: qface1 = geompy.MakeQuad(edge1, edge2, edge3, edge4) """ # Example: see GEOM_Spanner.py @@ -10683,20 +10962,21 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_building_by_blocks_page "Example" + @ManageTransactions("BlocksOp") def MakeQuad2Edges(self, E1, E2, theName=None): """ Create a quadrangle face on two edges. The missing edges will be built by creating the shortest ones. - Parameters: + Parameters: E1,E2 Two opposite edges for the face. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. - + Example of usage: # create vertices p1 = geompy.MakeVertex( 0., 0., 0.) @@ -10726,18 +11006,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_building_by_blocks_page "Example 1" # \n @ref swig_MakeQuad4Vertices "Example 2" + @ManageTransactions("BlocksOp") def MakeQuad4Vertices(self, V1, V2, V3, V4, theName=None): """ Create a quadrangle face with specified corners. The missing edges will be built by creating the shortest ones. - Parameters: + Parameters: V1,V2,V3,V4 Corner vertices for the face. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. Example of usage: @@ -10766,18 +11047,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_building_by_blocks_page "Example 1" # \n @ref swig_MakeHexa "Example 2" + @ManageTransactions("BlocksOp") def MakeHexa(self, F1, F2, F3, F4, F5, F6, theName=None): """ Create a hexahedral solid, bounded by the six given faces. Order of faces is not important. It is not necessary that Faces share the same edge. - Parameters: + Parameters: F1,F2,F3,F4,F5,F6 Faces for the hexahedral solid. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created solid. Example of usage: @@ -10800,12 +11082,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_building_by_blocks_page "Example 1" # \n @ref swig_MakeHexa2Faces "Example 2" + @ManageTransactions("BlocksOp") def MakeHexa2Faces(self, F1, F2, theName=None): """ Create a hexahedral solid between two given faces. The missing faces will be built by creating the smallest ones. - Parameters: + Parameters: F1,F2 Two opposite faces for the hexahedral solid. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -10841,11 +11124,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found vertex. # # @ref swig_GetPoint "Example" + @ManageTransactions("BlocksOp") def GetPoint(self, theShape, theX, theY, theZ, theEpsilon, theName=None): """ Get a vertex, found in the given shape by its coordinates. - Parameters: + Parameters: theShape Block or a compound of blocks. theX,theY,theZ Coordinates of the sought vertex. theEpsilon Maximum allowed distance between the resulting @@ -10854,7 +11138,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the found vertex. Example of usage: @@ -10876,11 +11160,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found vertex. # # @ref swig_GetVertexNearPoint "Example" + @ManageTransactions("BlocksOp") def GetVertexNearPoint(self, theShape, thePoint, theName=None): """ Find a vertex of the given shape, which has minimal distance to the given point. - Parameters: + Parameters: theShape Any shape. thePoint Point, close to the desired vertex. theName Object name; when specified, this parameter is used @@ -10910,11 +11195,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found edge. # # @ref swig_GetEdge "Example" + @ManageTransactions("BlocksOp") def GetEdge(self, theShape, thePoint1, thePoint2, theName=None): """ Get an edge, found in the given shape by two given vertices. - Parameters: + Parameters: theShape Block or a compound of blocks. thePoint1,thePoint2 Points, close to the ends of the desired edge. theName Object name; when specified, this parameter is used @@ -10940,11 +11226,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found edge. # # @ref swig_GetEdgeNearPoint "Example" + @ManageTransactions("BlocksOp") def GetEdgeNearPoint(self, theShape, thePoint, theName=None): """ Find an edge of the given shape, which has minimal distance to the given point. - Parameters: + Parameters: theShape Block or a compound of blocks. thePoint Point, close to the desired edge. theName Object name; when specified, this parameter is used @@ -10970,6 +11257,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetFaceByPoints(self, theShape, thePoint1, thePoint2, thePoint3, thePoint4, theName=None): """ Returns a face, found in the given shape by four given corner vertices. @@ -11000,6 +11288,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetFaceByEdges(self, theShape, theEdge1, theEdge2, theName=None): """ Get a face of block, found in the given shape by two given edges. @@ -11030,6 +11319,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_GetOppositeFace "Example" + @ManageTransactions("BlocksOp") def GetOppositeFace(self, theBlock, theFace, theName=None): """ Find a face, opposite to the given one in the given block. @@ -11041,7 +11331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the found face. """ # Example: see GEOM_Spanner.py @@ -11060,6 +11350,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_GetFaceNearPoint "Example" + @ManageTransactions("BlocksOp") def GetFaceNearPoint(self, theShape, thePoint, theName=None): """ Find a face of the given shape, which has minimal distance to the given point. @@ -11090,6 +11381,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetFaceByNormale(self, theBlock, theVector, theName=None): """ Find a face of block, whose outside normale has minimal angle with the given vector. @@ -11125,6 +11417,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing a group of all found shapes. # # @ref swig_GetShapesNearPoint "Example" + @ManageTransactions("BlocksOp") def GetShapesNearPoint(self, theShape, thePoint, theShapeType, theTolerance = 1e-07, theName=None): """ Find all sub-shapes of type theShapeType of the given shape, @@ -11169,6 +11462,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_measurement_tools_page "Example 1" # \n @ref swig_CheckCompoundOfBlocks "Example 2" + @ManageTransactions("BlocksOp") def CheckCompoundOfBlocks(self,theCompound): """ Check, if the compound of blocks is given. @@ -11184,7 +11478,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Returns: TRUE, if the given shape is a compound of blocks. - If theCompound is not valid, prints all discovered errors. + If theCompound is not valid, prints all discovered errors. """ # Example: see GEOM_Spanner.py (IsValid, BCErrors) = self.BlocksOp.CheckCompoundOfBlocks(theCompound) @@ -11207,6 +11501,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_measurement_tools_page "Example 1" # \n @ref swig_GetNonBlocks "Example 2" + @ManageTransactions("BlocksOp") def GetNonBlocks (self, theShape, theName=None): """ Retrieve all non blocks solids and faces from theShape. @@ -11245,6 +11540,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Improved shape. # # @ref swig_RemoveExtraEdges "Example" + @ManageTransactions("BlocksOp") def RemoveExtraEdges(self, theShape, doUnionFaces=False, theName=None): """ Remove all seam and degenerated edges from theShape. @@ -11259,7 +11555,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: Improved shape. """ # Example: see GEOM_TestOthers.py @@ -11282,6 +11578,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Improved shape. # # @ref swig_UnionFaces "Example" + @ManageTransactions("BlocksOp") def UnionFaces(self, theShape, theName=None): """ Performs union faces of theShape. @@ -11295,7 +11592,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: Improved shape. """ # Example: see GEOM_TestOthers.py @@ -11315,6 +11612,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Improved compound. # # @ref swig_CheckAndImprove "Example" + @ManageTransactions("BlocksOp") def CheckAndImprove(self, theShape, theName=None): """ Check, if the given shape is a blocks compound. @@ -11329,7 +11627,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: Improved compound. """ # Example: see GEOM_TestOthers.py @@ -11358,6 +11656,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_explode_on_blocks "Example 1" # \n @ref swig_MakeBlockExplode "Example 2" + @ManageTransactions("BlocksOp") def MakeBlockExplode(self, theCompound, theMinNbFaces, theMaxNbFaces, theName=None): """ Get all the blocks, contained in the given compound. @@ -11373,7 +11672,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: If theMaxNbFaces = 0, the maximum number of faces is not restricted. - Returns: + Returns: List of GEOM.GEOM_Object, containing the retrieved blocks. """ # Example: see GEOM_TestOthers.py @@ -11397,6 +11696,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found block. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetBlockNearPoint(self, theCompound, thePoint, theName=None): """ Find block, containing the given point inside its volume or on boundary. @@ -11428,6 +11728,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found block. # # @ref swig_GetBlockByParts "Example" + @ManageTransactions("BlocksOp") def GetBlockByParts(self, theCompound, theParts, theName=None): """ Find block, containing all the elements, passed as the parts, or maximum quantity of them. @@ -11439,7 +11740,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM_Object, containing the found block. """ # Example: see GEOM_TestOthers.py @@ -11458,6 +11759,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the found blocks. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetBlocksByParts(self, theCompound, theParts, theName=None): """ Return all blocks, containing all the elements, passed as the parts. @@ -11493,6 +11795,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_multi_transformation "Example" + @ManageTransactions("BlocksOp") def MakeMultiTransformation1D(self, Block, DirFace1, DirFace2, NbTimes, theName=None): """ Multi-transformate block and glue the result. @@ -11533,6 +11836,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_multi_transformation "Example" + @ManageTransactions("BlocksOp") def MakeMultiTransformation2D(self, Block, DirFace1U, DirFace2U, NbTimesU, DirFace1V, DirFace2V, NbTimesV, theName=None): """ @@ -11572,6 +11876,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, each of them is a propagation group. # # @ref swig_Propagate "Example" + @ManageTransactions("BlocksOp") def Propagate(self, theShape, theName=None): """ Build all possible propagation groups. @@ -11611,6 +11916,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_working_with_groups_page "Example 1" # \n @ref swig_CreateGroup "Example 2" + @ManageTransactions("GroupOp") def CreateGroup(self, theMainShape, theShapeType, theName=None): """ Creates a new group which will store sub-shapes of theMainShape @@ -11628,7 +11934,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Example of usage: group = geompy.CreateGroup(Box, geompy.ShapeType["FACE"]) - + """ # Example: see GEOM_TestOthers.py anObj = self.GroupOp.CreateGroup(theMainShape, theShapeType) @@ -11642,6 +11948,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \note Use method GetSubShapeID() to get an unique ID of the sub-shape # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def AddObject(self,theGroup, theSubShapeID): """ Adds a sub-object with ID theSubShapeId to the group @@ -11651,7 +11958,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theSubShapeID is a sub-shape ID in the main object. Note: - Use method GetSubShapeID() to get an unique ID of the sub-shape + Use method GetSubShapeID() to get an unique ID of the sub-shape """ # Example: see GEOM_TestOthers.py self.GroupOp.AddObject(theGroup, theSubShapeID) @@ -11666,6 +11973,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \note Use method GetSubShapeID() to get an unique ID of the sub-shape # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def RemoveObject(self,theGroup, theSubShapeID): """ Removes a sub-object with ID theSubShapeId from the group @@ -11687,6 +11995,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of sub-shapes to be added. # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def UnionList (self,theGroup, theSubShapes): """ Adds to the group all the given shapes. No errors, if some shapes are alredy included. @@ -11705,6 +12014,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of indices of sub-shapes to be added. # # @ref swig_UnionIDs "Example" + @ManageTransactions("GroupOp") def UnionIDs(self,theGroup, theSubShapes): """ Adds to the group all the given shapes. No errors, if some shapes are alredy included. @@ -11723,6 +12033,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of sub-shapes to be removed. # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def DifferenceList (self,theGroup, theSubShapes): """ Removes from the group all the given shapes. No errors, if some shapes are not included. @@ -11741,6 +12052,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of indices of sub-shapes to be removed. # # @ref swig_DifferenceIDs "Example" + @ManageTransactions("GroupOp") def DifferenceIDs(self,theGroup, theSubShapes): """ Removes from the group all the given shapes. No errors, if some shapes are not included. @@ -11748,7 +12060,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theGroup is a GEOM group from which the sub-shapes are removed. theSubShapes is a list of indices of sub-shapes to be removed. - """ + """ # Example: see GEOM_TestOthers.py self.GroupOp.DifferenceIDs(theGroup, theSubShapes) RaiseIfFailed("DifferenceIDs", self.GroupOp) @@ -11766,6 +12078,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_union_groups_anchor "Example" + @ManageTransactions("GroupOp") def UnionGroups (self, theGroup1, theGroup2, theName=None): """ Union of two groups. @@ -11799,6 +12112,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_intersect_groups_anchor "Example" + @ManageTransactions("GroupOp") def IntersectGroups (self, theGroup1, theGroup2, theName=None): """ Intersection of two groups. @@ -11832,6 +12146,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_cut_groups_anchor "Example" + @ManageTransactions("GroupOp") def CutGroups (self, theGroup1, theGroup2, theName=None): """ Cut of two groups. @@ -11865,6 +12180,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_union_groups_anchor "Example" + @ManageTransactions("GroupOp") def UnionListOfGroups (self, theGList, theName=None): """ Union of list of groups. @@ -11897,6 +12213,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_intersect_groups_anchor "Example" + @ManageTransactions("GroupOp") def IntersectListOfGroups (self, theGList, theName=None): """ Cut of lists of groups. @@ -11920,7 +12237,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Cut of lists of groups. # New group is created. It will contain only entities - # which are present in groups listed in theGList1 but + # which are present in groups listed in theGList1 but # are not present in groups from theGList2. # @param theGList1 is a list of GEOM groups to include elements of. # @param theGList2 is a list of GEOM groups to exclude elements of. @@ -11931,11 +12248,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_cut_groups_anchor "Example" + @ManageTransactions("GroupOp") def CutListOfGroups (self, theGList1, theGList2, theName=None): """ Cut of lists of groups. New group is created. It will contain only entities - which are present in groups listed in theGList1 but + which are present in groups listed in theGList1 but are not present in groups from theGList2. Parameters: @@ -11958,6 +12276,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theGroup is a GEOM group for which a list of IDs is requested # # @ref swig_GetObjectIDs "Example" + @ManageTransactions("GroupOp") def GetObjectIDs(self,theGroup): """ Returns a list of sub-objects ID stored in the group @@ -11974,6 +12293,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theGroup is a GEOM group which type is returned. # # @ref swig_GetType "Example" + @ManageTransactions("GroupOp") def GetType(self,theGroup): """ Returns a type of sub-objects stored in the group @@ -11996,7 +12316,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theId is a GEOM obect type id. - + Returns: type of geom object (POINT, VECTOR, PLANE, LINE, TORUS, ... ) """ @@ -12103,6 +12423,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a GEOM object which is a main shape for theGroup # # @ref swig_GetMainShape "Example" + @ManageTransactions("GroupOp") def GetMainShape(self,theGroup): """ Returns a main shape associated with the group @@ -12269,6 +12590,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. # # @ref tui_creation_pipetshape "Example" + @ManageTransactions("AdvOp") def MakePipeTShape (self, theR1, theW1, theL1, theR2, theW2, theL2, theHexMesh=True, theP1=None, theP2=None, theP3=None, theRL=0, theWL=0, theLtransL=0, theLthinL=0, @@ -12386,6 +12708,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. # # @ref tui_creation_pipetshape "Example" + @ManageTransactions("AdvOp") def MakePipeTShapeChamfer (self, theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theHexMesh=True, theP1=None, theP2=None, theP3=None, theRL=0, theWL=0, theLtransL=0, theLthinL=0, @@ -12505,6 +12828,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. # # @ref tui_creation_pipetshape "Example" + @ManageTransactions("AdvOp") def MakePipeTShapeFillet (self, theR1, theW1, theL1, theR2, theW2, theL2, theRF, theHexMesh=True, theP1=None, theP2=None, theP3=None, theRL=0, theWL=0, theLtransL=0, theLthinL=0, @@ -12551,10 +12875,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: List of GEOM_Object, containing the created shape and propagation groups. - + Example of usage: # create PipeTShape with fillet object pipetshapefillet = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0) @@ -12595,6 +12919,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the created shape. # # @ref tui_creation_divideddisk "Example" + @ManageTransactions("AdvOp") def MakeDividedDisk(self, theR, theOrientation, thePattern, theName=None): """ Creates a disk, divided into blocks. It can be used to create divided pipes @@ -12618,7 +12943,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): if Parameters: anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "dividedDisk") return anObj - + ## This function allows creating a disk already divided into blocks. It # can be used to create divided pipes for later meshing in hexaedra. # @param theCenter Center of the disk @@ -12632,6 +12957,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the created shape. # # @ref tui_creation_divideddisk "Example" + @ManageTransactions("AdvOp") def MakeDividedDiskPntVecR(self, theCenter, theVector, theRadius, thePattern, theName=None): """ Creates a disk already divided into blocks. It can be used to create divided pipes @@ -12667,6 +12993,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the created shape. # # @ref tui_creation_dividedcylinder "Example" + @ManageTransactions("AdvOp") def MakeDividedCylinder(self, theR, theH, thePattern, theName=None): """ Builds a cylinder prepared for hexa meshes @@ -12708,6 +13035,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # computed plate surface and given points. # # @ref tui_creation_smoothingsurface "Example" + @ManageTransactions("AdvOp") def MakeSmoothingSurface(self, thelPoints, theNbMax=2, theDegMax=8, theDMax=0.0, theName=None): """ @@ -12750,6 +13078,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return boolean # # @ref tui_exportxao "Example" + @ManageTransactions("InsertOp") def ExportXAO(self, shape, groups, fields, author, fileName): res = self.InsertOp.ExportXAO(shape, groups, fields, author, fileName) RaiseIfFailed("ExportXAO", self.InsertOp) @@ -12766,6 +13095,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # fields The list of imported fields # # @ref tui_importxao "Example" + @ManageTransactions("InsertOp") def ImportXAO(self, fileName): res = self.InsertOp.ImportXAO(fileName) RaiseIfFailed("ImportXAO", self.InsertOp) @@ -12787,6 +13117,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ingroup l1_geomBuilder_auxiliary # @ref swig_MakeCopy "Example" + @ManageTransactions("InsertOp") def MakeCopy(self, theOriginal, theName=None): """ Create a copy of the given object @@ -12827,13 +13158,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param Path a path to the texture file # @return unique texture identifier # @ingroup l1_geomBuilder_auxiliary + @ManageTransactions("InsertOp") def LoadTexture(self, Path): """ Load marker texture from the file - + Parameters: Path a path to the texture file - + Returns: unique texture identifier """ @@ -12844,7 +13176,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Get internal name of the object based on its study entry # @note This method does not provide an unique identifier of the geometry object. - # @note This is internal function of GEOM component, though it can be used outside it for + # @note This is internal function of GEOM component, though it can be used outside it for # appropriate reason (e.g. for identification of geometry object). # @param obj geometry object # @return unique object identifier @@ -12853,7 +13185,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Get internal name of the object based on its study entry. Note: this method does not provide an unique identifier of the geometry object. - It is an internal function of GEOM component, though it can be used outside GEOM for + It is an internal function of GEOM component, though it can be used outside GEOM for appropriate reason (e.g. for identification of geometry object). Parameters: @@ -12867,11 +13199,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): if entry is not None: lst = entry.split(":") if len(lst) > 0: - ID = lst[-1] # -1 means last item in the list + ID = lst[-1] # -1 means last item in the list return "GEOM_" + ID return ID - - + + ## Add marker texture. @a Width and @a Height parameters # specify width and height of the texture in pixels. @@ -12886,6 +13218,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param RowData if @c True, @a Texture data are packed in the byte stream # @return unique texture identifier # @ingroup l1_geomBuilder_auxiliary + @ManageTransactions("InsertOp") def AddTexture(self, Width, Height, Texture, RowData=False): """ Add marker texture. Width and Height parameters @@ -12911,19 +13244,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Creates a new folder object. It is a container for any GEOM objects. # @param Name name of the container - # @param Father parent object. If None, + # @param Father parent object. If None, # folder under 'Geometry' root object will be created. # @return a new created folder # @ingroup l1_publish_data def NewFolder(self, Name, Father=None): """ Create a new folder object. It is an auxiliary container for any GEOM objects. - + Parameters: Name name of the container - Father parent object. If None, + Father parent object. If None, folder under 'Geometry' root object will be created. - + Returns: a new created folder """ @@ -12937,7 +13270,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def PutToFolder(self, Object, Folder): """ Move object to the specified folder - + Parameters: Object object to move Folder target folder @@ -12952,7 +13285,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def PutListToFolder(self, ListOfSO, Folder): """ Move list of objects to the specified folder - + Parameters: ListOfSO list of objects to move Folder target folder @@ -12971,6 +13304,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # 0 - VERTEX, 1 - EDGE, 2 - FACE, 3 - SOLID, -1 - whole shape # @param componentNames names of components # @return a created field + @ManageTransactions("FieldOp") def CreateField(self, shape, name, type, dimension, componentNames): """ Creates a field @@ -12982,7 +13316,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): dimension dimension of the shape the field lies on 0 - VERTEX, 1 - EDGE, 2 - FACE, 3 - SOLID, -1 - whole shape componentNames names of components - + Returns: a created field """ @@ -13011,6 +13345,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return ## Returns number of fields on a shape + @ManageTransactions("FieldOp") def CountFields(self, shape): "Returns number of fields on a shape" nb = self.FieldOp.CountFields( shape ) @@ -13018,6 +13353,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return nb ## Returns all fields on a shape + @ManageTransactions("FieldOp") def GetFields(self, shape): "Returns all fields on a shape" ff = self.FieldOp.GetFields( shape ) @@ -13025,6 +13361,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return ff ## Returns a field on a shape by its name + @ManageTransactions("FieldOp") def GetField(self, shape, name): "Returns a field on a shape by its name" f = self.FieldOp.GetField( shape, name ) From c893c5270f7ea7e780fcc8a549e190e97af96dc1 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 25 Jun 2014 18:28:02 +0400 Subject: [PATCH 051/118] 0022566: EDF GEOM : Performance regression in MakeCompound operation --- src/GEOM/GEOM_Engine.cxx | 2 +- src/GEOM_SWIG/geomBuilder.py | 1033 ++++++++++++++++++++++------------ 2 files changed, 686 insertions(+), 349 deletions(-) diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx index 9d804abfd..b83233ff5 100644 --- a/src/GEOM/GEOM_Engine.cxx +++ b/src/GEOM/GEOM_Engine.cxx @@ -215,7 +215,7 @@ GEOM_Engine::GEOM_Engine() TFunction_DriverTable::Get()->AddDriver(GEOM_Object::GetSubShapeID(), new GEOM_SubShapeDriver()); _OCAFApp = new GEOM_Application(); - _UndoLimit = 10; + _UndoLimit = 0; } /*! diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 38255ac1b..9452921e9 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -39,16 +39,16 @@ ## by means of \ref geomBuilder.geomBuilder.addToStudy() "addToStudy()" ## or \ref geomBuilder.geomBuilder.addToStudyInFather() "addToStudyInFather()" ## functions. -## +## ## However, it is possible to publish result data in the study ## automatically. For this, almost each function of ## \ref geomBuilder.geomBuilder "geomBuilder" class has ## an additional @a theName parameter (@c None by default). ## As soon as non-empty string value is passed to this parameter, ## the result object is published in the study automatically. -## +## ## For example, consider the following Python script: -## +## ## @code ## import salome ## from salome.geom import geomBuilder @@ -56,15 +56,15 @@ ## box = geompy.MakeBoxDXDYDZ(100, 100, 100) # box is not published in the study yet ## geompy.addToStudy(box, "box") # explicit publishing ## @endcode -## +## ## Last two lines can be replaced by one-line instruction: -## +## ## @code ## box = geompy.MakeBoxDXDYDZ(100, 100, 100, theName="box") # box is published in the study with "box" name ## @endcode -## +## ## ... or simply -## +## ## @code ## box = geompy.MakeBoxDXDYDZ(100, 100, 100, "box") # box is published in the study with "box" name ## @endcode @@ -102,8 +102,8 @@ ## value passed as parameter has the same effect. ## - if @a maxNbSubShapes is any positive value, automatic publishing is enabled and ## maximum number of sub-shapes allowed for publishing is set to specified value. -## -## When automatic publishing is enabled, you even do not need to pass @a theName parameter +## +## When automatic publishing is enabled, you even do not need to pass @a theName parameter ## to the functions creating objects, instead default names will be used. However, you ## can always change the behavior, by passing explicit name to the @a theName parameter ## and it will be used instead default one. @@ -117,7 +117,7 @@ ## from salome.geom import geomBuilder ## geompy = geomBuilder.New(salome.myStudy) ## geompy.addToStudyAuto() # enable automatic publication -## box = geompy.MakeBoxDXDYDZ(100, 100, 100) +## box = geompy.MakeBoxDXDYDZ(100, 100, 100) ## # the box is created and published in the study with default name ## geompy.addToStudyAuto(5) # set max allowed number of sub-shapes to 5 ## vertices = geompy.SubShapeAll(box, geomBuilder.ShapeType['VERTEX']) @@ -146,44 +146,44 @@ ## ## It is possible to customize the representation of the geometrical ## data in the data tree; this can be done by using folders. A folder can -## be created in the study tree using function -## \ref geomBuilder.geomBuilder.NewFolder() "NewFolder()" -## (by default it is created under the "Geometry" root object). -## As soon as folder is created, any published geometry object +## be created in the study tree using function +## \ref geomBuilder.geomBuilder.NewFolder() "NewFolder()" +## (by default it is created under the "Geometry" root object). +## As soon as folder is created, any published geometry object ## can be moved into it. -## +## ## For example: -## +## ## @code ## import salome ## from salome.geom import geomBuilder ## geompy = geomBuilder.New(salome.myStudy) -## box = geompy.MakeBoxDXDYDZ(100, 100, 100, "Box") +## box = geompy.MakeBoxDXDYDZ(100, 100, 100, "Box") ## # the box was created and published in the study ## folder = geompy.NewFolder("Primitives") ## # an empty "Primitives" folder was created under default "Geometry" root object ## geompy.PutToFolder(box, folder) ## # the box was moved into "Primitives" folder ## @endcode -## +## ## Subfolders are also can be created by specifying another folder as a parent: -## +## ## @code ## subfolder = geompy.NewFolder("3D", folder) ## # "3D" folder was created under "Primitives" folder ## @endcode -## +## ## @note ## - Folder container is just a representation layer object that -## deals with already published objects only. So, any geometry object -## should be published in the study (for example, with +## deals with already published objects only. So, any geometry object +## should be published in the study (for example, with ## \ref geomBuilder.geomBuilder.PutToFolder() "addToStudy()" function) ## BEFORE moving it into any existing folder. ## - \ref geomBuilder.geomBuilder.PutToFolder() "PutToFolder()" function ## does not change physical position of geometry object in the study tree, ## it only affects on the representation of the data tree. ## - It is impossible to publish geometry object using any folder as father. -## +## ## \defgroup l1_publish_data ## \defgroup l1_geomBuilder_auxiliary ## \defgroup l1_geomBuilder_purpose @@ -254,6 +254,7 @@ from salome_notebook import * import GEOM import math import os +import functools from salome.geom.gsketcher import Sketcher3D, Sketcher2D @@ -269,15 +270,33 @@ def _toListOfNames(_names, _size=-1): for i in range(len(l), _size): l.append("%s_%d"%(l[0],i)) return l +# Decorator function to manage transactions for all geometric operations. +def ManageTransactions(theOpeName): + def MTDecorator(theFunction): + # To keep the original function name an documentation. + @functools.wraps(theFunction) + def OpenCallClose(self, *args, **kwargs): + # Open transaction + anOperation = getattr(self, theOpeName) + anOperation.StartOperation() + try: + # Call the function + res = theFunction(self, *args, **kwargs) + # Commit transaction + anOperation.FinishOperation() + return res + except: + # Abort transaction + anOperation.AbortOperation() + raise + return OpenCallClose + return MTDecorator + ## Raise an Error, containing the Method_name, if Operation is Failed ## @ingroup l1_geomBuilder_auxiliary def RaiseIfFailed (Method_name, Operation): if Operation.IsDone() == 0 and Operation.GetErrorCode() != "NOT_FOUND_ANY": - Operation.AbortOperation() raise RuntimeError, Method_name + " : " + Operation.GetErrorCode() - else: - Operation.FinishOperation() - pass ## Return list of variables value from salome notebook ## @ingroup l1_geomBuilder_auxiliary @@ -385,7 +404,7 @@ def PackData(data): Returns: data packed to the byte stream - + Example of usage: val = PackData("10001110") # val = 0xAE val = PackData("1") # val = 0x80 @@ -436,13 +455,13 @@ def ReadTexture(fname): texture bitmap itself. This function can be used to read the texture to the byte stream in order to pass it to the AddTexture() function of geomBuilder class. - + Parameters: fname texture file name Returns: sequence of tree values: texture's width, height in pixels and its byte stream - + Example of usage: from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) @@ -515,6 +534,7 @@ class PluginOperation: self.function = function pass + @ManageTransactions("operation") def __call__(self, *args): res = self.function(self.operation, *args) RaiseIfFailed(self.function.__name__, self.operation) @@ -783,7 +803,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return op ## Enable / disable results auto-publishing - # + # # The automatic publishing is managed in the following way: # - if @a maxNbSubShapes = 0, automatic publishing is disabled. # - if @a maxNbSubShapes = -1 (default), automatic publishing is enabled and @@ -829,6 +849,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Get name for sub-shape aSubObj of shape aMainObj # # @ref swig_SubShapeName "Example" + @ManageTransactions("ShapesOp") def SubShapeName(self,aSubObj, aMainObj): """ Get name for sub-shape aSubObj of shape aMainObj @@ -1038,7 +1059,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theAddPrefix add prefix "from_" to names of restored sub-shapes, and prefix "from_subshapes_of_" to names of partially restored sub-shapes. - Returns: + Returns: list of published sub-shapes """ # Example: see GEOM_TestAll.py @@ -1062,6 +1083,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertex(self, theX, theY, theZ, theName=None): """ Create point by three coordinates. @@ -1073,8 +1095,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - - Returns: + + Returns: New GEOM.GEOM_Object, containing the created point. """ # Example: see GEOM_TestAll.py @@ -1098,6 +1120,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexWithRef(self, theReference, theX, theY, theZ, theName=None): """ Create a point, distant from the referenced point @@ -1133,6 +1156,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexOnCurve(self, theRefCurve, theParameter, theName=None): """ Create a point, corresponding to the given parameter on the given curve. @@ -1170,10 +1194,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexOnCurveByCoord(self, theRefCurve, theX, theY, theZ, theName=None): """ Create a point by projection give coordinates on the given curve - + Parameters: theRefCurve The referenced curve. theX X-coordinate in 3D space @@ -1209,6 +1234,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_creation_point "Example" + @ManageTransactions("BasicOp") def MakeVertexOnCurveByLength(self, theRefCurve, theLength, theStartPoint = None, theName=None): """ Create a point, corresponding to the given length on the given curve. @@ -1245,6 +1271,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexOnSurface "Example" + @ManageTransactions("BasicOp") def MakeVertexOnSurface(self, theRefSurf, theUParameter, theVParameter, theName=None): """ Create a point, corresponding to the given parameters on the @@ -1284,6 +1311,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexOnSurfaceByCoord "Example" + @ManageTransactions("BasicOp") def MakeVertexOnSurfaceByCoord(self, theRefSurf, theX, theY, theZ, theName=None): """ Create a point by projection give coordinates on the given surface @@ -1324,6 +1352,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexInsideFace "Example" + @ManageTransactions("BasicOp") def MakeVertexInsideFace (self, theFace, theName=None): """ Create a point, which lays on the given face. @@ -1359,6 +1388,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref swig_MakeVertexOnLinesIntersection "Example" + @ManageTransactions("BasicOp") def MakeVertexOnLinesIntersection(self, theRefLine1, theRefLine2, theName=None): """ Create a point on intersection of two lines. @@ -1388,6 +1418,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created tangent. # # @ref swig_MakeTangentOnCurve "Example" + @ManageTransactions("BasicOp") def MakeTangentOnCurve(self, theRefCurve, theParameter, theName=None): """ Create a tangent, corresponding to the given parameter on the given curve. @@ -1422,6 +1453,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created tangent. # # @ref swig_MakeTangentPlaneOnFace "Example" + @ManageTransactions("BasicOp") def MakeTangentPlaneOnFace(self, theFace, theParameterU, theParameterV, theTrimSize, theName=None): """ Create a tangent plane, corresponding to the given parameter on the given face. @@ -1435,7 +1467,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created tangent. Example of usage: @@ -1457,6 +1489,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vector. # # @ref tui_creation_vector "Example" + @ManageTransactions("BasicOp") def MakeVectorDXDYDZ(self, theDX, theDY, theDZ, theName=None): """ Create a vector with the given components. @@ -1469,7 +1502,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vector. """ # Example: see GEOM_TestAll.py @@ -1490,6 +1523,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vector. # # @ref tui_creation_vector "Example" + @ManageTransactions("BasicOp") def MakeVector(self, thePnt1, thePnt2, theName=None): """ Create a vector between two points. @@ -1501,7 +1535,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vector. """ # Example: see GEOM_TestAll.py @@ -1521,6 +1555,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created line. # # @ref tui_creation_line "Example" + @ManageTransactions("BasicOp") def MakeLine(self, thePnt, theDir, theName=None): """ Create a line, passing through the given point @@ -1552,6 +1587,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created line. # # @ref tui_creation_line "Example" + @ManageTransactions("BasicOp") def MakeLineTwoPnt(self, thePnt1, thePnt2, theName=None): """ Create a line, passing through the given points @@ -1582,6 +1618,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created line. # # @ref swig_MakeLineTwoFaces "Example" + @ManageTransactions("BasicOp") def MakeLineTwoFaces(self, theFace1, theFace2, theName=None): """ Create a line on two faces intersection. @@ -1614,6 +1651,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlane(self, thePnt, theVec, theTrimSize, theName=None): """ Create a plane, passing through the given point @@ -1627,7 +1665,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created plane. """ # Example: see GEOM_TestAll.py @@ -1650,6 +1688,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlaneThreePnt(self, thePnt1, thePnt2, thePnt3, theTrimSize, theName=None): """ Create a plane, passing through the three given points @@ -1684,6 +1723,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlaneFace(self, theFace, theTrimSize, theName=None): """ Create a plane, similar to the existing one, but with another size of representing face. @@ -1718,6 +1758,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlane2Vec(self, theVec1, theVec2, theTrimSize, theName=None): """ Create a plane, passing through the 2 vectors @@ -1731,7 +1772,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created plane. """ # Example: see GEOM_TestAll.py @@ -1753,11 +1794,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created plane. # # @ref tui_creation_plane "Example" + @ManageTransactions("BasicOp") def MakePlaneLCS(self, theLCS, theTrimSize, theOrientation, theName=None): """ Create a plane, based on a Local coordinate system. - Parameters: + Parameters: theLCS coordinate system, defining plane. theTrimSize Half size of a side of quadrangle face, representing the plane. theOrientation OXY, OYZ or OZX orientation - (1, 2 or 3) @@ -1765,7 +1807,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created plane. """ # Example: see GEOM_TestAll.py @@ -1787,11 +1829,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created coordinate system. # # @ref swig_MakeMarker "Example" + @ManageTransactions("BasicOp") def MakeMarker(self, OX,OY,OZ, XDX,XDY,XDZ, YDX,YDY,YDZ, theName=None): """ Create a local coordinate system. - Parameters: + Parameters: OX,OY,OZ Three coordinates of coordinate system origin. XDX,XDY,XDZ Three components of OX direction YDX,YDY,YDZ Three components of OY direction @@ -1799,7 +1842,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created coordinate system. """ # Example: see GEOM_TestAll.py @@ -1819,6 +1862,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created coordinate system. # # @ref tui_creation_lcs "Example" + @ManageTransactions("BasicOp") def MakeMarkerFromShape(self, theShape, theName=None): """ Create a local coordinate system from shape. @@ -1828,8 +1872,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - - Returns: + + Returns: New GEOM.GEOM_Object, containing the created coordinate system. """ anObj = self.BasicOp.MakeMarkerFromShape(theShape) @@ -1848,6 +1892,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created coordinate system. # # @ref tui_creation_lcs "Example" + @ManageTransactions("BasicOp") def MakeMarkerPntTwoVec(self, theOrigin, theXVec, theYVec, theName=None): """ Create a local coordinate system from point and two vectors. @@ -1860,7 +1905,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created coordinate system. """ @@ -1886,6 +1931,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created arc. # # @ref swig_MakeArc "Example" + @ManageTransactions("CurvesOp") def MakeArc(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create an arc of circle, passing through three given points. @@ -1898,7 +1944,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created arc. """ # Example: see GEOM_TestAll.py @@ -1919,6 +1965,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created arc. # # @ref swig_MakeArc "Example" + @ManageTransactions("CurvesOp") def MakeArcCenter(self, thePnt1, thePnt2, thePnt3, theSense=False, theName=None): """ Create an arc of circle from a center and 2 points. @@ -1952,6 +1999,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created arc. # # @ref swig_MakeArc "Example" + @ManageTransactions("CurvesOp") def MakeArcOfEllipse(self, theCenter, thePnt1, thePnt2, theName=None): """ Create an arc of ellipse, of center and two points. @@ -1984,6 +2032,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created circle. # # @ref tui_creation_circle "Example" + @ManageTransactions("CurvesOp") def MakeCircle(self, thePnt, theVec, theR, theName=None): """ Create a circle with given center, normal vector and radius. @@ -2016,6 +2065,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing the created circle. + @ManageTransactions("CurvesOp") def MakeCircleR(self, theR, theName=None): """ Create a circle with given radius. @@ -2045,6 +2095,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created circle. # # @ref tui_creation_circle "Example" + @ManageTransactions("CurvesOp") def MakeCircleThreePnt(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create a circle, passing through three given points @@ -2075,6 +2126,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created circle. # # @ref swig_MakeCircle "Example" + @ManageTransactions("CurvesOp") def MakeCircleCenter2Pnt(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create a circle, with given point1 as center, @@ -2109,6 +2161,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created ellipse. # # @ref tui_creation_ellipse "Example" + @ManageTransactions("CurvesOp") def MakeEllipse(self, thePnt, theVec, theRMajor, theRMinor, theVecMaj=None, theName=None): """ Create an ellipse with given center, normal vector and radiuses. @@ -2123,7 +2176,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created ellipse. """ # Example: see GEOM_TestAll.py @@ -2148,6 +2201,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing the created ellipse. + @ManageTransactions("CurvesOp") def MakeEllipseRR(self, theRMajor, theRMinor, theName=None): """ Create an ellipse with given radiuses. @@ -2179,6 +2233,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created polyline. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakePolyline(self, thePoints, theIsClosed=False, theName=None): """ Create a polyline on the set of points. @@ -2209,6 +2264,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created bezier curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeBezier(self, thePoints, theIsClosed=False, theName=None): """ Create bezier curve on the set of points. @@ -2241,6 +2297,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created B-Spline curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeInterpol(self, thePoints, theIsClosed=False, theDoReordering=False, theName=None): """ Create B-Spline curve on the set of points. @@ -2254,7 +2311,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created B-Spline curve. """ # Example: see GEOM_TestAll.py @@ -2274,6 +2331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created B-Spline curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeInterpolWithTangents(self, thePoints, theFirstVec, theLastVec, theName=None): """ Create B-Spline curve on the set of points. @@ -2286,7 +2344,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created B-Spline curve. """ # Example: see GEOM_TestAll.py @@ -2312,6 +2370,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created curve. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeCurveParametric(self, thexExpr, theyExpr, thezExpr, theParamMin, theParamMax, theParamStep, theCurveType, theNewMethod=False, theName=None ): """ @@ -2339,7 +2398,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): if theNewMethod: anObj = self.CurvesOp.MakeCurveParametricNew(thexExpr,theyExpr,thezExpr,theParamMin,theParamMax,theParamStep,theCurveType) else: - anObj = self.CurvesOp.MakeCurveParametric(thexExpr,theyExpr,thezExpr,theParamMin,theParamMax,theParamStep,theCurveType) + anObj = self.CurvesOp.MakeCurveParametric(thexExpr,theyExpr,thezExpr,theParamMin,theParamMax,theParamStep,theCurveType) RaiseIfFailed("MakeSplineInterpolation", self.CurvesOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "curve") @@ -2359,6 +2418,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # a compound of edges. # # @ref tui_creation_curve "Example" + @ManageTransactions("CurvesOp") def MakeIsoline(self, theFace, IsUIsoline, theParameter, theName=None): """ Create an isoline curve on a face. @@ -2447,6 +2507,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_sketcher_page "Example" + @ManageTransactions("CurvesOp") def MakeSketcher(self, theCommand, theWorkingPlane = [0,0,0, 0,0,1, 1,0,0], theName=None): """ Create a sketcher (wire or face), following the textual description, passed @@ -2459,7 +2520,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): - CMD is one of - "R angle" : Set the direction by angle - "D dx dy" : Set the direction by DX & DY - + - "TT x y" : Create segment by point at X & Y - "T dx dy" : Create segment by point with DX & DY - "L length" : Create segment by direction & Length @@ -2476,11 +2537,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): - "WW" : Close Wire (to finish) - "WF" : Close Wire and build face (to finish) - + - Flag1 (= reverse) is 0 or 2 ... - if 0 the drawn arc is the one of lower angle (< Pi) - if 2 the drawn arc ius the one of greater angle (> Pi) - + - Flag2 (= control tolerance) is 0 or 1 ... - if 0 the specified end point can be at a distance of the arc greater than the tolerance (10^-7) - if 1 the wire is built only if the end point is on the arc @@ -2519,6 +2580,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_sketcher_page "Example" + @ManageTransactions("CurvesOp") def MakeSketcherOnPlane(self, theCommand, theWorkingPlane, theName=None): """ Create a sketcher (wire or face), following the textual description, @@ -2544,7 +2606,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## Obtain a 2D sketcher interface - # @return An instance of @ref gsketcher.Sketcher2D "Sketcher2D" interface + # @return An instance of @ref gsketcher.Sketcher2D "Sketcher2D" interface def Sketcher2D (self): """ Obtain a 2D sketcher interface. @@ -2562,7 +2624,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ sk = Sketcher2D (self) return sk - + ## Create a sketcher wire, following the numerical description, # passed through theCoordinates argument. \n # @param theCoordinates double values, defining points to create a wire, @@ -2574,6 +2636,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_3dsketcher_page "Example" + @ManageTransactions("CurvesOp") def Make3DSketcher(self, theCoordinates, theName=None): """ Create a sketcher wire, following the numerical description, @@ -2636,14 +2699,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def MakeBox(self, x1, y1, z1, x2, y2, z2, theName=None): """ Create a box by coordinates of two opposite vertices. - + Parameters: x1,y1,z1 double values, defining first point. x2,y2,z2 double values, defining second point. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: New GEOM.GEOM_Object, containing the created box. """ @@ -2666,6 +2729,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created box. # # @ref tui_creation_box "Example" + @ManageTransactions("PrimOp") def MakeBoxDXDYDZ(self, theDX, theDY, theDZ, theName=None): """ Create a box with specified dimensions along the coordinate axes @@ -2680,7 +2744,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created box. """ # Example: see GEOM_TestAll.py @@ -2702,6 +2766,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created box. # # @ref tui_creation_box "Example" + @ManageTransactions("PrimOp") def MakeBoxTwoPnt(self, thePnt1, thePnt2, theName=None): """ Create a box with two specified opposite vertices, @@ -2734,6 +2799,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("PrimOp") def MakeFaceHW(self, theH, theW, theOrientation, theName=None): """ Create a face with specified dimensions with edges parallel to coordinate axes. @@ -2770,6 +2836,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("PrimOp") def MakeFaceObjHW(self, theObj, theH, theW, theName=None): """ Create a face from another plane and two sizes, @@ -2806,6 +2873,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created disk. # # @ref tui_creation_disk "Example" + @ManageTransactions("PrimOp") def MakeDiskPntVecR(self, thePnt, theVec, theR, theName=None): """ Create a disk with given center, normal vector and radius. @@ -2818,7 +2886,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created disk. """ # Example: see GEOM_TestAll.py @@ -2838,6 +2906,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created disk. # # @ref tui_creation_disk "Example" + @ManageTransactions("PrimOp") def MakeDiskThreePnt(self, thePnt1, thePnt2, thePnt3, theName=None): """ Create a disk, passing through three given points @@ -2848,7 +2917,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created disk. """ # Example: see GEOM_TestAll.py @@ -2867,6 +2936,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created disk. # # @ref tui_creation_face "Example" + @ManageTransactions("PrimOp") def MakeDiskR(self, theR, theOrientation, theName=None): """ Create a disk with specified dimensions along OX-OY coordinate axes. @@ -2878,7 +2948,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created disk. Example of usage: @@ -2904,6 +2974,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cylinder. # # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") def MakeCylinder(self, thePnt, theAxis, theR, theH, theName=None): """ Create a cylinder with given base point, axis, radius and height. @@ -2917,7 +2988,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py @@ -2940,6 +3011,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cylinder. # # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") def MakeCylinderRH(self, theR, theH, theName=None): """ Create a cylinder with given radius and height at @@ -2953,7 +3025,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py @@ -2974,6 +3046,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created sphere. # # @ref tui_creation_sphere "Example" + @ManageTransactions("PrimOp") def MakeSpherePntR(self, thePnt, theR, theName=None): """ Create a sphere with given center and radius. @@ -2985,8 +3058,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: - New GEOM.GEOM_Object, containing the created sphere. + Returns: + New GEOM.GEOM_Object, containing the created sphere. """ # Example: see GEOM_TestAll.py theR,Parameters = ParseParameters(theR) @@ -3010,7 +3083,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Create a sphere with given center and radius. - Parameters: + Parameters: x,y,z Coordinates of sphere center. theR Sphere radius. theName Object name; when specified, this parameter is used @@ -3035,18 +3108,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created sphere. # # @ref tui_creation_sphere "Example" + @ManageTransactions("PrimOp") def MakeSphereR(self, theR, theName=None): """ Create a sphere with given radius at the origin of coordinate system. - Parameters: + Parameters: theR Sphere radius. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created sphere. + New GEOM.GEOM_Object, containing the created sphere. """ # Example: see GEOM_TestAll.py theR,Parameters = ParseParameters(theR) @@ -3071,11 +3145,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cone. # # @ref tui_creation_cone "Example" + @ManageTransactions("PrimOp") def MakeCone(self, thePnt, theAxis, theR1, theR2, theH, theName=None): """ Create a cone with given base point, axis, height and radiuses. - Parameters: + Parameters: thePnt Central point of the first cone base. theAxis Cone axis. theR1 Radius of the first cone base. @@ -3115,13 +3190,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created cone. # # @ref tui_creation_cone "Example" + @ManageTransactions("PrimOp") def MakeConeR1R2H(self, theR1, theR2, theH, theName=None): """ Create a cone with given height and radiuses at the origin of coordinate system. Axis of the cone will be collinear to the OZ axis of the coordinate system. - Parameters: + Parameters: theR1 Radius of the first cone base. theR2 Radius of the second cone base. theH Cone height. @@ -3156,11 +3232,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created torus. # # @ref tui_creation_torus "Example" + @ManageTransactions("PrimOp") def MakeTorus(self, thePnt, theVec, theRMajor, theRMinor, theName=None): """ Create a torus with given center, normal vector and radiuses. - Parameters: + Parameters: thePnt Torus central point. theVec Torus axis of symmetry. theRMajor Torus major radius. @@ -3190,11 +3267,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created torus. # # @ref tui_creation_torus "Example" + @ManageTransactions("PrimOp") def MakeTorusRR(self, theRMajor, theRMinor, theName=None): """ Create a torus with given radiuses at the origin of coordinate system. - Parameters: + Parameters: theRMajor Torus major radius. theRMinor Torus minor radius. theName Object name; when specified, this parameter is used @@ -3202,7 +3280,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created torus. + New GEOM.GEOM_Object, containing the created torus. """ # Example: see GEOM_TestAll.py theRMajor,theRMinor,Parameters = ParseParameters(theRMajor,theRMinor) @@ -3231,11 +3309,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrism(self, theBase, thePoint1, thePoint2, theScaleFactor = -1.0, theName=None): """ Create a shape by extrusion of the base shape along a vector, defined by two points. - Parameters: + Parameters: theBase Base shape to be extruded. thePoint1 First end of extrusion vector. thePoint2 Second end of extrusion vector. @@ -3273,12 +3352,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrism2Ways(self, theBase, thePoint1, thePoint2, theName=None): """ Create a shape by extrusion of the base shape along a vector, defined by two points, in 2 Ways (forward/backward). - Parameters: + Parameters: theBase Base shape to be extruded. thePoint1 First end of extrusion vector. thePoint2 Second end of extrusion vector. @@ -3310,13 +3390,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismVecH(self, theBase, theVec, theH, theScaleFactor = -1.0, theName=None): """ Create a shape by extrusion of the base shape along the vector, i.e. all the space, transfixed by the base shape during its translation along the vector on the given distance. - Parameters: + Parameters: theBase Base shape to be extruded. theVec Direction of extrusion. theH Prism dimension along theVec. @@ -3356,6 +3437,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismVecH2Ways(self, theBase, theVec, theH, theName=None): """ Create a shape by extrusion of the base shape along the vector, @@ -3393,6 +3475,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismDXDYDZ(self, theBase, theDX, theDY, theDZ, theScaleFactor = -1.0, theName=None): """ Create a shape by extrusion of the base shape along the dx, dy, dz direction @@ -3406,7 +3489,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created prism. """ # Example: see GEOM_TestAll.py @@ -3435,6 +3518,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created prism. # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakePrismDXDYDZ2Ways(self, theBase, theDX, theDY, theDZ, theName=None): """ Create a shape by extrusion of the base shape along the dx, dy, dz direction @@ -3472,6 +3556,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created revolution. # # @ref tui_creation_revolution "Example" + @ManageTransactions("PrimOp") def MakeRevolution(self, theBase, theAxis, theAngle, theName=None): """ Create a shape by revolution of the base shape around the axis @@ -3486,7 +3571,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created revolution. """ # Example: see GEOM_TestAll.py @@ -3511,6 +3596,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created revolution. # # @ref tui_creation_revolution "Example" + @ManageTransactions("PrimOp") def MakeRevolution2Ways(self, theBase, theAxis, theAngle, theName=None): """ Create a shape by revolution of the base shape around the axis @@ -3526,7 +3612,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created revolution. """ theAngle,Parameters = ParseParameters(theAngle) @@ -3556,6 +3642,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created filling surface. # # @ref tui_creation_filling "Example" + @ManageTransactions("PrimOp") def MakeFilling(self, theShape, theMinDeg=2, theMaxDeg=5, theTol2D=0.0001, theTol3D=0.0001, theNbIter=0, theMethod=GEOM.FOM_Default, isApprox=0, theName=None): """ @@ -3578,7 +3665,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created filling surface. Example of usage: @@ -3608,6 +3695,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created filling surface. # # @ref tui_creation_filling "Example" + @ManageTransactions("PrimOp") def MakeFillingNew(self, theShape, theMinDeg=2, theMaxDeg=5, theTol3D=0.0001, theName=None): """ Create a filling from the given compound of contours. @@ -3622,7 +3710,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created filling surface. Example of usage: @@ -3649,6 +3737,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created shell or solid. # # @ref swig_todo "Example" + @ManageTransactions("PrimOp") def MakeThruSections(self, theSeqSections, theModeSolid, thePreci, theRuled, theName=None): """ Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices. @@ -3682,6 +3771,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created pipe. # # @ref tui_creation_pipe "Example" + @ManageTransactions("PrimOp") def MakePipe(self, theBase, thePath, theName=None): """ Create a shape by extrusion of the base shape along @@ -3722,6 +3812,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created pipe. # # @ref tui_creation_pipe_with_diff_sec "Example" + @ManageTransactions("PrimOp") def MakePipeWithDifferentSections(self, theSeqBases, theLocations, thePath, theWithContact, theWithCorrection, theName=None): @@ -3782,6 +3873,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created solids. # # @ref tui_creation_pipe_with_shell_sec "Example" + @ManageTransactions("PrimOp") def MakePipeWithShellSections(self, theSeqBases, theSeqSubBases, theLocations, thePath, theWithContact, theWithCorrection, theName=None): @@ -3813,7 +3905,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created solids. """ anObj = self.PrimOp.MakePipeWithShellSections(theSeqBases, theSeqSubBases, @@ -3828,6 +3920,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # functionality - it is a version of function MakePipeWithShellSections() # which give a possibility to recieve information about # creating pipe between each pair of sections step by step. + @ManageTransactions("PrimOp") def MakePipeWithShellSectionsBySteps(self, theSeqBases, theSeqSubBases, theLocations, thePath, theWithContact, theWithCorrection, theName=None): @@ -3878,6 +3971,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created solids. # # @ref tui_creation_pipe_without_path "Example" + @ManageTransactions("PrimOp") def MakePipeShellsWithoutPath(self, theSeqBases, theLocations, theName=None): """ Create solids between given sections @@ -3912,6 +4006,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created pipe. # # @ref tui_creation_pipe "Example" + @ManageTransactions("PrimOp") def MakePipeBiNormalAlongVector(self, theBase, thePath, theVec, theName=None): """ Create a shape by extrusion of the base shape along @@ -3928,7 +4023,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created pipe. """ # Example: see GEOM_TestAll.py @@ -3936,7 +4031,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakePipeBiNormalAlongVector", self.PrimOp) self._autoPublish(anObj, theName, "pipe") return anObj - + ## Makes a thick solid from a face or a shell # @param theShape Face or Shell to be thicken # @param theThickness Thickness of the resulting solid @@ -3946,6 +4041,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @return New GEOM.GEOM_Object, containing the created solid # + @ManageTransactions("PrimOp") def MakeThickSolid(self, theShape, theThickness, theName=None): """ Make a thick solid from a face or a shell @@ -3956,7 +4052,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: New GEOM.GEOM_Object, containing the created solid """ @@ -3965,7 +4061,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakeThickening", self.PrimOp) self._autoPublish(anObj, theName, "pipe") return anObj - + ## Modifies a face or a shell to make it a thick solid # @param theShape Face or Shell to be thicken @@ -3973,6 +4069,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @return The modified shape # + @ManageTransactions("PrimOp") def Thicken(self, theShape, theThickness): """ Modifies a face or a shell to make it a thick solid @@ -4013,6 +4110,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # source pipe's "path". # # @ref tui_creation_pipe_path "Example" + @ManageTransactions("PrimOp") def RestorePath (self, theShape, theBase1, theBase2, theName=None): """ Build a middle path of a pipe-like shape. @@ -4057,6 +4155,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # source pipe's "path". # # @ref tui_creation_pipe_path "Example" + @ManageTransactions("PrimOp") def RestorePathEdges (self, theShape, listEdges1, listEdges2, theName=None): """ Build a middle path of a pipe-like shape. @@ -4096,6 +4195,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created edge. # # @ref tui_creation_edge "Example" + @ManageTransactions("ShapesOp") def MakeEdge(self, thePnt1, thePnt2, theName=None): """ Create a linear edge with specified ends. @@ -4107,7 +4207,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created edge. """ # Example: see GEOM_TestAll.py @@ -4129,6 +4229,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created edge. # # @ref tui_creation_edge "Example" + @ManageTransactions("ShapesOp") def MakeEdgeOnCurveByLength(self, theRefCurve, theLength, theStartPoint = None, theName=None): """ Create a new edge, corresponding to the given length on the given curve. @@ -4143,7 +4244,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created edge. """ # Example: see GEOM_TestAll.py @@ -4165,6 +4266,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created edge. # # @ref tui_creation_edge "Example" + @ManageTransactions("ShapesOp") def MakeEdgeWire(self, theWire, theLinearTolerance = 1e-07, theAngularTolerance = 1e-12, theName=None): """ Create an edge from specified wire. @@ -4197,6 +4299,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created wire. # # @ref tui_creation_wire "Example" + @ManageTransactions("ShapesOp") def MakeWire(self, theEdgesAndWires, theTolerance = 1e-07, theName=None): """ Create a wire from the set of edges and wires. @@ -4209,7 +4312,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created wire. """ # Example: see GEOM_TestAll.py @@ -4232,6 +4335,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("ShapesOp") def MakeFace(self, theWire, isPlanarWanted, theName=None): """ Create a face on the given wire. @@ -4273,6 +4377,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_creation_face "Example" + @ManageTransactions("ShapesOp") def MakeFaceWires(self, theWires, isPlanarWanted, theName=None): """ Create a face on the given wires set. @@ -4288,7 +4393,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. """ # Example: see GEOM_TestAll.py @@ -4322,6 +4427,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created shell. # # @ref tui_creation_shell "Example" + @ManageTransactions("ShapesOp") def MakeShell(self, theFacesAndShells, theName=None): """ Create a shell from the set of faces and shells. @@ -4350,6 +4456,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created solid. # # @ref tui_creation_solid "Example" + @ManageTransactions("ShapesOp") def MakeSolid(self, theShells, theName=None): """ Create a solid, bounded by the given shells. @@ -4365,7 +4472,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ # Example: see GEOM_TestAll.py if len(theShells) == 1: - descr = self.MeasuOp.IsGoodForSolid(theShells[0]) + descr = self._IsGoodForSolid(theShells[0]) #if len(descr) > 0: # raise RuntimeError, "MakeSolidShells : " + descr if descr == "WRN_SHAPE_UNCLOSED": @@ -4384,6 +4491,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created compound. # # @ref tui_creation_compound "Example" + @ManageTransactions("ShapesOp") def MakeCompound(self, theShapes, theName=None): """ Create a compound of the given shapes. @@ -4398,7 +4506,6 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created compound. """ # Example: see GEOM_TestAll.py - self.ShapesOp.StartOperation() anObj = self.ShapesOp.MakeCompound(theShapes) RaiseIfFailed("MakeCompound", self.ShapesOp) self._autoPublish(anObj, theName, "compound") @@ -4415,6 +4522,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of faces. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfFaces(self, theShape): """ Gives quantity of faces in the given shape. @@ -4422,7 +4530,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theShape Shape to count faces of. - Returns: + Returns: Quantity of faces. """ # Example: see GEOM_TestOthers.py @@ -4435,6 +4543,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of edges. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfEdges(self, theShape): """ Gives quantity of edges in the given shape. @@ -4442,7 +4551,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theShape Shape to count edges of. - Returns: + Returns: Quantity of edges. """ # Example: see GEOM_TestOthers.py @@ -4456,6 +4565,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of sub-shapes of given type. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfSubShapes(self, theShape, theShapeType): """ Gives quantity of sub-shapes of type theShapeType in the given shape. @@ -4477,6 +4587,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Quantity of solids. # # @ref swig_NumberOf "Example" + @ManageTransactions("ShapesOp") def NumberOfSolids(self, theShape): """ Gives quantity of solids in the given shape. @@ -4507,6 +4618,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return The reversed copy of theShape. # # @ref swig_ChangeOrientation "Example" + @ManageTransactions("ShapesOp") def ChangeOrientation(self, theShape, theName=None): """ Reverses an orientation the given shape. @@ -4517,7 +4629,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: The reversed copy of theShape. """ # Example: see GEOM_TestAll.py @@ -4550,6 +4662,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of IDs of all free faces, contained in theShape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("ShapesOp") def GetFreeFacesIDs(self,theShape): """ Retrieve all free faces from the given shape. @@ -4577,6 +4690,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of theShape1, shared with theShape2. # # @ref swig_GetSharedShapes "Example" + @ManageTransactions("ShapesOp") def GetSharedShapes(self, theShape1, theShape2, theShapeType, theName=None): """ Get all sub-shapes of theShape1 of the given type, shared with theShape2. @@ -4608,6 +4722,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of objects, that are sub-shapes of all given shapes. # # @ref swig_GetSharedShapes "Example" + @ManageTransactions("ShapesOp") def GetSharedShapesMulti(self, theShapes, theShapeType, theName=None): """ Get all sub-shapes, shared by all shapes in the list theShapes. @@ -4619,7 +4734,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of GEOM.GEOM_Object, that are sub-shapes of all given shapes. """ # Example: see GEOM_TestOthers.py @@ -4643,6 +4758,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnPlane "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlane(self, theShape, theShapeType, theAx1, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -4680,6 +4796,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnPlaneIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlaneIDs(self, theShape, theShapeType, theAx1, theState): """ Find in theShape all sub-shapes of type theShapeType, @@ -4717,6 +4834,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnPlaneWithLocation "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlaneWithLocation(self, theShape, theShapeType, theAx1, thePnt, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -4757,6 +4875,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnPlaneWithLocationIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnPlaneWithLocationIDs(self, theShape, theShapeType, theAx1, thePnt, theState): """ Find in theShape all sub-shapes of type theShapeType, @@ -4795,6 +4914,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnCylinder "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinder(self, theShape, theShapeType, theAxis, theRadius, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4832,6 +4952,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnCylinderIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinderIDs(self, theShape, theShapeType, theAxis, theRadius, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4869,6 +4990,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnCylinderWithLocation "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinderWithLocation(self, theShape, theShapeType, theAxis, thePnt, theRadius, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4907,6 +5029,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices # # @ref swig_GetShapesOnCylinderWithLocationIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnCylinderWithLocationIDs(self, theShape, theShapeType, theAxis, thePnt, theRadius, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4921,7 +5044,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theState The state of the sub-shapes to find (see GEOM::shape_state) Returns: - List of all found sub-shapes indices. + List of all found sub-shapes indices. """ # Example: see GEOM_TestOthers.py aList = self.ShapesOp.GetShapesOnCylinderWithLocationIDs(theShape, theShapeType, theAxis, thePnt, theRadius, theState) @@ -4942,6 +5065,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnSphere "Example" + @ManageTransactions("ShapesOp") def GetShapesOnSphere(self, theShape, theShapeType, theCenter, theRadius, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -4977,6 +5101,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnSphereIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnSphereIDs(self, theShape, theShapeType, theCenter, theRadius, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -5013,6 +5138,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnQuadrangle "Example" + @ManageTransactions("ShapesOp") def GetShapesOnQuadrangle(self, theShape, theShapeType, theTopLeftPoint, theTopRigthPoint, theBottomLeftPoint, theBottomRigthPoint, theState, theName=None): @@ -5056,6 +5182,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnQuadrangleIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnQuadrangleIDs(self, theShape, theShapeType, theTopLeftPoint, theTopRigthPoint, theBottomLeftPoint, theBottomRigthPoint, theState): @@ -5096,6 +5223,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnBox "Example" + @ManageTransactions("ShapesOp") def GetShapesOnBox(self, theBox, theShape, theShapeType, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -5129,6 +5257,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnBoxIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnBoxIDs(self, theBox, theShape, theShapeType, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively @@ -5153,7 +5282,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # certain way, defined through \a theState parameter. # @param theCheckShape Shape for relative comparing. It must be a solid. # @param theShape Shape to find sub-shapes of. - # @param theShapeType Type of sub-shapes to be retrieved (see ShapeType()) + # @param theShapeType Type of sub-shapes to be retrieved (see ShapeType()) # @param theState The state of the sub-shapes to find (see GEOM::shape_state) # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic @@ -5162,6 +5291,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes. # # @ref swig_GetShapesOnShape "Example" + @ManageTransactions("ShapesOp") def GetShapesOnShape(self, theCheckShape, theShape, theShapeType, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -5201,6 +5331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return All found sub-shapes as compound. # # @ref swig_GetShapesOnShapeAsCompound "Example" + @ManageTransactions("ShapesOp") def GetShapesOnShapeAsCompound(self, theCheckShape, theShape, theShapeType, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, @@ -5237,6 +5368,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of all found sub-shapes indices. # # @ref swig_GetShapesOnShapeIDs "Example" + @ManageTransactions("ShapesOp") def GetShapesOnShapeIDs(self, theCheckShape, theShape, theShapeType, theState): """ Find in theShape all sub-shapes of type theShapeType, @@ -5277,6 +5409,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @image html get_in_place_lost_part.png # # @ref swig_GetInPlace "Example" + @ManageTransactions("ShapesOp") def GetInPlace(self, theShapeWhere, theShapeWhat, isNewImplementation = False, theName=None): """ Get sub-shape(s) of theShapeWhere, which are @@ -5294,7 +5427,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Returns: Group of all found sub-shapes or a single found sub-shape. - + Note: This function has a restriction on argument shapes. If theShapeWhere has curved parts with significantly @@ -5331,6 +5464,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Group of all found sub-shapes or a single found sub-shape. # # @ref swig_GetInPlace "Example" + @ManageTransactions("ShapesOp") def GetInPlaceByHistory(self, theShapeWhere, theShapeWhat, theName=None): """ Implementation of this method is based on a saved history of an operation, @@ -5367,6 +5501,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object for found sub-shape. # # @ref swig_GetSame "Example" + @ManageTransactions("ShapesOp") def GetSame(self, theShapeWhere, theShapeWhat, theName=None): """ Get sub-shape of theShapeWhere, which is @@ -5392,9 +5527,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # equal to \a theShapeWhat. # @param theShapeWhere Shape to find sub-shape of. # @param theShapeWhat Shape, specifying what to find. - # @return List of all found sub-shapes indices. + # @return List of all found sub-shapes indices. # # @ref swig_GetSame "Example" + @ManageTransactions("ShapesOp") def GetSameIDs(self, theShapeWhere, theShapeWhat): """ Get sub-shape indices of theShapeWhere, which is @@ -5456,6 +5592,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return ID of found sub-shape. # # @ref swig_all_decompose "Example" + @ManageTransactions("LocalOp") def GetSubShapeID(self, aShape, aSubShape): """ Obtain unique ID of sub-shape aSubShape inside aShape @@ -5472,7 +5609,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): anID = self.LocalOp.GetSubShapeIndex(aShape, aSubShape) RaiseIfFailed("GetSubShapeIndex", self.LocalOp) return anID - + ## Obtain unique IDs of sub-shapes aSubShapes inside aShape # This function is provided for performance purpose. The complexity is O(n) with n # the number of subobjects of aShape @@ -5481,6 +5618,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return list of IDs of found sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def GetSubShapesIDs(self, aShape, aSubShapes): """ Obtain a list of IDs of sub-shapes aSubShapes inside aShape @@ -5513,6 +5651,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of existing sub-objects of \a theShape. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def GetExistingSubObjects(self, theShape, theGroupsOnly = False): """ Get all sub-shapes and groups of theShape, @@ -5537,6 +5676,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of existing groups of \a theShape. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def GetGroups(self, theShape): """ Get all groups of theShape, @@ -5556,7 +5696,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Explode a shape on sub-shapes of a given type. # If the shape itself matches the type, it is also returned. # @param aShape Shape to be exploded. - # @param aType Type of sub-shapes to be retrieved (see ShapeType()) + # @param aType Type of sub-shapes to be retrieved (see ShapeType()) # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -5564,6 +5704,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of type theShapeType, contained in theShape. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapeAll(self, aShape, aType, theName=None): """ Explode a shape on sub-shapes of a given type. @@ -5571,7 +5712,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: aShape Shape to be exploded. - aType Type of sub-shapes to be retrieved (see geompy.ShapeType) + aType Type of sub-shapes to be retrieved (see geompy.ShapeType) theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -5591,6 +5732,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of IDs of sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapeAllIDs(self, aShape, aType): """ Explode a shape on sub-shapes of a given type. @@ -5624,7 +5766,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Obtain a compound of sub-shapes of aShape, selected by their indices in list of all sub-shapes of type aType. Each index is in range [1, Nb_Sub-Shapes_Of_Given_Type] - + Parameters: aShape Shape to get sub-shape of. ListOfID List of sub-shapes indices. @@ -5657,20 +5799,21 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of type theShapeType, contained in theShape. # # @ref swig_SubShapeAllSorted "Example" + @ManageTransactions("ShapesOp") def SubShapeAllSortedCentres(self, aShape, aType, theName=None): """ Explode a shape on sub-shapes of a given type. Sub-shapes will be sorted by coordinates of their gravity centers. If the shape itself matches the type, it is also returned. - Parameters: + Parameters: aShape Shape to be exploded. aType Type of sub-shapes to be retrieved (see geompy.ShapeType) theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of sub-shapes of type theShapeType, contained in theShape. """ # Example: see GEOM_TestAll.py @@ -5686,16 +5829,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of IDs of sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapeAllSortedCentresIDs(self, aShape, aType): """ Explode a shape on sub-shapes of a given type. Sub-shapes will be sorted by coordinates of their gravity centers. - Parameters: + Parameters: aShape Shape to be exploded. aType Type of sub-shapes to be retrieved (see geompy.ShapeType) - Returns: + Returns: List of IDs of sub-shapes. """ ListIDs = self.ShapesOp.GetAllSubShapesIDs(aShape, EnumToLong( aType ), True) @@ -5752,6 +5896,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of sub-shapes of type aType, contained in aShape. # # @ref swig_FilletChamfer "Example" + @ManageTransactions("ShapesOp") def ExtractShapes(self, aShape, aType, isSorted = False, theName=None): """ Extract shapes (excluding the main shape) of given type. @@ -5764,7 +5909,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of sub-shapes of type aType, contained in aShape. """ # Example: see GEOM_TestAll.py @@ -5782,6 +5927,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, corresponding to found sub-shapes. # # @ref swig_all_decompose "Example" + @ManageTransactions("ShapesOp") def SubShapes(self, aShape, anIDs, theName=None): """ Get a set of sub-shapes defined by their unique IDs inside theMainShape @@ -5793,7 +5939,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: List of GEOM.GEOM_Object, corresponding to found sub-shapes. """ # Example: see GEOM_TestAll.py @@ -5811,6 +5957,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Deprecated method # It works like SubShapeAllSortedCentres(), but wrongly # defines centres of faces, shells and solids. + @ManageTransactions("ShapesOp") def SubShapeAllSorted(self, aShape, aType, theName=None): """ Deprecated method @@ -5825,6 +5972,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Deprecated method # It works like SubShapeAllSortedCentresIDs(), but wrongly # defines centres of faces, shells and solids. + @ManageTransactions("ShapesOp") def SubShapeAllSortedIDs(self, aShape, aType): """ Deprecated method @@ -5900,7 +6048,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # are coincidental. The curves or surfaces may still meet at an angle, giving rise to a sharp corner or edge).\n # \b C1 (Tangential Continuity): first derivatives are equal (the end vectors of curves or surfaces are parallel, # ruling out sharp edges).\n - # \b C2 (Curvature Continuity): first and second derivatives are equal (the end vectors of curves or surfaces + # \b C2 (Curvature Continuity): first and second derivatives are equal (the end vectors of curves or surfaces # are of the same magnitude).\n # \b CN N-th derivatives are equal (both the direction and the magnitude of the Nth derivatives of curves # or surfaces (d/du C(u)) are the same at junction. \n @@ -5939,6 +6087,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # \n @ref tui_shape_processing "Example" + @ManageTransactions("HealOp") def ProcessShape(self, theShape, theOperators, theParameters, theValues, theName=None): """ Apply a sequence of Shape Healing operators to the given object. @@ -5976,7 +6125,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): * SplitContinuity.SurfaceContinuity - required continuity for surfaces. * SplitContinuity.CurveContinuity - required continuity for curves. This and the previous parameters can take the following values: - + Parametric Continuity: C0 (Positional Continuity): curves are joined (the end positions of curves or surfaces are coincidental. The curves or surfaces may still meet at an angle, @@ -5987,7 +6136,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): or surfaces are of the same magnitude). CN N-th derivatives are equal (both the direction and the magnitude of the Nth derivatives of curves or surfaces (d/du C(u)) are the same at junction. - + Geometric Continuity: G1: first derivatives are proportional at junction. The curve tangents thus have the same direction, but not necessarily the same magnitude. @@ -6047,6 +6196,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_suppress_faces "Example" + @ManageTransactions("HealOp") def SuppressFaces(self, theObject, theFaces, theName=None): """ Remove faces from the given object (shape). @@ -6109,6 +6259,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing processed shape. + @ManageTransactions("HealOp") def Sew(self, theObject, theTolerance, AllowNonManifold=False, theName=None): """ Sewing of the given object. @@ -6148,6 +6299,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_remove_webs "Example" + @ManageTransactions("HealOp") def RemoveInternalFaces (self, theCompound, theName=None): """ Rebuild the topology of theCompound of solids by removing @@ -6179,6 +6331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_suppress_internal_wires "Example" + @ManageTransactions("HealOp") def SuppressInternalWires(self, theObject, theWires, theName=None): """ Remove internal wires and edges from the given object (face). @@ -6191,7 +6344,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py @@ -6211,6 +6364,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_suppress_holes "Example" + @ManageTransactions("HealOp") def SuppressHoles(self, theObject, theWires, theName=None): """ Remove internal closed contours (holes) from the given object. @@ -6223,7 +6377,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py @@ -6245,11 +6399,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_close_contour "Example" + @ManageTransactions("HealOp") def CloseContour(self,theObject, theWires, isCommonVertex, theName=None): """ Close an open wire. - Parameters: + Parameters: theObject Shape to be processed. theWires Indexes of edge(s) and wire(s) to be closed within theObject's shape, if [ ], then theObject itself is a wire. @@ -6259,8 +6414,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: - New GEOM.GEOM_Object, containing processed shape. + Returns: + New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py anObj = self.HealOp.CloseContour(theObject, theWires, isCommonVertex) @@ -6283,11 +6438,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_add_point_on_edge "Example" + @ManageTransactions("HealOp") def DivideEdge(self, theObject, theEdgeIndex, theValue, isByParameter, theName=None): """ Addition of a point to a given edge object. - Parameters: + Parameters: theObject Shape to be processed. theEdgeIndex Index of edge to be divided within theObject's shape, if -1, then theObject itself is the edge. @@ -6299,7 +6455,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py @@ -6321,11 +6477,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object with modified wire. # # @ref tui_fuse_collinear_edges "Example" + @ManageTransactions("HealOp") def FuseCollinearEdgesWithinWire(self, theWire, theVertices = [], theName=None): """ Suppress the vertices in the wire in case if adjacent edges are C1 continuous. - Parameters: + Parameters: theWire Wire to minimize the number of C1 continuous edges in. theVertices A list of vertices to suppress. If the list is empty, all vertices in a wire will be assumed. @@ -6333,7 +6490,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object with modified wire. """ anObj = self.HealOp.FuseCollinearEdgesWithinWire(theWire, theVertices) @@ -6346,14 +6503,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Updated theObject # # @ref swig_todo "Example" + @ManageTransactions("HealOp") def ChangeOrientationShell(self,theObject): """ Change orientation of the given object. Updates given shape. - Parameters: + Parameters: theObject Shape to be processed. - Returns: + Returns: Updated theObject """ theObject = self.HealOp.ChangeOrientation(theObject) @@ -6369,6 +6527,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref swig_todo "Example" + @ManageTransactions("HealOp") def ChangeOrientationShellCopy(self, theObject, theName=None): """ Change orientation of the given object. @@ -6379,7 +6538,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ anObj = self.HealOp.ChangeOrientationCopy(theObject) @@ -6397,6 +6556,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing processed shape. # # @ref tui_limit_tolerance "Example" + @ManageTransactions("HealOp") def LimitTolerance(self, theObject, theTolerance = 1e-07, theName=None): """ Try to limit tolerance of the given object by value theTolerance. @@ -6408,7 +6568,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing processed shape. """ anObj = self.HealOp.LimitTolerance(theObject, theTolerance) @@ -6429,6 +6589,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \n \a theOpenWires: Open wires on the free boundary of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("HealOp") def GetFreeBoundary(self, theObject, theName=None): """ Get a list of wires (wrapped in GEOM.GEOM_Object-s), @@ -6440,7 +6601,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: [status, theClosedWires, theOpenWires] status: FALSE, if an error(s) occured during the method execution. theClosedWires: Closed wires on the free boundary of the given shape. @@ -6465,6 +6626,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing a copy of theShape without coincident faces. # # @ref tui_glue_faces "Example" + @ManageTransactions("ShapesOp") def MakeGlueFaces(self, theShape, theTolerance, doKeepNonSolids=True, theName=None): """ Replace coincident faces in theShape by one face. @@ -6501,6 +6663,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return GEOM.ListOfGO # # @ref tui_glue_faces "Example" + @ManageTransactions("ShapesOp") def GetGlueFaces(self, theShape, theTolerance, theName=None): """ Find coincident faces in theShape for possible gluing. @@ -6513,7 +6676,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: GEOM.ListOfGO """ anObj = self.ShapesOp.GetGlueFaces(theShape, theTolerance) @@ -6540,6 +6703,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # without some faces. # # @ref tui_glue_faces "Example" + @ManageTransactions("ShapesOp") def MakeGlueFacesByList(self, theShape, theTolerance, theFaces, doKeepNonSolids=True, doGlueAllEdges=True, theName=None): """ @@ -6581,6 +6745,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing a copy of theShape without coincident edges. # # @ref tui_glue_edges "Example" + @ManageTransactions("ShapesOp") def MakeGlueEdges(self, theShape, theTolerance, theName=None): """ Replace coincident edges in theShape by one edge. @@ -6592,7 +6757,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing a copy of theShape without coincident edges. """ theTolerance,Parameters = ParseParameters(theTolerance) @@ -6614,6 +6779,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return GEOM.ListOfGO # # @ref tui_glue_edges "Example" + @ManageTransactions("ShapesOp") def GetGlueEdges(self, theShape, theTolerance, theName=None): """ Find coincident edges in theShape for possible gluing. @@ -6626,7 +6792,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: GEOM.ListOfGO """ anObj = self.ShapesOp.GetGlueEdges(theShape, theTolerance) @@ -6648,6 +6814,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # without some edges. # # @ref tui_glue_edges "Example" + @ManageTransactions("ShapesOp") def MakeGlueEdgesByList(self, theShape, theTolerance, theEdges, theName=None): """ Replace coincident edges in theShape by one edge @@ -6662,7 +6829,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing a copy of theShape without some edges. """ @@ -6704,11 +6871,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fuse "Example" + @ManageTransactions("BoolOp") def MakeBoolean(self, theShape1, theShape2, theOperation, checkSelfInte=False, theName=None): """ Perform one of boolean operations on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. theOperation Indicates the operation to be done: @@ -6729,7 +6897,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestAll.py @@ -6764,7 +6932,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Perform Common boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6783,7 +6951,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestOthers.py @@ -6815,7 +6983,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Perform Cut boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6834,9 +7002,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py # note: auto-publishing is done in self.MakeBoolean() @@ -6865,12 +7033,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_fuse "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeFuse(self, theShape1, theShape2, checkSelfInte=False, rmExtraEdges=False, theName=None): """ Perform Fuse boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6891,9 +7060,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeFuse(theShape1, theShape2, @@ -6927,7 +7096,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Perform Section boolean operation on two given shapes. - Parameters: + Parameters: theShape1 First argument for boolean operation. theShape2 Second argument for boolean operation. checkSelfInte The flag that tells if the arguments should @@ -6946,9 +7115,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py # note: auto-publishing is done in self.MakeBoolean() @@ -6976,12 +7145,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_fuse "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeFuseList(self, theShapesList, checkSelfInte=False, rmExtraEdges=False, theName=None): """ Perform Fuse boolean operation on the list of shapes. - Parameters: + Parameters: theShapesList Shapes to be fused. checkSelfInte The flag that tells if the arguments should be checked for self-intersection prior to @@ -7001,9 +7171,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeFuseList(theShapesList, checkSelfInte, @@ -7032,11 +7202,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_common "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeCommonList(self, theShapesList, checkSelfInte=False, theName=None): """ Perform Common boolean operation on the list of shapes. - Parameters: + Parameters: theShapesList Shapes for Common operation. checkSelfInte The flag that tells if the arguments should be checked for self-intersection prior to @@ -7054,9 +7225,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeCommonList(theShapesList, checkSelfInte) @@ -7085,11 +7256,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_cut "Example 1" # \n @ref swig_MakeCommon "Example 2" + @ManageTransactions("BoolOp") def MakeCutList(self, theMainShape, theShapesList, checkSelfInte=False, theName=None): """ Perform Cut boolean operation on one object and the list of tools. - Parameters: + Parameters: theMainShape The object of the operation. theShapesList The list of tools of the operation. checkSelfInte The flag that tells if the arguments should @@ -7108,9 +7280,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): To find all self-intersections please use CheckSelfIntersections() method. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - + """ # Example: see GEOM_TestOthers.py anObj = self.BoolOp.MakeCutList(theMainShape, theShapesList, checkSelfInte) @@ -7156,13 +7328,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shapes. # # @ref tui_partition "Example" + @ManageTransactions("BoolOp") def MakePartition(self, ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[], Limit=ShapeType["AUTO"], RemoveWebs=0, ListMaterials=[], KeepNonlimitShapes=0, theName=None): """ Perform partition operation. - Parameters: + Parameters: ListShapes Shapes to be intersected. ListTools Shapes to intersect theShapes. Limit Type of resulting shapes (see geompy.ShapeType) @@ -7180,11 +7353,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Each compound from ListShapes and ListTools will be exploded in order to avoid possible intersection between shapes from this compound. - + After implementation new version of PartitionAlgo (October 2006) other parameters are ignored by current functionality. They are kept in this function only for support old versions. - + Ignored parameters: ListKeepInside Shapes, outside which the results will be deleted. Each shape from theKeepInside must belong to theShapes also. @@ -7193,7 +7366,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RemoveWebs If TRUE, perform Glue 3D algorithm. ListMaterials Material indices for each shape. Make sence, only if theRemoveWebs is TRUE. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shapes. """ # Example: see GEOM_TestAll.py @@ -7235,6 +7408,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shapes. # # @ref swig_todo "Example" + @ManageTransactions("BoolOp") def MakePartitionNonSelfIntersectedShape(self, ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[], Limit=ShapeType["AUTO"], RemoveWebs=0, @@ -7246,7 +7420,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): compound contains nonintersected shapes. Performance will be better since intersection between shapes from compound is not performed. - Parameters: + Parameters: Description of all parameters as in method geompy.MakePartition. One additional parameter is provided: checkSelfInte The flag that tells if the arguments should @@ -7261,12 +7435,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): time-consuming operation that gives an impact on performance. To find all self-intersections please use CheckSelfIntersections() method. - + NOTE: Passed compounds (via ListShapes or via ListTools) have to consist of nonintersecting shapes. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shapes. """ if Limit == self.ShapeType["AUTO"]: @@ -7311,18 +7485,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_partition "Example" + @ManageTransactions("BoolOp") def MakeHalfPartition(self, theShape, thePlane, theName=None): """ Perform partition of the Shape with the Plane - Parameters: + Parameters: theShape Shape to be intersected. thePlane Tool shape, to intersect theShape. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestAll.py @@ -7345,17 +7520,18 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to translate object itself or create a copy. # @return Translated @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def TranslateTwoPoints(self, theObject, thePoint1, thePoint2, theCopy=False): """ Translate the given object along the vector, specified by its end points. - Parameters: + Parameters: theObject The object to be translated. thePoint1 Start point of translation vector. thePoint2 End point of translation vector. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7379,12 +7555,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_translation "Example 1" # \n @ref swig_MakeTranslationTwoPoints "Example 2" + @ManageTransactions("TrsfOp") def MakeTranslationTwoPoints(self, theObject, thePoint1, thePoint2, theName=None): """ Translate the given object along the vector, specified by its end points, creating its copy before the translation. - Parameters: + Parameters: theObject The object to be translated. thePoint1 Start point of translation vector. thePoint2 End point of translation vector. @@ -7392,7 +7569,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7409,16 +7586,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def TranslateDXDYDZ(self, theObject, theDX, theDY, theDZ, theCopy=False): """ Translate the given object along the vector, specified by its components. - Parameters: + Parameters: theObject The object to be translated. theDX,theDY,theDZ Components of translation vector. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7443,19 +7621,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the translated object. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def MakeTranslation(self,theObject, theDX, theDY, theDZ, theName=None): """ Translate the given object along the vector, specified by its components, creating its copy before the translation. - Parameters: + Parameters: theObject The object to be translated. theDX,theDY,theDZ Components of translation vector. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7472,16 +7651,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to translate object itself or create a copy. # @return Translated @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def TranslateVector(self, theObject, theVector, theCopy=False): """ Translate the given object along the given vector. - Parameters: + Parameters: theObject The object to be translated. theVector The translation vector. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7503,19 +7683,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the translated object. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def MakeTranslationVector(self, theObject, theVector, theName=None): """ Translate the given object along the given vector, creating its copy before the translation. - Parameters: + Parameters: theObject The object to be translated. theVector The translation vector. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7533,17 +7714,18 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the translated object if @a theCopy flag is @c True. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def TranslateVectorDistance(self, theObject, theVector, theDistance, theCopy=False): """ Translate the given object along the given vector on given distance. - Parameters: + Parameters: theObject The object to be translated. theVector The translation vector. theDistance The translation distance. theCopy Flag used to translate object itself or create a copy. - Returns: + Returns: Translated theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the translated object if theCopy flag is True. """ @@ -7566,6 +7748,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the translated object. # # @ref tui_translation "Example" + @ManageTransactions("TrsfOp") def MakeTranslationVectorDistance(self, theObject, theVector, theDistance, theName=None): """ Translate the given object along the given vector on given distance, @@ -7579,7 +7762,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the translated object. """ # Example: see GEOM_TestAll.py @@ -7600,6 +7783,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the rotated object if @a theCopy flag is @c True. # # @ref tui_rotation "Example" + @ManageTransactions("TrsfOp") def Rotate(self, theObject, theAxis, theAngle, theCopy=False): """ Rotate the given object around the given axis on the given angle. @@ -7641,6 +7825,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the rotated object. # # @ref tui_rotation "Example" + @ManageTransactions("TrsfOp") def MakeRotation(self, theObject, theAxis, theAngle, theName=None): """ Rotate the given object around the given axis @@ -7679,6 +7864,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to rotate object itself or create a copy. # @return Rotated @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the rotated object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def RotateThreePoints(self, theObject, theCentPoint, thePoint1, thePoint2, theCopy=False): """ Rotate given object around vector perpendicular to plane @@ -7715,6 +7901,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the rotated object. # # @ref tui_rotation "Example" + @ManageTransactions("TrsfOp") def MakeRotationThreePoints(self, theObject, theCentPoint, thePoint1, thePoint2, theName=None): """ Rotate given object around vector perpendicular to plane @@ -7746,6 +7933,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to scale object itself or create a copy. # @return Scaled @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the scaled object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def Scale(self, theObject, thePoint, theFactor, theCopy=False): """ Scale the given object by the specified factor. @@ -7757,7 +7945,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theFactor Scaling factor value. theCopy Flag used to scale object itself or create a copy. - Returns: + Returns: Scaled theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the scaled object if theCopy flag is True. """ @@ -7783,6 +7971,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the scaled shape. # # @ref tui_scale "Example" + @ManageTransactions("TrsfOp") def MakeScaleTransform(self, theObject, thePoint, theFactor, theName=None): """ Scale the given object by the factor, creating its copy before the scaling. @@ -7796,7 +7985,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the scaled shape. """ # Example: see GEOM_TestAll.py @@ -7815,6 +8004,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to scale object itself or create a copy. # @return Scaled @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the scaled object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def ScaleAlongAxes(self, theObject, thePoint, theFactorX, theFactorY, theFactorZ, theCopy=False): """ Scale the given object by different factors along coordinate axes. @@ -7826,7 +8016,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theFactorX,theFactorY,theFactorZ Scaling factors along each axis. theCopy Flag used to scale object itself or create a copy. - Returns: + Returns: Scaled theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the scaled object if theCopy flag is True. """ @@ -7855,6 +8045,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the scaled shape. # # @ref swig_scale "Example" + @ManageTransactions("TrsfOp") def MakeScaleAlongAxes(self, theObject, thePoint, theFactorX, theFactorY, theFactorZ, theName=None): """ Scale the given object by different factors along coordinate axes, @@ -7887,6 +8078,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to mirror object itself or create a copy. # @return Mirrored @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the mirrored object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def MirrorByPlane(self, theObject, thePlane, theCopy=False): """ Mirror an object relatively the given plane. @@ -7918,6 +8110,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the mirrored shape. # # @ref tui_mirror "Example" + @ManageTransactions("TrsfOp") def MakeMirrorByPlane(self, theObject, thePlane, theName=None): """ Create an object, symmetrical to the given one relatively the given plane. @@ -7944,6 +8137,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to mirror object itself or create a copy. # @return Mirrored @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the mirrored object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def MirrorByAxis(self, theObject, theAxis, theCopy=False): """ Mirror an object relatively the given axis. @@ -7975,6 +8169,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the mirrored shape. # # @ref tui_mirror "Example" + @ManageTransactions("TrsfOp") def MakeMirrorByAxis(self, theObject, theAxis, theName=None): """ Create an object, symmetrical to the given one relatively the given axis. @@ -7986,7 +8181,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the mirrored shape. """ # Example: see GEOM_TestAll.py @@ -8001,6 +8196,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to mirror object itself or create a copy. # @return Mirrored @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the mirrored object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def MirrorByPoint(self, theObject, thePoint, theCopy=False): """ Mirror an object relatively the given point. @@ -8033,6 +8229,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the mirrored shape. # # @ref tui_mirror "Example" + @ManageTransactions("TrsfOp") def MakeMirrorByPoint(self, theObject, thePoint, theName=None): """ Create an object, symmetrical @@ -8045,7 +8242,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the mirrored shape. """ # Example: see GEOM_TestAll.py @@ -8065,6 +8262,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to displace object itself or create a copy. # @return Displaced @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the displaced object if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def Position(self, theObject, theStartLCS, theEndLCS, theCopy=False): """ Modify the Location of the given object by LCS, creating its copy before the setting. @@ -8107,6 +8305,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the displaced shape. # # @ref tui_modify_location "Example" + @ManageTransactions("TrsfOp") def MakePosition(self, theObject, theStartLCS, theEndLCS, theName=None): """ Modify the Location of the given object by LCS, creating its copy before the setting. @@ -8123,7 +8322,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the displaced shape. Example of usage: @@ -8149,6 +8348,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # new GEOM.GEOM_Object, containing the displaced shape if @a theCopy is @c True. # # @ref tui_modify_location "Example" + @ManageTransactions("TrsfOp") def PositionAlongPath(self,theObject, thePath, theDistance, theCopy, theReverse): """ Modify the Location of the given object by Path. @@ -8160,7 +8360,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theCopy is to create a copy objects if true. theReverse 0 - for usual direction, 1 - to reverse path direction. - Returns: + Returns: Displaced theObject (GEOM.GEOM_Object) if theCopy is False or new GEOM.GEOM_Object, containing the displaced shape if theCopy is True. @@ -8182,6 +8382,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # publication is switched on, default value is used for result name. # # @return New GEOM.GEOM_Object, containing the displaced shape. + @ManageTransactions("TrsfOp") def MakePositionAlongPath(self, theObject, thePath, theDistance, theReverse, theName=None): """ Modify the Location of the given object by Path, creating its copy before the operation. @@ -8195,7 +8396,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the displaced shape. """ # Example: see GEOM_TestAll.py @@ -8210,6 +8411,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theCopy Flag used to offset object itself or create a copy. # @return Modified @a theObject (GEOM.GEOM_Object) if @a theCopy flag is @c False (default) or # new GEOM.GEOM_Object, containing the result of offset operation if @a theCopy flag is @c True. + @ManageTransactions("TrsfOp") def Offset(self, theObject, theOffset, theCopy=False): """ Offset given shape. @@ -8219,7 +8421,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theOffset Offset value. theCopy Flag used to offset object itself or create a copy. - Returns: + Returns: Modified theObject (GEOM.GEOM_Object) if theCopy flag is False (default) or new GEOM.GEOM_Object, containing the result of offset operation if theCopy flag is True. """ @@ -8242,6 +8444,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the offset object. # # @ref tui_offset "Example" + @ManageTransactions("TrsfOp") def MakeOffset(self, theObject, theOffset, theName=None): """ Create new object as offset of the given one. @@ -8253,7 +8456,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the offset object. Example of usage: @@ -8279,6 +8482,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the projection. # # @ref tui_projection "Example" + @ManageTransactions("TrsfOp") def MakeProjection(self, theSource, theTarget, theName=None): """ Create new object as projection of the given one on a 2D surface. @@ -8290,7 +8494,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the projection. """ # Example: see GEOM_TestAll.py @@ -8298,7 +8502,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("ProjectShapeCopy", self.TrsfOp) self._autoPublish(anObj, theName, "projection") return anObj - + ## Create a projection projection of the given point on a wire or an edge. # If there are no solutions or there are 2 or more solutions It throws an # exception. @@ -8314,19 +8518,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \n \a EdgeInWireIndex: The index of an edge in a wire. # # @ref tui_projection "Example" + @ManageTransactions("TrsfOp") def MakeProjectionOnWire(self, thePoint, theWire, theName=None): """ Create a projection projection of the given point on a wire or an edge. If there are no solutions or there are 2 or more solutions It throws an exception. - + Parameters: thePoint the point to be projected. theWire the wire. The edge is accepted as well. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: [u, PointOnEdge, EdgeInWireIndex] u: The parameter of projection point on edge. @@ -8356,6 +8561,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # the shapes, obtained after each translation. # # @ref tui_multi_translation "Example" + @ManageTransactions("TrsfOp") def MakeMultiTranslation1D(self, theObject, theVector, theStep, theNbTimes, theName=None): """ Translate the given object along the given vector a given number times @@ -8369,7 +8575,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each translation. @@ -8400,6 +8606,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # the shapes, obtained after each translation. # # @ref tui_multi_translation "Example" + @ManageTransactions("TrsfOp") def MakeMultiTranslation2D(self, theObject, theVector1, theStep1, theNbTimes1, theVector2, theStep2, theNbTimes2, theName=None): """ @@ -8446,6 +8653,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each rotation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate1DNbTimes (self, theObject, theAxis, theNbTimes, theName=None): """ Rotate the given object around the given axis a given number times. @@ -8459,7 +8667,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each rotation. @@ -8488,6 +8696,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each rotation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate1DByStep(self, theObject, theAxis, theAngleStep, theNbTimes, theName=None): """ Rotate the given object around the given axis @@ -8502,7 +8711,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each rotation. @@ -8535,6 +8744,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each transformation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate2DNbTimes(self, theObject, theAxis, theNbTimes1, theRadialStep, theNbTimes2, theName=None): """ Rotate the given object around the @@ -8553,7 +8763,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each transformation. @@ -8587,6 +8797,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # shapes, obtained after each transformation. # # @ref tui_multi_rotation "Example" + @ManageTransactions("TrsfOp") def MultiRotate2DByStep (self, theObject, theAxis, theAngleStep, theNbTimes1, theRadialStep, theNbTimes2, theName=None): """ Rotate the given object around the @@ -8606,7 +8817,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing compound of all the shapes, obtained after each transformation. @@ -8663,7 +8874,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def MakeMultiRotation2DNbTimes(self, aShape, aDir, aPoint, nbtimes1, aStep, nbtimes2, theName=None): """ The same, as MultiRotate2DNbTimes(), but axis is given by direction and point - + Example of usage: pz = geompy.MakeVertex(0, 0, 100) vy = geompy.MakeVectorDXDYDZ(0, 100, 0) @@ -8681,7 +8892,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def MakeMultiRotation2DByStep(self, aShape, aDir, aPoint, anAngle, nbtimes1, aStep, nbtimes2, theName=None): """ The same, as MultiRotate2DByStep(), but axis is given by direction and point - + Example of usage: pz = geompy.MakeVertex(0, 0, 100) vy = geompy.MakeVectorDXDYDZ(0, 100, 0) @@ -8709,6 +8920,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## The same, as MultiRotate2DByStep(), but theAngle is in degrees. # This method is DEPRECATED. Use MultiRotate2DByStep() instead. + @ManageTransactions("TrsfOp") def MultiRotate2D(self, theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2, theName=None): """ The same, as MultiRotate2DByStep(), but theAngle is in degrees. @@ -8749,7 +8961,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ The same, as MultiRotate2D(), but axis is given by direction and point This method is DEPRECATED. Use MakeMultiRotation2DByStep instead. - + Example of usage: pz = geompy.MakeVertex(0, 0, 100) vy = geompy.MakeVectorDXDYDZ(0, 100, 0) @@ -8778,6 +8990,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_fillet "Example 1" # \n @ref swig_MakeFilletAll "Example 2" + @ManageTransactions("LocalOp") def MakeFilletAll(self, theShape, theR, theName=None): """ Perform a fillet on all edges of the given shape. @@ -8789,10 +9002,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - Example of usage: + Example of usage: filletall = geompy.MakeFilletAll(prism, 10.) """ # Example: see GEOM_TestOthers.py @@ -8817,6 +9030,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fillet "Example" + @ManageTransactions("LocalOp") def MakeFillet(self, theShape, theR, theShapeType, theListShapes, theName=None): """ Perform a fillet on the specified edges/faces of the given shape @@ -8833,7 +9047,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -8860,6 +9074,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## The same that MakeFillet() but with two Fillet Radius R1 and R2 + @ManageTransactions("LocalOp") def MakeFilletR1R2(self, theShape, theR1, theR2, theShapeType, theListShapes, theName=None): """ The same that geompy.MakeFillet but with two Fillet Radius R1 and R2 @@ -8906,6 +9121,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fillet2d "Example" + @ManageTransactions("LocalOp") def MakeFillet1D(self, theShape, theR, theListOfVertexes, doIgnoreSecantVertices = True, theName=None): """ Perform a fillet on the specified edges of the given shape @@ -8928,10 +9144,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): The list of vertices could be empty,in this case fillet will done done at all vertices in wire - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. - Example of usage: + Example of usage: # create wire Wire_1 = geompy.MakeWire([Edge_12, Edge_7, Edge_11, Edge_6, Edge_1,Edge_4]) # make fillet at given wire vertices with giver radius @@ -8958,6 +9174,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_fillet2d "Example" + @ManageTransactions("LocalOp") def MakeFillet2D(self, theShape, theR, theListOfVertexes, theName=None): """ Perform a fillet at the specified vertices of the given face/shell. @@ -8972,7 +9189,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -8998,6 +9215,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_chamfer "Example 1" # \n @ref swig_MakeChamferAll "Example 2" + @ManageTransactions("LocalOp") def MakeChamferAll(self, theShape, theD, theName=None): """ Perform a symmetric chamfer on all edges of the given shape. @@ -9009,7 +9227,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -9038,6 +9256,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_chamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferEdge(self, theShape, theD1, theD2, theFace1, theFace2, theName=None): """ Perform a chamfer on edges, common to the specified faces, @@ -9055,7 +9274,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -9084,6 +9303,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @note Global index of sub-shape can be obtained, using method GetSubShapeID(). # # @return New GEOM.GEOM_Object, containing the result shape. + @ManageTransactions("LocalOp") def MakeChamferEdgeAD(self, theShape, theD, theAngle, theFace1, theFace2, theName=None): """ Perform a chamfer on edges @@ -9100,7 +9320,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. Example of usage: @@ -9139,6 +9359,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_chamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferFaces(self, theShape, theD1, theD2, theFaces, theName=None): """ Perform a chamfer on all edges of the specified faces, @@ -9154,10 +9375,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Note: Global index of sub-shape can be obtained, using method geompy.GetSubShapeID(). - Returns: + Returns: New GEOM.GEOM_Object, containing the result shape. """ # Example: see GEOM_TestAll.py @@ -9172,6 +9393,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # theAngle is Angle of chamfer (angle in radians or a name of variable which defines angle in degrees) # # @ref swig_FilletChamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferFacesAD(self, theShape, theD, theAngle, theFaces, theName=None): """ The Same that geompy.MakeChamferFaces but with params theD is chamfer lenght and @@ -9201,11 +9423,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref swig_FilletChamfer "Example" + @ManageTransactions("LocalOp") def MakeChamferEdges(self, theShape, theD1, theD2, theEdges, theName=None): """ Perform a chamfer on edges, with distance D1 on the first specified face (if several for one edge) - + Parameters: theShape Shape, to perform chamfer on. theD1,theD2 Chamfer size @@ -9226,6 +9449,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## The Same that MakeChamferEdges() but with params theD is chamfer lenght and # theAngle is Angle of chamfer (angle in radians or a name of variable which defines angle in degrees) + @ManageTransactions("LocalOp") def MakeChamferEdgesAD(self, theShape, theD, theAngle, theEdges, theName=None): """ The Same that geompy.MakeChamferEdges but with params theD is chamfer lenght and @@ -9258,9 +9482,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): else: anObj = self.MakeChamferFaces(aShape,d1,d2,ListShape,theName) return anObj - + ## Remove material from a solid by extrusion of the base shape on the given distance. - # @param theInit Shape to remove material from. It must be a solid or + # @param theInit Shape to remove material from. It must be a solid or # a compound made of a single solid. # @param theBase Closed edge or wire defining the base shape to be extruded. # @param theH Prism dimension along the normal to theBase @@ -9269,9 +9493,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the initial shape with removed material + # @return New GEOM.GEOM_Object, containing the initial shape with removed material # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakeExtrudedCut(self, theInit, theBase, theH, theAngle, theName=None): """ Add material to a solid by extrusion of the base shape on the given distance. @@ -9294,10 +9519,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakeExtrudedBoss", self.PrimOp) #anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "extrudedCut") - return anObj - + return anObj + ## Add material to a solid by extrusion of the base shape on the given distance. - # @param theInit Shape to add material to. It must be a solid or + # @param theInit Shape to add material to. It must be a solid or # a compound made of a single solid. # @param theBase Closed edge or wire defining the base shape to be extruded. # @param theH Prism dimension along the normal to theBase @@ -9306,9 +9531,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the initial shape with added material + # @return New GEOM.GEOM_Object, containing the initial shape with added material # # @ref tui_creation_prism "Example" + @ManageTransactions("PrimOp") def MakeExtrudedBoss(self, theInit, theBase, theH, theAngle, theName=None): """ Add material to a solid by extrusion of the base shape on the given distance. @@ -9331,7 +9557,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): RaiseIfFailed("MakeExtrudedBoss", self.PrimOp) #anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "extrudedBoss") - return anObj + return anObj # end of l3_local ## @} @@ -9353,12 +9579,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # by a plane, corresponding to water level. # # @ref tui_archimede "Example" + @ManageTransactions("LocalOp") def Archimede(self, theShape, theWeight, theWaterDensity, theMeshDeflection, theName=None): """ Perform an Archimde operation on the given shape with given parameters. The object presenting the resulting face is returned. - Parameters: + Parameters: theShape Shape to be put in water. theWeight Weight og the shape. theWaterDensity Density of the water. @@ -9367,7 +9594,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing a section of theShape by a plane, corresponding to water level. """ @@ -9390,6 +9617,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return [x, y, z] # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def PointCoordinates(self,Point): """ Get point coordinates @@ -9400,8 +9628,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Example: see GEOM_TestMeasures.py aTuple = self.MeasuOp.PointCoordinates(Point) RaiseIfFailed("PointCoordinates", self.MeasuOp) - return aTuple - + return aTuple + ## Get vector coordinates # @return [x, y, z] # @@ -9416,7 +9644,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): p1=self.GetFirstVertex(Vector) p2=self.GetLastVertex(Vector) - + X1=self.PointCoordinates(p1) X2=self.PointCoordinates(p2) @@ -9428,31 +9656,31 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_measurement_tools_page "Example" def CrossProduct(self, Vector1, Vector2): - """ + """ Compute cross product - + Returns: vector w=u^v """ u=self.VectorCoordinates(Vector1) v=self.VectorCoordinates(Vector2) w=self.MakeVectorDXDYDZ(u[1]*v[2]-u[2]*v[1], u[2]*v[0]-u[0]*v[2], u[0]*v[1]-u[1]*v[0]) - + return w - + ## Compute cross product # @return dot product p=u.v # # @ref tui_measurement_tools_page "Example" def DotProduct(self, Vector1, Vector2): - """ + """ Compute cross product - + Returns: dot product p=u.v """ u=self.VectorCoordinates(Vector1) v=self.VectorCoordinates(Vector2) p=u[0]*v[0]+u[1]*v[1]+u[2]*v[2] - + return p @@ -9465,12 +9693,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # theVolume: Volume of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def BasicProperties(self,theShape): """ Get summarized length of all wires, area of surface and volume of the given shape. - Parameters: + Parameters: theShape Shape to define properties of. Returns: @@ -9493,11 +9722,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Zmin,Zmax: Limits of shape along OZ axis. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def BoundingBox (self, theShape, precise=False): """ Get parameters of bounding box of the given shape - Parameters: + Parameters: theShape Shape to obtain bounding box of. precise TRUE for precise computation; FALSE for fast one. @@ -9522,11 +9752,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created box. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def MakeBoundingBox (self, theShape, precise=False, theName=None): """ Get bounding box of the given shape - Parameters: + Parameters: theShape Shape to obtain bounding box of. precise TRUE for precise computation; FALSE for fast one. theName Object name; when specified, this parameter is used @@ -9549,11 +9780,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Ix,Iy,Iz: Moments of inertia of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def Inertia(self,theShape): """ Get inertia matrix and moments of inertia of theShape. - Parameters: + Parameters: theShape Shape to calculate inertia of. Returns: @@ -9571,11 +9803,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param coords list of points coordinates [x1, y1, z1, x2, y2, z2, ...] # @param tolerance to be used (default is 1.0e-7) # @return list_of_boolean = [res1, res2, ...] + @ManageTransactions("MeasuOp") def AreCoordsInside(self, theShape, coords, tolerance=1.e-7): """ Get if coords are included in the shape (ST_IN or ST_ON) - - Parameters: + + Parameters: theShape Shape coords list of points coordinates [x1, y1, z1, x2, y2, z2, ...] tolerance to be used (default is 1.0e-7) @@ -9590,14 +9823,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the minimal distance between the given shapes. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def MinDistance(self, theShape1, theShape2): """ Get minimal distance between the given shapes. - - Parameters: + + Parameters: theShape1,theShape2 Shapes to find minimal distance between. - Returns: + Returns: Value of the minimal distance between the given shapes. """ # Example: see GEOM_TestMeasures.py @@ -9611,14 +9845,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # [Distance, DX, DY, DZ]. # # @ref swig_all_measure "Example" + @ManageTransactions("MeasuOp") def MinDistanceComponents(self, theShape1, theShape2): """ Get minimal distance between the given shapes. - Parameters: + Parameters: theShape1,theShape2 Shapes to find minimal distance between. - Returns: + Returns: Value of the minimal distance between the given shapes, in form of list [Distance, DX, DY, DZ] """ @@ -9634,14 +9869,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # solutions) and a list of (X, Y, Z) coordinates for all couples of points. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def ClosestPoints (self, theShape1, theShape2): """ Get closest points of the given shapes. - Parameters: + Parameters: theShape1,theShape2 Shapes to find closest points of. - Returns: + Returns: The number of found solutions (-1 in case of infinite number of solutions) and a list of (X, Y, Z) coordinates for all couples of points. """ @@ -9657,18 +9893,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the angle between the given shapes in degrees. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetAngle(self, theShape1, theShape2): """ Get angle between the given shapes in degrees. - Parameters: + Parameters: theShape1,theShape2 Lines or linear edges to find angle between. Note: If both arguments are vectors, the angle is computed in accordance with their orientations, otherwise the minimum angle is computed. - Returns: + Returns: Value of the angle between the given shapes in degrees. """ # Example: see GEOM_TestMeasures.py @@ -9683,19 +9920,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the angle between the given shapes in radians. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetAngleRadians(self, theShape1, theShape2): """ Get angle between the given shapes in radians. - Parameters: + Parameters: theShape1,theShape2 Lines or linear edges to find angle between. - + Note: If both arguments are vectors, the angle is computed in accordance with their orientations, otherwise the minimum angle is computed. - Returns: + Returns: Value of the angle between the given shapes in radians. """ # Example: see GEOM_TestMeasures.py @@ -9710,16 +9948,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Value of the angle between the given vectors in degrees. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetAngleVectors(self, theShape1, theShape2, theFlag = True): """ Get angle between the given vectors in degrees. - Parameters: + Parameters: theShape1,theShape2 Vectors to find angle between. theFlag If True, the normal vector is defined by the two vectors cross, if False, the opposite vector to the normal vector is used. - Returns: + Returns: Value of the angle between the given vectors in degrees. """ anAngle = self.MeasuOp.GetAngleBtwVectors(theShape1, theShape2) @@ -9733,12 +9972,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Get angle between the given vectors in radians. - Parameters: + Parameters: theShape1,theShape2 Vectors to find angle between. theFlag If True, the normal vector is defined by the two vectors cross, if False, the opposite vector to the normal vector is used. - Returns: + Returns: Value of the angle between the given vectors in radians. """ anAngle = self.GetAngleVectors(theShape1, theShape2, theFlag)*math.pi/180. @@ -9755,15 +9994,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return radius of curvature of \a theCurve. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def CurveCurvatureByParam(self, theCurve, theParam): """ Measure curvature of a curve at a point, set by parameter. - Parameters: + Parameters: theCurve a curve. theParam parameter. - Returns: + Returns: radius of curvature of theCurve. """ # Example: see GEOM_TestMeasures.py @@ -9777,16 +10017,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return radius of curvature of \a theCurve. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def CurveCurvatureByPoint(self, theCurve, thePoint): """ Measure curvature of a curve at a point. - Parameters: + Parameters: theCurve a curve. thePoint given point. - Returns: - radius of curvature of theCurve. + Returns: + radius of curvature of theCurve. """ aCurv = self.MeasuOp.CurveCurvatureByPoint(theCurve,thePoint) RaiseIfFailed("CurveCurvatureByPoint", self.MeasuOp) @@ -9805,16 +10046,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return max radius of curvature of theSurf. # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MaxSurfaceCurvatureByParam(self, theSurf, theUParam, theVParam): """ Measure max radius of curvature of surface. - Parameters: + Parameters: theSurf the given surface. theUParam Value of U-parameter on the referenced surface. theVParam Value of V-parameter on the referenced surface. - - Returns: + + Returns: max radius of curvature of theSurf. """ # Example: see GEOM_TestMeasures.py @@ -9828,16 +10070,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return max radius of curvature of theSurf. # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MaxSurfaceCurvatureByPoint(self, theSurf, thePoint): """ Measure max radius of curvature of surface in the given point. - Parameters: + Parameters: theSurf the given surface. thePoint given point. - - Returns: - max radius of curvature of theSurf. + + Returns: + max radius of curvature of theSurf. """ aSurf = self.MeasuOp.MaxSurfaceCurvatureByPoint(theSurf,thePoint) RaiseIfFailed("MaxSurfaceCurvatureByPoint", self.MeasuOp) @@ -9848,18 +10091,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theUParam Value of U-parameter on the referenced surface. # @param theVParam Value of V-parameter on the referenced surface. # @return min radius of curvature of theSurf. - # + # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MinSurfaceCurvatureByParam(self, theSurf, theUParam, theVParam): """ Measure min radius of curvature of surface. - Parameters: + Parameters: theSurf the given surface. theUParam Value of U-parameter on the referenced surface. theVParam Value of V-parameter on the referenced surface. - - Returns: + + Returns: Min radius of curvature of theSurf. """ aSurf = self.MeasuOp.MinSurfaceCurvatureByParam(theSurf,theUParam,theVParam) @@ -9872,16 +10116,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return min radius of curvature of theSurf. # ## @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def MinSurfaceCurvatureByPoint(self, theSurf, thePoint): """ Measure min radius of curvature of surface in the given point. - Parameters: + Parameters: theSurf the given surface. thePoint given point. - - Returns: - Min radius of curvature of theSurf. + + Returns: + Min radius of curvature of theSurf. """ aSurf = self.MeasuOp.MinSurfaceCurvatureByPoint(theSurf,thePoint) RaiseIfFailed("MinSurfaceCurvatureByPoint", self.MeasuOp) @@ -9896,14 +10141,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # VertMin,VertMax: Min and max tolerances of the vertices. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def Tolerance(self,theShape): """ Get min and max tolerances of sub-shapes of theShape - Parameters: + Parameters: theShape Shape, to get tolerances of. - Returns: + Returns: [FaceMin,FaceMax, EdgeMin,EdgeMax, VertMin,VertMax] FaceMin,FaceMax: Min and max tolerances of the faces. EdgeMin,EdgeMax: Min and max tolerances of the edges. @@ -9919,6 +10165,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Description of the given shape. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def WhatIs(self,theShape): """ Obtain description of the given shape (number of sub-shapes of each type) @@ -10005,6 +10252,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created point. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def MakeCDG(self, theShape, theName=None): """ Get a point, situated at the centre of mass of theShape. @@ -10034,6 +10282,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vertex. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def GetVertexByIndex(self, theShape, theIndex, theName=None): """ Get a vertex sub-shape by index depended with orientation. @@ -10073,14 +10322,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vertex. """ # Example: see GEOM_TestMeasures.py # note: auto-publishing is done in self.GetVertexByIndex() - anObj = self.GetVertexByIndex(theShape, 0, theName) - RaiseIfFailed("GetFirstVertex", self.MeasuOp) - return anObj + return self.GetVertexByIndex(theShape, 0, theName) ## Get the last vertex of wire/edge depended orientation. # @param theShape Shape to find last vertex. @@ -10095,21 +10342,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Get the last vertex of wire/edge depended orientation. - Parameters: + Parameters: theShape Shape to find last vertex. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vertex. """ # Example: see GEOM_TestMeasures.py - nb_vert = self.ShapesOp.NumberOfSubShapes(theShape, self.ShapeType["VERTEX"]) + nb_vert = self.NumberOfSubShapes(theShape, self.ShapeType["VERTEX"]) # note: auto-publishing is done in self.GetVertexByIndex() - anObj = self.GetVertexByIndex(theShape, (nb_vert-1), theName) - RaiseIfFailed("GetLastVertex", self.MeasuOp) - return anObj + return self.GetVertexByIndex(theShape, (nb_vert-1), theName) ## Get a normale to the given face. If the point is not given, # the normale is calculated at the center of mass. @@ -10122,19 +10367,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created vector. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def GetNormal(self, theFace, theOptionalPoint = None, theName=None): """ Get a normale to the given face. If the point is not given, the normale is calculated at the center of mass. - - Parameters: + + Parameters: theFace Face to define normale of. theOptionalPoint Point to compute the normale at. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created vector. """ # Example: see GEOM_TestMeasures.py @@ -10152,6 +10398,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Otherwise doesn't return anything. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def PrintShapeErrors(self, theShape, theShapeErrors, theReturnStatus = 0): """ Print shape errors obtained from CheckShape. @@ -10191,11 +10438,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # returned along with IsValid flag. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def CheckShape(self,theShape, theIsCheckGeom = 0, theReturnStatus = 0): """ Check a topology of the given shape. - Parameters: + Parameters: theShape Shape to check validity of. theIsCheckGeom If FALSE, only the shape's topology will be checked, if TRUE, the shape's geometry will be checked also. @@ -10206,7 +10454,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): If 2 IsValid flag and the list of error data is returned. - Returns: + Returns: TRUE, if the shape "seems to be valid". If theShape is invalid, prints a description of problem. If theReturnStatus is equal to 1 the description is returned @@ -10237,14 +10485,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return TRUE, if the shape contains no self-intersections. # # @ref tui_measurement_tools_page "Example" + @ManageTransactions("MeasuOp") def CheckSelfIntersections(self, theShape): """ Detect self-intersections in the given shape. - Parameters: + Parameters: theShape Shape to check. - Returns: + Returns: TRUE, if the shape contains no self-intersections. """ # Example: see GEOM_TestMeasures.py @@ -10265,6 +10514,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # Xx,Xy,Xz: Coordinates of shape's LCS X direction. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def GetPosition(self,theShape): """ Get position (LCS) of theShape. @@ -10272,10 +10522,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Axes of the LCS are obtained from shape's location or, if the shape is a planar face, from position of its plane. - Parameters: + Parameters: theShape Shape to calculate position of. - Returns: + Returns: [Ox,Oy,Oz, Zx,Zy,Zz, Xx,Xy,Xz]. Ox,Oy,Oz: Coordinates of shape's LCS origin. Zx,Zy,Zz: Coordinates of shape's LCS normal(main) direction. @@ -10295,11 +10545,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # or \a theDoubles list depends on the kind() of the shape. # # @ref swig_todo "Example" + @ManageTransactions("MeasuOp") def KindOfShape(self,theShape): """ Get kind of theShape. - - Parameters: + + Parameters: theShape Shape to get a kind of. Returns: @@ -10328,6 +10579,28 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return aKindTuple + ## Returns the string that describes if the shell is good for solid. + # This is a support method for MakeSolid. + # + # @param theShell the shell to be checked. + # @return Returns a string that describes the shell validity for + # solid construction. + @ManageTransactions("MeasuOp") + def _IsGoodForSolid(self, theShell): + """ + Returns the string that describes if the shell is good for solid. + This is a support method for MakeSolid. + + Parameter: + theShell the shell to be checked. + + Returns: + Returns a string that describes the shell validity for + solid construction. + """ + aDescr = self.MeasuOp.IsGoodForSolid(theShell) + return aDescr + # end of l2_measure ## @} @@ -10354,12 +10627,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # material groups are not automatically published. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def ImportFile(self, theFileName, theFormatName, theName=None): """ Import a shape from the BREP or IGES or STEP file (depends on given format) with given name. - Parameters: + Parameters: theFileName The file, containing the shape. theFormatName Specify format for the file reading. Available formats can be obtained with geompy.InsertOp.ImportTranslators() method. @@ -10413,7 +10687,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): geompy.ImportFile(...) function for BREP format Import a shape from the BREP file with given name. - Parameters: + Parameters: theFileName The file, containing the shape. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -10466,6 +10740,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return String, containing the units name. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def GetIGESUnit(self, theFileName): """ Return length units from given IGES file @@ -10531,6 +10806,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return String, containing the units name. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def GetSTEPUnit(self, theFileName): """ Return length units from given STEP file @@ -10556,6 +10832,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the shape, read from theStream. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def RestoreShape (self, theStream, theName=None): """ Read a shape from the binary stream, containing its bounding representation (BRep). @@ -10563,7 +10840,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: shape.GetShapeStream() method can be used to obtain the shape's BRep stream. - Parameters: + Parameters: theStream The BRep binary stream. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -10586,11 +10863,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # geompy.InsertOp.ExportTranslators()[0] method. # # @ref swig_Import_Export "Example" + @ManageTransactions("InsertOp") def Export(self, theObject, theFileName, theFormatName): """ Export the given shape into a file with given name. - Parameters: + Parameters: theObject Shape to be stored in the file. theFileName Name of the file to store the given shape in. theFormatName Specify format for the shape storage. @@ -10650,21 +10928,22 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_building_by_blocks_page "Example" + @ManageTransactions("BlocksOp") def MakeQuad(self, E1, E2, E3, E4, theName=None): """ Create a quadrangle face from four edges. Order of Edges is not important. It is not necessary that edges share the same vertex. - Parameters: + Parameters: E1,E2,E3,E4 Edges for the face bound. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. - Example of usage: + Example of usage: qface1 = geompy.MakeQuad(edge1, edge2, edge3, edge4) """ # Example: see GEOM_Spanner.py @@ -10683,20 +10962,21 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the created face. # # @ref tui_building_by_blocks_page "Example" + @ManageTransactions("BlocksOp") def MakeQuad2Edges(self, E1, E2, theName=None): """ Create a quadrangle face on two edges. The missing edges will be built by creating the shortest ones. - Parameters: + Parameters: E1,E2 Two opposite edges for the face. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. - + Example of usage: # create vertices p1 = geompy.MakeVertex( 0., 0., 0.) @@ -10726,18 +11006,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_building_by_blocks_page "Example 1" # \n @ref swig_MakeQuad4Vertices "Example 2" + @ManageTransactions("BlocksOp") def MakeQuad4Vertices(self, V1, V2, V3, V4, theName=None): """ Create a quadrangle face with specified corners. The missing edges will be built by creating the shortest ones. - Parameters: + Parameters: V1,V2,V3,V4 Corner vertices for the face. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created face. Example of usage: @@ -10766,18 +11047,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_building_by_blocks_page "Example 1" # \n @ref swig_MakeHexa "Example 2" + @ManageTransactions("BlocksOp") def MakeHexa(self, F1, F2, F3, F4, F5, F6, theName=None): """ Create a hexahedral solid, bounded by the six given faces. Order of faces is not important. It is not necessary that Faces share the same edge. - Parameters: + Parameters: F1,F2,F3,F4,F5,F6 Faces for the hexahedral solid. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the created solid. Example of usage: @@ -10800,12 +11082,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_building_by_blocks_page "Example 1" # \n @ref swig_MakeHexa2Faces "Example 2" + @ManageTransactions("BlocksOp") def MakeHexa2Faces(self, F1, F2, theName=None): """ Create a hexahedral solid between two given faces. The missing faces will be built by creating the smallest ones. - Parameters: + Parameters: F1,F2 Two opposite faces for the hexahedral solid. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -10841,11 +11124,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found vertex. # # @ref swig_GetPoint "Example" + @ManageTransactions("BlocksOp") def GetPoint(self, theShape, theX, theY, theZ, theEpsilon, theName=None): """ Get a vertex, found in the given shape by its coordinates. - Parameters: + Parameters: theShape Block or a compound of blocks. theX,theY,theZ Coordinates of the sought vertex. theEpsilon Maximum allowed distance between the resulting @@ -10854,7 +11138,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the found vertex. Example of usage: @@ -10876,11 +11160,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found vertex. # # @ref swig_GetVertexNearPoint "Example" + @ManageTransactions("BlocksOp") def GetVertexNearPoint(self, theShape, thePoint, theName=None): """ Find a vertex of the given shape, which has minimal distance to the given point. - Parameters: + Parameters: theShape Any shape. thePoint Point, close to the desired vertex. theName Object name; when specified, this parameter is used @@ -10910,11 +11195,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found edge. # # @ref swig_GetEdge "Example" + @ManageTransactions("BlocksOp") def GetEdge(self, theShape, thePoint1, thePoint2, theName=None): """ Get an edge, found in the given shape by two given vertices. - Parameters: + Parameters: theShape Block or a compound of blocks. thePoint1,thePoint2 Points, close to the ends of the desired edge. theName Object name; when specified, this parameter is used @@ -10940,11 +11226,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found edge. # # @ref swig_GetEdgeNearPoint "Example" + @ManageTransactions("BlocksOp") def GetEdgeNearPoint(self, theShape, thePoint, theName=None): """ Find an edge of the given shape, which has minimal distance to the given point. - Parameters: + Parameters: theShape Block or a compound of blocks. thePoint Point, close to the desired edge. theName Object name; when specified, this parameter is used @@ -10970,6 +11257,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetFaceByPoints(self, theShape, thePoint1, thePoint2, thePoint3, thePoint4, theName=None): """ Returns a face, found in the given shape by four given corner vertices. @@ -11000,6 +11288,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetFaceByEdges(self, theShape, theEdge1, theEdge2, theName=None): """ Get a face of block, found in the given shape by two given edges. @@ -11030,6 +11319,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_GetOppositeFace "Example" + @ManageTransactions("BlocksOp") def GetOppositeFace(self, theBlock, theFace, theName=None): """ Find a face, opposite to the given one in the given block. @@ -11041,7 +11331,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM.GEOM_Object, containing the found face. """ # Example: see GEOM_Spanner.py @@ -11060,6 +11350,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_GetFaceNearPoint "Example" + @ManageTransactions("BlocksOp") def GetFaceNearPoint(self, theShape, thePoint, theName=None): """ Find a face of the given shape, which has minimal distance to the given point. @@ -11090,6 +11381,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found face. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetFaceByNormale(self, theBlock, theVector, theName=None): """ Find a face of block, whose outside normale has minimal angle with the given vector. @@ -11125,6 +11417,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing a group of all found shapes. # # @ref swig_GetShapesNearPoint "Example" + @ManageTransactions("BlocksOp") def GetShapesNearPoint(self, theShape, thePoint, theShapeType, theTolerance = 1e-07, theName=None): """ Find all sub-shapes of type theShapeType of the given shape, @@ -11169,6 +11462,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_measurement_tools_page "Example 1" # \n @ref swig_CheckCompoundOfBlocks "Example 2" + @ManageTransactions("BlocksOp") def CheckCompoundOfBlocks(self,theCompound): """ Check, if the compound of blocks is given. @@ -11184,7 +11478,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Returns: TRUE, if the given shape is a compound of blocks. - If theCompound is not valid, prints all discovered errors. + If theCompound is not valid, prints all discovered errors. """ # Example: see GEOM_Spanner.py (IsValid, BCErrors) = self.BlocksOp.CheckCompoundOfBlocks(theCompound) @@ -11207,6 +11501,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_measurement_tools_page "Example 1" # \n @ref swig_GetNonBlocks "Example 2" + @ManageTransactions("BlocksOp") def GetNonBlocks (self, theShape, theName=None): """ Retrieve all non blocks solids and faces from theShape. @@ -11245,6 +11540,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Improved shape. # # @ref swig_RemoveExtraEdges "Example" + @ManageTransactions("BlocksOp") def RemoveExtraEdges(self, theShape, doUnionFaces=False, theName=None): """ Remove all seam and degenerated edges from theShape. @@ -11259,7 +11555,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: Improved shape. """ # Example: see GEOM_TestOthers.py @@ -11282,6 +11578,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Improved shape. # # @ref swig_UnionFaces "Example" + @ManageTransactions("BlocksOp") def UnionFaces(self, theShape, theName=None): """ Performs union faces of theShape. @@ -11295,7 +11592,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: Improved shape. """ # Example: see GEOM_TestOthers.py @@ -11315,6 +11612,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return Improved compound. # # @ref swig_CheckAndImprove "Example" + @ManageTransactions("BlocksOp") def CheckAndImprove(self, theShape, theName=None): """ Check, if the given shape is a blocks compound. @@ -11329,7 +11627,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: Improved compound. """ # Example: see GEOM_TestOthers.py @@ -11358,6 +11656,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_explode_on_blocks "Example 1" # \n @ref swig_MakeBlockExplode "Example 2" + @ManageTransactions("BlocksOp") def MakeBlockExplode(self, theCompound, theMinNbFaces, theMaxNbFaces, theName=None): """ Get all the blocks, contained in the given compound. @@ -11373,7 +11672,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Note: If theMaxNbFaces = 0, the maximum number of faces is not restricted. - Returns: + Returns: List of GEOM.GEOM_Object, containing the retrieved blocks. """ # Example: see GEOM_TestOthers.py @@ -11397,6 +11696,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found block. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetBlockNearPoint(self, theCompound, thePoint, theName=None): """ Find block, containing the given point inside its volume or on boundary. @@ -11428,6 +11728,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the found block. # # @ref swig_GetBlockByParts "Example" + @ManageTransactions("BlocksOp") def GetBlockByParts(self, theCompound, theParts, theName=None): """ Find block, containing all the elements, passed as the parts, or maximum quantity of them. @@ -11439,7 +11740,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - Returns: + Returns: New GEOM_Object, containing the found block. """ # Example: see GEOM_TestOthers.py @@ -11458,6 +11759,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the found blocks. # # @ref swig_todo "Example" + @ManageTransactions("BlocksOp") def GetBlocksByParts(self, theCompound, theParts, theName=None): """ Return all blocks, containing all the elements, passed as the parts. @@ -11493,6 +11795,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_multi_transformation "Example" + @ManageTransactions("BlocksOp") def MakeMultiTransformation1D(self, Block, DirFace1, DirFace2, NbTimes, theName=None): """ Multi-transformate block and glue the result. @@ -11533,6 +11836,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM.GEOM_Object, containing the result shape. # # @ref tui_multi_transformation "Example" + @ManageTransactions("BlocksOp") def MakeMultiTransformation2D(self, Block, DirFace1U, DirFace2U, NbTimesU, DirFace1V, DirFace2V, NbTimesV, theName=None): """ @@ -11572,6 +11876,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, each of them is a propagation group. # # @ref swig_Propagate "Example" + @ManageTransactions("BlocksOp") def Propagate(self, theShape, theName=None): """ Build all possible propagation groups. @@ -11611,6 +11916,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_working_with_groups_page "Example 1" # \n @ref swig_CreateGroup "Example 2" + @ManageTransactions("GroupOp") def CreateGroup(self, theMainShape, theShapeType, theName=None): """ Creates a new group which will store sub-shapes of theMainShape @@ -11628,7 +11934,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Example of usage: group = geompy.CreateGroup(Box, geompy.ShapeType["FACE"]) - + """ # Example: see GEOM_TestOthers.py anObj = self.GroupOp.CreateGroup(theMainShape, theShapeType) @@ -11642,6 +11948,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \note Use method GetSubShapeID() to get an unique ID of the sub-shape # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def AddObject(self,theGroup, theSubShapeID): """ Adds a sub-object with ID theSubShapeId to the group @@ -11651,7 +11958,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theSubShapeID is a sub-shape ID in the main object. Note: - Use method GetSubShapeID() to get an unique ID of the sub-shape + Use method GetSubShapeID() to get an unique ID of the sub-shape """ # Example: see GEOM_TestOthers.py self.GroupOp.AddObject(theGroup, theSubShapeID) @@ -11666,6 +11973,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # \note Use method GetSubShapeID() to get an unique ID of the sub-shape # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def RemoveObject(self,theGroup, theSubShapeID): """ Removes a sub-object with ID theSubShapeId from the group @@ -11687,6 +11995,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of sub-shapes to be added. # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def UnionList (self,theGroup, theSubShapes): """ Adds to the group all the given shapes. No errors, if some shapes are alredy included. @@ -11705,6 +12014,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of indices of sub-shapes to be added. # # @ref swig_UnionIDs "Example" + @ManageTransactions("GroupOp") def UnionIDs(self,theGroup, theSubShapes): """ Adds to the group all the given shapes. No errors, if some shapes are alredy included. @@ -11723,6 +12033,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of sub-shapes to be removed. # # @ref tui_working_with_groups_page "Example" + @ManageTransactions("GroupOp") def DifferenceList (self,theGroup, theSubShapes): """ Removes from the group all the given shapes. No errors, if some shapes are not included. @@ -11741,6 +12052,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theSubShapes is a list of indices of sub-shapes to be removed. # # @ref swig_DifferenceIDs "Example" + @ManageTransactions("GroupOp") def DifferenceIDs(self,theGroup, theSubShapes): """ Removes from the group all the given shapes. No errors, if some shapes are not included. @@ -11748,7 +12060,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theGroup is a GEOM group from which the sub-shapes are removed. theSubShapes is a list of indices of sub-shapes to be removed. - """ + """ # Example: see GEOM_TestOthers.py self.GroupOp.DifferenceIDs(theGroup, theSubShapes) RaiseIfFailed("DifferenceIDs", self.GroupOp) @@ -11766,6 +12078,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_union_groups_anchor "Example" + @ManageTransactions("GroupOp") def UnionGroups (self, theGroup1, theGroup2, theName=None): """ Union of two groups. @@ -11799,6 +12112,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_intersect_groups_anchor "Example" + @ManageTransactions("GroupOp") def IntersectGroups (self, theGroup1, theGroup2, theName=None): """ Intersection of two groups. @@ -11832,6 +12146,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_cut_groups_anchor "Example" + @ManageTransactions("GroupOp") def CutGroups (self, theGroup1, theGroup2, theName=None): """ Cut of two groups. @@ -11865,6 +12180,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_union_groups_anchor "Example" + @ManageTransactions("GroupOp") def UnionListOfGroups (self, theGList, theName=None): """ Union of list of groups. @@ -11897,6 +12213,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_intersect_groups_anchor "Example" + @ManageTransactions("GroupOp") def IntersectListOfGroups (self, theGList, theName=None): """ Cut of lists of groups. @@ -11920,7 +12237,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Cut of lists of groups. # New group is created. It will contain only entities - # which are present in groups listed in theGList1 but + # which are present in groups listed in theGList1 but # are not present in groups from theGList2. # @param theGList1 is a list of GEOM groups to include elements of. # @param theGList2 is a list of GEOM groups to exclude elements of. @@ -11931,11 +12248,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a newly created GEOM group. # # @ref tui_cut_groups_anchor "Example" + @ManageTransactions("GroupOp") def CutListOfGroups (self, theGList1, theGList2, theName=None): """ Cut of lists of groups. New group is created. It will contain only entities - which are present in groups listed in theGList1 but + which are present in groups listed in theGList1 but are not present in groups from theGList2. Parameters: @@ -11958,6 +12276,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theGroup is a GEOM group for which a list of IDs is requested # # @ref swig_GetObjectIDs "Example" + @ManageTransactions("GroupOp") def GetObjectIDs(self,theGroup): """ Returns a list of sub-objects ID stored in the group @@ -11974,6 +12293,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param theGroup is a GEOM group which type is returned. # # @ref swig_GetType "Example" + @ManageTransactions("GroupOp") def GetType(self,theGroup): """ Returns a type of sub-objects stored in the group @@ -11996,7 +12316,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Parameters: theId is a GEOM obect type id. - + Returns: type of geom object (POINT, VECTOR, PLANE, LINE, TORUS, ... ) """ @@ -12103,6 +12423,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return a GEOM object which is a main shape for theGroup # # @ref swig_GetMainShape "Example" + @ManageTransactions("GroupOp") def GetMainShape(self,theGroup): """ Returns a main shape associated with the group @@ -12269,6 +12590,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. # # @ref tui_creation_pipetshape "Example" + @ManageTransactions("AdvOp") def MakePipeTShape (self, theR1, theW1, theL1, theR2, theW2, theL2, theHexMesh=True, theP1=None, theP2=None, theP3=None, theRL=0, theWL=0, theLtransL=0, theLthinL=0, @@ -12386,6 +12708,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. # # @ref tui_creation_pipetshape "Example" + @ManageTransactions("AdvOp") def MakePipeTShapeChamfer (self, theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theHexMesh=True, theP1=None, theP2=None, theP3=None, theRL=0, theWL=0, theLtransL=0, theLthinL=0, @@ -12505,6 +12828,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. # # @ref tui_creation_pipetshape "Example" + @ManageTransactions("AdvOp") def MakePipeTShapeFillet (self, theR1, theW1, theL1, theR2, theW2, theL2, theRF, theHexMesh=True, theP1=None, theP2=None, theP3=None, theRL=0, theWL=0, theLtransL=0, theLthinL=0, @@ -12551,10 +12875,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. - + Returns: List of GEOM_Object, containing the created shape and propagation groups. - + Example of usage: # create PipeTShape with fillet object pipetshapefillet = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0) @@ -12595,6 +12919,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the created shape. # # @ref tui_creation_divideddisk "Example" + @ManageTransactions("AdvOp") def MakeDividedDisk(self, theR, theOrientation, thePattern, theName=None): """ Creates a disk, divided into blocks. It can be used to create divided pipes @@ -12618,7 +12943,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): if Parameters: anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "dividedDisk") return anObj - + ## This function allows creating a disk already divided into blocks. It # can be used to create divided pipes for later meshing in hexaedra. # @param theCenter Center of the disk @@ -12632,6 +12957,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the created shape. # # @ref tui_creation_divideddisk "Example" + @ManageTransactions("AdvOp") def MakeDividedDiskPntVecR(self, theCenter, theVector, theRadius, thePattern, theName=None): """ Creates a disk already divided into blocks. It can be used to create divided pipes @@ -12667,6 +12993,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the created shape. # # @ref tui_creation_dividedcylinder "Example" + @ManageTransactions("AdvOp") def MakeDividedCylinder(self, theR, theH, thePattern, theName=None): """ Builds a cylinder prepared for hexa meshes @@ -12708,6 +13035,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # computed plate surface and given points. # # @ref tui_creation_smoothingsurface "Example" + @ManageTransactions("AdvOp") def MakeSmoothingSurface(self, thelPoints, theNbMax=2, theDegMax=8, theDMax=0.0, theName=None): """ @@ -12750,6 +13078,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @return boolean # # @ref tui_exportxao "Example" + @ManageTransactions("InsertOp") def ExportXAO(self, shape, groups, fields, author, fileName): res = self.InsertOp.ExportXAO(shape, groups, fields, author, fileName) RaiseIfFailed("ExportXAO", self.InsertOp) @@ -12766,6 +13095,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # fields The list of imported fields # # @ref tui_importxao "Example" + @ManageTransactions("InsertOp") def ImportXAO(self, fileName): res = self.InsertOp.ImportXAO(fileName) RaiseIfFailed("ImportXAO", self.InsertOp) @@ -12787,6 +13117,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ingroup l1_geomBuilder_auxiliary # @ref swig_MakeCopy "Example" + @ManageTransactions("InsertOp") def MakeCopy(self, theOriginal, theName=None): """ Create a copy of the given object @@ -12827,13 +13158,14 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param Path a path to the texture file # @return unique texture identifier # @ingroup l1_geomBuilder_auxiliary + @ManageTransactions("InsertOp") def LoadTexture(self, Path): """ Load marker texture from the file - + Parameters: Path a path to the texture file - + Returns: unique texture identifier """ @@ -12844,7 +13176,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Get internal name of the object based on its study entry # @note This method does not provide an unique identifier of the geometry object. - # @note This is internal function of GEOM component, though it can be used outside it for + # @note This is internal function of GEOM component, though it can be used outside it for # appropriate reason (e.g. for identification of geometry object). # @param obj geometry object # @return unique object identifier @@ -12853,7 +13185,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Get internal name of the object based on its study entry. Note: this method does not provide an unique identifier of the geometry object. - It is an internal function of GEOM component, though it can be used outside GEOM for + It is an internal function of GEOM component, though it can be used outside GEOM for appropriate reason (e.g. for identification of geometry object). Parameters: @@ -12867,11 +13199,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): if entry is not None: lst = entry.split(":") if len(lst) > 0: - ID = lst[-1] # -1 means last item in the list + ID = lst[-1] # -1 means last item in the list return "GEOM_" + ID return ID - - + + ## Add marker texture. @a Width and @a Height parameters # specify width and height of the texture in pixels. @@ -12886,6 +13218,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # @param RowData if @c True, @a Texture data are packed in the byte stream # @return unique texture identifier # @ingroup l1_geomBuilder_auxiliary + @ManageTransactions("InsertOp") def AddTexture(self, Width, Height, Texture, RowData=False): """ Add marker texture. Width and Height parameters @@ -12911,19 +13244,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Creates a new folder object. It is a container for any GEOM objects. # @param Name name of the container - # @param Father parent object. If None, + # @param Father parent object. If None, # folder under 'Geometry' root object will be created. # @return a new created folder # @ingroup l1_publish_data def NewFolder(self, Name, Father=None): """ Create a new folder object. It is an auxiliary container for any GEOM objects. - + Parameters: Name name of the container - Father parent object. If None, + Father parent object. If None, folder under 'Geometry' root object will be created. - + Returns: a new created folder """ @@ -12937,7 +13270,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def PutToFolder(self, Object, Folder): """ Move object to the specified folder - + Parameters: Object object to move Folder target folder @@ -12952,7 +13285,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def PutListToFolder(self, ListOfSO, Folder): """ Move list of objects to the specified folder - + Parameters: ListOfSO list of objects to move Folder target folder @@ -12971,6 +13304,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # 0 - VERTEX, 1 - EDGE, 2 - FACE, 3 - SOLID, -1 - whole shape # @param componentNames names of components # @return a created field + @ManageTransactions("FieldOp") def CreateField(self, shape, name, type, dimension, componentNames): """ Creates a field @@ -12982,7 +13316,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): dimension dimension of the shape the field lies on 0 - VERTEX, 1 - EDGE, 2 - FACE, 3 - SOLID, -1 - whole shape componentNames names of components - + Returns: a created field """ @@ -13011,6 +13345,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return ## Returns number of fields on a shape + @ManageTransactions("FieldOp") def CountFields(self, shape): "Returns number of fields on a shape" nb = self.FieldOp.CountFields( shape ) @@ -13018,6 +13353,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return nb ## Returns all fields on a shape + @ManageTransactions("FieldOp") def GetFields(self, shape): "Returns all fields on a shape" ff = self.FieldOp.GetFields( shape ) @@ -13025,6 +13361,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return ff ## Returns a field on a shape by its name + @ManageTransactions("FieldOp") def GetField(self, shape, name): "Returns a field on a shape by its name" f = self.FieldOp.GetField( shape, name ) From fd0a1937687cf9f4385027dca9d885afedf43e4a Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 27 Jun 2014 14:08:43 +0400 Subject: [PATCH 052/118] Version update: 7.4.1 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c9446aa6..b152f0516 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,7 @@ STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC) SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7) SET(${PROJECT_NAME_UC}_MINOR_VERSION 4) -SET(${PROJECT_NAME_UC}_PATCH_VERSION 0) +SET(${PROJECT_NAME_UC}_PATCH_VERSION 1) SET(${PROJECT_NAME_UC}_VERSION ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION}) SET(${PROJECT_NAME_UC}_VERSION_DEV 0) From 5b374060cb6b71fcbc6ca2944bd5c5724a1faa3c Mon Sep 17 00:00:00 2001 From: mpa Date: Mon, 30 Jun 2014 11:55:42 +0400 Subject: [PATCH 053/118] INT PAL 0052297: impossible to set point coordinates by click in OCC viewer --- src/GEOMGUI/GeometryGUI.cxx | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index f10e4a026..48f06c4ad 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1829,37 +1829,23 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg ); getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea ); + //NPAL 19674 + SALOME_ListIO selected; + sm->selectedObjects( selected ); + sm->clearSelected(); + SUIT_ViewManager* vm; ViewManagerList OCCViewManagers, VTKViewManagers; application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers ); QListIterator itOCC( OCCViewManagers ); while ( itOCC.hasNext() && (vm = itOCC.next()) ) - myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) ); + onViewManagerAdded(vm); application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers ); QListIterator itVTK( VTKViewManagers ); while ( itVTK.hasNext() && (vm = itVTK.next()) ) - myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast( vm->getViewModel() ), sm ) ); - - //NPAL 19674 - SALOME_ListIO selected; - sm->selectedObjects( selected ); - sm->clearSelected(); - - // disable OCC selectors - getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() ); - QListIterator itOCCSel( myOCCSelectors ); - while ( itOCCSel.hasNext() ) - if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() ) - sr->setEnabled(true); - - // disable VTK selectors - getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() ); - QListIterator itVTKSel( myVTKSelectors ); - while ( itVTKSel.hasNext() ) - if ( LightApp_VTKSelector* sr = itVTKSel.next() ) - sr->setEnabled(true); + onViewManagerAdded(vm); sm->setSelectedObjects( selected, true ); //NPAL 19674 From 3866909ccc59e681dd5be22258048313975cb832 Mon Sep 17 00:00:00 2001 From: skv Date: Mon, 30 Jun 2014 17:56:52 +0400 Subject: [PATCH 054/118] 0022495: [CEA 1058] Shape invalide after UnionFaces --- src/BlockFix/BlockFix_UnionFaces.cxx | 58 ++++++++++++---------------- 1 file changed, 25 insertions(+), 33 deletions(-) mode change 100755 => 100644 src/BlockFix/BlockFix_UnionFaces.cxx diff --git a/src/BlockFix/BlockFix_UnionFaces.cxx b/src/BlockFix/BlockFix_UnionFaces.cxx old mode 100755 new mode 100644 index 4c6d17e08..838b8a8ee --- a/src/BlockFix/BlockFix_UnionFaces.cxx +++ b/src/BlockFix/BlockFix_UnionFaces.cxx @@ -274,9 +274,6 @@ static Standard_Boolean IsEdgeValidToMerge(const TopoDS_Edge &theEdge, //======================================================================= TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) { - Handle(ShapeBuild_ReShape) myContext = new ShapeBuild_ReShape; - TopoDS_Shape aResShape = myContext->Apply(Shape); - // Fill Map of faces as keys and list of solids or shells as items. TopTools_IndexedDataMapOfShapeListOfShape aMapFaceSoOrSh; @@ -290,6 +287,8 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) (Shape, TopAbs_FACE, aType, aMapFaceSoOrSh); // processing each solid + Handle(ShapeBuild_ReShape) aContext = new ShapeBuild_ReShape; + TopTools_MapOfShape aProcessed; TopExp_Explorer exps; for (exps.Init(Shape, aType); exps.More(); exps.Next()) { TopoDS_Shape aSoOrSh = exps.Current(); @@ -298,11 +297,6 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) TopTools_IndexedDataMapOfShapeListOfShape aMapEdgeFaces; TopExp::MapShapesAndAncestors(aSoOrSh, TopAbs_EDGE, TopAbs_FACE, aMapEdgeFaces); - // map of processed shapes - TopTools_MapOfShape aProcessed; - - Handle(ShapeBuild_ReShape) aContext = new ShapeBuild_ReShape; - Standard_Integer NbModif = 0; Standard_Boolean hasFailed = Standard_False; Standard_Real tol = Min(Max(Precision::Confusion(), myTolerance/10.), 0.1); @@ -324,8 +318,9 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) for (exp.Init(aSoOrSh, TopAbs_FACE); exp.More() && doUnion; exp.Next()) { TopoDS_Face aFace = TopoDS::Face(exp.Current().Oriented(TopAbs_FORWARD)); - if (aProcessed.Contains(aFace)) + if (aProcessed.Contains(aFace)) { continue; + } Standard_Integer dummy; TopTools_SequenceOfShape edges; @@ -338,6 +333,7 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) TopLoc_Location aBaseLocation; Handle(Geom_Surface) aBaseSurface = BRep_Tool::Surface(aFace,aBaseLocation); aBaseSurface = ClearRts(aBaseSurface); + aBaseSurface = Handle(Geom_Surface)::DownCast(aBaseSurface->Copy()); // find adjacent faces to union Standard_Integer i; @@ -439,8 +435,7 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) // sorting any type of edges aWire = TopoDS::Wire(aContext->Apply(aWire)); - TopoDS_Face tmpF = TopoDS::Face(aContext->Apply(faces(1).Oriented(TopAbs_FORWARD))); - Handle(ShapeFix_Wire) sfw = new ShapeFix_Wire(aWire,tmpF,Precision::Confusion()); + Handle(ShapeFix_Wire) sfw = new ShapeFix_Wire(aWire,aResult,Precision::Confusion()); sfw->FixReorder(); Standard_Boolean isDegRemoved = Standard_False; if(!sfw->StatusReorder ( ShapeExtend_FAIL )) { @@ -478,7 +473,7 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) Standard_Real f,l; //smh protection on NULL pcurve Handle(Geom2d_Curve) c2d; - if(!sae.PCurve(sbwd->Edge(j),tmpF,c2d,f,l)) { + if(!sae.PCurve(sbwd->Edge(j),aResult,c2d,f,l)) { aLastEdge--; continue; } @@ -499,8 +494,8 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) gp_XY aVec = anEnd-aStart; Handle(Geom2d_Line) aLine = new Geom2d_Line(aStart,gp_Dir2d(anEnd-aStart)); - B.UpdateEdge(E,aLine,tmpF,0.); - B.Range(E,tmpF,0.,aVec.Modulus()); + B.UpdateEdge(E,aLine,aResult,0.); + B.Range(E,aResult,0.,aVec.Modulus()); Handle(Geom_Curve) C3d; B.UpdateEdge(E,C3d,0.); B.Degenerated(E,Standard_True); @@ -585,30 +580,27 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) // ptv add fix same parameter sfe.FixSameParameter(E, myTolerance); } - - myContext->Replace(aSoOrSh, aResult); } - //else - { - for (exp.Init(aSoOrSh, TopAbs_FACE); exp.More(); exp.Next()) { - TopoDS_Face aFace = TopoDS::Face(exp.Current().Oriented(TopAbs_FORWARD)); - Handle(ShapeFix_Wire) sfw = new ShapeFix_Wire; - sfw->SetContext(myContext); - sfw->SetPrecision(myTolerance); - sfw->SetMinTolerance(myTolerance); - sfw->SetMaxTolerance(Max(1.,myTolerance*1000.)); - sfw->SetFace(aFace); - for (TopoDS_Iterator iter (aFace,Standard_False); iter.More(); iter.Next()) { - TopoDS_Wire wire = TopoDS::Wire(iter.Value()); - sfw->Load(wire); - sfw->FixReorder(); - sfw->FixShifted(); - } + + for (exp.Init(aSoOrSh, TopAbs_FACE); exp.More(); exp.Next()) { + TopoDS_Face aFace = TopoDS::Face(exp.Current().Oriented(TopAbs_FORWARD)); + Handle(ShapeFix_Wire) sfw = new ShapeFix_Wire; + sfw->SetContext(aContext); + sfw->SetPrecision(myTolerance); + sfw->SetMinTolerance(myTolerance); + sfw->SetMaxTolerance(Max(1.,myTolerance*1000.)); + sfw->SetFace(aFace); + for (TopoDS_Iterator iter (aFace,Standard_False); iter.More(); iter.Next()) { + TopoDS_Wire wire = TopoDS::Wire(iter.Value()); + sfw->Load(wire); + sfw->FixReorder(); + sfw->FixShifted(); } } } // end processing each solid - aResShape = myContext->Apply(Shape); + const TopoDS_Shape aResShape = aContext->Apply(Shape); + return aResShape; } From a0e22ed86a0df64143edb095e07295a014b32c88 Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 2 Jul 2014 11:17:40 +0400 Subject: [PATCH 055/118] 0022618: [CEA 1062] Define the transparency by default in the preferences --- doc/salome/gui/GEOM/images/pref15.png | Bin 130990 -> 91226 bytes .../gui/GEOM/input/geometry_preferences.doc | 5 +- resources/SalomeApp.xml.in | 1 + src/GEOMGUI/GEOM_Displayer.cxx | 47 +++++++++++++++--- src/GEOMGUI/GEOM_Displayer.h | 5 +- src/GEOMGUI/GEOM_msg_en.ts | 4 ++ src/GEOMGUI/GEOM_msg_fr.ts | 4 ++ src/GEOMGUI/GEOM_msg_ja.ts | 4 ++ src/GEOMGUI/GeometryGUI.cxx | 11 +++- 9 files changed, 68 insertions(+), 13 deletions(-) diff --git a/doc/salome/gui/GEOM/images/pref15.png b/doc/salome/gui/GEOM/images/pref15.png index 0fec2802ae0f8d6e8402420c3854ed17363a3c41..64aa25d740097337489f7ab885f4193ca2662496 100644 GIT binary patch literal 91226 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¥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 literal 130990 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 diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc index 6d322fcb6..6c1f7d03b 100644 --- a/doc/salome/gui/GEOM/input/geometry_preferences.doc +++ b/doc/salome/gui/GEOM/input/geometry_preferences.doc @@ -33,8 +33,7 @@ default color for edges, vectors and wires (isolated lines).

  • vertices.
  • Color of isolines - allows to select default color for isolines.
  • -
  • Step value for spin boxes - allows to define the increment -of values set in spin boxes.
  • +
  • Transparency - allows to define default transparency value.
  • Deflection coefficient - allows to define default deflection coefficient for lines and surfaces. A smaller coefficient provides better quality of a shape in the viewer.
  • @@ -46,6 +45,8 @@ predefined materials.
  • Isolines width - allows to define default width of the isolines.
  • Preview edges width - allows to define width of the edges for preview.
  • Measures line width - allows to define lines width of measurements tools.
  • +
  • Step value for spin boxes - allows to define the increment +of values set in spin boxes.
  • Automatic bring to front - when the option is on, the objects selected by the user automatically become "top-level".
  • diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 24a0f148d..47fa423d2 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -44,6 +44,7 @@ + diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 4cd41a6eb..8a8969492 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -507,6 +507,9 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) int aType = resMgr->integerValue("Geometry", "type_of_marker", (int)Aspect_TOM_PLUS); myWidth = resMgr->integerValue("Geometry", "edge_width", -1); myIsosWidth = resMgr->integerValue("Geometry", "isolines_width", -1); + + myTransparency = resMgr->integerValue("Geometry", "transparency", 0) / 100.; + myHasTransparency = false; myTypeOfMarker = (Aspect_TypeOfMarker)(std::min((int)Aspect_TOM_RING3, std::max((int)Aspect_TOM_POINT, aType))); myScaleOfMarker = (resMgr->integerValue("Geometry", "marker_scale", 1)-(int)GEOM::MS_10)*0.5 + 1.0; @@ -519,7 +522,6 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) myWidth = -1; myType = -1; - myTransparency = -1.0; myToActivate = true; // This parameter is used for activisation/deactivisation of objects to be displayed @@ -2057,24 +2059,54 @@ void GEOM_Displayer::UnsetColor() * Set transparency for shape displaying. */ //================================================================= -void GEOM_Displayer::SetTransparency( const double transparency ) +double GEOM_Displayer::SetTransparency( const double transparency ) { - myTransparency = transparency; + double aPrevTransparency = myTransparency; + if ( transparency < 0 ) { + UnsetTransparency(); + } + else { + myTransparency = transparency; + myHasTransparency = true; + } + return aPrevTransparency; } +//================================================================= +/*! + * GEOM_Displayer::GetTransparency + * Get transparency for shape displaying. + */ +//================================================================= double GEOM_Displayer::GetTransparency() const { return myTransparency; } +//================================================================= +/*! + * GEOM_Displayer::HasTransparency + * Check if transparency for shape displaying is set. + */ +//================================================================= bool GEOM_Displayer::HasTransparency() const { - return myTransparency != -1.0; + return myHasTransparency; } -void GEOM_Displayer::UnsetTransparency() +//================================================================= +/*! + * GEOM_Displayer::UnsetTransparency + * Unset transparency for shape displaying. + */ +//================================================================= +double GEOM_Displayer::UnsetTransparency() { - myTransparency = -1.0; + double aPrevTransparency = myTransparency; + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + myTransparency = resMgr->integerValue("Geometry", "transparency", 0) / 100.; + myHasTransparency = false; + return aPrevTransparency; } @@ -2452,7 +2484,8 @@ PropMap GEOM_Displayer::getDefaultPropertyMap() arg( resMgr->integerValue( "Geometry", "iso_number_v", 1 ) ) ); // - transparency (opacity = 1-transparency) - propMap.insert( GEOM::propertyName( GEOM::Transparency ), 0.0 ); + propMap.insert( GEOM::propertyName( GEOM::Transparency ), + resMgr->integerValue( "Geometry", "transparency", 0 ) / 100. ); // - display mode (take default value from preferences) propMap.insert( GEOM::propertyName( GEOM::DisplayMode ), diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index 257b4494e..7061a58cb 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -139,8 +139,8 @@ public: int GetColor () const; bool HasColor () const; - void SetTransparency ( const double ); - void UnsetTransparency(); + double SetTransparency ( const double ); + double UnsetTransparency(); double GetTransparency () const; bool HasTransparency () const; @@ -294,6 +294,7 @@ protected: Aspect_TypeOfMarker myTypeOfMarker; double myScaleOfMarker; double myTransparency; + bool myHasTransparency; private: SalomeApp_Application* myApp; diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index e125146d8..04e9f9d6b 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -3148,6 +3148,10 @@ Please, select face, shell or solid and try again PREF_DISPLAY_MODE Default display mode + + PREF_TRANSPARENCY + Transparency + PREF_FREE_BOUND_COLOR Color of free boundaries diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 4aa87fa5a..20d5ebe4e 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -3152,6 +3152,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_DISPLAY_MODE Mode de visualisation + + PREF_TRANSPARENCY + Transparence + PREF_FREE_BOUND_COLOR Couleur des contours libres diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index e6ff64c64..2d39d9f4d 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -3143,6 +3143,10 @@ PREF_DISPLAY_MODE 表示モード + + PREF_TRANSPARENCY + 透明度 + PREF_FREE_BOUND_COLOR 自由境界の色 diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index e8745c0f2..c3cba1b41 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -2338,8 +2338,8 @@ void GeometryGUI::createPreferences() int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup, LightApp_Preferences::Selector, "Geometry", "toplevel_dm" ); - int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup, - LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" ); + int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup, + LightApp_Preferences::IntSpin, "Geometry", "transparency" ); int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup, LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" ); @@ -2375,6 +2375,9 @@ void GeometryGUI::createPreferences() setPreferenceProperty( wd[i], "max", 5 ); } + int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup, + LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" ); + addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup, LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" ); @@ -2523,6 +2526,10 @@ void GeometryGUI::createPreferences() setPreferenceProperty( step, "max", 10000 ); setPreferenceProperty( step, "precision", 3 ); + // Set property for trandparency value for spinboxes + setPreferenceProperty( transparency, "min", 0 ); + setPreferenceProperty( transparency, "max", 100 ); + // Set property for deflection value for spinboxes setPreferenceProperty( defl, "min", GEOM::minDeflection() ); setPreferenceProperty( defl, "max", 1.0 ); From 9e822ecfcd7638413f45b5e9b89b71473ac9a164 Mon Sep 17 00:00:00 2001 From: ana Date: Wed, 2 Jul 2014 13:20:45 +0400 Subject: [PATCH 056/118] Win32 compatibility --- src/DependencyTree/CMakeLists.txt | 4 +++ src/DependencyTree/DependencyTree.h | 33 +++++++++++++++++++ src/DependencyTree/DependencyTree_Arrow.cxx | 4 +++ src/DependencyTree/DependencyTree_Arrow.h | 4 ++- src/DependencyTree/DependencyTree_Object.h | 4 ++- src/DependencyTree/DependencyTree_Selector.h | 4 ++- src/DependencyTree/DependencyTree_View.h | 4 ++- src/DependencyTree/DependencyTree_ViewModel.h | 4 ++- 8 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 src/DependencyTree/DependencyTree.h diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 91580628d..7a4cce203 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -25,6 +25,7 @@ INCLUDE(UseQt4Ext) INCLUDE_DIRECTORIES( ${QT_INCLUDES} ${GUI_INCLUDE_DIRS} + ${CAS_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/src/GEOMGUI ${PROJECT_SOURCE_DIR}/src/GEOMBase ${PROJECT_SOURCE_DIR}/src/GEOM @@ -39,6 +40,7 @@ INCLUDE_DIRECTORIES( ADD_DEFINITIONS( ${QT_DEFINITIONS} ${GUI_DEFINITIONS} + ${OMNIORB_DEFINITIONS} ${CAS_DEFINITIONS} ) @@ -49,6 +51,7 @@ SET(_link_LIBRARIES ${GUI_GraphicsView} GEOM GEOMBase + GEOMToolsGUI ) # --- headers --- @@ -57,6 +60,7 @@ SET(DependencyTree_HEADERS DependencyTree_Arrow.h DependencyTree_Object.h DependencyTree_Selector.h + DependencyTree.h ) # header files / to be processed by moc diff --git a/src/DependencyTree/DependencyTree.h b/src/DependencyTree/DependencyTree.h new file mode 100644 index 000000000..4f47eb3a9 --- /dev/null +++ b/src/DependencyTree/DependencyTree.h @@ -0,0 +1,33 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef DEPENDENCYTREE_H +#define DEPENDENCYTREE_H + +#if defined WIN32 +# if defined DEPENDENCYTREE_EXPORTS || defined DependencyTree_EXPORTS +# define DEPENDENCYTREE_EXPORT __declspec( dllexport ) +# else +# define DEPENDENCYTREE_EXPORT __declspec( dllimport ) +# endif +#else +# define DEPENDENCYTREE_EXPORT +#endif + +#endif // DEPENDENCYTREE_H diff --git a/src/DependencyTree/DependencyTree_Arrow.cxx b/src/DependencyTree/DependencyTree_Arrow.cxx index 81784d1a0..945b631bc 100644 --- a/src/DependencyTree/DependencyTree_Arrow.cxx +++ b/src/DependencyTree/DependencyTree_Arrow.cxx @@ -28,6 +28,10 @@ // Qt includes #include +#ifdef _MSC_VER +#define _USE_MATH_DEFINES +#endif + #include const qreal arrowSize = 20; diff --git a/src/DependencyTree/DependencyTree_Arrow.h b/src/DependencyTree/DependencyTree_Arrow.h index 087755651..9f73bfe51 100644 --- a/src/DependencyTree/DependencyTree_Arrow.h +++ b/src/DependencyTree/DependencyTree_Arrow.h @@ -22,9 +22,11 @@ #include +#include "DependencyTree.h" + class DependencyTree_Object; -class DependencyTree_Arrow : public QGraphicsLineItem +class DEPENDENCYTREE_EXPORT DependencyTree_Arrow : public QGraphicsLineItem { public: diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h index fae775edc..db2c4a22b 100644 --- a/src/DependencyTree/DependencyTree_Object.h +++ b/src/DependencyTree/DependencyTree_Object.h @@ -28,7 +28,9 @@ #include -class DependencyTree_Object: public GraphicsView_Object +#include "DependencyTree.h" + +class DEPENDENCYTREE_EXPORT DependencyTree_Object: public GraphicsView_Object { public: diff --git a/src/DependencyTree/DependencyTree_Selector.h b/src/DependencyTree/DependencyTree_Selector.h index b5096920a..5203d4d55 100644 --- a/src/DependencyTree/DependencyTree_Selector.h +++ b/src/DependencyTree/DependencyTree_Selector.h @@ -22,10 +22,12 @@ #include +#include "DependencyTree.h" + class DependencyTree_ViewModel; class DependencyTree_View; -class DependencyTree_Selector: public LightApp_GVSelector +class DEPENDENCYTREE_EXPORT DependencyTree_Selector: public LightApp_GVSelector { public: diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h index 6c606d401..298933729 100644 --- a/src/DependencyTree/DependencyTree_View.h +++ b/src/DependencyTree/DependencyTree_View.h @@ -35,6 +35,8 @@ #include #include +#include "DependencyTree.h" + class DependencyTree_Object; class DependencyTree_Arrow; class DependencyTree_View; @@ -42,7 +44,7 @@ class DependencyTree_View; typedef std::map EntryObjectMap; typedef std::map,DependencyTree_Arrow*> ArrowsInfo; -class DependencyTree_View: public GraphicsView_ViewPort +class DEPENDENCYTREE_EXPORT DependencyTree_View: public GraphicsView_ViewPort { Q_OBJECT diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h index afbfc0da0..ffc3d7607 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.h +++ b/src/DependencyTree/DependencyTree_ViewModel.h @@ -22,7 +22,9 @@ #include -class DependencyTree_ViewModel: public GraphicsView_Viewer +#include "DependencyTree.h" + +class DEPENDENCYTREE_EXPORT DependencyTree_ViewModel: public GraphicsView_Viewer { Q_OBJECT From b0494784bfbd2e6f5d970ec03a847d1282050494 Mon Sep 17 00:00:00 2001 From: mpa Date: Wed, 2 Jul 2014 16:14:57 +0400 Subject: [PATCH 057/118] 0022472: EDF 2690 Reduce Study: Delete cyclic dependency --- src/DependencyTree/CMakeLists.txt | 2 -- .../DependencyTree_ViewModel.cxx | 18 ++++-------------- src/DependencyTree/DependencyTree_ViewModel.h | 1 - src/GEOMGUI/GeometryGUI.cxx | 5 ++++- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 7a4cce203..9cff09675 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -32,7 +32,6 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/OBJECT ${PROJECT_SOURCE_DIR}/src/GEOMUtils ${PROJECT_SOURCE_DIR}/src/GEOMClient - ${PROJECT_SOURCE_DIR}/src/GEOMToolsGUI ${PROJECT_BINARY_DIR}/idl ) @@ -51,7 +50,6 @@ SET(_link_LIBRARIES ${GUI_GraphicsView} GEOM GEOMBase - GEOMToolsGUI ) # --- headers --- diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index 3c03d67ac..e6c853008 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -31,7 +31,7 @@ // GEOM includes #include -#include +#include // QT includes #include @@ -113,18 +113,6 @@ void DependencyTree_ViewModel::onShowOnlySelected() } } -//================================================================================= -// function : onReduceStudy() -// purpose : slot for showing dialog box "Reduce Study" -//================================================================================= -void DependencyTree_ViewModel::onReduceStudy() -{ - DependencyTree_View* viewPort = dynamic_cast( getActiveViewPort() ); - QDialog* dlg = new GEOMToolsGUI_ReduceStudyDlg( viewPort ); - if( dlg != NULL ) - dlg->show(); -} - //================================================================================= // function : contextMenuPopup() // purpose : process calling of context menu popup @@ -137,12 +125,14 @@ void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu ) { int aNbSelected = viewPort->nbSelected(); if( aNbSelected > 0 ) { + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + GeometryGUI* aGeomGUI = dynamic_cast( app->module( "Geometry" ) ); theMenu->clear(); theMenu->addAction( tr( "MEN_DISPLAY" ), this, SLOT( onShowSelected() ) ); theMenu->addAction( tr( "MEN_DISPLAY_ONLY" ), this, SLOT( onShowOnlySelected() ) ); theMenu->addAction( tr( "MEN_REBUILD_THE_TREE"), viewPort, SLOT( onRebuildModel() ) ); theMenu->addSeparator(); - theMenu->addAction( tr( "MEN_REDUCE_STUDY" ), this, SLOT( onReduceStudy() ) ); + theMenu->addAction( aGeomGUI->action( GEOMOp::OpReduceStudy ) ); } } } diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h index ffc3d7607..9bac8cbce 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.h +++ b/src/DependencyTree/DependencyTree_ViewModel.h @@ -41,7 +41,6 @@ private slots: void onShowSelected(); void onShowOnlySelected(); - void onReduceStudy(); }; diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index c3cba1b41..43e865ae9 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -65,6 +65,8 @@ #include #include +#include + #include #include #include @@ -433,6 +435,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) SUIT_ViewWindow* window = desk->activeWindow(); bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); + bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() ); // if current viewframe is not of OCC and not of VTK type - return immediately // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example) QList NotViewerDependentCommands; @@ -447,7 +450,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) << GEOMOp::OpPointMarker << GEOMOp::OpCreateFolder << GEOMOp::OpSortChildren; - if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) { + if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) { // activate OCC viewer getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true); } From 12122ec11134a0a2269fd862311c2cfccfcfdeb4 Mon Sep 17 00:00:00 2001 From: ana Date: Wed, 2 Jul 2014 17:15:40 +0400 Subject: [PATCH 058/118] Win32 compatibility --- src/DependencyTree/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt index 9cff09675..b48e32760 100644 --- a/src/DependencyTree/CMakeLists.txt +++ b/src/DependencyTree/CMakeLists.txt @@ -42,6 +42,9 @@ ADD_DEFINITIONS( ${OMNIORB_DEFINITIONS} ${CAS_DEFINITIONS} ) +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) # libraries to link to SET(_link_LIBRARIES From b5261a981848dacc6b428a95d0e7731ebb8fdc91 Mon Sep 17 00:00:00 2001 From: skv Date: Thu, 3 Jul 2014 13:47:17 +0400 Subject: [PATCH 059/118] 0052436: MakePipeWithDifferentsSections does not work correctly --- src/GEOMImpl/GEOMImpl_PipeDriver.cxx | 22 ++++++++++----------- src/GenerationGUI/GenerationGUI_PipeDlg.cxx | 7 +++---- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx index af4f40df9..3f0f0c986 100644 --- a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx @@ -681,6 +681,7 @@ TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections TopTools_SequenceOfShape aSeqBases; TopTools_SequenceOfShape aSeqLocs; TopTools_SequenceOfShape aSeqFaces; + Standard_Boolean NeedCreateSolid = Standard_False; Standard_Integer i = 1; for (i = 1; i <= nbBases; i++) { @@ -697,7 +698,6 @@ TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections //if for section was specified face with a few wires then a few // pipes were build and make solid - Standard_Boolean NeedCreateSolid = Standard_False; if (aTypeBase == TopAbs_SHELL) { // create wire as boundary contour if shell is no closed // get free boundary shapes @@ -1015,21 +1015,21 @@ TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections aBuilder.SetTolerance(aTolConf, aTolConf, aTolAng); aBuilder.Build(); + + Standard_Boolean isDone = aBuilder.IsDone(); + + if (isDone && NeedCreateSolid) { + isDone = aBuilder.MakeSolid(); + } + + if (!isDone) { + Standard_ConstructionError::Raise("Pipe construction failure"); + } aShape = aBuilder.Shape(); aSeqFaces.Append(aShape); for (j = 1; j <=usedBases.Length(); j++) aBuilder.Delete(usedBases.Value(j)); } - - //for case if section is face - if (aSeqFaces.Length() >1) { - BRep_Builder aB; - TopoDS_Compound aComp; - aB.MakeCompound(aComp); - for (i = 1; i <= aSeqFaces.Length(); i++) - aB.Add(aComp,aSeqFaces.Value(i)); - aShape = aComp; - } } return aShape; diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx index e9ead7a40..edcbec331 100644 --- a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx @@ -165,6 +165,8 @@ void GenerationGUI_PipeDlg::Init() connect(GroupMakePoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(GroupMakePoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(GroupMakePoints->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(GroupMakePoints->CheckBox1, SIGNAL(clicked()), this, SLOT(processPreview())); + connect(GroupMakePoints->CheckBox2, SIGNAL(clicked()), this, SLOT(processPreview())); initName(tr("GEOM_PIPE")); resize(100,100); @@ -264,10 +266,7 @@ bool GenerationGUI_PipeDlg::ClickOnApply() return false; initName(); - if ( getConstructorId() != 1 ) - ConstructorsClicked( getConstructorId() ); - // activate selection and connect selection manager - // GroupPoints->PushButton1->click(); + return true; } From 80531775fdb7e0394dab5b10c41e582d4dfdbe97 Mon Sep 17 00:00:00 2001 From: akl Date: Mon, 7 Jul 2014 18:51:33 +0400 Subject: [PATCH 060/118] Fix problems with displaying Dependency tree on Windows platform. --- src/DependencyTree/DependencyTree_Object.cxx | 15 ++++++++------- src/DependencyTree/DependencyTree_Selector.cxx | 14 ++++++++------ src/DependencyTree/DependencyTree_View.cxx | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx index a25f4caa3..25203629e 100644 --- a/src/DependencyTree/DependencyTree_Object.cxx +++ b/src/DependencyTree/DependencyTree_Object.cxx @@ -63,7 +63,8 @@ myIsMainObject( false ) SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; SalomeApp_Study* study = dynamic_cast(app->activeStudy()); - int studyId = GeometryGUI::ClientStudyToStudy( study->studyDS())->StudyId(); + SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + int studyId = aStudyDS->StudyId(); myGeomObject = GeometryGUI::GetGeomGen()->GetObject( studyId, myEntry.c_str() ); updateName(); @@ -167,9 +168,9 @@ void DependencyTree_Object::updateName() { QString name = myGeomObject->GetName(); - QString studyEntry = myGeomObject->GetStudyEntry(); + CORBA::String_var studyEntryVar = myGeomObject->GetStudyEntry(); - if( studyEntry.isEmpty() ) { + if( QString( studyEntryVar.in() ).isEmpty() ) { if( name.isEmpty() ) name = "unpublished"; myColor = myUnpublishObjectColor; @@ -203,8 +204,8 @@ void DependencyTree_Object::updateName() //================================================================================= void DependencyTree_Object::setColor( const QColor& theColor ) { - QString studyEntry = myGeomObject->GetStudyEntry(); - if( studyEntry.isEmpty() ) + CORBA::String_var studyEntryVar = myGeomObject->GetStudyEntry(); + if( QString( studyEntryVar.in() ).isEmpty() ) myColor = myUnpublishObjectColor; else myColor = theColor; @@ -236,8 +237,8 @@ void DependencyTree_Object::setMainObjectColor( const QColor& theColor ) void DependencyTree_Object::setUnpublishObjectColor( const QColor& theColor ) { myUnpublishObjectColor = theColor; - QString studyEntry = myGeomObject->GetStudyEntry(); - if( studyEntry.isEmpty() ) + CORBA::String_var studyEntryVar = myGeomObject->GetStudyEntry(); + if( QString( studyEntryVar.in() ).isEmpty() ) myColor = myUnpublishObjectColor; } diff --git a/src/DependencyTree/DependencyTree_Selector.cxx b/src/DependencyTree/DependencyTree_Selector.cxx index 370e4511c..98f0cc030 100644 --- a/src/DependencyTree/DependencyTree_Selector.cxx +++ b/src/DependencyTree/DependencyTree_Selector.cxx @@ -48,23 +48,25 @@ void DependencyTree_Selector::getSelection( SUIT_DataOwnerPtrList& theList ) con { for( myView->initSelected(); myView->moreSelected(); myView->nextSelected() ) if( DependencyTree_Object* treeObject = dynamic_cast( myView->selectedObject() ) ) { - const char* entry; - const char* name; + QString studyEntry; + QString name; GEOM::GEOM_BaseObject_var anObj = GeometryGUI::GetGeomGen()->GetObject( myView->getStudyId(), treeObject->getEntry().c_str() ); if( anObj->_is_nil() ) continue; - QString studyEntry = anObj->GetStudyEntry(); + CORBA::String_var studyEntryVar = anObj->GetStudyEntry(); + studyEntry = studyEntryVar.in(); if( studyEntry.isEmpty() ) { - entry = treeObject->getEntry().c_str(); + studyEntry = treeObject->getEntry().c_str(); name = "TEMP_IO_UNPUBLISHED"; } else { - entry = studyEntry.toStdString().c_str(); name = "TEMP_IO"; } Handle(SALOME_InteractiveObject) tmpIO = - new SALOME_InteractiveObject( entry, "GEOM", name); + new SALOME_InteractiveObject( studyEntry.toStdString().c_str(), + "GEOM", + name.toStdString().c_str()); theList.append( new LightApp_DataOwner( tmpIO ) ); } diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 884446e6e..68dcf7669 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -594,7 +594,7 @@ void DependencyTree_View::drawTree() std::map< int, std::vector< std::string > >::const_iterator level; for( level = levelObjects.begin(); level != levelObjects.end(); level++ ) { - int step = -horDistance * ( level->second.size() - 1 ) / 2; + int step = -horDistance * ( int(level->second.size()) - 1 ) / 2; for( int objIter = 0; objIter < level->second.size(); objIter++ ) { DependencyTree_Object* anObject = myTreeMap[ level->second.at( objIter ) ]; anObject->setPos( step, verDistance * level->first ); From 477e6586c0dc3d1457bef95c3121cfb65a093439 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 9 Jul 2014 17:32:02 +0400 Subject: [PATCH 061/118] OCCT dev version porting (6.7.2) --- .../AdvancedGUI_DividedCylinderDlg.cxx | 1 - .../AdvancedGUI_SmoothingSurfaceDlg.cxx | 1 - src/BasicGUI/BasicGUI_ArcDlg.cxx | 1 - src/BasicGUI/BasicGUI_CircleDlg.cxx | 1 - src/GenerationGUI/GenerationGUI_PipeDlg.cxx | 1 - src/OCC2VTK/GEOM_EdgeSource.cxx | 19 +- src/OCC2VTK/GEOM_EdgeSource.h | 20 +- src/OCC2VTK/GEOM_FaceSource.cxx | 23 +- src/OCC2VTK/GEOM_FaceSource.h | 13 +- src/OCC2VTK/GEOM_ShadingFace.cxx | 3 +- src/OCC2VTK/GEOM_VertexSource.cxx | 26 +- src/OCC2VTK/GEOM_VertexSource.h | 9 +- src/OCC2VTK/GEOM_WireframeFace.cxx | 3 +- src/OCC2VTK/OCC2VTK_internal.h | 228 ------------------ 14 files changed, 42 insertions(+), 307 deletions(-) delete mode 100644 src/OCC2VTK/OCC2VTK_internal.h diff --git a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx index 682433f1e..4b1a9f288 100644 --- a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx @@ -35,7 +35,6 @@ #include #include #include -#include #include #include diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx index 46be04e60..151af6348 100644 --- a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx @@ -33,7 +33,6 @@ #include #include #include -#include #include #include diff --git a/src/BasicGUI/BasicGUI_ArcDlg.cxx b/src/BasicGUI/BasicGUI_ArcDlg.cxx index 4f0d910de..fff94014c 100644 --- a/src/BasicGUI/BasicGUI_ArcDlg.cxx +++ b/src/BasicGUI/BasicGUI_ArcDlg.cxx @@ -35,7 +35,6 @@ #include #include -#include #include #include #include diff --git a/src/BasicGUI/BasicGUI_CircleDlg.cxx b/src/BasicGUI/BasicGUI_CircleDlg.cxx index bd5781fdc..54cbb52be 100644 --- a/src/BasicGUI/BasicGUI_CircleDlg.cxx +++ b/src/BasicGUI/BasicGUI_CircleDlg.cxx @@ -36,7 +36,6 @@ #include #include -#include #include #include #include diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx index edcbec331..8e264045e 100644 --- a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include diff --git a/src/OCC2VTK/GEOM_EdgeSource.cxx b/src/OCC2VTK/GEOM_EdgeSource.cxx index 0a3a41a0d..2ff7b91c7 100755 --- a/src/OCC2VTK/GEOM_EdgeSource.cxx +++ b/src/OCC2VTK/GEOM_EdgeSource.cxx @@ -18,7 +18,6 @@ // #include "GEOM_EdgeSource.h" -#include "OCC2VTK_internal.h" #include @@ -43,32 +42,20 @@ vtkStandardNewMacro(GEOM_EdgeSource); GEOM_EdgeSource::GEOM_EdgeSource() : myIsVector(false) { - myData = new EdgeSourceInternal; this->SetNumberOfInputPorts(0); } GEOM_EdgeSource::~GEOM_EdgeSource() -{ - delete myData; +{ } void GEOM_EdgeSource::AddEdge (const TopoDS_Edge& theEdge, bool theIsVector) { - myData->myEdgeSet.Add(theEdge); + myEdgeSet.Add(theEdge); myIsVector = theIsVector; } -void GEOM_EdgeSource::Clear() -{ - myData->myEdgeSet.Clear(); -} - -bool GEOM_EdgeSource::IsEmpty() -{ - return myData->myEdgeSet.IsEmpty(); -} - int GEOM_EdgeSource::RequestData(vtkInformation *vtkNotUsed(request), vtkInformationVector **vtkNotUsed(inputVector), vtkInformationVector *outputVector) @@ -82,7 +69,7 @@ int GEOM_EdgeSource::RequestData(vtkInformation *vtkNotUsed(request), aPolyData->SetPoints(aPts); aPts->Delete(); - TEdgeSet::Iterator anIter (myData->myEdgeSet); + TEdgeSet::Iterator anIter (myEdgeSet); for (; anIter.More(); anIter.Next()) { TopoDS_Edge anEdge = anIter.Value(); if ( !myIsVector ) diff --git a/src/OCC2VTK/GEOM_EdgeSource.h b/src/OCC2VTK/GEOM_EdgeSource.h index da64b0a52..0c2dbb67a 100755 --- a/src/OCC2VTK/GEOM_EdgeSource.h +++ b/src/OCC2VTK/GEOM_EdgeSource.h @@ -23,26 +23,26 @@ #include "OCC2VTK.h" #include +#include +#include + +typedef NCollection_Map TEdgeSet; #include #include class vtkPolyData; -class EdgeSourceInternal; class OCC2VTK_EXPORT GEOM_EdgeSource: public vtkPolyDataAlgorithm { public: - vtkTypeMacro(GEOM_EdgeSource, vtkPolyDataAlgorithm); - + vtkTypeMacro(GEOM_EdgeSource,vtkPolyDataAlgorithm); static GEOM_EdgeSource* New(); void AddEdge (const TopoDS_Edge& theEdge, bool theIsVector = false); - void Clear(); + void Clear(){ myEdgeSet.Clear();} - bool IsEmpty(); - void SetVectorMode(bool); bool GetVectorMode(); @@ -52,14 +52,17 @@ public: vtkPolyData* thePolyData, vtkPoints* thePts, bool theIsVector = false); + + bool IsEmpty(){return myEdgeSet.IsEmpty();} + protected: - EdgeSourceInternal* myData; + TEdgeSet myEdgeSet; // The flag is common for all edges, because the shape, // representing a vector, can have only one edge. bool myIsVector, myIsVectorMode; - virtual int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*); + virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); GEOM_EdgeSource(); ~GEOM_EdgeSource(); @@ -70,4 +73,5 @@ private: void operator=(const GEOM_EdgeSource&); }; + #endif //GEOM_EDGESOURCE_H diff --git a/src/OCC2VTK/GEOM_FaceSource.cxx b/src/OCC2VTK/GEOM_FaceSource.cxx index 41c4bf547..7067a7282 100755 --- a/src/OCC2VTK/GEOM_FaceSource.cxx +++ b/src/OCC2VTK/GEOM_FaceSource.cxx @@ -18,7 +18,6 @@ // #include "GEOM_FaceSource.h" -#include "OCC2VTK_internal.h" #include @@ -30,35 +29,19 @@ GEOM_FaceSource::GEOM_FaceSource() { - myData = new FaceSourceInternal; this->SetNumberOfInputPorts(0); -} +} GEOM_FaceSource::~GEOM_FaceSource() { - delete myData; -} +} void GEOM_FaceSource:: AddFace(const TopoDS_Face& theFace) { - myData->myFaceSet.Add(theFace); + myFaceSet.Add(theFace); } - -void -GEOM_FaceSource:: -Clear() -{ - myData->myFaceSet.Clear(); -} - -bool -GEOM_FaceSource:: -IsEmpty() -{ - return myData->myFaceSet.IsEmpty(); -} void GEOM_FaceSource:: diff --git a/src/OCC2VTK/GEOM_FaceSource.h b/src/OCC2VTK/GEOM_FaceSource.h index 8a824f8e0..4627f7a48 100755 --- a/src/OCC2VTK/GEOM_FaceSource.h +++ b/src/OCC2VTK/GEOM_FaceSource.h @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +#include // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -24,12 +24,15 @@ #include #include +#include +#include + +typedef NCollection_Map TFaceSet; #include #include class vtkPolyData; -class FaceSourceInternal; class OCC2VTK_EXPORT GEOM_FaceSource: public vtkPolyDataAlgorithm { @@ -37,11 +40,11 @@ public: vtkTypeMacro(GEOM_FaceSource,vtkPolyDataAlgorithm); void AddFace(const TopoDS_Face& theFace); - void Clear(); - bool IsEmpty(); + void Clear(){ myFaceSet.Clear();} + bool IsEmpty(){return myFaceSet.IsEmpty();} protected: - FaceSourceInternal* myData; + TFaceSet myFaceSet; static void MoveTo(gp_Pnt thePnt, diff --git a/src/OCC2VTK/GEOM_ShadingFace.cxx b/src/OCC2VTK/GEOM_ShadingFace.cxx index a802cbce3..9b56761ee 100755 --- a/src/OCC2VTK/GEOM_ShadingFace.cxx +++ b/src/OCC2VTK/GEOM_ShadingFace.cxx @@ -18,7 +18,6 @@ // #include "GEOM_ShadingFace.h" -#include "OCC2VTK_internal.h" #include @@ -58,7 +57,7 @@ int GEOM_ShadingFace::RequestData(vtkInformation *vtkNotUsed(request), aPolyData->SetPoints(aPts); aPts->Delete(); - TFaceSet::Iterator anIter(myData->myFaceSet); + TFaceSet::Iterator anIter(myFaceSet); for(; anIter.More(); anIter.Next()){ const TopoDS_Face& aFace = anIter.Value(); OCC2VTK(aFace,aPolyData,aPts); diff --git a/src/OCC2VTK/GEOM_VertexSource.cxx b/src/OCC2VTK/GEOM_VertexSource.cxx index 9df081137..e313ff865 100755 --- a/src/OCC2VTK/GEOM_VertexSource.cxx +++ b/src/OCC2VTK/GEOM_VertexSource.cxx @@ -18,7 +18,6 @@ // #include "GEOM_VertexSource.h" -#include "OCC2VTK_internal.h" #include @@ -35,29 +34,20 @@ vtkStandardNewMacro(GEOM_VertexSource); GEOM_VertexSource::GEOM_VertexSource() -{ - myData = new VertexSourceInternal; +{ this->SetNumberOfInputPorts(0); -} +} GEOM_VertexSource::~GEOM_VertexSource() -{ - delete myData; -} +{ +} void GEOM_VertexSource:: AddVertex(const TopoDS_Vertex& theVertex) -{ - myData->myVertexSet.Add(theVertex); -} - -void -GEOM_VertexSource:: -Clear() -{ - myData->myVertexSet.Clear(); -} +{ + myVertexSet.Add(theVertex); +} int GEOM_VertexSource::RequestData(vtkInformation *vtkNotUsed(request), vtkInformationVector **vtkNotUsed(inputVector), @@ -72,7 +62,7 @@ int GEOM_VertexSource::RequestData(vtkInformation *vtkNotUsed(request), aPolyData->SetPoints(aPts); aPts->Delete(); - TVertexSet::Iterator anIter(myData->myVertexSet); + TVertexSet::Iterator anIter(myVertexSet); for(; anIter.More(); anIter.Next()){ const TopoDS_Vertex& aVertex = anIter.Value(); OCC2VTK(aVertex,aPolyData,aPts); diff --git a/src/OCC2VTK/GEOM_VertexSource.h b/src/OCC2VTK/GEOM_VertexSource.h index d3e64c1c8..d0ca91e35 100755 --- a/src/OCC2VTK/GEOM_VertexSource.h +++ b/src/OCC2VTK/GEOM_VertexSource.h @@ -23,12 +23,15 @@ #include "OCC2VTK.h" #include +#include +#include + +typedef NCollection_Map TVertexSet; #include #include class vtkPolyData; -class VertexSourceInternal; class OCC2VTK_EXPORT GEOM_VertexSource: public vtkPolyDataAlgorithm { @@ -37,7 +40,7 @@ public: static GEOM_VertexSource* New(); void AddVertex(const TopoDS_Vertex& theVertex); - void Clear(); + void Clear(){ myVertexSet.Clear();} static void OCC2VTK(const TopoDS_Vertex& theVertex, @@ -45,7 +48,7 @@ public: vtkPoints* thePts); protected: - VertexSourceInternal* myData; + TVertexSet myVertexSet; virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); diff --git a/src/OCC2VTK/GEOM_WireframeFace.cxx b/src/OCC2VTK/GEOM_WireframeFace.cxx index cf91f71e6..8c94300f5 100755 --- a/src/OCC2VTK/GEOM_WireframeFace.cxx +++ b/src/OCC2VTK/GEOM_WireframeFace.cxx @@ -18,7 +18,6 @@ // #include "GEOM_WireframeFace.h" -#include "OCC2VTK_internal.h" #include @@ -64,7 +63,7 @@ int GEOM_WireframeFace::RequestData(vtkInformation *vtkNotUsed(request), aPolyData->SetPoints(aPts); aPts->Delete(); - TFaceSet::Iterator anIter(myData->myFaceSet); + TFaceSet::Iterator anIter(myFaceSet); for(; anIter.More(); anIter.Next()){ const TopoDS_Face& aFace = anIter.Value(); OCC2VTK(aFace,aPolyData,aPts,NbIso,Discret); diff --git a/src/OCC2VTK/OCC2VTK_internal.h b/src/OCC2VTK/OCC2VTK_internal.h deleted file mode 100644 index 32e2869e2..000000000 --- a/src/OCC2VTK/OCC2VTK_internal.h +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef OCC2VTK_INTERNAL_H -#define OCC2VTK_INTERNAL_H - -#include -#include -#include -#include - -#include -#include -#include - -template class GEOM_Set - : public NCollection_BaseCollection, - public NCollection_BaseList -{ -public: - typedef NCollection_TListNode SetNode; - typedef NCollection_TListIterator Iterator; - -public: - //! Constructor - GEOM_Set(const Handle(NCollection_BaseAllocator)& theAllocator=0L) : - NCollection_BaseCollection(theAllocator), - NCollection_BaseList() {} - - //! Copy constructor - GEOM_Set (const GEOM_Set& theOther) : - NCollection_BaseCollection(theOther.myAllocator), - NCollection_BaseList() - { *this = theOther; } - - //! Size - Number of items - virtual Standard_Integer Size (void) const - { return Extent(); } - - //! Replace this list by the items of theOther collection - virtual void Assign (const NCollection_BaseCollection& theOther) - { - if (this == &theOther) - return; - Clear(); - TYPENAME NCollection_BaseCollection::Iterator& anIter = - theOther.CreateIterator(); - for (; anIter.More(); anIter.Next()) - { - SetNode* pNew = new (this->myAllocator) SetNode(anIter.Value()); - PAppend (pNew); - } - } - - //! Replace this list by the items of theOther Set - GEOM_Set& operator= (const GEOM_Set& theOther) - { - if (this == &theOther) - return *this; - Clear (); - SetNode * pCur = (SetNode *) theOther.PFirst(); - while (pCur) - { - SetNode* pNew = new (this->myAllocator) SetNode(pCur->Value()); - PAppend (pNew); - pCur = (SetNode *) pCur->Next(); - } - return *this; - } - - //! Clear this set - void Clear (void) - { PClear (SetNode::delNode, this->myAllocator); } - - //! Add item - Standard_Boolean Add (const TheItemType& theItem) - { - Iterator anIter(*this); - while (anIter.More()) - { - if (anIter.Value() == theItem) - return Standard_False; - anIter.Next(); - } - SetNode * pNew = new (this->myAllocator) SetNode(theItem); - PPrepend (pNew); - return Standard_True; - } - - //! Remove item - Standard_Boolean Remove (const TheItemType& theItem) - { - Iterator anIter(*this); - while (anIter.More()) - { - if (anIter.Value() == theItem) - { - PRemove (anIter, SetNode::delNode, this->myAllocator); - return Standard_True; - } - anIter.Next(); - } - return Standard_False; - } - - //! Remove - wrapper against 'hiding' warnings - void Remove (Iterator& theIter) - { NCollection_BaseList::PRemove (theIter, - SetNode::delNode, - this->myAllocator); } - - //! Contains - item inclusion query - Standard_Boolean Contains (const TheItemType& theItem) const - { - Iterator anIter(*this); - for (; anIter.More(); anIter.Next()) - if (anIter.Value() == theItem) - return Standard_True; - return Standard_False; - } - - //! IsASubset - Standard_Boolean IsASubset (const GEOM_Set& theOther) - { - if (this == &theOther) - return Standard_True; - Iterator anIter(theOther); - for (; anIter.More(); anIter.Next()) - if (!Contains(anIter.Value())) - return Standard_False; - return Standard_True; - } - - //! IsAProperSubset - Standard_Boolean IsAProperSubset (const GEOM_Set& theOther) - { - if (myLength <= theOther.Extent()) - return Standard_False; - Iterator anIter(theOther); - for (; anIter.More(); anIter.Next()) - if (!Contains(anIter.Value())) - return Standard_False; - return Standard_True; - } - - //! Union - void Union (const GEOM_Set& theOther) - { - if (this == &theOther) - return; - Iterator anIter(theOther); - Iterator aMyIter; - Standard_Integer i, iLength=myLength; - for (; anIter.More(); anIter.Next()) - { - Standard_Boolean isIn=Standard_False; - const TheItemType& theItem = anIter.Value(); - for (aMyIter.Init(*this), i=1; - i<=iLength; - aMyIter.Next(), i++) - if (theItem == aMyIter.Value()) - isIn = Standard_True; - if (!isIn) - { - SetNode * pNew = new (this->myAllocator) SetNode(theItem); - PAppend (pNew); - } - } - } - - //! Intersection - void Intersection (const GEOM_Set& theOther) - { - if (this == &theOther) - return; - Iterator anIter(*this); - while (anIter.More()) - if (theOther.Contains(anIter.Value())) - anIter.Next(); - else - NCollection_BaseList::PRemove (anIter, SetNode::delNode, this->myAllocator); - } - - //! Difference (Subtraction) - void Difference (const GEOM_Set& theOther) - { - if (this == &theOther) - return; - Iterator anIter(*this); - while (anIter.More()) - if (theOther.Contains(anIter.Value())) - NCollection_BaseList::PRemove (anIter, SetNode::delNode, this->myAllocator); - else - anIter.Next(); - } - - //! Destructor - clears the List - ~GEOM_Set (void) - { Clear(); } - -private: - //! Creates Iterator for use on BaseCollection - virtual TYPENAME NCollection_BaseCollection::Iterator& - CreateIterator(void) const - { return *(new (this->IterAllocator()) Iterator(*this)); } - -}; - -typedef GEOM_Set TVertexSet; -typedef GEOM_Set TEdgeSet; -typedef GEOM_Set TFaceSet; - -class VertexSourceInternal -{ -public: - TVertexSet myVertexSet; -}; - -class EdgeSourceInternal -{ -public: - TEdgeSet myEdgeSet; -}; - -class FaceSourceInternal -{ -public: - TFaceSet myFaceSet; -}; - -#endif // OCC2VTK_INTERNAL_H From c32371db75711f7df7f34f5596dec265c1f60ac7 Mon Sep 17 00:00:00 2001 From: mpa Date: Tue, 15 Jul 2014 12:55:05 +0400 Subject: [PATCH 062/118] INT PAL 0052437: Manage dimentions with arguments "Parallel edges" does not work correctly --- src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx index 9ae10135a..b571b61c7 100644 --- a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx +++ b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx @@ -407,6 +407,9 @@ Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthByParallelEdge return NULL; } + if( aFirstSh == aSecondSh ) + return NULL; + TopoDS_Edge aFirstEdge = TopoDS::Edge( aFirstSh ); TopoDS_Edge aSecondEdge = TopoDS::Edge( aSecondSh ); From 73747ffeb558151f48c52ef25e58900b4e31278c Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 16 Jul 2014 19:17:01 +0400 Subject: [PATCH 063/118] 0022626: EDF 8453 GEOM: order with SubShapeAllSortedCentres --- src/GEOM_SWIG/geomBuilder.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 9452921e9..6235a8b70 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -5788,7 +5788,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## Explode a shape on sub-shapes of a given type. - # Sub-shapes will be sorted by coordinates of their gravity centers. + # Sub-shapes will be sorted taking into account their gravity centers, + # to provide stable order of sub-shapes. # If the shape itself matches the type, it is also returned. # @param aShape Shape to be exploded. # @param aType Type of sub-shapes to be retrieved (see ShapeType()) @@ -5803,7 +5804,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def SubShapeAllSortedCentres(self, aShape, aType, theName=None): """ Explode a shape on sub-shapes of a given type. - Sub-shapes will be sorted by coordinates of their gravity centers. + Sub-shapes will be sorted taking into account their gravity centers, + to provide stable order of sub-shapes. If the shape itself matches the type, it is also returned. Parameters: @@ -5823,7 +5825,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return ListObj ## Explode a shape on sub-shapes of a given type. - # Sub-shapes will be sorted by coordinates of their gravity centers. + # Sub-shapes will be sorted taking into account their gravity centers, + # to provide stable order of sub-shapes. # @param aShape Shape to be exploded. # @param aType Type of sub-shapes to be retrieved (see ShapeType()) # @return List of IDs of sub-shapes. @@ -5833,7 +5836,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def SubShapeAllSortedCentresIDs(self, aShape, aType): """ Explode a shape on sub-shapes of a given type. - Sub-shapes will be sorted by coordinates of their gravity centers. + Sub-shapes will be sorted taking into account their gravity centers, + to provide stable order of sub-shapes. Parameters: aShape Shape to be exploded. From a8393a016936ad8e0ee071b43322e954fa806371 Mon Sep 17 00:00:00 2001 From: skv Date: Thu, 17 Jul 2014 14:06:57 +0400 Subject: [PATCH 064/118] 0022626: Fix documentation of explode functionality --- doc/salome/gui/GEOM/input/creating_explode.doc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/salome/gui/GEOM/input/creating_explode.doc b/doc/salome/gui/GEOM/input/creating_explode.doc index b2f971864..1de29847a 100644 --- a/doc/salome/gui/GEOM/input/creating_explode.doc +++ b/doc/salome/gui/GEOM/input/creating_explode.doc @@ -25,11 +25,13 @@ sub-shapes of a given Type and returns a List of sub-shapes. sub-shapes of a given Type and returns a List of IDs of sub-shapes.
  • geompy.SubShapeAllSortedCentres(Shape, Type) explodes a -shape on sub-shapes of a given type and sorts them by coordinates of -their gravity centers, returning a list of sub-shapes.
  • +shape on sub-shapes of a given type and sorts them taking into account +their gravity centers, to provide stable order of sub-shapes. +It returns a list of sub-shapes.
  • geompy.SubShapeAllSortedCentresIDs(Shape, Type) explodes -a shape on sub-shapes of a given type and sorts them by coordinates of -their gravity centers, returning a List of IDs of sub-shapes.
  • +a shape on sub-shapes of a given type and sorts them taking into +account their gravity centers, to provide stable order of sub-shapes. +It returns a List of IDs of sub-shapes.
  • geompy.SubShape(Shape, Type, ListOfInd) allows to obtain a compound of sub-shapes of the Shape, selected by they indices in a list of all sub-shapes of the given Type. Each index is in the range From 806956971e5eeda2c52d91b2152593da2b79dbc5 Mon Sep 17 00:00:00 2001 From: mpa Date: Thu, 17 Jul 2014 14:56:46 +0400 Subject: [PATCH 065/118] Implemented a new method of displaying shading with edges mode of object using OCC technologies --- src/GEOMGUI/GEOM_Displayer.cxx | 10 ++- src/OBJECT/GEOM_AISShape.cxx | 107 +++------------------------------ src/OBJECT/GEOM_AISShape.hxx | 15 ----- src/OBJECT/GEOM_Actor.cxx | 50 --------------- src/OBJECT/GEOM_Actor.h | 10 --- 5 files changed, 16 insertions(+), 176 deletions(-) diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 8a8969492..09c3ccf2d 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -853,9 +853,6 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap // - color for edges in shading+edges mode AISShape->SetEdgesInShadingColor( SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::OutlineColor ) ).value() ) ); - - // ??? - AISShape->storeBoundaryColors(); // set display mode AISShape->SetDisplayMode( HasDisplayMode() ? @@ -864,6 +861,13 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap // display mode from properties propMap.value( GEOM::propertyName( GEOM::DisplayMode ) ).toInt() ); + // - face boundaries color + if( AISShape->DisplayMode() == GEOM_AISShape::ShadingWithEdges ) + AISShape->Attributes()->SetFaceBoundaryDraw( Standard_True ); + anAspect = AISShape->Attributes()->FaceBoundaryAspect(); + anAspect->SetColor( SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::OutlineColor ) ).value() ) ); + AISShape->Attributes()->SetFaceBoundaryAspect( anAspect ); + // set display vectors flag AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() ); diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index e790b8072..462eed0c2 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -158,14 +158,9 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, myShadingColor = Quantity_Color( Quantity_NOC_GOLDENROD ); myPrevDisplayMode = 0; - storeBoundaryColors(); - myEdgesInShadingColor = Quantity_Color( Quantity_NOC_GOLDENROD ); - myUIsoNumber = -1; - myVIsoNumber = -1; - myTopLevel = Standard_False; Graphic3d_MaterialAspect aMatAspect; if ( !HasMaterial() ) { @@ -226,9 +221,6 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent case 0://StdSelect_DM_Wireframe: case CustomHighlight: { - restoreIsoNumbers(); - // Restore wireframe edges colors - restoreBoundaryColors(); if(isTopLev) { SetColor(topLevelColor()); Handle(Prs3d_LineAspect) anAspect = Attributes()->WireAspect(); @@ -243,10 +235,16 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent } case 1://StdSelect_DM_Shading: { - restoreIsoNumbers(); shadingMode(aPresentationManager, aPrs, aMode); - // Store wireframe edges colors - storeBoundaryColors(); + break; + } + case 2: { //ShadingWithEdges + //Shaded faces + shadingMode(aPresentationManager, aPrs, AIS_Shaded); + myDrawer->SetFaceBoundaryDraw( Standard_True ); + Handle(Prs3d_LineAspect) aBoundaryAspect = + new Prs3d_LineAspect ( myEdgesInShadingColor, Aspect_TOL_SOLID, myOwnWidth ); + myDrawer->SetFaceBoundaryAspect (aBoundaryAspect); break; } case 3: //StdSelect_DM_HLR: @@ -258,38 +256,6 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent break; } } - - if ( aMode == ShadingWithEdges ) { - // Temporary store number of iso lines in order to recover its later - // when display mode is achnged to 'Wirefame' or 'Shading'. - // Iso lines are not displayed in 'Shading with edges' mode. - storeIsoNumbers(); - - // Reset number of iso lines to 0 - resetIsoNumbers(); - - //Shaded faces - shadingMode(aPresentationManager, aPrs, AIS_Shaded); - - // Store wireframe edges colors - storeBoundaryColors(); - - // Coloring edges - Handle(Prs3d_LineAspect) anAspect = myDrawer->UnFreeBoundaryAspect(); - anAspect->SetColor( myEdgesInShadingColor ); - myDrawer->SetUnFreeBoundaryAspect( anAspect ); - - anAspect = myDrawer->FreeBoundaryAspect(); - anAspect->SetColor( myEdgesInShadingColor ); - myDrawer->SetFreeBoundaryAspect( anAspect ); - - // Add edges to presentation - if( anIsColorField && myFieldDimension == 1 ) - drawField( aPrs ); - else - StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer); - } - if (isShowVectors()) { const bool isVector = IsKind(STANDARD_TYPE(GEOM_AISVector)); @@ -428,61 +394,6 @@ void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPre } } -void GEOM_AISShape::storeIsoNumbers() -{ - myUIsoNumber = myDrawer->UIsoAspect()->Number(); - myVIsoNumber = myDrawer->VIsoAspect()->Number(); -} - -void GEOM_AISShape::restoreIsoNumbers() -{ - if ( myUIsoNumber > 0 ) { - // Restore number of U iso lines - Handle(Prs3d_IsoAspect) anAspect = myDrawer->UIsoAspect(); - anAspect->SetNumber( myUIsoNumber ); - myDrawer->SetUIsoAspect( anAspect ); - } - - if ( myVIsoNumber > 0 ) { - // Restore number of V iso lines - Handle(Prs3d_IsoAspect) anAspect = myDrawer->VIsoAspect(); - anAspect->SetNumber( myVIsoNumber ); - myDrawer->SetVIsoAspect( anAspect ); - } -} - -void GEOM_AISShape::resetIsoNumbers() -{ - Handle(Prs3d_IsoAspect) anAspect = myDrawer->UIsoAspect(); - anAspect->SetNumber( 0 ); - myDrawer->SetUIsoAspect( anAspect ); - - anAspect = myDrawer->VIsoAspect(); - anAspect->SetNumber( 0 ); - myDrawer->SetVIsoAspect( anAspect ); -} - -void GEOM_AISShape::storeBoundaryColors() -{ - Aspect_TypeOfLine aLT; - Standard_Real aW; - - myDrawer->FreeBoundaryAspect()->Aspect()->Values( myFreeBoundaryColor, aLT, aW); - myDrawer->UnFreeBoundaryAspect()->Aspect()->Values( myUnFreeBoundaryColor, aLT, aW); -} - -void GEOM_AISShape::restoreBoundaryColors() -{ - Handle(Prs3d_LineAspect) anAspect = myDrawer->FreeBoundaryAspect(); - anAspect->SetColor( myFreeBoundaryColor ); - myDrawer->SetFreeBoundaryAspect( anAspect ); - - anAspect = myDrawer->UnFreeBoundaryAspect(); - anAspect->SetColor( myUnFreeBoundaryColor ); - myDrawer->SetUnFreeBoundaryAspect( anAspect ); -} - - Standard_Boolean GEOM_AISShape::isTopLevel() { return myTopLevel; } diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx index b2881d2c6..d744a791a 100644 --- a/src/OBJECT/GEOM_AISShape.hxx +++ b/src/OBJECT/GEOM_AISShape.hxx @@ -139,12 +139,6 @@ public: const Handle(Standard_Type)& DynamicType() const; Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - void storeIsoNumbers(); - void restoreIsoNumbers(); - void resetIsoNumbers(); - - void storeBoundaryColors(); - static Quantity_Color topLevelColor(); static void setTopLevelColor(const Quantity_Color c); @@ -173,8 +167,6 @@ protected: const Handle(Prs3d_Presentation)& aPrs, const Standard_Integer aMode); - void restoreBoundaryColors(); - // Displaying the field data void drawField( const Handle(Prs3d_Presentation)& thePrs, const bool theIsText = false, @@ -185,15 +177,8 @@ protected: gp_Pnt& theCenter ); Quantity_Color myShadingColor; - - Quantity_Color myFreeBoundaryColor; - Quantity_Color myUnFreeBoundaryColor; - Quantity_Color myEdgesInShadingColor; - int myUIsoNumber; - int myVIsoNumber; - private: TCollection_AsciiString myName; bool myDisplayVectors; diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index 92860af3e..47bc66b17 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -186,9 +186,6 @@ GEOM_Actor::GEOM_Actor(): myShadingFaceActor->SetProperty(myShadingFaceProp.GetPointer()); - myNbIsos[0] = -1; - myNbIsos[1] = -1; - // Toggle display mode setDisplayMode(0); // WIRE FRAME SetVectorMode(0); // @@ -296,16 +293,6 @@ setDisplayMode(int theMode) #ifdef MYDEBUG MESSAGE ( "GEOM_Actor::setDisplayMode = "<GetProperty()->SetColor(myIsolatedEdgeColor[0], myIsolatedEdgeColor[1], @@ -896,14 +880,6 @@ GEOM_Actor MESSAGE ( this << " GEOM_Actor::Highlight myIsSelected="<SetVisibility( false ); bool anIsPreselected = myIsPreselected; @@ -1081,11 +1049,6 @@ void GEOM_Actor::SetEdgesInShadingColor(double r,double g,double b) myEdgesInShadingColor[2] = b; } -void GEOM_Actor::StoreIsoNumbers() -{ - myWireframeFaceSource->GetNbIso(myNbIsos[0], myNbIsos[1]); -} - void GEOM_Actor::SetIsosWidth(const int width) { myWireframeFaceActor->GetProperty()->SetLineWidth(width); } @@ -1106,16 +1069,3 @@ void GEOM_Actor::SetWidth(const int width) { int GEOM_Actor::GetWidth() const { return (int)myIsolatedEdgeActor->GetProperty()->GetLineWidth(); } - -void GEOM_Actor::RestoreIsoNumbers() -{ - if ( myNbIsos[0] > 0 || myNbIsos[1] > 0 ) - // Restore number of U and (or) V iso lines - myWireframeFaceSource->SetNbIso(myNbIsos); -} - -void GEOM_Actor::ResetIsoNumbers() -{ - int aNb[2] = {0, 0}; - myWireframeFaceSource->SetNbIso(aNb); -} diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h index 687663932..fa7193a0f 100644 --- a/src/OBJECT/GEOM_Actor.h +++ b/src/OBJECT/GEOM_Actor.h @@ -201,15 +201,6 @@ public: virtual bool GetVectorMode(); - - void - StoreIsoNumbers(); - - void - RestoreIsoNumbers(); - - void - ResetIsoNumbers(); protected: void SetModified(); @@ -221,7 +212,6 @@ protected: private: TopoDS_Shape myShape; - int myNbIsos[2]; bool isOnlyVertex; float myDeflection; From 70b0ad241ea65582f22baabf817f84cd9a28bb58 Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 23 Jul 2014 11:57:20 +0400 Subject: [PATCH 066/118] Improving graphical 'Unpublish' functionality to hide also references of the given objects. It is done according to 17816 note in 0022472 (EDF 2690 GEOM: Keep only some terminal objects and its parents) issue. --- src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 7 +++++++ src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index 2ca503aae..6cc902366 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -590,6 +590,13 @@ void GEOMToolsGUI::OnUnpublishObject() { _PTR(AttributeDrawable) aDrw = B->FindOrCreateAttribute( obj, "AttributeDrawable" ); aDrw->SetDrawable( false ); disp->EraseWithChildren(IObject); + // hide references if any + std::vector< _PTR(SObject) > vso = aStudy->FindDependances(obj); + for ( int i = 0; i < vso.size(); i++ ) { + _PTR(SObject) refObj = vso[i]; + aDrw = B->FindOrCreateAttribute( refObj, "AttributeDrawable" ); + aDrw->SetDrawable( false ); + } } // if ( obj ) } // iterator aSelMgr->clearSelected(); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx index 514a5f200..17c3a2b3f 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx @@ -340,6 +340,13 @@ void GEOMToolsGUI_PublishDlg::clickOnApply() { item->setData(0,Qt::CheckStateRole,QVariant()); } } + // show references if any + std::vector< _PTR(SObject) > vso = aStudy->FindDependances(SO); + for ( int i = 0; i < vso.size(); i++ ) { + _PTR(SObject) refObj = vso[i]; + aDrw = aBuilder->FindOrCreateAttribute( refObj, "AttributeDrawable" ); + aDrw->SetDrawable( true ); + } } } toProcess.clear(); From 8325f0f6bad857eef1ec0f6f3d04cbf225e35163 Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 23 Jul 2014 12:51:21 +0400 Subject: [PATCH 067/118] 2nd part of previous commit. --- src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx | 7 +++++++ src/GEOM_SWIG/geomBuilder.py | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx index 4fa9d4efa..82c380ea7 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx @@ -396,6 +396,13 @@ void GEOMToolsGUI_ReduceStudyDlg::unpublishObjects( std::set& theOb _PTR(AttributeDrawable) aDrw = aStudyBuilder->FindOrCreateAttribute( obj, "AttributeDrawable" ); aDrw->SetDrawable( false ); myDisplayer.EraseWithChildren( new SALOME_InteractiveObject( studyEntry.c_str(), "GEOM", "TEMP_IO" ) ); + // hide references if any + std::vector< _PTR(SObject) > vso = myStudy->FindDependances(obj); + for ( int i = 0; i < vso.size(); i++ ) { + _PTR(SObject) refObj = vso[i]; + aDrw = aStudyBuilder->FindOrCreateAttribute( refObj, "AttributeDrawable" ); + aDrw->SetDrawable( false ); + } } } myApp->updateObjectBrowser( false ); diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 6235a8b70..925e2d72e 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -955,6 +955,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): genericAttribute = self.myBuilder.FindOrCreateAttribute(aSObject, "AttributeDrawable") drwAttribute = genericAttribute._narrow(SALOMEDS.AttributeDrawable) drwAttribute.SetDrawable(False) + # hide references if any + vso = self.myStudy.FindDependances(aSObject); + for refObj in vso : + genericAttribute = self.myBuilder.FindOrCreateAttribute(refObj, "AttributeDrawable") + drwAttribute = genericAttribute._narrow(SALOMEDS.AttributeDrawable) + drwAttribute.SetDrawable(False) + pass pass # end of l1_geomBuilder_auxiliary From 67af1443e55619366ed9e4164f30b3291efa6267 Mon Sep 17 00:00:00 2001 From: Florian Brunet Date: Fri, 25 Jul 2014 14:17:07 +0200 Subject: [PATCH 068/118] updated translation files for t-shape thickness reduction --- src/AdvancedGUI/AdvancedGUI_msg_en.ts | 12 ++++++------ src/AdvancedGUI/AdvancedGUI_msg_fr.ts | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/AdvancedGUI/AdvancedGUI_msg_en.ts b/src/AdvancedGUI/AdvancedGUI_msg_en.ts index 172d0b42f..06ab04312 100644 --- a/src/AdvancedGUI/AdvancedGUI_msg_en.ts +++ b/src/AdvancedGUI/AdvancedGUI_msg_en.ts @@ -248,27 +248,27 @@ GEOM_PIPETSHAPE_ERR_EQUAL_RADII_L - Le rayon du tuyau principale ne peut pas être égal à la réduction d'épaisseur à gauche (rL)! + The main pipe radius can't be equal to the left thickness reduction radius (rL) GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_L - Le rayon extérieur du tuyau principal (Rayon + épaisseur) ne peut pas être égal au rayon externe de la réduction d'épaisseur à gauche (rL + wL)! + The main pipe external radius (Radius + Width) can't be equal to the left thickness reduction external radius (rL + wL) GEOM_PIPETSHAPE_ERR_EQUAL_RADII_R - Le rayon du tuyau principal ne peut pas être égal au rayon de la réduction d'épaisseur à droite (rR)! + The main pipe radius can't be equal to the right thickness reduction radius (rR) GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_R - Le rayon extérieur du tuyau principal (Rayon + épaisseur) ne peut pas être égal au rayon externe de la réduction d'épaisseur à droite (rL + wL)! + The main pipe external radius (Radius + Width) can't be equal to the right thickness reduction external radius (rR + wR) GEOM_PIPETSHAPE_ERR_EQUAL_RADII_I - Le rayon du tuyau incident ne peut pas être égal au rayon de la réduction d'épaisseur du tuyau incident (rI)! + The incident pipe radius can't be equal to the incident pipe thickness reduction radius (rI) GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_I - Le rayon externe du tuyau incident (Rayon + Epaisseur) ne peut pas être égal au rayon extérieur de la réduction du tuyau incident (rI + wI)! + The incident pipe external radius (Radius + Width) can't be equal to the incident pipe thickness reduction external radius (rI + wI) diff --git a/src/AdvancedGUI/AdvancedGUI_msg_fr.ts b/src/AdvancedGUI/AdvancedGUI_msg_fr.ts index b3f38261a..912a3008c 100644 --- a/src/AdvancedGUI/AdvancedGUI_msg_fr.ts +++ b/src/AdvancedGUI/AdvancedGUI_msg_fr.ts @@ -248,27 +248,27 @@ GEOM_PIPETSHAPE_ERR_EQUAL_RADII_L - Main pipe Radius can't be equal to Left thickness reduction Radius (rL)! + Le rayon du tuyau principal ne peut pas être égal à la réduction d'épaisseur à gauche (rL) GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_L - Main pipe external Radius (Radius + Width) can't be equal to Left thickness reduction external Radius (rL + wL)! + Le rayon extérieur du tuyau principal (Rayon + épaisseur) ne peut pas être égal au rayon externe de la réduction d'épaisseur à gauche (rL + wL) GEOM_PIPETSHAPE_ERR_EQUAL_RADII_R - Main pipe Radius can't be equal to Right thickness reduction Radius (rR)! + Le rayon du tuyau principal ne peut pas être égal au rayon de la réduction d'épaisseur à droite (rR) GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_R - Main pipe external Radius (Radius + Width) can't be equal to Right thickness reduction external Radius (rR + wR)! + Le rayon extérieur du tuyau principal (Rayon + épaisseur) ne peut pas être égal au rayon externe de la réduction d'épaisseur à droite (rL + wL) GEOM_PIPETSHAPE_ERR_EQUAL_RADII_I - Incident pipe Radius can't be equal to Incident pipe thickness reduction Radius (rI)! + Le rayon du tuyau incident ne peut pas être égal au rayon de la réduction d'épaisseur du tuyau incident (rI) GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_I - Incident pipe external Radius (Rayon + Epaisseur) can't be equal to Incident pipe thickness reduction external Radius (rI + wI)! + Le rayon externe du tuyau incident (Rayon + Epaisseur) ne peut pas être égal au rayon extérieur de la réduction du tuyau incident (rI + wI) From 8f2784ea72ee75d3f2574590031abee1db7565f1 Mon Sep 17 00:00:00 2001 From: Florian Brunet Date: Tue, 5 Aug 2014 14:42:10 +0200 Subject: [PATCH 069/118] Add an Angle option in the cylinder primitive in order to build portion of cylinders in both constructors. --- idl/GEOM_Gen.idl | 11 +- idl/GEOM_Superv.idl | 6 +- resources/GEOMCatalog.xml.in | 10 ++ src/DlgRef/CMakeLists.txt | 2 + src/DlgRef/DlgRef.cxx | 28 ++++ src/DlgRef/DlgRef.h | 32 +++++ src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui | 123 ++++++++++++++++++ src/GEOMImpl/GEOMImpl_CylinderDriver.cxx | 19 +-- src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx | 10 +- src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx | 4 +- src/GEOMImpl/GEOMImpl_ICylinder.hxx | 15 ++- src/GEOMImpl/GEOMImpl_Types.hxx | 4 +- src/GEOM_I/GEOM_I3DPrimOperations_i.cc | 9 +- src/GEOM_I/GEOM_I3DPrimOperations_i.hh | 10 +- src/GEOM_I_Superv/GEOM_Superv_i.cc | 10 +- src/GEOM_I_Superv/GEOM_Superv_i.hh | 6 +- src/GEOM_SWIG/geomBuilder.py | 26 ++-- src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 74 +++++++++-- src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h | 10 +- 19 files changed, 347 insertions(+), 62 deletions(-) create mode 100644 src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index bbaafca6b..94fbc0acd 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -1471,28 +1471,31 @@ module GEOM GEOM_Object MakeDiskR (in double theR, in short theOrientation); /*! - * \brief Create a cylinder with given radius and height at + * \brief Create a cylinder with given radius, height and angle (portion of cylinder) at * the origin of coordinate system. * * Axis of the cylinder will be collinear to the OZ axis of the coordinate system. * \param theR Cylinder radius. * \param theH Cylinder height. + * \param theA Cylinder angle. * \return New GEOM_Object, containing the created cylinder. */ - GEOM_Object MakeCylinderRH (in double theR, in double theH); + GEOM_Object MakeCylinderRH (in double theR, in double theH, in double theA); /*! - * \brief Create a cylinder with given base point, axis, radius and height. + * \brief Create a cylinder with given base point, axis, radius, height and angle (portion of cylinder). * \param thePnt Central point of cylinder base. * \param theAxis Cylinder axis. * \param theR Cylinder radius. * \param theH Cylinder height. + * \param theA Cylinder angle. * \return New GEOM_Object, containing the created cylinder. */ GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt, in GEOM_Object theAxis, in double theR, - in double theH); + in double theH, + in double theA); /*! * \brief Create a cone with given height and radiuses at diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl index 07f7fe92f..c56f0ca57 100644 --- a/idl/GEOM_Superv.idl +++ b/idl/GEOM_Superv.idl @@ -158,9 +158,11 @@ module GEOM GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt, in GEOM_Object theAxis, in double theRadius, - in double theHeight) ; + in double theHeight, + in double theAngle) ; GEOM_Object MakeCylinderRH (in double theR, - in double theH) ; + in double theH, + in double theA) ; GEOM_Object MakeSphere (in double theX, in double theY, in double theZ, diff --git a/resources/GEOMCatalog.xml.in b/resources/GEOMCatalog.xml.in index e9d665cd2..43438b5bd 100644 --- a/resources/GEOMCatalog.xml.in +++ b/resources/GEOMCatalog.xml.in @@ -1335,6 +1335,11 @@ double unknown + + theAngle + double + unknown + @@ -1362,6 +1367,11 @@ double unknown + + theAngle + double + unknown + diff --git a/src/DlgRef/CMakeLists.txt b/src/DlgRef/CMakeLists.txt index 3c365438f..632b2a328 100755 --- a/src/DlgRef/CMakeLists.txt +++ b/src/DlgRef/CMakeLists.txt @@ -75,6 +75,7 @@ SET(_uic_files DlgRef_2Sel2Spin2Push_QTD.ui DlgRef_2Sel2Spin3Check_QTD.ui DlgRef_2Sel2Spin_QTD.ui + DlgRef_2Sel3Spin1Check_QTD.ui DlgRef_2Sel3Spin2Rb_QTD.ui DlgRef_2Sel3Spin_QTD.ui DlgRef_2SelExt_QTD.ui @@ -92,6 +93,7 @@ SET(_uic_files DlgRef_3Sel4Spin2Check_QTD.ui DlgRef_3Sel_QTD.ui DlgRef_3Spin1Check_QTD.ui + DlgRef_3Spin1CheckCyl_QTD.ui DlgRef_3Spin_QTD.ui DlgRef_4Sel1List1Check_QTD.ui DlgRef_4Sel1List_QTD.ui diff --git a/src/DlgRef/DlgRef.cxx b/src/DlgRef/DlgRef.cxx index 9a6efd718..efeefa4c2 100644 --- a/src/DlgRef/DlgRef.cxx +++ b/src/DlgRef/DlgRef.cxx @@ -470,6 +470,20 @@ DlgRef_2Sel2Spin2Push::~DlgRef_2Sel2Spin2Push() { } +////////////////////////////////////////// +// DlgRef_2Sel3Spin1Check +////////////////////////////////////////// + +DlgRef_2Sel3Spin1Check::DlgRef_2Sel3Spin1Check( QWidget* parent, Qt::WindowFlags f ) +: QWidget( parent, f ) +{ + setupUi( this ); +} + +DlgRef_2Sel3Spin1Check::~DlgRef_2Sel3Spin1Check() +{ +} + ////////////////////////////////////////// // DlgRef_2Sel3Spin2Rb ////////////////////////////////////////// @@ -756,6 +770,20 @@ DlgRef_3Spin1Check::~DlgRef_3Spin1Check() { } +////////////////////////////////////////// +// DlgRef_3Spin1CheckCyl +////////////////////////////////////////// + +DlgRef_3Spin1CheckCyl::DlgRef_3Spin1CheckCyl( QWidget* parent, Qt::WindowFlags f ) +: QWidget( parent, f ) +{ + setupUi( this ); +} + +DlgRef_3Spin1CheckCyl::~DlgRef_3Spin1CheckCyl() +{ +} + ////////////////////////////////////////// // DlgRef_3Spin ////////////////////////////////////////// diff --git a/src/DlgRef/DlgRef.h b/src/DlgRef/DlgRef.h index c68358d11..fb3c8e047 100644 --- a/src/DlgRef/DlgRef.h +++ b/src/DlgRef/DlgRef.h @@ -548,6 +548,22 @@ public: ~DlgRef_2Sel2Spin2Push(); }; +////////////////////////////////////////// +// DlgRef_2Sel3Spin1Check +////////////////////////////////////////// + +#include "ui_DlgRef_2Sel3Spin1Check_QTD.h" + +class DLGREF_EXPORT DlgRef_2Sel3Spin1Check : public QWidget, + public Ui::DlgRef_2Sel3Spin1Check_QTD +{ + Q_OBJECT + +public: + DlgRef_2Sel3Spin1Check( QWidget* = 0, Qt::WindowFlags = 0 ); + ~DlgRef_2Sel3Spin1Check(); +}; + ////////////////////////////////////////// // DlgRef_2Sel3Spin2Rb ////////////////////////////////////////// @@ -826,6 +842,22 @@ public: ~DlgRef_3Spin1Check(); }; +////////////////////////////////////////// +// DlgRef_3Spin1CheckCyl +////////////////////////////////////////// + +#include "ui_DlgRef_3Spin1CheckCyl_QTD.h" + +class DLGREF_EXPORT DlgRef_3Spin1CheckCyl : public QWidget, + public Ui::DlgRef_3Spin1CheckCyl_QTD +{ + Q_OBJECT + +public: + DlgRef_3Spin1CheckCyl( QWidget* = 0, Qt::WindowFlags = 0 ); + ~DlgRef_3Spin1CheckCyl(); +}; + ////////////////////////////////////////// // DlgRef_3Spin ////////////////////////////////////////// diff --git a/src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui b/src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui new file mode 100644 index 000000000..1747f8d5c --- /dev/null +++ b/src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui @@ -0,0 +1,123 @@ + + + DlgRef_3Spin1CheckCyl_QTD + + + + 0 + 0 + 611 + 154 + + + + + + + + 0 + + + 0 + + + + + true + + + + + + + 9 + + + 6 + + + + + + 0 + 0 + + + + TL3 + + + false + + + + + + + + 0 + 0 + + + + TL2 + + + false + + + + + + + + 0 + 0 + + + + TL1 + + + false + + + + + + + + + + + + + + + + CB + + + + + + + + + + qPixmapFromMimeSource + + + SalomeApp_DoubleSpinBox + QDoubleSpinBox +
    SalomeApp_DoubleSpinBox.h
    +
    +
    + + SpinBox_DX + SpinBox_DY + SpinBox_DZ + + + +
    diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx index 9f2d816ab..521d03678 100644 --- a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx @@ -75,6 +75,8 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const gp_Pnt aP; gp_Vec aV; + + TopoDS_Shape aShape; if (aType == CYLINDER_R_H) { aP = gp::Origin(); @@ -109,14 +111,15 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const if (aCI.GetH() < 0.0) aV.Reverse(); gp_Ax2 anAxes (aP, aV); - - BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH())); - MC.Build(); - if (!MC.IsDone()) { - StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters"); - } - - TopoDS_Shape aShape = MC.Shape(); + aShape = BRepPrimAPI_MakeCylinder(anAxes, aCI.GetR(), Abs(aCI.GetH())).Shape(); + if(aCI.GetA() < 360. && aCI.GetA()> 0.){ + BRepPrimAPI_MakeCylinder MC(anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()*M_PI/180.); + MC.Build(); + if (!MC.IsDone()) { + StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters"); + } + aShape = MC.Shape(); + } if (aShape.IsNull()) return 0; aFunction->SetValue(aShape); diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx index 1e345fa04..f4139be06 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx @@ -488,7 +488,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskR (double theR, int theO * MakeCylinderRH */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, double theH) +Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, double theH, double theA) { SetErrorCode(KO); @@ -506,6 +506,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou aCI.SetR(theR); aCI.SetH(theH); + aCI.SetA(theA); //Compute the Cylinder value try { @@ -525,7 +526,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou //Make a Python command GEOM::TPythonDump(aFunction) << aCylinder - << " = geompy.MakeCylinderRH(" << theR << ", " << theH << ")"; + << " = geompy.MakeCylinderRH(" << theR << ", " << theH << ", " << theA << ")"; SetErrorCode(OK); return aCylinder; @@ -539,7 +540,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou //============================================================================= Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, - double theR, double theH) + double theR, double theH, double theA) { SetErrorCode(KO); @@ -567,6 +568,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO aCI.SetVector(aRefVec); aCI.SetR(theR); aCI.SetH(theH); + aCI.SetA(theA); //Compute the Cylinder value try { @@ -586,7 +588,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO //Make a Python command GEOM::TPythonDump(aFunction) << aCylinder << " = geompy.MakeCylinder(" - << thePnt << ", " << theVec << ", " << theR << ", " << theH << ")"; + << thePnt << ", " << theVec << ", " << theR << ", " << theH << ", " << theA << ")"; SetErrorCode(OK); return aCylinder; diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx index 36d0ac6b2..d0ae75588 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx @@ -48,10 +48,10 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations { Handle(GEOM_Object) theVec, double theR); Standard_EXPORT Handle(GEOM_Object) MakeDiskR (double theR, int theOrientation); - Standard_EXPORT Handle(GEOM_Object) MakeCylinderRH (double theR, double theH); + Standard_EXPORT Handle(GEOM_Object) MakeCylinderRH (double theR, double theH, double theA); Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, - double theR, double theH); + double theR, double theH, double theA); Standard_EXPORT Handle(GEOM_Object) MakeConeR1R2H (double theR1, double theR2, double theH); Standard_EXPORT Handle(GEOM_Object) MakeConePntVecR1R2H (Handle(GEOM_Object) thePnt, diff --git a/src/GEOMImpl/GEOMImpl_ICylinder.hxx b/src/GEOMImpl/GEOMImpl_ICylinder.hxx index f13ac7760..0955df29c 100644 --- a/src/GEOMImpl/GEOMImpl_ICylinder.hxx +++ b/src/GEOMImpl/GEOMImpl_ICylinder.hxx @@ -24,10 +24,13 @@ // #include "GEOM_Function.hxx" -#define CYL_ARG_R 1 -#define CYL_ARG_H 2 -#define CYL_ARG_PNT 3 -#define CYL_ARG_VEC 4 +#define CYL_ARG_PNT 1 +#define CYL_ARG_VEC 2 +#define CYL_ARG_R 3 +#define CYL_ARG_H 4 +#define CYL_ARG_A 5 + + class GEOMImpl_ICylinder { @@ -42,6 +45,10 @@ class GEOMImpl_ICylinder void SetH(double theH) { _func->SetReal(CYL_ARG_H, theH); } double GetH() { return _func->GetReal(CYL_ARG_H); } + + void SetA(double theA) { _func->SetReal(CYL_ARG_A, theA); } + + double GetA() { return _func->GetReal(CYL_ARG_A); } void SetPoint(Handle(GEOM_Function) theRefPoint) { _func->SetReference(CYL_ARG_PNT, theRefPoint); } diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx index 4f4792448..57093b4e6 100755 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -205,8 +205,8 @@ #define DISK_THREE_PNT 2 #define DISK_R 3 -#define CYLINDER_R_H 1 -#define CYLINDER_PNT_VEC_R_H 2 +#define CYLINDER_R_H 1 +#define CYLINDER_PNT_VEC_R_H 2 #define CONE_R1_R2_H 1 #define CONE_PNT_VEC_R1_R2_H 2 diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc index 2d1960361..68dc79279 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc @@ -246,7 +246,8 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR, */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR, - CORBA::Double theH) + CORBA::Double theH, + CORBA::Double theA) { GEOM::GEOM_Object_var aGEOMObject; @@ -254,7 +255,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th GetOperations()->SetNotDone(); //Create the Cylinder - Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH); + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH, theA); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -268,7 +269,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, - CORBA::Double theR, CORBA::Double theH) + CORBA::Double theR, CORBA::Double theH, CORBA::Double theA) { GEOM::GEOM_Object_var aGEOMObject; @@ -282,7 +283,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); //Create the Cylinder - Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH); + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH, theA); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh index a47518821..63d5fa4be 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh @@ -69,13 +69,15 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i : CORBA::Short theOrientation); GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, - CORBA::Double theH); - + CORBA::Double theH, + CORBA::Double theA); + GEOM::GEOM_Object_ptr MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, CORBA::Double theR, - CORBA::Double theH); - + CORBA::Double theH, + CORBA::Double theA); + GEOM::GEOM_Object_ptr MakeConeR1R2H (CORBA::Double theR1, CORBA::Double theR2, CORBA::Double theH); diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index 792cbe5ae..d70656378 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -1049,12 +1049,13 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeDiskR (CORBA::Double theR, GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theAxis, CORBA::Double theRadius, - CORBA::Double theHeight) + CORBA::Double theHeight, + CORBA::Double theAngle) { beginService( " GEOM_Superv_i::MakeCylinderPntVecRH" ); MESSAGE("GEOM_Superv_i::MakeCylinderPntVecRH"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight, theAngle); endService( " GEOM_Superv_i::MakeCylinderPntVecRH" ); return anObj; } @@ -1063,12 +1064,13 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr // MakeCylinderRH: //============================================================================= GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRH (CORBA::Double theR, - CORBA::Double theH) + CORBA::Double theH, + CORBA::Double theA) { beginService( " GEOM_Superv_i::MakeCylinderRH" ); MESSAGE("GEOM_Superv_i::MakeCylinderRH"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRH(theR, theH); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRH(theR, theH, theA); endService( " GEOM_Superv_i::MakeCylinderRH" ); return anObj; } diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh index 8058cc132..627be4797 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.hh +++ b/src/GEOM_I_Superv/GEOM_Superv_i.hh @@ -243,9 +243,11 @@ public: GEOM::GEOM_Object_ptr MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theAxis, CORBA::Double theRadius, - CORBA::Double theHeight); + CORBA::Double theHeight, + CORBA::Double theAngle); GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, - CORBA::Double theH); + CORBA::Double theH, + CORBA::Double theA); GEOM::GEOM_Object_ptr MakeSphere (CORBA::Double theX, CORBA::Double theY, CORBA::Double theZ, diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 925e2d72e..3f6c012d8 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -2969,11 +2969,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "disk") return anObj - ## Create a cylinder with given base point, axis, radius and height. + ## Create a cylinder with given base point, axis, radius, height and angle (for a portion of cylinder). # @param thePnt Central point of cylinder base. # @param theAxis Cylinder axis. # @param theR Cylinder radius. # @param theH Cylinder height. + # @param theA Cylinder angle in radian. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -2982,15 +2983,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_creation_cylinder "Example" @ManageTransactions("PrimOp") - def MakeCylinder(self, thePnt, theAxis, theR, theH, theName=None): + def MakeCylinder(self, thePnt, theAxis, theR, theH, theA=2*math.pi, theName=None): """ - Create a cylinder with given base point, axis, radius and height. + Create a cylinder with given base point, axis, radius, height and angle (for a portion of cylinder). Parameters: thePnt Central point of cylinder base. theAxis Cylinder axis. theR Cylinder radius. theH Cylinder height. + theA Cylinder angle in radian. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -2999,18 +3001,20 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py - theR,theH,Parameters = ParseParameters(theR, theH) - anObj = self.PrimOp.MakeCylinderPntVecRH(thePnt, theAxis, theR, theH) + theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) + anObj = self.PrimOp.MakeCylinderPntVecRH(thePnt, theAxis, theR, theH, theA) + RaiseIfFailed("MakeCylinderPntVecRH", self.PrimOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "cylinder") return anObj - ## Create a cylinder with given radius and height at + ## Create a cylinder with given radius, height and angle (for a portion of cylinder) at # the origin of coordinate system. Axis of the cylinder # will be collinear to the OZ axis of the coordinate system. # @param theR Cylinder radius. # @param theH Cylinder height. + # @param theA Cylinder angle in radian. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -3019,15 +3023,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_creation_cylinder "Example" @ManageTransactions("PrimOp") - def MakeCylinderRH(self, theR, theH, theName=None): + def MakeCylinderRH(self, theR, theH, theA=2*math.pi, theName=None): """ - Create a cylinder with given radius and height at + Create a cylinder with given radius, height and angle (for a portion of cylinder)at the origin of coordinate system. Axis of the cylinder will be collinear to the OZ axis of the coordinate system. Parameters: theR Cylinder radius. theH Cylinder height. + theA Cylinder angle in radian. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -3036,8 +3041,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py - theR,theH,Parameters = ParseParameters(theR, theH) - anObj = self.PrimOp.MakeCylinderRH(theR, theH) + theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) + anObj = self.PrimOp.MakeCylinderRH(theR, theH, theA) + RaiseIfFailed("MakeCylinderRH", self.PrimOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "cylinder") diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx index e27701c60..e12b35a35 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx @@ -70,20 +70,26 @@ PrimitiveGUI_CylinderDlg::PrimitiveGUI_CylinderDlg (GeometryGUI* theGeometryGUI, mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); mainFrame()->RadioButton3->close(); - GroupPoints = new DlgRef_2Sel2Spin(centralWidget()); + GroupPoints = new DlgRef_2Sel3Spin1Check(centralWidget()); GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS")); GroupPoints->TextLabel1->setText(tr("GEOM_BASE_POINT")); GroupPoints->TextLabel2->setText(tr("GEOM_VECTOR")); GroupPoints->TextLabel3->setText(tr("GEOM_RADIUS")); GroupPoints->TextLabel4->setText(tr("GEOM_HEIGHT")); + GroupPoints->TextLabel5->setText(tr("GEOM_ANGLE")); + GroupPoints->checkBox->setText(tr("")); GroupPoints->PushButton1->setIcon(image2); GroupPoints->PushButton2->setIcon(image2); + GroupPoints->SpinBox_DZ->setDisabled(true); - GroupDimensions = new DlgRef_2Spin(centralWidget()); + GroupDimensions = new DlgRef_3Spin1CheckCyl(centralWidget()); GroupDimensions->GroupBox1->setTitle(tr("GEOM_BOX_OBJ")); GroupDimensions->TextLabel1->setText(tr("GEOM_RADIUS")); GroupDimensions->TextLabel2->setText(tr("GEOM_HEIGHT")); - + GroupDimensions->TextLabel3->setText(tr("GEOM_ANGLE")); + GroupDimensions->checkBox->setText(tr("")); + GroupDimensions->SpinBox_DZ->setDisabled(true); + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); layout->setMargin(0); layout->setSpacing(6); layout->addWidget(GroupPoints); @@ -117,8 +123,11 @@ void PrimitiveGUI_CylinderDlg::Init() // min, max, step and decimals for spin boxes & initial values initSpinBox(GroupPoints->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupPoints->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); + initSpinBox(GroupPoints->SpinBox_DZ, 0.00001, 360., step, "length_precision" ); initSpinBox(GroupDimensions->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupDimensions->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); + initSpinBox(GroupDimensions->SpinBox_DZ, 0.00001, 360., step, "length_precision" ); + // init variables myEditCurrentArgument = GroupPoints->LineEdit1; @@ -130,11 +139,13 @@ void PrimitiveGUI_CylinderDlg::Init() myPoint.nullify(); myDir.nullify(); - double aRadius(100.0), aHeight(300.0); + double aRadius(100.0), aHeight(300.0), aAngle(360.); GroupPoints->SpinBox_DX->setValue(aRadius); GroupPoints->SpinBox_DY->setValue(aHeight); + GroupPoints->SpinBox_DZ->setValue(aAngle); GroupDimensions->SpinBox_DX->setValue(aRadius); GroupDimensions->SpinBox_DY->setValue(aHeight); + GroupDimensions->SpinBox_DZ->setValue(aAngle); // signals and slots connections connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); @@ -147,10 +158,15 @@ void PrimitiveGUI_CylinderDlg::Init() connect(GroupPoints->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); connect(GroupPoints->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); + connect(GroupPoints->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); connect(GroupDimensions->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); connect(GroupDimensions->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); + connect(GroupDimensions->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double))); + + connect(GroupPoints->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); + connect(GroupDimensions->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); initName(tr("GEOM_CYLINDER")); @@ -166,8 +182,10 @@ void PrimitiveGUI_CylinderDlg::SetDoubleSpinBoxStep (double step) { GroupPoints->SpinBox_DX->setSingleStep(step); GroupPoints->SpinBox_DY->setSingleStep(step); + GroupPoints->SpinBox_DZ->setSingleStep(step); GroupDimensions->SpinBox_DX->setSingleStep(step); GroupDimensions->SpinBox_DY->setSingleStep(step); + GroupDimensions->SpinBox_DZ->setSingleStep(step); } //================================================================================= @@ -378,14 +396,17 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg) { ok = GroupPoints->SpinBox_DX->isValid( msg, !IsPreview() ) && GroupPoints->SpinBox_DY->isValid( msg, !IsPreview() ) && + GroupPoints->SpinBox_DZ->isValid( msg, !IsPreview() ) && myPoint && myDir; } else if( getConstructorId() == 1 ) { ok = GroupDimensions->SpinBox_DX->isValid( msg, !IsPreview() ) && - GroupDimensions->SpinBox_DY->isValid( msg, !IsPreview() ); + GroupDimensions->SpinBox_DY->isValid( msg, !IsPreview() ) && + GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ); } ok = qAbs( getHeight() ) > Precision::Confusion() && ok; + ok = qAbs( getRadius() ) > Precision::Confusion() && ok; return ok; } @@ -396,32 +417,38 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg) bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) { bool res = false; - + bool BAngle = false; GEOM::GEOM_Object_var anObj; GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); switch (getConstructorId()) { case 0: + BAngle = GroupPoints->checkBox->isChecked(); if ( myPoint && myDir ) { - anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight()); + if(!BAngle) anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight(), 360.); + else anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight(), getAngle()); if (!anObj->_is_nil() && !IsPreview()) { QStringList aParameters; aParameters << GroupPoints->SpinBox_DX->text(); aParameters << GroupPoints->SpinBox_DY->text(); + aParameters << GroupPoints->SpinBox_DZ->text(); anObj->SetParameters(aParameters.join(":").toLatin1().constData()); } res = true; } break; case 1: - anObj = anOper->MakeCylinderRH(getRadius(), getHeight()); + BAngle = GroupDimensions->checkBox->isChecked(); + if(!BAngle)anObj = anOper->MakeCylinderRH(getRadius(), getHeight(), 360.); + else anObj = anOper->MakeCylinderRH(getRadius(), getHeight(), getAngle()); if (!anObj->_is_nil() && !IsPreview()) { QStringList aParameters; aParameters << GroupDimensions->SpinBox_DX->text(); aParameters << GroupDimensions->SpinBox_DY->text(); + aParameters << GroupDimensions->SpinBox_DZ->text(); anObj->SetParameters(aParameters.join(":").toLatin1().constData()); } res = true; @@ -462,6 +489,20 @@ double PrimitiveGUI_CylinderDlg::getHeight() const return 0; } +//================================================================================= +// function : getAngle() +// purpose : +//================================================================================= +double PrimitiveGUI_CylinderDlg::getAngle() const +{ + int aConstructorId = getConstructorId(); + if (aConstructorId == 0) + return GroupPoints->SpinBox_DZ->value(); + else if (aConstructorId == 1) + return GroupDimensions->SpinBox_DZ->value(); + return 0; +} + //================================================================================= // function : addSubshapeToStudy // purpose : virtual method to add new SubObjects if local selection @@ -473,3 +514,20 @@ void PrimitiveGUI_CylinderDlg::addSubshapesToStudy() GEOMBase::PublishSubObject( myDir.get() ); } } + +//================================================================================= +// function : ActivateAngle() +// purpose : enable the +//================================================================================= +void PrimitiveGUI_CylinderDlg::ActivateAngle() +{ + int aConstructorId = getConstructorId(); + if (aConstructorId == 0){ + GroupPoints->SpinBox_DZ->setEnabled( GroupPoints->checkBox->isChecked() ); + processPreview(); + } + else if (aConstructorId == 1){ + GroupDimensions->SpinBox_DZ->setEnabled( GroupDimensions->checkBox->isChecked() ); + processPreview(); + } +} \ No newline at end of file diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h index 6514d87a8..b79316ba9 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h @@ -30,8 +30,8 @@ #include "GEOMBase_Skeleton.h" #include "GEOM_GenericObjPtr.h" -class DlgRef_2Sel2Spin; -class DlgRef_2Spin; +class DlgRef_2Sel3Spin1Check; +class DlgRef_3Spin1CheckCyl; //================================================================================= // class : PrimitiveGUI_CylinderDlg @@ -57,6 +57,7 @@ private: void enterEvent( QEvent* ); double getRadius() const; double getHeight() const; + double getAngle() const; private: GEOM::GeomObjPtr myPoint, myDir; @@ -64,8 +65,8 @@ private: // to initialize the first selection field with a selected object on the dialog creation bool myInitial; - DlgRef_2Sel2Spin* GroupPoints; - DlgRef_2Spin* GroupDimensions; + DlgRef_2Sel3Spin1Check* GroupPoints; + DlgRef_3Spin1CheckCyl* GroupDimensions; private slots: void ClickOnOk(); @@ -76,6 +77,7 @@ private slots: void ConstructorsClicked( int ); void ValueChangedInSpinBox(); void SetDoubleSpinBoxStep( double ); + void ActivateAngle(); }; #endif // PRIMITIVEGUI_CYLINDERDLG_H From 882ffe16a5218785ed3a2ffdc2d93aa4b57c1545 Mon Sep 17 00:00:00 2001 From: Florian Brunet Date: Tue, 5 Aug 2014 17:34:49 +0200 Subject: [PATCH 070/118] Doc : Add an Angle option in the cylinder primitive in order to build portion of cylinders in both constructors. --- doc/salome/gui/GEOM/images/cylinder1.png | Bin 20223 -> 21875 bytes doc/salome/gui/GEOM/images/cylinder2.png | Bin 16758 -> 18499 bytes doc/salome/gui/GEOM/images/cylinders.png | Bin 12964 -> 17865 bytes .../gui/GEOM/input/creating_cylinder.doc | 13 +++++++------ 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/salome/gui/GEOM/images/cylinder1.png b/doc/salome/gui/GEOM/images/cylinder1.png index 089dac2824f1261ff7d6fb63291984d564f11ee1..696ea42341ad8da4be5a4fa537c7fc6d3a86c0ba 100755 GIT binary patch literal 21875 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 literal 20223 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 E0E<6hK>z>% diff --git a/doc/salome/gui/GEOM/images/cylinder2.png b/doc/salome/gui/GEOM/images/cylinder2.png index ad6af2947a922418cdeb744e616fc81066dbf83f..7522b2751381e9476fa7e5305a995ebaa24a779e 100755 GIT binary patch literal 18499 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 diff --git a/doc/salome/gui/GEOM/images/cylinders.png b/doc/salome/gui/GEOM/images/cylinders.png index fc0d43276724ce5471d27a56249ac7bae4f22478..3a58b30f638e9d160b8b4fa231f1900ec3373cf4 100755 GIT binary patch literal 17865 zcmch<2Q-{txGy{+BqAbu5RvH7MeicIsL^`}MliyRI$A>X5@is*k1iNSmx9DFY7oW{ zy%Rn9ef`fl_dDyJv+lj;`_B5-Vp%iZcfU{h?Pve?v!CaU)YVocyTxz|1Okz%t10P& zK-Z#yU-_HYfNwsGTxSLT5JDBz4Q}4NiJR5=4Sb}BDVxAvxH-VQUwYVs93gJ5_Iyw~ z4|{tE6zm4uChU*{fgXa?m7W^-WNzYpGhZ179PP}Mu06V&LLc^#fUU$`ilIQw!q)Zy zjZlHD#Zy6r>lBf}!ubT7?(7gftY$71gBbGb@&`k;wGLS-q8W;ppR8k}a-DRO<00rMo7zBYrBmUD%i-B?OWk*~2 zPq@j?bv*bxVRdxb5pZO-Q%87&FH(XW_gA-HguPG=0ET2F!L#UGE?)jcZ_Dp8x9_Fl z<NhtUfDLAz={=%3ylO17vvhD{>Kw~_|0EKZE%x=xmO^99UI%gUhPQNZ@w(V&Y1M`fth<^I6= z*tbh~;SD0tAG<;mbCKwU;?*|c(L}(Zu-qPFc)$F`XKDFMYn}TCfXQXl zRvLVEAI+?J`LXOa5^no%G`A$LXscfC=h0jqoyOn$w~PJ`;Zt?2J#i)R*Fd^-=l|jo z$opQg`(kU)K%o8bPzZ$w1E~Ave{f;5=D z_|JcIx_ML;7X>@E-z)XCFJA;t0+kLS>j
    QUH$QT*u5#W(%4F-^+iXvK3z3I6&p+cJ4 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 literal 12964 zcmc(`Wmp^E6E++uP`p6#(joR z^?qj(1fl~e$x7*d%svWGb7CAy-7b@ICvM3PVKaYLDOB;%F;|}87=0mkB@%pTk1YF8 zxJcwz69GLUV^Lw0FBJVrJcMPO={&5h6x@vLt)Ako58h^mV(658Kx>k(dWL>GIHNS* z%4Uu`3`&m@>R*c;9xl2LM@Ue<8?)2uLeK$8T zaP{P&v<@kX?P0;Af#S;>uJ2lMkD@D3glUlrc2LGOexDvNPr*z8V-<1y-?@}gPePJ^ z*JZ8wY=Uz&K3xmDzUh&zZm)aVWgg-dklUdV8R1;6ripd=nSc%x-?@9E<360GCE8A^
    !FN0t&f{7kyhcM4AXiA2&hK=?#C+9<#_LD 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 XWU~S)a}$B?6OfXex@@hqdFcNEgqMG{ diff --git a/doc/salome/gui/GEOM/input/creating_cylinder.doc b/doc/salome/gui/GEOM/input/creating_cylinder.doc index 1e1cbc16d..74434e49b 100644 --- a/doc/salome/gui/GEOM/input/creating_cylinder.doc +++ b/doc/salome/gui/GEOM/input/creating_cylinder.doc @@ -11,18 +11,19 @@ Entity - > Primitives - > Cylinder
    \n Firstly, you can define a \b Cylinder by the Base Point (the central point of the cylinder base), the \b Vector (the axis of the cylinder), and its dimensions: the Radius and the Height. -\n TUI Command: geompy.MakeCylinder(Point, Axis, Radius, Height) -\n Arguments: Name + 1 vertex + 1 vector + 2 values -(Dimensions: radius and height). +\n Angle checkbox and field allow defining an angle to build a portion of cylinder. +\n TUI Command: geompy.MakeCylinder(Point, Axis, Radius, Height, Angle=2*pi) +\n Arguments: Name + 1 vertex + 1 vector + 3 values +(Dimensions: radius, height and angle). \image html cylinder1.png \n Secondly, you can define a \b Cylinder by the given radius and the height at the origin of coordinate system. The axis of the cylinder will be collinear to the OZ axis of the coordinate system. -\n TUI Command: geompy.MakeCylinderRH(Radius, Height) -\n Arguments: Name + 2 values (Dimensions at origin: radius and -height). +Angle checkbox and field allow defining an angle to build a portion of cylinder. +\n TUI Command: geompy.MakeCylinderRH(Radius, Height, Angle=2*pi) +\n Arguments: Name + 2 values (Dimensions at origin: radius, height, angle). \image html cylinder2.png From 3cd92817cb4c5ee5911d6f40fe977b5e57b980e1 Mon Sep 17 00:00:00 2001 From: "Maintenance team (INV)" Date: Wed, 6 Aug 2014 23:16:58 +0400 Subject: [PATCH 071/118] Synchronize adm files --- AUTHORS | 0 COPYING | 0 ChangeLog | 0 GEOM_version.h.in | 0 INSTALL | 0 LICENCE | 0 NEWS | 0 README | 0 SalomeGEOMConfig.cmake.in | 0 adm_local/cmake_files/FindGEOM.cmake | 0 adm_local/cmake_files/FindOpenCV.cmake | 0 adm_local/cmake_files/FindSalomeGEOM.cmake | 0 adm_local/cmake_files/FindSalomeOpenCV.cmake | 0 adm_local/unix/config_files/check_GEOM.m4 | 0 adm_local/unix/config_files/check_OpenCV.m4 | 0 bin/addvars2notebook_GEOM.py | 0 bin/geom_setenv.py | 0 doc/salome/examples/3dsketcher.py | 0 doc/salome/examples/CMakeLists.txt | 0 doc/salome/examples/GEOM_box.py | 0 doc/salome/examples/advanced_geom_objs_ex01.py | 0 doc/salome/examples/advanced_geom_objs_ex02.py | 0 doc/salome/examples/advanced_geom_objs_ex03.py | 0 .../examples/advanced_geom_objs_smoothingsurface.py | 0 doc/salome/examples/angle.py | 0 doc/salome/examples/arranging_study_objects.py | 0 doc/salome/examples/basic_geom_objs_ex01.py | 0 doc/salome/examples/basic_geom_objs_ex02.py | 0 doc/salome/examples/basic_geom_objs_ex03.py | 0 doc/salome/examples/basic_geom_objs_ex04.py | 0 doc/salome/examples/basic_geom_objs_ex05.py | 0 doc/salome/examples/basic_geom_objs_ex06.py | 0 doc/salome/examples/basic_geom_objs_ex07.py | 0 doc/salome/examples/basic_geom_objs_ex08.py | 0 doc/salome/examples/basic_geom_objs_ex09.py | 0 doc/salome/examples/basic_operations_ex01.py | 0 doc/salome/examples/basic_operations_ex02.py | 0 doc/salome/examples/basic_operations_ex03.py | 0 doc/salome/examples/basic_properties.py | 0 doc/salome/examples/blocks_operations_ex01.py | 0 doc/salome/examples/blocks_operations_ex02.py | 0 doc/salome/examples/blocks_operations_ex03.py | 0 doc/salome/examples/boolean_operations_ex01.py | 0 doc/salome/examples/boolean_operations_ex02.py | 0 doc/salome/examples/boolean_operations_ex03.py | 0 doc/salome/examples/boolean_operations_ex04.py | 0 doc/salome/examples/bounding_box.py | 0 doc/salome/examples/building_by_blocks_ex01.py | 0 doc/salome/examples/building_by_blocks_ex02.py | 0 doc/salome/examples/center_of_mass.py | 0 doc/salome/examples/check_compound_of_blocks.py | 0 doc/salome/examples/check_self_intersections.py | 0 doc/salome/examples/check_shape.py | 0 doc/salome/examples/complex_objs_ex01.py | 0 doc/salome/examples/complex_objs_ex02.py | 0 doc/salome/examples/complex_objs_ex03.py | 0 doc/salome/examples/complex_objs_ex04.py | 0 doc/salome/examples/complex_objs_ex05.py | 0 doc/salome/examples/complex_objs_ex06.py | 0 doc/salome/examples/complex_objs_ex07.py | 0 doc/salome/examples/complex_objs_ex08.py | 0 doc/salome/examples/complex_objs_ex09.py | 0 doc/salome/examples/complex_objs_ex10.py | 0 doc/salome/examples/free_boundaries.py | 0 doc/salome/examples/free_faces.py | 0 doc/salome/examples/get_non_blocks.py | 0 doc/salome/examples/import_export.py | 0 doc/salome/examples/inertia.py | 0 doc/salome/examples/min_distance.py | 0 doc/salome/examples/normal_face.py | 0 doc/salome/examples/notebook_geom.py | 0 doc/salome/examples/point_coordinates.py | 0 doc/salome/examples/primitives_ex01.py | 0 doc/salome/examples/primitives_ex02.py | 0 doc/salome/examples/primitives_ex03.py | 0 doc/salome/examples/primitives_ex04.py | 0 doc/salome/examples/primitives_ex05.py | 0 doc/salome/examples/primitives_ex06.py | 0 doc/salome/examples/primitives_ex07.py | 0 doc/salome/examples/repairing_operations_ex01.py | 0 doc/salome/examples/repairing_operations_ex02.py | 0 doc/salome/examples/repairing_operations_ex03.py | 0 doc/salome/examples/repairing_operations_ex04.py | 0 doc/salome/examples/repairing_operations_ex05.py | 0 doc/salome/examples/repairing_operations_ex06.py | 0 doc/salome/examples/repairing_operations_ex07.py | 0 doc/salome/examples/repairing_operations_ex08.py | 0 doc/salome/examples/repairing_operations_ex09.py | 0 doc/salome/examples/repairing_operations_ex10.py | 0 doc/salome/examples/repairing_operations_ex11.py | 0 doc/salome/examples/repairing_operations_ex12.py | 0 doc/salome/examples/sketcher.py | 0 doc/salome/examples/tolerance.py | 0 doc/salome/examples/topological_geom_objs_ex01.py | 0 doc/salome/examples/topological_geom_objs_ex02.py | 0 doc/salome/examples/topological_geom_objs_ex03.py | 0 doc/salome/examples/topological_geom_objs_ex04.py | 0 doc/salome/examples/topological_geom_objs_ex05.py | 0 doc/salome/examples/topological_geom_objs_ex06.py | 0 .../examples/transformation_operations_ex01.py | 0 .../examples/transformation_operations_ex02.py | 0 .../examples/transformation_operations_ex03.py | 0 .../examples/transformation_operations_ex04.py | 0 .../examples/transformation_operations_ex05.py | 0 .../examples/transformation_operations_ex06.py | 0 .../examples/transformation_operations_ex07.py | 0 .../examples/transformation_operations_ex08.py | 0 .../examples/transformation_operations_ex09.py | 0 .../examples/transformation_operations_ex10.py | 0 .../examples/transformation_operations_ex11.py | 0 .../examples/transformation_operations_ex12.py | 0 .../examples/transformation_operations_ex13.py | 0 doc/salome/examples/viewing_geom_objs_ex01.py | 0 doc/salome/examples/viewing_geom_objs_ex02.py | 0 doc/salome/examples/viewing_geom_objs_ex03.py | 0 doc/salome/examples/viewing_geom_objs_ex04.py | 0 doc/salome/examples/whatis.py | 0 doc/salome/examples/working_with_groups_ex01.py | 0 doc/salome/examples/working_with_groups_ex02.py | 0 doc/salome/examples/working_with_groups_ex03.py | 0 doc/salome/examples/working_with_groups_ex04.py | 0 doc/salome/examples/working_with_groups_ex05.py | 0 doc/salome/examples/working_with_groups_ex06.py | 0 doc/salome/gui/GEOM/CMakeLists.txt | 0 doc/salome/gui/GEOM/images/2dsketch1.png | Bin doc/salome/gui/GEOM/images/2dsketch10.png | Bin doc/salome/gui/GEOM/images/2dsketch12.png | Bin doc/salome/gui/GEOM/images/2dsketch2.png | Bin doc/salome/gui/GEOM/images/2dsketch3.png | Bin doc/salome/gui/GEOM/images/2dsketch4.png | Bin doc/salome/gui/GEOM/images/2dsketch5.png | Bin doc/salome/gui/GEOM/images/2dsketch6.png | Bin doc/salome/gui/GEOM/images/2dsketch7.png | Bin doc/salome/gui/GEOM/images/2dsketch8.png | Bin doc/salome/gui/GEOM/images/2dsketch9.png | Bin doc/salome/gui/GEOM/images/3dsketch4.png | Bin doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png | Bin doc/salome/gui/GEOM/images/3dsketch_angle_abs.png | Bin .../gui/GEOM/images/3dsketch_angle_height_rel.png | Bin doc/salome/gui/GEOM/images/3dsketch_angle_rel.png | Bin doc/salome/gui/GEOM/images/3dsketch_dlg.png | Bin doc/salome/gui/GEOM/images/add_dimension.png | Bin doc/salome/gui/GEOM/images/arc2.png | Bin doc/salome/gui/GEOM/images/arc_icon.png | Bin doc/salome/gui/GEOM/images/arcofellipse1.png | Bin doc/salome/gui/GEOM/images/arcofellipse2.png | Bin doc/salome/gui/GEOM/images/arcsn1.png | Bin doc/salome/gui/GEOM/images/arcsn2.png | Bin doc/salome/gui/GEOM/images/arranging1.png | Bin doc/salome/gui/GEOM/images/arranging2.png | Bin doc/salome/gui/GEOM/images/arranging3.png | Bin doc/salome/gui/GEOM/images/change_direction.png | Bin doc/salome/gui/GEOM/images/compound2.png | Bin .../gui/GEOM/images/contour_detect_snapshot.png | Bin .../gui/GEOM/images/contour_detection_example2.png | Bin doc/salome/gui/GEOM/images/creation_op_info.png | Bin doc/salome/gui/GEOM/images/curve1.png | Bin doc/salome/gui/GEOM/images/curve2.png | Bin doc/salome/gui/GEOM/images/curve3.png | Bin doc/salome/gui/GEOM/images/curve4.png | Bin doc/salome/gui/GEOM/images/deflection_0001.png | Bin doc/salome/gui/GEOM/images/deflection_001.png | Bin doc/salome/gui/GEOM/images/dialog.png | Bin doc/salome/gui/GEOM/images/dimensions_preview.png | Bin doc/salome/gui/GEOM/images/disk1.png | Bin doc/salome/gui/GEOM/images/disk2.png | Bin doc/salome/gui/GEOM/images/disk3.png | Bin doc/salome/gui/GEOM/images/disks.png | Bin doc/salome/gui/GEOM/images/divided_disk.png | Bin .../gui/GEOM/images/divided_disk_PntVecR_dlg.png | Bin doc/salome/gui/GEOM/images/divided_disk_dlg.png | Bin doc/salome/gui/GEOM/images/dividedcylinder.png | Bin doc/salome/gui/GEOM/images/dividedcylinder_dlg.png | Bin doc/salome/gui/GEOM/images/draft.png | Bin doc/salome/gui/GEOM/images/eclipse1.png | Bin doc/salome/gui/GEOM/images/eclipse2.png | Bin doc/salome/gui/GEOM/images/edge1.png | Bin doc/salome/gui/GEOM/images/edge2.png | Bin doc/salome/gui/GEOM/images/edge3.png | Bin doc/salome/gui/GEOM/images/exportxao_dlg.png | Bin doc/salome/gui/GEOM/images/extruded_boss.png | Bin doc/salome/gui/GEOM/images/extruded_boss_dlg.png | Bin .../gui/GEOM/images/extruded_boss_example.png | Bin doc/salome/gui/GEOM/images/extruded_cut.png | Bin doc/salome/gui/GEOM/images/extruded_cut_dlg.png | Bin doc/salome/gui/GEOM/images/extruded_cut_example.png | Bin doc/salome/gui/GEOM/images/extrusion3.png | Bin doc/salome/gui/GEOM/images/extrusion4.png | Bin doc/salome/gui/GEOM/images/face1.png | Bin doc/salome/gui/GEOM/images/face2.png | Bin doc/salome/gui/GEOM/images/faces.png | Bin doc/salome/gui/GEOM/images/feature_detect.png | Bin .../gui/GEOM/images/feature_detection_dlg.png | Bin .../gui/GEOM/images/feature_detection_dlg2.png | Bin .../gui/GEOM/images/feature_detection_dlg3.png | Bin doc/salome/gui/GEOM/images/fillet1d_1.png | Bin doc/salome/gui/GEOM/images/fillet1d_2.png | Bin doc/salome/gui/GEOM/images/front1.png | Bin doc/salome/gui/GEOM/images/front2.png | Bin doc/salome/gui/GEOM/images/fuse.png | Bin doc/salome/gui/GEOM/images/fuse_collinear_edges.png | Bin doc/salome/gui/GEOM/images/fused_wire.png | Bin doc/salome/gui/GEOM/images/geom_sort.png | Bin doc/salome/gui/GEOM/images/geomimport_reopen.png | Bin .../gui/GEOM/images/get_in_place_lost_part.png | Bin doc/salome/gui/GEOM/images/glue1.png | Bin doc/salome/gui/GEOM/images/glue2.png | Bin doc/salome/gui/GEOM/images/glue3.png | Bin doc/salome/gui/GEOM/images/glue4.png | Bin doc/salome/gui/GEOM/images/glue5.png | Bin doc/salome/gui/GEOM/images/glue7.png | Bin doc/salome/gui/GEOM/images/glue8.png | Bin doc/salome/gui/GEOM/images/glue_faces3.png | Bin doc/salome/gui/GEOM/images/groups_cut_dlg.png | Bin doc/salome/gui/GEOM/images/groups_intersect_dlg.png | Bin doc/salome/gui/GEOM/images/groups_union_dlg.png | Bin doc/salome/gui/GEOM/images/iges_unit.png | Bin doc/salome/gui/GEOM/images/image1.png | Bin doc/salome/gui/GEOM/images/image109.png | Bin doc/salome/gui/GEOM/images/image110.png | Bin doc/salome/gui/GEOM/images/image112.png | Bin doc/salome/gui/GEOM/images/image113.png | Bin doc/salome/gui/GEOM/images/image145.png | Bin doc/salome/gui/GEOM/images/image15.png | Bin doc/salome/gui/GEOM/images/image154.png | Bin doc/salome/gui/GEOM/images/image156.png | Bin doc/salome/gui/GEOM/images/image16.png | Bin doc/salome/gui/GEOM/images/image160.png | Bin doc/salome/gui/GEOM/images/image167.png | Bin doc/salome/gui/GEOM/images/image168.png | Bin doc/salome/gui/GEOM/images/image180.png | Bin doc/salome/gui/GEOM/images/image181.png | Bin doc/salome/gui/GEOM/images/image185.png | Bin doc/salome/gui/GEOM/images/image193.png | Bin doc/salome/gui/GEOM/images/image204.png | Bin doc/salome/gui/GEOM/images/image206.png | Bin doc/salome/gui/GEOM/images/image21.png | Bin doc/salome/gui/GEOM/images/image22.png | Bin doc/salome/gui/GEOM/images/image3.png | Bin doc/salome/gui/GEOM/images/image30.png | Bin doc/salome/gui/GEOM/images/image34.png | Bin doc/salome/gui/GEOM/images/image36.png | Bin doc/salome/gui/GEOM/images/image38.png | Bin doc/salome/gui/GEOM/images/image4.png | Bin doc/salome/gui/GEOM/images/image40.png | Bin doc/salome/gui/GEOM/images/image47.png | Bin doc/salome/gui/GEOM/images/import_picture.png | Bin .../gui/GEOM/images/interact_with_dimensions.png | Bin doc/salome/gui/GEOM/images/isoline1.png | Bin doc/salome/gui/GEOM/images/isoline2.png | Bin doc/salome/gui/GEOM/images/isos.png | Bin doc/salome/gui/GEOM/images/limit_tolerance_dlg.png | Bin doc/salome/gui/GEOM/images/line_icon.png | Bin doc/salome/gui/GEOM/images/manage_dimensions.png | Bin doc/salome/gui/GEOM/images/material.png | Bin doc/salome/gui/GEOM/images/material_OCC.png | Bin doc/salome/gui/GEOM/images/material_VTK.png | Bin doc/salome/gui/GEOM/images/measures11.png | Bin doc/salome/gui/GEOM/images/measures2.png | Bin doc/salome/gui/GEOM/images/measures2a.png | Bin doc/salome/gui/GEOM/images/measures8a.png | Bin doc/salome/gui/GEOM/images/neo-deflection.png | Bin doc/salome/gui/GEOM/images/ob_popup_menu.png | Bin doc/salome/gui/GEOM/images/partition.png | Bin doc/salome/gui/GEOM/images/partition1.png | Bin doc/salome/gui/GEOM/images/partition2.png | Bin doc/salome/gui/GEOM/images/partitionsn3.png | Bin doc/salome/gui/GEOM/images/picture_import_dlg.png | Bin doc/salome/gui/GEOM/images/pipe3.png | Bin doc/salome/gui/GEOM/images/pipe3_init.png | Bin doc/salome/gui/GEOM/images/pipe3_res.png | Bin doc/salome/gui/GEOM/images/pipe_path.png | Bin doc/salome/gui/GEOM/images/pipe_path_dlg.png | Bin doc/salome/gui/GEOM/images/pipebinormalsn.png | Bin doc/salome/gui/GEOM/images/pipetshape.png | Bin doc/salome/gui/GEOM/images/pipetshape1.png | Bin doc/salome/gui/GEOM/images/pipetshape2.png | Bin doc/salome/gui/GEOM/images/pipetshape3.png | Bin doc/salome/gui/GEOM/images/pipetshape4.png | Bin doc/salome/gui/GEOM/images/pipetshape5.png | Bin doc/salome/gui/GEOM/images/pipetshape_dlg.png | Bin doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png | Bin doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png | Bin doc/salome/gui/GEOM/images/pipetshapechamfer.png | Bin doc/salome/gui/GEOM/images/pipetshapefillet.png | Bin doc/salome/gui/GEOM/images/pipetshapethr.png | Bin doc/salome/gui/GEOM/images/plane4.png | Bin doc/salome/gui/GEOM/images/plane5.png | Bin doc/salome/gui/GEOM/images/point3_2.png | Bin doc/salome/gui/GEOM/images/point3_3.png | Bin doc/salome/gui/GEOM/images/point5_2.png | Bin doc/salome/gui/GEOM/images/pref15.png | Bin doc/salome/gui/GEOM/images/pref_dep_tree.png | Bin doc/salome/gui/GEOM/images/prism_with_thickness.png | Bin doc/salome/gui/GEOM/images/projection_dlg.png | Bin doc/salome/gui/GEOM/images/projection_preview.png | Bin doc/salome/gui/GEOM/images/rectangle_icon.png | Bin doc/salome/gui/GEOM/images/reduce_study_dialog.png | Bin doc/salome/gui/GEOM/images/remove_extra_edges.png | Bin doc/salome/gui/GEOM/images/remove_extra_edges1.png | Bin doc/salome/gui/GEOM/images/remove_extra_edges2.png | Bin doc/salome/gui/GEOM/images/remove_webs.png | Bin doc/salome/gui/GEOM/images/repair10a.png | Bin doc/salome/gui/GEOM/images/repair9a.png | Bin doc/salome/gui/GEOM/images/restore-ss-OB-cut.png | Bin doc/salome/gui/GEOM/images/restore-ss-OB.png | Bin doc/salome/gui/GEOM/images/restore-ss-cut.png | Bin doc/salome/gui/GEOM/images/restore-ss-dialog.png | Bin .../gui/GEOM/images/restore-ss-viewer-after.png | Bin .../gui/GEOM/images/restore-ss-viewer-before.png | Bin .../gui/GEOM/images/restore-ss-viewer-cut.png | Bin .../GEOM/images/salome-geom-structuralelements.png | Bin doc/salome/gui/GEOM/images/sat_named_shapes.png | Bin doc/salome/gui/GEOM/images/scale_transformsn3.png | Bin doc/salome/gui/GEOM/images/scale_transformsn4.png | Bin doc/salome/gui/GEOM/images/shared_shapes.png | Bin doc/salome/gui/GEOM/images/show_predef_material.png | Bin doc/salome/gui/GEOM/images/sketch.png | Bin doc/salome/gui/GEOM/images/sketch_example.png | Bin doc/salome/gui/GEOM/images/sketcher_dlg.png | Bin doc/salome/gui/GEOM/images/sketcher_dlg2.png | Bin doc/salome/gui/GEOM/images/smoothingsurface.png | Bin doc/salome/gui/GEOM/images/smoothingsurface_dlg.png | Bin doc/salome/gui/GEOM/images/transformation10a.png | Bin doc/salome/gui/GEOM/images/transformation12.png | Bin doc/salome/gui/GEOM/images/transformation13.png | Bin doc/salome/gui/GEOM/images/transformation14.png | Bin doc/salome/gui/GEOM/images/transformation4a.png | Bin doc/salome/gui/GEOM/images/translation3.png | Bin doc/salome/gui/GEOM/images/tree_bidir_link.png | Bin doc/salome/gui/GEOM/images/tree_button_update.png | Bin doc/salome/gui/GEOM/images/tree_cycldep_link.png | Bin doc/salome/gui/GEOM/images/tree_default_node.png | Bin doc/salome/gui/GEOM/images/tree_disp_ascendants.png | Bin .../gui/GEOM/images/tree_disp_descendants.png | Bin doc/salome/gui/GEOM/images/tree_example.png | Bin doc/salome/gui/GEOM/images/tree_hierarchy_type.png | Bin .../gui/GEOM/images/tree_highlighted_node.png | Bin doc/salome/gui/GEOM/images/tree_main_node.png | Bin doc/salome/gui/GEOM/images/tree_move_nodes.png | Bin doc/salome/gui/GEOM/images/tree_popup_menu1.png | Bin doc/salome/gui/GEOM/images/tree_popup_menu2.png | Bin doc/salome/gui/GEOM/images/tree_selected_node.png | Bin doc/salome/gui/GEOM/images/tree_selfdep_link.png | Bin doc/salome/gui/GEOM/images/tree_tool_bar.png | Bin doc/salome/gui/GEOM/images/tree_unidir_link.png | Bin .../gui/GEOM/images/tree_unpublished_node.png | Bin doc/salome/gui/GEOM/images/tree_view_dump.png | Bin doc/salome/gui/GEOM/images/tree_view_fitall.png | Bin doc/salome/gui/GEOM/images/tree_view_fitarea.png | Bin doc/salome/gui/GEOM/images/tree_view_glpan.png | Bin doc/salome/gui/GEOM/images/tree_view_pan.png | Bin doc/salome/gui/GEOM/images/tree_view_zoom.png | Bin doc/salome/gui/GEOM/images/union_faces.png | Bin doc/salome/gui/GEOM/images/union_faces1.png | Bin doc/salome/gui/GEOM/images/union_faces2.png | Bin doc/salome/gui/GEOM/images/using_notebook_geom.png | Bin doc/salome/gui/GEOM/images/vectors_mode.png | Bin doc/salome/gui/GEOM/images/wire_before_fuse.png | Bin .../gui/GEOM/input/add_point_on_edge_operation.doc | 0 doc/salome/gui/GEOM/input/angle.doc | 0 doc/salome/gui/GEOM/input/api_documentation.doc | 0 doc/salome/gui/GEOM/input/archimede.doc | 0 .../gui/GEOM/input/arranging_study_objects_page.doc | 0 doc/salome/gui/GEOM/input/basic_prop.doc | 0 doc/salome/gui/GEOM/input/blocks_operations.doc | 0 doc/salome/gui/GEOM/input/boudaries.doc | 0 doc/salome/gui/GEOM/input/bounding_box.doc | 0 doc/salome/gui/GEOM/input/bring_to_front.doc | 0 doc/salome/gui/GEOM/input/building_by_blocks.doc | 0 doc/salome/gui/GEOM/input/center_mass.doc | 0 doc/salome/gui/GEOM/input/chamfer_operation.doc | 0 .../gui/GEOM/input/change_orientation_operation.doc | 0 .../gui/GEOM/input/check_compound_of_blocks.doc | 0 .../gui/GEOM/input/check_self_intersections.doc | 0 doc/salome/gui/GEOM/input/check_shape.doc | 0 .../gui/GEOM/input/close_contour_operation.doc | 0 doc/salome/gui/GEOM/input/color.doc | 0 doc/salome/gui/GEOM/input/common_operation.doc | 0 doc/salome/gui/GEOM/input/creating_arc.doc | 0 doc/salome/gui/GEOM/input/creating_basic_go.doc | 0 doc/salome/gui/GEOM/input/creating_box.doc | 0 doc/salome/gui/GEOM/input/creating_circle.doc | 0 doc/salome/gui/GEOM/input/creating_complex_obj.doc | 0 doc/salome/gui/GEOM/input/creating_compound.doc | 0 doc/salome/gui/GEOM/input/creating_cone.doc | 0 doc/salome/gui/GEOM/input/creating_curve.doc | 0 doc/salome/gui/GEOM/input/creating_cylinder.doc | 0 .../gui/GEOM/input/creating_dividedcylinder.doc | 0 doc/salome/gui/GEOM/input/creating_divideddisk.doc | 0 doc/salome/gui/GEOM/input/creating_edge.doc | 0 doc/salome/gui/GEOM/input/creating_ellipse.doc | 0 doc/salome/gui/GEOM/input/creating_explode.doc | 0 doc/salome/gui/GEOM/input/creating_extrusion.doc | 0 .../gui/GEOM/input/creating_extrusion_alongpath.doc | 0 doc/salome/gui/GEOM/input/creating_face.doc | 0 doc/salome/gui/GEOM/input/creating_filling.doc | 0 doc/salome/gui/GEOM/input/creating_geom_objects.doc | 0 .../gui/GEOM/input/creating_hexaedral_solid.doc | 0 doc/salome/gui/GEOM/input/creating_isoline.doc | 0 doc/salome/gui/GEOM/input/creating_lcs.doc | 0 doc/salome/gui/GEOM/input/creating_line.doc | 0 doc/salome/gui/GEOM/input/creating_pipe_path.doc | 0 doc/salome/gui/GEOM/input/creating_pipetshape.doc | 0 doc/salome/gui/GEOM/input/creating_plane.doc | 0 doc/salome/gui/GEOM/input/creating_point.doc | 0 doc/salome/gui/GEOM/input/creating_primitives.doc | 0 .../gui/GEOM/input/creating_quadrangle_face.doc | 0 doc/salome/gui/GEOM/input/creating_revolution.doc | 0 doc/salome/gui/GEOM/input/creating_shell.doc | 0 doc/salome/gui/GEOM/input/creating_sketcher.doc | 0 .../gui/GEOM/input/creating_smoothingsurface.doc | 0 doc/salome/gui/GEOM/input/creating_solid.doc | 0 doc/salome/gui/GEOM/input/creating_sphere.doc | 0 .../gui/GEOM/input/creating_topological_obj.doc | 0 doc/salome/gui/GEOM/input/creating_torus.doc | 0 doc/salome/gui/GEOM/input/creating_vector.doc | 0 doc/salome/gui/GEOM/input/creating_wire.doc | 0 doc/salome/gui/GEOM/input/cut_operation.doc | 0 doc/salome/gui/GEOM/input/deflection.doc | 0 doc/salome/gui/GEOM/input/dependency_tree.doc | 0 doc/salome/gui/GEOM/input/display_mode.doc | 0 .../gui/GEOM/input/explode_on_blocks_operation.doc | 0 .../gui/GEOM/input/extruded_boss_operation.doc | 0 .../gui/GEOM/input/extruded_cut_operation.doc | 0 doc/salome/gui/GEOM/input/faq.doc | 0 doc/salome/gui/GEOM/input/features.doc | 0 doc/salome/gui/GEOM/input/fillet1d_operation.doc | 0 doc/salome/gui/GEOM/input/fillet_operation.doc | 0 doc/salome/gui/GEOM/input/free_faces.doc | 0 doc/salome/gui/GEOM/input/fuse_edges_operation.doc | 0 doc/salome/gui/GEOM/input/fuse_operation.doc | 0 .../GEOM/input/geometrical_object_properties.doc | 0 doc/salome/gui/GEOM/input/geometry_preferences.doc | 0 doc/salome/gui/GEOM/input/geompy.doc | 0 doc/salome/gui/GEOM/input/geompy_migration.doc | 0 doc/salome/gui/GEOM/input/get_non_blocks.doc | 0 doc/salome/gui/GEOM/input/glue_edges_operation.doc | 0 doc/salome/gui/GEOM/input/glue_faces_operation.doc | 0 doc/salome/gui/GEOM/input/import_export.doc | 0 doc/salome/gui/GEOM/input/importing_picture.doc | 0 doc/salome/gui/GEOM/input/index.doc | 0 doc/salome/gui/GEOM/input/inertia.doc | 0 doc/salome/gui/GEOM/input/isolines.doc | 0 .../gui/GEOM/input/limit_tolerance_operation.doc | 0 doc/salome/gui/GEOM/input/line_width.doc | 0 doc/salome/gui/GEOM/input/managing_dimensions.doc | 0 doc/salome/gui/GEOM/input/manipulate_object.doc | 0 doc/salome/gui/GEOM/input/material.doc | 0 doc/salome/gui/GEOM/input/min_distance.doc | 0 doc/salome/gui/GEOM/input/mirror_operation.doc | 0 .../gui/GEOM/input/modify_location_operation.doc | 0 .../gui/GEOM/input/multi_rotation_operation.doc | 0 .../GEOM/input/multi_transformation_operation.doc | 0 .../gui/GEOM/input/multi_translation_operation.doc | 0 doc/salome/gui/GEOM/input/normal.doc | 0 doc/salome/gui/GEOM/input/offset_operation.doc | 0 doc/salome/gui/GEOM/input/partition_explanation.doc | 0 doc/salome/gui/GEOM/input/pictures.doc | 0 doc/salome/gui/GEOM/input/point_coordinates.doc | 0 doc/salome/gui/GEOM/input/point_marker.doc | 0 doc/salome/gui/GEOM/input/projection_operation.doc | 0 doc/salome/gui/GEOM/input/propagate_operation.doc | 0 doc/salome/gui/GEOM/input/python_interface.doc | 0 doc/salome/gui/GEOM/input/pythonutils.doc | 0 doc/salome/gui/GEOM/input/reduce_study.doc | 0 doc/salome/gui/GEOM/input/related_docs.doc | 0 .../gui/GEOM/input/remove_extra_edges_operation.doc | 0 doc/salome/gui/GEOM/input/remove_webs_operation.doc | 0 doc/salome/gui/GEOM/input/repairing_operations.doc | 0 .../GEOM/input/restore_presentation_parameters.doc | 0 doc/salome/gui/GEOM/input/rotation_operation.doc | 0 doc/salome/gui/GEOM/input/scale_operation.doc | 0 doc/salome/gui/GEOM/input/section_operation.doc | 0 doc/salome/gui/GEOM/input/sewing_operation.doc | 0 .../gui/GEOM/input/shape_processing_operation.doc | 0 doc/salome/gui/GEOM/input/shape_recognition.doc | 0 .../gui/GEOM/input/struct_elem_visualisation.doc | 0 .../gui/GEOM/input/suppress_faces_operation.doc | 0 .../gui/GEOM/input/suppress_holes_operation.doc | 0 .../input/suppress_internal_wires_operation.doc | 0 doc/salome/gui/GEOM/input/tolerance.doc | 0 .../gui/GEOM/input/transformation_operations.doc | 0 .../gui/GEOM/input/transforming_geom_objs.doc | 0 doc/salome/gui/GEOM/input/translation_operation.doc | 0 doc/salome/gui/GEOM/input/transparency.doc | 0 .../gui/GEOM/input/tui_advanced_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_angle.doc | 0 .../gui/GEOM/input/tui_arranging_study_objects.doc | 0 .../input/tui_auto_completion_documentation.doc | 0 doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_basic_operations.doc | 0 doc/salome/gui/GEOM/input/tui_basic_properties.doc | 0 doc/salome/gui/GEOM/input/tui_blocks_operations.doc | 0 .../gui/GEOM/input/tui_boolean_operations.doc | 0 doc/salome/gui/GEOM/input/tui_bounding_box.doc | 0 .../gui/GEOM/input/tui_building_by_blocks.doc | 0 doc/salome/gui/GEOM/input/tui_center_of_mass.doc | 0 .../gui/GEOM/input/tui_check_compound_of_blocks.doc | 0 .../gui/GEOM/input/tui_check_self_intersections.doc | 0 doc/salome/gui/GEOM/input/tui_check_shape.doc | 0 doc/salome/gui/GEOM/input/tui_complex_objs.doc | 0 .../gui/GEOM/input/tui_creating_geom_objs.doc | 0 .../gui/GEOM/input/tui_execution_distribution.doc | 0 doc/salome/gui/GEOM/input/tui_free_boundaries.doc | 0 doc/salome/gui/GEOM/input/tui_free_faces.doc | 0 doc/salome/gui/GEOM/input/tui_get_non_blocks.doc | 0 doc/salome/gui/GEOM/input/tui_import_export.doc | 0 .../gui/GEOM/input/tui_importexport_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_inertia.doc | 0 doc/salome/gui/GEOM/input/tui_measurement_tools.doc | 0 doc/salome/gui/GEOM/input/tui_min_distance.doc | 0 doc/salome/gui/GEOM/input/tui_normal_face.doc | 0 doc/salome/gui/GEOM/input/tui_notebook_geom.doc | 0 doc/salome/gui/GEOM/input/tui_point_coordinates.doc | 0 doc/salome/gui/GEOM/input/tui_primitives.doc | 0 .../gui/GEOM/input/tui_repairing_operations.doc | 0 doc/salome/gui/GEOM/input/tui_sketcher.doc | 0 doc/salome/gui/GEOM/input/tui_swig_examples.doc | 0 doc/salome/gui/GEOM/input/tui_test_all.doc | 0 doc/salome/gui/GEOM/input/tui_test_measures.doc | 0 doc/salome/gui/GEOM/input/tui_test_others.doc | 0 doc/salome/gui/GEOM/input/tui_test_spanner.doc | 0 doc/salome/gui/GEOM/input/tui_tolerance.doc | 0 .../gui/GEOM/input/tui_topological_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_transformation.doc | 0 .../GEOM/input/tui_transformation_operations.doc | 0 doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_whatis.doc | 0 .../gui/GEOM/input/tui_working_with_groups.doc | 0 .../gui/GEOM/input/using_boolean_operations.doc | 0 .../gui/GEOM/input/using_measurement_tools.doc | 0 .../gui/GEOM/input/using_notebook_geom_page.doc | 0 doc/salome/gui/GEOM/input/viewing_geom_obj.doc | 0 doc/salome/gui/GEOM/input/whatis.doc | 0 doc/salome/gui/GEOM/input/working_with_groups.doc | 0 doc/salome/gui/GEOM/input/xao_format.doc | 0 doc/salome/gui/GEOM/static/header_py.html.in | 0 doc/salome/gui/GEOM/static/salome_extra.css | 0 doc/salome/tui/images/geomscreen.png | Bin doc/salome/tui/input/index.doc | 0 doc/salome/tui/static/salome_extra.css | 0 idl/GEOM_Gen.idl | 0 idl/GEOM_Superv.idl | 0 resources/GEOM.config | 0 resources/GEOMActions.xml | 0 resources/GEOMCatalog.xml.in | 0 resources/GEOMDS_Resources | 0 resources/GEOM_en.xml | 0 resources/GEOM_fr.xml | 0 resources/ImportExport | 0 resources/ModuleGeom.png | Bin resources/Plugin.in | 0 resources/SalomeApp.xml.in | 0 resources/ShHealing | 0 resources/angle.png | Bin resources/arc.png | Bin resources/arccenter.png | Bin resources/archimede.png | Bin resources/axisinertia.png | Bin resources/basicproperties.png | Bin resources/bezier.png | Bin resources/block_2f.png | Bin resources/block_6f.png | Bin resources/block_face_2e.png | Bin resources/block_face_4e.png | Bin resources/block_face_4v.png | Bin resources/block_multitrsf_double.png | Bin resources/block_multitrsf_simple.png | Bin resources/bounding.png | Bin resources/box.png | Bin resources/box2points.png | Bin resources/boxdxyz.png | Bin resources/build_compound.png | Bin resources/build_edge.png | Bin resources/build_edge_curve.png | Bin resources/build_edge_wire.png | Bin resources/build_face.png | Bin resources/build_shell.png | Bin resources/build_solid.png | Bin resources/build_wire.png | Bin resources/centergravity.png | Bin resources/chamfer.png | Bin resources/chamferall.png | Bin resources/chamferedge.png | Bin resources/chamferface.png | Bin resources/change_direction.png | Bin resources/check.png | Bin resources/check_blocks_compound.png | Bin resources/check_self_intersections.png | Bin resources/circle.png | Bin resources/circle3points.png | Bin resources/circlepointvector.png | Bin resources/closecontour.png | Bin resources/common.png | Bin resources/cone.png | Bin resources/conepointvector.png | Bin resources/cut.png | Bin resources/cylinder.png | Bin resources/cylinderpointvector.png | Bin resources/delete.png | Bin resources/disk.png | Bin resources/disk3points.png | Bin resources/disk_pntvecr.png | Bin resources/disk_r.png | Bin resources/display.png | Bin resources/displayall.png | Bin resources/displayonly.png | Bin resources/divided_disk.png | Bin resources/dividedcylinder.png | Bin resources/dividedcylinder_r_h.png | Bin resources/dlg_pipetshape.png | Bin resources/dlg_pipetshapechamfer.png | Bin resources/dlg_pipetshapechamferh.png | Bin resources/dlg_pipetshapechamferl1.png | Bin resources/dlg_pipetshapechamferl2.png | Bin resources/dlg_pipetshapechamferr1.png | Bin resources/dlg_pipetshapechamferr2.png | Bin resources/dlg_pipetshapechamferw.png | Bin resources/dlg_pipetshapechamferw1.png | Bin resources/dlg_pipetshapechamferw2.png | Bin resources/dlg_pipetshapefillet.png | Bin resources/dlg_pipetshapefilletl1.png | Bin resources/dlg_pipetshapefilletl2.png | Bin resources/dlg_pipetshapefilletr1.png | Bin resources/dlg_pipetshapefilletr2.png | Bin resources/dlg_pipetshapefilletrf.png | Bin resources/dlg_pipetshapefilletw1.png | Bin resources/dlg_pipetshapefilletw2.png | Bin resources/dlg_pipetshapel1.png | Bin resources/dlg_pipetshapel2.png | Bin resources/dlg_pipetshaper1.png | Bin resources/dlg_pipetshaper2.png | Bin resources/dlg_pipetshapew1.png | Bin resources/dlg_pipetshapew2.png | Bin resources/draft.png | Bin resources/edit_points.png | Bin resources/erase.png | Bin resources/eraseall.png | Bin resources/exportxao.png | Bin resources/extruded_boss.png | Bin resources/extruded_cut.png | Bin resources/face_hw.png | Bin resources/face_vechw.png | Bin resources/feature_detect.png | Bin resources/field_edit.png | Bin resources/field_new.png | Bin resources/fillet.png | Bin resources/fillet1d.png | Bin resources/filletall.png | Bin resources/filletedge.png | Bin resources/filletface.png | Bin resources/filletwire.png | Bin resources/filling.png | Bin resources/folder.png | Bin resources/free_faces.png | Bin resources/fuse.png | Bin resources/fuse_collinear_edges.png | Bin resources/geometry.png | Bin resources/get_non_blocks.png | Bin resources/glue.png | Bin resources/glue2.png | Bin resources/group_edit.png | Bin resources/group_new.png | Bin resources/import_picture.png | Bin resources/importxao.png | Bin resources/interpol.png | Bin resources/isoline.png | Bin resources/isoline_v.png | Bin resources/limit_tolerance.png | Bin resources/line.png | Bin resources/line2points.png | Bin resources/managedimensions.png | Bin resources/marker.png | Bin resources/marker2.png | Bin resources/marker3.png | Bin resources/mindist.png | Bin resources/mirrorAxe.png | Bin resources/mirrorPlane.png | Bin resources/mirrorPoint.png | Bin resources/multirotation.png | Bin resources/multirotationdouble.png | Bin resources/multirotationsimple.png | Bin resources/multitranslation.png | Bin resources/multitranslationdouble.png | Bin resources/multitranslationsimple.png | Bin resources/normale.png | Bin resources/offset.png | Bin resources/partition.png | Bin resources/partitionkeep.png | Bin resources/partitionplane.png | Bin resources/pipebinormal.png | Bin resources/pipesections.png | Bin resources/pipetshape.png | Bin resources/pipetshape_import_icon.png | Bin resources/pipetshape_section.png | Bin resources/plane.png | Bin resources/plane3points.png | Bin resources/planeWorking.png | Bin resources/planeface.png | Bin resources/planepointvector.png | Bin resources/planeworkingface.png | Bin resources/planeworkingorigin.png | Bin resources/planeworkingvector.png | Bin resources/point2.png | Bin resources/point3.png | Bin resources/point_coord.png | Bin resources/polyline.png | Bin resources/position.png | Bin resources/position2.png | Bin resources/position3.png | Bin resources/prism.png | Bin resources/prism2.png | Bin resources/prism3.png | Bin resources/projection.png | Bin resources/propagate.png | Bin resources/rectangle.png | Bin resources/redo.png | Bin resources/remove_extra_edges.png | Bin resources/remove_webs.png | Bin resources/revol.png | Bin resources/rotate.png | Bin resources/scale.png | Bin resources/scale_along_axes.png | Bin resources/section.png | Bin resources/select1.png | Bin resources/sewing.png | Bin resources/shading_with_edges.png | Bin resources/shapeprocess.png | Bin resources/shared_shapes.png | Bin resources/sketch.png | Bin resources/smoothingsurface.png | Bin resources/smoothingsurface_lpoints.png | Bin resources/sphere.png | Bin resources/spheredxyz.png | Bin resources/spherepoint.png | Bin resources/spline.png | Bin resources/suppressintwires.png | Bin resources/supressface.png | Bin resources/tolerance.png | Bin resources/torus.png | Bin resources/toruspointvector.png | Bin resources/translation.png | Bin resources/translationDxyz.png | Bin resources/translationPoints.png | Bin resources/translationVector.png | Bin resources/tree_block.png | Bin resources/tree_compound.png | Bin resources/tree_compsolid.png | Bin resources/tree_edge.png | Bin resources/tree_face.png | Bin resources/tree_field_edge.png | Bin resources/tree_field_face.png | Bin resources/tree_field_solid.png | Bin resources/tree_field_vertex.png | Bin resources/tree_group_edge.png | Bin resources/tree_group_face.png | Bin resources/tree_group_solid.png | Bin resources/tree_group_vertex.png | Bin resources/tree_lcs.png | Bin resources/tree_pipetshape.png | Bin resources/tree_shape.png | Bin resources/tree_shell.png | Bin resources/tree_smoothingsurface.png | Bin resources/tree_solid.png | Bin resources/tree_vertex.png | Bin resources/tree_wire.png | Bin resources/undo.png | Bin resources/union_faces.png | Bin resources/vector.png | Bin resources/vector2points.png | Bin resources/vector_mode.png | Bin resources/vectordxyz.png | Bin resources/whatis.png | Bin resources/wireframe.png | Bin src/ARCHIMEDE/Archimede_VolumeSection.cxx | 0 src/ARCHIMEDE/Archimede_VolumeSection.hxx | 0 src/AdvancedEngine/AdvancedEngine.cxx | 0 .../AdvancedEngine_OperationsCreator.cc | 0 src/AdvancedEngine/AdvancedEngine_Types.hxx | 0 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx | 0 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx | 0 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx | 0 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx | 0 src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx | 0 src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx | 0 src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx | 0 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx | 0 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx | 0 .../GEOMImpl_SmoothingSurfaceDriver.cxx | 0 .../GEOMImpl_SmoothingSurfaceDriver.hxx | 0 src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc | 0 src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh | 0 src/AdvancedGUI/AdvancedGUI.cxx | 0 src/AdvancedGUI/AdvancedGUI.h | 0 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h | 0 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h | 0 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h | 0 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h | 0 src/AdvancedGUI/AdvancedGUI_images.ts | 0 src/AdvancedGUI/AdvancedGUI_msg_en.ts | 0 src/AdvancedGUI/AdvancedGUI_msg_fr.ts | 0 src/AdvancedGUI/AdvancedGUI_msg_ja.ts | 0 src/BREPExport/BREPExport.cxx | 0 src/BREPImport/BREPImport.cxx | 0 src/BasicGUI/BasicGUI.cxx | 0 src/BasicGUI/BasicGUI.h | 0 src/BasicGUI/BasicGUI_ArcDlg.cxx | 0 src/BasicGUI/BasicGUI_ArcDlg.h | 0 src/BasicGUI/BasicGUI_CircleDlg.cxx | 0 src/BasicGUI/BasicGUI_CircleDlg.h | 0 src/BasicGUI/BasicGUI_CurveDlg.cxx | 0 src/BasicGUI/BasicGUI_CurveDlg.h | 0 src/BasicGUI/BasicGUI_EllipseDlg.cxx | 0 src/BasicGUI/BasicGUI_EllipseDlg.h | 0 src/BasicGUI/BasicGUI_LineDlg.cxx | 0 src/BasicGUI/BasicGUI_LineDlg.h | 0 src/BasicGUI/BasicGUI_MarkerDlg.cxx | 0 src/BasicGUI/BasicGUI_MarkerDlg.h | 0 src/BasicGUI/BasicGUI_ParamCurveWidget.cxx | 0 src/BasicGUI/BasicGUI_ParamCurveWidget.h | 0 src/BasicGUI/BasicGUI_PlaneDlg.cxx | 0 src/BasicGUI/BasicGUI_PlaneDlg.h | 0 src/BasicGUI/BasicGUI_PointDlg.cxx | 0 src/BasicGUI/BasicGUI_PointDlg.h | 0 src/BasicGUI/BasicGUI_VectorDlg.cxx | 0 src/BasicGUI/BasicGUI_VectorDlg.h | 0 src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx | 0 src/BasicGUI/BasicGUI_WorkingPlaneDlg.h | 0 src/BlockFix/BlockFix.cxx | 0 src/BlockFix/BlockFix.hxx | 0 src/BlockFix/BlockFix_BlockFixAPI.cxx | 0 src/BlockFix/BlockFix_BlockFixAPI.hxx | 0 src/BlockFix/BlockFix_CheckTool.cxx | 0 src/BlockFix/BlockFix_CheckTool.hxx | 0 src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx | 0 src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx | 0 src/BlockFix/BlockFix_SphereSpaceModifier.cxx | 0 src/BlockFix/BlockFix_SphereSpaceModifier.hxx | 0 src/BlockFix/BlockFix_UnionEdges.cxx | 0 src/BlockFix/BlockFix_UnionEdges.hxx | 0 src/BlockFix/BlockFix_UnionFaces.cxx | 0 src/BlockFix/BlockFix_UnionFaces.hxx | 0 src/BlocksGUI/BlocksGUI.cxx | 0 src/BlocksGUI/BlocksGUI.h | 0 src/BlocksGUI/BlocksGUI_BlockDlg.cxx | 0 src/BlocksGUI/BlocksGUI_BlockDlg.h | 0 src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx | 0 src/BlocksGUI/BlocksGUI_ExplodeDlg.h | 0 src/BlocksGUI/BlocksGUI_PropagateDlg.cxx | 0 src/BlocksGUI/BlocksGUI_PropagateDlg.h | 0 src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx | 0 src/BlocksGUI/BlocksGUI_QuadFaceDlg.h | 0 src/BlocksGUI/BlocksGUI_TrsfDlg.cxx | 0 src/BlocksGUI/BlocksGUI_TrsfDlg.h | 0 src/BooleanGUI/BooleanGUI.cxx | 0 src/BooleanGUI/BooleanGUI.h | 0 src/BooleanGUI/BooleanGUI_Dialog.cxx | 0 src/BooleanGUI/BooleanGUI_Dialog.h | 0 src/BuildGUI/BuildGUI.cxx | 0 src/BuildGUI/BuildGUI.h | 0 src/BuildGUI/BuildGUI_CompoundDlg.cxx | 0 src/BuildGUI/BuildGUI_CompoundDlg.h | 0 src/BuildGUI/BuildGUI_EdgeDlg.cxx | 0 src/BuildGUI/BuildGUI_EdgeDlg.h | 0 src/BuildGUI/BuildGUI_FaceDlg.cxx | 0 src/BuildGUI/BuildGUI_FaceDlg.h | 0 src/BuildGUI/BuildGUI_ShellDlg.cxx | 0 src/BuildGUI/BuildGUI_ShellDlg.h | 0 src/BuildGUI/BuildGUI_SolidDlg.cxx | 0 src/BuildGUI/BuildGUI_SolidDlg.h | 0 src/BuildGUI/BuildGUI_WireDlg.cxx | 0 src/BuildGUI/BuildGUI_WireDlg.h | 0 src/CurveCreator/CMakeLists.txt | 0 src/CurveCreator/CurveCreator.hxx | 0 src/CurveCreator/CurveCreator_Curve.cxx | 0 src/CurveCreator/CurveCreator_Curve.hxx | 0 src/CurveCreator/CurveCreator_CurveEditor.cxx | 0 src/CurveCreator/CurveCreator_CurveEditor.hxx | 0 src/CurveCreator/CurveCreator_Diff.cxx | 0 src/CurveCreator/CurveCreator_Diff.hxx | 0 src/CurveCreator/CurveCreator_ICurve.cxx | 0 src/CurveCreator/CurveCreator_ICurve.hxx | 0 src/CurveCreator/CurveCreator_Macro.hxx | 0 src/CurveCreator/CurveCreator_Operation.cxx | 0 src/CurveCreator/CurveCreator_Operation.hxx | 0 src/CurveCreator/CurveCreator_Section.hxx | 0 src/CurveCreator/CurveCreator_UndoOptsDlg.cxx | 0 src/CurveCreator/CurveCreator_UndoOptsDlg.h | 0 src/CurveCreator/CurveCreator_Widget.cxx | 0 src/CurveCreator/CurveCreator_Widget.h | 0 src/DependencyTree/CMakeLists.txt | 0 src/DependencyTree/DependencyTree.h | 0 src/DependencyTree/DependencyTree_Arrow.cxx | 0 src/DependencyTree/DependencyTree_Arrow.h | 0 src/DependencyTree/DependencyTree_Object.cxx | 0 src/DependencyTree/DependencyTree_Object.h | 0 src/DependencyTree/DependencyTree_Selector.cxx | 0 src/DependencyTree/DependencyTree_Selector.h | 0 src/DependencyTree/DependencyTree_View.cxx | 0 src/DependencyTree/DependencyTree_View.h | 0 src/DependencyTree/DependencyTree_ViewModel.cxx | 0 src/DependencyTree/DependencyTree_ViewModel.h | 0 .../resources/DependencyTree_msg_en.ts | 0 .../resources/DependencyTree_msg_fr.ts | 0 .../resources/DependencyTree_msg_ja.ts | 0 src/DependencyTree/resources/tree_view_dump.png | Bin src/DependencyTree/resources/tree_view_fitall.png | Bin src/DependencyTree/resources/tree_view_fitarea.png | Bin src/DependencyTree/resources/tree_view_glpan.png | Bin src/DependencyTree/resources/tree_view_pan.png | Bin src/DependencyTree/resources/tree_view_reset.png | Bin src/DependencyTree/resources/tree_view_zoom.png | Bin src/DisplayGUI/DisplayGUI.cxx | 0 src/DisplayGUI/DisplayGUI.h | 0 src/DlgRef/DlgRef.cxx | 0 src/DlgRef/DlgRef.h | 0 src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Frame_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel2Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1SelExt_QTD.ui | 0 src/DlgRef/DlgRef_1Sel_QTD.ui | 0 src/DlgRef/DlgRef_1Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1List_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2List_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui | 0 src/DlgRef/DlgRef_2Sel3Spin_QTD.ui | 0 src/DlgRef/DlgRef_2SelExt_QTD.ui | 0 src/DlgRef/DlgRef_2Sel_QTD.ui | 0 src/DlgRef/DlgRef_2Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Check_QTD.ui | 0 src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Radio_QTD.ui | 0 src/DlgRef/DlgRef_3Sel1Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Sel2Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel_QTD.ui | 0 src/DlgRef/DlgRef_3Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_3Spin_QTD.ui | 0 src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui | 0 src/DlgRef/DlgRef_4Sel1List_QTD.ui | 0 src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_4Spin_QTD.ui | 0 src/DlgRef/DlgRef_6Sel_QTD.ui | 0 src/DlgRef/DlgRef_Skeleton_QTD.ui | 0 src/EntityGUI/EntityGUI.cxx | 0 src/EntityGUI/EntityGUI.h | 0 src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_1Sel_QTD.ui | 0 src/EntityGUI/EntityGUI_1Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_2Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_3Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_4Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_Angles_QTD.ui | 0 src/EntityGUI/EntityGUI_Controls_QTD.ui | 0 src/EntityGUI/EntityGUI_Dir1_QTD.ui | 0 src/EntityGUI/EntityGUI_Dir2_QTD.ui | 0 src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx | 0 src/EntityGUI/EntityGUI_FeatureDetectorDlg.h | 0 src/EntityGUI/EntityGUI_FieldDlg.cxx | 0 src/EntityGUI/EntityGUI_FieldDlg.h | 0 src/EntityGUI/EntityGUI_PictureImportDlg.cxx | 0 src/EntityGUI/EntityGUI_PictureImportDlg.h | 0 src/EntityGUI/EntityGUI_Point_QTD.ui | 0 src/EntityGUI/EntityGUI_Skeleton_QTD.ui | 0 src/EntityGUI/EntityGUI_SketcherDlg.cxx | 0 src/EntityGUI/EntityGUI_SketcherDlg.h | 0 src/EntityGUI/EntityGUI_SubShapeDlg.cxx | 0 src/EntityGUI/EntityGUI_SubShapeDlg.h | 0 src/EntityGUI/EntityGUI_Type_QTD.ui | 0 src/EntityGUI/EntityGUI_Widgets.cxx | 0 src/EntityGUI/EntityGUI_Widgets.h | 0 src/GEOM/GEOM_Application.cxx | 0 src/GEOM/GEOM_Application.hxx | 0 src/GEOM/GEOM_Application.ixx | 0 src/GEOM/GEOM_Application.jxx | 0 src/GEOM/GEOM_BaseDriver.cxx | 0 src/GEOM/GEOM_BaseDriver.hxx | 0 src/GEOM/GEOM_BaseObject.cxx | 0 src/GEOM/GEOM_BaseObject.hxx | 0 ...taMapIteratorOfDataMapOfAsciiStringTransient.hxx | 0 ...MapIteratorOfDataMapOfAsciiStringTransient_0.cxx | 0 ...M_DataMapNodeOfDataMapOfAsciiStringTransient.hxx | 0 ...DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx | 0 src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx | 0 src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx | 0 src/GEOM/GEOM_Engine.cxx | 0 src/GEOM/GEOM_Engine.hxx | 0 src/GEOM/GEOM_Field.cxx | 0 src/GEOM/GEOM_Field.hxx | 0 src/GEOM/GEOM_Function.cxx | 0 src/GEOM/GEOM_Function.hxx | 0 src/GEOM/GEOM_IField.hxx | 0 src/GEOM/GEOM_IOperations.cxx | 0 src/GEOM/GEOM_IOperations.hxx | 0 src/GEOM/GEOM_ISubShape.hxx | 0 src/GEOM/GEOM_Object.cxx | 0 src/GEOM/GEOM_Object.hxx | 0 src/GEOM/GEOM_PythonDump.cxx | 0 src/GEOM/GEOM_PythonDump.hxx | 0 src/GEOM/GEOM_Solver.cxx | 0 src/GEOM/GEOM_Solver.hxx | 0 src/GEOM/GEOM_SubShapeDriver.cxx | 0 src/GEOM/GEOM_SubShapeDriver.hxx | 0 src/GEOM/Handle_GEOM_Application.hxx | 0 ...M_DataMapNodeOfDataMapOfAsciiStringTransient.hxx | 0 src/GEOMAlgo/FILES | 0 src/GEOMAlgo/GEOMAlgo_Algo.hxx | 0 src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_Clsf.cxx | 0 src/GEOMAlgo/GEOMAlgo_Clsf.hxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx | 0 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx | 0 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx | 0 ...lgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx | 0 src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx | 0 src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx | 0 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx | 0 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx | 0 src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx | 0 src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer.hxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2.cxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2.hxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx | 0 src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx | 0 src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx | 0 src/GEOMAlgo/GEOMAlgo_HAlgo.cxx | 0 src/GEOMAlgo/GEOMAlgo_HAlgo.hxx | 0 .../GEOMAlgo_IndexedDataMapOfIntegerShape.hxx | 0 ...Algo_IndexedDataMapOfPassKeyShapeListOfShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx | 0 .../GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx | 0 .../GEOMAlgo_IndexedDataMapOfShapeState.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfName.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx | 0 .../GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx | 0 src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx | 0 src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx | 0 src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKey.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx | 0 src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx | 0 src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_Splitter.hxx | 0 src/GEOMAlgo/GEOMAlgo_State.hxx | 0 src/GEOMAlgo/GEOMAlgo_StateCollector.cxx | 0 src/GEOMAlgo/GEOMAlgo_StateCollector.hxx | 0 src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx | 0 src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx | 0 src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_WireSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_WireSolid.hxx | 0 src/GEOMBase/GEOMBase.cxx | 0 src/GEOMBase/GEOMBase.h | 0 src/GEOMBase/GEOMBase_Skeleton.cxx | 0 src/GEOMBase/GEOMBase_Skeleton.h | 0 src/GEOMBase/GEOM_GenericObjPtr.cxx | 0 src/GEOMBase/GEOM_GenericObjPtr.h | 0 src/GEOMBase/GEOM_Operation.cxx | 0 src/GEOMBase/GEOM_Operation.h | 0 src/GEOMClient/GEOM_Client.cxx | 0 src/GEOMClient/GEOM_Client.hxx | 0 src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_CompoundFilter.h | 0 src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_EdgeFilter.h | 0 src/GEOMFiltersSelection/GEOM_FaceFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_FaceFilter.h | 0 src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_LogicalFilter.h | 0 src/GEOMFiltersSelection/GEOM_OCCFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_OCCFilter.h | 0 src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_PreviewFilter.h | 0 src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_SelectionFilter.h | 0 src/GEOMFiltersSelection/GEOM_TypeFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_TypeFilter.h | 0 src/GEOMGUI/GEOMGUI.cxx | 0 src/GEOMGUI/GEOMGUI.h | 0 src/GEOMGUI/GEOMGUI.qrc | 0 src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx | 0 src/GEOMGUI/GEOMGUI_CreationInfoWdg.h | 0 src/GEOMGUI/GEOMGUI_DimensionProperty.cxx | 0 src/GEOMGUI/GEOMGUI_DimensionProperty.h | 0 src/GEOMGUI/GEOMGUI_OCCSelector.cxx | 0 src/GEOMGUI/GEOMGUI_OCCSelector.h | 0 src/GEOMGUI/GEOMGUI_Selection.cxx | 0 src/GEOMGUI/GEOMGUI_Selection.h | 0 src/GEOMGUI/GEOMGUI_XmlHandler.cxx | 0 src/GEOMGUI/GEOMGUI_XmlHandler.h | 0 src/GEOMGUI/GEOMPluginGUI.cxx | 0 src/GEOMGUI/GEOMPluginGUI.h | 0 src/GEOMGUI/GEOM_Displayer.cxx | 0 src/GEOMGUI/GEOM_Displayer.h | 0 src/GEOMGUI/GEOM_images.ts | 0 src/GEOMGUI/GEOM_msg_en.ts | 0 src/GEOMGUI/GEOM_msg_fr.ts | 0 src/GEOMGUI/GEOM_msg_ja.ts | 0 src/GEOMGUI/GeometryGUI.cxx | 0 src/GEOMGUI/GeometryGUI.h | 0 src/GEOMGUI/GeometryGUI_Operations.h | 0 src/GEOMImpl/GEOMImpl_ArcDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ArcDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_Block6Explorer.cxx | 0 src/GEOMImpl/GEOMImpl_Block6Explorer.hxx | 0 src/GEOMImpl/GEOMImpl_BlockDriver.cxx | 0 src/GEOMImpl/GEOMImpl_BlockDriver.hxx | 0 src/GEOMImpl/GEOMImpl_BooleanDriver.cxx | 0 src/GEOMImpl/GEOMImpl_BooleanDriver.hxx | 0 src/GEOMImpl/GEOMImpl_BoxDriver.cxx | 0 src/GEOMImpl/GEOMImpl_BoxDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ChamferDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ChamferDriver.hxx | 0 src/GEOMImpl/GEOMImpl_CircleDriver.cxx | 0 src/GEOMImpl/GEOMImpl_CircleDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ConeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ConeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_CopyDriver.cxx | 0 src/GEOMImpl/GEOMImpl_CopyDriver.hxx | 0 src/GEOMImpl/GEOMImpl_CylinderDriver.cxx | 0 src/GEOMImpl/GEOMImpl_CylinderDriver.hxx | 0 src/GEOMImpl/GEOMImpl_EllipseDriver.cxx | 0 src/GEOMImpl/GEOMImpl_EllipseDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ExportDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ExportDriver.hxx | 0 src/GEOMImpl/GEOMImpl_FieldDriver.cxx | 0 src/GEOMImpl/GEOMImpl_FieldDriver.hxx | 0 src/GEOMImpl/GEOMImpl_Fillet1d.cxx | 0 src/GEOMImpl/GEOMImpl_Fillet1d.hxx | 0 src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx | 0 src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx | 0 src/GEOMImpl/GEOMImpl_FilletDriver.cxx | 0 src/GEOMImpl/GEOMImpl_FilletDriver.hxx | 0 src/GEOMImpl/GEOMImpl_FillingDriver.cxx | 0 src/GEOMImpl/GEOMImpl_FillingDriver.hxx | 0 src/GEOMImpl/GEOMImpl_Gen.cxx | 0 src/GEOMImpl/GEOMImpl_Gen.hxx | 0 src/GEOMImpl/GEOMImpl_GlueDriver.cxx | 0 src/GEOMImpl/GEOMImpl_GlueDriver.hxx | 0 src/GEOMImpl/GEOMImpl_HealingDriver.cxx | 0 src/GEOMImpl/GEOMImpl_HealingDriver.hxx | 0 src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx | 0 src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IArc.hxx | 0 src/GEOMImpl/GEOMImpl_IArchimede.hxx | 0 src/GEOMImpl/GEOMImpl_IBasicOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IBasicOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx | 0 src/GEOMImpl/GEOMImpl_IBlocks.hxx | 0 src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IBoolean.hxx | 0 src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IBox.hxx | 0 src/GEOMImpl/GEOMImpl_IChamfer.hxx | 0 src/GEOMImpl/GEOMImpl_ICircle.hxx | 0 src/GEOMImpl/GEOMImpl_ICone.hxx | 0 src/GEOMImpl/GEOMImpl_ICopy.hxx | 0 src/GEOMImpl/GEOMImpl_ICurveParametric.hxx | 0 src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx | 0 src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx | 0 src/GEOMImpl/GEOMImpl_ICylinder.hxx | 0 src/GEOMImpl/GEOMImpl_IEllipse.hxx | 0 src/GEOMImpl/GEOMImpl_IFieldOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IFieldOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IFillet.hxx | 0 src/GEOMImpl/GEOMImpl_IFillet1d.hxx | 0 src/GEOMImpl/GEOMImpl_IFilling.hxx | 0 src/GEOMImpl/GEOMImpl_IGlue.hxx | 0 src/GEOMImpl/GEOMImpl_IGroupOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IGroupOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IHealingOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IHealingOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IImportExport.hxx | 0 src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx | 0 src/GEOMImpl/GEOMImpl_IInsertOperations.hxx | 0 src/GEOMImpl/GEOMImpl_ILine.hxx | 0 src/GEOMImpl/GEOMImpl_ILocalOperations.cxx | 0 src/GEOMImpl/GEOMImpl_ILocalOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IMarker.hxx | 0 src/GEOMImpl/GEOMImpl_IMeasure.hxx | 0 src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IMirror.hxx | 0 src/GEOMImpl/GEOMImpl_IOffset.hxx | 0 src/GEOMImpl/GEOMImpl_IPartition.hxx | 0 src/GEOMImpl/GEOMImpl_IPipe.hxx | 0 src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx | 0 src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx | 0 src/GEOMImpl/GEOMImpl_IPipePath.hxx | 0 src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx | 0 src/GEOMImpl/GEOMImpl_IPlane.hxx | 0 src/GEOMImpl/GEOMImpl_IPolyline.hxx | 0 src/GEOMImpl/GEOMImpl_IPosition.hxx | 0 src/GEOMImpl/GEOMImpl_IPrism.hxx | 0 src/GEOMImpl/GEOMImpl_IRevolution.hxx | 0 src/GEOMImpl/GEOMImpl_IRotate.hxx | 0 src/GEOMImpl/GEOMImpl_IScale.hxx | 0 src/GEOMImpl/GEOMImpl_IShapes.hxx | 0 src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IShapesOperations.hxx | 0 src/GEOMImpl/GEOMImpl_ISketcher.hxx | 0 src/GEOMImpl/GEOMImpl_ISphere.hxx | 0 src/GEOMImpl/GEOMImpl_ISpline.hxx | 0 src/GEOMImpl/GEOMImpl_IThruSections.hxx | 0 src/GEOMImpl/GEOMImpl_ITorus.hxx | 0 src/GEOMImpl/GEOMImpl_ITransformOperations.cxx | 0 src/GEOMImpl/GEOMImpl_ITransformOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IVector.hxx | 0 src/GEOMImpl/GEOMImpl_ImportDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ImportDriver.hxx | 0 src/GEOMImpl/GEOMImpl_LineDriver.cxx | 0 src/GEOMImpl/GEOMImpl_LineDriver.hxx | 0 src/GEOMImpl/GEOMImpl_MarkerDriver.cxx | 0 src/GEOMImpl/GEOMImpl_MarkerDriver.hxx | 0 src/GEOMImpl/GEOMImpl_MeasureDriver.cxx | 0 src/GEOMImpl/GEOMImpl_MeasureDriver.hxx | 0 src/GEOMImpl/GEOMImpl_MirrorDriver.cxx | 0 src/GEOMImpl/GEOMImpl_MirrorDriver.hxx | 0 src/GEOMImpl/GEOMImpl_OffsetDriver.cxx | 0 src/GEOMImpl/GEOMImpl_OffsetDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PartitionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PartitionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PipeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PipeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PipePathDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PipePathDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PlaneDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PlaneDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PointDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PointDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PolylineDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PolylineDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PositionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PositionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PrismDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PrismDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_RotateDriver.cxx | 0 src/GEOMImpl/GEOMImpl_RotateDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ScaleDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ScaleDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ShapeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_SketcherDriver.cxx | 0 src/GEOMImpl/GEOMImpl_SketcherDriver.hxx | 0 src/GEOMImpl/GEOMImpl_SphereDriver.cxx | 0 src/GEOMImpl/GEOMImpl_SphereDriver.hxx | 0 src/GEOMImpl/GEOMImpl_SplineDriver.cxx | 0 src/GEOMImpl/GEOMImpl_SplineDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx | 0 src/GEOMImpl/GEOMImpl_TorusDriver.cxx | 0 src/GEOMImpl/GEOMImpl_TorusDriver.hxx | 0 src/GEOMImpl/GEOMImpl_TranslateDriver.cxx | 0 src/GEOMImpl/GEOMImpl_TranslateDriver.hxx | 0 src/GEOMImpl/GEOMImpl_VectorDriver.cxx | 0 src/GEOMImpl/GEOMImpl_VectorDriver.hxx | 0 src/GEOMImpl/GEOMImpl_XAODriver.cxx | 0 src/GEOMImpl/GEOMImpl_XAODriver.hxx | 0 src/GEOMToolsGUI/GEOMToolsGUI.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h | 0 .../GEOMToolsGUI_MaterialPropertiesDlg.cxx | 0 .../GEOMToolsGUI_MaterialPropertiesDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h | 0 src/GEOMUtils/GEOMUtils.cxx | 0 src/GEOMUtils/GEOMUtils.hxx | 0 src/GEOM_I/GEOM_BaseObject_i.cc | 0 src/GEOM_I/GEOM_BaseObject_i.hh | 0 src/GEOM_I/GEOM_DumpPython.cc | 0 src/GEOM_I/GEOM_Field_i.cc | 0 src/GEOM_I/GEOM_Field_i.hh | 0 src/GEOM_I/GEOM_Gen_i.hh | 0 src/GEOM_I/GEOM_I3DPrimOperations_i.cc | 0 src/GEOM_I/GEOM_I3DPrimOperations_i.hh | 0 src/GEOM_I/GEOM_IBasicOperations_i.cc | 0 src/GEOM_I/GEOM_IBasicOperations_i.hh | 0 src/GEOM_I/GEOM_IBlocksOperations_i.hh | 0 src/GEOM_I/GEOM_IBooleanOperations_i.cc | 0 src/GEOM_I/GEOM_IBooleanOperations_i.hh | 0 src/GEOM_I/GEOM_ICurvesOperations_i.cc | 0 src/GEOM_I/GEOM_ICurvesOperations_i.hh | 0 src/GEOM_I/GEOM_IFieldOperations_i.cc | 0 src/GEOM_I/GEOM_IFieldOperations_i.hh | 0 src/GEOM_I/GEOM_IGroupOperations_i.cc | 0 src/GEOM_I/GEOM_IGroupOperations_i.hh | 0 src/GEOM_I/GEOM_IHealingOperations_i.cc | 0 src/GEOM_I/GEOM_IHealingOperations_i.hh | 0 src/GEOM_I/GEOM_IInsertOperations_i.cc | 0 src/GEOM_I/GEOM_IInsertOperations_i.hh | 0 src/GEOM_I/GEOM_ILocalOperations_i.cc | 0 src/GEOM_I/GEOM_ILocalOperations_i.hh | 0 src/GEOM_I/GEOM_IMeasureOperations_i.cc | 0 src/GEOM_I/GEOM_IMeasureOperations_i.hh | 0 src/GEOM_I/GEOM_IOperations_i.cc | 0 src/GEOM_I/GEOM_IOperations_i.hh | 0 src/GEOM_I/GEOM_IShapesOperations_i.cc | 0 src/GEOM_I/GEOM_IShapesOperations_i.hh | 0 src/GEOM_I/GEOM_ITransformOperations_i.cc | 0 src/GEOM_I/GEOM_ITransformOperations_i.hh | 0 src/GEOM_I/GEOM_Object_i.cc | 0 src/GEOM_I/GEOM_Object_i.hh | 0 src/GEOM_I/GEOM_wrap.hxx | 0 src/GEOM_I_Superv/GEOM_List_i.hh | 0 src/GEOM_I_Superv/GEOM_Superv_i.cc | 0 src/GEOM_I_Superv/GEOM_Superv_i.hh | 0 src/GEOM_PY/__init__.py | 0 src/GEOM_PY/geomtools.py | 0 src/GEOM_PY/sketcher.py | 0 src/GEOM_PY/structelem/__init__.py | 0 src/GEOM_PY/structelem/orientation.py | 0 src/GEOM_PY/structelem/parts.py | 0 src/GEOM_SWIG/GEOM_ObjectInfo.py | 0 src/GEOM_SWIG/GEOM_Sketcher.py | 0 src/GEOM_SWIG/GEOM_Spanner.py | 0 src/GEOM_SWIG/GEOM_TestAll.py | 0 src/GEOM_SWIG/GEOM_TestField.py | 0 src/GEOM_SWIG/GEOM_TestHealing.py | 0 src/GEOM_SWIG/GEOM_TestMeasures.py | 0 src/GEOM_SWIG/GEOM_TestOthers.py | 0 src/GEOM_SWIG/GEOM_blocks.py | 0 src/GEOM_SWIG/GEOM_example.py | 0 src/GEOM_SWIG/GEOM_example2.py | 0 src/GEOM_SWIG/GEOM_example3.py | 0 src/GEOM_SWIG/GEOM_example5.py | 0 src/GEOM_SWIG/GEOM_example7.py | 0 src/GEOM_SWIG/GEOM_moteur.py | 0 src/GEOM_SWIG/GEOM_shared_modules.py | 0 src/GEOM_SWIG/GEOM_usinggeom.py | 0 src/GEOM_SWIG/__init__.py | 0 src/GEOM_SWIG/geomBuilder.py | 0 src/GEOM_SWIG/geompy.py | 0 src/GEOM_SWIG/gsketcher.py | 0 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx | 0 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h | 0 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i | 0 src/GenerationGUI/GenerationGUI.cxx | 0 src/GenerationGUI/GenerationGUI.h | 0 src/GenerationGUI/GenerationGUI_FillingDlg.cxx | 0 src/GenerationGUI/GenerationGUI_FillingDlg.h | 0 src/GenerationGUI/GenerationGUI_PipeDlg.cxx | 0 src/GenerationGUI/GenerationGUI_PipeDlg.h | 0 src/GenerationGUI/GenerationGUI_PipePathDlg.cxx | 0 src/GenerationGUI/GenerationGUI_PipePathDlg.h | 0 src/GenerationGUI/GenerationGUI_PrismDlg.cxx | 0 src/GenerationGUI/GenerationGUI_PrismDlg.h | 0 src/GenerationGUI/GenerationGUI_RevolDlg.cxx | 0 src/GenerationGUI/GenerationGUI_RevolDlg.h | 0 src/GroupGUI/GroupGUI.cxx | 0 src/GroupGUI/GroupGUI.h | 0 src/GroupGUI/GroupGUI_BooleanDlg.cxx | 0 src/GroupGUI/GroupGUI_BooleanDlg.h | 0 src/GroupGUI/GroupGUI_GroupDlg.cxx | 0 src/GroupGUI/GroupGUI_GroupDlg.h | 0 src/IGESExport/IGESExport.cxx | 0 src/IGESImport/IGESImport.cxx | 0 src/ImportExportGUI/CMakeLists.txt | 0 src/ImportExportGUI/ImportExportGUI.cxx | 0 src/ImportExportGUI/ImportExportGUI.h | 0 .../ImportExportGUI_ExportXAODlg.cxx | 0 src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h | 0 .../ImportExportGUI_ImportXAODlg.cxx | 0 src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h | 0 src/Material/Material.h | 0 src/Material/Material_Model.cxx | 0 src/Material/Material_Model.h | 0 src/Material/Material_ResourceMgr.cxx | 0 src/Material/Material_ResourceMgr.h | 0 src/Material/resources/SalomeMaterial.xml | 0 src/MeasureGUI/MeasureGUI.cxx | 0 src/MeasureGUI/MeasureGUI.h | 0 src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui | 0 .../MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui | 0 .../MeasureGUI_1Sel1TextView1Check_QTD.ui | 0 .../MeasureGUI_1Sel1TextView2ListBox_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui | 0 .../MeasureGUI_1TreeWidget_4Button_QTD.ui | 0 src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui | 0 src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui | 0 src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui | 0 src/MeasureGUI/MeasureGUI_AngleDlg.cxx | 0 src/MeasureGUI/MeasureGUI_AngleDlg.h | 0 src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx | 0 src/MeasureGUI/MeasureGUI_BndBoxDlg.h | 0 src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx | 0 src/MeasureGUI/MeasureGUI_CenterMassDlg.h | 0 .../MeasureGUI_CheckCompoundOfBlocksDlg.cxx | 0 .../MeasureGUI_CheckCompoundOfBlocksDlg.h | 0 .../MeasureGUI_CheckSelfIntersectionsDlg.cxx | 0 .../MeasureGUI_CheckSelfIntersectionsDlg.h | 0 src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx | 0 src/MeasureGUI/MeasureGUI_CheckShapeDlg.h | 0 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx | 0 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h | 0 src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx | 0 src/MeasureGUI/MeasureGUI_DimensionCreateTool.h | 0 src/MeasureGUI/MeasureGUI_DimensionFilter.cxx | 0 src/MeasureGUI/MeasureGUI_DimensionFilter.h | 0 src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx | 0 src/MeasureGUI/MeasureGUI_DimensionInteractor.h | 0 src/MeasureGUI/MeasureGUI_DistanceDlg.cxx | 0 src/MeasureGUI/MeasureGUI_DistanceDlg.h | 0 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx | 0 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h | 0 src/MeasureGUI/MeasureGUI_InertiaDlg.cxx | 0 src/MeasureGUI/MeasureGUI_InertiaDlg.h | 0 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx | 0 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h | 0 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx | 0 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h | 0 src/MeasureGUI/MeasureGUI_NormaleDlg.cxx | 0 src/MeasureGUI/MeasureGUI_NormaleDlg.h | 0 src/MeasureGUI/MeasureGUI_PointDlg.cxx | 0 src/MeasureGUI/MeasureGUI_PointDlg.h | 0 src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx | 0 src/MeasureGUI/MeasureGUI_PropertiesDlg.h | 0 src/MeasureGUI/MeasureGUI_Skeleton.cxx | 0 src/MeasureGUI/MeasureGUI_Skeleton.h | 0 src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui | 0 src/MeasureGUI/MeasureGUI_WhatisDlg.cxx | 0 src/MeasureGUI/MeasureGUI_WhatisDlg.h | 0 src/MeasureGUI/MeasureGUI_Widgets.cxx | 0 src/MeasureGUI/MeasureGUI_Widgets.h | 0 src/OBJECT/GEOM_AISShape.cxx | 0 src/OBJECT/GEOM_AISShape.hxx | 0 src/OBJECT/GEOM_AISShape.ixx | 0 src/OBJECT/GEOM_AISShape.jxx | 0 src/OBJECT/GEOM_AISVector.cxx | 0 src/OBJECT/GEOM_AISVector.hxx | 0 src/OBJECT/GEOM_Actor.cxx | 0 src/OBJECT/GEOM_Actor.h | 0 src/OBJECT/GEOM_Constants.cxx | 0 src/OBJECT/GEOM_Constants.h | 0 src/OBJECT/GEOM_InteractiveObject.cxx | 0 src/OBJECT/GEOM_InteractiveObject.hxx | 0 src/OBJECT/GEOM_InteractiveObject.ixx | 0 src/OBJECT/GEOM_InteractiveObject.jxx | 0 src/OBJECT/GEOM_OCCReader.cxx | 0 src/OBJECT/GEOM_OCCReader.h | 0 src/OBJECT/GEOM_PainterPolyDataMapper.cxx | 0 src/OBJECT/GEOM_PainterPolyDataMapper.h | 0 src/OBJECT/GEOM_VTKTrihedron.cxx | 0 src/OBJECT/GEOM_VTKTrihedron.hxx | 0 src/OBJECT/Handle_GEOM_AISShape.hxx | 0 src/OBJECT/Handle_GEOM_InteractiveObject.hxx | 0 src/OperationGUI/OperationGUI.cxx | 0 src/OperationGUI/OperationGUI.h | 0 src/OperationGUI/OperationGUI_ArchimedeDlg.cxx | 0 src/OperationGUI/OperationGUI_ArchimedeDlg.h | 0 src/OperationGUI/OperationGUI_ChamferDlg.cxx | 0 src/OperationGUI/OperationGUI_ChamferDlg.h | 0 src/OperationGUI/OperationGUI_ClippingDlg.cxx | 0 src/OperationGUI/OperationGUI_ClippingDlg.h | 0 .../OperationGUI_ExtrudedFeatureDlg.cxx | 0 src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h | 0 src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx | 0 src/OperationGUI/OperationGUI_Fillet1d2dDlg.h | 0 src/OperationGUI/OperationGUI_FilletDlg.cxx | 0 src/OperationGUI/OperationGUI_FilletDlg.h | 0 .../OperationGUI_GetShapesOnShapeDlg.cxx | 0 src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h | 0 .../OperationGUI_GetSharedShapesDlg.cxx | 0 src/OperationGUI/OperationGUI_GetSharedShapesDlg.h | 0 src/OperationGUI/OperationGUI_MaterialDlg.cxx | 0 src/OperationGUI/OperationGUI_MaterialDlg.h | 0 src/OperationGUI/OperationGUI_PartitionDlg.cxx | 0 src/OperationGUI/OperationGUI_PartitionDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI.cxx | 0 src/PrimitiveGUI/PrimitiveGUI.h | 0 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h | 0 src/RepairGUI/RepairGUI.cxx | 0 src/RepairGUI/RepairGUI.h | 0 src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx | 0 src/RepairGUI/RepairGUI_ChangeOrientationDlg.h | 0 src/RepairGUI/RepairGUI_CloseContourDlg.cxx | 0 src/RepairGUI/RepairGUI_CloseContourDlg.h | 0 src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx | 0 src/RepairGUI/RepairGUI_DivideEdgeDlg.h | 0 src/RepairGUI/RepairGUI_FreeBoundDlg.cxx | 0 src/RepairGUI/RepairGUI_FreeBoundDlg.h | 0 src/RepairGUI/RepairGUI_FreeFacesDlg.cxx | 0 src/RepairGUI/RepairGUI_FreeFacesDlg.h | 0 src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx | 0 src/RepairGUI/RepairGUI_FuseEdgesDlg.h | 0 src/RepairGUI/RepairGUI_GlueDlg.cxx | 0 src/RepairGUI/RepairGUI_GlueDlg.h | 0 src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx | 0 src/RepairGUI/RepairGUI_LimitToleranceDlg.h | 0 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx | 0 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h | 0 src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx | 0 src/RepairGUI/RepairGUI_RemoveHolesDlg.h | 0 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx | 0 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h | 0 src/RepairGUI/RepairGUI_SewingDlg.cxx | 0 src/RepairGUI/RepairGUI_SewingDlg.h | 0 src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx | 0 src/RepairGUI/RepairGUI_SuppressFacesDlg.h | 0 src/SKETCHER/Sketcher_Profile.cxx | 0 src/SKETCHER/Sketcher_Profile.hxx | 0 src/STEPExport/STEPExport.cxx | 0 src/STEPImport/STEPImport.cxx | 0 src/STLExport/STLExport.cxx | 0 src/ShHealOper/ShHealOper_ChangeOrientation.cxx | 0 src/ShHealOper/ShHealOper_ChangeOrientation.hxx | 0 src/ShHealOper/ShHealOper_CloseContour.cxx | 0 src/ShHealOper/ShHealOper_CloseContour.hxx | 0 src/ShHealOper/ShHealOper_EdgeDivide.cxx | 0 src/ShHealOper/ShHealOper_EdgeDivide.hxx | 0 src/ShHealOper/ShHealOper_FillHoles.cxx | 0 src/ShHealOper/ShHealOper_FillHoles.hxx | 0 src/ShHealOper/ShHealOper_RemoveFace.cxx | 0 src/ShHealOper/ShHealOper_RemoveFace.hxx | 0 src/ShHealOper/ShHealOper_RemoveInternalWires.cxx | 0 src/ShHealOper/ShHealOper_RemoveInternalWires.hxx | 0 src/ShHealOper/ShHealOper_Sewing.cxx | 0 src/ShHealOper/ShHealOper_Sewing.hxx | 0 src/ShHealOper/ShHealOper_ShapeProcess.cxx | 0 src/ShHealOper/ShHealOper_ShapeProcess.hxx | 0 src/ShHealOper/ShHealOper_SpiltCurve2d.hxx | 0 src/ShHealOper/ShHealOper_SplitCurve2d.cxx | 0 src/ShHealOper/ShHealOper_SplitCurve2d.hxx | 0 src/ShHealOper/ShHealOper_SplitCurve3d.cxx | 0 src/ShHealOper/ShHealOper_SplitCurve3d.hxx | 0 src/ShHealOper/ShHealOper_Tool.cxx | 0 src/ShHealOper/ShHealOper_Tool.hxx | 0 src/ShapeRecognition/ShapeRec_FeatureDetector.cxx | 0 src/ShapeRecognition/ShapeRec_FeatureDetector.hxx | 0 src/TransformationGUI/TransformationGUI.cxx | 0 src/TransformationGUI/TransformationGUI.h | 0 .../TransformationGUI_MirrorDlg.cxx | 0 src/TransformationGUI/TransformationGUI_MirrorDlg.h | 0 .../TransformationGUI_MultiRotationDlg.cxx | 0 .../TransformationGUI_MultiRotationDlg.h | 0 .../TransformationGUI_MultiTranslationDlg.cxx | 0 .../TransformationGUI_MultiTranslationDlg.h | 0 .../TransformationGUI_OffsetDlg.cxx | 0 src/TransformationGUI/TransformationGUI_OffsetDlg.h | 0 .../TransformationGUI_PositionDlg.cxx | 0 .../TransformationGUI_PositionDlg.h | 0 .../TransformationGUI_ProjectionDlg.cxx | 0 .../TransformationGUI_ProjectionDlg.h | 0 .../TransformationGUI_RotationDlg.cxx | 0 .../TransformationGUI_RotationDlg.h | 0 .../TransformationGUI_ScaleDlg.cxx | 0 src/TransformationGUI/TransformationGUI_ScaleDlg.h | 0 .../TransformationGUI_TranslationDlg.cxx | 0 .../TransformationGUI_TranslationDlg.h | 0 src/VTKExport/VTKExport.cxx | 0 src/XAO/CMakeLists.txt | 0 src/XAO/XAO_BooleanField.cxx | 0 src/XAO/XAO_BooleanField.hxx | 0 src/XAO/XAO_BooleanStep.cxx | 0 src/XAO/XAO_BooleanStep.hxx | 0 src/XAO/XAO_BrepGeometry.cxx | 0 src/XAO/XAO_BrepGeometry.hxx | 0 src/XAO/XAO_DoubleField.cxx | 0 src/XAO/XAO_DoubleField.hxx | 0 src/XAO/XAO_DoubleStep.cxx | 0 src/XAO/XAO_DoubleStep.hxx | 0 src/XAO/XAO_Exception.hxx | 0 src/XAO/XAO_Field.cxx | 0 src/XAO/XAO_Field.hxx | 0 src/XAO/XAO_GeometricElement.cxx | 0 src/XAO/XAO_GeometricElement.hxx | 0 src/XAO/XAO_Geometry.cxx | 0 src/XAO/XAO_Geometry.hxx | 0 src/XAO/XAO_Group.cxx | 0 src/XAO/XAO_Group.hxx | 0 src/XAO/XAO_IntegerField.cxx | 0 src/XAO/XAO_IntegerField.hxx | 0 src/XAO/XAO_IntegerStep.cxx | 0 src/XAO/XAO_IntegerStep.hxx | 0 src/XAO/XAO_Step.cxx | 0 src/XAO/XAO_Step.hxx | 0 src/XAO/XAO_StringField.cxx | 0 src/XAO/XAO_StringField.hxx | 0 src/XAO/XAO_StringStep.cxx | 0 src/XAO/XAO_StringStep.hxx | 0 src/XAO/XAO_Xao.cxx | 0 src/XAO/XAO_Xao.hxx | 0 src/XAO/XAO_XaoExporter.cxx | 0 src/XAO/XAO_XaoExporter.hxx | 0 src/XAO/XAO_XaoUtils.cxx | 0 src/XAO/XAO_XaoUtils.hxx | 0 src/XAO/tests/BrepGeometryTest.cxx | 0 src/XAO/tests/BrepGeometryTest.hxx | 0 src/XAO/tests/CMakeLists.txt | 0 src/XAO/tests/FieldTest.cxx | 0 src/XAO/tests/FieldTest.hxx | 0 src/XAO/tests/GeometryTest.cxx | 0 src/XAO/tests/GeometryTest.hxx | 0 src/XAO/tests/GroupTest.cxx | 0 src/XAO/tests/GroupTest.hxx | 0 src/XAO/tests/ImportExportTest.cxx | 0 src/XAO/tests/ImportExportTest.hxx | 0 src/XAO/tests/MainTest.hxx | 0 src/XAO/tests/TestUtils.hxx | 0 src/XAO/tests/XAOTests.cxx | 0 src/XAO/tests/XaoTest.cxx | 0 src/XAO/tests/XaoTest.hxx | 0 src/XAO/tests/XaoUtilsTest.cxx | 0 src/XAO/tests/XaoUtilsTest.hxx | 0 src/XAO/tests/data/Box_1.brep | 0 src/XAO/tests/data/Box_2.brep | 0 src/XAO/tests/data/Cut_2.brep | 0 src/XAO/tests/data/test.xao | 0 src/XAO_Swig/CMakeLists.txt | 0 src/XAO_Swig/xao.i | 0 1720 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 AUTHORS mode change 100644 => 100755 COPYING mode change 100644 => 100755 ChangeLog mode change 100644 => 100755 GEOM_version.h.in mode change 100644 => 100755 INSTALL mode change 100644 => 100755 LICENCE mode change 100644 => 100755 NEWS mode change 100644 => 100755 README mode change 100644 => 100755 SalomeGEOMConfig.cmake.in mode change 100644 => 100755 adm_local/cmake_files/FindGEOM.cmake mode change 100644 => 100755 adm_local/cmake_files/FindOpenCV.cmake mode change 100644 => 100755 adm_local/cmake_files/FindSalomeGEOM.cmake mode change 100644 => 100755 adm_local/cmake_files/FindSalomeOpenCV.cmake mode change 100644 => 100755 adm_local/unix/config_files/check_GEOM.m4 mode change 100644 => 100755 adm_local/unix/config_files/check_OpenCV.m4 mode change 100644 => 100755 bin/addvars2notebook_GEOM.py mode change 100644 => 100755 bin/geom_setenv.py mode change 100644 => 100755 doc/salome/examples/3dsketcher.py mode change 100644 => 100755 doc/salome/examples/CMakeLists.txt mode change 100644 => 100755 doc/salome/examples/GEOM_box.py mode change 100644 => 100755 doc/salome/examples/advanced_geom_objs_ex01.py mode change 100644 => 100755 doc/salome/examples/advanced_geom_objs_ex02.py mode change 100644 => 100755 doc/salome/examples/advanced_geom_objs_ex03.py mode change 100644 => 100755 doc/salome/examples/advanced_geom_objs_smoothingsurface.py mode change 100644 => 100755 doc/salome/examples/angle.py mode change 100644 => 100755 doc/salome/examples/arranging_study_objects.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex01.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex02.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex03.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex04.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex05.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex06.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex07.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex08.py mode change 100644 => 100755 doc/salome/examples/basic_geom_objs_ex09.py mode change 100644 => 100755 doc/salome/examples/basic_operations_ex01.py mode change 100644 => 100755 doc/salome/examples/basic_operations_ex02.py mode change 100644 => 100755 doc/salome/examples/basic_operations_ex03.py mode change 100644 => 100755 doc/salome/examples/basic_properties.py mode change 100644 => 100755 doc/salome/examples/blocks_operations_ex01.py mode change 100644 => 100755 doc/salome/examples/blocks_operations_ex02.py mode change 100644 => 100755 doc/salome/examples/blocks_operations_ex03.py mode change 100644 => 100755 doc/salome/examples/boolean_operations_ex01.py mode change 100644 => 100755 doc/salome/examples/boolean_operations_ex02.py mode change 100644 => 100755 doc/salome/examples/boolean_operations_ex03.py mode change 100644 => 100755 doc/salome/examples/boolean_operations_ex04.py mode change 100644 => 100755 doc/salome/examples/bounding_box.py mode change 100644 => 100755 doc/salome/examples/building_by_blocks_ex01.py mode change 100644 => 100755 doc/salome/examples/building_by_blocks_ex02.py mode change 100644 => 100755 doc/salome/examples/center_of_mass.py mode change 100644 => 100755 doc/salome/examples/check_compound_of_blocks.py mode change 100644 => 100755 doc/salome/examples/check_self_intersections.py mode change 100644 => 100755 doc/salome/examples/check_shape.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex01.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex02.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex03.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex04.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex05.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex06.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex07.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex08.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex09.py mode change 100644 => 100755 doc/salome/examples/complex_objs_ex10.py mode change 100644 => 100755 doc/salome/examples/free_boundaries.py mode change 100644 => 100755 doc/salome/examples/free_faces.py mode change 100644 => 100755 doc/salome/examples/get_non_blocks.py mode change 100644 => 100755 doc/salome/examples/import_export.py mode change 100644 => 100755 doc/salome/examples/inertia.py mode change 100644 => 100755 doc/salome/examples/min_distance.py mode change 100644 => 100755 doc/salome/examples/normal_face.py mode change 100644 => 100755 doc/salome/examples/notebook_geom.py mode change 100644 => 100755 doc/salome/examples/point_coordinates.py mode change 100644 => 100755 doc/salome/examples/primitives_ex01.py mode change 100644 => 100755 doc/salome/examples/primitives_ex02.py mode change 100644 => 100755 doc/salome/examples/primitives_ex03.py mode change 100644 => 100755 doc/salome/examples/primitives_ex04.py mode change 100644 => 100755 doc/salome/examples/primitives_ex05.py mode change 100644 => 100755 doc/salome/examples/primitives_ex06.py mode change 100644 => 100755 doc/salome/examples/primitives_ex07.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex01.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex02.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex03.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex04.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex05.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex06.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex07.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex08.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex09.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex10.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex11.py mode change 100644 => 100755 doc/salome/examples/repairing_operations_ex12.py mode change 100644 => 100755 doc/salome/examples/sketcher.py mode change 100644 => 100755 doc/salome/examples/tolerance.py mode change 100644 => 100755 doc/salome/examples/topological_geom_objs_ex01.py mode change 100644 => 100755 doc/salome/examples/topological_geom_objs_ex02.py mode change 100644 => 100755 doc/salome/examples/topological_geom_objs_ex03.py mode change 100644 => 100755 doc/salome/examples/topological_geom_objs_ex04.py mode change 100644 => 100755 doc/salome/examples/topological_geom_objs_ex05.py mode change 100644 => 100755 doc/salome/examples/topological_geom_objs_ex06.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex01.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex02.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex03.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex04.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex05.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex06.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex07.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex08.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex09.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex10.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex11.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex12.py mode change 100644 => 100755 doc/salome/examples/transformation_operations_ex13.py mode change 100644 => 100755 doc/salome/examples/viewing_geom_objs_ex01.py mode change 100644 => 100755 doc/salome/examples/viewing_geom_objs_ex02.py mode change 100644 => 100755 doc/salome/examples/viewing_geom_objs_ex03.py mode change 100644 => 100755 doc/salome/examples/viewing_geom_objs_ex04.py mode change 100644 => 100755 doc/salome/examples/whatis.py mode change 100644 => 100755 doc/salome/examples/working_with_groups_ex01.py mode change 100644 => 100755 doc/salome/examples/working_with_groups_ex02.py mode change 100644 => 100755 doc/salome/examples/working_with_groups_ex03.py mode change 100644 => 100755 doc/salome/examples/working_with_groups_ex04.py mode change 100644 => 100755 doc/salome/examples/working_with_groups_ex05.py mode change 100644 => 100755 doc/salome/examples/working_with_groups_ex06.py mode change 100644 => 100755 doc/salome/gui/GEOM/CMakeLists.txt mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch10.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch12.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch5.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch6.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch7.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch8.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/2dsketch9.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/3dsketch4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/3dsketch_angle_abs.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/3dsketch_angle_height_rel.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/3dsketch_angle_rel.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/3dsketch_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/add_dimension.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arc2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arc_icon.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arcofellipse1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arcofellipse2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arcsn1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arcsn2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arranging1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arranging2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/arranging3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/change_direction.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/compound2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/contour_detect_snapshot.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/contour_detection_example2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/creation_op_info.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/curve1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/curve2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/curve3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/curve4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/deflection_0001.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/deflection_001.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/dialog.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/dimensions_preview.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/disk1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/disk2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/disk3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/disks.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/divided_disk.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/divided_disk_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/dividedcylinder.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/dividedcylinder_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/draft.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/eclipse1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/eclipse2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/edge1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/edge2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/edge3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/exportxao_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extruded_boss.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extruded_boss_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extruded_boss_example.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extruded_cut.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extruded_cut_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extruded_cut_example.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extrusion3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/extrusion4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/face1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/face2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/faces.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/feature_detect.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/feature_detection_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/feature_detection_dlg2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/feature_detection_dlg3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/fillet1d_1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/fillet1d_2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/front1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/front2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/fuse.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/fuse_collinear_edges.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/fused_wire.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/geom_sort.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/geomimport_reopen.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/get_in_place_lost_part.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue5.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue7.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue8.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/glue_faces3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/groups_cut_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/groups_intersect_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/groups_union_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/iges_unit.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image109.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image110.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image112.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image113.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image145.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image15.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image154.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image156.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image16.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image160.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image167.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image168.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image180.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image181.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image185.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image193.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image204.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image206.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image21.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image22.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image30.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image34.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image36.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image38.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image40.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/image47.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/import_picture.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/interact_with_dimensions.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/isoline1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/isoline2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/isos.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/limit_tolerance_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/line_icon.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/manage_dimensions.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/material.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/material_OCC.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/material_VTK.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/measures11.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/measures2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/measures2a.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/measures8a.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/neo-deflection.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/ob_popup_menu.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/partition.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/partition1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/partition2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/partitionsn3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/picture_import_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipe3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipe3_init.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipe3_res.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipe_path.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipe_path_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipebinormalsn.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape5.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshapechamfer.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshapefillet.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pipetshapethr.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/plane4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/plane5.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/point3_2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/point3_3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/point5_2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pref15.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/pref_dep_tree.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/prism_with_thickness.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/projection_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/projection_preview.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/rectangle_icon.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/reduce_study_dialog.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/remove_extra_edges.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/remove_extra_edges1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/remove_extra_edges2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/remove_webs.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/repair10a.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/repair9a.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/restore-ss-OB-cut.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/restore-ss-OB.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/restore-ss-cut.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/restore-ss-dialog.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/restore-ss-viewer-after.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/restore-ss-viewer-before.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/restore-ss-viewer-cut.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/salome-geom-structuralelements.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/sat_named_shapes.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/scale_transformsn3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/scale_transformsn4.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/shared_shapes.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/show_predef_material.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/sketch.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/sketch_example.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/sketcher_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/sketcher_dlg2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/smoothingsurface.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/smoothingsurface_dlg.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/transformation10a.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/transformation12.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/transformation13.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/transformation14.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/transformation4a.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/translation3.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_bidir_link.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_button_update.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_cycldep_link.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_default_node.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_disp_ascendants.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_disp_descendants.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_example.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_hierarchy_type.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_highlighted_node.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_main_node.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_move_nodes.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_popup_menu1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_popup_menu2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_selected_node.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_selfdep_link.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_tool_bar.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_unidir_link.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_unpublished_node.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_view_dump.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_view_fitall.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_view_fitarea.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_view_glpan.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_view_pan.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/tree_view_zoom.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/union_faces.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/union_faces1.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/union_faces2.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/using_notebook_geom.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/vectors_mode.png mode change 100644 => 100755 doc/salome/gui/GEOM/images/wire_before_fuse.png mode change 100644 => 100755 doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/angle.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/api_documentation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/archimede.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/arranging_study_objects_page.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/basic_prop.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/blocks_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/boudaries.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/bounding_box.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/bring_to_front.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/building_by_blocks.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/center_mass.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/chamfer_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/change_orientation_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/check_compound_of_blocks.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/check_self_intersections.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/check_shape.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/close_contour_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/color.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/common_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_arc.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_basic_go.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_box.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_circle.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_complex_obj.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_compound.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_cone.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_curve.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_cylinder.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_dividedcylinder.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_divideddisk.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_edge.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_ellipse.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_explode.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_extrusion.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_extrusion_alongpath.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_face.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_filling.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_geom_objects.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_hexaedral_solid.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_isoline.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_lcs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_line.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_pipe_path.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_pipetshape.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_plane.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_point.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_primitives.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_quadrangle_face.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_revolution.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_shell.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_sketcher.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_smoothingsurface.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_solid.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_sphere.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_topological_obj.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_torus.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_vector.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/creating_wire.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/cut_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/deflection.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/dependency_tree.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/display_mode.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/explode_on_blocks_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/extruded_boss_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/extruded_cut_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/faq.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/features.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/fillet1d_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/fillet_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/free_faces.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/fuse_edges_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/fuse_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/geometrical_object_properties.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/geometry_preferences.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/geompy.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/geompy_migration.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/get_non_blocks.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/glue_edges_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/glue_faces_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/import_export.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/importing_picture.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/index.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/inertia.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/isolines.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/limit_tolerance_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/line_width.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/managing_dimensions.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/manipulate_object.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/material.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/min_distance.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/mirror_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/modify_location_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/multi_rotation_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/multi_transformation_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/multi_translation_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/normal.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/offset_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/partition_explanation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/pictures.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/point_coordinates.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/point_marker.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/projection_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/propagate_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/python_interface.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/pythonutils.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/reduce_study.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/related_docs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/remove_extra_edges_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/remove_webs_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/repairing_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/restore_presentation_parameters.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/rotation_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/scale_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/section_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/sewing_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/shape_processing_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/shape_recognition.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/struct_elem_visualisation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/suppress_faces_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/suppress_holes_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/suppress_internal_wires_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tolerance.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/transformation_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/transforming_geom_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/translation_operation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/transparency.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_angle.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_arranging_study_objects.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_auto_completion_documentation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_basic_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_basic_properties.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_blocks_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_boolean_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_bounding_box.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_building_by_blocks.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_center_of_mass.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_check_compound_of_blocks.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_check_self_intersections.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_check_shape.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_complex_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_creating_geom_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_execution_distribution.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_free_boundaries.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_free_faces.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_get_non_blocks.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_import_export.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_inertia.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_measurement_tools.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_min_distance.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_normal_face.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_notebook_geom.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_point_coordinates.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_primitives.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_repairing_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_sketcher.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_swig_examples.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_test_all.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_test_measures.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_test_others.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_test_spanner.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_tolerance.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_topological_geom_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_transformation.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_transformation_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_whatis.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/tui_working_with_groups.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/using_boolean_operations.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/using_measurement_tools.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/using_notebook_geom_page.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/viewing_geom_obj.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/whatis.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/working_with_groups.doc mode change 100644 => 100755 doc/salome/gui/GEOM/input/xao_format.doc mode change 100644 => 100755 doc/salome/gui/GEOM/static/header_py.html.in mode change 100644 => 100755 doc/salome/gui/GEOM/static/salome_extra.css mode change 100644 => 100755 doc/salome/tui/images/geomscreen.png mode change 100644 => 100755 doc/salome/tui/input/index.doc mode change 100644 => 100755 doc/salome/tui/static/salome_extra.css mode change 100644 => 100755 idl/GEOM_Gen.idl mode change 100644 => 100755 idl/GEOM_Superv.idl mode change 100644 => 100755 resources/GEOM.config mode change 100644 => 100755 resources/GEOMActions.xml mode change 100644 => 100755 resources/GEOMCatalog.xml.in mode change 100644 => 100755 resources/GEOMDS_Resources mode change 100644 => 100755 resources/GEOM_en.xml mode change 100644 => 100755 resources/GEOM_fr.xml mode change 100644 => 100755 resources/ImportExport mode change 100644 => 100755 resources/ModuleGeom.png mode change 100644 => 100755 resources/Plugin.in mode change 100644 => 100755 resources/SalomeApp.xml.in mode change 100644 => 100755 resources/ShHealing mode change 100644 => 100755 resources/angle.png mode change 100644 => 100755 resources/arc.png mode change 100644 => 100755 resources/arccenter.png mode change 100644 => 100755 resources/archimede.png mode change 100644 => 100755 resources/axisinertia.png mode change 100644 => 100755 resources/basicproperties.png mode change 100644 => 100755 resources/bezier.png mode change 100644 => 100755 resources/block_2f.png mode change 100644 => 100755 resources/block_6f.png mode change 100644 => 100755 resources/block_face_2e.png mode change 100644 => 100755 resources/block_face_4e.png mode change 100644 => 100755 resources/block_face_4v.png mode change 100644 => 100755 resources/block_multitrsf_double.png mode change 100644 => 100755 resources/block_multitrsf_simple.png mode change 100644 => 100755 resources/bounding.png mode change 100644 => 100755 resources/box.png mode change 100644 => 100755 resources/box2points.png mode change 100644 => 100755 resources/boxdxyz.png mode change 100644 => 100755 resources/build_compound.png mode change 100644 => 100755 resources/build_edge.png mode change 100644 => 100755 resources/build_edge_curve.png mode change 100644 => 100755 resources/build_edge_wire.png mode change 100644 => 100755 resources/build_face.png mode change 100644 => 100755 resources/build_shell.png mode change 100644 => 100755 resources/build_solid.png mode change 100644 => 100755 resources/build_wire.png mode change 100644 => 100755 resources/centergravity.png mode change 100644 => 100755 resources/chamfer.png mode change 100644 => 100755 resources/chamferall.png mode change 100644 => 100755 resources/chamferedge.png mode change 100644 => 100755 resources/chamferface.png mode change 100644 => 100755 resources/change_direction.png mode change 100644 => 100755 resources/check.png mode change 100644 => 100755 resources/check_blocks_compound.png mode change 100644 => 100755 resources/check_self_intersections.png mode change 100644 => 100755 resources/circle.png mode change 100644 => 100755 resources/circle3points.png mode change 100644 => 100755 resources/circlepointvector.png mode change 100644 => 100755 resources/closecontour.png mode change 100644 => 100755 resources/common.png mode change 100644 => 100755 resources/cone.png mode change 100644 => 100755 resources/conepointvector.png mode change 100644 => 100755 resources/cut.png mode change 100644 => 100755 resources/cylinder.png mode change 100644 => 100755 resources/cylinderpointvector.png mode change 100644 => 100755 resources/delete.png mode change 100644 => 100755 resources/disk.png mode change 100644 => 100755 resources/disk3points.png mode change 100644 => 100755 resources/disk_pntvecr.png mode change 100644 => 100755 resources/disk_r.png mode change 100644 => 100755 resources/display.png mode change 100644 => 100755 resources/displayall.png mode change 100644 => 100755 resources/displayonly.png mode change 100644 => 100755 resources/divided_disk.png mode change 100644 => 100755 resources/dividedcylinder.png mode change 100644 => 100755 resources/dividedcylinder_r_h.png mode change 100644 => 100755 resources/dlg_pipetshape.png mode change 100644 => 100755 resources/dlg_pipetshapechamfer.png mode change 100644 => 100755 resources/dlg_pipetshapechamferh.png mode change 100644 => 100755 resources/dlg_pipetshapechamferl1.png mode change 100644 => 100755 resources/dlg_pipetshapechamferl2.png mode change 100644 => 100755 resources/dlg_pipetshapechamferr1.png mode change 100644 => 100755 resources/dlg_pipetshapechamferr2.png mode change 100644 => 100755 resources/dlg_pipetshapechamferw.png mode change 100644 => 100755 resources/dlg_pipetshapechamferw1.png mode change 100644 => 100755 resources/dlg_pipetshapechamferw2.png mode change 100644 => 100755 resources/dlg_pipetshapefillet.png mode change 100644 => 100755 resources/dlg_pipetshapefilletl1.png mode change 100644 => 100755 resources/dlg_pipetshapefilletl2.png mode change 100644 => 100755 resources/dlg_pipetshapefilletr1.png mode change 100644 => 100755 resources/dlg_pipetshapefilletr2.png mode change 100644 => 100755 resources/dlg_pipetshapefilletrf.png mode change 100644 => 100755 resources/dlg_pipetshapefilletw1.png mode change 100644 => 100755 resources/dlg_pipetshapefilletw2.png mode change 100644 => 100755 resources/dlg_pipetshapel1.png mode change 100644 => 100755 resources/dlg_pipetshapel2.png mode change 100644 => 100755 resources/dlg_pipetshaper1.png mode change 100644 => 100755 resources/dlg_pipetshaper2.png mode change 100644 => 100755 resources/dlg_pipetshapew1.png mode change 100644 => 100755 resources/dlg_pipetshapew2.png mode change 100644 => 100755 resources/draft.png mode change 100644 => 100755 resources/edit_points.png mode change 100644 => 100755 resources/erase.png mode change 100644 => 100755 resources/eraseall.png mode change 100644 => 100755 resources/exportxao.png mode change 100644 => 100755 resources/extruded_boss.png mode change 100644 => 100755 resources/extruded_cut.png mode change 100644 => 100755 resources/face_hw.png mode change 100644 => 100755 resources/face_vechw.png mode change 100644 => 100755 resources/feature_detect.png mode change 100644 => 100755 resources/field_edit.png mode change 100644 => 100755 resources/field_new.png mode change 100644 => 100755 resources/fillet.png mode change 100644 => 100755 resources/fillet1d.png mode change 100644 => 100755 resources/filletall.png mode change 100644 => 100755 resources/filletedge.png mode change 100644 => 100755 resources/filletface.png mode change 100644 => 100755 resources/filletwire.png mode change 100644 => 100755 resources/filling.png mode change 100644 => 100755 resources/folder.png mode change 100644 => 100755 resources/free_faces.png mode change 100644 => 100755 resources/fuse.png mode change 100644 => 100755 resources/fuse_collinear_edges.png mode change 100644 => 100755 resources/geometry.png mode change 100644 => 100755 resources/get_non_blocks.png mode change 100644 => 100755 resources/glue.png mode change 100644 => 100755 resources/glue2.png mode change 100644 => 100755 resources/group_edit.png mode change 100644 => 100755 resources/group_new.png mode change 100644 => 100755 resources/import_picture.png mode change 100644 => 100755 resources/importxao.png mode change 100644 => 100755 resources/interpol.png mode change 100644 => 100755 resources/isoline.png mode change 100644 => 100755 resources/isoline_v.png mode change 100644 => 100755 resources/limit_tolerance.png mode change 100644 => 100755 resources/line.png mode change 100644 => 100755 resources/line2points.png mode change 100644 => 100755 resources/managedimensions.png mode change 100644 => 100755 resources/marker.png mode change 100644 => 100755 resources/marker2.png mode change 100644 => 100755 resources/marker3.png mode change 100644 => 100755 resources/mindist.png mode change 100644 => 100755 resources/mirrorAxe.png mode change 100644 => 100755 resources/mirrorPlane.png mode change 100644 => 100755 resources/mirrorPoint.png mode change 100644 => 100755 resources/multirotation.png mode change 100644 => 100755 resources/multirotationdouble.png mode change 100644 => 100755 resources/multirotationsimple.png mode change 100644 => 100755 resources/multitranslation.png mode change 100644 => 100755 resources/multitranslationdouble.png mode change 100644 => 100755 resources/multitranslationsimple.png mode change 100644 => 100755 resources/normale.png mode change 100644 => 100755 resources/offset.png mode change 100644 => 100755 resources/partition.png mode change 100644 => 100755 resources/partitionkeep.png mode change 100644 => 100755 resources/partitionplane.png mode change 100644 => 100755 resources/pipebinormal.png mode change 100644 => 100755 resources/pipesections.png mode change 100644 => 100755 resources/pipetshape.png mode change 100644 => 100755 resources/pipetshape_import_icon.png mode change 100644 => 100755 resources/pipetshape_section.png mode change 100644 => 100755 resources/plane.png mode change 100644 => 100755 resources/plane3points.png mode change 100644 => 100755 resources/planeWorking.png mode change 100644 => 100755 resources/planeface.png mode change 100644 => 100755 resources/planepointvector.png mode change 100644 => 100755 resources/planeworkingface.png mode change 100644 => 100755 resources/planeworkingorigin.png mode change 100644 => 100755 resources/planeworkingvector.png mode change 100644 => 100755 resources/point2.png mode change 100644 => 100755 resources/point3.png mode change 100644 => 100755 resources/point_coord.png mode change 100644 => 100755 resources/polyline.png mode change 100644 => 100755 resources/position.png mode change 100644 => 100755 resources/position2.png mode change 100644 => 100755 resources/position3.png mode change 100644 => 100755 resources/prism.png mode change 100644 => 100755 resources/prism2.png mode change 100644 => 100755 resources/prism3.png mode change 100644 => 100755 resources/projection.png mode change 100644 => 100755 resources/propagate.png mode change 100644 => 100755 resources/rectangle.png mode change 100644 => 100755 resources/redo.png mode change 100644 => 100755 resources/remove_extra_edges.png mode change 100644 => 100755 resources/remove_webs.png mode change 100644 => 100755 resources/revol.png mode change 100644 => 100755 resources/rotate.png mode change 100644 => 100755 resources/scale.png mode change 100644 => 100755 resources/scale_along_axes.png mode change 100644 => 100755 resources/section.png mode change 100644 => 100755 resources/select1.png mode change 100644 => 100755 resources/sewing.png mode change 100644 => 100755 resources/shading_with_edges.png mode change 100644 => 100755 resources/shapeprocess.png mode change 100644 => 100755 resources/shared_shapes.png mode change 100644 => 100755 resources/sketch.png mode change 100644 => 100755 resources/smoothingsurface.png mode change 100644 => 100755 resources/smoothingsurface_lpoints.png mode change 100644 => 100755 resources/sphere.png mode change 100644 => 100755 resources/spheredxyz.png mode change 100644 => 100755 resources/spherepoint.png mode change 100644 => 100755 resources/spline.png mode change 100644 => 100755 resources/suppressintwires.png mode change 100644 => 100755 resources/supressface.png mode change 100644 => 100755 resources/tolerance.png mode change 100644 => 100755 resources/torus.png mode change 100644 => 100755 resources/toruspointvector.png mode change 100644 => 100755 resources/translation.png mode change 100644 => 100755 resources/translationDxyz.png mode change 100644 => 100755 resources/translationPoints.png mode change 100644 => 100755 resources/translationVector.png mode change 100644 => 100755 resources/tree_block.png mode change 100644 => 100755 resources/tree_compound.png mode change 100644 => 100755 resources/tree_compsolid.png mode change 100644 => 100755 resources/tree_edge.png mode change 100644 => 100755 resources/tree_face.png mode change 100644 => 100755 resources/tree_field_edge.png mode change 100644 => 100755 resources/tree_field_face.png mode change 100644 => 100755 resources/tree_field_solid.png mode change 100644 => 100755 resources/tree_field_vertex.png mode change 100644 => 100755 resources/tree_group_edge.png mode change 100644 => 100755 resources/tree_group_face.png mode change 100644 => 100755 resources/tree_group_solid.png mode change 100644 => 100755 resources/tree_group_vertex.png mode change 100644 => 100755 resources/tree_lcs.png mode change 100644 => 100755 resources/tree_pipetshape.png mode change 100644 => 100755 resources/tree_shape.png mode change 100644 => 100755 resources/tree_shell.png mode change 100644 => 100755 resources/tree_smoothingsurface.png mode change 100644 => 100755 resources/tree_solid.png mode change 100644 => 100755 resources/tree_vertex.png mode change 100644 => 100755 resources/tree_wire.png mode change 100644 => 100755 resources/undo.png mode change 100644 => 100755 resources/union_faces.png mode change 100644 => 100755 resources/vector.png mode change 100644 => 100755 resources/vector2points.png mode change 100644 => 100755 resources/vector_mode.png mode change 100644 => 100755 resources/vectordxyz.png mode change 100644 => 100755 resources/whatis.png mode change 100644 => 100755 resources/wireframe.png mode change 100644 => 100755 src/ARCHIMEDE/Archimede_VolumeSection.cxx mode change 100644 => 100755 src/ARCHIMEDE/Archimede_VolumeSection.hxx mode change 100644 => 100755 src/AdvancedEngine/AdvancedEngine.cxx mode change 100644 => 100755 src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc mode change 100644 => 100755 src/AdvancedEngine/AdvancedEngine_Types.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx mode change 100644 => 100755 src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx mode change 100644 => 100755 src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc mode change 100644 => 100755 src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI.cxx mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI.h mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_images.ts mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_msg_en.ts mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_msg_fr.ts mode change 100644 => 100755 src/AdvancedGUI/AdvancedGUI_msg_ja.ts mode change 100644 => 100755 src/BREPExport/BREPExport.cxx mode change 100644 => 100755 src/BREPImport/BREPImport.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_ArcDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_ArcDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_CircleDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_CircleDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_CurveDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_CurveDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_EllipseDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_EllipseDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_LineDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_LineDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_MarkerDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_MarkerDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_ParamCurveWidget.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_ParamCurveWidget.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_PlaneDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_PlaneDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_PointDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_PointDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_VectorDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_VectorDlg.h mode change 100644 => 100755 src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx mode change 100644 => 100755 src/BasicGUI/BasicGUI_WorkingPlaneDlg.h mode change 100644 => 100755 src/BlockFix/BlockFix.cxx mode change 100644 => 100755 src/BlockFix/BlockFix.hxx mode change 100644 => 100755 src/BlockFix/BlockFix_BlockFixAPI.cxx mode change 100644 => 100755 src/BlockFix/BlockFix_BlockFixAPI.hxx mode change 100644 => 100755 src/BlockFix/BlockFix_CheckTool.cxx mode change 100644 => 100755 src/BlockFix/BlockFix_CheckTool.hxx mode change 100644 => 100755 src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx mode change 100644 => 100755 src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx mode change 100644 => 100755 src/BlockFix/BlockFix_SphereSpaceModifier.cxx mode change 100644 => 100755 src/BlockFix/BlockFix_SphereSpaceModifier.hxx mode change 100644 => 100755 src/BlockFix/BlockFix_UnionEdges.cxx mode change 100644 => 100755 src/BlockFix/BlockFix_UnionEdges.hxx mode change 100644 => 100755 src/BlockFix/BlockFix_UnionFaces.cxx mode change 100644 => 100755 src/BlockFix/BlockFix_UnionFaces.hxx mode change 100644 => 100755 src/BlocksGUI/BlocksGUI.cxx mode change 100644 => 100755 src/BlocksGUI/BlocksGUI.h mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_BlockDlg.cxx mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_BlockDlg.h mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_ExplodeDlg.h mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_PropagateDlg.cxx mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_PropagateDlg.h mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_QuadFaceDlg.h mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_TrsfDlg.cxx mode change 100644 => 100755 src/BlocksGUI/BlocksGUI_TrsfDlg.h mode change 100644 => 100755 src/BooleanGUI/BooleanGUI.cxx mode change 100644 => 100755 src/BooleanGUI/BooleanGUI.h mode change 100644 => 100755 src/BooleanGUI/BooleanGUI_Dialog.cxx mode change 100644 => 100755 src/BooleanGUI/BooleanGUI_Dialog.h mode change 100644 => 100755 src/BuildGUI/BuildGUI.cxx mode change 100644 => 100755 src/BuildGUI/BuildGUI.h mode change 100644 => 100755 src/BuildGUI/BuildGUI_CompoundDlg.cxx mode change 100644 => 100755 src/BuildGUI/BuildGUI_CompoundDlg.h mode change 100644 => 100755 src/BuildGUI/BuildGUI_EdgeDlg.cxx mode change 100644 => 100755 src/BuildGUI/BuildGUI_EdgeDlg.h mode change 100644 => 100755 src/BuildGUI/BuildGUI_FaceDlg.cxx mode change 100644 => 100755 src/BuildGUI/BuildGUI_FaceDlg.h mode change 100644 => 100755 src/BuildGUI/BuildGUI_ShellDlg.cxx mode change 100644 => 100755 src/BuildGUI/BuildGUI_ShellDlg.h mode change 100644 => 100755 src/BuildGUI/BuildGUI_SolidDlg.cxx mode change 100644 => 100755 src/BuildGUI/BuildGUI_SolidDlg.h mode change 100644 => 100755 src/BuildGUI/BuildGUI_WireDlg.cxx mode change 100644 => 100755 src/BuildGUI/BuildGUI_WireDlg.h mode change 100644 => 100755 src/CurveCreator/CMakeLists.txt mode change 100644 => 100755 src/CurveCreator/CurveCreator.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Curve.cxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Curve.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_CurveEditor.cxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_CurveEditor.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Diff.cxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Diff.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_ICurve.cxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_ICurve.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Macro.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Operation.cxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Operation.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Section.hxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_UndoOptsDlg.cxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_UndoOptsDlg.h mode change 100644 => 100755 src/CurveCreator/CurveCreator_Widget.cxx mode change 100644 => 100755 src/CurveCreator/CurveCreator_Widget.h mode change 100644 => 100755 src/DependencyTree/CMakeLists.txt mode change 100644 => 100755 src/DependencyTree/DependencyTree.h mode change 100644 => 100755 src/DependencyTree/DependencyTree_Arrow.cxx mode change 100644 => 100755 src/DependencyTree/DependencyTree_Arrow.h mode change 100644 => 100755 src/DependencyTree/DependencyTree_Object.cxx mode change 100644 => 100755 src/DependencyTree/DependencyTree_Object.h mode change 100644 => 100755 src/DependencyTree/DependencyTree_Selector.cxx mode change 100644 => 100755 src/DependencyTree/DependencyTree_Selector.h mode change 100644 => 100755 src/DependencyTree/DependencyTree_View.cxx mode change 100644 => 100755 src/DependencyTree/DependencyTree_View.h mode change 100644 => 100755 src/DependencyTree/DependencyTree_ViewModel.cxx mode change 100644 => 100755 src/DependencyTree/DependencyTree_ViewModel.h mode change 100644 => 100755 src/DependencyTree/resources/DependencyTree_msg_en.ts mode change 100644 => 100755 src/DependencyTree/resources/DependencyTree_msg_fr.ts mode change 100644 => 100755 src/DependencyTree/resources/DependencyTree_msg_ja.ts mode change 100644 => 100755 src/DependencyTree/resources/tree_view_dump.png mode change 100644 => 100755 src/DependencyTree/resources/tree_view_fitall.png mode change 100644 => 100755 src/DependencyTree/resources/tree_view_fitarea.png mode change 100644 => 100755 src/DependencyTree/resources/tree_view_glpan.png mode change 100644 => 100755 src/DependencyTree/resources/tree_view_pan.png mode change 100644 => 100755 src/DependencyTree/resources/tree_view_reset.png mode change 100644 => 100755 src/DependencyTree/resources/tree_view_zoom.png mode change 100644 => 100755 src/DisplayGUI/DisplayGUI.cxx mode change 100644 => 100755 src/DisplayGUI/DisplayGUI.h mode change 100644 => 100755 src/DlgRef/DlgRef.cxx mode change 100644 => 100755 src/DlgRef/DlgRef.h mode change 100644 => 100755 src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel1Frame_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel1Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel2Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel3Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel3Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1SelExt_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Sel_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_1Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel1List_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel1Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel2List_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel2Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel3Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2SelExt_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Sel_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_2Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Radio_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel1Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel2Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Sel_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Spin1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_3Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_4Sel1List_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_4Spin_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_6Sel_QTD.ui mode change 100644 => 100755 src/DlgRef/DlgRef_Skeleton_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI.cxx mode change 100644 => 100755 src/EntityGUI/EntityGUI.h mode change 100644 => 100755 src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_1Sel_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_1Spin_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_2Spin_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_3Spin_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_4Spin_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_Angles_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_Controls_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_Dir1_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_Dir2_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx mode change 100644 => 100755 src/EntityGUI/EntityGUI_FeatureDetectorDlg.h mode change 100644 => 100755 src/EntityGUI/EntityGUI_FieldDlg.cxx mode change 100644 => 100755 src/EntityGUI/EntityGUI_FieldDlg.h mode change 100644 => 100755 src/EntityGUI/EntityGUI_PictureImportDlg.cxx mode change 100644 => 100755 src/EntityGUI/EntityGUI_PictureImportDlg.h mode change 100644 => 100755 src/EntityGUI/EntityGUI_Point_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_Skeleton_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_SketcherDlg.cxx mode change 100644 => 100755 src/EntityGUI/EntityGUI_SketcherDlg.h mode change 100644 => 100755 src/EntityGUI/EntityGUI_SubShapeDlg.cxx mode change 100644 => 100755 src/EntityGUI/EntityGUI_SubShapeDlg.h mode change 100644 => 100755 src/EntityGUI/EntityGUI_Type_QTD.ui mode change 100644 => 100755 src/EntityGUI/EntityGUI_Widgets.cxx mode change 100644 => 100755 src/EntityGUI/EntityGUI_Widgets.h mode change 100644 => 100755 src/GEOM/GEOM_Application.cxx mode change 100644 => 100755 src/GEOM/GEOM_Application.hxx mode change 100644 => 100755 src/GEOM/GEOM_Application.ixx mode change 100644 => 100755 src/GEOM/GEOM_Application.jxx mode change 100644 => 100755 src/GEOM/GEOM_BaseDriver.cxx mode change 100644 => 100755 src/GEOM/GEOM_BaseDriver.hxx mode change 100644 => 100755 src/GEOM/GEOM_BaseObject.cxx mode change 100644 => 100755 src/GEOM/GEOM_BaseObject.hxx mode change 100644 => 100755 src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx mode change 100644 => 100755 src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx mode change 100644 => 100755 src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx mode change 100644 => 100755 src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx mode change 100644 => 100755 src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx mode change 100644 => 100755 src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx mode change 100644 => 100755 src/GEOM/GEOM_Engine.cxx mode change 100644 => 100755 src/GEOM/GEOM_Engine.hxx mode change 100644 => 100755 src/GEOM/GEOM_Field.cxx mode change 100644 => 100755 src/GEOM/GEOM_Field.hxx mode change 100644 => 100755 src/GEOM/GEOM_Function.cxx mode change 100644 => 100755 src/GEOM/GEOM_Function.hxx mode change 100644 => 100755 src/GEOM/GEOM_IField.hxx mode change 100644 => 100755 src/GEOM/GEOM_IOperations.cxx mode change 100644 => 100755 src/GEOM/GEOM_IOperations.hxx mode change 100644 => 100755 src/GEOM/GEOM_ISubShape.hxx mode change 100644 => 100755 src/GEOM/GEOM_Object.cxx mode change 100644 => 100755 src/GEOM/GEOM_Object.hxx mode change 100644 => 100755 src/GEOM/GEOM_PythonDump.cxx mode change 100644 => 100755 src/GEOM/GEOM_PythonDump.hxx mode change 100644 => 100755 src/GEOM/GEOM_Solver.cxx mode change 100644 => 100755 src/GEOM/GEOM_Solver.hxx mode change 100644 => 100755 src/GEOM/GEOM_SubShapeDriver.cxx mode change 100644 => 100755 src/GEOM/GEOM_SubShapeDriver.hxx mode change 100644 => 100755 src/GEOM/Handle_GEOM_Application.hxx mode change 100644 => 100755 src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx mode change 100644 => 100755 src/GEOMAlgo/FILES mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Algo.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Clsf.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Clsf.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Gluer.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Gluer2.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Gluer2.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_HAlgo.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_HAlgo.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfIntegerShape.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeState.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_KindOfName.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_PassKey.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_Splitter.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_State.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_StateCollector.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_StateCollector.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_WireSolid.cxx mode change 100644 => 100755 src/GEOMAlgo/GEOMAlgo_WireSolid.hxx mode change 100644 => 100755 src/GEOMBase/GEOMBase.cxx mode change 100644 => 100755 src/GEOMBase/GEOMBase.h mode change 100644 => 100755 src/GEOMBase/GEOMBase_Skeleton.cxx mode change 100644 => 100755 src/GEOMBase/GEOMBase_Skeleton.h mode change 100644 => 100755 src/GEOMBase/GEOM_GenericObjPtr.cxx mode change 100644 => 100755 src/GEOMBase/GEOM_GenericObjPtr.h mode change 100644 => 100755 src/GEOMBase/GEOM_Operation.cxx mode change 100644 => 100755 src/GEOMBase/GEOM_Operation.h mode change 100644 => 100755 src/GEOMClient/GEOM_Client.cxx mode change 100644 => 100755 src/GEOMClient/GEOM_Client.hxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_CompoundFilter.h mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_EdgeFilter.h mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_FaceFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_FaceFilter.h mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_LogicalFilter.h mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_OCCFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_OCCFilter.h mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_PreviewFilter.h mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_SelectionFilter.h mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_TypeFilter.cxx mode change 100644 => 100755 src/GEOMFiltersSelection/GEOM_TypeFilter.h mode change 100644 => 100755 src/GEOMGUI/GEOMGUI.cxx mode change 100644 => 100755 src/GEOMGUI/GEOMGUI.h mode change 100644 => 100755 src/GEOMGUI/GEOMGUI.qrc mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_CreationInfoWdg.h mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_DimensionProperty.cxx mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_DimensionProperty.h mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_OCCSelector.cxx mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_OCCSelector.h mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_Selection.cxx mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_Selection.h mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_XmlHandler.cxx mode change 100644 => 100755 src/GEOMGUI/GEOMGUI_XmlHandler.h mode change 100644 => 100755 src/GEOMGUI/GEOMPluginGUI.cxx mode change 100644 => 100755 src/GEOMGUI/GEOMPluginGUI.h mode change 100644 => 100755 src/GEOMGUI/GEOM_Displayer.cxx mode change 100644 => 100755 src/GEOMGUI/GEOM_Displayer.h mode change 100644 => 100755 src/GEOMGUI/GEOM_images.ts mode change 100644 => 100755 src/GEOMGUI/GEOM_msg_en.ts mode change 100644 => 100755 src/GEOMGUI/GEOM_msg_fr.ts mode change 100644 => 100755 src/GEOMGUI/GEOM_msg_ja.ts mode change 100644 => 100755 src/GEOMGUI/GeometryGUI.cxx mode change 100644 => 100755 src/GEOMGUI/GeometryGUI.h mode change 100644 => 100755 src/GEOMGUI/GeometryGUI_Operations.h mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ArcDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ArcDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Block6Explorer.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Block6Explorer.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_BlockDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_BlockDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_BooleanDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_BooleanDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_BoxDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_BoxDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ChamferDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ChamferDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_CircleDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_CircleDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ConeDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ConeDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_CopyDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_CopyDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_CylinderDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_CylinderDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_EllipseDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_EllipseDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ExportDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ExportDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_FieldDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_FieldDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Fillet1d.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Fillet1d.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_FilletDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_FilletDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_FillingDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_FillingDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Gen.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_Gen.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_GlueDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_GlueDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_HealingDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_HealingDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IArc.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IArchimede.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBasicOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBasicOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBlocks.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBoolean.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IBox.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IChamfer.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ICircle.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ICone.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ICopy.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ICurveParametric.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ICylinder.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IEllipse.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IFieldOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IFieldOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IFillet.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IFillet1d.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IFilling.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IGlue.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IGroupOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IGroupOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IHealingOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IHealingOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IImportExport.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IInsertOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ILine.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ILocalOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ILocalOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IMarker.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IMeasure.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IMirror.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IOffset.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPartition.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPipe.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPipePath.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPlane.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPolyline.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPosition.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IPrism.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IRevolution.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IRotate.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IScale.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IShapes.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IShapesOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IShapesOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ISketcher.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ISphere.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ISpline.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IThruSections.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ITorus.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ITransformOperations.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ITransformOperations.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_IVector.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ImportDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ImportDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_LineDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_LineDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_MarkerDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_MarkerDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_MeasureDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_MeasureDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_MirrorDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_MirrorDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_OffsetDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_OffsetDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PartitionDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PartitionDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PipeDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PipeDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PipePathDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PipePathDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PlaneDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PlaneDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PointDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PointDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PolylineDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PolylineDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PositionDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PositionDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PrismDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_PrismDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_RotateDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_RotateDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ScaleDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ScaleDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ShapeDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ShapeDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_SketcherDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_SketcherDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_SphereDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_SphereDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_SplineDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_SplineDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_TorusDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_TorusDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_TranslateDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_TranslateDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_VectorDriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_VectorDriver.hxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_XAODriver.cxx mode change 100644 => 100755 src/GEOMImpl/GEOMImpl_XAODriver.hxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_1.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx mode change 100644 => 100755 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h mode change 100644 => 100755 src/GEOMUtils/GEOMUtils.cxx mode change 100644 => 100755 src/GEOMUtils/GEOMUtils.hxx mode change 100644 => 100755 src/GEOM_I/GEOM_BaseObject_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_BaseObject_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_DumpPython.cc mode change 100644 => 100755 src/GEOM_I/GEOM_Field_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_Field_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_Gen_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_I3DPrimOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_I3DPrimOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IBasicOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IBasicOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IBlocksOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IBooleanOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IBooleanOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_ICurvesOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_ICurvesOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IFieldOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IFieldOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IGroupOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IGroupOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IHealingOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IHealingOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IInsertOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IInsertOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_ILocalOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_ILocalOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IMeasureOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IMeasureOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_IShapesOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_IShapesOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_ITransformOperations_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_ITransformOperations_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_Object_i.cc mode change 100644 => 100755 src/GEOM_I/GEOM_Object_i.hh mode change 100644 => 100755 src/GEOM_I/GEOM_wrap.hxx mode change 100644 => 100755 src/GEOM_I_Superv/GEOM_List_i.hh mode change 100644 => 100755 src/GEOM_I_Superv/GEOM_Superv_i.cc mode change 100644 => 100755 src/GEOM_I_Superv/GEOM_Superv_i.hh mode change 100644 => 100755 src/GEOM_PY/__init__.py mode change 100644 => 100755 src/GEOM_PY/geomtools.py mode change 100644 => 100755 src/GEOM_PY/sketcher.py mode change 100644 => 100755 src/GEOM_PY/structelem/__init__.py mode change 100644 => 100755 src/GEOM_PY/structelem/orientation.py mode change 100644 => 100755 src/GEOM_PY/structelem/parts.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_ObjectInfo.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_Sketcher.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_Spanner.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_TestAll.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_TestField.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_TestHealing.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_TestMeasures.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_TestOthers.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_blocks.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_example.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_example2.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_example3.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_example5.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_example7.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_moteur.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_shared_modules.py mode change 100644 => 100755 src/GEOM_SWIG/GEOM_usinggeom.py mode change 100644 => 100755 src/GEOM_SWIG/__init__.py mode change 100644 => 100755 src/GEOM_SWIG/geomBuilder.py mode change 100644 => 100755 src/GEOM_SWIG/geompy.py mode change 100644 => 100755 src/GEOM_SWIG/gsketcher.py mode change 100644 => 100755 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx mode change 100644 => 100755 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h mode change 100644 => 100755 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i mode change 100644 => 100755 src/GenerationGUI/GenerationGUI.cxx mode change 100644 => 100755 src/GenerationGUI/GenerationGUI.h mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_FillingDlg.cxx mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_FillingDlg.h mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_PipeDlg.cxx mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_PipeDlg.h mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_PipePathDlg.cxx mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_PipePathDlg.h mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_PrismDlg.cxx mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_PrismDlg.h mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_RevolDlg.cxx mode change 100644 => 100755 src/GenerationGUI/GenerationGUI_RevolDlg.h mode change 100644 => 100755 src/GroupGUI/GroupGUI.cxx mode change 100644 => 100755 src/GroupGUI/GroupGUI.h mode change 100644 => 100755 src/GroupGUI/GroupGUI_BooleanDlg.cxx mode change 100644 => 100755 src/GroupGUI/GroupGUI_BooleanDlg.h mode change 100644 => 100755 src/GroupGUI/GroupGUI_GroupDlg.cxx mode change 100644 => 100755 src/GroupGUI/GroupGUI_GroupDlg.h mode change 100644 => 100755 src/IGESExport/IGESExport.cxx mode change 100644 => 100755 src/IGESImport/IGESImport.cxx mode change 100644 => 100755 src/ImportExportGUI/CMakeLists.txt mode change 100644 => 100755 src/ImportExportGUI/ImportExportGUI.cxx mode change 100644 => 100755 src/ImportExportGUI/ImportExportGUI.h mode change 100644 => 100755 src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx mode change 100644 => 100755 src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h mode change 100644 => 100755 src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx mode change 100644 => 100755 src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h mode change 100644 => 100755 src/Material/Material.h mode change 100644 => 100755 src/Material/Material_Model.cxx mode change 100644 => 100755 src/Material/Material_Model.h mode change 100644 => 100755 src/Material/Material_ResourceMgr.cxx mode change 100644 => 100755 src/Material/Material_ResourceMgr.h mode change 100644 => 100755 src/Material/resources/SalomeMaterial.xml mode change 100644 => 100755 src/MeasureGUI/MeasureGUI.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel1TextView1Check_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel1TextView2ListBox_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_1TreeWidget_4Button_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_AngleDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_AngleDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_BndBoxDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CenterMassDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CheckShapeDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DimensionCreateTool.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DimensionFilter.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DimensionFilter.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DimensionInteractor.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DistanceDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_DistanceDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_InertiaDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_InertiaDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_NormaleDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_NormaleDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_PointDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_PointDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_PropertiesDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_Skeleton.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_Skeleton.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_WhatisDlg.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_WhatisDlg.h mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_Widgets.cxx mode change 100644 => 100755 src/MeasureGUI/MeasureGUI_Widgets.h mode change 100644 => 100755 src/OBJECT/GEOM_AISShape.cxx mode change 100644 => 100755 src/OBJECT/GEOM_AISShape.hxx mode change 100644 => 100755 src/OBJECT/GEOM_AISShape.ixx mode change 100644 => 100755 src/OBJECT/GEOM_AISShape.jxx mode change 100644 => 100755 src/OBJECT/GEOM_AISVector.cxx mode change 100644 => 100755 src/OBJECT/GEOM_AISVector.hxx mode change 100644 => 100755 src/OBJECT/GEOM_Actor.cxx mode change 100644 => 100755 src/OBJECT/GEOM_Actor.h mode change 100644 => 100755 src/OBJECT/GEOM_Constants.cxx mode change 100644 => 100755 src/OBJECT/GEOM_Constants.h mode change 100644 => 100755 src/OBJECT/GEOM_InteractiveObject.cxx mode change 100644 => 100755 src/OBJECT/GEOM_InteractiveObject.hxx mode change 100644 => 100755 src/OBJECT/GEOM_InteractiveObject.ixx mode change 100644 => 100755 src/OBJECT/GEOM_InteractiveObject.jxx mode change 100644 => 100755 src/OBJECT/GEOM_OCCReader.cxx mode change 100644 => 100755 src/OBJECT/GEOM_OCCReader.h mode change 100644 => 100755 src/OBJECT/GEOM_PainterPolyDataMapper.cxx mode change 100644 => 100755 src/OBJECT/GEOM_PainterPolyDataMapper.h mode change 100644 => 100755 src/OBJECT/GEOM_VTKTrihedron.cxx mode change 100644 => 100755 src/OBJECT/GEOM_VTKTrihedron.hxx mode change 100644 => 100755 src/OBJECT/Handle_GEOM_AISShape.hxx mode change 100644 => 100755 src/OBJECT/Handle_GEOM_InteractiveObject.hxx mode change 100644 => 100755 src/OperationGUI/OperationGUI.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_ArchimedeDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_ArchimedeDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_ChamferDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_ChamferDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_ClippingDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_ClippingDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_Fillet1d2dDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_FilletDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_FilletDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_GetSharedShapesDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_GetSharedShapesDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_MaterialDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_MaterialDlg.h mode change 100644 => 100755 src/OperationGUI/OperationGUI_PartitionDlg.cxx mode change 100644 => 100755 src/OperationGUI/OperationGUI_PartitionDlg.h mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI.cxx mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI.h mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx mode change 100644 => 100755 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_ChangeOrientationDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_CloseContourDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_CloseContourDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_DivideEdgeDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_FreeBoundDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_FreeBoundDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_FreeFacesDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_FreeFacesDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_FuseEdgesDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_GlueDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_GlueDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_LimitToleranceDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_RemoveHolesDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_SewingDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_SewingDlg.h mode change 100644 => 100755 src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx mode change 100644 => 100755 src/RepairGUI/RepairGUI_SuppressFacesDlg.h mode change 100644 => 100755 src/SKETCHER/Sketcher_Profile.cxx mode change 100644 => 100755 src/SKETCHER/Sketcher_Profile.hxx mode change 100644 => 100755 src/STEPExport/STEPExport.cxx mode change 100644 => 100755 src/STEPImport/STEPImport.cxx mode change 100644 => 100755 src/STLExport/STLExport.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_ChangeOrientation.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_ChangeOrientation.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_CloseContour.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_CloseContour.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_EdgeDivide.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_EdgeDivide.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_FillHoles.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_FillHoles.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_RemoveFace.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_RemoveFace.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_RemoveInternalWires.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_RemoveInternalWires.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_Sewing.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_Sewing.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_ShapeProcess.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_ShapeProcess.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_SpiltCurve2d.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_SplitCurve2d.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_SplitCurve2d.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_SplitCurve3d.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_SplitCurve3d.hxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_Tool.cxx mode change 100644 => 100755 src/ShHealOper/ShHealOper_Tool.hxx mode change 100644 => 100755 src/ShapeRecognition/ShapeRec_FeatureDetector.cxx mode change 100644 => 100755 src/ShapeRecognition/ShapeRec_FeatureDetector.hxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_MirrorDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_MirrorDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_MultiRotationDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_MultiRotationDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_MultiTranslationDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_OffsetDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_OffsetDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_PositionDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_PositionDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_ProjectionDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_RotationDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_RotationDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_ScaleDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_ScaleDlg.h mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_TranslationDlg.cxx mode change 100644 => 100755 src/TransformationGUI/TransformationGUI_TranslationDlg.h mode change 100644 => 100755 src/VTKExport/VTKExport.cxx mode change 100644 => 100755 src/XAO/CMakeLists.txt mode change 100644 => 100755 src/XAO/XAO_BooleanField.cxx mode change 100644 => 100755 src/XAO/XAO_BooleanField.hxx mode change 100644 => 100755 src/XAO/XAO_BooleanStep.cxx mode change 100644 => 100755 src/XAO/XAO_BooleanStep.hxx mode change 100644 => 100755 src/XAO/XAO_BrepGeometry.cxx mode change 100644 => 100755 src/XAO/XAO_BrepGeometry.hxx mode change 100644 => 100755 src/XAO/XAO_DoubleField.cxx mode change 100644 => 100755 src/XAO/XAO_DoubleField.hxx mode change 100644 => 100755 src/XAO/XAO_DoubleStep.cxx mode change 100644 => 100755 src/XAO/XAO_DoubleStep.hxx mode change 100644 => 100755 src/XAO/XAO_Exception.hxx mode change 100644 => 100755 src/XAO/XAO_Field.cxx mode change 100644 => 100755 src/XAO/XAO_Field.hxx mode change 100644 => 100755 src/XAO/XAO_GeometricElement.cxx mode change 100644 => 100755 src/XAO/XAO_GeometricElement.hxx mode change 100644 => 100755 src/XAO/XAO_Geometry.cxx mode change 100644 => 100755 src/XAO/XAO_Geometry.hxx mode change 100644 => 100755 src/XAO/XAO_Group.cxx mode change 100644 => 100755 src/XAO/XAO_Group.hxx mode change 100644 => 100755 src/XAO/XAO_IntegerField.cxx mode change 100644 => 100755 src/XAO/XAO_IntegerField.hxx mode change 100644 => 100755 src/XAO/XAO_IntegerStep.cxx mode change 100644 => 100755 src/XAO/XAO_IntegerStep.hxx mode change 100644 => 100755 src/XAO/XAO_Step.cxx mode change 100644 => 100755 src/XAO/XAO_Step.hxx mode change 100644 => 100755 src/XAO/XAO_StringField.cxx mode change 100644 => 100755 src/XAO/XAO_StringField.hxx mode change 100644 => 100755 src/XAO/XAO_StringStep.cxx mode change 100644 => 100755 src/XAO/XAO_StringStep.hxx mode change 100644 => 100755 src/XAO/XAO_Xao.cxx mode change 100644 => 100755 src/XAO/XAO_Xao.hxx mode change 100644 => 100755 src/XAO/XAO_XaoExporter.cxx mode change 100644 => 100755 src/XAO/XAO_XaoExporter.hxx mode change 100644 => 100755 src/XAO/XAO_XaoUtils.cxx mode change 100644 => 100755 src/XAO/XAO_XaoUtils.hxx mode change 100644 => 100755 src/XAO/tests/BrepGeometryTest.cxx mode change 100644 => 100755 src/XAO/tests/BrepGeometryTest.hxx mode change 100644 => 100755 src/XAO/tests/CMakeLists.txt mode change 100644 => 100755 src/XAO/tests/FieldTest.cxx mode change 100644 => 100755 src/XAO/tests/FieldTest.hxx mode change 100644 => 100755 src/XAO/tests/GeometryTest.cxx mode change 100644 => 100755 src/XAO/tests/GeometryTest.hxx mode change 100644 => 100755 src/XAO/tests/GroupTest.cxx mode change 100644 => 100755 src/XAO/tests/GroupTest.hxx mode change 100644 => 100755 src/XAO/tests/ImportExportTest.cxx mode change 100644 => 100755 src/XAO/tests/ImportExportTest.hxx mode change 100644 => 100755 src/XAO/tests/MainTest.hxx mode change 100644 => 100755 src/XAO/tests/TestUtils.hxx mode change 100644 => 100755 src/XAO/tests/XAOTests.cxx mode change 100644 => 100755 src/XAO/tests/XaoTest.cxx mode change 100644 => 100755 src/XAO/tests/XaoTest.hxx mode change 100644 => 100755 src/XAO/tests/XaoUtilsTest.cxx mode change 100644 => 100755 src/XAO/tests/XaoUtilsTest.hxx mode change 100644 => 100755 src/XAO/tests/data/Box_1.brep mode change 100644 => 100755 src/XAO/tests/data/Box_2.brep mode change 100644 => 100755 src/XAO/tests/data/Cut_2.brep mode change 100644 => 100755 src/XAO/tests/data/test.xao mode change 100644 => 100755 src/XAO_Swig/CMakeLists.txt mode change 100644 => 100755 src/XAO_Swig/xao.i diff --git a/AUTHORS b/AUTHORS old mode 100644 new mode 100755 diff --git a/COPYING b/COPYING old mode 100644 new mode 100755 diff --git a/ChangeLog b/ChangeLog old mode 100644 new mode 100755 diff --git a/GEOM_version.h.in b/GEOM_version.h.in old mode 100644 new mode 100755 diff --git a/INSTALL b/INSTALL old mode 100644 new mode 100755 diff --git a/LICENCE b/LICENCE old mode 100644 new mode 100755 diff --git a/NEWS b/NEWS old mode 100644 new mode 100755 diff --git a/README b/README old mode 100644 new mode 100755 diff --git a/SalomeGEOMConfig.cmake.in b/SalomeGEOMConfig.cmake.in old mode 100644 new mode 100755 diff --git a/adm_local/cmake_files/FindGEOM.cmake b/adm_local/cmake_files/FindGEOM.cmake old mode 100644 new mode 100755 diff --git a/adm_local/cmake_files/FindOpenCV.cmake b/adm_local/cmake_files/FindOpenCV.cmake old mode 100644 new mode 100755 diff --git a/adm_local/cmake_files/FindSalomeGEOM.cmake b/adm_local/cmake_files/FindSalomeGEOM.cmake old mode 100644 new mode 100755 diff --git a/adm_local/cmake_files/FindSalomeOpenCV.cmake b/adm_local/cmake_files/FindSalomeOpenCV.cmake old mode 100644 new mode 100755 diff --git a/adm_local/unix/config_files/check_GEOM.m4 b/adm_local/unix/config_files/check_GEOM.m4 old mode 100644 new mode 100755 diff --git a/adm_local/unix/config_files/check_OpenCV.m4 b/adm_local/unix/config_files/check_OpenCV.m4 old mode 100644 new mode 100755 diff --git a/bin/addvars2notebook_GEOM.py b/bin/addvars2notebook_GEOM.py old mode 100644 new mode 100755 diff --git a/bin/geom_setenv.py b/bin/geom_setenv.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/3dsketcher.py b/doc/salome/examples/3dsketcher.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/CMakeLists.txt b/doc/salome/examples/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/doc/salome/examples/GEOM_box.py b/doc/salome/examples/GEOM_box.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/advanced_geom_objs_ex01.py b/doc/salome/examples/advanced_geom_objs_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/advanced_geom_objs_ex02.py b/doc/salome/examples/advanced_geom_objs_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/advanced_geom_objs_ex03.py b/doc/salome/examples/advanced_geom_objs_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/advanced_geom_objs_smoothingsurface.py b/doc/salome/examples/advanced_geom_objs_smoothingsurface.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/angle.py b/doc/salome/examples/angle.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/arranging_study_objects.py b/doc/salome/examples/arranging_study_objects.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex01.py b/doc/salome/examples/basic_geom_objs_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex02.py b/doc/salome/examples/basic_geom_objs_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex03.py b/doc/salome/examples/basic_geom_objs_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex04.py b/doc/salome/examples/basic_geom_objs_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex05.py b/doc/salome/examples/basic_geom_objs_ex05.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex06.py b/doc/salome/examples/basic_geom_objs_ex06.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex07.py b/doc/salome/examples/basic_geom_objs_ex07.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex08.py b/doc/salome/examples/basic_geom_objs_ex08.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_geom_objs_ex09.py b/doc/salome/examples/basic_geom_objs_ex09.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_operations_ex01.py b/doc/salome/examples/basic_operations_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_operations_ex02.py b/doc/salome/examples/basic_operations_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_operations_ex03.py b/doc/salome/examples/basic_operations_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/basic_properties.py b/doc/salome/examples/basic_properties.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/blocks_operations_ex01.py b/doc/salome/examples/blocks_operations_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/blocks_operations_ex02.py b/doc/salome/examples/blocks_operations_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/blocks_operations_ex03.py b/doc/salome/examples/blocks_operations_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/boolean_operations_ex01.py b/doc/salome/examples/boolean_operations_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/boolean_operations_ex02.py b/doc/salome/examples/boolean_operations_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/boolean_operations_ex03.py b/doc/salome/examples/boolean_operations_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/boolean_operations_ex04.py b/doc/salome/examples/boolean_operations_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/bounding_box.py b/doc/salome/examples/bounding_box.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/building_by_blocks_ex01.py b/doc/salome/examples/building_by_blocks_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/building_by_blocks_ex02.py b/doc/salome/examples/building_by_blocks_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/center_of_mass.py b/doc/salome/examples/center_of_mass.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/check_compound_of_blocks.py b/doc/salome/examples/check_compound_of_blocks.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/check_self_intersections.py b/doc/salome/examples/check_self_intersections.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/check_shape.py b/doc/salome/examples/check_shape.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex01.py b/doc/salome/examples/complex_objs_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex02.py b/doc/salome/examples/complex_objs_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex03.py b/doc/salome/examples/complex_objs_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex04.py b/doc/salome/examples/complex_objs_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex05.py b/doc/salome/examples/complex_objs_ex05.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex06.py b/doc/salome/examples/complex_objs_ex06.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex07.py b/doc/salome/examples/complex_objs_ex07.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex08.py b/doc/salome/examples/complex_objs_ex08.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex09.py b/doc/salome/examples/complex_objs_ex09.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/complex_objs_ex10.py b/doc/salome/examples/complex_objs_ex10.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/free_boundaries.py b/doc/salome/examples/free_boundaries.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/free_faces.py b/doc/salome/examples/free_faces.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/get_non_blocks.py b/doc/salome/examples/get_non_blocks.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/import_export.py b/doc/salome/examples/import_export.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/inertia.py b/doc/salome/examples/inertia.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/min_distance.py b/doc/salome/examples/min_distance.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/normal_face.py b/doc/salome/examples/normal_face.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/notebook_geom.py b/doc/salome/examples/notebook_geom.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/point_coordinates.py b/doc/salome/examples/point_coordinates.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/primitives_ex01.py b/doc/salome/examples/primitives_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/primitives_ex02.py b/doc/salome/examples/primitives_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/primitives_ex03.py b/doc/salome/examples/primitives_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/primitives_ex04.py b/doc/salome/examples/primitives_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/primitives_ex05.py b/doc/salome/examples/primitives_ex05.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/primitives_ex06.py b/doc/salome/examples/primitives_ex06.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/primitives_ex07.py b/doc/salome/examples/primitives_ex07.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex01.py b/doc/salome/examples/repairing_operations_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex02.py b/doc/salome/examples/repairing_operations_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex03.py b/doc/salome/examples/repairing_operations_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex04.py b/doc/salome/examples/repairing_operations_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex05.py b/doc/salome/examples/repairing_operations_ex05.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex06.py b/doc/salome/examples/repairing_operations_ex06.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex07.py b/doc/salome/examples/repairing_operations_ex07.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex08.py b/doc/salome/examples/repairing_operations_ex08.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex09.py b/doc/salome/examples/repairing_operations_ex09.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex10.py b/doc/salome/examples/repairing_operations_ex10.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex11.py b/doc/salome/examples/repairing_operations_ex11.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/repairing_operations_ex12.py b/doc/salome/examples/repairing_operations_ex12.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/sketcher.py b/doc/salome/examples/sketcher.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/tolerance.py b/doc/salome/examples/tolerance.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/topological_geom_objs_ex01.py b/doc/salome/examples/topological_geom_objs_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/topological_geom_objs_ex02.py b/doc/salome/examples/topological_geom_objs_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/topological_geom_objs_ex03.py b/doc/salome/examples/topological_geom_objs_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/topological_geom_objs_ex04.py b/doc/salome/examples/topological_geom_objs_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/topological_geom_objs_ex05.py b/doc/salome/examples/topological_geom_objs_ex05.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/topological_geom_objs_ex06.py b/doc/salome/examples/topological_geom_objs_ex06.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex01.py b/doc/salome/examples/transformation_operations_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex02.py b/doc/salome/examples/transformation_operations_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex03.py b/doc/salome/examples/transformation_operations_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex04.py b/doc/salome/examples/transformation_operations_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex05.py b/doc/salome/examples/transformation_operations_ex05.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex06.py b/doc/salome/examples/transformation_operations_ex06.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex07.py b/doc/salome/examples/transformation_operations_ex07.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex08.py b/doc/salome/examples/transformation_operations_ex08.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex09.py b/doc/salome/examples/transformation_operations_ex09.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex10.py b/doc/salome/examples/transformation_operations_ex10.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex11.py b/doc/salome/examples/transformation_operations_ex11.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex12.py b/doc/salome/examples/transformation_operations_ex12.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/transformation_operations_ex13.py b/doc/salome/examples/transformation_operations_ex13.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/viewing_geom_objs_ex01.py b/doc/salome/examples/viewing_geom_objs_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/viewing_geom_objs_ex02.py b/doc/salome/examples/viewing_geom_objs_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/viewing_geom_objs_ex03.py b/doc/salome/examples/viewing_geom_objs_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/viewing_geom_objs_ex04.py b/doc/salome/examples/viewing_geom_objs_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/whatis.py b/doc/salome/examples/whatis.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/working_with_groups_ex01.py b/doc/salome/examples/working_with_groups_ex01.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/working_with_groups_ex02.py b/doc/salome/examples/working_with_groups_ex02.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/working_with_groups_ex03.py b/doc/salome/examples/working_with_groups_ex03.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/working_with_groups_ex04.py b/doc/salome/examples/working_with_groups_ex04.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/working_with_groups_ex05.py b/doc/salome/examples/working_with_groups_ex05.py old mode 100644 new mode 100755 diff --git a/doc/salome/examples/working_with_groups_ex06.py b/doc/salome/examples/working_with_groups_ex06.py old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/CMakeLists.txt b/doc/salome/gui/GEOM/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch1.png b/doc/salome/gui/GEOM/images/2dsketch1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch10.png b/doc/salome/gui/GEOM/images/2dsketch10.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch12.png b/doc/salome/gui/GEOM/images/2dsketch12.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch2.png b/doc/salome/gui/GEOM/images/2dsketch2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch3.png b/doc/salome/gui/GEOM/images/2dsketch3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch4.png b/doc/salome/gui/GEOM/images/2dsketch4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch5.png b/doc/salome/gui/GEOM/images/2dsketch5.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch6.png b/doc/salome/gui/GEOM/images/2dsketch6.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch7.png b/doc/salome/gui/GEOM/images/2dsketch7.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch8.png b/doc/salome/gui/GEOM/images/2dsketch8.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/2dsketch9.png b/doc/salome/gui/GEOM/images/2dsketch9.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/3dsketch4.png b/doc/salome/gui/GEOM/images/3dsketch4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png b/doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/3dsketch_angle_abs.png b/doc/salome/gui/GEOM/images/3dsketch_angle_abs.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/3dsketch_angle_height_rel.png b/doc/salome/gui/GEOM/images/3dsketch_angle_height_rel.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/3dsketch_angle_rel.png b/doc/salome/gui/GEOM/images/3dsketch_angle_rel.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/3dsketch_dlg.png b/doc/salome/gui/GEOM/images/3dsketch_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/add_dimension.png b/doc/salome/gui/GEOM/images/add_dimension.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arc2.png b/doc/salome/gui/GEOM/images/arc2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arc_icon.png b/doc/salome/gui/GEOM/images/arc_icon.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arcofellipse1.png b/doc/salome/gui/GEOM/images/arcofellipse1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arcofellipse2.png b/doc/salome/gui/GEOM/images/arcofellipse2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arcsn1.png b/doc/salome/gui/GEOM/images/arcsn1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arcsn2.png b/doc/salome/gui/GEOM/images/arcsn2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arranging1.png b/doc/salome/gui/GEOM/images/arranging1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arranging2.png b/doc/salome/gui/GEOM/images/arranging2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/arranging3.png b/doc/salome/gui/GEOM/images/arranging3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/change_direction.png b/doc/salome/gui/GEOM/images/change_direction.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/compound2.png b/doc/salome/gui/GEOM/images/compound2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/contour_detect_snapshot.png b/doc/salome/gui/GEOM/images/contour_detect_snapshot.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/contour_detection_example2.png b/doc/salome/gui/GEOM/images/contour_detection_example2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/creation_op_info.png b/doc/salome/gui/GEOM/images/creation_op_info.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/curve1.png b/doc/salome/gui/GEOM/images/curve1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/curve2.png b/doc/salome/gui/GEOM/images/curve2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/curve3.png b/doc/salome/gui/GEOM/images/curve3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/curve4.png b/doc/salome/gui/GEOM/images/curve4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/deflection_0001.png b/doc/salome/gui/GEOM/images/deflection_0001.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/deflection_001.png b/doc/salome/gui/GEOM/images/deflection_001.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/dialog.png b/doc/salome/gui/GEOM/images/dialog.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/dimensions_preview.png b/doc/salome/gui/GEOM/images/dimensions_preview.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/disk1.png b/doc/salome/gui/GEOM/images/disk1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/disk2.png b/doc/salome/gui/GEOM/images/disk2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/disk3.png b/doc/salome/gui/GEOM/images/disk3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/disks.png b/doc/salome/gui/GEOM/images/disks.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/divided_disk.png b/doc/salome/gui/GEOM/images/divided_disk.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png b/doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/divided_disk_dlg.png b/doc/salome/gui/GEOM/images/divided_disk_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/dividedcylinder.png b/doc/salome/gui/GEOM/images/dividedcylinder.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/dividedcylinder_dlg.png b/doc/salome/gui/GEOM/images/dividedcylinder_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/draft.png b/doc/salome/gui/GEOM/images/draft.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/eclipse1.png b/doc/salome/gui/GEOM/images/eclipse1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/eclipse2.png b/doc/salome/gui/GEOM/images/eclipse2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/edge1.png b/doc/salome/gui/GEOM/images/edge1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/edge2.png b/doc/salome/gui/GEOM/images/edge2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/edge3.png b/doc/salome/gui/GEOM/images/edge3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/exportxao_dlg.png b/doc/salome/gui/GEOM/images/exportxao_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extruded_boss.png b/doc/salome/gui/GEOM/images/extruded_boss.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extruded_boss_dlg.png b/doc/salome/gui/GEOM/images/extruded_boss_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extruded_boss_example.png b/doc/salome/gui/GEOM/images/extruded_boss_example.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extruded_cut.png b/doc/salome/gui/GEOM/images/extruded_cut.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extruded_cut_dlg.png b/doc/salome/gui/GEOM/images/extruded_cut_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extruded_cut_example.png b/doc/salome/gui/GEOM/images/extruded_cut_example.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extrusion3.png b/doc/salome/gui/GEOM/images/extrusion3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/extrusion4.png b/doc/salome/gui/GEOM/images/extrusion4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/face1.png b/doc/salome/gui/GEOM/images/face1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/face2.png b/doc/salome/gui/GEOM/images/face2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/faces.png b/doc/salome/gui/GEOM/images/faces.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/feature_detect.png b/doc/salome/gui/GEOM/images/feature_detect.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/feature_detection_dlg.png b/doc/salome/gui/GEOM/images/feature_detection_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/feature_detection_dlg2.png b/doc/salome/gui/GEOM/images/feature_detection_dlg2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/feature_detection_dlg3.png b/doc/salome/gui/GEOM/images/feature_detection_dlg3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/fillet1d_1.png b/doc/salome/gui/GEOM/images/fillet1d_1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/fillet1d_2.png b/doc/salome/gui/GEOM/images/fillet1d_2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/front1.png b/doc/salome/gui/GEOM/images/front1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/front2.png b/doc/salome/gui/GEOM/images/front2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/fuse.png b/doc/salome/gui/GEOM/images/fuse.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/fuse_collinear_edges.png b/doc/salome/gui/GEOM/images/fuse_collinear_edges.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/fused_wire.png b/doc/salome/gui/GEOM/images/fused_wire.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/geom_sort.png b/doc/salome/gui/GEOM/images/geom_sort.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/geomimport_reopen.png b/doc/salome/gui/GEOM/images/geomimport_reopen.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/get_in_place_lost_part.png b/doc/salome/gui/GEOM/images/get_in_place_lost_part.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue1.png b/doc/salome/gui/GEOM/images/glue1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue2.png b/doc/salome/gui/GEOM/images/glue2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue3.png b/doc/salome/gui/GEOM/images/glue3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue4.png b/doc/salome/gui/GEOM/images/glue4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue5.png b/doc/salome/gui/GEOM/images/glue5.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue7.png b/doc/salome/gui/GEOM/images/glue7.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue8.png b/doc/salome/gui/GEOM/images/glue8.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/glue_faces3.png b/doc/salome/gui/GEOM/images/glue_faces3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/groups_cut_dlg.png b/doc/salome/gui/GEOM/images/groups_cut_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/groups_intersect_dlg.png b/doc/salome/gui/GEOM/images/groups_intersect_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/groups_union_dlg.png b/doc/salome/gui/GEOM/images/groups_union_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/iges_unit.png b/doc/salome/gui/GEOM/images/iges_unit.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image1.png b/doc/salome/gui/GEOM/images/image1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image109.png b/doc/salome/gui/GEOM/images/image109.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image110.png b/doc/salome/gui/GEOM/images/image110.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image112.png b/doc/salome/gui/GEOM/images/image112.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image113.png b/doc/salome/gui/GEOM/images/image113.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image145.png b/doc/salome/gui/GEOM/images/image145.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image15.png b/doc/salome/gui/GEOM/images/image15.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image154.png b/doc/salome/gui/GEOM/images/image154.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image156.png b/doc/salome/gui/GEOM/images/image156.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image16.png b/doc/salome/gui/GEOM/images/image16.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image160.png b/doc/salome/gui/GEOM/images/image160.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image167.png b/doc/salome/gui/GEOM/images/image167.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image168.png b/doc/salome/gui/GEOM/images/image168.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image180.png b/doc/salome/gui/GEOM/images/image180.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image181.png b/doc/salome/gui/GEOM/images/image181.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image185.png b/doc/salome/gui/GEOM/images/image185.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image193.png b/doc/salome/gui/GEOM/images/image193.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image204.png b/doc/salome/gui/GEOM/images/image204.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image206.png b/doc/salome/gui/GEOM/images/image206.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image21.png b/doc/salome/gui/GEOM/images/image21.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image22.png b/doc/salome/gui/GEOM/images/image22.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image3.png b/doc/salome/gui/GEOM/images/image3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image30.png b/doc/salome/gui/GEOM/images/image30.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image34.png b/doc/salome/gui/GEOM/images/image34.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image36.png b/doc/salome/gui/GEOM/images/image36.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image38.png b/doc/salome/gui/GEOM/images/image38.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image4.png b/doc/salome/gui/GEOM/images/image4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image40.png b/doc/salome/gui/GEOM/images/image40.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/image47.png b/doc/salome/gui/GEOM/images/image47.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/import_picture.png b/doc/salome/gui/GEOM/images/import_picture.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/interact_with_dimensions.png b/doc/salome/gui/GEOM/images/interact_with_dimensions.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/isoline1.png b/doc/salome/gui/GEOM/images/isoline1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/isoline2.png b/doc/salome/gui/GEOM/images/isoline2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/isos.png b/doc/salome/gui/GEOM/images/isos.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/limit_tolerance_dlg.png b/doc/salome/gui/GEOM/images/limit_tolerance_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/line_icon.png b/doc/salome/gui/GEOM/images/line_icon.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/manage_dimensions.png b/doc/salome/gui/GEOM/images/manage_dimensions.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/material.png b/doc/salome/gui/GEOM/images/material.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/material_OCC.png b/doc/salome/gui/GEOM/images/material_OCC.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/material_VTK.png b/doc/salome/gui/GEOM/images/material_VTK.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/measures11.png b/doc/salome/gui/GEOM/images/measures11.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/measures2.png b/doc/salome/gui/GEOM/images/measures2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/measures2a.png b/doc/salome/gui/GEOM/images/measures2a.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/measures8a.png b/doc/salome/gui/GEOM/images/measures8a.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/neo-deflection.png b/doc/salome/gui/GEOM/images/neo-deflection.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/ob_popup_menu.png b/doc/salome/gui/GEOM/images/ob_popup_menu.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/partition.png b/doc/salome/gui/GEOM/images/partition.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/partition1.png b/doc/salome/gui/GEOM/images/partition1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/partition2.png b/doc/salome/gui/GEOM/images/partition2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/partitionsn3.png b/doc/salome/gui/GEOM/images/partitionsn3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/picture_import_dlg.png b/doc/salome/gui/GEOM/images/picture_import_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipe3.png b/doc/salome/gui/GEOM/images/pipe3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipe3_init.png b/doc/salome/gui/GEOM/images/pipe3_init.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipe3_res.png b/doc/salome/gui/GEOM/images/pipe3_res.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipe_path.png b/doc/salome/gui/GEOM/images/pipe_path.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipe_path_dlg.png b/doc/salome/gui/GEOM/images/pipe_path_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipebinormalsn.png b/doc/salome/gui/GEOM/images/pipebinormalsn.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape.png b/doc/salome/gui/GEOM/images/pipetshape.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape1.png b/doc/salome/gui/GEOM/images/pipetshape1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape2.png b/doc/salome/gui/GEOM/images/pipetshape2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape3.png b/doc/salome/gui/GEOM/images/pipetshape3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape4.png b/doc/salome/gui/GEOM/images/pipetshape4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape5.png b/doc/salome/gui/GEOM/images/pipetshape5.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape_dlg.png b/doc/salome/gui/GEOM/images/pipetshape_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png b/doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png b/doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshapechamfer.png b/doc/salome/gui/GEOM/images/pipetshapechamfer.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshapefillet.png b/doc/salome/gui/GEOM/images/pipetshapefillet.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pipetshapethr.png b/doc/salome/gui/GEOM/images/pipetshapethr.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/plane4.png b/doc/salome/gui/GEOM/images/plane4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/plane5.png b/doc/salome/gui/GEOM/images/plane5.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/point3_2.png b/doc/salome/gui/GEOM/images/point3_2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/point3_3.png b/doc/salome/gui/GEOM/images/point3_3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/point5_2.png b/doc/salome/gui/GEOM/images/point5_2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pref15.png b/doc/salome/gui/GEOM/images/pref15.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/pref_dep_tree.png b/doc/salome/gui/GEOM/images/pref_dep_tree.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/prism_with_thickness.png b/doc/salome/gui/GEOM/images/prism_with_thickness.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/projection_dlg.png b/doc/salome/gui/GEOM/images/projection_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/projection_preview.png b/doc/salome/gui/GEOM/images/projection_preview.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/rectangle_icon.png b/doc/salome/gui/GEOM/images/rectangle_icon.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/reduce_study_dialog.png b/doc/salome/gui/GEOM/images/reduce_study_dialog.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/remove_extra_edges.png b/doc/salome/gui/GEOM/images/remove_extra_edges.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/remove_extra_edges1.png b/doc/salome/gui/GEOM/images/remove_extra_edges1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/remove_extra_edges2.png b/doc/salome/gui/GEOM/images/remove_extra_edges2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/remove_webs.png b/doc/salome/gui/GEOM/images/remove_webs.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/repair10a.png b/doc/salome/gui/GEOM/images/repair10a.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/repair9a.png b/doc/salome/gui/GEOM/images/repair9a.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/restore-ss-OB-cut.png b/doc/salome/gui/GEOM/images/restore-ss-OB-cut.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/restore-ss-OB.png b/doc/salome/gui/GEOM/images/restore-ss-OB.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/restore-ss-cut.png b/doc/salome/gui/GEOM/images/restore-ss-cut.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/restore-ss-dialog.png b/doc/salome/gui/GEOM/images/restore-ss-dialog.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/restore-ss-viewer-after.png b/doc/salome/gui/GEOM/images/restore-ss-viewer-after.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/restore-ss-viewer-before.png b/doc/salome/gui/GEOM/images/restore-ss-viewer-before.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/restore-ss-viewer-cut.png b/doc/salome/gui/GEOM/images/restore-ss-viewer-cut.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/salome-geom-structuralelements.png b/doc/salome/gui/GEOM/images/salome-geom-structuralelements.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/sat_named_shapes.png b/doc/salome/gui/GEOM/images/sat_named_shapes.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/scale_transformsn3.png b/doc/salome/gui/GEOM/images/scale_transformsn3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/scale_transformsn4.png b/doc/salome/gui/GEOM/images/scale_transformsn4.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/shared_shapes.png b/doc/salome/gui/GEOM/images/shared_shapes.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/show_predef_material.png b/doc/salome/gui/GEOM/images/show_predef_material.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/sketch.png b/doc/salome/gui/GEOM/images/sketch.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/sketch_example.png b/doc/salome/gui/GEOM/images/sketch_example.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/sketcher_dlg.png b/doc/salome/gui/GEOM/images/sketcher_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/sketcher_dlg2.png b/doc/salome/gui/GEOM/images/sketcher_dlg2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/smoothingsurface.png b/doc/salome/gui/GEOM/images/smoothingsurface.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/smoothingsurface_dlg.png b/doc/salome/gui/GEOM/images/smoothingsurface_dlg.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/transformation10a.png b/doc/salome/gui/GEOM/images/transformation10a.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/transformation12.png b/doc/salome/gui/GEOM/images/transformation12.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/transformation13.png b/doc/salome/gui/GEOM/images/transformation13.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/transformation14.png b/doc/salome/gui/GEOM/images/transformation14.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/transformation4a.png b/doc/salome/gui/GEOM/images/transformation4a.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/translation3.png b/doc/salome/gui/GEOM/images/translation3.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_bidir_link.png b/doc/salome/gui/GEOM/images/tree_bidir_link.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_button_update.png b/doc/salome/gui/GEOM/images/tree_button_update.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_cycldep_link.png b/doc/salome/gui/GEOM/images/tree_cycldep_link.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_default_node.png b/doc/salome/gui/GEOM/images/tree_default_node.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_disp_ascendants.png b/doc/salome/gui/GEOM/images/tree_disp_ascendants.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_disp_descendants.png b/doc/salome/gui/GEOM/images/tree_disp_descendants.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_example.png b/doc/salome/gui/GEOM/images/tree_example.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_hierarchy_type.png b/doc/salome/gui/GEOM/images/tree_hierarchy_type.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_highlighted_node.png b/doc/salome/gui/GEOM/images/tree_highlighted_node.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_main_node.png b/doc/salome/gui/GEOM/images/tree_main_node.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_move_nodes.png b/doc/salome/gui/GEOM/images/tree_move_nodes.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_popup_menu1.png b/doc/salome/gui/GEOM/images/tree_popup_menu1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_popup_menu2.png b/doc/salome/gui/GEOM/images/tree_popup_menu2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_selected_node.png b/doc/salome/gui/GEOM/images/tree_selected_node.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_selfdep_link.png b/doc/salome/gui/GEOM/images/tree_selfdep_link.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_tool_bar.png b/doc/salome/gui/GEOM/images/tree_tool_bar.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_unidir_link.png b/doc/salome/gui/GEOM/images/tree_unidir_link.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_unpublished_node.png b/doc/salome/gui/GEOM/images/tree_unpublished_node.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_view_dump.png b/doc/salome/gui/GEOM/images/tree_view_dump.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_view_fitall.png b/doc/salome/gui/GEOM/images/tree_view_fitall.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_view_fitarea.png b/doc/salome/gui/GEOM/images/tree_view_fitarea.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_view_glpan.png b/doc/salome/gui/GEOM/images/tree_view_glpan.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_view_pan.png b/doc/salome/gui/GEOM/images/tree_view_pan.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/tree_view_zoom.png b/doc/salome/gui/GEOM/images/tree_view_zoom.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/union_faces.png b/doc/salome/gui/GEOM/images/union_faces.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/union_faces1.png b/doc/salome/gui/GEOM/images/union_faces1.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/union_faces2.png b/doc/salome/gui/GEOM/images/union_faces2.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/using_notebook_geom.png b/doc/salome/gui/GEOM/images/using_notebook_geom.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/vectors_mode.png b/doc/salome/gui/GEOM/images/vectors_mode.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/images/wire_before_fuse.png b/doc/salome/gui/GEOM/images/wire_before_fuse.png old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc b/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/angle.doc b/doc/salome/gui/GEOM/input/angle.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/api_documentation.doc b/doc/salome/gui/GEOM/input/api_documentation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/archimede.doc b/doc/salome/gui/GEOM/input/archimede.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc b/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/basic_prop.doc b/doc/salome/gui/GEOM/input/basic_prop.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/blocks_operations.doc b/doc/salome/gui/GEOM/input/blocks_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/boudaries.doc b/doc/salome/gui/GEOM/input/boudaries.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/bounding_box.doc b/doc/salome/gui/GEOM/input/bounding_box.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/bring_to_front.doc b/doc/salome/gui/GEOM/input/bring_to_front.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/building_by_blocks.doc b/doc/salome/gui/GEOM/input/building_by_blocks.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/center_mass.doc b/doc/salome/gui/GEOM/input/center_mass.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/chamfer_operation.doc b/doc/salome/gui/GEOM/input/chamfer_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/change_orientation_operation.doc b/doc/salome/gui/GEOM/input/change_orientation_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc b/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/check_self_intersections.doc b/doc/salome/gui/GEOM/input/check_self_intersections.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/check_shape.doc b/doc/salome/gui/GEOM/input/check_shape.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/close_contour_operation.doc b/doc/salome/gui/GEOM/input/close_contour_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/color.doc b/doc/salome/gui/GEOM/input/color.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/common_operation.doc b/doc/salome/gui/GEOM/input/common_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_arc.doc b/doc/salome/gui/GEOM/input/creating_arc.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_basic_go.doc b/doc/salome/gui/GEOM/input/creating_basic_go.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_box.doc b/doc/salome/gui/GEOM/input/creating_box.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_circle.doc b/doc/salome/gui/GEOM/input/creating_circle.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_complex_obj.doc b/doc/salome/gui/GEOM/input/creating_complex_obj.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_compound.doc b/doc/salome/gui/GEOM/input/creating_compound.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_cone.doc b/doc/salome/gui/GEOM/input/creating_cone.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_curve.doc b/doc/salome/gui/GEOM/input/creating_curve.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_cylinder.doc b/doc/salome/gui/GEOM/input/creating_cylinder.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_dividedcylinder.doc b/doc/salome/gui/GEOM/input/creating_dividedcylinder.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_divideddisk.doc b/doc/salome/gui/GEOM/input/creating_divideddisk.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_edge.doc b/doc/salome/gui/GEOM/input/creating_edge.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_ellipse.doc b/doc/salome/gui/GEOM/input/creating_ellipse.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_explode.doc b/doc/salome/gui/GEOM/input/creating_explode.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_extrusion.doc b/doc/salome/gui/GEOM/input/creating_extrusion.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_extrusion_alongpath.doc b/doc/salome/gui/GEOM/input/creating_extrusion_alongpath.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_face.doc b/doc/salome/gui/GEOM/input/creating_face.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_filling.doc b/doc/salome/gui/GEOM/input/creating_filling.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_geom_objects.doc b/doc/salome/gui/GEOM/input/creating_geom_objects.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_hexaedral_solid.doc b/doc/salome/gui/GEOM/input/creating_hexaedral_solid.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_isoline.doc b/doc/salome/gui/GEOM/input/creating_isoline.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_lcs.doc b/doc/salome/gui/GEOM/input/creating_lcs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_line.doc b/doc/salome/gui/GEOM/input/creating_line.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_pipe_path.doc b/doc/salome/gui/GEOM/input/creating_pipe_path.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_pipetshape.doc b/doc/salome/gui/GEOM/input/creating_pipetshape.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_plane.doc b/doc/salome/gui/GEOM/input/creating_plane.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_point.doc b/doc/salome/gui/GEOM/input/creating_point.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_primitives.doc b/doc/salome/gui/GEOM/input/creating_primitives.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_quadrangle_face.doc b/doc/salome/gui/GEOM/input/creating_quadrangle_face.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_revolution.doc b/doc/salome/gui/GEOM/input/creating_revolution.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_shell.doc b/doc/salome/gui/GEOM/input/creating_shell.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_sketcher.doc b/doc/salome/gui/GEOM/input/creating_sketcher.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_smoothingsurface.doc b/doc/salome/gui/GEOM/input/creating_smoothingsurface.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_solid.doc b/doc/salome/gui/GEOM/input/creating_solid.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_sphere.doc b/doc/salome/gui/GEOM/input/creating_sphere.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_topological_obj.doc b/doc/salome/gui/GEOM/input/creating_topological_obj.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_torus.doc b/doc/salome/gui/GEOM/input/creating_torus.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_vector.doc b/doc/salome/gui/GEOM/input/creating_vector.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/creating_wire.doc b/doc/salome/gui/GEOM/input/creating_wire.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/cut_operation.doc b/doc/salome/gui/GEOM/input/cut_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/deflection.doc b/doc/salome/gui/GEOM/input/deflection.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/dependency_tree.doc b/doc/salome/gui/GEOM/input/dependency_tree.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/display_mode.doc b/doc/salome/gui/GEOM/input/display_mode.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/explode_on_blocks_operation.doc b/doc/salome/gui/GEOM/input/explode_on_blocks_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/extruded_boss_operation.doc b/doc/salome/gui/GEOM/input/extruded_boss_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/extruded_cut_operation.doc b/doc/salome/gui/GEOM/input/extruded_cut_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/faq.doc b/doc/salome/gui/GEOM/input/faq.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/features.doc b/doc/salome/gui/GEOM/input/features.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/fillet1d_operation.doc b/doc/salome/gui/GEOM/input/fillet1d_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/fillet_operation.doc b/doc/salome/gui/GEOM/input/fillet_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/free_faces.doc b/doc/salome/gui/GEOM/input/free_faces.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/fuse_edges_operation.doc b/doc/salome/gui/GEOM/input/fuse_edges_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/fuse_operation.doc b/doc/salome/gui/GEOM/input/fuse_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/geometrical_object_properties.doc b/doc/salome/gui/GEOM/input/geometrical_object_properties.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/geompy.doc b/doc/salome/gui/GEOM/input/geompy.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/geompy_migration.doc b/doc/salome/gui/GEOM/input/geompy_migration.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/get_non_blocks.doc b/doc/salome/gui/GEOM/input/get_non_blocks.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/glue_edges_operation.doc b/doc/salome/gui/GEOM/input/glue_edges_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/glue_faces_operation.doc b/doc/salome/gui/GEOM/input/glue_faces_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/import_export.doc b/doc/salome/gui/GEOM/input/import_export.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/importing_picture.doc b/doc/salome/gui/GEOM/input/importing_picture.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/index.doc b/doc/salome/gui/GEOM/input/index.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/inertia.doc b/doc/salome/gui/GEOM/input/inertia.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/isolines.doc b/doc/salome/gui/GEOM/input/isolines.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/limit_tolerance_operation.doc b/doc/salome/gui/GEOM/input/limit_tolerance_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/line_width.doc b/doc/salome/gui/GEOM/input/line_width.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/managing_dimensions.doc b/doc/salome/gui/GEOM/input/managing_dimensions.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/manipulate_object.doc b/doc/salome/gui/GEOM/input/manipulate_object.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/material.doc b/doc/salome/gui/GEOM/input/material.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/min_distance.doc b/doc/salome/gui/GEOM/input/min_distance.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/mirror_operation.doc b/doc/salome/gui/GEOM/input/mirror_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/modify_location_operation.doc b/doc/salome/gui/GEOM/input/modify_location_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/multi_rotation_operation.doc b/doc/salome/gui/GEOM/input/multi_rotation_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/multi_transformation_operation.doc b/doc/salome/gui/GEOM/input/multi_transformation_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/multi_translation_operation.doc b/doc/salome/gui/GEOM/input/multi_translation_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/normal.doc b/doc/salome/gui/GEOM/input/normal.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/offset_operation.doc b/doc/salome/gui/GEOM/input/offset_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/partition_explanation.doc b/doc/salome/gui/GEOM/input/partition_explanation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/pictures.doc b/doc/salome/gui/GEOM/input/pictures.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/point_coordinates.doc b/doc/salome/gui/GEOM/input/point_coordinates.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/point_marker.doc b/doc/salome/gui/GEOM/input/point_marker.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/projection_operation.doc b/doc/salome/gui/GEOM/input/projection_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/propagate_operation.doc b/doc/salome/gui/GEOM/input/propagate_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/python_interface.doc b/doc/salome/gui/GEOM/input/python_interface.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/pythonutils.doc b/doc/salome/gui/GEOM/input/pythonutils.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/reduce_study.doc b/doc/salome/gui/GEOM/input/reduce_study.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/related_docs.doc b/doc/salome/gui/GEOM/input/related_docs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/remove_extra_edges_operation.doc b/doc/salome/gui/GEOM/input/remove_extra_edges_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/remove_webs_operation.doc b/doc/salome/gui/GEOM/input/remove_webs_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/repairing_operations.doc b/doc/salome/gui/GEOM/input/repairing_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/restore_presentation_parameters.doc b/doc/salome/gui/GEOM/input/restore_presentation_parameters.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/rotation_operation.doc b/doc/salome/gui/GEOM/input/rotation_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/scale_operation.doc b/doc/salome/gui/GEOM/input/scale_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/section_operation.doc b/doc/salome/gui/GEOM/input/section_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/sewing_operation.doc b/doc/salome/gui/GEOM/input/sewing_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/shape_processing_operation.doc b/doc/salome/gui/GEOM/input/shape_processing_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/shape_recognition.doc b/doc/salome/gui/GEOM/input/shape_recognition.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/struct_elem_visualisation.doc b/doc/salome/gui/GEOM/input/struct_elem_visualisation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/suppress_faces_operation.doc b/doc/salome/gui/GEOM/input/suppress_faces_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/suppress_holes_operation.doc b/doc/salome/gui/GEOM/input/suppress_holes_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/suppress_internal_wires_operation.doc b/doc/salome/gui/GEOM/input/suppress_internal_wires_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tolerance.doc b/doc/salome/gui/GEOM/input/tolerance.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/transformation_operations.doc b/doc/salome/gui/GEOM/input/transformation_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/transforming_geom_objs.doc b/doc/salome/gui/GEOM/input/transforming_geom_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/translation_operation.doc b/doc/salome/gui/GEOM/input/translation_operation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/transparency.doc b/doc/salome/gui/GEOM/input/transparency.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_angle.doc b/doc/salome/gui/GEOM/input/tui_angle.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_arranging_study_objects.doc b/doc/salome/gui/GEOM/input/tui_arranging_study_objects.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_auto_completion_documentation.doc b/doc/salome/gui/GEOM/input/tui_auto_completion_documentation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_basic_operations.doc b/doc/salome/gui/GEOM/input/tui_basic_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_basic_properties.doc b/doc/salome/gui/GEOM/input/tui_basic_properties.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_blocks_operations.doc b/doc/salome/gui/GEOM/input/tui_blocks_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_boolean_operations.doc b/doc/salome/gui/GEOM/input/tui_boolean_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_bounding_box.doc b/doc/salome/gui/GEOM/input/tui_bounding_box.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_building_by_blocks.doc b/doc/salome/gui/GEOM/input/tui_building_by_blocks.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_center_of_mass.doc b/doc/salome/gui/GEOM/input/tui_center_of_mass.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_check_compound_of_blocks.doc b/doc/salome/gui/GEOM/input/tui_check_compound_of_blocks.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_check_self_intersections.doc b/doc/salome/gui/GEOM/input/tui_check_self_intersections.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_check_shape.doc b/doc/salome/gui/GEOM/input/tui_check_shape.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_complex_objs.doc b/doc/salome/gui/GEOM/input/tui_complex_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_creating_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_creating_geom_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_execution_distribution.doc b/doc/salome/gui/GEOM/input/tui_execution_distribution.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_free_boundaries.doc b/doc/salome/gui/GEOM/input/tui_free_boundaries.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_free_faces.doc b/doc/salome/gui/GEOM/input/tui_free_faces.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_get_non_blocks.doc b/doc/salome/gui/GEOM/input/tui_get_non_blocks.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_import_export.doc b/doc/salome/gui/GEOM/input/tui_import_export.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_inertia.doc b/doc/salome/gui/GEOM/input/tui_inertia.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_measurement_tools.doc b/doc/salome/gui/GEOM/input/tui_measurement_tools.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_min_distance.doc b/doc/salome/gui/GEOM/input/tui_min_distance.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_normal_face.doc b/doc/salome/gui/GEOM/input/tui_normal_face.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_notebook_geom.doc b/doc/salome/gui/GEOM/input/tui_notebook_geom.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_point_coordinates.doc b/doc/salome/gui/GEOM/input/tui_point_coordinates.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_primitives.doc b/doc/salome/gui/GEOM/input/tui_primitives.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_repairing_operations.doc b/doc/salome/gui/GEOM/input/tui_repairing_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_sketcher.doc b/doc/salome/gui/GEOM/input/tui_sketcher.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_swig_examples.doc b/doc/salome/gui/GEOM/input/tui_swig_examples.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_test_all.doc b/doc/salome/gui/GEOM/input/tui_test_all.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_test_measures.doc b/doc/salome/gui/GEOM/input/tui_test_measures.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_test_others.doc b/doc/salome/gui/GEOM/input/tui_test_others.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_test_spanner.doc b/doc/salome/gui/GEOM/input/tui_test_spanner.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_tolerance.doc b/doc/salome/gui/GEOM/input/tui_tolerance.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_topological_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_topological_geom_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_transformation.doc b/doc/salome/gui/GEOM/input/tui_transformation.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_transformation_operations.doc b/doc/salome/gui/GEOM/input/tui_transformation_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_whatis.doc b/doc/salome/gui/GEOM/input/tui_whatis.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/tui_working_with_groups.doc b/doc/salome/gui/GEOM/input/tui_working_with_groups.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/using_boolean_operations.doc b/doc/salome/gui/GEOM/input/using_boolean_operations.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/using_measurement_tools.doc b/doc/salome/gui/GEOM/input/using_measurement_tools.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/using_notebook_geom_page.doc b/doc/salome/gui/GEOM/input/using_notebook_geom_page.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/whatis.doc b/doc/salome/gui/GEOM/input/whatis.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/working_with_groups.doc b/doc/salome/gui/GEOM/input/working_with_groups.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/input/xao_format.doc b/doc/salome/gui/GEOM/input/xao_format.doc old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/static/header_py.html.in b/doc/salome/gui/GEOM/static/header_py.html.in old mode 100644 new mode 100755 diff --git a/doc/salome/gui/GEOM/static/salome_extra.css b/doc/salome/gui/GEOM/static/salome_extra.css old mode 100644 new mode 100755 diff --git a/doc/salome/tui/images/geomscreen.png b/doc/salome/tui/images/geomscreen.png old mode 100644 new mode 100755 diff --git a/doc/salome/tui/input/index.doc b/doc/salome/tui/input/index.doc old mode 100644 new mode 100755 diff --git a/doc/salome/tui/static/salome_extra.css b/doc/salome/tui/static/salome_extra.css old mode 100644 new mode 100755 diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl old mode 100644 new mode 100755 diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl old mode 100644 new mode 100755 diff --git a/resources/GEOM.config b/resources/GEOM.config old mode 100644 new mode 100755 diff --git a/resources/GEOMActions.xml b/resources/GEOMActions.xml old mode 100644 new mode 100755 diff --git a/resources/GEOMCatalog.xml.in b/resources/GEOMCatalog.xml.in old mode 100644 new mode 100755 diff --git a/resources/GEOMDS_Resources b/resources/GEOMDS_Resources old mode 100644 new mode 100755 diff --git a/resources/GEOM_en.xml b/resources/GEOM_en.xml old mode 100644 new mode 100755 diff --git a/resources/GEOM_fr.xml b/resources/GEOM_fr.xml old mode 100644 new mode 100755 diff --git a/resources/ImportExport b/resources/ImportExport old mode 100644 new mode 100755 diff --git a/resources/ModuleGeom.png b/resources/ModuleGeom.png old mode 100644 new mode 100755 diff --git a/resources/Plugin.in b/resources/Plugin.in old mode 100644 new mode 100755 diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in old mode 100644 new mode 100755 diff --git a/resources/ShHealing b/resources/ShHealing old mode 100644 new mode 100755 diff --git a/resources/angle.png b/resources/angle.png old mode 100644 new mode 100755 diff --git a/resources/arc.png b/resources/arc.png old mode 100644 new mode 100755 diff --git a/resources/arccenter.png b/resources/arccenter.png old mode 100644 new mode 100755 diff --git a/resources/archimede.png b/resources/archimede.png old mode 100644 new mode 100755 diff --git a/resources/axisinertia.png b/resources/axisinertia.png old mode 100644 new mode 100755 diff --git a/resources/basicproperties.png b/resources/basicproperties.png old mode 100644 new mode 100755 diff --git a/resources/bezier.png b/resources/bezier.png old mode 100644 new mode 100755 diff --git a/resources/block_2f.png b/resources/block_2f.png old mode 100644 new mode 100755 diff --git a/resources/block_6f.png b/resources/block_6f.png old mode 100644 new mode 100755 diff --git a/resources/block_face_2e.png b/resources/block_face_2e.png old mode 100644 new mode 100755 diff --git a/resources/block_face_4e.png b/resources/block_face_4e.png old mode 100644 new mode 100755 diff --git a/resources/block_face_4v.png b/resources/block_face_4v.png old mode 100644 new mode 100755 diff --git a/resources/block_multitrsf_double.png b/resources/block_multitrsf_double.png old mode 100644 new mode 100755 diff --git a/resources/block_multitrsf_simple.png b/resources/block_multitrsf_simple.png old mode 100644 new mode 100755 diff --git a/resources/bounding.png b/resources/bounding.png old mode 100644 new mode 100755 diff --git a/resources/box.png b/resources/box.png old mode 100644 new mode 100755 diff --git a/resources/box2points.png b/resources/box2points.png old mode 100644 new mode 100755 diff --git a/resources/boxdxyz.png b/resources/boxdxyz.png old mode 100644 new mode 100755 diff --git a/resources/build_compound.png b/resources/build_compound.png old mode 100644 new mode 100755 diff --git a/resources/build_edge.png b/resources/build_edge.png old mode 100644 new mode 100755 diff --git a/resources/build_edge_curve.png b/resources/build_edge_curve.png old mode 100644 new mode 100755 diff --git a/resources/build_edge_wire.png b/resources/build_edge_wire.png old mode 100644 new mode 100755 diff --git a/resources/build_face.png b/resources/build_face.png old mode 100644 new mode 100755 diff --git a/resources/build_shell.png b/resources/build_shell.png old mode 100644 new mode 100755 diff --git a/resources/build_solid.png b/resources/build_solid.png old mode 100644 new mode 100755 diff --git a/resources/build_wire.png b/resources/build_wire.png old mode 100644 new mode 100755 diff --git a/resources/centergravity.png b/resources/centergravity.png old mode 100644 new mode 100755 diff --git a/resources/chamfer.png b/resources/chamfer.png old mode 100644 new mode 100755 diff --git a/resources/chamferall.png b/resources/chamferall.png old mode 100644 new mode 100755 diff --git a/resources/chamferedge.png b/resources/chamferedge.png old mode 100644 new mode 100755 diff --git a/resources/chamferface.png b/resources/chamferface.png old mode 100644 new mode 100755 diff --git a/resources/change_direction.png b/resources/change_direction.png old mode 100644 new mode 100755 diff --git a/resources/check.png b/resources/check.png old mode 100644 new mode 100755 diff --git a/resources/check_blocks_compound.png b/resources/check_blocks_compound.png old mode 100644 new mode 100755 diff --git a/resources/check_self_intersections.png b/resources/check_self_intersections.png old mode 100644 new mode 100755 diff --git a/resources/circle.png b/resources/circle.png old mode 100644 new mode 100755 diff --git a/resources/circle3points.png b/resources/circle3points.png old mode 100644 new mode 100755 diff --git a/resources/circlepointvector.png b/resources/circlepointvector.png old mode 100644 new mode 100755 diff --git a/resources/closecontour.png b/resources/closecontour.png old mode 100644 new mode 100755 diff --git a/resources/common.png b/resources/common.png old mode 100644 new mode 100755 diff --git a/resources/cone.png b/resources/cone.png old mode 100644 new mode 100755 diff --git a/resources/conepointvector.png b/resources/conepointvector.png old mode 100644 new mode 100755 diff --git a/resources/cut.png b/resources/cut.png old mode 100644 new mode 100755 diff --git a/resources/cylinder.png b/resources/cylinder.png old mode 100644 new mode 100755 diff --git a/resources/cylinderpointvector.png b/resources/cylinderpointvector.png old mode 100644 new mode 100755 diff --git a/resources/delete.png b/resources/delete.png old mode 100644 new mode 100755 diff --git a/resources/disk.png b/resources/disk.png old mode 100644 new mode 100755 diff --git a/resources/disk3points.png b/resources/disk3points.png old mode 100644 new mode 100755 diff --git a/resources/disk_pntvecr.png b/resources/disk_pntvecr.png old mode 100644 new mode 100755 diff --git a/resources/disk_r.png b/resources/disk_r.png old mode 100644 new mode 100755 diff --git a/resources/display.png b/resources/display.png old mode 100644 new mode 100755 diff --git a/resources/displayall.png b/resources/displayall.png old mode 100644 new mode 100755 diff --git a/resources/displayonly.png b/resources/displayonly.png old mode 100644 new mode 100755 diff --git a/resources/divided_disk.png b/resources/divided_disk.png old mode 100644 new mode 100755 diff --git a/resources/dividedcylinder.png b/resources/dividedcylinder.png old mode 100644 new mode 100755 diff --git a/resources/dividedcylinder_r_h.png b/resources/dividedcylinder_r_h.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshape.png b/resources/dlg_pipetshape.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamfer.png b/resources/dlg_pipetshapechamfer.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferh.png b/resources/dlg_pipetshapechamferh.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferl1.png b/resources/dlg_pipetshapechamferl1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferl2.png b/resources/dlg_pipetshapechamferl2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferr1.png b/resources/dlg_pipetshapechamferr1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferr2.png b/resources/dlg_pipetshapechamferr2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferw.png b/resources/dlg_pipetshapechamferw.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferw1.png b/resources/dlg_pipetshapechamferw1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapechamferw2.png b/resources/dlg_pipetshapechamferw2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefillet.png b/resources/dlg_pipetshapefillet.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefilletl1.png b/resources/dlg_pipetshapefilletl1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefilletl2.png b/resources/dlg_pipetshapefilletl2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefilletr1.png b/resources/dlg_pipetshapefilletr1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefilletr2.png b/resources/dlg_pipetshapefilletr2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefilletrf.png b/resources/dlg_pipetshapefilletrf.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefilletw1.png b/resources/dlg_pipetshapefilletw1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapefilletw2.png b/resources/dlg_pipetshapefilletw2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapel1.png b/resources/dlg_pipetshapel1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapel2.png b/resources/dlg_pipetshapel2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshaper1.png b/resources/dlg_pipetshaper1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshaper2.png b/resources/dlg_pipetshaper2.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapew1.png b/resources/dlg_pipetshapew1.png old mode 100644 new mode 100755 diff --git a/resources/dlg_pipetshapew2.png b/resources/dlg_pipetshapew2.png old mode 100644 new mode 100755 diff --git a/resources/draft.png b/resources/draft.png old mode 100644 new mode 100755 diff --git a/resources/edit_points.png b/resources/edit_points.png old mode 100644 new mode 100755 diff --git a/resources/erase.png b/resources/erase.png old mode 100644 new mode 100755 diff --git a/resources/eraseall.png b/resources/eraseall.png old mode 100644 new mode 100755 diff --git a/resources/exportxao.png b/resources/exportxao.png old mode 100644 new mode 100755 diff --git a/resources/extruded_boss.png b/resources/extruded_boss.png old mode 100644 new mode 100755 diff --git a/resources/extruded_cut.png b/resources/extruded_cut.png old mode 100644 new mode 100755 diff --git a/resources/face_hw.png b/resources/face_hw.png old mode 100644 new mode 100755 diff --git a/resources/face_vechw.png b/resources/face_vechw.png old mode 100644 new mode 100755 diff --git a/resources/feature_detect.png b/resources/feature_detect.png old mode 100644 new mode 100755 diff --git a/resources/field_edit.png b/resources/field_edit.png old mode 100644 new mode 100755 diff --git a/resources/field_new.png b/resources/field_new.png old mode 100644 new mode 100755 diff --git a/resources/fillet.png b/resources/fillet.png old mode 100644 new mode 100755 diff --git a/resources/fillet1d.png b/resources/fillet1d.png old mode 100644 new mode 100755 diff --git a/resources/filletall.png b/resources/filletall.png old mode 100644 new mode 100755 diff --git a/resources/filletedge.png b/resources/filletedge.png old mode 100644 new mode 100755 diff --git a/resources/filletface.png b/resources/filletface.png old mode 100644 new mode 100755 diff --git a/resources/filletwire.png b/resources/filletwire.png old mode 100644 new mode 100755 diff --git a/resources/filling.png b/resources/filling.png old mode 100644 new mode 100755 diff --git a/resources/folder.png b/resources/folder.png old mode 100644 new mode 100755 diff --git a/resources/free_faces.png b/resources/free_faces.png old mode 100644 new mode 100755 diff --git a/resources/fuse.png b/resources/fuse.png old mode 100644 new mode 100755 diff --git a/resources/fuse_collinear_edges.png b/resources/fuse_collinear_edges.png old mode 100644 new mode 100755 diff --git a/resources/geometry.png b/resources/geometry.png old mode 100644 new mode 100755 diff --git a/resources/get_non_blocks.png b/resources/get_non_blocks.png old mode 100644 new mode 100755 diff --git a/resources/glue.png b/resources/glue.png old mode 100644 new mode 100755 diff --git a/resources/glue2.png b/resources/glue2.png old mode 100644 new mode 100755 diff --git a/resources/group_edit.png b/resources/group_edit.png old mode 100644 new mode 100755 diff --git a/resources/group_new.png b/resources/group_new.png old mode 100644 new mode 100755 diff --git a/resources/import_picture.png b/resources/import_picture.png old mode 100644 new mode 100755 diff --git a/resources/importxao.png b/resources/importxao.png old mode 100644 new mode 100755 diff --git a/resources/interpol.png b/resources/interpol.png old mode 100644 new mode 100755 diff --git a/resources/isoline.png b/resources/isoline.png old mode 100644 new mode 100755 diff --git a/resources/isoline_v.png b/resources/isoline_v.png old mode 100644 new mode 100755 diff --git a/resources/limit_tolerance.png b/resources/limit_tolerance.png old mode 100644 new mode 100755 diff --git a/resources/line.png b/resources/line.png old mode 100644 new mode 100755 diff --git a/resources/line2points.png b/resources/line2points.png old mode 100644 new mode 100755 diff --git a/resources/managedimensions.png b/resources/managedimensions.png old mode 100644 new mode 100755 diff --git a/resources/marker.png b/resources/marker.png old mode 100644 new mode 100755 diff --git a/resources/marker2.png b/resources/marker2.png old mode 100644 new mode 100755 diff --git a/resources/marker3.png b/resources/marker3.png old mode 100644 new mode 100755 diff --git a/resources/mindist.png b/resources/mindist.png old mode 100644 new mode 100755 diff --git a/resources/mirrorAxe.png b/resources/mirrorAxe.png old mode 100644 new mode 100755 diff --git a/resources/mirrorPlane.png b/resources/mirrorPlane.png old mode 100644 new mode 100755 diff --git a/resources/mirrorPoint.png b/resources/mirrorPoint.png old mode 100644 new mode 100755 diff --git a/resources/multirotation.png b/resources/multirotation.png old mode 100644 new mode 100755 diff --git a/resources/multirotationdouble.png b/resources/multirotationdouble.png old mode 100644 new mode 100755 diff --git a/resources/multirotationsimple.png b/resources/multirotationsimple.png old mode 100644 new mode 100755 diff --git a/resources/multitranslation.png b/resources/multitranslation.png old mode 100644 new mode 100755 diff --git a/resources/multitranslationdouble.png b/resources/multitranslationdouble.png old mode 100644 new mode 100755 diff --git a/resources/multitranslationsimple.png b/resources/multitranslationsimple.png old mode 100644 new mode 100755 diff --git a/resources/normale.png b/resources/normale.png old mode 100644 new mode 100755 diff --git a/resources/offset.png b/resources/offset.png old mode 100644 new mode 100755 diff --git a/resources/partition.png b/resources/partition.png old mode 100644 new mode 100755 diff --git a/resources/partitionkeep.png b/resources/partitionkeep.png old mode 100644 new mode 100755 diff --git a/resources/partitionplane.png b/resources/partitionplane.png old mode 100644 new mode 100755 diff --git a/resources/pipebinormal.png b/resources/pipebinormal.png old mode 100644 new mode 100755 diff --git a/resources/pipesections.png b/resources/pipesections.png old mode 100644 new mode 100755 diff --git a/resources/pipetshape.png b/resources/pipetshape.png old mode 100644 new mode 100755 diff --git a/resources/pipetshape_import_icon.png b/resources/pipetshape_import_icon.png old mode 100644 new mode 100755 diff --git a/resources/pipetshape_section.png b/resources/pipetshape_section.png old mode 100644 new mode 100755 diff --git a/resources/plane.png b/resources/plane.png old mode 100644 new mode 100755 diff --git a/resources/plane3points.png b/resources/plane3points.png old mode 100644 new mode 100755 diff --git a/resources/planeWorking.png b/resources/planeWorking.png old mode 100644 new mode 100755 diff --git a/resources/planeface.png b/resources/planeface.png old mode 100644 new mode 100755 diff --git a/resources/planepointvector.png b/resources/planepointvector.png old mode 100644 new mode 100755 diff --git a/resources/planeworkingface.png b/resources/planeworkingface.png old mode 100644 new mode 100755 diff --git a/resources/planeworkingorigin.png b/resources/planeworkingorigin.png old mode 100644 new mode 100755 diff --git a/resources/planeworkingvector.png b/resources/planeworkingvector.png old mode 100644 new mode 100755 diff --git a/resources/point2.png b/resources/point2.png old mode 100644 new mode 100755 diff --git a/resources/point3.png b/resources/point3.png old mode 100644 new mode 100755 diff --git a/resources/point_coord.png b/resources/point_coord.png old mode 100644 new mode 100755 diff --git a/resources/polyline.png b/resources/polyline.png old mode 100644 new mode 100755 diff --git a/resources/position.png b/resources/position.png old mode 100644 new mode 100755 diff --git a/resources/position2.png b/resources/position2.png old mode 100644 new mode 100755 diff --git a/resources/position3.png b/resources/position3.png old mode 100644 new mode 100755 diff --git a/resources/prism.png b/resources/prism.png old mode 100644 new mode 100755 diff --git a/resources/prism2.png b/resources/prism2.png old mode 100644 new mode 100755 diff --git a/resources/prism3.png b/resources/prism3.png old mode 100644 new mode 100755 diff --git a/resources/projection.png b/resources/projection.png old mode 100644 new mode 100755 diff --git a/resources/propagate.png b/resources/propagate.png old mode 100644 new mode 100755 diff --git a/resources/rectangle.png b/resources/rectangle.png old mode 100644 new mode 100755 diff --git a/resources/redo.png b/resources/redo.png old mode 100644 new mode 100755 diff --git a/resources/remove_extra_edges.png b/resources/remove_extra_edges.png old mode 100644 new mode 100755 diff --git a/resources/remove_webs.png b/resources/remove_webs.png old mode 100644 new mode 100755 diff --git a/resources/revol.png b/resources/revol.png old mode 100644 new mode 100755 diff --git a/resources/rotate.png b/resources/rotate.png old mode 100644 new mode 100755 diff --git a/resources/scale.png b/resources/scale.png old mode 100644 new mode 100755 diff --git a/resources/scale_along_axes.png b/resources/scale_along_axes.png old mode 100644 new mode 100755 diff --git a/resources/section.png b/resources/section.png old mode 100644 new mode 100755 diff --git a/resources/select1.png b/resources/select1.png old mode 100644 new mode 100755 diff --git a/resources/sewing.png b/resources/sewing.png old mode 100644 new mode 100755 diff --git a/resources/shading_with_edges.png b/resources/shading_with_edges.png old mode 100644 new mode 100755 diff --git a/resources/shapeprocess.png b/resources/shapeprocess.png old mode 100644 new mode 100755 diff --git a/resources/shared_shapes.png b/resources/shared_shapes.png old mode 100644 new mode 100755 diff --git a/resources/sketch.png b/resources/sketch.png old mode 100644 new mode 100755 diff --git a/resources/smoothingsurface.png b/resources/smoothingsurface.png old mode 100644 new mode 100755 diff --git a/resources/smoothingsurface_lpoints.png b/resources/smoothingsurface_lpoints.png old mode 100644 new mode 100755 diff --git a/resources/sphere.png b/resources/sphere.png old mode 100644 new mode 100755 diff --git a/resources/spheredxyz.png b/resources/spheredxyz.png old mode 100644 new mode 100755 diff --git a/resources/spherepoint.png b/resources/spherepoint.png old mode 100644 new mode 100755 diff --git a/resources/spline.png b/resources/spline.png old mode 100644 new mode 100755 diff --git a/resources/suppressintwires.png b/resources/suppressintwires.png old mode 100644 new mode 100755 diff --git a/resources/supressface.png b/resources/supressface.png old mode 100644 new mode 100755 diff --git a/resources/tolerance.png b/resources/tolerance.png old mode 100644 new mode 100755 diff --git a/resources/torus.png b/resources/torus.png old mode 100644 new mode 100755 diff --git a/resources/toruspointvector.png b/resources/toruspointvector.png old mode 100644 new mode 100755 diff --git a/resources/translation.png b/resources/translation.png old mode 100644 new mode 100755 diff --git a/resources/translationDxyz.png b/resources/translationDxyz.png old mode 100644 new mode 100755 diff --git a/resources/translationPoints.png b/resources/translationPoints.png old mode 100644 new mode 100755 diff --git a/resources/translationVector.png b/resources/translationVector.png old mode 100644 new mode 100755 diff --git a/resources/tree_block.png b/resources/tree_block.png old mode 100644 new mode 100755 diff --git a/resources/tree_compound.png b/resources/tree_compound.png old mode 100644 new mode 100755 diff --git a/resources/tree_compsolid.png b/resources/tree_compsolid.png old mode 100644 new mode 100755 diff --git a/resources/tree_edge.png b/resources/tree_edge.png old mode 100644 new mode 100755 diff --git a/resources/tree_face.png b/resources/tree_face.png old mode 100644 new mode 100755 diff --git a/resources/tree_field_edge.png b/resources/tree_field_edge.png old mode 100644 new mode 100755 diff --git a/resources/tree_field_face.png b/resources/tree_field_face.png old mode 100644 new mode 100755 diff --git a/resources/tree_field_solid.png b/resources/tree_field_solid.png old mode 100644 new mode 100755 diff --git a/resources/tree_field_vertex.png b/resources/tree_field_vertex.png old mode 100644 new mode 100755 diff --git a/resources/tree_group_edge.png b/resources/tree_group_edge.png old mode 100644 new mode 100755 diff --git a/resources/tree_group_face.png b/resources/tree_group_face.png old mode 100644 new mode 100755 diff --git a/resources/tree_group_solid.png b/resources/tree_group_solid.png old mode 100644 new mode 100755 diff --git a/resources/tree_group_vertex.png b/resources/tree_group_vertex.png old mode 100644 new mode 100755 diff --git a/resources/tree_lcs.png b/resources/tree_lcs.png old mode 100644 new mode 100755 diff --git a/resources/tree_pipetshape.png b/resources/tree_pipetshape.png old mode 100644 new mode 100755 diff --git a/resources/tree_shape.png b/resources/tree_shape.png old mode 100644 new mode 100755 diff --git a/resources/tree_shell.png b/resources/tree_shell.png old mode 100644 new mode 100755 diff --git a/resources/tree_smoothingsurface.png b/resources/tree_smoothingsurface.png old mode 100644 new mode 100755 diff --git a/resources/tree_solid.png b/resources/tree_solid.png old mode 100644 new mode 100755 diff --git a/resources/tree_vertex.png b/resources/tree_vertex.png old mode 100644 new mode 100755 diff --git a/resources/tree_wire.png b/resources/tree_wire.png old mode 100644 new mode 100755 diff --git a/resources/undo.png b/resources/undo.png old mode 100644 new mode 100755 diff --git a/resources/union_faces.png b/resources/union_faces.png old mode 100644 new mode 100755 diff --git a/resources/vector.png b/resources/vector.png old mode 100644 new mode 100755 diff --git a/resources/vector2points.png b/resources/vector2points.png old mode 100644 new mode 100755 diff --git a/resources/vector_mode.png b/resources/vector_mode.png old mode 100644 new mode 100755 diff --git a/resources/vectordxyz.png b/resources/vectordxyz.png old mode 100644 new mode 100755 diff --git a/resources/whatis.png b/resources/whatis.png old mode 100644 new mode 100755 diff --git a/resources/wireframe.png b/resources/wireframe.png old mode 100644 new mode 100755 diff --git a/src/ARCHIMEDE/Archimede_VolumeSection.cxx b/src/ARCHIMEDE/Archimede_VolumeSection.cxx old mode 100644 new mode 100755 diff --git a/src/ARCHIMEDE/Archimede_VolumeSection.hxx b/src/ARCHIMEDE/Archimede_VolumeSection.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/AdvancedEngine.cxx b/src/AdvancedEngine/AdvancedEngine.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc b/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/AdvancedEngine_Types.hxx b/src/AdvancedEngine/AdvancedEngine_Types.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx b/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx b/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx b/src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx b/src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx b/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx b/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx b/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI.cxx b/src/AdvancedGUI/AdvancedGUI.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI.h b/src/AdvancedGUI/AdvancedGUI.h old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx b/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h b/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_images.ts b/src/AdvancedGUI/AdvancedGUI_images.ts old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_msg_en.ts b/src/AdvancedGUI/AdvancedGUI_msg_en.ts old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_msg_fr.ts b/src/AdvancedGUI/AdvancedGUI_msg_fr.ts old mode 100644 new mode 100755 diff --git a/src/AdvancedGUI/AdvancedGUI_msg_ja.ts b/src/AdvancedGUI/AdvancedGUI_msg_ja.ts old mode 100644 new mode 100755 diff --git a/src/BREPExport/BREPExport.cxx b/src/BREPExport/BREPExport.cxx old mode 100644 new mode 100755 diff --git a/src/BREPImport/BREPImport.cxx b/src/BREPImport/BREPImport.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI.cxx b/src/BasicGUI/BasicGUI.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI.h b/src/BasicGUI/BasicGUI.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_ArcDlg.cxx b/src/BasicGUI/BasicGUI_ArcDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_ArcDlg.h b/src/BasicGUI/BasicGUI_ArcDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_CircleDlg.cxx b/src/BasicGUI/BasicGUI_CircleDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_CircleDlg.h b/src/BasicGUI/BasicGUI_CircleDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_CurveDlg.cxx b/src/BasicGUI/BasicGUI_CurveDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_CurveDlg.h b/src/BasicGUI/BasicGUI_CurveDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_EllipseDlg.cxx b/src/BasicGUI/BasicGUI_EllipseDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_EllipseDlg.h b/src/BasicGUI/BasicGUI_EllipseDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_LineDlg.cxx b/src/BasicGUI/BasicGUI_LineDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_LineDlg.h b/src/BasicGUI/BasicGUI_LineDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_MarkerDlg.cxx b/src/BasicGUI/BasicGUI_MarkerDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_MarkerDlg.h b/src/BasicGUI/BasicGUI_MarkerDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_ParamCurveWidget.cxx b/src/BasicGUI/BasicGUI_ParamCurveWidget.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_ParamCurveWidget.h b/src/BasicGUI/BasicGUI_ParamCurveWidget.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_PlaneDlg.cxx b/src/BasicGUI/BasicGUI_PlaneDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_PlaneDlg.h b/src/BasicGUI/BasicGUI_PlaneDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_PointDlg.cxx b/src/BasicGUI/BasicGUI_PointDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_PointDlg.h b/src/BasicGUI/BasicGUI_PointDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_VectorDlg.cxx b/src/BasicGUI/BasicGUI_VectorDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_VectorDlg.h b/src/BasicGUI/BasicGUI_VectorDlg.h old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx b/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BasicGUI/BasicGUI_WorkingPlaneDlg.h b/src/BasicGUI/BasicGUI_WorkingPlaneDlg.h old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix.cxx b/src/BlockFix/BlockFix.cxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix.hxx b/src/BlockFix/BlockFix.hxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_BlockFixAPI.cxx b/src/BlockFix/BlockFix_BlockFixAPI.cxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_BlockFixAPI.hxx b/src/BlockFix/BlockFix_BlockFixAPI.hxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_CheckTool.cxx b/src/BlockFix/BlockFix_CheckTool.cxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_CheckTool.hxx b/src/BlockFix/BlockFix_CheckTool.hxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_SphereSpaceModifier.cxx b/src/BlockFix/BlockFix_SphereSpaceModifier.cxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_SphereSpaceModifier.hxx b/src/BlockFix/BlockFix_SphereSpaceModifier.hxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_UnionEdges.cxx b/src/BlockFix/BlockFix_UnionEdges.cxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_UnionEdges.hxx b/src/BlockFix/BlockFix_UnionEdges.hxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_UnionFaces.cxx b/src/BlockFix/BlockFix_UnionFaces.cxx old mode 100644 new mode 100755 diff --git a/src/BlockFix/BlockFix_UnionFaces.hxx b/src/BlockFix/BlockFix_UnionFaces.hxx old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI.cxx b/src/BlocksGUI/BlocksGUI.cxx old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI.h b/src/BlocksGUI/BlocksGUI.h old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_BlockDlg.cxx b/src/BlocksGUI/BlocksGUI_BlockDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_BlockDlg.h b/src/BlocksGUI/BlocksGUI_BlockDlg.h old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx b/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_ExplodeDlg.h b/src/BlocksGUI/BlocksGUI_ExplodeDlg.h old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_PropagateDlg.cxx b/src/BlocksGUI/BlocksGUI_PropagateDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_PropagateDlg.h b/src/BlocksGUI/BlocksGUI_PropagateDlg.h old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx b/src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_QuadFaceDlg.h b/src/BlocksGUI/BlocksGUI_QuadFaceDlg.h old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_TrsfDlg.cxx b/src/BlocksGUI/BlocksGUI_TrsfDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BlocksGUI/BlocksGUI_TrsfDlg.h b/src/BlocksGUI/BlocksGUI_TrsfDlg.h old mode 100644 new mode 100755 diff --git a/src/BooleanGUI/BooleanGUI.cxx b/src/BooleanGUI/BooleanGUI.cxx old mode 100644 new mode 100755 diff --git a/src/BooleanGUI/BooleanGUI.h b/src/BooleanGUI/BooleanGUI.h old mode 100644 new mode 100755 diff --git a/src/BooleanGUI/BooleanGUI_Dialog.cxx b/src/BooleanGUI/BooleanGUI_Dialog.cxx old mode 100644 new mode 100755 diff --git a/src/BooleanGUI/BooleanGUI_Dialog.h b/src/BooleanGUI/BooleanGUI_Dialog.h old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI.cxx b/src/BuildGUI/BuildGUI.cxx old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI.h b/src/BuildGUI/BuildGUI.h old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_CompoundDlg.cxx b/src/BuildGUI/BuildGUI_CompoundDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_CompoundDlg.h b/src/BuildGUI/BuildGUI_CompoundDlg.h old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_EdgeDlg.cxx b/src/BuildGUI/BuildGUI_EdgeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_EdgeDlg.h b/src/BuildGUI/BuildGUI_EdgeDlg.h old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_FaceDlg.cxx b/src/BuildGUI/BuildGUI_FaceDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_FaceDlg.h b/src/BuildGUI/BuildGUI_FaceDlg.h old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_ShellDlg.cxx b/src/BuildGUI/BuildGUI_ShellDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_ShellDlg.h b/src/BuildGUI/BuildGUI_ShellDlg.h old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_SolidDlg.cxx b/src/BuildGUI/BuildGUI_SolidDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_SolidDlg.h b/src/BuildGUI/BuildGUI_SolidDlg.h old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_WireDlg.cxx b/src/BuildGUI/BuildGUI_WireDlg.cxx old mode 100644 new mode 100755 diff --git a/src/BuildGUI/BuildGUI_WireDlg.h b/src/BuildGUI/BuildGUI_WireDlg.h old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CMakeLists.txt b/src/CurveCreator/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator.hxx b/src/CurveCreator/CurveCreator.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Curve.cxx b/src/CurveCreator/CurveCreator_Curve.cxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Curve.hxx b/src/CurveCreator/CurveCreator_Curve.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_CurveEditor.cxx b/src/CurveCreator/CurveCreator_CurveEditor.cxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_CurveEditor.hxx b/src/CurveCreator/CurveCreator_CurveEditor.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Diff.cxx b/src/CurveCreator/CurveCreator_Diff.cxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Diff.hxx b/src/CurveCreator/CurveCreator_Diff.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_ICurve.cxx b/src/CurveCreator/CurveCreator_ICurve.cxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_ICurve.hxx b/src/CurveCreator/CurveCreator_ICurve.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Macro.hxx b/src/CurveCreator/CurveCreator_Macro.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Operation.cxx b/src/CurveCreator/CurveCreator_Operation.cxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Operation.hxx b/src/CurveCreator/CurveCreator_Operation.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Section.hxx b/src/CurveCreator/CurveCreator_Section.hxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_UndoOptsDlg.cxx b/src/CurveCreator/CurveCreator_UndoOptsDlg.cxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_UndoOptsDlg.h b/src/CurveCreator/CurveCreator_UndoOptsDlg.h old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Widget.cxx b/src/CurveCreator/CurveCreator_Widget.cxx old mode 100644 new mode 100755 diff --git a/src/CurveCreator/CurveCreator_Widget.h b/src/CurveCreator/CurveCreator_Widget.h old mode 100644 new mode 100755 diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree.h b/src/DependencyTree/DependencyTree.h old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_Arrow.cxx b/src/DependencyTree/DependencyTree_Arrow.cxx old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_Arrow.h b/src/DependencyTree/DependencyTree_Arrow.h old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_Selector.cxx b/src/DependencyTree/DependencyTree_Selector.cxx old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_Selector.h b/src/DependencyTree/DependencyTree_Selector.h old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx old mode 100644 new mode 100755 diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/DependencyTree_msg_en.ts b/src/DependencyTree/resources/DependencyTree_msg_en.ts old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/DependencyTree_msg_fr.ts b/src/DependencyTree/resources/DependencyTree_msg_fr.ts old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/DependencyTree_msg_ja.ts b/src/DependencyTree/resources/DependencyTree_msg_ja.ts old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/tree_view_dump.png b/src/DependencyTree/resources/tree_view_dump.png old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/tree_view_fitall.png b/src/DependencyTree/resources/tree_view_fitall.png old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/tree_view_fitarea.png b/src/DependencyTree/resources/tree_view_fitarea.png old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/tree_view_glpan.png b/src/DependencyTree/resources/tree_view_glpan.png old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/tree_view_pan.png b/src/DependencyTree/resources/tree_view_pan.png old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/tree_view_reset.png b/src/DependencyTree/resources/tree_view_reset.png old mode 100644 new mode 100755 diff --git a/src/DependencyTree/resources/tree_view_zoom.png b/src/DependencyTree/resources/tree_view_zoom.png old mode 100644 new mode 100755 diff --git a/src/DisplayGUI/DisplayGUI.cxx b/src/DisplayGUI/DisplayGUI.cxx old mode 100644 new mode 100755 diff --git a/src/DisplayGUI/DisplayGUI.h b/src/DisplayGUI/DisplayGUI.h old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef.cxx b/src/DlgRef/DlgRef.cxx old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef.h b/src/DlgRef/DlgRef.h old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui b/src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui b/src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui b/src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel1Frame_QTD.ui b/src/DlgRef/DlgRef_1Sel1Frame_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui b/src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel2Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel2Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel3Check_QTD.ui b/src/DlgRef/DlgRef_1Sel3Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel3Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel3Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1SelExt_QTD.ui b/src/DlgRef/DlgRef_1SelExt_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Sel_QTD.ui b/src/DlgRef/DlgRef_1Sel_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_1Spin_QTD.ui b/src/DlgRef/DlgRef_1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui b/src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui b/src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel1List_QTD.ui b/src/DlgRef/DlgRef_2Sel1List_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui b/src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui b/src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel2List_QTD.ui b/src/DlgRef/DlgRef_2Sel2List_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel2Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui b/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel3Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel3Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2SelExt_QTD.ui b/src/DlgRef/DlgRef_2SelExt_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Sel_QTD.ui b/src/DlgRef/DlgRef_2Sel_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_2Spin_QTD.ui b/src/DlgRef/DlgRef_2Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Check_QTD.ui b/src/DlgRef/DlgRef_3Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Radio_QTD.ui b/src/DlgRef/DlgRef_3Radio_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel1Check_QTD.ui b/src/DlgRef/DlgRef_3Sel1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_3Sel1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui b/src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel2Spin_QTD.ui b/src/DlgRef/DlgRef_3Sel2Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui b/src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui b/src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Sel_QTD.ui b/src/DlgRef/DlgRef_3Sel_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_3Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_3Spin_QTD.ui b/src/DlgRef/DlgRef_3Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui b/src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_4Sel1List_QTD.ui b/src/DlgRef/DlgRef_4Sel1List_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui b/src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_4Spin_QTD.ui b/src/DlgRef/DlgRef_4Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_6Sel_QTD.ui b/src/DlgRef/DlgRef_6Sel_QTD.ui old mode 100644 new mode 100755 diff --git a/src/DlgRef/DlgRef_Skeleton_QTD.ui b/src/DlgRef/DlgRef_Skeleton_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI.h b/src/EntityGUI/EntityGUI.h old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui b/src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui b/src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_1Sel_QTD.ui b/src/EntityGUI/EntityGUI_1Sel_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_1Spin_QTD.ui b/src/EntityGUI/EntityGUI_1Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui b/src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_2Spin_QTD.ui b/src/EntityGUI/EntityGUI_2Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui b/src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_3Spin_QTD.ui b/src/EntityGUI/EntityGUI_3Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui b/src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_4Spin_QTD.ui b/src/EntityGUI/EntityGUI_4Spin_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Angles_QTD.ui b/src/EntityGUI/EntityGUI_Angles_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Controls_QTD.ui b/src/EntityGUI/EntityGUI_Controls_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Dir1_QTD.ui b/src/EntityGUI/EntityGUI_Dir1_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Dir2_QTD.ui b/src/EntityGUI/EntityGUI_Dir2_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.h b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.h old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_FieldDlg.cxx b/src/EntityGUI/EntityGUI_FieldDlg.cxx old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_FieldDlg.h b/src/EntityGUI/EntityGUI_FieldDlg.h old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_PictureImportDlg.cxx b/src/EntityGUI/EntityGUI_PictureImportDlg.cxx old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_PictureImportDlg.h b/src/EntityGUI/EntityGUI_PictureImportDlg.h old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Point_QTD.ui b/src/EntityGUI/EntityGUI_Point_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Skeleton_QTD.ui b/src/EntityGUI/EntityGUI_Skeleton_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_SketcherDlg.cxx b/src/EntityGUI/EntityGUI_SketcherDlg.cxx old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_SketcherDlg.h b/src/EntityGUI/EntityGUI_SketcherDlg.h old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_SubShapeDlg.cxx b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_SubShapeDlg.h b/src/EntityGUI/EntityGUI_SubShapeDlg.h old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Type_QTD.ui b/src/EntityGUI/EntityGUI_Type_QTD.ui old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Widgets.cxx b/src/EntityGUI/EntityGUI_Widgets.cxx old mode 100644 new mode 100755 diff --git a/src/EntityGUI/EntityGUI_Widgets.h b/src/EntityGUI/EntityGUI_Widgets.h old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Application.cxx b/src/GEOM/GEOM_Application.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Application.hxx b/src/GEOM/GEOM_Application.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Application.ixx b/src/GEOM/GEOM_Application.ixx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Application.jxx b/src/GEOM/GEOM_Application.jxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_BaseDriver.cxx b/src/GEOM/GEOM_BaseDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_BaseDriver.hxx b/src/GEOM/GEOM_BaseDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_BaseObject.cxx b/src/GEOM/GEOM_BaseObject.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_BaseObject.hxx b/src/GEOM/GEOM_BaseObject.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Engine.hxx b/src/GEOM/GEOM_Engine.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Field.cxx b/src/GEOM/GEOM_Field.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Field.hxx b/src/GEOM/GEOM_Field.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Function.cxx b/src/GEOM/GEOM_Function.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Function.hxx b/src/GEOM/GEOM_Function.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_IField.hxx b/src/GEOM/GEOM_IField.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_IOperations.cxx b/src/GEOM/GEOM_IOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_IOperations.hxx b/src/GEOM/GEOM_IOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_ISubShape.hxx b/src/GEOM/GEOM_ISubShape.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Object.cxx b/src/GEOM/GEOM_Object.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Object.hxx b/src/GEOM/GEOM_Object.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_PythonDump.cxx b/src/GEOM/GEOM_PythonDump.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_PythonDump.hxx b/src/GEOM/GEOM_PythonDump.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Solver.cxx b/src/GEOM/GEOM_Solver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_Solver.hxx b/src/GEOM/GEOM_Solver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_SubShapeDriver.cxx b/src/GEOM/GEOM_SubShapeDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM/GEOM_SubShapeDriver.hxx b/src/GEOM/GEOM_SubShapeDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/Handle_GEOM_Application.hxx b/src/GEOM/Handle_GEOM_Application.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/FILES b/src/GEOMAlgo/FILES old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Algo.hxx b/src/GEOMAlgo/GEOMAlgo_Algo.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx b/src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Clsf.cxx b/src/GEOMAlgo/GEOMAlgo_Clsf.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Clsf.hxx b/src/GEOMAlgo/GEOMAlgo_Clsf.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx b/src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx b/src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx b/src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx b/src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx b/src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx b/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx b/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx b/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx b/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx b/src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx b/src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer.hxx b/src/GEOMAlgo/GEOMAlgo_Gluer.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2.hxx b/src/GEOMAlgo/GEOMAlgo_Gluer2.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx b/src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx b/src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_HAlgo.cxx b/src/GEOMAlgo/GEOMAlgo_HAlgo.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_HAlgo.hxx b/src/GEOMAlgo/GEOMAlgo_HAlgo.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfIntegerShape.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfIntegerShape.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeState.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeState.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfName.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfName.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx b/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx b/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx b/src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx b/src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKey.hxx b/src/GEOMAlgo/GEOMAlgo_PassKey.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx b/src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx b/src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx b/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx b/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx b/src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx b/src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx b/src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx b/src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx b/src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx b/src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_Splitter.hxx b/src/GEOMAlgo/GEOMAlgo_Splitter.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_State.hxx b/src/GEOMAlgo/GEOMAlgo_State.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_StateCollector.cxx b/src/GEOMAlgo/GEOMAlgo_StateCollector.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_StateCollector.hxx b/src/GEOMAlgo/GEOMAlgo_StateCollector.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx b/src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx b/src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx b/src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx b/src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx b/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMAlgo/GEOMAlgo_WireSolid.hxx b/src/GEOMAlgo/GEOMAlgo_WireSolid.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOMBase.cxx b/src/GEOMBase/GEOMBase.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOMBase.h b/src/GEOMBase/GEOMBase.h old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOMBase_Skeleton.cxx b/src/GEOMBase/GEOMBase_Skeleton.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOMBase_Skeleton.h b/src/GEOMBase/GEOMBase_Skeleton.h old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOM_GenericObjPtr.cxx b/src/GEOMBase/GEOM_GenericObjPtr.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOM_GenericObjPtr.h b/src/GEOMBase/GEOM_GenericObjPtr.h old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOM_Operation.cxx b/src/GEOMBase/GEOM_Operation.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMBase/GEOM_Operation.h b/src/GEOMBase/GEOM_Operation.h old mode 100644 new mode 100755 diff --git a/src/GEOMClient/GEOM_Client.cxx b/src/GEOMClient/GEOM_Client.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMClient/GEOM_Client.hxx b/src/GEOMClient/GEOM_Client.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx b/src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_CompoundFilter.h b/src/GEOMFiltersSelection/GEOM_CompoundFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx b/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_EdgeFilter.h b/src/GEOMFiltersSelection/GEOM_EdgeFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx b/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_FaceFilter.h b/src/GEOMFiltersSelection/GEOM_FaceFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx b/src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_LogicalFilter.h b/src/GEOMFiltersSelection/GEOM_LogicalFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_OCCFilter.cxx b/src/GEOMFiltersSelection/GEOM_OCCFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_OCCFilter.h b/src/GEOMFiltersSelection/GEOM_OCCFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx b/src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_PreviewFilter.h b/src/GEOMFiltersSelection/GEOM_PreviewFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx b/src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_SelectionFilter.h b/src/GEOMFiltersSelection/GEOM_SelectionFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_TypeFilter.cxx b/src/GEOMFiltersSelection/GEOM_TypeFilter.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMFiltersSelection/GEOM_TypeFilter.h b/src/GEOMFiltersSelection/GEOM_TypeFilter.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI.cxx b/src/GEOMGUI/GEOMGUI.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI.h b/src/GEOMGUI/GEOMGUI.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI.qrc b/src/GEOMGUI/GEOMGUI.qrc old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx b/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_DimensionProperty.h b/src/GEOMGUI/GEOMGUI_DimensionProperty.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_OCCSelector.h b/src/GEOMGUI/GEOMGUI_OCCSelector.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_Selection.h b/src/GEOMGUI/GEOMGUI_Selection.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_XmlHandler.cxx b/src/GEOMGUI/GEOMGUI_XmlHandler.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMGUI_XmlHandler.h b/src/GEOMGUI/GEOMGUI_XmlHandler.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMPluginGUI.cxx b/src/GEOMGUI/GEOMPluginGUI.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOMPluginGUI.h b/src/GEOMGUI/GEOMPluginGUI.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOM_images.ts b/src/GEOMGUI/GEOM_images.ts old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GeometryGUI.h b/src/GEOMGUI/GeometryGUI.h old mode 100644 new mode 100755 diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ArcDriver.cxx b/src/GEOMImpl/GEOMImpl_ArcDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ArcDriver.hxx b/src/GEOMImpl/GEOMImpl_ArcDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx b/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx b/src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx b/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Block6Explorer.hxx b/src/GEOMImpl/GEOMImpl_Block6Explorer.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_BlockDriver.cxx b/src/GEOMImpl/GEOMImpl_BlockDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_BlockDriver.hxx b/src/GEOMImpl/GEOMImpl_BlockDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx b/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_BooleanDriver.hxx b/src/GEOMImpl/GEOMImpl_BooleanDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_BoxDriver.cxx b/src/GEOMImpl/GEOMImpl_BoxDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_BoxDriver.hxx b/src/GEOMImpl/GEOMImpl_BoxDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ChamferDriver.cxx b/src/GEOMImpl/GEOMImpl_ChamferDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ChamferDriver.hxx b/src/GEOMImpl/GEOMImpl_ChamferDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_CircleDriver.cxx b/src/GEOMImpl/GEOMImpl_CircleDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_CircleDriver.hxx b/src/GEOMImpl/GEOMImpl_CircleDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ConeDriver.cxx b/src/GEOMImpl/GEOMImpl_ConeDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ConeDriver.hxx b/src/GEOMImpl/GEOMImpl_ConeDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_CopyDriver.cxx b/src/GEOMImpl/GEOMImpl_CopyDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_CopyDriver.hxx b/src/GEOMImpl/GEOMImpl_CopyDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.hxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx b/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_EllipseDriver.hxx b/src/GEOMImpl/GEOMImpl_EllipseDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ExportDriver.cxx b/src/GEOMImpl/GEOMImpl_ExportDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ExportDriver.hxx b/src/GEOMImpl/GEOMImpl_ExportDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_FieldDriver.cxx b/src/GEOMImpl/GEOMImpl_FieldDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_FieldDriver.hxx b/src/GEOMImpl/GEOMImpl_FieldDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1d.cxx b/src/GEOMImpl/GEOMImpl_Fillet1d.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1d.hxx b/src/GEOMImpl/GEOMImpl_Fillet1d.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx b/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx b/src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_FilletDriver.cxx b/src/GEOMImpl/GEOMImpl_FilletDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_FilletDriver.hxx b/src/GEOMImpl/GEOMImpl_FilletDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_FillingDriver.hxx b/src/GEOMImpl/GEOMImpl_FillingDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Gen.cxx b/src/GEOMImpl/GEOMImpl_Gen.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_Gen.hxx b/src/GEOMImpl/GEOMImpl_Gen.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_GlueDriver.cxx b/src/GEOMImpl/GEOMImpl_GlueDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_GlueDriver.hxx b/src/GEOMImpl/GEOMImpl_GlueDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_HealingDriver.cxx b/src/GEOMImpl/GEOMImpl_HealingDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_HealingDriver.hxx b/src/GEOMImpl/GEOMImpl_HealingDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IArc.hxx b/src/GEOMImpl/GEOMImpl_IArc.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IArchimede.hxx b/src/GEOMImpl/GEOMImpl_IArchimede.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx b/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBasicOperations.hxx b/src/GEOMImpl/GEOMImpl_IBasicOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx b/src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBlocks.hxx b/src/GEOMImpl/GEOMImpl_IBlocks.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBoolean.hxx b/src/GEOMImpl/GEOMImpl_IBoolean.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx b/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx b/src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IBox.hxx b/src/GEOMImpl/GEOMImpl_IBox.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IChamfer.hxx b/src/GEOMImpl/GEOMImpl_IChamfer.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ICircle.hxx b/src/GEOMImpl/GEOMImpl_ICircle.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ICone.hxx b/src/GEOMImpl/GEOMImpl_ICone.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ICopy.hxx b/src/GEOMImpl/GEOMImpl_ICopy.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ICurveParametric.hxx b/src/GEOMImpl/GEOMImpl_ICurveParametric.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ICylinder.hxx b/src/GEOMImpl/GEOMImpl_ICylinder.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IEllipse.hxx b/src/GEOMImpl/GEOMImpl_IEllipse.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IFieldOperations.cxx b/src/GEOMImpl/GEOMImpl_IFieldOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IFieldOperations.hxx b/src/GEOMImpl/GEOMImpl_IFieldOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IFillet.hxx b/src/GEOMImpl/GEOMImpl_IFillet.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IFillet1d.hxx b/src/GEOMImpl/GEOMImpl_IFillet1d.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IFilling.hxx b/src/GEOMImpl/GEOMImpl_IFilling.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IGlue.hxx b/src/GEOMImpl/GEOMImpl_IGlue.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx b/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IGroupOperations.hxx b/src/GEOMImpl/GEOMImpl_IGroupOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IImportExport.hxx b/src/GEOMImpl/GEOMImpl_IImportExport.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx b/src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx b/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ILine.hxx b/src/GEOMImpl/GEOMImpl_ILine.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx b/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ILocalOperations.hxx b/src/GEOMImpl/GEOMImpl_ILocalOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IMarker.hxx b/src/GEOMImpl/GEOMImpl_IMarker.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IMeasure.hxx b/src/GEOMImpl/GEOMImpl_IMeasure.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IMirror.hxx b/src/GEOMImpl/GEOMImpl_IMirror.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IOffset.hxx b/src/GEOMImpl/GEOMImpl_IOffset.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPartition.hxx b/src/GEOMImpl/GEOMImpl_IPartition.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPipe.hxx b/src/GEOMImpl/GEOMImpl_IPipe.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx b/src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx b/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPipePath.hxx b/src/GEOMImpl/GEOMImpl_IPipePath.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx b/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPlane.hxx b/src/GEOMImpl/GEOMImpl_IPlane.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPolyline.hxx b/src/GEOMImpl/GEOMImpl_IPolyline.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPosition.hxx b/src/GEOMImpl/GEOMImpl_IPosition.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IPrism.hxx b/src/GEOMImpl/GEOMImpl_IPrism.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IRevolution.hxx b/src/GEOMImpl/GEOMImpl_IRevolution.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IRotate.hxx b/src/GEOMImpl/GEOMImpl_IRotate.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IScale.hxx b/src/GEOMImpl/GEOMImpl_IScale.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IShapes.hxx b/src/GEOMImpl/GEOMImpl_IShapes.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ISketcher.hxx b/src/GEOMImpl/GEOMImpl_ISketcher.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ISphere.hxx b/src/GEOMImpl/GEOMImpl_ISphere.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ISpline.hxx b/src/GEOMImpl/GEOMImpl_ISpline.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IThruSections.hxx b/src/GEOMImpl/GEOMImpl_IThruSections.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ITorus.hxx b/src/GEOMImpl/GEOMImpl_ITorus.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ITransformOperations.hxx b/src/GEOMImpl/GEOMImpl_ITransformOperations.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_IVector.hxx b/src/GEOMImpl/GEOMImpl_IVector.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.hxx b/src/GEOMImpl/GEOMImpl_ImportDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_LineDriver.cxx b/src/GEOMImpl/GEOMImpl_LineDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_LineDriver.hxx b/src/GEOMImpl/GEOMImpl_LineDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx b/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_MarkerDriver.hxx b/src/GEOMImpl/GEOMImpl_MarkerDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx b/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_MeasureDriver.hxx b/src/GEOMImpl/GEOMImpl_MeasureDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx b/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_MirrorDriver.hxx b/src/GEOMImpl/GEOMImpl_MirrorDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx b/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_OffsetDriver.hxx b/src/GEOMImpl/GEOMImpl_OffsetDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PartitionDriver.cxx b/src/GEOMImpl/GEOMImpl_PartitionDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PartitionDriver.hxx b/src/GEOMImpl/GEOMImpl_PartitionDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.hxx b/src/GEOMImpl/GEOMImpl_PipeDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx b/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PipePathDriver.hxx b/src/GEOMImpl/GEOMImpl_PipePathDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx b/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PlaneDriver.hxx b/src/GEOMImpl/GEOMImpl_PlaneDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PointDriver.cxx b/src/GEOMImpl/GEOMImpl_PointDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PointDriver.hxx b/src/GEOMImpl/GEOMImpl_PointDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx b/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx b/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PositionDriver.cxx b/src/GEOMImpl/GEOMImpl_PositionDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PositionDriver.hxx b/src/GEOMImpl/GEOMImpl_PositionDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PrismDriver.cxx b/src/GEOMImpl/GEOMImpl_PrismDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_PrismDriver.hxx b/src/GEOMImpl/GEOMImpl_PrismDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx b/src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx b/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx b/src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_RotateDriver.cxx b/src/GEOMImpl/GEOMImpl_RotateDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_RotateDriver.hxx b/src/GEOMImpl/GEOMImpl_RotateDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx b/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ScaleDriver.hxx b/src/GEOMImpl/GEOMImpl_ScaleDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.hxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx b/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_SketcherDriver.hxx b/src/GEOMImpl/GEOMImpl_SketcherDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_SphereDriver.cxx b/src/GEOMImpl/GEOMImpl_SphereDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_SphereDriver.hxx b/src/GEOMImpl/GEOMImpl_SphereDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_SplineDriver.cxx b/src/GEOMImpl/GEOMImpl_SplineDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_SplineDriver.hxx b/src/GEOMImpl/GEOMImpl_SplineDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx b/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx b/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_TorusDriver.cxx b/src/GEOMImpl/GEOMImpl_TorusDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_TorusDriver.hxx b/src/GEOMImpl/GEOMImpl_TorusDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_TranslateDriver.cxx b/src/GEOMImpl/GEOMImpl_TranslateDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_TranslateDriver.hxx b/src/GEOMImpl/GEOMImpl_TranslateDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_VectorDriver.cxx b/src/GEOMImpl/GEOMImpl_VectorDriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_VectorDriver.hxx b/src/GEOMImpl/GEOMImpl_VectorDriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_XAODriver.cxx b/src/GEOMImpl/GEOMImpl_XAODriver.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMImpl/GEOMImpl_XAODriver.hxx b/src/GEOMImpl/GEOMImpl_XAODriver.hxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h old mode 100644 new mode 100755 diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx old mode 100644 new mode 100755 diff --git a/src/GEOMUtils/GEOMUtils.hxx b/src/GEOMUtils/GEOMUtils.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_BaseObject_i.cc b/src/GEOM_I/GEOM_BaseObject_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_BaseObject_i.hh b/src/GEOM_I/GEOM_BaseObject_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_DumpPython.cc b/src/GEOM_I/GEOM_DumpPython.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_Field_i.cc b/src/GEOM_I/GEOM_Field_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_Field_i.hh b/src/GEOM_I/GEOM_Field_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IBasicOperations_i.cc b/src/GEOM_I/GEOM_IBasicOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IBasicOperations_i.hh b/src/GEOM_I/GEOM_IBasicOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IBlocksOperations_i.hh b/src/GEOM_I/GEOM_IBlocksOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IBooleanOperations_i.cc b/src/GEOM_I/GEOM_IBooleanOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IBooleanOperations_i.hh b/src/GEOM_I/GEOM_IBooleanOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.cc b/src/GEOM_I/GEOM_ICurvesOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.hh b/src/GEOM_I/GEOM_ICurvesOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IFieldOperations_i.cc b/src/GEOM_I/GEOM_IFieldOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IFieldOperations_i.hh b/src/GEOM_I/GEOM_IFieldOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IGroupOperations_i.cc b/src/GEOM_I/GEOM_IGroupOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IGroupOperations_i.hh b/src/GEOM_I/GEOM_IGroupOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.cc b/src/GEOM_I/GEOM_IHealingOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.hh b/src/GEOM_I/GEOM_IHealingOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.cc b/src/GEOM_I/GEOM_IInsertOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.hh b/src/GEOM_I/GEOM_IInsertOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_ILocalOperations_i.cc b/src/GEOM_I/GEOM_ILocalOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_ILocalOperations_i.hh b/src/GEOM_I/GEOM_ILocalOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IMeasureOperations_i.cc b/src/GEOM_I/GEOM_IMeasureOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IMeasureOperations_i.hh b/src/GEOM_I/GEOM_IMeasureOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IOperations_i.cc b/src/GEOM_I/GEOM_IOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IOperations_i.hh b/src/GEOM_I/GEOM_IOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.cc b/src/GEOM_I/GEOM_IShapesOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.hh b/src/GEOM_I/GEOM_IShapesOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_ITransformOperations_i.cc b/src/GEOM_I/GEOM_ITransformOperations_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_ITransformOperations_i.hh b/src/GEOM_I/GEOM_ITransformOperations_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_Object_i.cc b/src/GEOM_I/GEOM_Object_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_Object_i.hh b/src/GEOM_I/GEOM_Object_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I/GEOM_wrap.hxx b/src/GEOM_I/GEOM_wrap.hxx old mode 100644 new mode 100755 diff --git a/src/GEOM_I_Superv/GEOM_List_i.hh b/src/GEOM_I_Superv/GEOM_List_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc old mode 100644 new mode 100755 diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh old mode 100644 new mode 100755 diff --git a/src/GEOM_PY/__init__.py b/src/GEOM_PY/__init__.py old mode 100644 new mode 100755 diff --git a/src/GEOM_PY/geomtools.py b/src/GEOM_PY/geomtools.py old mode 100644 new mode 100755 diff --git a/src/GEOM_PY/sketcher.py b/src/GEOM_PY/sketcher.py old mode 100644 new mode 100755 diff --git a/src/GEOM_PY/structelem/__init__.py b/src/GEOM_PY/structelem/__init__.py old mode 100644 new mode 100755 diff --git a/src/GEOM_PY/structelem/orientation.py b/src/GEOM_PY/structelem/orientation.py old mode 100644 new mode 100755 diff --git a/src/GEOM_PY/structelem/parts.py b/src/GEOM_PY/structelem/parts.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_ObjectInfo.py b/src/GEOM_SWIG/GEOM_ObjectInfo.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_Sketcher.py b/src/GEOM_SWIG/GEOM_Sketcher.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_Spanner.py b/src/GEOM_SWIG/GEOM_Spanner.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_TestField.py b/src/GEOM_SWIG/GEOM_TestField.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_TestHealing.py b/src/GEOM_SWIG/GEOM_TestHealing.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_TestMeasures.py b/src/GEOM_SWIG/GEOM_TestMeasures.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_TestOthers.py b/src/GEOM_SWIG/GEOM_TestOthers.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_blocks.py b/src/GEOM_SWIG/GEOM_blocks.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_example.py b/src/GEOM_SWIG/GEOM_example.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_example2.py b/src/GEOM_SWIG/GEOM_example2.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_example3.py b/src/GEOM_SWIG/GEOM_example3.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_example5.py b/src/GEOM_SWIG/GEOM_example5.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_example7.py b/src/GEOM_SWIG/GEOM_example7.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_moteur.py b/src/GEOM_SWIG/GEOM_moteur.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_shared_modules.py b/src/GEOM_SWIG/GEOM_shared_modules.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/GEOM_usinggeom.py b/src/GEOM_SWIG/GEOM_usinggeom.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/__init__.py b/src/GEOM_SWIG/__init__.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/geompy.py b/src/GEOM_SWIG/geompy.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG/gsketcher.py b/src/GEOM_SWIG/gsketcher.py old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h old mode 100644 new mode 100755 diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI.cxx b/src/GenerationGUI/GenerationGUI.cxx old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI.h b/src/GenerationGUI/GenerationGUI.h old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.h b/src/GenerationGUI/GenerationGUI_FillingDlg.h old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.h b/src/GenerationGUI/GenerationGUI_PipeDlg.h old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_PipePathDlg.cxx b/src/GenerationGUI/GenerationGUI_PipePathDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_PipePathDlg.h b/src/GenerationGUI/GenerationGUI_PipePathDlg.h old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_PrismDlg.cxx b/src/GenerationGUI/GenerationGUI_PrismDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_PrismDlg.h b/src/GenerationGUI/GenerationGUI_PrismDlg.h old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_RevolDlg.cxx b/src/GenerationGUI/GenerationGUI_RevolDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GenerationGUI/GenerationGUI_RevolDlg.h b/src/GenerationGUI/GenerationGUI_RevolDlg.h old mode 100644 new mode 100755 diff --git a/src/GroupGUI/GroupGUI.cxx b/src/GroupGUI/GroupGUI.cxx old mode 100644 new mode 100755 diff --git a/src/GroupGUI/GroupGUI.h b/src/GroupGUI/GroupGUI.h old mode 100644 new mode 100755 diff --git a/src/GroupGUI/GroupGUI_BooleanDlg.cxx b/src/GroupGUI/GroupGUI_BooleanDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GroupGUI/GroupGUI_BooleanDlg.h b/src/GroupGUI/GroupGUI_BooleanDlg.h old mode 100644 new mode 100755 diff --git a/src/GroupGUI/GroupGUI_GroupDlg.cxx b/src/GroupGUI/GroupGUI_GroupDlg.cxx old mode 100644 new mode 100755 diff --git a/src/GroupGUI/GroupGUI_GroupDlg.h b/src/GroupGUI/GroupGUI_GroupDlg.h old mode 100644 new mode 100755 diff --git a/src/IGESExport/IGESExport.cxx b/src/IGESExport/IGESExport.cxx old mode 100644 new mode 100755 diff --git a/src/IGESImport/IGESImport.cxx b/src/IGESImport/IGESImport.cxx old mode 100644 new mode 100755 diff --git a/src/ImportExportGUI/CMakeLists.txt b/src/ImportExportGUI/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/src/ImportExportGUI/ImportExportGUI.cxx b/src/ImportExportGUI/ImportExportGUI.cxx old mode 100644 new mode 100755 diff --git a/src/ImportExportGUI/ImportExportGUI.h b/src/ImportExportGUI/ImportExportGUI.h old mode 100644 new mode 100755 diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx old mode 100644 new mode 100755 diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h old mode 100644 new mode 100755 diff --git a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx b/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx old mode 100644 new mode 100755 diff --git a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h b/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h old mode 100644 new mode 100755 diff --git a/src/Material/Material.h b/src/Material/Material.h old mode 100644 new mode 100755 diff --git a/src/Material/Material_Model.cxx b/src/Material/Material_Model.cxx old mode 100644 new mode 100755 diff --git a/src/Material/Material_Model.h b/src/Material/Material_Model.h old mode 100644 new mode 100755 diff --git a/src/Material/Material_ResourceMgr.cxx b/src/Material/Material_ResourceMgr.cxx old mode 100644 new mode 100755 diff --git a/src/Material/Material_ResourceMgr.h b/src/Material/Material_ResourceMgr.h old mode 100644 new mode 100755 diff --git a/src/Material/resources/SalomeMaterial.xml b/src/Material/resources/SalomeMaterial.xml old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI.cxx b/src/MeasureGUI/MeasureGUI.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI.h b/src/MeasureGUI/MeasureGUI.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1TextView1Check_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1TextView1Check_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1TextView2ListBox_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1TextView2ListBox_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_1TreeWidget_4Button_QTD.ui b/src/MeasureGUI/MeasureGUI_1TreeWidget_4Button_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui b/src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui b/src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.h b/src/MeasureGUI/MeasureGUI_AngleDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx b/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_BndBoxDlg.h b/src/MeasureGUI/MeasureGUI_BndBoxDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx b/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CenterMassDlg.h b/src/MeasureGUI/MeasureGUI_CenterMassDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.h b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CheckShapeDlg.h b/src/MeasureGUI/MeasureGUI_CheckShapeDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx b/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h b/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DimensionFilter.cxx b/src/MeasureGUI/MeasureGUI_DimensionFilter.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DimensionFilter.h b/src/MeasureGUI/MeasureGUI_DimensionFilter.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx b/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DimensionInteractor.h b/src/MeasureGUI/MeasureGUI_DimensionInteractor.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx b/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_DistanceDlg.h b/src/MeasureGUI/MeasureGUI_DistanceDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx b/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h b/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.h b/src/MeasureGUI/MeasureGUI_InertiaDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx b/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_NormaleDlg.h b/src/MeasureGUI/MeasureGUI_NormaleDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_PointDlg.cxx b/src/MeasureGUI/MeasureGUI_PointDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_PointDlg.h b/src/MeasureGUI/MeasureGUI_PointDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.h b/src/MeasureGUI/MeasureGUI_PropertiesDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_Skeleton.cxx b/src/MeasureGUI/MeasureGUI_Skeleton.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_Skeleton.h b/src/MeasureGUI/MeasureGUI_Skeleton.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui b/src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx b/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_WhatisDlg.h b/src/MeasureGUI/MeasureGUI_WhatisDlg.h old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_Widgets.cxx b/src/MeasureGUI/MeasureGUI_Widgets.cxx old mode 100644 new mode 100755 diff --git a/src/MeasureGUI/MeasureGUI_Widgets.h b/src/MeasureGUI/MeasureGUI_Widgets.h old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_AISShape.ixx b/src/OBJECT/GEOM_AISShape.ixx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_AISShape.jxx b/src/OBJECT/GEOM_AISShape.jxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_AISVector.cxx b/src/OBJECT/GEOM_AISVector.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_AISVector.hxx b/src/OBJECT/GEOM_AISVector.hxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_Constants.cxx b/src/OBJECT/GEOM_Constants.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_Constants.h b/src/OBJECT/GEOM_Constants.h old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_InteractiveObject.cxx b/src/OBJECT/GEOM_InteractiveObject.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_InteractiveObject.hxx b/src/OBJECT/GEOM_InteractiveObject.hxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_InteractiveObject.ixx b/src/OBJECT/GEOM_InteractiveObject.ixx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_InteractiveObject.jxx b/src/OBJECT/GEOM_InteractiveObject.jxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_OCCReader.cxx b/src/OBJECT/GEOM_OCCReader.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_OCCReader.h b/src/OBJECT/GEOM_OCCReader.h old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_PainterPolyDataMapper.cxx b/src/OBJECT/GEOM_PainterPolyDataMapper.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_PainterPolyDataMapper.h b/src/OBJECT/GEOM_PainterPolyDataMapper.h old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_VTKTrihedron.cxx b/src/OBJECT/GEOM_VTKTrihedron.cxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/GEOM_VTKTrihedron.hxx b/src/OBJECT/GEOM_VTKTrihedron.hxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/Handle_GEOM_AISShape.hxx b/src/OBJECT/Handle_GEOM_AISShape.hxx old mode 100644 new mode 100755 diff --git a/src/OBJECT/Handle_GEOM_InteractiveObject.hxx b/src/OBJECT/Handle_GEOM_InteractiveObject.hxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI.cxx b/src/OperationGUI/OperationGUI.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI.h b/src/OperationGUI/OperationGUI.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ArchimedeDlg.cxx b/src/OperationGUI/OperationGUI_ArchimedeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ArchimedeDlg.h b/src/OperationGUI/OperationGUI_ArchimedeDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ChamferDlg.cxx b/src/OperationGUI/OperationGUI_ChamferDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ChamferDlg.h b/src/OperationGUI/OperationGUI_ChamferDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ClippingDlg.cxx b/src/OperationGUI/OperationGUI_ClippingDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ClippingDlg.h b/src/OperationGUI/OperationGUI_ClippingDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.cxx b/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h b/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx b/src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_Fillet1d2dDlg.h b/src/OperationGUI/OperationGUI_Fillet1d2dDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_FilletDlg.cxx b/src/OperationGUI/OperationGUI_FilletDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_FilletDlg.h b/src/OperationGUI/OperationGUI_FilletDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.cxx b/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h b/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_GetSharedShapesDlg.cxx b/src/OperationGUI/OperationGUI_GetSharedShapesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_GetSharedShapesDlg.h b/src/OperationGUI/OperationGUI_GetSharedShapesDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_MaterialDlg.cxx b/src/OperationGUI/OperationGUI_MaterialDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_MaterialDlg.h b/src/OperationGUI/OperationGUI_MaterialDlg.h old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_PartitionDlg.cxx b/src/OperationGUI/OperationGUI_PartitionDlg.cxx old mode 100644 new mode 100755 diff --git a/src/OperationGUI/OperationGUI_PartitionDlg.h b/src/OperationGUI/OperationGUI_PartitionDlg.h old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI.cxx b/src/PrimitiveGUI/PrimitiveGUI.cxx old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI.h b/src/PrimitiveGUI/PrimitiveGUI.h old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h b/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h b/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx old mode 100644 new mode 100755 diff --git a/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h b/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI.cxx b/src/RepairGUI/RepairGUI.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI.h b/src/RepairGUI/RepairGUI.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx b/src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_ChangeOrientationDlg.h b/src/RepairGUI/RepairGUI_ChangeOrientationDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_CloseContourDlg.cxx b/src/RepairGUI/RepairGUI_CloseContourDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_CloseContourDlg.h b/src/RepairGUI/RepairGUI_CloseContourDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx b/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_DivideEdgeDlg.h b/src/RepairGUI/RepairGUI_DivideEdgeDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_FreeBoundDlg.cxx b/src/RepairGUI/RepairGUI_FreeBoundDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_FreeBoundDlg.h b/src/RepairGUI/RepairGUI_FreeBoundDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx b/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_FreeFacesDlg.h b/src/RepairGUI/RepairGUI_FreeFacesDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx b/src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_FuseEdgesDlg.h b/src/RepairGUI/RepairGUI_FuseEdgesDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_GlueDlg.cxx b/src/RepairGUI/RepairGUI_GlueDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_GlueDlg.h b/src/RepairGUI/RepairGUI_GlueDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx b/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_LimitToleranceDlg.h b/src/RepairGUI/RepairGUI_LimitToleranceDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx b/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h b/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx b/src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_RemoveHolesDlg.h b/src/RepairGUI/RepairGUI_RemoveHolesDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx b/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h b/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_SewingDlg.cxx b/src/RepairGUI/RepairGUI_SewingDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_SewingDlg.h b/src/RepairGUI/RepairGUI_SewingDlg.h old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx old mode 100644 new mode 100755 diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.h b/src/RepairGUI/RepairGUI_SuppressFacesDlg.h old mode 100644 new mode 100755 diff --git a/src/SKETCHER/Sketcher_Profile.cxx b/src/SKETCHER/Sketcher_Profile.cxx old mode 100644 new mode 100755 diff --git a/src/SKETCHER/Sketcher_Profile.hxx b/src/SKETCHER/Sketcher_Profile.hxx old mode 100644 new mode 100755 diff --git a/src/STEPExport/STEPExport.cxx b/src/STEPExport/STEPExport.cxx old mode 100644 new mode 100755 diff --git a/src/STEPImport/STEPImport.cxx b/src/STEPImport/STEPImport.cxx old mode 100644 new mode 100755 diff --git a/src/STLExport/STLExport.cxx b/src/STLExport/STLExport.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_ChangeOrientation.cxx b/src/ShHealOper/ShHealOper_ChangeOrientation.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_ChangeOrientation.hxx b/src/ShHealOper/ShHealOper_ChangeOrientation.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_CloseContour.cxx b/src/ShHealOper/ShHealOper_CloseContour.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_CloseContour.hxx b/src/ShHealOper/ShHealOper_CloseContour.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_EdgeDivide.cxx b/src/ShHealOper/ShHealOper_EdgeDivide.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_EdgeDivide.hxx b/src/ShHealOper/ShHealOper_EdgeDivide.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_FillHoles.cxx b/src/ShHealOper/ShHealOper_FillHoles.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_FillHoles.hxx b/src/ShHealOper/ShHealOper_FillHoles.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_RemoveFace.cxx b/src/ShHealOper/ShHealOper_RemoveFace.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_RemoveFace.hxx b/src/ShHealOper/ShHealOper_RemoveFace.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_RemoveInternalWires.cxx b/src/ShHealOper/ShHealOper_RemoveInternalWires.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_RemoveInternalWires.hxx b/src/ShHealOper/ShHealOper_RemoveInternalWires.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_Sewing.cxx b/src/ShHealOper/ShHealOper_Sewing.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_Sewing.hxx b/src/ShHealOper/ShHealOper_Sewing.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_ShapeProcess.cxx b/src/ShHealOper/ShHealOper_ShapeProcess.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_ShapeProcess.hxx b/src/ShHealOper/ShHealOper_ShapeProcess.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_SpiltCurve2d.hxx b/src/ShHealOper/ShHealOper_SpiltCurve2d.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_SplitCurve2d.cxx b/src/ShHealOper/ShHealOper_SplitCurve2d.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_SplitCurve2d.hxx b/src/ShHealOper/ShHealOper_SplitCurve2d.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_SplitCurve3d.cxx b/src/ShHealOper/ShHealOper_SplitCurve3d.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_SplitCurve3d.hxx b/src/ShHealOper/ShHealOper_SplitCurve3d.hxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_Tool.cxx b/src/ShHealOper/ShHealOper_Tool.cxx old mode 100644 new mode 100755 diff --git a/src/ShHealOper/ShHealOper_Tool.hxx b/src/ShHealOper/ShHealOper_Tool.hxx old mode 100644 new mode 100755 diff --git a/src/ShapeRecognition/ShapeRec_FeatureDetector.cxx b/src/ShapeRecognition/ShapeRec_FeatureDetector.cxx old mode 100644 new mode 100755 diff --git a/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx b/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI.cxx b/src/TransformationGUI/TransformationGUI.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI.h b/src/TransformationGUI/TransformationGUI.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_MirrorDlg.cxx b/src/TransformationGUI/TransformationGUI_MirrorDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_MirrorDlg.h b/src/TransformationGUI/TransformationGUI_MirrorDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_MultiRotationDlg.cxx b/src/TransformationGUI/TransformationGUI_MultiRotationDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_MultiRotationDlg.h b/src/TransformationGUI/TransformationGUI_MultiRotationDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx b/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.h b/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_OffsetDlg.cxx b/src/TransformationGUI/TransformationGUI_OffsetDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_OffsetDlg.h b/src/TransformationGUI/TransformationGUI_OffsetDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_PositionDlg.cxx b/src/TransformationGUI/TransformationGUI_PositionDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_PositionDlg.h b/src/TransformationGUI/TransformationGUI_PositionDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx b/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_ProjectionDlg.h b/src/TransformationGUI/TransformationGUI_ProjectionDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_RotationDlg.cxx b/src/TransformationGUI/TransformationGUI_RotationDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_RotationDlg.h b/src/TransformationGUI/TransformationGUI_RotationDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_ScaleDlg.cxx b/src/TransformationGUI/TransformationGUI_ScaleDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_ScaleDlg.h b/src/TransformationGUI/TransformationGUI_ScaleDlg.h old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_TranslationDlg.cxx b/src/TransformationGUI/TransformationGUI_TranslationDlg.cxx old mode 100644 new mode 100755 diff --git a/src/TransformationGUI/TransformationGUI_TranslationDlg.h b/src/TransformationGUI/TransformationGUI_TranslationDlg.h old mode 100644 new mode 100755 diff --git a/src/VTKExport/VTKExport.cxx b/src/VTKExport/VTKExport.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/CMakeLists.txt b/src/XAO/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_BooleanField.cxx b/src/XAO/XAO_BooleanField.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_BooleanField.hxx b/src/XAO/XAO_BooleanField.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_BooleanStep.cxx b/src/XAO/XAO_BooleanStep.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_BooleanStep.hxx b/src/XAO/XAO_BooleanStep.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_BrepGeometry.cxx b/src/XAO/XAO_BrepGeometry.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_BrepGeometry.hxx b/src/XAO/XAO_BrepGeometry.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_DoubleField.cxx b/src/XAO/XAO_DoubleField.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_DoubleField.hxx b/src/XAO/XAO_DoubleField.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_DoubleStep.cxx b/src/XAO/XAO_DoubleStep.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_DoubleStep.hxx b/src/XAO/XAO_DoubleStep.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Exception.hxx b/src/XAO/XAO_Exception.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Field.cxx b/src/XAO/XAO_Field.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Field.hxx b/src/XAO/XAO_Field.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_GeometricElement.cxx b/src/XAO/XAO_GeometricElement.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_GeometricElement.hxx b/src/XAO/XAO_GeometricElement.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Geometry.cxx b/src/XAO/XAO_Geometry.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Geometry.hxx b/src/XAO/XAO_Geometry.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Group.cxx b/src/XAO/XAO_Group.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Group.hxx b/src/XAO/XAO_Group.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_IntegerField.cxx b/src/XAO/XAO_IntegerField.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_IntegerField.hxx b/src/XAO/XAO_IntegerField.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_IntegerStep.cxx b/src/XAO/XAO_IntegerStep.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_IntegerStep.hxx b/src/XAO/XAO_IntegerStep.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Step.cxx b/src/XAO/XAO_Step.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Step.hxx b/src/XAO/XAO_Step.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_StringField.cxx b/src/XAO/XAO_StringField.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_StringField.hxx b/src/XAO/XAO_StringField.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_StringStep.cxx b/src/XAO/XAO_StringStep.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_StringStep.hxx b/src/XAO/XAO_StringStep.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Xao.cxx b/src/XAO/XAO_Xao.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_Xao.hxx b/src/XAO/XAO_Xao.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_XaoExporter.cxx b/src/XAO/XAO_XaoExporter.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_XaoExporter.hxx b/src/XAO/XAO_XaoExporter.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_XaoUtils.cxx b/src/XAO/XAO_XaoUtils.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/XAO_XaoUtils.hxx b/src/XAO/XAO_XaoUtils.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/BrepGeometryTest.cxx b/src/XAO/tests/BrepGeometryTest.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/BrepGeometryTest.hxx b/src/XAO/tests/BrepGeometryTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/CMakeLists.txt b/src/XAO/tests/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/src/XAO/tests/FieldTest.cxx b/src/XAO/tests/FieldTest.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/FieldTest.hxx b/src/XAO/tests/FieldTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/GeometryTest.cxx b/src/XAO/tests/GeometryTest.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/GeometryTest.hxx b/src/XAO/tests/GeometryTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/GroupTest.cxx b/src/XAO/tests/GroupTest.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/GroupTest.hxx b/src/XAO/tests/GroupTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/ImportExportTest.cxx b/src/XAO/tests/ImportExportTest.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/ImportExportTest.hxx b/src/XAO/tests/ImportExportTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/MainTest.hxx b/src/XAO/tests/MainTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/TestUtils.hxx b/src/XAO/tests/TestUtils.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/XAOTests.cxx b/src/XAO/tests/XAOTests.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/XaoTest.cxx b/src/XAO/tests/XaoTest.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/XaoTest.hxx b/src/XAO/tests/XaoTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/XaoUtilsTest.cxx b/src/XAO/tests/XaoUtilsTest.cxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/XaoUtilsTest.hxx b/src/XAO/tests/XaoUtilsTest.hxx old mode 100644 new mode 100755 diff --git a/src/XAO/tests/data/Box_1.brep b/src/XAO/tests/data/Box_1.brep old mode 100644 new mode 100755 diff --git a/src/XAO/tests/data/Box_2.brep b/src/XAO/tests/data/Box_2.brep old mode 100644 new mode 100755 diff --git a/src/XAO/tests/data/Cut_2.brep b/src/XAO/tests/data/Cut_2.brep old mode 100644 new mode 100755 diff --git a/src/XAO/tests/data/test.xao b/src/XAO/tests/data/test.xao old mode 100644 new mode 100755 diff --git a/src/XAO_Swig/CMakeLists.txt b/src/XAO_Swig/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/src/XAO_Swig/xao.i b/src/XAO_Swig/xao.i old mode 100644 new mode 100755 From 7961b83044d771b15dbbe57ed71c20e67efec023 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 7 Aug 2014 13:58:48 +0400 Subject: [PATCH 072/118] Revert "Synchronize adm files" This reverts commit 3cd92817cb4c5ee5911d6f40fe977b5e57b980e1. --- AUTHORS | 0 COPYING | 0 ChangeLog | 0 GEOM_version.h.in | 0 INSTALL | 0 LICENCE | 0 NEWS | 0 README | 0 SalomeGEOMConfig.cmake.in | 0 adm_local/cmake_files/FindGEOM.cmake | 0 adm_local/cmake_files/FindOpenCV.cmake | 0 adm_local/cmake_files/FindSalomeGEOM.cmake | 0 adm_local/cmake_files/FindSalomeOpenCV.cmake | 0 adm_local/unix/config_files/check_GEOM.m4 | 0 adm_local/unix/config_files/check_OpenCV.m4 | 0 bin/addvars2notebook_GEOM.py | 0 bin/geom_setenv.py | 0 doc/salome/examples/3dsketcher.py | 0 doc/salome/examples/CMakeLists.txt | 0 doc/salome/examples/GEOM_box.py | 0 doc/salome/examples/advanced_geom_objs_ex01.py | 0 doc/salome/examples/advanced_geom_objs_ex02.py | 0 doc/salome/examples/advanced_geom_objs_ex03.py | 0 .../examples/advanced_geom_objs_smoothingsurface.py | 0 doc/salome/examples/angle.py | 0 doc/salome/examples/arranging_study_objects.py | 0 doc/salome/examples/basic_geom_objs_ex01.py | 0 doc/salome/examples/basic_geom_objs_ex02.py | 0 doc/salome/examples/basic_geom_objs_ex03.py | 0 doc/salome/examples/basic_geom_objs_ex04.py | 0 doc/salome/examples/basic_geom_objs_ex05.py | 0 doc/salome/examples/basic_geom_objs_ex06.py | 0 doc/salome/examples/basic_geom_objs_ex07.py | 0 doc/salome/examples/basic_geom_objs_ex08.py | 0 doc/salome/examples/basic_geom_objs_ex09.py | 0 doc/salome/examples/basic_operations_ex01.py | 0 doc/salome/examples/basic_operations_ex02.py | 0 doc/salome/examples/basic_operations_ex03.py | 0 doc/salome/examples/basic_properties.py | 0 doc/salome/examples/blocks_operations_ex01.py | 0 doc/salome/examples/blocks_operations_ex02.py | 0 doc/salome/examples/blocks_operations_ex03.py | 0 doc/salome/examples/boolean_operations_ex01.py | 0 doc/salome/examples/boolean_operations_ex02.py | 0 doc/salome/examples/boolean_operations_ex03.py | 0 doc/salome/examples/boolean_operations_ex04.py | 0 doc/salome/examples/bounding_box.py | 0 doc/salome/examples/building_by_blocks_ex01.py | 0 doc/salome/examples/building_by_blocks_ex02.py | 0 doc/salome/examples/center_of_mass.py | 0 doc/salome/examples/check_compound_of_blocks.py | 0 doc/salome/examples/check_self_intersections.py | 0 doc/salome/examples/check_shape.py | 0 doc/salome/examples/complex_objs_ex01.py | 0 doc/salome/examples/complex_objs_ex02.py | 0 doc/salome/examples/complex_objs_ex03.py | 0 doc/salome/examples/complex_objs_ex04.py | 0 doc/salome/examples/complex_objs_ex05.py | 0 doc/salome/examples/complex_objs_ex06.py | 0 doc/salome/examples/complex_objs_ex07.py | 0 doc/salome/examples/complex_objs_ex08.py | 0 doc/salome/examples/complex_objs_ex09.py | 0 doc/salome/examples/complex_objs_ex10.py | 0 doc/salome/examples/free_boundaries.py | 0 doc/salome/examples/free_faces.py | 0 doc/salome/examples/get_non_blocks.py | 0 doc/salome/examples/import_export.py | 0 doc/salome/examples/inertia.py | 0 doc/salome/examples/min_distance.py | 0 doc/salome/examples/normal_face.py | 0 doc/salome/examples/notebook_geom.py | 0 doc/salome/examples/point_coordinates.py | 0 doc/salome/examples/primitives_ex01.py | 0 doc/salome/examples/primitives_ex02.py | 0 doc/salome/examples/primitives_ex03.py | 0 doc/salome/examples/primitives_ex04.py | 0 doc/salome/examples/primitives_ex05.py | 0 doc/salome/examples/primitives_ex06.py | 0 doc/salome/examples/primitives_ex07.py | 0 doc/salome/examples/repairing_operations_ex01.py | 0 doc/salome/examples/repairing_operations_ex02.py | 0 doc/salome/examples/repairing_operations_ex03.py | 0 doc/salome/examples/repairing_operations_ex04.py | 0 doc/salome/examples/repairing_operations_ex05.py | 0 doc/salome/examples/repairing_operations_ex06.py | 0 doc/salome/examples/repairing_operations_ex07.py | 0 doc/salome/examples/repairing_operations_ex08.py | 0 doc/salome/examples/repairing_operations_ex09.py | 0 doc/salome/examples/repairing_operations_ex10.py | 0 doc/salome/examples/repairing_operations_ex11.py | 0 doc/salome/examples/repairing_operations_ex12.py | 0 doc/salome/examples/sketcher.py | 0 doc/salome/examples/tolerance.py | 0 doc/salome/examples/topological_geom_objs_ex01.py | 0 doc/salome/examples/topological_geom_objs_ex02.py | 0 doc/salome/examples/topological_geom_objs_ex03.py | 0 doc/salome/examples/topological_geom_objs_ex04.py | 0 doc/salome/examples/topological_geom_objs_ex05.py | 0 doc/salome/examples/topological_geom_objs_ex06.py | 0 .../examples/transformation_operations_ex01.py | 0 .../examples/transformation_operations_ex02.py | 0 .../examples/transformation_operations_ex03.py | 0 .../examples/transformation_operations_ex04.py | 0 .../examples/transformation_operations_ex05.py | 0 .../examples/transformation_operations_ex06.py | 0 .../examples/transformation_operations_ex07.py | 0 .../examples/transformation_operations_ex08.py | 0 .../examples/transformation_operations_ex09.py | 0 .../examples/transformation_operations_ex10.py | 0 .../examples/transformation_operations_ex11.py | 0 .../examples/transformation_operations_ex12.py | 0 .../examples/transformation_operations_ex13.py | 0 doc/salome/examples/viewing_geom_objs_ex01.py | 0 doc/salome/examples/viewing_geom_objs_ex02.py | 0 doc/salome/examples/viewing_geom_objs_ex03.py | 0 doc/salome/examples/viewing_geom_objs_ex04.py | 0 doc/salome/examples/whatis.py | 0 doc/salome/examples/working_with_groups_ex01.py | 0 doc/salome/examples/working_with_groups_ex02.py | 0 doc/salome/examples/working_with_groups_ex03.py | 0 doc/salome/examples/working_with_groups_ex04.py | 0 doc/salome/examples/working_with_groups_ex05.py | 0 doc/salome/examples/working_with_groups_ex06.py | 0 doc/salome/gui/GEOM/CMakeLists.txt | 0 doc/salome/gui/GEOM/images/2dsketch1.png | Bin doc/salome/gui/GEOM/images/2dsketch10.png | Bin doc/salome/gui/GEOM/images/2dsketch12.png | Bin doc/salome/gui/GEOM/images/2dsketch2.png | Bin doc/salome/gui/GEOM/images/2dsketch3.png | Bin doc/salome/gui/GEOM/images/2dsketch4.png | Bin doc/salome/gui/GEOM/images/2dsketch5.png | Bin doc/salome/gui/GEOM/images/2dsketch6.png | Bin doc/salome/gui/GEOM/images/2dsketch7.png | Bin doc/salome/gui/GEOM/images/2dsketch8.png | Bin doc/salome/gui/GEOM/images/2dsketch9.png | Bin doc/salome/gui/GEOM/images/3dsketch4.png | Bin doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png | Bin doc/salome/gui/GEOM/images/3dsketch_angle_abs.png | Bin .../gui/GEOM/images/3dsketch_angle_height_rel.png | Bin doc/salome/gui/GEOM/images/3dsketch_angle_rel.png | Bin doc/salome/gui/GEOM/images/3dsketch_dlg.png | Bin doc/salome/gui/GEOM/images/add_dimension.png | Bin doc/salome/gui/GEOM/images/arc2.png | Bin doc/salome/gui/GEOM/images/arc_icon.png | Bin doc/salome/gui/GEOM/images/arcofellipse1.png | Bin doc/salome/gui/GEOM/images/arcofellipse2.png | Bin doc/salome/gui/GEOM/images/arcsn1.png | Bin doc/salome/gui/GEOM/images/arcsn2.png | Bin doc/salome/gui/GEOM/images/arranging1.png | Bin doc/salome/gui/GEOM/images/arranging2.png | Bin doc/salome/gui/GEOM/images/arranging3.png | Bin doc/salome/gui/GEOM/images/change_direction.png | Bin doc/salome/gui/GEOM/images/compound2.png | Bin .../gui/GEOM/images/contour_detect_snapshot.png | Bin .../gui/GEOM/images/contour_detection_example2.png | Bin doc/salome/gui/GEOM/images/creation_op_info.png | Bin doc/salome/gui/GEOM/images/curve1.png | Bin doc/salome/gui/GEOM/images/curve2.png | Bin doc/salome/gui/GEOM/images/curve3.png | Bin doc/salome/gui/GEOM/images/curve4.png | Bin doc/salome/gui/GEOM/images/deflection_0001.png | Bin doc/salome/gui/GEOM/images/deflection_001.png | Bin doc/salome/gui/GEOM/images/dialog.png | Bin doc/salome/gui/GEOM/images/dimensions_preview.png | Bin doc/salome/gui/GEOM/images/disk1.png | Bin doc/salome/gui/GEOM/images/disk2.png | Bin doc/salome/gui/GEOM/images/disk3.png | Bin doc/salome/gui/GEOM/images/disks.png | Bin doc/salome/gui/GEOM/images/divided_disk.png | Bin .../gui/GEOM/images/divided_disk_PntVecR_dlg.png | Bin doc/salome/gui/GEOM/images/divided_disk_dlg.png | Bin doc/salome/gui/GEOM/images/dividedcylinder.png | Bin doc/salome/gui/GEOM/images/dividedcylinder_dlg.png | Bin doc/salome/gui/GEOM/images/draft.png | Bin doc/salome/gui/GEOM/images/eclipse1.png | Bin doc/salome/gui/GEOM/images/eclipse2.png | Bin doc/salome/gui/GEOM/images/edge1.png | Bin doc/salome/gui/GEOM/images/edge2.png | Bin doc/salome/gui/GEOM/images/edge3.png | Bin doc/salome/gui/GEOM/images/exportxao_dlg.png | Bin doc/salome/gui/GEOM/images/extruded_boss.png | Bin doc/salome/gui/GEOM/images/extruded_boss_dlg.png | Bin .../gui/GEOM/images/extruded_boss_example.png | Bin doc/salome/gui/GEOM/images/extruded_cut.png | Bin doc/salome/gui/GEOM/images/extruded_cut_dlg.png | Bin doc/salome/gui/GEOM/images/extruded_cut_example.png | Bin doc/salome/gui/GEOM/images/extrusion3.png | Bin doc/salome/gui/GEOM/images/extrusion4.png | Bin doc/salome/gui/GEOM/images/face1.png | Bin doc/salome/gui/GEOM/images/face2.png | Bin doc/salome/gui/GEOM/images/faces.png | Bin doc/salome/gui/GEOM/images/feature_detect.png | Bin .../gui/GEOM/images/feature_detection_dlg.png | Bin .../gui/GEOM/images/feature_detection_dlg2.png | Bin .../gui/GEOM/images/feature_detection_dlg3.png | Bin doc/salome/gui/GEOM/images/fillet1d_1.png | Bin doc/salome/gui/GEOM/images/fillet1d_2.png | Bin doc/salome/gui/GEOM/images/front1.png | Bin doc/salome/gui/GEOM/images/front2.png | Bin doc/salome/gui/GEOM/images/fuse.png | Bin doc/salome/gui/GEOM/images/fuse_collinear_edges.png | Bin doc/salome/gui/GEOM/images/fused_wire.png | Bin doc/salome/gui/GEOM/images/geom_sort.png | Bin doc/salome/gui/GEOM/images/geomimport_reopen.png | Bin .../gui/GEOM/images/get_in_place_lost_part.png | Bin doc/salome/gui/GEOM/images/glue1.png | Bin doc/salome/gui/GEOM/images/glue2.png | Bin doc/salome/gui/GEOM/images/glue3.png | Bin doc/salome/gui/GEOM/images/glue4.png | Bin doc/salome/gui/GEOM/images/glue5.png | Bin doc/salome/gui/GEOM/images/glue7.png | Bin doc/salome/gui/GEOM/images/glue8.png | Bin doc/salome/gui/GEOM/images/glue_faces3.png | Bin doc/salome/gui/GEOM/images/groups_cut_dlg.png | Bin doc/salome/gui/GEOM/images/groups_intersect_dlg.png | Bin doc/salome/gui/GEOM/images/groups_union_dlg.png | Bin doc/salome/gui/GEOM/images/iges_unit.png | Bin doc/salome/gui/GEOM/images/image1.png | Bin doc/salome/gui/GEOM/images/image109.png | Bin doc/salome/gui/GEOM/images/image110.png | Bin doc/salome/gui/GEOM/images/image112.png | Bin doc/salome/gui/GEOM/images/image113.png | Bin doc/salome/gui/GEOM/images/image145.png | Bin doc/salome/gui/GEOM/images/image15.png | Bin doc/salome/gui/GEOM/images/image154.png | Bin doc/salome/gui/GEOM/images/image156.png | Bin doc/salome/gui/GEOM/images/image16.png | Bin doc/salome/gui/GEOM/images/image160.png | Bin doc/salome/gui/GEOM/images/image167.png | Bin doc/salome/gui/GEOM/images/image168.png | Bin doc/salome/gui/GEOM/images/image180.png | Bin doc/salome/gui/GEOM/images/image181.png | Bin doc/salome/gui/GEOM/images/image185.png | Bin doc/salome/gui/GEOM/images/image193.png | Bin doc/salome/gui/GEOM/images/image204.png | Bin doc/salome/gui/GEOM/images/image206.png | Bin doc/salome/gui/GEOM/images/image21.png | Bin doc/salome/gui/GEOM/images/image22.png | Bin doc/salome/gui/GEOM/images/image3.png | Bin doc/salome/gui/GEOM/images/image30.png | Bin doc/salome/gui/GEOM/images/image34.png | Bin doc/salome/gui/GEOM/images/image36.png | Bin doc/salome/gui/GEOM/images/image38.png | Bin doc/salome/gui/GEOM/images/image4.png | Bin doc/salome/gui/GEOM/images/image40.png | Bin doc/salome/gui/GEOM/images/image47.png | Bin doc/salome/gui/GEOM/images/import_picture.png | Bin .../gui/GEOM/images/interact_with_dimensions.png | Bin doc/salome/gui/GEOM/images/isoline1.png | Bin doc/salome/gui/GEOM/images/isoline2.png | Bin doc/salome/gui/GEOM/images/isos.png | Bin doc/salome/gui/GEOM/images/limit_tolerance_dlg.png | Bin doc/salome/gui/GEOM/images/line_icon.png | Bin doc/salome/gui/GEOM/images/manage_dimensions.png | Bin doc/salome/gui/GEOM/images/material.png | Bin doc/salome/gui/GEOM/images/material_OCC.png | Bin doc/salome/gui/GEOM/images/material_VTK.png | Bin doc/salome/gui/GEOM/images/measures11.png | Bin doc/salome/gui/GEOM/images/measures2.png | Bin doc/salome/gui/GEOM/images/measures2a.png | Bin doc/salome/gui/GEOM/images/measures8a.png | Bin doc/salome/gui/GEOM/images/neo-deflection.png | Bin doc/salome/gui/GEOM/images/ob_popup_menu.png | Bin doc/salome/gui/GEOM/images/partition.png | Bin doc/salome/gui/GEOM/images/partition1.png | Bin doc/salome/gui/GEOM/images/partition2.png | Bin doc/salome/gui/GEOM/images/partitionsn3.png | Bin doc/salome/gui/GEOM/images/picture_import_dlg.png | Bin doc/salome/gui/GEOM/images/pipe3.png | Bin doc/salome/gui/GEOM/images/pipe3_init.png | Bin doc/salome/gui/GEOM/images/pipe3_res.png | Bin doc/salome/gui/GEOM/images/pipe_path.png | Bin doc/salome/gui/GEOM/images/pipe_path_dlg.png | Bin doc/salome/gui/GEOM/images/pipebinormalsn.png | Bin doc/salome/gui/GEOM/images/pipetshape.png | Bin doc/salome/gui/GEOM/images/pipetshape1.png | Bin doc/salome/gui/GEOM/images/pipetshape2.png | Bin doc/salome/gui/GEOM/images/pipetshape3.png | Bin doc/salome/gui/GEOM/images/pipetshape4.png | Bin doc/salome/gui/GEOM/images/pipetshape5.png | Bin doc/salome/gui/GEOM/images/pipetshape_dlg.png | Bin doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png | Bin doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png | Bin doc/salome/gui/GEOM/images/pipetshapechamfer.png | Bin doc/salome/gui/GEOM/images/pipetshapefillet.png | Bin doc/salome/gui/GEOM/images/pipetshapethr.png | Bin doc/salome/gui/GEOM/images/plane4.png | Bin doc/salome/gui/GEOM/images/plane5.png | Bin doc/salome/gui/GEOM/images/point3_2.png | Bin doc/salome/gui/GEOM/images/point3_3.png | Bin doc/salome/gui/GEOM/images/point5_2.png | Bin doc/salome/gui/GEOM/images/pref15.png | Bin doc/salome/gui/GEOM/images/pref_dep_tree.png | Bin doc/salome/gui/GEOM/images/prism_with_thickness.png | Bin doc/salome/gui/GEOM/images/projection_dlg.png | Bin doc/salome/gui/GEOM/images/projection_preview.png | Bin doc/salome/gui/GEOM/images/rectangle_icon.png | Bin doc/salome/gui/GEOM/images/reduce_study_dialog.png | Bin doc/salome/gui/GEOM/images/remove_extra_edges.png | Bin doc/salome/gui/GEOM/images/remove_extra_edges1.png | Bin doc/salome/gui/GEOM/images/remove_extra_edges2.png | Bin doc/salome/gui/GEOM/images/remove_webs.png | Bin doc/salome/gui/GEOM/images/repair10a.png | Bin doc/salome/gui/GEOM/images/repair9a.png | Bin doc/salome/gui/GEOM/images/restore-ss-OB-cut.png | Bin doc/salome/gui/GEOM/images/restore-ss-OB.png | Bin doc/salome/gui/GEOM/images/restore-ss-cut.png | Bin doc/salome/gui/GEOM/images/restore-ss-dialog.png | Bin .../gui/GEOM/images/restore-ss-viewer-after.png | Bin .../gui/GEOM/images/restore-ss-viewer-before.png | Bin .../gui/GEOM/images/restore-ss-viewer-cut.png | Bin .../GEOM/images/salome-geom-structuralelements.png | Bin doc/salome/gui/GEOM/images/sat_named_shapes.png | Bin doc/salome/gui/GEOM/images/scale_transformsn3.png | Bin doc/salome/gui/GEOM/images/scale_transformsn4.png | Bin doc/salome/gui/GEOM/images/shared_shapes.png | Bin doc/salome/gui/GEOM/images/show_predef_material.png | Bin doc/salome/gui/GEOM/images/sketch.png | Bin doc/salome/gui/GEOM/images/sketch_example.png | Bin doc/salome/gui/GEOM/images/sketcher_dlg.png | Bin doc/salome/gui/GEOM/images/sketcher_dlg2.png | Bin doc/salome/gui/GEOM/images/smoothingsurface.png | Bin doc/salome/gui/GEOM/images/smoothingsurface_dlg.png | Bin doc/salome/gui/GEOM/images/transformation10a.png | Bin doc/salome/gui/GEOM/images/transformation12.png | Bin doc/salome/gui/GEOM/images/transformation13.png | Bin doc/salome/gui/GEOM/images/transformation14.png | Bin doc/salome/gui/GEOM/images/transformation4a.png | Bin doc/salome/gui/GEOM/images/translation3.png | Bin doc/salome/gui/GEOM/images/tree_bidir_link.png | Bin doc/salome/gui/GEOM/images/tree_button_update.png | Bin doc/salome/gui/GEOM/images/tree_cycldep_link.png | Bin doc/salome/gui/GEOM/images/tree_default_node.png | Bin doc/salome/gui/GEOM/images/tree_disp_ascendants.png | Bin .../gui/GEOM/images/tree_disp_descendants.png | Bin doc/salome/gui/GEOM/images/tree_example.png | Bin doc/salome/gui/GEOM/images/tree_hierarchy_type.png | Bin .../gui/GEOM/images/tree_highlighted_node.png | Bin doc/salome/gui/GEOM/images/tree_main_node.png | Bin doc/salome/gui/GEOM/images/tree_move_nodes.png | Bin doc/salome/gui/GEOM/images/tree_popup_menu1.png | Bin doc/salome/gui/GEOM/images/tree_popup_menu2.png | Bin doc/salome/gui/GEOM/images/tree_selected_node.png | Bin doc/salome/gui/GEOM/images/tree_selfdep_link.png | Bin doc/salome/gui/GEOM/images/tree_tool_bar.png | Bin doc/salome/gui/GEOM/images/tree_unidir_link.png | Bin .../gui/GEOM/images/tree_unpublished_node.png | Bin doc/salome/gui/GEOM/images/tree_view_dump.png | Bin doc/salome/gui/GEOM/images/tree_view_fitall.png | Bin doc/salome/gui/GEOM/images/tree_view_fitarea.png | Bin doc/salome/gui/GEOM/images/tree_view_glpan.png | Bin doc/salome/gui/GEOM/images/tree_view_pan.png | Bin doc/salome/gui/GEOM/images/tree_view_zoom.png | Bin doc/salome/gui/GEOM/images/union_faces.png | Bin doc/salome/gui/GEOM/images/union_faces1.png | Bin doc/salome/gui/GEOM/images/union_faces2.png | Bin doc/salome/gui/GEOM/images/using_notebook_geom.png | Bin doc/salome/gui/GEOM/images/vectors_mode.png | Bin doc/salome/gui/GEOM/images/wire_before_fuse.png | Bin .../gui/GEOM/input/add_point_on_edge_operation.doc | 0 doc/salome/gui/GEOM/input/angle.doc | 0 doc/salome/gui/GEOM/input/api_documentation.doc | 0 doc/salome/gui/GEOM/input/archimede.doc | 0 .../gui/GEOM/input/arranging_study_objects_page.doc | 0 doc/salome/gui/GEOM/input/basic_prop.doc | 0 doc/salome/gui/GEOM/input/blocks_operations.doc | 0 doc/salome/gui/GEOM/input/boudaries.doc | 0 doc/salome/gui/GEOM/input/bounding_box.doc | 0 doc/salome/gui/GEOM/input/bring_to_front.doc | 0 doc/salome/gui/GEOM/input/building_by_blocks.doc | 0 doc/salome/gui/GEOM/input/center_mass.doc | 0 doc/salome/gui/GEOM/input/chamfer_operation.doc | 0 .../gui/GEOM/input/change_orientation_operation.doc | 0 .../gui/GEOM/input/check_compound_of_blocks.doc | 0 .../gui/GEOM/input/check_self_intersections.doc | 0 doc/salome/gui/GEOM/input/check_shape.doc | 0 .../gui/GEOM/input/close_contour_operation.doc | 0 doc/salome/gui/GEOM/input/color.doc | 0 doc/salome/gui/GEOM/input/common_operation.doc | 0 doc/salome/gui/GEOM/input/creating_arc.doc | 0 doc/salome/gui/GEOM/input/creating_basic_go.doc | 0 doc/salome/gui/GEOM/input/creating_box.doc | 0 doc/salome/gui/GEOM/input/creating_circle.doc | 0 doc/salome/gui/GEOM/input/creating_complex_obj.doc | 0 doc/salome/gui/GEOM/input/creating_compound.doc | 0 doc/salome/gui/GEOM/input/creating_cone.doc | 0 doc/salome/gui/GEOM/input/creating_curve.doc | 0 doc/salome/gui/GEOM/input/creating_cylinder.doc | 0 .../gui/GEOM/input/creating_dividedcylinder.doc | 0 doc/salome/gui/GEOM/input/creating_divideddisk.doc | 0 doc/salome/gui/GEOM/input/creating_edge.doc | 0 doc/salome/gui/GEOM/input/creating_ellipse.doc | 0 doc/salome/gui/GEOM/input/creating_explode.doc | 0 doc/salome/gui/GEOM/input/creating_extrusion.doc | 0 .../gui/GEOM/input/creating_extrusion_alongpath.doc | 0 doc/salome/gui/GEOM/input/creating_face.doc | 0 doc/salome/gui/GEOM/input/creating_filling.doc | 0 doc/salome/gui/GEOM/input/creating_geom_objects.doc | 0 .../gui/GEOM/input/creating_hexaedral_solid.doc | 0 doc/salome/gui/GEOM/input/creating_isoline.doc | 0 doc/salome/gui/GEOM/input/creating_lcs.doc | 0 doc/salome/gui/GEOM/input/creating_line.doc | 0 doc/salome/gui/GEOM/input/creating_pipe_path.doc | 0 doc/salome/gui/GEOM/input/creating_pipetshape.doc | 0 doc/salome/gui/GEOM/input/creating_plane.doc | 0 doc/salome/gui/GEOM/input/creating_point.doc | 0 doc/salome/gui/GEOM/input/creating_primitives.doc | 0 .../gui/GEOM/input/creating_quadrangle_face.doc | 0 doc/salome/gui/GEOM/input/creating_revolution.doc | 0 doc/salome/gui/GEOM/input/creating_shell.doc | 0 doc/salome/gui/GEOM/input/creating_sketcher.doc | 0 .../gui/GEOM/input/creating_smoothingsurface.doc | 0 doc/salome/gui/GEOM/input/creating_solid.doc | 0 doc/salome/gui/GEOM/input/creating_sphere.doc | 0 .../gui/GEOM/input/creating_topological_obj.doc | 0 doc/salome/gui/GEOM/input/creating_torus.doc | 0 doc/salome/gui/GEOM/input/creating_vector.doc | 0 doc/salome/gui/GEOM/input/creating_wire.doc | 0 doc/salome/gui/GEOM/input/cut_operation.doc | 0 doc/salome/gui/GEOM/input/deflection.doc | 0 doc/salome/gui/GEOM/input/dependency_tree.doc | 0 doc/salome/gui/GEOM/input/display_mode.doc | 0 .../gui/GEOM/input/explode_on_blocks_operation.doc | 0 .../gui/GEOM/input/extruded_boss_operation.doc | 0 .../gui/GEOM/input/extruded_cut_operation.doc | 0 doc/salome/gui/GEOM/input/faq.doc | 0 doc/salome/gui/GEOM/input/features.doc | 0 doc/salome/gui/GEOM/input/fillet1d_operation.doc | 0 doc/salome/gui/GEOM/input/fillet_operation.doc | 0 doc/salome/gui/GEOM/input/free_faces.doc | 0 doc/salome/gui/GEOM/input/fuse_edges_operation.doc | 0 doc/salome/gui/GEOM/input/fuse_operation.doc | 0 .../GEOM/input/geometrical_object_properties.doc | 0 doc/salome/gui/GEOM/input/geometry_preferences.doc | 0 doc/salome/gui/GEOM/input/geompy.doc | 0 doc/salome/gui/GEOM/input/geompy_migration.doc | 0 doc/salome/gui/GEOM/input/get_non_blocks.doc | 0 doc/salome/gui/GEOM/input/glue_edges_operation.doc | 0 doc/salome/gui/GEOM/input/glue_faces_operation.doc | 0 doc/salome/gui/GEOM/input/import_export.doc | 0 doc/salome/gui/GEOM/input/importing_picture.doc | 0 doc/salome/gui/GEOM/input/index.doc | 0 doc/salome/gui/GEOM/input/inertia.doc | 0 doc/salome/gui/GEOM/input/isolines.doc | 0 .../gui/GEOM/input/limit_tolerance_operation.doc | 0 doc/salome/gui/GEOM/input/line_width.doc | 0 doc/salome/gui/GEOM/input/managing_dimensions.doc | 0 doc/salome/gui/GEOM/input/manipulate_object.doc | 0 doc/salome/gui/GEOM/input/material.doc | 0 doc/salome/gui/GEOM/input/min_distance.doc | 0 doc/salome/gui/GEOM/input/mirror_operation.doc | 0 .../gui/GEOM/input/modify_location_operation.doc | 0 .../gui/GEOM/input/multi_rotation_operation.doc | 0 .../GEOM/input/multi_transformation_operation.doc | 0 .../gui/GEOM/input/multi_translation_operation.doc | 0 doc/salome/gui/GEOM/input/normal.doc | 0 doc/salome/gui/GEOM/input/offset_operation.doc | 0 doc/salome/gui/GEOM/input/partition_explanation.doc | 0 doc/salome/gui/GEOM/input/pictures.doc | 0 doc/salome/gui/GEOM/input/point_coordinates.doc | 0 doc/salome/gui/GEOM/input/point_marker.doc | 0 doc/salome/gui/GEOM/input/projection_operation.doc | 0 doc/salome/gui/GEOM/input/propagate_operation.doc | 0 doc/salome/gui/GEOM/input/python_interface.doc | 0 doc/salome/gui/GEOM/input/pythonutils.doc | 0 doc/salome/gui/GEOM/input/reduce_study.doc | 0 doc/salome/gui/GEOM/input/related_docs.doc | 0 .../gui/GEOM/input/remove_extra_edges_operation.doc | 0 doc/salome/gui/GEOM/input/remove_webs_operation.doc | 0 doc/salome/gui/GEOM/input/repairing_operations.doc | 0 .../GEOM/input/restore_presentation_parameters.doc | 0 doc/salome/gui/GEOM/input/rotation_operation.doc | 0 doc/salome/gui/GEOM/input/scale_operation.doc | 0 doc/salome/gui/GEOM/input/section_operation.doc | 0 doc/salome/gui/GEOM/input/sewing_operation.doc | 0 .../gui/GEOM/input/shape_processing_operation.doc | 0 doc/salome/gui/GEOM/input/shape_recognition.doc | 0 .../gui/GEOM/input/struct_elem_visualisation.doc | 0 .../gui/GEOM/input/suppress_faces_operation.doc | 0 .../gui/GEOM/input/suppress_holes_operation.doc | 0 .../input/suppress_internal_wires_operation.doc | 0 doc/salome/gui/GEOM/input/tolerance.doc | 0 .../gui/GEOM/input/transformation_operations.doc | 0 .../gui/GEOM/input/transforming_geom_objs.doc | 0 doc/salome/gui/GEOM/input/translation_operation.doc | 0 doc/salome/gui/GEOM/input/transparency.doc | 0 .../gui/GEOM/input/tui_advanced_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_angle.doc | 0 .../gui/GEOM/input/tui_arranging_study_objects.doc | 0 .../input/tui_auto_completion_documentation.doc | 0 doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_basic_operations.doc | 0 doc/salome/gui/GEOM/input/tui_basic_properties.doc | 0 doc/salome/gui/GEOM/input/tui_blocks_operations.doc | 0 .../gui/GEOM/input/tui_boolean_operations.doc | 0 doc/salome/gui/GEOM/input/tui_bounding_box.doc | 0 .../gui/GEOM/input/tui_building_by_blocks.doc | 0 doc/salome/gui/GEOM/input/tui_center_of_mass.doc | 0 .../gui/GEOM/input/tui_check_compound_of_blocks.doc | 0 .../gui/GEOM/input/tui_check_self_intersections.doc | 0 doc/salome/gui/GEOM/input/tui_check_shape.doc | 0 doc/salome/gui/GEOM/input/tui_complex_objs.doc | 0 .../gui/GEOM/input/tui_creating_geom_objs.doc | 0 .../gui/GEOM/input/tui_execution_distribution.doc | 0 doc/salome/gui/GEOM/input/tui_free_boundaries.doc | 0 doc/salome/gui/GEOM/input/tui_free_faces.doc | 0 doc/salome/gui/GEOM/input/tui_get_non_blocks.doc | 0 doc/salome/gui/GEOM/input/tui_import_export.doc | 0 .../gui/GEOM/input/tui_importexport_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_inertia.doc | 0 doc/salome/gui/GEOM/input/tui_measurement_tools.doc | 0 doc/salome/gui/GEOM/input/tui_min_distance.doc | 0 doc/salome/gui/GEOM/input/tui_normal_face.doc | 0 doc/salome/gui/GEOM/input/tui_notebook_geom.doc | 0 doc/salome/gui/GEOM/input/tui_point_coordinates.doc | 0 doc/salome/gui/GEOM/input/tui_primitives.doc | 0 .../gui/GEOM/input/tui_repairing_operations.doc | 0 doc/salome/gui/GEOM/input/tui_sketcher.doc | 0 doc/salome/gui/GEOM/input/tui_swig_examples.doc | 0 doc/salome/gui/GEOM/input/tui_test_all.doc | 0 doc/salome/gui/GEOM/input/tui_test_measures.doc | 0 doc/salome/gui/GEOM/input/tui_test_others.doc | 0 doc/salome/gui/GEOM/input/tui_test_spanner.doc | 0 doc/salome/gui/GEOM/input/tui_tolerance.doc | 0 .../gui/GEOM/input/tui_topological_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_transformation.doc | 0 .../GEOM/input/tui_transformation_operations.doc | 0 doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc | 0 doc/salome/gui/GEOM/input/tui_whatis.doc | 0 .../gui/GEOM/input/tui_working_with_groups.doc | 0 .../gui/GEOM/input/using_boolean_operations.doc | 0 .../gui/GEOM/input/using_measurement_tools.doc | 0 .../gui/GEOM/input/using_notebook_geom_page.doc | 0 doc/salome/gui/GEOM/input/viewing_geom_obj.doc | 0 doc/salome/gui/GEOM/input/whatis.doc | 0 doc/salome/gui/GEOM/input/working_with_groups.doc | 0 doc/salome/gui/GEOM/input/xao_format.doc | 0 doc/salome/gui/GEOM/static/header_py.html.in | 0 doc/salome/gui/GEOM/static/salome_extra.css | 0 doc/salome/tui/images/geomscreen.png | Bin doc/salome/tui/input/index.doc | 0 doc/salome/tui/static/salome_extra.css | 0 idl/GEOM_Gen.idl | 0 idl/GEOM_Superv.idl | 0 resources/GEOM.config | 0 resources/GEOMActions.xml | 0 resources/GEOMCatalog.xml.in | 0 resources/GEOMDS_Resources | 0 resources/GEOM_en.xml | 0 resources/GEOM_fr.xml | 0 resources/ImportExport | 0 resources/ModuleGeom.png | Bin resources/Plugin.in | 0 resources/SalomeApp.xml.in | 0 resources/ShHealing | 0 resources/angle.png | Bin resources/arc.png | Bin resources/arccenter.png | Bin resources/archimede.png | Bin resources/axisinertia.png | Bin resources/basicproperties.png | Bin resources/bezier.png | Bin resources/block_2f.png | Bin resources/block_6f.png | Bin resources/block_face_2e.png | Bin resources/block_face_4e.png | Bin resources/block_face_4v.png | Bin resources/block_multitrsf_double.png | Bin resources/block_multitrsf_simple.png | Bin resources/bounding.png | Bin resources/box.png | Bin resources/box2points.png | Bin resources/boxdxyz.png | Bin resources/build_compound.png | Bin resources/build_edge.png | Bin resources/build_edge_curve.png | Bin resources/build_edge_wire.png | Bin resources/build_face.png | Bin resources/build_shell.png | Bin resources/build_solid.png | Bin resources/build_wire.png | Bin resources/centergravity.png | Bin resources/chamfer.png | Bin resources/chamferall.png | Bin resources/chamferedge.png | Bin resources/chamferface.png | Bin resources/change_direction.png | Bin resources/check.png | Bin resources/check_blocks_compound.png | Bin resources/check_self_intersections.png | Bin resources/circle.png | Bin resources/circle3points.png | Bin resources/circlepointvector.png | Bin resources/closecontour.png | Bin resources/common.png | Bin resources/cone.png | Bin resources/conepointvector.png | Bin resources/cut.png | Bin resources/cylinder.png | Bin resources/cylinderpointvector.png | Bin resources/delete.png | Bin resources/disk.png | Bin resources/disk3points.png | Bin resources/disk_pntvecr.png | Bin resources/disk_r.png | Bin resources/display.png | Bin resources/displayall.png | Bin resources/displayonly.png | Bin resources/divided_disk.png | Bin resources/dividedcylinder.png | Bin resources/dividedcylinder_r_h.png | Bin resources/dlg_pipetshape.png | Bin resources/dlg_pipetshapechamfer.png | Bin resources/dlg_pipetshapechamferh.png | Bin resources/dlg_pipetshapechamferl1.png | Bin resources/dlg_pipetshapechamferl2.png | Bin resources/dlg_pipetshapechamferr1.png | Bin resources/dlg_pipetshapechamferr2.png | Bin resources/dlg_pipetshapechamferw.png | Bin resources/dlg_pipetshapechamferw1.png | Bin resources/dlg_pipetshapechamferw2.png | Bin resources/dlg_pipetshapefillet.png | Bin resources/dlg_pipetshapefilletl1.png | Bin resources/dlg_pipetshapefilletl2.png | Bin resources/dlg_pipetshapefilletr1.png | Bin resources/dlg_pipetshapefilletr2.png | Bin resources/dlg_pipetshapefilletrf.png | Bin resources/dlg_pipetshapefilletw1.png | Bin resources/dlg_pipetshapefilletw2.png | Bin resources/dlg_pipetshapel1.png | Bin resources/dlg_pipetshapel2.png | Bin resources/dlg_pipetshaper1.png | Bin resources/dlg_pipetshaper2.png | Bin resources/dlg_pipetshapew1.png | Bin resources/dlg_pipetshapew2.png | Bin resources/draft.png | Bin resources/edit_points.png | Bin resources/erase.png | Bin resources/eraseall.png | Bin resources/exportxao.png | Bin resources/extruded_boss.png | Bin resources/extruded_cut.png | Bin resources/face_hw.png | Bin resources/face_vechw.png | Bin resources/feature_detect.png | Bin resources/field_edit.png | Bin resources/field_new.png | Bin resources/fillet.png | Bin resources/fillet1d.png | Bin resources/filletall.png | Bin resources/filletedge.png | Bin resources/filletface.png | Bin resources/filletwire.png | Bin resources/filling.png | Bin resources/folder.png | Bin resources/free_faces.png | Bin resources/fuse.png | Bin resources/fuse_collinear_edges.png | Bin resources/geometry.png | Bin resources/get_non_blocks.png | Bin resources/glue.png | Bin resources/glue2.png | Bin resources/group_edit.png | Bin resources/group_new.png | Bin resources/import_picture.png | Bin resources/importxao.png | Bin resources/interpol.png | Bin resources/isoline.png | Bin resources/isoline_v.png | Bin resources/limit_tolerance.png | Bin resources/line.png | Bin resources/line2points.png | Bin resources/managedimensions.png | Bin resources/marker.png | Bin resources/marker2.png | Bin resources/marker3.png | Bin resources/mindist.png | Bin resources/mirrorAxe.png | Bin resources/mirrorPlane.png | Bin resources/mirrorPoint.png | Bin resources/multirotation.png | Bin resources/multirotationdouble.png | Bin resources/multirotationsimple.png | Bin resources/multitranslation.png | Bin resources/multitranslationdouble.png | Bin resources/multitranslationsimple.png | Bin resources/normale.png | Bin resources/offset.png | Bin resources/partition.png | Bin resources/partitionkeep.png | Bin resources/partitionplane.png | Bin resources/pipebinormal.png | Bin resources/pipesections.png | Bin resources/pipetshape.png | Bin resources/pipetshape_import_icon.png | Bin resources/pipetshape_section.png | Bin resources/plane.png | Bin resources/plane3points.png | Bin resources/planeWorking.png | Bin resources/planeface.png | Bin resources/planepointvector.png | Bin resources/planeworkingface.png | Bin resources/planeworkingorigin.png | Bin resources/planeworkingvector.png | Bin resources/point2.png | Bin resources/point3.png | Bin resources/point_coord.png | Bin resources/polyline.png | Bin resources/position.png | Bin resources/position2.png | Bin resources/position3.png | Bin resources/prism.png | Bin resources/prism2.png | Bin resources/prism3.png | Bin resources/projection.png | Bin resources/propagate.png | Bin resources/rectangle.png | Bin resources/redo.png | Bin resources/remove_extra_edges.png | Bin resources/remove_webs.png | Bin resources/revol.png | Bin resources/rotate.png | Bin resources/scale.png | Bin resources/scale_along_axes.png | Bin resources/section.png | Bin resources/select1.png | Bin resources/sewing.png | Bin resources/shading_with_edges.png | Bin resources/shapeprocess.png | Bin resources/shared_shapes.png | Bin resources/sketch.png | Bin resources/smoothingsurface.png | Bin resources/smoothingsurface_lpoints.png | Bin resources/sphere.png | Bin resources/spheredxyz.png | Bin resources/spherepoint.png | Bin resources/spline.png | Bin resources/suppressintwires.png | Bin resources/supressface.png | Bin resources/tolerance.png | Bin resources/torus.png | Bin resources/toruspointvector.png | Bin resources/translation.png | Bin resources/translationDxyz.png | Bin resources/translationPoints.png | Bin resources/translationVector.png | Bin resources/tree_block.png | Bin resources/tree_compound.png | Bin resources/tree_compsolid.png | Bin resources/tree_edge.png | Bin resources/tree_face.png | Bin resources/tree_field_edge.png | Bin resources/tree_field_face.png | Bin resources/tree_field_solid.png | Bin resources/tree_field_vertex.png | Bin resources/tree_group_edge.png | Bin resources/tree_group_face.png | Bin resources/tree_group_solid.png | Bin resources/tree_group_vertex.png | Bin resources/tree_lcs.png | Bin resources/tree_pipetshape.png | Bin resources/tree_shape.png | Bin resources/tree_shell.png | Bin resources/tree_smoothingsurface.png | Bin resources/tree_solid.png | Bin resources/tree_vertex.png | Bin resources/tree_wire.png | Bin resources/undo.png | Bin resources/union_faces.png | Bin resources/vector.png | Bin resources/vector2points.png | Bin resources/vector_mode.png | Bin resources/vectordxyz.png | Bin resources/whatis.png | Bin resources/wireframe.png | Bin src/ARCHIMEDE/Archimede_VolumeSection.cxx | 0 src/ARCHIMEDE/Archimede_VolumeSection.hxx | 0 src/AdvancedEngine/AdvancedEngine.cxx | 0 .../AdvancedEngine_OperationsCreator.cc | 0 src/AdvancedEngine/AdvancedEngine_Types.hxx | 0 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx | 0 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx | 0 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx | 0 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx | 0 src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx | 0 src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx | 0 src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx | 0 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx | 0 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx | 0 .../GEOMImpl_SmoothingSurfaceDriver.cxx | 0 .../GEOMImpl_SmoothingSurfaceDriver.hxx | 0 src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc | 0 src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh | 0 src/AdvancedGUI/AdvancedGUI.cxx | 0 src/AdvancedGUI/AdvancedGUI.h | 0 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h | 0 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h | 0 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h | 0 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx | 0 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h | 0 src/AdvancedGUI/AdvancedGUI_images.ts | 0 src/AdvancedGUI/AdvancedGUI_msg_en.ts | 0 src/AdvancedGUI/AdvancedGUI_msg_fr.ts | 0 src/AdvancedGUI/AdvancedGUI_msg_ja.ts | 0 src/BREPExport/BREPExport.cxx | 0 src/BREPImport/BREPImport.cxx | 0 src/BasicGUI/BasicGUI.cxx | 0 src/BasicGUI/BasicGUI.h | 0 src/BasicGUI/BasicGUI_ArcDlg.cxx | 0 src/BasicGUI/BasicGUI_ArcDlg.h | 0 src/BasicGUI/BasicGUI_CircleDlg.cxx | 0 src/BasicGUI/BasicGUI_CircleDlg.h | 0 src/BasicGUI/BasicGUI_CurveDlg.cxx | 0 src/BasicGUI/BasicGUI_CurveDlg.h | 0 src/BasicGUI/BasicGUI_EllipseDlg.cxx | 0 src/BasicGUI/BasicGUI_EllipseDlg.h | 0 src/BasicGUI/BasicGUI_LineDlg.cxx | 0 src/BasicGUI/BasicGUI_LineDlg.h | 0 src/BasicGUI/BasicGUI_MarkerDlg.cxx | 0 src/BasicGUI/BasicGUI_MarkerDlg.h | 0 src/BasicGUI/BasicGUI_ParamCurveWidget.cxx | 0 src/BasicGUI/BasicGUI_ParamCurveWidget.h | 0 src/BasicGUI/BasicGUI_PlaneDlg.cxx | 0 src/BasicGUI/BasicGUI_PlaneDlg.h | 0 src/BasicGUI/BasicGUI_PointDlg.cxx | 0 src/BasicGUI/BasicGUI_PointDlg.h | 0 src/BasicGUI/BasicGUI_VectorDlg.cxx | 0 src/BasicGUI/BasicGUI_VectorDlg.h | 0 src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx | 0 src/BasicGUI/BasicGUI_WorkingPlaneDlg.h | 0 src/BlockFix/BlockFix.cxx | 0 src/BlockFix/BlockFix.hxx | 0 src/BlockFix/BlockFix_BlockFixAPI.cxx | 0 src/BlockFix/BlockFix_BlockFixAPI.hxx | 0 src/BlockFix/BlockFix_CheckTool.cxx | 0 src/BlockFix/BlockFix_CheckTool.hxx | 0 src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx | 0 src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx | 0 src/BlockFix/BlockFix_SphereSpaceModifier.cxx | 0 src/BlockFix/BlockFix_SphereSpaceModifier.hxx | 0 src/BlockFix/BlockFix_UnionEdges.cxx | 0 src/BlockFix/BlockFix_UnionEdges.hxx | 0 src/BlockFix/BlockFix_UnionFaces.cxx | 0 src/BlockFix/BlockFix_UnionFaces.hxx | 0 src/BlocksGUI/BlocksGUI.cxx | 0 src/BlocksGUI/BlocksGUI.h | 0 src/BlocksGUI/BlocksGUI_BlockDlg.cxx | 0 src/BlocksGUI/BlocksGUI_BlockDlg.h | 0 src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx | 0 src/BlocksGUI/BlocksGUI_ExplodeDlg.h | 0 src/BlocksGUI/BlocksGUI_PropagateDlg.cxx | 0 src/BlocksGUI/BlocksGUI_PropagateDlg.h | 0 src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx | 0 src/BlocksGUI/BlocksGUI_QuadFaceDlg.h | 0 src/BlocksGUI/BlocksGUI_TrsfDlg.cxx | 0 src/BlocksGUI/BlocksGUI_TrsfDlg.h | 0 src/BooleanGUI/BooleanGUI.cxx | 0 src/BooleanGUI/BooleanGUI.h | 0 src/BooleanGUI/BooleanGUI_Dialog.cxx | 0 src/BooleanGUI/BooleanGUI_Dialog.h | 0 src/BuildGUI/BuildGUI.cxx | 0 src/BuildGUI/BuildGUI.h | 0 src/BuildGUI/BuildGUI_CompoundDlg.cxx | 0 src/BuildGUI/BuildGUI_CompoundDlg.h | 0 src/BuildGUI/BuildGUI_EdgeDlg.cxx | 0 src/BuildGUI/BuildGUI_EdgeDlg.h | 0 src/BuildGUI/BuildGUI_FaceDlg.cxx | 0 src/BuildGUI/BuildGUI_FaceDlg.h | 0 src/BuildGUI/BuildGUI_ShellDlg.cxx | 0 src/BuildGUI/BuildGUI_ShellDlg.h | 0 src/BuildGUI/BuildGUI_SolidDlg.cxx | 0 src/BuildGUI/BuildGUI_SolidDlg.h | 0 src/BuildGUI/BuildGUI_WireDlg.cxx | 0 src/BuildGUI/BuildGUI_WireDlg.h | 0 src/CurveCreator/CMakeLists.txt | 0 src/CurveCreator/CurveCreator.hxx | 0 src/CurveCreator/CurveCreator_Curve.cxx | 0 src/CurveCreator/CurveCreator_Curve.hxx | 0 src/CurveCreator/CurveCreator_CurveEditor.cxx | 0 src/CurveCreator/CurveCreator_CurveEditor.hxx | 0 src/CurveCreator/CurveCreator_Diff.cxx | 0 src/CurveCreator/CurveCreator_Diff.hxx | 0 src/CurveCreator/CurveCreator_ICurve.cxx | 0 src/CurveCreator/CurveCreator_ICurve.hxx | 0 src/CurveCreator/CurveCreator_Macro.hxx | 0 src/CurveCreator/CurveCreator_Operation.cxx | 0 src/CurveCreator/CurveCreator_Operation.hxx | 0 src/CurveCreator/CurveCreator_Section.hxx | 0 src/CurveCreator/CurveCreator_UndoOptsDlg.cxx | 0 src/CurveCreator/CurveCreator_UndoOptsDlg.h | 0 src/CurveCreator/CurveCreator_Widget.cxx | 0 src/CurveCreator/CurveCreator_Widget.h | 0 src/DependencyTree/CMakeLists.txt | 0 src/DependencyTree/DependencyTree.h | 0 src/DependencyTree/DependencyTree_Arrow.cxx | 0 src/DependencyTree/DependencyTree_Arrow.h | 0 src/DependencyTree/DependencyTree_Object.cxx | 0 src/DependencyTree/DependencyTree_Object.h | 0 src/DependencyTree/DependencyTree_Selector.cxx | 0 src/DependencyTree/DependencyTree_Selector.h | 0 src/DependencyTree/DependencyTree_View.cxx | 0 src/DependencyTree/DependencyTree_View.h | 0 src/DependencyTree/DependencyTree_ViewModel.cxx | 0 src/DependencyTree/DependencyTree_ViewModel.h | 0 .../resources/DependencyTree_msg_en.ts | 0 .../resources/DependencyTree_msg_fr.ts | 0 .../resources/DependencyTree_msg_ja.ts | 0 src/DependencyTree/resources/tree_view_dump.png | Bin src/DependencyTree/resources/tree_view_fitall.png | Bin src/DependencyTree/resources/tree_view_fitarea.png | Bin src/DependencyTree/resources/tree_view_glpan.png | Bin src/DependencyTree/resources/tree_view_pan.png | Bin src/DependencyTree/resources/tree_view_reset.png | Bin src/DependencyTree/resources/tree_view_zoom.png | Bin src/DisplayGUI/DisplayGUI.cxx | 0 src/DisplayGUI/DisplayGUI.h | 0 src/DlgRef/DlgRef.cxx | 0 src/DlgRef/DlgRef.h | 0 src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Frame_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel2Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel3Spin_QTD.ui | 0 src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_1SelExt_QTD.ui | 0 src/DlgRef/DlgRef_1Sel_QTD.ui | 0 src/DlgRef/DlgRef_1Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1List_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui | 0 src/DlgRef/DlgRef_2Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2List_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui | 0 src/DlgRef/DlgRef_2Sel2Spin_QTD.ui | 0 src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui | 0 src/DlgRef/DlgRef_2Sel3Spin_QTD.ui | 0 src/DlgRef/DlgRef_2SelExt_QTD.ui | 0 src/DlgRef/DlgRef_2Sel_QTD.ui | 0 src/DlgRef/DlgRef_2Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Check_QTD.ui | 0 src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Radio_QTD.ui | 0 src/DlgRef/DlgRef_3Sel1Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel1Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Sel2Spin_QTD.ui | 0 src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_3Sel_QTD.ui | 0 src/DlgRef/DlgRef_3Spin1Check_QTD.ui | 0 src/DlgRef/DlgRef_3Spin_QTD.ui | 0 src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui | 0 src/DlgRef/DlgRef_4Sel1List_QTD.ui | 0 src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui | 0 src/DlgRef/DlgRef_4Spin_QTD.ui | 0 src/DlgRef/DlgRef_6Sel_QTD.ui | 0 src/DlgRef/DlgRef_Skeleton_QTD.ui | 0 src/EntityGUI/EntityGUI.cxx | 0 src/EntityGUI/EntityGUI.h | 0 src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_1Sel_QTD.ui | 0 src/EntityGUI/EntityGUI_1Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_2Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_3Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui | 0 src/EntityGUI/EntityGUI_4Spin_QTD.ui | 0 src/EntityGUI/EntityGUI_Angles_QTD.ui | 0 src/EntityGUI/EntityGUI_Controls_QTD.ui | 0 src/EntityGUI/EntityGUI_Dir1_QTD.ui | 0 src/EntityGUI/EntityGUI_Dir2_QTD.ui | 0 src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx | 0 src/EntityGUI/EntityGUI_FeatureDetectorDlg.h | 0 src/EntityGUI/EntityGUI_FieldDlg.cxx | 0 src/EntityGUI/EntityGUI_FieldDlg.h | 0 src/EntityGUI/EntityGUI_PictureImportDlg.cxx | 0 src/EntityGUI/EntityGUI_PictureImportDlg.h | 0 src/EntityGUI/EntityGUI_Point_QTD.ui | 0 src/EntityGUI/EntityGUI_Skeleton_QTD.ui | 0 src/EntityGUI/EntityGUI_SketcherDlg.cxx | 0 src/EntityGUI/EntityGUI_SketcherDlg.h | 0 src/EntityGUI/EntityGUI_SubShapeDlg.cxx | 0 src/EntityGUI/EntityGUI_SubShapeDlg.h | 0 src/EntityGUI/EntityGUI_Type_QTD.ui | 0 src/EntityGUI/EntityGUI_Widgets.cxx | 0 src/EntityGUI/EntityGUI_Widgets.h | 0 src/GEOM/GEOM_Application.cxx | 0 src/GEOM/GEOM_Application.hxx | 0 src/GEOM/GEOM_Application.ixx | 0 src/GEOM/GEOM_Application.jxx | 0 src/GEOM/GEOM_BaseDriver.cxx | 0 src/GEOM/GEOM_BaseDriver.hxx | 0 src/GEOM/GEOM_BaseObject.cxx | 0 src/GEOM/GEOM_BaseObject.hxx | 0 ...taMapIteratorOfDataMapOfAsciiStringTransient.hxx | 0 ...MapIteratorOfDataMapOfAsciiStringTransient_0.cxx | 0 ...M_DataMapNodeOfDataMapOfAsciiStringTransient.hxx | 0 ...DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx | 0 src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx | 0 src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx | 0 src/GEOM/GEOM_Engine.cxx | 0 src/GEOM/GEOM_Engine.hxx | 0 src/GEOM/GEOM_Field.cxx | 0 src/GEOM/GEOM_Field.hxx | 0 src/GEOM/GEOM_Function.cxx | 0 src/GEOM/GEOM_Function.hxx | 0 src/GEOM/GEOM_IField.hxx | 0 src/GEOM/GEOM_IOperations.cxx | 0 src/GEOM/GEOM_IOperations.hxx | 0 src/GEOM/GEOM_ISubShape.hxx | 0 src/GEOM/GEOM_Object.cxx | 0 src/GEOM/GEOM_Object.hxx | 0 src/GEOM/GEOM_PythonDump.cxx | 0 src/GEOM/GEOM_PythonDump.hxx | 0 src/GEOM/GEOM_Solver.cxx | 0 src/GEOM/GEOM_Solver.hxx | 0 src/GEOM/GEOM_SubShapeDriver.cxx | 0 src/GEOM/GEOM_SubShapeDriver.hxx | 0 src/GEOM/Handle_GEOM_Application.hxx | 0 ...M_DataMapNodeOfDataMapOfAsciiStringTransient.hxx | 0 src/GEOMAlgo/FILES | 0 src/GEOMAlgo/GEOMAlgo_Algo.hxx | 0 src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_Clsf.cxx | 0 src/GEOMAlgo/GEOMAlgo_Clsf.hxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx | 0 src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx | 0 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx | 0 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx | 0 ...lgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx | 0 src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx | 0 src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx | 0 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx | 0 src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx | 0 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx | 0 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx | 0 src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx | 0 src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer.hxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2.cxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2.hxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx | 0 src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx | 0 src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx | 0 src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx | 0 src/GEOMAlgo/GEOMAlgo_HAlgo.cxx | 0 src/GEOMAlgo/GEOMAlgo_HAlgo.hxx | 0 .../GEOMAlgo_IndexedDataMapOfIntegerShape.hxx | 0 ...Algo_IndexedDataMapOfPassKeyShapeListOfShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx | 0 .../GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx | 0 .../GEOMAlgo_IndexedDataMapOfShapeState.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfName.hxx | 0 src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx | 0 .../GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx | 0 src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx | 0 src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx | 0 src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKey.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx | 0 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx | 0 src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx | 0 src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_Splitter.hxx | 0 src/GEOMAlgo/GEOMAlgo_State.hxx | 0 src/GEOMAlgo/GEOMAlgo_StateCollector.cxx | 0 src/GEOMAlgo/GEOMAlgo_StateCollector.hxx | 0 src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx | 0 src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx | 0 src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx | 0 src/GEOMAlgo/GEOMAlgo_WireSolid.cxx | 0 src/GEOMAlgo/GEOMAlgo_WireSolid.hxx | 0 src/GEOMBase/GEOMBase.cxx | 0 src/GEOMBase/GEOMBase.h | 0 src/GEOMBase/GEOMBase_Skeleton.cxx | 0 src/GEOMBase/GEOMBase_Skeleton.h | 0 src/GEOMBase/GEOM_GenericObjPtr.cxx | 0 src/GEOMBase/GEOM_GenericObjPtr.h | 0 src/GEOMBase/GEOM_Operation.cxx | 0 src/GEOMBase/GEOM_Operation.h | 0 src/GEOMClient/GEOM_Client.cxx | 0 src/GEOMClient/GEOM_Client.hxx | 0 src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_CompoundFilter.h | 0 src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_EdgeFilter.h | 0 src/GEOMFiltersSelection/GEOM_FaceFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_FaceFilter.h | 0 src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_LogicalFilter.h | 0 src/GEOMFiltersSelection/GEOM_OCCFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_OCCFilter.h | 0 src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_PreviewFilter.h | 0 src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_SelectionFilter.h | 0 src/GEOMFiltersSelection/GEOM_TypeFilter.cxx | 0 src/GEOMFiltersSelection/GEOM_TypeFilter.h | 0 src/GEOMGUI/GEOMGUI.cxx | 0 src/GEOMGUI/GEOMGUI.h | 0 src/GEOMGUI/GEOMGUI.qrc | 0 src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx | 0 src/GEOMGUI/GEOMGUI_CreationInfoWdg.h | 0 src/GEOMGUI/GEOMGUI_DimensionProperty.cxx | 0 src/GEOMGUI/GEOMGUI_DimensionProperty.h | 0 src/GEOMGUI/GEOMGUI_OCCSelector.cxx | 0 src/GEOMGUI/GEOMGUI_OCCSelector.h | 0 src/GEOMGUI/GEOMGUI_Selection.cxx | 0 src/GEOMGUI/GEOMGUI_Selection.h | 0 src/GEOMGUI/GEOMGUI_XmlHandler.cxx | 0 src/GEOMGUI/GEOMGUI_XmlHandler.h | 0 src/GEOMGUI/GEOMPluginGUI.cxx | 0 src/GEOMGUI/GEOMPluginGUI.h | 0 src/GEOMGUI/GEOM_Displayer.cxx | 0 src/GEOMGUI/GEOM_Displayer.h | 0 src/GEOMGUI/GEOM_images.ts | 0 src/GEOMGUI/GEOM_msg_en.ts | 0 src/GEOMGUI/GEOM_msg_fr.ts | 0 src/GEOMGUI/GEOM_msg_ja.ts | 0 src/GEOMGUI/GeometryGUI.cxx | 0 src/GEOMGUI/GeometryGUI.h | 0 src/GEOMGUI/GeometryGUI_Operations.h | 0 src/GEOMImpl/GEOMImpl_ArcDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ArcDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_Block6Explorer.cxx | 0 src/GEOMImpl/GEOMImpl_Block6Explorer.hxx | 0 src/GEOMImpl/GEOMImpl_BlockDriver.cxx | 0 src/GEOMImpl/GEOMImpl_BlockDriver.hxx | 0 src/GEOMImpl/GEOMImpl_BooleanDriver.cxx | 0 src/GEOMImpl/GEOMImpl_BooleanDriver.hxx | 0 src/GEOMImpl/GEOMImpl_BoxDriver.cxx | 0 src/GEOMImpl/GEOMImpl_BoxDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ChamferDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ChamferDriver.hxx | 0 src/GEOMImpl/GEOMImpl_CircleDriver.cxx | 0 src/GEOMImpl/GEOMImpl_CircleDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ConeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ConeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_CopyDriver.cxx | 0 src/GEOMImpl/GEOMImpl_CopyDriver.hxx | 0 src/GEOMImpl/GEOMImpl_CylinderDriver.cxx | 0 src/GEOMImpl/GEOMImpl_CylinderDriver.hxx | 0 src/GEOMImpl/GEOMImpl_EllipseDriver.cxx | 0 src/GEOMImpl/GEOMImpl_EllipseDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ExportDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ExportDriver.hxx | 0 src/GEOMImpl/GEOMImpl_FieldDriver.cxx | 0 src/GEOMImpl/GEOMImpl_FieldDriver.hxx | 0 src/GEOMImpl/GEOMImpl_Fillet1d.cxx | 0 src/GEOMImpl/GEOMImpl_Fillet1d.hxx | 0 src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx | 0 src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx | 0 src/GEOMImpl/GEOMImpl_FilletDriver.cxx | 0 src/GEOMImpl/GEOMImpl_FilletDriver.hxx | 0 src/GEOMImpl/GEOMImpl_FillingDriver.cxx | 0 src/GEOMImpl/GEOMImpl_FillingDriver.hxx | 0 src/GEOMImpl/GEOMImpl_Gen.cxx | 0 src/GEOMImpl/GEOMImpl_Gen.hxx | 0 src/GEOMImpl/GEOMImpl_GlueDriver.cxx | 0 src/GEOMImpl/GEOMImpl_GlueDriver.hxx | 0 src/GEOMImpl/GEOMImpl_HealingDriver.cxx | 0 src/GEOMImpl/GEOMImpl_HealingDriver.hxx | 0 src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx | 0 src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IArc.hxx | 0 src/GEOMImpl/GEOMImpl_IArchimede.hxx | 0 src/GEOMImpl/GEOMImpl_IBasicOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IBasicOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx | 0 src/GEOMImpl/GEOMImpl_IBlocks.hxx | 0 src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IBoolean.hxx | 0 src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IBox.hxx | 0 src/GEOMImpl/GEOMImpl_IChamfer.hxx | 0 src/GEOMImpl/GEOMImpl_ICircle.hxx | 0 src/GEOMImpl/GEOMImpl_ICone.hxx | 0 src/GEOMImpl/GEOMImpl_ICopy.hxx | 0 src/GEOMImpl/GEOMImpl_ICurveParametric.hxx | 0 src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx | 0 src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx | 0 src/GEOMImpl/GEOMImpl_ICylinder.hxx | 0 src/GEOMImpl/GEOMImpl_IEllipse.hxx | 0 src/GEOMImpl/GEOMImpl_IFieldOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IFieldOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IFillet.hxx | 0 src/GEOMImpl/GEOMImpl_IFillet1d.hxx | 0 src/GEOMImpl/GEOMImpl_IFilling.hxx | 0 src/GEOMImpl/GEOMImpl_IGlue.hxx | 0 src/GEOMImpl/GEOMImpl_IGroupOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IGroupOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IHealingOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IHealingOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IImportExport.hxx | 0 src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx | 0 src/GEOMImpl/GEOMImpl_IInsertOperations.hxx | 0 src/GEOMImpl/GEOMImpl_ILine.hxx | 0 src/GEOMImpl/GEOMImpl_ILocalOperations.cxx | 0 src/GEOMImpl/GEOMImpl_ILocalOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IMarker.hxx | 0 src/GEOMImpl/GEOMImpl_IMeasure.hxx | 0 src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IMirror.hxx | 0 src/GEOMImpl/GEOMImpl_IOffset.hxx | 0 src/GEOMImpl/GEOMImpl_IPartition.hxx | 0 src/GEOMImpl/GEOMImpl_IPipe.hxx | 0 src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx | 0 src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx | 0 src/GEOMImpl/GEOMImpl_IPipePath.hxx | 0 src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx | 0 src/GEOMImpl/GEOMImpl_IPlane.hxx | 0 src/GEOMImpl/GEOMImpl_IPolyline.hxx | 0 src/GEOMImpl/GEOMImpl_IPosition.hxx | 0 src/GEOMImpl/GEOMImpl_IPrism.hxx | 0 src/GEOMImpl/GEOMImpl_IRevolution.hxx | 0 src/GEOMImpl/GEOMImpl_IRotate.hxx | 0 src/GEOMImpl/GEOMImpl_IScale.hxx | 0 src/GEOMImpl/GEOMImpl_IShapes.hxx | 0 src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 0 src/GEOMImpl/GEOMImpl_IShapesOperations.hxx | 0 src/GEOMImpl/GEOMImpl_ISketcher.hxx | 0 src/GEOMImpl/GEOMImpl_ISphere.hxx | 0 src/GEOMImpl/GEOMImpl_ISpline.hxx | 0 src/GEOMImpl/GEOMImpl_IThruSections.hxx | 0 src/GEOMImpl/GEOMImpl_ITorus.hxx | 0 src/GEOMImpl/GEOMImpl_ITransformOperations.cxx | 0 src/GEOMImpl/GEOMImpl_ITransformOperations.hxx | 0 src/GEOMImpl/GEOMImpl_IVector.hxx | 0 src/GEOMImpl/GEOMImpl_ImportDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ImportDriver.hxx | 0 src/GEOMImpl/GEOMImpl_LineDriver.cxx | 0 src/GEOMImpl/GEOMImpl_LineDriver.hxx | 0 src/GEOMImpl/GEOMImpl_MarkerDriver.cxx | 0 src/GEOMImpl/GEOMImpl_MarkerDriver.hxx | 0 src/GEOMImpl/GEOMImpl_MeasureDriver.cxx | 0 src/GEOMImpl/GEOMImpl_MeasureDriver.hxx | 0 src/GEOMImpl/GEOMImpl_MirrorDriver.cxx | 0 src/GEOMImpl/GEOMImpl_MirrorDriver.hxx | 0 src/GEOMImpl/GEOMImpl_OffsetDriver.cxx | 0 src/GEOMImpl/GEOMImpl_OffsetDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PartitionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PartitionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PipeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PipeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PipePathDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PipePathDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PlaneDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PlaneDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PointDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PointDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PolylineDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PolylineDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PositionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PositionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_PrismDriver.cxx | 0 src/GEOMImpl/GEOMImpl_PrismDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx | 0 src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx | 0 src/GEOMImpl/GEOMImpl_RotateDriver.cxx | 0 src/GEOMImpl/GEOMImpl_RotateDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ScaleDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ScaleDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ShapeDriver.hxx | 0 src/GEOMImpl/GEOMImpl_SketcherDriver.cxx | 0 src/GEOMImpl/GEOMImpl_SketcherDriver.hxx | 0 src/GEOMImpl/GEOMImpl_SphereDriver.cxx | 0 src/GEOMImpl/GEOMImpl_SphereDriver.hxx | 0 src/GEOMImpl/GEOMImpl_SplineDriver.cxx | 0 src/GEOMImpl/GEOMImpl_SplineDriver.hxx | 0 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx | 0 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx | 0 src/GEOMImpl/GEOMImpl_TorusDriver.cxx | 0 src/GEOMImpl/GEOMImpl_TorusDriver.hxx | 0 src/GEOMImpl/GEOMImpl_TranslateDriver.cxx | 0 src/GEOMImpl/GEOMImpl_TranslateDriver.hxx | 0 src/GEOMImpl/GEOMImpl_VectorDriver.cxx | 0 src/GEOMImpl/GEOMImpl_VectorDriver.hxx | 0 src/GEOMImpl/GEOMImpl_XAODriver.cxx | 0 src/GEOMImpl/GEOMImpl_XAODriver.hxx | 0 src/GEOMToolsGUI/GEOMToolsGUI.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h | 0 .../GEOMToolsGUI_MaterialPropertiesDlg.cxx | 0 .../GEOMToolsGUI_MaterialPropertiesDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h | 0 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx | 0 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h | 0 src/GEOMUtils/GEOMUtils.cxx | 0 src/GEOMUtils/GEOMUtils.hxx | 0 src/GEOM_I/GEOM_BaseObject_i.cc | 0 src/GEOM_I/GEOM_BaseObject_i.hh | 0 src/GEOM_I/GEOM_DumpPython.cc | 0 src/GEOM_I/GEOM_Field_i.cc | 0 src/GEOM_I/GEOM_Field_i.hh | 0 src/GEOM_I/GEOM_Gen_i.hh | 0 src/GEOM_I/GEOM_I3DPrimOperations_i.cc | 0 src/GEOM_I/GEOM_I3DPrimOperations_i.hh | 0 src/GEOM_I/GEOM_IBasicOperations_i.cc | 0 src/GEOM_I/GEOM_IBasicOperations_i.hh | 0 src/GEOM_I/GEOM_IBlocksOperations_i.hh | 0 src/GEOM_I/GEOM_IBooleanOperations_i.cc | 0 src/GEOM_I/GEOM_IBooleanOperations_i.hh | 0 src/GEOM_I/GEOM_ICurvesOperations_i.cc | 0 src/GEOM_I/GEOM_ICurvesOperations_i.hh | 0 src/GEOM_I/GEOM_IFieldOperations_i.cc | 0 src/GEOM_I/GEOM_IFieldOperations_i.hh | 0 src/GEOM_I/GEOM_IGroupOperations_i.cc | 0 src/GEOM_I/GEOM_IGroupOperations_i.hh | 0 src/GEOM_I/GEOM_IHealingOperations_i.cc | 0 src/GEOM_I/GEOM_IHealingOperations_i.hh | 0 src/GEOM_I/GEOM_IInsertOperations_i.cc | 0 src/GEOM_I/GEOM_IInsertOperations_i.hh | 0 src/GEOM_I/GEOM_ILocalOperations_i.cc | 0 src/GEOM_I/GEOM_ILocalOperations_i.hh | 0 src/GEOM_I/GEOM_IMeasureOperations_i.cc | 0 src/GEOM_I/GEOM_IMeasureOperations_i.hh | 0 src/GEOM_I/GEOM_IOperations_i.cc | 0 src/GEOM_I/GEOM_IOperations_i.hh | 0 src/GEOM_I/GEOM_IShapesOperations_i.cc | 0 src/GEOM_I/GEOM_IShapesOperations_i.hh | 0 src/GEOM_I/GEOM_ITransformOperations_i.cc | 0 src/GEOM_I/GEOM_ITransformOperations_i.hh | 0 src/GEOM_I/GEOM_Object_i.cc | 0 src/GEOM_I/GEOM_Object_i.hh | 0 src/GEOM_I/GEOM_wrap.hxx | 0 src/GEOM_I_Superv/GEOM_List_i.hh | 0 src/GEOM_I_Superv/GEOM_Superv_i.cc | 0 src/GEOM_I_Superv/GEOM_Superv_i.hh | 0 src/GEOM_PY/__init__.py | 0 src/GEOM_PY/geomtools.py | 0 src/GEOM_PY/sketcher.py | 0 src/GEOM_PY/structelem/__init__.py | 0 src/GEOM_PY/structelem/orientation.py | 0 src/GEOM_PY/structelem/parts.py | 0 src/GEOM_SWIG/GEOM_ObjectInfo.py | 0 src/GEOM_SWIG/GEOM_Sketcher.py | 0 src/GEOM_SWIG/GEOM_Spanner.py | 0 src/GEOM_SWIG/GEOM_TestAll.py | 0 src/GEOM_SWIG/GEOM_TestField.py | 0 src/GEOM_SWIG/GEOM_TestHealing.py | 0 src/GEOM_SWIG/GEOM_TestMeasures.py | 0 src/GEOM_SWIG/GEOM_TestOthers.py | 0 src/GEOM_SWIG/GEOM_blocks.py | 0 src/GEOM_SWIG/GEOM_example.py | 0 src/GEOM_SWIG/GEOM_example2.py | 0 src/GEOM_SWIG/GEOM_example3.py | 0 src/GEOM_SWIG/GEOM_example5.py | 0 src/GEOM_SWIG/GEOM_example7.py | 0 src/GEOM_SWIG/GEOM_moteur.py | 0 src/GEOM_SWIG/GEOM_shared_modules.py | 0 src/GEOM_SWIG/GEOM_usinggeom.py | 0 src/GEOM_SWIG/__init__.py | 0 src/GEOM_SWIG/geomBuilder.py | 0 src/GEOM_SWIG/geompy.py | 0 src/GEOM_SWIG/gsketcher.py | 0 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx | 0 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h | 0 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i | 0 src/GenerationGUI/GenerationGUI.cxx | 0 src/GenerationGUI/GenerationGUI.h | 0 src/GenerationGUI/GenerationGUI_FillingDlg.cxx | 0 src/GenerationGUI/GenerationGUI_FillingDlg.h | 0 src/GenerationGUI/GenerationGUI_PipeDlg.cxx | 0 src/GenerationGUI/GenerationGUI_PipeDlg.h | 0 src/GenerationGUI/GenerationGUI_PipePathDlg.cxx | 0 src/GenerationGUI/GenerationGUI_PipePathDlg.h | 0 src/GenerationGUI/GenerationGUI_PrismDlg.cxx | 0 src/GenerationGUI/GenerationGUI_PrismDlg.h | 0 src/GenerationGUI/GenerationGUI_RevolDlg.cxx | 0 src/GenerationGUI/GenerationGUI_RevolDlg.h | 0 src/GroupGUI/GroupGUI.cxx | 0 src/GroupGUI/GroupGUI.h | 0 src/GroupGUI/GroupGUI_BooleanDlg.cxx | 0 src/GroupGUI/GroupGUI_BooleanDlg.h | 0 src/GroupGUI/GroupGUI_GroupDlg.cxx | 0 src/GroupGUI/GroupGUI_GroupDlg.h | 0 src/IGESExport/IGESExport.cxx | 0 src/IGESImport/IGESImport.cxx | 0 src/ImportExportGUI/CMakeLists.txt | 0 src/ImportExportGUI/ImportExportGUI.cxx | 0 src/ImportExportGUI/ImportExportGUI.h | 0 .../ImportExportGUI_ExportXAODlg.cxx | 0 src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h | 0 .../ImportExportGUI_ImportXAODlg.cxx | 0 src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h | 0 src/Material/Material.h | 0 src/Material/Material_Model.cxx | 0 src/Material/Material_Model.h | 0 src/Material/Material_ResourceMgr.cxx | 0 src/Material/Material_ResourceMgr.h | 0 src/Material/resources/SalomeMaterial.xml | 0 src/MeasureGUI/MeasureGUI.cxx | 0 src/MeasureGUI/MeasureGUI.h | 0 src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui | 0 .../MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui | 0 .../MeasureGUI_1Sel1TextView1Check_QTD.ui | 0 .../MeasureGUI_1Sel1TextView2ListBox_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui | 0 src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui | 0 .../MeasureGUI_1TreeWidget_4Button_QTD.ui | 0 src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui | 0 src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui | 0 src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui | 0 src/MeasureGUI/MeasureGUI_AngleDlg.cxx | 0 src/MeasureGUI/MeasureGUI_AngleDlg.h | 0 src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx | 0 src/MeasureGUI/MeasureGUI_BndBoxDlg.h | 0 src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx | 0 src/MeasureGUI/MeasureGUI_CenterMassDlg.h | 0 .../MeasureGUI_CheckCompoundOfBlocksDlg.cxx | 0 .../MeasureGUI_CheckCompoundOfBlocksDlg.h | 0 .../MeasureGUI_CheckSelfIntersectionsDlg.cxx | 0 .../MeasureGUI_CheckSelfIntersectionsDlg.h | 0 src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx | 0 src/MeasureGUI/MeasureGUI_CheckShapeDlg.h | 0 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx | 0 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h | 0 src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx | 0 src/MeasureGUI/MeasureGUI_DimensionCreateTool.h | 0 src/MeasureGUI/MeasureGUI_DimensionFilter.cxx | 0 src/MeasureGUI/MeasureGUI_DimensionFilter.h | 0 src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx | 0 src/MeasureGUI/MeasureGUI_DimensionInteractor.h | 0 src/MeasureGUI/MeasureGUI_DistanceDlg.cxx | 0 src/MeasureGUI/MeasureGUI_DistanceDlg.h | 0 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx | 0 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h | 0 src/MeasureGUI/MeasureGUI_InertiaDlg.cxx | 0 src/MeasureGUI/MeasureGUI_InertiaDlg.h | 0 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx | 0 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h | 0 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx | 0 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h | 0 src/MeasureGUI/MeasureGUI_NormaleDlg.cxx | 0 src/MeasureGUI/MeasureGUI_NormaleDlg.h | 0 src/MeasureGUI/MeasureGUI_PointDlg.cxx | 0 src/MeasureGUI/MeasureGUI_PointDlg.h | 0 src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx | 0 src/MeasureGUI/MeasureGUI_PropertiesDlg.h | 0 src/MeasureGUI/MeasureGUI_Skeleton.cxx | 0 src/MeasureGUI/MeasureGUI_Skeleton.h | 0 src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui | 0 src/MeasureGUI/MeasureGUI_WhatisDlg.cxx | 0 src/MeasureGUI/MeasureGUI_WhatisDlg.h | 0 src/MeasureGUI/MeasureGUI_Widgets.cxx | 0 src/MeasureGUI/MeasureGUI_Widgets.h | 0 src/OBJECT/GEOM_AISShape.cxx | 0 src/OBJECT/GEOM_AISShape.hxx | 0 src/OBJECT/GEOM_AISShape.ixx | 0 src/OBJECT/GEOM_AISShape.jxx | 0 src/OBJECT/GEOM_AISVector.cxx | 0 src/OBJECT/GEOM_AISVector.hxx | 0 src/OBJECT/GEOM_Actor.cxx | 0 src/OBJECT/GEOM_Actor.h | 0 src/OBJECT/GEOM_Constants.cxx | 0 src/OBJECT/GEOM_Constants.h | 0 src/OBJECT/GEOM_InteractiveObject.cxx | 0 src/OBJECT/GEOM_InteractiveObject.hxx | 0 src/OBJECT/GEOM_InteractiveObject.ixx | 0 src/OBJECT/GEOM_InteractiveObject.jxx | 0 src/OBJECT/GEOM_OCCReader.cxx | 0 src/OBJECT/GEOM_OCCReader.h | 0 src/OBJECT/GEOM_PainterPolyDataMapper.cxx | 0 src/OBJECT/GEOM_PainterPolyDataMapper.h | 0 src/OBJECT/GEOM_VTKTrihedron.cxx | 0 src/OBJECT/GEOM_VTKTrihedron.hxx | 0 src/OBJECT/Handle_GEOM_AISShape.hxx | 0 src/OBJECT/Handle_GEOM_InteractiveObject.hxx | 0 src/OperationGUI/OperationGUI.cxx | 0 src/OperationGUI/OperationGUI.h | 0 src/OperationGUI/OperationGUI_ArchimedeDlg.cxx | 0 src/OperationGUI/OperationGUI_ArchimedeDlg.h | 0 src/OperationGUI/OperationGUI_ChamferDlg.cxx | 0 src/OperationGUI/OperationGUI_ChamferDlg.h | 0 src/OperationGUI/OperationGUI_ClippingDlg.cxx | 0 src/OperationGUI/OperationGUI_ClippingDlg.h | 0 .../OperationGUI_ExtrudedFeatureDlg.cxx | 0 src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h | 0 src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx | 0 src/OperationGUI/OperationGUI_Fillet1d2dDlg.h | 0 src/OperationGUI/OperationGUI_FilletDlg.cxx | 0 src/OperationGUI/OperationGUI_FilletDlg.h | 0 .../OperationGUI_GetShapesOnShapeDlg.cxx | 0 src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h | 0 .../OperationGUI_GetSharedShapesDlg.cxx | 0 src/OperationGUI/OperationGUI_GetSharedShapesDlg.h | 0 src/OperationGUI/OperationGUI_MaterialDlg.cxx | 0 src/OperationGUI/OperationGUI_MaterialDlg.h | 0 src/OperationGUI/OperationGUI_PartitionDlg.cxx | 0 src/OperationGUI/OperationGUI_PartitionDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI.cxx | 0 src/PrimitiveGUI/PrimitiveGUI.h | 0 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h | 0 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx | 0 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h | 0 src/RepairGUI/RepairGUI.cxx | 0 src/RepairGUI/RepairGUI.h | 0 src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx | 0 src/RepairGUI/RepairGUI_ChangeOrientationDlg.h | 0 src/RepairGUI/RepairGUI_CloseContourDlg.cxx | 0 src/RepairGUI/RepairGUI_CloseContourDlg.h | 0 src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx | 0 src/RepairGUI/RepairGUI_DivideEdgeDlg.h | 0 src/RepairGUI/RepairGUI_FreeBoundDlg.cxx | 0 src/RepairGUI/RepairGUI_FreeBoundDlg.h | 0 src/RepairGUI/RepairGUI_FreeFacesDlg.cxx | 0 src/RepairGUI/RepairGUI_FreeFacesDlg.h | 0 src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx | 0 src/RepairGUI/RepairGUI_FuseEdgesDlg.h | 0 src/RepairGUI/RepairGUI_GlueDlg.cxx | 0 src/RepairGUI/RepairGUI_GlueDlg.h | 0 src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx | 0 src/RepairGUI/RepairGUI_LimitToleranceDlg.h | 0 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx | 0 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h | 0 src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx | 0 src/RepairGUI/RepairGUI_RemoveHolesDlg.h | 0 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx | 0 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h | 0 src/RepairGUI/RepairGUI_SewingDlg.cxx | 0 src/RepairGUI/RepairGUI_SewingDlg.h | 0 src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx | 0 src/RepairGUI/RepairGUI_SuppressFacesDlg.h | 0 src/SKETCHER/Sketcher_Profile.cxx | 0 src/SKETCHER/Sketcher_Profile.hxx | 0 src/STEPExport/STEPExport.cxx | 0 src/STEPImport/STEPImport.cxx | 0 src/STLExport/STLExport.cxx | 0 src/ShHealOper/ShHealOper_ChangeOrientation.cxx | 0 src/ShHealOper/ShHealOper_ChangeOrientation.hxx | 0 src/ShHealOper/ShHealOper_CloseContour.cxx | 0 src/ShHealOper/ShHealOper_CloseContour.hxx | 0 src/ShHealOper/ShHealOper_EdgeDivide.cxx | 0 src/ShHealOper/ShHealOper_EdgeDivide.hxx | 0 src/ShHealOper/ShHealOper_FillHoles.cxx | 0 src/ShHealOper/ShHealOper_FillHoles.hxx | 0 src/ShHealOper/ShHealOper_RemoveFace.cxx | 0 src/ShHealOper/ShHealOper_RemoveFace.hxx | 0 src/ShHealOper/ShHealOper_RemoveInternalWires.cxx | 0 src/ShHealOper/ShHealOper_RemoveInternalWires.hxx | 0 src/ShHealOper/ShHealOper_Sewing.cxx | 0 src/ShHealOper/ShHealOper_Sewing.hxx | 0 src/ShHealOper/ShHealOper_ShapeProcess.cxx | 0 src/ShHealOper/ShHealOper_ShapeProcess.hxx | 0 src/ShHealOper/ShHealOper_SpiltCurve2d.hxx | 0 src/ShHealOper/ShHealOper_SplitCurve2d.cxx | 0 src/ShHealOper/ShHealOper_SplitCurve2d.hxx | 0 src/ShHealOper/ShHealOper_SplitCurve3d.cxx | 0 src/ShHealOper/ShHealOper_SplitCurve3d.hxx | 0 src/ShHealOper/ShHealOper_Tool.cxx | 0 src/ShHealOper/ShHealOper_Tool.hxx | 0 src/ShapeRecognition/ShapeRec_FeatureDetector.cxx | 0 src/ShapeRecognition/ShapeRec_FeatureDetector.hxx | 0 src/TransformationGUI/TransformationGUI.cxx | 0 src/TransformationGUI/TransformationGUI.h | 0 .../TransformationGUI_MirrorDlg.cxx | 0 src/TransformationGUI/TransformationGUI_MirrorDlg.h | 0 .../TransformationGUI_MultiRotationDlg.cxx | 0 .../TransformationGUI_MultiRotationDlg.h | 0 .../TransformationGUI_MultiTranslationDlg.cxx | 0 .../TransformationGUI_MultiTranslationDlg.h | 0 .../TransformationGUI_OffsetDlg.cxx | 0 src/TransformationGUI/TransformationGUI_OffsetDlg.h | 0 .../TransformationGUI_PositionDlg.cxx | 0 .../TransformationGUI_PositionDlg.h | 0 .../TransformationGUI_ProjectionDlg.cxx | 0 .../TransformationGUI_ProjectionDlg.h | 0 .../TransformationGUI_RotationDlg.cxx | 0 .../TransformationGUI_RotationDlg.h | 0 .../TransformationGUI_ScaleDlg.cxx | 0 src/TransformationGUI/TransformationGUI_ScaleDlg.h | 0 .../TransformationGUI_TranslationDlg.cxx | 0 .../TransformationGUI_TranslationDlg.h | 0 src/VTKExport/VTKExport.cxx | 0 src/XAO/CMakeLists.txt | 0 src/XAO/XAO_BooleanField.cxx | 0 src/XAO/XAO_BooleanField.hxx | 0 src/XAO/XAO_BooleanStep.cxx | 0 src/XAO/XAO_BooleanStep.hxx | 0 src/XAO/XAO_BrepGeometry.cxx | 0 src/XAO/XAO_BrepGeometry.hxx | 0 src/XAO/XAO_DoubleField.cxx | 0 src/XAO/XAO_DoubleField.hxx | 0 src/XAO/XAO_DoubleStep.cxx | 0 src/XAO/XAO_DoubleStep.hxx | 0 src/XAO/XAO_Exception.hxx | 0 src/XAO/XAO_Field.cxx | 0 src/XAO/XAO_Field.hxx | 0 src/XAO/XAO_GeometricElement.cxx | 0 src/XAO/XAO_GeometricElement.hxx | 0 src/XAO/XAO_Geometry.cxx | 0 src/XAO/XAO_Geometry.hxx | 0 src/XAO/XAO_Group.cxx | 0 src/XAO/XAO_Group.hxx | 0 src/XAO/XAO_IntegerField.cxx | 0 src/XAO/XAO_IntegerField.hxx | 0 src/XAO/XAO_IntegerStep.cxx | 0 src/XAO/XAO_IntegerStep.hxx | 0 src/XAO/XAO_Step.cxx | 0 src/XAO/XAO_Step.hxx | 0 src/XAO/XAO_StringField.cxx | 0 src/XAO/XAO_StringField.hxx | 0 src/XAO/XAO_StringStep.cxx | 0 src/XAO/XAO_StringStep.hxx | 0 src/XAO/XAO_Xao.cxx | 0 src/XAO/XAO_Xao.hxx | 0 src/XAO/XAO_XaoExporter.cxx | 0 src/XAO/XAO_XaoExporter.hxx | 0 src/XAO/XAO_XaoUtils.cxx | 0 src/XAO/XAO_XaoUtils.hxx | 0 src/XAO/tests/BrepGeometryTest.cxx | 0 src/XAO/tests/BrepGeometryTest.hxx | 0 src/XAO/tests/CMakeLists.txt | 0 src/XAO/tests/FieldTest.cxx | 0 src/XAO/tests/FieldTest.hxx | 0 src/XAO/tests/GeometryTest.cxx | 0 src/XAO/tests/GeometryTest.hxx | 0 src/XAO/tests/GroupTest.cxx | 0 src/XAO/tests/GroupTest.hxx | 0 src/XAO/tests/ImportExportTest.cxx | 0 src/XAO/tests/ImportExportTest.hxx | 0 src/XAO/tests/MainTest.hxx | 0 src/XAO/tests/TestUtils.hxx | 0 src/XAO/tests/XAOTests.cxx | 0 src/XAO/tests/XaoTest.cxx | 0 src/XAO/tests/XaoTest.hxx | 0 src/XAO/tests/XaoUtilsTest.cxx | 0 src/XAO/tests/XaoUtilsTest.hxx | 0 src/XAO/tests/data/Box_1.brep | 0 src/XAO/tests/data/Box_2.brep | 0 src/XAO/tests/data/Cut_2.brep | 0 src/XAO/tests/data/test.xao | 0 src/XAO_Swig/CMakeLists.txt | 0 src/XAO_Swig/xao.i | 0 1720 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 AUTHORS mode change 100755 => 100644 COPYING mode change 100755 => 100644 ChangeLog mode change 100755 => 100644 GEOM_version.h.in mode change 100755 => 100644 INSTALL mode change 100755 => 100644 LICENCE mode change 100755 => 100644 NEWS mode change 100755 => 100644 README mode change 100755 => 100644 SalomeGEOMConfig.cmake.in mode change 100755 => 100644 adm_local/cmake_files/FindGEOM.cmake mode change 100755 => 100644 adm_local/cmake_files/FindOpenCV.cmake mode change 100755 => 100644 adm_local/cmake_files/FindSalomeGEOM.cmake mode change 100755 => 100644 adm_local/cmake_files/FindSalomeOpenCV.cmake mode change 100755 => 100644 adm_local/unix/config_files/check_GEOM.m4 mode change 100755 => 100644 adm_local/unix/config_files/check_OpenCV.m4 mode change 100755 => 100644 bin/addvars2notebook_GEOM.py mode change 100755 => 100644 bin/geom_setenv.py mode change 100755 => 100644 doc/salome/examples/3dsketcher.py mode change 100755 => 100644 doc/salome/examples/CMakeLists.txt mode change 100755 => 100644 doc/salome/examples/GEOM_box.py mode change 100755 => 100644 doc/salome/examples/advanced_geom_objs_ex01.py mode change 100755 => 100644 doc/salome/examples/advanced_geom_objs_ex02.py mode change 100755 => 100644 doc/salome/examples/advanced_geom_objs_ex03.py mode change 100755 => 100644 doc/salome/examples/advanced_geom_objs_smoothingsurface.py mode change 100755 => 100644 doc/salome/examples/angle.py mode change 100755 => 100644 doc/salome/examples/arranging_study_objects.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex01.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex02.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex03.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex04.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex05.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex06.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex07.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex08.py mode change 100755 => 100644 doc/salome/examples/basic_geom_objs_ex09.py mode change 100755 => 100644 doc/salome/examples/basic_operations_ex01.py mode change 100755 => 100644 doc/salome/examples/basic_operations_ex02.py mode change 100755 => 100644 doc/salome/examples/basic_operations_ex03.py mode change 100755 => 100644 doc/salome/examples/basic_properties.py mode change 100755 => 100644 doc/salome/examples/blocks_operations_ex01.py mode change 100755 => 100644 doc/salome/examples/blocks_operations_ex02.py mode change 100755 => 100644 doc/salome/examples/blocks_operations_ex03.py mode change 100755 => 100644 doc/salome/examples/boolean_operations_ex01.py mode change 100755 => 100644 doc/salome/examples/boolean_operations_ex02.py mode change 100755 => 100644 doc/salome/examples/boolean_operations_ex03.py mode change 100755 => 100644 doc/salome/examples/boolean_operations_ex04.py mode change 100755 => 100644 doc/salome/examples/bounding_box.py mode change 100755 => 100644 doc/salome/examples/building_by_blocks_ex01.py mode change 100755 => 100644 doc/salome/examples/building_by_blocks_ex02.py mode change 100755 => 100644 doc/salome/examples/center_of_mass.py mode change 100755 => 100644 doc/salome/examples/check_compound_of_blocks.py mode change 100755 => 100644 doc/salome/examples/check_self_intersections.py mode change 100755 => 100644 doc/salome/examples/check_shape.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex01.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex02.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex03.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex04.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex05.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex06.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex07.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex08.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex09.py mode change 100755 => 100644 doc/salome/examples/complex_objs_ex10.py mode change 100755 => 100644 doc/salome/examples/free_boundaries.py mode change 100755 => 100644 doc/salome/examples/free_faces.py mode change 100755 => 100644 doc/salome/examples/get_non_blocks.py mode change 100755 => 100644 doc/salome/examples/import_export.py mode change 100755 => 100644 doc/salome/examples/inertia.py mode change 100755 => 100644 doc/salome/examples/min_distance.py mode change 100755 => 100644 doc/salome/examples/normal_face.py mode change 100755 => 100644 doc/salome/examples/notebook_geom.py mode change 100755 => 100644 doc/salome/examples/point_coordinates.py mode change 100755 => 100644 doc/salome/examples/primitives_ex01.py mode change 100755 => 100644 doc/salome/examples/primitives_ex02.py mode change 100755 => 100644 doc/salome/examples/primitives_ex03.py mode change 100755 => 100644 doc/salome/examples/primitives_ex04.py mode change 100755 => 100644 doc/salome/examples/primitives_ex05.py mode change 100755 => 100644 doc/salome/examples/primitives_ex06.py mode change 100755 => 100644 doc/salome/examples/primitives_ex07.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex01.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex02.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex03.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex04.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex05.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex06.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex07.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex08.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex09.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex10.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex11.py mode change 100755 => 100644 doc/salome/examples/repairing_operations_ex12.py mode change 100755 => 100644 doc/salome/examples/sketcher.py mode change 100755 => 100644 doc/salome/examples/tolerance.py mode change 100755 => 100644 doc/salome/examples/topological_geom_objs_ex01.py mode change 100755 => 100644 doc/salome/examples/topological_geom_objs_ex02.py mode change 100755 => 100644 doc/salome/examples/topological_geom_objs_ex03.py mode change 100755 => 100644 doc/salome/examples/topological_geom_objs_ex04.py mode change 100755 => 100644 doc/salome/examples/topological_geom_objs_ex05.py mode change 100755 => 100644 doc/salome/examples/topological_geom_objs_ex06.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex01.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex02.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex03.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex04.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex05.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex06.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex07.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex08.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex09.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex10.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex11.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex12.py mode change 100755 => 100644 doc/salome/examples/transformation_operations_ex13.py mode change 100755 => 100644 doc/salome/examples/viewing_geom_objs_ex01.py mode change 100755 => 100644 doc/salome/examples/viewing_geom_objs_ex02.py mode change 100755 => 100644 doc/salome/examples/viewing_geom_objs_ex03.py mode change 100755 => 100644 doc/salome/examples/viewing_geom_objs_ex04.py mode change 100755 => 100644 doc/salome/examples/whatis.py mode change 100755 => 100644 doc/salome/examples/working_with_groups_ex01.py mode change 100755 => 100644 doc/salome/examples/working_with_groups_ex02.py mode change 100755 => 100644 doc/salome/examples/working_with_groups_ex03.py mode change 100755 => 100644 doc/salome/examples/working_with_groups_ex04.py mode change 100755 => 100644 doc/salome/examples/working_with_groups_ex05.py mode change 100755 => 100644 doc/salome/examples/working_with_groups_ex06.py mode change 100755 => 100644 doc/salome/gui/GEOM/CMakeLists.txt mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch10.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch12.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch5.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch6.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch7.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch8.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/2dsketch9.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/3dsketch4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/3dsketch_angle_abs.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/3dsketch_angle_height_rel.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/3dsketch_angle_rel.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/3dsketch_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/add_dimension.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arc2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arc_icon.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arcofellipse1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arcofellipse2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arcsn1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arcsn2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arranging1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arranging2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/arranging3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/change_direction.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/compound2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/contour_detect_snapshot.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/contour_detection_example2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/creation_op_info.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/curve1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/curve2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/curve3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/curve4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/deflection_0001.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/deflection_001.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/dialog.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/dimensions_preview.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/disk1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/disk2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/disk3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/disks.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/divided_disk.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/divided_disk_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/dividedcylinder.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/dividedcylinder_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/draft.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/eclipse1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/eclipse2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/edge1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/edge2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/edge3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/exportxao_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extruded_boss.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extruded_boss_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extruded_boss_example.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extruded_cut.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extruded_cut_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extruded_cut_example.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extrusion3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/extrusion4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/face1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/face2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/faces.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/feature_detect.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/feature_detection_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/feature_detection_dlg2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/feature_detection_dlg3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/fillet1d_1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/fillet1d_2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/front1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/front2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/fuse.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/fuse_collinear_edges.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/fused_wire.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/geom_sort.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/geomimport_reopen.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/get_in_place_lost_part.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue5.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue7.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue8.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/glue_faces3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/groups_cut_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/groups_intersect_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/groups_union_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/iges_unit.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image109.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image110.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image112.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image113.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image145.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image15.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image154.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image156.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image16.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image160.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image167.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image168.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image180.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image181.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image185.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image193.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image204.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image206.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image21.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image22.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image30.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image34.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image36.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image38.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image40.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/image47.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/import_picture.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/interact_with_dimensions.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/isoline1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/isoline2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/isos.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/limit_tolerance_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/line_icon.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/manage_dimensions.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/material.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/material_OCC.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/material_VTK.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/measures11.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/measures2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/measures2a.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/measures8a.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/neo-deflection.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/ob_popup_menu.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/partition.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/partition1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/partition2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/partitionsn3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/picture_import_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipe3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipe3_init.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipe3_res.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipe_path.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipe_path_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipebinormalsn.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape5.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshapechamfer.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshapefillet.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pipetshapethr.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/plane4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/plane5.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/point3_2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/point3_3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/point5_2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pref15.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/pref_dep_tree.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/prism_with_thickness.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/projection_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/projection_preview.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/rectangle_icon.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/reduce_study_dialog.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/remove_extra_edges.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/remove_extra_edges1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/remove_extra_edges2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/remove_webs.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/repair10a.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/repair9a.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/restore-ss-OB-cut.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/restore-ss-OB.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/restore-ss-cut.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/restore-ss-dialog.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/restore-ss-viewer-after.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/restore-ss-viewer-before.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/restore-ss-viewer-cut.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/salome-geom-structuralelements.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/sat_named_shapes.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/scale_transformsn3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/scale_transformsn4.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/shared_shapes.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/show_predef_material.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/sketch.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/sketch_example.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/sketcher_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/sketcher_dlg2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/smoothingsurface.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/smoothingsurface_dlg.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/transformation10a.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/transformation12.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/transformation13.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/transformation14.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/transformation4a.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/translation3.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_bidir_link.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_button_update.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_cycldep_link.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_default_node.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_disp_ascendants.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_disp_descendants.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_example.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_hierarchy_type.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_highlighted_node.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_main_node.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_move_nodes.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_popup_menu1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_popup_menu2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_selected_node.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_selfdep_link.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_tool_bar.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_unidir_link.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_unpublished_node.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_view_dump.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_view_fitall.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_view_fitarea.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_view_glpan.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_view_pan.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/tree_view_zoom.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/union_faces.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/union_faces1.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/union_faces2.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/using_notebook_geom.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/vectors_mode.png mode change 100755 => 100644 doc/salome/gui/GEOM/images/wire_before_fuse.png mode change 100755 => 100644 doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/angle.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/api_documentation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/archimede.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/arranging_study_objects_page.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/basic_prop.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/blocks_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/boudaries.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/bounding_box.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/bring_to_front.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/building_by_blocks.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/center_mass.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/chamfer_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/change_orientation_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/check_compound_of_blocks.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/check_self_intersections.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/check_shape.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/close_contour_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/color.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/common_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_arc.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_basic_go.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_box.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_circle.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_complex_obj.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_compound.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_cone.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_curve.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_cylinder.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_dividedcylinder.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_divideddisk.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_edge.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_ellipse.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_explode.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_extrusion.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_extrusion_alongpath.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_face.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_filling.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_geom_objects.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_hexaedral_solid.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_isoline.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_lcs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_line.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_pipe_path.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_pipetshape.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_plane.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_point.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_primitives.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_quadrangle_face.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_revolution.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_shell.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_sketcher.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_smoothingsurface.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_solid.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_sphere.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_topological_obj.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_torus.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_vector.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/creating_wire.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/cut_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/deflection.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/dependency_tree.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/display_mode.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/explode_on_blocks_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/extruded_boss_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/extruded_cut_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/faq.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/features.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/fillet1d_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/fillet_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/free_faces.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/fuse_edges_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/fuse_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/geometrical_object_properties.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/geometry_preferences.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/geompy.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/geompy_migration.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/get_non_blocks.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/glue_edges_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/glue_faces_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/import_export.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/importing_picture.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/index.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/inertia.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/isolines.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/limit_tolerance_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/line_width.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/managing_dimensions.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/manipulate_object.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/material.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/min_distance.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/mirror_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/modify_location_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/multi_rotation_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/multi_transformation_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/multi_translation_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/normal.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/offset_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/partition_explanation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/pictures.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/point_coordinates.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/point_marker.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/projection_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/propagate_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/python_interface.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/pythonutils.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/reduce_study.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/related_docs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/remove_extra_edges_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/remove_webs_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/repairing_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/restore_presentation_parameters.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/rotation_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/scale_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/section_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/sewing_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/shape_processing_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/shape_recognition.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/struct_elem_visualisation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/suppress_faces_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/suppress_holes_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/suppress_internal_wires_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tolerance.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/transformation_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/transforming_geom_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/translation_operation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/transparency.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_angle.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_arranging_study_objects.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_auto_completion_documentation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_basic_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_basic_properties.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_blocks_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_boolean_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_bounding_box.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_building_by_blocks.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_center_of_mass.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_check_compound_of_blocks.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_check_self_intersections.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_check_shape.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_complex_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_creating_geom_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_execution_distribution.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_free_boundaries.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_free_faces.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_get_non_blocks.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_import_export.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_inertia.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_measurement_tools.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_min_distance.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_normal_face.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_notebook_geom.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_point_coordinates.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_primitives.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_repairing_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_sketcher.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_swig_examples.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_test_all.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_test_measures.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_test_others.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_test_spanner.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_tolerance.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_topological_geom_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_transformation.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_transformation_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_whatis.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/tui_working_with_groups.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/using_boolean_operations.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/using_measurement_tools.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/using_notebook_geom_page.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/viewing_geom_obj.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/whatis.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/working_with_groups.doc mode change 100755 => 100644 doc/salome/gui/GEOM/input/xao_format.doc mode change 100755 => 100644 doc/salome/gui/GEOM/static/header_py.html.in mode change 100755 => 100644 doc/salome/gui/GEOM/static/salome_extra.css mode change 100755 => 100644 doc/salome/tui/images/geomscreen.png mode change 100755 => 100644 doc/salome/tui/input/index.doc mode change 100755 => 100644 doc/salome/tui/static/salome_extra.css mode change 100755 => 100644 idl/GEOM_Gen.idl mode change 100755 => 100644 idl/GEOM_Superv.idl mode change 100755 => 100644 resources/GEOM.config mode change 100755 => 100644 resources/GEOMActions.xml mode change 100755 => 100644 resources/GEOMCatalog.xml.in mode change 100755 => 100644 resources/GEOMDS_Resources mode change 100755 => 100644 resources/GEOM_en.xml mode change 100755 => 100644 resources/GEOM_fr.xml mode change 100755 => 100644 resources/ImportExport mode change 100755 => 100644 resources/ModuleGeom.png mode change 100755 => 100644 resources/Plugin.in mode change 100755 => 100644 resources/SalomeApp.xml.in mode change 100755 => 100644 resources/ShHealing mode change 100755 => 100644 resources/angle.png mode change 100755 => 100644 resources/arc.png mode change 100755 => 100644 resources/arccenter.png mode change 100755 => 100644 resources/archimede.png mode change 100755 => 100644 resources/axisinertia.png mode change 100755 => 100644 resources/basicproperties.png mode change 100755 => 100644 resources/bezier.png mode change 100755 => 100644 resources/block_2f.png mode change 100755 => 100644 resources/block_6f.png mode change 100755 => 100644 resources/block_face_2e.png mode change 100755 => 100644 resources/block_face_4e.png mode change 100755 => 100644 resources/block_face_4v.png mode change 100755 => 100644 resources/block_multitrsf_double.png mode change 100755 => 100644 resources/block_multitrsf_simple.png mode change 100755 => 100644 resources/bounding.png mode change 100755 => 100644 resources/box.png mode change 100755 => 100644 resources/box2points.png mode change 100755 => 100644 resources/boxdxyz.png mode change 100755 => 100644 resources/build_compound.png mode change 100755 => 100644 resources/build_edge.png mode change 100755 => 100644 resources/build_edge_curve.png mode change 100755 => 100644 resources/build_edge_wire.png mode change 100755 => 100644 resources/build_face.png mode change 100755 => 100644 resources/build_shell.png mode change 100755 => 100644 resources/build_solid.png mode change 100755 => 100644 resources/build_wire.png mode change 100755 => 100644 resources/centergravity.png mode change 100755 => 100644 resources/chamfer.png mode change 100755 => 100644 resources/chamferall.png mode change 100755 => 100644 resources/chamferedge.png mode change 100755 => 100644 resources/chamferface.png mode change 100755 => 100644 resources/change_direction.png mode change 100755 => 100644 resources/check.png mode change 100755 => 100644 resources/check_blocks_compound.png mode change 100755 => 100644 resources/check_self_intersections.png mode change 100755 => 100644 resources/circle.png mode change 100755 => 100644 resources/circle3points.png mode change 100755 => 100644 resources/circlepointvector.png mode change 100755 => 100644 resources/closecontour.png mode change 100755 => 100644 resources/common.png mode change 100755 => 100644 resources/cone.png mode change 100755 => 100644 resources/conepointvector.png mode change 100755 => 100644 resources/cut.png mode change 100755 => 100644 resources/cylinder.png mode change 100755 => 100644 resources/cylinderpointvector.png mode change 100755 => 100644 resources/delete.png mode change 100755 => 100644 resources/disk.png mode change 100755 => 100644 resources/disk3points.png mode change 100755 => 100644 resources/disk_pntvecr.png mode change 100755 => 100644 resources/disk_r.png mode change 100755 => 100644 resources/display.png mode change 100755 => 100644 resources/displayall.png mode change 100755 => 100644 resources/displayonly.png mode change 100755 => 100644 resources/divided_disk.png mode change 100755 => 100644 resources/dividedcylinder.png mode change 100755 => 100644 resources/dividedcylinder_r_h.png mode change 100755 => 100644 resources/dlg_pipetshape.png mode change 100755 => 100644 resources/dlg_pipetshapechamfer.png mode change 100755 => 100644 resources/dlg_pipetshapechamferh.png mode change 100755 => 100644 resources/dlg_pipetshapechamferl1.png mode change 100755 => 100644 resources/dlg_pipetshapechamferl2.png mode change 100755 => 100644 resources/dlg_pipetshapechamferr1.png mode change 100755 => 100644 resources/dlg_pipetshapechamferr2.png mode change 100755 => 100644 resources/dlg_pipetshapechamferw.png mode change 100755 => 100644 resources/dlg_pipetshapechamferw1.png mode change 100755 => 100644 resources/dlg_pipetshapechamferw2.png mode change 100755 => 100644 resources/dlg_pipetshapefillet.png mode change 100755 => 100644 resources/dlg_pipetshapefilletl1.png mode change 100755 => 100644 resources/dlg_pipetshapefilletl2.png mode change 100755 => 100644 resources/dlg_pipetshapefilletr1.png mode change 100755 => 100644 resources/dlg_pipetshapefilletr2.png mode change 100755 => 100644 resources/dlg_pipetshapefilletrf.png mode change 100755 => 100644 resources/dlg_pipetshapefilletw1.png mode change 100755 => 100644 resources/dlg_pipetshapefilletw2.png mode change 100755 => 100644 resources/dlg_pipetshapel1.png mode change 100755 => 100644 resources/dlg_pipetshapel2.png mode change 100755 => 100644 resources/dlg_pipetshaper1.png mode change 100755 => 100644 resources/dlg_pipetshaper2.png mode change 100755 => 100644 resources/dlg_pipetshapew1.png mode change 100755 => 100644 resources/dlg_pipetshapew2.png mode change 100755 => 100644 resources/draft.png mode change 100755 => 100644 resources/edit_points.png mode change 100755 => 100644 resources/erase.png mode change 100755 => 100644 resources/eraseall.png mode change 100755 => 100644 resources/exportxao.png mode change 100755 => 100644 resources/extruded_boss.png mode change 100755 => 100644 resources/extruded_cut.png mode change 100755 => 100644 resources/face_hw.png mode change 100755 => 100644 resources/face_vechw.png mode change 100755 => 100644 resources/feature_detect.png mode change 100755 => 100644 resources/field_edit.png mode change 100755 => 100644 resources/field_new.png mode change 100755 => 100644 resources/fillet.png mode change 100755 => 100644 resources/fillet1d.png mode change 100755 => 100644 resources/filletall.png mode change 100755 => 100644 resources/filletedge.png mode change 100755 => 100644 resources/filletface.png mode change 100755 => 100644 resources/filletwire.png mode change 100755 => 100644 resources/filling.png mode change 100755 => 100644 resources/folder.png mode change 100755 => 100644 resources/free_faces.png mode change 100755 => 100644 resources/fuse.png mode change 100755 => 100644 resources/fuse_collinear_edges.png mode change 100755 => 100644 resources/geometry.png mode change 100755 => 100644 resources/get_non_blocks.png mode change 100755 => 100644 resources/glue.png mode change 100755 => 100644 resources/glue2.png mode change 100755 => 100644 resources/group_edit.png mode change 100755 => 100644 resources/group_new.png mode change 100755 => 100644 resources/import_picture.png mode change 100755 => 100644 resources/importxao.png mode change 100755 => 100644 resources/interpol.png mode change 100755 => 100644 resources/isoline.png mode change 100755 => 100644 resources/isoline_v.png mode change 100755 => 100644 resources/limit_tolerance.png mode change 100755 => 100644 resources/line.png mode change 100755 => 100644 resources/line2points.png mode change 100755 => 100644 resources/managedimensions.png mode change 100755 => 100644 resources/marker.png mode change 100755 => 100644 resources/marker2.png mode change 100755 => 100644 resources/marker3.png mode change 100755 => 100644 resources/mindist.png mode change 100755 => 100644 resources/mirrorAxe.png mode change 100755 => 100644 resources/mirrorPlane.png mode change 100755 => 100644 resources/mirrorPoint.png mode change 100755 => 100644 resources/multirotation.png mode change 100755 => 100644 resources/multirotationdouble.png mode change 100755 => 100644 resources/multirotationsimple.png mode change 100755 => 100644 resources/multitranslation.png mode change 100755 => 100644 resources/multitranslationdouble.png mode change 100755 => 100644 resources/multitranslationsimple.png mode change 100755 => 100644 resources/normale.png mode change 100755 => 100644 resources/offset.png mode change 100755 => 100644 resources/partition.png mode change 100755 => 100644 resources/partitionkeep.png mode change 100755 => 100644 resources/partitionplane.png mode change 100755 => 100644 resources/pipebinormal.png mode change 100755 => 100644 resources/pipesections.png mode change 100755 => 100644 resources/pipetshape.png mode change 100755 => 100644 resources/pipetshape_import_icon.png mode change 100755 => 100644 resources/pipetshape_section.png mode change 100755 => 100644 resources/plane.png mode change 100755 => 100644 resources/plane3points.png mode change 100755 => 100644 resources/planeWorking.png mode change 100755 => 100644 resources/planeface.png mode change 100755 => 100644 resources/planepointvector.png mode change 100755 => 100644 resources/planeworkingface.png mode change 100755 => 100644 resources/planeworkingorigin.png mode change 100755 => 100644 resources/planeworkingvector.png mode change 100755 => 100644 resources/point2.png mode change 100755 => 100644 resources/point3.png mode change 100755 => 100644 resources/point_coord.png mode change 100755 => 100644 resources/polyline.png mode change 100755 => 100644 resources/position.png mode change 100755 => 100644 resources/position2.png mode change 100755 => 100644 resources/position3.png mode change 100755 => 100644 resources/prism.png mode change 100755 => 100644 resources/prism2.png mode change 100755 => 100644 resources/prism3.png mode change 100755 => 100644 resources/projection.png mode change 100755 => 100644 resources/propagate.png mode change 100755 => 100644 resources/rectangle.png mode change 100755 => 100644 resources/redo.png mode change 100755 => 100644 resources/remove_extra_edges.png mode change 100755 => 100644 resources/remove_webs.png mode change 100755 => 100644 resources/revol.png mode change 100755 => 100644 resources/rotate.png mode change 100755 => 100644 resources/scale.png mode change 100755 => 100644 resources/scale_along_axes.png mode change 100755 => 100644 resources/section.png mode change 100755 => 100644 resources/select1.png mode change 100755 => 100644 resources/sewing.png mode change 100755 => 100644 resources/shading_with_edges.png mode change 100755 => 100644 resources/shapeprocess.png mode change 100755 => 100644 resources/shared_shapes.png mode change 100755 => 100644 resources/sketch.png mode change 100755 => 100644 resources/smoothingsurface.png mode change 100755 => 100644 resources/smoothingsurface_lpoints.png mode change 100755 => 100644 resources/sphere.png mode change 100755 => 100644 resources/spheredxyz.png mode change 100755 => 100644 resources/spherepoint.png mode change 100755 => 100644 resources/spline.png mode change 100755 => 100644 resources/suppressintwires.png mode change 100755 => 100644 resources/supressface.png mode change 100755 => 100644 resources/tolerance.png mode change 100755 => 100644 resources/torus.png mode change 100755 => 100644 resources/toruspointvector.png mode change 100755 => 100644 resources/translation.png mode change 100755 => 100644 resources/translationDxyz.png mode change 100755 => 100644 resources/translationPoints.png mode change 100755 => 100644 resources/translationVector.png mode change 100755 => 100644 resources/tree_block.png mode change 100755 => 100644 resources/tree_compound.png mode change 100755 => 100644 resources/tree_compsolid.png mode change 100755 => 100644 resources/tree_edge.png mode change 100755 => 100644 resources/tree_face.png mode change 100755 => 100644 resources/tree_field_edge.png mode change 100755 => 100644 resources/tree_field_face.png mode change 100755 => 100644 resources/tree_field_solid.png mode change 100755 => 100644 resources/tree_field_vertex.png mode change 100755 => 100644 resources/tree_group_edge.png mode change 100755 => 100644 resources/tree_group_face.png mode change 100755 => 100644 resources/tree_group_solid.png mode change 100755 => 100644 resources/tree_group_vertex.png mode change 100755 => 100644 resources/tree_lcs.png mode change 100755 => 100644 resources/tree_pipetshape.png mode change 100755 => 100644 resources/tree_shape.png mode change 100755 => 100644 resources/tree_shell.png mode change 100755 => 100644 resources/tree_smoothingsurface.png mode change 100755 => 100644 resources/tree_solid.png mode change 100755 => 100644 resources/tree_vertex.png mode change 100755 => 100644 resources/tree_wire.png mode change 100755 => 100644 resources/undo.png mode change 100755 => 100644 resources/union_faces.png mode change 100755 => 100644 resources/vector.png mode change 100755 => 100644 resources/vector2points.png mode change 100755 => 100644 resources/vector_mode.png mode change 100755 => 100644 resources/vectordxyz.png mode change 100755 => 100644 resources/whatis.png mode change 100755 => 100644 resources/wireframe.png mode change 100755 => 100644 src/ARCHIMEDE/Archimede_VolumeSection.cxx mode change 100755 => 100644 src/ARCHIMEDE/Archimede_VolumeSection.hxx mode change 100755 => 100644 src/AdvancedEngine/AdvancedEngine.cxx mode change 100755 => 100644 src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc mode change 100755 => 100644 src/AdvancedEngine/AdvancedEngine_Types.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx mode change 100755 => 100644 src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx mode change 100755 => 100644 src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc mode change 100755 => 100644 src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI.cxx mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI.h mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_images.ts mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_msg_en.ts mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_msg_fr.ts mode change 100755 => 100644 src/AdvancedGUI/AdvancedGUI_msg_ja.ts mode change 100755 => 100644 src/BREPExport/BREPExport.cxx mode change 100755 => 100644 src/BREPImport/BREPImport.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_ArcDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_ArcDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_CircleDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_CircleDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_CurveDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_CurveDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_EllipseDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_EllipseDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_LineDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_LineDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_MarkerDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_MarkerDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_ParamCurveWidget.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_ParamCurveWidget.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_PlaneDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_PlaneDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_PointDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_PointDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_VectorDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_VectorDlg.h mode change 100755 => 100644 src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx mode change 100755 => 100644 src/BasicGUI/BasicGUI_WorkingPlaneDlg.h mode change 100755 => 100644 src/BlockFix/BlockFix.cxx mode change 100755 => 100644 src/BlockFix/BlockFix.hxx mode change 100755 => 100644 src/BlockFix/BlockFix_BlockFixAPI.cxx mode change 100755 => 100644 src/BlockFix/BlockFix_BlockFixAPI.hxx mode change 100755 => 100644 src/BlockFix/BlockFix_CheckTool.cxx mode change 100755 => 100644 src/BlockFix/BlockFix_CheckTool.hxx mode change 100755 => 100644 src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx mode change 100755 => 100644 src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx mode change 100755 => 100644 src/BlockFix/BlockFix_SphereSpaceModifier.cxx mode change 100755 => 100644 src/BlockFix/BlockFix_SphereSpaceModifier.hxx mode change 100755 => 100644 src/BlockFix/BlockFix_UnionEdges.cxx mode change 100755 => 100644 src/BlockFix/BlockFix_UnionEdges.hxx mode change 100755 => 100644 src/BlockFix/BlockFix_UnionFaces.cxx mode change 100755 => 100644 src/BlockFix/BlockFix_UnionFaces.hxx mode change 100755 => 100644 src/BlocksGUI/BlocksGUI.cxx mode change 100755 => 100644 src/BlocksGUI/BlocksGUI.h mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_BlockDlg.cxx mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_BlockDlg.h mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_ExplodeDlg.h mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_PropagateDlg.cxx mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_PropagateDlg.h mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_QuadFaceDlg.h mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_TrsfDlg.cxx mode change 100755 => 100644 src/BlocksGUI/BlocksGUI_TrsfDlg.h mode change 100755 => 100644 src/BooleanGUI/BooleanGUI.cxx mode change 100755 => 100644 src/BooleanGUI/BooleanGUI.h mode change 100755 => 100644 src/BooleanGUI/BooleanGUI_Dialog.cxx mode change 100755 => 100644 src/BooleanGUI/BooleanGUI_Dialog.h mode change 100755 => 100644 src/BuildGUI/BuildGUI.cxx mode change 100755 => 100644 src/BuildGUI/BuildGUI.h mode change 100755 => 100644 src/BuildGUI/BuildGUI_CompoundDlg.cxx mode change 100755 => 100644 src/BuildGUI/BuildGUI_CompoundDlg.h mode change 100755 => 100644 src/BuildGUI/BuildGUI_EdgeDlg.cxx mode change 100755 => 100644 src/BuildGUI/BuildGUI_EdgeDlg.h mode change 100755 => 100644 src/BuildGUI/BuildGUI_FaceDlg.cxx mode change 100755 => 100644 src/BuildGUI/BuildGUI_FaceDlg.h mode change 100755 => 100644 src/BuildGUI/BuildGUI_ShellDlg.cxx mode change 100755 => 100644 src/BuildGUI/BuildGUI_ShellDlg.h mode change 100755 => 100644 src/BuildGUI/BuildGUI_SolidDlg.cxx mode change 100755 => 100644 src/BuildGUI/BuildGUI_SolidDlg.h mode change 100755 => 100644 src/BuildGUI/BuildGUI_WireDlg.cxx mode change 100755 => 100644 src/BuildGUI/BuildGUI_WireDlg.h mode change 100755 => 100644 src/CurveCreator/CMakeLists.txt mode change 100755 => 100644 src/CurveCreator/CurveCreator.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Curve.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Curve.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_CurveEditor.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_CurveEditor.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Diff.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Diff.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_ICurve.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_ICurve.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Macro.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Operation.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Operation.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Section.hxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_UndoOptsDlg.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_UndoOptsDlg.h mode change 100755 => 100644 src/CurveCreator/CurveCreator_Widget.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_Widget.h mode change 100755 => 100644 src/DependencyTree/CMakeLists.txt mode change 100755 => 100644 src/DependencyTree/DependencyTree.h mode change 100755 => 100644 src/DependencyTree/DependencyTree_Arrow.cxx mode change 100755 => 100644 src/DependencyTree/DependencyTree_Arrow.h mode change 100755 => 100644 src/DependencyTree/DependencyTree_Object.cxx mode change 100755 => 100644 src/DependencyTree/DependencyTree_Object.h mode change 100755 => 100644 src/DependencyTree/DependencyTree_Selector.cxx mode change 100755 => 100644 src/DependencyTree/DependencyTree_Selector.h mode change 100755 => 100644 src/DependencyTree/DependencyTree_View.cxx mode change 100755 => 100644 src/DependencyTree/DependencyTree_View.h mode change 100755 => 100644 src/DependencyTree/DependencyTree_ViewModel.cxx mode change 100755 => 100644 src/DependencyTree/DependencyTree_ViewModel.h mode change 100755 => 100644 src/DependencyTree/resources/DependencyTree_msg_en.ts mode change 100755 => 100644 src/DependencyTree/resources/DependencyTree_msg_fr.ts mode change 100755 => 100644 src/DependencyTree/resources/DependencyTree_msg_ja.ts mode change 100755 => 100644 src/DependencyTree/resources/tree_view_dump.png mode change 100755 => 100644 src/DependencyTree/resources/tree_view_fitall.png mode change 100755 => 100644 src/DependencyTree/resources/tree_view_fitarea.png mode change 100755 => 100644 src/DependencyTree/resources/tree_view_glpan.png mode change 100755 => 100644 src/DependencyTree/resources/tree_view_pan.png mode change 100755 => 100644 src/DependencyTree/resources/tree_view_reset.png mode change 100755 => 100644 src/DependencyTree/resources/tree_view_zoom.png mode change 100755 => 100644 src/DisplayGUI/DisplayGUI.cxx mode change 100755 => 100644 src/DisplayGUI/DisplayGUI.h mode change 100755 => 100644 src/DlgRef/DlgRef.cxx mode change 100755 => 100644 src/DlgRef/DlgRef.h mode change 100755 => 100644 src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel1Frame_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel1Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel2Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel3Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel3Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1SelExt_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Sel_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_1Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel1List_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel1Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel2List_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel2Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel3Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2SelExt_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Sel_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_2Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Radio_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel1Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel2Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Sel_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Spin1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_3Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_4Sel1List_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_4Spin_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_6Sel_QTD.ui mode change 100755 => 100644 src/DlgRef/DlgRef_Skeleton_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI.cxx mode change 100755 => 100644 src/EntityGUI/EntityGUI.h mode change 100755 => 100644 src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_1Sel_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_1Spin_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_2Spin_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_3Spin_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_4Spin_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_Angles_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_Controls_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_Dir1_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_Dir2_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx mode change 100755 => 100644 src/EntityGUI/EntityGUI_FeatureDetectorDlg.h mode change 100755 => 100644 src/EntityGUI/EntityGUI_FieldDlg.cxx mode change 100755 => 100644 src/EntityGUI/EntityGUI_FieldDlg.h mode change 100755 => 100644 src/EntityGUI/EntityGUI_PictureImportDlg.cxx mode change 100755 => 100644 src/EntityGUI/EntityGUI_PictureImportDlg.h mode change 100755 => 100644 src/EntityGUI/EntityGUI_Point_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_Skeleton_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_SketcherDlg.cxx mode change 100755 => 100644 src/EntityGUI/EntityGUI_SketcherDlg.h mode change 100755 => 100644 src/EntityGUI/EntityGUI_SubShapeDlg.cxx mode change 100755 => 100644 src/EntityGUI/EntityGUI_SubShapeDlg.h mode change 100755 => 100644 src/EntityGUI/EntityGUI_Type_QTD.ui mode change 100755 => 100644 src/EntityGUI/EntityGUI_Widgets.cxx mode change 100755 => 100644 src/EntityGUI/EntityGUI_Widgets.h mode change 100755 => 100644 src/GEOM/GEOM_Application.cxx mode change 100755 => 100644 src/GEOM/GEOM_Application.hxx mode change 100755 => 100644 src/GEOM/GEOM_Application.ixx mode change 100755 => 100644 src/GEOM/GEOM_Application.jxx mode change 100755 => 100644 src/GEOM/GEOM_BaseDriver.cxx mode change 100755 => 100644 src/GEOM/GEOM_BaseDriver.hxx mode change 100755 => 100644 src/GEOM/GEOM_BaseObject.cxx mode change 100755 => 100644 src/GEOM/GEOM_BaseObject.hxx mode change 100755 => 100644 src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx mode change 100755 => 100644 src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx mode change 100755 => 100644 src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx mode change 100755 => 100644 src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx mode change 100755 => 100644 src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx mode change 100755 => 100644 src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx mode change 100755 => 100644 src/GEOM/GEOM_Engine.cxx mode change 100755 => 100644 src/GEOM/GEOM_Engine.hxx mode change 100755 => 100644 src/GEOM/GEOM_Field.cxx mode change 100755 => 100644 src/GEOM/GEOM_Field.hxx mode change 100755 => 100644 src/GEOM/GEOM_Function.cxx mode change 100755 => 100644 src/GEOM/GEOM_Function.hxx mode change 100755 => 100644 src/GEOM/GEOM_IField.hxx mode change 100755 => 100644 src/GEOM/GEOM_IOperations.cxx mode change 100755 => 100644 src/GEOM/GEOM_IOperations.hxx mode change 100755 => 100644 src/GEOM/GEOM_ISubShape.hxx mode change 100755 => 100644 src/GEOM/GEOM_Object.cxx mode change 100755 => 100644 src/GEOM/GEOM_Object.hxx mode change 100755 => 100644 src/GEOM/GEOM_PythonDump.cxx mode change 100755 => 100644 src/GEOM/GEOM_PythonDump.hxx mode change 100755 => 100644 src/GEOM/GEOM_Solver.cxx mode change 100755 => 100644 src/GEOM/GEOM_Solver.hxx mode change 100755 => 100644 src/GEOM/GEOM_SubShapeDriver.cxx mode change 100755 => 100644 src/GEOM/GEOM_SubShapeDriver.hxx mode change 100755 => 100644 src/GEOM/Handle_GEOM_Application.hxx mode change 100755 => 100644 src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx mode change 100755 => 100644 src/GEOMAlgo/FILES mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Algo.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Clsf.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Clsf.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Gluer.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Gluer2.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Gluer2.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_HAlgo.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_HAlgo.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfIntegerShape.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeState.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_KindOfName.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_PassKey.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_Splitter.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_State.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_StateCollector.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_StateCollector.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_WireSolid.cxx mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_WireSolid.hxx mode change 100755 => 100644 src/GEOMBase/GEOMBase.cxx mode change 100755 => 100644 src/GEOMBase/GEOMBase.h mode change 100755 => 100644 src/GEOMBase/GEOMBase_Skeleton.cxx mode change 100755 => 100644 src/GEOMBase/GEOMBase_Skeleton.h mode change 100755 => 100644 src/GEOMBase/GEOM_GenericObjPtr.cxx mode change 100755 => 100644 src/GEOMBase/GEOM_GenericObjPtr.h mode change 100755 => 100644 src/GEOMBase/GEOM_Operation.cxx mode change 100755 => 100644 src/GEOMBase/GEOM_Operation.h mode change 100755 => 100644 src/GEOMClient/GEOM_Client.cxx mode change 100755 => 100644 src/GEOMClient/GEOM_Client.hxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_CompoundFilter.h mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_EdgeFilter.h mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_FaceFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_FaceFilter.h mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_LogicalFilter.h mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_OCCFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_OCCFilter.h mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_PreviewFilter.h mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_SelectionFilter.h mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_TypeFilter.cxx mode change 100755 => 100644 src/GEOMFiltersSelection/GEOM_TypeFilter.h mode change 100755 => 100644 src/GEOMGUI/GEOMGUI.cxx mode change 100755 => 100644 src/GEOMGUI/GEOMGUI.h mode change 100755 => 100644 src/GEOMGUI/GEOMGUI.qrc mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_CreationInfoWdg.h mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_DimensionProperty.cxx mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_DimensionProperty.h mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_OCCSelector.cxx mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_OCCSelector.h mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_Selection.cxx mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_Selection.h mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_XmlHandler.cxx mode change 100755 => 100644 src/GEOMGUI/GEOMGUI_XmlHandler.h mode change 100755 => 100644 src/GEOMGUI/GEOMPluginGUI.cxx mode change 100755 => 100644 src/GEOMGUI/GEOMPluginGUI.h mode change 100755 => 100644 src/GEOMGUI/GEOM_Displayer.cxx mode change 100755 => 100644 src/GEOMGUI/GEOM_Displayer.h mode change 100755 => 100644 src/GEOMGUI/GEOM_images.ts mode change 100755 => 100644 src/GEOMGUI/GEOM_msg_en.ts mode change 100755 => 100644 src/GEOMGUI/GEOM_msg_fr.ts mode change 100755 => 100644 src/GEOMGUI/GEOM_msg_ja.ts mode change 100755 => 100644 src/GEOMGUI/GeometryGUI.cxx mode change 100755 => 100644 src/GEOMGUI/GeometryGUI.h mode change 100755 => 100644 src/GEOMGUI/GeometryGUI_Operations.h mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ArcDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ArcDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Block6Explorer.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Block6Explorer.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_BlockDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_BlockDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_BooleanDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_BooleanDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_BoxDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_BoxDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ChamferDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ChamferDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_CircleDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_CircleDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ConeDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ConeDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_CopyDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_CopyDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_CylinderDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_CylinderDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_EllipseDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_EllipseDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ExportDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ExportDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_FieldDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_FieldDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Fillet1d.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Fillet1d.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_FilletDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_FilletDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_FillingDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_FillingDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Gen.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Gen.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_GlueDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_GlueDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_HealingDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_HealingDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IArc.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IArchimede.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBasicOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBasicOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBlocks.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBoolean.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IBox.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IChamfer.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ICircle.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ICone.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ICopy.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ICurveParametric.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ICylinder.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IEllipse.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IFieldOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IFieldOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IFillet.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IFillet1d.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IFilling.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IGlue.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IGroupOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IGroupOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IHealingOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IHealingOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IImportExport.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IInsertOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ILine.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ILocalOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ILocalOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IMarker.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IMeasure.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IMirror.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IOffset.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPartition.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPipe.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPipePath.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPlane.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPolyline.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPosition.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IPrism.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IRevolution.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IRotate.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IScale.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IShapes.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IShapesOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IShapesOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ISketcher.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ISphere.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ISpline.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IThruSections.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ITorus.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ITransformOperations.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ITransformOperations.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_IVector.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ImportDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ImportDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_LineDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_LineDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_MarkerDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_MarkerDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_MeasureDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_MeasureDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_MirrorDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_MirrorDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_OffsetDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_OffsetDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PartitionDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PartitionDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PipeDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PipeDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PipePathDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PipePathDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PlaneDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PlaneDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PointDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PointDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PolylineDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PolylineDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PositionDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PositionDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PrismDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_PrismDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_RotateDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_RotateDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ScaleDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ScaleDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ShapeDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ShapeDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_SketcherDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_SketcherDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_SphereDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_SphereDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_SplineDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_SplineDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_TorusDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_TorusDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_TranslateDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_TranslateDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_VectorDriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_VectorDriver.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_XAODriver.cxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_XAODriver.hxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_1.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx mode change 100755 => 100644 src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h mode change 100755 => 100644 src/GEOMUtils/GEOMUtils.cxx mode change 100755 => 100644 src/GEOMUtils/GEOMUtils.hxx mode change 100755 => 100644 src/GEOM_I/GEOM_BaseObject_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_BaseObject_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_DumpPython.cc mode change 100755 => 100644 src/GEOM_I/GEOM_Field_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_Field_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_Gen_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_I3DPrimOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_I3DPrimOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IBasicOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IBasicOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IBlocksOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IBooleanOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IBooleanOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_ICurvesOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_ICurvesOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IFieldOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IFieldOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IGroupOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IGroupOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IHealingOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IHealingOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IInsertOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IInsertOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_ILocalOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_ILocalOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IMeasureOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IMeasureOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_IShapesOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_IShapesOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_ITransformOperations_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_ITransformOperations_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_Object_i.cc mode change 100755 => 100644 src/GEOM_I/GEOM_Object_i.hh mode change 100755 => 100644 src/GEOM_I/GEOM_wrap.hxx mode change 100755 => 100644 src/GEOM_I_Superv/GEOM_List_i.hh mode change 100755 => 100644 src/GEOM_I_Superv/GEOM_Superv_i.cc mode change 100755 => 100644 src/GEOM_I_Superv/GEOM_Superv_i.hh mode change 100755 => 100644 src/GEOM_PY/__init__.py mode change 100755 => 100644 src/GEOM_PY/geomtools.py mode change 100755 => 100644 src/GEOM_PY/sketcher.py mode change 100755 => 100644 src/GEOM_PY/structelem/__init__.py mode change 100755 => 100644 src/GEOM_PY/structelem/orientation.py mode change 100755 => 100644 src/GEOM_PY/structelem/parts.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_ObjectInfo.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_Sketcher.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_Spanner.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_TestAll.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_TestField.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_TestHealing.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_TestMeasures.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_TestOthers.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_blocks.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_example.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_example2.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_example3.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_example5.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_example7.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_moteur.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_shared_modules.py mode change 100755 => 100644 src/GEOM_SWIG/GEOM_usinggeom.py mode change 100755 => 100644 src/GEOM_SWIG/__init__.py mode change 100755 => 100644 src/GEOM_SWIG/geomBuilder.py mode change 100755 => 100644 src/GEOM_SWIG/geompy.py mode change 100755 => 100644 src/GEOM_SWIG/gsketcher.py mode change 100755 => 100644 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx mode change 100755 => 100644 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h mode change 100755 => 100644 src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i mode change 100755 => 100644 src/GenerationGUI/GenerationGUI.cxx mode change 100755 => 100644 src/GenerationGUI/GenerationGUI.h mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_FillingDlg.cxx mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_FillingDlg.h mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_PipeDlg.cxx mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_PipeDlg.h mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_PipePathDlg.cxx mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_PipePathDlg.h mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_PrismDlg.cxx mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_PrismDlg.h mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_RevolDlg.cxx mode change 100755 => 100644 src/GenerationGUI/GenerationGUI_RevolDlg.h mode change 100755 => 100644 src/GroupGUI/GroupGUI.cxx mode change 100755 => 100644 src/GroupGUI/GroupGUI.h mode change 100755 => 100644 src/GroupGUI/GroupGUI_BooleanDlg.cxx mode change 100755 => 100644 src/GroupGUI/GroupGUI_BooleanDlg.h mode change 100755 => 100644 src/GroupGUI/GroupGUI_GroupDlg.cxx mode change 100755 => 100644 src/GroupGUI/GroupGUI_GroupDlg.h mode change 100755 => 100644 src/IGESExport/IGESExport.cxx mode change 100755 => 100644 src/IGESImport/IGESImport.cxx mode change 100755 => 100644 src/ImportExportGUI/CMakeLists.txt mode change 100755 => 100644 src/ImportExportGUI/ImportExportGUI.cxx mode change 100755 => 100644 src/ImportExportGUI/ImportExportGUI.h mode change 100755 => 100644 src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx mode change 100755 => 100644 src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h mode change 100755 => 100644 src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx mode change 100755 => 100644 src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h mode change 100755 => 100644 src/Material/Material.h mode change 100755 => 100644 src/Material/Material_Model.cxx mode change 100755 => 100644 src/Material/Material_Model.h mode change 100755 => 100644 src/Material/Material_ResourceMgr.cxx mode change 100755 => 100644 src/Material/Material_ResourceMgr.h mode change 100755 => 100644 src/Material/resources/SalomeMaterial.xml mode change 100755 => 100644 src/MeasureGUI/MeasureGUI.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel1TextView1Check_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel1TextView2ListBox_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_1TreeWidget_4Button_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_AngleDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_AngleDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_BndBoxDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CenterMassDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CheckShapeDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DimensionCreateTool.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DimensionFilter.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DimensionFilter.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DimensionInteractor.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DistanceDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_DistanceDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_InertiaDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_InertiaDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_NormaleDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_NormaleDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_PointDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_PointDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_PropertiesDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_Skeleton.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_Skeleton.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_WhatisDlg.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_WhatisDlg.h mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_Widgets.cxx mode change 100755 => 100644 src/MeasureGUI/MeasureGUI_Widgets.h mode change 100755 => 100644 src/OBJECT/GEOM_AISShape.cxx mode change 100755 => 100644 src/OBJECT/GEOM_AISShape.hxx mode change 100755 => 100644 src/OBJECT/GEOM_AISShape.ixx mode change 100755 => 100644 src/OBJECT/GEOM_AISShape.jxx mode change 100755 => 100644 src/OBJECT/GEOM_AISVector.cxx mode change 100755 => 100644 src/OBJECT/GEOM_AISVector.hxx mode change 100755 => 100644 src/OBJECT/GEOM_Actor.cxx mode change 100755 => 100644 src/OBJECT/GEOM_Actor.h mode change 100755 => 100644 src/OBJECT/GEOM_Constants.cxx mode change 100755 => 100644 src/OBJECT/GEOM_Constants.h mode change 100755 => 100644 src/OBJECT/GEOM_InteractiveObject.cxx mode change 100755 => 100644 src/OBJECT/GEOM_InteractiveObject.hxx mode change 100755 => 100644 src/OBJECT/GEOM_InteractiveObject.ixx mode change 100755 => 100644 src/OBJECT/GEOM_InteractiveObject.jxx mode change 100755 => 100644 src/OBJECT/GEOM_OCCReader.cxx mode change 100755 => 100644 src/OBJECT/GEOM_OCCReader.h mode change 100755 => 100644 src/OBJECT/GEOM_PainterPolyDataMapper.cxx mode change 100755 => 100644 src/OBJECT/GEOM_PainterPolyDataMapper.h mode change 100755 => 100644 src/OBJECT/GEOM_VTKTrihedron.cxx mode change 100755 => 100644 src/OBJECT/GEOM_VTKTrihedron.hxx mode change 100755 => 100644 src/OBJECT/Handle_GEOM_AISShape.hxx mode change 100755 => 100644 src/OBJECT/Handle_GEOM_InteractiveObject.hxx mode change 100755 => 100644 src/OperationGUI/OperationGUI.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_ArchimedeDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_ArchimedeDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_ChamferDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_ChamferDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_ClippingDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_ClippingDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_Fillet1d2dDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_FilletDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_FilletDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_GetSharedShapesDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_GetSharedShapesDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_MaterialDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_MaterialDlg.h mode change 100755 => 100644 src/OperationGUI/OperationGUI_PartitionDlg.cxx mode change 100755 => 100644 src/OperationGUI/OperationGUI_PartitionDlg.h mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI.cxx mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI.h mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx mode change 100755 => 100644 src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_ChangeOrientationDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_CloseContourDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_CloseContourDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_DivideEdgeDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_FreeBoundDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_FreeBoundDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_FreeFacesDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_FreeFacesDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_FuseEdgesDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_GlueDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_GlueDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_LimitToleranceDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_RemoveHolesDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_SewingDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_SewingDlg.h mode change 100755 => 100644 src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx mode change 100755 => 100644 src/RepairGUI/RepairGUI_SuppressFacesDlg.h mode change 100755 => 100644 src/SKETCHER/Sketcher_Profile.cxx mode change 100755 => 100644 src/SKETCHER/Sketcher_Profile.hxx mode change 100755 => 100644 src/STEPExport/STEPExport.cxx mode change 100755 => 100644 src/STEPImport/STEPImport.cxx mode change 100755 => 100644 src/STLExport/STLExport.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_ChangeOrientation.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_ChangeOrientation.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_CloseContour.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_CloseContour.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_EdgeDivide.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_EdgeDivide.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_FillHoles.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_FillHoles.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_RemoveFace.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_RemoveFace.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_RemoveInternalWires.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_RemoveInternalWires.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_Sewing.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_Sewing.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_ShapeProcess.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_ShapeProcess.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_SpiltCurve2d.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_SplitCurve2d.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_SplitCurve2d.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_SplitCurve3d.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_SplitCurve3d.hxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_Tool.cxx mode change 100755 => 100644 src/ShHealOper/ShHealOper_Tool.hxx mode change 100755 => 100644 src/ShapeRecognition/ShapeRec_FeatureDetector.cxx mode change 100755 => 100644 src/ShapeRecognition/ShapeRec_FeatureDetector.hxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_MirrorDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_MirrorDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_MultiRotationDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_MultiRotationDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_MultiTranslationDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_OffsetDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_OffsetDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_PositionDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_PositionDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_ProjectionDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_RotationDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_RotationDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_ScaleDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_ScaleDlg.h mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_TranslationDlg.cxx mode change 100755 => 100644 src/TransformationGUI/TransformationGUI_TranslationDlg.h mode change 100755 => 100644 src/VTKExport/VTKExport.cxx mode change 100755 => 100644 src/XAO/CMakeLists.txt mode change 100755 => 100644 src/XAO/XAO_BooleanField.cxx mode change 100755 => 100644 src/XAO/XAO_BooleanField.hxx mode change 100755 => 100644 src/XAO/XAO_BooleanStep.cxx mode change 100755 => 100644 src/XAO/XAO_BooleanStep.hxx mode change 100755 => 100644 src/XAO/XAO_BrepGeometry.cxx mode change 100755 => 100644 src/XAO/XAO_BrepGeometry.hxx mode change 100755 => 100644 src/XAO/XAO_DoubleField.cxx mode change 100755 => 100644 src/XAO/XAO_DoubleField.hxx mode change 100755 => 100644 src/XAO/XAO_DoubleStep.cxx mode change 100755 => 100644 src/XAO/XAO_DoubleStep.hxx mode change 100755 => 100644 src/XAO/XAO_Exception.hxx mode change 100755 => 100644 src/XAO/XAO_Field.cxx mode change 100755 => 100644 src/XAO/XAO_Field.hxx mode change 100755 => 100644 src/XAO/XAO_GeometricElement.cxx mode change 100755 => 100644 src/XAO/XAO_GeometricElement.hxx mode change 100755 => 100644 src/XAO/XAO_Geometry.cxx mode change 100755 => 100644 src/XAO/XAO_Geometry.hxx mode change 100755 => 100644 src/XAO/XAO_Group.cxx mode change 100755 => 100644 src/XAO/XAO_Group.hxx mode change 100755 => 100644 src/XAO/XAO_IntegerField.cxx mode change 100755 => 100644 src/XAO/XAO_IntegerField.hxx mode change 100755 => 100644 src/XAO/XAO_IntegerStep.cxx mode change 100755 => 100644 src/XAO/XAO_IntegerStep.hxx mode change 100755 => 100644 src/XAO/XAO_Step.cxx mode change 100755 => 100644 src/XAO/XAO_Step.hxx mode change 100755 => 100644 src/XAO/XAO_StringField.cxx mode change 100755 => 100644 src/XAO/XAO_StringField.hxx mode change 100755 => 100644 src/XAO/XAO_StringStep.cxx mode change 100755 => 100644 src/XAO/XAO_StringStep.hxx mode change 100755 => 100644 src/XAO/XAO_Xao.cxx mode change 100755 => 100644 src/XAO/XAO_Xao.hxx mode change 100755 => 100644 src/XAO/XAO_XaoExporter.cxx mode change 100755 => 100644 src/XAO/XAO_XaoExporter.hxx mode change 100755 => 100644 src/XAO/XAO_XaoUtils.cxx mode change 100755 => 100644 src/XAO/XAO_XaoUtils.hxx mode change 100755 => 100644 src/XAO/tests/BrepGeometryTest.cxx mode change 100755 => 100644 src/XAO/tests/BrepGeometryTest.hxx mode change 100755 => 100644 src/XAO/tests/CMakeLists.txt mode change 100755 => 100644 src/XAO/tests/FieldTest.cxx mode change 100755 => 100644 src/XAO/tests/FieldTest.hxx mode change 100755 => 100644 src/XAO/tests/GeometryTest.cxx mode change 100755 => 100644 src/XAO/tests/GeometryTest.hxx mode change 100755 => 100644 src/XAO/tests/GroupTest.cxx mode change 100755 => 100644 src/XAO/tests/GroupTest.hxx mode change 100755 => 100644 src/XAO/tests/ImportExportTest.cxx mode change 100755 => 100644 src/XAO/tests/ImportExportTest.hxx mode change 100755 => 100644 src/XAO/tests/MainTest.hxx mode change 100755 => 100644 src/XAO/tests/TestUtils.hxx mode change 100755 => 100644 src/XAO/tests/XAOTests.cxx mode change 100755 => 100644 src/XAO/tests/XaoTest.cxx mode change 100755 => 100644 src/XAO/tests/XaoTest.hxx mode change 100755 => 100644 src/XAO/tests/XaoUtilsTest.cxx mode change 100755 => 100644 src/XAO/tests/XaoUtilsTest.hxx mode change 100755 => 100644 src/XAO/tests/data/Box_1.brep mode change 100755 => 100644 src/XAO/tests/data/Box_2.brep mode change 100755 => 100644 src/XAO/tests/data/Cut_2.brep mode change 100755 => 100644 src/XAO/tests/data/test.xao mode change 100755 => 100644 src/XAO_Swig/CMakeLists.txt mode change 100755 => 100644 src/XAO_Swig/xao.i diff --git a/AUTHORS b/AUTHORS old mode 100755 new mode 100644 diff --git a/COPYING b/COPYING old mode 100755 new mode 100644 diff --git a/ChangeLog b/ChangeLog old mode 100755 new mode 100644 diff --git a/GEOM_version.h.in b/GEOM_version.h.in old mode 100755 new mode 100644 diff --git a/INSTALL b/INSTALL old mode 100755 new mode 100644 diff --git a/LICENCE b/LICENCE old mode 100755 new mode 100644 diff --git a/NEWS b/NEWS old mode 100755 new mode 100644 diff --git a/README b/README old mode 100755 new mode 100644 diff --git a/SalomeGEOMConfig.cmake.in b/SalomeGEOMConfig.cmake.in old mode 100755 new mode 100644 diff --git a/adm_local/cmake_files/FindGEOM.cmake b/adm_local/cmake_files/FindGEOM.cmake old mode 100755 new mode 100644 diff --git a/adm_local/cmake_files/FindOpenCV.cmake b/adm_local/cmake_files/FindOpenCV.cmake old mode 100755 new mode 100644 diff --git a/adm_local/cmake_files/FindSalomeGEOM.cmake b/adm_local/cmake_files/FindSalomeGEOM.cmake old mode 100755 new mode 100644 diff --git a/adm_local/cmake_files/FindSalomeOpenCV.cmake b/adm_local/cmake_files/FindSalomeOpenCV.cmake old mode 100755 new mode 100644 diff --git a/adm_local/unix/config_files/check_GEOM.m4 b/adm_local/unix/config_files/check_GEOM.m4 old mode 100755 new mode 100644 diff --git a/adm_local/unix/config_files/check_OpenCV.m4 b/adm_local/unix/config_files/check_OpenCV.m4 old mode 100755 new mode 100644 diff --git a/bin/addvars2notebook_GEOM.py b/bin/addvars2notebook_GEOM.py old mode 100755 new mode 100644 diff --git a/bin/geom_setenv.py b/bin/geom_setenv.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/3dsketcher.py b/doc/salome/examples/3dsketcher.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/CMakeLists.txt b/doc/salome/examples/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/doc/salome/examples/GEOM_box.py b/doc/salome/examples/GEOM_box.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/advanced_geom_objs_ex01.py b/doc/salome/examples/advanced_geom_objs_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/advanced_geom_objs_ex02.py b/doc/salome/examples/advanced_geom_objs_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/advanced_geom_objs_ex03.py b/doc/salome/examples/advanced_geom_objs_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/advanced_geom_objs_smoothingsurface.py b/doc/salome/examples/advanced_geom_objs_smoothingsurface.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/angle.py b/doc/salome/examples/angle.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/arranging_study_objects.py b/doc/salome/examples/arranging_study_objects.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex01.py b/doc/salome/examples/basic_geom_objs_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex02.py b/doc/salome/examples/basic_geom_objs_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex03.py b/doc/salome/examples/basic_geom_objs_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex04.py b/doc/salome/examples/basic_geom_objs_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex05.py b/doc/salome/examples/basic_geom_objs_ex05.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex06.py b/doc/salome/examples/basic_geom_objs_ex06.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex07.py b/doc/salome/examples/basic_geom_objs_ex07.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex08.py b/doc/salome/examples/basic_geom_objs_ex08.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_geom_objs_ex09.py b/doc/salome/examples/basic_geom_objs_ex09.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_operations_ex01.py b/doc/salome/examples/basic_operations_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_operations_ex02.py b/doc/salome/examples/basic_operations_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_operations_ex03.py b/doc/salome/examples/basic_operations_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/basic_properties.py b/doc/salome/examples/basic_properties.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/blocks_operations_ex01.py b/doc/salome/examples/blocks_operations_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/blocks_operations_ex02.py b/doc/salome/examples/blocks_operations_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/blocks_operations_ex03.py b/doc/salome/examples/blocks_operations_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/boolean_operations_ex01.py b/doc/salome/examples/boolean_operations_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/boolean_operations_ex02.py b/doc/salome/examples/boolean_operations_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/boolean_operations_ex03.py b/doc/salome/examples/boolean_operations_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/boolean_operations_ex04.py b/doc/salome/examples/boolean_operations_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/bounding_box.py b/doc/salome/examples/bounding_box.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/building_by_blocks_ex01.py b/doc/salome/examples/building_by_blocks_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/building_by_blocks_ex02.py b/doc/salome/examples/building_by_blocks_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/center_of_mass.py b/doc/salome/examples/center_of_mass.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/check_compound_of_blocks.py b/doc/salome/examples/check_compound_of_blocks.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/check_self_intersections.py b/doc/salome/examples/check_self_intersections.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/check_shape.py b/doc/salome/examples/check_shape.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex01.py b/doc/salome/examples/complex_objs_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex02.py b/doc/salome/examples/complex_objs_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex03.py b/doc/salome/examples/complex_objs_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex04.py b/doc/salome/examples/complex_objs_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex05.py b/doc/salome/examples/complex_objs_ex05.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex06.py b/doc/salome/examples/complex_objs_ex06.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex07.py b/doc/salome/examples/complex_objs_ex07.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex08.py b/doc/salome/examples/complex_objs_ex08.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex09.py b/doc/salome/examples/complex_objs_ex09.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/complex_objs_ex10.py b/doc/salome/examples/complex_objs_ex10.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/free_boundaries.py b/doc/salome/examples/free_boundaries.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/free_faces.py b/doc/salome/examples/free_faces.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/get_non_blocks.py b/doc/salome/examples/get_non_blocks.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/import_export.py b/doc/salome/examples/import_export.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/inertia.py b/doc/salome/examples/inertia.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/min_distance.py b/doc/salome/examples/min_distance.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/normal_face.py b/doc/salome/examples/normal_face.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/notebook_geom.py b/doc/salome/examples/notebook_geom.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/point_coordinates.py b/doc/salome/examples/point_coordinates.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/primitives_ex01.py b/doc/salome/examples/primitives_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/primitives_ex02.py b/doc/salome/examples/primitives_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/primitives_ex03.py b/doc/salome/examples/primitives_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/primitives_ex04.py b/doc/salome/examples/primitives_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/primitives_ex05.py b/doc/salome/examples/primitives_ex05.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/primitives_ex06.py b/doc/salome/examples/primitives_ex06.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/primitives_ex07.py b/doc/salome/examples/primitives_ex07.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex01.py b/doc/salome/examples/repairing_operations_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex02.py b/doc/salome/examples/repairing_operations_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex03.py b/doc/salome/examples/repairing_operations_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex04.py b/doc/salome/examples/repairing_operations_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex05.py b/doc/salome/examples/repairing_operations_ex05.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex06.py b/doc/salome/examples/repairing_operations_ex06.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex07.py b/doc/salome/examples/repairing_operations_ex07.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex08.py b/doc/salome/examples/repairing_operations_ex08.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex09.py b/doc/salome/examples/repairing_operations_ex09.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex10.py b/doc/salome/examples/repairing_operations_ex10.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex11.py b/doc/salome/examples/repairing_operations_ex11.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/repairing_operations_ex12.py b/doc/salome/examples/repairing_operations_ex12.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/sketcher.py b/doc/salome/examples/sketcher.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/tolerance.py b/doc/salome/examples/tolerance.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/topological_geom_objs_ex01.py b/doc/salome/examples/topological_geom_objs_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/topological_geom_objs_ex02.py b/doc/salome/examples/topological_geom_objs_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/topological_geom_objs_ex03.py b/doc/salome/examples/topological_geom_objs_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/topological_geom_objs_ex04.py b/doc/salome/examples/topological_geom_objs_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/topological_geom_objs_ex05.py b/doc/salome/examples/topological_geom_objs_ex05.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/topological_geom_objs_ex06.py b/doc/salome/examples/topological_geom_objs_ex06.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex01.py b/doc/salome/examples/transformation_operations_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex02.py b/doc/salome/examples/transformation_operations_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex03.py b/doc/salome/examples/transformation_operations_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex04.py b/doc/salome/examples/transformation_operations_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex05.py b/doc/salome/examples/transformation_operations_ex05.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex06.py b/doc/salome/examples/transformation_operations_ex06.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex07.py b/doc/salome/examples/transformation_operations_ex07.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex08.py b/doc/salome/examples/transformation_operations_ex08.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex09.py b/doc/salome/examples/transformation_operations_ex09.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex10.py b/doc/salome/examples/transformation_operations_ex10.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex11.py b/doc/salome/examples/transformation_operations_ex11.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex12.py b/doc/salome/examples/transformation_operations_ex12.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/transformation_operations_ex13.py b/doc/salome/examples/transformation_operations_ex13.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/viewing_geom_objs_ex01.py b/doc/salome/examples/viewing_geom_objs_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/viewing_geom_objs_ex02.py b/doc/salome/examples/viewing_geom_objs_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/viewing_geom_objs_ex03.py b/doc/salome/examples/viewing_geom_objs_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/viewing_geom_objs_ex04.py b/doc/salome/examples/viewing_geom_objs_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/whatis.py b/doc/salome/examples/whatis.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/working_with_groups_ex01.py b/doc/salome/examples/working_with_groups_ex01.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/working_with_groups_ex02.py b/doc/salome/examples/working_with_groups_ex02.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/working_with_groups_ex03.py b/doc/salome/examples/working_with_groups_ex03.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/working_with_groups_ex04.py b/doc/salome/examples/working_with_groups_ex04.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/working_with_groups_ex05.py b/doc/salome/examples/working_with_groups_ex05.py old mode 100755 new mode 100644 diff --git a/doc/salome/examples/working_with_groups_ex06.py b/doc/salome/examples/working_with_groups_ex06.py old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/CMakeLists.txt b/doc/salome/gui/GEOM/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch1.png b/doc/salome/gui/GEOM/images/2dsketch1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch10.png b/doc/salome/gui/GEOM/images/2dsketch10.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch12.png b/doc/salome/gui/GEOM/images/2dsketch12.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch2.png b/doc/salome/gui/GEOM/images/2dsketch2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch3.png b/doc/salome/gui/GEOM/images/2dsketch3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch4.png b/doc/salome/gui/GEOM/images/2dsketch4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch5.png b/doc/salome/gui/GEOM/images/2dsketch5.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch6.png b/doc/salome/gui/GEOM/images/2dsketch6.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch7.png b/doc/salome/gui/GEOM/images/2dsketch7.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch8.png b/doc/salome/gui/GEOM/images/2dsketch8.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/2dsketch9.png b/doc/salome/gui/GEOM/images/2dsketch9.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/3dsketch4.png b/doc/salome/gui/GEOM/images/3dsketch4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png b/doc/salome/gui/GEOM/images/3dsketch_2angles_rel.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/3dsketch_angle_abs.png b/doc/salome/gui/GEOM/images/3dsketch_angle_abs.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/3dsketch_angle_height_rel.png b/doc/salome/gui/GEOM/images/3dsketch_angle_height_rel.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/3dsketch_angle_rel.png b/doc/salome/gui/GEOM/images/3dsketch_angle_rel.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/3dsketch_dlg.png b/doc/salome/gui/GEOM/images/3dsketch_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/add_dimension.png b/doc/salome/gui/GEOM/images/add_dimension.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arc2.png b/doc/salome/gui/GEOM/images/arc2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arc_icon.png b/doc/salome/gui/GEOM/images/arc_icon.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arcofellipse1.png b/doc/salome/gui/GEOM/images/arcofellipse1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arcofellipse2.png b/doc/salome/gui/GEOM/images/arcofellipse2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arcsn1.png b/doc/salome/gui/GEOM/images/arcsn1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arcsn2.png b/doc/salome/gui/GEOM/images/arcsn2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arranging1.png b/doc/salome/gui/GEOM/images/arranging1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arranging2.png b/doc/salome/gui/GEOM/images/arranging2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/arranging3.png b/doc/salome/gui/GEOM/images/arranging3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/change_direction.png b/doc/salome/gui/GEOM/images/change_direction.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/compound2.png b/doc/salome/gui/GEOM/images/compound2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/contour_detect_snapshot.png b/doc/salome/gui/GEOM/images/contour_detect_snapshot.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/contour_detection_example2.png b/doc/salome/gui/GEOM/images/contour_detection_example2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/creation_op_info.png b/doc/salome/gui/GEOM/images/creation_op_info.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/curve1.png b/doc/salome/gui/GEOM/images/curve1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/curve2.png b/doc/salome/gui/GEOM/images/curve2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/curve3.png b/doc/salome/gui/GEOM/images/curve3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/curve4.png b/doc/salome/gui/GEOM/images/curve4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/deflection_0001.png b/doc/salome/gui/GEOM/images/deflection_0001.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/deflection_001.png b/doc/salome/gui/GEOM/images/deflection_001.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/dialog.png b/doc/salome/gui/GEOM/images/dialog.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/dimensions_preview.png b/doc/salome/gui/GEOM/images/dimensions_preview.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/disk1.png b/doc/salome/gui/GEOM/images/disk1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/disk2.png b/doc/salome/gui/GEOM/images/disk2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/disk3.png b/doc/salome/gui/GEOM/images/disk3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/disks.png b/doc/salome/gui/GEOM/images/disks.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/divided_disk.png b/doc/salome/gui/GEOM/images/divided_disk.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png b/doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/divided_disk_dlg.png b/doc/salome/gui/GEOM/images/divided_disk_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/dividedcylinder.png b/doc/salome/gui/GEOM/images/dividedcylinder.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/dividedcylinder_dlg.png b/doc/salome/gui/GEOM/images/dividedcylinder_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/draft.png b/doc/salome/gui/GEOM/images/draft.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/eclipse1.png b/doc/salome/gui/GEOM/images/eclipse1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/eclipse2.png b/doc/salome/gui/GEOM/images/eclipse2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/edge1.png b/doc/salome/gui/GEOM/images/edge1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/edge2.png b/doc/salome/gui/GEOM/images/edge2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/edge3.png b/doc/salome/gui/GEOM/images/edge3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/exportxao_dlg.png b/doc/salome/gui/GEOM/images/exportxao_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extruded_boss.png b/doc/salome/gui/GEOM/images/extruded_boss.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extruded_boss_dlg.png b/doc/salome/gui/GEOM/images/extruded_boss_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extruded_boss_example.png b/doc/salome/gui/GEOM/images/extruded_boss_example.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extruded_cut.png b/doc/salome/gui/GEOM/images/extruded_cut.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extruded_cut_dlg.png b/doc/salome/gui/GEOM/images/extruded_cut_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extruded_cut_example.png b/doc/salome/gui/GEOM/images/extruded_cut_example.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extrusion3.png b/doc/salome/gui/GEOM/images/extrusion3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/extrusion4.png b/doc/salome/gui/GEOM/images/extrusion4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/face1.png b/doc/salome/gui/GEOM/images/face1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/face2.png b/doc/salome/gui/GEOM/images/face2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/faces.png b/doc/salome/gui/GEOM/images/faces.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/feature_detect.png b/doc/salome/gui/GEOM/images/feature_detect.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/feature_detection_dlg.png b/doc/salome/gui/GEOM/images/feature_detection_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/feature_detection_dlg2.png b/doc/salome/gui/GEOM/images/feature_detection_dlg2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/feature_detection_dlg3.png b/doc/salome/gui/GEOM/images/feature_detection_dlg3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/fillet1d_1.png b/doc/salome/gui/GEOM/images/fillet1d_1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/fillet1d_2.png b/doc/salome/gui/GEOM/images/fillet1d_2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/front1.png b/doc/salome/gui/GEOM/images/front1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/front2.png b/doc/salome/gui/GEOM/images/front2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/fuse.png b/doc/salome/gui/GEOM/images/fuse.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/fuse_collinear_edges.png b/doc/salome/gui/GEOM/images/fuse_collinear_edges.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/fused_wire.png b/doc/salome/gui/GEOM/images/fused_wire.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/geom_sort.png b/doc/salome/gui/GEOM/images/geom_sort.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/geomimport_reopen.png b/doc/salome/gui/GEOM/images/geomimport_reopen.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/get_in_place_lost_part.png b/doc/salome/gui/GEOM/images/get_in_place_lost_part.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue1.png b/doc/salome/gui/GEOM/images/glue1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue2.png b/doc/salome/gui/GEOM/images/glue2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue3.png b/doc/salome/gui/GEOM/images/glue3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue4.png b/doc/salome/gui/GEOM/images/glue4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue5.png b/doc/salome/gui/GEOM/images/glue5.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue7.png b/doc/salome/gui/GEOM/images/glue7.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue8.png b/doc/salome/gui/GEOM/images/glue8.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/glue_faces3.png b/doc/salome/gui/GEOM/images/glue_faces3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/groups_cut_dlg.png b/doc/salome/gui/GEOM/images/groups_cut_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/groups_intersect_dlg.png b/doc/salome/gui/GEOM/images/groups_intersect_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/groups_union_dlg.png b/doc/salome/gui/GEOM/images/groups_union_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/iges_unit.png b/doc/salome/gui/GEOM/images/iges_unit.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image1.png b/doc/salome/gui/GEOM/images/image1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image109.png b/doc/salome/gui/GEOM/images/image109.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image110.png b/doc/salome/gui/GEOM/images/image110.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image112.png b/doc/salome/gui/GEOM/images/image112.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image113.png b/doc/salome/gui/GEOM/images/image113.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image145.png b/doc/salome/gui/GEOM/images/image145.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image15.png b/doc/salome/gui/GEOM/images/image15.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image154.png b/doc/salome/gui/GEOM/images/image154.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image156.png b/doc/salome/gui/GEOM/images/image156.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image16.png b/doc/salome/gui/GEOM/images/image16.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image160.png b/doc/salome/gui/GEOM/images/image160.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image167.png b/doc/salome/gui/GEOM/images/image167.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image168.png b/doc/salome/gui/GEOM/images/image168.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image180.png b/doc/salome/gui/GEOM/images/image180.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image181.png b/doc/salome/gui/GEOM/images/image181.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image185.png b/doc/salome/gui/GEOM/images/image185.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image193.png b/doc/salome/gui/GEOM/images/image193.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image204.png b/doc/salome/gui/GEOM/images/image204.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image206.png b/doc/salome/gui/GEOM/images/image206.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image21.png b/doc/salome/gui/GEOM/images/image21.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image22.png b/doc/salome/gui/GEOM/images/image22.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image3.png b/doc/salome/gui/GEOM/images/image3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image30.png b/doc/salome/gui/GEOM/images/image30.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image34.png b/doc/salome/gui/GEOM/images/image34.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image36.png b/doc/salome/gui/GEOM/images/image36.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image38.png b/doc/salome/gui/GEOM/images/image38.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image4.png b/doc/salome/gui/GEOM/images/image4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image40.png b/doc/salome/gui/GEOM/images/image40.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/image47.png b/doc/salome/gui/GEOM/images/image47.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/import_picture.png b/doc/salome/gui/GEOM/images/import_picture.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/interact_with_dimensions.png b/doc/salome/gui/GEOM/images/interact_with_dimensions.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/isoline1.png b/doc/salome/gui/GEOM/images/isoline1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/isoline2.png b/doc/salome/gui/GEOM/images/isoline2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/isos.png b/doc/salome/gui/GEOM/images/isos.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/limit_tolerance_dlg.png b/doc/salome/gui/GEOM/images/limit_tolerance_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/line_icon.png b/doc/salome/gui/GEOM/images/line_icon.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/manage_dimensions.png b/doc/salome/gui/GEOM/images/manage_dimensions.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/material.png b/doc/salome/gui/GEOM/images/material.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/material_OCC.png b/doc/salome/gui/GEOM/images/material_OCC.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/material_VTK.png b/doc/salome/gui/GEOM/images/material_VTK.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/measures11.png b/doc/salome/gui/GEOM/images/measures11.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/measures2.png b/doc/salome/gui/GEOM/images/measures2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/measures2a.png b/doc/salome/gui/GEOM/images/measures2a.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/measures8a.png b/doc/salome/gui/GEOM/images/measures8a.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/neo-deflection.png b/doc/salome/gui/GEOM/images/neo-deflection.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/ob_popup_menu.png b/doc/salome/gui/GEOM/images/ob_popup_menu.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/partition.png b/doc/salome/gui/GEOM/images/partition.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/partition1.png b/doc/salome/gui/GEOM/images/partition1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/partition2.png b/doc/salome/gui/GEOM/images/partition2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/partitionsn3.png b/doc/salome/gui/GEOM/images/partitionsn3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/picture_import_dlg.png b/doc/salome/gui/GEOM/images/picture_import_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipe3.png b/doc/salome/gui/GEOM/images/pipe3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipe3_init.png b/doc/salome/gui/GEOM/images/pipe3_init.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipe3_res.png b/doc/salome/gui/GEOM/images/pipe3_res.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipe_path.png b/doc/salome/gui/GEOM/images/pipe_path.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipe_path_dlg.png b/doc/salome/gui/GEOM/images/pipe_path_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipebinormalsn.png b/doc/salome/gui/GEOM/images/pipebinormalsn.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape.png b/doc/salome/gui/GEOM/images/pipetshape.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape1.png b/doc/salome/gui/GEOM/images/pipetshape1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape2.png b/doc/salome/gui/GEOM/images/pipetshape2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape3.png b/doc/salome/gui/GEOM/images/pipetshape3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape4.png b/doc/salome/gui/GEOM/images/pipetshape4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape5.png b/doc/salome/gui/GEOM/images/pipetshape5.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape_dlg.png b/doc/salome/gui/GEOM/images/pipetshape_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png b/doc/salome/gui/GEOM/images/pipetshape_pos_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png b/doc/salome/gui/GEOM/images/pipetshape_thr_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshapechamfer.png b/doc/salome/gui/GEOM/images/pipetshapechamfer.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshapefillet.png b/doc/salome/gui/GEOM/images/pipetshapefillet.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pipetshapethr.png b/doc/salome/gui/GEOM/images/pipetshapethr.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/plane4.png b/doc/salome/gui/GEOM/images/plane4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/plane5.png b/doc/salome/gui/GEOM/images/plane5.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/point3_2.png b/doc/salome/gui/GEOM/images/point3_2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/point3_3.png b/doc/salome/gui/GEOM/images/point3_3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/point5_2.png b/doc/salome/gui/GEOM/images/point5_2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pref15.png b/doc/salome/gui/GEOM/images/pref15.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/pref_dep_tree.png b/doc/salome/gui/GEOM/images/pref_dep_tree.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/prism_with_thickness.png b/doc/salome/gui/GEOM/images/prism_with_thickness.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/projection_dlg.png b/doc/salome/gui/GEOM/images/projection_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/projection_preview.png b/doc/salome/gui/GEOM/images/projection_preview.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/rectangle_icon.png b/doc/salome/gui/GEOM/images/rectangle_icon.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/reduce_study_dialog.png b/doc/salome/gui/GEOM/images/reduce_study_dialog.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/remove_extra_edges.png b/doc/salome/gui/GEOM/images/remove_extra_edges.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/remove_extra_edges1.png b/doc/salome/gui/GEOM/images/remove_extra_edges1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/remove_extra_edges2.png b/doc/salome/gui/GEOM/images/remove_extra_edges2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/remove_webs.png b/doc/salome/gui/GEOM/images/remove_webs.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/repair10a.png b/doc/salome/gui/GEOM/images/repair10a.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/repair9a.png b/doc/salome/gui/GEOM/images/repair9a.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/restore-ss-OB-cut.png b/doc/salome/gui/GEOM/images/restore-ss-OB-cut.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/restore-ss-OB.png b/doc/salome/gui/GEOM/images/restore-ss-OB.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/restore-ss-cut.png b/doc/salome/gui/GEOM/images/restore-ss-cut.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/restore-ss-dialog.png b/doc/salome/gui/GEOM/images/restore-ss-dialog.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/restore-ss-viewer-after.png b/doc/salome/gui/GEOM/images/restore-ss-viewer-after.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/restore-ss-viewer-before.png b/doc/salome/gui/GEOM/images/restore-ss-viewer-before.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/restore-ss-viewer-cut.png b/doc/salome/gui/GEOM/images/restore-ss-viewer-cut.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/salome-geom-structuralelements.png b/doc/salome/gui/GEOM/images/salome-geom-structuralelements.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/sat_named_shapes.png b/doc/salome/gui/GEOM/images/sat_named_shapes.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/scale_transformsn3.png b/doc/salome/gui/GEOM/images/scale_transformsn3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/scale_transformsn4.png b/doc/salome/gui/GEOM/images/scale_transformsn4.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/shared_shapes.png b/doc/salome/gui/GEOM/images/shared_shapes.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/show_predef_material.png b/doc/salome/gui/GEOM/images/show_predef_material.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/sketch.png b/doc/salome/gui/GEOM/images/sketch.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/sketch_example.png b/doc/salome/gui/GEOM/images/sketch_example.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/sketcher_dlg.png b/doc/salome/gui/GEOM/images/sketcher_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/sketcher_dlg2.png b/doc/salome/gui/GEOM/images/sketcher_dlg2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/smoothingsurface.png b/doc/salome/gui/GEOM/images/smoothingsurface.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/smoothingsurface_dlg.png b/doc/salome/gui/GEOM/images/smoothingsurface_dlg.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/transformation10a.png b/doc/salome/gui/GEOM/images/transformation10a.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/transformation12.png b/doc/salome/gui/GEOM/images/transformation12.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/transformation13.png b/doc/salome/gui/GEOM/images/transformation13.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/transformation14.png b/doc/salome/gui/GEOM/images/transformation14.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/transformation4a.png b/doc/salome/gui/GEOM/images/transformation4a.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/translation3.png b/doc/salome/gui/GEOM/images/translation3.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_bidir_link.png b/doc/salome/gui/GEOM/images/tree_bidir_link.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_button_update.png b/doc/salome/gui/GEOM/images/tree_button_update.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_cycldep_link.png b/doc/salome/gui/GEOM/images/tree_cycldep_link.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_default_node.png b/doc/salome/gui/GEOM/images/tree_default_node.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_disp_ascendants.png b/doc/salome/gui/GEOM/images/tree_disp_ascendants.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_disp_descendants.png b/doc/salome/gui/GEOM/images/tree_disp_descendants.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_example.png b/doc/salome/gui/GEOM/images/tree_example.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_hierarchy_type.png b/doc/salome/gui/GEOM/images/tree_hierarchy_type.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_highlighted_node.png b/doc/salome/gui/GEOM/images/tree_highlighted_node.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_main_node.png b/doc/salome/gui/GEOM/images/tree_main_node.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_move_nodes.png b/doc/salome/gui/GEOM/images/tree_move_nodes.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_popup_menu1.png b/doc/salome/gui/GEOM/images/tree_popup_menu1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_popup_menu2.png b/doc/salome/gui/GEOM/images/tree_popup_menu2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_selected_node.png b/doc/salome/gui/GEOM/images/tree_selected_node.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_selfdep_link.png b/doc/salome/gui/GEOM/images/tree_selfdep_link.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_tool_bar.png b/doc/salome/gui/GEOM/images/tree_tool_bar.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_unidir_link.png b/doc/salome/gui/GEOM/images/tree_unidir_link.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_unpublished_node.png b/doc/salome/gui/GEOM/images/tree_unpublished_node.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_view_dump.png b/doc/salome/gui/GEOM/images/tree_view_dump.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_view_fitall.png b/doc/salome/gui/GEOM/images/tree_view_fitall.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_view_fitarea.png b/doc/salome/gui/GEOM/images/tree_view_fitarea.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_view_glpan.png b/doc/salome/gui/GEOM/images/tree_view_glpan.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_view_pan.png b/doc/salome/gui/GEOM/images/tree_view_pan.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/tree_view_zoom.png b/doc/salome/gui/GEOM/images/tree_view_zoom.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/union_faces.png b/doc/salome/gui/GEOM/images/union_faces.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/union_faces1.png b/doc/salome/gui/GEOM/images/union_faces1.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/union_faces2.png b/doc/salome/gui/GEOM/images/union_faces2.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/using_notebook_geom.png b/doc/salome/gui/GEOM/images/using_notebook_geom.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/vectors_mode.png b/doc/salome/gui/GEOM/images/vectors_mode.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/images/wire_before_fuse.png b/doc/salome/gui/GEOM/images/wire_before_fuse.png old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc b/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/angle.doc b/doc/salome/gui/GEOM/input/angle.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/api_documentation.doc b/doc/salome/gui/GEOM/input/api_documentation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/archimede.doc b/doc/salome/gui/GEOM/input/archimede.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc b/doc/salome/gui/GEOM/input/arranging_study_objects_page.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/basic_prop.doc b/doc/salome/gui/GEOM/input/basic_prop.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/blocks_operations.doc b/doc/salome/gui/GEOM/input/blocks_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/boudaries.doc b/doc/salome/gui/GEOM/input/boudaries.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/bounding_box.doc b/doc/salome/gui/GEOM/input/bounding_box.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/bring_to_front.doc b/doc/salome/gui/GEOM/input/bring_to_front.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/building_by_blocks.doc b/doc/salome/gui/GEOM/input/building_by_blocks.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/center_mass.doc b/doc/salome/gui/GEOM/input/center_mass.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/chamfer_operation.doc b/doc/salome/gui/GEOM/input/chamfer_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/change_orientation_operation.doc b/doc/salome/gui/GEOM/input/change_orientation_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc b/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/check_self_intersections.doc b/doc/salome/gui/GEOM/input/check_self_intersections.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/check_shape.doc b/doc/salome/gui/GEOM/input/check_shape.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/close_contour_operation.doc b/doc/salome/gui/GEOM/input/close_contour_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/color.doc b/doc/salome/gui/GEOM/input/color.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/common_operation.doc b/doc/salome/gui/GEOM/input/common_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_arc.doc b/doc/salome/gui/GEOM/input/creating_arc.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_basic_go.doc b/doc/salome/gui/GEOM/input/creating_basic_go.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_box.doc b/doc/salome/gui/GEOM/input/creating_box.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_circle.doc b/doc/salome/gui/GEOM/input/creating_circle.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_complex_obj.doc b/doc/salome/gui/GEOM/input/creating_complex_obj.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_compound.doc b/doc/salome/gui/GEOM/input/creating_compound.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_cone.doc b/doc/salome/gui/GEOM/input/creating_cone.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_curve.doc b/doc/salome/gui/GEOM/input/creating_curve.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_cylinder.doc b/doc/salome/gui/GEOM/input/creating_cylinder.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_dividedcylinder.doc b/doc/salome/gui/GEOM/input/creating_dividedcylinder.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_divideddisk.doc b/doc/salome/gui/GEOM/input/creating_divideddisk.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_edge.doc b/doc/salome/gui/GEOM/input/creating_edge.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_ellipse.doc b/doc/salome/gui/GEOM/input/creating_ellipse.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_explode.doc b/doc/salome/gui/GEOM/input/creating_explode.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_extrusion.doc b/doc/salome/gui/GEOM/input/creating_extrusion.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_extrusion_alongpath.doc b/doc/salome/gui/GEOM/input/creating_extrusion_alongpath.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_face.doc b/doc/salome/gui/GEOM/input/creating_face.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_filling.doc b/doc/salome/gui/GEOM/input/creating_filling.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_geom_objects.doc b/doc/salome/gui/GEOM/input/creating_geom_objects.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_hexaedral_solid.doc b/doc/salome/gui/GEOM/input/creating_hexaedral_solid.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_isoline.doc b/doc/salome/gui/GEOM/input/creating_isoline.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_lcs.doc b/doc/salome/gui/GEOM/input/creating_lcs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_line.doc b/doc/salome/gui/GEOM/input/creating_line.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_pipe_path.doc b/doc/salome/gui/GEOM/input/creating_pipe_path.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_pipetshape.doc b/doc/salome/gui/GEOM/input/creating_pipetshape.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_plane.doc b/doc/salome/gui/GEOM/input/creating_plane.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_point.doc b/doc/salome/gui/GEOM/input/creating_point.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_primitives.doc b/doc/salome/gui/GEOM/input/creating_primitives.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_quadrangle_face.doc b/doc/salome/gui/GEOM/input/creating_quadrangle_face.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_revolution.doc b/doc/salome/gui/GEOM/input/creating_revolution.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_shell.doc b/doc/salome/gui/GEOM/input/creating_shell.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_sketcher.doc b/doc/salome/gui/GEOM/input/creating_sketcher.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_smoothingsurface.doc b/doc/salome/gui/GEOM/input/creating_smoothingsurface.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_solid.doc b/doc/salome/gui/GEOM/input/creating_solid.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_sphere.doc b/doc/salome/gui/GEOM/input/creating_sphere.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_topological_obj.doc b/doc/salome/gui/GEOM/input/creating_topological_obj.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_torus.doc b/doc/salome/gui/GEOM/input/creating_torus.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_vector.doc b/doc/salome/gui/GEOM/input/creating_vector.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/creating_wire.doc b/doc/salome/gui/GEOM/input/creating_wire.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/cut_operation.doc b/doc/salome/gui/GEOM/input/cut_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/deflection.doc b/doc/salome/gui/GEOM/input/deflection.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/dependency_tree.doc b/doc/salome/gui/GEOM/input/dependency_tree.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/display_mode.doc b/doc/salome/gui/GEOM/input/display_mode.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/explode_on_blocks_operation.doc b/doc/salome/gui/GEOM/input/explode_on_blocks_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/extruded_boss_operation.doc b/doc/salome/gui/GEOM/input/extruded_boss_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/extruded_cut_operation.doc b/doc/salome/gui/GEOM/input/extruded_cut_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/faq.doc b/doc/salome/gui/GEOM/input/faq.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/features.doc b/doc/salome/gui/GEOM/input/features.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/fillet1d_operation.doc b/doc/salome/gui/GEOM/input/fillet1d_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/fillet_operation.doc b/doc/salome/gui/GEOM/input/fillet_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/free_faces.doc b/doc/salome/gui/GEOM/input/free_faces.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/fuse_edges_operation.doc b/doc/salome/gui/GEOM/input/fuse_edges_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/fuse_operation.doc b/doc/salome/gui/GEOM/input/fuse_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/geometrical_object_properties.doc b/doc/salome/gui/GEOM/input/geometrical_object_properties.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/geompy.doc b/doc/salome/gui/GEOM/input/geompy.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/geompy_migration.doc b/doc/salome/gui/GEOM/input/geompy_migration.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/get_non_blocks.doc b/doc/salome/gui/GEOM/input/get_non_blocks.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/glue_edges_operation.doc b/doc/salome/gui/GEOM/input/glue_edges_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/glue_faces_operation.doc b/doc/salome/gui/GEOM/input/glue_faces_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/import_export.doc b/doc/salome/gui/GEOM/input/import_export.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/importing_picture.doc b/doc/salome/gui/GEOM/input/importing_picture.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/index.doc b/doc/salome/gui/GEOM/input/index.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/inertia.doc b/doc/salome/gui/GEOM/input/inertia.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/isolines.doc b/doc/salome/gui/GEOM/input/isolines.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/limit_tolerance_operation.doc b/doc/salome/gui/GEOM/input/limit_tolerance_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/line_width.doc b/doc/salome/gui/GEOM/input/line_width.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/managing_dimensions.doc b/doc/salome/gui/GEOM/input/managing_dimensions.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/manipulate_object.doc b/doc/salome/gui/GEOM/input/manipulate_object.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/material.doc b/doc/salome/gui/GEOM/input/material.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/min_distance.doc b/doc/salome/gui/GEOM/input/min_distance.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/mirror_operation.doc b/doc/salome/gui/GEOM/input/mirror_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/modify_location_operation.doc b/doc/salome/gui/GEOM/input/modify_location_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/multi_rotation_operation.doc b/doc/salome/gui/GEOM/input/multi_rotation_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/multi_transformation_operation.doc b/doc/salome/gui/GEOM/input/multi_transformation_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/multi_translation_operation.doc b/doc/salome/gui/GEOM/input/multi_translation_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/normal.doc b/doc/salome/gui/GEOM/input/normal.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/offset_operation.doc b/doc/salome/gui/GEOM/input/offset_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/partition_explanation.doc b/doc/salome/gui/GEOM/input/partition_explanation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/pictures.doc b/doc/salome/gui/GEOM/input/pictures.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/point_coordinates.doc b/doc/salome/gui/GEOM/input/point_coordinates.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/point_marker.doc b/doc/salome/gui/GEOM/input/point_marker.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/projection_operation.doc b/doc/salome/gui/GEOM/input/projection_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/propagate_operation.doc b/doc/salome/gui/GEOM/input/propagate_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/python_interface.doc b/doc/salome/gui/GEOM/input/python_interface.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/pythonutils.doc b/doc/salome/gui/GEOM/input/pythonutils.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/reduce_study.doc b/doc/salome/gui/GEOM/input/reduce_study.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/related_docs.doc b/doc/salome/gui/GEOM/input/related_docs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/remove_extra_edges_operation.doc b/doc/salome/gui/GEOM/input/remove_extra_edges_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/remove_webs_operation.doc b/doc/salome/gui/GEOM/input/remove_webs_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/repairing_operations.doc b/doc/salome/gui/GEOM/input/repairing_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/restore_presentation_parameters.doc b/doc/salome/gui/GEOM/input/restore_presentation_parameters.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/rotation_operation.doc b/doc/salome/gui/GEOM/input/rotation_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/scale_operation.doc b/doc/salome/gui/GEOM/input/scale_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/section_operation.doc b/doc/salome/gui/GEOM/input/section_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/sewing_operation.doc b/doc/salome/gui/GEOM/input/sewing_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/shape_processing_operation.doc b/doc/salome/gui/GEOM/input/shape_processing_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/shape_recognition.doc b/doc/salome/gui/GEOM/input/shape_recognition.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/struct_elem_visualisation.doc b/doc/salome/gui/GEOM/input/struct_elem_visualisation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/suppress_faces_operation.doc b/doc/salome/gui/GEOM/input/suppress_faces_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/suppress_holes_operation.doc b/doc/salome/gui/GEOM/input/suppress_holes_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/suppress_internal_wires_operation.doc b/doc/salome/gui/GEOM/input/suppress_internal_wires_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tolerance.doc b/doc/salome/gui/GEOM/input/tolerance.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/transformation_operations.doc b/doc/salome/gui/GEOM/input/transformation_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/transforming_geom_objs.doc b/doc/salome/gui/GEOM/input/transforming_geom_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/translation_operation.doc b/doc/salome/gui/GEOM/input/translation_operation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/transparency.doc b/doc/salome/gui/GEOM/input/transparency.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_angle.doc b/doc/salome/gui/GEOM/input/tui_angle.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_arranging_study_objects.doc b/doc/salome/gui/GEOM/input/tui_arranging_study_objects.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_auto_completion_documentation.doc b/doc/salome/gui/GEOM/input/tui_auto_completion_documentation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_basic_operations.doc b/doc/salome/gui/GEOM/input/tui_basic_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_basic_properties.doc b/doc/salome/gui/GEOM/input/tui_basic_properties.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_blocks_operations.doc b/doc/salome/gui/GEOM/input/tui_blocks_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_boolean_operations.doc b/doc/salome/gui/GEOM/input/tui_boolean_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_bounding_box.doc b/doc/salome/gui/GEOM/input/tui_bounding_box.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_building_by_blocks.doc b/doc/salome/gui/GEOM/input/tui_building_by_blocks.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_center_of_mass.doc b/doc/salome/gui/GEOM/input/tui_center_of_mass.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_check_compound_of_blocks.doc b/doc/salome/gui/GEOM/input/tui_check_compound_of_blocks.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_check_self_intersections.doc b/doc/salome/gui/GEOM/input/tui_check_self_intersections.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_check_shape.doc b/doc/salome/gui/GEOM/input/tui_check_shape.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_complex_objs.doc b/doc/salome/gui/GEOM/input/tui_complex_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_creating_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_creating_geom_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_execution_distribution.doc b/doc/salome/gui/GEOM/input/tui_execution_distribution.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_free_boundaries.doc b/doc/salome/gui/GEOM/input/tui_free_boundaries.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_free_faces.doc b/doc/salome/gui/GEOM/input/tui_free_faces.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_get_non_blocks.doc b/doc/salome/gui/GEOM/input/tui_get_non_blocks.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_import_export.doc b/doc/salome/gui/GEOM/input/tui_import_export.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_inertia.doc b/doc/salome/gui/GEOM/input/tui_inertia.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_measurement_tools.doc b/doc/salome/gui/GEOM/input/tui_measurement_tools.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_min_distance.doc b/doc/salome/gui/GEOM/input/tui_min_distance.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_normal_face.doc b/doc/salome/gui/GEOM/input/tui_normal_face.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_notebook_geom.doc b/doc/salome/gui/GEOM/input/tui_notebook_geom.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_point_coordinates.doc b/doc/salome/gui/GEOM/input/tui_point_coordinates.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_primitives.doc b/doc/salome/gui/GEOM/input/tui_primitives.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_repairing_operations.doc b/doc/salome/gui/GEOM/input/tui_repairing_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_sketcher.doc b/doc/salome/gui/GEOM/input/tui_sketcher.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_swig_examples.doc b/doc/salome/gui/GEOM/input/tui_swig_examples.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_test_all.doc b/doc/salome/gui/GEOM/input/tui_test_all.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_test_measures.doc b/doc/salome/gui/GEOM/input/tui_test_measures.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_test_others.doc b/doc/salome/gui/GEOM/input/tui_test_others.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_test_spanner.doc b/doc/salome/gui/GEOM/input/tui_test_spanner.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_tolerance.doc b/doc/salome/gui/GEOM/input/tui_tolerance.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_topological_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_topological_geom_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_transformation.doc b/doc/salome/gui/GEOM/input/tui_transformation.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_transformation_operations.doc b/doc/salome/gui/GEOM/input/tui_transformation_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_viewing_geom_objs.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_whatis.doc b/doc/salome/gui/GEOM/input/tui_whatis.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/tui_working_with_groups.doc b/doc/salome/gui/GEOM/input/tui_working_with_groups.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/using_boolean_operations.doc b/doc/salome/gui/GEOM/input/using_boolean_operations.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/using_measurement_tools.doc b/doc/salome/gui/GEOM/input/using_measurement_tools.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/using_notebook_geom_page.doc b/doc/salome/gui/GEOM/input/using_notebook_geom_page.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/whatis.doc b/doc/salome/gui/GEOM/input/whatis.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/working_with_groups.doc b/doc/salome/gui/GEOM/input/working_with_groups.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/input/xao_format.doc b/doc/salome/gui/GEOM/input/xao_format.doc old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/static/header_py.html.in b/doc/salome/gui/GEOM/static/header_py.html.in old mode 100755 new mode 100644 diff --git a/doc/salome/gui/GEOM/static/salome_extra.css b/doc/salome/gui/GEOM/static/salome_extra.css old mode 100755 new mode 100644 diff --git a/doc/salome/tui/images/geomscreen.png b/doc/salome/tui/images/geomscreen.png old mode 100755 new mode 100644 diff --git a/doc/salome/tui/input/index.doc b/doc/salome/tui/input/index.doc old mode 100755 new mode 100644 diff --git a/doc/salome/tui/static/salome_extra.css b/doc/salome/tui/static/salome_extra.css old mode 100755 new mode 100644 diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl old mode 100755 new mode 100644 diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl old mode 100755 new mode 100644 diff --git a/resources/GEOM.config b/resources/GEOM.config old mode 100755 new mode 100644 diff --git a/resources/GEOMActions.xml b/resources/GEOMActions.xml old mode 100755 new mode 100644 diff --git a/resources/GEOMCatalog.xml.in b/resources/GEOMCatalog.xml.in old mode 100755 new mode 100644 diff --git a/resources/GEOMDS_Resources b/resources/GEOMDS_Resources old mode 100755 new mode 100644 diff --git a/resources/GEOM_en.xml b/resources/GEOM_en.xml old mode 100755 new mode 100644 diff --git a/resources/GEOM_fr.xml b/resources/GEOM_fr.xml old mode 100755 new mode 100644 diff --git a/resources/ImportExport b/resources/ImportExport old mode 100755 new mode 100644 diff --git a/resources/ModuleGeom.png b/resources/ModuleGeom.png old mode 100755 new mode 100644 diff --git a/resources/Plugin.in b/resources/Plugin.in old mode 100755 new mode 100644 diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in old mode 100755 new mode 100644 diff --git a/resources/ShHealing b/resources/ShHealing old mode 100755 new mode 100644 diff --git a/resources/angle.png b/resources/angle.png old mode 100755 new mode 100644 diff --git a/resources/arc.png b/resources/arc.png old mode 100755 new mode 100644 diff --git a/resources/arccenter.png b/resources/arccenter.png old mode 100755 new mode 100644 diff --git a/resources/archimede.png b/resources/archimede.png old mode 100755 new mode 100644 diff --git a/resources/axisinertia.png b/resources/axisinertia.png old mode 100755 new mode 100644 diff --git a/resources/basicproperties.png b/resources/basicproperties.png old mode 100755 new mode 100644 diff --git a/resources/bezier.png b/resources/bezier.png old mode 100755 new mode 100644 diff --git a/resources/block_2f.png b/resources/block_2f.png old mode 100755 new mode 100644 diff --git a/resources/block_6f.png b/resources/block_6f.png old mode 100755 new mode 100644 diff --git a/resources/block_face_2e.png b/resources/block_face_2e.png old mode 100755 new mode 100644 diff --git a/resources/block_face_4e.png b/resources/block_face_4e.png old mode 100755 new mode 100644 diff --git a/resources/block_face_4v.png b/resources/block_face_4v.png old mode 100755 new mode 100644 diff --git a/resources/block_multitrsf_double.png b/resources/block_multitrsf_double.png old mode 100755 new mode 100644 diff --git a/resources/block_multitrsf_simple.png b/resources/block_multitrsf_simple.png old mode 100755 new mode 100644 diff --git a/resources/bounding.png b/resources/bounding.png old mode 100755 new mode 100644 diff --git a/resources/box.png b/resources/box.png old mode 100755 new mode 100644 diff --git a/resources/box2points.png b/resources/box2points.png old mode 100755 new mode 100644 diff --git a/resources/boxdxyz.png b/resources/boxdxyz.png old mode 100755 new mode 100644 diff --git a/resources/build_compound.png b/resources/build_compound.png old mode 100755 new mode 100644 diff --git a/resources/build_edge.png b/resources/build_edge.png old mode 100755 new mode 100644 diff --git a/resources/build_edge_curve.png b/resources/build_edge_curve.png old mode 100755 new mode 100644 diff --git a/resources/build_edge_wire.png b/resources/build_edge_wire.png old mode 100755 new mode 100644 diff --git a/resources/build_face.png b/resources/build_face.png old mode 100755 new mode 100644 diff --git a/resources/build_shell.png b/resources/build_shell.png old mode 100755 new mode 100644 diff --git a/resources/build_solid.png b/resources/build_solid.png old mode 100755 new mode 100644 diff --git a/resources/build_wire.png b/resources/build_wire.png old mode 100755 new mode 100644 diff --git a/resources/centergravity.png b/resources/centergravity.png old mode 100755 new mode 100644 diff --git a/resources/chamfer.png b/resources/chamfer.png old mode 100755 new mode 100644 diff --git a/resources/chamferall.png b/resources/chamferall.png old mode 100755 new mode 100644 diff --git a/resources/chamferedge.png b/resources/chamferedge.png old mode 100755 new mode 100644 diff --git a/resources/chamferface.png b/resources/chamferface.png old mode 100755 new mode 100644 diff --git a/resources/change_direction.png b/resources/change_direction.png old mode 100755 new mode 100644 diff --git a/resources/check.png b/resources/check.png old mode 100755 new mode 100644 diff --git a/resources/check_blocks_compound.png b/resources/check_blocks_compound.png old mode 100755 new mode 100644 diff --git a/resources/check_self_intersections.png b/resources/check_self_intersections.png old mode 100755 new mode 100644 diff --git a/resources/circle.png b/resources/circle.png old mode 100755 new mode 100644 diff --git a/resources/circle3points.png b/resources/circle3points.png old mode 100755 new mode 100644 diff --git a/resources/circlepointvector.png b/resources/circlepointvector.png old mode 100755 new mode 100644 diff --git a/resources/closecontour.png b/resources/closecontour.png old mode 100755 new mode 100644 diff --git a/resources/common.png b/resources/common.png old mode 100755 new mode 100644 diff --git a/resources/cone.png b/resources/cone.png old mode 100755 new mode 100644 diff --git a/resources/conepointvector.png b/resources/conepointvector.png old mode 100755 new mode 100644 diff --git a/resources/cut.png b/resources/cut.png old mode 100755 new mode 100644 diff --git a/resources/cylinder.png b/resources/cylinder.png old mode 100755 new mode 100644 diff --git a/resources/cylinderpointvector.png b/resources/cylinderpointvector.png old mode 100755 new mode 100644 diff --git a/resources/delete.png b/resources/delete.png old mode 100755 new mode 100644 diff --git a/resources/disk.png b/resources/disk.png old mode 100755 new mode 100644 diff --git a/resources/disk3points.png b/resources/disk3points.png old mode 100755 new mode 100644 diff --git a/resources/disk_pntvecr.png b/resources/disk_pntvecr.png old mode 100755 new mode 100644 diff --git a/resources/disk_r.png b/resources/disk_r.png old mode 100755 new mode 100644 diff --git a/resources/display.png b/resources/display.png old mode 100755 new mode 100644 diff --git a/resources/displayall.png b/resources/displayall.png old mode 100755 new mode 100644 diff --git a/resources/displayonly.png b/resources/displayonly.png old mode 100755 new mode 100644 diff --git a/resources/divided_disk.png b/resources/divided_disk.png old mode 100755 new mode 100644 diff --git a/resources/dividedcylinder.png b/resources/dividedcylinder.png old mode 100755 new mode 100644 diff --git a/resources/dividedcylinder_r_h.png b/resources/dividedcylinder_r_h.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshape.png b/resources/dlg_pipetshape.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamfer.png b/resources/dlg_pipetshapechamfer.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferh.png b/resources/dlg_pipetshapechamferh.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferl1.png b/resources/dlg_pipetshapechamferl1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferl2.png b/resources/dlg_pipetshapechamferl2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferr1.png b/resources/dlg_pipetshapechamferr1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferr2.png b/resources/dlg_pipetshapechamferr2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferw.png b/resources/dlg_pipetshapechamferw.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferw1.png b/resources/dlg_pipetshapechamferw1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapechamferw2.png b/resources/dlg_pipetshapechamferw2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefillet.png b/resources/dlg_pipetshapefillet.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefilletl1.png b/resources/dlg_pipetshapefilletl1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefilletl2.png b/resources/dlg_pipetshapefilletl2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefilletr1.png b/resources/dlg_pipetshapefilletr1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefilletr2.png b/resources/dlg_pipetshapefilletr2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefilletrf.png b/resources/dlg_pipetshapefilletrf.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefilletw1.png b/resources/dlg_pipetshapefilletw1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapefilletw2.png b/resources/dlg_pipetshapefilletw2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapel1.png b/resources/dlg_pipetshapel1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapel2.png b/resources/dlg_pipetshapel2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshaper1.png b/resources/dlg_pipetshaper1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshaper2.png b/resources/dlg_pipetshaper2.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapew1.png b/resources/dlg_pipetshapew1.png old mode 100755 new mode 100644 diff --git a/resources/dlg_pipetshapew2.png b/resources/dlg_pipetshapew2.png old mode 100755 new mode 100644 diff --git a/resources/draft.png b/resources/draft.png old mode 100755 new mode 100644 diff --git a/resources/edit_points.png b/resources/edit_points.png old mode 100755 new mode 100644 diff --git a/resources/erase.png b/resources/erase.png old mode 100755 new mode 100644 diff --git a/resources/eraseall.png b/resources/eraseall.png old mode 100755 new mode 100644 diff --git a/resources/exportxao.png b/resources/exportxao.png old mode 100755 new mode 100644 diff --git a/resources/extruded_boss.png b/resources/extruded_boss.png old mode 100755 new mode 100644 diff --git a/resources/extruded_cut.png b/resources/extruded_cut.png old mode 100755 new mode 100644 diff --git a/resources/face_hw.png b/resources/face_hw.png old mode 100755 new mode 100644 diff --git a/resources/face_vechw.png b/resources/face_vechw.png old mode 100755 new mode 100644 diff --git a/resources/feature_detect.png b/resources/feature_detect.png old mode 100755 new mode 100644 diff --git a/resources/field_edit.png b/resources/field_edit.png old mode 100755 new mode 100644 diff --git a/resources/field_new.png b/resources/field_new.png old mode 100755 new mode 100644 diff --git a/resources/fillet.png b/resources/fillet.png old mode 100755 new mode 100644 diff --git a/resources/fillet1d.png b/resources/fillet1d.png old mode 100755 new mode 100644 diff --git a/resources/filletall.png b/resources/filletall.png old mode 100755 new mode 100644 diff --git a/resources/filletedge.png b/resources/filletedge.png old mode 100755 new mode 100644 diff --git a/resources/filletface.png b/resources/filletface.png old mode 100755 new mode 100644 diff --git a/resources/filletwire.png b/resources/filletwire.png old mode 100755 new mode 100644 diff --git a/resources/filling.png b/resources/filling.png old mode 100755 new mode 100644 diff --git a/resources/folder.png b/resources/folder.png old mode 100755 new mode 100644 diff --git a/resources/free_faces.png b/resources/free_faces.png old mode 100755 new mode 100644 diff --git a/resources/fuse.png b/resources/fuse.png old mode 100755 new mode 100644 diff --git a/resources/fuse_collinear_edges.png b/resources/fuse_collinear_edges.png old mode 100755 new mode 100644 diff --git a/resources/geometry.png b/resources/geometry.png old mode 100755 new mode 100644 diff --git a/resources/get_non_blocks.png b/resources/get_non_blocks.png old mode 100755 new mode 100644 diff --git a/resources/glue.png b/resources/glue.png old mode 100755 new mode 100644 diff --git a/resources/glue2.png b/resources/glue2.png old mode 100755 new mode 100644 diff --git a/resources/group_edit.png b/resources/group_edit.png old mode 100755 new mode 100644 diff --git a/resources/group_new.png b/resources/group_new.png old mode 100755 new mode 100644 diff --git a/resources/import_picture.png b/resources/import_picture.png old mode 100755 new mode 100644 diff --git a/resources/importxao.png b/resources/importxao.png old mode 100755 new mode 100644 diff --git a/resources/interpol.png b/resources/interpol.png old mode 100755 new mode 100644 diff --git a/resources/isoline.png b/resources/isoline.png old mode 100755 new mode 100644 diff --git a/resources/isoline_v.png b/resources/isoline_v.png old mode 100755 new mode 100644 diff --git a/resources/limit_tolerance.png b/resources/limit_tolerance.png old mode 100755 new mode 100644 diff --git a/resources/line.png b/resources/line.png old mode 100755 new mode 100644 diff --git a/resources/line2points.png b/resources/line2points.png old mode 100755 new mode 100644 diff --git a/resources/managedimensions.png b/resources/managedimensions.png old mode 100755 new mode 100644 diff --git a/resources/marker.png b/resources/marker.png old mode 100755 new mode 100644 diff --git a/resources/marker2.png b/resources/marker2.png old mode 100755 new mode 100644 diff --git a/resources/marker3.png b/resources/marker3.png old mode 100755 new mode 100644 diff --git a/resources/mindist.png b/resources/mindist.png old mode 100755 new mode 100644 diff --git a/resources/mirrorAxe.png b/resources/mirrorAxe.png old mode 100755 new mode 100644 diff --git a/resources/mirrorPlane.png b/resources/mirrorPlane.png old mode 100755 new mode 100644 diff --git a/resources/mirrorPoint.png b/resources/mirrorPoint.png old mode 100755 new mode 100644 diff --git a/resources/multirotation.png b/resources/multirotation.png old mode 100755 new mode 100644 diff --git a/resources/multirotationdouble.png b/resources/multirotationdouble.png old mode 100755 new mode 100644 diff --git a/resources/multirotationsimple.png b/resources/multirotationsimple.png old mode 100755 new mode 100644 diff --git a/resources/multitranslation.png b/resources/multitranslation.png old mode 100755 new mode 100644 diff --git a/resources/multitranslationdouble.png b/resources/multitranslationdouble.png old mode 100755 new mode 100644 diff --git a/resources/multitranslationsimple.png b/resources/multitranslationsimple.png old mode 100755 new mode 100644 diff --git a/resources/normale.png b/resources/normale.png old mode 100755 new mode 100644 diff --git a/resources/offset.png b/resources/offset.png old mode 100755 new mode 100644 diff --git a/resources/partition.png b/resources/partition.png old mode 100755 new mode 100644 diff --git a/resources/partitionkeep.png b/resources/partitionkeep.png old mode 100755 new mode 100644 diff --git a/resources/partitionplane.png b/resources/partitionplane.png old mode 100755 new mode 100644 diff --git a/resources/pipebinormal.png b/resources/pipebinormal.png old mode 100755 new mode 100644 diff --git a/resources/pipesections.png b/resources/pipesections.png old mode 100755 new mode 100644 diff --git a/resources/pipetshape.png b/resources/pipetshape.png old mode 100755 new mode 100644 diff --git a/resources/pipetshape_import_icon.png b/resources/pipetshape_import_icon.png old mode 100755 new mode 100644 diff --git a/resources/pipetshape_section.png b/resources/pipetshape_section.png old mode 100755 new mode 100644 diff --git a/resources/plane.png b/resources/plane.png old mode 100755 new mode 100644 diff --git a/resources/plane3points.png b/resources/plane3points.png old mode 100755 new mode 100644 diff --git a/resources/planeWorking.png b/resources/planeWorking.png old mode 100755 new mode 100644 diff --git a/resources/planeface.png b/resources/planeface.png old mode 100755 new mode 100644 diff --git a/resources/planepointvector.png b/resources/planepointvector.png old mode 100755 new mode 100644 diff --git a/resources/planeworkingface.png b/resources/planeworkingface.png old mode 100755 new mode 100644 diff --git a/resources/planeworkingorigin.png b/resources/planeworkingorigin.png old mode 100755 new mode 100644 diff --git a/resources/planeworkingvector.png b/resources/planeworkingvector.png old mode 100755 new mode 100644 diff --git a/resources/point2.png b/resources/point2.png old mode 100755 new mode 100644 diff --git a/resources/point3.png b/resources/point3.png old mode 100755 new mode 100644 diff --git a/resources/point_coord.png b/resources/point_coord.png old mode 100755 new mode 100644 diff --git a/resources/polyline.png b/resources/polyline.png old mode 100755 new mode 100644 diff --git a/resources/position.png b/resources/position.png old mode 100755 new mode 100644 diff --git a/resources/position2.png b/resources/position2.png old mode 100755 new mode 100644 diff --git a/resources/position3.png b/resources/position3.png old mode 100755 new mode 100644 diff --git a/resources/prism.png b/resources/prism.png old mode 100755 new mode 100644 diff --git a/resources/prism2.png b/resources/prism2.png old mode 100755 new mode 100644 diff --git a/resources/prism3.png b/resources/prism3.png old mode 100755 new mode 100644 diff --git a/resources/projection.png b/resources/projection.png old mode 100755 new mode 100644 diff --git a/resources/propagate.png b/resources/propagate.png old mode 100755 new mode 100644 diff --git a/resources/rectangle.png b/resources/rectangle.png old mode 100755 new mode 100644 diff --git a/resources/redo.png b/resources/redo.png old mode 100755 new mode 100644 diff --git a/resources/remove_extra_edges.png b/resources/remove_extra_edges.png old mode 100755 new mode 100644 diff --git a/resources/remove_webs.png b/resources/remove_webs.png old mode 100755 new mode 100644 diff --git a/resources/revol.png b/resources/revol.png old mode 100755 new mode 100644 diff --git a/resources/rotate.png b/resources/rotate.png old mode 100755 new mode 100644 diff --git a/resources/scale.png b/resources/scale.png old mode 100755 new mode 100644 diff --git a/resources/scale_along_axes.png b/resources/scale_along_axes.png old mode 100755 new mode 100644 diff --git a/resources/section.png b/resources/section.png old mode 100755 new mode 100644 diff --git a/resources/select1.png b/resources/select1.png old mode 100755 new mode 100644 diff --git a/resources/sewing.png b/resources/sewing.png old mode 100755 new mode 100644 diff --git a/resources/shading_with_edges.png b/resources/shading_with_edges.png old mode 100755 new mode 100644 diff --git a/resources/shapeprocess.png b/resources/shapeprocess.png old mode 100755 new mode 100644 diff --git a/resources/shared_shapes.png b/resources/shared_shapes.png old mode 100755 new mode 100644 diff --git a/resources/sketch.png b/resources/sketch.png old mode 100755 new mode 100644 diff --git a/resources/smoothingsurface.png b/resources/smoothingsurface.png old mode 100755 new mode 100644 diff --git a/resources/smoothingsurface_lpoints.png b/resources/smoothingsurface_lpoints.png old mode 100755 new mode 100644 diff --git a/resources/sphere.png b/resources/sphere.png old mode 100755 new mode 100644 diff --git a/resources/spheredxyz.png b/resources/spheredxyz.png old mode 100755 new mode 100644 diff --git a/resources/spherepoint.png b/resources/spherepoint.png old mode 100755 new mode 100644 diff --git a/resources/spline.png b/resources/spline.png old mode 100755 new mode 100644 diff --git a/resources/suppressintwires.png b/resources/suppressintwires.png old mode 100755 new mode 100644 diff --git a/resources/supressface.png b/resources/supressface.png old mode 100755 new mode 100644 diff --git a/resources/tolerance.png b/resources/tolerance.png old mode 100755 new mode 100644 diff --git a/resources/torus.png b/resources/torus.png old mode 100755 new mode 100644 diff --git a/resources/toruspointvector.png b/resources/toruspointvector.png old mode 100755 new mode 100644 diff --git a/resources/translation.png b/resources/translation.png old mode 100755 new mode 100644 diff --git a/resources/translationDxyz.png b/resources/translationDxyz.png old mode 100755 new mode 100644 diff --git a/resources/translationPoints.png b/resources/translationPoints.png old mode 100755 new mode 100644 diff --git a/resources/translationVector.png b/resources/translationVector.png old mode 100755 new mode 100644 diff --git a/resources/tree_block.png b/resources/tree_block.png old mode 100755 new mode 100644 diff --git a/resources/tree_compound.png b/resources/tree_compound.png old mode 100755 new mode 100644 diff --git a/resources/tree_compsolid.png b/resources/tree_compsolid.png old mode 100755 new mode 100644 diff --git a/resources/tree_edge.png b/resources/tree_edge.png old mode 100755 new mode 100644 diff --git a/resources/tree_face.png b/resources/tree_face.png old mode 100755 new mode 100644 diff --git a/resources/tree_field_edge.png b/resources/tree_field_edge.png old mode 100755 new mode 100644 diff --git a/resources/tree_field_face.png b/resources/tree_field_face.png old mode 100755 new mode 100644 diff --git a/resources/tree_field_solid.png b/resources/tree_field_solid.png old mode 100755 new mode 100644 diff --git a/resources/tree_field_vertex.png b/resources/tree_field_vertex.png old mode 100755 new mode 100644 diff --git a/resources/tree_group_edge.png b/resources/tree_group_edge.png old mode 100755 new mode 100644 diff --git a/resources/tree_group_face.png b/resources/tree_group_face.png old mode 100755 new mode 100644 diff --git a/resources/tree_group_solid.png b/resources/tree_group_solid.png old mode 100755 new mode 100644 diff --git a/resources/tree_group_vertex.png b/resources/tree_group_vertex.png old mode 100755 new mode 100644 diff --git a/resources/tree_lcs.png b/resources/tree_lcs.png old mode 100755 new mode 100644 diff --git a/resources/tree_pipetshape.png b/resources/tree_pipetshape.png old mode 100755 new mode 100644 diff --git a/resources/tree_shape.png b/resources/tree_shape.png old mode 100755 new mode 100644 diff --git a/resources/tree_shell.png b/resources/tree_shell.png old mode 100755 new mode 100644 diff --git a/resources/tree_smoothingsurface.png b/resources/tree_smoothingsurface.png old mode 100755 new mode 100644 diff --git a/resources/tree_solid.png b/resources/tree_solid.png old mode 100755 new mode 100644 diff --git a/resources/tree_vertex.png b/resources/tree_vertex.png old mode 100755 new mode 100644 diff --git a/resources/tree_wire.png b/resources/tree_wire.png old mode 100755 new mode 100644 diff --git a/resources/undo.png b/resources/undo.png old mode 100755 new mode 100644 diff --git a/resources/union_faces.png b/resources/union_faces.png old mode 100755 new mode 100644 diff --git a/resources/vector.png b/resources/vector.png old mode 100755 new mode 100644 diff --git a/resources/vector2points.png b/resources/vector2points.png old mode 100755 new mode 100644 diff --git a/resources/vector_mode.png b/resources/vector_mode.png old mode 100755 new mode 100644 diff --git a/resources/vectordxyz.png b/resources/vectordxyz.png old mode 100755 new mode 100644 diff --git a/resources/whatis.png b/resources/whatis.png old mode 100755 new mode 100644 diff --git a/resources/wireframe.png b/resources/wireframe.png old mode 100755 new mode 100644 diff --git a/src/ARCHIMEDE/Archimede_VolumeSection.cxx b/src/ARCHIMEDE/Archimede_VolumeSection.cxx old mode 100755 new mode 100644 diff --git a/src/ARCHIMEDE/Archimede_VolumeSection.hxx b/src/ARCHIMEDE/Archimede_VolumeSection.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/AdvancedEngine.cxx b/src/AdvancedEngine/AdvancedEngine.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc b/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/AdvancedEngine_Types.hxx b/src/AdvancedEngine/AdvancedEngine_Types.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx b/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx b/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx b/src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx b/src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx b/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx b/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx b/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI.cxx b/src/AdvancedGUI/AdvancedGUI.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI.h b/src/AdvancedGUI/AdvancedGUI.h old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx b/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h b/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.h old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_images.ts b/src/AdvancedGUI/AdvancedGUI_images.ts old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_msg_en.ts b/src/AdvancedGUI/AdvancedGUI_msg_en.ts old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_msg_fr.ts b/src/AdvancedGUI/AdvancedGUI_msg_fr.ts old mode 100755 new mode 100644 diff --git a/src/AdvancedGUI/AdvancedGUI_msg_ja.ts b/src/AdvancedGUI/AdvancedGUI_msg_ja.ts old mode 100755 new mode 100644 diff --git a/src/BREPExport/BREPExport.cxx b/src/BREPExport/BREPExport.cxx old mode 100755 new mode 100644 diff --git a/src/BREPImport/BREPImport.cxx b/src/BREPImport/BREPImport.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI.cxx b/src/BasicGUI/BasicGUI.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI.h b/src/BasicGUI/BasicGUI.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_ArcDlg.cxx b/src/BasicGUI/BasicGUI_ArcDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_ArcDlg.h b/src/BasicGUI/BasicGUI_ArcDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_CircleDlg.cxx b/src/BasicGUI/BasicGUI_CircleDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_CircleDlg.h b/src/BasicGUI/BasicGUI_CircleDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_CurveDlg.cxx b/src/BasicGUI/BasicGUI_CurveDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_CurveDlg.h b/src/BasicGUI/BasicGUI_CurveDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_EllipseDlg.cxx b/src/BasicGUI/BasicGUI_EllipseDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_EllipseDlg.h b/src/BasicGUI/BasicGUI_EllipseDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_LineDlg.cxx b/src/BasicGUI/BasicGUI_LineDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_LineDlg.h b/src/BasicGUI/BasicGUI_LineDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_MarkerDlg.cxx b/src/BasicGUI/BasicGUI_MarkerDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_MarkerDlg.h b/src/BasicGUI/BasicGUI_MarkerDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_ParamCurveWidget.cxx b/src/BasicGUI/BasicGUI_ParamCurveWidget.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_ParamCurveWidget.h b/src/BasicGUI/BasicGUI_ParamCurveWidget.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_PlaneDlg.cxx b/src/BasicGUI/BasicGUI_PlaneDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_PlaneDlg.h b/src/BasicGUI/BasicGUI_PlaneDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_PointDlg.cxx b/src/BasicGUI/BasicGUI_PointDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_PointDlg.h b/src/BasicGUI/BasicGUI_PointDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_VectorDlg.cxx b/src/BasicGUI/BasicGUI_VectorDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_VectorDlg.h b/src/BasicGUI/BasicGUI_VectorDlg.h old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx b/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BasicGUI/BasicGUI_WorkingPlaneDlg.h b/src/BasicGUI/BasicGUI_WorkingPlaneDlg.h old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix.cxx b/src/BlockFix/BlockFix.cxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix.hxx b/src/BlockFix/BlockFix.hxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_BlockFixAPI.cxx b/src/BlockFix/BlockFix_BlockFixAPI.cxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_BlockFixAPI.hxx b/src/BlockFix/BlockFix_BlockFixAPI.hxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_CheckTool.cxx b/src/BlockFix/BlockFix_CheckTool.cxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_CheckTool.hxx b/src/BlockFix/BlockFix_CheckTool.hxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_SphereSpaceModifier.cxx b/src/BlockFix/BlockFix_SphereSpaceModifier.cxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_SphereSpaceModifier.hxx b/src/BlockFix/BlockFix_SphereSpaceModifier.hxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_UnionEdges.cxx b/src/BlockFix/BlockFix_UnionEdges.cxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_UnionEdges.hxx b/src/BlockFix/BlockFix_UnionEdges.hxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_UnionFaces.cxx b/src/BlockFix/BlockFix_UnionFaces.cxx old mode 100755 new mode 100644 diff --git a/src/BlockFix/BlockFix_UnionFaces.hxx b/src/BlockFix/BlockFix_UnionFaces.hxx old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI.cxx b/src/BlocksGUI/BlocksGUI.cxx old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI.h b/src/BlocksGUI/BlocksGUI.h old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_BlockDlg.cxx b/src/BlocksGUI/BlocksGUI_BlockDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_BlockDlg.h b/src/BlocksGUI/BlocksGUI_BlockDlg.h old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx b/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_ExplodeDlg.h b/src/BlocksGUI/BlocksGUI_ExplodeDlg.h old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_PropagateDlg.cxx b/src/BlocksGUI/BlocksGUI_PropagateDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_PropagateDlg.h b/src/BlocksGUI/BlocksGUI_PropagateDlg.h old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx b/src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_QuadFaceDlg.h b/src/BlocksGUI/BlocksGUI_QuadFaceDlg.h old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_TrsfDlg.cxx b/src/BlocksGUI/BlocksGUI_TrsfDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BlocksGUI/BlocksGUI_TrsfDlg.h b/src/BlocksGUI/BlocksGUI_TrsfDlg.h old mode 100755 new mode 100644 diff --git a/src/BooleanGUI/BooleanGUI.cxx b/src/BooleanGUI/BooleanGUI.cxx old mode 100755 new mode 100644 diff --git a/src/BooleanGUI/BooleanGUI.h b/src/BooleanGUI/BooleanGUI.h old mode 100755 new mode 100644 diff --git a/src/BooleanGUI/BooleanGUI_Dialog.cxx b/src/BooleanGUI/BooleanGUI_Dialog.cxx old mode 100755 new mode 100644 diff --git a/src/BooleanGUI/BooleanGUI_Dialog.h b/src/BooleanGUI/BooleanGUI_Dialog.h old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI.cxx b/src/BuildGUI/BuildGUI.cxx old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI.h b/src/BuildGUI/BuildGUI.h old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_CompoundDlg.cxx b/src/BuildGUI/BuildGUI_CompoundDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_CompoundDlg.h b/src/BuildGUI/BuildGUI_CompoundDlg.h old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_EdgeDlg.cxx b/src/BuildGUI/BuildGUI_EdgeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_EdgeDlg.h b/src/BuildGUI/BuildGUI_EdgeDlg.h old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_FaceDlg.cxx b/src/BuildGUI/BuildGUI_FaceDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_FaceDlg.h b/src/BuildGUI/BuildGUI_FaceDlg.h old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_ShellDlg.cxx b/src/BuildGUI/BuildGUI_ShellDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_ShellDlg.h b/src/BuildGUI/BuildGUI_ShellDlg.h old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_SolidDlg.cxx b/src/BuildGUI/BuildGUI_SolidDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_SolidDlg.h b/src/BuildGUI/BuildGUI_SolidDlg.h old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_WireDlg.cxx b/src/BuildGUI/BuildGUI_WireDlg.cxx old mode 100755 new mode 100644 diff --git a/src/BuildGUI/BuildGUI_WireDlg.h b/src/BuildGUI/BuildGUI_WireDlg.h old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CMakeLists.txt b/src/CurveCreator/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator.hxx b/src/CurveCreator/CurveCreator.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Curve.cxx b/src/CurveCreator/CurveCreator_Curve.cxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Curve.hxx b/src/CurveCreator/CurveCreator_Curve.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_CurveEditor.cxx b/src/CurveCreator/CurveCreator_CurveEditor.cxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_CurveEditor.hxx b/src/CurveCreator/CurveCreator_CurveEditor.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Diff.cxx b/src/CurveCreator/CurveCreator_Diff.cxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Diff.hxx b/src/CurveCreator/CurveCreator_Diff.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_ICurve.cxx b/src/CurveCreator/CurveCreator_ICurve.cxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_ICurve.hxx b/src/CurveCreator/CurveCreator_ICurve.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Macro.hxx b/src/CurveCreator/CurveCreator_Macro.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Operation.cxx b/src/CurveCreator/CurveCreator_Operation.cxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Operation.hxx b/src/CurveCreator/CurveCreator_Operation.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Section.hxx b/src/CurveCreator/CurveCreator_Section.hxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_UndoOptsDlg.cxx b/src/CurveCreator/CurveCreator_UndoOptsDlg.cxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_UndoOptsDlg.h b/src/CurveCreator/CurveCreator_UndoOptsDlg.h old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Widget.cxx b/src/CurveCreator/CurveCreator_Widget.cxx old mode 100755 new mode 100644 diff --git a/src/CurveCreator/CurveCreator_Widget.h b/src/CurveCreator/CurveCreator_Widget.h old mode 100755 new mode 100644 diff --git a/src/DependencyTree/CMakeLists.txt b/src/DependencyTree/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree.h b/src/DependencyTree/DependencyTree.h old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_Arrow.cxx b/src/DependencyTree/DependencyTree_Arrow.cxx old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_Arrow.h b/src/DependencyTree/DependencyTree_Arrow.h old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_Object.cxx b/src/DependencyTree/DependencyTree_Object.cxx old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_Object.h b/src/DependencyTree/DependencyTree_Object.h old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_Selector.cxx b/src/DependencyTree/DependencyTree_Selector.cxx old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_Selector.h b/src/DependencyTree/DependencyTree_Selector.h old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_View.h b/src/DependencyTree/DependencyTree_View.h old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx old mode 100755 new mode 100644 diff --git a/src/DependencyTree/DependencyTree_ViewModel.h b/src/DependencyTree/DependencyTree_ViewModel.h old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/DependencyTree_msg_en.ts b/src/DependencyTree/resources/DependencyTree_msg_en.ts old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/DependencyTree_msg_fr.ts b/src/DependencyTree/resources/DependencyTree_msg_fr.ts old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/DependencyTree_msg_ja.ts b/src/DependencyTree/resources/DependencyTree_msg_ja.ts old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/tree_view_dump.png b/src/DependencyTree/resources/tree_view_dump.png old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/tree_view_fitall.png b/src/DependencyTree/resources/tree_view_fitall.png old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/tree_view_fitarea.png b/src/DependencyTree/resources/tree_view_fitarea.png old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/tree_view_glpan.png b/src/DependencyTree/resources/tree_view_glpan.png old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/tree_view_pan.png b/src/DependencyTree/resources/tree_view_pan.png old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/tree_view_reset.png b/src/DependencyTree/resources/tree_view_reset.png old mode 100755 new mode 100644 diff --git a/src/DependencyTree/resources/tree_view_zoom.png b/src/DependencyTree/resources/tree_view_zoom.png old mode 100755 new mode 100644 diff --git a/src/DisplayGUI/DisplayGUI.cxx b/src/DisplayGUI/DisplayGUI.cxx old mode 100755 new mode 100644 diff --git a/src/DisplayGUI/DisplayGUI.h b/src/DisplayGUI/DisplayGUI.h old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef.cxx b/src/DlgRef/DlgRef.cxx old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef.h b/src/DlgRef/DlgRef.h old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Check1Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui b/src/DlgRef/DlgRef_1List1Spin1Btn_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui b/src/DlgRef/DlgRef_1Sel1Check1List_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui b/src/DlgRef/DlgRef_1Sel1Check1Sel_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel1Frame_QTD.ui b/src/DlgRef/DlgRef_1Sel1Frame_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui b/src/DlgRef/DlgRef_1Sel1List1Check3Btn_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel1Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel2Spin1View1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel2Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel2Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel3Check_QTD.ui b/src/DlgRef/DlgRef_1Sel3Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel3Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel3Spin2Check1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel3Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel3Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui b/src/DlgRef/DlgRef_1Sel5Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1SelExt_QTD.ui b/src/DlgRef/DlgRef_1SelExt_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Sel_QTD.ui b/src/DlgRef/DlgRef_1Sel_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_1Spin_QTD.ui b/src/DlgRef/DlgRef_1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui b/src/DlgRef/DlgRef_2Sel1List1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui b/src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel1List_QTD.ui b/src/DlgRef/DlgRef_2Sel1List_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui b/src/DlgRef/DlgRef_2Sel1Spin2Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel1Spin3Check1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui b/src/DlgRef/DlgRef_2Sel1SpinInt_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel2List_QTD.ui b/src/DlgRef/DlgRef_2Sel2List_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin1Push_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin2Push_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel2Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel2Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui b/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel3Spin_QTD.ui b/src/DlgRef/DlgRef_2Sel3Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2SelExt_QTD.ui b/src/DlgRef/DlgRef_2SelExt_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Sel_QTD.ui b/src/DlgRef/DlgRef_2Sel_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_2Spin_QTD.ui b/src/DlgRef/DlgRef_2Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Check_QTD.ui b/src/DlgRef/DlgRef_3Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Radio_QTD.ui b/src/DlgRef/DlgRef_3Radio_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel1Check_QTD.ui b/src/DlgRef/DlgRef_3Sel1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel1Spin_QTD.ui b/src/DlgRef/DlgRef_3Sel1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui b/src/DlgRef/DlgRef_3Sel2Check3Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel2Spin_QTD.ui b/src/DlgRef/DlgRef_3Sel2Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_3Sel3Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui b/src/DlgRef/DlgRef_3Sel3Spin2Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui b/src/DlgRef/DlgRef_3Sel4Spin2Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Sel_QTD.ui b/src/DlgRef/DlgRef_3Sel_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_3Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_3Spin_QTD.ui b/src/DlgRef/DlgRef_3Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui b/src/DlgRef/DlgRef_4Sel1List1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_4Sel1List_QTD.ui b/src/DlgRef/DlgRef_4Sel1List_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui b/src/DlgRef/DlgRef_4Sel1Spin2Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_4Spin_QTD.ui b/src/DlgRef/DlgRef_4Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_6Sel_QTD.ui b/src/DlgRef/DlgRef_6Sel_QTD.ui old mode 100755 new mode 100644 diff --git a/src/DlgRef/DlgRef_Skeleton_QTD.ui b/src/DlgRef/DlgRef_Skeleton_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI.h b/src/EntityGUI/EntityGUI.h old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui b/src/EntityGUI/EntityGUI_1Sel1Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui b/src/EntityGUI/EntityGUI_1Sel1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_1Sel_QTD.ui b/src/EntityGUI/EntityGUI_1Sel_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_1Spin_QTD.ui b/src/EntityGUI/EntityGUI_1Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui b/src/EntityGUI/EntityGUI_2Sel1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_2Spin_QTD.ui b/src/EntityGUI/EntityGUI_2Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui b/src/EntityGUI/EntityGUI_3Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_3Spin_QTD.ui b/src/EntityGUI/EntityGUI_3Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui b/src/EntityGUI/EntityGUI_4Spin1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_4Spin_QTD.ui b/src/EntityGUI/EntityGUI_4Spin_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Angles_QTD.ui b/src/EntityGUI/EntityGUI_Angles_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Controls_QTD.ui b/src/EntityGUI/EntityGUI_Controls_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Dir1_QTD.ui b/src/EntityGUI/EntityGUI_Dir1_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Dir2_QTD.ui b/src/EntityGUI/EntityGUI_Dir2_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.h b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.h old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_FieldDlg.cxx b/src/EntityGUI/EntityGUI_FieldDlg.cxx old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_FieldDlg.h b/src/EntityGUI/EntityGUI_FieldDlg.h old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_PictureImportDlg.cxx b/src/EntityGUI/EntityGUI_PictureImportDlg.cxx old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_PictureImportDlg.h b/src/EntityGUI/EntityGUI_PictureImportDlg.h old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Point_QTD.ui b/src/EntityGUI/EntityGUI_Point_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Skeleton_QTD.ui b/src/EntityGUI/EntityGUI_Skeleton_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_SketcherDlg.cxx b/src/EntityGUI/EntityGUI_SketcherDlg.cxx old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_SketcherDlg.h b/src/EntityGUI/EntityGUI_SketcherDlg.h old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_SubShapeDlg.cxx b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_SubShapeDlg.h b/src/EntityGUI/EntityGUI_SubShapeDlg.h old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Type_QTD.ui b/src/EntityGUI/EntityGUI_Type_QTD.ui old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Widgets.cxx b/src/EntityGUI/EntityGUI_Widgets.cxx old mode 100755 new mode 100644 diff --git a/src/EntityGUI/EntityGUI_Widgets.h b/src/EntityGUI/EntityGUI_Widgets.h old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Application.cxx b/src/GEOM/GEOM_Application.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Application.hxx b/src/GEOM/GEOM_Application.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Application.ixx b/src/GEOM/GEOM_Application.ixx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Application.jxx b/src/GEOM/GEOM_Application.jxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_BaseDriver.cxx b/src/GEOM/GEOM_BaseDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_BaseDriver.hxx b/src/GEOM/GEOM_BaseDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_BaseObject.cxx b/src/GEOM/GEOM_BaseObject.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_BaseObject.hxx b/src/GEOM/GEOM_BaseObject.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Engine.hxx b/src/GEOM/GEOM_Engine.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Field.cxx b/src/GEOM/GEOM_Field.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Field.hxx b/src/GEOM/GEOM_Field.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Function.cxx b/src/GEOM/GEOM_Function.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Function.hxx b/src/GEOM/GEOM_Function.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_IField.hxx b/src/GEOM/GEOM_IField.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_IOperations.cxx b/src/GEOM/GEOM_IOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_IOperations.hxx b/src/GEOM/GEOM_IOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_ISubShape.hxx b/src/GEOM/GEOM_ISubShape.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Object.cxx b/src/GEOM/GEOM_Object.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Object.hxx b/src/GEOM/GEOM_Object.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_PythonDump.cxx b/src/GEOM/GEOM_PythonDump.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_PythonDump.hxx b/src/GEOM/GEOM_PythonDump.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Solver.cxx b/src/GEOM/GEOM_Solver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_Solver.hxx b/src/GEOM/GEOM_Solver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_SubShapeDriver.cxx b/src/GEOM/GEOM_SubShapeDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM/GEOM_SubShapeDriver.hxx b/src/GEOM/GEOM_SubShapeDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/Handle_GEOM_Application.hxx b/src/GEOM/Handle_GEOM_Application.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/FILES b/src/GEOMAlgo/FILES old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Algo.hxx b/src/GEOMAlgo/GEOMAlgo_Algo.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx b/src/GEOMAlgo/GEOMAlgo_BuilderShape.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Clsf.cxx b/src/GEOMAlgo/GEOMAlgo_Clsf.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Clsf.hxx b/src/GEOMAlgo/GEOMAlgo_Clsf.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx b/src/GEOMAlgo/GEOMAlgo_ClsfBox.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx b/src/GEOMAlgo/GEOMAlgo_ClsfBox.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx b/src/GEOMAlgo/GEOMAlgo_ClsfSolid.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx b/src/GEOMAlgo/GEOMAlgo_ClsfSurf.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx b/src/GEOMAlgo/GEOMAlgo_ClsfSurf.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx b/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx b/src/GEOMAlgo/GEOMAlgo_CoupleOfShapes.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfPassKeyInteger.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfShapeMapOfShape.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfShapePnt.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn1.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn2.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOnQuad.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace_1.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace_2.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlace_3.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx b/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx b/src/GEOMAlgo/GEOMAlgo_GlueAnalyser.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx b/src/GEOMAlgo/GEOMAlgo_GlueDetector.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx b/src/GEOMAlgo/GEOMAlgo_GlueDetector.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer.hxx b/src/GEOMAlgo/GEOMAlgo_Gluer.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2.hxx b/src/GEOMAlgo/GEOMAlgo_Gluer2.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_3.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx b/src/GEOMAlgo/GEOMAlgo_GluerAlgo.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx b/src/GEOMAlgo/GEOMAlgo_GluerAlgo.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_HAlgo.cxx b/src/GEOMAlgo/GEOMAlgo_HAlgo.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_HAlgo.hxx b/src/GEOMAlgo/GEOMAlgo_HAlgo.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfIntegerShape.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfIntegerShape.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeBox.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeState.hxx b/src/GEOMAlgo/GEOMAlgo_IndexedDataMapOfShapeState.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfBounds.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfClosed.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfName.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfName.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx b/src/GEOMAlgo/GEOMAlgo_KindOfShape.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx b/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx b/src/GEOMAlgo/GEOMAlgo_ListIteratorOfListOfPnt.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx b/src/GEOMAlgo/GEOMAlgo_ListOfCoupleOfShapes.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx b/src/GEOMAlgo/GEOMAlgo_ListOfPnt.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKey.hxx b/src/GEOMAlgo/GEOMAlgo_PassKey.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx b/src/GEOMAlgo/GEOMAlgo_PassKeyMapHasher.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx b/src/GEOMAlgo/GEOMAlgo_PassKeyShape.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx b/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx b/src/GEOMAlgo/GEOMAlgo_PassKeyShapeMapHasher.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx b/src/GEOMAlgo/GEOMAlgo_RemoverWebs.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx b/src/GEOMAlgo/GEOMAlgo_RemoverWebs.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeAlgo.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfo.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfo.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeSolid.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx b/src/GEOMAlgo/GEOMAlgo_ShapeSolid.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx b/src/GEOMAlgo/GEOMAlgo_ShellSolid.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx b/src/GEOMAlgo/GEOMAlgo_ShellSolid.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx b/src/GEOMAlgo/GEOMAlgo_SolidSolid.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx b/src/GEOMAlgo/GEOMAlgo_SolidSolid.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_Splitter.hxx b/src/GEOMAlgo/GEOMAlgo_Splitter.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_State.hxx b/src/GEOMAlgo/GEOMAlgo_State.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_StateCollector.cxx b/src/GEOMAlgo/GEOMAlgo_StateCollector.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_StateCollector.hxx b/src/GEOMAlgo/GEOMAlgo_StateCollector.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx b/src/GEOMAlgo/GEOMAlgo_SurfaceTools.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx b/src/GEOMAlgo/GEOMAlgo_SurfaceTools.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx b/src/GEOMAlgo/GEOMAlgo_VertexSolid.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx b/src/GEOMAlgo/GEOMAlgo_VertexSolid.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx b/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMAlgo/GEOMAlgo_WireSolid.hxx b/src/GEOMAlgo/GEOMAlgo_WireSolid.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOMBase.cxx b/src/GEOMBase/GEOMBase.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOMBase.h b/src/GEOMBase/GEOMBase.h old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOMBase_Skeleton.cxx b/src/GEOMBase/GEOMBase_Skeleton.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOMBase_Skeleton.h b/src/GEOMBase/GEOMBase_Skeleton.h old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOM_GenericObjPtr.cxx b/src/GEOMBase/GEOM_GenericObjPtr.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOM_GenericObjPtr.h b/src/GEOMBase/GEOM_GenericObjPtr.h old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOM_Operation.cxx b/src/GEOMBase/GEOM_Operation.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMBase/GEOM_Operation.h b/src/GEOMBase/GEOM_Operation.h old mode 100755 new mode 100644 diff --git a/src/GEOMClient/GEOM_Client.cxx b/src/GEOMClient/GEOM_Client.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMClient/GEOM_Client.hxx b/src/GEOMClient/GEOM_Client.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx b/src/GEOMFiltersSelection/GEOM_CompoundFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_CompoundFilter.h b/src/GEOMFiltersSelection/GEOM_CompoundFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx b/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_EdgeFilter.h b/src/GEOMFiltersSelection/GEOM_EdgeFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx b/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_FaceFilter.h b/src/GEOMFiltersSelection/GEOM_FaceFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx b/src/GEOMFiltersSelection/GEOM_LogicalFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_LogicalFilter.h b/src/GEOMFiltersSelection/GEOM_LogicalFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_OCCFilter.cxx b/src/GEOMFiltersSelection/GEOM_OCCFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_OCCFilter.h b/src/GEOMFiltersSelection/GEOM_OCCFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx b/src/GEOMFiltersSelection/GEOM_PreviewFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_PreviewFilter.h b/src/GEOMFiltersSelection/GEOM_PreviewFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx b/src/GEOMFiltersSelection/GEOM_SelectionFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_SelectionFilter.h b/src/GEOMFiltersSelection/GEOM_SelectionFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_TypeFilter.cxx b/src/GEOMFiltersSelection/GEOM_TypeFilter.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMFiltersSelection/GEOM_TypeFilter.h b/src/GEOMFiltersSelection/GEOM_TypeFilter.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI.cxx b/src/GEOMGUI/GEOMGUI.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI.h b/src/GEOMGUI/GEOMGUI.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI.qrc b/src/GEOMGUI/GEOMGUI.qrc old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx b/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_DimensionProperty.h b/src/GEOMGUI/GEOMGUI_DimensionProperty.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_OCCSelector.h b/src/GEOMGUI/GEOMGUI_OCCSelector.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_Selection.h b/src/GEOMGUI/GEOMGUI_Selection.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_XmlHandler.cxx b/src/GEOMGUI/GEOMGUI_XmlHandler.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMGUI_XmlHandler.h b/src/GEOMGUI/GEOMGUI_XmlHandler.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMPluginGUI.cxx b/src/GEOMGUI/GEOMPluginGUI.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOMPluginGUI.h b/src/GEOMGUI/GEOMPluginGUI.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOM_images.ts b/src/GEOMGUI/GEOM_images.ts old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GeometryGUI.h b/src/GEOMGUI/GeometryGUI.h old mode 100755 new mode 100644 diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ArcDriver.cxx b/src/GEOMImpl/GEOMImpl_ArcDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ArcDriver.hxx b/src/GEOMImpl/GEOMImpl_ArcDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx b/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx b/src/GEOMImpl/GEOMImpl_ArchimedeDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx b/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Block6Explorer.hxx b/src/GEOMImpl/GEOMImpl_Block6Explorer.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_BlockDriver.cxx b/src/GEOMImpl/GEOMImpl_BlockDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_BlockDriver.hxx b/src/GEOMImpl/GEOMImpl_BlockDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx b/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_BooleanDriver.hxx b/src/GEOMImpl/GEOMImpl_BooleanDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_BoxDriver.cxx b/src/GEOMImpl/GEOMImpl_BoxDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_BoxDriver.hxx b/src/GEOMImpl/GEOMImpl_BoxDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ChamferDriver.cxx b/src/GEOMImpl/GEOMImpl_ChamferDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ChamferDriver.hxx b/src/GEOMImpl/GEOMImpl_ChamferDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_CircleDriver.cxx b/src/GEOMImpl/GEOMImpl_CircleDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_CircleDriver.hxx b/src/GEOMImpl/GEOMImpl_CircleDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ConeDriver.cxx b/src/GEOMImpl/GEOMImpl_ConeDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ConeDriver.hxx b/src/GEOMImpl/GEOMImpl_ConeDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_CopyDriver.cxx b/src/GEOMImpl/GEOMImpl_CopyDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_CopyDriver.hxx b/src/GEOMImpl/GEOMImpl_CopyDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.hxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx b/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_EllipseDriver.hxx b/src/GEOMImpl/GEOMImpl_EllipseDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ExportDriver.cxx b/src/GEOMImpl/GEOMImpl_ExportDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ExportDriver.hxx b/src/GEOMImpl/GEOMImpl_ExportDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_FieldDriver.cxx b/src/GEOMImpl/GEOMImpl_FieldDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_FieldDriver.hxx b/src/GEOMImpl/GEOMImpl_FieldDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1d.cxx b/src/GEOMImpl/GEOMImpl_Fillet1d.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1d.hxx b/src/GEOMImpl/GEOMImpl_Fillet1d.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx b/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx b/src/GEOMImpl/GEOMImpl_Fillet1dDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_FilletDriver.cxx b/src/GEOMImpl/GEOMImpl_FilletDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_FilletDriver.hxx b/src/GEOMImpl/GEOMImpl_FilletDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_FillingDriver.hxx b/src/GEOMImpl/GEOMImpl_FillingDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Gen.cxx b/src/GEOMImpl/GEOMImpl_Gen.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_Gen.hxx b/src/GEOMImpl/GEOMImpl_Gen.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_GlueDriver.cxx b/src/GEOMImpl/GEOMImpl_GlueDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_GlueDriver.hxx b/src/GEOMImpl/GEOMImpl_GlueDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_HealingDriver.cxx b/src/GEOMImpl/GEOMImpl_HealingDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_HealingDriver.hxx b/src/GEOMImpl/GEOMImpl_HealingDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IArc.hxx b/src/GEOMImpl/GEOMImpl_IArc.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IArchimede.hxx b/src/GEOMImpl/GEOMImpl_IArchimede.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx b/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBasicOperations.hxx b/src/GEOMImpl/GEOMImpl_IBasicOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx b/src/GEOMImpl/GEOMImpl_IBlockTrsf.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBlocks.hxx b/src/GEOMImpl/GEOMImpl_IBlocks.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBoolean.hxx b/src/GEOMImpl/GEOMImpl_IBoolean.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx b/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx b/src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IBox.hxx b/src/GEOMImpl/GEOMImpl_IBox.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IChamfer.hxx b/src/GEOMImpl/GEOMImpl_IChamfer.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ICircle.hxx b/src/GEOMImpl/GEOMImpl_ICircle.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ICone.hxx b/src/GEOMImpl/GEOMImpl_ICone.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ICopy.hxx b/src/GEOMImpl/GEOMImpl_ICopy.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ICurveParametric.hxx b/src/GEOMImpl/GEOMImpl_ICurveParametric.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ICylinder.hxx b/src/GEOMImpl/GEOMImpl_ICylinder.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IEllipse.hxx b/src/GEOMImpl/GEOMImpl_IEllipse.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IFieldOperations.cxx b/src/GEOMImpl/GEOMImpl_IFieldOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IFieldOperations.hxx b/src/GEOMImpl/GEOMImpl_IFieldOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IFillet.hxx b/src/GEOMImpl/GEOMImpl_IFillet.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IFillet1d.hxx b/src/GEOMImpl/GEOMImpl_IFillet1d.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IFilling.hxx b/src/GEOMImpl/GEOMImpl_IFilling.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IGlue.hxx b/src/GEOMImpl/GEOMImpl_IGlue.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx b/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IGroupOperations.hxx b/src/GEOMImpl/GEOMImpl_IGroupOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IImportExport.hxx b/src/GEOMImpl/GEOMImpl_IImportExport.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx b/src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx b/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ILine.hxx b/src/GEOMImpl/GEOMImpl_ILine.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx b/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ILocalOperations.hxx b/src/GEOMImpl/GEOMImpl_ILocalOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IMarker.hxx b/src/GEOMImpl/GEOMImpl_IMarker.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IMeasure.hxx b/src/GEOMImpl/GEOMImpl_IMeasure.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IMirror.hxx b/src/GEOMImpl/GEOMImpl_IMirror.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IOffset.hxx b/src/GEOMImpl/GEOMImpl_IOffset.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPartition.hxx b/src/GEOMImpl/GEOMImpl_IPartition.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPipe.hxx b/src/GEOMImpl/GEOMImpl_IPipe.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx b/src/GEOMImpl/GEOMImpl_IPipeBiNormal.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx b/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPipePath.hxx b/src/GEOMImpl/GEOMImpl_IPipePath.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx b/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPlane.hxx b/src/GEOMImpl/GEOMImpl_IPlane.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPolyline.hxx b/src/GEOMImpl/GEOMImpl_IPolyline.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPosition.hxx b/src/GEOMImpl/GEOMImpl_IPosition.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IPrism.hxx b/src/GEOMImpl/GEOMImpl_IPrism.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IRevolution.hxx b/src/GEOMImpl/GEOMImpl_IRevolution.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IRotate.hxx b/src/GEOMImpl/GEOMImpl_IRotate.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IScale.hxx b/src/GEOMImpl/GEOMImpl_IScale.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IShapes.hxx b/src/GEOMImpl/GEOMImpl_IShapes.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ISketcher.hxx b/src/GEOMImpl/GEOMImpl_ISketcher.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ISphere.hxx b/src/GEOMImpl/GEOMImpl_ISphere.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ISpline.hxx b/src/GEOMImpl/GEOMImpl_ISpline.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IThruSections.hxx b/src/GEOMImpl/GEOMImpl_IThruSections.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ITorus.hxx b/src/GEOMImpl/GEOMImpl_ITorus.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ITransformOperations.hxx b/src/GEOMImpl/GEOMImpl_ITransformOperations.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_IVector.hxx b/src/GEOMImpl/GEOMImpl_IVector.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.hxx b/src/GEOMImpl/GEOMImpl_ImportDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_LineDriver.cxx b/src/GEOMImpl/GEOMImpl_LineDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_LineDriver.hxx b/src/GEOMImpl/GEOMImpl_LineDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx b/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_MarkerDriver.hxx b/src/GEOMImpl/GEOMImpl_MarkerDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx b/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_MeasureDriver.hxx b/src/GEOMImpl/GEOMImpl_MeasureDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx b/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_MirrorDriver.hxx b/src/GEOMImpl/GEOMImpl_MirrorDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx b/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_OffsetDriver.hxx b/src/GEOMImpl/GEOMImpl_OffsetDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PartitionDriver.cxx b/src/GEOMImpl/GEOMImpl_PartitionDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PartitionDriver.hxx b/src/GEOMImpl/GEOMImpl_PartitionDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.hxx b/src/GEOMImpl/GEOMImpl_PipeDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx b/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PipePathDriver.hxx b/src/GEOMImpl/GEOMImpl_PipePathDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx b/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PlaneDriver.hxx b/src/GEOMImpl/GEOMImpl_PlaneDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PointDriver.cxx b/src/GEOMImpl/GEOMImpl_PointDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PointDriver.hxx b/src/GEOMImpl/GEOMImpl_PointDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx b/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx b/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PositionDriver.cxx b/src/GEOMImpl/GEOMImpl_PositionDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PositionDriver.hxx b/src/GEOMImpl/GEOMImpl_PositionDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PrismDriver.cxx b/src/GEOMImpl/GEOMImpl_PrismDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_PrismDriver.hxx b/src/GEOMImpl/GEOMImpl_PrismDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx b/src/GEOMImpl/GEOMImpl_ProjectionDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx b/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx b/src/GEOMImpl/GEOMImpl_RevolutionDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_RotateDriver.cxx b/src/GEOMImpl/GEOMImpl_RotateDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_RotateDriver.hxx b/src/GEOMImpl/GEOMImpl_RotateDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx b/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ScaleDriver.hxx b/src/GEOMImpl/GEOMImpl_ScaleDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.hxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx b/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_SketcherDriver.hxx b/src/GEOMImpl/GEOMImpl_SketcherDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_SphereDriver.cxx b/src/GEOMImpl/GEOMImpl_SphereDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_SphereDriver.hxx b/src/GEOMImpl/GEOMImpl_SphereDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_SplineDriver.cxx b/src/GEOMImpl/GEOMImpl_SplineDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_SplineDriver.hxx b/src/GEOMImpl/GEOMImpl_SplineDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx b/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx b/src/GEOMImpl/GEOMImpl_ThruSectionsDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_TorusDriver.cxx b/src/GEOMImpl/GEOMImpl_TorusDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_TorusDriver.hxx b/src/GEOMImpl/GEOMImpl_TorusDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_TranslateDriver.cxx b/src/GEOMImpl/GEOMImpl_TranslateDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_TranslateDriver.hxx b/src/GEOMImpl/GEOMImpl_TranslateDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_VectorDriver.cxx b/src/GEOMImpl/GEOMImpl_VectorDriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_VectorDriver.hxx b/src/GEOMImpl/GEOMImpl_VectorDriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_XAODriver.cxx b/src/GEOMImpl/GEOMImpl_XAODriver.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMImpl/GEOMImpl_XAODriver.hxx b/src/GEOMImpl/GEOMImpl_XAODriver.hxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_DeleteDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_LineWidthDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h old mode 100755 new mode 100644 diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx old mode 100755 new mode 100644 diff --git a/src/GEOMUtils/GEOMUtils.hxx b/src/GEOMUtils/GEOMUtils.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_BaseObject_i.cc b/src/GEOM_I/GEOM_BaseObject_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_BaseObject_i.hh b/src/GEOM_I/GEOM_BaseObject_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_DumpPython.cc b/src/GEOM_I/GEOM_DumpPython.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_Field_i.cc b/src/GEOM_I/GEOM_Field_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_Field_i.hh b/src/GEOM_I/GEOM_Field_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IBasicOperations_i.cc b/src/GEOM_I/GEOM_IBasicOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IBasicOperations_i.hh b/src/GEOM_I/GEOM_IBasicOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IBlocksOperations_i.hh b/src/GEOM_I/GEOM_IBlocksOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IBooleanOperations_i.cc b/src/GEOM_I/GEOM_IBooleanOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IBooleanOperations_i.hh b/src/GEOM_I/GEOM_IBooleanOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.cc b/src/GEOM_I/GEOM_ICurvesOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.hh b/src/GEOM_I/GEOM_ICurvesOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IFieldOperations_i.cc b/src/GEOM_I/GEOM_IFieldOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IFieldOperations_i.hh b/src/GEOM_I/GEOM_IFieldOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IGroupOperations_i.cc b/src/GEOM_I/GEOM_IGroupOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IGroupOperations_i.hh b/src/GEOM_I/GEOM_IGroupOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.cc b/src/GEOM_I/GEOM_IHealingOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.hh b/src/GEOM_I/GEOM_IHealingOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.cc b/src/GEOM_I/GEOM_IInsertOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.hh b/src/GEOM_I/GEOM_IInsertOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_ILocalOperations_i.cc b/src/GEOM_I/GEOM_ILocalOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_ILocalOperations_i.hh b/src/GEOM_I/GEOM_ILocalOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IMeasureOperations_i.cc b/src/GEOM_I/GEOM_IMeasureOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IMeasureOperations_i.hh b/src/GEOM_I/GEOM_IMeasureOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IOperations_i.cc b/src/GEOM_I/GEOM_IOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IOperations_i.hh b/src/GEOM_I/GEOM_IOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.cc b/src/GEOM_I/GEOM_IShapesOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.hh b/src/GEOM_I/GEOM_IShapesOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_ITransformOperations_i.cc b/src/GEOM_I/GEOM_ITransformOperations_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_ITransformOperations_i.hh b/src/GEOM_I/GEOM_ITransformOperations_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_Object_i.cc b/src/GEOM_I/GEOM_Object_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_Object_i.hh b/src/GEOM_I/GEOM_Object_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I/GEOM_wrap.hxx b/src/GEOM_I/GEOM_wrap.hxx old mode 100755 new mode 100644 diff --git a/src/GEOM_I_Superv/GEOM_List_i.hh b/src/GEOM_I_Superv/GEOM_List_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc old mode 100755 new mode 100644 diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh old mode 100755 new mode 100644 diff --git a/src/GEOM_PY/__init__.py b/src/GEOM_PY/__init__.py old mode 100755 new mode 100644 diff --git a/src/GEOM_PY/geomtools.py b/src/GEOM_PY/geomtools.py old mode 100755 new mode 100644 diff --git a/src/GEOM_PY/sketcher.py b/src/GEOM_PY/sketcher.py old mode 100755 new mode 100644 diff --git a/src/GEOM_PY/structelem/__init__.py b/src/GEOM_PY/structelem/__init__.py old mode 100755 new mode 100644 diff --git a/src/GEOM_PY/structelem/orientation.py b/src/GEOM_PY/structelem/orientation.py old mode 100755 new mode 100644 diff --git a/src/GEOM_PY/structelem/parts.py b/src/GEOM_PY/structelem/parts.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_ObjectInfo.py b/src/GEOM_SWIG/GEOM_ObjectInfo.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_Sketcher.py b/src/GEOM_SWIG/GEOM_Sketcher.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_Spanner.py b/src/GEOM_SWIG/GEOM_Spanner.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_TestField.py b/src/GEOM_SWIG/GEOM_TestField.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_TestHealing.py b/src/GEOM_SWIG/GEOM_TestHealing.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_TestMeasures.py b/src/GEOM_SWIG/GEOM_TestMeasures.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_TestOthers.py b/src/GEOM_SWIG/GEOM_TestOthers.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_blocks.py b/src/GEOM_SWIG/GEOM_blocks.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_example.py b/src/GEOM_SWIG/GEOM_example.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_example2.py b/src/GEOM_SWIG/GEOM_example2.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_example3.py b/src/GEOM_SWIG/GEOM_example3.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_example5.py b/src/GEOM_SWIG/GEOM_example5.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_example7.py b/src/GEOM_SWIG/GEOM_example7.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_moteur.py b/src/GEOM_SWIG/GEOM_moteur.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_shared_modules.py b/src/GEOM_SWIG/GEOM_shared_modules.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/GEOM_usinggeom.py b/src/GEOM_SWIG/GEOM_usinggeom.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/__init__.py b/src/GEOM_SWIG/__init__.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/geompy.py b/src/GEOM_SWIG/geompy.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG/gsketcher.py b/src/GEOM_SWIG/gsketcher.py old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h old mode 100755 new mode 100644 diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI.cxx b/src/GenerationGUI/GenerationGUI.cxx old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI.h b/src/GenerationGUI/GenerationGUI.h old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.h b/src/GenerationGUI/GenerationGUI_FillingDlg.h old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.h b/src/GenerationGUI/GenerationGUI_PipeDlg.h old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_PipePathDlg.cxx b/src/GenerationGUI/GenerationGUI_PipePathDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_PipePathDlg.h b/src/GenerationGUI/GenerationGUI_PipePathDlg.h old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_PrismDlg.cxx b/src/GenerationGUI/GenerationGUI_PrismDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_PrismDlg.h b/src/GenerationGUI/GenerationGUI_PrismDlg.h old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_RevolDlg.cxx b/src/GenerationGUI/GenerationGUI_RevolDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GenerationGUI/GenerationGUI_RevolDlg.h b/src/GenerationGUI/GenerationGUI_RevolDlg.h old mode 100755 new mode 100644 diff --git a/src/GroupGUI/GroupGUI.cxx b/src/GroupGUI/GroupGUI.cxx old mode 100755 new mode 100644 diff --git a/src/GroupGUI/GroupGUI.h b/src/GroupGUI/GroupGUI.h old mode 100755 new mode 100644 diff --git a/src/GroupGUI/GroupGUI_BooleanDlg.cxx b/src/GroupGUI/GroupGUI_BooleanDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GroupGUI/GroupGUI_BooleanDlg.h b/src/GroupGUI/GroupGUI_BooleanDlg.h old mode 100755 new mode 100644 diff --git a/src/GroupGUI/GroupGUI_GroupDlg.cxx b/src/GroupGUI/GroupGUI_GroupDlg.cxx old mode 100755 new mode 100644 diff --git a/src/GroupGUI/GroupGUI_GroupDlg.h b/src/GroupGUI/GroupGUI_GroupDlg.h old mode 100755 new mode 100644 diff --git a/src/IGESExport/IGESExport.cxx b/src/IGESExport/IGESExport.cxx old mode 100755 new mode 100644 diff --git a/src/IGESImport/IGESImport.cxx b/src/IGESImport/IGESImport.cxx old mode 100755 new mode 100644 diff --git a/src/ImportExportGUI/CMakeLists.txt b/src/ImportExportGUI/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/src/ImportExportGUI/ImportExportGUI.cxx b/src/ImportExportGUI/ImportExportGUI.cxx old mode 100755 new mode 100644 diff --git a/src/ImportExportGUI/ImportExportGUI.h b/src/ImportExportGUI/ImportExportGUI.h old mode 100755 new mode 100644 diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx old mode 100755 new mode 100644 diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h old mode 100755 new mode 100644 diff --git a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx b/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx old mode 100755 new mode 100644 diff --git a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h b/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h old mode 100755 new mode 100644 diff --git a/src/Material/Material.h b/src/Material/Material.h old mode 100755 new mode 100644 diff --git a/src/Material/Material_Model.cxx b/src/Material/Material_Model.cxx old mode 100755 new mode 100644 diff --git a/src/Material/Material_Model.h b/src/Material/Material_Model.h old mode 100755 new mode 100644 diff --git a/src/Material/Material_ResourceMgr.cxx b/src/Material/Material_ResourceMgr.cxx old mode 100755 new mode 100644 diff --git a/src/Material/Material_ResourceMgr.h b/src/Material/Material_ResourceMgr.h old mode 100755 new mode 100644 diff --git a/src/Material/resources/SalomeMaterial.xml b/src/Material/resources/SalomeMaterial.xml old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI.cxx b/src/MeasureGUI/MeasureGUI.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI.h b/src/MeasureGUI/MeasureGUI.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1Check1TextView2ListBox_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1TextView1Check_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1TextView1Check_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1TextView2ListBox_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1TextView2ListBox_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel1TextView_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel3LineEdit_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel6LineEdit_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel_Frame_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_1TreeWidget_4Button_QTD.ui b/src/MeasureGUI/MeasureGUI_1TreeWidget_4Button_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_2Sel1LineEdit_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui b/src/MeasureGUI/MeasureGUI_2Sel_Frame_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui b/src/MeasureGUI/MeasureGUI_3Sel_Frame_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.h b/src/MeasureGUI/MeasureGUI_AngleDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx b/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_BndBoxDlg.h b/src/MeasureGUI/MeasureGUI_BndBoxDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx b/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CenterMassDlg.h b/src/MeasureGUI/MeasureGUI_CenterMassDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.h b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CheckShapeDlg.h b/src/MeasureGUI/MeasureGUI_CheckShapeDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx b/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h b/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DimensionFilter.cxx b/src/MeasureGUI/MeasureGUI_DimensionFilter.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DimensionFilter.h b/src/MeasureGUI/MeasureGUI_DimensionFilter.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx b/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DimensionInteractor.h b/src/MeasureGUI/MeasureGUI_DimensionInteractor.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx b/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_DistanceDlg.h b/src/MeasureGUI/MeasureGUI_DistanceDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx b/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h b/src/MeasureGUI/MeasureGUI_GetNonBlocksDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.h b/src/MeasureGUI/MeasureGUI_InertiaDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx b/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_NormaleDlg.h b/src/MeasureGUI/MeasureGUI_NormaleDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_PointDlg.cxx b/src/MeasureGUI/MeasureGUI_PointDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_PointDlg.h b/src/MeasureGUI/MeasureGUI_PointDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.h b/src/MeasureGUI/MeasureGUI_PropertiesDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_Skeleton.cxx b/src/MeasureGUI/MeasureGUI_Skeleton.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_Skeleton.h b/src/MeasureGUI/MeasureGUI_Skeleton.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui b/src/MeasureGUI/MeasureGUI_SkeletonBox_QTD.ui old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx b/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_WhatisDlg.h b/src/MeasureGUI/MeasureGUI_WhatisDlg.h old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_Widgets.cxx b/src/MeasureGUI/MeasureGUI_Widgets.cxx old mode 100755 new mode 100644 diff --git a/src/MeasureGUI/MeasureGUI_Widgets.h b/src/MeasureGUI/MeasureGUI_Widgets.h old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_AISShape.ixx b/src/OBJECT/GEOM_AISShape.ixx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_AISShape.jxx b/src/OBJECT/GEOM_AISShape.jxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_AISVector.cxx b/src/OBJECT/GEOM_AISVector.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_AISVector.hxx b/src/OBJECT/GEOM_AISVector.hxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_Constants.cxx b/src/OBJECT/GEOM_Constants.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_Constants.h b/src/OBJECT/GEOM_Constants.h old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_InteractiveObject.cxx b/src/OBJECT/GEOM_InteractiveObject.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_InteractiveObject.hxx b/src/OBJECT/GEOM_InteractiveObject.hxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_InteractiveObject.ixx b/src/OBJECT/GEOM_InteractiveObject.ixx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_InteractiveObject.jxx b/src/OBJECT/GEOM_InteractiveObject.jxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_OCCReader.cxx b/src/OBJECT/GEOM_OCCReader.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_OCCReader.h b/src/OBJECT/GEOM_OCCReader.h old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_PainterPolyDataMapper.cxx b/src/OBJECT/GEOM_PainterPolyDataMapper.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_PainterPolyDataMapper.h b/src/OBJECT/GEOM_PainterPolyDataMapper.h old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_VTKTrihedron.cxx b/src/OBJECT/GEOM_VTKTrihedron.cxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/GEOM_VTKTrihedron.hxx b/src/OBJECT/GEOM_VTKTrihedron.hxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/Handle_GEOM_AISShape.hxx b/src/OBJECT/Handle_GEOM_AISShape.hxx old mode 100755 new mode 100644 diff --git a/src/OBJECT/Handle_GEOM_InteractiveObject.hxx b/src/OBJECT/Handle_GEOM_InteractiveObject.hxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI.cxx b/src/OperationGUI/OperationGUI.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI.h b/src/OperationGUI/OperationGUI.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ArchimedeDlg.cxx b/src/OperationGUI/OperationGUI_ArchimedeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ArchimedeDlg.h b/src/OperationGUI/OperationGUI_ArchimedeDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ChamferDlg.cxx b/src/OperationGUI/OperationGUI_ChamferDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ChamferDlg.h b/src/OperationGUI/OperationGUI_ChamferDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ClippingDlg.cxx b/src/OperationGUI/OperationGUI_ClippingDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ClippingDlg.h b/src/OperationGUI/OperationGUI_ClippingDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.cxx b/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h b/src/OperationGUI/OperationGUI_ExtrudedFeatureDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx b/src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_Fillet1d2dDlg.h b/src/OperationGUI/OperationGUI_Fillet1d2dDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_FilletDlg.cxx b/src/OperationGUI/OperationGUI_FilletDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_FilletDlg.h b/src/OperationGUI/OperationGUI_FilletDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.cxx b/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h b/src/OperationGUI/OperationGUI_GetShapesOnShapeDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_GetSharedShapesDlg.cxx b/src/OperationGUI/OperationGUI_GetSharedShapesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_GetSharedShapesDlg.h b/src/OperationGUI/OperationGUI_GetSharedShapesDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_MaterialDlg.cxx b/src/OperationGUI/OperationGUI_MaterialDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_MaterialDlg.h b/src/OperationGUI/OperationGUI_MaterialDlg.h old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_PartitionDlg.cxx b/src/OperationGUI/OperationGUI_PartitionDlg.cxx old mode 100755 new mode 100644 diff --git a/src/OperationGUI/OperationGUI_PartitionDlg.h b/src/OperationGUI/OperationGUI_PartitionDlg.h old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI.cxx b/src/PrimitiveGUI/PrimitiveGUI.cxx old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI.h b/src/PrimitiveGUI/PrimitiveGUI.h old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h b/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.h old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h b/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.h old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.h old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx old mode 100755 new mode 100644 diff --git a/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h b/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI.cxx b/src/RepairGUI/RepairGUI.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI.h b/src/RepairGUI/RepairGUI.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx b/src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_ChangeOrientationDlg.h b/src/RepairGUI/RepairGUI_ChangeOrientationDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_CloseContourDlg.cxx b/src/RepairGUI/RepairGUI_CloseContourDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_CloseContourDlg.h b/src/RepairGUI/RepairGUI_CloseContourDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx b/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_DivideEdgeDlg.h b/src/RepairGUI/RepairGUI_DivideEdgeDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_FreeBoundDlg.cxx b/src/RepairGUI/RepairGUI_FreeBoundDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_FreeBoundDlg.h b/src/RepairGUI/RepairGUI_FreeBoundDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx b/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_FreeFacesDlg.h b/src/RepairGUI/RepairGUI_FreeFacesDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx b/src/RepairGUI/RepairGUI_FuseEdgesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_FuseEdgesDlg.h b/src/RepairGUI/RepairGUI_FuseEdgesDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_GlueDlg.cxx b/src/RepairGUI/RepairGUI_GlueDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_GlueDlg.h b/src/RepairGUI/RepairGUI_GlueDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx b/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_LimitToleranceDlg.h b/src/RepairGUI/RepairGUI_LimitToleranceDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx b/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h b/src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx b/src/RepairGUI/RepairGUI_RemoveHolesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_RemoveHolesDlg.h b/src/RepairGUI/RepairGUI_RemoveHolesDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx b/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h b/src/RepairGUI/RepairGUI_RemoveIntWiresDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_SewingDlg.cxx b/src/RepairGUI/RepairGUI_SewingDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_SewingDlg.h b/src/RepairGUI/RepairGUI_SewingDlg.h old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx old mode 100755 new mode 100644 diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.h b/src/RepairGUI/RepairGUI_SuppressFacesDlg.h old mode 100755 new mode 100644 diff --git a/src/SKETCHER/Sketcher_Profile.cxx b/src/SKETCHER/Sketcher_Profile.cxx old mode 100755 new mode 100644 diff --git a/src/SKETCHER/Sketcher_Profile.hxx b/src/SKETCHER/Sketcher_Profile.hxx old mode 100755 new mode 100644 diff --git a/src/STEPExport/STEPExport.cxx b/src/STEPExport/STEPExport.cxx old mode 100755 new mode 100644 diff --git a/src/STEPImport/STEPImport.cxx b/src/STEPImport/STEPImport.cxx old mode 100755 new mode 100644 diff --git a/src/STLExport/STLExport.cxx b/src/STLExport/STLExport.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_ChangeOrientation.cxx b/src/ShHealOper/ShHealOper_ChangeOrientation.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_ChangeOrientation.hxx b/src/ShHealOper/ShHealOper_ChangeOrientation.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_CloseContour.cxx b/src/ShHealOper/ShHealOper_CloseContour.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_CloseContour.hxx b/src/ShHealOper/ShHealOper_CloseContour.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_EdgeDivide.cxx b/src/ShHealOper/ShHealOper_EdgeDivide.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_EdgeDivide.hxx b/src/ShHealOper/ShHealOper_EdgeDivide.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_FillHoles.cxx b/src/ShHealOper/ShHealOper_FillHoles.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_FillHoles.hxx b/src/ShHealOper/ShHealOper_FillHoles.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_RemoveFace.cxx b/src/ShHealOper/ShHealOper_RemoveFace.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_RemoveFace.hxx b/src/ShHealOper/ShHealOper_RemoveFace.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_RemoveInternalWires.cxx b/src/ShHealOper/ShHealOper_RemoveInternalWires.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_RemoveInternalWires.hxx b/src/ShHealOper/ShHealOper_RemoveInternalWires.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_Sewing.cxx b/src/ShHealOper/ShHealOper_Sewing.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_Sewing.hxx b/src/ShHealOper/ShHealOper_Sewing.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_ShapeProcess.cxx b/src/ShHealOper/ShHealOper_ShapeProcess.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_ShapeProcess.hxx b/src/ShHealOper/ShHealOper_ShapeProcess.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_SpiltCurve2d.hxx b/src/ShHealOper/ShHealOper_SpiltCurve2d.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_SplitCurve2d.cxx b/src/ShHealOper/ShHealOper_SplitCurve2d.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_SplitCurve2d.hxx b/src/ShHealOper/ShHealOper_SplitCurve2d.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_SplitCurve3d.cxx b/src/ShHealOper/ShHealOper_SplitCurve3d.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_SplitCurve3d.hxx b/src/ShHealOper/ShHealOper_SplitCurve3d.hxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_Tool.cxx b/src/ShHealOper/ShHealOper_Tool.cxx old mode 100755 new mode 100644 diff --git a/src/ShHealOper/ShHealOper_Tool.hxx b/src/ShHealOper/ShHealOper_Tool.hxx old mode 100755 new mode 100644 diff --git a/src/ShapeRecognition/ShapeRec_FeatureDetector.cxx b/src/ShapeRecognition/ShapeRec_FeatureDetector.cxx old mode 100755 new mode 100644 diff --git a/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx b/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI.cxx b/src/TransformationGUI/TransformationGUI.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI.h b/src/TransformationGUI/TransformationGUI.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_MirrorDlg.cxx b/src/TransformationGUI/TransformationGUI_MirrorDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_MirrorDlg.h b/src/TransformationGUI/TransformationGUI_MirrorDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_MultiRotationDlg.cxx b/src/TransformationGUI/TransformationGUI_MultiRotationDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_MultiRotationDlg.h b/src/TransformationGUI/TransformationGUI_MultiRotationDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx b/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.h b/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_OffsetDlg.cxx b/src/TransformationGUI/TransformationGUI_OffsetDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_OffsetDlg.h b/src/TransformationGUI/TransformationGUI_OffsetDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_PositionDlg.cxx b/src/TransformationGUI/TransformationGUI_PositionDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_PositionDlg.h b/src/TransformationGUI/TransformationGUI_PositionDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx b/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_ProjectionDlg.h b/src/TransformationGUI/TransformationGUI_ProjectionDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_RotationDlg.cxx b/src/TransformationGUI/TransformationGUI_RotationDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_RotationDlg.h b/src/TransformationGUI/TransformationGUI_RotationDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_ScaleDlg.cxx b/src/TransformationGUI/TransformationGUI_ScaleDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_ScaleDlg.h b/src/TransformationGUI/TransformationGUI_ScaleDlg.h old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_TranslationDlg.cxx b/src/TransformationGUI/TransformationGUI_TranslationDlg.cxx old mode 100755 new mode 100644 diff --git a/src/TransformationGUI/TransformationGUI_TranslationDlg.h b/src/TransformationGUI/TransformationGUI_TranslationDlg.h old mode 100755 new mode 100644 diff --git a/src/VTKExport/VTKExport.cxx b/src/VTKExport/VTKExport.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/CMakeLists.txt b/src/XAO/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_BooleanField.cxx b/src/XAO/XAO_BooleanField.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_BooleanField.hxx b/src/XAO/XAO_BooleanField.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_BooleanStep.cxx b/src/XAO/XAO_BooleanStep.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_BooleanStep.hxx b/src/XAO/XAO_BooleanStep.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_BrepGeometry.cxx b/src/XAO/XAO_BrepGeometry.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_BrepGeometry.hxx b/src/XAO/XAO_BrepGeometry.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_DoubleField.cxx b/src/XAO/XAO_DoubleField.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_DoubleField.hxx b/src/XAO/XAO_DoubleField.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_DoubleStep.cxx b/src/XAO/XAO_DoubleStep.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_DoubleStep.hxx b/src/XAO/XAO_DoubleStep.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Exception.hxx b/src/XAO/XAO_Exception.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Field.cxx b/src/XAO/XAO_Field.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Field.hxx b/src/XAO/XAO_Field.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_GeometricElement.cxx b/src/XAO/XAO_GeometricElement.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_GeometricElement.hxx b/src/XAO/XAO_GeometricElement.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Geometry.cxx b/src/XAO/XAO_Geometry.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Geometry.hxx b/src/XAO/XAO_Geometry.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Group.cxx b/src/XAO/XAO_Group.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Group.hxx b/src/XAO/XAO_Group.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_IntegerField.cxx b/src/XAO/XAO_IntegerField.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_IntegerField.hxx b/src/XAO/XAO_IntegerField.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_IntegerStep.cxx b/src/XAO/XAO_IntegerStep.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_IntegerStep.hxx b/src/XAO/XAO_IntegerStep.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Step.cxx b/src/XAO/XAO_Step.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Step.hxx b/src/XAO/XAO_Step.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_StringField.cxx b/src/XAO/XAO_StringField.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_StringField.hxx b/src/XAO/XAO_StringField.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_StringStep.cxx b/src/XAO/XAO_StringStep.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_StringStep.hxx b/src/XAO/XAO_StringStep.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Xao.cxx b/src/XAO/XAO_Xao.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_Xao.hxx b/src/XAO/XAO_Xao.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_XaoExporter.cxx b/src/XAO/XAO_XaoExporter.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_XaoExporter.hxx b/src/XAO/XAO_XaoExporter.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_XaoUtils.cxx b/src/XAO/XAO_XaoUtils.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/XAO_XaoUtils.hxx b/src/XAO/XAO_XaoUtils.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/BrepGeometryTest.cxx b/src/XAO/tests/BrepGeometryTest.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/BrepGeometryTest.hxx b/src/XAO/tests/BrepGeometryTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/CMakeLists.txt b/src/XAO/tests/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/src/XAO/tests/FieldTest.cxx b/src/XAO/tests/FieldTest.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/FieldTest.hxx b/src/XAO/tests/FieldTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/GeometryTest.cxx b/src/XAO/tests/GeometryTest.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/GeometryTest.hxx b/src/XAO/tests/GeometryTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/GroupTest.cxx b/src/XAO/tests/GroupTest.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/GroupTest.hxx b/src/XAO/tests/GroupTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/ImportExportTest.cxx b/src/XAO/tests/ImportExportTest.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/ImportExportTest.hxx b/src/XAO/tests/ImportExportTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/MainTest.hxx b/src/XAO/tests/MainTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/TestUtils.hxx b/src/XAO/tests/TestUtils.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/XAOTests.cxx b/src/XAO/tests/XAOTests.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/XaoTest.cxx b/src/XAO/tests/XaoTest.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/XaoTest.hxx b/src/XAO/tests/XaoTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/XaoUtilsTest.cxx b/src/XAO/tests/XaoUtilsTest.cxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/XaoUtilsTest.hxx b/src/XAO/tests/XaoUtilsTest.hxx old mode 100755 new mode 100644 diff --git a/src/XAO/tests/data/Box_1.brep b/src/XAO/tests/data/Box_1.brep old mode 100755 new mode 100644 diff --git a/src/XAO/tests/data/Box_2.brep b/src/XAO/tests/data/Box_2.brep old mode 100755 new mode 100644 diff --git a/src/XAO/tests/data/Cut_2.brep b/src/XAO/tests/data/Cut_2.brep old mode 100755 new mode 100644 diff --git a/src/XAO/tests/data/test.xao b/src/XAO/tests/data/test.xao old mode 100755 new mode 100644 diff --git a/src/XAO_Swig/CMakeLists.txt b/src/XAO_Swig/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/src/XAO_Swig/xao.i b/src/XAO_Swig/xao.i old mode 100755 new mode 100644 From 05e07e916e0cf63eb380ebc85c192d9831100e82 Mon Sep 17 00:00:00 2001 From: imn Date: Fri, 8 Aug 2014 16:10:04 +0400 Subject: [PATCH 073/118] Remove obsolete OCC_VERSION_LARGE defines. --- .../GEOMImpl_IAdvancedOperations.cxx | 22 ------ src/BlockFix/BlockFix_UnionFaces.cxx | 11 +-- src/EntityGUI/EntityGUI.cxx | 9 --- src/EntityGUI/EntityGUI_3DSketcherDlg.cxx | 9 +-- .../GEOM_DataMapOfAsciiStringTransient.hxx | 6 +- src/GEOM/GEOM_Engine.cxx | 22 ------ src/GEOM/GEOM_Engine.hxx | 8 --- src/GEOM/GEOM_Function.cxx | 2 - src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx | 6 -- src/GEOMAlgo/GEOMAlgo_WireSolid.cxx | 4 -- src/GEOMBase/GEOMBase.cxx | 3 - src/GEOMGUI/GEOM_Displayer.cxx | 35 ---------- src/GEOMGUI/GEOM_Displayer.h | 2 - src/GEOMGUI/GeometryGUI.cxx | 22 ------ src/GEOMGUI/GeometryGUI.h | 12 ---- src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx | 4 -- src/GEOMImpl/GEOMImpl_Block6Explorer.cxx | 1 - src/GEOMImpl/GEOMImpl_FillingDriver.cxx | 8 --- src/GEOMImpl/GEOMImpl_GlueDriver.cxx | 4 -- src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx | 68 ------------------- src/GEOMImpl/GEOMImpl_IBasicOperations.cxx | 38 ----------- src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx | 48 ------------- src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx | 14 ---- src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx | 38 +---------- src/GEOMImpl/GEOMImpl_IHealingOperations.cxx | 28 -------- src/GEOMImpl/GEOMImpl_IInsertOperations.cxx | 32 +-------- src/GEOMImpl/GEOMImpl_IInsertOperations.hxx | 14 +--- src/GEOMImpl/GEOMImpl_ILocalOperations.cxx | 30 -------- src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx | 38 ----------- src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 28 -------- .../GEOMImpl_ITransformOperations.cxx | 68 ------------------- src/GEOMImpl/GEOMImpl_PipePathDriver.cxx | 10 --- src/GEOMImpl/GEOMImpl_PlaneDriver.cxx | 4 -- src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 5 -- src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx | 4 -- src/GEOM_I/GEOM_IInsertOperations_i.cc | 16 ----- src/MeasureGUI/MeasureGUI_AngleDlg.cxx | 2 - src/STEPImport/STEPImport.cxx | 2 - src/ShHealOper/ShHealOper_FillHoles.cxx | 4 -- 39 files changed, 8 insertions(+), 673 deletions(-) diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx index 59c4d95f8..a4b828c5f 100644 --- a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx +++ b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx @@ -1151,9 +1151,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t Handle(GEOM_Object) Te3; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif Handle(GEOM_Object) Vector_Z = myBasicOperations->MakeVectorDXDYDZ(0, 0, 1); Vector_Z->GetLastFunction()->SetDescription(""); @@ -1991,9 +1989,7 @@ Handle(TColStd_HSequenceOfTransient) //Compute the resulting value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("TShape driver failed"); return NULL; @@ -2155,9 +2151,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition //Compute the resulting value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("TShape driver failed"); return NULL; @@ -2319,9 +2313,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer //Compute the resulting value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("TShape driver failed"); return NULL; @@ -2405,9 +2397,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer // Add thickness reduction elements // at the three extremities: Left, Right and Incident try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (isTRL || isTRR || isTRI) { TopoDS_Shape aResShape = MakePipeTShapeThicknessReduction(aShape->GetValue(), theR1, theW1, theL1, theR2, theW2, theL2, @@ -2558,9 +2548,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition //Compute the resulting value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("TShape driver failed"); return NULL; @@ -2642,9 +2630,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition // Add thickness reduction elements // at the three extremities: Left, Right and Incident try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (isTRL || isTRR || isTRI) { TopoDS_Shape aResShape = MakePipeTShapeThicknessReduction(aShape->GetValue(), theR1, theW1, theL1, theR2, theW2, theL2, @@ -2787,9 +2773,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet //Compute the resulting value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("TShape driver failed"); return NULL; @@ -2887,9 +2871,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet // Add thickness reduction elements // at the three extremities: Left, Right and Incident try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (isTRL || isTRR || isTRI) { TopoDS_Shape aResShape = MakePipeTShapeThicknessReduction(aShape->GetValue(), theR1, theW1, theL1, theR2, theW2, theL2, @@ -3037,9 +3019,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition //Compute the resulting value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("TShape driver failed"); return NULL; @@ -3136,9 +3116,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition // Add thickness reduction elements // at the three extremities: Left, Right and Incident try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (isTRL || isTRR || isTRI) { TopoDS_Shape aResShape = MakePipeTShapeThicknessReduction(aShape->GetValue(), theR1, theW1, theL1, theR2, theW2, theL2, diff --git a/src/BlockFix/BlockFix_UnionFaces.cxx b/src/BlockFix/BlockFix_UnionFaces.cxx index 838b8a8ee..86f1065c3 100644 --- a/src/BlockFix/BlockFix_UnionFaces.cxx +++ b/src/BlockFix/BlockFix_UnionFaces.cxx @@ -44,11 +44,7 @@ #include #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif #include #include @@ -703,15 +699,10 @@ Standard_Boolean BlockFix_UnionFaces::IsSameDomain(const TopoDS_Face& aFace, Handle(BRepTopAdaptor_TopolTool) aTT2 = new BRepTopAdaptor_TopolTool(); try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 IntPatch_ImpImpIntersection anIIInt (aGA1, aTT1, aGA2, aTT2, aPrec, aPrec); -#else - IntPatch_TheIIIntOfIntersection anIIInt (aGA1, aTT1, aGA2, aTT2, aPrec, aPrec); -#endif + if (!anIIInt.IsDone() || anIIInt.IsEmpty()) return false; diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx index 81e1b6272..ea4281cbd 100644 --- a/src/EntityGUI/EntityGUI.cxx +++ b/src/EntityGUI/EntityGUI.cxx @@ -370,11 +370,7 @@ void EntityGUI::DisplaySimulationShape( const TopoDS_Shape& S1, const TopoDS_Sha mySimulationShape1->UnsetColor(); } if ( !S2.IsNull() ) { -#if OCC_VERSION_LARGE <= 0x06060000 - ic->Erase( mySimulationShape2, Standard_True, Standard_False ); -#else ic->Erase( mySimulationShape2, Standard_True ); -#endif ic->ClearPrs( mySimulationShape2 ); mySimulationShape2 = new AIS_Shape( TopoDS_Shape() ); @@ -418,13 +414,8 @@ void EntityGUI::EraseSimulationShape() if ( vw->getViewManager()->getType() == OCCViewer_Viewer::Type() ) { OCCViewer_Viewer* v3d = ( (OCCViewer_ViewManager*)( vw->getViewManager() ) )->getOCCViewer(); Handle(AIS_InteractiveContext) ic = v3d->getAISContext(); -#if OCC_VERSION_LARGE <= 0x06060000 - ic->Erase( mySimulationShape1, Standard_True, Standard_False ); - ic->Erase( mySimulationShape2, Standard_True, Standard_False ); -#else ic->Erase( mySimulationShape1, Standard_True ); ic->Erase( mySimulationShape2, Standard_True ); -#endif ic->ClearPrs( mySimulationShape1 ); ic->ClearPrs( mySimulationShape2 ); ic->UpdateCurrentViewer(); diff --git a/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx b/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx index 609b7e8a3..4178882f1 100755 --- a/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx +++ b/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx @@ -67,7 +67,6 @@ #include #include #include -#if OCC_VERSION_LARGE > 0x06050300 #include #include #include @@ -75,7 +74,6 @@ #include #include #include -#endif // OCC_VERSION_LARGE > 0x06050300 // This include must be *AFTER* SOCC_ViewModel.h because // of the constant ROTATE which is a #define in @@ -103,7 +101,6 @@ private: bool& myLock; }; -#if OCC_VERSION_LARGE > 0x06050300 DEFINE_STANDARD_HANDLE(AIS_Text, AIS_InteractiveObject) class AIS_Text:public AIS_InteractiveObject @@ -197,7 +194,6 @@ void AIS_Text::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentation asp->Aspect()->SetTextFontAspect(aFontAspect); Prs3d_Text::Draw(aPresentation, asp, aText, aPosition); }; -#endif // OCC_VERSION_LARGE > 0x06050300 bool isSame (double d1, double d2) { @@ -330,9 +326,7 @@ void EntityGUI_3DSketcherDlg::Init() SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); myAnglePrs = dynamic_cast(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0)); myLengthPrs = dynamic_cast(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0)); -#if OCC_VERSION_LARGE > 0x06050300 myTextPrs = dynamic_cast(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0)); -#endif // OCC_VERSION_LARGE > 0x06050300 localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX); @@ -1626,7 +1620,6 @@ void EntityGUI_3DSketcherDlg::displayText ( std::string theText, gp_Pnt P, bool store ) { -#if OCC_VERSION_LARGE > 0x06050300 SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); Handle(AIS_Text) anIO = new AIS_Text(TCollection_ExtendedString(theText.c_str()), P); @@ -1653,7 +1646,7 @@ void EntityGUI_3DSketcherDlg::displayText ( std::string theText, GEOMBase_Helper::displayPreview(aSPrs, true, true); } } -#endif // OCC_VERSION_LARGE > 0x06050300 + } //================================================================ diff --git a/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx index 41fbc77d8..6a6ed7124 100644 --- a/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx +++ b/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx @@ -103,10 +103,8 @@ Standard_EXPORT Handle_Standard_Transient& ChangeFind(const TCollection_AsciiS return ChangeFind(K); } -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version - Standard_EXPORT Standard_Address Find1 (const TCollection_AsciiString& K) const; - Standard_EXPORT Standard_Address ChangeFind1 (const TCollection_AsciiString& K); -#endif +Standard_EXPORT Standard_Address Find1 (const TCollection_AsciiString& K) const; +Standard_EXPORT Standard_Address ChangeFind1 (const TCollection_AsciiString& K); private: // Methods PRIVATE diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx index b83233ff5..c4b7a429a 100644 --- a/src/GEOM/GEOM_Engine.cxx +++ b/src/GEOM/GEOM_Engine.cxx @@ -408,9 +408,7 @@ Handle(GEOM_Object) GEOM_Engine::AddSubShape(Handle(GEOM_Object) th aSSI.SetIndices(theIndices); try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif GEOM_Solver aSolver (GEOM_Engine::GetEngine()); if (!aSolver.ComputeFunction(aFunction)) { MESSAGE("GEOM_Engine::AddSubShape Error: Can't build a sub shape"); @@ -860,11 +858,7 @@ Handle(TColStd_HSequenceOfAsciiString) GEOM_Engine::GetAllDumpNames() const #define TEXTURE_LABEL_DATA 5 int GEOM_Engine::addTexture(int theDocID, int theWidth, int theHeight, -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 const Handle(TColStd_HArray1OfByte)& theTexture, -#else - const Handle(TDataStd_HArray1OfByte)& theTexture, -#endif const TCollection_AsciiString& theFileName) { Handle(TDocStd_Document) aDoc = GetDocument(theDocID); @@ -909,19 +903,11 @@ int GEOM_Engine::addTexture(int theDocID, int theWidth, int theHeight, return aTextureID; } -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) GEOM_Engine::getTexture(int theDocID, int theTextureID, -#else -Handle(TDataStd_HArray1OfByte) GEOM_Engine::getTexture(int theDocID, int theTextureID, -#endif int& theWidth, int& theHeight, TCollection_AsciiString& theFileName) { -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) anArray; -#else - Handle(TDataStd_HArray1OfByte) anArray; -#endif theWidth = theHeight = 0; Handle(TDocStd_Document) aDoc = GetDocument(theDocID); @@ -1661,11 +1647,7 @@ void AddObjectColors (int theDocID, } } -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 static TCollection_AsciiString pack_data (const Handle(TColStd_HArray1OfByte)& aData) -#else -static TCollection_AsciiString pack_data (const Handle(TDataStd_HArray1OfByte)& aData) -#endif { TCollection_AsciiString stream; if (!aData.IsNull()) { @@ -1693,11 +1675,7 @@ void AddTextures (int theDocID, TCollection_AsciiString& theScript) if (*it <= 0) continue; Standard_Integer aWidth, aHeight; TCollection_AsciiString aFileName; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTexture = -#else - Handle(TDataStd_HArray1OfByte) aTexture = -#endif engine->getTexture(theDocID, *it, aWidth, aHeight, aFileName); if (aWidth > 0 && aHeight > 0 && !aTexture.IsNull() && aTexture->Length() > 0 ) { TCollection_AsciiString aCommand = "\n\t"; diff --git a/src/GEOM/GEOM_Engine.hxx b/src/GEOM/GEOM_Engine.hxx index 111096e72..e802b3a25 100644 --- a/src/GEOM/GEOM_Engine.hxx +++ b/src/GEOM/GEOM_Engine.hxx @@ -29,11 +29,7 @@ #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif #include #include @@ -59,11 +55,7 @@ struct TObjectData bool _unpublished; }; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 class Handle_TColStd_HArray1OfByte; -#else -class Handle_TDataStd_HArray1OfByte; -#endif struct TVariable{ TCollection_AsciiString myVariable; diff --git a/src/GEOM/GEOM_Function.cxx b/src/GEOM/GEOM_Function.cxx index db4658cf2..c141e2e4c 100644 --- a/src/GEOM/GEOM_Function.cxx +++ b/src/GEOM/GEOM_Function.cxx @@ -227,9 +227,7 @@ TopoDS_Shape GEOM_Function::GetValue() if (!isResult) { try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif GEOM_Solver aSolver(GEOM_Engine::GetEngine()); if (!aSolver.ComputeFunction(this)) { MESSAGE("GEOM_Object::GetValue Error : Can't build a sub-shape"); diff --git a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx index d68bcb7c4..b98c7de00 100644 --- a/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx +++ b/src/GEOMAlgo/GEOMAlgo_FinderShapeOn.cxx @@ -28,9 +28,7 @@ #include -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version #include -#endif #include @@ -393,11 +391,7 @@ void GEOMAlgo_FinderShapeOn::MakeArgument1() // // Argument 1 if (!myIsAnalytic) { -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version aMF.Init(mySurface, Standard_True, Precision::Confusion()); -#else - aMF.Init(mySurface, Standard_True); -#endif aFErr=aMF.Error(); if (aFErr!=BRepLib_FaceDone) { diff --git a/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx b/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx index 958d4270f..0cc8b5610 100644 --- a/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx +++ b/src/GEOMAlgo/GEOMAlgo_WireSolid.cxx @@ -186,11 +186,7 @@ void GEOMAlgo_WireSolid::BuildResult() } else if (aNbPB==1) { const Handle(BOPDS_PaveBlock)& aPB=aLPB.First(); -#if OCC_VERSION_LARGE > 0x06060000 // Porting to OCCT higher 6.6.0 version if (pDS->IsCommonBlock(aPB)) { -#else - if (aPB->IsCommonBlock()) { -#endif aState=TopAbs_ON; } else{ diff --git a/src/GEOMBase/GEOMBase.cxx b/src/GEOMBase/GEOMBase.cxx index 26110fe1e..f87694359 100644 --- a/src/GEOMBase/GEOMBase.cxx +++ b/src/GEOMBase/GEOMBase.cxx @@ -303,9 +303,6 @@ Handle(GEOM_AISShape) GEOMBase::ConvertIORinGEOMAISShape(const QString& IOR, boo AIS_ListOfInteractive displayed; ic->DisplayedObjects( displayed ); -#if OCC_VERSION_LARGE <= 0x06060000 - ic->ObjectsInCollector( displayed ); -#endif AIS_ListIteratorOfListOfInteractive it( displayed ); while ( it.More() && shape.IsNull() ) { if ( it.Value()->IsInstance( STANDARD_TYPE(GEOM_AISShape) ) ) { diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 09c3ccf2d..5968c06c0 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -122,11 +122,7 @@ #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif // If the next macro is defined, autocolor feature works for all sub-shapes; // if it is undefined, autocolor feature works for groups only @@ -138,7 +134,6 @@ // Hard-coded value of shape deflection coefficient for VTK viewer const double VTK_MIN_DEFLECTION = 0.001; -#if OCC_VERSION_LARGE > 0x06070000 // Pixmap caching support namespace { @@ -298,7 +293,6 @@ namespace } } } -#endif //================================================================ // Function : getActiveStudy @@ -525,7 +519,6 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) myToActivate = true; // This parameter is used for activisation/deactivisation of objects to be displayed - #if OCC_VERSION_LARGE > 0x06050100 // Functionnality available only in OCCT 6.5.2 // Activate parallel vizualisation only for testing purpose // and if the corresponding env variable is set to 1 char* parallel_visu = getenv("PARALLEL_VISU"); @@ -534,7 +527,6 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) MESSAGE("Parallel visualisation on"); BRepMesh_IncrementalMesh::SetParallelDefault(Standard_True); } - #endif myViewFrame = 0; @@ -920,7 +912,6 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap aImagePath = propMap.value( GEOM::propertyName( GEOM::Texture ) ).toString(); } -#if OCC_VERSION_LARGE > 0x06070000 Handle(Image_PixMap) aPixmap; if ( !aImagePath.isEmpty() ) aPixmap = cacheTextureFor( aImagePath, AISShape ); @@ -936,13 +927,6 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap else { AISShape->SetTextureMapOff(); } -#else - if ( !aImagePath.isEmpty() ) { - AISShape->SetTextureFileName( TCollection_AsciiString( aImagePath.toUtf8().constData() ) ); - AISShape->SetTextureMapOn(); - AISShape->DisableTextureModulate(); - } -#endif // set line width AISShape->SetWidth( HasWidth() ? @@ -975,14 +959,9 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap // custom marker string contains "IdOfTexture" int textureId = aList[0].toInt(); Standard_Integer aWidth, aHeight; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTexture = -#else - Handle(Graphic3d_HArray1OfBytes) aTexture = -#endif GeometryGUI::getTexture( study, textureId, aWidth, aHeight ); if ( !aTexture.IsNull() ) { -#if OCC_VERSION_LARGE > 0x06060000 // Porting to OCCT higher 6.6.0 version Handle(Prs3d_PointAspect) aTextureAspect = new Prs3d_PointAspect( HasColor() ? // predefined color, manually set to displayer via GEOM_Displayer::SetColor() function @@ -991,18 +970,6 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::PointColor ) ).value() ), aWidth, aHeight, aTexture ); -#else - int TextureId = 0; - Handle(Prs3d_PointAspect) aTextureAspect = - new Prs3d_PointAspect( HasColor() ? - // predefined color, manually set to displayer via GEOM_Displayer::SetColor() function - (Quantity_NameOfColor)GetColor() : - // color from properties - SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::PointColor ) ).value() ), - ++TextureId, - aWidth, aHeight, - aTexture ); -#endif AISShape->Attributes()->SetPointAspect( aTextureAspect ); } } @@ -2006,13 +1973,11 @@ void GEOM_Displayer::AfterDisplay( SALOME_View* v, const SALOME_OCCPrs* p ) UpdateColorScale(false,false); } -#if OCC_VERSION_LARGE > 0x06070000 void GEOM_Displayer::BeforeErase( SALOME_View* v, const SALOME_OCCPrs* p ) { LightApp_Displayer::BeforeErase( v, p ); releaseTextures( p ); } -#endif void GEOM_Displayer::AfterErase( SALOME_View* v, const SALOME_OCCPrs* p ) { diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index 7061a58cb..7f0d01d99 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -175,9 +175,7 @@ public: virtual void Update( SALOME_VTKPrs* ); virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCPrs* ); virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCPrs* ); -#if OCC_VERSION_LARGE > 0x06070000 virtual void BeforeErase ( SALOME_View*, const SALOME_OCCPrs* ); -#endif virtual void AfterErase ( SALOME_View*, const SALOME_OCCPrs* ); /* This methos is used for activisation/deactivisation of objects to be displayed*/ diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 43e865ae9..3cfa790ea 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -108,11 +108,7 @@ #include #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif #include @@ -1156,9 +1152,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::OpRevolution, genId, -1 ); createMenu( GEOMOp::OpFilling, genId, -1 ); createMenu( GEOMOp::OpPipe, genId, -1 ); -#if OCC_VERSION_LARGE > 0x06050300 createMenu( GEOMOp::OpPipePath, genId, -1 ); -#endif //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 ); //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 ); @@ -1383,9 +1377,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpRevolution, genTbId ); createTool( GEOMOp::OpFilling, genTbId ); createTool( GEOMOp::OpPipe, genTbId ); -#if OCC_VERSION_LARGE > 0x06050300 createTool( GEOMOp::OpPipePath, genTbId ); -#endif int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) ); createTool( GEOMOp::OpTranslate, transTbId ); @@ -1493,7 +1485,6 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule ); mgr->insert( separator(), -1, -1 ); // ----------- -#if OCC_VERSION_LARGE > 0x06050200 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false"; QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true"; mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front @@ -1501,7 +1492,6 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule ); mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule ); -#endif mgr->insert( separator(), -1, -1 ); // ----------- dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe @@ -2179,20 +2169,12 @@ QString GeometryGUI::engineIOR() const return ""; } -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture -#else -Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture -#endif (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight) { theWidth = theHeight = 0; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTexture; -#else - Handle(Graphic3d_HArray1OfBytes) aTexture; -#endif if (theStudy) { TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ]; @@ -2206,11 +2188,7 @@ Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture theWidth = aWidth; theHeight = aHeight; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 aTexture = new TColStd_HArray1OfByte (1, aStream->length()); -#else - aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length()); -#endif for (int i = 0; i < aStream->length(); i++) aTexture->SetValue( i+1, (Standard_Byte)aStream[i] ); diff --git a/src/GEOMGUI/GeometryGUI.h b/src/GEOMGUI/GeometryGUI.h index f2f2ad8e5..5dde1ed7f 100644 --- a/src/GEOMGUI/GeometryGUI.h +++ b/src/GEOMGUI/GeometryGUI.h @@ -47,11 +47,7 @@ // OCCT Includes #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif // IDL headers #include "SALOMEconfig.h" @@ -88,11 +84,7 @@ public: virtual void initialize( CAM_Application* ); virtual QString engineIOR() const; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 static Handle(TColStd_HArray1OfByte) getTexture (SalomeApp_Study*, int, int&, int&); -#else - static Handle(Graphic3d_HArray1OfBytes) getTexture (SalomeApp_Study*, int, int&, int&); -#endif static bool InitGeomGen(); @@ -208,11 +200,7 @@ public: private: -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 typedef QMap TextureMap; -#else - typedef QMap TextureMap; -#endif typedef QMap StudyTextureMap; typedef QMap GUIMap; diff --git a/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx b/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx index efe0bee51..a5c99d930 100644 --- a/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ArchimedeDriver.cxx @@ -130,11 +130,7 @@ Standard_Integer GEOMImpl_ArchimedeDriver::Execute(TFunction_Logbook& log) const Standard_Real u1,u2,v1,v2; SurfaceTrimmee->Bounds(u1,u2,v1,v2); -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version TopoDS_Face tirant = BRepBuilderAPI_MakeFace(SurfaceTrimmee, u1, u2, v1, v2, Precision::Confusion()); -#else - TopoDS_Face tirant = BRepBuilderAPI_MakeFace(SurfaceTrimmee, u1, u2, v1, v2); -#endif if (tirant.IsNull()) { StdFail_NotDone::Raise("Failed to build secant face"); diff --git a/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx b/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx index d6b7cbfc9..ac7176133 100644 --- a/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx +++ b/src/GEOMImpl/GEOMImpl_Block6Explorer.cxx @@ -1365,7 +1365,6 @@ TCollection_AsciiString GEOMImpl_Block6Explorer::MakeAnyFace (const TopoDS_Wire& // VSR: debug issues 0021568 and 0021550 (15/05/2012) - BEGIN // the following block, when enabled, leads to extra vertices generation by partition algorithm // in some cases, for example when fillet is made on a PipeTShape -//#if OCC_VERSION_LARGE > 0x06050200 #if 0 // VSR: debug issues 0021568 and 0021550 (15/05/2012) - END BRep_Builder BB; diff --git a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx index f0daab0a8..57d0317cb 100644 --- a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx @@ -219,11 +219,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const App.SurfUMults(), App.SurfVMults(), App.UDegree(), App.VDegree()); if (GBS.IsNull()) return 0; -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version aShape = BRepBuilderAPI_MakeFace(GBS, Precision::Confusion()); -#else - aShape = BRepBuilderAPI_MakeFace(GBS); -#endif } else { // implemented by skl 20.03.2008 for bug 16568 @@ -287,11 +283,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const } GeomAPI_PointsToBSplineSurface PTB (Points, mindeg, maxdeg, GeomAbs_C2, tol3d); Handle(Geom_BSplineSurface) BS = PTB.Surface(); -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version BRepBuilderAPI_MakeFace BB (BS, Precision::Confusion()); -#else - BRepBuilderAPI_MakeFace BB (BS); -#endif TopoDS_Face NewF = BB.Face(); Handle(ShapeFix_Face) sff = new ShapeFix_Face (NewF); sff->Perform(); diff --git a/src/GEOMImpl/GEOMImpl_GlueDriver.cxx b/src/GEOMImpl/GEOMImpl_GlueDriver.cxx index 8e2fd5220..1f03275c5 100644 --- a/src/GEOMImpl/GEOMImpl_GlueDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_GlueDriver.cxx @@ -436,12 +436,10 @@ TopoDS_Shape GEOMImpl_GlueDriver::GlueWithWarnings (const TopoDS_Shape& theShape aGA.Detect(); //modified by NIZNHY-PKV Tue Mar 13 14:07:12 2012f -#if OCC_VERSION_LARGE > 0x06050200 Standard_Integer iWrnDetect = aGA.WarningStatus(); if (iWrnDetect == 2) { Standard_Failure::Raise("GLUE_ERROR_STICKED_SHAPES"); } -#endif //modified by NIZNHY-PKV Tue Mar 13 14:07:14 2012t Standard_Integer iErr = aGA.ErrorStatus(); @@ -596,7 +594,6 @@ TopoDS_Shape GEOMImpl_GlueDriver::GlueByList (const TopoDS_Shape& theShape, aGA.Detect(); //modified by NIZNHY-PKV Tue Mar 13 14:07:12 2012f -#if OCC_VERSION_LARGE > 0x06050200 Standard_Integer iWrnDetect = aGA.WarningStatus(); if (iWrnDetect == 2) { /* @@ -622,7 +619,6 @@ TopoDS_Shape GEOMImpl_GlueDriver::GlueByList (const TopoDS_Shape& theShape, */ Standard_Failure::Raise("GLUE_ERROR_STICKED_SHAPES"); } -#endif //modified by NIZNHY-PKV Tue Mar 13 14:07:14 2012t Standard_Integer iErr = aGA.ErrorStatus(); diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx index 1e345fa04..a1e3ca5c8 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx @@ -128,9 +128,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeBoxDXDYDZ (double theDX, dou //Compute the box value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Box driver failed"); return NULL; @@ -185,9 +183,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeBoxTwoPnt (Handle(GEOM_Objec //Compute the Box value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Box driver failed"); return NULL; @@ -236,9 +232,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceHW (double theH, double //Compute the Face try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Face driver failed"); return NULL; @@ -293,9 +287,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceObjHW (Handle(GEOM_Objec //Compute the Face try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Face driver failed"); return NULL; @@ -351,9 +343,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskPntVecR //Compute the Disk value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Disk driver failed"); return NULL; @@ -411,9 +401,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskThreePnt (Handle(GEOM_Ob //Compute the Disk value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Disk driver failed"); return NULL; @@ -461,9 +449,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskR (double theR, int theO //Compute the Disk try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Disk driver failed"); return NULL; @@ -509,9 +495,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou //Compute the Cylinder value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Cylinder driver failed"); return NULL; @@ -570,9 +554,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO //Compute the Cylinder value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Cylinder driver failed"); return NULL; @@ -622,9 +604,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeConeR1R2H (double theR1, dou //Compute the Cone value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Cone driver failed"); return NULL; @@ -685,9 +665,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeConePntVecR1R2H (Handle(GEOM //Compute the Cone value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Cone driver failed"); return NULL; @@ -733,9 +711,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeSphereR (double theR) //Compute the Sphere value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Sphere driver failed"); return NULL; @@ -788,9 +764,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeSpherePntR (Handle(GEOM_Obje //Compute the Sphere value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Sphere driver failed"); return NULL; @@ -839,9 +813,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeTorusRR //Compute the Torus value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Torus driver failed"); return NULL; @@ -899,9 +871,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeTorusPntVecRR //Compute the Torus value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Torus driver failed"); return NULL; @@ -960,9 +930,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH (Handle(GEOM_Objec //Compute the Prism value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { //SetErrorCode("Prism driver failed"); SetErrorCode("Extrusion can not be created, check input data"); @@ -1024,9 +992,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH2Ways (Handle(GEOM_ //Compute the Prism value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { //SetErrorCode("Prism driver failed"); SetErrorCode("Extrusion can not be created, check input data"); @@ -1087,9 +1053,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt //Compute the Prism value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { //SetErrorCode("Prism driver failed"); SetErrorCode("Extrusion can not be created, check input data"); @@ -1152,9 +1116,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt2Ways //Compute the Prism value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { //SetErrorCode("Prism driver failed"); SetErrorCode("Extrusion can not be created, check input data"); @@ -1213,9 +1175,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismDXDYDZ //Compute the Prism value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Extrusion can not be created, check input data"); return NULL; @@ -1276,9 +1236,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismDXDYDZ2Ways //Compute the Prism value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Extrusion can not be created, check input data"); return NULL; @@ -1350,9 +1308,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDraftPrism //Compute the Draft Prism Feature value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Extrusion can not be created, check input data"); return NULL; @@ -1415,9 +1371,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipe (Handle(GEOM_Object) th //Compute the Pipe value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe driver failed"); return NULL; @@ -1475,9 +1429,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle (Handle( //Compute the Revolution value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Revolution driver failed"); return NULL; @@ -1533,9 +1485,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle2Ways //Compute the Revolution value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Revolution driver failed"); return NULL; @@ -1596,9 +1546,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFilling //Compute the Solid value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Filling driver failed"); return NULL; @@ -1695,9 +1643,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeThruSections( //Compute the ThruSections value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("ThruSections driver failed"); return anObj; @@ -1819,9 +1765,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections( //Compute the Pipe value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe with defferent section driver failed"); return anObj; @@ -1978,9 +1922,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections( //Compute the Pipe value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe with shell sections driver failed"); return anObj; @@ -2125,9 +2067,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath( //Compute the Pipe value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe with shell sections without path driver failed"); return anObj; @@ -2218,9 +2158,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeBiNormalAlongVector (Han //Compute the Pipe value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe driver failed"); return NULL; @@ -2279,9 +2217,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeThickening(Handle(GEOM_Objec //Compute the offset try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Offset driver failed"); return NULL; @@ -2348,9 +2284,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::RestorePath (Handle(GEOM_Object) // Compute the Path value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("PipePath driver failed"); return NULL; @@ -2440,9 +2374,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::RestorePath // Compute the Path value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("PipePath driver failed"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx b/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx index 43058dd35..cb81f958f 100644 --- a/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IBasicOperations.cxx @@ -106,9 +106,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePointXYZ //Compute the point value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Point driver failed"); return NULL; @@ -161,9 +159,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePointWithReference //Compute the point value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Point driver failed"); return NULL; @@ -264,9 +260,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::makePointOnGeom //Compute the point value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Point driver failed"); return NULL; @@ -422,9 +416,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePointOnLinesIntersection //Compute the point value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Point driver failed"); return NULL; @@ -475,9 +467,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeTangentOnCurve //Compute the vector value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Vector driver failed"); return NULL; @@ -526,9 +516,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeVectorDXDYDZ //Compute the Vector value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Vector driver failed"); return NULL; @@ -581,9 +569,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeVectorTwoPnt //Compute the Vector value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Vector driver failed"); return NULL; @@ -637,9 +623,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeLine //Compute the Line value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Line driver failed"); return NULL; @@ -692,9 +676,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeLineTwoPnt //Compute the Line value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Line driver failed"); return NULL; @@ -747,9 +729,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeLineTwoFaces //Compute the Line value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Line driver failed"); return NULL; @@ -806,9 +786,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlaneThreePnt //Compute the Plane value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Plane driver failed"); return NULL; @@ -863,9 +841,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlanePntVec //Compute the Plane value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Plane driver failed"); return NULL; @@ -917,9 +893,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlaneFace //Compute the Plane value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Plane driver failed"); return NULL; @@ -974,9 +948,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlane2Vec //Compute the Plane value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Plane driver failed"); return NULL; @@ -1028,9 +1000,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlaneLCS //Compute the Plane value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Plane driver failed"); return NULL; @@ -1082,9 +1052,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeMarker //Compute the marker value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Marker driver failed"); return NULL; @@ -1136,9 +1104,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeMarkerFromShape //Compute the marker value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Marker driver failed"); return NULL; @@ -1193,9 +1159,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeMarkerPntTwoVec //Compute the marker value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Marker driver failed"); return NULL; @@ -1252,9 +1216,7 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeTangentPlaneOnFace(const Hand //Compute the Plane value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Plane driver failed"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx index e51931b8e..cca9f381f 100644 --- a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx @@ -168,9 +168,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeQuad //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to compute a face"); return NULL; @@ -226,9 +224,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeQuad2Edges //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to compute a face"); return NULL; @@ -291,9 +287,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeQuad4Vertices //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to compute a face"); return NULL; @@ -363,9 +357,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeHexa //Compute the Block value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to compute a block"); return NULL; @@ -422,9 +414,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeHexa2Faces //Compute the Block value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to compute a block"); return NULL; @@ -478,9 +468,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeBlockCompound //Compute the Blocks Compound value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to compute a blocks compound"); return NULL; @@ -683,9 +671,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetEdge //Compute the Edge value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopTools_IndexedDataMapOfShapeListOfShape MVE; GEOMImpl_Block6Explorer::MapShapesAndAncestors (aBlockOrComp, TopAbs_VERTEX, TopAbs_EDGE, MVE); @@ -789,9 +775,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetEdgeNearPoint //Compute the Edge value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Vertex aVert = TopoDS::Vertex(anArg); TopoDS_Shape aShape = GEOMUtils::GetEdgeNearPoint(aBlockOrComp, aVert); @@ -864,9 +848,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetFaceByPoints //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape aShape; TopTools_IndexedDataMapOfShapeListOfShape MVF; @@ -999,9 +981,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetFaceByEdges //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape aShape; TopTools_IndexedDataMapOfShapeListOfShape MEF; @@ -1124,9 +1104,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetOppositeFace //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape aShape; GEOMImpl_Block6Explorer aBlockTool; @@ -1190,9 +1168,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetFaceNearPoint //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape aShape; TopoDS_Vertex aVert = TopoDS::Vertex(anArg); @@ -1382,9 +1358,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetFaceByNormale //Compute the Face value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape aShape; TopoDS_Edge anEdge = TopoDS::Edge(anArg); @@ -1524,9 +1498,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetShapesNearPoint // Compute the result try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Vertex aVert = TopoDS::Vertex(anArg); TopTools_MapOfShape mapShape; @@ -1629,9 +1601,7 @@ Standard_Boolean GEOMImpl_IBlocksOperations::IsCompoundOfBlocks //Check isCompOfBlocks = Standard_True; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopTools_MapOfShape mapShape; TopExp_Explorer exp (aBlockOrComp, TopAbs_SOLID); for (; exp.More(); exp.Next()) { @@ -2628,9 +2598,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::RemoveExtraEdges //Compute the fixed shape try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to remove extra edges of the given shape"); return NULL; @@ -2681,9 +2649,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::UnionFaces //Compute the fixed shape try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to remove extra edges of the given shape"); return NULL; @@ -2737,9 +2703,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::CheckAndImprove //Compute the fixed shape try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to improve the given blocks compound"); return NULL; @@ -2789,9 +2753,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IBlocksOperations::ExplodeCompound // Explode try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopExp_Explorer exp (aBlockOrComp, TopAbs_SOLID); for (; exp.More(); exp.Next()) { if (mapShape.Add(exp.Current())) { @@ -2884,9 +2846,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetBlockNearPoint //Compute the Block value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape aShape; TopoDS_Vertex aVert = TopoDS::Vertex(anArg); @@ -3063,9 +3023,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetBlockByParts //Compute the Block value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif // 1. Explode compound on solids TopTools_MapOfShape mapShape; Standard_Integer nbSolids = 0; @@ -3182,9 +3140,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IBlocksOperations::GetBlocksByPart //Get the Blocks try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopTools_MapOfShape mapShape; Standard_Integer nbSolids = 0; TopExp_Explorer exp (aBlockOrComp, TopAbs_SOLID); @@ -3305,9 +3261,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeMultiTransformation1D //Compute the transformation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to make multi-transformation"); return NULL; @@ -3369,9 +3323,7 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::MakeMultiTransformation2D //Compute the transformation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Block driver failed to make multi-transformation"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx b/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx index 644422c4c..eddc96add 100644 --- a/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx @@ -114,9 +114,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeBoolean //Compute the Boolean value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Boolean driver failed"); return NULL; @@ -189,9 +187,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeFuse //Compute the Boolean value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Boolean driver failed"); return NULL; @@ -254,9 +250,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeFuseList //Compute the Boolean value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Boolean driver failed"); return NULL; @@ -316,9 +310,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCommonList //Compute the Boolean value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Boolean driver failed"); return NULL; @@ -389,9 +381,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCutList //Compute the Boolean value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Boolean driver failed"); return NULL; @@ -516,9 +506,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakePartition //Compute the Partition try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Partition driver failed"); return NULL; @@ -599,9 +587,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeHalfPartition //Compute the Partition value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Partition driver failed"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx index 8046dbb63..df1c543e7 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx @@ -235,9 +235,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCircleThreePnt (Handle(GEOM_ //Compute the Circle value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Circle driver failed"); return NULL; @@ -295,9 +293,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCircleCenter2Pnt (Handle(GEO //Compute the Circle value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Circle driver failed"); return NULL; @@ -360,9 +356,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCirclePntVecR //Compute the Circle value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Circle driver failed"); return NULL; @@ -435,9 +429,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeEllipse //Compute the Ellipse value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Ellipse driver failed"); return NULL; @@ -502,9 +494,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeArc (Handle(GEOM_Object) the //Compute the Arc value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Arc driver failed"); return NULL; @@ -563,12 +553,10 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeArcCenter (Handle(GEOM_Objec //Compute the Arc value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { - SetErrorCode("Arc driver failed"); - return NULL; + SetErrorCode("Arc driver failed"); + return NULL; } } catch (Standard_Failure) { @@ -622,9 +610,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeArcOfEllipse (Handle(GEOM_Ob //Compute the Arc value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Arc driver failed"); return NULL; @@ -686,9 +672,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline (std::list 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Polyline driver failed"); return NULL; @@ -757,9 +741,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineBezier //Compute the Spline value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Spline driver failed"); return NULL; @@ -829,9 +811,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation //Compute the Spline value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Spline driver failed"); return NULL; @@ -908,9 +888,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolWithTangents //Compute the Spline value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Spline driver failed"); return NULL; @@ -1159,9 +1137,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric //Compute the Curve value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Curve driver failed !!!"); return NULL; @@ -1228,9 +1204,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcher (const char* theCom //Compute the Sketcher value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Sketcher driver failed"); return NULL; @@ -1292,9 +1266,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcherOnPlane //Compute the Sketcher value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Sketcher driver failed"); return NULL; @@ -1343,9 +1315,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::Make3DSketcherCommand (const cha //Compute the 3D Sketcher value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("3D Sketcher driver failed"); return NULL; @@ -1403,9 +1373,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::Make3DSketcher (std::list 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("3D Sketcher driver failed"); return NULL; @@ -1478,9 +1446,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeIsoline //Compute the isoline curve try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx index 7f58ddfe7..b45374c45 100644 --- a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx @@ -141,9 +141,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ShapeProcess (Handle(GEOM_Objec //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape Healing algorithm failed"); @@ -350,9 +348,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::SuppressFaces //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); @@ -420,9 +416,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::CloseContour //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); @@ -489,9 +483,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::RemoveIntWires //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); @@ -557,9 +549,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::FillHoles (Handle(GEOM_Object) //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); @@ -628,9 +618,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::Sew (Handle(GEOM_Object) theObj //Compute the result try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); @@ -690,9 +678,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::RemoveInternalFaces (Handle(GEO //Compute the result try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); @@ -751,9 +737,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::DivideEdge (Handle(GEOM_Object) //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); return NULL; @@ -817,9 +801,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::FuseCollinearEdgesWithinWire // Compute the new wire try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); return NULL; @@ -869,12 +851,8 @@ bool GEOMImpl_IHealingOperations::GetFreeBoundary (Handle(GEOM_Object) theObject // get free boundary shapes -#if OCC_VERSION_LARGE > 0x06030008 ShapeAnalysis_FreeBounds anAnalizer(aShape, Standard_False, Standard_True, Standard_True); -#else - ShapeAnalysis_FreeBounds anAnalizer(aShape); -#endif TopoDS_Compound aClosed = anAnalizer.GetClosedWires(); TopoDS_Compound anOpen = anAnalizer.GetOpenWires(); @@ -985,9 +963,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientation (Handle(GEOM_ //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); return NULL; @@ -1054,9 +1030,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientationCopy (Handle(G // Compute the result try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); return NULL; @@ -1113,9 +1087,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::LimitTolerance (Handle(GEOM_Obj // Compute try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Healing driver failed"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx b/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx index 86e7566d5..14b53ded0 100755 --- a/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx @@ -79,12 +79,8 @@ #include #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include #include -#else -#include -#endif #include #include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC @@ -154,9 +150,7 @@ Handle(GEOM_Object) GEOMImpl_IInsertOperations::MakeCopy (Handle(GEOM_Object) th //Compute the Copy value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Copy driver failed"); return NULL; @@ -217,9 +211,7 @@ void GEOMImpl_IInsertOperations::Export //Perform the Export try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Not enough space on disk, or you haven't permissions to write this directory"); return; @@ -280,9 +272,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IInsertOperations::Import Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Import driver failed"); return NULL; @@ -659,11 +649,7 @@ int GEOMImpl_IInsertOperations::LoadTexture(const TCollection_AsciiString& theTe if (theTextureFile.IsEmpty()) return 0; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTexture; -#else - Handle(TDataStd_HArray1OfByte) aTexture; -#endif FILE* fp = fopen(theTextureFile.ToCString(), "r"); if (!fp) return 0; @@ -705,11 +691,7 @@ int GEOMImpl_IInsertOperations::LoadTexture(const TCollection_AsciiString& theTe if (bytedata.empty() || bytedata.size() != lines.size()*lenbytes) return 0; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 aTexture = new TColStd_HArray1OfByte (1, lines.size()*lenbytes); -#else - aTexture = new TDataStd_HArray1OfByte (1, lines.size()*lenbytes); -#endif std::list::iterator bdit; int i; @@ -722,11 +704,7 @@ int GEOMImpl_IInsertOperations::LoadTexture(const TCollection_AsciiString& theTe } int GEOMImpl_IInsertOperations::AddTexture(int theWidth, int theHeight, -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 const Handle(TColStd_HArray1OfByte)& theTexture) -#else - const Handle(TDataStd_HArray1OfByte)& theTexture) -#endif { SetErrorCode(KO); int aTextureId = GetEngine()->addTexture(GetDocID(), theWidth, theHeight, theTexture); @@ -734,20 +712,12 @@ int GEOMImpl_IInsertOperations::AddTexture(int theWidth, int theHeight, return aTextureId; } -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) GEOMImpl_IInsertOperations::GetTexture(int theTextureId, -#else -Handle(TDataStd_HArray1OfByte) GEOMImpl_IInsertOperations::GetTexture(int theTextureId, -#endif - int& theWidth, int& theHeight) + int& theWidth, int& theHeight) { SetErrorCode(KO); -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTexture; -#else - Handle(TDataStd_HArray1OfByte) aTexture; -#endif theWidth = theHeight = 0; TCollection_AsciiString aFileName; diff --git a/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx b/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx index c3c982fec..93a147a38 100644 --- a/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx @@ -45,11 +45,7 @@ class GEOMImpl_IShapesOperations; class GEOMImpl_IGroupOperations; class GEOMImpl_IFieldOperations; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 class Handle_TColStd_HArray1OfByte; -#else -class Handle_TDataStd_HArray1OfByte; -#endif namespace XAO { class Geometry; @@ -95,18 +91,10 @@ class GEOMImpl_IInsertOperations : public GEOM_IOperations { Standard_EXPORT int LoadTexture(const TCollection_AsciiString& theTextureFile); Standard_EXPORT int AddTexture(int theWidth, int theHeight, -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 const Handle(TColStd_HArray1OfByte)& theTexture); -#else - const Handle(TDataStd_HArray1OfByte)& theTexture); -#endif -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Standard_EXPORT Handle(TColStd_HArray1OfByte) GetTexture(int theTextureId, -#else - Standard_EXPORT Handle(TDataStd_HArray1OfByte) GetTexture(int theTextureId, -#endif - int& theWidth, int& theHeight); + int& theWidth, int& theHeight); Standard_EXPORT std::list GetAllTextures(); diff --git a/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx b/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx index cb2c4698c..b3c270ef8 100644 --- a/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ILocalOperations.cxx @@ -116,9 +116,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletAll //Compute the Fillet value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Fillet driver failed"); return NULL; @@ -177,9 +175,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletEdges //Compute the Fillet value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Fillet driver failed"); return NULL; @@ -247,9 +243,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletEdgesR1R2 //Compute the Fillet value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Fillet driver failed"); return NULL; @@ -317,9 +311,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletFaces //Compute the Fillet value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Fillet driver failed"); return NULL; @@ -387,9 +379,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletFacesR1R2 //Compute the Fillet value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Fillet driver failed"); return NULL; @@ -456,9 +446,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFillet2D //Compute the Fillet value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("2D Fillet driver failed"); return NULL; @@ -527,9 +515,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFillet1D //Compute the Fillet value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("1D Fillet driver failed"); return NULL; @@ -588,9 +574,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferAll (Handle(GEOM_Objec //Compute the Chamfer value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Chamfer driver failed"); return NULL; @@ -645,9 +629,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdge //Compute the Chamfer value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Chamfer driver failed"); return NULL; @@ -703,9 +685,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdgeAD //Compute the Chamfer value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Chamfer driver failed"); return NULL; @@ -766,9 +746,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferFaces //Compute the Chamfer value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Chamfer driver failed"); return NULL; @@ -837,9 +815,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferFacesAD //Compute the Chamfer value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Chamfer driver failed"); return NULL; @@ -909,9 +885,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdges //Compute the Chamfer value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Chamfer driver failed"); return NULL; @@ -981,9 +955,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdgesAD //Compute the Chamfer value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Chamfer driver failed"); return NULL; @@ -1045,9 +1017,7 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeArchimede (Handle(GEOM_Object //Compute the Archimede value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Archimede driver failed"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx index 31233a94f..8bc4768d5 100644 --- a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx @@ -742,9 +742,7 @@ void GEOMImpl_IMeasureOperations::GetPosition } try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif gp_Ax3 anAx3 = GEOMUtils::GetPosition(aShape); @@ -798,9 +796,7 @@ Handle(GEOM_Object) GEOMImpl_IMeasureOperations::GetCentreOfMass //Compute the CentreOfMass value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Measure driver failed to compute centre of mass"); return NULL; @@ -852,9 +848,7 @@ Handle(GEOM_Object) GEOMImpl_IMeasureOperations::GetVertexByIndex //Compute try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Vertex by index driver failed."); return NULL; @@ -911,9 +905,7 @@ Handle(GEOM_Object) GEOMImpl_IMeasureOperations::GetNormal //Compute the Normale value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Measure driver failed to compute normake of face"); return NULL; @@ -963,9 +955,7 @@ void GEOMImpl_IMeasureOperations::GetBasicProperties (Handle(GEOM_Object) theSha //Compute the parameters GProp_GProps LProps, SProps; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif BRepGProp::LinearProperties(aShape, LProps); theLength = LProps.Mass(); @@ -1019,9 +1009,7 @@ void GEOMImpl_IMeasureOperations::GetInertia GProp_GProps System; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (aShape.ShapeType() == TopAbs_VERTEX || aShape.ShapeType() == TopAbs_EDGE || aShape.ShapeType() == TopAbs_WIRE) { @@ -1087,9 +1075,7 @@ void GEOMImpl_IMeasureOperations::GetBoundingBox Bnd_Box B; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif BRepBuilderAPI_Copy aCopyTool (aShape); if (!aCopyTool.IsDone()) { SetErrorCode("GetBoundingBox Error: Bad shape detected"); @@ -1155,9 +1141,7 @@ Handle(GEOM_Object) GEOMImpl_IMeasureOperations::GetBoundingBox //Compute the BoundingBox value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Measure driver failed to compute a bounding box"); return NULL; @@ -1214,9 +1198,7 @@ void GEOMImpl_IMeasureOperations::GetTolerance FaceMax = EdgeMax = VertMax = -RealLast(); try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif for (TopExp_Explorer ExF (aShape, TopAbs_FACE); ExF.More(); ExF.Next()) { TopoDS_Face Face = TopoDS::Face(ExF.Current()); T = BRep_Tool::Tolerance(Face); @@ -1277,9 +1259,7 @@ bool GEOMImpl_IMeasureOperations::CheckShape (Handle(GEOM_Object) theShape, //Compute the parameters bool isValid = false; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif BRepCheck_Analyzer ana (aShape, theIsCheckGeom); if (ana.IsValid()) { isValid = true; @@ -1673,9 +1653,7 @@ TCollection_AsciiString GEOMImpl_IMeasureOperations::WhatIs (Handle(GEOM_Object) Astr = Astr + " Number of sub-shapes : \n"; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif int iType, nbTypes [TopAbs_SHAPE]; for (iType = 0; iType < TopAbs_SHAPE; ++iType) nbTypes[iType] = 0; @@ -1868,9 +1846,7 @@ GEOMImpl_IMeasureOperations::GetMinDistance (Handle(GEOM_Object) theShape1, //Compute the parameters try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif gp_Pnt aPnt1, aPnt2; @@ -1920,9 +1896,7 @@ Standard_Integer GEOMImpl_IMeasureOperations::ClosestPoints (Handle(GEOM_Object) // Compute the extremities try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif // skl 30.06.2008 // additional workaround for bugs 19899, 19908 and 19910 from Mantis @@ -1996,9 +1970,7 @@ void GEOMImpl_IMeasureOperations::PointCoordinates (Handle(GEOM_Object) theShape } try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif gp_Pnt aPnt = BRep_Tool::Pnt( TopoDS::Vertex( aShape ) ); theX = aPnt.X(); theY = aPnt.Y(); @@ -2048,9 +2020,7 @@ Standard_Real GEOMImpl_IMeasureOperations::GetAngle (Handle(GEOM_Object) theLine } try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Edge E1 = TopoDS::Edge(aLine1); TopoDS_Edge E2 = TopoDS::Edge(aLine2); @@ -2126,9 +2096,7 @@ Standard_Real GEOMImpl_IMeasureOperations::GetAngleBtwVectors (Handle(GEOM_Objec } try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Edge aE1 = TopoDS::Edge(aVec1); TopoDS_Edge aE2 = TopoDS::Edge(aVec2); @@ -2188,9 +2156,7 @@ Standard_Real GEOMImpl_IMeasureOperations::CurveCurvatureByParam //Compute curvature try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif GeomLProp_CLProps Prop = GeomLProp_CLProps (aCurve, aP, 2, Precision::Confusion()); aRes = fabs(Prop.Curvature()); @@ -2242,9 +2208,7 @@ Standard_Real GEOMImpl_IMeasureOperations::CurveCurvatureByPoint //Compute curvature try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif GeomAPI_ProjectPointOnCurve PPCurve(aPoint, aCurve, aFP, aLP); if(PPCurve.NbPoints()>0) { GeomLProp_CLProps Prop = GeomLProp_CLProps @@ -2285,9 +2249,7 @@ Standard_Real GEOMImpl_IMeasureOperations::getSurfaceCurvatures if (aSurf.IsNull()) return aRes; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif GeomLProp_SLProps Prop = GeomLProp_SLProps (aSurf, theUParam, theVParam, 2, Precision::Confusion()); if(Prop.IsCurvatureDefined()) { diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index efb82f39b..ba9b6470f 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -197,9 +197,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdge //Compute the Edge value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Vector driver failed"); return NULL; @@ -258,9 +256,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdgeOnCurveByLength //Compute the Edge value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Vector driver failed"); return NULL; @@ -316,9 +312,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdgeWire //Compute the Edge value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed"); return NULL; @@ -392,9 +386,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeWire //Compute the shape try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed"); return NULL; @@ -459,9 +451,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFace (Handle(GEOM_Object) th //Compute the Face value Standard_Boolean isWarning = Standard_False; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed to compute a face"); return NULL; @@ -530,9 +520,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceWires //Compute the shape Standard_Boolean isWarning = Standard_False; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed"); return NULL; @@ -643,9 +631,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeShape //Compute the shape try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed"); return NULL; @@ -712,9 +698,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeGlueFaces //Compute the sub-shape value Standard_Boolean isWarning = Standard_False; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed to glue faces"); return NULL; @@ -869,9 +853,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeGlueFacesByList //Compute the sub-shape value Standard_Boolean isWarning = Standard_False; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed to glue faces"); return NULL; @@ -944,9 +926,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeGlueEdges //Compute the sub-shape value Standard_Boolean isWarning = Standard_False; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed to glue edges"); return NULL; @@ -1107,9 +1087,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeGlueEdgesByList //Compute the sub-shape value Standard_Boolean isWarning = Standard_False; try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed to glue edges"); return NULL; @@ -1787,9 +1765,7 @@ Standard_Integer GEOMImpl_IShapesOperations::NumberOfSubShapes */ try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif int iType, nbTypes [TopAbs_SHAPE]; for (iType = 0; iType < TopAbs_SHAPE; ++iType) nbTypes[iType] = 0; @@ -1859,9 +1835,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ReverseShape(Handle(GEOM_Object) //Compute the sub-shape value try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Shape driver failed to reverse shape"); return NULL; @@ -2670,9 +2644,7 @@ Handle(TColStd_HSequenceOfInteger) // Compute tolerance Standard_Real T, VertMax = -RealLast(); try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif for (TopExp_Explorer ExV (theShape, TopAbs_VERTEX); ExV.More(); ExV.Next()) { TopoDS_Vertex Vertex = TopoDS::Vertex(ExV.Current()); T = BRep_Tool::Tolerance(Vertex); diff --git a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx index 89c1d2b9c..8e04e15ec 100644 --- a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx @@ -129,9 +129,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateTwoPoints //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -182,9 +180,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateDXDYDZ //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -238,9 +234,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateTwoPointsCopy //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -293,9 +287,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateDXDYDZCopy //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -348,9 +340,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVector //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -401,9 +391,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVectorCopy //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -462,9 +450,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVectorDistance //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -525,9 +511,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate1D //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -590,9 +574,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate2D (Handle(GEOM_Obje //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -788,9 +770,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPlane //Compute the mirror try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -841,9 +821,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPlaneCopy //Compute the mirror try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -895,9 +873,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPoint //Compute the mirror try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -948,9 +924,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPointCopy //Compute the mirror try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -1002,9 +976,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorAxis //Compute the mirror try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -1055,9 +1027,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorAxisCopy //Compute the mirror try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -1107,9 +1077,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::OffsetShape //Compute the offset try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Offset driver failed"); return NULL; @@ -1161,9 +1129,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::OffsetShapeCopy //Compute the offset try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Offset driver failed"); return NULL; @@ -1215,9 +1181,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ProjectShapeCopy //Compute the Projection try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Projection driver failed"); return NULL; @@ -1281,9 +1245,7 @@ Standard_Real GEOMImpl_ITransformOperations::ProjectPointOnWire //Compute the Projection try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Projection driver failed"); return aResult; @@ -1345,9 +1307,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShape //Compute the scale try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Scale driver failed"); return NULL; @@ -1406,9 +1366,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShapeCopy //Compute the scale try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Scale driver failed"); return NULL; @@ -1477,9 +1435,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShapeAlongAxes (Handle(G //Compute the scale try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Scale driver failed"); return NULL; @@ -1542,9 +1498,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShape //Compute the Position try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Position driver failed"); return NULL; @@ -1601,9 +1555,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShapeCopy //Compute the position try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Position driver failed"); return NULL; @@ -1663,9 +1615,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionAlongPath //Compute the position try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Position driver failed"); return NULL; @@ -1726,9 +1676,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate (Handle(GEOM_Object) t //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1781,9 +1729,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateCopy (Handle(GEOM_Objec //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1837,9 +1783,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1898,9 +1842,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1962,9 +1904,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -2028,9 +1968,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -2091,9 +2029,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateThreePoints (Handle(GEO //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -2148,9 +2084,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateThreePointsCopy (Handle //Compute the translation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -2294,9 +2228,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TransformLikeOtherCopy // Compute the transformation try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Driver failed"); return NULL; diff --git a/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx b/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx index 0dbbbffb2..25bf5cdff 100644 --- a/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PipePathDriver.cxx @@ -50,9 +50,7 @@ #include #include -#if OCC_VERSION_LARGE > 0x06050300 #include -#endif #include #include @@ -145,15 +143,11 @@ Standard_Integer GEOMImpl_PipePathDriver::Execute (TFunction_Logbook& log) const if (aShape.IsNull() || aBase1.IsNull() || aBase2.IsNull()) Standard_NullObject::Raise("RestorePath aborted : null argument"); -#if OCC_VERSION_LARGE > 0x06050300 BRepOffsetAPI_MiddlePath aMPB (aShape, aBase1, aBase2); aMPB.Build(); if (aMPB.IsDone()) { aRes = aMPB.Shape(); } -#else - Standard_NullObject::Raise("RestorePath is not implemented in used OCCT version"); -#endif } else if (aType == PIPE_PATH_TWO_SEQS) { GEOMImpl_IPipePath aPI (aFunction); @@ -181,15 +175,11 @@ Standard_Integer GEOMImpl_PipePathDriver::Execute (TFunction_Logbook& log) const if (aShape.IsNull() || aBase1.IsNull() || aBase2.IsNull()) Standard_NullObject::Raise("RestorePath aborted : null argument"); -#if OCC_VERSION_LARGE > 0x06050300 BRepOffsetAPI_MiddlePath aMPB (aShape, aBase1, aBase2); aMPB.Build(); if (aMPB.IsDone()) { aRes = aMPB.Shape(); } -#else - Standard_NullObject::Raise("RestorePath is not implemented in used OCCT version"); -#endif } else { } diff --git a/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx b/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx index 80734dc8f..ef21d1764 100644 --- a/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx @@ -127,12 +127,8 @@ Standard_Integer GEOMImpl_PlaneDriver::Execute(TFunction_Logbook& log) const if (gp_Vec(aP1, aP2).IsParallel(gp_Vec(aP1, aP3), Precision::Angular())) Standard_ConstructionError::Raise("Plane creation aborted: points lay on one line"); GC_MakePlane aMakePlane (aP1, aP2, aP3); -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version aShape = BRepBuilderAPI_MakeFace(aMakePlane, -aSize, +aSize, -aSize, +aSize, Precision::Confusion()).Shape(); -#else - aShape = BRepBuilderAPI_MakeFace(aMakePlane, -aSize, +aSize, -aSize, +aSize).Shape(); -#endif } else if (aType == PLANE_FACE) { Handle(GEOM_Function) aRef = aPI.GetFace(); TopoDS_Shape aRefShape = aRef->GetValue(); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index 6cc902366..2e33cc222 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -95,12 +95,7 @@ #include #include - -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif // QT Includes #include diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx index e17d041d7..cd85f26b5 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx @@ -340,11 +340,7 @@ void GEOMToolsGUI_MarkerDlg::addTexture( int id, bool select ) const if ( id > 0 && myCustomTypeCombo->index( id ) == -1 ) { int tWidth, tHeight; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) texture = GeometryGUI::getTexture(getStudy(), id, tWidth, tHeight); -#else - Handle(Graphic3d_HArray1OfBytes) texture = GeometryGUI::getTexture(getStudy(), id, tWidth, tHeight); -#endif if ( !texture.IsNull() && texture->Length() == tWidth*tHeight/8 ) { QImage image( tWidth, tHeight, QImage::Format_Mono ); diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.cc b/src/GEOM_I/GEOM_IInsertOperations_i.cc index 3d8f79751..2bad79431 100644 --- a/src/GEOM_I/GEOM_IInsertOperations_i.cc +++ b/src/GEOM_I/GEOM_IInsertOperations_i.cc @@ -39,11 +39,7 @@ #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif //============================================================================= /*! @@ -306,18 +302,10 @@ CORBA::Long GEOM_IInsertOperations_i::AddTexture(CORBA::Long theWidth, CORBA::Lo { GetOperations()->SetNotDone(); -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTexture; -#else - Handle(TDataStd_HArray1OfByte) aTexture; -#endif if ( theTexture.length() > 0 ) { -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 aTexture = new TColStd_HArray1OfByte (1, theTexture.length()); -#else - aTexture = new TDataStd_HArray1OfByte (1, theTexture.length()); -#endif for ( int i = 0; i < theTexture.length(); i++ ) aTexture->SetValue( i+1, (Standard_Byte)theTexture[i] ); @@ -335,11 +323,7 @@ SALOMEDS::TMPFile* GEOM_IInsertOperations_i::GetTexture(CORBA::Long theID, CORBA::Long& theHeight) { int aWidth, aHeight; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTextureImpl = -#else - Handle(TDataStd_HArray1OfByte) aTextureImpl = -#endif GetOperations()->GetTexture(theID, aWidth, aHeight); theWidth = aWidth; theHeight = aHeight; diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx index ccce76eb6..9afe3b922 100644 --- a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx @@ -313,9 +313,7 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() if (anAngle > Precision::Angular()) { try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape S1, S2; if (GEOMBase::GetShape(myObj , S1, TopAbs_EDGE) && GEOMBase::GetShape(myObj2, S2, TopAbs_EDGE)) { diff --git a/src/STEPImport/STEPImport.cxx b/src/STEPImport/STEPImport.cxx index 0dc8d7057..f50d23b28 100644 --- a/src/STEPImport/STEPImport.cxx +++ b/src/STEPImport/STEPImport.cxx @@ -360,9 +360,7 @@ extern "C" Interface_Static::SetIVal("read.step.nonmanifold", 1); try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString()); if (status == IFSelect_RetDone) { TColStd_SequenceOfAsciiString anUnitLengthNames; diff --git a/src/ShHealOper/ShHealOper_FillHoles.cxx b/src/ShHealOper/ShHealOper_FillHoles.cxx index 8e8eb61c0..114326a8b 100644 --- a/src/ShHealOper/ShHealOper_FillHoles.cxx +++ b/src/ShHealOper/ShHealOper_FillHoles.cxx @@ -336,11 +336,7 @@ Standard_Boolean ShHealOper_FillHoles::addFace(const Handle(Geom_Surface)& theSu const Handle(TColStd_HArray1OfInteger)& theOrders, const Handle(TColStd_HArray1OfInteger)& theSenses) { -#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version BRepBuilderAPI_MakeFace aMakeFace (theSurf, Precision::Confusion()); -#else - BRepBuilderAPI_MakeFace aMakeFace (theSurf); -#endif TopoDS_Face aFace = aMakeFace.Face(); aFace.EmptyCopy(); From b9cd395cc3b809c23349b26b31940dcaccc93a21 Mon Sep 17 00:00:00 2001 From: Florian BRUNET Date: Mon, 11 Aug 2014 11:54:38 +0200 Subject: [PATCH 074/118] Update of the implementation of an option to create portion of cylinders in the cylinder primitive --- doc/salome/examples/primitives_ex02.py | 13 ++ doc/salome/gui/GEOM/images/cylinder1.png | Bin 21875 -> 22429 bytes doc/salome/gui/GEOM/images/cylinder2.png | Bin 18499 -> 18985 bytes doc/salome/gui/GEOM/images/cylinders.png | Bin 17865 -> 11806 bytes .../gui/GEOM/input/creating_cylinder.doc | 19 +- idl/GEOM_Gen.idl | 33 +++- idl/GEOM_Superv.idl | 10 +- resources/GEOMCatalog.xml.in | 74 ++++++- src/DlgRef/CMakeLists.txt | 2 +- src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui | 186 ++++++++++++++++++ src/GEOMImpl/GEOMImpl_CylinderDriver.cxx | 40 ++-- src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx | 119 ++++++++++- src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx | 8 +- src/GEOMImpl/GEOMImpl_ICylinder.hxx | 18 +- src/GEOMImpl/GEOMImpl_Types.hxx | 4 +- src/GEOM_I/GEOM_I3DPrimOperations_i.cc | 53 ++++- src/GEOM_I/GEOM_I3DPrimOperations_i.hh | 18 +- src/GEOM_I_Superv/GEOM_Superv_i.cc | 42 +++- src/GEOM_I_Superv/GEOM_Superv_i.hh | 10 +- src/GEOM_SWIG/GEOM_TestAll.py | 28 +-- src/GEOM_SWIG/geomBuilder.py | 124 ++++++++++-- src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 82 +++++--- 22 files changed, 758 insertions(+), 125 deletions(-) create mode 100644 src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui diff --git a/doc/salome/examples/primitives_ex02.py b/doc/salome/examples/primitives_ex02.py index d55d6510f..a0e73ff5f 100644 --- a/doc/salome/examples/primitives_ex02.py +++ b/doc/salome/examples/primitives_ex02.py @@ -6,6 +6,7 @@ import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) +import math gg = salome.ImportComponentGUI("GEOM") # create a vertex and a vector @@ -18,16 +19,28 @@ height = 40 radius1 = 15 cylinder1 = geompy.MakeCylinder(p1, v, radius1, height) +angle1 = 45.*math.pi / 180. +cylinder1a = geompy.MakeCylinderA(p1, v, radius1, height, angle1) +geompy.TranslateDXDYDZ(cylinder1a,80.,0.,0.) radius2 = 30 cylinder2 = geompy.MakeCylinderRH(radius2, height) +angle2 = 210.*math.pi / 180. +cylinder2a = geompy.MakeCylinderRHA(radius2, height, angle2) +geompy.TranslateDXDYDZ(cylinder2a,80.,0.,0.) # add objects in the study id_cylinder1 = geompy.addToStudy(cylinder1,"Cylinder1") id_cylinder2 = geompy.addToStudy(cylinder2,"Cylinder2") +id_cylinder1a = geompy.addToStudy(cylinder1a,"Cylinder1a") +id_cylinder2a = geompy.addToStudy(cylinder2a,"Cylinder2a") # display the cylinders gg.createAndDisplayGO(id_cylinder1) gg.setDisplayMode(id_cylinder1,1) gg.createAndDisplayGO(id_cylinder2) gg.setDisplayMode(id_cylinder2,1) +gg.createAndDisplayGO(id_cylinder1a) +gg.setDisplayMode(id_cylinder1a,1) +gg.createAndDisplayGO(id_cylinder2a) +gg.setDisplayMode(id_cylinder2a,1) diff --git a/doc/salome/gui/GEOM/images/cylinder1.png b/doc/salome/gui/GEOM/images/cylinder1.png index 696ea42341ad8da4be5a4fa537c7fc6d3a86c0ba..6dc21ce5146d7948c6ba3e7218ecc26b37d0d699 100755 GIT binary patch literal 22429 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 literal 21875 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 diff --git a/doc/salome/gui/GEOM/images/cylinder2.png b/doc/salome/gui/GEOM/images/cylinder2.png index 7522b2751381e9476fa7e5305a995ebaa24a779e..b9ed9cd82066f3c7a9aaf011042e65ab7802b86c 100755 GIT binary patch literal 18985 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 literal 18499 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 literal 17865 zcmch<2Q-{txGy{+BqAbu5RvH7MeicIsL^`}MliyRI$A>X5@is*k1iNSmx9DFY7oW{ zy%Rn9ef`fl_dDyJv+lj;`_B5-Vp%iZcfU{h?Pve?v!CaU)YVocyTxz|1Okz%t10P& zK-Z#yU-_HYfNwsGTxSLT5JDBz4Q}4NiJR5=4Sb}BDVxAvxH-VQUwYVs93gJ5_Iyw~ z4|{tE6zm4uChU*{fgXa?m7W^-WNzYpGhZ179PP}Mu06V&LLc^#fUU$`ilIQw!q)Zy zjZlHD#Zy6r>lBf}!ubT7?(7gftY$71gBbGb@&`k;wGLS-q8W;ppR8k}a-DRO<00rMo7zBYrBmUD%i-B?OWk*~2 zPq@j?bv*bxVRdxb5pZO-Q%87&FH(XW_gA-HguPG=0ET2F!L#UGE?)jcZ_Dp8x9_Fl z<NhtUfDLAz={=%3ylO17vvhD{>Kw~_|0EKZE%x=xmO^99UI%gUhPQNZ@w(V&Y1M`fth<^I6= z*tbh~;SD0tAG<;mbCKwU;?*|c(L}(Zu-qPFc)$F`XKDFMYn}TCfXQXl zRvLVEAI+?J`LXOa5^no%G`A$LXscfC=h0jqoyOn$w~PJ`;Zt?2J#i)R*Fd^-=l|jo z$opQg`(kU)K%o8bPzZ$w1E~Ave{f;5=D z_|JcIx_ML;7X>@E-z)XCFJA;t0+kLS>j
    QUH$QT*u5#W(%4F-^+iXvK3z3I6&p+cJ4 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 diff --git a/doc/salome/gui/GEOM/input/creating_cylinder.doc b/doc/salome/gui/GEOM/input/creating_cylinder.doc index 74434e49b..49f19bf64 100644 --- a/doc/salome/gui/GEOM/input/creating_cylinder.doc +++ b/doc/salome/gui/GEOM/input/creating_cylinder.doc @@ -11,8 +11,12 @@ Entity - > Primitives - > Cylinder \n Firstly, you can define a \b Cylinder by the Base Point (the central point of the cylinder base), the \b Vector (the axis of the cylinder), and its dimensions: the Radius and the Height. -\n Angle checkbox and field allow defining an angle to build a portion of cylinder. -\n TUI Command: geompy.MakeCylinder(Point, Axis, Radius, Height, Angle=2*pi) +\n TUI Command: geompy.MakeCylinder(Point, Axis, Radius, Height) +\n Arguments: Name + 1 vertex + 1 vector + 2 values +(Dimensions: radius and height). + +\n \b Angle checkbox and field allow defining an angle to create a portion of cylinder. +\n TUI Command: geompy.MakeCylinderA(Point, Axis, Radius, Height, Angle) \n Arguments: Name + 1 vertex + 1 vector + 3 values (Dimensions: radius, height and angle). @@ -21,9 +25,14 @@ and its dimensions: the Radius and the Height. \n Secondly, you can define a \b Cylinder by the given radius and the height at the origin of coordinate system. The axis of the cylinder will be collinear to the OZ axis of the coordinate system. -Angle checkbox and field allow defining an angle to build a portion of cylinder. -\n TUI Command: geompy.MakeCylinderRH(Radius, Height, Angle=2*pi) -\n Arguments: Name + 2 values (Dimensions at origin: radius, height, angle). +\n TUI Command: geompy.MakeCylinderRH(Radius, Height) +\n Arguments: Name + 2 values (Dimensions at origin: radius and +height). + +\n \b Angle checkbox and field allow defining an angle to create a portion of cylinder at the origin of coordinate system. +\n TUI Command: geompy.MakeCylinderRHA(Radius, Height, Angle) +\n Arguments: Name + 3 values +(Dimensions at origin : radius, height and angle). \image html cylinder2.png diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 94fbc0acd..c1e4b2c5c 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -1471,7 +1471,18 @@ module GEOM GEOM_Object MakeDiskR (in double theR, in short theOrientation); /*! - * \brief Create a cylinder with given radius, height and angle (portion of cylinder) at + * \brief Create a cylinder with given radius and height at + * the origin of coordinate system. + * + * Axis of the cylinder will be collinear to the OZ axis of the coordinate system. + * \param theR Cylinder radius. + * \param theH Cylinder height. + * \return New GEOM_Object, containing the created cylinder. + */ + GEOM_Object MakeCylinderRH (in double theR, in double theH); + + /*! + * \brief Create a portion of cylinder with given radius, height and angle at * the origin of coordinate system. * * Axis of the cylinder will be collinear to the OZ axis of the coordinate system. @@ -1480,10 +1491,22 @@ module GEOM * \param theA Cylinder angle. * \return New GEOM_Object, containing the created cylinder. */ - GEOM_Object MakeCylinderRH (in double theR, in double theH, in double theA); + GEOM_Object MakeCylinderRHA (in double theR, in double theH, in double theA); /*! - * \brief Create a cylinder with given base point, axis, radius, height and angle (portion of cylinder). + * \brief Create a cylinder with given base point, axis, radius, height and angle. + * \param thePnt Central point of cylinder base. + * \param theAxis Cylinder axis. + * \param theR Cylinder radius. + * \param theH Cylinder height. + * \return New GEOM_Object, containing the created cylinder. + */ + GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt, + in GEOM_Object theAxis, + in double theR, + in double theH); + /*! + * \brief Create a portion of cylinder with given base point, axis, radius, height and angle. * \param thePnt Central point of cylinder base. * \param theAxis Cylinder axis. * \param theR Cylinder radius. @@ -1491,7 +1514,7 @@ module GEOM * \param theA Cylinder angle. * \return New GEOM_Object, containing the created cylinder. */ - GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt, + GEOM_Object MakeCylinderPntVecRHA (in GEOM_Object thePnt, in GEOM_Object theAxis, in double theR, in double theH, diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl index c56f0ca57..3c5972437 100644 --- a/idl/GEOM_Superv.idl +++ b/idl/GEOM_Superv.idl @@ -158,9 +158,15 @@ module GEOM GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt, in GEOM_Object theAxis, in double theRadius, - in double theHeight, - in double theAngle) ; + in double theHeight) ; GEOM_Object MakeCylinderRH (in double theR, + in double theH) ; + GEOM_Object MakeCylinderPntVecRHA (in GEOM_Object thePnt, + in GEOM_Object theAxis, + in double theRadius, + in double theHeight, + in double theAngle) ; + GEOM_Object MakeCylinderRHA (in double theR, in double theH, in double theA) ; GEOM_Object MakeSphere (in double theX, diff --git a/resources/GEOMCatalog.xml.in b/resources/GEOMCatalog.xml.in index 43438b5bd..db3ec4288 100644 --- a/resources/GEOMCatalog.xml.in +++ b/resources/GEOMCatalog.xml.in @@ -1335,11 +1335,6 @@ double unknown - - theAngle - double - unknown - @@ -1367,6 +1362,43 @@ double unknown + + + + return + GEOM_Object + unknown + + + + + + MakeCylinderPntVecRHA + + + unknown + 0 + + + thePnt + GEOM_Object + unknown + + + theAxis + GEOM_Object + unknown + + + theRadius + double + unknown + + + theHeight + double + unknown + theAngle double @@ -1382,6 +1414,38 @@ + + MakeCylinderRHA + + + unknown + 0 + + + theR + double + unknown + + + theH + double + unknown + + + theA + double + unknown + + + + + return + GEOM_Object + unknown + + + + MakeSphere diff --git a/src/DlgRef/CMakeLists.txt b/src/DlgRef/CMakeLists.txt index 632b2a328..61e6a2dfa 100755 --- a/src/DlgRef/CMakeLists.txt +++ b/src/DlgRef/CMakeLists.txt @@ -75,9 +75,9 @@ SET(_uic_files DlgRef_2Sel2Spin2Push_QTD.ui DlgRef_2Sel2Spin3Check_QTD.ui DlgRef_2Sel2Spin_QTD.ui - DlgRef_2Sel3Spin1Check_QTD.ui DlgRef_2Sel3Spin2Rb_QTD.ui DlgRef_2Sel3Spin_QTD.ui + DlgRef_2Sel3Spin1Check_QTD.ui DlgRef_2SelExt_QTD.ui DlgRef_2Sel_QTD.ui DlgRef_2Spin_QTD.ui diff --git a/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui new file mode 100644 index 000000000..d652b9a90 --- /dev/null +++ b/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui @@ -0,0 +1,186 @@ + + + DlgRef_2Sel3Spin1Check_QTD + + + + 0 + 0 + 323 + 223 + + + + + + + + 0 + + + 6 + + + + + + + + + 9 + + + 6 + + + + + + 0 + 0 + + + + TL4 + + + false + + + + + + + + 0 + 0 + + + + TL3 + + + false + + + + + + + + 0 + 0 + + + + TL1 + + + false + + + + + + + + + + + 0 + 0 + + + + TL2 + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + TL5 + + + false + + + + + + + CB + + + + + + + + + + qPixmapFromMimeSource + + + SalomeApp_DoubleSpinBox + QDoubleSpinBox +
    SalomeApp_DoubleSpinBox.h
    +
    +
    + + PushButton1 + LineEdit1 + PushButton2 + LineEdit2 + SpinBox_DX + + + +
    diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx index 521d03678..42dd86b7c 100644 --- a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx @@ -75,14 +75,12 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const gp_Pnt aP; gp_Vec aV; - - TopoDS_Shape aShape; - if (aType == CYLINDER_R_H) { + if (aType == CYLINDER_R_H || aType == CYLINDER_R_H_A) { aP = gp::Origin(); aV = gp::DZ(); } - else if (aType == CYLINDER_PNT_VEC_R_H) { + else if (aType == CYLINDER_PNT_VEC_R_H || aType == CYLINDER_PNT_VEC_R_H_A) { Handle(GEOM_Function) aRefPoint = aCI.GetPoint(); Handle(GEOM_Function) aRefVector = aCI.GetVector(); TopoDS_Shape aShapePnt = aRefPoint->GetValue(); @@ -111,21 +109,41 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const if (aCI.GetH() < 0.0) aV.Reverse(); gp_Ax2 anAxes (aP, aV); - aShape = BRepPrimAPI_MakeCylinder(anAxes, aCI.GetR(), Abs(aCI.GetH())).Shape(); - if(aCI.GetA() < 360. && aCI.GetA()> 0.){ - BRepPrimAPI_MakeCylinder MC(anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()*M_PI/180.); + bool switchAngleVar; + if(aType == CYLINDER_R_H || aType == CYLINDER_PNT_VEC_R_H) switchAngleVar = false; + else if(aType == CYLINDER_R_H_A || aType == CYLINDER_PNT_VEC_R_H_A) switchAngleVar = true; + else return 0; + TopoDS_Shape aShape; + + switch (switchAngleVar) { + case false: + { + BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH())); MC.Build(); if (!MC.IsDone()) { StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters"); } - aShape = MC.Shape(); - } + aShape = MC.Shape(); + break; + } + case true: + { + BRepPrimAPI_MakeCylinder MCA (anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()); + MCA.Build(); + if (!MCA.IsDone()) { + StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters. Failure."); + return 0; + } + aShape = MCA.Shape(); + break; + } + default: + return 0; + } if (aShape.IsNull()) return 0; - aFunction->SetValue(aShape); log.SetTouched(Label()); - return 1; } diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx index f4139be06..f3f33f969 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx @@ -488,7 +488,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskR (double theR, int theO * MakeCylinderRH */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, double theH, double theA) +Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, double theH) { SetErrorCode(KO); @@ -504,6 +504,54 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou GEOMImpl_ICylinder aCI (aFunction); + aCI.SetR(theR); + aCI.SetH(theH); + + //Compute the Cylinder value + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Cylinder driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << aCylinder + << " = geompy.MakeCylinderRH(" << theR << ", " << theH << ")"; + + SetErrorCode(OK); + return aCylinder; +} + +//============================================================================= +/*! + * MakeCylinderRHA + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRHA (double theR, double theH, double theA) +{ + SetErrorCode(KO); + + //Add a new Cylinder object + Handle(GEOM_Object) aCylinder = GetEngine()->AddObject(GetDocID(), GEOM_CYLINDER); + + //Add a new Cylinder function with R and H parameters + Handle(GEOM_Function) aFunction = aCylinder->AddFunction(GEOMImpl_CylinderDriver::GetID(), CYLINDER_R_H_A); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_CylinderDriver::GetID()) return NULL; + + GEOMImpl_ICylinder aCI (aFunction); + aCI.SetR(theR); aCI.SetH(theH); aCI.SetA(theA); @@ -526,19 +574,78 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou //Make a Python command GEOM::TPythonDump(aFunction) << aCylinder - << " = geompy.MakeCylinderRH(" << theR << ", " << theH << ", " << theA << ")"; + << " = geompy.MakeCylinderRHA(" << theR << ", " << theH << ", " << theA*180./M_PI << "*math.pi/180.)"; SetErrorCode(OK); return aCylinder; } - //============================================================================= /*! * MakeCylinderPntVecRH */ //============================================================================= Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt, + Handle(GEOM_Object) theVec, + double theR, double theH) +{ + SetErrorCode(KO); + + if (thePnt.IsNull() || theVec.IsNull()) return NULL; + + //Add a new Cylinder object + Handle(GEOM_Object) aCylinder = GetEngine()->AddObject(GetDocID(), GEOM_CYLINDER); + + //Add a new Cylinder function for creation a cylinder relatively to point and vector + Handle(GEOM_Function) aFunction = + aCylinder->AddFunction(GEOMImpl_CylinderDriver::GetID(), CYLINDER_PNT_VEC_R_H); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_CylinderDriver::GetID()) return NULL; + + GEOMImpl_ICylinder aCI (aFunction); + + Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction(); + Handle(GEOM_Function) aRefVec = theVec->GetLastFunction(); + + if (aRefPnt.IsNull() || aRefVec.IsNull()) return NULL; + + aCI.SetPoint(aRefPnt); + aCI.SetVector(aRefVec); + aCI.SetR(theR); + aCI.SetH(theH); + + //Compute the Cylinder value + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Cylinder driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << aCylinder << " = geompy.MakeCylinder(" + << thePnt << ", " << theVec << ", " << theR << ", " << theH << ")"; + + SetErrorCode(OK); + return aCylinder; +} + +//============================================================================= +/*! + * MakeCylinderPntVecRHA + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRHA (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, double theR, double theH, double theA) { @@ -551,7 +658,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO //Add a new Cylinder function for creation a cylinder relatively to point and vector Handle(GEOM_Function) aFunction = - aCylinder->AddFunction(GEOMImpl_CylinderDriver::GetID(), CYLINDER_PNT_VEC_R_H); + aCylinder->AddFunction(GEOMImpl_CylinderDriver::GetID(), CYLINDER_PNT_VEC_R_H_A); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly @@ -587,8 +694,8 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO } //Make a Python command - GEOM::TPythonDump(aFunction) << aCylinder << " = geompy.MakeCylinder(" - << thePnt << ", " << theVec << ", " << theR << ", " << theH << ", " << theA << ")"; + GEOM::TPythonDump(aFunction) << aCylinder << " = geompy.MakeCylinderA(" + << thePnt << ", " << theVec << ", " << theR << ", " << theH << ", " << theA*180./M_PI << "*math.pi/180.)"; SetErrorCode(OK); return aCylinder; diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx index d0ae75588..84a643afc 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx @@ -48,10 +48,14 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations { Handle(GEOM_Object) theVec, double theR); Standard_EXPORT Handle(GEOM_Object) MakeDiskR (double theR, int theOrientation); - Standard_EXPORT Handle(GEOM_Object) MakeCylinderRH (double theR, double theH, double theA); + Standard_EXPORT Handle(GEOM_Object) MakeCylinderRH (double theR, double theH); Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, - double theR, double theH, double theA); + double theR, double theH); + Standard_EXPORT Handle(GEOM_Object) MakeCylinderRHA (double theR, double theH, double theA); + Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRHA (Handle(GEOM_Object) thePnt, + Handle(GEOM_Object) theVec, + double theR, double theH, double theA); Standard_EXPORT Handle(GEOM_Object) MakeConeR1R2H (double theR1, double theR2, double theH); Standard_EXPORT Handle(GEOM_Object) MakeConePntVecR1R2H (Handle(GEOM_Object) thePnt, diff --git a/src/GEOMImpl/GEOMImpl_ICylinder.hxx b/src/GEOMImpl/GEOMImpl_ICylinder.hxx index 0955df29c..c092c950e 100644 --- a/src/GEOMImpl/GEOMImpl_ICylinder.hxx +++ b/src/GEOMImpl/GEOMImpl_ICylinder.hxx @@ -24,14 +24,12 @@ // #include "GEOM_Function.hxx" -#define CYL_ARG_PNT 1 -#define CYL_ARG_VEC 2 -#define CYL_ARG_R 3 -#define CYL_ARG_H 4 +#define CYL_ARG_R 1 +#define CYL_ARG_H 2 +#define CYL_ARG_PNT 3 +#define CYL_ARG_VEC 4 #define CYL_ARG_A 5 - - class GEOMImpl_ICylinder { public: @@ -45,10 +43,6 @@ class GEOMImpl_ICylinder void SetH(double theH) { _func->SetReal(CYL_ARG_H, theH); } double GetH() { return _func->GetReal(CYL_ARG_H); } - - void SetA(double theA) { _func->SetReal(CYL_ARG_A, theA); } - - double GetA() { return _func->GetReal(CYL_ARG_A); } void SetPoint(Handle(GEOM_Function) theRefPoint) { _func->SetReference(CYL_ARG_PNT, theRefPoint); } @@ -57,6 +51,10 @@ class GEOMImpl_ICylinder void SetVector(Handle(GEOM_Function) theRefVector) { _func->SetReference(CYL_ARG_VEC, theRefVector); } Handle(GEOM_Function) GetVector() { return _func->GetReference(CYL_ARG_VEC); } + + void SetA(double theA) { _func->SetReal(CYL_ARG_A, theA); } + + double GetA() { return _func->GetReal(CYL_ARG_A); } private: diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx index 57093b4e6..b57080a9c 100755 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -206,7 +206,9 @@ #define DISK_R 3 #define CYLINDER_R_H 1 -#define CYLINDER_PNT_VEC_R_H 2 +#define CYLINDER_PNT_VEC_R_H 2 +#define CYLINDER_R_H_A 3 +#define CYLINDER_PNT_VEC_R_H_A 4 #define CONE_R1_R2_H 1 #define CONE_PNT_VEC_R1_R2_H 2 diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc index 68dc79279..5f01b7c91 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc @@ -246,6 +246,27 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR, */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR, + CORBA::Double theH) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Create the Cylinder + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeCylinderRHA + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRHA (CORBA::Double theR, CORBA::Double theH, CORBA::Double theA) { @@ -255,7 +276,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th GetOperations()->SetNotDone(); //Create the Cylinder - Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH, theA); + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRHA(theR, theH, theA); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -268,6 +289,34 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH + (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, + CORBA::Double theR, CORBA::Double theH) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference points + Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt); + Handle(GEOM_Object) aVec = GetObjectImpl(theVec); + + if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); + + //Create the Cylinder + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeCylinderPntVecRHA + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, CORBA::Double theR, CORBA::Double theH, CORBA::Double theA) { @@ -283,7 +332,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); //Create the Cylinder - Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH, theA); + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRHA(aPnt, aVec, theR, theH, theA); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh index 63d5fa4be..f78e1c089 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh @@ -69,15 +69,23 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i : CORBA::Short theOrientation); GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA); - + CORBA::Double theH); + GEOM::GEOM_Object_ptr MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, + GEOM::GEOM_Object_ptr theVec, + CORBA::Double theR, + CORBA::Double theH); + + GEOM::GEOM_Object_ptr MakeCylinderRHA (CORBA::Double theR, + CORBA::Double theH, + CORBA::Double theA); + + GEOM::GEOM_Object_ptr MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, CORBA::Double theR, CORBA::Double theH, - CORBA::Double theA); - + CORBA::Double theA); + GEOM::GEOM_Object_ptr MakeConeR1R2H (CORBA::Double theR1, CORBA::Double theR2, CORBA::Double theH); diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index d70656378..801ea5e70 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -1049,13 +1049,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeDiskR (CORBA::Double theR, GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theAxis, CORBA::Double theRadius, - CORBA::Double theHeight, - CORBA::Double theAngle) + CORBA::Double theHeight) { beginService( " GEOM_Superv_i::MakeCylinderPntVecRH" ); MESSAGE("GEOM_Superv_i::MakeCylinderPntVecRH"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight, theAngle); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight); endService( " GEOM_Superv_i::MakeCylinderPntVecRH" ); return anObj; } @@ -1064,17 +1063,48 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr // MakeCylinderRH: //============================================================================= GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRH (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA) + CORBA::Double theH) { beginService( " GEOM_Superv_i::MakeCylinderRH" ); MESSAGE("GEOM_Superv_i::MakeCylinderRH"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRH(theR, theH, theA); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRH(theR, theH); endService( " GEOM_Superv_i::MakeCylinderRH" ); return anObj; } +//============================================================================= +// MakeCylinderPntVecRHA: +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, + GEOM::GEOM_Object_ptr theAxis, + CORBA::Double theRadius, + CORBA::Double theHeight, + CORBA::Double theAngle) +{ + beginService( " GEOM_Superv_i::MakeCylinderPntVecRHA" ); + MESSAGE("GEOM_Superv_i::MakeCylinderPntVecRHA"); + get3DPrimOp(); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRHA(thePnt, theAxis, theRadius, theHeight, theAngle); + endService( " GEOM_Superv_i::MakeCylinderPntVecRHA" ); + return anObj; +} + +//============================================================================= +// MakeCylinderRHA: +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRHA (CORBA::Double theR, + CORBA::Double theH, + CORBA::Double theA) +{ + beginService( " GEOM_Superv_i::MakeCylinderRHA" ); + MESSAGE("GEOM_Superv_i::MakeCylinderRHA"); + get3DPrimOp(); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRHA(theR, theH, theA); + endService( " GEOM_Superv_i::MakeCylinderRHA" ); + return anObj; +} + //============================================================================= // MakeSphere: //============================================================================= diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh index 627be4797..4d827589e 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.hh +++ b/src/GEOM_I_Superv/GEOM_Superv_i.hh @@ -241,13 +241,19 @@ public: GEOM::GEOM_Object_ptr MakeDiskR (CORBA::Double theR, CORBA::Short theOrientation); GEOM::GEOM_Object_ptr MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, + GEOM::GEOM_Object_ptr theAxis, + CORBA::Double theRadius, + CORBA::Double theHeight); + GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, + CORBA::Double theH); + GEOM::GEOM_Object_ptr MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theAxis, CORBA::Double theRadius, CORBA::Double theHeight, CORBA::Double theAngle); - GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, + GEOM::GEOM_Object_ptr MakeCylinderRHA (CORBA::Double theR, CORBA::Double theH, - CORBA::Double theA); + CORBA::Double theA); GEOM::GEOM_Object_ptr MakeSphere (CORBA::Double theX, CORBA::Double theY, CORBA::Double theZ, diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py index 28635865c..62eec35c8 100644 --- a/src/GEOM_SWIG/GEOM_TestAll.py +++ b/src/GEOM_SWIG/GEOM_TestAll.py @@ -147,18 +147,20 @@ def TestAll (geompy, math): tan_on_face = geompy.MakeTangentPlaneOnFace(tan_extrusion, 0.7, 0.5, 150) #Create base geometry 3D - Box = geompy.MakeBoxTwoPnt(p0, p200) #(2 GEOM_Object)->GEOM_Object - Box1 = geompy.MakeBoxDXDYDZ(10, 20, 30) #(3 Doubles)->GEOM_Object - Box2 = geompy.MakeBox(10,20,30, 15,25,35) #(6 Doubles)->GEOM_Object - Cylinder = geompy.MakeCylinder(p0, vz, radius1, height) #(2 GEOM_Object, 2 Doubles)->GEOM_Object - Cyl1 = geompy.MakeCylinderRH(radius2, height) #(2 Doubles)->GEOM_Object - Sphere = geompy.MakeSpherePntR(p0, radius1) #(GEOM_Object, Double)->GEOM_Object - Sphere1 = geompy.MakeSphereR(radius) #(Double)->GEOM_Object - Sphere2 = geompy.MakeSphere(50, 70, 30, radius) #(4 Doubles)->GEOM_Object - Cone = geompy.MakeCone(p0, vz, radius2, radius, height) #(2 GEOM_Object, 3 Doubles)->GEOM_Object - Cone1 = geompy.MakeConeR1R2H(radius1, radius, height) #(3 Doubles)->GEOM_Object - Torus = geompy.MakeTorus(p0, vz, radius2, radius) #(2 GEOM_Object, 2 Doubles)->GEOM_Object - Torus1 = geompy.MakeTorusRR(radius2, radius1) #(2 Doubles)->GEOM_Object + Box = geompy.MakeBoxTwoPnt(p0, p200) #(2 GEOM_Object)->GEOM_Object + Box1 = geompy.MakeBoxDXDYDZ(10, 20, 30) #(3 Doubles)->GEOM_Object + Box2 = geompy.MakeBox(10,20,30, 15,25,35) #(6 Doubles)->GEOM_Object + Cylinder = geompy.MakeCylinder(p0, vz, radius1, height) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Cyl1 = geompy.MakeCylinderRH(radius2, height) #(2 Doubles)->GEOM_Object + Cylinder1= geompy.MakeCylinderA(p0, vz, radius1, height,angle1) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Cyl2 = geompy.MakeCylinderRHA(radius2, height,angle2) #(2 Doubles)->GEOM_Object + Sphere = geompy.MakeSpherePntR(p0, radius1) #(GEOM_Object, Double)->GEOM_Object + Sphere1 = geompy.MakeSphereR(radius) #(Double)->GEOM_Object + Sphere2 = geompy.MakeSphere(50, 70, 30, radius) #(4 Doubles)->GEOM_Object + Cone = geompy.MakeCone(p0, vz, radius2, radius, height) #(2 GEOM_Object, 3 Doubles)->GEOM_Object + Cone1 = geompy.MakeConeR1R2H(radius1, radius, height) #(3 Doubles)->GEOM_Object + Torus = geompy.MakeTorus(p0, vz, radius2, radius) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Torus1 = geompy.MakeTorusRR(radius2, radius1) #(2 Doubles)->GEOM_Object #Boolean (Common, Cut, Fuse, Section) Common = geompy.MakeBoolean(Box, Sphere, 1) #(2 GEOM_Object, Short)->GEOM_Object @@ -372,6 +374,8 @@ def TestAll (geompy, math): id_Box2 = geompy.addToStudy(Box2, "Box (10,20,30)-(15,25,35)") id_Cylinder = geompy.addToStudy(Cylinder, "Cylinder") id_Cyl1 = geompy.addToStudy(Cyl1, "Cylinder RH") + id_Cylinder1= geompy.addToStudy(Cylinder1,"CylinderA") + id_Cyl2 = geompy.addToStudy(Cyl2, "Cylinder RHA") id_Sphere = geompy.addToStudy(Sphere, "Sphere Pnt R") id_Sphere1 = geompy.addToStudy(Sphere1, "Sphere R") id_Sphere2 = geompy.addToStudy(Sphere2, "Sphere") diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 3f6c012d8..c64bd6f40 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -2969,12 +2969,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "disk") return anObj - ## Create a cylinder with given base point, axis, radius, height and angle (for a portion of cylinder). + ## Create a cylinder with given base point, axis, radius and height. # @param thePnt Central point of cylinder base. # @param theAxis Cylinder axis. # @param theR Cylinder radius. # @param theH Cylinder height. - # @param theA Cylinder angle in radian. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -2983,16 +2982,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_creation_cylinder "Example" @ManageTransactions("PrimOp") - def MakeCylinder(self, thePnt, theAxis, theR, theH, theA=2*math.pi, theName=None): + def MakeCylinder(self, thePnt, theAxis, theR, theH, theName=None): """ - Create a cylinder with given base point, axis, radius, height and angle (for a portion of cylinder). + Create a cylinder with given base point, axis, radius and height. Parameters: thePnt Central point of cylinder base. theAxis Cylinder axis. theR Cylinder radius. theH Cylinder height. - theA Cylinder angle in radian. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -3001,20 +2999,19 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py - theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) - anObj = self.PrimOp.MakeCylinderPntVecRH(thePnt, theAxis, theR, theH, theA) - + theR,theH,Parameters = ParseParameters(theR, theH) + anObj = self.PrimOp.MakeCylinderPntVecRH(thePnt, theAxis, theR, theH) RaiseIfFailed("MakeCylinderPntVecRH", self.PrimOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "cylinder") return anObj - - ## Create a cylinder with given radius, height and angle (for a portion of cylinder) at - # the origin of coordinate system. Axis of the cylinder - # will be collinear to the OZ axis of the coordinate system. + + ## Create a portion of cylinder with given base point, axis, radius, height and angle. + # @param thePnt Central point of cylinder base. + # @param theAxis Cylinder axis. # @param theR Cylinder radius. # @param theH Cylinder height. - # @param theA Cylinder angle in radian. + # @param theA Cylinder angle in radians. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -3023,16 +3020,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_creation_cylinder "Example" @ManageTransactions("PrimOp") - def MakeCylinderRH(self, theR, theH, theA=2*math.pi, theName=None): + def MakeCylinderA(self, thePnt, theAxis, theR, theH, theA, theName=None): """ - Create a cylinder with given radius, height and angle (for a portion of cylinder)at - the origin of coordinate system. Axis of the cylinder - will be collinear to the OZ axis of the coordinate system. + Create a a portion of cylinder with given base point, axis, radius, height and angle. Parameters: + thePnt Central point of cylinder base. + theAxis Cylinder axis. theR Cylinder radius. theH Cylinder height. - theA Cylinder angle in radian. + theA Cylinder angle in radians. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -3041,13 +3038,98 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py + flag = False + if isinstance(theA,str): + flag = True theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) - anObj = self.PrimOp.MakeCylinderRH(theR, theH, theA) - + if flag: + theA = theA*math.pi/180. + anObj = self.PrimOp.MakeCylinderPntVecRHA(thePnt, theAxis, theR, theH, theA) + RaiseIfFailed("MakeCylinderPntVecRHA", self.PrimOp) + anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "cylinder") + return anObj + + ## Create a cylinder with given radius and height at + # the origin of coordinate system. Axis of the cylinder + # will be collinear to the OZ axis of the coordinate system. + # @param theR Cylinder radius. + # @param theH Cylinder height. + # @param theName Object name; when specified, this parameter is used + # for result publication in the study. Otherwise, if automatic + # publication is switched on, default value is used for result name. + # + # @return New GEOM.GEOM_Object, containing the created cylinder. + # + # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") + def MakeCylinderRH(self, theR, theH, theName=None): + """ + Create a cylinder with given radius and height at + the origin of coordinate system. Axis of the cylinder + will be collinear to the OZ axis of the coordinate system. + + Parameters: + theR Cylinder radius. + theH Cylinder height. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the created cylinder. + """ + # Example: see GEOM_TestAll.py + theR,theH,Parameters = ParseParameters(theR, theH) + anObj = self.PrimOp.MakeCylinderRH(theR, theH) RaiseIfFailed("MakeCylinderRH", self.PrimOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "cylinder") return anObj + + ## Create a portion of cylinder with given radius, height and angle at + # the origin of coordinate system. Axis of the cylinder + # will be collinear to the OZ axis of the coordinate system. + # @param theR Cylinder radius. + # @param theH Cylinder height. + # @param theA Cylinder angle in radians. + # @param theName Object name; when specified, this parameter is used + # for result publication in the study. Otherwise, if automatic + # publication is switched on, default value is used for result name. + # + # @return New GEOM.GEOM_Object, containing the created cylinder. + # + # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") + def MakeCylinderRHA(self, theR, theH, theA, theName=None): + """ + Create a portion of cylinder with given radius, height and angle at + the origin of coordinate system. Axis of the cylinder + will be collinear to the OZ axis of the coordinate system. + + Parameters: + theR Cylinder radius. + theH Cylinder height. + theA Cylinder angle in radians. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the created cylinder. + """ + # Example: see GEOM_TestAll.py + flag = False + if isinstance(theA,str): + flag = True + theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) + if flag: + theA = theA*math.pi/180. + anObj = self.PrimOp.MakeCylinderRHA(theR, theH, theA) + RaiseIfFailed("MakeCylinderRHA", self.PrimOp) + anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "cylinder") + return anObj ## Create a sphere with given center and radius. # @param thePnt Sphere center. @@ -7831,7 +7913,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## Rotate the given object around the given axis - # on the given angle, creating its copy before the rotatation. + # on the given angle, creating its copy before the rotation. # @param theObject The object to be rotated. # @param theAxis Rotation axis. # @param theAngle Rotation angle in radians. diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx index e12b35a35..9f9ad7a6c 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx @@ -89,7 +89,7 @@ PrimitiveGUI_CylinderDlg::PrimitiveGUI_CylinderDlg (GeometryGUI* theGeometryGUI, GroupDimensions->TextLabel3->setText(tr("GEOM_ANGLE")); GroupDimensions->checkBox->setText(tr("")); GroupDimensions->SpinBox_DZ->setDisabled(true); - + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); layout->setMargin(0); layout->setSpacing(6); layout->addWidget(GroupPoints); @@ -121,13 +121,14 @@ void PrimitiveGUI_CylinderDlg::Init() double step = resMgr->doubleValue("Geometry", "SettingsGeomStep", 100); // min, max, step and decimals for spin boxes & initial values + double SpecificStep = 5; initSpinBox(GroupPoints->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupPoints->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); - initSpinBox(GroupPoints->SpinBox_DZ, 0.00001, 360., step, "length_precision" ); + initSpinBox(GroupPoints->SpinBox_DZ, 0.00001, 359.99999, SpecificStep, "angle_precision" ); + initSpinBox(GroupDimensions->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupDimensions->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); - initSpinBox(GroupDimensions->SpinBox_DZ, 0.00001, 360., step, "length_precision" ); - + initSpinBox(GroupDimensions->SpinBox_DZ, 0.00001, 359.99999, SpecificStep, "angle_precision" ); // init variables myEditCurrentArgument = GroupPoints->LineEdit1; @@ -139,7 +140,7 @@ void PrimitiveGUI_CylinderDlg::Init() myPoint.nullify(); myDir.nullify(); - double aRadius(100.0), aHeight(300.0), aAngle(360.); + double aRadius(100.0), aHeight(300.0), aAngle(270.); GroupPoints->SpinBox_DX->setValue(aRadius); GroupPoints->SpinBox_DY->setValue(aHeight); GroupPoints->SpinBox_DZ->setValue(aAngle); @@ -167,7 +168,7 @@ void PrimitiveGUI_CylinderDlg::Init() connect(GroupPoints->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); connect(GroupDimensions->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); - + initName(tr("GEOM_CYLINDER")); setConstructorId(1); // simplest constructor @@ -182,10 +183,8 @@ void PrimitiveGUI_CylinderDlg::SetDoubleSpinBoxStep (double step) { GroupPoints->SpinBox_DX->setSingleStep(step); GroupPoints->SpinBox_DY->setSingleStep(step); - GroupPoints->SpinBox_DZ->setSingleStep(step); GroupDimensions->SpinBox_DX->setSingleStep(step); GroupDimensions->SpinBox_DY->setSingleStep(step); - GroupDimensions->SpinBox_DZ->setSingleStep(step); } //================================================================================= @@ -418,6 +417,7 @@ bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) { bool res = false; bool BAngle = false; + GEOM::GEOM_Object_var anObj; GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); @@ -426,32 +426,56 @@ bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) case 0: BAngle = GroupPoints->checkBox->isChecked(); if ( myPoint && myDir ) { - if(!BAngle) anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight(), 360.); - else anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight(), getAngle()); - if (!anObj->_is_nil() && !IsPreview()) - { - QStringList aParameters; - aParameters << GroupPoints->SpinBox_DX->text(); - aParameters << GroupPoints->SpinBox_DY->text(); - aParameters << GroupPoints->SpinBox_DZ->text(); - anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + if(!BAngle){ + anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight()); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupPoints->SpinBox_DX->text(); + aParameters << GroupPoints->SpinBox_DY->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; + } + else if(BAngle){ + anObj = anOper->MakeCylinderPntVecRHA(myPoint.get(), myDir.get(), getRadius(), getHeight(), getAngle()*M_PI/180.); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupPoints->SpinBox_DX->text(); + aParameters << GroupPoints->SpinBox_DY->text(); + aParameters << GroupPoints->SpinBox_DZ->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; } - res = true; } break; case 1: BAngle = GroupDimensions->checkBox->isChecked(); - if(!BAngle)anObj = anOper->MakeCylinderRH(getRadius(), getHeight(), 360.); - else anObj = anOper->MakeCylinderRH(getRadius(), getHeight(), getAngle()); - if (!anObj->_is_nil() && !IsPreview()) - { - QStringList aParameters; - aParameters << GroupDimensions->SpinBox_DX->text(); - aParameters << GroupDimensions->SpinBox_DY->text(); - aParameters << GroupDimensions->SpinBox_DZ->text(); - anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + if(!BAngle){ + anObj = anOper->MakeCylinderRH(getRadius(), getHeight()); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupDimensions->SpinBox_DX->text(); + aParameters << GroupDimensions->SpinBox_DY->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; + } + else if(BAngle){ + anObj = anOper->MakeCylinderRHA(getRadius(), getHeight(), getAngle()*M_PI/180.); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupDimensions->SpinBox_DX->text(); + aParameters << GroupDimensions->SpinBox_DY->text(); + aParameters << GroupDimensions->SpinBox_DZ->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; } - res = true; break; } @@ -530,4 +554,4 @@ void PrimitiveGUI_CylinderDlg::ActivateAngle() GroupDimensions->SpinBox_DZ->setEnabled( GroupDimensions->checkBox->isChecked() ); processPreview(); } -} \ No newline at end of file +} From 7ac599fe97502781f233fb02e23320fa28bcc8ff Mon Sep 17 00:00:00 2001 From: Florian BRUNET Date: Mon, 11 Aug 2014 15:53:38 +0200 Subject: [PATCH 075/118] Addition of a specific error message for the 0 and 360 values. --- src/GEOMGUI/GEOM_msg_en.ts | 4 ++++ src/GEOMGUI/GEOM_msg_fr.ts | 4 ++++ src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 20 +++++++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 04e9f9d6b..c8a36982d 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -535,6 +535,10 @@ Please, select face, shell or solid and try again GEOM_CYLINDER_TITLE Cylinder Construction + + GEOM_CYLINDER_ANGLE_ERR + Angle values 0 and 360 are unsafe to build proper volumes. Please uncheck the "Angle" box to use the regular cylinder constructor. + GEOM_D1 D1 : diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 20d5ebe4e..af43089e2 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -547,6 +547,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau GEOM_CYLINDER_TITLE Construction d'un cylindre + + GEOM_CYLINDER_ANGLE_ERR + Les valeurs de l'angle 0 et 360 sont à éviter pour construire des volumes sains. Veuillez décocher la case "Angle" pour utiliser le constructeur de cylindre complet. + GEOM_D1 D1 : diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx index 9f9ad7a6c..73e7c03fa 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx @@ -124,11 +124,11 @@ void PrimitiveGUI_CylinderDlg::Init() double SpecificStep = 5; initSpinBox(GroupPoints->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupPoints->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); - initSpinBox(GroupPoints->SpinBox_DZ, 0.00001, 359.99999, SpecificStep, "angle_precision" ); + initSpinBox(GroupPoints->SpinBox_DZ, 0., 360., SpecificStep, "angle_precision" ); initSpinBox(GroupDimensions->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupDimensions->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); - initSpinBox(GroupDimensions->SpinBox_DZ, 0.00001, 359.99999, SpecificStep, "angle_precision" ); + initSpinBox(GroupDimensions->SpinBox_DZ, 0., 360., SpecificStep, "angle_precision" ); // init variables myEditCurrentArgument = GroupPoints->LineEdit1; @@ -218,7 +218,7 @@ void PrimitiveGUI_CylinderDlg::ConstructorsClicked (int constructorId) updateGeometry(); resize(minimumSizeHint()); SelectionIntoArgument(); - + displayPreview(true); } @@ -298,7 +298,6 @@ void PrimitiveGUI_CylinderDlg::SelectionIntoArgument() this, SLOT(SelectionIntoArgument())); } } - displayPreview(true); } @@ -372,6 +371,11 @@ void PrimitiveGUI_CylinderDlg::enterEvent (QEvent*) //================================================================================= void PrimitiveGUI_CylinderDlg::ValueChangedInSpinBox() { + QString msg; + if (!isValid(msg)) { + erasePreview(); + return; + } displayPreview(true); } @@ -397,12 +401,20 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg) GroupPoints->SpinBox_DY->isValid( msg, !IsPreview() ) && GroupPoints->SpinBox_DZ->isValid( msg, !IsPreview() ) && myPoint && myDir; + if(GroupPoints->SpinBox_DZ->value()<=0. || GroupPoints->SpinBox_DZ->value()>=360.) { + msg += tr("GEOM_CYLINDER_ANGLE_ERR") + "\n"; + ok = false; + } } else if( getConstructorId() == 1 ) { ok = GroupDimensions->SpinBox_DX->isValid( msg, !IsPreview() ) && GroupDimensions->SpinBox_DY->isValid( msg, !IsPreview() ) && GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ); + if(GroupDimensions->SpinBox_DZ->value()<=0. || GroupDimensions->SpinBox_DZ->value()>=360.) { + msg += tr("GEOM_CYLINDER_ANGLE_ERR") + "\n"; + ok = false; + } } ok = qAbs( getHeight() ) > Precision::Confusion() && ok; ok = qAbs( getRadius() ) > Precision::Confusion() && ok; From bb11967e8f7382db94459a04be70ccfc6bc08ac6 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 12 Aug 2014 11:47:23 +0400 Subject: [PATCH 076/118] 0022614: [CEA 1146] SalomePyQt python API tabifyDockWidgets and findDockByWT Unify object names of dock widgets --- src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx index 0429e9be5..6bf1369e3 100644 --- a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx +++ b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx @@ -37,7 +37,8 @@ GEOMGUI_CreationInfoWdg::GEOMGUI_CreationInfoWdg( SalomeApp_Application* app ) //:QWidget( app->desktop() ) { - setWindowTitle(tr("CREATION_INFO_TITLE")); + setWindowTitle( tr( "CREATION_INFO_TITLE" ) ); + setObjectName( "geomCreationInformation" ); QFrame* frame = new QFrame( this ); From 6fa496fb8ef107943de3f95022b6278795d993e1 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 12 Aug 2014 17:20:10 +0400 Subject: [PATCH 077/118] 0022614: [CEA 1146] SalomePyQt python API tabifyDockWidgets and findDockByWT Update default dock windows / toolbars posision and visibility according to the issue 21709 --- resources/SalomeApp.xml.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 47fa423d2..f4613118b 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -111,9 +111,9 @@
  • - +
    - +
    From ccf1c3dfbc834b67c3c955c8a0aeaeb226aa3a3d Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 13 Aug 2014 17:34:03 +0400 Subject: [PATCH 078/118] =?UTF-8?q?0022667:=20EDF=207375=20GEOM:=20Add=20a?= =?UTF-8?q?ngle=20argument=20to=20=AB=20Create=20cylinder=20=BB=20function?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Minor corrections to initial implementation. --- doc/salome/examples/primitives_ex02.py | 39 ++++++----- .../gui/GEOM/input/creating_cylinder.doc | 17 +++-- idl/GEOM_Gen.idl | 6 +- idl/GEOM_Superv.idl | 12 ++-- resources/GEOMCatalog.xml.in | 6 +- src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui | 3 + src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui | 1 + src/GEOMImpl/GEOMImpl_CylinderDriver.cxx | 49 +++++++------- src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx | 4 +- src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx | 16 ++--- src/GEOM_I/GEOM_I3DPrimOperations_i.cc | 4 +- src/GEOM_I/GEOM_I3DPrimOperations_i.hh | 12 ++-- src/GEOM_I_Superv/GEOM_Superv_i.cc | 12 ++-- src/GEOM_I_Superv/GEOM_Superv_i.hh | 12 ++-- src/GEOM_SWIG/GEOM_TestAll.py | 28 ++++---- src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 67 +++++++++---------- src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h | 2 +- 17 files changed, 149 insertions(+), 141 deletions(-) diff --git a/doc/salome/examples/primitives_ex02.py b/doc/salome/examples/primitives_ex02.py index a0e73ff5f..82cf5e449 100644 --- a/doc/salome/examples/primitives_ex02.py +++ b/doc/salome/examples/primitives_ex02.py @@ -1,46 +1,49 @@ # Creation of a Cylinder +import math + import salome salome.salome_init() import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) -import math gg = salome.ImportComponentGUI("GEOM") # create a vertex and a vector p1 = geompy.MakeVertex(25, 35, 45) p2 = geompy.MakeVertex(70, 70, 70) -v = geompy.MakeVector(p1, p2) +v = geompy.MakeVector(p1, p2) # create cylinders -height = 40 - +height = 40 radius1 = 15 -cylinder1 = geompy.MakeCylinder(p1, v, radius1, height) -angle1 = 45.*math.pi / 180. -cylinder1a = geompy.MakeCylinderA(p1, v, radius1, height, angle1) -geompy.TranslateDXDYDZ(cylinder1a,80.,0.,0.) - radius2 = 30 +angle1 = 45. * math.pi / 180. +angle2 = 210. * math.pi / 180. + +cylinder1 = geompy.MakeCylinder(p1, v, radius1, height) + cylinder2 = geompy.MakeCylinderRH(radius2, height) -angle2 = 210.*math.pi / 180. -cylinder2a = geompy.MakeCylinderRHA(radius2, height, angle2) -geompy.TranslateDXDYDZ(cylinder2a,80.,0.,0.) + +cylinder3 = geompy.MakeCylinderA(p1, v, radius1, height, angle1) +geompy.TranslateDXDYDZ(cylinder3, 80., 0., 0.) + +cylinder4 = geompy.MakeCylinderRHA(radius2, height, angle2) +geompy.TranslateDXDYDZ(cylinder4, 80., 0., 0.) # add objects in the study id_cylinder1 = geompy.addToStudy(cylinder1,"Cylinder1") id_cylinder2 = geompy.addToStudy(cylinder2,"Cylinder2") -id_cylinder1a = geompy.addToStudy(cylinder1a,"Cylinder1a") -id_cylinder2a = geompy.addToStudy(cylinder2a,"Cylinder2a") +id_cylinder3 = geompy.addToStudy(cylinder3,"Cylinder3") +id_cylinder4 = geompy.addToStudy(cylinder4,"Cylinder4") # display the cylinders gg.createAndDisplayGO(id_cylinder1) gg.setDisplayMode(id_cylinder1,1) gg.createAndDisplayGO(id_cylinder2) gg.setDisplayMode(id_cylinder2,1) -gg.createAndDisplayGO(id_cylinder1a) -gg.setDisplayMode(id_cylinder1a,1) -gg.createAndDisplayGO(id_cylinder2a) -gg.setDisplayMode(id_cylinder2a,1) +gg.createAndDisplayGO(id_cylinder3) +gg.setDisplayMode(id_cylinder3,1) +gg.createAndDisplayGO(id_cylinder4) +gg.setDisplayMode(id_cylinder4,1) diff --git a/doc/salome/gui/GEOM/input/creating_cylinder.doc b/doc/salome/gui/GEOM/input/creating_cylinder.doc index 49f19bf64..d2c9f78e3 100644 --- a/doc/salome/gui/GEOM/input/creating_cylinder.doc +++ b/doc/salome/gui/GEOM/input/creating_cylinder.doc @@ -10,29 +10,32 @@ Entity - > Primitives - > Cylinder \n Firstly, you can define a \b Cylinder by the Base Point (the central point of the cylinder base), the \b Vector (the axis of the cylinder), -and its dimensions: the Radius and the Height. +and its dimensions: the \b Radius and the \b Height. Also, you can optionally specify +the \b Angle in order to create a portion of cylinder. + \n TUI Command: geompy.MakeCylinder(Point, Axis, Radius, Height) \n Arguments: Name + 1 vertex + 1 vector + 2 values (Dimensions: radius and height). -\n \b Angle checkbox and field allow defining an angle to create a portion of cylinder. \n TUI Command: geompy.MakeCylinderA(Point, Axis, Radius, Height, Angle) \n Arguments: Name + 1 vertex + 1 vector + 3 values (Dimensions: radius, height and angle). \image html cylinder1.png -\n Secondly, you can define a \b Cylinder by the given radius and the -height at the origin of coordinate system. The axis of the cylinder -will be collinear to the OZ axis of the coordinate system. +\n Secondly, you can define a \b Cylinder by the given \b Radius and +\b Height at the origin of coordinate system. The axis of the cylinder +will be collinear to the OZ axis of the coordinate system. +Similarly to first constructor, you can optionally specify the \b Angle +in order to create a portion of cylinder. + \n TUI Command: geompy.MakeCylinderRH(Radius, Height) \n Arguments: Name + 2 values (Dimensions at origin: radius and height). -\n \b Angle checkbox and field allow defining an angle to create a portion of cylinder at the origin of coordinate system. \n TUI Command: geompy.MakeCylinderRHA(Radius, Height, Angle) \n Arguments: Name + 3 values -(Dimensions at origin : radius, height and angle). +(Dimensions at origin: radius, height and angle). \image html cylinder2.png diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index c1e4b2c5c..86b959374 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -1,4 +1,4 @@ -// // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -1494,7 +1494,7 @@ module GEOM GEOM_Object MakeCylinderRHA (in double theR, in double theH, in double theA); /*! - * \brief Create a cylinder with given base point, axis, radius, height and angle. + * \brief Create a cylinder with given base point, axis, radius and height. * \param thePnt Central point of cylinder base. * \param theAxis Cylinder axis. * \param theR Cylinder radius. @@ -1518,7 +1518,7 @@ module GEOM in GEOM_Object theAxis, in double theR, in double theH, - in double theA); + in double theA); /*! * \brief Create a cone with given height and radiuses at diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl index 3c5972437..7787ff4cc 100644 --- a/idl/GEOM_Superv.idl +++ b/idl/GEOM_Superv.idl @@ -162,13 +162,13 @@ module GEOM GEOM_Object MakeCylinderRH (in double theR, in double theH) ; GEOM_Object MakeCylinderPntVecRHA (in GEOM_Object thePnt, - in GEOM_Object theAxis, - in double theRadius, - in double theHeight, - in double theAngle) ; + in GEOM_Object theAxis, + in double theRadius, + in double theHeight, + in double theAngle) ; GEOM_Object MakeCylinderRHA (in double theR, - in double theH, - in double theA) ; + in double theH, + in double theA) ; GEOM_Object MakeSphere (in double theX, in double theY, in double theZ, diff --git a/resources/GEOMCatalog.xml.in b/resources/GEOMCatalog.xml.in index db3ec4288..7ac41f313 100644 --- a/resources/GEOMCatalog.xml.in +++ b/resources/GEOMCatalog.xml.in @@ -1372,7 +1372,7 @@ - + MakeCylinderPntVecRHA @@ -1399,7 +1399,7 @@ double unknown - + theAngle double unknown @@ -1431,7 +1431,7 @@ double unknown - + theA double unknown diff --git a/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui index d652b9a90..07489104b 100644 --- a/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui +++ b/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui @@ -180,6 +180,9 @@ PushButton2 LineEdit2 SpinBox_DX + SpinBox_DY + SpinBox_DZ + checkBox diff --git a/src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui b/src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui index 1747f8d5c..7307c920b 100644 --- a/src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui +++ b/src/DlgRef/DlgRef_3Spin1CheckCyl_QTD.ui @@ -117,6 +117,7 @@ SpinBox_DX SpinBox_DY SpinBox_DZ + checkBox diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx index 42dd86b7c..3c91625b3 100644 --- a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx @@ -109,37 +109,36 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const if (aCI.GetH() < 0.0) aV.Reverse(); gp_Ax2 anAxes (aP, aV); - bool switchAngleVar; - if(aType == CYLINDER_R_H || aType == CYLINDER_PNT_VEC_R_H) switchAngleVar = false; - else if(aType == CYLINDER_R_H_A || aType == CYLINDER_PNT_VEC_R_H_A) switchAngleVar = true; - else return 0; + TopoDS_Shape aShape; - switch (switchAngleVar) { - case false: - { - BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH())); - MC.Build(); - if (!MC.IsDone()) { - StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters"); + switch (aType) { + case CYLINDER_R_H: + case CYLINDER_PNT_VEC_R_H: + { + BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH())); + MC.Build(); + if (!MC.IsDone()) { + StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters"); + } + aShape = MC.Shape(); + break; } - aShape = MC.Shape(); - break; - } - case true: - { - BRepPrimAPI_MakeCylinder MCA (anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()); - MCA.Build(); - if (!MCA.IsDone()) { - StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters. Failure."); - return 0; + case CYLINDER_R_H_A: + case CYLINDER_PNT_VEC_R_H_A: + { + BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()); + MC.Build(); + if (!MC.IsDone()) { + StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters. Failure."); + } + aShape = MC.Shape(); + break; } - aShape = MCA.Shape(); - break; - } default: - return 0; + break; } + if (aShape.IsNull()) return 0; aFunction->SetValue(aShape); diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx index f3f33f969..037b33560 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx @@ -646,8 +646,8 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO */ //============================================================================= Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRHA (Handle(GEOM_Object) thePnt, - Handle(GEOM_Object) theVec, - double theR, double theH, double theA) + Handle(GEOM_Object) theVec, + double theR, double theH, double theA) { SetErrorCode(KO); diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx index 84a643afc..de227452e 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx @@ -50,17 +50,17 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations { Standard_EXPORT Handle(GEOM_Object) MakeDiskR (double theR, int theOrientation); Standard_EXPORT Handle(GEOM_Object) MakeCylinderRH (double theR, double theH); Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt, - Handle(GEOM_Object) theVec, - double theR, double theH); + Handle(GEOM_Object) theVec, + double theR, double theH); Standard_EXPORT Handle(GEOM_Object) MakeCylinderRHA (double theR, double theH, double theA); Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRHA (Handle(GEOM_Object) thePnt, - Handle(GEOM_Object) theVec, - double theR, double theH, double theA); + Handle(GEOM_Object) theVec, + double theR, double theH, double theA); Standard_EXPORT Handle(GEOM_Object) MakeConeR1R2H (double theR1, double theR2, double theH); Standard_EXPORT Handle(GEOM_Object) MakeConePntVecR1R2H (Handle(GEOM_Object) thePnt, - Handle(GEOM_Object) theVec, - double theR1, double theR2, double theH); + Handle(GEOM_Object) theVec, + double theR1, double theR2, double theH); Standard_EXPORT Handle(GEOM_Object) MakeSphereR (double theR); Standard_EXPORT Handle(GEOM_Object) MakeSpherePntR (Handle(GEOM_Object) thePnt, double theR); @@ -68,8 +68,8 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations { Standard_EXPORT Handle(GEOM_Object) MakeTorusRR (double theRMajor, double theRMinor); Standard_EXPORT Handle(GEOM_Object) MakeTorusPntVecRR (Handle(GEOM_Object) thePnt, - Handle(GEOM_Object) theVec, - double theRMajor, double theRMinor); + Handle(GEOM_Object) theVec, + double theRMajor, double theRMinor); Standard_EXPORT Handle(GEOM_Object) MakePrismVecH (Handle(GEOM_Object) theBase, Handle(GEOM_Object) theVec, diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc index 5f01b7c91..ef874e824 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc @@ -267,8 +267,8 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRHA (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA) + CORBA::Double theH, + CORBA::Double theA) { GEOM::GEOM_Object_var aGEOMObject; diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh index f78e1c089..56c1cbc7b 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh @@ -77,14 +77,14 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i : CORBA::Double theH); GEOM::GEOM_Object_ptr MakeCylinderRHA (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA); + CORBA::Double theH, + CORBA::Double theA); GEOM::GEOM_Object_ptr MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, - GEOM::GEOM_Object_ptr theVec, - CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA); + GEOM::GEOM_Object_ptr theVec, + CORBA::Double theR, + CORBA::Double theH, + CORBA::Double theA); GEOM::GEOM_Object_ptr MakeConeR1R2H (CORBA::Double theR1, CORBA::Double theR2, diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index 801ea5e70..de9ef8b3d 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -1077,10 +1077,10 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRH (CORBA::Double theR, // MakeCylinderPntVecRHA: //============================================================================= GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, - GEOM::GEOM_Object_ptr theAxis, - CORBA::Double theRadius, - CORBA::Double theHeight, - CORBA::Double theAngle) + GEOM::GEOM_Object_ptr theAxis, + CORBA::Double theRadius, + CORBA::Double theHeight, + CORBA::Double theAngle) { beginService( " GEOM_Superv_i::MakeCylinderPntVecRHA" ); MESSAGE("GEOM_Superv_i::MakeCylinderPntVecRHA"); @@ -1094,8 +1094,8 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRHA (GEOM::GEOM_Object_pt // MakeCylinderRHA: //============================================================================= GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRHA (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA) + CORBA::Double theH, + CORBA::Double theA) { beginService( " GEOM_Superv_i::MakeCylinderRHA" ); MESSAGE("GEOM_Superv_i::MakeCylinderRHA"); diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh index 4d827589e..708a0dab6 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.hh +++ b/src/GEOM_I_Superv/GEOM_Superv_i.hh @@ -247,13 +247,13 @@ public: GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, CORBA::Double theH); GEOM::GEOM_Object_ptr MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, - GEOM::GEOM_Object_ptr theAxis, - CORBA::Double theRadius, - CORBA::Double theHeight, - CORBA::Double theAngle); + GEOM::GEOM_Object_ptr theAxis, + CORBA::Double theRadius, + CORBA::Double theHeight, + CORBA::Double theAngle); GEOM::GEOM_Object_ptr MakeCylinderRHA (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA); + CORBA::Double theH, + CORBA::Double theA); GEOM::GEOM_Object_ptr MakeSphere (CORBA::Double theX, CORBA::Double theY, CORBA::Double theZ, diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py index 62eec35c8..b644c196b 100644 --- a/src/GEOM_SWIG/GEOM_TestAll.py +++ b/src/GEOM_SWIG/GEOM_TestAll.py @@ -147,20 +147,20 @@ def TestAll (geompy, math): tan_on_face = geompy.MakeTangentPlaneOnFace(tan_extrusion, 0.7, 0.5, 150) #Create base geometry 3D - Box = geompy.MakeBoxTwoPnt(p0, p200) #(2 GEOM_Object)->GEOM_Object - Box1 = geompy.MakeBoxDXDYDZ(10, 20, 30) #(3 Doubles)->GEOM_Object - Box2 = geompy.MakeBox(10,20,30, 15,25,35) #(6 Doubles)->GEOM_Object - Cylinder = geompy.MakeCylinder(p0, vz, radius1, height) #(2 GEOM_Object, 2 Doubles)->GEOM_Object - Cyl1 = geompy.MakeCylinderRH(radius2, height) #(2 Doubles)->GEOM_Object - Cylinder1= geompy.MakeCylinderA(p0, vz, radius1, height,angle1) #(2 GEOM_Object, 2 Doubles)->GEOM_Object - Cyl2 = geompy.MakeCylinderRHA(radius2, height,angle2) #(2 Doubles)->GEOM_Object - Sphere = geompy.MakeSpherePntR(p0, radius1) #(GEOM_Object, Double)->GEOM_Object - Sphere1 = geompy.MakeSphereR(radius) #(Double)->GEOM_Object - Sphere2 = geompy.MakeSphere(50, 70, 30, radius) #(4 Doubles)->GEOM_Object - Cone = geompy.MakeCone(p0, vz, radius2, radius, height) #(2 GEOM_Object, 3 Doubles)->GEOM_Object - Cone1 = geompy.MakeConeR1R2H(radius1, radius, height) #(3 Doubles)->GEOM_Object - Torus = geompy.MakeTorus(p0, vz, radius2, radius) #(2 GEOM_Object, 2 Doubles)->GEOM_Object - Torus1 = geompy.MakeTorusRR(radius2, radius1) #(2 Doubles)->GEOM_Object + Box = geompy.MakeBoxTwoPnt(p0, p200) #(2 GEOM_Object)->GEOM_Object + Box1 = geompy.MakeBoxDXDYDZ(10, 20, 30) #(3 Doubles)->GEOM_Object + Box2 = geompy.MakeBox(10,20,30, 15,25,35) #(6 Doubles)->GEOM_Object + Cylinder = geompy.MakeCylinder(p0, vz, radius1, height) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Cyl1 = geompy.MakeCylinderRH(radius2, height) #(2 Doubles)->GEOM_Object + Cylinder1= geompy.MakeCylinderA(p0, vz, radius1, height, angle1) #(2 GEOM_Object, 3 Doubles)->GEOM_Object + Cyl2 = geompy.MakeCylinderRHA(radius2, height, angle2) #(3 Doubles)->GEOM_Object + Sphere = geompy.MakeSpherePntR(p0, radius1) #(GEOM_Object, Double)->GEOM_Object + Sphere1 = geompy.MakeSphereR(radius) #(Double)->GEOM_Object + Sphere2 = geompy.MakeSphere(50, 70, 30, radius) #(4 Doubles)->GEOM_Object + Cone = geompy.MakeCone(p0, vz, radius2, radius, height) #(2 GEOM_Object, 3 Doubles)->GEOM_Object + Cone1 = geompy.MakeConeR1R2H(radius1, radius, height) #(3 Doubles)->GEOM_Object + Torus = geompy.MakeTorus(p0, vz, radius2, radius) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Torus1 = geompy.MakeTorusRR(radius2, radius1) #(2 Doubles)->GEOM_Object #Boolean (Common, Cut, Fuse, Section) Common = geompy.MakeBoolean(Box, Sphere, 1) #(2 GEOM_Object, Short)->GEOM_Object diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx index 73e7c03fa..66333aa24 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx @@ -166,7 +166,7 @@ void PrimitiveGUI_CylinderDlg::Init() connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double))); - connect(GroupPoints->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); + connect(GroupPoints->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); connect(GroupDimensions->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); initName(tr("GEOM_CYLINDER")); @@ -399,9 +399,10 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg) { ok = GroupPoints->SpinBox_DX->isValid( msg, !IsPreview() ) && GroupPoints->SpinBox_DY->isValid( msg, !IsPreview() ) && - GroupPoints->SpinBox_DZ->isValid( msg, !IsPreview() ) && + ( !GroupPoints->checkBox->isChecked() || GroupPoints->SpinBox_DZ->isValid( msg, !IsPreview() ) ) && myPoint && myDir; - if(GroupPoints->SpinBox_DZ->value()<=0. || GroupPoints->SpinBox_DZ->value()>=360.) { + if ( GroupPoints->checkBox->isChecked() && + ( GroupPoints->SpinBox_DZ->value() <= 0. || GroupPoints->SpinBox_DZ->value() >= 360. ) ) { msg += tr("GEOM_CYLINDER_ANGLE_ERR") + "\n"; ok = false; } @@ -410,10 +411,11 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg) { ok = GroupDimensions->SpinBox_DX->isValid( msg, !IsPreview() ) && GroupDimensions->SpinBox_DY->isValid( msg, !IsPreview() ) && - GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ); - if(GroupDimensions->SpinBox_DZ->value()<=0. || GroupDimensions->SpinBox_DZ->value()>=360.) { - msg += tr("GEOM_CYLINDER_ANGLE_ERR") + "\n"; - ok = false; + ( GroupDimensions->checkBox->isChecked() || GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ) ); + if ( GroupDimensions->checkBox->isChecked() && + ( GroupDimensions->SpinBox_DZ->value() <= 0. || GroupDimensions->SpinBox_DZ->value() >= 360. ) ) { + msg += tr("GEOM_CYLINDER_ANGLE_ERR") + "\n"; + ok = false; } } ok = qAbs( getHeight() ) > Precision::Confusion() && ok; @@ -428,7 +430,6 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg) bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) { bool res = false; - bool BAngle = false; GEOM::GEOM_Object_var anObj; @@ -436,20 +437,8 @@ bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) switch (getConstructorId()) { case 0: - BAngle = GroupPoints->checkBox->isChecked(); if ( myPoint && myDir ) { - if(!BAngle){ - anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight()); - if (!anObj->_is_nil() && !IsPreview()) - { - QStringList aParameters; - aParameters << GroupPoints->SpinBox_DX->text(); - aParameters << GroupPoints->SpinBox_DY->text(); - anObj->SetParameters(aParameters.join(":").toLatin1().constData()); - } - res = true; - } - else if(BAngle){ + if ( GroupPoints->checkBox->isChecked() ) { anObj = anOper->MakeCylinderPntVecRHA(myPoint.get(), myDir.get(), getRadius(), getHeight(), getAngle()*M_PI/180.); if (!anObj->_is_nil() && !IsPreview()) { @@ -461,22 +450,21 @@ bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) } res = true; } + else { + anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight()); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupPoints->SpinBox_DX->text(); + aParameters << GroupPoints->SpinBox_DY->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; + } } break; case 1: - BAngle = GroupDimensions->checkBox->isChecked(); - if(!BAngle){ - anObj = anOper->MakeCylinderRH(getRadius(), getHeight()); - if (!anObj->_is_nil() && !IsPreview()) - { - QStringList aParameters; - aParameters << GroupDimensions->SpinBox_DX->text(); - aParameters << GroupDimensions->SpinBox_DY->text(); - anObj->SetParameters(aParameters.join(":").toLatin1().constData()); - } - res = true; - } - else if(BAngle){ + if ( GroupDimensions->checkBox->isChecked() ) { anObj = anOper->MakeCylinderRHA(getRadius(), getHeight(), getAngle()*M_PI/180.); if (!anObj->_is_nil() && !IsPreview()) { @@ -488,6 +476,17 @@ bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) } res = true; } + else { + anObj = anOper->MakeCylinderRH(getRadius(), getHeight()); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupDimensions->SpinBox_DX->text(); + aParameters << GroupDimensions->SpinBox_DY->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; + } break; } diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h index b79316ba9..1a5ccc46b 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.h @@ -77,7 +77,7 @@ private slots: void ConstructorsClicked( int ); void ValueChangedInSpinBox(); void SetDoubleSpinBoxStep( double ); - void ActivateAngle(); + void ActivateAngle(); }; #endif // PRIMITIVEGUI_CYLINDERDLG_H From 5c9b06b29d65821ccb83fa26de17b5896d4f3d9b Mon Sep 17 00:00:00 2001 From: skv Date: Tue, 19 Aug 2014 14:52:23 +0400 Subject: [PATCH 079/118] 0022620: [CEA 1061] Remove points on colinear edges of a face's wire. --- src/BlockFix/BlockFix_UnionEdges.cxx | 535 +++++++++++++++------------ 1 file changed, 306 insertions(+), 229 deletions(-) diff --git a/src/BlockFix/BlockFix_UnionEdges.cxx b/src/BlockFix/BlockFix_UnionEdges.cxx index eff6eda75..09c2caf0d 100644 --- a/src/BlockFix/BlockFix_UnionEdges.cxx +++ b/src/BlockFix/BlockFix_UnionEdges.cxx @@ -30,7 +30,6 @@ #include -#include #include #include @@ -39,16 +38,16 @@ #include #include #include -#include #include #include +#include #include #include #include -#include #include +#include #include #include #include @@ -57,15 +56,12 @@ #include #include #include -#include #include -#include #include -#include - #include +#include #include #include #include @@ -85,12 +81,144 @@ #include #include #include -#include #include +#include +#include #include #include "utilities.h" + +//======================================================================= +//function : IsToMerge +//purpose : This method return Standard_True if two consequent edges can +// be merged. The edges can be merged if: +// 1. They belong to same faces. +// 2. They either both seam or both not seam on each face. +// 3. They are based on coincident lines, or: +// 4. They are based on coincident circles, or: +// 5. They are based on either Bezier of BSplines. +//======================================================================= +static Standard_Boolean IsToMerge + (const TopoDS_Edge &theEdge1, + const TopoDS_Edge &theEdge2, + const TopTools_IndexedDataMapOfShapeListOfShape &theMapEdgeFaces, + const Standard_Real theTolerance) +{ + Standard_Boolean aResult = Standard_False; + Standard_Boolean isDegen1 = BRep_Tool::Degenerated(theEdge1); + Standard_Boolean isDegen2 = BRep_Tool::Degenerated(theEdge2); + Standard_Boolean isCompareGeom = Standard_False; + + if (isDegen1 && isDegen2) { + // Both of edges are degenerated. + aResult = Standard_True; + } else if (!isDegen1 && !isDegen2) { + // Both of edges are not degenerated. + // Check if they belong to the same faces. + Standard_Boolean isSame = Standard_False; + Standard_Boolean has1 = theMapEdgeFaces.Contains(theEdge1); + Standard_Boolean has2 = theMapEdgeFaces.Contains(theEdge1); + + if (has1 && has2) { + const TopTools_ListOfShape &aLst1 = theMapEdgeFaces.FindFromKey(theEdge1); + const TopTools_ListOfShape &aLst2 = theMapEdgeFaces.FindFromKey(theEdge2); + + if (aLst1.Extent() == aLst2.Extent()) { + TopTools_ListIteratorOfListOfShape anIter1(aLst1); + + isSame = Standard_True; + + for (; anIter1.More(); anIter1.Next()) { + TopoDS_Face aFace1 = TopoDS::Face(anIter1.Value()); + TopTools_ListIteratorOfListOfShape anIter2(aLst2); + + for (; anIter2.More(); anIter2.Next()) { + if (aFace1.IsSame(anIter2.Value())) { + // Same face is detected. Break the loop. + // Check if edges either both seam or both not seam on this face. + Standard_Boolean isSeam1 = BRep_Tool::IsClosed(theEdge1, aFace1); + Standard_Boolean isSeam2 = BRep_Tool::IsClosed(theEdge2, aFace1); + + isSame = (isSeam1 && isSeam2) || (isSeam1 == isSeam2); + break; + } + } + + if (isSame && !anIter2.More()) { + // No same face is detected. Break the loop. + isSame = Standard_False; + break; + } + } + } + } else { + isSame = (has1 == has2); // True if the both of has are negative. + } + + if (isSame) { + // Check edges geometry. + Standard_Real aFP1; + Standard_Real aFP2; + Standard_Real aLP1; + Standard_Real aLP2; + Handle(Geom_Curve) aC3d1 = BRep_Tool::Curve(theEdge1, aFP1, aLP1); + Handle(Geom_Curve) aC3d2 = BRep_Tool::Curve(theEdge2, aFP2, aLP2); + + if (aC3d1.IsNull() == Standard_False && + aC3d2.IsNull() == Standard_False) { + // Get the basis curves. + while(aC3d1->IsKind(STANDARD_TYPE(Geom_TrimmedCurve))) { + Handle(Geom_TrimmedCurve) aTc = + Handle(Geom_TrimmedCurve)::DownCast(aC3d1); + aC3d1 = aTc->BasisCurve(); + } + + while(aC3d2->IsKind(STANDARD_TYPE(Geom_TrimmedCurve))) { + Handle(Geom_TrimmedCurve) aTc = + Handle(Geom_TrimmedCurve)::DownCast(aC3d2); + aC3d2 = aTc->BasisCurve(); + } + + if(aC3d1->IsKind(STANDARD_TYPE(Geom_Line)) && + aC3d2->IsKind(STANDARD_TYPE(Geom_Line))) { + // Two curves are lines. + Handle(Geom_Line) aL1 = Handle(Geom_Line)::DownCast(aC3d1); + Handle(Geom_Line) aL2 = Handle(Geom_Line)::DownCast(aC3d2); + gp_Dir aDir1 = aL1->Position().Direction(); + gp_Dir aDir2 = aL2->Position().Direction(); + + if(aDir1.IsParallel(aDir2, theTolerance)) { + // Two coincident lines. + aResult = Standard_True; + } + } else if(aC3d1->IsKind(STANDARD_TYPE(Geom_Circle)) && + aC3d2->IsKind(STANDARD_TYPE(Geom_Circle))) { + // Two curves are circles. + Handle(Geom_Circle) aC1 = Handle(Geom_Circle)::DownCast(aC3d1); + Handle(Geom_Circle) aC2 = Handle(Geom_Circle)::DownCast(aC3d2); + gp_Pnt aP01 = aC1->Location(); + gp_Pnt aP02 = aC2->Location(); + + if (aP01.Distance(aP02) <= Precision::Confusion()) { + // Two coincident circles. + aResult = Standard_True; + } + } else if (aC3d1->IsKind(STANDARD_TYPE(Geom_BSplineCurve)) || + aC3d1->IsKind(STANDARD_TYPE(Geom_BezierCurve))) { + if (aC3d2->IsKind(STANDARD_TYPE(Geom_BSplineCurve)) || + aC3d2->IsKind(STANDARD_TYPE(Geom_BezierCurve))) { + // Both of the curves are either bezier or BSplines. + aResult = Standard_True; + } + } + } + } + } + + return aResult; +} + //======================================================================= //function : BlockFix_UnionEdges() //purpose : Constructor @@ -263,55 +391,11 @@ static TopoDS_Edge GlueEdgesWithPCurves(const TopTools_SequenceOfShape& aChain, return ResEdge; } -//======================================================================= -//function : IsFixed -//purpose : Returns true if this vertex should be kept in the result. -//======================================================================= -static Standard_Boolean IsFixed - (const TopoDS_Vertex &theVtx, - const TopoDS_Face &theFace, - const TopTools_IndexedDataMapOfShapeListOfShape &theMapVtxEdgeOnFace) -{ - Standard_Boolean aResult = Standard_False; - - if (theMapVtxEdgeOnFace.Contains(theVtx)) { - const TopTools_ListOfShape& aList = theMapVtxEdgeOnFace.FindFromKey(theVtx); - TopTools_ListIteratorOfListOfShape anIter(aList); - Standard_Boolean isFirst = Standard_True; - Standard_Boolean isSeam = Standard_False; - - for ( ; anIter.More(); anIter.Next()) { - TopoDS_Edge anEdge = TopoDS::Edge(anIter.Value()); - - if (isFirst) { - // This is the first treated edge. - isFirst = Standard_False; - isSeam = BRep_Tool::IsClosed(anEdge, theFace); - } else if (BRep_Tool::IsClosed(anEdge, theFace)) { - // Seam edge. - if (!isSeam) { - // The previous one was not seam. - aResult = Standard_True; - break; - } - } else if (isSeam) { - // This is not a seam edge however the previous one was seam. - aResult = Standard_True; - break; - } - } - } - - return aResult; -} - //======================================================================= //function : MergeEdges //purpose : auxilary //======================================================================= static Standard_Boolean MergeEdges(const TopTools_SequenceOfShape& SeqEdges, - const TopoDS_Face& theFace1, - const TopoDS_Face& theFace2, const Standard_Real Tol, TopoDS_Edge& anEdge) { @@ -352,61 +436,6 @@ static Standard_Boolean MergeEdges(const TopTools_SequenceOfShape& SeqEdges, return Standard_False; } - // Check if there are vertices that should be kept in the result. - const Standard_Boolean isClosed = VF.IsSame(VL); - TopTools_IndexedDataMapOfShapeListOfShape theMapVtxEdge1; - TopTools_IndexedDataMapOfShapeListOfShape theMapVtxEdge2; - Standard_Integer jSplit = -1; - - TopExp::MapShapesAndAncestors(theFace1, TopAbs_VERTEX, TopAbs_EDGE, theMapVtxEdge1); - TopExp::MapShapesAndAncestors(theFace2, TopAbs_VERTEX, TopAbs_EDGE, theMapVtxEdge2); - - // Check if intermediate vertices should be in the result. - for(j = 1; j < aChain.Length(); j++) { - TopoDS_Edge anEdge = TopoDS::Edge(aChain.Value(j)); - TopoDS_Vertex aVtx = sae.LastVertex(anEdge); - - if (IsFixed(aVtx, theFace1, theMapVtxEdge1) || - IsFixed(aVtx, theFace2, theMapVtxEdge2)) { - // This vertex should be kept. - if (jSplit > 0) { - // There is already split vertex detected. - // It means that these edges can't be merged. - MESSAGE ("Two edges on closed contour can't be merged."); - return Standard_False; - } else if (isClosed) { - // This is a closed contour. - // It is possible to merge it starting from the next edge. - jSplit = j; - } else { - // The contour is not closed, this vertex sould be kept. - // It means that these edges can't be merged. - MESSAGE ("Two edges on not closed contour can't be merged."); - return Standard_False; - } - } - } - - if (jSplit > 0) { - // This is closed contour. Check the last (it is first as well) vertex, - // as it becomes intermediate after reordering. - TopoDS_Edge anEdge = TopoDS::Edge(aChain.Last()); - TopoDS_Vertex aVtx = sae.LastVertex(anEdge); - - if (IsFixed(aVtx, theFace1, theMapVtxEdge1) || - IsFixed(aVtx, theFace2, theMapVtxEdge2)) { - // This vertex should be kept. So we can't merge this contour. - MESSAGE ("Two edges on closed contour can't be merged."); - return Standard_False; - } - - // Reorder edges in the sequence to have jSplit-th edge last. - for(j = 1; j <= jSplit; j++) { - aChain.Append(aChain.First()); - aChain.Remove(1); - } - } - // union edges in chain // first step: union lines and circles TopLoc_Location Loc; @@ -453,9 +482,6 @@ static Standard_Boolean MergeEdges(const TopTools_SequenceOfShape& SeqEdges, B.Add (E,V1); B.Add (E,V2); B.UpdateVertex(V1, 0., E, 0.); B.UpdateVertex(V2, dist, E, 0.); - //ShapeFix_Edge sfe; - //sfe.FixAddPCurve(E,aFace,Standard_False); - //sfe.FixSameParameter(E); aChain.Remove(j); aChain.SetValue(j,E); j--; @@ -555,21 +581,6 @@ static Standard_Boolean MergeEdges(const TopTools_SequenceOfShape& SeqEdges, if(NeedUnion) { MESSAGE ("can not make analitical union => make approximation"); TopoDS_Edge E = GlueEdgesWithPCurves(aChain, VF, VL); - /* - TopoDS_Wire W; - B.MakeWire(W); - for(j=1; j<=aChain.Length(); j++) { - TopoDS_Edge edge = TopoDS::Edge(aChain.Value(j)); - B.Add(W,edge); - } - Handle(BRepAdaptor_HCompCurve) Adapt = new BRepAdaptor_HCompCurve(W); - Approx_Curve3d Conv(Adapt,Tol,GeomAbs_C1,9,1000); - Handle(Geom_BSplineCurve) bc = Conv.Curve(); - TopoDS_Edge E; - B.MakeEdge (E,bc,Precision::Confusion()); - B.Add (E,VF); - B.Add (E,VL); - */ aChain.SetValue(1,E); } else { @@ -586,120 +597,186 @@ static Standard_Boolean MergeEdges(const TopTools_SequenceOfShape& SeqEdges, //function : Perform //purpose : //======================================================================= -TopoDS_Shape BlockFix_UnionEdges::Perform(const TopoDS_Shape& Shape, - const Standard_Real Tol) +TopoDS_Shape BlockFix_UnionEdges::Perform(const TopoDS_Shape& theShape, + const Standard_Real theTol) { - myContext = new ShapeBuild_ReShape; - myTolerance = Tol; - TopoDS_Shape aResult = myContext->Apply(Shape); + // Fill Map of edges as keys and list of faces as items. + TopTools_IndexedDataMapOfShapeListOfShape aMapEdgeFaces; + Standard_Boolean isModified = Standard_False; - // processing each solid - TopAbs_ShapeEnum aType = TopAbs_SOLID; - TopExp_Explorer exps (Shape, aType); - if (!exps.More()) { - aType = TopAbs_SHELL; - exps.Init(Shape, aType); + TopExp::MapShapesAndAncestors + (theShape, TopAbs_EDGE, TopAbs_FACE, aMapEdgeFaces); + + // processing each face + Handle(ShapeBuild_ReShape) aContext = new ShapeBuild_ReShape; + TopTools_MapOfShape aProcessed; + TopTools_MapOfShape aModifiedFaces; + TopExp_Explorer anExpF(theShape, TopAbs_FACE); + + for (; anExpF.More(); anExpF.Next()) { + // Processing of each wire of the face + TopoDS_Face aFace = TopoDS::Face(anExpF.Current()); + + if (!aProcessed.Add(aFace)) { + continue; + } + + TopExp_Explorer anExpW(aFace, TopAbs_WIRE); + + for (; anExpW.More(); anExpW.Next()) { + // Get the ordered list of edges in the wire. + TopoDS_Wire aWire = TopoDS::Wire(anExpW.Current()); + BRepTools_WireExplorer aWExp(aWire, aFace); + TopTools_ListOfShape aChainEdges; + Standard_Integer aNbEdges = 0; + + for (; aWExp.More(); aWExp.Next(), aNbEdges++) { + aChainEdges.Append(aWExp.Current()); + } + + if (aNbEdges < 2) { + // Nothing to merge. + continue; + } + + // Fill the list of flags that neighbour edges can be merged. + TColStd_ListOfInteger aChainCanMerged; + TopoDS_Edge anEdge1 = TopoDS::Edge(aChainEdges.Last()); + TopoDS_Edge anEdge2; + Standard_Boolean isToMerge; + TopTools_ListIteratorOfListOfShape anIter(aChainEdges); + Standard_Boolean isFirstMerge = Standard_False; + Standard_Boolean isFirst = Standard_True; + Standard_Boolean isReorder = Standard_False; + + // The first element is the flag between last and first edges. + for (; anIter.More(); anIter.Next()) { + anEdge2 = TopoDS::Edge(anIter.Value()); + + if (aProcessed.Contains(anEdge1) || aProcessed.Contains(anEdge2)) { + // No need to merge already processed edges. + isToMerge = Standard_False; + } else { + isToMerge = IsToMerge(anEdge1, anEdge2, aMapEdgeFaces, theTol); + } + + aChainCanMerged.Append(isToMerge); + anEdge1 = anEdge2; + + if (isFirst) { + isFirstMerge = isToMerge; + isFirst = Standard_False; + } else if (isFirstMerge && !isToMerge) { + isReorder = Standard_True; + } + } + + // Fill the map of processed shape by the edges. + for (anIter.Initialize(aChainEdges); anIter.More(); anIter.Next()) { + aProcessed.Add(anIter.Value()); + } + + // Reorder edges in the chain. + if (isReorder) { + // Find the first edge that can't be merged. + while (aChainCanMerged.First()) { + TopoDS_Shape aTmpShape = aChainEdges.First(); + + isToMerge = aChainCanMerged.First(); + aChainCanMerged.RemoveFirst(); + aChainCanMerged.Append(isToMerge); + aChainEdges.RemoveFirst(); + aChainEdges.Append(aTmpShape); + } + } + + // Merge parts of chain to be merged. + TColStd_ListIteratorOfListOfInteger aFlagIter(aChainCanMerged); + anIter.Initialize(aChainEdges); + + while (anIter.More()) { + TopTools_SequenceOfShape aSeqEdges; + + aSeqEdges.Append(anIter.Value()); + aFlagIter.Next(); + anIter.Next(); + + for (; anIter.More(); anIter.Next(), aFlagIter.Next()) { + if (aFlagIter.Value()) { + // Continue the chain. + aSeqEdges.Append(anIter.Value()); + } else { + // Stop the chain. + break; + } + } + + const Standard_Integer aNbEdges = aSeqEdges.Length(); + + if (aNbEdges > 1) { + // There are several edges to be merged. + TopoDS_Edge aMergedEdge; + + if (MergeEdges(aSeqEdges, theTol, aMergedEdge)) { + isModified = Standard_True; + // now we have only one edge - aMergedEdge. + // we have to replace old ListEdges with this new edge + const TopoDS_Shape &anEdge = aSeqEdges.Value(1); + + aContext->Replace(anEdge, aMergedEdge); + + for (Standard_Integer j = 2; j <= aNbEdges; j++) { + aContext->Remove(aSeqEdges(j)); + } + + // Fix affected faces. + if (aMapEdgeFaces.Contains(anEdge)) { + const TopTools_ListOfShape &aList = + aMapEdgeFaces.FindFromKey(anEdge); + TopTools_ListIteratorOfListOfShape anIter(aList); + + for (; anIter.More(); anIter.Next()) { + aModifiedFaces.Add(anIter.Value()); + } + } + } + } + } + } } - for (; exps.More(); exps.Next()) { - //TopoDS_Solid aSolid = TopoDS::Solid(exps.Current()); - TopoDS_Shape aSolid = exps.Current(); - TopTools_IndexedMapOfShape ChangedFaces; + if (isModified) { + // Fix modified faces. + TopTools_MapIteratorOfMapOfShape aModifIt(aModifiedFaces); - // creating map of edge faces - TopTools_IndexedDataMapOfShapeListOfShape aMapEdgeFaces; - TopExp::MapShapesAndAncestors(aSolid, TopAbs_EDGE, TopAbs_FACE, aMapEdgeFaces); + for (; aModifIt.More(); aModifIt.Next()) { + TopoDS_Face aModifiedFace = + TopoDS::Face(aContext->Apply(aModifIt.Key())); + Handle(ShapeFix_Face) aSff = new ShapeFix_Face(aModifiedFace); - Handle(ShapeBuild_ReShape) aContext = new ShapeBuild_ReShape; - TopoDS_Shape aRes = aSolid; - aRes = aContext->Apply(aSolid); - - // processing each face - TopExp_Explorer exp; - for (exp.Init(aRes, TopAbs_FACE); exp.More(); exp.Next()) { - TopoDS_Face aFace = - TopoDS::Face(aContext->Apply(exp.Current().Oriented(TopAbs_FORWARD))); - TopTools_IndexedDataMapOfShapeListOfShape aMapFacesEdges; - - for (TopExp_Explorer expe(aFace,TopAbs_EDGE); expe.More(); expe.Next()) { - TopoDS_Edge edge = TopoDS::Edge(expe.Current()); - if (!aMapEdgeFaces.Contains(edge)) continue; - const TopTools_ListOfShape& aList = aMapEdgeFaces.FindFromKey(edge); - TopTools_ListIteratorOfListOfShape anIter(aList); - for ( ; anIter.More(); anIter.Next()) { - TopoDS_Face face = TopoDS::Face(anIter.Value()); - TopoDS_Face face1 = TopoDS::Face(aContext->Apply(anIter.Value())); - if (face1.IsSame(aFace)) continue; - if (aMapFacesEdges.Contains(face)) { - aMapFacesEdges.ChangeFromKey(face).Append(edge); - } - else { - TopTools_ListOfShape ListEdges; - ListEdges.Append(edge); - aMapFacesEdges.Add(face,ListEdges); - } - } - } - - for (Standard_Integer i=1; i<=aMapFacesEdges.Extent(); i++) { - const TopTools_ListOfShape& ListEdges = aMapFacesEdges.FindFromIndex(i); - TopTools_SequenceOfShape SeqEdges; - TopTools_ListIteratorOfListOfShape anIter(ListEdges); - for ( ; anIter.More(); anIter.Next()) { - SeqEdges.Append(anIter.Value()); - } - if (SeqEdges.Length()==1) continue; - - TopoDS_Face aFace2 = - TopoDS::Face(aContext->Apply(aMapFacesEdges.FindKey(i))); - TopoDS_Edge E; - if ( MergeEdges(SeqEdges,aFace,aFace2,Tol,E) ) { - // now we have only one edge - aChain.Value(1) - // we have to replace old ListEdges with this new edge - aContext->Replace(SeqEdges(1),E); - for (Standard_Integer j=2; j<=SeqEdges.Length(); j++) { - aContext->Remove(SeqEdges(j)); - } - TopoDS_Face tmpF = TopoDS::Face(exp.Current()); - if ( !ChangedFaces.Contains(tmpF) ) - ChangedFaces.Add(tmpF); - tmpF = TopoDS::Face(aMapFacesEdges.FindKey(i)); - if ( !ChangedFaces.Contains(tmpF) ) - ChangedFaces.Add(tmpF); - } - } - - } // end processing each face - - // fix changed faces and replace them in the local context - for (Standard_Integer i=1; i<=ChangedFaces.Extent(); i++) { - TopoDS_Face aFace = TopoDS::Face(aContext->Apply(ChangedFaces.FindKey(i))); - Handle(ShapeFix_Face) sff = new ShapeFix_Face(aFace); - sff->SetContext(myContext); - sff->SetPrecision(myTolerance); - sff->SetMinTolerance(myTolerance); - sff->SetMaxTolerance(Max(1.,myTolerance*1000.)); - sff->Perform(); - aContext->Replace(aFace,sff->Face()); + aSff->SetContext(aContext); + aSff->SetPrecision(theTol); + aSff->SetMinTolerance(theTol); + aSff->SetMaxTolerance(Max(1., theTol*1000.)); + aSff->Perform(); + aContext->Replace(aModifiedFace, aSff->Face()); } - if (ChangedFaces.Extent() > 0) { - // fix changed shell and replace it in the local context - TopoDS_Shape aRes1 = aContext->Apply(aRes); - TopExp_Explorer expsh; - for (expsh.Init(aRes1, TopAbs_SHELL); expsh.More(); expsh.Next()) { - TopoDS_Shell aShell = TopoDS::Shell(expsh.Current()); - Handle(ShapeFix_Shell) sfsh = new ShapeFix_Shell; - sfsh->FixFaceOrientation(aShell); - aContext->Replace(aShell,sfsh->Shell()); - } - TopoDS_Shape aRes2 = aContext->Apply(aRes1); - // put new solid into global context - myContext->Replace(aSolid,aRes2); + // Check if the result shape contains shells. + // If yes, fix the faces orientation in the shell. + TopoDS_Shape aModifShape = aContext->Apply(theShape); + TopExp_Explorer anExpSh(aModifShape, TopAbs_SHELL); + + for (; anExpSh.More(); anExpSh.Next()) { + TopoDS_Shell aShell = TopoDS::Shell(anExpSh.Current()); + Handle(ShapeFix_Shell) aSfsh = new ShapeFix_Shell; + + aSfsh->FixFaceOrientation(aShell); + aContext->Replace(aShell, aSfsh->Shell()); } + } - } // end processing each solid + const TopoDS_Shape aResult = aContext->Apply(theShape); - aResult = myContext->Apply(Shape); return aResult; } From 9b95aa0085941f5dfcbd06f585302e19679d9cd4 Mon Sep 17 00:00:00 2001 From: skv Date: Thu, 21 Aug 2014 15:48:54 +0400 Subject: [PATCH 080/118] 0052477: Incorrect work of solid construction algorithm on not valid input data --- src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 58 +++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx index 96f0bb6c6..fe9187ad4 100644 --- a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -133,10 +134,13 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aShape; TCollection_AsciiString aWarning; + TopAbs_ShapeEnum anExpectedType = TopAbs_SHAPE; BRep_Builder B; if (aType == WIRE_EDGES) { + anExpectedType = TopAbs_WIRE; + Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); Standard_Real aTolerance = aCI.GetTolerance(); @@ -146,6 +150,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = MakeWireFromEdges(aShapes, aTolerance); } else if (aType == FACE_WIRE) { + anExpectedType = TopAbs_FACE; + Handle(GEOM_Function) aRefBase = aCI.GetBase(); TopoDS_Shape aShapeBase = aRefBase->GetValue(); if (aShapeBase.IsNull()) Standard_NullObject::Raise("Argument Shape is null"); @@ -179,6 +185,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } } else if (aType == FACE_WIRES) { + anExpectedType = TopAbs_FACE; + // Try to build a face from a set of wires and edges int ind; @@ -295,6 +303,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } } else if (aType == SHELL_FACES) { + anExpectedType = TopAbs_SHELL; + Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); unsigned int ind, nbshapes = aShapes->Length(); @@ -352,6 +362,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } else if (aType == SOLID_SHELL) { + anExpectedType = TopAbs_SOLID; + Handle(GEOM_Function) aRefShell = aCI.GetBase(); TopoDS_Shape aShapeShell = aRefShell->GetValue(); if (!aShapeShell.IsNull() && aShapeShell.ShapeType() == TopAbs_COMPOUND) { @@ -379,11 +391,12 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } else if (aType == SOLID_SHELLS) { + anExpectedType = TopAbs_SOLID; + Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); unsigned int ind, nbshapes = aShapes->Length(); Standard_Integer ish = 0; - TopoDS_Solid Sol; - B.MakeSolid(Sol); + BRepBuilderAPI_MakeSolid aMkSolid; // add shapes for (ind = 1; ind <= nbshapes; ind++) { @@ -397,11 +410,13 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const if (It.More()) aShapeShell = It.Value(); } if (aShapeShell.ShapeType() == TopAbs_SHELL) { - B.Add(Sol, aShapeShell); + aMkSolid.Add(TopoDS::Shell(aShapeShell)); ish++; } } - if (ish == 0) return 0; + if (ish == 0 || !aMkSolid.IsDone()) return 0; + + TopoDS_Solid Sol = aMkSolid.Solid(); BRepClass3d_SolidClassifier SC (Sol); SC.PerformInfinitePoint(Precision::Confusion()); if (SC.State() == TopAbs_IN) @@ -410,6 +425,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = Sol; } else if (aType == COMPOUND_SHAPES) { + anExpectedType = TopAbs_COMPOUND; + Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); unsigned int ind, nbshapes = aShapes->Length(); @@ -453,6 +470,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } */ else if (aType == EDGE_WIRE) { + anExpectedType = TopAbs_EDGE; + Handle(GEOM_Function) aRefBase = aCI.GetBase(); TopoDS_Shape aWire = aRefBase->GetValue(); Standard_Real LinTol = aCI.GetTolerance(); @@ -462,6 +481,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = MakeEdgeFromWire(aWire, LinTol, AngTol); } else if (aType == EDGE_CURVE_LENGTH) { + anExpectedType = TopAbs_EDGE; + GEOMImpl_IVector aVI (aFunction); // RefCurve @@ -536,6 +557,8 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const if (aME.IsDone()) aShape = aME.Shape(); } else if (aType == SHAPE_ISOLINE) { + anExpectedType = TopAbs_EDGE; + GEOMImpl_IIsoline aII (aFunction); Handle(GEOM_Function) aRefFace = aII.GetFace(); TopoDS_Shape aShapeFace = aRefFace->GetValue(); @@ -577,6 +600,33 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = aSfs->Shape(); } + // Check if the result shape type is compatible with the expected. + const TopAbs_ShapeEnum aShType = aShape.ShapeType(); + + if (anExpectedType != TopAbs_SHAPE && anExpectedType != aShType) { + if (aShType == TopAbs_COMPOUND) { + // The result is compound. Check its sub-shapes. + TopoDS_Iterator anIter(aShape); + + if (!anIter.More()) { + // The result is an empty compound. + Standard_ConstructionError::Raise("Result type check failed"); + } + + for (; anIter.More(); anIter.Next()) { + const TopAbs_ShapeEnum aSubType = anIter.Value().ShapeType(); + + if (anExpectedType != aSubType) { + // There is an incompatible type. + Standard_ConstructionError::Raise("Result type check failed"); + } + } + } else { + // There is an incompatible type. + Standard_ConstructionError::Raise("Result type check failed"); + } + } + aFunction->SetValue(aShape); log.SetTouched(Label()); From fe13e168ce40af99f76c18d0e0d46a80e9c3d558 Mon Sep 17 00:00:00 2001 From: skv Date: Fri, 22 Aug 2014 09:48:22 +0400 Subject: [PATCH 081/118] 0052442: Locations arguments does not work with pipe construction --- src/GenerationGUI/GenerationGUI_PipeDlg.cxx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx index 8e264045e..2068d5fda 100644 --- a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx @@ -319,7 +319,6 @@ void GenerationGUI_PipeDlg::SelectionIntoArgument() } } else if ( myEditCurrentArgument == GroupMakePoints->LineEdit1 ) { - myBaseObjects.clear(); QList types; types << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL; QList objects = getSelected( types, -1 ); @@ -330,7 +329,6 @@ void GenerationGUI_PipeDlg::SelectionIntoArgument() } } else if ( myEditCurrentArgument == GroupMakePoints->LineEdit2 ) { - myLocations.clear(); localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); QList objects = getSelected( TopAbs_VERTEX, -1 ); GEOMBase::Synchronize( myLocations, objects ); From 65227b3e7dd0a0d4b5f451bdac720c11c70ff8ed Mon Sep 17 00:00:00 2001 From: skv Date: Mon, 25 Aug 2014 12:12:02 +0400 Subject: [PATCH 082/118] 0022674:[CEA 1261] Regression of function MakeShell : Rollback type check --- src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx index fe9187ad4..ffc758bcb 100644 --- a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx @@ -95,6 +95,11 @@ #include #include +// Uncomment this definition to check if type of created shape is the same +// as expected. For further details please see the Mantis issue +// http://salome.mantis.opencascade.com/view.php?id=22674 +//#define RESULT_TYPE_CHECK + //modified by NIZNHY-PKV Wed Dec 28 13:48:20 2011f //static // void KeepEdgesOrder(const Handle(TopTools_HSequenceOfShape)& aEdges, @@ -134,12 +139,16 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aShape; TCollection_AsciiString aWarning; +#ifdef RESULT_TYPE_CHECK TopAbs_ShapeEnum anExpectedType = TopAbs_SHAPE; +#endif BRep_Builder B; if (aType == WIRE_EDGES) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_WIRE; +#endif Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); @@ -150,7 +159,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = MakeWireFromEdges(aShapes, aTolerance); } else if (aType == FACE_WIRE) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_FACE; +#endif Handle(GEOM_Function) aRefBase = aCI.GetBase(); TopoDS_Shape aShapeBase = aRefBase->GetValue(); @@ -185,7 +196,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } } else if (aType == FACE_WIRES) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_FACE; +#endif // Try to build a face from a set of wires and edges int ind; @@ -303,7 +316,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } } else if (aType == SHELL_FACES) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_SHELL; +#endif Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); unsigned int ind, nbshapes = aShapes->Length(); @@ -362,7 +377,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } else if (aType == SOLID_SHELL) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_SOLID; +#endif Handle(GEOM_Function) aRefShell = aCI.GetBase(); TopoDS_Shape aShapeShell = aRefShell->GetValue(); @@ -391,7 +408,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } else if (aType == SOLID_SHELLS) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_SOLID; +#endif Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); unsigned int ind, nbshapes = aShapes->Length(); @@ -425,7 +444,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = Sol; } else if (aType == COMPOUND_SHAPES) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_COMPOUND; +#endif Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); unsigned int ind, nbshapes = aShapes->Length(); @@ -470,7 +491,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const } */ else if (aType == EDGE_WIRE) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_EDGE; +#endif Handle(GEOM_Function) aRefBase = aCI.GetBase(); TopoDS_Shape aWire = aRefBase->GetValue(); @@ -481,7 +504,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = MakeEdgeFromWire(aWire, LinTol, AngTol); } else if (aType == EDGE_CURVE_LENGTH) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_EDGE; +#endif GEOMImpl_IVector aVI (aFunction); @@ -557,7 +582,9 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const if (aME.IsDone()) aShape = aME.Shape(); } else if (aType == SHAPE_ISOLINE) { +#ifdef RESULT_TYPE_CHECK anExpectedType = TopAbs_EDGE; +#endif GEOMImpl_IIsoline aII (aFunction); Handle(GEOM_Function) aRefFace = aII.GetFace(); @@ -600,6 +627,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = aSfs->Shape(); } +#ifdef RESULT_TYPE_CHECK // Check if the result shape type is compatible with the expected. const TopAbs_ShapeEnum aShType = aShape.ShapeType(); @@ -626,6 +654,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const Standard_ConstructionError::Raise("Result type check failed"); } } +#endif aFunction->SetValue(aShape); From 50dba628d88fa6cf56d507247f289db5ed4fc07e Mon Sep 17 00:00:00 2001 From: skv Date: Tue, 26 Aug 2014 12:25:23 +0400 Subject: [PATCH 083/118] 0022057: EDF 2510 GEOM : Bug with extrusion along a path --- src/GEOMImpl/GEOMImpl_PipeDriver.cxx | 71 ++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 14 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx index 3f0f0c986..5f580ddb9 100644 --- a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx @@ -152,6 +152,26 @@ static GeomFill_Trihedron EvaluateBestSweepMode(const TopoDS_Shape& Spine) return theMode; } +//======================================================================= +//function : BuildPipeShell +//purpose : Builds a pipe shell. If failed, try to build in Descrete Trihedron +// mode. Returns Standard_True if the building is done successfully. +//======================================================================= +static Standard_Boolean BuildPipeShell(BRepOffsetAPI_MakePipeShell &theBuilder) +{ + theBuilder.Build(); + + Standard_Boolean isDone = theBuilder.IsDone(); + + if (!isDone) { + // Try to use Descrete Trihedron mode. + theBuilder.SetDiscreteMode(); + theBuilder.Build(); + isDone = theBuilder.IsDone(); + } + + return isDone; +} //======================================================================= //function : FillForOtherEdges @@ -256,7 +276,9 @@ static bool FillCorrespondingEdges(const TopoDS_Shape& FS1, if (!aBuilder.IsReady()) { return false; } - aBuilder.Build(); + + BuildPipeShell(aBuilder); + TopoDS_Shape aShape = aBuilder.Shape(); /* TopoDS_Compound C; @@ -930,7 +952,9 @@ TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections if (!aBuilder.IsReady()) { Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid"); } - aBuilder.Build(); + + BuildPipeShell(aBuilder); + TopoDS_Shape resShape = aBuilder.Shape(); aSeqRes.Append(resShape); } @@ -961,7 +985,9 @@ TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections if (!aBuilder.IsReady()) { Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid"); } - aBuilder.Build(); + + BuildPipeShell(aBuilder); + TopoDS_Shape resShape = aBuilder.Shape(); aSeqRes.Append(resShape); // make sewing for result @@ -1014,9 +1040,7 @@ TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections aBuilder.SetTolerance(aTolConf, aTolConf, aTolAng); - aBuilder.Build(); - - Standard_Boolean isDone = aBuilder.IsDone(); + Standard_Boolean isDone = BuildPipeShell(aBuilder); if (isDone && NeedCreateSolid) { isDone = aBuilder.MakeSolid(); @@ -1512,7 +1536,9 @@ static TopoDS_Shape CreatePipeForShellSections(const TopoDS_Wire& aWirePath, if (aCI) delete aCI; Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid"); } - aBuilder.Build(); + + BuildPipeShell(aBuilder); + TopoDS_Shape aShape = aBuilder.Shape(); TopoDS_Shell aShell; B.MakeShell(aShell); @@ -1750,7 +1776,9 @@ static TopoDS_Shape CreatePipeForShellSections(const TopoDS_Wire& aWirePath, if (aCI) delete aCI; Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid"); } - aBuilder.Build(); + + BuildPipeShell(aBuilder); + TopoDS_Shape aShape = aBuilder.Shape(); TopoDS_Shell aShell; B.MakeShell(aShell); @@ -2333,8 +2361,10 @@ static TopoDS_Shape CreatePipeBiNormalAlongVector(const TopoDS_Wire& aWirePath, gp_Vec aVec(BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); gp_Dir BiNormal(aVec); PipeBuilder.SetMode(BiNormal); - PipeBuilder.Build(); - if (aShapeBase.ShapeType() == TopAbs_FACE) { + + Standard_Boolean isDone = BuildPipeShell(PipeBuilder); + + if (isDone && aShapeBase.ShapeType() == TopAbs_FACE) { PipeBuilder.MakeSolid(); } @@ -2444,9 +2474,10 @@ Standard_Integer GEOMImpl_PipeDriver::Execute (TFunction_Logbook& log) const if (FaceBuilder.IsDone()) Sweep.SetMode(FaceBuilder.Face()); Sweep.Add(Profile); - Sweep.Build(); - - if (!Sweep.IsDone()) + + Standard_Boolean isDone = BuildPipeShell(Sweep); + + if (!isDone) { if (aCI) delete aCI; Standard_ConstructionError::Raise("MakePipeShell failed"); @@ -2458,7 +2489,19 @@ Standard_Integer GEOMImpl_PipeDriver::Execute (TFunction_Logbook& log) const else { GeomFill_Trihedron theBestMode = EvaluateBestSweepMode(aWirePath); - aShape = BRepOffsetAPI_MakePipe(aWirePath, aShapeBase, theBestMode); + BRepOffsetAPI_MakePipe aMkPipe(aWirePath, aShapeBase, theBestMode); + + if (aMkPipe.IsDone()) { + aShape = aMkPipe.Shape(); + } else if (theBestMode != GeomFill_IsDiscreteTrihedron) { + // Try to use Descrete Trihedron mode. + BRepOffsetAPI_MakePipe aMkPipeDescrete + (aWirePath, aShapeBase, GeomFill_IsDiscreteTrihedron); + + if (aMkPipeDescrete.IsDone()) { + aShape = aMkPipeDescrete.Shape(); + } + } } } From 215e3e9b9205992dd4e445229d2995387c4b98c8 Mon Sep 17 00:00:00 2001 From: Camille GOUTTEBROZE Date: Tue, 26 Aug 2014 14:03:04 +0200 Subject: [PATCH 084/118] Type explicitation --- src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx index 9ac38a334..a5a5e836a 100644 --- a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx +++ b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx @@ -859,11 +859,11 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects ) double u_v_det = (it->x - it_previous->x) * (it_next->y - it->y) - (it->y - it_previous->y) * (it_next->x - it->x); - double norme_u = sqrt ( (it->x - it_previous->x)*(it->x - it_previous->x) + - (it->y - it_previous->y)*(it->y - it_previous->y) ); + double norme_u = sqrt ( double(it->x - it_previous->x) * double(it->x - it_previous->x) + + double(it->y - it_previous->y) * double(it->y - it_previous->y) ); - double norme_v = sqrt ( (it->x - it_next->x)*(it->x - it_next->x) + - (it->y - it_next->y)*(it->y - it_next->y) ); + double norme_v = sqrt ( double(it->x - it_next->x) * double(it->x - it_next->x) + + double(it->y - it_next->y) * double(it->y - it_next->y) ); double u_v_sinus = u_v_det / (norme_u * norme_v); From 00fc3b27ef3994715aa4fe4cc54742eee80b9558 Mon Sep 17 00:00:00 2001 From: Camille GOUTTEBROZE Date: Tue, 26 Aug 2014 14:03:41 +0200 Subject: [PATCH 085/118] Removed obsolete enum --- src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx index a5a5e836a..1f7ff49d5 100644 --- a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx +++ b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx @@ -83,12 +83,6 @@ enum{ LINES }; -enum { - RADIO_BUTTONS, - MSG, - PUSH_BUTTON, -}; - enum { KERNEL_SIZE, FIND_CONTOURS_METHOD, From 45fc0b9952a056e04cd1b2daa394e1d8905e7a8a Mon Sep 17 00:00:00 2001 From: Camille GOUTTEBROZE Date: Tue, 26 Aug 2014 15:08:51 +0200 Subject: [PATCH 086/118] Export ShapeRec symbols --- .../ShapeRec_FeatureDetector.hxx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx b/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx index b683c7c69..bb0a44ddb 100644 --- a/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx +++ b/src/ShapeRecognition/ShapeRec_FeatureDetector.hxx @@ -32,7 +32,17 @@ // Qt #include -class ShapeRec_Parameters +#ifdef WIN32 + #if defined GEOM_SHAPEREC_EXPORTS || defined GEOMShapeRec_EXPORTS + #define GEOM_SHAPEREC_EXPORT __declspec( dllexport ) + #else + #define GEOM_SHAPEREC_EXPORT __declspec( dllimport ) + #endif +#else + #define GEOM_SHAPEREC_EXPORT +#endif + +class GEOM_SHAPEREC_EXPORT ShapeRec_Parameters { public: ShapeRec_Parameters(); @@ -42,7 +52,7 @@ public: int findContoursMethod; }; -class ShapeRec_CornersParameters : public ShapeRec_Parameters +class GEOM_SHAPEREC_EXPORT ShapeRec_CornersParameters : public ShapeRec_Parameters { public: ShapeRec_CornersParameters(); @@ -55,7 +65,7 @@ public: double epsilon; }; -class ShapeRec_CannyParameters : public ShapeRec_Parameters +class GEOM_SHAPEREC_EXPORT ShapeRec_CannyParameters : public ShapeRec_Parameters { public: ShapeRec_CannyParameters(); @@ -66,7 +76,7 @@ public: bool L2gradient; }; -class ShapeRec_ColorFilterParameters : public ShapeRec_Parameters +class GEOM_SHAPEREC_EXPORT ShapeRec_ColorFilterParameters : public ShapeRec_Parameters { public: ShapeRec_ColorFilterParameters(); @@ -79,7 +89,7 @@ public: double maxThreshold; }; -class ShapeRec_FeatureDetector +class GEOM_SHAPEREC_EXPORT ShapeRec_FeatureDetector { public: From b23bafd42b1321c54102be5319913ebd2912318c Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 27 Aug 2014 11:03:29 +0400 Subject: [PATCH 087/118] Implementation of 0022617: [CEA 1060] In OCC view, add "Show vertices" in the contextual menu. --- doc/salome/examples/viewing_geom_objs_ex01.py | 5 +- doc/salome/gui/GEOM/input/display_mode.doc | 11 ++++ src/DisplayGUI/DisplayGUI.cxx | 60 +++++++++++++++++++ src/DisplayGUI/DisplayGUI.h | 6 ++ src/GEOMGUI/GEOMGUI_Selection.cxx | 49 +++++++++++++++ src/GEOMGUI/GEOMGUI_Selection.h | 1 + src/GEOMGUI/GEOM_Displayer.cxx | 9 +++ src/GEOMGUI/GEOM_msg_en.ts | 16 +++++ src/GEOMGUI/GeometryGUI.cxx | 21 +++++++ src/GEOMGUI/GeometryGUI_Operations.h | 2 + src/GEOM_SWIG/GEOM_example3.py | 1 + src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx | 12 ++++ src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h | 1 + src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i | 1 + src/OBJECT/GEOM_AISShape.cxx | 10 ++++ src/OBJECT/GEOM_AISShape.hxx | 3 + src/OBJECT/GEOM_Actor.cxx | 25 +++++++- src/OBJECT/GEOM_Actor.h | 10 ++++ src/OBJECT/GEOM_Constants.cxx | 2 + src/OBJECT/GEOM_Constants.h | 1 + 20 files changed, 240 insertions(+), 6 deletions(-) diff --git a/doc/salome/examples/viewing_geom_objs_ex01.py b/doc/salome/examples/viewing_geom_objs_ex01.py index 0458d42bf..17387b724 100644 --- a/doc/salome/examples/viewing_geom_objs_ex01.py +++ b/doc/salome/examples/viewing_geom_objs_ex01.py @@ -11,10 +11,9 @@ box2 = geompy.MakeBox(-50,-50,-50, 0,0,0) sphere = geompy.MakeSphere(50,50,50, 30) fuse = geompy.MakeBoolean(box,sphere,3) fuse_id = geompy.addToStudy(fuse,"Fuse") -box_id = geompy.addToStudy(box2, "Box") gg = salome.ImportComponentGUI("GEOM") gg.createAndDisplayGO(fuse_id) gg.setDisplayMode(fuse_id,1) -gg.createAndDisplayGO(box_id) -gg.setVectorsMode(box_id, 1) +gg.setVectorsMode(fuse_id, 1) +gg.setVerticesMode(fuse_id, 1) diff --git a/doc/salome/gui/GEOM/input/display_mode.doc b/doc/salome/gui/GEOM/input/display_mode.doc index f8eaeccf0..f8f2184e7 100644 --- a/doc/salome/gui/GEOM/input/display_mode.doc +++ b/doc/salome/gui/GEOM/input/display_mode.doc @@ -29,6 +29,17 @@ functionality for all objects in the current view via the main menu \n TUI Command: gg.setVectorsMode(ID, Bool) +\n Also it is possible to show the vertices of the selected +shape. For this, choose in the context menu of the shape +Display mode -> Show Vertices, or apply this +functionality for all objects in the current view via the main menu + View -> Display Mode -> Show/Hide Vertices. + +\image html vertices_mode.png +
    Vertices Mode (Show Vertices)
    + +\n TUI Command: gg.setVerticesMode(ID, Bool) + Our TUI Scripts provide you with useful examples of \ref tui_change_disp_mode "Changing Display Parameters". diff --git a/src/DisplayGUI/DisplayGUI.cxx b/src/DisplayGUI/DisplayGUI.cxx index fcd23e997..3f407fd34 100644 --- a/src/DisplayGUI/DisplayGUI.cxx +++ b/src/DisplayGUI/DisplayGUI.cxx @@ -136,6 +136,12 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) ( GetVectorMode() ? tr("MEN_VECTOR_MODE_ON") : tr( "MEN_VECTOR_MODE_OFF" ) ); getGeometryGUI()->menuMgr()->update(); break; + case GEOMOp::OpSwitchVertices: // MENU VIEW - DISPLAY MODE - SHOW/HIDE VERTICES + SetVerticesMode(!GetVerticesMode()); + getGeometryGUI()->action( GEOMOp::OpSwitchVertices )->setText + ( GetVerticesMode() ? tr("MEN_VERTICES_MODE_ON") : tr( "MEN_VERTICES_MODE_OFF" ) ); + getGeometryGUI()->menuMgr()->update(); + break; case GEOMOp::OpWireframe: // POPUP MENU - DISPLAY MODE - WIREFRAME ChangeDisplayMode( 0 ); break; @@ -151,6 +157,9 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) case GEOMOp::OpVectors: // POPUP MENU - DISPLAY MODE - SHOW EDGE DIRECTION ChangeDisplayMode( 4 ); break; + case GEOMOp::OpVertices: // POPUP MENU - DISPLAY MODE - SHOW VERTICES + ChangeDisplayMode( 5 ); + break; default: app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); break; @@ -485,6 +494,52 @@ int DisplayGUI::GetVectorMode( SUIT_ViewWindow* viewWindow ) return viewWindow->property( "VectorsMode" ).toBool(); } +//===================================================================================== +// function : DisplayGUI::SetVerticesMode() +// purpose : Set vertices mode for the viewer +//===================================================================================== +void DisplayGUI::SetVerticesMode( const bool mode, SUIT_ViewWindow* viewWindow ) +{ + SUIT_OverrideCursor(); + + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return; + + SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !aStudy ) return; + + if ( !viewWindow ) + viewWindow = app->desktop()->activeWindow(); + + GEOM_Displayer displayer( aStudy ); + + viewWindow->setProperty( "VerticesMode", mode ); + + int aMgrId = viewWindow->getViewManager()->getGlobalId(); + + SALOME_ListIO anIOlst; + displayer.GetActiveView()->GetVisible( anIOlst ); + + for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + aStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::Vertices ), mode ); + displayer.Redisplay( io, false ); + } + displayer.UpdateViewer(); + GeometryGUI::Modified(); +} + +//===================================================================================== +// function : DisplayGUI::GetVerticesMode() +// purpose : Get the "show vertices" mode of the viewer +//===================================================================================== +int DisplayGUI::GetVerticesMode( SUIT_ViewWindow* viewWindow ) +{ + if ( !viewWindow ) + viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow(); + return viewWindow->property( "VerticesMode" ).toBool(); +} + //===================================================================================== // function : DisplayGUI::ChangeDisplayMode() // purpose : Set display mode for selected objects in the viewer given @@ -516,6 +571,8 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow QVariant v = aStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::EdgesDirection ), QVariant() ); bool vectorMode = v.isValid() ? !v.toBool() : false; + v = aStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Vertices ), QVariant() ); + bool verticesMode = v.isValid() ? !v.toBool() : false; for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { Handle( SALOME_InteractiveObject ) io = It.Value(); @@ -525,6 +582,9 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow else if ( mode == 4 ) { aStudy->setObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::EdgesDirection ), vectorMode ); } + else if ( mode == 5 ) { + aStudy->setObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::Vertices ), verticesMode ); + } displayer.Redisplay( io, false ); } displayer.UpdateViewer(); diff --git a/src/DisplayGUI/DisplayGUI.h b/src/DisplayGUI/DisplayGUI.h index 64207c557..5ad5933c7 100644 --- a/src/DisplayGUI/DisplayGUI.h +++ b/src/DisplayGUI/DisplayGUI.h @@ -69,6 +69,12 @@ public: int GetVectorMode( SUIT_ViewWindow* = 0 ); // Invert vector mode ( shadin <-> wireframe ) for the viewer + // VERTICES MODE methods + // Set vertices mode for the viewer + void SetVerticesMode( const bool, SUIT_ViewWindow* = 0 ); + // Get vertices mode of the viewer + int GetVerticesMode( SUIT_ViewWindow* = 0 ); + // Set display mode for selected objects in the viewer given // (current viewer if = 0 ) void ChangeDisplayMode( const int, SUIT_ViewWindow* = 0 ); diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index 3e6f31a31..a2ad57d4b 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -171,6 +171,8 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const v = isAutoColor( idx ); else if ( p == "isVectorsMode" ) v = isVectorsMode( idx ); + else if ( p == "isVerticesMode" ) + v = isVerticesMode( idx ); else if ( p == "topLevel" ) v = topLevel( idx ); else if ( p == "autoBringToFront" ) @@ -428,6 +430,53 @@ bool GEOMGUI_Selection::isVectorsMode( const int index ) const return res; } +bool GEOMGUI_Selection::isVerticesMode( const int index ) const +{ +#ifdef USE_VISUAL_PROP_MAP + QVariant v = visibleProperty( entry( index ), GEOM::propertyName( GEOM::Vertices ) ); + if ( v.canConvert( QVariant::Bool ) ) + return v.toBool(); +#endif + + bool res = false; + + SALOME_View* view = GEOM_Displayer::GetActiveView(); + QString viewType = activeViewType(); + if ( view && ( viewType == OCCViewer_Viewer::Type() || viewType == SVTK_Viewer::Type() ) ) { + SALOME_Prs* prs = view->CreatePrs( entry( index ).toLatin1().constData() ); + if ( prs ) { + if ( viewType == OCCViewer_Viewer::Type() ) { // assuming OCC + SOCC_Prs* occPrs = (SOCC_Prs*) prs; + AIS_ListOfInteractive lst; + occPrs->GetObjects( lst ); + if ( lst.Extent() ) { + Handle(AIS_InteractiveObject) io = lst.First(); + if ( !io.IsNull() ) { + Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io); + if ( !aSh.IsNull() ) + res = aSh->isShowVertices(); + } + } + } + else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK + SVTK_Prs* vtkPrs = dynamic_cast( prs ); + vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0; + if ( lst ) { + lst->InitTraversal(); + vtkActor* actor = lst->GetNextActor(); + if ( actor ) { + GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(actor); + if ( aGeomActor ) + res = aGeomActor->GetVerticesMode(); + } + } + } + } + } + + return res; +} + bool GEOMGUI_Selection::hasChildren( const _PTR(SObject)& obj ) { if ( obj ) { diff --git a/src/GEOMGUI/GEOMGUI_Selection.h b/src/GEOMGUI/GEOMGUI_Selection.h index be21acfb4..d7b692609 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.h +++ b/src/GEOMGUI/GEOMGUI_Selection.h @@ -67,6 +67,7 @@ private: QString displayMode( const int ) const; QString selectionMode() const; bool isVectorsMode( const int ) const; + bool isVerticesMode( const int ) const; bool hasChildren( const int ) const; int nbChildren( const int ) const; bool hasConcealedChildren( const int ) const; diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 09c3ccf2d..a012c220b 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -871,6 +871,9 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap // set display vectors flag AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() ); + // set display vertices flag + AISShape->SetDisplayVertices( propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool() ); + // set transparency if( HasTransparency() ) { AISShape->SetTransparency( GetTransparency() ); @@ -1144,6 +1147,9 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create ) // set display vectors flag actor->SetVectorMode( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() ); + // set display vertices flag + actor->SetVerticesMode( propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool() ); + // set display mode int displayMode = HasDisplayMode() ? // predefined display mode, manually set to displayer via GEOM_Displayer::SetDisplayMode() function @@ -2498,6 +2504,9 @@ PropMap GEOM_Displayer::getDefaultPropertyMap() // - show edges direction flag (false by default) propMap.insert( GEOM::propertyName( GEOM::EdgesDirection ), false ); + // - show vertices flag (false by default) + propMap.insert( GEOM::propertyName( GEOM::Vertices ), false ); + // - shading color (take default value from preferences) propMap.insert( GEOM::propertyName( GEOM::ShadingColor ), colorFromResources( "shading_color", QColor( 255, 255, 0 ) ) ); diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index c8a36982d..d19174cc9 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2900,6 +2900,10 @@ Please, select face, shell or solid and try again MEN_POP_VECTORS Show Edge Direction
    + + MEN_POP_VERTICES + Show Vertices + MEN_PREFERENCES Preferences @@ -3072,6 +3076,14 @@ Please, select face, shell or solid and try again MEN_VECTOR_MODE_OFF Hide Edge Direction + + MEN_VERTICES_MODE_ON + Show Vertices + + + MEN_VERTICES_MODE_OFF + Hide Vertices + MEN_WIREFRAME Wireframe @@ -3768,6 +3780,10 @@ Please, select face, shell or solid and try again STB_POP_VECTORS Show Edge Direction + + STB_POP_VERTICES + Show Vertices + STB_POP_SETTEXTURE Add a texture diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 43e865ae9..1df722c35 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -520,11 +520,13 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpHide: // MENU VIEW - ERASE case GEOMOp::OpShow: // MENU VIEW - DISPLAY case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE + case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME case GEOMOp::OpShading: // POPUP MENU - SHADING case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES case GEOMOp::OpTexture: // POPUP MENU - TEXTURE case GEOMOp::OpVectors: // POPUP MENU - VECTORS + case GEOMOp::OpVertices: // POPUP MENU - VERTICES libName = "DisplayGUI"; break; case GEOMOp::OpPoint: // MENU BASIC - POINT @@ -1043,6 +1045,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" ); createGeomAction( GEOMOp::OpShow, "DISPLAY" ); createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE"); + createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE"); createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true ); createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true ); createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true ); @@ -1064,6 +1067,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH"); createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH"); createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true ); + createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true ); createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" ); createGeomAction( GEOMOp::OpColor, "POP_COLOR" ); createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" ); @@ -1319,6 +1323,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 ); createMenu( separator(), dispmodeId, -1 ); createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 ); + createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 ); createMenu( separator(), viewId, -1 ); createMenu( GEOMOp::OpShowAll, viewId, -1 ); @@ -1520,6 +1525,9 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule ); + mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices + mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule ); mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color @@ -2888,6 +2896,11 @@ void GeometryGUI::storeVisualParameters (int savePoint) ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString()); } + if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) { + param = occParam + GEOM::propertyName( GEOM::Vertices ); + ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString()); + } + if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) { param = occParam + GEOM::propertyName( GEOM::Deflection ); ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString()); @@ -3058,6 +3071,8 @@ void GeometryGUI::restoreVisualParameters (int savePoint) aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val ); } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) { aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1"); + } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) { + aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1"); } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) { aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble()); } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) { @@ -3111,13 +3126,19 @@ void GeometryGUI::onViewAboutToShow() { SUIT_ViewWindow* window = application()->desktop()->activeWindow(); QAction* a = action( GEOMOp::OpSwitchVectors ); + QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices ); if ( window ) { a->setEnabled(true); bool vmode = window->property("VectorsMode").toBool(); a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") ); + aVerticesAction->setEnabled(true); + vmode = window->property("VerticesMode").toBool(); + aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") ); } else { a->setText ( tr("MEN_VECTOR_MODE_ON") ); a->setEnabled(false); + aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") ); + aVerticesAction->setEnabled(false); } } diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index 5a33af0dc..4a109372a 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -71,6 +71,7 @@ namespace GEOMOp { OpDMShading = 2011, // MENU VIEW - DISPLAY MODE - SHADING OpDMShadingWithEdges = 2012, // MENU VIEW - DISPLAY MODE - SHADING WITH EDGES OpDMTexture = 2013, // MENU VIEW - DISPLAY MODE - TEXTURE + OpSwitchVertices = 2014, // MENU VIEW - DISPLAY MODE - SHOW/HIDE VERTICES OpShow = 2100, // POPUP MENU - SHOW OpShowOnly = 2101, // POPUP MENU - SHOW ONLY OpHide = 2102, // POPUP MENU - HIDE @@ -82,6 +83,7 @@ namespace GEOMOp { OpTexture = 2204, // POPUP MENU - DISPLAY MODE - TEXTURE OpBringToFront = 2205, // POPUP MENU - BRING TO FRONT OpClsBringToFront = 2206, + OpVertices = 2208, // POPUP MENU - DISPLAY MODE - SHOW VERTICES // BasicGUI --------------------//-------------------------------- OpPoint = 3000, // MENU NEW ENTITY - BASIC - POINT OpLine = 3001, // MENU NEW ENTITY - BASIC - LINE diff --git a/src/GEOM_SWIG/GEOM_example3.py b/src/GEOM_SWIG/GEOM_example3.py index 5f79ccd14..b2432f339 100644 --- a/src/GEOM_SWIG/GEOM_example3.py +++ b/src/GEOM_SWIG/GEOM_example3.py @@ -113,6 +113,7 @@ if not isinstance(gg, type(salome_ComponentGUI)): gg.setDisplayMode(id_torus1,1) gg.setDisplayMode(id_torus2,1) gg.setVectorsMode(id_acyl,1,1) + gg.setVerticesMode(id_acyl,1,1) #gg.setDisplayMode(id_cage,1) gg.setColor(id_torus1,0,0,255) diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx index 1fa77355d..2b918cc12 100644 --- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx @@ -391,6 +391,18 @@ void GEOM_Swig::setVectorsMode( const char* theEntry, bool theOn, bool theUpdate theOn, theUpdateViewer ) ); } +/*! + \brief Show / hide vertices for the presentation + \param theEntry geometry object's entry + \param theOn \c true to show vertices or \c false otherwise + \param theUpdateViewer \c true to update active view's contents +*/ +void GEOM_Swig::setVerticesMode( const char* theEntry, bool theOn, bool theUpdateViewer ) +{ + ProcessVoidEvent( new TSetPropertyEvent( theEntry, GEOM::propertyName( GEOM::Vertices ), + theOn, theUpdateViewer ) ); +} + /*! \brief Change color of the presentation \param theEntry geometry object's entry diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h index 60cb10cfa..1fd1d864e 100644 --- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h @@ -41,6 +41,7 @@ public: void setDisplayMode( const char* theEntry, int theMode, bool theUpdateViewer = true ); void setVectorsMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); + void setVerticesMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); void setColor( const char* theEntry, int theRed, int theGreen, int theBlue, bool theUpdateViewer = true ); void setTransparency( const char* theEntry, float theTransparency, bool theUpdateViewer = true ); void setIsos( const char* theEntry, int theNbU, int theNbV, bool theUpdateViewer = true ); diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i index 6d1050a98..30f6065c7 100644 --- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i @@ -63,6 +63,7 @@ class GEOM_Swig void setDisplayMode( const char* theEntry, int theMode, bool theUpdateViewer = true ); void setVectorsMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); + void setVerticesMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); void setColor( const char* theEntry, int theRed, int theGreen, int theBlue, bool theUpdateViewer = true ); void setTransparency( const char* theEntry, float theTransparency, bool theUpdateViewer = true ); void setIsos( const char* theEntry, int theNbU, int theNbV, bool theUpdateViewer = true ); diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index 462eed0c2..a6ded99e0 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -148,6 +149,7 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, : SALOME_AISShape(shape), myName(aName), myDisplayVectors(false), + myDisplayVertices(false), myFieldDataType(GEOM::FDT_Double), myFieldDimension(0), myFieldStepRangeMin(0), @@ -215,6 +217,9 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent bool anIsColorField = anIsField && myFieldDataType != GEOM::FDT_String; bool anIsTextField = anIsField && myFieldDataType == GEOM::FDT_String; + if (isShowVertices()) + myDrawer->SetVertexDrawMode(Prs3d_VDM_All); + // StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode; bool isTopLev = isTopLevel() && switchTopLevel(); switch (aMode) { @@ -359,6 +364,11 @@ void GEOM_AISShape::SetDisplayVectors(bool isDisplayed) myDisplayVectors = isDisplayed; } +void GEOM_AISShape::SetDisplayVertices(bool isDisplayed) +{ + myDisplayVertices = isDisplayed; +} + void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPrs, const Standard_Integer aMode) diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx index d744a791a..8a60ba952 100644 --- a/src/OBJECT/GEOM_AISShape.hxx +++ b/src/OBJECT/GEOM_AISShape.hxx @@ -124,12 +124,14 @@ public: void SetShadingColor(const Quantity_Color &aCol); void SetEdgesInShadingColor(const Quantity_Color &aCol); void SetDisplayVectors(bool isShow); + void SetDisplayVertices(bool isShow); virtual void Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) ; virtual bool isShowVectors () { return myDisplayVectors; } + virtual bool isShowVertices () { return myDisplayVertices; } virtual Standard_Boolean switchTopLevel(); virtual Standard_Boolean toActivate(); @@ -182,6 +184,7 @@ protected: private: TCollection_AsciiString myName; bool myDisplayVectors; + bool myDisplayVertices; Standard_Boolean myTopLevel; Standard_Integer myPrevDisplayMode; diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index 47bc66b17..851b83ab1 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -82,6 +82,7 @@ GEOM_Actor::GEOM_Actor(): // myDisplayMode(eWireframe), myIsSelected(false), myVectorMode(false), + myVerticesMode(false), myVertexActor(GEOM_DeviceActor::New(),true), myVertexSource(GEOM_VertexSource::New(),true), @@ -129,13 +130,13 @@ GEOM_Actor::GEOM_Actor(): myHighlightProp->SetAmbientColor(1, 1, 1); myHighlightProp->SetDiffuseColor(1, 1, 1); myHighlightProp->SetSpecularColor(0.5, 0.5, 0.5); - myHighlightProp->SetPointSize(SALOME_POINT_SIZE); + myHighlightProp->SetPointSize(0); myHighlightActor->SetProperty(myHighlightProp.GetPointer()); this->myHighlightActor->SetInput(myAppendFilter->GetOutputPort(),false); myPreHighlightProp->SetColor(0,1,1); - myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE+2); + myPreHighlightProp->SetPointSize(0); myPreHighlightProp->SetLineWidth(SALOME_LINE_WIDTH+1); myPreHighlightProp->SetRepresentationToWireframe(); @@ -189,6 +190,7 @@ GEOM_Actor::GEOM_Actor(): // Toggle display mode setDisplayMode(0); // WIRE FRAME SetVectorMode(0); // + SetVerticesMode(0); // } @@ -355,7 +357,7 @@ SetVisibility(int theVisibility) myOneFaceEdgeActor->SetVisibility(theVisibility && (myDisplayMode == (int)eWireframe || myDisplayMode == (int)eShadingWithEdges) && !myIsSelected); myIsolatedEdgeActor->SetVisibility(theVisibility && !myIsSelected); - myVertexActor->SetVisibility(theVisibility && myDisplayMode == (int)eWireframe && !myIsSelected);// must be added new mode points + myVertexActor->SetVisibility(theVisibility && myVerticesMode && (!myIsSelected && !myIsPreselected));// must be added new mode points } @@ -391,6 +393,23 @@ GEOM_Actor return myVectorMode; } +void +GEOM_Actor +::SetVerticesMode(bool theMode) +{ + myVerticesMode = theMode; + theMode ? myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE+2) : myPreHighlightProp->SetPointSize(0); + theMode ? myHighlightProp->SetPointSize(SALOME_POINT_SIZE) : myHighlightProp->SetPointSize(0); + SetModified(); +} + +bool +GEOM_Actor +::GetVerticesMode() +{ + return myVerticesMode; +} + void GEOM_Actor:: SetDeflection(float theDeflection) diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h index fa7193a0f..173f40a0b 100644 --- a/src/OBJECT/GEOM_Actor.h +++ b/src/OBJECT/GEOM_Actor.h @@ -202,6 +202,15 @@ public: bool GetVectorMode(); + //! Vertices mode management + virtual + void + SetVerticesMode(const bool theMode); + + virtual + bool + GetVerticesMode(); + protected: void SetModified(); @@ -220,6 +229,7 @@ private: // EDisplayMode myDisplayMode; bool myIsSelected; bool myVectorMode; + bool myVerticesMode; PDeviceActor myVertexActor; PVertexSource myVertexSource; diff --git a/src/OBJECT/GEOM_Constants.cxx b/src/OBJECT/GEOM_Constants.cxx index 7790adcba..0ccf2ed1c 100644 --- a/src/OBJECT/GEOM_Constants.cxx +++ b/src/OBJECT/GEOM_Constants.cxx @@ -69,6 +69,8 @@ namespace GEOM "Color", // COLOR_PROP // "show edges direction" flag "VectorMode", // VECTOR_MODE_PROP + // "show vertices" flag + "VerticesMode", // VERTICES_MODE_PROP // deflection coefficient "DeflectionCoeff", // DEFLECTION_COEFF_PROP // point marker data diff --git a/src/OBJECT/GEOM_Constants.h b/src/OBJECT/GEOM_Constants.h index 17f65eb36..e314735f8 100644 --- a/src/OBJECT/GEOM_Constants.h +++ b/src/OBJECT/GEOM_Constants.h @@ -39,6 +39,7 @@ namespace GEOM NbIsos, Color, EdgesDirection, + Vertices, Deflection, PointMarker, Material, From 88911223a8aeee4051a01a2b93210803a61a82bb Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 27 Aug 2014 11:56:23 +0400 Subject: [PATCH 088/118] Avoiding compilation problem with OCCT version < 6.7.2 because of 22617 integration. --- src/OBJECT/GEOM_AISShape.cxx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index a6ded99e0..341018e89 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -34,6 +34,8 @@ #include "SALOME_InteractiveObject.hxx" #include "GEOM_AISVector.hxx" +#include + // Open CASCADE Includes #include #include @@ -53,7 +55,9 @@ #include #include #include +#if OCC_VERSION_LARGE > 0x06070200 #include +#endif #include #include @@ -217,8 +221,10 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent bool anIsColorField = anIsField && myFieldDataType != GEOM::FDT_String; bool anIsTextField = anIsField && myFieldDataType == GEOM::FDT_String; +#if OCC_VERSION_LARGE > 0x06070200 if (isShowVertices()) myDrawer->SetVertexDrawMode(Prs3d_VDM_All); +#endif // StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode; bool isTopLev = isTopLevel() && switchTopLevel(); From 71ea6f84c5ec1609acf6f1b268f6a20503e708af Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 27 Aug 2014 13:08:44 +0400 Subject: [PATCH 089/118] 0022628: [CEA 1202] The default icon disposition is not correct in french and in japanese --- resources/SalomeApp.xml.in | 4 +- src/GEOMGUI/GEOM_msg_en.ts | 107 ++++++++++++++++++------------------ src/GEOMGUI/GEOM_msg_fr.ts | 107 ++++++++++++++++++------------------ src/GEOMGUI/GEOM_msg_ja.ts | 107 ++++++++++++++++++------------------ src/GEOMGUI/GeometryGUI.cxx | 32 +++++------ 5 files changed, 183 insertions(+), 174 deletions(-) diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index f4613118b..eb36582fa 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -111,9 +111,9 @@
    - +
    - +
    diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index d19174cc9..13449596d 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -4008,54 +4008,6 @@ Please, select face, shell or solid and try again TOM_X X
    - - TOOL_BASIC - Basic - - - TOOL_BLOCKS - Blocks - - - TOOL_BOOLEAN - Boolean operations - - - TOOL_FEATURES - Modification - - - TOOL_GENERATION - Generation - - - TOOL_PRIMITIVES - Primitives - - - TOOL_TRANSFORMATION - Transformation - - - TOOL_BUILD - Build - - - TOOL_OPERATIONS - Operations - - - TOOL_PICTURES - Pictures - - - TOOL_ADVANCED - Advanced - - - TOOL_MEASURES - Measures - TOP_ARC Create an arc @@ -5181,10 +5133,6 @@ Ignoring units will cause model scaling (as dimensions are supposed to be specif MEN_IMPORTEXPORT Import / Export XAO - - TOOL_IMPORTEXPORT - Import / Export XAO - TOP_EXPORTXAO Export to XAO @@ -5238,6 +5186,61 @@ Ignoring units will cause model scaling (as dimensions are supposed to be specif X=%1, Y=%2, Z=%3 + + GeometryGUI + + TOOL_BASIC + Basic + + + TOOL_BLOCKS + Blocks + + + TOOL_BOOLEAN + Boolean operations + + + TOOL_FEATURES + Modification + + + TOOL_GENERATION + Generation + + + TOOL_PRIMITIVES + Primitives + + + TOOL_TRANSFORMATION + Transformation + + + TOOL_BUILD + Build + + + TOOL_OPERATIONS + Operations + + + TOOL_PICTURES + Pictures + + + TOOL_ADVANCED + Advanced + + + TOOL_MEASURES + Measures + + + TOOL_IMPORTEXPORT + Import / Export XAO + + BasicGUI_CurveDlg diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index af43089e2..6a506ac76 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -3996,54 +3996,6 @@ Choisissez une face, une coque ou un solide et essayez de nouveau TOM_X X - - TOOL_BASIC - Objets de base - - - TOOL_BLOCKS - Blocs - - - TOOL_BOOLEAN - Opérations booléennes - - - TOOL_FEATURES - Modification - - - TOOL_GENERATION - Génération - - - TOOL_PRIMITIVES - Primitives - - - TOOL_TRANSFORMATION - Transformation - - - TOOL_BUILD - Construire - - - TOOL_OPERATIONS - Opérations - - - TOOL_PICTURES - Images - - - TOOL_ADVANCED - Avancé - - - TOOL_MEASURES - Informations - TOP_ARC Créer un arc @@ -5165,10 +5117,6 @@ le paramètre '%1' aux préférences du module Géométrie.MEN_IMPORTEXPORT Import / Export XAO - - TOOL_IMPORTEXPORT - Import / Export XAO - TOP_EXPORTXAO Export XAO @@ -5222,6 +5170,61 @@ le paramètre '%1' aux préférences du module Géométrie.X=%1, Y=%2, Z=%3 + + GeometryGUI + + TOOL_BASIC + Objets de base + + + TOOL_BLOCKS + Blocs + + + TOOL_BOOLEAN + Opérations booléennes + + + TOOL_FEATURES + Modification + + + TOOL_GENERATION + Génération + + + TOOL_PRIMITIVES + Primitives + + + TOOL_TRANSFORMATION + Transformation + + + TOOL_BUILD + Construire + + + TOOL_OPERATIONS + Opérations + + + TOOL_PICTURES + Images + + + TOOL_ADVANCED + Avancé + + + TOOL_MEASURES + Informations + + + TOOL_IMPORTEXPORT + Import / Export XAO + + BasicGUI_CurveDlg diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index 2d39d9f4d..25a9bff66 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -3983,54 +3983,6 @@ TOM_X X - - TOOL_BASIC - 基礎オブジェクト - - - TOOL_BLOCKS - ブロック分割 - - - TOOL_BOOLEAN - ブーリアン操作 - - - TOOL_FEATURES - フィーチャー - - - TOOL_GENERATION - 押し出し/回転 - - - TOOL_PRIMITIVES - 基本図形 - - - TOOL_TRANSFORMATION - 変形/移動/回転 - - - TOOL_BUILD - 構築 - - - TOOL_OPERATIONS - 操作 - - - TOOL_PICTURES - 画像 - - - TOOL_ADVANCED - 高度なツール - - - TOOL_MEASURES - 情報/測定 - TOP_ARC 円弧を作成 @@ -5151,10 +5103,6 @@ MEN_IMPORTEXPORT インポート/エクスポート - - TOOL_IMPORTEXPORT - インポート/エクスポート - TOP_EXPORTXAO エクスポートしました。 @@ -5208,6 +5156,61 @@ X=%1, Y=%2, Z=%3 + + GeometryGUI + + TOOL_BASIC + 基礎オブジェクト + + + TOOL_BLOCKS + ブロック分割 + + + TOOL_BOOLEAN + ブーリアン操作 + + + TOOL_FEATURES + フィーチャー + + + TOOL_GENERATION + 押し出し/回転 + + + TOOL_PRIMITIVES + 基本図形 + + + TOOL_TRANSFORMATION + 変形/移動/回転 + + + TOOL_BUILD + 構築 + + + TOOL_OPERATIONS + 操作 + + + TOOL_PICTURES + 画像 + + + TOOL_ADVANCED + 高度なツール + + + TOOL_MEASURES + 情報/測定 + + + TOOL_IMPORTEXPORT + インポート/エクスポート + + BasicGUI_CurveDlg diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 1df722c35..fa594d236 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1344,7 +1344,7 @@ void GeometryGUI::initialize( CAM_Application* app ) // ---- create toolbars -------------------------- - int basicTbId = createTool( tr( "TOOL_BASIC" ) ); + int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) ); createTool( GEOMOp::OpPoint, basicTbId ); createTool( GEOMOp::OpLine, basicTbId ); createTool( GEOMOp::OpCircle, basicTbId ); @@ -1359,11 +1359,11 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpLCS, basicTbId ); createTool( GEOMOp::OpOriginAndVectors, basicTbId ); -// int sketchTbId = createTool( tr( "TOOL_SKETCH" ) ); +// int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) ); // createTool( GEOMOp::Op2dSketcher, sketchTbId ); // createTool( GEOMOp::Op3dSketcher, sketchTbId ); - int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) ); + int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) ); createTool( GEOMOp::OpBox, primTbId ); createTool( GEOMOp::OpCylinder, primTbId ); createTool( GEOMOp::OpSphere, primTbId ); @@ -1373,17 +1373,17 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpDisk, primTbId ); //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc - //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) ); + //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) ); //createTool( GEOMOp::OpDividedDisk, blocksTbId ); //createTool( GEOMOp::OpDividedCylinder, blocksTbId ); - int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) ); + int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) ); createTool( GEOMOp::OpFuse, boolTbId ); createTool( GEOMOp::OpCommon, boolTbId ); createTool( GEOMOp::OpCut, boolTbId ); createTool( GEOMOp::OpSection, boolTbId ); - int genTbId = createTool( tr( "TOOL_GENERATION" ) ); + int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) ); createTool( GEOMOp::OpPrism, genTbId ); createTool( GEOMOp::OpRevolution, genTbId ); createTool( GEOMOp::OpFilling, genTbId ); @@ -1392,7 +1392,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpPipePath, genTbId ); #endif - int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) ); + int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) ); createTool( GEOMOp::OpTranslate, transTbId ); createTool( GEOMOp::OpRotate, transTbId ); createTool( GEOMOp::OpChangeLoc, transTbId ); @@ -1404,14 +1404,14 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpMultiTranslate, transTbId ); createTool( GEOMOp::OpMultiRotate, transTbId ); - int operTbId = createTool( tr( "TOOL_OPERATIONS" ) ); + int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) ); createTool( GEOMOp::OpExplode, operTbId ); createTool( GEOMOp::OpPartition, operTbId ); createTool( GEOMOp::OpArchimede, operTbId ); createTool( GEOMOp::OpShapesOnShape, operTbId ); createTool( GEOMOp::OpSharedShapes, operTbId ); - int featTbId = createTool( tr( "TOOL_FEATURES" ) ); + int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) ); createTool( GEOMOp::OpFillet1d, featTbId ); createTool( GEOMOp::OpFillet2d, featTbId ); createTool( GEOMOp::OpFillet3d, featTbId ); @@ -1423,7 +1423,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpCurveCreator, featTbId ); #endif - int buildTbId = createTool( tr( "TOOL_BUILD" ) ); + int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) ); createTool( GEOMOp::OpEdge, buildTbId ); createTool( GEOMOp::OpWire, buildTbId ); createTool( GEOMOp::OpFace, buildTbId ); @@ -1431,7 +1431,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpSolid, buildTbId ); createTool( GEOMOp::OpCompound, buildTbId ); - int measureTbId = createTool( tr( "TOOL_MEASURES" ) ); + int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) ); createTool( GEOMOp::OpPointCoordinates, measureTbId ); createTool( GEOMOp::OpProperties, measureTbId ); createTool( GEOMOp::OpCenterMass, measureTbId ); @@ -1452,17 +1452,17 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpGetNonBlocks, measureTbId ); createTool( GEOMOp::OpCheckSelfInters, measureTbId ); - int picturesTbId = createTool( tr( "TOOL_PICTURES" ) ); + int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) ); createTool( GEOMOp::OpPictureImport, picturesTbId ); #ifdef WITH_OPENCV createTool( GEOMOp::OpFeatureDetect, picturesTbId ); #endif - int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) ); + int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ), QString( "GEOMImportExportXAO" ) ); createTool( GEOMOp::OpExportXAO, impexpTbId ); createTool( GEOMOp::OpImportXAO, impexpTbId ); - //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); + //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ), QString( "GEOMAdvanced" ) ); //createTool( GEOMOp::OpSmoothingSurface, advancedTbId ); //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@// @@ -1693,7 +1693,7 @@ void GeometryGUI::addPluginActions() // create "Advanced Operations" menu and corresponding toolbar //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10); - //int advancedTbarId = createTool(tr("TOOL_ADVANCED")); + //int advancedTbarId = createTool(tr("TOOL_ADVANCED"), QString( "Advanced" )); int id = GEOMOp::OpLastOperationID; // TODO? // loop on xmlFiles @@ -1763,7 +1763,7 @@ void GeometryGUI::addPluginActions() QString subTool = stools[0]; subTool = subTool.toUpper().prepend("TOOL_"); - int toolId = createTool(tr(subTool.toLatin1().constData())); + int toolId = createTool(tr(subTool.toLatin1().constData()), subTool.toLatin1().constData()); //createTool(id, advancedTbarId); createTool(id, toolId); From 416456b26175b67fe07e7ba24a827e1991313a35 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 28 Aug 2014 13:19:04 +0400 Subject: [PATCH 090/118] Switch on dev version flag --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9661b8460..856676c05 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ SET(${PROJECT_NAME_UC}_MINOR_VERSION 4) SET(${PROJECT_NAME_UC}_PATCH_VERSION 1) SET(${PROJECT_NAME_UC}_VERSION ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION}) -SET(${PROJECT_NAME_UC}_VERSION_DEV 0) +SET(${PROJECT_NAME_UC}_VERSION_DEV 1) # Find KERNEL # =========== From 2e1ae88a9e563876b1ff0c6ce608af798fd54122 Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 28 Aug 2014 18:16:28 +0400 Subject: [PATCH 091/118] Implementation of 0022617: [CEA 1060] In OCC view, add "Show vertices" in the contextual menu. --- doc/salome/gui/GEOM/images/vertices_mode.png | Bin 0 -> 9123 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/salome/gui/GEOM/images/vertices_mode.png diff --git a/doc/salome/gui/GEOM/images/vertices_mode.png b/doc/salome/gui/GEOM/images/vertices_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..deee2b8a7c447f3adb83cf92d931b7903c1ad08d GIT binary patch literal 9123 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 VB0Du1Jb?yKQ_@l_eP|i>{{U9=Qo{fM literal 0 HcmV?d00001 From 0f781d0d92e7d0d3a2ffb9004504507449b66c16 Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 29 Aug 2014 12:32:37 +0400 Subject: [PATCH 092/118] Switching-off the highlighting selected objects to avoid keeping object's wireframe in case of changing shape properties (for example: 'Clear Top Level State','Color', 'Isos') calling popup menu over the shape in OCC viewer. --- src/OBJECT/GEOM_AISShape.cxx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index 341018e89..fe26569e1 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -216,6 +216,10 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent if (IsInfinite()) aPrs->SetInfiniteState(Standard_True); //pas de prise en compte lors du FITALL Handle(AIS_InteractiveContext) anIC = GetContext(); + // AKL: use old behavior to avoid keeping object's wireframe + // if to change shape properties (for example: 'Clear Top Level State','Color', 'Isos') + // calling popup menu over(!) the shape in OCC viewer. + anIC->SetToHilightSelected( false ); bool anIsField = !myFieldStepData.isEmpty(); bool anIsColorField = anIsField && myFieldDataType != GEOM::FDT_String; From 04e80ddd750143bdd5e47e53ee2c624c6efd650b Mon Sep 17 00:00:00 2001 From: mpa Date: Thu, 11 Sep 2014 11:02:20 +0400 Subject: [PATCH 093/118] 0021671: EDF 1829 GEOM : Bring to front selected objects (continuation) - solved a problem with selection and pre-selection object in the "additional wireframe actor" mode; - added GEOM documentation --- .../gui/GEOM/input/geometry_preferences.doc | 14 +++++ src/OBJECT/GEOM_AISShape.cxx | 4 +- src/OBJECT/GEOM_TopWireframeShape.cxx | 55 +++++++++++-------- 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc index 6c1f7d03b..5e9e94e7d 100644 --- a/doc/salome/gui/GEOM/input/geometry_preferences.doc +++ b/doc/salome/gui/GEOM/input/geometry_preferences.doc @@ -33,6 +33,20 @@ default color for edges, vectors and wires (isolated lines). vertices.
  • Color of isolines - allows to select default color for isolines.
  • +
  • Top level color - allows to select default color for objects which +were brought to the viewer foreground.
  • +
  • Top level display mode - allows to select default top level display mode between:
  • +
      +
    • Show additional wireframe actor - allows to have the shading actor at its usual +place (in the back) and add the additional wireframe actor in the viewer foreground.
    • +
    • Keep current display mode - allows to use current display mode of object.
    • +
    • Wireframe - allows to switch display mode to wireframe mode after +"top-level" operation.
    • +
    • Shading - allows to switch display mode to shading mode after +"top-level" operation.
    • +
    • Shading With Edges - allows to switch display mode to shading with edges mode after +"top-level" operation.
    • +
  • Transparency - allows to define default transparency value.
  • Deflection coefficient - allows to define default deflection coefficient for lines and surfaces. A smaller coefficient provides diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index fe26569e1..f75b7a6b7 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -457,11 +457,11 @@ void GEOM_AISShape::setTopLevelDisplayMode(const GEOM_AISShape::TopLevelDispMode } Standard_Boolean GEOM_AISShape::switchTopLevel() { - return myTopLevelDm != TopShowAdditionalWActor; + return myTopLevelDm != TopShowAdditionalWActor; } Standard_Boolean GEOM_AISShape::toActivate() { - return Standard_True; + return ( myTopLevel && myTopLevelDm == TopShowAdditionalWActor ) ? false : true; } void GEOM_AISShape::setFieldStepInfo( const GEOM::field_data_type theFieldDataType, diff --git a/src/OBJECT/GEOM_TopWireframeShape.cxx b/src/OBJECT/GEOM_TopWireframeShape.cxx index 0cec60e0d..2a2101fff 100755 --- a/src/OBJECT/GEOM_TopWireframeShape.cxx +++ b/src/OBJECT/GEOM_TopWireframeShape.cxx @@ -43,64 +43,71 @@ #include #include -GEOM_TopWireframeShape::GEOM_TopWireframeShape(const TopoDS_Shape& shape) - : SALOME_AISShape(shape) +GEOM_TopWireframeShape::GEOM_TopWireframeShape( const TopoDS_Shape& shape ) + :SALOME_AISShape(shape) { - SetDisplayMode(AIS_WireFrame); - Handle(Prs3d_IsoAspect) anAspect = Attributes()->UIsoAspect(); - anAspect->SetNumber( 0 ); - Attributes()->SetUIsoAspect( anAspect ); - anAspect = Attributes()->VIsoAspect(); - anAspect->SetNumber( 0 ); - Attributes()->SetVIsoAspect( anAspect ); - SetColor(GEOM_AISShape::topLevelColor()); + SetDisplayMode( AIS_WireFrame ); + Handle(Prs3d_IsoAspect) anAspect = Attributes()->UIsoAspect(); + anAspect->SetNumber( 0 ); + Attributes()->SetUIsoAspect( anAspect ); + anAspect = Attributes()->VIsoAspect(); + anAspect->SetNumber( 0 ); + Attributes()->SetVIsoAspect( anAspect ); + SetColor( GEOM_AISShape::topLevelColor() ); } GEOM_TopWireframeShape::~GEOM_TopWireframeShape() { } -Handle(SALOME_InteractiveObject) GEOM_TopWireframeShape::getIO(){ +Handle(SALOME_InteractiveObject) GEOM_TopWireframeShape::getIO() +{ Handle(SALOME_InteractiveObject) IO; if ( !GetOwner().IsNull() ) IO = Handle(SALOME_InteractiveObject)::DownCast( GetOwner() ); return IO; } -Standard_Boolean GEOM_TopWireframeShape::hasIO(){ +Standard_Boolean GEOM_TopWireframeShape::hasIO() +{ return !getIO().IsNull(); } -void GEOM_TopWireframeShape::setName(const Standard_CString /*aName*/) +void GEOM_TopWireframeShape::setName( const Standard_CString /*aName*/ ) { } -Standard_CString GEOM_TopWireframeShape::getName(){ +Standard_CString GEOM_TopWireframeShape::getName() +{ return ""; } -void GEOM_TopWireframeShape::highlightSubShapes(const TColStd_IndexedMapOfInteger& /*aIndexMap*/, - const Standard_Boolean /*aHighlight*/ ) +void GEOM_TopWireframeShape::highlightSubShapes( const TColStd_IndexedMapOfInteger& /*aIndexMap*/, + const Standard_Boolean /*aHighlight*/ ) { } -Standard_Boolean GEOM_TopWireframeShape::isTopLevel() { +Standard_Boolean GEOM_TopWireframeShape::isTopLevel() +{ return Standard_True; } -void GEOM_TopWireframeShape::setTopLevel(Standard_Boolean /*f*/) { - +void GEOM_TopWireframeShape::setTopLevel( Standard_Boolean /*f*/ ) +{ } -Standard_Boolean GEOM_TopWireframeShape::toActivate() { - return Standard_False; +Standard_Boolean GEOM_TopWireframeShape::toActivate() +{ + return Standard_True; } -Standard_Boolean GEOM_TopWireframeShape::switchTopLevel() { - return Standard_True; +Standard_Boolean GEOM_TopWireframeShape::switchTopLevel() +{ + return Standard_True; } -void GEOM_TopWireframeShape::setIO(const Handle(SALOME_InteractiveObject)& io){ +void GEOM_TopWireframeShape::setIO( const Handle(SALOME_InteractiveObject)& io ) +{ SetOwner( io ); } From 4ffc08bf4b1ed5056d0c6c482dcc2d9ac0310941 Mon Sep 17 00:00:00 2001 From: mpa Date: Thu, 11 Sep 2014 13:02:10 +0400 Subject: [PATCH 094/118] moved method imageToPixmap() from GEOM_Displayer to GUI module (OCCViewer) as external --- src/GEOMGUI/GEOM_Displayer.cxx | 42 +--------------------------------- 1 file changed, 1 insertion(+), 41 deletions(-) diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index a012c220b..fbecdc54a 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -77,6 +77,7 @@ #include #include +#include // OCCT Includes #include @@ -158,47 +159,6 @@ namespace return aMap; } - //=========================================================================== - // Function : imageToPixmap - // Purpose : Concert QImage to OCCT pixmap - //=========================================================================== - static inline Handle(Image_PixMap) imageToPixmap( const QImage& anImage ) - { - Handle(Image_PixMap) aPixmap = new Image_PixMap(); - if ( !anImage.isNull() ) { - aPixmap->InitTrash( Image_PixMap::ImgBGRA, anImage.width(), anImage.height() ); - aPixmap->SetTopDown( Standard_True ); - - const uchar* aImageBytes = anImage.bits(); - - for ( int aLine = anImage.height() - 1; aLine >= 0; --aLine ) { -#if OCC_VERSION_LARGE > 0x06070100 - // convert pixels from ARGB to renderer-compatible RGBA - for ( int aByte = 0; aByte < anImage.width(); ++aByte ) { - Image_ColorBGRA& aPixmapBytes = aPixmap->ChangeValue(aLine, aByte); - - aPixmapBytes.b() = (Standard_Byte) *aImageBytes++; - aPixmapBytes.g() = (Standard_Byte) *aImageBytes++; - aPixmapBytes.r() = (Standard_Byte) *aImageBytes++; - aPixmapBytes.a() = (Standard_Byte) *aImageBytes++; - } -#else - Image_ColorBGRA* aPixmapBytes = aPixmap->EditData().ChangeRow(aLine); - - // convert pixels from ARGB to renderer-compatible RGBA - for ( int aByte = 0; aByte < anImage.width(); ++aByte ) { - aPixmapBytes->b() = (Standard_Byte) *aImageBytes++; - aPixmapBytes->g() = (Standard_Byte) *aImageBytes++; - aPixmapBytes->r() = (Standard_Byte) *aImageBytes++; - aPixmapBytes->a() = (Standard_Byte) *aImageBytes++; - aPixmapBytes++; - } -#endif - } - } - return aPixmap; - } - //=========================================================================== // Function : getDefaultTexture // Purpose : Get default texture From be7aba2cacb16f7fc4423500cb5eaccc900be502 Mon Sep 17 00:00:00 2001 From: akl Date: Mon, 15 Sep 2014 18:32:37 +0400 Subject: [PATCH 095/118] Fix according to note 0018123 from 0022617: [CEA 1060]: 1) taking into account user's point marker; 2) add 'Point Marker' item into popup menu for all GEOM objects to have possibility modify the 'point marker'. --- src/GEOMGUI/GEOM_Displayer.cxx | 5 +++-- src/GEOMGUI/GeometryGUI.cxx | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index fbecdc54a..86b330c58 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -832,7 +832,8 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() ); // set display vertices flag - AISShape->SetDisplayVertices( propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool() ); + bool isVerticesMode = propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool(); + AISShape->SetDisplayVertices( isVerticesMode ); // set transparency if( HasTransparency() ) { @@ -918,7 +919,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap AISShape->setTopLevel( propMap.value( GEOM::propertyName( GEOM::TopLevel ) ).toBool() ); // set point marker (for vertex / compound of vertices only) - if ( onlyVertex ) { + if ( onlyVertex || isVerticesMode ) { QStringList aList = propMap.value( GEOM::propertyName( GEOM::PointMarker ) ).toString().split( GEOM::subSectionSeparator() ); if ( aList.size() == 2 ) { // standard marker string contains "TypeOfMarker:ScaleOfMarker" diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index fa594d236..044f0692f 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1539,8 +1539,7 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker - //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule ); - mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule ); // material properties mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); From bd2026a3833d537c9034ba90d52d2aa2f16468c8 Mon Sep 17 00:00:00 2001 From: akl Date: Tue, 16 Sep 2014 15:33:19 +0400 Subject: [PATCH 096/118] Fixing visibility of standalone vertices when 'Vertices' display mode is switched off. --- src/OBJECT/GEOM_Actor.cxx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index 851b83ab1..a5cdfbfcb 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -357,7 +357,7 @@ SetVisibility(int theVisibility) myOneFaceEdgeActor->SetVisibility(theVisibility && (myDisplayMode == (int)eWireframe || myDisplayMode == (int)eShadingWithEdges) && !myIsSelected); myIsolatedEdgeActor->SetVisibility(theVisibility && !myIsSelected); - myVertexActor->SetVisibility(theVisibility && myVerticesMode && (!myIsSelected && !myIsPreselected));// must be added new mode points + myVertexActor->SetVisibility(theVisibility && (isOnlyVertex || (myVerticesMode && (!myIsSelected && !myIsPreselected))));// must be added new mode points } @@ -398,8 +398,13 @@ GEOM_Actor ::SetVerticesMode(bool theMode) { myVerticesMode = theMode; - theMode ? myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE+2) : myPreHighlightProp->SetPointSize(0); - theMode ? myHighlightProp->SetPointSize(SALOME_POINT_SIZE) : myHighlightProp->SetPointSize(0); + if ( theMode || isOnlyVertex ) { + myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE+2); + myHighlightProp->SetPointSize(SALOME_POINT_SIZE); + } else { + myPreHighlightProp->SetPointSize(0); + myHighlightProp->SetPointSize(0); + } SetModified(); } From d50ae9ad41b362bef2d058c53c0abeb5ed089db0 Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 17 Sep 2014 12:30:45 +0400 Subject: [PATCH 097/118] Fixing visibility of standalone vertices in compound in VTK viewer. --- src/GEOMGUI/GEOMGUI_Selection.cxx | 3 ++- src/OBJECT/GEOM_Actor.cxx | 42 ++++++++++++++++++++++++++----- src/OBJECT/GEOM_Actor.h | 4 +++ src/OCC2VTK/OCC2VTK_Tools.cxx | 6 +++++ src/OCC2VTK/OCC2VTK_Tools.h | 2 ++ src/VTKExport/VTKExport.cxx | 1 + 6 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index a2ad57d4b..583a73078 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -721,7 +721,8 @@ bool GEOMGUI_Selection::isPhysicalMaterial( const int idx ) const GEOM_Actor* aGeomGActor = GEOM_Actor::SafeDownCast( actor ); if ( aGeomGActor ) { GEOM_VTKPropertyMaterial* mat = GEOM_VTKPropertyMaterial::SafeDownCast(aGeomGActor->GetProperty()); - res = mat->GetPhysical(); + if ( mat ) + res = mat->GetPhysical(); } // if ( salome actor ) } // if ( actor ) } // if ( lst == vtkPrs->GetObjects() ) diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index a5cdfbfcb..1b15c5640 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -87,6 +87,9 @@ GEOM_Actor::GEOM_Actor(): myVertexActor(GEOM_DeviceActor::New(),true), myVertexSource(GEOM_VertexSource::New(),true), + myStandaloneVertexActor(GEOM_DeviceActor::New(),true), + myStandaloneVertexSource(GEOM_VertexSource::New(),true), + myIsolatedEdgeActor(GEOM_DeviceActor::New(),true), myIsolatedEdgeSource(GEOM_EdgeSource::New(),true), @@ -130,13 +133,13 @@ GEOM_Actor::GEOM_Actor(): myHighlightProp->SetAmbientColor(1, 1, 1); myHighlightProp->SetDiffuseColor(1, 1, 1); myHighlightProp->SetSpecularColor(0.5, 0.5, 0.5); - myHighlightProp->SetPointSize(0); + myHighlightProp->SetPointSize(SALOME_POINT_SIZE+2); myHighlightActor->SetProperty(myHighlightProp.GetPointer()); this->myHighlightActor->SetInput(myAppendFilter->GetOutputPort(),false); myPreHighlightProp->SetColor(0,1,1); - myPreHighlightProp->SetPointSize(0); + myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE); myPreHighlightProp->SetLineWidth(SALOME_LINE_WIDTH+1); myPreHighlightProp->SetRepresentationToWireframe(); @@ -147,6 +150,13 @@ GEOM_Actor::GEOM_Actor(): aProperty->SetPointSize(3); aProperty->SetColor(1, 1, 0); + myAppendFilter->AddInputConnection(myStandaloneVertexSource->GetOutputPort()); + myStandaloneVertexActor->SetInput(myStandaloneVertexSource->GetOutputPort(),false); + aProperty = myStandaloneVertexActor->GetProperty(); + aProperty->SetRepresentation(VTK_POINTS); + aProperty->SetPointSize(3); + aProperty->SetColor(1, 1, 0); + myAppendFilter->AddInputConnection(myIsolatedEdgeSource->GetOutputPort()); myIsolatedEdgeActor->SetInput(myIsolatedEdgeSource->GetOutputPort(),false); aProperty = myIsolatedEdgeActor->GetProperty(); @@ -229,6 +239,7 @@ GEOM_Actor:: SetModified() { this->myVertexSource->Modified(); + this->myStandaloneVertexSource->Modified(); this->myIsolatedEdgeSource->Modified(); this->myOneFaceEdgeSource->Modified(); this->mySharedEdgeSource->Modified(); @@ -262,6 +273,7 @@ AddToRender(vtkRenderer* theRenderer) myIsolatedEdgeActor->AddToRender(theRenderer); myVertexActor->AddToRender(theRenderer); + myStandaloneVertexActor->AddToRender(theRenderer); } void @@ -282,6 +294,7 @@ RemoveFromRender(vtkRenderer* theRenderer) myIsolatedEdgeActor->RemoveFromRender(theRenderer); myVertexActor->RemoveFromRender(theRenderer); + myStandaloneVertexActor->RemoveFromRender(theRenderer); SetSelected(false); @@ -358,6 +371,8 @@ SetVisibility(int theVisibility) myIsolatedEdgeActor->SetVisibility(theVisibility && !myIsSelected); myVertexActor->SetVisibility(theVisibility && (isOnlyVertex || (myVerticesMode && (!myIsSelected && !myIsPreselected))));// must be added new mode points + + myStandaloneVertexActor->SetVisibility(theVisibility); } @@ -399,11 +414,9 @@ GEOM_Actor { myVerticesMode = theMode; if ( theMode || isOnlyVertex ) { - myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE+2); - myHighlightProp->SetPointSize(SALOME_POINT_SIZE); + myAppendFilter->AddInputConnection(myVertexSource->GetOutputPort()); } else { - myPreHighlightProp->SetPointSize(0); - myHighlightProp->SetPointSize(0); + myAppendFilter->RemoveInputConnection(0, myVertexSource->GetOutputPort()); } SetModified(); } @@ -436,6 +449,7 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape, myShape = theShape; myVertexSource->Clear(); + myStandaloneVertexSource->Clear(); myIsolatedEdgeSource->Clear(); myOneFaceEdgeSource->Clear(); mySharedEdgeSource->Clear(); @@ -456,6 +470,7 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape, TopExp::MapShapesAndAncestors(theShape,TopAbs_EDGE,TopAbs_FACE,anEdgeMap); GEOM::SetShape(theShape,anEdgeMap,theIsVector, + myStandaloneVertexSource.Get(), myIsolatedEdgeSource.Get(), myOneFaceEdgeSource.Get(), mySharedEdgeSource.Get(), @@ -471,6 +486,7 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape, if((bool)myShape.Infinite() || isOnlyVertex ){ myVertexActor->GetDeviceActor()->SetInfinitive(true); + myStandaloneVertexActor->GetDeviceActor()->SetInfinitive(true); myHighlightActor->GetDeviceActor()->SetInfinitive(true); } @@ -526,6 +542,11 @@ vtkProperty* GEOM_Actor::GetVertexProperty() return myVertexActor->GetProperty(); } +vtkProperty* GEOM_Actor::GetStandaloneVertexProperty() +{ + return myStandaloneVertexActor->GetProperty(); +} + vtkProperty* GEOM_Actor::GetSharedEdgeProperty() { return mySharedEdgeActor->GetProperty(); @@ -715,6 +736,7 @@ void GEOM_Actor::SetOpacity(double opa) myHighlightProp->SetOpacity(opa); myPreHighlightProp->SetOpacity(opa); myVertexActor->GetProperty()->SetOpacity(opa); + myStandaloneVertexActor->GetProperty()->SetOpacity(opa); } double GEOM_Actor::GetOpacity() @@ -755,6 +777,7 @@ void GEOM_Actor::GetColor(double& r,double& g,double& b) void GEOM_Actor::SetPointColor(double r, double g, double b) { myVertexActor->GetProperty()->SetColor(r, g, b); + myStandaloneVertexActor->GetProperty()->SetColor(r, g, b); } /*! @@ -818,6 +841,7 @@ void GEOM_Actor::SetMaterial(std::vector theProps) aCoefnt = theProps[0]->GetAmbient(); myShadingFaceProp->SetAmbient(aCoefnt); myVertexActor->GetProperty()->SetAmbient(aCoefnt); + myStandaloneVertexActor->GetProperty()->SetAmbient(aCoefnt); if ( aSize == 2 ) aCoefnt = theProps[1]->GetAmbient(); myShadingBackFaceProp->SetAmbient(aCoefnt); @@ -826,6 +850,7 @@ void GEOM_Actor::SetMaterial(std::vector theProps) aCoefnt = theProps[0]->GetDiffuse(); myShadingFaceProp->SetDiffuse(aCoefnt); myVertexActor->GetProperty()->SetDiffuse(aCoefnt); + myStandaloneVertexActor->GetProperty()->SetDiffuse(aCoefnt); if ( aSize == 2 ) aCoefnt = theProps[1]->GetDiffuse(); myShadingBackFaceProp->SetDiffuse(aCoefnt); @@ -834,6 +859,7 @@ void GEOM_Actor::SetMaterial(std::vector theProps) aCoefnt = theProps[0]->GetSpecular(); myShadingFaceProp->SetSpecular(aCoefnt); myVertexActor->GetProperty()->SetSpecular(aCoefnt); + myStandaloneVertexActor->GetProperty()->SetSpecular(aCoefnt); if ( aSize == 2 ) aCoefnt = theProps[1]->GetSpecular(); myShadingBackFaceProp->SetSpecular(aCoefnt); @@ -845,6 +871,7 @@ void GEOM_Actor::SetMaterial(std::vector theProps) aColor = theProps[0]->GetAmbientColor(); myShadingFaceProp->SetAmbientColor(aColor[0], aColor[1], aColor[2]); myVertexActor->GetProperty()->SetAmbientColor(aColor[0], aColor[1], aColor[2]); + myStandaloneVertexActor->GetProperty()->SetAmbientColor(aColor[0], aColor[1], aColor[2]); if ( aSize == 2 ) aColor = theProps[1]->GetAmbientColor(); myShadingBackFaceProp->SetAmbientColor(aColor[0], aColor[1], aColor[2]); @@ -853,6 +880,7 @@ void GEOM_Actor::SetMaterial(std::vector theProps) aColor = theProps[0]->GetDiffuseColor(); myShadingFaceProp->SetDiffuseColor(aColor[0], aColor[1], aColor[2]); myVertexActor->GetProperty()->SetDiffuseColor(aColor[0], aColor[1], aColor[2]); + myStandaloneVertexActor->GetProperty()->SetDiffuseColor(aColor[0], aColor[1], aColor[2]); if ( aSize == 2 ) aColor = theProps[1]->GetDiffuseColor(); myShadingBackFaceProp->SetDiffuseColor(aColor[0], aColor[1], aColor[2]); @@ -861,6 +889,7 @@ void GEOM_Actor::SetMaterial(std::vector theProps) aColor = theProps[0]->GetSpecularColor(); myShadingFaceProp->SetSpecularColor(aColor[0], aColor[1], aColor[2]); myVertexActor->GetProperty()->SetSpecularColor(aColor[0], aColor[1], aColor[2]); + myStandaloneVertexActor->GetProperty()->SetSpecularColor(aColor[0], aColor[1], aColor[2]); if ( aSize == 2 ) aColor = theProps[1]->GetSpecularColor(); myShadingBackFaceProp->SetSpecularColor(aColor[0], aColor[1], aColor[2]); @@ -869,6 +898,7 @@ void GEOM_Actor::SetMaterial(std::vector theProps) aCoefnt = theProps[0]->GetSpecularPower(); myShadingFaceProp->SetSpecularPower(aCoefnt); myVertexActor->GetProperty()->SetSpecularPower(aCoefnt); + myStandaloneVertexActor->GetProperty()->SetSpecularPower(aCoefnt); if ( aSize == 2 ) aCoefnt = theProps[1]->GetSpecularPower(); myShadingBackFaceProp->SetSpecularPower(aCoefnt); diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h index 173f40a0b..117f1afcb 100644 --- a/src/OBJECT/GEOM_Actor.h +++ b/src/OBJECT/GEOM_Actor.h @@ -89,6 +89,7 @@ public: vtkProperty* GetShadingProperty(); vtkProperty* GetIsolatedEdgeProperty(); vtkProperty* GetVertexProperty(); + vtkProperty* GetStandaloneVertexProperty(); vtkProperty* GetSharedEdgeProperty(); vtkProperty* GetFaceEdgeProperty(); @@ -234,6 +235,9 @@ private: PDeviceActor myVertexActor; PVertexSource myVertexSource; + PDeviceActor myStandaloneVertexActor; + PVertexSource myStandaloneVertexSource; + PDeviceActor myIsolatedEdgeActor; PEdgeSource myIsolatedEdgeSource; diff --git a/src/OCC2VTK/OCC2VTK_Tools.cxx b/src/OCC2VTK/OCC2VTK_Tools.cxx index 8e325c887..e9b592035 100755 --- a/src/OCC2VTK/OCC2VTK_Tools.cxx +++ b/src/OCC2VTK/OCC2VTK_Tools.cxx @@ -88,6 +88,7 @@ namespace GEOM void SetShape(const TopoDS_Shape& theShape, const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap, bool theIsVector, + GEOM_VertexSource* theStandaloneVertexSource, GEOM_EdgeSource* theIsolatedEdgeSource, GEOM_EdgeSource* theOneFaceEdgeSource, GEOM_EdgeSource* theSharedEdgeSource, @@ -98,6 +99,7 @@ namespace GEOM TopoDS_Iterator anItr(theShape); for (; anItr.More(); anItr.Next()) { SetShape(anItr.Value(),theEdgeMap,theIsVector, + theStandaloneVertexSource, theIsolatedEdgeSource, theOneFaceEdgeSource, theSharedEdgeSource, @@ -123,6 +125,10 @@ namespace GEOM break; } case TopAbs_VERTEX: { + if ( theStandaloneVertexSource ) { + const TopoDS_Vertex& aVertex = TopoDS::Vertex(theShape); + theStandaloneVertexSource->AddVertex(aVertex); + } break; } default: { diff --git a/src/OCC2VTK/OCC2VTK_Tools.h b/src/OCC2VTK/OCC2VTK_Tools.h index c4fb478c6..523ca14b9 100755 --- a/src/OCC2VTK/OCC2VTK_Tools.h +++ b/src/OCC2VTK/OCC2VTK_Tools.h @@ -25,6 +25,7 @@ #include #include +class GEOM_VertexSource; class GEOM_EdgeSource; class GEOM_WireframeFace; class GEOM_ShadingFace; @@ -40,6 +41,7 @@ namespace GEOM OCC2VTK_EXPORT void SetShape(const TopoDS_Shape& theShape, const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap, bool theIsVector, + GEOM_VertexSource* theStandaloneVertexSource, GEOM_EdgeSource* theIsolatedEdgeSource, GEOM_EdgeSource* theOneFaceEdgeSource, GEOM_EdgeSource* theSharedEdgeSource, diff --git a/src/VTKExport/VTKExport.cxx b/src/VTKExport/VTKExport.cxx index bc342d396..ab853c4af 100644 --- a/src/VTKExport/VTKExport.cxx +++ b/src/VTKExport/VTKExport.cxx @@ -119,6 +119,7 @@ extern "C" GEOM::SetShape( theShape, anEdgeMap, anIsVector, + 0, // all vertices were added above myIsolatedEdgeSource, myOneFaceEdgeSource, mySharedEdgeSource, From aaea242262db5525ffcb4b90b65515048c0c00b5 Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 18 Sep 2014 12:39:44 +0400 Subject: [PATCH 098/118] 'fr' and 'ja' translations for 0022617: [CEA 1060] In OCC view, add "Show vertices" in the contextual menu. --- src/GEOMGUI/GEOM_msg_fr.ts | 16 ++++++++++++++++ src/GEOMGUI/GEOM_msg_ja.ts | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 6a506ac76..8f0b1cf93 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -2908,6 +2908,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau MEN_POP_VECTORS Afficher l'orientation des arêtes + + MEN_POP_VERTICES + Show Vertices + MEN_PREFERENCES Préférences @@ -3076,6 +3080,14 @@ Choisissez une face, une coque ou un solide et essayez de nouveau MEN_VECTOR_MODE_OFF Cacher l'orientation de l'arête + + MEN_VERTICES_MODE_ON + Show Vertices + + + MEN_VERTICES_MODE_OFF + Hide Vertices + MEN_WIREFRAME Filaire @@ -3772,6 +3784,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_POP_VECTORS Afficher l'orientation des arêtes + + STB_POP_VERTICES + Show Vertices + STB_POP_SETTEXTURE Ajoute une texture diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index 25a9bff66..11b374459 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -2891,6 +2891,10 @@ MEN_POP_VECTORS ベクトル方向表示 + + MEN_POP_VERTICES + Show Vertices + MEN_PREFERENCES 設定 @@ -3063,6 +3067,14 @@ MEN_VECTOR_MODE_OFF エッジの方向を非表示 + + MEN_VERTICES_MODE_ON + Show Vertices + + + MEN_VERTICES_MODE_OFF + Hide Vertices + MEN_WIREFRAME ワイヤ フレーム @@ -3759,6 +3771,10 @@ STB_POP_VECTORS エッジの方向を表示します。 + + STB_POP_VERTICES + Show Vertices + STB_POP_SETTEXTURE テクスチャを追加します。 From aeddae77192d933be1aee8855d8f7c525878cad9 Mon Sep 17 00:00:00 2001 From: rnv Date: Wed, 4 Jun 2014 15:17:38 +0400 Subject: [PATCH 099/118] 0022616: [CEA 1038] Improve the quality of stl and vtk exports --- CMakeLists.txt | 12 +- SalomeGEOMConfig.cmake.in | 30 +- adm_local/cmake_files/FindGEOM.cmake | 28 +- bin/geom_setenv.py | 107 +- doc/salome/examples/import_export.py | 2 +- doc/salome/gui/GEOM/CMakeLists.txt | 15 +- doc/salome/gui/GEOM/collect_geom_methods.py | 148 + doc/salome/gui/GEOM/doxyfile_py.in | 9 +- doc/salome/gui/GEOM/images/exportxao_dlg.png | Bin 9423 -> 16652 bytes doc/salome/gui/GEOM/images/geomexport.png | Bin 29200 -> 33999 bytes doc/salome/gui/GEOM/images/geomimport.png | Bin 22327 -> 28994 bytes doc/salome/gui/GEOM/images/importxao_dlg.png | Bin 0 -> 8640 bytes .../gui/GEOM/images/sat_named_shapes.png | Bin 7159 -> 0 bytes doc/salome/gui/GEOM/input/import_export.doc | 96 +- doc/salome/gui/GEOM/input/index.doc | 2 +- .../GEOM/input/tui_importexport_geom_objs.doc | 2 +- doc/salome/gui/GEOM/input/xao_format.doc | 24 - idl/AdvancedGEOM.idl | 479 + idl/BREPPlugin.idl | 51 + idl/CMakeLists.txt | 63 + idl/GEOM_Gen.idl | 511 +- idl/GEOM_Superv.idl | 50 +- idl/IGESPlugin.idl | 67 + idl/STEPPlugin.idl | 66 + idl/STLPlugin.idl | 59 + idl/VTKPlugin.idl | 45 + idl/XAOPlugin.idl | 64 + .../{GEOMActions.xml => AdvancedGEOM.xml} | 2 +- resources/BREPPlugin.xml | 45 + resources/CMakeLists.txt | 9 +- resources/GEOMCatalog.xml.in | 12619 +++++++++------- resources/IGESPlugin.xml | 43 + resources/ImportExport | 30 - resources/STEPPlugin.xml | 43 + resources/STLPlugin.xml | 43 + resources/SalomeApp.xml.in | 8 +- resources/VTKPlugin.xml | 39 + resources/XAOPlugin.xml | 43 + src/AdvancedEngine/AdvancedEngine.cxx | 19 +- ..._AdvancedEngine.hxx => AdvancedEngine.hxx} | 0 ...x => AdvancedEngine_DividedDiskDriver.cxx} | 37 +- ...x => AdvancedEngine_DividedDiskDriver.hxx} | 38 +- ...sk.hxx => AdvancedEngine_IDividedDisk.hxx} | 10 +- ...ons.cxx => AdvancedEngine_IOperations.cxx} | 205 +- ...ons.hxx => AdvancedEngine_IOperations.hxx} | 72 +- ...s_i.cc => AdvancedEngine_IOperations_i.cc} | 73 +- ...s_i.hh => AdvancedEngine_IOperations_i.hh} | 32 +- ...ape.hxx => AdvancedEngine_IPipeTShape.hxx} | 10 +- ...x => AdvancedEngine_ISmoothingSurface.hxx} | 10 +- .../AdvancedEngine_OperationsCreator.cc | 73 - .../AdvancedEngine_OperationsCreator.cxx | 69 + ...h => AdvancedEngine_OperationsCreator.hxx} | 29 +- ...xx => AdvancedEngine_PipeTShapeDriver.cxx} | 68 +- ...xx => AdvancedEngine_PipeTShapeDriver.hxx} | 46 +- ...AdvancedEngine_SmoothingSurfaceDriver.cxx} | 31 +- ...AdvancedEngine_SmoothingSurfaceDriver.hxx} | 51 +- src/AdvancedEngine/AdvancedEngine_Types.hxx | 14 +- src/AdvancedEngine/CMakeLists.txt | 37 +- ...edGUI_images.ts => AdvancedGEOM_images.ts} | 0 ...edGUI_msg_en.ts => AdvancedGEOM_msg_en.ts} | 0 ...edGUI_msg_fr.ts => AdvancedGEOM_msg_fr.ts} | 0 ...edGUI_msg_ja.ts => AdvancedGEOM_msg_ja.ts} | 0 .../AdvancedGUI_DividedCylinderDlg.cxx | 3 +- .../AdvancedGUI_DividedCylinderDlg.h | 3 + .../AdvancedGUI_DividedDiskDlg.cxx | 4 +- src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h | 3 + src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx | 6 +- .../AdvancedGUI_SmoothingSurfaceDlg.cxx | 6 +- src/AdvancedGUI/CMakeLists.txt | 13 +- src/BREPExport/BREPExport.cxx | 64 - src/BREPExport/CMakeLists.txt | 52 - src/BREPImport/BREPImport.cxx | 70 - src/BREPImport/CMakeLists.txt | 52 - src/BREPPlugin/BREPPlugin_Engine.cxx | 31 + src/BREPPlugin/BREPPlugin_Engine.hxx | 33 + src/BREPPlugin/BREPPlugin_ExportDriver.cxx | 108 + src/BREPPlugin/BREPPlugin_ExportDriver.hxx | 51 + src/BREPPlugin/BREPPlugin_GUI.cxx | 266 + src/BREPPlugin/BREPPlugin_GUI.h | 40 + src/BREPPlugin/BREPPlugin_IECallBack.cxx | 72 + src/BREPPlugin/BREPPlugin_IECallBack.hxx | 49 + src/BREPPlugin/BREPPlugin_IExport.hxx | 48 + src/BREPPlugin/BREPPlugin_IImport.hxx | 42 + src/BREPPlugin/BREPPlugin_IOperations.cxx | 171 + src/BREPPlugin/BREPPlugin_IOperations.hxx | 42 + src/BREPPlugin/BREPPlugin_IOperations_i.cc | 108 + src/BREPPlugin/BREPPlugin_IOperations_i.hh | 52 + src/BREPPlugin/BREPPlugin_ImportDriver.cxx | 122 + src/BREPPlugin/BREPPlugin_ImportDriver.hxx | 51 + .../BREPPlugin_OperationsCreator.cxx | 69 + .../BREPPlugin_OperationsCreator.hxx | 57 + src/BREPPlugin/BREPPlugin_msg_en.ts | 46 + src/BREPPlugin/BREPPlugin_msg_fr.ts | 46 + src/BREPPlugin/BREPPlugin_msg_ja.ts | 46 + src/BREPPlugin/CMakeLists.txt | 147 + src/CMakeLists.txt | 10 +- src/DlgRef/CMakeLists.txt | 1 - src/DlgRef/DlgRef.cxx | 14 - src/DlgRef/DlgRef.h | 16 - src/GEOM/CMakeLists.txt | 1 + src/GEOM/GEOM_BaseDriver.cxx | 16 + src/GEOM/GEOM_BaseDriver.hxx | 4 +- src/GEOMBase/CMakeLists.txt | 3 + src/GEOMBase/GEOMBase_DlgSkeleton.cxx | 168 + src/GEOMBase/GEOMBase_DlgSkeleton.h | 75 + src/GEOMBase/GEOMBase_Skeleton.cxx | 14 +- src/GEOMBase/GEOMBase_Skeleton.h | 11 +- src/GEOMBase/GEOM_GenericObjPtr.h | 1 - src/GEOMGUI/CMakeLists.txt | 3 - src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx | 1 - src/GEOMGUI/GEOMGUI_XmlHandler.cxx | 158 - src/GEOMGUI/GEOMGUI_XmlHandler.h | 90 - src/GEOMGUI/GEOM_images.ts | 20 - src/GEOMGUI/GEOM_msg_en.ts | 147 +- src/GEOMGUI/GEOM_msg_fr.ts | 147 +- src/GEOMGUI/GEOM_msg_ja.ts | 146 +- src/GEOMGUI/GeometryGUI.cxx | 225 +- src/GEOMGUI/GeometryGUI_Operations.h | 5 - src/GEOMImpl/CMakeLists.txt | 7 +- src/GEOMImpl/GEOMImpl_ExportDriver.cxx | 67 +- src/GEOMImpl/GEOMImpl_ExportDriver.hxx | 17 - src/GEOMImpl/GEOMImpl_Gen.cxx | 4 - src/GEOMImpl/GEOMImpl_IBaseIEOperations.cxx | 230 + src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx | 53 + src/GEOMImpl/GEOMImpl_IECallBack.cxx | 115 + src/GEOMImpl/GEOMImpl_IECallBack.hxx | 67 + src/GEOMImpl/GEOMImpl_IInsertOperations.cxx | 1177 +- src/GEOMImpl/GEOMImpl_IInsertOperations.hxx | 51 - src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx | 2 +- src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 58 +- src/GEOMImpl/GEOMImpl_IShapesOperations.hxx | 18 +- src/GEOMImpl/GEOMImpl_ImportDriver.cxx | 138 +- src/GEOMImpl/GEOMImpl_ImportDriver.hxx | 23 - src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 2 +- src/GEOMImpl/GEOMImpl_Types.hxx | 15 +- src/GEOMImpl/GEOMImpl_XAODriver.cxx | 129 - src/GEOMImpl/GEOMImpl_XAODriver.hxx | 148 - src/GEOMImpl/GUID.txt | 2 - src/GEOMToolsGUI/GEOMToolsGUI.cxx | 475 - src/GEOMToolsGUI/GEOMToolsGUI.h | 3 - src/GEOMUtils/CMakeLists.txt | 5 + src/GEOMUtils/GEOMUtils.cxx | 496 +- src/GEOMUtils/GEOMUtils.hxx | 34 +- src/GEOMUtils/GEOMUtils_Hatcher.cxx | 24 +- src/GEOMUtils/GEOMUtils_Hatcher.hxx | 309 +- src/GEOMUtils/GEOMUtils_XmlHandler.cxx | 235 + src/GEOMUtils/GEOMUtils_XmlHandler.hxx | 56 + src/GEOM_I/CMakeLists.txt | 4 +- src/GEOM_I/GEOM_Gen_i.cc | 220 +- src/GEOM_I/GEOM_Gen_i.hh | 2 + src/GEOM_I/GEOM_IInsertOperations_i.cc | 220 +- src/GEOM_I/GEOM_IInsertOperations_i.hh | 18 - src/GEOM_I/GEOM_wrap.hxx | 2 - src/GEOM_I_Superv/CMakeLists.txt | 8 + src/GEOM_I_Superv/GEOM_Superv_i.cc | 298 +- src/GEOM_I_Superv/GEOM_Superv_i.hh | 71 +- src/GEOM_SWIG/AdvancedGEOMBuilder.py | 572 + src/GEOM_SWIG/BREPPluginBuilder.py | 91 + src/GEOM_SWIG/CMakeLists.txt | 58 + src/GEOM_SWIG/IGESPluginBuilder.py | 132 + src/GEOM_SWIG/STEPPluginBuilder.py | 128 + src/GEOM_SWIG/STLPluginBuilder.py | 100 + src/GEOM_SWIG/VTKPluginBuilder.py | 50 + src/GEOM_SWIG/XAOPluginBuilder.py | 61 + src/GEOM_SWIG/geomBuilder.py | 820 +- src/IGESExport/CMakeLists.txt | 52 - src/IGESExport/IGESExport.cxx | 173 - src/IGESImport/CMakeLists.txt | 53 - src/IGESImport/IGESImport.cxx | 250 - src/IGESPlugin/CMakeLists.txt | 149 + src/IGESPlugin/IGESPlugin_Engine.cxx | 31 + src/IGESPlugin/IGESPlugin_Engine.hxx | 33 + src/IGESPlugin/IGESPlugin_ExportDlg.cxx | 88 + src/IGESPlugin/IGESPlugin_ExportDlg.h | 44 + src/IGESPlugin/IGESPlugin_ExportDriver.cxx | 198 + src/IGESPlugin/IGESPlugin_ExportDriver.hxx | 51 + src/IGESPlugin/IGESPlugin_GUI.cxx | 305 + src/IGESPlugin/IGESPlugin_GUI.h | 40 + src/IGESPlugin/IGESPlugin_IECallBack.cxx | 87 + src/IGESPlugin/IGESPlugin_IECallBack.hxx | 54 + src/IGESPlugin/IGESPlugin_IExport.hxx | 54 + src/IGESPlugin/IGESPlugin_IImport.hxx | 48 + src/IGESPlugin/IGESPlugin_IOperations.cxx | 210 + src/IGESPlugin/IGESPlugin_IOperations.hxx | 47 + src/IGESPlugin/IGESPlugin_IOperations_i.cc | 130 + src/IGESPlugin/IGESPlugin_IOperations_i.hh | 53 + src/IGESPlugin/IGESPlugin_ImportDriver.cxx | 292 + src/IGESPlugin/IGESPlugin_ImportDriver.hxx | 56 + .../IGESPlugin_OperationsCreator.cxx | 72 + .../IGESPlugin_OperationsCreator.hxx | 57 + src/IGESPlugin/IGESPlugin_msg_en.ts | 58 + src/IGESPlugin/IGESPlugin_msg_fr.ts | 58 + src/IGESPlugin/IGESPlugin_msg_ja.ts | 57 + src/ImportExportGUI/CMakeLists.txt | 92 - .../ImportExportGUI_ExportXAODlg.cxx | 450 - src/OBJECT/GEOM_OCCReader.cxx | 4 +- src/OBJECT/GEOM_OCCReader.h | 15 +- src/OCC2VTK/GEOM_FaceSource.h | 2 +- src/OCC2VTK/GEOM_WireframeFace.cxx | 8 +- src/OCC2VTK/GEOM_WireframeFace.h | 16 +- src/STEPExport/CMakeLists.txt | 52 - src/STEPExport/STEPExport.cxx | 91 - src/STEPImport/CMakeLists.txt | 54 - src/STEPImport/STEPImport.cxx | 581 - src/STEPPlugin/CMakeLists.txt | 147 + src/STEPPlugin/STEPPlugin_Engine.cxx | 32 + src/STEPPlugin/STEPPlugin_Engine.hxx | 33 + src/STEPPlugin/STEPPlugin_ExportDriver.cxx | 129 + src/STEPPlugin/STEPPlugin_ExportDriver.hxx | 51 + src/STEPPlugin/STEPPlugin_GUI.cxx | 311 + src/STEPPlugin/STEPPlugin_GUI.h | 40 + src/STEPPlugin/STEPPlugin_IECallBack.cxx | 87 + src/STEPPlugin/STEPPlugin_IECallBack.hxx | 54 + src/STEPPlugin/STEPPlugin_IExport.hxx | 48 + src/STEPPlugin/STEPPlugin_IImport.hxx | 48 + src/STEPPlugin/STEPPlugin_IOperations.cxx | 206 + src/STEPPlugin/STEPPlugin_IOperations.hxx | 46 + src/STEPPlugin/STEPPlugin_IOperations_i.cc | 128 + src/STEPPlugin/STEPPlugin_IOperations_i.hh | 53 + src/STEPPlugin/STEPPlugin_ImportDriver.cxx | 614 + src/STEPPlugin/STEPPlugin_ImportDriver.hxx | 56 + .../STEPPlugin_OperationsCreator.cxx | 74 + .../STEPPlugin_OperationsCreator.hxx | 58 + src/STEPPlugin/STEPPlugin_msg_en.ts | 51 + src/STEPPlugin/STEPPlugin_msg_fr.ts | 51 + src/STEPPlugin/STEPPlugin_msg_ja.ts | 50 + src/STLExport/CMakeLists.txt | 52 - src/STLExport/STLExport.cxx | 75 - src/STLImport/CMakeLists.txt | 55 - src/STLImport/STLImport.cxx | 107 - src/STLPlugin/CMakeLists.txt | 149 + src/STLPlugin/STLPlugin_Engine.cxx | 31 + src/STLPlugin/STLPlugin_Engine.hxx | 33 + src/STLPlugin/STLPlugin_ExportDlg.cxx | 196 + src/STLPlugin/STLPlugin_ExportDlg.h | 62 + src/STLPlugin/STLPlugin_ExportDriver.cxx | 128 + src/STLPlugin/STLPlugin_ExportDriver.hxx | 51 + src/STLPlugin/STLPlugin_GUI.cxx | 269 + src/STLPlugin/STLPlugin_GUI.h | 40 + src/STLPlugin/STLPlugin_IECallBack.cxx | 75 + src/STLPlugin/STLPlugin_IECallBack.hxx | 50 + src/STLPlugin/STLPlugin_IExport.hxx | 66 + src/STLPlugin/STLPlugin_IImport.hxx | 42 + src/STLPlugin/STLPlugin_IOperations.cxx | 181 + src/STLPlugin/STLPlugin_IOperations.hxx | 46 + src/STLPlugin/STLPlugin_IOperations_i.cc | 112 + src/STLPlugin/STLPlugin_IOperations_i.hh | 52 + src/STLPlugin/STLPlugin_ImportDriver.cxx | 155 + src/STLPlugin/STLPlugin_ImportDriver.hxx | 51 + src/STLPlugin/STLPlugin_OperationsCreator.cxx | 71 + src/STLPlugin/STLPlugin_OperationsCreator.hxx | 57 + src/STLPlugin/STLPlugin_msg_en.ts | 61 + src/STLPlugin/STLPlugin_msg_fr.ts | 61 + src/STLPlugin/STLPlugin_msg_ja.ts | 61 + src/VTKExport/CMakeLists.txt | 55 - src/VTKExport/VTKExport.cxx | 160 - src/VTKPlugin/CMakeLists.txt | 149 + src/VTKPlugin/VTKPlugin_Engine.cxx | 32 + src/VTKPlugin/VTKPlugin_Engine.hxx | 33 + src/VTKPlugin/VTKPlugin_ExportDlg.cxx | 118 + src/VTKPlugin/VTKPlugin_ExportDlg.h | 50 + src/VTKPlugin/VTKPlugin_ExportDriver.cxx | 200 + src/VTKPlugin/VTKPlugin_ExportDriver.hxx | 51 + src/VTKPlugin/VTKPlugin_GUI.cxx | 186 + src/VTKPlugin/VTKPlugin_GUI.h | 39 + src/VTKPlugin/VTKPlugin_IECallBack.cxx | 57 + src/VTKPlugin/VTKPlugin_IECallBack.hxx | 45 + src/VTKPlugin/VTKPlugin_IExport.hxx | 54 + src/VTKPlugin/VTKPlugin_IOperations.cxx | 111 + src/VTKPlugin/VTKPlugin_IOperations.hxx | 41 + src/VTKPlugin/VTKPlugin_IOperations_i.cc | 80 + src/VTKPlugin/VTKPlugin_IOperations_i.hh | 51 + src/VTKPlugin/VTKPlugin_OperationsCreator.cxx | 67 + src/VTKPlugin/VTKPlugin_OperationsCreator.hxx | 57 + src/VTKPlugin/VTKPlugin_msg_en.ts | 49 + src/VTKPlugin/VTKPlugin_msg_fr.ts | 49 + src/VTKPlugin/VTKPlugin_msg_ja.ts | 49 + src/XAOPlugin/CMakeLists.txt | 151 + src/XAOPlugin/XAOPlugin_Driver.cxx | 105 + src/XAOPlugin/XAOPlugin_Driver.hxx | 48 + src/XAOPlugin/XAOPlugin_Engine.cxx | 31 + src/XAOPlugin/XAOPlugin_Engine.hxx | 33 + src/XAOPlugin/XAOPlugin_ExportDlg.cxx | 456 + .../XAOPlugin_ExportDlg.h} | 61 +- .../XAOPlugin_GUI.cxx} | 91 +- .../XAOPlugin_GUI.h} | 24 +- src/XAOPlugin/XAOPlugin_IECallBack.cxx | 97 + src/XAOPlugin/XAOPlugin_IECallBack.hxx | 50 + .../XAOPlugin_IImportExport.hxx} | 10 +- src/XAOPlugin/XAOPlugin_IOperations.cxx | 670 + src/XAOPlugin/XAOPlugin_IOperations.hxx | 74 + src/XAOPlugin/XAOPlugin_IOperations_i.cc | 172 + src/XAOPlugin/XAOPlugin_IOperations_i.hh | 61 + .../XAOPlugin_ImportDlg.cxx} | 189 +- .../XAOPlugin_ImportDlg.h} | 62 +- src/XAOPlugin/XAOPlugin_OperationsCreator.cxx | 66 + src/XAOPlugin/XAOPlugin_OperationsCreator.hxx | 57 + src/XAOPlugin/XAOPlugin_images.ts | 16 + src/XAOPlugin/XAOPlugin_msg_en.ts | 105 + src/XAOPlugin/XAOPlugin_msg_fr.ts | 105 + src/XAOPlugin/XAOPlugin_msg_ja.ts | 105 + 301 files changed, 25199 insertions(+), 14186 deletions(-) create mode 100644 doc/salome/gui/GEOM/collect_geom_methods.py create mode 100644 doc/salome/gui/GEOM/images/importxao_dlg.png delete mode 100644 doc/salome/gui/GEOM/images/sat_named_shapes.png delete mode 100644 doc/salome/gui/GEOM/input/xao_format.doc create mode 100644 idl/AdvancedGEOM.idl create mode 100644 idl/BREPPlugin.idl create mode 100644 idl/IGESPlugin.idl create mode 100644 idl/STEPPlugin.idl create mode 100644 idl/STLPlugin.idl create mode 100644 idl/VTKPlugin.idl create mode 100644 idl/XAOPlugin.idl rename resources/{GEOMActions.xml => AdvancedGEOM.xml} (98%) create mode 100644 resources/BREPPlugin.xml create mode 100644 resources/IGESPlugin.xml delete mode 100644 resources/ImportExport create mode 100644 resources/STEPPlugin.xml create mode 100644 resources/STLPlugin.xml create mode 100644 resources/VTKPlugin.xml create mode 100644 resources/XAOPlugin.xml rename src/AdvancedEngine/{GEOM_AdvancedEngine.hxx => AdvancedEngine.hxx} (100%) rename src/AdvancedEngine/{GEOMImpl_DividedDiskDriver.cxx => AdvancedEngine_DividedDiskDriver.cxx} (92%) rename src/AdvancedEngine/{GEOMImpl_DividedDiskDriver.hxx => AdvancedEngine_DividedDiskDriver.hxx} (63%) rename src/AdvancedEngine/{GEOMImpl_IDividedDisk.hxx => AdvancedEngine_IDividedDisk.hxx} (90%) rename src/AdvancedEngine/{GEOMImpl_IAdvancedOperations.cxx => AdvancedEngine_IOperations.cxx} (93%) rename src/AdvancedEngine/{GEOMImpl_IAdvancedOperations.hxx => AdvancedEngine_IOperations.hxx} (81%) rename src/AdvancedEngine/{GEOM_IAdvancedOperations_i.cc => AdvancedEngine_IOperations_i.cc} (92%) rename src/AdvancedEngine/{GEOM_IAdvancedOperations_i.hh => AdvancedEngine_IOperations_i.hh} (91%) rename src/AdvancedEngine/{GEOMImpl_IPipeTShape.hxx => AdvancedEngine_IPipeTShape.hxx} (93%) rename src/AdvancedEngine/{GEOMImpl_ISmoothingSurface.hxx => AdvancedEngine_ISmoothingSurface.hxx} (89%) delete mode 100644 src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc create mode 100644 src/AdvancedEngine/AdvancedEngine_OperationsCreator.cxx rename src/AdvancedEngine/{AdvancedEngine_OperationsCreator.hh => AdvancedEngine_OperationsCreator.hxx} (72%) rename src/AdvancedEngine/{GEOMImpl_PipeTShapeDriver.cxx => AdvancedEngine_PipeTShapeDriver.cxx} (93%) rename src/AdvancedEngine/{GEOMImpl_PipeTShapeDriver.hxx => AdvancedEngine_PipeTShapeDriver.hxx} (79%) rename src/AdvancedEngine/{GEOMImpl_SmoothingSurfaceDriver.cxx => AdvancedEngine_SmoothingSurfaceDriver.cxx} (90%) rename src/AdvancedEngine/{GEOMImpl_SmoothingSurfaceDriver.hxx => AdvancedEngine_SmoothingSurfaceDriver.hxx} (55%) rename src/AdvancedGUI/{AdvancedGUI_images.ts => AdvancedGEOM_images.ts} (100%) rename src/AdvancedGUI/{AdvancedGUI_msg_en.ts => AdvancedGEOM_msg_en.ts} (100%) rename src/AdvancedGUI/{AdvancedGUI_msg_fr.ts => AdvancedGEOM_msg_fr.ts} (100%) rename src/AdvancedGUI/{AdvancedGUI_msg_ja.ts => AdvancedGEOM_msg_ja.ts} (100%) delete mode 100644 src/BREPExport/BREPExport.cxx delete mode 100755 src/BREPExport/CMakeLists.txt delete mode 100644 src/BREPImport/BREPImport.cxx delete mode 100755 src/BREPImport/CMakeLists.txt create mode 100644 src/BREPPlugin/BREPPlugin_Engine.cxx create mode 100755 src/BREPPlugin/BREPPlugin_Engine.hxx create mode 100644 src/BREPPlugin/BREPPlugin_ExportDriver.cxx create mode 100644 src/BREPPlugin/BREPPlugin_ExportDriver.hxx create mode 100644 src/BREPPlugin/BREPPlugin_GUI.cxx create mode 100644 src/BREPPlugin/BREPPlugin_GUI.h create mode 100755 src/BREPPlugin/BREPPlugin_IECallBack.cxx create mode 100644 src/BREPPlugin/BREPPlugin_IECallBack.hxx create mode 100644 src/BREPPlugin/BREPPlugin_IExport.hxx create mode 100644 src/BREPPlugin/BREPPlugin_IImport.hxx create mode 100644 src/BREPPlugin/BREPPlugin_IOperations.cxx create mode 100644 src/BREPPlugin/BREPPlugin_IOperations.hxx create mode 100644 src/BREPPlugin/BREPPlugin_IOperations_i.cc create mode 100644 src/BREPPlugin/BREPPlugin_IOperations_i.hh create mode 100644 src/BREPPlugin/BREPPlugin_ImportDriver.cxx create mode 100644 src/BREPPlugin/BREPPlugin_ImportDriver.hxx create mode 100644 src/BREPPlugin/BREPPlugin_OperationsCreator.cxx create mode 100755 src/BREPPlugin/BREPPlugin_OperationsCreator.hxx create mode 100644 src/BREPPlugin/BREPPlugin_msg_en.ts create mode 100644 src/BREPPlugin/BREPPlugin_msg_fr.ts create mode 100644 src/BREPPlugin/BREPPlugin_msg_ja.ts create mode 100644 src/BREPPlugin/CMakeLists.txt create mode 100644 src/GEOMBase/GEOMBase_DlgSkeleton.cxx create mode 100644 src/GEOMBase/GEOMBase_DlgSkeleton.h delete mode 100644 src/GEOMGUI/GEOMGUI_XmlHandler.cxx delete mode 100644 src/GEOMGUI/GEOMGUI_XmlHandler.h create mode 100755 src/GEOMImpl/GEOMImpl_IBaseIEOperations.cxx create mode 100644 src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx create mode 100755 src/GEOMImpl/GEOMImpl_IECallBack.cxx create mode 100644 src/GEOMImpl/GEOMImpl_IECallBack.hxx delete mode 100644 src/GEOMImpl/GEOMImpl_XAODriver.cxx delete mode 100644 src/GEOMImpl/GEOMImpl_XAODriver.hxx create mode 100644 src/GEOMUtils/GEOMUtils_XmlHandler.cxx create mode 100644 src/GEOMUtils/GEOMUtils_XmlHandler.hxx create mode 100644 src/GEOM_SWIG/AdvancedGEOMBuilder.py create mode 100644 src/GEOM_SWIG/BREPPluginBuilder.py create mode 100644 src/GEOM_SWIG/IGESPluginBuilder.py create mode 100644 src/GEOM_SWIG/STEPPluginBuilder.py create mode 100644 src/GEOM_SWIG/STLPluginBuilder.py create mode 100644 src/GEOM_SWIG/VTKPluginBuilder.py create mode 100644 src/GEOM_SWIG/XAOPluginBuilder.py delete mode 100755 src/IGESExport/CMakeLists.txt delete mode 100644 src/IGESExport/IGESExport.cxx delete mode 100755 src/IGESImport/CMakeLists.txt delete mode 100644 src/IGESImport/IGESImport.cxx create mode 100644 src/IGESPlugin/CMakeLists.txt create mode 100644 src/IGESPlugin/IGESPlugin_Engine.cxx create mode 100755 src/IGESPlugin/IGESPlugin_Engine.hxx create mode 100644 src/IGESPlugin/IGESPlugin_ExportDlg.cxx create mode 100644 src/IGESPlugin/IGESPlugin_ExportDlg.h create mode 100644 src/IGESPlugin/IGESPlugin_ExportDriver.cxx create mode 100644 src/IGESPlugin/IGESPlugin_ExportDriver.hxx create mode 100644 src/IGESPlugin/IGESPlugin_GUI.cxx create mode 100644 src/IGESPlugin/IGESPlugin_GUI.h create mode 100755 src/IGESPlugin/IGESPlugin_IECallBack.cxx create mode 100644 src/IGESPlugin/IGESPlugin_IECallBack.hxx create mode 100644 src/IGESPlugin/IGESPlugin_IExport.hxx create mode 100644 src/IGESPlugin/IGESPlugin_IImport.hxx create mode 100644 src/IGESPlugin/IGESPlugin_IOperations.cxx create mode 100644 src/IGESPlugin/IGESPlugin_IOperations.hxx create mode 100644 src/IGESPlugin/IGESPlugin_IOperations_i.cc create mode 100644 src/IGESPlugin/IGESPlugin_IOperations_i.hh create mode 100644 src/IGESPlugin/IGESPlugin_ImportDriver.cxx create mode 100644 src/IGESPlugin/IGESPlugin_ImportDriver.hxx create mode 100644 src/IGESPlugin/IGESPlugin_OperationsCreator.cxx create mode 100755 src/IGESPlugin/IGESPlugin_OperationsCreator.hxx create mode 100644 src/IGESPlugin/IGESPlugin_msg_en.ts create mode 100644 src/IGESPlugin/IGESPlugin_msg_fr.ts create mode 100644 src/IGESPlugin/IGESPlugin_msg_ja.ts delete mode 100644 src/ImportExportGUI/CMakeLists.txt delete mode 100644 src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx delete mode 100755 src/STEPExport/CMakeLists.txt delete mode 100644 src/STEPExport/STEPExport.cxx delete mode 100755 src/STEPImport/CMakeLists.txt delete mode 100644 src/STEPImport/STEPImport.cxx create mode 100644 src/STEPPlugin/CMakeLists.txt create mode 100644 src/STEPPlugin/STEPPlugin_Engine.cxx create mode 100755 src/STEPPlugin/STEPPlugin_Engine.hxx create mode 100644 src/STEPPlugin/STEPPlugin_ExportDriver.cxx create mode 100644 src/STEPPlugin/STEPPlugin_ExportDriver.hxx create mode 100644 src/STEPPlugin/STEPPlugin_GUI.cxx create mode 100644 src/STEPPlugin/STEPPlugin_GUI.h create mode 100755 src/STEPPlugin/STEPPlugin_IECallBack.cxx create mode 100644 src/STEPPlugin/STEPPlugin_IECallBack.hxx create mode 100644 src/STEPPlugin/STEPPlugin_IExport.hxx create mode 100644 src/STEPPlugin/STEPPlugin_IImport.hxx create mode 100644 src/STEPPlugin/STEPPlugin_IOperations.cxx create mode 100644 src/STEPPlugin/STEPPlugin_IOperations.hxx create mode 100644 src/STEPPlugin/STEPPlugin_IOperations_i.cc create mode 100644 src/STEPPlugin/STEPPlugin_IOperations_i.hh create mode 100644 src/STEPPlugin/STEPPlugin_ImportDriver.cxx create mode 100644 src/STEPPlugin/STEPPlugin_ImportDriver.hxx create mode 100644 src/STEPPlugin/STEPPlugin_OperationsCreator.cxx create mode 100755 src/STEPPlugin/STEPPlugin_OperationsCreator.hxx create mode 100644 src/STEPPlugin/STEPPlugin_msg_en.ts create mode 100644 src/STEPPlugin/STEPPlugin_msg_fr.ts create mode 100644 src/STEPPlugin/STEPPlugin_msg_ja.ts delete mode 100755 src/STLExport/CMakeLists.txt delete mode 100644 src/STLExport/STLExport.cxx delete mode 100755 src/STLImport/CMakeLists.txt delete mode 100755 src/STLImport/STLImport.cxx create mode 100644 src/STLPlugin/CMakeLists.txt create mode 100644 src/STLPlugin/STLPlugin_Engine.cxx create mode 100755 src/STLPlugin/STLPlugin_Engine.hxx create mode 100644 src/STLPlugin/STLPlugin_ExportDlg.cxx create mode 100644 src/STLPlugin/STLPlugin_ExportDlg.h create mode 100644 src/STLPlugin/STLPlugin_ExportDriver.cxx create mode 100644 src/STLPlugin/STLPlugin_ExportDriver.hxx create mode 100644 src/STLPlugin/STLPlugin_GUI.cxx create mode 100644 src/STLPlugin/STLPlugin_GUI.h create mode 100755 src/STLPlugin/STLPlugin_IECallBack.cxx create mode 100644 src/STLPlugin/STLPlugin_IECallBack.hxx create mode 100644 src/STLPlugin/STLPlugin_IExport.hxx create mode 100644 src/STLPlugin/STLPlugin_IImport.hxx create mode 100644 src/STLPlugin/STLPlugin_IOperations.cxx create mode 100644 src/STLPlugin/STLPlugin_IOperations.hxx create mode 100644 src/STLPlugin/STLPlugin_IOperations_i.cc create mode 100644 src/STLPlugin/STLPlugin_IOperations_i.hh create mode 100644 src/STLPlugin/STLPlugin_ImportDriver.cxx create mode 100644 src/STLPlugin/STLPlugin_ImportDriver.hxx create mode 100644 src/STLPlugin/STLPlugin_OperationsCreator.cxx create mode 100755 src/STLPlugin/STLPlugin_OperationsCreator.hxx create mode 100644 src/STLPlugin/STLPlugin_msg_en.ts create mode 100644 src/STLPlugin/STLPlugin_msg_fr.ts create mode 100644 src/STLPlugin/STLPlugin_msg_ja.ts delete mode 100755 src/VTKExport/CMakeLists.txt delete mode 100644 src/VTKExport/VTKExport.cxx create mode 100644 src/VTKPlugin/CMakeLists.txt create mode 100644 src/VTKPlugin/VTKPlugin_Engine.cxx create mode 100755 src/VTKPlugin/VTKPlugin_Engine.hxx create mode 100644 src/VTKPlugin/VTKPlugin_ExportDlg.cxx create mode 100644 src/VTKPlugin/VTKPlugin_ExportDlg.h create mode 100644 src/VTKPlugin/VTKPlugin_ExportDriver.cxx create mode 100644 src/VTKPlugin/VTKPlugin_ExportDriver.hxx create mode 100644 src/VTKPlugin/VTKPlugin_GUI.cxx create mode 100644 src/VTKPlugin/VTKPlugin_GUI.h create mode 100755 src/VTKPlugin/VTKPlugin_IECallBack.cxx create mode 100644 src/VTKPlugin/VTKPlugin_IECallBack.hxx create mode 100644 src/VTKPlugin/VTKPlugin_IExport.hxx create mode 100644 src/VTKPlugin/VTKPlugin_IOperations.cxx create mode 100644 src/VTKPlugin/VTKPlugin_IOperations.hxx create mode 100644 src/VTKPlugin/VTKPlugin_IOperations_i.cc create mode 100644 src/VTKPlugin/VTKPlugin_IOperations_i.hh create mode 100644 src/VTKPlugin/VTKPlugin_OperationsCreator.cxx create mode 100755 src/VTKPlugin/VTKPlugin_OperationsCreator.hxx create mode 100644 src/VTKPlugin/VTKPlugin_msg_en.ts create mode 100644 src/VTKPlugin/VTKPlugin_msg_fr.ts create mode 100644 src/VTKPlugin/VTKPlugin_msg_ja.ts create mode 100644 src/XAOPlugin/CMakeLists.txt create mode 100644 src/XAOPlugin/XAOPlugin_Driver.cxx create mode 100644 src/XAOPlugin/XAOPlugin_Driver.hxx create mode 100644 src/XAOPlugin/XAOPlugin_Engine.cxx create mode 100755 src/XAOPlugin/XAOPlugin_Engine.hxx create mode 100644 src/XAOPlugin/XAOPlugin_ExportDlg.cxx rename src/{ImportExportGUI/ImportExportGUI_ImportXAODlg.h => XAOPlugin/XAOPlugin_ExportDlg.h} (52%) rename src/{ImportExportGUI/ImportExportGUI.cxx => XAOPlugin/XAOPlugin_GUI.cxx} (53%) rename src/{ImportExportGUI/ImportExportGUI.h => XAOPlugin/XAOPlugin_GUI.h} (68%) create mode 100644 src/XAOPlugin/XAOPlugin_IECallBack.cxx create mode 100644 src/XAOPlugin/XAOPlugin_IECallBack.hxx rename src/{GEOMImpl/GEOMImpl_IImportExportXAO.hxx => XAOPlugin/XAOPlugin_IImportExport.hxx} (83%) create mode 100644 src/XAOPlugin/XAOPlugin_IOperations.cxx create mode 100644 src/XAOPlugin/XAOPlugin_IOperations.hxx create mode 100644 src/XAOPlugin/XAOPlugin_IOperations_i.cc create mode 100644 src/XAOPlugin/XAOPlugin_IOperations_i.hh rename src/{ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx => XAOPlugin/XAOPlugin_ImportDlg.cxx} (67%) rename src/{ImportExportGUI/ImportExportGUI_ExportXAODlg.h => XAOPlugin/XAOPlugin_ImportDlg.h} (50%) create mode 100644 src/XAOPlugin/XAOPlugin_OperationsCreator.cxx create mode 100755 src/XAOPlugin/XAOPlugin_OperationsCreator.hxx create mode 100644 src/XAOPlugin/XAOPlugin_images.ts create mode 100644 src/XAOPlugin/XAOPlugin_msg_en.ts create mode 100644 src/XAOPlugin/XAOPlugin_msg_fr.ts create mode 100644 src/XAOPlugin/XAOPlugin_msg_ja.ts diff --git a/CMakeLists.txt b/CMakeLists.txt index 856676c05..d741a55cc 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -234,16 +234,18 @@ INCLUDE(CMakePackageConfigHelpers) # List of targets in this project we want to make visible to the rest of the world. # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup" SET(_${PROJECT_NAME}_exposed_targets - GEOMArchimede BREPExport BREPImport BlockFix GEOMbasic GEOMAlgo GEOMClient GEOMImpl - GEOMUtils GEOMEngine GEOM_SupervEngine IGESExport IGESImport GEOMSketcher - SalomeIDLGEOM STEPExport STEPImport STLExport STLImport ShHealOper XAO AdvancedEngine OCC2VTK - VTKExport + GEOMArchimede BlockFix GEOMbasic GEOMAlgo GEOMClient GEOMImpl + GEOMUtils GEOMEngine GEOM_SupervEngine GEOMSketcher + SalomeIDLGEOM SalomeIDLGEOMSuperv SalomeIDLAdvancedGEOM ShHealOper XAO AdvancedEngine OCC2VTK + SalomeIDLSTLPlugin SalomeIDLBREPPlugin SalomeIDLSTEPPlugin SalomeIDLIGESPlugin SalomeIDLXAOPlugin SalomeIDLVTKPlugin + STLPluginEngine BREPPluginEngine STEPPluginEngine IGESPluginEngine XAOPluginEngine VTKPluginEngine ) IF(SALOME_BUILD_GUI) LIST(APPEND _${PROJECT_NAME}_exposed_targets AdvancedGUI BasicGUI BlocksGUI BooleanGUI BuildGUI DisplayGUI DlgRef EntityGUI GEOMBase GEOMFiltersSelection GEOM GEOMToolsGUI GenerationGUI GroupGUI Material MeasureGUI GEOMObject - OperationGUI PrimitiveGUI RepairGUI TransformationGUI ImportExportGUI DependencyTree + OperationGUI PrimitiveGUI RepairGUI TransformationGUI DependencyTree + STLPluginGUI BREPPluginGUI STEPPluginGUI IGESPluginGUI XAOPluginGUI VTKPluginGUI ) ENDIF(SALOME_BUILD_GUI) diff --git a/SalomeGEOMConfig.cmake.in b/SalomeGEOMConfig.cmake.in index c72af1a38..43660c4f8 100644 --- a/SalomeGEOMConfig.cmake.in +++ b/SalomeGEOMConfig.cmake.in @@ -129,8 +129,6 @@ ENDIF(SALOME_GEOM_BUILD_GUI) # Exposed GEOM targets: SET(GEOM_GEOMArchimede GEOMArchimede) -SET(GEOM_BREPExport BREPExport) -SET(GEOM_BREPImport BREPImport) SET(GEOM_BlockFix BlockFix) SET(GEOM_GEOMbasic GEOMbasic) SET(GEOM_GEOMAlgo GEOMAlgo) @@ -139,14 +137,16 @@ SET(GEOM_GEOMImpl GEOMImpl) SET(GEOM_GEOMUtils GEOMUtils) SET(GEOM_GEOMEngine GEOMEngine) SET(GEOM_GEOM_SupervEngine GEOM_SupervEngine) -SET(GEOM_IGESExport IGESExport) -SET(GEOM_IGESImport IGESImport) SET(GEOM_GEOMSketcher GEOMSketcher) SET(GEOM_SalomeIDLGEOM SalomeIDLGEOM) -SET(GEOM_STEPExport STEPExport) -SET(GEOM_STEPImport STEPImport) -SET(GEOM_STLExport STLExport) -SET(GEOM_STLImport STLImport) +SET(GEOM_SalomeIDLGEOMSuperv SalomeIDLGEOMSuperv) +SET(GEOM_SalomeIDLAdvancedGEOM SalomeIDLAdvancedGEOM) +SET(GEOM_SalomeIDLSTLPlugin SalomeIDLSTLPlugin) +SET(GEOM_SalomeIDLBREPPlugin SalomeIDLBREPPlugin) +SET(GEOM_SalomeIDLSTEPPlugin SalomeIDLSTEPPlugin) +SET(GEOM_SalomeIDLIGESPlugin SalomeIDLIGESPlugin) +SET(GEOM_SalomeIDLXAOPlugin SalomeIDLXAOPlugin) +SET(GEOM_SalomeIDLVTKPlugin SalomeIDLVTKPlugin) SET(GEOM_ShHealOper ShHealOper) SET(GEOM_XAO XAO) SET(GEOM_AdvancedEngine AdvancedEngine) @@ -169,11 +169,21 @@ SET(GEOM_Material Material) SET(GEOM_MeasureGUI MeasureGUI) SET(GEOM_GEOMObject GEOMObject) SET(GEOM_OCC2VTK OCC2VTK) -SET(GEOM_VTKExport VTKExport) SET(GEOM_OperationGUI OperationGUI) SET(GEOM_PrimitiveGUI PrimitiveGUI) SET(GEOM_RepairGUI RepairGUI) SET(GEOM_TransformationGUI TransformationGUI) -SET(GEOM_ImportExportGUI ImportExportGUI) +SET(GEOM_STLPluginGUI STLPluginGUI) +SET(GEOM_STLPluginEngine STLPluginEngine) +SET(GEOM_BREPPluginGUI BREPPluginGUI) +SET(GEOM_BREPPluginEngine BREPPluginEngine) +SET(GEOM_STEPPluginGUI STEPPluginGUI) +SET(GEOM_STEPPluginEngine STEPPluginEngine) +SET(GEOM_IGESPluginGUI IGESPluginGUI) +SET(GEOM_IGESPluginEngine IGESPluginEngine) +SET(GEOM_XAOPluginGUI XAOPluginGUI) +SET(GEOM_XAOPluginEngine XAOPluginEngine) +SET(GEOM_VTKPluginGUI VTKPluginGUI) +SET(GEOM_VTKPluginEngine VTKPluginEngine) SET(GEOM_GEOMShapeRec GEOMShapeRec) SET(GEOM_CurveCreator CurveCreator) diff --git a/adm_local/cmake_files/FindGEOM.cmake b/adm_local/cmake_files/FindGEOM.cmake index 69722aa4e..0d408449a 100644 --- a/adm_local/cmake_files/FindGEOM.cmake +++ b/adm_local/cmake_files/FindGEOM.cmake @@ -21,8 +21,6 @@ SET(GEOM_CXXFLAGS -I${GEOM_ROOT_DIR}/include/salome) # to be removed SET(GEOM_INCLUDE_DIRS ${GEOM_ROOT_DIR}/include/salome) FIND_LIBRARY(GEOM_GEOMArchimede GEOMArchimede ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_BREPExport BREPExport ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_BREPImport BREPImport ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_BlockFix BlockFix ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMbasic GEOMbasic ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMAlgo GEOMAlgo ${GEOM_ROOT_DIR}/lib/salome) @@ -31,14 +29,14 @@ FIND_LIBRARY(GEOM_GEOMimpl GEOMimpl ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMUtils GEOMUtils ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMEngine GEOMEngine ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_SupervEngine GEOM_SupervEngine ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_IGESExport IGESExport ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_IGESImport IGESImport ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMSketcher GEOMSketcher ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_SalomeIDLGEOM SalomeIDLGEOM ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_STEPExport STEPExport ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_STEPImport STEPImport ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_STLExport STLExport ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_STLImport STLImport ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_SalomeIDLSTLPlugin SalomeIDLSTLPlugin ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_SalomeIDLBREPPlugin SalomeIDLBREPPlugin ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_SalomeIDLSTEPPlugin SalomeIDLSTEPPlugin ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_SalomeIDLIGESPlugin SalomeIDLIGESPlugin ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_SalomeIDLVTKPlugin SalomeIDLVTKPlugin ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_SalomeIDLXAOPlugin SalomeIDLXAOPlugin ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_ShHealOper ShHealOper ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_XAO XAO ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_AdvancedEngine AdvancedEngine ${GEOM_ROOT_DIR}/lib/salome) @@ -61,11 +59,21 @@ FIND_LIBRARY(GEOM_Material Material ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_MeasureGUI MeasureGUI ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMObject GEOMObject ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_OCC2VTK OCC2VTK ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_VTKExport VTKExport ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_OperationGUI OperationGUI ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_PrimitiveGUI PrimitiveGUI ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_RepairGUI RepairGUI ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_TransformationGUI TransformationGUI ${GEOM_ROOT_DIR}/lib/salome) -FIND_LIBRARY(GEOM_ImportExportGUI ImportExportGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_STLPluginGUI STLPluginGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_STLPluginEngine STLPluginEngine ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_BREPPluginGUI BREPPluginGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_BREPPluginEngine BREPPluginEngine ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_STEPPluginGUI STEPPluginGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_STEPPluginEngine STEPPluginEngine ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_IGESPluginGUI IGESPluginGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_IGESPluginEngine IGESPluginEngine ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_XAOPluginGUI XAOPluginGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_XAOPluginEngine XAOPluginEngine ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_VTKPluginGUI VTKPluginGUI ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_VTKPluginEngine VTKPluginEngine ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMShapeRec GEOMShapeRec ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_CurveCreator CurveCreator ${GEOM_ROOT_DIR}/lib/salome) diff --git a/bin/geom_setenv.py b/bin/geom_setenv.py index 35f9a0ef1..b4e8b747a 100644 --- a/bin/geom_setenv.py +++ b/bin/geom_setenv.py @@ -36,28 +36,28 @@ def set_env( args ): csf_list = ["Plugin", "GEOMDS_Resources", "ShHealing"] - for csf_file in csf_list: - uniteFiles( os.path.join( res_dir, csf_file ), os.path.join( env_dir, csf_file ) ) - pass - - for csf_string in csf_list: - csf_var = "CSF_" + csf_string + "Defaults" + for csf in csf_list: + uniteFiles( os.path.join( res_dir, csf ), os.path.join( env_dir, csf ) ) + csf_var = "CSF_%sDefaults" % csf if not os.getenv( csf_var ): os.environ[ csf_var ] = env_dir pass pass - # find plugins + # collect plugins plugin_list = [] resource_path_list = [] - plugins_dir_var = "GEOM_ENGINE_RESOURCES_DIR" - if os.environ.has_key(plugins_dir_var): - # reverse the user's paths list, because the used 'add_path' prepends a new path, - # but we want to append it: [a, b, c] => [c, b, a] - plugins_dirs = os.environ[plugins_dir_var].split(os.pathsep) - plugins_dirs.reverse() - os.environ[plugins_dir_var] = string.join(plugins_dirs, os.pathsep) - pass + + # standard plugins + plugin_list.append("BREPPlugin") + plugin_list.append("STEPPlugin") + plugin_list.append("IGESPlugin") + plugin_list.append("STLPlugin") + plugin_list.append("XAOPlugin") + plugin_list.append("VTKPlugin") + plugin_list.append("AdvancedGEOM") + + # find additional plugins for env_var in os.environ.keys(): value = os.environ[env_var] if env_var[-9:] == "_ROOT_DIR" and value: @@ -65,61 +65,48 @@ def set_env( args ): plugin = env_var[:-9] # plugin name may have wrong case # look for NAMEOFPlugin.xml file among resource files - resource_dir = os.path.join(plugin_root,"share",salome_subdir,"resources",plugin.lower()) - if not os.access( resource_dir, os.F_OK ): continue - for resource_file in os.listdir( resource_dir ): - if resource_file.endswith( ".xml") and \ + resource_dir = os.path.join(plugin_root, "share", salome_subdir, "resources", plugin.lower()) + if not os.access(resource_dir, os.F_OK): continue + + for resource_file in os.listdir(resource_dir): + if resource_file.endswith(".xml") and \ resource_file.lower() == plugin.lower() + ".xml": # use "name" attribute of "geom-plugin" as name of plugin in a right case - from xml.dom.minidom import parse try: - xml_doc = parse( os.path.join( resource_dir, resource_file )) + from xml.dom.minidom import parse + xml_doc = parse(os.path.join(resource_dir, resource_file)) plugin_nodes = xml_doc.getElementsByTagName("geom-plugin") - except: - continue - if not plugin_nodes or not plugin_nodes[0].hasAttribute("name"): continue - plugin = plugin_nodes[0].getAttribute("name") - if plugin in plugin_list: continue + if not plugin_nodes or not plugin_nodes[0].hasAttribute("name"): continue - # add paths of plugin - plugin_list.append(plugin) - if not os.environ.has_key("SALOME_"+plugin+"Resources"): - resource_path = os.path.join(plugin_root,"share",salome_subdir,"resources",plugin.lower()) - os.environ["SALOME_"+plugin+"Resources"] = resource_path - resource_path_list.append( resource_path ) - add_path(os.path.join(plugin_root,get_lib_dir(),python_version, "site-packages",salome_subdir), "PYTHONPATH") - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "PYTHONPATH") + plugin = plugin_nodes[0].getAttribute("name") + if plugin in plugin_list: continue - if sys.platform == "win32": - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "PATH") - add_path(os.path.join(plugin_root,"bin",salome_subdir), "PYTHONPATH") - else: - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "LD_LIBRARY_PATH") - add_path(os.path.join(plugin_root,"bin",salome_subdir), "PYTHONPATH") - add_path(os.path.join(plugin_root,"bin",salome_subdir), "PATH") + plugin_list.append(plugin) + + # add paths of plugin + if not os.environ.has_key("SALOME_"+plugin+"Resources"): + resource_path = os.path.join(plugin_root, "share", salome_subdir, "resources", plugin.lower()) + os.environ["SALOME_"+plugin+"Resources"] = resource_path + resource_path_list.append(resource_path) + add_path(os.path.join(plugin_root, get_lib_dir(), python_version, "site-packages", salome_subdir), "PYTHONPATH") + add_path(os.path.join(plugin_root, get_lib_dir(), salome_subdir), "PYTHONPATH") + if sys.platform == "win32": + add_path(os.path.join(plugin_root, get_lib_dir(), salome_subdir), "PATH") + add_path(os.path.join(plugin_root, "bin", salome_subdir), "PYTHONPATH") + else: + add_path(os.path.join(plugin_root, get_lib_dir(), salome_subdir), "LD_LIBRARY_PATH") + add_path(os.path.join(plugin_root, "bin", salome_subdir), "PYTHONPATH") + add_path(os.path.join(plugin_root, "bin", salome_subdir), "PATH") + pass pass pass - pass - elif resource_file == "ImportExport" and plugin.upper() != "GEOM": - # add 'ImportExport' plugin file path into variable - add_path(resource_dir, plugins_dir_var) - # add plugin's library path into environment - if sys.platform == "win32": - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "PATH") - else: - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "LD_LIBRARY_PATH") - pass + except: + continue pass pass - plugin_list.append("GEOMActions") + pass + pass + os.environ["GEOM_PluginsList"] = ":".join(plugin_list) os.environ["SalomeAppConfig"] = os.environ["SalomeAppConfig"] + psep + psep.join(resource_path_list) - - if os.environ.has_key(plugins_dir_var): - # reverse back the plugin paths: - # [f, e, d, c, b, a] => [a, b, c, d, e, f] - plugins_dirs = os.environ[plugins_dir_var].split(os.pathsep) - plugins_dirs.reverse() - os.environ[plugins_dir_var] = string.join(plugins_dirs, os.pathsep) - pass pass diff --git a/doc/salome/examples/import_export.py b/doc/salome/examples/import_export.py index 158fc6375..3b5f7df60 100644 --- a/doc/salome/examples/import_export.py +++ b/doc/salome/examples/import_export.py @@ -25,7 +25,7 @@ print "UnitName2 = ", UnitName2 # import shapes Shape1 = geompy.ImportIGES(theFileName1) Shape2 = geompy.ImportIGES(theFileName2) -Shape3 = geompy.ImportFile(theFileName2,"IGES_SCALE") +Shape3 = geompy.ImportIGES(theFileName2, True) [Xmin1,Xmax1, Ymin1,Ymax1, Zmin1,Zmax1] = geompy.BoundingBox(Shape1) [Xmin2,Xmax2, Ymin2,Ymax2, Zmin2,Zmax2] = geompy.BoundingBox(Shape2) [Xmin3,Xmax3, Ymin3,Ymax3, Zmin3,Zmax3] = geompy.BoundingBox(Shape3) diff --git a/doc/salome/gui/GEOM/CMakeLists.txt b/doc/salome/gui/GEOM/CMakeLists.txt index 1b8fbf299..3584bc193 100644 --- a/doc/salome/gui/GEOM/CMakeLists.txt +++ b/doc/salome/gui/GEOM/CMakeLists.txt @@ -25,12 +25,23 @@ SALOME_CONFIGURE_FILE(doxyfile_tui.in doxyfile_tui) SALOME_CONFIGURE_FILE(static/header.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header.html) SALOME_CONFIGURE_FILE(static/header_py.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header_py.html) +# Generate a temporary python file, needed for the genaration of the documentation +# of the built-in Geometry plugins. +SET(DOC_GEOM_PluginsList AdvancedGEOM STLPlugin BREPPlugin STEPPlugin IGESPlugin XAOPlugin VTKPlugin) +SALOME_ACCUMULATE_ENVIRONMENT(GEOM_PluginsList NOCHECK ${DOC_GEOM_PluginsList}) +SET(geom_file "${CMAKE_CURRENT_SOURCE_DIR}/collect_geom_methods.py") +SET(plugins_cmd_options ${geom_file} -o tmp1/geomBuilder.py ${DOC_GEOM_PluginsList}) +SALOME_GENERATE_ENVIRONMENT_SCRIPT(plugins_cmd env_script "${PYTHON_EXECUTABLE}" "${plugins_cmd_options}") +# Install a script +SALOME_INSTALL_SCRIPTS(collect_geom_methods.py ${SALOME_INSTALL_BINS}) + SET(f "$ENV{KERNEL_ROOT_DIR}/bin/salome/prepare_generating_doc.py") IF(WIN32) STRING(REPLACE "/" "\\" f ${f}) ENDIF(WIN32) ADD_CUSTOM_TARGET(usr_docs ${CMAKE_COMMAND} -E make_directory tmp + COMMAND ${CMAKE_COMMAND} -E make_directory tmp1 COMMAND ${PYTHON_EXECUTABLE} ${f} -o tmp/geomBuilder.py ${CMAKE_SOURCE_DIR}/src/GEOM_SWIG/geomBuilder.py COMMAND ${PYTHON_EXECUTABLE} ${f} -o tmp/gsketcher.py ${CMAKE_SOURCE_DIR}/src/GEOM_SWIG/gsketcher.py COMMAND ${PYTHON_EXECUTABLE} ${f} -o tmp/geomtools.py ${CMAKE_SOURCE_DIR}/src/GEOM_PY/geomtools.py @@ -38,12 +49,14 @@ ADD_CUSTOM_TARGET(usr_docs ${CMAKE_COMMAND} -E make_directory tmp COMMAND ${PYTHON_EXECUTABLE} ${f} -o tmp/structelem.py ${CMAKE_SOURCE_DIR}/src/GEOM_PY/structelem/__init__.py COMMAND ${PYTHON_EXECUTABLE} ${f} -o tmp/parts.py ${CMAKE_SOURCE_DIR}/src/GEOM_PY/structelem/parts.py COMMAND ${PYTHON_EXECUTABLE} ${f} -o tmp/orientation.py ${CMAKE_SOURCE_DIR}/src/GEOM_PY/structelem/orientation.py + COMMAND ${plugins_cmd} COMMAND ${DOXYGEN_EXECUTABLE} doxyfile_tui COMMAND ${DOXYGEN_EXECUTABLE} doxyfile_py COMMAND ${DOXYGEN_EXECUTABLE} doxyfile COMMAND ${CMAKE_COMMAND} -E remove_directory tmp + COMMAND ${CMAKE_COMMAND} -E remove_directory tmp1 VERBATIM - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) ADD_DEPENDENCIES(usr_docs html_docs) diff --git a/doc/salome/gui/GEOM/collect_geom_methods.py b/doc/salome/gui/GEOM/collect_geom_methods.py new file mode 100644 index 000000000..482f5f3fd --- /dev/null +++ b/doc/salome/gui/GEOM/collect_geom_methods.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +################################################################################# +# +# File: collect_geom_methods.py +# Author: Roman NIKOLAEV, Open CASCADE S.A.S (roman.nikolaev@opencascade.com) +# +################################################################################# +# +# Extraction of the methods dynamically added by the Geometry +# module plug-in(s) to the geomBuilder class. +# +# This script is intended for internal usage - only +# for generatation of the extra developer documentation for +# the Geometry module plug-in(s). +# +# Usage: +# collect_geom_methods.py +# where +# is a name of the plug-in module +# +# Notes: +# - the script is supposed to be run in correct environment +# i.e. PYTHONPATH, GEOM_PluginsList and other important +# variables are set properly; otherwise the script will fail. +# +################################################################################ + +import sys +import inspect + +def generate(plugin_name, output): + plugin_module_name = plugin_name + "Builder" + plugin_module = "salome.%s.%s" % (plugin_name, plugin_module_name) + import_str = "from salome.%s import %s" % (plugin_name, plugin_module_name) + exec( import_str ) + exec( "import %s" % plugin_module ) + exec( "mod = %s" % plugin_module ) + functions = [] + for attr in dir( mod ): + if attr.startswith( '_' ): continue # skip an internal methods + item = getattr( mod, attr ) + if type( item ).__name__ == 'function': + if item not in functions: + functions.append( item ) + pass + pass + pass + if functions: + for function in functions: + comments = inspect.getcomments(function) + if comments: + comments = comments.strip().split("\n") + comments = "\t" + "\n\t".join(comments) + output.append(comments) + pass + sources = inspect.getsource(function) + if sources is not None: + sources_list = sources.split("\n") + sources_new_list = [] + found = False + for item in sources_list: + if '"""' in item: + if found == True: + found = False + continue + else: + found = True + continue + pass + pass + if found == False : + sources_new_list.append(item) + pass + pass + sources = "\n".join(sources_new_list) + sources = "\t" + sources.replace("\n", "\n\t") + output.append(sources) + pass + pass + pass + pass + +if __name__ == "__main__": + import optparse + parser = optparse.OptionParser(usage="%prog [options] plugin") + h = "Output file (geomBuilder.py by default)" + parser.add_option("-o", "--output", dest="output", + action="store", default=None, metavar="file", + help=h) + h = "If this option is True, dummy help for geomBuiler class is added. " + h += "This option should be False (default) when building documentation for Geometry module " + h += "and True when building documentation for Geometry module plug-ins." + parser.add_option("-d", "--dummy-geom-help", dest="dummygeomhelp", + action="store_true", default=False, + help=h) + (options, args) = parser.parse_args() + if len( args ) < 1: sys.exit("Plugin name is not specified") + + f = open(options.output, "w") + + output = [] + if options.dummygeomhelp: + output.append( "## @package geomBuilder" ) + output.append( "# Documentation of the methods dynamically added by the " + plugin_name + " Geometry plug-in to the geomBuilder class." ) + # Add dummy Geometry help + # This is supposed to be done when generating documentation for Geometry module plug-ins + output.append( "# @note The documentation below does not provide complete description of class @b %geomBuilder" ) + output.append( "# from @b geomBuilder package. This documentation provides only information about" ) + output.append( "# the methods dynamically added to the %geomBuilder class by the " + plugin_name + " plugin" ) + output.append( "# For more details on the %geomBuilder class, please refer to the SALOME %Geometry module" ) + output.append( "# documentation." ) + pass + else: + # Extend documentation for geomBuilder class with information about dynamically added methods. + # This is supposed to be done only when building documentation for Geometry module + output.append( "## @package geomBuilder" ) + output.append( "# @note Some methods are dynamically added to the @b %geomBuilder class in runtime by the" ) + output.append( "# plug-in modules. If you fail to find help on some methods in the documentation of Geometry module, " ) + output.append( "# try to look into the documentation for the Geometry module plug-ins." ) + pass + output.append("class geomBuilder():") + + for arg in args: + generate( arg, output ) + pass + + for line in output: f.write( line + "\n" ) + f.close() diff --git a/doc/salome/gui/GEOM/doxyfile_py.in b/doc/salome/gui/GEOM/doxyfile_py.in index 493b7c65c..f3ad68298 100755 --- a/doc/salome/gui/GEOM/doxyfile_py.in +++ b/doc/salome/gui/GEOM/doxyfile_py.in @@ -99,7 +99,14 @@ EXAMPLE_RECURSIVE = NO #--------------------------------------------------------------------------- #Input related options #--------------------------------------------------------------------------- -INPUT = tmp @CMAKE_SOURCE_DIR@/idl/GEOM_Gen.idl +INPUT = tmp tmp1 @CMAKE_SOURCE_DIR@/idl/GEOM_Gen.idl \ + @CMAKE_SOURCE_DIR@/idl/AdvancedGEOM_Gen.idl \ + @CMAKE_SOURCE_DIR@/idl/STLPlugin.idl \ + @CMAKE_SOURCE_DIR@/idl/BREPPlugin.idl \ + @CMAKE_SOURCE_DIR@/idl/STEPPlugin.idl \ + @CMAKE_SOURCE_DIR@/idl/IGESPlugin.idl \ + @CMAKE_SOURCE_DIR@/idl/XAOPlugin.idl \ + @CMAKE_SOURCE_DIR@/idl/VTKPlugin.idl FILE_PATTERNS = IMAGE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/images EXAMPLE_PATH = @CMAKE_SOURCE_DIR@/src/GEOM_SWIG diff --git a/doc/salome/gui/GEOM/images/exportxao_dlg.png b/doc/salome/gui/GEOM/images/exportxao_dlg.png index a7171c748f9dd15e590580136760a2fe9116901a..d273b9d7813f84277ae841f0385a0177bc6fbc64 100644 GIT binary patch literal 16652 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 G@qYli;Yu|C literal 9423 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 diff --git a/doc/salome/gui/GEOM/images/geomexport.png b/doc/salome/gui/GEOM/images/geomexport.png index 4d4d3fb33f2fe4764a890952fd2b58159067525b..b8c181e7332e68e877fa4f688f365b4019b9d658 100755 GIT binary patch literal 33999 zcmeEuby!s2yYCnngoqLX0!m8?!hobmgMie~Dc#-i6{SmBS_$dyR*^1gX^`&jx-Y+b z&w1{7&N+YFKkt3+esEA`53^_OwchtrOaHghqFCre=m-P?OI%Dy4uQC?gFsxXzH=RZ z(&KZ>9KPMP5>v57Anw^;{kc~4PL>scc!CfY5>RkTSetNk!yTNwwKdgg)Wtzi+RkD8g0RZ}v-he$JmM{-5^*Dh?9y95A9Y~wX7Cq0ArF?p#qm#3mPdp0552s?18P%>OME?@3#TY# zpC)mP^F6DxIy?yOW#RR2l`M!tPuJ6P;l1d~q)BGtP_r}*yoNw*1SNPC3%XX=ukRN& z#N>RaN#IPjKiFb6uQ@oZsg^`(E+^O2qr{kh``$$Sb9$rkKF+ag)s9!{$inKpL$sex zcE(p;3Y>7nAPJ96ap{`Y;&Pd))M7c~#`mwG$y|<94bNMrDrEI;j9_)*uO0`+>;wkn zqLTC<<%!JB&yy0OEM@*`A&EWL4~T+K-a9a+JI*c64(7`KGWWQRu=k029WGWG7pCU8 zNs)35+o9aj*4)4JT^U<$r`XI?dV&!-d6*b3q3m2#P%OodJncZ){?3%UCFl&ybV8E; zIaaYptbxea1Gl&jNv;o635v=v1-U-qS<<3;QM}t>P#$e zQeC-y7}z`fD{VwqiZ6zzS}9^k_QHb6Brv##k&RTc``B(ZS&Qk>N{XzenxVy4>%V<@ zmb_#1JgqObH-mZ{5-b8fe>}x~*CQrNnX=wMSjI z1}?B@QaTgpN0fG|?M>9m#A#$`dR%J-?c4>c+D;Ce)I;>W-1pas&^*fbooqzjqtc(G z+~;@9Q`N~W)U20#E#$3F9ipFu^7=thsiiR%8d=Nlx>d5RmWJl4Gia{t6Gmp57o8x| z9IC^ZtIcLWIVAr$kBnq(W>{rr`0GzShAOwUovbNlN&+KwEaMAJRjDM@EaUXptwWMi z-;-b7x`EcK;KwgpyU@LibiC%nJq zxPI6`!+vMW2zNzZmo4w|cpwWS>*@vPk|JmWoGuYe|`8(htIGtzqZJt0hJ@0g$vU>+0n79f^@oG z=aNGHN`&VsB;W>k7epoor9$xgOEz$^%Mr+3CE1{KW{4^{ER} zyRD+>=PVorl-u8@VghPc>^;W$vjZjasLO`Ze$Oz=Rfe)-A8H)zedycK5?Ap|qVGmV zTaLOOgjw|V1TPitPJ1&kuHZ$-O`fbEI&At3&bipeOApu56T+`0l7GWAJzX($4ZU=C zS?=duJ*`>9eFSysb&l92eE5`A=S$1Mf`c1P2WD7@d!~e54;xNzjGz{Cp*fLbS4WY?!&=^9L-(1?0Zv&u8pHl=tsOUD_s2T-#7NCGU9XUFsX^9g^W znT&=gwa<(V$!f=Lm-qSIcW?PLbQ?&zp2KVjW`4jsu`eu4bxGXcJJrFyEO!yZpKR^u zSU~nbd0%q$dG3#Jdw&`J2M_U=j>RgBvbI7WE}MFA;^2*Z()paN z4(W`3gXqkKyvfxR-P9H5GXHySg;F1G$N4_yi;s=dS~B0t?Q=`X(fX4uoI?9o4fBwm zO3At0i-2xZ*l}rVJ3CRV+Qp*S{LTCs_p%vp2kVgMRDE}^DgX7V{(ZOhg9Kh}Xe-TbXi<9fl9ZRFFe{m2o6(h2o zCBEr$U)DpsDT{(2$jz1G_g9*ClZ@PM!{R$)_d%Nag{Y2 zb>&ZY@8d(|)tOY9wQDN&-66OUEO~Jc!y>ag_nTEsTg7~CdLpy@7nIT~1gPc=A0Ll4 zSbGM$ekqy4{jQPiT)9ac;qphTe#be5)=%E2{N9c=w;lDaulpi?$mYS`Z)C~Tl>TPy ze$ZX}URn*d_Dq*s7v@t!qLf1`e}cgmCfTvU)s+EXhnT~BVJd!SEg+J`E#^}I!fp6!Jw%EjAv+a&)}+i zwtHfesWh+VX$X-pyWL+I%r6#22QRrV`6iCc&Z1F_apD*U180Y|Ln~U*#8ZZ%l*kCn zNR?4PKO*(@Y~4?{HawO1=M;NHAA}X<)_P|6-Bul-XUKE9tPy0$7%f~hGYb{5ZMKU$ zzv$^hYF*lJvHto^*-6t-`8R$dqc8t6Ir&emW4+BxO{r0#+Xu!3nsOGC=SuCD>s*7+ zc^H<*kF#5Fg?IM1C(AEi>-jxpXf5$<@w1KD@jRjL9bQZh!rVGkyWDMq!FcMiF{3II z7|b6Z-JsJ$NSrfh#GayTp1Hq5aNx4psvKg;HZGH`K{k@&ET47yC&jscHR_LJ?tw;T ztrpa(6z)N%e_WeK(st+Z@CMPLc;ohQiE11?Tz`vpV|Gc#n-p^^)29rE{k4<$u$=N56oMojWnsR8K@P?gDv3&p(X8_u0< zoU}4UApW_e)}w@PJpZSU!WtaYlZE`&o*Eq25G$`*q)Aq*@4k)s6c)0xy{(g0N-nV6XBT=t1r`g&=iuYF%{-gSfbqw9*}&B>3q>W6pJRdE=y zEm`qqH~UklqqmEqOaIw5A^5|ZiHm~(CRUTTpQ^AZ&kJL@DGzrzR;%j}uY~kUMmE07 z(lN}76B>rI%6Oj&i}2uAiz_H72n!2$L^GQ9x2oB$3}iJ0;%|_MLhGLiQ&3ReLaSa}e+DrC4sqthZ zHXkDbUMdiLMj%JTVKJU zbIY}L-BSC<^ZS0eO0AJ~XcG3upW_HQS@~!c^YV1b7$(iqqs#g;eo6-}&Y>>|_PTy(vwJW>FN%(Pg8#D$dS}CB+S5)(#NRK2sa6R;CN_`*QlGM>1-v&YH4Klistwo#qt9AR&>iG~FIIDJ5X zT(ZjfpWP3d=7glPPUh+9>8^(x``g>r!!;OQPXcs>g}oKc^D;C4l$)!y+#@-^ab{VC z%o)s9ptH0f42uhrgS<=Oi!_!aAQe_vmxfvwfst>yjPs(GGFC@a(yL`}Wkgc2n=CK01sBlF{B2A1b7C*woNU#D3kke3hz^$=XPXv9Ym4dbrMK_tOI`52r%8tXl8UJ&Thi zkzQYHGA25@>XFfafWQzE?&yfb{-SrHXc=N$F$3T1mxq3mI5`eHzVG$O*v3OqI(X z$oAZ)pr@nL)Hqs65e{q)&RKia(%gKH7#XDVxwyFarR~DnpCZ9@xnNRWm&sb^$1UzV zZ8ZFsXC*N)!#-HVULQU@eDL64V}h8BtjAj2&FyUZ#|M9-@k(p>7~nUEOJ?w6aX6CdYZ zafxwwKUE_AfzVgQSIPCVv%<2uhJM}57aF)X-`{LbHyZI#(sVY9r6@~$>E1jz7^P2N zpmMmiWo2)FwbI~nMO=Jn128+zwp++}UG^$RMtOL6;y5hx<+8XOH)<`X>c-rJ0&JY32K;1^x(2xNY7RQk(rRqOK0{D<)+{d z!31JI96S z%S8EN8xW1a%-j<7lyd$3j!VSewqxEmQ6ogS=9N=n+=*x)9l z6n-gO$t4sudGQFdD~>(lr(9~U-EyD)=49RS@^Z-Vw?QK)zYiZjHY-woLoM&(a#Cfx zs6eN9_NV%nJTCCe`#(tfUB;ZPz~+kTg@%DI1`hyU~}XI~5L=FQGHc2nrueCKQO zNsGx&fBoOzxb3msL;#bGaQDw=n7XG4DV?32VH6^K$8!!JXgDpIQ)$^EnR~}W)pkF$aP;z=M2)ZRU^u3a6i4#mt$pUTyn}0X@%aMrGPq> zh>VO}vg5L}+%#QPZ}2#utaH5r1n%yOUGaw-HJf~gP_7CFJ_9Wi)4}%kQ*zfEX+a8E3Q_O! zl+?-$07rP7h!gc|R$9$`5%@6aacb`Uy0_l_)R(k+<2V2Jx+Ry{OsLZ_Qzyzfy{fup zCabH&!Dc(G9aaYM&%T$(X~%m4mEt(+zkWcG$M|!3*!?C?WVfp#iQ@M?W8ZUh>^LfnjZTfDRJ11et*~W zxHxkb&1Pi9M-Nhzym+TtmpwNil!h`I9oST{kC$<5!g!-;d4xqF6C>~80hOqMMiSU#nT2L ziKG}mqO{_HScZ7XLZ1DWWsg&xc3;XAPa<69z zJ@6;>JllpIuB1l4Pa#ZRf3HQgq@-lM#O(U@>$vE`@Mh8uA*Bpaz8^mV%ogvMvb^AX z{@kkd6S3pXI-a^Tv|!XbHX_rh0aaZU5bAO?G*(vCIiZ+}2v9bqwJW5&h{=wWKw0>) zQd2iKHqNdVGURELemlFn8X6kQQ_0$OnwuLN_0GEsrZiu5-0(K|53C1D#0^tZQwSQ0{!D&|#J`0_ zqyYU^RyOSOXD8%x?uXfYQZAYJ*tYhLGhS!O&E{19R^1niF$R*JNP13hFZu23J?Pm_ z3W&Ate(N=IN{YGl0!`pk{xa@Ofr4R4t;yMzP>hsUhB}jzbPO#o~*2_{5df~LsN4@+Z?m;k6C$m_=9KG>3kIf?s_T*Pyq;-)#q@>=Yu*p za@(cRk>ue%%Ij+cGk*7O$9vNRdkLi!)Ss;M%kbxwBcTe8821Z>nc4pd-8($&X>I)! zT~b_ZhKz4$@H95gDrIQWb8)FYCyFud|3<=Px0H2P#{I0V zYRCYe0T2C0wBxayj=+!YccK^=fliYSds|vGA!M5XB+Sgr3N-7|NB~ekUoq%O>U!S! z&$Sz+s_PpQHJ%s8i_n%s9>27?I6KzzIMz2dUWOO7gpzGKxegU*kr5CKr-?_vo!DRM z6|A-v09xa?G5*r}?=K7jrZZ@S&={%6wX~+-?w($fL{Lk`vAk=}NcJFl{5T;t))^`Q z6tzhovPZ8ba=1cVfDXYaopHP!q@UzeC9XNc58{dJ25nCI!V{P;l=F2pYDBRYl$+u- z0xvoDBbp5GZoYq~;-in}RZ$Z!s3dNKzOge8>sJfk>HVU!0PfGmM(Dn8gl^w^%xSxT z+4!8?|A1*2%k)L;o0vZ4^l#swM55&lTyop&-D$B78K&N+=%RknvzziHJp55KbXj!i zABAsBBurL64++`vjeNbR_|+MK5@4tK^5KWUUvZiT{%meXTd)LCYO9NjqU3kURW|iR zMsty_GT!7<7T609VOpK3WR!?YwaQ_Nh7c z%Mi8gnE-zosRSP59nl>A>XG+r)o~?)LYN(NxC!y`tHWd-P79sOxw)MwDdf@m8v7eq zjg5khL`NsbhwJ=ba%<22dhZ6}gQg=!9>-=J{zKbow~He~D*jvl@@R$S<=;T&2fbsK z4ZQ9rd#$Zv>2fa})|8+1J;o&<;ILmAh@g=v2T1w!sQ{hZ;e_Mt-@klt4^Q@2u^&Bu zMYlGXGaP_N@8<5#%gf8GUb!`DTEM7UnrS+m@9gXh2>l_Aw2;Wp^K8|Itt0$W=&=0-N+G=w*0Br`%504Q@2Km(mtQt>2>C&nS0@QwOHXOdtIk_IbxWsNDmNnXRa+GeST?askWBqG<$8$ z?9@g~tQFQ&_WD@1Vos`PD2g7i|Rn zq|4}O&U7PP?9*fVDx{qdzOxcs;!itRx zC&DNFhRVr9(c@q};{0xgOqSu>6cdRv(|agJ$r}6SfRsSP-Iz62h+OkY;Eluv8+sL| z;=6lmCH>!I;!);#VtTV}?ea}|lVMxmUhE9>HfXAG?vG^2C+AIGL&v~4T^O^>#>-bN zlTdw27j@V4VSe69kDw=NEZlFj%=GY-tUHqNXN=k~_3e#)`SC zyY`o0h}TqcA?zpe@{(HUCYyLSUt1vq^QWx0r%t~9SSuWr*1}4rt2?h^v>YzU!&{5Z zn&*So$I1;23|KKK?szrn8jq%BolE${=dFW!p_(^j#5VcbJcU-G-!z?t-*~k4_1EXI zQbK8iCh0rz)yx)EQJu&>tGU@(NhO-)`(X_Y4Q+Zm+xt->q9k|AJWj2(tGBfwzvH<)S`xRQd`RXGT zo7g2yX8G`@)H#DDB`R;`zqPiuW@gfM;-FO$t6Sc*zkGjA!fiM1seQ>fW*(O6jDFa7VXfX@SF@scmAyefrD$hK=L0%r9b;EbDS{ zb{0S;c(%UZ05Z(M?p|tQ4sh>r%Y-U4&_ad|>jW?P`(YxfZJnKGr@y8E2Ob|EYbI&- zef-j&A^lLc(a(n?GsG`VyW~@N`Ug>Iu^-e@JyoB==>jPI6m-&AF{0uu-(ojDuS!R< zXB6H|lMfG|h(2CSy6GiWD@IL>7yqncz`@k^L0DLYE;O33urNTvyskTx9mOmxEV8n) zI5;?PWh^Wl)~?N?%7FV5U*7-Do981iz<+QqdrD(im1*D6T&JauvfDeGdH2k7@DS4! zIVf!-R7kX(=i8U}kUqfFTB*a^M5ylFRLfwR z7|vJb(%pHCP2i0ZKo8;cQU12GaHCetOUxiCpu=1%Pkl5?@-W_I_<`OWBhhoK@4vqa zD$+%Xr2e3Kh;Yo~-Zf)zR0`c-BwL%@5y%(-@I%CA^maeHiz_!zY780AVNRU_Mdal4 z__puO3e(~4j&rsa(%kftGjrxD3V|bwazJTt%%Gl7kn|PFi=Oh{M@*A?SuzbYcTM==Lw=;;#+CH_1p7Zd zZZ0g8)#F_bnVZ}`yWP~%qQy<}IGF`e>8|IwJ}~{Q;M{4I@eKV2O>1X+?IfLBGh*5y zb7r`Ef4qG^jD70Wo$om8m(L6@gX(Ih(*ca;^H7s(Ejv@+H%Eb{|Q!^if#tXM=3L3(krTa_dzd<)vaam*k&RC-S=2;ej zIIghl-u~SuDWamynl&mw&keiWEO4 ztDXve_l#}RLlSlP`w2<(RN`{yhK}eO_@&c@QkE#^g7T2}H5{n2!}_Scp5FMz5RCM% zm+$iG>nA~9%~b8nl(l7+={lvKj0oRRbwAw;B<7fWChB`i++l4H(R5*R$m}nYTD8*n zm@@?A0d^%&q{^=VT|V{o@9yo!ixiR)L5fYginusA!C%q6v}c`VafJo`)W35?p`^ge2P|UH`FU(g8Btll$w(30jDBk4;bDwI zUHtf9n4tLbEJiActz6Z=S2;ZTpr9@P{DjYGuJvy9y_~^n5Jx_K{5aOfhp6;?>8Y86 z`{~221M}hhs1aQpG=URIt;!P^ioeS9H62Ra=fADA9tg8gP*fq=*CuKzgah#{EG)WB z9w5#{IcX@STsQl(naK#bDy8BVMqb9eF(~;Cn(!8U)pj*w@K~0OxVc|Xv{64|F4Q`b zy%FD~+Bga$vA;Pr<;-~fpG)*by}7_$1Cuf)$^b9ga9Te~eB8M$9%gi~HKY8NR=j6I z#y@_anz~Z3Jpg&Vc=3V;R=~UFAVABH`P?c+LrGVM3x=2Na!`4rwaz8JzM?iZ#k2u{ zbOFU<;JCw!ptrw~lG;Bw07>~E@|k?X4(Zo?1%*eJwX(s`xXP_(MKaiKAui+-BEn3{ zzGZT%;R+`$q6q-UsU3B!Ree&2Z^pyCbvbHcwPdO`1$ka z$=>oVsDLube2IP@C(9XAo|kpDi`_6AU5{pbnKf%OhgbJq&MT%oi1G03mwtcMtaE{H zPl540vwXNB#JIT{86K{Sj3;I{nae#ueE0P2Pdfdf6#lo+2GIJlcW}ie{U4|JC!Bj~ zmK)<$peO3+=xD%99w{;0UFZV(=Zi(`u(u>@`~g0Z!^U{5A83$|ad3)k7p2KpCTbk* z?ARKggXm2R4VujJY$o^cj{RJ7GCsrvv^1c)H@%`qj1y&ajTDXMUfsSY=qcZK0cCn= z7b&NCqzxp_nIn@3fM;2qPZ=p5pPou$fQzIU)6w3Zrq9pckWCD2`$6yf8@CsFl0AXy zkkc_RVBWoJJ>>e4>*<{{tcoI4sbRG;81F3k46ZU^#Fo}fZBVI#0j2--9tFvVQ9SAIsnH?6$#c=0UCJEQM+L{w#$Hnqrk-b zKz>ZAqUg819cXVbBPz1Y5muhIsv@ck_&-7jZps#JdkyLqZF?y@+sJ*o_0IXdBg!K2 zr7iW-r!#QdE*maS8}|10K)VV|QI?bI%T;+1tuHSxUtu=F3QB3lV~iCcxR)`Pu0wWM zYVFaNo1T}pCV_}){$Iv~ZM(=UGUuq)UBE=MXaM=%6QI3cG{4TgbDi1mUV@IzFQAPM zo0Gi2Xr`y9rQ(rQH8l@=Vd97cJ(`)HpI=-&oc@5#HUH|Zl2yD7B2%z?Lv+XMiJub9 z#vS~eyq$$>Zu%yug^U{+6j#DS$LjFqu6h`FMq@QT66rQ@PX`?y^SYF>EkV@rEpb_w z*lFgo4jatIqM#>!(~ ziZ0yet*~ruTw)4sxEP%L`qk(^I&`9{5#izF z3b7v!E(2cAe>R!tbudE`&O$@eVur-<(k>Z+$;Or%<@d-3M>tGhWr2=7 zyxiK}9t#7**52O!XFUAYN-UH3FbFJ6O-+F+T4j0657p;>7%#=TH%|{eE_$MLOR;nf zAt}6r?Mt1^h*{2%n(h8Tc;yD;QZrb$t%4#Dz5EZ4IfDs_AVY4}pN9C|BjaO;f|!Q{ zwnb!RRaH}Svve$LI#Lu~nfb7+y_L`X7T-{PcxI`K#y~!<;*vode6k98XSm$ zQx*{N`K9?NAd4F}ZX^z9!)0)%p$LsjwqX|U+`aS1b71rqvPHF}ihbh(qWPagwf4~am zRGEuYQZ~w^ZP4K*Mw&r=`2aptXlM`2yax{-n)YYM@4!6Ae$2TQLUIp2{L`{_vH$6l z`9J+o(cKtq+Z#*h?X4I+R;i0&?2bv79#GYrXoo7$ zaAo{oP=swo2_kvO$`#yvCVcMz`(C<F^`e}Q%rKY+XX)>_1 z*>I^@?^czZtfj3z4en|>7bw~<_1hz%o|l^pWfb?F4oqS{(@E~CqfbEp_3cz9RZ^61$wSP`Uh zIYD|VA~~|Il`EK&7JQQy_3(9zgY3g(%UD;B+UDkB7AnVdLzEO6P-dplTx*yjMml#* zcN{xCG^l6Kp0Ti4_kWWjbK81f>Hvk~{A8b=mUd~lUZf-wNWr8*F{Sp!WHEWmhPdHd1$4NMo$53XN+F#i66&9)?1%gbhB-{r{I z)6)YD)1~fWR1t<}9?U#gdaqxi)PSgd{xXZv+ zM8v1G3+gdQ{QgGGL4*w#C#xWZJ$4g?4y;<*kI6I?ARM% z!ZdtA?W(>E={I6y;z~>ojDG4v;iLa3`sp$Y8EKHJ#<%R36j--D^cq2X&BBlP57P77 z(@$Bz=Srvl{{1^M^R?G#jro6d9)4p1sAc;notS<9)5l;7d!pIJJ9VnHa6lpEU%RNGW1^e zn}{Rq?D=CcRGwT3O8!H*@{>JWz*7XA zQwj=_sp)T%GVrxxVK%goc_u_fLFT7ar_skS$=SzG1Qvql#Tg7rP*4yE;30%Bnzwz# zX($-+J8GSGUG|oq2G^9Ejo2)9Ckolk{PZUCI1(7`8y@ChWbE=Fw*^@R*2|}6GnluI zYky?pld%zq@qUxRP(5YT*Xi+b^#+ZymAz$oQ2Bw7FmzO}Oc49{`uebM?eA`mdA?F{ zK5oKTBw+MN1p{Ol#R_x!!;h_ncuVPcq*O+KndQ_)6M+_G3QPu9KuN$Pp=E(j4DzRa ztqueg;4i$;V?l!gcR1~*_egam?Q!e^BJUrarzx&f0qoD3! z6y|KT!+Kmy3;`}K8;Gg^t%nvwA)|AcubLF9w;LF6Gl}1B=}Uag>6fR1kkI)1ZI~Vp zot&;9la{$aOj4>UAxh;_a!=sT{S|+h>%qZ!D8Oj^r)wo9-dAd04?}QBNOwm^NkOsJ zuz=9hr%z!W=agH*Bo86wRn2>whk}_saUqv3$9N?i{q!E@rbQsm90%wqP7l{>*2uX}BvghVb<4U7U25f^FckfL#Abp;`z>pf#;NZI>|0|r-Z;VX*pC6p_02p{x< z-s~}c@XkYXvfkbEGoyj6cbgfjN**e{OP7vASVTlbSXjpd-fUdWBr41SaAt5&&>47b z-HCisLjRGUvq-=EI175Tr*G&T7#ylaJxUzjomPrao*lmulN->+Y|E+-;QKV6PY?{> zC*S|{xcJdIj~MB3xX-~FqsGInubLs9_%eSXg8^POo}Tb2Ov|&xW3KfFP$NYQTie}9 zt!+{q`{ll}1K+C-y_;a`o>owB82f@IJDSa8V7xBNiGj9KHZS1b*=k1>f#Gok{z9B|RbWEbf1?R$p38 zzXD@;Vtky3mlp)^GZ1}8l-5T|e04s<`WcmkNX#RjyV%$jG0^uxbH&ESUev=$*Y;GuUPQY&!hyGyoxe}BWj)u5ycJ|iWiP--um(Qj>7S;M9dDAbT2 z4uzYW+yB(IK{Xb1-F@UU!^y$E|>+Nw`Avj`oOTT|Wy@TKX{hw<Uar~KM0#nU;^U>cvjcmy?Yn%r$&u~d08DUbjzZ!DKJp2tgHsh;3-rN zI}6J;q*H)V_h3PjQ@dUi2mNxJvlQ%JxDm1!4{!b?!88K0mqhv*=xm zjjb*J#nC&%?o6s~e(V2Xp?kA{;6D;Vk^93W!BG20wmb0BpM@k+zGTY2@r zr+;F(ZXeT}QbonTefzesxY+ZVMKHDZzASX?^_(D)Stu11U=hI5zt|tv0(4zeKm^4M zgVV8h(-5fq}y<+0$uv-C<&jN)7JD4xJrtY%zquL zK-acruKFx3t)CzG0#o(wuBUV%vkG)k3QnL5g0TxK_pg=~nFQsLoRHvP5~SH5EDtv5 zEE${`WLYTFfPfN=z!D7f7rW@i`E&Xxg-6aw1V<9UaFCk!ZxZ)l)V`t|P}hMZ!P~dL zBV_ns!FL0J%+5htj4!ROj={eLKHQ?Bq*Tyg*Zt)O&}Y&NnE{!rv^1D`v!ij)^&Hmz z;1Ciz%Uc%0i<7~Nf?ESuCtlS2adW(CSCYAIuZv?!9oXS$nb#9w$wvS?fF^Le9a+Kc zYYn5wvH1SHQ;HoE)*V?!VrXf`SGbRZXi1Cd1jxyY0_|CIFRKqBX(FlOZ{Dyy!h{;V zzrVje)!+%%S}EPrr#di9LRa<g9c^FjQBaix^>msNTrKV6&D?( zS|`3htpI&blt4u0NZF)D!+Hx z4#vK3rqLGz9sT5RlOJI0&W??-A`DxTE<`S5Ald-ySpWH>Adz?Qo3T7`fwIvg!~nqG zBa0u@jlxg2$_;91Un*5*K;n8RcsQ8K!U{K7=Y{PO=n#fsruMYJ)BEi8utw|SW%}L-s8Zk4B zG%>SZ$`f@GmwD&+1V_Zw0umDKi^-mR@aB*Z02rc}gA$L>dhp-@K7;aeXzj)&R|5qz zrqBEFgD8nI(_yAW=|$}l=cEdmV*N)Vd8mhBgC=DJfXn2vqM5ZIqdECi@OB=m1}xm& z#U4<*P~|^C=)fl9tA!8{b;NQo$K=-bw(;*T0%hHQF_>$AL-q{~G9xO*dIxJGn2nfV z%jFDiOxB&kmF4R^App)pNs|;>x?P+1z_LWcT~UANUeDM~&1p2v`^&covxZjzlb;-{ zuWoEiLK^_)I+&wG#%cA0k;P6w0|sfx<(IrW|<}3pcJl z?dNV_LJy(?4lk%H+!@G{@B3Ni-VeblTs%DS4jP%H+5=i(AQ1gzc*f&b+r~3vlu&Mi}mRt*@w~vN~Fy2hj#Fbc~Xv3JCQf^YimTQG-Wm zr-uMrDg?}50JH;{ix|^~?vU})P{8GSW_Ds#RN z!(Pn)LPY=1vikp%Ke6BRW#m6AocFD^KtsH;ZxyRlyLohbz#hi*LRfYf3jvv}+fSc> zH}Ns(V>Jy{={+Kz%zWbOh%M$vrrtGZ)!_)M3IYBHE2Pb;*QPhFPVy~6Au73ba`86s zmn5!#pSX1{mg)M)6z!jyhphj8UJqX% zSB9MAxVi{Xl&NnH2(c}~8~@a_bm>!GRQrx$T|MhM?M4Yq^S|4YQX5~-_WJ)MpyeyLM%gr>{>nNdgu{Ho1fODw|P7l)oeHf zMY!5qT70WQsx62R-@9V@+^fwT(Fs+sSo?GsVEajN?zvXTY}$Oa1tG|>PbhN0sSMCp zh6qK-JLPX0@#gjuk3|z-a;M~jw0nrDr^gO01t1J${Sz9jk|3vGUa>IC4#^rTk;V-! z*v;5X*)g$JKQdB6=3=zo7Ex7^s>3dyGvIjf1z{EXS_Ea=PdJk58VdT@X-9B8vc7l= z&#-*SLVr`#=CP;{3D-?#wV@nEde3+%PWO}cTIU+iQ^ve|@rSJ?#Ir2TNt9G zhB7!_N^QKj5PwM1tiY(0r6_Ir2r*ue5FQ3$@pvFN5bcD1p8={5h(eI3b1n6Cp(o6G zOSe`Rk^L@D@yhhtY&i6gmX;2TX8b!l3;PeUA&KR%F2n5!1Q)h$MRpmeRhwnumI7~^ z9kZ-UOiJ3ApJzW_zG7z)$SXz#VWtYV2CC=Jw^9em)=%Go*;m(MJ)Y7O2+&qW2$i!B zEMvSw8#gA9=3Lx5Kk=WPjh5bp z)K$Gy{E23@0*~!N$V832A1$}*!Or|`kszaNlx;9k-qvn^-KEFn#)M!;M_xw^nbTt8 zjp8nDt0%MH-v|Bq(>&PDGK7u@v6ToX;rHO7qss==FEqElPC`sfKUfQjCvaRE3W~=5 z{wq;ThG+XD#7_pZ2SIO6O-b>CsA+?s@4eH*&BKEOK2V(K3u?mw(BR^hYX9&8v3a;& zr((Li6DFf!&tKudVfP}~#$j@m3#XPItu{9;Go^&R4>iZ9U3qF1lU45)A^!v*P*e!~ z)SThmd)V0g!0TFZDBkJn0=t$LYFN9_Z}O#&hW#^3`@%AO+jF3X-8;8m0w>hj<6svy zM4@PLujXJ;YD@X%pZxx1NCJ^w8l0WQEXKsd6sVS&07;Q<6EjB7VH=8zQ?)y`Szb)W zK3*$H^}KMdD*UZCmFu`!$fUtHR>2H@<)_UCGCch9+O%J9geXLj>%9~L_kY#7w(y=9 zMKCvj!FXgaSfm9? zn9K_INr#Un9^nh9cHz+h4DFy`}i0_{ZwbrI4eF%mF2BVQq zc=W>H4V-foX9o`670&^i*y8;_#_R(=4%-#R$H&3`Wq^nsIIdSn7P6t|@W|}vyo86+~XPR2hP>x<@C8JhjM(O!%z8#5dM2D1OlJt_KyJIDkd6j!1>B7CgS{D z`2M_LV(NyZw;k8=<~?#S78D`aa=~+y5gEp)R{j{+01j3l$w3=Ua%U{JXddctb=dNx zbQw0{07*4{IFx_sQWqMEjl;{aT1C^$$8tG;44W`wRbnf)Zt081yp~`wW*q^Rtk<2; zP3HESpKajXaDHF}_4%hH&DTP{_w+Z$Vx+-nOsAn)JY0Twv0jnkZ`2mfUtH4RXVm}g zMV{Jix8wP#R1tPwt0#i0r(>4J4d>CL1zNurlgTJj<~y+Cx_EHPjAn+@{AFU8l6Pu9 zN2AVu-1fXjHaYi=RWALfGChK`{TU%4xE&S~)er*!{!Sd+48#ToSteZ$L@j^6n*v6o zrN%(MFVA*+VESL#MqtgvfnSQ_4%7v_tG~`3pb^2Kto3JL;{ZGV2F0b}Y^MV@WSLBr z$J^5r9{|LW+>39L`SjiY|S)+ z5mMtcLyiOcNp9b|B{B9#=D?&(wNBIWGDj$9kSMshudffZ{b%yu3gQ20NTF>nZ?9s~ zpi5%aC&od$RqcK-(n#jXQz?_o>?gKzM*>FeqM?pEG%#!R2ExN&!z^9nROEHMgxoVm zT1ka~JLVFR=&}dlcS74w{_Luv^U^WWkv}WliF}P47Kh3+88vjitW0uVh{ca0PhciX z=3Y#)-Ker{Iq!OTIL`g|@A#69zCK3v@6l1lXKmLIk2peP)YP&If0Ia&y||SeCLj`% zlU=Vz$`KMO_6rZU@+YC1xY>5O3eUo!;1BVqmE4 zcGmFFyzqZWBf%GqK*aHL1o{QMH6BK_{$v$e6kiH4@t;LO`%buUVUk(s%tt1FS) zkx5m})%6q_f^Uxb2iC|(Z5>x0h7VIj+guXiFREWkDg~;r$4%Q*bG3A6tYvI`{BdBD z#bj;l4{gjeTn-KnZ0sIL1_NW{`NQZ@)7~B(NMI|I#3rKE-nzx2B=z~b=WKIFJ$iUs zG8xZNp_{W%k7DOJbp$^LyFD#!0?{AtYXbN8qPH$_K$B4{>mMhlcoE)|ULr&7X+O5wd_zo*|Ri z-P2?E{83j|7pR6eo;7Jdr^OBMs=baMNEOj`xH&;~gl}$U4qRVeQ4tN1nUxP4$gUyY z(nh*_oDvZe`<4@&e+rw~-HoSWW)>r#p_azAvW`tk)OepS_x65qg;J9)OL;k+oLueU zX2WJqIOLDnT@Q}tJEFFn7{dIPRzoAA7xX(KlC|XJ`kaoo)R~yBduik1d9$%ox#VF5 zHhmJ~alWg9CpUOxV^*RjCl)G6&=WC@_Fz*6?n?aTle158f*%hkmSPW z6(BL*hjm_5cI6yxb&u!_j*q{zc&w$H68!m*lAxfgT;FZx0%jcEr!#q9XFf*I1b1}A zGcsJ9oK=++NMvWz?k;L!pvO6GB-{-a@jS@w8)Sdah@IH|oa1t}HSD;liP&EVHhFmT zBt>eP#=j7ye%6MsVPQFyn5Y58xoPH)(j6}k3PC?|-n)112z?YiJ6=qN{SwN`PDRJM zId~{LF87K<3ub0!P0~q_kWEZXSeG#EYy%_$DDTOwXQ-N+o3jbOdNmCnwk3pgtih5W zKTt6)<;oM&F&@*_K~`2L@VJ+Mt-pu(Ju-2AuC^uL+SwXON)y~ND^B@liHL(H{49&3ZR{$xy9h=&yM zR#y66z120o0z9uLcTWEL?hT5RkUgYmYWn3$eQ(yCsG+=+O;lW*bO@KZ;500(z*E5$ z&eO+~3>xSiT8{l37Q4O94twOOMK0E63R83$ZO5a8$cysMFB;=8I z|8ITkd+u8IuB)flGyHz%?6dbi=jFa1O6p*1lV|7Og&(|eJ*a*JKR7k@y;z@g0zrsN zhgp76B_`0ta=c}wS4&qy3R$lkUla!{S2+F@p%29fJnX7Apm=iE~G(UV7y zm|im;es9A>vG%&!GAAgxhKZ&@JhI)^m8MdIbOt-6Sr$7ToBwC?X74ORVM_mU^MPU^ z+yXnNi%cTt{ZKoz`&@g_ZFjWEn+gBnrREf5rr;;(d6yM* zhu=vKvYDLyR^BoE{d*R&4nQzN!fsEo=N4{127^eML6DM?;-2PRV`F2+p85{P;qs3} z-7`OFNL~B(?K{Gx1|0|DBRn@yQ_O1jiimJ?bEjuy#D<3M+PAOAmgLSobm)+*tSq%3 ziGDkw!LmhdQ>;(9*nG&xY@5WcFQj#&8MQ7#w^`R?ZGpimczx{ROa*Q&BGV+trSn_wxA50{(oIXf2Bqp@ z7_#rq`P|SjiRN&^2bwK&&?kW3tNkV1{^bA!&^7`C1IdXjLpx1PTEa(}mnrB2RdIAQ zC*B6?3Bm{A?cP0_Xda@;AhhImV4$&)QBF9?>qSq0q0pY&kC%gk0~|XnYHOYTywnVV z79IZOX47s8#`&jDpGH$9{1K&p2c@Z3&dqIWhX(c&baYpw^dLJ2505um2s$%O(O;R8 zoP5*G4MB`9JtY&Z}R7H=!RGd)iT-L>;!)xb3wE(ZT{rsHbDenZ0p>JqLuZh&&4Q1I0lJ=c!h z=kMqD{{8!=!UsnZ>LSJX1tcj#Lajr=2KrQxfw0BP1}mv>ZJMB>I(G5mz*7<9KDG}> znLfEC{DDmcUJ7vF4`SrIq+Y&A`El2EZg$pV{qMUv3JwPzhrH{rD*_n<&(r@J9c5x+ zk#kz8LxU=8IXuvxhQ4g$=TG!0Bj_kwZCB^#=F$EcVRV4Iz?ID}-l3_}aR00Dmd2hE zI+5w~Q0>6{D=8^K0e=4cInwnz^cUsXv<94NS3by2N9ix-ZXv+1;o#u!k`{i}(sD3P zXd^8-SvMwybL&?0rnUF$M^4MBEVEXrlw4FO?C+hxq^^B zy8AP_5Gg4roLyaQuUOmn7PvsIv2K8V_UY3nB(>Uz13Nf5PaM}A8Xh$H+kezKy|7T4 z(jRun(v*9@uLQO;hVc~StX4%0i-$izj+D~1>R5vTUrHAycc1@$H2IWE- znrhL{Zv6#j9hf5FcZ0)_Bw3)TQPtfF`G*6)Rvd&dj>0jm-_wFb8P7}CySkboj!8J z59KythEkA?jg2%TfG;~QFAs!0qRO#jRD^QEDHzoNDvj4H#cx8idGO!?sa&6*KdGS+ zspKi=B!byi(D`xS zC`5msWBZ^6;csqb#a&1!3EpCPS=namyvj;-E{5&fw;Nozpy<%20Kz*Po@_aKi5t=ldLBsB;?{U4>IfhdpTp{uQ1ZVEMS$l$nR>`pIv3eNRa#j-mxpW zRsoMvcWK+kpsku9V6X)gJ|HSu^>Z4Q$InyuwuNu?Xc&WL(%Ig6NK%r5kV$ue&U@O( zs0ZE=s+OH-%n%VtfBRO()^-ffi;RqHZe}M@R^CiTUupZiV|>1MY+!(yl{+yb4{smvsaSK^>|cIY^X}B2UR41WZ1Mv4tMk*-8X6kP?cw2J==6BIiPBG@Z$5ayfTa!j&E3Pp_R1CH49Ib$ z?SStI2+D{1SjXHvk783 zR`m$Q#l^**6Wb|N`Z;F%9->ytd5!*R!l%xSa(R_NPY0MmQg0bP+wK?Ja z{|;J$31m%vzUTCJUw?n{5cP_IYryG}oLC;#c>0?+Zw6Ta0)l~o0m&1Fjq~TZNVVBC zXqv37gA^)iM~~vlVN;@`qf_@dO!8D!(uR-`GF%yniHTMLVAgPLSvxL{YEr1+Ml3CC zXOkCNL1W0t$))KVl5BPJ4IiU_bD~-q);zwq=J)U4zS1_3|3Dz%MHJfi=H%sBzNW<; z(|$bi(fSVT!B7heV>5O}_jPngU9fO(q*)c><1@Fg$ORBCXXE09TnaQ08Oe^P+2IW5 z9D;YtuQ`yOa4=&@A|2;B$-;k zgoh_|4xFex(MFPQnFLyN8nz-D!AzrHb z{m+t0y~6byHx{O+--7IY`O*^S1E!J6Sq=^xGc#VKGd?~)hUp*I-hu#xUt^w=zZ=HP zVz0HH`ugm~i@E|B;SExpIb~biC z+TXPkbM5bT?}gC1cg^ri4}tY;Z$J5VNv30&4S!s2*2K}D%p=R!csDyYSKjltvzM2W zf4Q~2{e$3Oa^j`p@%_uE@bMHB6hLeY%Q|i*dDgl;VR?up`@-FqTZR@EZd|y~>m`Lj z2us<6{Ik1*)Ql{1s_WZN;y{p&@|qlfx3aQQSy>q-q#Z3HMNSBt6w4?ou3;PDEu&Qd zND{70!Uu3Oax~JbKnA@mUsAs0YulcEa`vgAFfy?`d;=R(6`z7wW!ITGIeWY>OCgqb zVvlrojtmTlNlMNR# zY8w+5nhdVyl~?@yv-6qaCUSEAkNjBVNEeg4`@W78K2%T4&&$)$)cpBp3D;JASEG!; zQ&vyPw!e!Z3ZrzKAqAE-fIW|jM{dGIq$L>f^eL>zx<`)i?b-7Nww|J*)rqf#%Qu%z z%>`nVZog*OmG+?eIeHU@-8?)Tx{L2<3F5^!K9_B6Ys+x{*bwd zICeH|`Szw?2g8O00|Nqb>fJBpesK>+t3dJdznHOtA+%(KVactVT_IVBrrDQ`F$p3$ z+2)KzD_oS{dV9$TQrz>tGco(M(DUmJ3YFK|G47)eRSBO=G~x~o%`Ywj(K-Q*&&2cErvWF%AeZO7yVT->%#MpoyZQBHZ(0DazH7 zXR(bhYHMnA5ht3PYtU?2Q^V0#@jIYH);Py<3!`)+5)K+rKb4nb5YBjB2fD7(T`!b& zx=zL1mKR{Lxi|A<`?6@0m%!Nl9h6Hf)6VnGz2ACocuZv^XD~Bw`!hSsiq!`CshR)S zc9HWyF^AAiJ)bdVBgyH%zB`Q}A=&><_xIn|XXd&CR^$j}E7wKWu0iVLw6wOEP@WODl^{@LIK|wryD){)WofwPfas`iVUt1fL1e7xB?yBwW?HC$y?IQz4 z2n(7hAD@2wA)}?G?Tc4*@7O-Vr%Lc)Y@;MTflGRQ%;2iml^x%tZ_O8G-*rFS|0N<}={;48J_ z1AmZd>E_|3nmTd3C+uR{RlVhH<|sy+9Bd`$_`NTpw%MFR>AR%m_x(F>ahhRFHLYOzPDNL)oJ@&8j3{}CGT zedX+1NGE*opEbfq@S;zS}!Tc2M#nA$nH^}h>0NLOYi#x6`5 z{Q1QOdY%ACKYzTb18(D>bSeIQ|$B^Rf#3@tdx{1jc4KO46bL}UVMN(XyX0bx7IdSWM$;&G_SJz zs2tSrys!p~8d_{nqH+p0Z|3sjXSw@<4NjN~dDhLyb|vqFP<&%L#r^xt%R^9*Ty@Zb zl9Mxo0=`a-jxsDPtfH!_Q%6NrwE`Jp+M5|Q+Qlz@z-{vCA+7|el)S&!Ydg<@0m z4-CcORLkzPx>;)DV02r)=o`C^|ZGcg{ z)KOPgvvtRg)U-5Gc!7SH7#~jrR-A-G4bjQS$VhPqN*%P&0Holz+`e-Mz!y^{%ItO$ zK4D>J(7jMqb?oTT%>?{n*WhXdVt)Nv5SR#n1wdI_yP^C;C(|6auFZ!}8f0E%&It+G z7f8ymyNkTGeL;HpPd)n8oC>x_(wN={7;UZwKm9WABy z1LaYrA!#?4|MVJ!b8H$T%Mw9-f|(^8VKH403FePTac4lmbP_o03W+Mc)mU;6{MJzrV;NHiQ$O6suF1=S+5u*5 z+WxIS{D8(6@#4Nqo?c!h85#D|pUtqu&@>b!Ebe&CS>t9T2D5T;af4GK2*<*oNb^v!DJp5u z@r5FrGJV;l+}1>?&+%tf_T(v9Yn$@_^#W*V)pcAo-lBE{*{S&5teu_R^A5RYYe@to z+1wGgtMf;mNxJr(-xN9xA2v+1#~+4K64v!iEt@uO^t?z+q^F}p!U0B)5MFDsRbx^! zHO1atou{8SH#Y}|_JidIE=q>$fwI8&Ych0{6|w zQ5v^fQb?Ln+P1c~`VzVs>?iH5%Z$y6<1_siQoe@+9^Ol#A(T~gRaA6+yA>z`%u=y>8`f4d5PSA69*mT^QW6bE_;ULpElaNmNrqV{Da=VoSKml zx^n5w*~^*aw>>{=$i+PPY+kziC3u>GXdB6%J@-OmVq&NmxxRtmGM@#@x^ri2@J7)a zMOAqPg>RLWB%@0^M*rIeqnp;&qsvYs z73(wzjpl*@n61=za&Ta1?>}_9usU@tunoS3hdX6Y2!>(w+4+tl85tQEk_X_$pO~14 z=8Og?Tnw8eCs2sxVQD`vb;5wrhFJMvh94N{r*3@A_~gl}r&b?)Hv1*%4iVn$6fdR! zIViqxBV(dxWNd5+wkXy!pYPqO0T5VGVixLvzIc_HChvYvPVQu5d!3kg=G62hg=NU6 zin9dqzNiR|H2(hnK@@zH{_i|S?7??xY6i!~nl$vwVs(Rd6O)$S*gu{L<&|~%c0fP? z$ZITHTU%S;x}@ZjD9PEFn5gOLVdUVBV-Lq{YSGd#+0PH;}LuGNsSpprxy;E1&P1^mI=&1R}NrpBL!*PESum zGt`b#QiQR?snrSvf)C{`igWLsZM2;4qkY;^?dANwv92ydE{0lucK0tf{?n5zGXAK6&@913$ zbMR;QR6oB>JffyOVUiMOB5sBuzLGwjhLWrrNKRQJWnn4}~tl$${AD9eHPzY0QZTUuU5J%~^*%*%Ui zu$p;J%@cij0E{>d5p{KCr6E%6Ck)hBdtmF~cgA4J2DC}A(^bNi4g0Bcb0)+?>8m|ze4%Uy z&dYc#*g2S(TpiM|$sd|VulXY%XU1z;m!{BG~)c%77#Xz;zKrw0_6y|pz6xyd2^ zNQ-nZm-vwJ-@iYaXTu70=G3V-sj1`yQ;-@SAxK@Ip35hWAKwD%0&~eg>Vu9sp{Yqv zPfseK#@yD?Sb)kFPN?CrF?m#-KvVMa@`?2zTyT&P)U>py-64s9*#ncp%sCbi&)hOL zuTeJsj}#;i3PoNf;i$GYfl!S_xQ%q=Vd_R*i=r0v2rvK;zBOZGO${dSUV?UjFpfv# z;_PhsmBPRLt@nl(CZA%H;)-%fgW5VX$OsZ5U}deqm`*h8W7Zy870^fpyEb41F7|16 zTUS>X*19lT5h58z7Gcr3omyQz>mMA7n?sJkj!6pw96<&q-%A2*S*0JrNf4TE2!cz& z?VzH_ntofli97|ePnMe%3q zALi;ZTebvY%-ts6N8#Z^|1p4svW3OZw~jxlDUJXfg1PneC7abe4hj`6svkc$B#umu zj=r^OjD=|*kn6=>ypq=D=7Hg1^{=3>aA+o+!U(Gf5o3K5lZKj_n|L;O?0DM=4l`&) zzzQLV(E_AlW{N+Hi*exFA#2LfM=J9ot&}gc`WtPY*r@RryKM}CVNaiW%?$Rd z1{56A*T??OC48`msi*=G(ff;BGdsygMn~_i7v8^jFQ=eD|6k#%!ej|2*mhA9fv_5k z!}@?8mju;75YJ#nSKeJAR1%qH@BIYZajtdmR^;i+e@pvC5zb0YzIK{hdU$voIr1^i zd;NG)>j;J`0A=GA$O!oVFvV>Pg&$-)BrTv~8%ZOqMhgpm_hu^uVbG3>Rc0J?0Z~!V z)_6kHa|;VG4n^bY)pQ@9GF1OfbTHk>yZqKeIQ8>8(zrhwvI!P2;e%iB;nwnF+1=)E z=_dP>$jE#P3Z&-Jt)S3w?3Yo5+q_=5e%k+uxV_aT?8xs_FwKBFHm{;ZDZW~5LNIG2?Ur;_XS>+YCAY_R_v>}iF4MP0&ynhLX5S$ zg(|=CIUpvSf)X+3)k6-6Va&qAq$ac2=eKnYfFFldldey zmB{|;Qz&sjc3Q;TW8vhC4h!>Vc+>OsYoe(?1c_SV(V?O6n3$6Zr@+Odc?LmKfS(^* z$)C3xZTYjP>t<#!%{nnDDUiWTJRKq(5IO)C&v!4d!#DntuN8m^lQV4kHHWd580d(s z4SF4W6CCxt`%fz3JN7kZAAoRAPfthh>HY%;)T;yx(MZn0&dw!&qprT5{$Ul64}{Ir zd!C>z3u(MgYl;1cwVnk%kx65Mb*Q`NNr(4(UO~ZSOUvSYZimWFsjNniz8UT4(Dzha zi;|P*?fsUl_ZwVd)qM_CzEGgv+r!Ixt6L^S0mZFtjD^d+*S)YT|INH28YBtI+kD${jVniLQ4R zFb5V|IH2N#_$8n2$imF5VkM!i8~r#snuf5pwJq{mb8q|s&f(igVP;OwW9=kV!D8|^ zS`WRZGNm(_%27gYu}a1ky%QJ+z8^5{%e@mAl0oUOl5lG4;5I0MQCcP5Q%ccJY2Ul> z3NlR+m7G@U@ZhQPe-b{(kcw-f+@cgJ8E7v3@o5WyIWV}yv9iUfes8EuC=4SbBM&zA z0Ciz~8R+UlQ}UP{KACwF!GN+oh=PC=4QBDUrlzP-o;B_Wq%}L;Fl02WSU|&XIhTSH z5_S=I5~yb!%Kf~pykO+Or0?p!zSu*b(W)gNa635I7GMdqN5P`wQ4+aEZ#D_9v#Y z%NTwu@q88-n3R|2jA0K*Q$S3(a`;b1^D&4L>4O1`i>{g)P%b}Y?FpBZ6@XZbpHzNz z8qI9jDRAK;#fS(CtEs8E#}rVhBvQ?n&dkg<#K|{u^3Kl8zEPYzYrH}BIwfV_{{3TZ zzs@iN-h?uT7V?2SLP3U_4!be)4tA~eR+`=7e2>Z4p_k!{HZ%nKid?~dhu_+B6H|v8 z4_2BTM1Vgtof4mz__M3o0$K;I8S<$B1N0Js5Ot5pzgfk_T-@fEcOwdEf^)jb8J^B~ z@2DBMVlkH7^7f&@U%B-2E`(3RYX~V2X^6{&v0> z*Nf4b`IoIPUAmlIZ#ywQPA9_!45gZIYH)A}kzwIitI)6n1uUZ-MQNo#P0k_S4#$A= zZZ1vl0&NWUG|UVPYmOSm#ybcm?romqU1I*W$EL?U;LCHeCZ>bg$csFR}r)TIF3#~ zoU0hu866cWt8(MW;b%p+eqG0iqL8c|bx(SFjDBve^zQwu2{|dQzXZLe(Dcrph12i6 z^NJzvOpUF&7! z+sR10*&{?{`t~4fs9U+WeE__L_Ecc|xnd6nywv;@D&OvZ?9Dpam%3_HY78_B-zn`piO0M>&fn92y*&7#I`NTiv@Y z3o0yg%DFRVoUAuTh;C@}bPxO(8rsIeQ4?)$W5cm^>s(?Fxk~>rQ}U!=9KTfEo{TZ6 z^OrUk9=>Iz<~cU;beL_pqJ_cw)Zow%RZGy{^mxXqmF9Gx_^Ami@7J=J5Rx=-Yh;3< z$$F!gQC_|%wvZl^rd8eygdFHUtiL=tzqacucYO0sk{2)D>+kqlwJt+tweJz0Y)Ta- zNq0Apc9Va&D`_s?wAj;bb81Xpyhj_4q6zxKd*)zN+Cs*+E%JPerTi zuuLJd@#pC}iv59($DG2&$u`Zdl32BPH&jUHd9m9ca|46zn8jqCedp*M)r@;uf{n3< zik3Y89F%g1&-$+Erj|v`ww!a9*E;eq*~IcP#8d2UL`uw;nT1BA(!S9C=h{{7tM~;f z?KQtK|9{J$Eu%WAjJID0Tn3+qCBMtzPp3pn6}4YLZ@k6e__^HRd-q_9`fm=iu&}Vc ze40Ab%gn!VhrLPd8@Z)%u%&{+cqYs_H{BzdZxfMuUcK=UN`8`wt{~u|?`Aj_gUy&J zU`uRiZq7!sLUDo;8MF$_6|qO5<1w?aU{K`;OejM*P<+6J zdHwlu6m<2C8>lUs7W+Q%_@1zM7;3S((kML(^zQV+9}*?t@P^0iY!pWn3Iy&WJDM6L z2%oq(k|B-&eQ0oSX=>4X{x>YE z5CSm=;Eb_H-ubYG>gufXSKfhTkam^6Y_6vEDfzHYczF1q>FGBqDU{q>SlHMo34A>2 zVoR$_t=4(i{_-+%hDJtGl9F0T>0!_K1qBN{Iwv1AU@Go|zi+wyy69i=-25@P1*!zX z*cy7E)>qf!lsw(nKQ5Pu1F8L)nW3SkzNN~)0rBIKg@uIhS$a0Px_jV*RIgDVfb^N2 zEe5~x%a@-T8njUmf+IWR4So)z!YwTY7#SbJlyvRd^y`yo1%s0iMJ~qWdhBJ;LwNB?Gmdjk^3O8HV*Gd> zI$b~B-h$!@id$!f>FRJHE2m@sN{ALHBlqXdhzhV9!9Y~$98&7Eo{^q@;bOiy{s!!S zI6XH%+jC`nFA@KCsn$ge)3I!aU#=d9sS)!%Y@$~rF&a9lm2u5+6a`dWw*GMPZS}-% zSaKpGVHm}2cUJbO_qWkt;cXU)?1yQ8r^;aXQH8nN$YflfhX29#*ZED*|&fc@7`!3h* z5K_b{dh(>rR%(l5P)kmWuU^+iO`$jJUEo|tJD*^X1#A$mtWzYBvbFLg{FzD~w+tn8 zq9uPd^vVMTp_eOSR&FGzG4{ZJ2E>kR{WdsUWn^VrTU+Mo=g5d=-DY4Z!UwdKKNUlO z32k^-7%c`Q*MtUK-)1RxS-|VM8{eS>gZQ@n`frkx5sqH`qNB9LY=Y!LY2P)7W8;iD$p=M>({Ow{A&EC-a$z6N5BBb zrWbrK;+`p$-dr2L+WfV*uP8|E1u%MIqQ$NAw@i<&e7Ut&IgbY0WF3PlvxC5`U=LtV z!DV`(8)Wury_{Oc6WNUXd#7g{`q?*ry;Qc+71;?@zVIKWUBK~`(Zh4BEW?= zJL&?;p*k$^B4s5Ij?I_mR?J;prB|*-L^bF$(TDK&-`TN^&^$b|7Pz>!!EJV!MR8!C zj_%~m8PAOYPt#XYZylJnvl_&`*5+keSehgwZl9;`&L>srOlVMJYZSruw>w%VQg`R} zZ6=EBf&#%%4W2&l(WJ9r^+1jj1kIht&!5}DtZo0%CLKZ!3qzojqvKvsLSSgUr@ZL> z71h=F#11HF`wxMwxJPmUoLH}s{5GDMBQ}(G&Ag;bK(dHUHct;|UU?1hMI_X@=)x8I1}zTC&+^qJF%nHc`JcXoDTu%(vIJb2+}eo=SVSWRKv)Hs}= zP8a|P@u4ug02BB+o0?$Jy5ZzhVV*@02m;N`<@#`({b<=Z09)!7l}9Lxpe1=3UCRFS zv94_#YA?EpboKSsg=U^aM44?Fl*6X+a5>=Dc1h(PNx9WO& zZSD2j9#(bgbrLf5%T}}LVma7dX?a>`K2TvYG3l$)*~w^0sGL7i+*t=X^c7F{vG%Mk z6S*QpSiEw*ecR~6EXB`h>5cDLu(*Z|1sM>82OOFNfx<>{qZ5=M0NTg8I=Xt^{rfff zLP?xuP0jL;&$J*7N@&)VBG-<7j<9CvchYyfGt;uVikifA=D?%%un@-IxPB!ilaeQGTUmnO+H(|{tIbz*qMZfQ z0vS;Trxpi3>H3;IJKSiIf!RaX-nz`~_+q#}Mmye68LdFKN9^DXS%7H|l=I?QRnsVVEdi=PQi-$EiAS9`GNK_lYX2I}gr-wM znSreX1O|ErP&^7x-r$-YpXEj-fwP?pV=|MIN!uPk>yhoE-$q2+?FrP@I z$bo>2%8dbT3SQuE(8gwKXJ;uwO+Xb=4!j1m=W*k_*YP^$Hqhty(hoa&&if>76~R=r&ze*?}){QN$e*KGDBPvuHZ( zM4qrQXg|PkC4zW7DFjrU@au!uDP2wBr|0QPA~B~4zU9|l-Q6)tE~ug7%FQIve8<(W zc9wpD9cORey_H6XASiT?tEuR1rX;b!H*R+|}# zLVwu{(Bk^_o62TBAmllnOWm*h9`nJ(28=ee$Tpla+Vb^Q4~kxNIKQMiKH3jEkD!o{ zw3L+K?%fwky*@y(OHJKBGW8tH1#%l6-b9~^=$}}$y+7Q|gW!U0fy(=tP1aIR*x%Xw z6tvlE18z_vsS)WjM#+hj@cC>mdZ9$`!iDt2^u(8M@-EFjMW|LP>^V04Zgv>o5Lsan zRt4adW^k^vy@QO9vhR5dvG1nrGAa%UTVOuK%bD)Yw64GIOO z0_CPOKavbUr(+Ojf6-p-X3HSHJ`UyBgG0|?9J%xEPG~|Xz%F_bpgBl-hR>$}Wj&1u zgLchoT#s@d3OiDG-LrUh4KUp+3sX#CE`F2|UVh#BgS8^om^kFPmRZmm5PP z!dxA1$ljb0aC*-~@PgPWF20ptab>`}?%81-b#*~OIdwzBrS%W1w8Ns23N|_Lg+kKl zOgl$TM2cTJF+S0S`V&)NmCqh^fsbZtIe#aocpardL|9Uz6hZ?bS5)Nf?4h1qcVBC- z&E8GE%9iW9n3}f8Q*0VYwNN{y1Ha+vmhp&w$wQKG4~^~kjelVOY5LWaCUx~&+t{p8 z^J*(?FwN@wd?NVsi4z(hg`Te|ql`aH`~T27_a-avcu6a+-r~bnpn=J;F=bxuh zd(!@AI6VA*8+ers7S?Ux=zH>=s3bO5R+BY%G*7z7?Vc0)ZcL-nH0n#KQK075x{1_W zS!6+}p_94sx03cBYtrNpa!5Hxv199hCc?$fY`on8#uxu}QhJ?PqtYP$(I#^qzYi&Y z93!<*Hce$@5?eBlk-8^K^Sw3+6z?Rt6W2;8ck+_`_nA{aQ^{CN9+J8-y^fJ@d1Tkg zzcIU`7Jq?>!q?l&f@9(T^kACC+L-8SuV+vA;MDkLN)r8ftdI=+jh}kr2Knlay4cbCf|v- literal 29200 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 Br1$^; diff --git a/doc/salome/gui/GEOM/images/geomimport.png b/doc/salome/gui/GEOM/images/geomimport.png index d194ec5b6aa426ddbc996f9d6949df5258a558d0..c25ded6104e78dc9fdfd0aca08be14f47e9d54a4 100755 GIT binary patch literal 28994 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 literal 22327 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 diff --git a/doc/salome/gui/GEOM/images/importxao_dlg.png b/doc/salome/gui/GEOM/images/importxao_dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffda51242774adcc81d3ef2915088ad76eb5778 GIT binary patch literal 8640 zcma)ibzIZY-|tWn1PKvDNkIW=krI$pN~B}tke03?j24EZpa{|+9b?qUk&@CKqY;qU z7`@Tl`MQ5S&wYOP-tQmV_jPv8=NsqqdB@p_)Y4Ffd%2~j+=^+Cjda%N$3+vG=}{2uQxAP(GdK`#?#8f-VJQ;>H+}TyI8w=KYs0G z;pr*)SR2gm>1Ao*=H_H?W%2L#a05kc!Z7N8!}RRIPBs8lXE#?5@MA-HO{$%DkpRGB zfa)80J)iWQ1#i>)8>=LHTo&XO%5Rt~a)Y0#Sw}>XIl${H&R~}gF!+>Y$)s^LJC7Im z1U@@8g>@yLG^U07{e0ZP?;=mc)pr|pr(ub;5J*NuS$|8wf3du2w*PzMM&?Gt-aghN ziL?sgavuNyr3ibsaI)pqbyhZ;+yJyqU1Fr5)PqP(06?;ZL+!_X1?bMgT|n^ENa^|7 z!omi3)Sv3WlErI@VtAkpyga=tp1;U+zm%Wbc|B^brSAt`=g#i^Dg9boL``w?ApiVt zG(WG)Wej|qadJjjpq4NHebjx~0j8mMR>R}~A610KH@U|jwCPNDONr#r%+bmHfq%7g zl~^Rfdc}uo%{|=yTRv+|VpF+~n`nPN`y{7vkB#lvQ+>n-49|Ri z903;wMP8t-w->^}s$Zjbn(p09QethvmwpvUd9=y$clB&=A8{_QX!&4*mP{G%&4hK} zy_ZHB@tC*#8Mb}!`}8hb+9z|vz^huwp~2+9QnJ`o2TxPAN{y;BsG;qr!sDD<*L>_h z*Jky+66NYv*l#E>@eQuJ+Ex{}dWEDr2Vne^cBJ*oFR+M^>T`*5-=pk~{`|tOi*GWH z_)g*8$w@8Q3B)cU{)L*=Jw!rFEG|{GV;vf$+LF3oEvKyZq)of(Lv>cc=RFnU&j-Fl zZMrm$h20>X!O2{*_I^1n&cX;&jcVc-ui>czsU86q`E-!4T*BOWo$ERl#d^6qJVl9< z$)wTzM?5ZM^Na?TE=8{MisF~{pAJ&7^SS8U5SlQ-O9<`^S#eK#Fvem1Ag+h%@@xhb zZKRnDTzdFwSqJyMucNkU^-5>3FaOfgk_IoJlN1}|l z=X4<0d9#igbBNpz%dI^+5+_KYVN~G~L-RnSrBlN!E7IAZ%MxK_K1#pwmGsVfaDjJw`w_IV9Vu@F zQ3Qz@h?%K#E4<|`$pq^6WHuVP?j%)ZT5r%bixp*s<{Qm-nJAYp*np~Po>O3~F0pav zO-`k^Rrt2r0X>TgF?S7iWwdu6pIA<xPI1%{;FunkeMLwY z5;f2J0nLNq@rQ5w?I?~-sb78AcMX@hZq-ggcs{uD{i$RiB|LH&Ds*)iw7BuX-leDz z5ooR;Z`6ei)7`ju2sG86blah23(9D$w2ry1bo920A4~QiVnclPWl`<-G1Owemqxgc zTTm@1v|a+!3N|q|F$n^Ti1fko2k*X;Q=YW&u3@k|h=$B!*vSMEU+RhChDks{read= z`hgpP`XCD%MTkDcNKspRWdYMeUnbq0Xk@AdH*hK3C0j*pI$U;G~|ajY(`?0&rSSPtC>yVga!cxBB)e7WX;e4nC9ahk-$lS<__4 zgj*AEiR6^SoLPO4pI@-7D5}v%ja>}uVEvx(xEAK^x$QJ0YKL|lHe}zUsdKn#DR&&7 z6c+U{*e{rIQ!(-uV*f0CA0uUJ$hVnIW#GK+3#BGBrNwzNPOXmRqIb9;gOu!YBt0JH z1pz{XRwxZ(KhO&bZMfnRXsMrg_)(6%(UluU75lUF->CP$i>=_o%BLTYs%B z=$?8~>>2KNota=@Y@|+lkL(s<7PlSjm0Ib$2j&M2^$ZP)bMv`jiPJD;wb!eOL>jV1 z7vnkrmwomIm5f#OAK`UTWrs9mky@<=6R_%NMMd@2!o*>$&7wHGA>Je#m@}QL@JID% zK%|BuqJZ)q**f&=ZF;q%=R%kqcw(lm9I1PSNNf7#AL|BP?|pbuYpv z>!1krUWwH>Dx3Np_>tW#W4abw`mJ{}>N;7rYs?UQsErN1u%tp`QyRjq?}o@dcg-6{ zj2+}1k^Gx5<*9wE=<4kw(_G*TIh5fBT%g9RlTHb@u2h>UImYgM=z(ZSh!hc;(pvYI(G3S5%dxCd7oZzF{r<(TizJ34ok* z)zIS)qh;?f?k@@k$?{xmINZ@>gn299jk!RtbtENeG1dD^4fNPp%lh3k+llWhS)JaU zbmsCbo+e<8P0hhRXlVTAZR)7`VZqo|i0hIfap4|O@GpI&=zOokx`mZ=cj|ES8`S5J zx9~YC6(fOsyQd=~4!+-ZxQ52>YpV5uF8_%8BAbx50|n+=TgDQifu164odvMo!;L=>>4B*k#HRTjc?8rtR`jw-V)uDcoJSDCt;L2nno={!`Z*$T97!{KS^h06h zAYt9&q=_5V^tkXZ{E}@>_}tNgb~W9{!s9$%V)cUe=n_@GfU99e7hnaE2z#newK80= zx?S7M6q8O>eSn-Ju7!zixIE7{l}s>-T7rWwK58iGnEU&rfsraPox)q)=nmHgw`vhP z>?~1mEu*M|b$F^dM+Z{=Co@SVEgtAy=@GlVV%<9fcNxV47pEa@_3qzUW&HQa z<>FXnQx0aqc6Rvbf|mU?RZ8IvD%p!yA4aGh(`1fZfE}#FBh%AMRqN4l?ZAb4cVU0U z&MA1>aU+-ws%K!pEF0*7o*L}Y>;&pHop|NI=W3Oe%8m{h^UBM2(P)GuyFa>iCp``T zC<@lWHRXwpO(cvvPL�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 G$o~RebR~5F literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/sat_named_shapes.png b/doc/salome/gui/GEOM/images/sat_named_shapes.png deleted file mode 100644 index cb3bca6609e041665b8783cfc5c06422a218710e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7159 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 diff --git a/doc/salome/gui/GEOM/input/import_export.doc b/doc/salome/gui/GEOM/input/import_export.doc index 50b792030..93ddcc384 100644 --- a/doc/salome/gui/GEOM/input/import_export.doc +++ b/doc/salome/gui/GEOM/input/import_export.doc @@ -2,34 +2,44 @@ \page import_export_geom_obj_page Importing/exporting geometrical objects -In Geometry module you can import and export geometrical objects -from/into BREP, IGES, STEP, ACIS and STL files. The mechanisms of import and export -are implemented via plug-ins, which gives the opportunity to -expand the range of available formats by adding more plug-ins (for -example, CATIA 5). +\tableofcontents -The \subpage xao_format_page "import and export of shapes in XAO format" is implemented differently. +\section io_general General information + +In Geometry module you can import and export geometrical objects +from/into \b BREP, \b IGES, \b STEP, \b STL, \b XAO, \b VTK (only export) +and others files. +The mechanisms of import and export are implemented via plugins, +which gives the opportunity to expand the range of available formats +by adding more plugins (for example, CATIA 5 or ACIS). \note If a plugin supports import of materials associated with shapes, these shapes are grouped corresponding to the imported materials. For the moment STEP import is the only plugin that supports this feature. -To import geometrical objects from a BREP, IGES, STEP, ACIS or STL file: +Our TUI Scripts provide you with useful examples of the use of +\ref tui_import_export_page + +\section io_import Import file + +To import geometrical objects from a BREP, IGES, STEP or STL file: \par -From the \b File menu choose \b Import. In the opening dialog box \b Import -select the required format of the file for importation and search for -a *.brep, *.iges, *.step, *.sat or *.stl file. +From the \b File menu choose Import/, where is a name +of desirable format. In the Import dialog box select the file to import +and press \b Open. The file will be imported in the module and its contents (geometrical object) +will be displayed in the Object Browser. + +The dialog box to import the file can provide additional parameters. + +For example, dialog box for importing files in STL format: \image html geomimport.png -\par -Select the required file and click \b Open. Your file will be imported in -the module and its contents (geometrical object) will be displayed in -the Object Browser. +\par -\note If the selected file is in IGES or STEP format and the length -is not expressed in meters, it will be asked whether to take or not these +\note If the selected file is in IGES or STEP format and the model size +is not expressed in meters, the user will be asked whether to take or not the units into account (see the picture below). This feature can be helpful if some wrong units have been written to the IGES or STEP file by a 3rd-party software. @@ -38,15 +48,6 @@ helpful if some wrong units have been written to the IGES or STEP file by a \par -\note If the selected file is in ACIS format (the use of this format -requires licensing) and the file contains names for some shapes, it -will be suggested to create groups by types (solid, face, edge and -vertex) for all named shapes: - -\image html sat_named_shapes.png - -\par - \note It is possible to re-open from the initial file a previously imported shape if the file has been changed on disk. For this, select Reload From Disk in the context menu of the imported @@ -55,21 +56,52 @@ as before this operation. \image html geomimport_reopen.png -\n To export geometrical objects into a BREP, IGES, STEP, ACIS or STL +\section io_export Export file + +\n To export geometrical objects into a BREP, IGES, STEP, STL or VTK file: \par Select the object you wish to export, then from the \b File menu choose -\b Export. In the opening dialog box \b Export define the required format, -the name and the location of the file for exportation. +Export/, where is a name of desirable format. +In the Export dialog box define the name and the location +of the file to export and press \b Save. + +The dialog box to export the file can provide additional advanced parameters. + +For example, dialog box for exporting files in STL format: \image html geomexport.png \par -Click \b Save to confirm your exportation. -Our TUI Scripts provide you with useful examples of the use of -\ref tui_import_export_page +\section io_xao Import and export of shapes in XAO format + +XAO is a file format which describes a shape with its topology, groups and fields. + +To import a shape in the \b XAO format: + +\par +In the \b File menu select Import/XAO. + +\image html importxao_dlg.png + +\par + +To export a shape in the \b XAO format: + +\par +In the \b File menu select Export/XAO. + +\image html exportxao_dlg.png + +In this dialog: +- Click the arrow button and select in the Object Browser or in the Viewer the Shape to be exported. +- Input the File name to create a new file or click browse button to save in an existing file. +- Select the \b Groups of the chosen shape to be exported. +- Select the \b Fields of the chosen shape to be exported. +- Press "Apply" or "Apply & Close" button to get the result. + +It also possible to export a shape using the TUI Command: geompy.ExportXAO(Shape, FileName, Groups, Fields) */ - diff --git a/doc/salome/gui/GEOM/input/index.doc b/doc/salome/gui/GEOM/input/index.doc index b3e02ee68..df3131feb 100644 --- a/doc/salome/gui/GEOM/input/index.doc +++ b/doc/salome/gui/GEOM/input/index.doc @@ -6,7 +6,7 @@ \b Geometry module of SALOME is destined for: - \subpage import_export_geom_obj_page "import and export of geometrical models" - in IGES, BREP, STEP, ACIS and STL formats; + in IGES, BREP, STEP, STL, XAO and VTK formats; - \subpage create_geom_obj_page "construction of geometrical objects" using a wide range of functions; - \subpage view_geom_obj_page "viewing geometrical objects" in the OCC diff --git a/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc index b4dc9afa0..59587b825 100644 --- a/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc +++ b/doc/salome/gui/GEOM/input/tui_importexport_geom_objs.doc @@ -10,7 +10,7 @@ geompy = geomBuilder.New(salome.myStudy) gg = salome.ImportComponentGUI("GEOM") # create ExportXAO object -exportxao = geompy.MakeExportXAO([value], [value], [value], [value]) +exportxao = geompy.ExportXAO([value], [value], [value], [value]) # add object in the study id_exportxao = geompy.addToStudy(exportxao,"ExportXAO") diff --git a/doc/salome/gui/GEOM/input/xao_format.doc b/doc/salome/gui/GEOM/input/xao_format.doc deleted file mode 100644 index 00d810973..000000000 --- a/doc/salome/gui/GEOM/input/xao_format.doc +++ /dev/null @@ -1,24 +0,0 @@ -/*! - -\page xao_format_page Import and export of shapes in XAO format - -XAO is a file format which describes a shape with its topology, groups and fields. - -To import a shape in the \b XAO format, in the Main Menu select New Entity -> -Import / Export -> Import XAO. - -To export a shape in the \b XAO format, in the Main Menu select New Entity -> -Import / Export -> Export XAO. - -\image html exportxao_dlg.png - -In this dialog: -- Click the arrow button and select in the Object Browser or in the Viewer the Shape to be exported. -- Input the File name to create a new file or click browse button to save in an existing file. -- Select the \b Groups of the chosen shape to be exported. -- Select the \b Fields of the chosen shape to be exported. -- Press "Apply" or "Apply & Close" button to get the result. - -It also possible to export a shape using the TUI Command: geompy.MakeExportXAO(Shape, FileName, Groups, Fields) - -*/ diff --git a/idl/AdvancedGEOM.idl b/idl/AdvancedGEOM.idl new file mode 100644 index 000000000..c82edf11f --- /dev/null +++ b/idl/AdvancedGEOM.idl @@ -0,0 +1,479 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : AdvancedGEOM.idl +// Author : Roman NIKOLAEV + +#ifndef __AdvancedGEOM_IDL__ +#define __AdvancedGEOM_IDL__ + +#include "GEOM_Gen.idl" + +module GEOM +{ + /*! + * \brief Pattern for block division of the disk + */ + enum pattern { + /*! Square */ + SQUARE, + /*! Hexagon */ + HEXAGON + }; + + /*! + * \brief Interface for advanced modeling functions. + */ + interface IAdvancedOperations : GEOM::GEOM_IOperations + { + // T-Shape WITHOUT Thickness reduction + + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShape (in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in boolean theHexMesh); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * The extremities of the main pipe are located on junctions points P1 and P2. + * The extremity of the incident pipe is located on junction point P3. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \param theP1 1st junction point of main pipe + * \param theP2 2nd junction point of main pipe + * \param theP3 Junction point of incident pipe + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeWithPosition (in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in boolean theHexMesh, + in GEOM::GEOM_Object theP1, in GEOM::GEOM_Object theP2, + in GEOM::GEOM_Object theP3); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). A chamfer is created + * on the junction of the pipes. + * + * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * \param theH Height of the chamfer. + * \param theW Width of the chamfer. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeChamfer (in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theH, in double theW, in boolean theHexMesh); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * A chamfer is created on the junction of the pipes. + * The extremities of the main pipe are located on junctions points P1 and P2. + * The extremity of the incident pipe is located on junction point P3. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * \param theH Height of the chamfer. + * \param theW Width of the chamfer. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \param theP1 1st junction point of main pipe + * \param theP2 2nd junction point of main pipe + * \param theP3 Junction point of incident pipe + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeChamferWithPosition (in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theH, in double theW, in boolean theHexMesh, + in GEOM::GEOM_Object theP1, in GEOM::GEOM_Object theP2, + in GEOM::GEOM_Object theP3); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * A fillet is created on the junction of the pipes. + * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * \param theRF Radius of curvature of fillet. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeFillet (in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRF, in boolean theHexMesh); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * A fillet is created on the junction of the pipes. + * The extremities of the main pipe are located on junctions points P1 and P2. + * The extremity of the incident pipe is located on junction point P3. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * \param theRF Radius of curvature of fillet. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \param theP1 1st junction point of main pipe + * \param theP2 2nd junction point of main pipe + * \param theP3 Junction point of incident pipe + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeFilletWithPosition (in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRF, in boolean theHexMesh, + in GEOM::GEOM_Object theP1, in GEOM::GEOM_Object theP2, + in GEOM::GEOM_Object theP3); + + // T-Shape WITH Thickness reduction + + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * + * \param theRL Internal radius of left thickness reduction + * \param theWL Width of left thickness reduction + * \param theLtransL Length of left transition part + * \param theLthinL Length of left thin part + * + * \param theRR Internal radius of right thickness reduction + * \param theWR Width of right thickness reduction + * \param theLtransR Length of right transition part + * \param theLthinR Length of right thin part + * + * \param theRI Internal radius of incident thickness reduction + * \param theWI Width of incident thickness reduction + * \param theLtransI Length of incident transition part + * \param theLthinI Length of incident thin part + * + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeTR (in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRL, in double theWL, in double theLtransL, in double theLthinL, + in double theRR, in double theWR, in double theLtransR, in double theLthinR, + in double theRI, in double theWI, in double theLtransI, in double theLthinI, + in boolean theHexMesh); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * The extremities of the main pipe are located on junctions points P1 and P2. + * The extremity of the incident pipe is located on junction point P3. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * + * \param theRL Internal radius of left thickness reduction + * \param theWL Width of left thickness reduction + * \param theLtransL Length of left transition part + * \param theLthinL Length of left thin part + * + * \param theRR Internal radius of right thickness reduction + * \param theWR Width of right thickness reduction + * \param theLtransR Length of right transition part + * \param theLthinR Length of right thin part + * + * \param theRI Internal radius of incident thickness reduction + * \param theWI Width of incident thickness reduction + * \param theLtransI Length of incident transition part + * \param theLthinI Length of incident thin part + * + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \param theP1 1st junction point of main pipe + * \param theP2 2nd junction point of main pipe + * \param theP3 Junction point of incident pipe + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeTRWithPosition(in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRL, in double theWL, in double theLtransL, in double theLthinL, + in double theRR, in double theWR, in double theLtransR, in double theLthinR, + in double theRI, in double theWI, in double theLtransI, in double theLthinI, + in boolean theHexMesh, + in GEOM::GEOM_Object theP1, in GEOM::GEOM_Object theP2, in GEOM::GEOM_Object theP3); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). A chamfer is created + * on the junction of the pipes. + * + * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * + * \param theRL Internal radius of left thickness reduction + * \param theWL Width of left thickness reduction + * \param theLtransL Length of left transition part + * \param theLthinL Length of left thin part + * + * \param theRR Internal radius of right thickness reduction + * \param theWR Width of right thickness reduction + * \param theLtransR Length of right transition part + * \param theLthinR Length of right thin part + * + * \param theRI Internal radius of incident thickness reduction + * \param theWI Width of incident thickness reduction + * \param theLtransI Length of incident transition part + * \param theLthinI Length of incident thin part + * + * \param theH Height of the chamfer. + * \param theW Width of the chamfer. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeTRChamfer(in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRL, in double theWL, in double theLtransL, in double theLthinL, + in double theRR, in double theWR, in double theLtransR, in double theLthinR, + in double theRI, in double theWI, in double theLtransI, in double theLthinI, + in double theH, in double theW, in boolean theHexMesh); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * A chamfer is created on the junction of the pipes. + * The extremities of the main pipe are located on junctions points P1 and P2. + * The extremity of the incident pipe is located on junction point P3. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * + * \param theRL Internal radius of left thickness reduction + * \param theWL Width of left thickness reduction + * \param theLtransL Length of left transition part + * \param theLthinL Length of left thin part + * + * \param theRR Internal radius of right thickness reduction + * \param theWR Width of right thickness reduction + * \param theLtransR Length of right transition part + * \param theLthinR Length of right thin part + * + * \param theRI Internal radius of incident thickness reduction + * \param theWI Width of incident thickness reduction + * \param theLtransI Length of incident transition part + * \param theLthinI Length of incident thin part + * + * \param theH Height of the chamfer. + * \param theW Width of the chamfer. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \param theP1 1st junction point of main pipe + * \param theP2 2nd junction point of main pipe + * \param theP3 Junction point of incident pipe + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeTRChamferWithPosition(in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRL, in double theWL, in double theLtransL, in double theLthinL, + in double theRR, in double theWR, in double theLtransR, in double theLthinR, + in double theRI, in double theWI, in double theLtransI, in double theLthinI, + in double theH, in double theW, in boolean theHexMesh, + in GEOM::GEOM_Object theP1, in GEOM::GEOM_Object theP2, in GEOM::GEOM_Object theP3); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * A fillet is created on the junction of the pipes. + * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * + * \param theRL Internal radius of left thickness reduction + * \param theWL Width of left thickness reduction + * \param theLtransL Length of left transition part + * \param theLthinL Length of left thin part + * + * \param theRR Internal radius of right thickness reduction + * \param theWR Width of right thickness reduction + * \param theLtransR Length of right transition part + * \param theLthinR Length of right thin part + * + * \param theRI Internal radius of incident thickness reduction + * \param theWI Width of incident thickness reduction + * \param theLtransI Length of incident transition part + * \param theLthinI Length of incident thin part + * + * \param theRF Radius of curvature of fillet. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeTRFillet(in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRL, in double theWL, in double theLtransL, in double theLthinL, + in double theRR, in double theWR, in double theLtransR, in double theLthinR, + in double theRI, in double theWI, in double theLtransI, in double theLthinI, + in double theRF, in boolean theHexMesh); + /*! + * \brief Create a T-shape object with specified caracteristics for the main and + * the incident pipes (radius, width, half-length). + * + * A fillet is created on the junction of the pipes. + * The extremities of the main pipe are located on junctions points P1 and P2. + * The extremity of the incident pipe is located on junction point P3. + * \param theR1 Internal radius of main pipe + * \param theW1 Width of main pipe + * \param theL1 Half-length of main pipe + * \param theR2 Internal radius of incident pipe (R2 < R1) + * \param theW2 Width of incident pipe (R2+W2 < R1+W1) + * \param theL2 Half-length of incident pipe + * + * \param theRL Internal radius of left thickness reduction + * \param theWL Width of left thickness reduction + * \param theLtransL Length of left transition part + * \param theLthinL Length of left thin part + * + * \param theRR Internal radius of right thickness reduction + * \param theWR Width of right thickness reduction + * \param theLtransR Length of right transition part + * \param theLthinR Length of right thin part + * + * \param theRI Internal radius of incident thickness reduction + * \param theWI Width of incident thickness reduction + * \param theLtransI Length of incident transition part + * \param theLthinI Length of incident thin part + * + * \param theRF Radius of curvature of fillet. + * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) + * \param theP1 1st junction point of main pipe + * \param theP2 2nd junction point of main pipe + * \param theP3 Junction point of incident pipe + * \return List of GEOM_Object, containing the created shape and propagation groups. + */ + GEOM::ListOfGO MakePipeTShapeTRFilletWithPosition(in double theR1, in double theW1, in double theL1, + in double theR2, in double theW2, in double theL2, + in double theRL, in double theWL, in double theLtransL, in double theLthinL, + in double theRR, in double theWR, in double theLtransR, in double theLthinR, + in double theRI, in double theWI, in double theLtransI, in double theLthinI, + in double theRF, in boolean theHexMesh, + in GEOM::GEOM_Object theP1, in GEOM::GEOM_Object theP2, + in GEOM::GEOM_Object theP3); + + /*! + * This function allows to create a disk already divided into blocks. It + * can be use to create divided pipes for later meshing in hexaedra. + * \param theR Radius of the disk + * \param theRatio Relative size of the central square diagonal against the disk diameter + * \param theOrientation Plane on which the disk will be built + * \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON + * \return New GEOM_Object, containing the created shape. + */ + GEOM::GEOM_Object MakeDividedDisk (in double theR, + in double theRatio, + in short theOrientation, + in GEOM::pattern thePattern); + + /*! + * \brief Create a Disk prepared for hexa meshing with given center, normal vector and radius. + * \param thePnt disk center. + * \param theVec Vector, normal to the plane of the disk. + * \param theR Disk radius. + * \param theRatio Relative size of the central square diagonal against the disk diameter + * \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON + * \return New GEOM_Object, containing the created disk. + */ + GEOM::GEOM_Object MakeDividedDiskPntVecR ( in GEOM::GEOM_Object thePnt, + in GEOM::GEOM_Object theVec, + in double theR, + in double theRatio, + in GEOM::pattern thePattern); + + /*! + * Builds a cylinder prepared for hexa meshes + * \param theR Radius of the cylinder + * \param theH Height of the cylinder + * \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON + * \return New GEOM_Object, containing the created shape. + */ + GEOM::GEOM_Object MakeDividedCylinder (in double theR, + in double theH, + in GEOM::pattern thePattern ); + /*! + * + * Create a smoothing surface from a set of points + * \param thelPoints list of points. Compounds of ggpoints are accepted as well. + * \param theNbMax maximum number of Bezier pieces in the resulting surface. + * \param theDegMax maximum degree of the resulting BSpline surface + * \param theDMax specifies maximum value of the GeomPlate_PlateG0Criterion criterion. + * \return New GEOM_Object, containing the created shape. + */ + GEOM::GEOM_Object MakeSmoothingSurface (in GEOM::ListOfGO thelPoints, + in long theNbMax, + in long theDegMax, + in double theDMax); + + /*@@ insert new functions before this line @@ do not remove this line @@*/ + }; +}; + +#endif // __AdvancedGEOM_IDL__ diff --git a/idl/BREPPlugin.idl b/idl/BREPPlugin.idl new file mode 100644 index 000000000..c5e59715f --- /dev/null +++ b/idl/BREPPlugin.idl @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef __BREPPlugin_IDL__ +#define __BREPPlugin_IDL__ + +#include "GEOM_Gen.idl" + +module GEOM +{ + /*! + * \brief Interface for BREPPlugin modeling functions. + */ + interface IBREPOperations : GEOM::GEOM_IOperations + { + /*! + * \brief Export the given shape into a file with given name in BREP format. + * + * \param theObject Shape to be stored in the file. + * \param theFileName Name of the file to store the given shape in. + */ + void ExportBREP( in GEOM::GEOM_Object theObject, + in string theFileName ); + + /*! + * \brief Import a shape from the BREP file. + * + * \param theFileName The file, containing the shape. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ + GEOM::ListOfGO ImportBREP( in string theFileName ); + }; +}; + +#endif // __BREPPlugin_IDL__ diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt index bdc32d9cf..e8ebb6082 100755 --- a/idl/CMakeLists.txt +++ b/idl/CMakeLists.txt @@ -32,9 +32,40 @@ ENDIF(WIN32) SET(SalomeIDLGEOM_IDLSOURCES GEOM_Gen.idl +) + +SET(SalomeIDLGEOMSuperv_IDLSOURCES GEOM_Superv.idl ) +SET(SalomeIDLAdvancedGEOM_IDLSOURCES + AdvancedGEOM.idl +) + +SET(SalomeIDLSTLPlugin_IDLSOURCES + STLPlugin.idl +) + +SET(SalomeIDLBREPPlugin_IDLSOURCES + BREPPlugin.idl +) + +SET(SalomeIDLSTEPPlugin_IDLSOURCES + STEPPlugin.idl +) + +SET(SalomeIDLIGESPlugin_IDLSOURCES + IGESPlugin.idl +) + +SET(SalomeIDLXAOPlugin_IDLSOURCES + XAOPlugin.idl +) + +SET(SalomeIDLVTKPlugin_IDLSOURCES + VTKPlugin.idl +) + SET(IDL_INCLUDE_DIRS ${KERNEL_ROOT_DIR}/idl/salome ${CMAKE_CURRENT_SOURCE_DIR} @@ -45,3 +76,35 @@ SET(IDL_LINK_FLAGS OMNIORB_ADD_MODULE(SalomeIDLGEOM "${SalomeIDLGEOM_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") INSTALL(TARGETS SalomeIDLGEOM EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLAdvancedGEOM "${SalomeIDLAdvancedGEOM_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLAdvancedGEOM SalomeIDLGEOM) +INSTALL(TARGETS SalomeIDLAdvancedGEOM EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLSTLPlugin "${SalomeIDLSTLPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLSTLPlugin SalomeIDLGEOM) +INSTALL(TARGETS SalomeIDLSTLPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLBREPPlugin "${SalomeIDLBREPPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLBREPPlugin SalomeIDLGEOM) +INSTALL(TARGETS SalomeIDLBREPPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLSTEPPlugin "${SalomeIDLSTEPPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLSTEPPlugin SalomeIDLGEOM) +INSTALL(TARGETS SalomeIDLSTEPPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLIGESPlugin "${SalomeIDLIGESPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLIGESPlugin SalomeIDLGEOM) +INSTALL(TARGETS SalomeIDLIGESPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLXAOPlugin "${SalomeIDLXAOPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLXAOPlugin SalomeIDLGEOM) +INSTALL(TARGETS SalomeIDLXAOPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLVTKPlugin "${SalomeIDLVTKPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLVTKPlugin SalomeIDLGEOM) +INSTALL(TARGETS SalomeIDLVTKPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +OMNIORB_ADD_MODULE(SalomeIDLGEOMSuperv "${SalomeIDLGEOMSuperv_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLGEOMSuperv SalomeIDLGEOM SalomeIDLAdvancedGEOM) +INSTALL(TARGETS SalomeIDLGEOMSuperv EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 86b959374..149bf9674 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -177,19 +177,6 @@ module GEOM Interpolation }; - /*! - * \brief Pattern for block division of the disk - * - * Used in the functions GEOM_IAdvancedOperations.MakeDividedDisk(), GEOM_ICurvesOperations.MakeDividedDiskPntVecR() - */ - enum pattern { - /*! Square */ - SQUARE, - - /*! Hexagon */ - HEXAGON - }; - /*! * \brief Type of field data */ @@ -3710,20 +3697,24 @@ module GEOM GEOM_Object MakeCopy (in GEOM_Object theOriginal); /*! + * \brief Deprecated method. Use Export (from the + * corresponding plugin) instead; here is a name of format. + * * \brief Export the given shape into a file with given name. * \param theObject Shape to be stored in the file. * \param theFileName Name of the file to store the given shape in. * \param theFormatName Specify format for the shape storage. - * Available formats can be obtained with ImportTranslators() method. */ void Export (in GEOM_Object theObject, in string theFileName, in string theFormatName); /*! - * \brief Import a shape from the BRep or IGES or STEP file + * \brief Deprecated method. Use Import (from the + * corresponding plugin) instead; here is a name of format. + * + * \brief Import a shape from the STL, BREP, IGES or STEP file * (depends on given format) with given name. * \param theFileName The file, containing the shape. * \param theFormatName Specify format for the file reading. - * Available formats can be obtained with ImportTranslators() method. * If format 'IGES_SCALE' is used instead of 'IGES' or * format 'STEP_SCALE' is used instead of 'STEP', * file length unit will be ignored (set to 'meter') and result model will be scaled. @@ -3732,34 +3723,17 @@ module GEOM ListOfGO ImportFile (in string theFileName, in string theFormatName); /*! + * \brief Deprecated method. Use ReadValue (from the corresponding plugin) instead. + * * \brief Read a value of parameter from a file, containing a shape. * \param theFileName The file, containing the shape. * \param theFormatName Specify format for the file reading. - * Available formats can be obtained with ImportTranslators() method. * \param theParameterName Specify the parameter. For example, pass "LEN_UNITS" * to obtain length units, in which the file is written. * \return Value of requested parameter in form of text string. */ string ReadValue (in string theFileName, in string theFormatName, in string theParameterName); - /*! - * \brief Get the supported import formats and corresponding patterns for File dialog. - * \param theFormats Output. List of formats, available for import. - * \param thePatterns Output. List of file patterns, corresponding to available formats. - * \return Returns available formats and patterns through the arguments. - */ - void ImportTranslators (out string_array theFormats, - out string_array thePatterns); - - /*! - * \brief Get the supported export formats and corresponding patterns for File dialog. - * \param theFormats Output. List of formats, available for export. - * \param thePatterns Output. List of file patterns, corresponding to available formats. - * \return Returns available formats and patterns through the arguments. - */ - void ExportTranslators (out string_array theFormats, - out string_array thePatterns); - /*! * \brief Read a shape from the binary stream, containing its bounding representation (BRep). * \note GEOM_Object::GetShapeStream() method can be used to obtain the shape's BRep stream. @@ -3798,31 +3772,7 @@ module GEOM * \return list of all texture IDs avaiable for the current study */ ListOfLong GetAllTextures(); - - /*! - * Export a shape to XAO format - * \param shape The shape to export - * \param groups The list of groups to export - * \param fields The list of fields to export - * \param author The author of the export - * \param fileName The name of the file to export - * \return boolean indicating if export was successful. - */ - boolean ExportXAO(in GEOM_Object shape, - in ListOfGO groups, in ListOfFields fields, - in string author, in string fileName); - /*! - * Import a shape from XAO format - * \param fileName The name of the file to import - * \param shape The imported shape - * \param subShapes The list of imported subShapes - * \param groups The list of imported groups - * \param fields The list of imported fields - * \return boolean indicating if import was successful. - */ - boolean ImportXAO(in string fileName, out GEOM_Object shape, - out ListOfGO subShapes, out ListOfGO groups, out ListOfFields fields); }; // # GEOM_IKindOfShape: @@ -4391,448 +4341,7 @@ module GEOM ListOfLong GetObjects (in GEOM_Object theGroup); }; - // # GEOM_IAdvancedOperations: - /*! - * \brief Interface for advanced modeling functions. - */ - interface GEOM_IAdvancedOperations : GEOM_IOperations - { - // T-Shape WITHOUT Thickness reduction - - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShape (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in boolean theHexMesh); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * The extremities of the main pipe are located on junctions points P1 and P2. - * The extremity of the incident pipe is located on junction point P3. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \param theP1 1st junction point of main pipe - * \param theP2 2nd junction point of main pipe - * \param theP3 Junction point of incident pipe - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeWithPosition (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in boolean theHexMesh, - in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). A chamfer is created - * on the junction of the pipes. - * - * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * \param theH Height of the chamfer. - * \param theW Width of the chamfer. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeChamfer (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theH, in double theW, in boolean theHexMesh); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * A chamfer is created on the junction of the pipes. - * The extremities of the main pipe are located on junctions points P1 and P2. - * The extremity of the incident pipe is located on junction point P3. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * \param theH Height of the chamfer. - * \param theW Width of the chamfer. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \param theP1 1st junction point of main pipe - * \param theP2 2nd junction point of main pipe - * \param theP3 Junction point of incident pipe - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeChamferWithPosition (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theH, in double theW, in boolean theHexMesh, - in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * A fillet is created on the junction of the pipes. - * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * \param theRF Radius of curvature of fillet. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeFillet (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRF, in boolean theHexMesh); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * A fillet is created on the junction of the pipes. - * The extremities of the main pipe are located on junctions points P1 and P2. - * The extremity of the incident pipe is located on junction point P3. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * \param theRF Radius of curvature of fillet. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \param theP1 1st junction point of main pipe - * \param theP2 2nd junction point of main pipe - * \param theP3 Junction point of incident pipe - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeFilletWithPosition (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRF, in boolean theHexMesh, - in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3); - - // T-Shape WITH Thickness reduction - - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * - * \param theRL Internal radius of left thickness reduction - * \param theWL Width of left thickness reduction - * \param theLtransL Length of left transition part - * \param theLthinL Length of left thin part - * - * \param theRR Internal radius of right thickness reduction - * \param theWR Width of right thickness reduction - * \param theLtransR Length of right transition part - * \param theLthinR Length of right thin part - * - * \param theRI Internal radius of incident thickness reduction - * \param theWI Width of incident thickness reduction - * \param theLtransI Length of incident transition part - * \param theLthinI Length of incident thin part - * - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeTR (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRL, in double theWL, in double theLtransL, in double theLthinL, - in double theRR, in double theWR, in double theLtransR, in double theLthinR, - in double theRI, in double theWI, in double theLtransI, in double theLthinI, - in boolean theHexMesh); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * The extremities of the main pipe are located on junctions points P1 and P2. - * The extremity of the incident pipe is located on junction point P3. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * - * \param theRL Internal radius of left thickness reduction - * \param theWL Width of left thickness reduction - * \param theLtransL Length of left transition part - * \param theLthinL Length of left thin part - * - * \param theRR Internal radius of right thickness reduction - * \param theWR Width of right thickness reduction - * \param theLtransR Length of right transition part - * \param theLthinR Length of right thin part - * - * \param theRI Internal radius of incident thickness reduction - * \param theWI Width of incident thickness reduction - * \param theLtransI Length of incident transition part - * \param theLthinI Length of incident thin part - * - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \param theP1 1st junction point of main pipe - * \param theP2 2nd junction point of main pipe - * \param theP3 Junction point of incident pipe - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeTRWithPosition - (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRL, in double theWL, in double theLtransL, in double theLthinL, - in double theRR, in double theWR, in double theLtransR, in double theLthinR, - in double theRI, in double theWI, in double theLtransI, in double theLthinI, - in boolean theHexMesh, - in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). A chamfer is created - * on the junction of the pipes. - * - * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * - * \param theRL Internal radius of left thickness reduction - * \param theWL Width of left thickness reduction - * \param theLtransL Length of left transition part - * \param theLthinL Length of left thin part - * - * \param theRR Internal radius of right thickness reduction - * \param theWR Width of right thickness reduction - * \param theLtransR Length of right transition part - * \param theLthinR Length of right thin part - * - * \param theRI Internal radius of incident thickness reduction - * \param theWI Width of incident thickness reduction - * \param theLtransI Length of incident transition part - * \param theLthinI Length of incident thin part - * - * \param theH Height of the chamfer. - * \param theW Width of the chamfer. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeTRChamfer - (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRL, in double theWL, in double theLtransL, in double theLthinL, - in double theRR, in double theWR, in double theLtransR, in double theLthinR, - in double theRI, in double theWI, in double theLtransI, in double theLthinI, - in double theH, in double theW, in boolean theHexMesh); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * A chamfer is created on the junction of the pipes. - * The extremities of the main pipe are located on junctions points P1 and P2. - * The extremity of the incident pipe is located on junction point P3. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * - * \param theRL Internal radius of left thickness reduction - * \param theWL Width of left thickness reduction - * \param theLtransL Length of left transition part - * \param theLthinL Length of left thin part - * - * \param theRR Internal radius of right thickness reduction - * \param theWR Width of right thickness reduction - * \param theLtransR Length of right transition part - * \param theLthinR Length of right thin part - * - * \param theRI Internal radius of incident thickness reduction - * \param theWI Width of incident thickness reduction - * \param theLtransI Length of incident transition part - * \param theLthinI Length of incident thin part - * - * \param theH Height of the chamfer. - * \param theW Width of the chamfer. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \param theP1 1st junction point of main pipe - * \param theP2 2nd junction point of main pipe - * \param theP3 Junction point of incident pipe - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeTRChamferWithPosition - (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRL, in double theWL, in double theLtransL, in double theLthinL, - in double theRR, in double theWR, in double theLtransR, in double theLthinR, - in double theRI, in double theWI, in double theLtransI, in double theLthinI, - in double theH, in double theW, in boolean theHexMesh, - in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * A fillet is created on the junction of the pipes. - * Center of the shape is (0,0,0). The main plane of the T-shape is XOY. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * - * \param theRL Internal radius of left thickness reduction - * \param theWL Width of left thickness reduction - * \param theLtransL Length of left transition part - * \param theLthinL Length of left thin part - * - * \param theRR Internal radius of right thickness reduction - * \param theWR Width of right thickness reduction - * \param theLtransR Length of right transition part - * \param theLthinR Length of right thin part - * - * \param theRI Internal radius of incident thickness reduction - * \param theWI Width of incident thickness reduction - * \param theLtransI Length of incident transition part - * \param theLthinI Length of incident thin part - * - * \param theRF Radius of curvature of fillet. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeTRFillet - (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRL, in double theWL, in double theLtransL, in double theLthinL, - in double theRR, in double theWR, in double theLtransR, in double theLthinR, - in double theRI, in double theWI, in double theLtransI, in double theLthinI, - in double theRF, in boolean theHexMesh); - /*! - * \brief Create a T-shape object with specified caracteristics for the main and - * the incident pipes (radius, width, half-length). - * - * A fillet is created on the junction of the pipes. - * The extremities of the main pipe are located on junctions points P1 and P2. - * The extremity of the incident pipe is located on junction point P3. - * \param theR1 Internal radius of main pipe - * \param theW1 Width of main pipe - * \param theL1 Half-length of main pipe - * \param theR2 Internal radius of incident pipe (R2 < R1) - * \param theW2 Width of incident pipe (R2+W2 < R1+W1) - * \param theL2 Half-length of incident pipe - * - * \param theRL Internal radius of left thickness reduction - * \param theWL Width of left thickness reduction - * \param theLtransL Length of left transition part - * \param theLthinL Length of left thin part - * - * \param theRR Internal radius of right thickness reduction - * \param theWR Width of right thickness reduction - * \param theLtransR Length of right transition part - * \param theLthinR Length of right thin part - * - * \param theRI Internal radius of incident thickness reduction - * \param theWI Width of incident thickness reduction - * \param theLtransI Length of incident transition part - * \param theLthinI Length of incident thin part - * - * \param theRF Radius of curvature of fillet. - * \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true) - * \param theP1 1st junction point of main pipe - * \param theP2 2nd junction point of main pipe - * \param theP3 Junction point of incident pipe - * \return List of GEOM_Object, containing the created shape and propagation groups. - */ - ListOfGO MakePipeTShapeTRFilletWithPosition - (in double theR1, in double theW1, in double theL1, - in double theR2, in double theW2, in double theL2, - in double theRL, in double theWL, in double theLtransL, in double theLthinL, - in double theRR, in double theWR, in double theLtransR, in double theLthinR, - in double theRI, in double theWI, in double theLtransI, in double theLthinI, - in double theRF, in boolean theHexMesh, - in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3); - - /*! - * This function allows to create a disk already divided into blocks. It - * can be use to create divided pipes for later meshing in hexaedra. - * \param theR Radius of the disk - * \param theRatio Relative size of the central square diagonal against the disk diameter - * \param theOrientation Plane on which the disk will be built - * \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - * \return New GEOM_Object, containing the created shape. - */ - GEOM_Object MakeDividedDisk (in double theR, - in double theRatio, - in short theOrientation, - in pattern thePattern); - - /*! - * \brief Create a Disk prepared for hexa meshing with given center, normal vector and radius. - * \param thePnt disk center. - * \param theVec Vector, normal to the plane of the disk. - * \param theR Disk radius. - * \param theRatio Relative size of the central square diagonal against the disk diameter - * \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - * \return New GEOM_Object, containing the created disk. - */ - GEOM_Object MakeDividedDiskPntVecR ( in GEOM_Object thePnt, - in GEOM_Object theVec, - in double theR, - in double theRatio, - in pattern thePattern); - - /*! - * Builds a cylinder prepared for hexa meshes - * \param theR Radius of the cylinder - * \param theH Height of the cylinder - * \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - * \return New GEOM_Object, containing the created shape. - */ - GEOM_Object MakeDividedCylinder (in double theR, - in double theH, - in pattern thePattern ); - /*! - * - * Create a smoothing surface from a set of points - * \param thelPoints list of points. Compounds of points are accepted as well. - * \param theNbMax maximum number of Bezier pieces in the resulting surface. - * \param theDegMax maximum degree of the resulting BSpline surface - * \param theDMax specifies maximum value of the GeomPlate_PlateG0Criterion criterion. - * \return New GEOM_Object, containing the created shape. - */ - GEOM_Object MakeSmoothingSurface (in ListOfGO thelPoints, - in long theNbMax, - in long theDegMax, - in double theDMax); - - /*@@ insert new functions before this line @@ do not remove this line @@*/ - }; - - // # GEOM_IFieldOperations: + // # GEOM_IFieldOperations: /*! * \brief Interface for field operation. */ diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl index 7787ff4cc..3bf0fea3f 100644 --- a/idl/GEOM_Superv.idl +++ b/idl/GEOM_Superv.idl @@ -26,6 +26,7 @@ #define __GEOM_SUPERV__ #include "GEOM_Gen.idl" +#include "AdvancedGEOM.idl" module GEOM { @@ -272,15 +273,6 @@ module GEOM GEOM_Object MakeCopy (in GEOM_Object theOriginal) ; void Export (in GEOM_Object theObject, in string theFileName, in string theFormatName) ; GEOM_Object ImportFile (in string theFileName, in string theFormatName) ; - void ImportTranslators (out string_array theFormats, - out string_array thePatterns) ; - void ExportTranslators (out string_array theFormats, - out string_array thePatterns) ; - boolean ExportXAO(in GEOM_Object shape, - in ListOfGO groups, in ListOfFields fields, - in string author, in string fileName); - boolean ImportXAO(in string fileName, out GEOM_Object shape, - out ListOfGO subShapes, out ListOfGO groups, out ListOfFields fields); //-----------------------------------------------------------// // TransformOperations // @@ -643,6 +635,46 @@ module GEOM in pattern thePattern); GEOM_Object MakeSmoothingSurface (in GEOM_List thelPoints); + + //-----------------------------------------------------------// + // Import/Export Operations // + //-----------------------------------------------------------// + void ExportSTL( in GEOM::GEOM_Object theObject, + in string theFileName, + in boolean theIsASCII, + in double theDeflection, + in boolean theIsRelative ); + GEOM_Object ImportSTL( in string theFileName ); + + void ExportBREP( in GEOM::GEOM_Object theObject, + in string theFileName ); + GEOM_Object ImportBREP( in string theFileName ); + + void ExportSTEP( in GEOM::GEOM_Object theObject, + in string theFileName ); + GEOM_Object ImportSTEP( in string theFileName, + in boolean theIsIgnoreUnits ); + + void ExportIGES( in GEOM::GEOM_Object theObject, + in string theFileName, + in string theVersion ); + GEOM_Object ImportIGES( in string theFileName, + in boolean theIsIgnoreUnits ); + + boolean ExportXAO( in GEOM_Object shape, + in ListOfGO groups, + in ListOfFields fields, + in string author, + in string fileName ); + boolean ImportXAO( in string fileName, + out GEOM_Object shape, + out ListOfGO subShapes, + out ListOfGO groups, + out ListOfFields fields ); + + void ExportVTK( in GEOM::GEOM_Object theObject, + in string theFileName, + in double theDeflection ); /*@@ insert new functions before this line @@ do not remove this line @@*/ }; diff --git a/idl/IGESPlugin.idl b/idl/IGESPlugin.idl new file mode 100644 index 000000000..e7d858b95 --- /dev/null +++ b/idl/IGESPlugin.idl @@ -0,0 +1,67 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef __IGESPlugin_IDL__ +#define __IGESPlugin_IDL__ + +#include "GEOM_Gen.idl" + +module GEOM +{ + /*! + * \brief Interface for IGESPlugin modeling functions. + */ + interface IIGESOperations : GEOM::GEOM_IOperations + { + /*! + * \brief Export the given shape into a file with given name in IGES format. + * + * \param theObject Shape to be stored in the file. + * \param theFileName Name of the file to store the given shape in. + * \param theVersion Version of IGES format which defines, whether to write + * only faces (5.1 IGES format) or shells and solids also (5.3 IGES format). + */ + void ExportIGES( in GEOM::GEOM_Object theObject, + in string theFileName, + in string theVersion ); + + /*! + * \brief Import a shape from the IGES file. + * + * \param theFileName The file, containing the shape. + * \param theIsIgnoreUnits If True, file length units will be ignored (set to 'meter') + * and result model will be scaled, if its units are not meters. + * If False (default), file length units will be taken into account. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ + GEOM::ListOfGO ImportIGES( in string theFileName, + in boolean theIsIgnoreUnits ); + + /*! + * \brief Read a value of parameter from a file, containing a shape. + * \param theFileName The file, containing the shape. + * \param theParameterName Specify the parameter. For example, pass "LEN_UNITS" + * to obtain length units, in which the file is written. + * \return Value of requested parameter in form of text string. + */ + string ReadValue( in string theFileName, in string theParameterName); + }; +}; + +#endif // __IGESPlugin_IDL__ diff --git a/idl/STEPPlugin.idl b/idl/STEPPlugin.idl new file mode 100644 index 000000000..8021e6664 --- /dev/null +++ b/idl/STEPPlugin.idl @@ -0,0 +1,66 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef __STEPPlugin_IDL__ +#define __STEPPlugin_IDL__ + +#include "GEOM_Gen.idl" + +module GEOM +{ + /*! + * \brief Interface for STEPPlugin modeling functions. + */ + interface ISTEPOperations : GEOM::GEOM_IOperations + { + /*! + * \brief Export the given shape into a file with given name in STEP format. + * + * \param theObject Shape to be stored in the file. + * \param theFileName Name of the file to store the given shape in. + */ + void ExportSTEP( in GEOM::GEOM_Object theObject, + in string theFileName ); + + /*! + * \brief Import a shape from the STEP file. + * + * \param theFileName The file, containing the shape. + * \param theIsIgnoreUnits If True, file length units will be ignored (set to 'meter') + * and result model will be scaled, if its units are not meters. + * If False (default), file length units will be taken into account. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ + GEOM::ListOfGO ImportSTEP( in string theFileName, + in boolean theIsIgnoreUnits ); + + /*! + * \brief Read a value of parameter from a file, containing a shape. + * \param theFileName The file, containing the shape. + * \param theParameterName Specify the parameter. For example, pass "LEN_UNITS" + * to obtain length units, in which the file is written. + * \return Value of requested parameter in form of text string. + */ + string ReadValue( in string theFileName, + in string theParameterName ); + + }; +}; + +#endif // __STEPPlugin_IDL__ diff --git a/idl/STLPlugin.idl b/idl/STLPlugin.idl new file mode 100644 index 000000000..7c8f82531 --- /dev/null +++ b/idl/STLPlugin.idl @@ -0,0 +1,59 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef __STLPlugin_IDL__ +#define __STLPlugin_IDL__ + +#include "GEOM_Gen.idl" + +module GEOM +{ + /*! + * \brief Interface for STLPlugin modeling functions. + */ + interface ISTLOperations : GEOM::GEOM_IOperations + { + /*! + * \brief Export the given shape into a file with given name in STL format. + * + * \param theObject Shape to be stored in the file. + * \param theFileName Name of the file to store the given shape in. + * \param theIsASCII The format of the exported file (ASCII or Binary). + * \param theDeflection Deflection of the given shape. + * \param theIsRelative Mode for writing the file. If True (default value), the + * deflection is calculated from the relative size of the + * shape; if False, the user defined deflection is used. + */ + void ExportSTL( in GEOM::GEOM_Object theObject, + in string theFileName, + in boolean theIsASCII, + in double theDeflection, + in boolean theIsRelative ); + + /*! + * \brief Import a shape from the STL file. + * + * \param theFileName The file, containing the shape. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ + GEOM::ListOfGO ImportSTL( in string theFileName ); + }; +}; + +#endif // __STLPlugin_IDL__ diff --git a/idl/VTKPlugin.idl b/idl/VTKPlugin.idl new file mode 100644 index 000000000..2b5aa47de --- /dev/null +++ b/idl/VTKPlugin.idl @@ -0,0 +1,45 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef __VTKPlugin_IDL__ +#define __VTKPlugin_IDL__ + +#include "GEOM_Gen.idl" + +module GEOM +{ + /*! + * \brief Interface for VTKPlugin modeling functions. + */ + interface IVTKOperations : GEOM::GEOM_IOperations + { + /*! + * \brief Export the given shape into a file with given name in VTK format. + * + * \param theObject Shape to be stored in the file. + * \param theFileName Name of the file to store the given shape in. + * \param theDeflection Deflection of the given shape. + */ + void ExportVTK( in GEOM::GEOM_Object theObject, + in string theFileName, + in double theDeflection ); + }; +}; + +#endif // __VTKPlugin_IDL__ diff --git a/idl/XAOPlugin.idl b/idl/XAOPlugin.idl new file mode 100644 index 000000000..c382fd3d9 --- /dev/null +++ b/idl/XAOPlugin.idl @@ -0,0 +1,64 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef __XAOPlugin_IDL__ +#define __XAOPlugin_IDL__ + +#include "GEOM_Gen.idl" + +module GEOM +{ + /*! + * \brief Interface for XAOPlugin modeling functions. + */ + interface IXAOOperations : GEOM::GEOM_IOperations + { + /*! + * Export a shape to XAO format + * \param shape The shape to export + * \param groups The list of groups to export + * \param fields The list of fields to export + * \param author The author of the export + * \param fileName The name of the file to export + * \return boolean indicating if export was successful. + */ + boolean ExportXAO( in GEOM::GEOM_Object shape, + in GEOM::ListOfGO groups, + in GEOM::ListOfFields fields, + in string author, + in string fileName ); + + /*! + * Import a shape from XAO format + * \param fileName The name of the file to import + * \param shape The imported shape + * \param subShapes The list of imported subShapes + * \param groups The list of imported groups + * \param fields The list of imported fields + * \return boolean indicating if import was successful. + */ + boolean ImportXAO( in string fileName, + out GEOM::GEOM_Object shape, + out GEOM::ListOfGO subShapes, + out GEOM::ListOfGO groups, + out GEOM::ListOfFields fields ); + }; +}; + +#endif // __XAOPlugin_IDL__ diff --git a/resources/GEOMActions.xml b/resources/AdvancedGEOM.xml similarity index 98% rename from resources/GEOMActions.xml rename to resources/AdvancedGEOM.xml index 7dc5adee6..1d6fda98d 100644 --- a/resources/GEOMActions.xml +++ b/resources/AdvancedGEOM.xml @@ -28,7 +28,7 @@ - diff --git a/resources/BREPPlugin.xml b/resources/BREPPlugin.xml new file mode 100644 index 000000000..5b7c97167 --- /dev/null +++ b/resources/BREPPlugin.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index 6097008d8..1fa4e9d9d 100755 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -23,12 +23,17 @@ # These files are data, module or lib files SET( _res_files - GEOMActions.xml + AdvancedGEOM.xml + STLPlugin.xml + BREPPlugin.xml + STEPPlugin.xml + IGESPlugin.xml + XAOPlugin.xml + VTKPlugin.xml GEOM_en.xml GEOM_fr.xml GEOM.config GEOMDS_Resources - ImportExport ShHealing 3dsketch.png isoline.png diff --git a/resources/GEOMCatalog.xml.in b/resources/GEOMCatalog.xml.in index 7ac41f313..bb07e4de7 100644 --- a/resources/GEOMCatalog.xml.in +++ b/resources/GEOMCatalog.xml.in @@ -26,5477 +26,7164 @@ - + + + - - + + + + + + + GEOM/GEOM_BaseObject + + + GEOM/GEOM_BaseObject + + + GEOM/GEOM_BaseObject + + + GEOM/GEOM_FieldStep + + + GEOM/GEOM_FieldStep + + + GEOM/GEOM_FieldStep + + + GEOM/GEOM_FieldStep + + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + GEOM/GEOM_IOperations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + - - GEOM - Geometry - Geom - NRI - @SALOMEGEOM_VERSION@ - Geometry component - 1 - ModuleGeom.png - 1 - - - - - GEOM - No comment - - - - - - Undo - - - - 1 - - - - theStudyID - long - - - - - - - - - Redo - - - - 1 - - - - theStudyID - long - - - - - - - - - AddInStudy - - - - 1 - - - - theStudy - Study - - - - theObject - GEOM_Object - - - - theName - string - - - - theFather - GEOM_Object - - - - - - return - SObject - - - - - - - - GetIBasicOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IBasicOperations - - - - - - - - GetITransformOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_ITransformOperations - - - - - - - - GetI3DPrimOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_I3DPrimOperations - - - - - - - - GetIShapesOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IShapesOperations - - - - - - - - GetIBooleanOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IBooleanOperations - - - - - - - - GetICurvesOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_ICurvesOperations - - - - - - - - GetILocalOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_ILocalOperations - - - - - - - - GetIHealingOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IHealingOperations - - - - - - - - GetIInsertOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IInsertOperations - - - - - - - - GetIMeasureOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IMeasureOperations - - - - - - - - GetIBlocksOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IBlocksOperations - - - - - - - - GetIGroupOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IGroupOperations - - - - - - - - GetIAdvancedOperations - - - - 1 - - - - theStudyID - long - - - - - - return - GEOM_IAdvancedOperations - - - - - - - - RemoveObject - - - - 1 - - - - theObject - GEOM_Object - - - - - - - - - GetObject - - - - 1 - - - - theStudyID - long - - - - theEntry - string - - - - - - return - GEOM_Object - - - - - - - - AddSubShape - - - - 1 - - - - theMainShape - GEOM_Object - - - - theIndices - ListOfLong - - - - - - return - GEOM_Object - - - - - - - - GetIORFromString - - - - 1 - - - - ior - string - - - - - - return - GEOM_Object - - - - - - - - GetStringFromIOR - - - - 1 - - - - theObject - GEOM_Object - - - - - - return - string - - - - - - - GetDumpName - - - unknown - 0 - - - theStudyEntry - string - unknown - - - - - return - string - unknown - - - - - - GetAllDumpNames - - - unknown - 0 - - - - return - string_array - unknown - - - - - - - hostname = localhost + + + GEOM + Geometry + GEOM + SALOME team + @SALOMEGEOM_VERSION@ + CAD modeler + 1 + ModuleGeom.png + 1 + + + + + GEOM/GEOM_Gen + GEOM module engine + + + + Undo + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + + + Redo + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + + + AddInStudy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudy + Study + unknown + + + theObject + GEOM/GEOM_BaseObject + unknown + + + theName + string + unknown + + + theFather + GEOM/GEOM_BaseObject + unknown + + + + + return + SObject + unknown + + + + + + RestoreSubShapesO + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudy + Study + unknown + + + theObject + GEOM/GEOM_Object + unknown + + + theArgs + GEOM/ListOfGO + unknown + + + theFindMethod + GEOM/find_shape_method + unknown + + + theInheritFirstArg + boolean + unknown + + + theAddPrefix + boolean + unknown + + + + + return + GEOM/ListOfGO + unknown + + + + + + RestoreGivenSubShapesO + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudy + Study + unknown + + + theObject + GEOM/GEOM_Object + unknown + + + theArgs + GEOM/ListOfGO + unknown + + + theFindMethod + GEOM/find_shape_method + unknown + + + theInheritFirstArg + boolean + unknown + + + theAddPrefix + boolean + unknown + + + + + return + GEOM/ListOfGO + unknown + + + + + + RestoreSubShapesSO + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudy + Study + unknown + + + theSObject + SObject + unknown + + + theArgs + GEOM/ListOfGO + unknown + + + theFindMethod + GEOM/find_shape_method + unknown + + + theInheritFirstArg + boolean + unknown + + + theAddPrefix + boolean + unknown + + + + + return + GEOM/ListOfGO + unknown + + + + + + GetIBasicOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IBasicOperations + unknown + + + + + + GetITransformOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_ITransformOperations + unknown + + + + + + GetI3DPrimOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_I3DPrimOperations + unknown + + + + + + GetIShapesOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IShapesOperations + unknown + + + + + + GetIBooleanOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IBooleanOperations + unknown + + + + + + GetICurvesOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_ICurvesOperations + unknown + + + + + + GetILocalOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_ILocalOperations + unknown + + + + + + GetIHealingOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IHealingOperations + unknown + + + + + + GetIInsertOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IInsertOperations + unknown + + + + + + GetIMeasureOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IMeasureOperations + unknown + + + + + + GetIBlocksOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IBlocksOperations + unknown + + + + + + GetIGroupOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IGroupOperations + unknown + + + + + + GetIFieldOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + return + GEOM/GEOM_IFieldOperations + unknown + + + + + + GetPluginOperations + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + theLibName + string + unknown + + + + + return + GEOM/GEOM_IOperations + unknown + + + + + + RemoveObject + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_BaseObject + unknown + + + + + + + GetObject + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + theEntry + string + unknown + + + + + return + GEOM/GEOM_BaseObject + unknown + + + + + + AddSubShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theMainShape + GEOM/GEOM_Object + unknown + + + theIndices + GEOM/ListOfLong + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetIORFromString + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theIOR + string + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetStringFromIOR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + + + return + string + unknown + + + + + + GetDumpName + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyEntry + string + unknown + + + + + return + string + unknown + + + + + + GetAllDumpNames + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + + return + GEOM/string_array + unknown + + + + + + PublishNamedShapesInStudy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudy + Study + unknown + + + theObject + Object + unknown + + + + + return + GEOM/ListOfGO + unknown + + + + + + CreateFolder + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theName + string + unknown + + + theFather + SObject + unknown + + + + + return + SObject + unknown + + + + + + MoveToFolder + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theFolder + SObject + unknown + + + + + + + MoveListToFolder + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theListOfGO + GEOM/ListOfGO + unknown + + + theFolder + SObject + unknown + + + + + + + Move + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + what + GEOM/object_list + unknown + + + where + SObject + unknown + + + row + long + unknown + + + + + + + - + - GEOM_Superv - GEOM_Superv - OTHER - - @SALOMEGEOM_VERSION@ - Supervision wrapper for Geometry component - 1 - 1 - - - - GEOM_Superv - unknown - - - SetStudyID - - - unknown - 0 - - - theStudyID - long - unknown - - - - - - - CreateListOfGO - - - unknown - 0 - - - - return - GEOM_List - unknown - - - - - - AddItemToListOfGO - - - unknown - 0 - - - theList - GEOM_List - unknown - - - theObject - GEOM_Object - unknown - - - - - theList - GEOM_List - unknown - - - - - - CreateListOfLong - - - unknown - 0 - - - - return - GEOM_List - unknown - - - - - - AddItemToListOfLong - - - unknown - 0 - - - theList - GEOM_List - unknown - - - theObject - long - unknown - - - - - theList - GEOM_List - unknown - - - - - - CreateListOfDouble - - - unknown - 0 - - - - return - GEOM_List - unknown - - - - - - AddItemToListOfDouble - - - unknown - 0 - - - theList - GEOM_List - unknown - - - theObject - double - unknown - - - - - theList - GEOM_List - unknown - - - - - - MakePointXYZ - - - unknown - 0 - - - theX - double - unknown - - - theY - double - unknown - - - theZ - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePointWithReference - - - unknown - 0 - - - theReference - GEOM_Object - unknown - - - theX - double - unknown - - - theY - double - unknown - - - theZ - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePointOnCurve - - - unknown - 0 - - - theRefCurve - GEOM_Object - unknown - - - theParameter - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeTangentOnCurve - - - unknown - 0 - - - theRefCurve - GEOM_Object - unknown - - - theParameter - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeVectorDXDYDZ - - - unknown - 0 - - - theDX - double - unknown - - - theDY - double - unknown - - - theDZ - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeVectorTwoPnt - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeLineTwoPnt - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePlaneThreePnt - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - thePnt3 - GEOM_Object - unknown - - - theTrimSize - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePlanePntVec - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theVec - GEOM_Object - unknown - - - theTrimSize - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePlaneFace - - - unknown - 0 - - - theFace - GEOM_Object - unknown - - - theTrimSize - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeMarker - - - unknown - 0 - - - theOX - double - unknown - - - theOY - double - unknown - - - theOZ - double - unknown - - - theXDX - double - unknown - - - theXDY - double - unknown - - - theXDZ - double - unknown - - - theYDX - double - unknown - - - theYDY - double - unknown - - - theYDZ - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeTangentPlaneOnFace - - - unknown - 0 - - - theFace - GEOM_Object - unknown - - - theParameterU - double - unknown - - - theParameterV - double - unknown - - - theTrimSize - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeBox - - - unknown - 0 - - - theX1 - double - unknown - - - theY1 - double - unknown - - - theZ1 - double - unknown - - - theX2 - double - unknown - - - theY2 - double - unknown - - - theZ2 - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeBoxDXDYDZ - - - unknown - 0 - - - theDX - double - unknown - - - theDY - double - unknown - - - theDZ - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeBoxTwoPnt - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCylinderPntVecRH - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theRadius - double - unknown - - - theHeight - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCylinderRH - - - unknown - 0 - - - theR - double - unknown - - - theH - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCylinderPntVecRHA - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theRadius - double - unknown - - - theHeight - double - unknown - - - theAngle - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCylinderRHA - - - unknown - 0 - - - theR - double - unknown - - - theH - double - unknown - - - theA - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSphere - - - unknown - 0 - - - theX - double - unknown - - - theY - double - unknown - - - theZ - double - unknown - - - theRadius - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSphereR - - - unknown - 0 - - - theR - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSpherePntR - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theR - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeTorusPntVecRR - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theVec - GEOM_Object - unknown - - - theRMajor - double - unknown - - - theRMinor - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeTorusRR - - - unknown - 0 - - - theRMajor - double - unknown - - - theRMinor - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeConePntVecR1R2H - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theR1 - double - unknown - - - theR2 - double - unknown - - - theHeight - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeConeR1R2H - - - unknown - 0 - - - theR1 - double - unknown - - - theR2 - double - unknown - - - theHeight - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePrismVecH - - - unknown - 0 - - - theBase - GEOM_Object - unknown - - - theVec - GEOM_Object - unknown - - - theH - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePrismTwoPnt - - - unknown - 0 - - - theBase - GEOM_Object - unknown - - - thePoint1 - GEOM_Object - unknown - - - thePoint2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePipe - - - unknown - 0 - - - theBase - GEOM_Object - unknown - - - thePath - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeRevolutionAxisAngle - - - unknown - 0 - - - theBase - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theAngle - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeFilling - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theMinDeg - long - unknown - - - theMaxDeg - long - unknown - - - theTol2D - double - unknown - - - theTol3D - double - unknown - - - theNbIter - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeThruSections - - - unknown - 0 - - - theSeqSections - ListOfGO - unknown - - - theModeSolid - boolean - unknown - - - thePreci - double - unknown - - - theRuled - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePipeWithDifferentSections - - - unknown - 0 - - - theSeqBases - ListOfGO - unknown - - - theLocations - ListOfGO - unknown - - - thePath - GEOM_Object - unknown - - - theWithContact - boolean - unknown - - - theWithCorrection - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePipeWithShellSections - - - unknown - 0 - - - theSeqBases - ListOfGO - unknown - - - theSeqSubBases - ListOfGO - unknown - - - theLocations - ListOfGO - unknown - - - thePath - GEOM_Object - unknown - - - theWithContact - boolean - unknown - - - theWithCorrection - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeBoolean - - - unknown - 0 - - - theShape1 - GEOM_Object - unknown - - - theShape2 - GEOM_Object - unknown - - - theOperation - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeFuse - - - unknown - 0 - - - theShape1 - GEOM_Object - unknown - - - theShape2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCut - - - unknown - 0 - - - theShape1 - GEOM_Object - unknown - - - theShape2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCommon - - - unknown - 0 - - - theShape1 - GEOM_Object - unknown - - - theShape2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSection - - - unknown - 0 - - - theShape1 - GEOM_Object - unknown - - - theShape2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePartition - - - unknown - 0 - - - theShapes - GEOM_List - unknown - - - theTools - GEOM_List - unknown - - - theKeepInside - GEOM_List - unknown - - - theRemoveInside - GEOM_List - unknown - - - theLimit - short - unknown - - - theRemoveWebs - boolean - unknown - - - theMaterials - GEOM_List - unknown - - - theKeepNonlimitShapes - short - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeHalfPartition - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - thePlane - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCopy - - - unknown - 0 - - - theOriginal - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - Export - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theFileName - string - unknown - - - theFormatName - string - unknown - - - - - - - Import - - - unknown - 0 - - - theFileName - string - unknown - - - theFormatName - string - unknown - - - - - return - GEOM_Object - unknown - - - - - - ImportTranslators - - - unknown - 0 - - - - theFormats - string_array - unknown - - - thePatterns - string_array - unknown - - - - - - ExportTranslators - - - unknown - 0 - - - - theFormats - string_array - unknown - - - thePatterns - string_array - unknown - - - - - - TranslateTwoPoints - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePoint1 - GEOM_Object - unknown - - - thePoint2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - TranslateTwoPointsCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePoint1 - GEOM_Object - unknown - - - thePoint2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - TranslateDXDYDZ - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theDX - double - unknown - - - theDY - double - unknown - - - theDZ - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - TranslateDXDYDZCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theDX - double - unknown - - - theDY - double - unknown - - - theDZ - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - TranslateVector - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theVector - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - TranslateVectorCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theVector - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MultiTranslate1D - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theVector - GEOM_Object - unknown - - - theStep - double - unknown - - - theNbTimes - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MultiTranslate2D - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theVector1 - GEOM_Object - unknown - - - theStep1 - double - unknown - - - theNbTimes1 - long - unknown - - - theVector2 - GEOM_Object - unknown - - - theStep2 - double - unknown - - - theNbTimes2 - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - Rotate - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theAngle - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - RotateCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theAngle - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - RotateThreePoints - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theCentPoint - GEOM_Object - unknown - - - thePoint1 - GEOM_Object - unknown - - - thePoint2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - RotateThreePointsCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theCentPoint - GEOM_Object - unknown - - - thePoint1 - GEOM_Object - unknown - - - thePoint2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MultiRotate1D - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theNbTimes - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MultiRotate2D - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - theAngle - double - unknown - - - theNbTimes1 - long - unknown - - - theStep - double - unknown - - - theNbTimes2 - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MirrorPlane - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePlane - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MirrorPlaneCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePlane - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MirrorAxis - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MirrorAxisCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theAxis - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MirrorPoint - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePoint - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MirrorPointCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePoint - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - OffsetShape - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theOffset - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - OffsetShapeCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theOffset - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - ScaleShape - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePoint - GEOM_Object - unknown - - - theFactor - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - ScaleShapeCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - thePoint - GEOM_Object - unknown - - - theFactor - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - PositionShape - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theStartLCS - GEOM_Object - unknown - - - theEndLCS - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - PositionShapeCopy - - - unknown - 0 - - - theObject - GEOM_Object - unknown - - - theStartLCS - GEOM_Object - unknown - - - theEndLCS - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeEdge - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeWire - - - unknown - 0 - - - theEdgesAndWires - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeFace - - - unknown - 0 - - - theWire - GEOM_Object - unknown - - - isPlanarWanted - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeFaceWires - - - unknown - 0 - - - theWires - GEOM_List - unknown - - - isPlanarWanted - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeShell - - - unknown - 0 - - - theFacesAndShells - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSolidShell - - - unknown - 0 - - - theShell - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSolidShells - - - unknown - 0 - - - theShells - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCompound - - - unknown - 0 - - - theShapes - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeGlueFaces - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theTolerance - double - unknown - - - doKeepNonSolids - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetGlueFaces - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theTolerance - double - unknown - - - - - return - GEOM_List - unknown - - - - - - MakeGlueFacesByList - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theTolerance - double - unknown - - - theFaces - ListOfGO - unknown - - - doKeepNonSolids - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeExplode - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theShapeType - long - unknown - - - isSorted - boolean - unknown - - - - - return - GEOM_List - unknown - - - - - - NumberOfFaces - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - - - return - long - unknown - - - - - - NumberOfEdges - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - - - return - long - unknown - - - - - - ChangeOrientation - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeQuad4Vertices - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - thePnt3 - GEOM_Object - unknown - - - thePnt4 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeQuad - - - unknown - 0 - - - theEdge1 - GEOM_Object - unknown - - - theEdge2 - GEOM_Object - unknown - - - theEdge3 - GEOM_Object - unknown - - - theEdge4 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeQuad2Edges - - - unknown - 0 - - - theEdge1 - GEOM_Object - unknown - - - theEdge2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeHexa - - - unknown - 0 - - - theFace1 - GEOM_Object - unknown - - - theFace2 - GEOM_Object - unknown - - - theFace3 - GEOM_Object - unknown - - - theFace4 - GEOM_Object - unknown - - - theFace5 - GEOM_Object - unknown - - - theFace6 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeHexa2Faces - - - unknown - 0 - - - theFace1 - GEOM_Object - unknown - - - theFace2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetPoint - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theX - double - unknown - - - theY - double - unknown - - - theZ - double - unknown - - - theEpsilon - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetEdge - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - thePoint1 - GEOM_Object - unknown - - - thePoint2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetEdgeNearPoint - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - thePoint - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetFaceByPoints - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - thePoint1 - GEOM_Object - unknown - - - thePoint2 - GEOM_Object - unknown - - - thePoint3 - GEOM_Object - unknown - - - thePoint4 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetFaceByEdges - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theEdge1 - GEOM_Object - unknown - - - theEdge2 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetOppositeFace - - - unknown - 0 - - - theBlock - GEOM_Object - unknown - - - theFace - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetFaceNearPoint - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - thePoint - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetFaceByNormale - - - unknown - 0 - - - theBlock - GEOM_Object - unknown - - - theVector - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - IsCompoundOfBlocks - - - unknown - 0 - - - theCompound - GEOM_Object - unknown - - - theMinNbFaces - long - unknown - - - theMaxNbFaces - long - unknown - - - - - return - boolean - unknown - - - theNbBlocks - long - unknown - - - - - - CheckCompoundOfBlocks - - - unknown - 0 - - - theCompound - GEOM_Object - unknown - - - - - return - boolean - unknown - - - theErrors - BCErrors - unknown - - - - - - PrintBCErrors - - - unknown - 0 - - - theCompound - GEOM_Object - unknown - - - theErrors - BCErrors - unknown - - - - - return - string - unknown - - - - - - ExplodeCompoundOfBlocks - - - unknown - 0 - - - theCompound - GEOM_Object - unknown - - - theMinNbFaces - long - unknown - - - theMaxNbFaces - long - unknown - - - - - return - GEOM_List - unknown - - - - - - GetBlockNearPoint - - - unknown - 0 - - - theCompound - GEOM_Object - unknown - - - thePoint - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetBlockByParts - - - unknown - 0 - - - theCompound - GEOM_Object - unknown - - - theParts - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetBlocksByParts - - - unknown - 0 - - - theCompound - GEOM_Object - unknown - - - theParts - GEOM_List - unknown - - - - - return - GEOM_List - unknown - - - - - - MakeMultiTransformation1D - - - unknown - 0 - - - theBlock - GEOM_Object - unknown - - - theDirFace1 - long - unknown - - - theDirFace2 - long - unknown - - - theNbTimes - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeMultiTransformation2D - - - unknown - 0 - - - theBlock - GEOM_Object - unknown - - - theDirFace1U - long - unknown - - - theDirFace2U - long - unknown - - - theNbTimesU - long - unknown - - - theDirFace1V - long - unknown - - - theDirFace2V - long - unknown - - - theNbTimesV - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCirclePntVecR - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theVec - GEOM_Object - unknown - - - theR - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeCircleThreePnt - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - thePnt3 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeEllipse - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theVec - GEOM_Object - unknown - - - theRMajor - double - unknown - - - theRMinor - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeEllipseVec - - - unknown - 0 - - - thePnt - GEOM_Object - unknown - - - theVec - GEOM_Object - unknown - - - theRMajor - double - unknown - - - theRMinor - double - unknown - - - theVecMaj - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeArc - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - thePnt3 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeArcCenter - - - unknown - 0 - - - theCenter - GEOM_Object - unknown - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - theSense - boolean - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeArcOfEllipse - - - unknown - 0 - - - thePnt1 - GEOM_Object - unknown - - - thePnt2 - GEOM_Object - unknown - - - thePnt3 - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakePolyline - - - unknown - 0 - - - thePoints - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSplineBezier - - - unknown - 0 - - - thePoints - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSplineInterpolation - - - unknown - 0 - - - thePoints - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeSketcher - - - unknown - 0 - - - theCommand - string - unknown - - - theWorkingPlane - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeFilletAll - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theR - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeFilletEdges - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theR - double - unknown - - - theEdges - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeFilletFaces - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theR - double - unknown - - - theFaces - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeChamferAll - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theD - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeChamferEdge - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theD1 - double - unknown - - - theD2 - double - unknown - - - theFace1 - long - unknown - - - theFace2 - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeChamferFaces - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theD1 - double - unknown - - - theD2 - double - unknown - - - theFaces - GEOM_List - unknown - - - - - return - GEOM_Object - unknown - - - - - - MakeArchimede - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theWeight - double - unknown - - - theWaterDensity - double - unknown - - - theMeshDeflection - double - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetSubShapeIndex - - - unknown - 0 - - - theShape - GEOM_Object - unknown - - - theSubShape - GEOM_Object - unknown - - - - - return - long - unknown - - - - - - CreateGroup - - - unknown - 0 - - - theMainShape - GEOM_Object - unknown - - - theShapeType - long - unknown - - - - - return - GEOM_Object - unknown - - - - - - AddObject - - - unknown - 0 - - - theGroup - GEOM_Object - unknown - - - theSubShapeId - long - unknown - - - - - - - RemoveObject - - - unknown - 0 - - - theGroup - GEOM_Object - unknown - - - theSubShapeId - long - unknown - - - - - - - GetType - - - unknown - 0 - - - theGroup - GEOM_Object - unknown - - - - - return - long - unknown - - - - - - GetMainShape - - - unknown - 0 - - - theGroup - GEOM_Object - unknown - - - - - return - GEOM_Object - unknown - - - - - - GetObjects - - - unknown - 0 - - - theGroup - GEOM_Object - unknown - - - - - return - GEOM_List - unknown - - - - - - - MakePipeTShape - - - unknown - 0 - - - theR1 - double - unknown - - - theW1 - double - unknown - - - theL1 - double - unknown - - - theR2 - double - unknown - - - theW2 - double - unknown - - - theL2 - double - unknown - - - theHewMesh - boolean - unknown - - - - - return - GEOM_List - unknown - - - - - - MakePipeTShapeWithPosition - - - unknown - 0 - - - theR1 - double - unknown - - - theW1 - double - unknown - - - theL1 - double - unknown - - - theR2 - double - unknown - - - theW2 - double - unknown - - - theL2 - double - unknown - - - theHewMesh - boolean - unknown - - - theP1 - GEOM_Object - unknown - - - theP2 - GEOM_Object - unknown - - - theP3 - GEOM_Object - unknown - - - - - return - GEOM_List - unknown - - - - - - MakePipeTShapeChamfer - - - unknown - 0 - - - theR1 - double - unknown - - - theW1 - double - unknown - - - theL1 - double - unknown - - - theR2 - double - unknown - - - theW2 - double - unknown - - - theL2 - double - unknown - - - theH - double - unknown - - - theR - double - unknown - - - theHewMesh - boolean - unknown - - - - - return - GEOM_List - unknown - - - - - - MakePipeTShapeChamferWithPosition - - - unknown - 0 - - - theR1 - double - unknown - - - theW1 - double - unknown - - - theL1 - double - unknown - - - theR2 - double - unknown - - - theW2 - double - unknown - - - theL2 - double - unknown - - - theH - double - unknown - - - theR - double - unknown - - - theHewMesh - boolean - unknown - - - theP1 - GEOM_Object - unknown - - - theP2 - GEOM_Object - unknown - - - theP3 - GEOM_Object - unknown - - - - - return - GEOM_List - unknown - - - - - - - - MakePipeTShapeFillet - - - unknown - 0 - - - theR1 - double - unknown - - - theW1 - double - unknown - - - theL1 - double - unknown - - - theR2 - double - unknown - - - theW2 - double - unknown - - - theL2 - double - unknown - - - theRF - double - unknown - - - theHewMesh - boolean - unknown - - - - - return - GEOM_List - unknown - - - - - - MakePipeTShapeFilletWithPosition - - - unknown - 0 - - - theR1 - double - unknown - - - theW1 - double - unknown - - - theL1 - double - unknown - - - theR2 - double - unknown - - - theW2 - double - unknown - - - theL2 - double - unknown - - - theRF - double - unknown - - - theHewMesh - boolean - unknown - - - theP1 - GEOM_Object - unknown - - - theP2 - GEOM_Object - unknown - - - theP3 - GEOM_Object - unknown - - - - - return - GEOM_List - unknown - - - - - - MakeDividedDisk - - - unknown - 0 - - - theR - double - Radius of the disk - - - theRatio - double - Relative size of the central square diagonal against the disk diameter - - - - - return - GEOM_Object - Result object - - - - - - MakeDividedCylinder - - - unknown - 0 - - - theR - double - Radius of the cylinder - - - theH - double - Height of the cylinder - - - - - return - GEOM_Object - Result object - - - - - - MakeSmoothingSurface - - - unknown - 0 - - - thelPoints - double - list of points - - - - - return - GEOM_Object - Result object - - - - - - MakeExportXAO - - - unknown - 0 - - - theFileName - string - The name of the exported file - - - theExportingShape - GEOM_Object - Shape to export - - - thelGroups - GEOM_List - List of groups to export - - - thelFields - GEOM_List - List of fields to export - - - - - return - bool - Result object - - - - - - - + + + GEOM_Superv + GEOM_Superv + GEOM + + @SALOMEGEOM_VERSION@ + Supervision helper for Geometry component + 1 + 1 + + + + + + GEOM/GEOM_Superv + unknown + + + + SetStudyID + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theStudyID + long + unknown + + + + + + + CreateListOfGO + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + + return + GEOM/GEOM_List + unknown + + + + + + AddItemToListOfGO + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theList + GEOM/GEOM_List + unknown + + + theObject + GEOM/GEOM_Object + unknown + + + + + theList + GEOM/GEOM_List + unknown + + + + + + CreateListOfLong + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + + return + GEOM/GEOM_List + unknown + + + + + + AddItemToListOfLong + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theList + GEOM/GEOM_List + unknown + + + theObject + long + unknown + + + + + theList + GEOM/GEOM_List + unknown + + + + + + CreateListOfDouble + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + + return + GEOM/GEOM_List + unknown + + + + + + AddItemToListOfDouble + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theList + GEOM/GEOM_List + unknown + + + theObject + double + unknown + + + + + theList + GEOM/GEOM_List + unknown + + + + + + MakePointXYZ + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theX + double + unknown + + + theY + double + unknown + + + theZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePointWithReference + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theReference + GEOM/GEOM_Object + unknown + + + theX + double + unknown + + + theY + double + unknown + + + theZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePointOnCurve + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theRefCurve + GEOM/GEOM_Object + unknown + + + theParameter + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePointOnCurveByLength + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theRefCurve + GEOM/GEOM_Object + unknown + + + theLength + double + unknown + + + theStartPoint + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeTangentOnCurve + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theRefCurve + GEOM/GEOM_Object + unknown + + + theParameter + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeVectorDXDYDZ + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theDX + double + unknown + + + theDY + double + unknown + + + theDZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeVectorTwoPnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeLineTwoPnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeLineTwoFaces + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFace1 + GEOM/GEOM_Object + unknown + + + theFace2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePlaneThreePnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + thePnt3 + GEOM/GEOM_Object + unknown + + + theTrimSize + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePlanePntVec + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theTrimSize + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePlaneFace + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFace + GEOM/GEOM_Object + unknown + + + theTrimSize + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePlane2Vec + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theVec1 + GEOM/GEOM_Object + unknown + + + theVec2 + GEOM/GEOM_Object + unknown + + + theTrimSize + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePlaneLCS + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theLCS + GEOM/GEOM_Object + unknown + + + theTrimSize + double + unknown + + + theOrientation + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeMarker + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theOX + double + unknown + + + theOY + double + unknown + + + theOZ + double + unknown + + + theXDX + double + unknown + + + theXDY + double + unknown + + + theXDZ + double + unknown + + + theYDX + double + unknown + + + theYDY + double + unknown + + + theYDZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeMarkerFromShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeMarkerPntTwoVec + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theOrigin + GEOM/GEOM_Object + unknown + + + theXVec + GEOM/GEOM_Object + unknown + + + theYVec + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeTangentPlaneOnFace + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFace + GEOM/GEOM_Object + unknown + + + theParameterU + double + unknown + + + theParameterV + double + unknown + + + theTrimSize + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeBox + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theX1 + double + unknown + + + theY1 + double + unknown + + + theZ1 + double + unknown + + + theX2 + double + unknown + + + theY2 + double + unknown + + + theZ2 + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeBoxDXDYDZ + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theDX + double + unknown + + + theDY + double + unknown + + + theDZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeBoxTwoPnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFaceHW + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theH + double + unknown + + + theW + double + unknown + + + theOrientation + short + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFaceObjHW + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObj + GEOM/GEOM_Object + unknown + + + theH + double + unknown + + + theW + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeDiskPntVecR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theR + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeDiskThreePnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + thePnt3 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeDiskR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR + double + unknown + + + theOrientation + short + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCylinderPntVecRH + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theRadius + double + unknown + + + theHeight + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCylinderRH + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR + double + unknown + + + theH + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCylinderPntVecRHA + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theRadius + double + unknown + + + theHeight + double + unknown + + + theAngle + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCylinderRHA + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR + double + unknown + + + theH + double + unknown + + + theA + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSphere + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theX + double + unknown + + + theY + double + unknown + + + theZ + double + unknown + + + theRadius + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSphereR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSpherePntR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theR + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeTorusPntVecRR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theRMajor + double + unknown + + + theRMinor + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeTorusRR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theRMajor + double + unknown + + + theRMinor + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeConePntVecR1R2H + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theR1 + double + unknown + + + theR2 + double + unknown + + + theHeight + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeConeR1R2H + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR1 + double + unknown + + + theR2 + double + unknown + + + theHeight + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePrismVecH + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theH + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePrismVecH2Ways + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theH + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePrismTwoPnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePrismTwoPnt2Ways + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePipe + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + thePath + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeRevolutionAxisAngle + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theAngle + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeRevolutionAxisAngle2Ways + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theAngle + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFilling + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theMinDeg + long + unknown + + + theMaxDeg + long + unknown + + + theTol2D + double + unknown + + + theTol3D + double + unknown + + + theNbIter + long + unknown + + + theMethod + GEOM/filling_oper_method + unknown + + + theApprox + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeThruSections + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theSeqSections + GEOM/ListOfGO + unknown + + + theModeSolid + boolean + unknown + + + thePreci + double + unknown + + + theRuled + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePipeWithDifferentSections + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theSeqBases + GEOM/ListOfGO + unknown + + + theLocations + GEOM/ListOfGO + unknown + + + thePath + GEOM/GEOM_Object + unknown + + + theWithContact + boolean + unknown + + + theWithCorrection + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePipeWithShellSections + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theSeqBases + GEOM/ListOfGO + unknown + + + theSeqSubBases + GEOM/ListOfGO + unknown + + + theLocations + GEOM/ListOfGO + unknown + + + thePath + GEOM/GEOM_Object + unknown + + + theWithContact + boolean + unknown + + + theWithCorrection + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePipeShellsWithoutPath + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theSeqBases + GEOM/ListOfGO + unknown + + + theLocations + GEOM/ListOfGO + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePipeBiNormalAlongVector + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBase + GEOM/GEOM_Object + unknown + + + thePath + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeBoolean + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape1 + GEOM/GEOM_Object + unknown + + + theShape2 + GEOM/GEOM_Object + unknown + + + theOperation + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFuse + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape1 + GEOM/GEOM_Object + unknown + + + theShape2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCommon + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape1 + GEOM/GEOM_Object + unknown + + + theShape2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCut + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape1 + GEOM/GEOM_Object + unknown + + + theShape2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSection + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape1 + GEOM/GEOM_Object + unknown + + + theShape2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePartition + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShapes + GEOM/GEOM_List + unknown + + + theTools + GEOM/GEOM_List + unknown + + + theKeepInside + GEOM/GEOM_List + unknown + + + theRemoveInside + GEOM/GEOM_List + unknown + + + theLimit + short + unknown + + + theRemoveWebs + boolean + unknown + + + theMaterials + GEOM/GEOM_List + unknown + + + theKeepNonlimitShapes + short + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeHalfPartition + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + thePlane + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theOriginal + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + Export + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theFileName + string + unknown + + + theFormatName + string + unknown + + + + + + + ImportFile + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFileName + string + unknown + + + theFormatName + string + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + TranslateTwoPoints + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + TranslateTwoPointsCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + TranslateDXDYDZ + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theDX + double + unknown + + + theDY + double + unknown + + + theDZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + TranslateDXDYDZCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theDX + double + unknown + + + theDY + double + unknown + + + theDZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + TranslateVector + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theVector + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + TranslateVectorCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theVector + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + TranslateVectorDistance + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theVector + GEOM/GEOM_Object + unknown + + + theDistance + double + unknown + + + theCopy + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MultiTranslate1D + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theVector + GEOM/GEOM_Object + unknown + + + theStep + double + unknown + + + theNbTimes + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MultiTranslate2D + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theVector1 + GEOM/GEOM_Object + unknown + + + theStep1 + double + unknown + + + theNbTimes1 + long + unknown + + + theVector2 + GEOM/GEOM_Object + unknown + + + theStep2 + double + unknown + + + theNbTimes2 + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + Rotate + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theAngle + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + RotateCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theAngle + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + RotateThreePoints + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theCentPoint + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + RotateThreePointsCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theCentPoint + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MultiRotate1D + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theNbTimes + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MultiRotate2D + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + theAngle + double + unknown + + + theNbTimes1 + long + unknown + + + theStep + double + unknown + + + theNbTimes2 + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MirrorPlane + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePlane + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MirrorPlaneCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePlane + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MirrorAxis + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MirrorAxisCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theAxis + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MirrorPoint + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MirrorPointCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + OffsetShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theOffset + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + OffsetShapeCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theOffset + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ScaleShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + theFactor + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ScaleShapeCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + theFactor + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ScaleShapeAlongAxes + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + theFactorX + double + unknown + + + theFactorY + double + unknown + + + theFactorZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ScaleShapeAlongAxesCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + theFactorX + double + unknown + + + theFactorY + double + unknown + + + theFactorZ + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + PositionShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theStartLCS + GEOM/GEOM_Object + unknown + + + theEndLCS + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + PositionShapeCopy + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theStartLCS + GEOM/GEOM_Object + unknown + + + theEndLCS + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + PositionAlongPath + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + thePath + GEOM/GEOM_Object + unknown + + + theDistance + double + unknown + + + theCopy + boolean + unknown + + + theReverse + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeEdge + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeEdgeOnCurveByLength + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theRefCurve + GEOM/GEOM_Object + unknown + + + theLength + double + unknown + + + theStartPoint + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeWire + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theEdgesAndWires + GEOM/GEOM_List + unknown + + + theTolerance + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFace + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theWire + GEOM/GEOM_Object + unknown + + + isPlanarWanted + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFaceWires + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theWires + GEOM/GEOM_List + unknown + + + isPlanarWanted + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeShell + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFacesAndShells + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSolidShell + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShell + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSolidShells + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShells + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCompound + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShapes + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeGlueFaces + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theTolerance + double + unknown + + + doKeepNonSolids + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetGlueFaces + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theTolerance + double + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakeGlueFacesByList + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theTolerance + double + unknown + + + theFaces + GEOM/ListOfGO + unknown + + + doKeepNonSolids + boolean + unknown + + + doGlueAllEdges + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeExplode + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theShapeType + long + unknown + + + isSorted + boolean + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + NumberOfFaces + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + + + return + long + unknown + + + + + + NumberOfEdges + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + + + return + long + unknown + + + + + + ChangeOrientation + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetShapesOnShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCheckShape + GEOM/GEOM_Object + unknown + + + theShape + GEOM/GEOM_Object + unknown + + + theShapeType + short + unknown + + + theState + GEOM/shape_state + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + GetShapesOnShapeAsCompound + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCheckShape + GEOM/GEOM_Object + unknown + + + theShape + GEOM/GEOM_Object + unknown + + + theShapeType + short + unknown + + + theState + GEOM/shape_state + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeQuad4Vertices + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + thePnt3 + GEOM/GEOM_Object + unknown + + + thePnt4 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeQuad + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theEdge1 + GEOM/GEOM_Object + unknown + + + theEdge2 + GEOM/GEOM_Object + unknown + + + theEdge3 + GEOM/GEOM_Object + unknown + + + theEdge4 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeQuad2Edges + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theEdge1 + GEOM/GEOM_Object + unknown + + + theEdge2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeHexa + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFace1 + GEOM/GEOM_Object + unknown + + + theFace2 + GEOM/GEOM_Object + unknown + + + theFace3 + GEOM/GEOM_Object + unknown + + + theFace4 + GEOM/GEOM_Object + unknown + + + theFace5 + GEOM/GEOM_Object + unknown + + + theFace6 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeHexa2Faces + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFace1 + GEOM/GEOM_Object + unknown + + + theFace2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetPoint + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theX + double + unknown + + + theY + double + unknown + + + theZ + double + unknown + + + theEpsilon + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetEdge + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetEdgeNearPoint + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetFaceByPoints + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + thePoint1 + GEOM/GEOM_Object + unknown + + + thePoint2 + GEOM/GEOM_Object + unknown + + + thePoint3 + GEOM/GEOM_Object + unknown + + + thePoint4 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetFaceByEdges + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theEdge1 + GEOM/GEOM_Object + unknown + + + theEdge2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetOppositeFace + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBlock + GEOM/GEOM_Object + unknown + + + theFace + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetFaceNearPoint + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetFaceByNormale + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBlock + GEOM/GEOM_Object + unknown + + + theVector + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + IsCompoundOfBlocks + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCompound + GEOM/GEOM_Object + unknown + + + theMinNbFaces + long + unknown + + + theMaxNbFaces + long + unknown + + + + + return + boolean + unknown + + + theNbBlocks + long + unknown + + + + + + CheckCompoundOfBlocks + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCompound + GEOM/GEOM_Object + unknown + + + + + return + boolean + unknown + + + theErrors + GEOM/BCErrors + unknown + + + + + + PrintBCErrors + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCompound + GEOM/GEOM_Object + unknown + + + theErrors + GEOM/BCErrors + unknown + + + + + return + string + unknown + + + + + + ExplodeCompoundOfBlocks + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCompound + GEOM/GEOM_Object + unknown + + + theMinNbFaces + long + unknown + + + theMaxNbFaces + long + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + GetBlockNearPoint + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCompound + GEOM/GEOM_Object + unknown + + + thePoint + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetBlockByParts + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCompound + GEOM/GEOM_Object + unknown + + + theParts + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetBlocksByParts + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCompound + GEOM/GEOM_Object + unknown + + + theParts + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakeMultiTransformation1D + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBlock + GEOM/GEOM_Object + unknown + + + theDirFace1 + long + unknown + + + theDirFace2 + long + unknown + + + theNbTimes + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeMultiTransformation2D + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theBlock + GEOM/GEOM_Object + unknown + + + theDirFace1U + long + unknown + + + theDirFace2U + long + unknown + + + theNbTimesU + long + unknown + + + theDirFace1V + long + unknown + + + theDirFace2V + long + unknown + + + theNbTimesV + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCirclePntVecR + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theR + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCircleThreePnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + thePnt3 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeCircleCenter2Pnt + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + thePnt3 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeEllipse + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theRMajor + double + unknown + + + theRMinor + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeEllipseVec + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt + GEOM/GEOM_Object + unknown + + + theVec + GEOM/GEOM_Object + unknown + + + theRMajor + double + unknown + + + theRMinor + double + unknown + + + theVecMaj + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeArc + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + thePnt3 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeArcCenter + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCenter + GEOM/GEOM_Object + unknown + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + theSense + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeArcOfEllipse + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCenter + GEOM/GEOM_Object + unknown + + + thePnt1 + GEOM/GEOM_Object + unknown + + + thePnt2 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakePolyline + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePoints + GEOM/GEOM_List + unknown + + + theIsClosed + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSplineBezier + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePoints + GEOM/GEOM_List + unknown + + + theIsClosed + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSplineInterpolation + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thePoints + GEOM/GEOM_List + unknown + + + theIsClosed + boolean + unknown + + + theDoReordering + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSketcher + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theCommand + string + unknown + + + theWorkingPlane + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFilletAll + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theR + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFilletEdges + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theR + double + unknown + + + theEdges + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFilletEdgesR1R2 + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theR1 + double + unknown + + + theR2 + double + unknown + + + theEdges + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFilletFaces + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theR + double + unknown + + + theFaces + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFilletFacesR1R2 + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theR1 + double + unknown + + + theR2 + double + unknown + + + theFaces + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeFillet2D + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theR + double + unknown + + + theVertexes + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeChamferAll + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theD + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeChamferEdge + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theD1 + double + unknown + + + theD2 + double + unknown + + + theFace1 + long + unknown + + + theFace2 + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeChamferEdgeAD + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theD + double + unknown + + + theAngle + double + unknown + + + theFace1 + long + unknown + + + theFace2 + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeChamferFaces + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theD1 + double + unknown + + + theD2 + double + unknown + + + theFaces + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeChamferFacesAD + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theD + double + unknown + + + theAngle + double + unknown + + + theFaces + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeChamferEdges + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theD1 + double + unknown + + + theD2 + double + unknown + + + theEdges + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeChamferEdgesAD + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theD + double + unknown + + + theAngle + double + unknown + + + theEdges + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeArchimede + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theWeight + double + unknown + + + theWaterDensity + double + unknown + + + theMeshDeflection + double + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetSubShapeIndex + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theShape + GEOM/GEOM_Object + unknown + + + theSubShape + GEOM/GEOM_Object + unknown + + + + + return + long + unknown + + + + + + CreateGroup + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theMainShape + GEOM/GEOM_Object + unknown + + + theShapeType + long + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + AddObject + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theGroup + GEOM/GEOM_Object + unknown + + + theSubShapeId + long + unknown + + + + + + + RemoveObject + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theGroup + GEOM/GEOM_Object + unknown + + + theSubShapeId + long + unknown + + + + + + + GetType + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theGroup + GEOM/GEOM_Object + unknown + + + + + return + long + unknown + + + + + + GetMainShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theGroup + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + GetObjects + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theGroup + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakePipeTShape + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR1 + double + unknown + + + theW1 + double + unknown + + + theL1 + double + unknown + + + theR2 + double + unknown + + + theW2 + double + unknown + + + theL2 + double + unknown + + + theHexMesh + boolean + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakePipeTShapeWithPosition + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR1 + double + unknown + + + theW1 + double + unknown + + + theL1 + double + unknown + + + theR2 + double + unknown + + + theW2 + double + unknown + + + theL2 + double + unknown + + + theHexMesh + boolean + unknown + + + theP1 + GEOM/GEOM_Object + unknown + + + theP2 + GEOM/GEOM_Object + unknown + + + theP3 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakePipeTShapeChamfer + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR1 + double + unknown + + + theW1 + double + unknown + + + theL1 + double + unknown + + + theR2 + double + unknown + + + theW2 + double + unknown + + + theL2 + double + unknown + + + theH + double + unknown + + + theW + double + unknown + + + theHexMesh + boolean + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakePipeTShapeChamferWithPosition + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR1 + double + unknown + + + theW1 + double + unknown + + + theL1 + double + unknown + + + theR2 + double + unknown + + + theW2 + double + unknown + + + theL2 + double + unknown + + + theH + double + unknown + + + theW + double + unknown + + + theHexMesh + boolean + unknown + + + theP1 + GEOM/GEOM_Object + unknown + + + theP2 + GEOM/GEOM_Object + unknown + + + theP3 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakePipeTShapeFillet + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR1 + double + unknown + + + theW1 + double + unknown + + + theL1 + double + unknown + + + theR2 + double + unknown + + + theW2 + double + unknown + + + theL2 + double + unknown + + + theRF + double + unknown + + + theHexMesh + boolean + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakePipeTShapeFilletWithPosition + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR1 + double + unknown + + + theW1 + double + unknown + + + theL1 + double + unknown + + + theR2 + double + unknown + + + theW2 + double + unknown + + + theL2 + double + unknown + + + theRF + double + unknown + + + theHexMesh + boolean + unknown + + + theP1 + GEOM/GEOM_Object + unknown + + + theP2 + GEOM/GEOM_Object + unknown + + + theP3 + GEOM/GEOM_Object + unknown + + + + + return + GEOM/GEOM_List + unknown + + + + + + MakeDividedDisk + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR + double + unknown + + + theRatio + double + unknown + + + theOrientation + short + unknown + + + thePattern + GEOM/pattern + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeDividedCylinder + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theR + double + unknown + + + theH + double + unknown + + + thePattern + GEOM/pattern + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + MakeSmoothingSurface + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + thelPoints + GEOM/GEOM_List + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ExportSTL + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theFileName + string + unknown + + + theIsASCII + boolean + unknown + + + theDeflection + double + unknown + + + theIsRelative + boolean + unknown + + + + + + + ImportSTL + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFileName + string + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ExportBREP + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theFileName + string + unknown + + + + + + + ImportBREP + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFileName + string + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ExportSTEP + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theFileName + string + unknown + + + + + + + ImportSTEP + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFileName + string + unknown + + + theIsIgnoreUnits + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ExportIGES + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theFileName + string + unknown + + + theVersion + string + unknown + + + + + + + ImportIGES + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theFileName + string + unknown + + + theIsIgnoreUnits + boolean + unknown + + + + + return + GEOM/GEOM_Object + unknown + + + + + + ExportXAO + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + shape + GEOM/GEOM_Object + unknown + + + groups + GEOM/ListOfGO + unknown + + + fields + GEOM/ListOfFields + unknown + + + author + string + unknown + + + fileName + string + unknown + + + + + return + boolean + unknown + + + + + + ImportXAO + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + fileName + string + unknown + + + + + return + boolean + unknown + + + shape + GEOM/GEOM_Object + unknown + + + subShapes + GEOM/ListOfGO + unknown + + + groups + GEOM/ListOfGO + unknown + + + fields + GEOM/ListOfFields + unknown + + + + + + ExportVTK + SALOME team + @SALOMEGEOM_VERSION@ + unknown + 0 + + + theObject + GEOM/GEOM_Object + unknown + + + theFileName + string + unknown + + + theDeflection + double + unknown + + + + + + + + - + + diff --git a/resources/IGESPlugin.xml b/resources/IGESPlugin.xml new file mode 100644 index 000000000..0810a4a0c --- /dev/null +++ b/resources/IGESPlugin.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/ImportExport b/resources/ImportExport deleted file mode 100644 index fae46daf3..000000000 --- a/resources/ImportExport +++ /dev/null @@ -1,30 +0,0 @@ -Import: BREP|IGES|STEP|STL -Export: BREP|IGES|IGES_5_3|STEP|STL_Bin|STL_ASCII|VTK - -BREP.Import: BREPImport -BREP.Export: BREPExport -BREP.Pattern: BREP Files ( *.brep ) - -IGES.Import: IGESImport -IGES.Export: IGESExport -IGES.Pattern: IGES Files ( *.iges *.igs ) -IGES.ExportPattern: IGES 5.1 Files ( *.iges *.igs ) - -IGES_5_3.Export: IGESExport -IGES_5_3.Pattern: IGES 5.3 Files ( *.iges *.igs ) - -STEP.Import: STEPImport -STEP.Export: STEPExport -STEP.Pattern: STEP Files ( *.step *.stp ) - -STL.Import: STLImport -STL.Pattern: STL Files ( *.stl ) - -STL_Bin.Export: STLExport -STL_Bin.Pattern: STL Binary Files ( *.stl ) - -STL_ASCII.Export: STLExport -STL_ASCII.Pattern: STL ASCII Files ( *.stl ) - -VTK.Export: VTKExport -VTK.Pattern: VTK Files ( *.vtk ) diff --git a/resources/STEPPlugin.xml b/resources/STEPPlugin.xml new file mode 100644 index 000000000..0af939973 --- /dev/null +++ b/resources/STEPPlugin.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/STLPlugin.xml b/resources/STLPlugin.xml new file mode 100644 index 000000000..81dd11bb6 --- /dev/null +++ b/resources/STLPlugin.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index eb36582fa..82a6f2b6c 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -37,8 +37,14 @@

    - + + + + + + +
    diff --git a/resources/VTKPlugin.xml b/resources/VTKPlugin.xml new file mode 100644 index 000000000..de58fd01b --- /dev/null +++ b/resources/VTKPlugin.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + diff --git a/resources/XAOPlugin.xml b/resources/XAOPlugin.xml new file mode 100644 index 000000000..c00137121 --- /dev/null +++ b/resources/XAOPlugin.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/AdvancedEngine/AdvancedEngine.cxx b/src/AdvancedEngine/AdvancedEngine.cxx index 270b1e60d..8745b3c3e 100644 --- a/src/AdvancedEngine/AdvancedEngine.cxx +++ b/src/AdvancedEngine/AdvancedEngine.cxx @@ -20,25 +20,14 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include "GEOM_AdvancedEngine.hxx" - -#include "AdvancedEngine_OperationsCreator.hh" - -//============================================================================= -/*! - * - */ -//============================================================================= +#include "AdvancedEngine.hxx" +#include "AdvancedEngine_OperationsCreator.hxx" extern "C" { -ADVANCEDENGINE_EXPORT + ADVANCEDENGINE_EXPORT GEOM_GenericOperationsCreator* GetOperationsCreator() { - //MESSAGE("GetOperationsCreator"); - - AdvancedEngine_OperationsCreator* aCreator = new AdvancedEngine_OperationsCreator(); - - return aCreator; + return new AdvancedEngine_OperationsCreator(); } } diff --git a/src/AdvancedEngine/GEOM_AdvancedEngine.hxx b/src/AdvancedEngine/AdvancedEngine.hxx similarity index 100% rename from src/AdvancedEngine/GEOM_AdvancedEngine.hxx rename to src/AdvancedEngine/AdvancedEngine.hxx diff --git a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx b/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.cxx similarity index 92% rename from src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx rename to src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.cxx index 24876c489..d1391bc13 100644 --- a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.cxx +++ b/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.cxx @@ -22,12 +22,11 @@ #include +#include "AdvancedEngine_DividedDiskDriver.hxx" +#include "AdvancedEngine_IDividedDisk.hxx" #include "AdvancedEngine_Types.hxx" -#include -#include -#include -#include +#include "GEOM_Function.hxx" // OCCT includes #include @@ -56,28 +55,28 @@ #include #include -//@@ include required header files here @@// enum { SQUARE, HEXAGON }; + //======================================================================= //function : GetID //purpose : //======================================================================= -const Standard_GUID& GEOMImpl_DividedDiskDriver::GetID() +const Standard_GUID& AdvancedEngine_DividedDiskDriver::GetID() { static Standard_GUID aGUID("0b01da9a-c5da-11e1-8d80-78e7d1879630"); return aGUID; } //======================================================================= -//function : GEOMImpl_DividedDiskDriver +//function : AdvancedEngine_DividedDiskDriver //purpose : //======================================================================= -GEOMImpl_DividedDiskDriver::GEOMImpl_DividedDiskDriver() +AdvancedEngine_DividedDiskDriver::AdvancedEngine_DividedDiskDriver() { } @@ -85,12 +84,12 @@ GEOMImpl_DividedDiskDriver::GEOMImpl_DividedDiskDriver() //function : Execute //purpose : //======================================================================= -Standard_Integer GEOMImpl_DividedDiskDriver::Execute(TFunction_Logbook& log) const +Standard_Integer AdvancedEngine_DividedDiskDriver::Execute(TFunction_Logbook& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); - GEOMImpl_IDividedDisk aData (aFunction); + AdvancedEngine_IDividedDisk aData (aFunction); Standard_Integer aType = aFunction->GetType(); TopoDS_Shape aShape; @@ -150,7 +149,7 @@ Standard_Integer GEOMImpl_DividedDiskDriver::Execute(TFunction_Logbook& log) con //function : MakeDiskHexagon //purpose : //======================================================================= -TopoDS_Shell GEOMImpl_DividedDiskDriver::MakeDiskHexagon(double R, double Ratio) const +TopoDS_Shell AdvancedEngine_DividedDiskDriver::MakeDiskHexagon(double R, double Ratio) const { // Geometry gp_Dir ZDir(0,0,1); @@ -312,7 +311,7 @@ TopoDS_Shell GEOMImpl_DividedDiskDriver::MakeDiskHexagon(double R, double Ratio) //function : MakeDiskSquare //purpose : //======================================================================= -TopoDS_Shape GEOMImpl_DividedDiskDriver::MakeDiskSquare(double R, double Ratio) const +TopoDS_Shape AdvancedEngine_DividedDiskDriver::MakeDiskSquare(double R, double Ratio) const { // Geometry gp_Dir ZDir(0,0,1); @@ -430,7 +429,7 @@ TopoDS_Shape GEOMImpl_DividedDiskDriver::MakeDiskSquare(double R, double Ratio) //purpose : Perform shape transformation accordingly with specified // orientation //======================================================================= -TopoDS_Shape GEOMImpl_DividedDiskDriver::TransformShape(TopoDS_Shape theShape, int theOrientation) const +TopoDS_Shape AdvancedEngine_DividedDiskDriver::TransformShape(TopoDS_Shape theShape, int theOrientation) const { gp_Dir N, Vx; gp_Pnt theOrigin = gp::Origin(); @@ -467,7 +466,7 @@ TopoDS_Shape GEOMImpl_DividedDiskDriver::TransformShape(TopoDS_Shape theShape, i //purpose : Perform shape transformation accordingly with specified // pnt and direction //======================================================================= -TopoDS_Shape GEOMImpl_DividedDiskDriver::TransformShape(TopoDS_Shape theShape, gp_Pnt P, gp_Dir V) const +TopoDS_Shape AdvancedEngine_DividedDiskDriver::TransformShape(TopoDS_Shape theShape, gp_Pnt P, gp_Dir V) const { gp_Ax3 aWPlane( P, V ); return WPlaneTransform(theShape, aWPlane); @@ -478,7 +477,7 @@ TopoDS_Shape GEOMImpl_DividedDiskDriver::TransformShape(TopoDS_Shape theShape, g //purpose : Perform shape transformation accordingly with the given // Working Plane //======================================================================= -TopoDS_Shape GEOMImpl_DividedDiskDriver::WPlaneTransform(TopoDS_Shape theShape, gp_Ax3 theWPlane) const +TopoDS_Shape AdvancedEngine_DividedDiskDriver::WPlaneTransform(TopoDS_Shape theShape, gp_Ax3 theWPlane) const { gp_Trsf aTrans; aTrans.SetTransformation(theWPlane); @@ -493,14 +492,14 @@ TopoDS_Shape GEOMImpl_DividedDiskDriver::WPlaneTransform(TopoDS_Shape theShape, */ //================================================================================ -bool GEOMImpl_DividedDiskDriver:: +bool AdvancedEngine_DividedDiskDriver:: GetCreationInformation(std::string& theOperationName, std::vector& theParams) { if (Label().IsNull()) return 0; Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); - GEOMImpl_IDividedDisk aCI( function ); + AdvancedEngine_IDividedDisk aCI( function ); Standard_Integer aType = function->GetType(); theOperationName = "DIVIDEDDISK"; @@ -525,5 +524,5 @@ GetCreationInformation(std::string& theOperationName, return true; } -IMPLEMENT_STANDARD_HANDLE (GEOMImpl_DividedDiskDriver,GEOM_BaseDriver); -IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_DividedDiskDriver,GEOM_BaseDriver); +IMPLEMENT_STANDARD_HANDLE (AdvancedEngine_DividedDiskDriver,GEOM_BaseDriver); +IMPLEMENT_STANDARD_RTTIEXT (AdvancedEngine_DividedDiskDriver,GEOM_BaseDriver); diff --git a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx b/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.hxx similarity index 63% rename from src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx rename to src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.hxx index 9b774c5df..f35b2811a 100644 --- a/src/AdvancedEngine/GEOMImpl_DividedDiskDriver.hxx +++ b/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.hxx @@ -20,40 +20,40 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef _GEOMImpl_DividedDiskDriver_HXX -#define _GEOMImpl_DividedDiskDriver_HXX +#ifndef _AdvancedEngine_DividedDiskDriver_HXX +#define _AdvancedEngine_DividedDiskDriver_HXX + +#include "AdvancedEngine.hxx" + +#include "GEOM_BaseDriver.hxx" #include -class Handle_Standard_Type; -class GEOMImpl_DividedDiskDriver; class TopoDS_Shape; class TopoDS_Shell; class gp_Pnt; class gp_Dir; class gp_Ax3; -#include "GEOM_BaseDriver.hxx" +DEFINE_STANDARD_HANDLE( AdvancedEngine_DividedDiskDriver, GEOM_BaseDriver ); -DEFINE_STANDARD_HANDLE( GEOMImpl_DividedDiskDriver, GEOM_BaseDriver ); - -class GEOMImpl_DividedDiskDriver : public GEOM_BaseDriver { +class ADVANCEDENGINE_EXPORT AdvancedEngine_DividedDiskDriver : public GEOM_BaseDriver +{ public: // Methods PUBLIC // - Standard_EXPORT GEOMImpl_DividedDiskDriver(); - Standard_EXPORT virtual Standard_Integer Execute(TFunction_Logbook& log) const; - Standard_EXPORT virtual void Validate(TFunction_Logbook&) const {} - Standard_EXPORT Standard_Boolean MustExecute(const TFunction_Logbook&) const + AdvancedEngine_DividedDiskDriver(); + virtual Standard_Integer Execute(TFunction_Logbook& log) const; + virtual void Validate(TFunction_Logbook&) const {} + Standard_Boolean MustExecute(const TFunction_Logbook&) const { return Standard_True; } - Standard_EXPORT static const Standard_GUID& GetID(); - Standard_EXPORT ~GEOMImpl_DividedDiskDriver() {}; + static const Standard_GUID& GetID(); + ~AdvancedEngine_DividedDiskDriver() {}; - Standard_EXPORT virtual - bool GetCreationInformation(std::string& theOperationName, - std::vector& params); + virtual bool GetCreationInformation(std::string& theOperationName, + std::vector& params); private: TopoDS_Shape TransformShape (TopoDS_Shape aShape, int theOrientation) const; TopoDS_Shape TransformShape (TopoDS_Shape aShape, gp_Pnt P, gp_Dir V) const; @@ -61,7 +61,7 @@ private: TopoDS_Shell MakeDiskHexagon (double R, double Ratio) const; TopoDS_Shape MakeDiskSquare (double R, double Ratio) const; - DEFINE_STANDARD_RTTI( GEOMImpl_DividedDiskDriver ) + DEFINE_STANDARD_RTTI( AdvancedEngine_DividedDiskDriver ) }; -#endif // _GEOMImpl_DividedDiskDriver_HXX +#endif // _AdvancedEngine_DividedDiskDriver_HXX diff --git a/src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx b/src/AdvancedEngine/AdvancedEngine_IDividedDisk.hxx similarity index 90% rename from src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx rename to src/AdvancedEngine/AdvancedEngine_IDividedDisk.hxx index 88a9944d9..c0f7e9c40 100644 --- a/src/AdvancedEngine/GEOMImpl_IDividedDisk.hxx +++ b/src/AdvancedEngine/AdvancedEngine_IDividedDisk.hxx @@ -20,8 +20,8 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef _GEOMImpl_IDividedDisk_HXX_ -#define _GEOMImpl_IDividedDisk_HXX_ +#ifndef _AdvancedEngine_IDividedDisk_HXX_ +#define _AdvancedEngine_IDividedDisk_HXX_ #include "GEOM_Function.hxx" @@ -34,10 +34,10 @@ #define DIVIDEDDISK_ARG_TYPE 6 -class GEOMImpl_IDividedDisk +class AdvancedEngine_IDividedDisk { public: - GEOMImpl_IDividedDisk(Handle(GEOM_Function) theFunction): _func(theFunction) {} + AdvancedEngine_IDividedDisk(Handle(GEOM_Function) theFunction): _func(theFunction) {} void SetR(double theR) { _func->SetReal(DIVIDEDDISK_ARG_R, theR); } double GetR() { return _func->GetReal(DIVIDEDDISK_ARG_R); } @@ -61,4 +61,4 @@ private: Handle(GEOM_Function) _func; }; -#endif // _GEOMImpl_IDividedDisk_HXX_ +#endif // _AdvancedEngine_IDividedDisk_HXX_ diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx b/src/AdvancedEngine/AdvancedEngine_IOperations.cxx similarity index 93% rename from src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx rename to src/AdvancedEngine/AdvancedEngine_IOperations.cxx index 59c4d95f8..079466a57 100644 --- a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx +++ b/src/AdvancedEngine/AdvancedEngine_IOperations.cxx @@ -16,10 +16,16 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : GEOMImpl_IAdvancedOperations.cxx +// File : AdvancedEngine_IOperations.cxx // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -#include "GEOMImpl_IAdvancedOperations.hxx" +#include "AdvancedEngine_IOperations.hxx" +#include "AdvancedEngine_PipeTShapeDriver.hxx" +#include "AdvancedEngine_IPipeTShape.hxx" +#include "AdvancedEngine_DividedDiskDriver.hxx" +#include "AdvancedEngine_IDividedDisk.hxx" +#include "AdvancedEngine_SmoothingSurfaceDriver.hxx" +#include "AdvancedEngine_ISmoothingSurface.hxx" #include @@ -45,15 +51,7 @@ #include "GEOMImpl_ILocalOperations.hxx" #include "GEOMImpl_IHealingOperations.hxx" #include "GEOMImpl_IGroupOperations.hxx" - #include "GEOMImpl_GlueDriver.hxx" -#include "GEOMImpl_PipeTShapeDriver.hxx" -#include "GEOMImpl_IPipeTShape.hxx" -#include "GEOMImpl_DividedDiskDriver.hxx" -#include "GEOMImpl_IDividedDisk.hxx" -#include -#include -/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ #include #include @@ -116,10 +114,10 @@ * Constructor */ //============================================================================= -GEOMImpl_IAdvancedOperations::GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngine, int theDocID) : +AdvancedEngine_IOperations::AdvancedEngine_IOperations(GEOM_Engine* theEngine, int theDocID) : GEOM_IOperations(theEngine, theDocID) { - MESSAGE("GEOMImpl_IAdvancedOperations::GEOMImpl_IAdvancedOperations"); + MESSAGE("AdvancedEngine_IOperations::AdvancedEngine_IOperations"); myBasicOperations = new GEOMImpl_IBasicOperations(GetEngine(), GetDocID()); myBooleanOperations = new GEOMImpl_IBooleanOperations(GetEngine(), GetDocID()); myShapesOperations = new GEOMImpl_IShapesOperations(GetEngine(), GetDocID()); @@ -136,9 +134,9 @@ GEOMImpl_IAdvancedOperations::GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngin * Destructor */ //============================================================================= -GEOMImpl_IAdvancedOperations::~GEOMImpl_IAdvancedOperations() +AdvancedEngine_IOperations::~AdvancedEngine_IOperations() { - MESSAGE("GEOMImpl_IAdvancedOperations::~GEOMImpl_IAdvancedOperations"); + MESSAGE("AdvancedEngine_IOperations::~AdvancedEngine_IOperations"); delete myBasicOperations; delete myBooleanOperations; delete myShapesOperations; @@ -155,10 +153,10 @@ GEOMImpl_IAdvancedOperations::~GEOMImpl_IAdvancedOperations() * SetPosition */ //============================================================================= -gp_Trsf GEOMImpl_IAdvancedOperations::GetPositionTrsf(double theL1, double theL2, - Handle(GEOM_Object) theP1, - Handle(GEOM_Object) theP2, - Handle(GEOM_Object) theP3) +gp_Trsf AdvancedEngine_IOperations::GetPositionTrsf(double theL1, double theL2, + Handle(GEOM_Object) theP1, + Handle(GEOM_Object) theP2, + Handle(GEOM_Object) theP3) { // Old Local Coordinates System oldLCS gp_Pnt P0(0, 0, 0); @@ -196,11 +194,11 @@ gp_Trsf GEOMImpl_IAdvancedOperations::GetPositionTrsf(double theL1, double theL2 * */ //============================================================================= -bool GEOMImpl_IAdvancedOperations::CheckCompatiblePosition(double& theL1, double& theL2, - Handle(GEOM_Object) theP1, - Handle(GEOM_Object) theP2, - Handle(GEOM_Object) theP3, - double theTolerance) +bool AdvancedEngine_IOperations::CheckCompatiblePosition(double& theL1, double& theL2, + Handle(GEOM_Object) theP1, + Handle(GEOM_Object) theP2, + Handle(GEOM_Object) theP3, + double theTolerance) { SetErrorCode(KO); gp_Pnt P1 = BRep_Tool::Pnt(TopoDS::Vertex(theP1->GetValue())); @@ -267,12 +265,12 @@ bool GEOMImpl_IAdvancedOperations::CheckCompatiblePosition(double& theL1, double * Generate the propagation groups of a Pipe T-Shape used for hexa mesh */ //============================================================================= -bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int shapeType, - double theR1, double theW1, double theL1, - double theR2, double theW2, double theL2, - double theH, double theW, double theRF, - Handle(TColStd_HSequenceOfTransient) theSeq, - gp_Trsf aTrsf) +bool AdvancedEngine_IOperations::MakeGroups(Handle(GEOM_Object) theShape, int shapeType, + double theR1, double theW1, double theL1, + double theR2, double theW2, double theL2, + double theH, double theW, double theRF, + Handle(TColStd_HSequenceOfTransient) theSeq, + gp_Trsf aTrsf) { SetErrorCode(KO); @@ -807,7 +805,7 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int * Return faces that are laying on surface. */ //============================================================================= -bool GEOMImpl_IAdvancedOperations::GetFacesOnSurf +bool AdvancedEngine_IOperations::GetFacesOnSurf (const TopoDS_Shape &theShape, const Handle_Geom_Surface& theSurface, const Standard_Real theTolerance, @@ -863,7 +861,7 @@ bool GEOMImpl_IAdvancedOperations::GetFacesOnSurf * Creates and returns conical face. */ //============================================================================= -TopoDS_Shape GEOMImpl_IAdvancedOperations::MakeConicalFace +TopoDS_Shape AdvancedEngine_IOperations::MakeConicalFace (const gp_Ax2 &theAxis, const double theRadius, const double theRadiusThin, @@ -902,7 +900,7 @@ TopoDS_Shape GEOMImpl_IAdvancedOperations::MakeConicalFace * Generate the internal group of a Pipe T-Shape */ //============================================================================= -bool GEOMImpl_IAdvancedOperations::MakeInternalGroup +bool AdvancedEngine_IOperations::MakeInternalGroup (const Handle(GEOM_Object) &theShape, const double theR1, const double theLen1, const double theR2, const double theLen2, @@ -1074,7 +1072,7 @@ bool GEOMImpl_IAdvancedOperations::MakeInternalGroup Handle(GEOM_Object) aCone = GetEngine()->AddObject(GetDocID(), GEOM_TSHAPE); Handle(GEOM_Function) aFunction = - aCone->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_BASIC); + aCone->AddFunction(AdvancedEngine_PipeTShapeDriver::GetID(), TSHAPE_BASIC); TopTools_ListIteratorOfListOfShape aFIter(aConicalFaces); Handle(GEOM_Object) aConeFromShape; @@ -1133,11 +1131,11 @@ bool GEOMImpl_IAdvancedOperations::MakeInternalGroup return true; } -bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) theShape, - double theR1, double theW1, double theL1, - double theR2, double theW2, double theL2, - double theH, double theW, - double theRF, bool isNormal) +bool AdvancedEngine_IOperations::MakePipeTShapePartition(Handle(GEOM_Object) theShape, + double theR1, double theW1, double theL1, + double theR2, double theW2, double theL2, + double theH, double theW, + double theRF, bool isNormal) { SetErrorCode(KO); @@ -1617,9 +1615,9 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t } // Mirror and glue faces -bool GEOMImpl_IAdvancedOperations::MakePipeTShapeMirrorAndGlue(Handle(GEOM_Object) theShape, - double theR1, double theW1, double theL1, - double theR2, double theW2, double theL2) +bool AdvancedEngine_IOperations::MakePipeTShapeMirrorAndGlue(Handle(GEOM_Object) theShape, + double theR1, double theW1, double theL1, + double theR2, double theW2, double theL2) { SetErrorCode(KO); @@ -1726,7 +1724,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapeMirrorAndGlue(Handle(GEOM_Objec //purpose : Static method. Add thiskness reduction elements at the three // open ends of the T-Shape. //======================================================================= -TopoDS_Shape GEOMImpl_IAdvancedOperations::MakePipeTShapeThicknessReduction +TopoDS_Shape AdvancedEngine_IOperations::MakePipeTShapeThicknessReduction (TopoDS_Shape theShape, double r1, double w1, double l1, double r2, double w2, double l2, @@ -1757,7 +1755,7 @@ TopoDS_Shape GEOMImpl_IAdvancedOperations::MakePipeTShapeThicknessReduction if (rL > aTol && wL > aTol && ltransL > aTol) { gp_Pnt aPLeft (-l1, 0, 0); gp_Ax2 anAxesLeft (aPLeft, -aVX, aVZ); - TopoDS_Shape aReductionLeft = GEOMImpl_IAdvancedOperations::MakeThicknessReduction + TopoDS_Shape aReductionLeft = AdvancedEngine_IOperations::MakeThicknessReduction (anAxesLeft, r1, w1, rL, wL, ltransL, lthinL, fuseReductions); if (fuseReductions) { @@ -1780,7 +1778,7 @@ TopoDS_Shape GEOMImpl_IAdvancedOperations::MakePipeTShapeThicknessReduction if (rR > aTol && wR > aTol && ltransR > aTol) { gp_Pnt aPRight (l1, 0, 0); gp_Ax2 anAxesRight (aPRight, aVX, aVZ); - TopoDS_Shape aReductionRight = GEOMImpl_IAdvancedOperations::MakeThicknessReduction + TopoDS_Shape aReductionRight = AdvancedEngine_IOperations::MakeThicknessReduction (anAxesRight, r1, w1, rR, wR, ltransR, lthinR, fuseReductions); if (fuseReductions) { @@ -1803,7 +1801,7 @@ TopoDS_Shape GEOMImpl_IAdvancedOperations::MakePipeTShapeThicknessReduction if (rI > aTol && wI > aTol && ltransI > aTol) { gp_Pnt aPInci (0, 0, l2); gp_Ax2 anAxesInci (aPInci, aVZ, aVX); - TopoDS_Shape aReductionInci = GEOMImpl_IAdvancedOperations::MakeThicknessReduction + TopoDS_Shape aReductionInci = AdvancedEngine_IOperations::MakeThicknessReduction (anAxesInci, r2, w2, rI, wI, ltransI, lthinI, fuseReductions); if (fuseReductions) { @@ -1848,11 +1846,11 @@ TopoDS_Shape GEOMImpl_IAdvancedOperations::MakePipeTShapeThicknessReduction //function : MakeThicknessReduction //purpose : Static method. Create one thickness reduction element. //======================================================================= -TopoDS_Shape GEOMImpl_IAdvancedOperations::MakeThicknessReduction (gp_Ax2 theAxes, - const double R, const double W, - const double Rthin, const double Wthin, - const double Ltrans, const double Lthin, - bool fuse) +TopoDS_Shape AdvancedEngine_IOperations::MakeThicknessReduction (gp_Ax2 theAxes, + const double R, const double W, + const double Rthin, const double Wthin, + const double Ltrans, const double Lthin, + bool fuse) { double aTol = Precision::Confusion(); if (Rthin < aTol || Wthin < aTol || Ltrans < aTol) { @@ -1956,26 +1954,26 @@ TopoDS_Shape GEOMImpl_IAdvancedOperations::MakeThicknessReduction (gp_Ax2 theAxe */ //============================================================================= Handle(TColStd_HSequenceOfTransient) - GEOMImpl_IAdvancedOperations::MakePipeTShape(double theR1, double theW1, double theL1, - double theR2, double theW2, double theL2, - double theRL, double theWL, double theLtransL, double theLthinL, - double theRR, double theWR, double theLtransR, double theLthinR, - double theRI, double theWI, double theLtransI, double theLthinI, - bool theHexMesh) + AdvancedEngine_IOperations::MakePipeTShape(double theR1, double theW1, double theL1, + double theR2, double theW2, double theL2, + double theRL, double theWL, double theLtransL, double theLthinL, + double theRR, double theWR, double theLtransR, double theLthinR, + double theRI, double theWI, double theLtransI, double theLthinI, + bool theHexMesh) { - MESSAGE("GEOMImpl_IAdvancedOperations::MakePipeTShape"); + MESSAGE("AdvancedEngine_IOperations::MakePipeTShape"); SetErrorCode(KO); //Add a new object Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_TSHAPE); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_BASIC); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_PipeTShapeDriver::GetID(), TSHAPE_BASIC); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeTShapeDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_PipeTShapeDriver::GetID()) return NULL; - GEOMImpl_IPipeTShape aData (aFunction); + AdvancedEngine_IPipeTShape aData (aFunction); aData.SetR1(theR1); aData.SetW1(theW1); @@ -2110,7 +2108,7 @@ Handle(TColStd_HSequenceOfTransient) */ //============================================================================= Handle(TColStd_HSequenceOfTransient) -GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition +AdvancedEngine_IOperations::MakePipeTShapeWithPosition (double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -2128,18 +2126,18 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition // TSHAPE CODE ///////////////// //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_BASIC); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_PipeTShapeDriver::GetID(), TSHAPE_BASIC); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeTShapeDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_PipeTShapeDriver::GetID()) return NULL; // Check new position if (!CheckCompatiblePosition(theL1, theL2, theP1, theP2, theP3, 0.01)) { return NULL; } - GEOMImpl_IPipeTShape aData(aFunction); + AdvancedEngine_IPipeTShape aData(aFunction); aData.SetR1(theR1); aData.SetW1(theW1); @@ -2282,7 +2280,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition */ //============================================================================= Handle(TColStd_HSequenceOfTransient) -GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer +AdvancedEngine_IOperations::MakePipeTShapeChamfer (double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -2295,13 +2293,13 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer //Add a new object Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_TSHAPE); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_CHAMFER); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_PipeTShapeDriver::GetID(), TSHAPE_CHAMFER); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeTShapeDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_PipeTShapeDriver::GetID()) return NULL; - GEOMImpl_IPipeTShape aData(aFunction); + AdvancedEngine_IPipeTShape aData(aFunction); aData.SetR1(theR1); aData.SetW1(theW1); @@ -2513,7 +2511,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer */ //============================================================================= Handle(TColStd_HSequenceOfTransient) -GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition +AdvancedEngine_IOperations::MakePipeTShapeChamferWithPosition (double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -2529,18 +2527,18 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition //Add a new object Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_TSHAPE); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_CHAMFER); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_PipeTShapeDriver::GetID(), TSHAPE_CHAMFER); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeTShapeDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_PipeTShapeDriver::GetID()) return NULL; // Check new position if (!CheckCompatiblePosition(theL1, theL2, theP1, theP2, theP3, 0.01)) { return NULL; } - GEOMImpl_IPipeTShape aData(aFunction); + AdvancedEngine_IPipeTShape aData(aFunction); aData.SetR1(theR1); aData.SetW1(theW1); @@ -2752,7 +2750,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition */ //============================================================================= Handle(TColStd_HSequenceOfTransient) -GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet +AdvancedEngine_IOperations::MakePipeTShapeFillet (double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -2764,13 +2762,13 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet //Add a new object Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_TSHAPE); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_FILLET); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_PipeTShapeDriver::GetID(), TSHAPE_FILLET); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeTShapeDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_PipeTShapeDriver::GetID()) return NULL; - GEOMImpl_IPipeTShape aData(aFunction); + AdvancedEngine_IPipeTShape aData(aFunction); aData.SetR1(theR1); aData.SetW1(theW1); @@ -2994,7 +2992,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet */ //============================================================================= Handle(TColStd_HSequenceOfTransient) -GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition +AdvancedEngine_IOperations::MakePipeTShapeFilletWithPosition (double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -3009,18 +3007,18 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition //Add a new object Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_TSHAPE); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_FILLET); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_PipeTShapeDriver::GetID(), TSHAPE_FILLET); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeTShapeDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_PipeTShapeDriver::GetID()) return NULL; // Check new position if (!CheckCompatiblePosition(theL1, theL2, theP1, theP2, theP3, 0.01)) { return NULL; } - GEOMImpl_IPipeTShape aData(aFunction); + AdvancedEngine_IPipeTShape aData(aFunction); aData.SetR1(theR1); aData.SetW1(theW1); @@ -3238,8 +3236,8 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition * \return New GEOM_Object, containing the created shape. */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR, double theRatio, - int theOrientation, int thePattern) +Handle(GEOM_Object) AdvancedEngine_IOperations::MakeDividedDisk (double theR, double theRatio, + int theOrientation, int thePattern) { SetErrorCode(KO); @@ -3254,13 +3252,13 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR, Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_DIVIDEDDISK); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_DividedDiskDriver::GetID(), DIVIDEDDISK_R_RATIO); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_DividedDiskDriver::GetID(), DIVIDEDDISK_R_RATIO); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_DividedDiskDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_DividedDiskDriver::GetID()) return NULL; - GEOMImpl_IDividedDisk aData (aFunction); + AdvancedEngine_IDividedDisk aData (aFunction); aData.SetR(theR); aData.SetRatio(theRatio); @@ -3312,11 +3310,11 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR, * \return New GEOM_Object, containing the created shape. */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDiskPntVecR (Handle(GEOM_Object) thePnt, - Handle(GEOM_Object) theVec, - double theR, - double theRatio, - int thePattern) +Handle(GEOM_Object) AdvancedEngine_IOperations::MakeDividedDiskPntVecR (Handle(GEOM_Object) thePnt, + Handle(GEOM_Object) theVec, + double theR, + double theRatio, + int thePattern) { SetErrorCode(KO); @@ -3324,13 +3322,13 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDiskPntVecR (Handle Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_DIVIDEDDISK); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_DividedDiskDriver::GetID(), DIVIDEDDISK_R_VECTOR_PNT); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_DividedDiskDriver::GetID(), DIVIDEDDISK_R_VECTOR_PNT); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_DividedDiskDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_DividedDiskDriver::GetID()) return NULL; - GEOMImpl_IDividedDisk aData (aFunction); + AdvancedEngine_IDividedDisk aData (aFunction); Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction(); Handle(GEOM_Function) aRefVec = theVec->GetLastFunction(); @@ -3389,9 +3387,9 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDiskPntVecR (Handle * \return New GEOM_Object, containing the created shape. */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedCylinder (double theR, - double theH, - int thePattern) +Handle(GEOM_Object) AdvancedEngine_IOperations::MakeDividedCylinder (double theR, + double theH, + int thePattern) { SetErrorCode(KO); @@ -3436,10 +3434,10 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedCylinder (double th * \return New GEOM_Object, containing the created shape. */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::list thelPoints, - int theNbMax, - int theDegMax, - double theDMax) +Handle(GEOM_Object) AdvancedEngine_IOperations::MakeSmoothingSurface (std::list thelPoints, + int theNbMax, + int theDegMax, + double theDMax) { SetErrorCode(KO); @@ -3447,13 +3445,13 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::lis Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_SMOOTHINGSURFACE); //Add a new shape function with parameters - Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_SmoothingSurfaceDriver::GetID(), SMOOTHINGSURFACE_LPOINTS); + Handle(GEOM_Function) aFunction = aShape->AddFunction(AdvancedEngine_SmoothingSurfaceDriver::GetID(), SMOOTHINGSURFACE_LPOINTS); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_SmoothingSurfaceDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != AdvancedEngine_SmoothingSurfaceDriver::GetID()) return NULL; - GEOMImpl_ISmoothingSurface aData (aFunction); + AdvancedEngine_ISmoothingSurface aData (aFunction); int aLen = thelPoints.size(); aData.SetLength(aLen); @@ -3505,4 +3503,3 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::lis return aShape; } -/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx b/src/AdvancedEngine/AdvancedEngine_IOperations.hxx similarity index 81% rename from src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx rename to src/AdvancedEngine/AdvancedEngine_IOperations.hxx index 8f59a9590..939dd0171 100644 --- a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx +++ b/src/AdvancedEngine/AdvancedEngine_IOperations.hxx @@ -16,13 +16,14 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : GEOMImpl_IAdvancedOperations.hxx +// File : AdvancedEngine_IOperations.hxx // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -#ifndef _GEOMImpl_IAdvancedOperations_HXX_ -#define _GEOMImpl_IAdvancedOperations_HXX_ +#ifndef _AdvancedEngine_IOperations_HXX_ +#define _AdvancedEngine_IOperations_HXX_ + +#include "AdvancedEngine.hxx" -#include #include "GEOM_IOperations.hxx" #include "GEOM_Engine.hxx" #include "GEOM_Object.hxx" @@ -42,7 +43,8 @@ class GEOMImpl_IGroupOperations; class Handle_Geom_Surface; class TopTools_ListOfShape; -class GEOMImpl_IAdvancedOperations: public GEOM_IOperations { +class ADVANCEDENGINE_EXPORT AdvancedEngine_IOperations: public GEOM_IOperations +{ private: bool MakePipeTShapePartition(Handle(GEOM_Object) theShape, double theR1, double theW1, double theL1, @@ -129,7 +131,7 @@ public: * false to obtain parts, useful for hexameshing) * \retval TopoDS_Shape - Resulting shape */ - Standard_EXPORT static TopoDS_Shape MakePipeTShapeThicknessReduction + static TopoDS_Shape MakePipeTShapeThicknessReduction (TopoDS_Shape theShape, double r1, double w1, double l1, double r2, double w2, double l2, @@ -155,17 +157,17 @@ public: * false to obtain parts, useful for hexameshing) * \retval TopoDS_Shape - Resulting shape */ - Standard_EXPORT static TopoDS_Shape MakeThicknessReduction (gp_Ax2 theAxes, - const double R, const double W, - const double Rthin, const double Wthin, - const double Ltrans, const double Lthin, - bool fuse); - + static TopoDS_Shape MakeThicknessReduction (gp_Ax2 theAxes, + const double R, const double W, + const double Rthin, const double Wthin, + const double Ltrans, const double Lthin, + bool fuse); + public: - Standard_EXPORT GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngine, int theDocID); - Standard_EXPORT ~GEOMImpl_IAdvancedOperations(); + AdvancedEngine_IOperations(GEOM_Engine* theEngine, int theDocID); + ~AdvancedEngine_IOperations(); - Standard_EXPORT Handle(TColStd_HSequenceOfTransient) + Handle(TColStd_HSequenceOfTransient) MakePipeTShape(double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -173,7 +175,7 @@ public: double theRI, double theWI, double theLtransI, double theLthinI, bool theHexMesh = true); - Standard_EXPORT Handle(TColStd_HSequenceOfTransient) + Handle(TColStd_HSequenceOfTransient) MakePipeTShapeWithPosition(double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -184,7 +186,7 @@ public: Handle(GEOM_Object) P2 = 0, Handle(GEOM_Object) P3 = 0); - Standard_EXPORT Handle(TColStd_HSequenceOfTransient) + Handle(TColStd_HSequenceOfTransient) MakePipeTShapeChamfer(double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -193,7 +195,7 @@ public: double theH, double theW, bool theHexMesh = true); - Standard_EXPORT Handle(TColStd_HSequenceOfTransient) + Handle(TColStd_HSequenceOfTransient) MakePipeTShapeChamferWithPosition(double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theH, double theW, @@ -205,7 +207,7 @@ public: Handle(GEOM_Object) P2 = 0, Handle(GEOM_Object) P3 = 0); - Standard_EXPORT Handle(TColStd_HSequenceOfTransient) + Handle(TColStd_HSequenceOfTransient) MakePipeTShapeFillet(double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -213,7 +215,7 @@ public: double theRI, double theWI, double theLtransI, double theLthinI, double theRF, bool theHexMesh = true); - Standard_EXPORT Handle(TColStd_HSequenceOfTransient) + Handle(TColStd_HSequenceOfTransient) MakePipeTShapeFilletWithPosition(double theR1, double theW1, double theL1, double theR2, double theW2, double theL2, double theRL, double theWL, double theLtransL, double theLthinL, @@ -224,22 +226,22 @@ public: Handle(GEOM_Object) P2 = 0, Handle(GEOM_Object) P3 = 0); - Standard_EXPORT Handle(GEOM_Object) MakeDividedDisk (double theR, double theRatio, - int theOrientation, int thePattern); - Standard_EXPORT Handle(GEOM_Object) MakeDividedDiskPntVecR (Handle(GEOM_Object) thePnt, - Handle(GEOM_Object) theVec, - double theR, - double theRatio, - int thePattern); + Handle(GEOM_Object) MakeDividedDisk (double theR, double theRatio, + int theOrientation, int thePattern); + Handle(GEOM_Object) MakeDividedDiskPntVecR (Handle(GEOM_Object) thePnt, + Handle(GEOM_Object) theVec, + double theR, + double theRatio, + int thePattern); - Standard_EXPORT Handle(GEOM_Object) MakeDividedCylinder (double theR, - double theH, - int thePattern); + Handle(GEOM_Object) MakeDividedCylinder (double theR, + double theH, + int thePattern); - Standard_EXPORT Handle(GEOM_Object) MakeSmoothingSurface (std::list thelPoints, - int theNbMax, - int theDegMax, - double theDMax); - /*@@ insert new functions before this line @@ do not remove this line @@*/ + Handle(GEOM_Object) MakeSmoothingSurface (std::list thelPoints, + int theNbMax, + int theDegMax, + double theDMax); }; + #endif diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc b/src/AdvancedEngine/AdvancedEngine_IOperations_i.cc similarity index 92% rename from src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc rename to src/AdvancedEngine/AdvancedEngine_IOperations_i.cc index 7ff12c39d..5afb75b59 100644 --- a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc +++ b/src/AdvancedEngine/AdvancedEngine_IOperations_i.cc @@ -22,7 +22,8 @@ #include -#include "GEOM_IAdvancedOperations_i.hh" +#include "AdvancedEngine_IOperations_i.hh" +#include "AdvancedEngine_IOperations.hxx" #include #include @@ -36,10 +37,10 @@ * constructor: */ //============================================================================= -GEOM_IAdvancedOperations_i::GEOM_IAdvancedOperations_i(PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, ::GEOMImpl_IAdvancedOperations* theImpl) +AdvancedEngine_IOperations_i::AdvancedEngine_IOperations_i(PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, AdvancedEngine_IOperations* theImpl) :GEOM_IOperations_i(thePOA, theEngine, theImpl) { - MESSAGE("GEOM_IAdvancedOperations_i::GEOM_IAdvancedOperations_i"); + MESSAGE("AdvancedEngine_IOperations_i::AdvancedEngine_IOperations_i"); } //============================================================================= @@ -47,9 +48,9 @@ GEOM_IAdvancedOperations_i::GEOM_IAdvancedOperations_i(PortableServer::POA_ptr t * destructor */ //============================================================================= -GEOM_IAdvancedOperations_i::~GEOM_IAdvancedOperations_i() +AdvancedEngine_IOperations_i::~AdvancedEngine_IOperations_i() { - MESSAGE("GEOM_IAdvancedOperations_i::~GEOM_IAdvancedOperations_i"); + MESSAGE("AdvancedEngine_IOperations_i::~AdvancedEngine_IOperations_i"); } //============================================================================= @@ -68,7 +69,7 @@ GEOM_IAdvancedOperations_i::~GEOM_IAdvancedOperations_i() * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShape +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShape (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Boolean theHexMesh) @@ -114,7 +115,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShape * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeWithPosition +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeWithPosition (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Boolean theHexMesh, @@ -166,7 +167,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeWithPosition * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeChamfer +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeChamfer (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theH, CORBA::Double theW, CORBA::Boolean theHexMesh) @@ -215,7 +216,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeChamfer * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeChamferWithPosition +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeChamferWithPosition (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theH, CORBA::Double theW, CORBA::Boolean theHexMesh, @@ -265,7 +266,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeChamferWithPosition * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeFillet +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeFillet (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRF, CORBA::Boolean theHexMesh) @@ -313,7 +314,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeFillet * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeFilletWithPosition +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeFilletWithPosition (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRF, CORBA::Boolean theHexMesh, @@ -361,7 +362,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeFilletWithPosition * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTR +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeTR (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRL, CORBA::Double theWL, CORBA::Double theLtransL, CORBA::Double theLthinL, @@ -412,7 +413,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTR * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRWithPosition +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeTRWithPosition (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRL, CORBA::Double theWL, CORBA::Double theLtransL, CORBA::Double theLthinL, @@ -469,7 +470,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRWithPosition * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRChamfer +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeTRChamfer (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRL, CORBA::Double theWL, CORBA::Double theLtransL, CORBA::Double theLthinL, @@ -523,7 +524,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRChamfer * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRChamferWithPosition +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeTRChamferWithPosition (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRL, CORBA::Double theWL, CORBA::Double theLtransL, CORBA::Double theLthinL, @@ -578,7 +579,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRChamferWithPosition * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRFillet +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeTRFillet (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRL, CORBA::Double theWL, CORBA::Double theLtransL, CORBA::Double theLthinL, @@ -631,7 +632,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRFillet * \return List of GEOM_Objects, containing the created shape and propagation groups. */ //============================================================================= -GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRFilletWithPosition +GEOM::ListOfGO* AdvancedEngine_IOperations_i::MakePipeTShapeTRFilletWithPosition (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, CORBA::Double theRL, CORBA::Double theWL, CORBA::Double theLtransL, CORBA::Double theLthinL, @@ -677,10 +678,10 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeTRFilletWithPosition * \return New GEOM_Object, containing the created shape. */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDisk (CORBA::Double theR, - CORBA::Double theRatio, - CORBA::Short theOrientation, - GEOM::pattern thePattern) +GEOM::GEOM_Object_ptr AdvancedEngine_IOperations_i::MakeDividedDisk (CORBA::Double theR, + CORBA::Double theRatio, + CORBA::Short theOrientation, + GEOM::pattern thePattern) { GEOM::GEOM_Object_var aGEOMObject; @@ -700,11 +701,11 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDisk (CORBA::Double * MakeDividedDiskPntVecR */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDiskPntVecR (GEOM::GEOM_Object_ptr thePnt, - GEOM::GEOM_Object_ptr theVec, - CORBA::Double theR, - CORBA::Double theRatio, - GEOM::pattern thePattern) +GEOM::GEOM_Object_ptr AdvancedEngine_IOperations_i::MakeDividedDiskPntVecR (GEOM::GEOM_Object_ptr thePnt, + GEOM::GEOM_Object_ptr theVec, + CORBA::Double theR, + CORBA::Double theRatio, + GEOM::pattern thePattern) { GEOM::GEOM_Object_var aGEOMObject; @@ -734,9 +735,9 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDiskPntVecR (GEOM:: * \return New GEOM_Object, containing the created shape. */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedCylinder (CORBA::Double theR, - CORBA::Double theH, - GEOM::pattern thePattern) +GEOM::GEOM_Object_ptr AdvancedEngine_IOperations_i::MakeDividedCylinder (CORBA::Double theR, + CORBA::Double theH, + GEOM::pattern thePattern) { GEOM::GEOM_Object_var aGEOMObject; @@ -761,10 +762,10 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedCylinder (CORBA::Do * \return New GEOM_Object, containing the created shape. */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeSmoothingSurface (const GEOM::ListOfGO& thelPoints, - CORBA::Long theNbMax, - CORBA::Long theDegMax, - CORBA::Double theDMax) +GEOM::GEOM_Object_ptr AdvancedEngine_IOperations_i::MakeSmoothingSurface (const GEOM::ListOfGO& thelPoints, + CORBA::Long theNbMax, + CORBA::Long theDegMax, + CORBA::Double theDMax) { GEOM::GEOM_Object_var aGEOMObject; @@ -789,4 +790,8 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeSmoothingSurface (const GE return GetObject(anObject); } -/*@@ insert new functions before this line @@ do not remove this line @@*/ +AdvancedEngine_IOperations* AdvancedEngine_IOperations_i::GetOperations() +{ + return (AdvancedEngine_IOperations*)GetImpl(); +} + diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh b/src/AdvancedEngine/AdvancedEngine_IOperations_i.hh similarity index 91% rename from src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh rename to src/AdvancedEngine/AdvancedEngine_IOperations_i.hh index 7f700132d..0711b6ab0 100644 --- a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh +++ b/src/AdvancedEngine/AdvancedEngine_IOperations_i.hh @@ -17,31 +17,31 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : GEOM_IAdvancedOperations.hh +// File : AdvancedEngine_IOperations_i.hh // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -#ifndef _GEOM_IAdvancedOperations_i_HeaderFile -#define _GEOM_IAdvancedOperations_i_HeaderFile +#ifndef _AdvancedEngine_IOperations_i_HeaderFile +#define _AdvancedEngine_IOperations_i_HeaderFile -#include "GEOMImpl_Gen.hxx" +#include "AdvancedEngine.hxx" -#include - -#include CORBA_SERVER_HEADER(GEOM_Gen) #include "GEOM_IOperations_i.hh" #include "GEOM_Object_i.hh" -#include "GEOM_AdvancedEngine.hxx" -#include "GEOMImpl_IAdvancedOperations.hxx" +#include +#include CORBA_SERVER_HEADER(GEOM_Gen) +#include CORBA_SERVER_HEADER(AdvancedGEOM) -class ADVANCEDENGINE_EXPORT GEOM_IAdvancedOperations_i : - public virtual POA_GEOM::GEOM_IAdvancedOperations, +class AdvancedEngine_IOperations; + +class ADVANCEDENGINE_EXPORT AdvancedEngine_IOperations_i : + public virtual POA_GEOM::IAdvancedOperations, public virtual GEOM_IOperations_i { public: - GEOM_IAdvancedOperations_i (PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, - ::GEOMImpl_IAdvancedOperations* theImpl); - ~GEOM_IAdvancedOperations_i(); + AdvancedEngine_IOperations_i (PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, + AdvancedEngine_IOperations* theImpl); + ~AdvancedEngine_IOperations_i(); // PipeTShape without thickness reduction GEOM::ListOfGO* MakePipeTShape (CORBA::Double theR1, CORBA::Double theW1, CORBA::Double theL1, @@ -131,10 +131,8 @@ class ADVANCEDENGINE_EXPORT GEOM_IAdvancedOperations_i : CORBA::Long theNbMax, CORBA::Long theDegMax, CORBA::Double theDMax); - /*@@ insert new functions before this line @@ do not remove this line @@*/ - ::GEOMImpl_IAdvancedOperations* GetOperations() - { return (::GEOMImpl_IAdvancedOperations*)GetImpl(); } + AdvancedEngine_IOperations* GetOperations(); }; #endif diff --git a/src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx b/src/AdvancedEngine/AdvancedEngine_IPipeTShape.hxx similarity index 93% rename from src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx rename to src/AdvancedEngine/AdvancedEngine_IPipeTShape.hxx index 430856921..b4a26fe9a 100644 --- a/src/AdvancedEngine/GEOMImpl_IPipeTShape.hxx +++ b/src/AdvancedEngine/AdvancedEngine_IPipeTShape.hxx @@ -17,17 +17,17 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef _GEOMImpl_IPipeTShape_HXX_ -#define _GEOMImpl_IPipeTShape_HXX_ +#ifndef _AdvancedEngine_IPipeTShape_HXX_ +#define _AdvancedEngine_IPipeTShape_HXX_ #include "GEOM_Function.hxx" #include -class GEOMImpl_IPipeTShape +class AdvancedEngine_IPipeTShape { public: - GEOMImpl_IPipeTShape(Handle(GEOM_Function) theFunction): _func(theFunction) {} + AdvancedEngine_IPipeTShape(Handle(GEOM_Function) theFunction): _func(theFunction) {} void SetR1(double theR1) { _func->SetReal(TSHAPE_ARG_R1, theR1); } double GetR1() { return _func->GetReal(TSHAPE_ARG_R1); } @@ -100,4 +100,4 @@ private: Handle(GEOM_Function) _func; }; -#endif // _GEOMImpl_IPipeTShape_HXX_ +#endif // _AdvancedEngine_IPipeTShape_HXX_ diff --git a/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx b/src/AdvancedEngine/AdvancedEngine_ISmoothingSurface.hxx similarity index 89% rename from src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx rename to src/AdvancedEngine/AdvancedEngine_ISmoothingSurface.hxx index ec3cf1a24..3ee9bde3e 100644 --- a/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx +++ b/src/AdvancedEngine/AdvancedEngine_ISmoothingSurface.hxx @@ -20,8 +20,8 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef _GEOMImpl_ISmoothingSurface_HXX_ -#define _GEOMImpl_ISmoothingSurface_HXX_ +#ifndef _AdvancedEngine_ISmoothingSurface_HXX_ +#define _AdvancedEngine_ISmoothingSurface_HXX_ #include "GEOM_Function.hxx" @@ -31,10 +31,10 @@ #define SMOOTHINGSURFACE_ARG_DEG_MAX 4 #define SMOOTHINGSURFACE_ARG_D_MAX 5 -class GEOMImpl_ISmoothingSurface +class AdvancedEngine_ISmoothingSurface { public: - GEOMImpl_ISmoothingSurface(Handle(GEOM_Function) theFunction): _func(theFunction) {} + AdvancedEngine_ISmoothingSurface(Handle(GEOM_Function) theFunction): _func(theFunction) {} void SetLength(int theLen) { _func->SetInteger(SMOOTHINGSURFACE_ARG_LENG, theLen); } int GetLength() { return _func->GetInteger(SMOOTHINGSURFACE_ARG_LENG); } @@ -55,4 +55,4 @@ private: Handle(GEOM_Function) _func; }; -#endif // _GEOMImpl_ISmoothingSurface_HXX_ +#endif // _AdvancedEngine_ISmoothingSurface_HXX_ diff --git a/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc b/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc deleted file mode 100644 index cf9bf8cea..000000000 --- a/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cc +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include "GEOM_AdvancedEngine.hxx" - -#include "AdvancedEngine_OperationsCreator.hh" - -#include "GEOM_IAdvancedOperations_i.hh" - -// Operations -#include -#include -// #include -#include -/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ - -#include -#include - -#include "Utils_ExceptHandlers.hxx" -#include "utilities.h" - -//============================================================================ -// function : Create -// purpose : -//============================================================================ -GEOM_IOperations_i* AdvancedEngine_OperationsCreator::Create (PortableServer::POA_ptr thePOA, - int theStudyId, - GEOM::GEOM_Gen_ptr theEngine, - ::GEOMImpl_Gen* theGenImpl) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE( "AdvancedEngine_OperationsCreator::Create" ); - - if (_mapOfOperations.find(theStudyId) == _mapOfOperations.end()) { - _mapOfOperations[theStudyId] = new GEOMImpl_IAdvancedOperations (theGenImpl, theStudyId); - - // Advanced operations - TFunction_DriverTable::Get()->AddDriver(GEOMImpl_PipeTShapeDriver::GetID(), - new GEOMImpl_PipeTShapeDriver()); - TFunction_DriverTable::Get()->AddDriver(GEOMImpl_DividedDiskDriver::GetID(), - new GEOMImpl_DividedDiskDriver()); - //TFunction_DriverTable::Get()->AddDriver(GEOMImpl_DividedCylinderDriver::GetID(), - // new GEOMImpl_DividedCylinderDriver()); - TFunction_DriverTable::Get()->AddDriver(GEOMImpl_SmoothingSurfaceDriver::GetID(), - new GEOMImpl_SmoothingSurfaceDriver()); - /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ - } - - GEOM_IAdvancedOperations_i* aServant = - new GEOM_IAdvancedOperations_i (thePOA, theEngine, _mapOfOperations[theStudyId]); - - return aServant; -} diff --git a/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cxx b/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cxx new file mode 100644 index 000000000..4ca0a05c5 --- /dev/null +++ b/src/AdvancedEngine/AdvancedEngine_OperationsCreator.cxx @@ -0,0 +1,69 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "AdvancedEngine_OperationsCreator.hxx" +#include "AdvancedEngine_IOperations_i.hh" +#include "AdvancedEngine_IOperations.hxx" +#include +#include +#include + +#include +#include + +#include "Utils_ExceptHandlers.hxx" +#include "utilities.h" + +std::map AdvancedEngine_OperationsCreator::_mapOfOperations; + +AdvancedEngine_OperationsCreator::AdvancedEngine_OperationsCreator() +{ + // Register drivers + TFunction_DriverTable::Get()->AddDriver(AdvancedEngine_PipeTShapeDriver::GetID(), + new AdvancedEngine_PipeTShapeDriver()); + TFunction_DriverTable::Get()->AddDriver(AdvancedEngine_DividedDiskDriver::GetID(), + new AdvancedEngine_DividedDiskDriver()); + TFunction_DriverTable::Get()->AddDriver(AdvancedEngine_SmoothingSurfaceDriver::GetID(), + new AdvancedEngine_SmoothingSurfaceDriver()); +} + +AdvancedEngine_OperationsCreator::~AdvancedEngine_OperationsCreator() +{ +} + +GEOM_IOperations_i* AdvancedEngine_OperationsCreator::Create (PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl) +{ + Unexpect aCatch(SALOME_SalomeException); + MESSAGE( "AdvancedEngine_OperationsCreator::Create" ); + return new AdvancedEngine_IOperations_i( thePOA, theEngine, get( theGenImpl, theStudyId ) ); +} + +AdvancedEngine_IOperations* AdvancedEngine_OperationsCreator::get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ) +{ + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) + _mapOfOperations[theStudyId] = new AdvancedEngine_IOperations( theGenImpl, theStudyId ); + return _mapOfOperations[theStudyId]; +} diff --git a/src/AdvancedEngine/AdvancedEngine_OperationsCreator.hh b/src/AdvancedEngine/AdvancedEngine_OperationsCreator.hxx similarity index 72% rename from src/AdvancedEngine/AdvancedEngine_OperationsCreator.hh rename to src/AdvancedEngine/AdvancedEngine_OperationsCreator.hxx index 261721eee..1264035ca 100755 --- a/src/AdvancedEngine/AdvancedEngine_OperationsCreator.hh +++ b/src/AdvancedEngine/AdvancedEngine_OperationsCreator.hxx @@ -23,30 +23,33 @@ #ifndef _GEOM_ADVANCEDENGINE_OPERATIONSCREATOR_HXX_ #define _GEOM_ADVANCEDENGINE_OPERATIONSCREATOR_HXX_ -#include "GEOM_AdvancedEngine.hxx" +#include "AdvancedEngine.hxx" #include "GEOM_Gen_i.hh" -#include "GEOMImpl_IAdvancedOperations.hxx" - #include +class AdvancedEngine_IOperations; + //===================================================================== // Operations creator //===================================================================== class ADVANCEDENGINE_EXPORT AdvancedEngine_OperationsCreator : public GEOM_GenericOperationsCreator { - public: - // Create operations - virtual GEOM_IOperations_i* Create (PortableServer::POA_ptr thePOA, - int theStudyId, - GEOM::GEOM_Gen_ptr theEngine, - ::GEOMImpl_Gen* theGenImpl); - // return the name of IDL module - //virtual std::string GetModuleName(); +public: + AdvancedEngine_OperationsCreator(); + ~AdvancedEngine_OperationsCreator(); - private: - std::map _mapOfOperations; + GEOM_IOperations_i* Create (PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl); + +private: + static AdvancedEngine_IOperations* get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ); +private: + static std::map _mapOfOperations; }; #endif diff --git a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx b/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.cxx similarity index 93% rename from src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx rename to src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.cxx index 613806b16..7551b43f7 100644 --- a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.cxx +++ b/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.cxx @@ -17,36 +17,29 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include +#include "AdvancedEngine_PipeTShapeDriver.hxx" +#include "AdvancedEngine_IPipeTShape.hxx" +#include "AdvancedEngine_Types.hxx" +#include "AdvancedEngine_IOperations.hxx" -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include - -#include -#include - -// Partition includes -#include -#include +#include "GEOMImpl_Block6Explorer.hxx" +#include "GEOM_Function.hxx" +#include "GEOM_IOperations.hxx" +#include "GEOMUtils.hxx" +#include "GEOMAlgo_FinderShapeOn1.hxx" +#include "GEOMAlgo_FinderShapeOn2.hxx" +#include "GEOMAlgo_ClsfBox.hxx" +#include "GEOMAlgo_Splitter.hxx" +#include "Geom_CylindricalSurface.hxx" #include #include #include #include #include #include - +#include +#include #include #include #include @@ -69,25 +62,22 @@ #include #include -//@@ include required header files here @@// - -#include "AdvancedEngine_Types.hxx" //======================================================================= //function : GetID //purpose : //======================================================================= -const Standard_GUID& GEOMImpl_PipeTShapeDriver::GetID() +const Standard_GUID& AdvancedEngine_PipeTShapeDriver::GetID() { static Standard_GUID aGUID("1C3A0F3F-729D-4E83-8232-78E74FC5637C"); return aGUID; } //======================================================================= -//function : GEOMImpl_PipeTShapeDriver +//function : AdvancedEngine_PipeTShapeDriver //purpose : //======================================================================= -GEOMImpl_PipeTShapeDriver::GEOMImpl_PipeTShapeDriver() +AdvancedEngine_PipeTShapeDriver::AdvancedEngine_PipeTShapeDriver() { } @@ -103,7 +93,7 @@ GEOMImpl_PipeTShapeDriver::GEOMImpl_PipeTShapeDriver() */ //======================================================================= Handle(TColStd_HSequenceOfInteger) -GEOMImpl_PipeTShapeDriver::GetShapesOnBoxIDs(const TopoDS_Shape& aBox, +AdvancedEngine_PipeTShapeDriver::GetShapesOnBoxIDs(const TopoDS_Shape& aBox, const TopoDS_Shape& aShape, const Standard_Integer theShapeType, GEOMAlgo_State theState) const @@ -176,7 +166,7 @@ GEOMImpl_PipeTShapeDriver::GetShapesOnBoxIDs(const TopoDS_Shape& aBox, */ //======================================================================= Handle(TColStd_HSequenceOfInteger) - GEOMImpl_PipeTShapeDriver::GetShapesOnSurfaceIDs(const Handle(Geom_Surface)& theSurface, + AdvancedEngine_PipeTShapeDriver::GetShapesOnSurfaceIDs(const Handle(Geom_Surface)& theSurface, const TopoDS_Shape& theShape, TopAbs_ShapeEnum theShapeType, GEOMAlgo_State theState) const @@ -255,7 +245,7 @@ Handle(TColStd_HSequenceOfInteger) //purpose : return the common shapes between 2 cylindrical surfaces // along OX and OZ //======================================================================= -void GEOMImpl_PipeTShapeDriver::GetCommonShapesOnCylinders(const TopoDS_Shape& theShape, +void AdvancedEngine_PipeTShapeDriver::GetCommonShapesOnCylinders(const TopoDS_Shape& theShape, TopAbs_ShapeEnum theShapeType, double r1, double r2, @@ -308,7 +298,7 @@ void GEOMImpl_PipeTShapeDriver::GetCommonShapesOnCylinders(const TopoDS_Shape& t //function : MakePipeTShape //purpose : //======================================================================= -TopoDS_Shape GEOMImpl_PipeTShapeDriver::MakePipeTShape (const double r1, const double w1, const double l1, +TopoDS_Shape AdvancedEngine_PipeTShapeDriver::MakePipeTShape (const double r1, const double w1, const double l1, const double r2, const double w2, const double l2) const { double r1Ext = r1 + w1; @@ -358,7 +348,7 @@ TopoDS_Shape GEOMImpl_PipeTShapeDriver::MakePipeTShape (const double r1, const d //function : MakeQuarterPipeTShape //purpose : //======================================================================= -TopoDS_Shape GEOMImpl_PipeTShapeDriver::MakeQuarterPipeTShape (const double r1, const double w1, const double l1, +TopoDS_Shape AdvancedEngine_PipeTShapeDriver::MakeQuarterPipeTShape (const double r1, const double w1, const double l1, const double r2, const double w2, const double l2) const { TopoDS_Shape Te = MakePipeTShape(r1, w1, l1, r2, w2, l2); @@ -390,12 +380,12 @@ TopoDS_Shape GEOMImpl_PipeTShapeDriver::MakeQuarterPipeTShape (const double r1, //function : Execute //purpose : //======================================================================= -Standard_Integer GEOMImpl_PipeTShapeDriver::Execute (TFunction_Logbook& log) const +Standard_Integer AdvancedEngine_PipeTShapeDriver::Execute (TFunction_Logbook& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); - GEOMImpl_IPipeTShape aData (aFunction); + AdvancedEngine_IPipeTShape aData (aFunction); Standard_Integer aType = aFunction->GetType(); TopoDS_Shape aShape, Te4, Te4Part; @@ -624,14 +614,14 @@ Standard_Integer GEOMImpl_PipeTShapeDriver::Execute (TFunction_Logbook& log) con */ //================================================================================ -bool GEOMImpl_PipeTShapeDriver:: +bool AdvancedEngine_PipeTShapeDriver:: GetCreationInformation(std::string& theOperationName, std::vector& theParams) { if (Label().IsNull()) return 0; Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); - GEOMImpl_IPipeTShape aCI( function ); + AdvancedEngine_IPipeTShape aCI( function ); Standard_Integer aType = function->GetType(); theOperationName = "PIPETSHAPE"; @@ -674,5 +664,5 @@ GetCreationInformation(std::string& theOperationName, return true; } -IMPLEMENT_STANDARD_HANDLE (GEOMImpl_PipeTShapeDriver,GEOM_BaseDriver); -IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_PipeTShapeDriver,GEOM_BaseDriver); +IMPLEMENT_STANDARD_HANDLE (AdvancedEngine_PipeTShapeDriver,GEOM_BaseDriver); +IMPLEMENT_STANDARD_RTTIEXT (AdvancedEngine_PipeTShapeDriver,GEOM_BaseDriver); diff --git a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx b/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx similarity index 79% rename from src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx rename to src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx index 3bcdd5574..cba5d1492 100644 --- a/src/AdvancedEngine/GEOMImpl_PipeTShapeDriver.hxx +++ b/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx @@ -17,51 +17,41 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef _GEOMImpl_PipeTShapeDriver_HXX -#define _GEOMImpl_PipeTShapeDriver_HXX +#ifndef _AdvancedEngine_PipeTShapeDriver_HXX +#define _AdvancedEngine_PipeTShapeDriver_HXX -#include +#include "AdvancedEngine.hxx" +#include "GEOM_BaseDriver.hxx" #include "GEOMAlgo_State.hxx" #include -#include #include -#include #include -#include +#include -#include +DEFINE_STANDARD_HANDLE( AdvancedEngine_PipeTShapeDriver, GEOM_BaseDriver ); -class Handle_Standard_Type; -class GEOMImpl_PipeTShapeDriver; - - - -#include "GEOM_BaseDriver.hxx" - -DEFINE_STANDARD_HANDLE( GEOMImpl_PipeTShapeDriver, GEOM_BaseDriver ); - -class GEOMImpl_PipeTShapeDriver : public GEOM_BaseDriver { +class ADVANCEDENGINE_EXPORT AdvancedEngine_PipeTShapeDriver : public GEOM_BaseDriver +{ public: // Methods PUBLIC // - Standard_EXPORT GEOMImpl_PipeTShapeDriver(); - Standard_EXPORT virtual Standard_Integer Execute(TFunction_Logbook& log) const; - Standard_EXPORT virtual void Validate(TFunction_Logbook&) const {} - Standard_EXPORT Standard_Boolean MustExecute(const TFunction_Logbook&) const + AdvancedEngine_PipeTShapeDriver(); + virtual Standard_Integer Execute(TFunction_Logbook& log) const; + virtual void Validate(TFunction_Logbook&) const {} + Standard_Boolean MustExecute(const TFunction_Logbook&) const { return Standard_True; } - Standard_EXPORT static const Standard_GUID& GetID(); - Standard_EXPORT ~GEOMImpl_PipeTShapeDriver() {}; + static const Standard_GUID& GetID(); + ~AdvancedEngine_PipeTShapeDriver() {}; - Standard_EXPORT virtual - bool GetCreationInformation(std::string& theOperationName, - std::vector& params); + virtual bool GetCreationInformation(std::string& theOperationName, + std::vector& params); // Type management // -DEFINE_STANDARD_RTTI( GEOMImpl_PipeTShapeDriver ) +DEFINE_STANDARD_RTTI( AdvancedEngine_PipeTShapeDriver ) private: @@ -131,4 +121,4 @@ private: }; -#endif // _GEOMImpl_PipeTShapeDriver_HXX +#endif // _AdvancedEngine_PipeTShapeDriver_HXX diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx b/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.cxx similarity index 90% rename from src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx rename to src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.cxx index 2b0345522..19fef9c52 100644 --- a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx +++ b/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.cxx @@ -19,17 +19,15 @@ #include +#include "AdvancedEngine_SmoothingSurfaceDriver.hxx" +#include "AdvancedEngine_ISmoothingSurface.hxx" #include "AdvancedEngine_Types.hxx" -#include -#include -#include -#include +#include "GEOM_Function.hxx" #include #include -//@@ include required header files here @@// #include #include #include @@ -76,21 +74,22 @@ #include #include + //======================================================================= //function : GetID //purpose : //======================================================================= -const Standard_GUID& GEOMImpl_SmoothingSurfaceDriver::GetID() +const Standard_GUID& AdvancedEngine_SmoothingSurfaceDriver::GetID() { static Standard_GUID aGUID("1C3A0F30-729D-4E83-8232-78E74FC5637C"); return aGUID; } //======================================================================= -//function : GEOMImpl_SmoothingSurfaceDriver +//function : AdvancedEngine_SmoothingSurfaceDriver //purpose : //======================================================================= -GEOMImpl_SmoothingSurfaceDriver::GEOMImpl_SmoothingSurfaceDriver() +AdvancedEngine_SmoothingSurfaceDriver::AdvancedEngine_SmoothingSurfaceDriver() { } @@ -98,7 +97,7 @@ GEOMImpl_SmoothingSurfaceDriver::GEOMImpl_SmoothingSurfaceDriver() //function : MakeSmoothingSurfaceUnClosed //purpose : //======================================================================= -TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed +TopoDS_Shape AdvancedEngine_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed (const Handle_TColgp_HArray1OfPnt &theListOfPoints, const Standard_Integer theNbMax, const Standard_Integer theDegMax, @@ -166,7 +165,7 @@ TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed //function : Execute //purpose : //======================================================================= -Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log) const +Standard_Integer AdvancedEngine_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); @@ -177,7 +176,7 @@ Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log if (aType != SMOOTHINGSURFACE_LPOINTS) return 0; // cout << "Youhou : " << aType << endl; - GEOMImpl_ISmoothingSurface aData (aFunction); + AdvancedEngine_ISmoothingSurface aData (aFunction); // Fill the map of vertices. Standard_Integer aNbShapes = aData.GetLength(); @@ -217,7 +216,7 @@ Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log const Standard_Real aDMax = aData.GetDMax(); // Make smoothing surface. - TopoDS_Shape aShape = GEOMImpl_SmoothingSurfaceDriver:: + TopoDS_Shape aShape = AdvancedEngine_SmoothingSurfaceDriver:: MakeSmoothingSurfaceUnClosed(anArrayofPnt, aNbMax, aDegMax, aDMax); if (aShape.IsNull()) return 0; @@ -235,14 +234,14 @@ Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log */ //================================================================================ -bool GEOMImpl_SmoothingSurfaceDriver:: +bool AdvancedEngine_SmoothingSurfaceDriver:: GetCreationInformation(std::string& theOperationName, std::vector& theParams) { if (Label().IsNull()) return 0; Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); - GEOMImpl_ISmoothingSurface aCI( function ); + AdvancedEngine_ISmoothingSurface aCI( function ); Standard_Integer aType = function->GetType(); theOperationName = "SMOOTHINGSURFACE"; @@ -272,5 +271,5 @@ GetCreationInformation(std::string& theOperationName, return true; } -IMPLEMENT_STANDARD_HANDLE (GEOMImpl_SmoothingSurfaceDriver,GEOM_BaseDriver); -IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_SmoothingSurfaceDriver,GEOM_BaseDriver); +IMPLEMENT_STANDARD_HANDLE (AdvancedEngine_SmoothingSurfaceDriver,GEOM_BaseDriver); +IMPLEMENT_STANDARD_RTTIEXT (AdvancedEngine_SmoothingSurfaceDriver,GEOM_BaseDriver); diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx b/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.hxx similarity index 55% rename from src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx rename to src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.hxx index 6a22f65dc..fd5f28bec 100644 --- a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx +++ b/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.hxx @@ -17,50 +17,39 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef _GEOMImpl_SmoothingSurfaceDriver_HXX -#define _GEOMImpl_SmoothingSurfaceDriver_HXX - -#ifndef _TFunction_Driver_HeaderFile -#include -#endif -#ifndef _TFunction_Logbook_HeaderFile -#include -#endif -#ifndef _Standard_CString_HeaderFile -#include -#endif -#include -#include - -class Handle_Standard_Type; -class GEOMImpl_SmoothingSurfaceDriver; - +#ifndef _AdvancedEngine_SmoothingSurfaceDriver_HXX +#define _AdvancedEngine_SmoothingSurfaceDriver_HXX +#include "AdvancedEngine.hxx" #include "GEOM_BaseDriver.hxx" -DEFINE_STANDARD_HANDLE( GEOMImpl_SmoothingSurfaceDriver, GEOM_BaseDriver ); +#include +#include +#include -class GEOMImpl_SmoothingSurfaceDriver : public GEOM_BaseDriver { +DEFINE_STANDARD_HANDLE( AdvancedEngine_SmoothingSurfaceDriver, GEOM_BaseDriver ); + +class ADVANCEDENGINE_EXPORT AdvancedEngine_SmoothingSurfaceDriver : public GEOM_BaseDriver +{ public: // Methods PUBLIC // - Standard_EXPORT GEOMImpl_SmoothingSurfaceDriver(); - Standard_EXPORT virtual Standard_Integer Execute(TFunction_Logbook& log) const; - Standard_EXPORT virtual void Validate(TFunction_Logbook&) const {} - Standard_EXPORT Standard_Boolean MustExecute(const TFunction_Logbook&) const + AdvancedEngine_SmoothingSurfaceDriver(); + virtual Standard_Integer Execute(TFunction_Logbook& log) const; + virtual void Validate(TFunction_Logbook&) const {} + Standard_Boolean MustExecute(const TFunction_Logbook&) const { return Standard_True; } - Standard_EXPORT static const Standard_GUID& GetID(); - Standard_EXPORT ~GEOMImpl_SmoothingSurfaceDriver() {}; + static const Standard_GUID& GetID(); + ~AdvancedEngine_SmoothingSurfaceDriver() {}; - Standard_EXPORT virtual - bool GetCreationInformation(std::string& theOperationName, - std::vector& params); + virtual bool GetCreationInformation(std::string& theOperationName, + std::vector& params); // Type management // -DEFINE_STANDARD_RTTI( GEOMImpl_SmoothingSurfaceDriver ) +DEFINE_STANDARD_RTTI( AdvancedEngine_SmoothingSurfaceDriver ) private: TopoDS_Shape MakeSmoothingSurfaceUnClosed @@ -70,4 +59,4 @@ private: const Standard_Real theDMax) const; }; -#endif // _GEOMImpl_SmoothingSurfaceDriver_HXX +#endif // _AdvancedEngine_SmoothingSurfaceDriver_HXX diff --git a/src/AdvancedEngine/AdvancedEngine_Types.hxx b/src/AdvancedEngine/AdvancedEngine_Types.hxx index aa552a15d..63ee5b5ca 100644 --- a/src/AdvancedEngine/AdvancedEngine_Types.hxx +++ b/src/AdvancedEngine/AdvancedEngine_Types.hxx @@ -20,13 +20,14 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +#include "GEOMImpl_Types.hxx" + // Advanced functions (base = 200) -#define ADVANCED_BASE 200 // NO OPERATION (advanced operations base) -#define GEOM_TSHAPE 201 -#define GEOM_DIVIDEDDISK 202 -#define GEOM_DIVIDEDCYLINDER 203 -#define GEOM_SMOOTHINGSURFACE 204 -/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ +#define GEOM_TSHAPE ( USER_TYPE + 1 ) +#define GEOM_DIVIDEDDISK ( USER_TYPE + 2 ) +#define GEOM_DIVIDEDCYLINDER ( USER_TYPE + 3 ) +#define GEOM_SMOOTHINGSURFACE ( USER_TYPE + 4 ) + // Advanced functions sub-operations codes #define TSHAPE_BASIC 1 #define TSHAPE_CHAMFER 2 @@ -35,4 +36,3 @@ #define DIVIDEDDISK_R_VECTOR_PNT 2 #define DIVIDEDCYLINDER_R_H 1 #define SMOOTHINGSURFACE_LPOINTS 1 -/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ diff --git a/src/AdvancedEngine/CMakeLists.txt b/src/AdvancedEngine/CMakeLists.txt index b6073f353..7a2c8e13a 100755 --- a/src/AdvancedEngine/CMakeLists.txt +++ b/src/AdvancedEngine/CMakeLists.txt @@ -45,6 +45,7 @@ ADD_DEFINITIONS( SET(_link_LIBRARIES GEOMEngine SalomeIDLGEOM + SalomeIDLAdvancedGEOM ${KERNEL_SALOMELocalTrace} ${KERNEL_SalomeGenericObj} ${KERNEL_TOOLSDS} @@ -55,30 +56,28 @@ SET(_link_LIBRARIES # --- headers --- SET(AdvancedEngine_HEADERS + AdvancedEngine.hxx AdvancedEngine_Types.hxx - # AdvancedEngine_OperationsCreator.hh - # GEOM_AdvancedEngine.hxx - # GEOMImpl_IAdvancedOperations.hxx - # GEOM_IAdvancedOperations_i.hh - # #ADVANCED_INCLUDES: - # GEOMImpl_IPipeTShape.hxx GEOMImpl_PipeTShapeDriver.hxx - # GEOMImpl_IDividedDisk.hxx GEOMImpl_DividedDiskDriver.hxx - # GEOMImpl_IDividedCylinder.hxx GEOMImpl_DividedCylinderDriver.hxx - # GEOMImpl_ISmoothingSurface.hxx GEOMImpl_SmoothingSurfaceDriver.hxx + AdvancedEngine_DividedDiskDriver.hxx + AdvancedEngine_PipeTShapeDriver.hxx + AdvancedEngine_SmoothingSurfaceDriver.hxx + AdvancedEngine_IPipeTShape.hxx + AdvancedEngine_ISmoothingSurface.hxx + AdvancedEngine_IDividedDisk.hxx + AdvancedEngine_IOperations.hxx + AdvancedEngine_IOperations_i.hh + AdvancedEngine_OperationsCreator.hxx ) # --- sources --- SET(AdvancedEngine_SOURCES AdvancedEngine.cxx - AdvancedEngine_OperationsCreator.cc - GEOMImpl_IAdvancedOperations.cxx - GEOM_IAdvancedOperations_i.cc - # ADVANCED_SOURCES: - GEOMImpl_PipeTShapeDriver.cxx - GEOMImpl_DividedDiskDriver.cxx - #GEOMImpl_DividedCylinderDriver.cxx - GEOMImpl_SmoothingSurfaceDriver.cxx - ##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@## + AdvancedEngine_DividedDiskDriver.cxx + AdvancedEngine_PipeTShapeDriver.cxx + AdvancedEngine_SmoothingSurfaceDriver.cxx + AdvancedEngine_IOperations.cxx + AdvancedEngine_IOperations_i.cc + AdvancedEngine_OperationsCreator.cxx ) # --- rules --- @@ -87,4 +86,4 @@ ADD_LIBRARY(AdvancedEngine ${AdvancedEngine_SOURCES}) TARGET_LINK_LIBRARIES(AdvancedEngine ${_link_LIBRARIES}) INSTALL(TARGETS AdvancedEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -INSTALL(FILES ${AdvancedEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) \ No newline at end of file +INSTALL(FILES ${AdvancedEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/AdvancedGUI/AdvancedGUI_images.ts b/src/AdvancedGUI/AdvancedGEOM_images.ts similarity index 100% rename from src/AdvancedGUI/AdvancedGUI_images.ts rename to src/AdvancedGUI/AdvancedGEOM_images.ts diff --git a/src/AdvancedGUI/AdvancedGUI_msg_en.ts b/src/AdvancedGUI/AdvancedGEOM_msg_en.ts similarity index 100% rename from src/AdvancedGUI/AdvancedGUI_msg_en.ts rename to src/AdvancedGUI/AdvancedGEOM_msg_en.ts diff --git a/src/AdvancedGUI/AdvancedGUI_msg_fr.ts b/src/AdvancedGUI/AdvancedGEOM_msg_fr.ts similarity index 100% rename from src/AdvancedGUI/AdvancedGUI_msg_fr.ts rename to src/AdvancedGUI/AdvancedGEOM_msg_fr.ts diff --git a/src/AdvancedGUI/AdvancedGUI_msg_ja.ts b/src/AdvancedGUI/AdvancedGEOM_msg_ja.ts similarity index 100% rename from src/AdvancedGUI/AdvancedGUI_msg_ja.ts rename to src/AdvancedGUI/AdvancedGEOM_msg_ja.ts diff --git a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx index 4b1a9f288..721667206 100644 --- a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.cxx @@ -216,7 +216,6 @@ void AdvancedGUI_DividedCylinderDlg::ValueChangedInSpinBox() //================================================================================= GEOM::GEOM_IOperations_ptr AdvancedGUI_DividedCylinderDlg::createOperation() { - //return getGeomEngine()->GetIAdvancedOperations(getStudyId()); return getGeomEngine()->GetPluginOperations(getStudyId(), "AdvancedEngine"); } @@ -243,7 +242,7 @@ bool AdvancedGUI_DividedCylinderDlg::execute (ObjectList& objects) GEOM::GEOM_Object_var anObj; - GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation()); + GEOM::IAdvancedOperations_var anOper = GEOM::IAdvancedOperations::_narrow(getOperation()); //@@ retrieve input values from the widgets here @@// CORBA::Double theR = GroupParams->SpinBox_DX->value(); diff --git a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h index 3fef245e9..bc1760cae 100644 --- a/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h +++ b/src/AdvancedGUI/AdvancedGUI_DividedCylinderDlg.h @@ -25,6 +25,9 @@ #include +#include +#include CORBA_SERVER_HEADER(AdvancedGEOM) + class DlgRef_2Spin; class DlgRef_3Radio; diff --git a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx index 974a66a89..2b409e91f 100644 --- a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx @@ -392,7 +392,6 @@ void AdvancedGUI_DividedDiskDlg::ValueChangedInSpinBox() //================================================================================= GEOM::GEOM_IOperations_ptr AdvancedGUI_DividedDiskDlg::createOperation() { - //return getGeomEngine()->GetIAdvancedOperations(getStudyId()); return getGeomEngine()->GetPluginOperations(getStudyId(), "AdvancedEngine"); } @@ -419,7 +418,8 @@ bool AdvancedGUI_DividedDiskDlg::execute (ObjectList& objects) GEOM::GEOM_Object_var anObj; - GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation()); + GEOM::IAdvancedOperations_var anOper = GEOM::IAdvancedOperations::_narrow(getOperation()); + CORBA::Double theRatio = 67; // About 2/3 CORBA::Double theR = 0; diff --git a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h index aac6532cb..60ce1fc07 100644 --- a/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h +++ b/src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h @@ -25,6 +25,9 @@ #include +#include +#include CORBA_SERVER_HEADER(AdvancedGEOM) + class DlgRef_1Spin; class DlgRef_3Radio; class DlgRef_2Sel1Spin; diff --git a/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx b/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx index 1eac6f55f..ee07a99cd 100644 --- a/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx @@ -19,6 +19,9 @@ #include "AdvancedGUI_PipeTShapeDlg.h" +#include +#include CORBA_SERVER_HEADER(AdvancedGEOM) + #include #include #include @@ -844,7 +847,6 @@ void AdvancedGUI_PipeTShapeDlg::DisplayPreview (const bool activate, const bool //================================================================================= GEOM::GEOM_IOperations_ptr AdvancedGUI_PipeTShapeDlg::createOperation() { - //return getGeomEngine()->GetIAdvancedOperations(getStudyId()); return getGeomEngine()->GetPluginOperations(getStudyId(), "AdvancedEngine"); } @@ -1059,7 +1061,7 @@ bool AdvancedGUI_PipeTShapeDlg::executeNoCheck (ObjectList& objects) // GEOM::GEOM_Object_var anObj; GEOM::ListOfGO_var anObj; - GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation()); + GEOM::IAdvancedOperations_var anOper = GEOM::IAdvancedOperations::_narrow(getOperation()); //@@ retrieve input values from the widgets here @@// CORBA::Double theR1 = MainTubeGroupParams->SpinBox_DX->value(); diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx index 151af6348..89c5f68ce 100644 --- a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx @@ -19,6 +19,9 @@ #include "AdvancedGUI_SmoothingSurfaceDlg.h" +#include +#include CORBA_SERVER_HEADER(AdvancedGEOM) + #include #include #include @@ -187,7 +190,6 @@ void AdvancedGUI_SmoothingSurfaceDlg::enterEvent (QEvent*) //================================================================================= GEOM::GEOM_IOperations_ptr AdvancedGUI_SmoothingSurfaceDlg::createOperation() { - //return getGeomEngine()->GetIAdvancedOperations(getStudyId()); return getGeomEngine()->GetPluginOperations(getStudyId(), "AdvancedEngine"); } @@ -219,7 +221,7 @@ bool AdvancedGUI_SmoothingSurfaceDlg::execute (ObjectList& objects) GEOM::GEOM_Object_var anObj; - GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation()); + GEOM::IAdvancedOperations_var anOper = GEOM::IAdvancedOperations::_narrow(getOperation()); //@@ retrieve input values from the widgets here @@// GEOM::ListOfGO_var points = new GEOM::ListOfGO(); diff --git a/src/AdvancedGUI/CMakeLists.txt b/src/AdvancedGUI/CMakeLists.txt index 74fe3dc94..1051f2b19 100755 --- a/src/AdvancedGUI/CMakeLists.txt +++ b/src/AdvancedGUI/CMakeLists.txt @@ -38,7 +38,11 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOMImpl ${PROJECT_SOURCE_DIR}/src/GEOMGUI ${PROJECT_SOURCE_DIR}/src/GEOMBase + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMAlgo ${PROJECT_SOURCE_DIR}/src/DlgRef + ${PROJECT_SOURCE_DIR}/src/AdvancedEngine + ${PROJECT_SOURCE_DIR}/src/GEOM_I ${PROJECT_BINARY_DIR}/src/DlgRef ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} @@ -54,6 +58,7 @@ ADD_DEFINITIONS( # libraries to link to SET(_link_LIBRARIES GEOMBase + SalomeIDLAdvancedGEOM ) # --- resources --- @@ -64,10 +69,10 @@ SET(_uic_files # resource files / to be processed by lrelease SET(AdvancedGUI_RESOURCES - AdvancedGUI_images.ts - AdvancedGUI_msg_en.ts - AdvancedGUI_msg_fr.ts - AdvancedGUI_msg_ja.ts + AdvancedGEOM_images.ts + AdvancedGEOM_msg_en.ts + AdvancedGEOM_msg_fr.ts + AdvancedGEOM_msg_ja.ts ) # --- headers --- diff --git a/src/BREPExport/BREPExport.cxx b/src/BREPExport/BREPExport.cxx deleted file mode 100644 index 2d468398a..000000000 --- a/src/BREPExport/BREPExport.cxx +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: BREPExport.cxx -// Created: Wed May 19 13:10:05 2004 -// Author: Pavel TELKOV -// -// -#include "utilities.h" - -#include - -#include -#include - -#ifdef WIN32 - #if defined BREPEXPORT_EXPORTS || defined BREPExport_EXPORTS - #define BREPEXPORT_EXPORT __declspec( dllexport ) - #else - #define BREPEXPORT_EXPORT __declspec( dllimport ) - #endif -#else - #define BREPEXPORT_EXPORT -#endif - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ - BREPEXPORT_EXPORT int Export (const TopoDS_Shape& theShape, - const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& /*theFormatName*/) - { - MESSAGE("Export BREP into file " << theFileName.ToCString()); - - if ( !BRepTools::Write( theShape, theFileName.ToCString() ) ) - return 0; - - return 1; - } -} diff --git a/src/BREPExport/CMakeLists.txt b/src/BREPExport/CMakeLists.txt deleted file mode 100755 index 2dbaedad8..000000000 --- a/src/BREPExport/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKBRep} - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(BREPExport_SOURCES - BREPExport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(BREPExport ${BREPExport_SOURCES}) -TARGET_LINK_LIBRARIES(BREPExport ${_link_LIBRARIES}) -INSTALL(TARGETS BREPExport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/BREPImport/BREPImport.cxx b/src/BREPImport/BREPImport.cxx deleted file mode 100644 index 4d2545167..000000000 --- a/src/BREPImport/BREPImport.cxx +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: BREPImport.cxx -// Created: Wed May 19 14:29:52 2004 -// Author: Pavel TELKOV -// -// -#include "utilities.h" - -#include -#include - -#include -#include -#include - -#ifdef WIN32 - #if defined BREPIMPORT_EXPORTS || defined BREPImport_EXPORTS - #define BREPIMPORT_EXPORT __declspec( dllexport ) - #else - #define BREPIMPORT_EXPORT __declspec( dllimport ) - #endif -#else - #define BREPIMPORT_EXPORT -#endif - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ -BREPIMPORT_EXPORT - TopoDS_Shape Import (const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& /*theFormatName*/, - TCollection_AsciiString& theError, - const TDF_Label&) - { - MESSAGE("Import BREP from file " << theFileName); - TopoDS_Shape aShape; - BRep_Builder B; - BRepTools::Read(aShape, theFileName.ToCString(), B); - if (aShape.IsNull()) { - theError = "BREP Import failed"; - } - return aShape; - } -} diff --git a/src/BREPImport/CMakeLists.txt b/src/BREPImport/CMakeLists.txt deleted file mode 100755 index 459deb5df..000000000 --- a/src/BREPImport/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKBRep} - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(BREPImport_SOURCES - BREPImport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(BREPImport ${BREPImport_SOURCES}) -TARGET_LINK_LIBRARIES(BREPImport ${_link_LIBRARIES}) -INSTALL(TARGETS BREPImport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/BREPPlugin/BREPPlugin_Engine.cxx b/src/BREPPlugin/BREPPlugin_Engine.cxx new file mode 100644 index 000000000..03f57d63a --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_Engine.cxx @@ -0,0 +1,31 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_Engine.hxx" +#include "BREPPlugin_OperationsCreator.hxx" + +extern "C" +{ + BREPPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + return new BREPPlugin_OperationsCreator(); + } +} diff --git a/src/BREPPlugin/BREPPlugin_Engine.hxx b/src/BREPPlugin/BREPPlugin_Engine.hxx new file mode 100755 index 000000000..e37624924 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_Engine.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _BREPPLUGIN_ENGINE_HXX_ +#define _BREPPLUGIN_ENGINE_HXX_ + +#ifdef WIN32 + #if defined BREPPLUGINENGINE_EXPORTS || defined BREPPLUGINENGINE_EXPORTS + #define BREPPLUGINENGINE_EXPORT __declspec( dllexport ) + #else + #define BREPPLUGINENGINE_EXPORT __declspec( dllimport ) + #endif +#else + #define BREPPLUGINENGINE_EXPORT +#endif + +#endif diff --git a/src/BREPPlugin/BREPPlugin_ExportDriver.cxx b/src/BREPPlugin/BREPPlugin_ExportDriver.cxx new file mode 100644 index 000000000..2af1fbbef --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_ExportDriver.cxx @@ -0,0 +1,108 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_ExportDriver.hxx" +#include "BREPPlugin_IExport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" + +// OOCT includes +#include +#include + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& BREPPlugin_ExportDriver::GetID() +{ + static Standard_GUID aGUID("4c1fd92e-bcf3-4695-89b7-a8353038174f"); + return aGUID; +} + +//======================================================================= +//function : BREPPlugin_ExportDriver +//purpose : +//======================================================================= +BREPPlugin_ExportDriver::BREPPlugin_ExportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer BREPPlugin_ExportDriver::Execute( TFunction_Logbook& log ) const +{ + if (Label().IsNull()) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + BREPPlugin_IExport aData (aFunction); + + // retrieve the being exported shape + TopoDS_Shape aShape; + Handle(GEOM_Function) aRefFunction = aData.GetOriginal(); + if( aRefFunction.IsNull() ) return 0; + aShape = aRefFunction->GetValue(); + if( aShape.IsNull() ) return 0; + // set the result of function to be used by next operations + aFunction->SetValue( aShape ); + + TCollection_AsciiString aFileName = aData.GetFileName(); + + MESSAGE("Export BREP into file " << aFileName.ToCString()); + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + if ( !BRepTools::Write( aShape, aFileName.ToCString() ) ) + return 0; + + return 1; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean BREPPlugin_ExportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ +bool BREPPlugin_ExportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + return false; +} + +IMPLEMENT_STANDARD_HANDLE( BREPPlugin_ExportDriver,GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( BREPPlugin_ExportDriver,GEOM_BaseDriver ); diff --git a/src/BREPPlugin/BREPPlugin_ExportDriver.hxx b/src/BREPPlugin/BREPPlugin_ExportDriver.hxx new file mode 100644 index 000000000..fbd7dd8f5 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_ExportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _BREPPlugin_ExportDriver_HXX +#define _BREPPlugin_ExportDriver_HXX + +// internal includes +#include "BREPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( BREPPlugin_ExportDriver, GEOM_BaseDriver ); + +class BREPPLUGINENGINE_EXPORT BREPPlugin_ExportDriver : public GEOM_BaseDriver +{ +public: + BREPPlugin_ExportDriver(); + ~BREPPlugin_ExportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( BREPPlugin_ExportDriver ) +}; + +#endif // _BREPPlugin_ExportDriver_HXX diff --git a/src/BREPPlugin/BREPPlugin_GUI.cxx b/src/BREPPlugin/BREPPlugin_GUI.cxx new file mode 100644 index 000000000..e6430947a --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_GUI.cxx @@ -0,0 +1,266 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_GUI.h" + +// GUI includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// GEOM includes +#include "GeometryGUI.h" +#include "GEOM_Operation.h" +#include "GEOMBase.h" +#include "GEOM_Displayer.h" + +#include +#include CORBA_SERVER_HEADER(BREPPlugin) + +//======================================================================= +// function : BREPPlugin_GUI() +// purpose : Constructor +//======================================================================= +BREPPlugin_GUI::BREPPlugin_GUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) +{ +} + +//======================================================================= +// function : ~BREPPlugin_GUI +// purpose : Destructor +//======================================================================= +BREPPlugin_GUI::~BREPPlugin_GUI() +{ +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool BREPPlugin_GUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) +{ + QString cmd; + switch ( theCommandID ) { + case 1: + cmd = "Export_BREP"; break; + case 2: + cmd = "Import_BREP"; break; + default: + break; + } + return OnGUIEvent( cmd, parent ); +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool BREPPlugin_GUI::OnGUIEvent( const QString& theCommandID, SUIT_Desktop* parent ) +{ + bool result = false; + + if ( theCommandID == "Export_BREP" ) + { + result = exportBREP( parent ); + } + else if ( theCommandID == "Import_BREP" ) + { + result = importBREP( parent ); + } + else + { + getGeometryGUI()->getApp()->putInfo( tr("GEOM_PRP_COMMAND").arg( theCommandID ) ); + } + + return result; +} + +//======================================================================= +// function : importBREP +// purpose : +//======================================================================= +bool BREPPlugin_GUI::importBREP( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "BREPPluginEngine" ); + GEOM::IBREPOperations_var brepOp = GEOM::IBREPOperations::_narrow( op ); + if ( CORBA::is_nil( brepOp ) ) return false; + + QStringList fileNames = app->getOpenFileNames( SUIT_FileDlg::getLastVisitedPath().isEmpty() ? QDir::currentPath() : QString(""), + tr( "BREP_FILES" ), + tr( "IMPORT_TITLE" ), + parent ); + if ( fileNames.count() > 0 ) + { + QStringList entryList; + QStringList errors; + + foreach( QString fileName, fileNames ) + { + SUIT_OverrideCursor wc; + GEOM_Operation transaction( app, brepOp.in() ); + + try + { + app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( fileName ) ); + transaction.start(); + GEOM::ListOfGO_var result = brepOp->ImportBREP( fileName.toUtf8().constData() ); + if ( result->length() > 0 && brepOp->IsDone() ) + { + GEOM::GEOM_Object_var main = result[0]; + QString publishName = GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, true ) ); + SALOMEDS::SObject_var so = GeometryGUI::GetGeomGen()->PublishInStudy( dsStudy, + SALOMEDS::SObject::_nil(), + main.in(), + publishName.toUtf8().constData() ); + + entryList.append( so->GetID() ); + transaction.commit(); + GEOM_Displayer( study ).Display( main.in() ); + } + else + { + transaction.abort(); + errors.append( QString( "%1 : %2" ).arg( fileName ).arg( brepOp->GetErrorCode() ) ); + } + } + catch( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + } + } + getGeometryGUI()->updateObjBrowser( true ); + app->browseObjects( entryList ); + + if ( errors.count() > 0 ) + { + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) ); + } + } + return fileNames.count() > 0; +} + +//======================================================================= +// function : exportBREP +// purpose : +//======================================================================= +bool BREPPlugin_GUI::exportBREP( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "BREPPluginEngine" ); + GEOM::IBREPOperations_var brepOp = GEOM::IBREPOperations::_narrow( op ); + if ( CORBA::is_nil( brepOp ) ) return false; + + LightApp_SelectionMgr* sm = app->selectionMgr(); + if ( !sm ) return false; + + SALOME_ListIO selectedObjects; + sm->selectedObjects( selectedObjects ); + bool ok = false; + + SALOME_ListIteratorOfListIO it( selectedObjects ); + for ( ; it.More(); it.Next() ) + { + Handle(SALOME_InteractiveObject) io = it.Value(); + GEOM::GEOM_Object_var obj = GEOMBase::ConvertIOinGEOMObject( io ); + + if ( CORBA::is_nil( obj ) ) continue; + + QString fileName = app->getFileName( false, + QString( io->getName() ), + tr( "BREP_FILES" ), + tr( "EXPORT_TITLE" ), + parent ); + + if ( fileName.isEmpty() ) + return false; + + SUIT_OverrideCursor wc; + + GEOM_Operation transaction( app, brepOp.in() ); + + try + { + app->putInfo( tr( "GEOM_PRP_EXPORT" ).arg( fileName ) ); + transaction.start(); + + brepOp->ExportBREP( obj, fileName.toUtf8().constData() ); + + if ( brepOp->IsDone() ) + { + transaction.commit(); + } + else + { + transaction.abort(); + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_PRP_ABORT" ) + "\n" + tr( brepOp->GetErrorCode() ) ); + return false; + } + } + catch ( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + return false; + } + ok = true; + } + + if ( !ok ) + { + SUIT_MessageBox::warning( parent, + tr( "WRN_WARNING" ), + tr( "GEOM_WRN_NO_APPROPRIATE_SELECTION" ) ); + } + return ok; +} + +//===================================================================================== +// EXPORTED METHODS +//===================================================================================== +extern "C" +{ +#ifdef WIN32 + __declspec( dllexport ) +#endif + GEOMGUI* GetLibGUI( GeometryGUI* parent ) + { + return new BREPPlugin_GUI( parent ); + } +} diff --git a/src/BREPPlugin/BREPPlugin_GUI.h b/src/BREPPlugin/BREPPlugin_GUI.h new file mode 100644 index 000000000..89ec7ebc2 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_GUI.h @@ -0,0 +1,40 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef BREPPlugin_GUI_H +#define BREPPlugin_GUI_H + +#include "GEOMPluginGUI.h" + +class BREPPlugin_GUI: public GEOMPluginGUI +{ + Q_OBJECT +public: + BREPPlugin_GUI( GeometryGUI* parent ); + ~BREPPlugin_GUI(); + + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); + +private: + bool importBREP( SUIT_Desktop* ); + bool exportBREP( SUIT_Desktop* ); +}; + +#endif // BREPPlugin_GUI_H diff --git a/src/BREPPlugin/BREPPlugin_IECallBack.cxx b/src/BREPPlugin/BREPPlugin_IECallBack.cxx new file mode 100755 index 000000000..83e1cbbb8 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IECallBack.cxx @@ -0,0 +1,72 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_IECallBack.hxx" +#include "BREPPlugin_IOperations.hxx" +#include "BREPPlugin_OperationsCreator.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +BREPPlugin_IECallBack::BREPPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +BREPPlugin_IECallBack::~BREPPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool +BREPPlugin_IECallBack::Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + BREPPlugin_IOperations* aPluginOperations = BREPPlugin_OperationsCreator::get( GetEngine(), theDocId ); + aPluginOperations->ExportBREP( theOriginal, theFileName ); + return true; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +BREPPlugin_IECallBack::Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ) +{ + BREPPlugin_IOperations* aPluginOperations = BREPPlugin_OperationsCreator::get( GetEngine(), theDocId ); + return aPluginOperations->ImportBREP( theFileName ); +} + diff --git a/src/BREPPlugin/BREPPlugin_IECallBack.hxx b/src/BREPPlugin/BREPPlugin_IECallBack.hxx new file mode 100644 index 000000000..dfa66b06b --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IECallBack.hxx @@ -0,0 +1,49 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _BREPPlugin_IECallBack_HXX_ +#define _BREPPlugin_IECallBack_HXX_ + +// internal includes +#include "BREPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Object.hxx" +#include "GEOMImpl_IECallBack.hxx" + +// OCC includes +#include + +class BREPPLUGINENGINE_EXPORT BREPPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + BREPPlugin_IECallBack(); + ~BREPPlugin_IECallBack(); + + bool Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); + + Handle(TColStd_HSequenceOfTransient) Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ); +}; + +#endif diff --git a/src/BREPPlugin/BREPPlugin_IExport.hxx b/src/BREPPlugin/BREPPlugin_IExport.hxx new file mode 100644 index 000000000..28b00e780 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IExport.hxx @@ -0,0 +1,48 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _BREPPlugin_IExport_HXX_ +#define _BREPPlugin_IExport_HXX_ + +#include "GEOM_Function.hxx" + +#define EXPORTBREP_ARG_ORIGINAL 1 +#define EXPORTBREP_ARG_FILENAME 2 + +class BREPPlugin_IExport +{ +public: + BREPPlugin_IExport( Handle(GEOM_Function) theFunction ) + : _func(theFunction) {} + + void SetOriginal( Handle( GEOM_Function ) theOriginal) + { _func->SetReference( EXPORTBREP_ARG_ORIGINAL, theOriginal ); } + Handle( GEOM_Function ) GetOriginal() + { return _func->GetReference( EXPORTBREP_ARG_ORIGINAL ); } + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( EXPORTBREP_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( EXPORTBREP_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _BREPPlugin_IExport_HXX_ diff --git a/src/BREPPlugin/BREPPlugin_IImport.hxx b/src/BREPPlugin/BREPPlugin_IImport.hxx new file mode 100644 index 000000000..1eac3d403 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IImport.hxx @@ -0,0 +1,42 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _BREPPlugin_IImport_HXX_ +#define _BREPPlugin_IImport_HXX_ + +#include "GEOM_Function.hxx" + +#define IMPORTBREP_ARG_FILENAME 1 + +class BREPPlugin_IImport +{ +public: + BREPPlugin_IImport( Handle(GEOM_Function) theFunction) + : _func(theFunction) {} + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( IMPORTBREP_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( IMPORTBREP_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _BREPPlugin_IImport_HXX_ diff --git a/src/BREPPlugin/BREPPlugin_IOperations.cxx b/src/BREPPlugin/BREPPlugin_IOperations.cxx new file mode 100644 index 000000000..dc90c9990 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IOperations.cxx @@ -0,0 +1,171 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_IOperations.hxx" +#include "BREPPlugin_ExportDriver.hxx" +#include "BREPPlugin_ImportDriver.hxx" +#include "BREPPlugin_IExport.hxx" +#include "BREPPlugin_IImport.hxx" + +// KERNEL includes +#include + +// GEOM includes +#include "GEOM_PythonDump.hxx" +#include "GEOMImpl_Types.hxx" + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +BREPPlugin_IOperations::BREPPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "BREPPlugin_IOperations::BREPPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +BREPPlugin_IOperations::~BREPPlugin_IOperations() +{ + MESSAGE( "BREPPlugin_IOperations::~BREPPlugin_IOperations" ); +} + +//============================================================================= +/*! + * ExportBREP + * Export a shape to BREP format + * \param theOriginal The shape to export + * \param theFileName The name of the file to exported + * \param theIsASCII The format of the exported file (ASCII or Binary) + * \param theDeflection The deflection of the shape to exported + */ +//============================================================================= +void BREPPlugin_IOperations::ExportBREP( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName ) +{ + SetErrorCode(KO); + if( theOriginal.IsNull() ) return; + + Handle(GEOM_Function) aRefFunction = theOriginal->GetLastFunction(); + if( aRefFunction.IsNull() ) return; //There is no function which creates an object to be exported + + //Add a new result object + Handle(GEOM_Object) result = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT); + + //Add an Export function + Handle(GEOM_Function) aFunction = result->AddFunction( BREPPlugin_ExportDriver::GetID(), EXPORT_SHAPE ); + if( aFunction.IsNull() ) return; + + //Check if the function is set correctly + if( aFunction->GetDriverGUID() != BREPPlugin_ExportDriver::GetID() ) return; + + //Set parameters + BREPPlugin_IExport aCI( aFunction ); + aCI.SetOriginal( aRefFunction ); + aCI.SetFileName( theFileName ); + + //Perform the Export + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Not enough space on disk, or you haven't permissions to write this directory" ); + return; + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << "geompy.ExportBREP(" << theOriginal << ", \"" + << theFileName.ToCString() << "\" )"; + + SetErrorCode(OK); +} + +//============================================================================= +/*! + * ImportBREP + * Import a shape from BREP format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +BREPPlugin_IOperations::ImportBREP( const TCollection_AsciiString& theFileName ) +{ + SetErrorCode(KO); + if( theFileName.IsEmpty() ) return NULL; + + //Add a new result object + Handle(GEOM_Object) anImported = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT ); + + //Add an Import function + Handle(GEOM_Function) aFunction = + anImported->AddFunction( BREPPlugin_ImportDriver::GetID(), IMPORT_SHAPE); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != BREPPlugin_ImportDriver::GetID()) return NULL; + + //Set parameters + BREPPlugin_IImport aCI( aFunction ); + aCI.SetFileName( theFileName ); + + //Perform the Import + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Import driver failed" ); + return NULL; + } + aSeq->Append(anImported); + + // Greate material groups. + // MakeMaterialGroups( anImported, aSeq ); + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump pd (aFunction); + pd << aSeq << " = geompy.ImportBREP(\"" << theFileName.ToCString() << "\" )"; + SetErrorCode(OK); + + return aSeq; +} diff --git a/src/BREPPlugin/BREPPlugin_IOperations.hxx b/src/BREPPlugin/BREPPlugin_IOperations.hxx new file mode 100644 index 000000000..b5950e7cd --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IOperations.hxx @@ -0,0 +1,42 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : BREPPlugin_IOperations.hxx + +#ifndef _BREPPlugin_IOperations_HXX_ +#define _BREPPlugin_IOperations_HXX_ + +// internal includes +#include "BREPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOMImpl_IBaseIEOperations.hxx" + +class BREPPLUGINENGINE_EXPORT BREPPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + BREPPlugin_IOperations( GEOM_Engine*, int ); + ~BREPPlugin_IOperations(); + + void ExportBREP( const Handle(GEOM_Object), + const TCollection_AsciiString& ); + + Handle(TColStd_HSequenceOfTransient) ImportBREP( const TCollection_AsciiString& ); +}; + +#endif diff --git a/src/BREPPlugin/BREPPlugin_IOperations_i.cc b/src/BREPPlugin/BREPPlugin_IOperations_i.cc new file mode 100644 index 000000000..aee5e9eb0 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IOperations_i.cc @@ -0,0 +1,108 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_IOperations_i.hh" +#include "BREPPlugin_IOperations.hxx" + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +BREPPlugin_IOperations_i::BREPPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + BREPPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "BREPPlugin_IOperations_i::BREPPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +BREPPlugin_IOperations_i::~BREPPlugin_IOperations_i() +{ + MESSAGE( "BREPPlugin_IOperations_i::~BREPPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * ExportBREP + * Export a shape to BREP format + * \param theOriginal The shape to export + * \param theFileName The name of the exported file + */ +//============================================================================= +void BREPPlugin_IOperations_i::ExportBREP( GEOM::GEOM_Object_ptr theOriginal, + const char* theFileName ) +{ + // duplicate the original shape + GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate( theOriginal ); + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference shape + Handle(GEOM_Object) anOriginal = GetObjectImpl( theOriginal ); + if (anOriginal.IsNull()) return; + + //Export the shape to the file + GetOperations()->ExportBREP( anOriginal, theFileName ); +} + +//============================================================================= +/*! + * ImportBREP + * Import a shape from BREP format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +GEOM::ListOfGO* BREPPlugin_IOperations_i::ImportBREP( const char* theFileName ) +{ + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Import the shape from the file + Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->ImportBREP( theFileName ); + + if( !GetOperations()->IsDone() || aHSeq.IsNull() ) + return aSeq._retn(); + + // Copy created objects. + Standard_Integer aLength = aHSeq->Length(); + aSeq->length( aLength ); + for( Standard_Integer i = 1; i <= aLength; i++ ) + aSeq[i-1] = GetObject( Handle(GEOM_Object)::DownCast( aHSeq->Value(i) ) ); + + return aSeq._retn(); +} + +BREPPlugin_IOperations* BREPPlugin_IOperations_i::GetOperations() +{ + return (BREPPlugin_IOperations*)GetImpl(); +} diff --git a/src/BREPPlugin/BREPPlugin_IOperations_i.hh b/src/BREPPlugin/BREPPlugin_IOperations_i.hh new file mode 100644 index 000000000..02f9d8138 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_IOperations_i.hh @@ -0,0 +1,52 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _BREPPlugin_IOperations_i_HeaderFile +#define _BREPPlugin_IOperations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( BREPPlugin ) + +// internal includes +#include "BREPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_IOperations_i.hh" + +class BREPPlugin_IOperations; + +class BREPPLUGINENGINE_EXPORT BREPPlugin_IOperations_i : + public virtual POA_GEOM::IBREPOperations, + public virtual GEOM_IOperations_i +{ +public: + BREPPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + BREPPlugin_IOperations* theImpl ); + ~BREPPlugin_IOperations_i(); + + void ExportBREP( GEOM::GEOM_Object_ptr, const char* ); + GEOM::ListOfGO* ImportBREP( const char* ); + + BREPPlugin_IOperations* GetOperations(); +}; + +#endif // _BREPPlugin_IOperations_i_HeaderFile diff --git a/src/BREPPlugin/BREPPlugin_ImportDriver.cxx b/src/BREPPlugin/BREPPlugin_ImportDriver.cxx new file mode 100644 index 000000000..3f24fea44 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_ImportDriver.cxx @@ -0,0 +1,122 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_ImportDriver.hxx" +#include "BREPPlugin_IImport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" +#include "GEOMImpl_Types.hxx" + +// OOCT includes +#include +#include + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& BREPPlugin_ImportDriver::GetID() +{ + static Standard_GUID aGUID("7e1b28ec-8513-4217-b09c-7652fbe8149e"); + return aGUID; +} + +//======================================================================= +//function : BREPPlugin_ImportDriver +//purpose : +//======================================================================= +BREPPlugin_ImportDriver::BREPPlugin_ImportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer BREPPlugin_ImportDriver::Execute( TFunction_Logbook& log ) const +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + BREPPlugin_IImport aData( aFunction ); + + TCollection_AsciiString aFileName = aData.GetFileName().ToCString(); + + MESSAGE("Import BREP from file " << aFileName); + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + TopoDS_Shape aShape; + BRep_Builder B; + BRepTools::Read(aShape, aFileName.ToCString(), B); + if( aShape.IsNull() ) return 0; + + aFunction->SetValue( aShape ); + + log.SetTouched( Label() ); + + return 1; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean BREPPlugin_ImportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ + +bool BREPPlugin_ImportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction( Label() ); + + BREPPlugin_IImport aCI( function ); + Standard_Integer aType = function->GetType(); + + theOperationName = "ImportBREP"; + + switch ( aType ) { + case IMPORT_SHAPE: + AddParam( theParams, "File name", aCI.GetFileName() ); + break; + default: + return false; + } + return true; +} + +IMPLEMENT_STANDARD_HANDLE( BREPPlugin_ImportDriver, GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( BREPPlugin_ImportDriver, GEOM_BaseDriver ); diff --git a/src/BREPPlugin/BREPPlugin_ImportDriver.hxx b/src/BREPPlugin/BREPPlugin_ImportDriver.hxx new file mode 100644 index 000000000..1f043659b --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_ImportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _BREPPlugin_ImportDriver_HXX +#define _BREPPlugin_ImportDriver_HXX + +// internal includes +#include "BREPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( BREPPlugin_ImportDriver, GEOM_BaseDriver ); + +class BREPPLUGINENGINE_EXPORT BREPPlugin_ImportDriver : public GEOM_BaseDriver +{ +public: + BREPPlugin_ImportDriver(); + ~BREPPlugin_ImportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( BREPPlugin_ImportDriver ) +}; + +#endif // _BREPPlugin_ImportDriver_HXX diff --git a/src/BREPPlugin/BREPPlugin_OperationsCreator.cxx b/src/BREPPlugin/BREPPlugin_OperationsCreator.cxx new file mode 100644 index 000000000..27808c748 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_OperationsCreator.cxx @@ -0,0 +1,69 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "BREPPlugin_OperationsCreator.hxx" +#include "BREPPlugin_IOperations_i.hh" +#include "BREPPlugin_IOperations.hxx" +#include "BREPPlugin_ExportDriver.hxx" +#include "BREPPlugin_ImportDriver.hxx" +#include "BREPPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// OCCT includes +#include + +std::map BREPPlugin_OperationsCreator::_mapOfOperations; + +BREPPlugin_OperationsCreator::BREPPlugin_OperationsCreator() +{ + // Register drivers + TFunction_DriverTable::Get()->AddDriver( BREPPlugin_ExportDriver::GetID(), + new BREPPlugin_ExportDriver() ); + TFunction_DriverTable::Get()->AddDriver( BREPPlugin_ImportDriver::GetID(), + new BREPPlugin_ImportDriver() ); + // Register callback + BREPPlugin_IECallBack* callback = new BREPPlugin_IECallBack(); + GEOMImpl_IECallBack::Register( "BREP", callback ); +} + +BREPPlugin_OperationsCreator::~BREPPlugin_OperationsCreator() +{ +} + +GEOM_IOperations_i* BREPPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "BREPPlugin_OperationsCreator::Create" ); + return new BREPPlugin_IOperations_i( thePOA, theEngine, get( theGenImpl, theStudyId ) ); +} + +BREPPlugin_IOperations* BREPPlugin_OperationsCreator::get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ) +{ + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) + _mapOfOperations[theStudyId] = new BREPPlugin_IOperations( theGenImpl, theStudyId ); + return _mapOfOperations[theStudyId]; +} diff --git a/src/BREPPlugin/BREPPlugin_OperationsCreator.hxx b/src/BREPPlugin/BREPPlugin_OperationsCreator.hxx new file mode 100755 index 000000000..687014436 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_OperationsCreator.hxx @@ -0,0 +1,57 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOM_BREPPlugin_OperationsCreator_HXX_ +#define _GEOM_BREPPlugin_OperationsCreator_HXX_ + +// internal includes +#include "BREPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +class BREPPlugin_IOperations; + +//===================================================================== +// Operations creator +//===================================================================== +class BREPPLUGINENGINE_EXPORT BREPPlugin_OperationsCreator : public GEOM_GenericOperationsCreator +{ +public: + BREPPlugin_OperationsCreator(); + ~BREPPlugin_OperationsCreator(); + + GEOM_IOperations_i* Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ); +private: + static BREPPlugin_IOperations* get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ); + +private: + static std::map _mapOfOperations; + + friend class BREPPlugin_IECallBack; +}; + +#endif diff --git a/src/BREPPlugin/BREPPlugin_msg_en.ts b/src/BREPPlugin/BREPPlugin_msg_en.ts new file mode 100644 index 000000000..6ca54d154 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_msg_en.ts @@ -0,0 +1,46 @@ + + + + + @default + + MEN_EXPORTBREP + BREP + + + TOP_EXPORTBREP + Export BREP + + + STB_EXPORTBREP + Export BREP + + + MEN_IMPORTBREP + BREP + + + TOP_IMPORTBREP + Import BREP + + + STB_IMPORTBREP + Import BREP + + + + BREPPlugin_GUI + + BREP_FILES + BREP files( *.brep ) + + + EXPORT_TITLE + Export BREP + + + IMPORT_TITLE + Import BREP + + + diff --git a/src/BREPPlugin/BREPPlugin_msg_fr.ts b/src/BREPPlugin/BREPPlugin_msg_fr.ts new file mode 100644 index 000000000..ff0cd50e2 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_msg_fr.ts @@ -0,0 +1,46 @@ + + + + + @default + + MEN_EXPORTBREP + BREP + + + TOP_EXPORTBREP + Exporter BREP + + + STB_EXPORTBREP + Exporter BREP + + + MEN_IMPORTBREP + BREP + + + TOP_IMPORTBREP + Importer BREP + + + STB_IMPORTBREP + Importer BREP + + + + BREPPlugin_GUI + + BREP_FILES + BREP Fichiers( *.brep ) + + + EXPORT_TITLE + Exporter BREP + + + IMPORT_TITLE + Importer BREP + + + diff --git a/src/BREPPlugin/BREPPlugin_msg_ja.ts b/src/BREPPlugin/BREPPlugin_msg_ja.ts new file mode 100644 index 000000000..4a23773a3 --- /dev/null +++ b/src/BREPPlugin/BREPPlugin_msg_ja.ts @@ -0,0 +1,46 @@ + + + + + @default + + MEN_EXPORTBREP + BREP + + + TOP_EXPORTBREP + Export BREP + + + STB_EXPORTBREP + Export BREP + + + MEN_IMPORTBREP + BREP + + + TOP_IMPORTBREP + Import BREP + + + STB_IMPORTBREP + Import BREP + + + + BREPPlugin_GUI + + BREP_FILES + BREP files( *.brep ) + + + EXPORT_TITLE + Export BREP + + + IMPORT_TITLE + Import BREP + + + diff --git a/src/BREPPlugin/CMakeLists.txt b/src/BREPPlugin/CMakeLists.txt new file mode 100644 index 000000000..b9e443dc8 --- /dev/null +++ b/src/BREPPlugin/CMakeLists.txt @@ -0,0 +1,147 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +IF(SALOME_BUILD_GUI) + INCLUDE(UseQt4Ext) + INCLUDE(${QT_USE_FILE}) +ENDIF() + +# --- options --- + +# additional include directories +INCLUDE_DIRECTORIES( + ${CAS_INCLUDE_DIRS} + ${KERNEL_INCLUDE_DIRS} + ${PROJECT_BINARY_DIR}/idl + ${PROJECT_SOURCE_DIR}/src/GEOMAlgo + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/GEOM_I + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_SOURCE_DIR}/src/GEOMUtils + ) + +IF(SALOME_BUILD_GUI) + INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIRS} + ${GUI_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/src/OBJECT + ${PROJECT_SOURCE_DIR}/src/GEOMGUI + ${PROJECT_SOURCE_DIR}/src/GEOMBase + ) +ENDIF() + +# additional preprocessor / compiler flags +ADD_DEFINITIONS( + ${CAS_DEFINITIONS} + ) + +IF(SALOME_BUILD_GUI) +ADD_DEFINITIONS( + ${QT_DEFINITIONS} + ) +ENDIF() + +# libraries to link to +SET(_link_engine_LIBRARIES + ${CAS_TKBREP} + ${KERNEL_SALOMELocalTrace} + ${KERNEL_OpUtil} + SalomeIDLGEOM + SalomeIDLBREPPlugin + GEOMEngine + GEOMClient + ) + +IF(SALOME_BUILD_GUI) + SET(_link_gui_LIBRARIES + SalomeIDLBREPPlugin + GEOMObject + GEOM + GEOMBase + ) +ENDIF() + + +# --- headers --- + +SET(BREPPluginEngine_HEADERS + BREPPlugin_IOperations_i.hh + BREPPlugin_Engine.hxx + BREPPlugin_OperationsCreator.hxx + BREPPlugin_IOperations.hxx + BREPPlugin_IExport.hxx + BREPPlugin_IImport.hxx + BREPPlugin_ImportDriver.hxx + BREPPlugin_ExportDriver.hxx + BREPPlugin_IECallBack.hxx + ) + +IF(SALOME_BUILD_GUI) + # header files / to be processed by moc + SET(_moc_HEADERS + BREPPlugin_GUI.h + ) +ENDIF() + +# --- sources --- + +IF(SALOME_BUILD_GUI) + # sources / moc wrappings + QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) + + SET(BREPPluginGUI_SOURCES + BREPPlugin_GUI.cxx + ${_moc_SOURCES} + ) +ENDIF() + +SET(BREPPluginEngine_SOURCES + BREPPlugin_Engine.cxx + BREPPlugin_OperationsCreator.cxx + BREPPlugin_IOperations_i.cc + BREPPlugin_IOperations.cxx + BREPPlugin_ExportDriver.cxx + BREPPlugin_ImportDriver.cxx + BREPPlugin_IECallBack.cxx + ) + +# resource files / to be processed by lrelease +SET(BREPPlugin_RESOURCES + BREPPlugin_msg_en.ts + BREPPlugin_msg_fr.ts + BREPPlugin_msg_ja.ts + ) + +# --- rules --- + +ADD_LIBRARY(BREPPluginEngine ${BREPPluginEngine_SOURCES}) +TARGET_LINK_LIBRARIES(BREPPluginEngine ${_link_engine_LIBRARIES}) +INSTALL(TARGETS BREPPluginEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +IF(SALOME_BUILD_GUI) + ADD_LIBRARY(BREPPluginGUI ${BREPPluginGUI_SOURCES}) + TARGET_LINK_LIBRARIES(BREPPluginGUI ${_link_gui_LIBRARIES}) + INSTALL(TARGETS BREPPluginGUI EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + + QT4_INSTALL_TS_RESOURCES("${BREPPlugin_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}") +ENDIF() + + +INSTALL(FILES ${BREPPluginEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 641853c22..7c10ef0d4 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,10 +21,10 @@ # Common packages ## SET(SUBDIRS_COMMON - ARCHIMEDE BlockFix GEOMAlgo SKETCHER GEOM BREPExport - BREPImport IGESExport IGESImport STEPExport STEPImport STLExport STLImport - ShHealOper GEOMUtils XAO XAO_Swig GEOMImpl GEOM_I GEOMClient GEOM_I_Superv GEOM_SWIG GEOM_PY - AdvancedEngine OCC2VTK VTKExport + ARCHIMEDE BlockFix GEOMAlgo SKETCHER GEOM ShHealOper GEOMUtils XAO XAO_Swig + GEOMImpl GEOM_I GEOMClient GEOM_I_Superv GEOM_SWIG GEOM_PY + AdvancedEngine OCC2VTK + STLPlugin BREPPlugin STEPPlugin IGESPlugin XAOPlugin VTKPlugin ) ## @@ -53,7 +53,7 @@ IF(SALOME_BUILD_GUI) OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI GEOMBase DependencyTree GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI - RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI ImportExportGUI + RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI GEOM_SWIG_WITHIHM ) ENDIF() diff --git a/src/DlgRef/CMakeLists.txt b/src/DlgRef/CMakeLists.txt index 61e6a2dfa..29874d83c 100755 --- a/src/DlgRef/CMakeLists.txt +++ b/src/DlgRef/CMakeLists.txt @@ -101,7 +101,6 @@ SET(_uic_files DlgRef_4Sel1Spin3Check_QTD.ui DlgRef_4Spin_QTD.ui DlgRef_6Sel_QTD.ui - DlgRef_Skeleton_QTD.ui ) # --- headers --- diff --git a/src/DlgRef/DlgRef.cxx b/src/DlgRef/DlgRef.cxx index efeefa4c2..1e242cb95 100644 --- a/src/DlgRef/DlgRef.cxx +++ b/src/DlgRef/DlgRef.cxx @@ -898,20 +898,6 @@ DlgRef_6Sel::~DlgRef_6Sel() { } -////////////////////////////////////////// -// DlgRef_Skeleton -////////////////////////////////////////// - -DlgRef_Skeleton::DlgRef_Skeleton( QWidget* parent, Qt::WindowFlags f ) -: QWidget( parent, f ) -{ - setupUi( this ); -} - -DlgRef_Skeleton::~DlgRef_Skeleton() -{ -} - ////////////////////////////////////////// // Utility functions ////////////////////////////////////////// diff --git a/src/DlgRef/DlgRef.h b/src/DlgRef/DlgRef.h index fb3c8e047..918183677 100644 --- a/src/DlgRef/DlgRef.h +++ b/src/DlgRef/DlgRef.h @@ -972,22 +972,6 @@ public: ~DlgRef_6Sel(); }; -////////////////////////////////////////// -// DlgRef_Skeleton -////////////////////////////////////////// - -#include "ui_DlgRef_Skeleton_QTD.h" - -class DLGREF_EXPORT DlgRef_Skeleton : public QWidget, - public Ui::DlgRef_Skeleton_QTD -{ - Q_OBJECT - -public: - DlgRef_Skeleton( QWidget* = 0, Qt::WindowFlags = 0 ); - ~DlgRef_Skeleton(); -}; - ////////////////////////////////////////// // Utility functions ////////////////////////////////////////// diff --git a/src/GEOM/CMakeLists.txt b/src/GEOM/CMakeLists.txt index 067056152..92dd5f5c4 100755 --- a/src/GEOM/CMakeLists.txt +++ b/src/GEOM/CMakeLists.txt @@ -65,6 +65,7 @@ SET(GEOM_HEADERS GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx GEOM_DataMapOfAsciiStringTransient.hxx Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx + GEOM_BaseObject.hxx ) # --- sources --- diff --git a/src/GEOM/GEOM_BaseDriver.cxx b/src/GEOM/GEOM_BaseDriver.cxx index 2097da593..2ace1ce54 100644 --- a/src/GEOM/GEOM_BaseDriver.cxx +++ b/src/GEOM/GEOM_BaseDriver.cxx @@ -28,13 +28,29 @@ #include "GEOM_Function.hxx" #include "GEOM_Object.hxx" +#include "GEOM_Engine.hxx" #include #include +#include IMPLEMENT_STANDARD_HANDLE (GEOM_BaseDriver,TFunction_Driver); IMPLEMENT_STANDARD_RTTIEXT(GEOM_BaseDriver,TFunction_Driver); +//================================================================================ +/*! + * Returns document id + */ +//================================================================================ +int GEOM_BaseDriver::GetDocID() const +{ + int docId = 0; + if (!Label().IsNull()) { + Handle(TDocStd_Document) aDoc = TDocStd_Owner::GetDocument(Label().Data()); + docId = GEOM_Engine::GetEngine()->GetDocID(aDoc); + } + return docId; +} //================================================================================ /*! diff --git a/src/GEOM/GEOM_BaseDriver.hxx b/src/GEOM/GEOM_BaseDriver.hxx index a90dd6813..7313ea602 100644 --- a/src/GEOM/GEOM_BaseDriver.hxx +++ b/src/GEOM/GEOM_BaseDriver.hxx @@ -67,7 +67,9 @@ struct GEOM_Param class GEOM_BaseDriver : public TFunction_Driver { public: - + // Returns document id + Standard_EXPORT int GetDocID() const; + // Returns a name of creation operation and names and values of creation parameters // (Use AddParam() methods declared below to fill params vector while implementing // this method in derived drivers) diff --git a/src/GEOMBase/CMakeLists.txt b/src/GEOMBase/CMakeLists.txt index b29c2204b..5c5f3c885 100755 --- a/src/GEOMBase/CMakeLists.txt +++ b/src/GEOMBase/CMakeLists.txt @@ -64,6 +64,7 @@ SET(_link_LIBRARIES SET(GEOMBase_HEADERS GEOMBase.h GEOMBase_Skeleton.h + GEOMBase_DlgSkeleton.h GEOMBase_Helper.h GEOM_Operation.h GEOM_GEOMBase.hxx @@ -73,6 +74,7 @@ SET(GEOMBase_HEADERS # header files / to be processed by moc SET(_moc_HEADERS GEOMBase_Skeleton.h + GEOMBase_DlgSkeleton.h ) # --- sources --- @@ -86,6 +88,7 @@ SET(GEOMBase_SOURCES GEOMBase_Helper.cxx GEOM_Operation.cxx GEOM_GenericObjPtr.cxx + GEOMBase_DlgSkeleton.cxx ${_moc_SOURCES} ) diff --git a/src/GEOMBase/GEOMBase_DlgSkeleton.cxx b/src/GEOMBase/GEOMBase_DlgSkeleton.cxx new file mode 100644 index 000000000..ab464279f --- /dev/null +++ b/src/GEOMBase/GEOMBase_DlgSkeleton.cxx @@ -0,0 +1,168 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// GEOM GEOMGUI : GUI for Geometry component +// File : GEOMBase_DlgSkeleton.cxx +// Author : Roman NIKOLAEV, Open CASCADE S.A.S. + +#include "GEOMBase_DlgSkeleton.h" + +//Qt includes +#include +#include +#include +#include +#include +#include +#include + + +/*! + Constructor. +*/ +GEOMBase_DlgSkeleton::GEOMBase_DlgSkeleton( QWidget* parent, Qt::WindowFlags flags ) : + QWidget(parent,flags) +{ + init(); +} + +/*! + Destructor. +*/ +GEOMBase_DlgSkeleton::~GEOMBase_DlgSkeleton( ) { + +} + +/*! + Initialize the widget +*/ +void GEOMBase_DlgSkeleton::init( ) { + // Main layout + gridLayout = new QGridLayout(this); + + //Constructors group + GroupConstructors = new QGroupBox(this); + GroupConstructors->setObjectName(QString::fromUtf8("GroupConstructors")); + QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(GroupConstructors->sizePolicy().hasHeightForWidth()); + GroupConstructors->setSizePolicy(sizePolicy); + hboxLayout = new QHBoxLayout(GroupConstructors); + + RadioButton1 = new QRadioButton(GroupConstructors); + hboxLayout->addWidget(RadioButton1); + + RadioButton2 = new QRadioButton(GroupConstructors); + hboxLayout->addWidget(RadioButton2); + + RadioButton3 = new QRadioButton(GroupConstructors); + hboxLayout->addWidget(RadioButton3); + + RadioButton4 = new QRadioButton(GroupConstructors); + hboxLayout->addWidget(RadioButton4); + + RadioButton5 = new QRadioButton(GroupConstructors); + hboxLayout->addWidget(RadioButton5); + gridLayout->addWidget(GroupConstructors, 0, 0, 1, 1); + + //Name group + GroupBoxName = new QGroupBox(this); + sizePolicy.setHeightForWidth(GroupBoxName->sizePolicy().hasHeightForWidth()); + GroupBoxName->setSizePolicy(sizePolicy); + hboxLayout1 = new QHBoxLayout(GroupBoxName); + hboxLayout1->setContentsMargins(9, 9, 9, 9); + + NameLabel = new QLabel(GroupBoxName); + NameLabel->setWordWrap(false); + hboxLayout1->addWidget(NameLabel); + + ResultName = new QLineEdit(GroupBoxName); + hboxLayout1->addWidget(ResultName); + gridLayout->addWidget(GroupBoxName, 1, 0, 1, 1); + + //Group box with the check-boxes + GroupMedium = new QWidget(this); + QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(GroupMedium->sizePolicy().hasHeightForWidth()); + GroupMedium->setSizePolicy(sizePolicy1); + + gridLayout->addWidget(GroupMedium, 2, 0, 1, 1); + GroupBoxPublish = new QGroupBox(this); + vboxLayout = new QVBoxLayout(GroupBoxPublish); + + CheckBoxRestoreSS = new QCheckBox(GroupBoxPublish); + vboxLayout->addWidget(CheckBoxRestoreSS); + + CheckBoxAddPrefix = new QCheckBox(GroupBoxPublish); + vboxLayout->addWidget(CheckBoxAddPrefix); + + CheckBoxPreview = new QCheckBox(GroupBoxPublish); + vboxLayout->addWidget(CheckBoxPreview); + gridLayout->addWidget(GroupBoxPublish, 3, 0, 1, 1); + + //Group with buttons + GroupButtons = new QGroupBox(this); + + QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Fixed); + sizePolicy2.setHorizontalStretch(0); + sizePolicy2.setVerticalStretch(0); + sizePolicy2.setHeightForWidth(GroupButtons->sizePolicy().hasHeightForWidth()); + GroupButtons->setSizePolicy(sizePolicy2); + + hboxLayout2 = new QHBoxLayout(GroupButtons); + hboxLayout2->setContentsMargins(9, 9, 9, 9); + buttonOk = new QPushButton(GroupButtons); + hboxLayout2->addWidget(buttonOk); + + buttonApply = new QPushButton(GroupButtons); + hboxLayout2->addWidget(buttonApply); + + QSpacerItem* spacerItem = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); + hboxLayout2->addItem(spacerItem); + + buttonCancel = new QPushButton(GroupButtons); + hboxLayout2->addWidget(buttonCancel); + + buttonHelp = new QPushButton(GroupButtons); + + hboxLayout2->addWidget(buttonHelp); + + gridLayout->addWidget(GroupButtons, 4, 0, 1, 1); + + setTabOrder(CheckBoxRestoreSS, CheckBoxAddPrefix); + setTabOrder(CheckBoxAddPrefix, CheckBoxPreview); + setTabOrder(CheckBoxPreview, buttonOk); + setTabOrder(buttonOk, buttonApply); + setTabOrder(buttonApply, buttonCancel); + setTabOrder(buttonCancel, buttonHelp); + setTabOrder(buttonHelp, RadioButton1); + setTabOrder(RadioButton1, RadioButton2); + setTabOrder(RadioButton2, RadioButton3); + setTabOrder(RadioButton3, RadioButton4); + setTabOrder(RadioButton4, RadioButton5); + setTabOrder(RadioButton5, ResultName); + + buttonOk->setText(tr("A&pply and Close")); + buttonApply->setText("&Apply"); + buttonCancel->setText("&Close"); + buttonHelp->setText("&Help"); +} diff --git a/src/GEOMBase/GEOMBase_DlgSkeleton.h b/src/GEOMBase/GEOMBase_DlgSkeleton.h new file mode 100644 index 000000000..2b4db808d --- /dev/null +++ b/src/GEOMBase/GEOMBase_DlgSkeleton.h @@ -0,0 +1,75 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// GEOM GEOMGUI : GUI for Geometry component +// File : GEOMBase_DlgSkeleton.h +// Author : Roman NIKOLAEV, Open CASCADE S.A.S. + +#ifndef GEOMBASE_DLGSKELETON_N +#define GEOMBASE_DLGSKELETON_N + +#include +#include "GEOM_GEOMBase.hxx" + +class QGridLayout; +class QGroupBox; +class QHBoxLayout; +class QVBoxLayout; +class QRadioButton; +class QLabel; +class QLineEdit; +class QCheckBox; +class QPushButton; + +class GEOMBASE_EXPORT GEOMBase_DlgSkeleton : public QWidget +{ + Q_OBJECT + public: + GEOMBase_DlgSkeleton( QWidget* = 0, Qt::WindowFlags = 0 ); + ~GEOMBase_DlgSkeleton(); + private: + void init(); + public: + QGridLayout *gridLayout; + QGroupBox *GroupConstructors; + QHBoxLayout *hboxLayout; + QRadioButton *RadioButton1; + QRadioButton *RadioButton2; + QRadioButton *RadioButton3; + QRadioButton *RadioButton4; + QRadioButton *RadioButton5; + QGroupBox *GroupBoxName; + QHBoxLayout *hboxLayout1; + QLabel *NameLabel; + QLineEdit *ResultName; + QWidget *GroupMedium; + QGroupBox *GroupBoxPublish; + QVBoxLayout *vboxLayout; + QCheckBox *CheckBoxRestoreSS; + QCheckBox *CheckBoxAddPrefix; + QCheckBox *CheckBoxPreview; + QGroupBox *GroupButtons; + QHBoxLayout *hboxLayout2; + QPushButton *buttonOk; + QPushButton *buttonApply; + QPushButton *buttonCancel; + QPushButton *buttonHelp; +}; + +#endif //GEOMBASE_DLGSKELETON_N diff --git a/src/GEOMBase/GEOMBase_Skeleton.cxx b/src/GEOMBase/GEOMBase_Skeleton.cxx index b49649447..7ed88f0b0 100644 --- a/src/GEOMBase/GEOMBase_Skeleton.cxx +++ b/src/GEOMBase/GEOMBase_Skeleton.cxx @@ -25,6 +25,7 @@ // Author : Damien COQUERET, Open CASCADE S.A.S. #include "GEOMBase_Skeleton.h" +#include "GEOMBase_DlgSkeleton.h" #include "GEOMBase.h" #include @@ -62,7 +63,7 @@ GEOMBase_Skeleton::GEOMBase_Skeleton( GeometryGUI* theGeometryGUI, QWidget* pare setModal( modal ); - myMainFrame = new DlgRef_Skeleton( this ); + myMainFrame = new GEOMBase_DlgSkeleton( this ); QVBoxLayout* topLayout = new QVBoxLayout( this ); topLayout->setMargin( 0 ); topLayout->setSpacing( 0 ); topLayout->addWidget( myMainFrame ); @@ -347,8 +348,15 @@ void GEOMBase_Skeleton::unsetConstructorId() void GEOMBase_Skeleton::ClickOnHelp() { LightApp_Application* app = (LightApp_Application*)( SUIT_Session::session()->activeApplication() ); + + QString context; + if(myHelpContext.isEmpty()) { + context = myGeomGUI ? app->moduleName( myGeomGUI->moduleName() ) : QString(""); + } else { + context = myHelpContext; + } if ( app ) - app->onHelpContextModule( myGeomGUI ? app->moduleName( myGeomGUI->moduleName() ) : QString(""), myHelpFileName ); + app->onHelpContextModule( context , myHelpFileName ); else { QString platform; #ifdef WIN32 @@ -372,7 +380,7 @@ void GEOMBase_Skeleton::setHelpFileName( const QString& theName ) myHelpFileName = theName; } -DlgRef_Skeleton* GEOMBase_Skeleton::mainFrame() +GEOMBase_DlgSkeleton* GEOMBase_Skeleton::mainFrame() { return myMainFrame; } diff --git a/src/GEOMBase/GEOMBase_Skeleton.h b/src/GEOMBase/GEOMBase_Skeleton.h index e4f5f4d94..b41b5d875 100644 --- a/src/GEOMBase/GEOMBase_Skeleton.h +++ b/src/GEOMBase/GEOMBase_Skeleton.h @@ -28,13 +28,14 @@ #define GEOMBASE_SKELETON_H #include "GEOM_GEOMBase.hxx" +#include "GEOMBase_DlgSkeleton.h" #include "GEOMBase_Helper.h" #include class SalomeApp_DoubleSpinBox; class GeometryGUI; -class DlgRef_Skeleton; +class GEOMBase_DlgSkeleton; class QSpinBox; class QDoubleSpinBox; class QLineEdit; @@ -90,7 +91,7 @@ protected: void setHelpFileName( const QString& ); - DlgRef_Skeleton* mainFrame(); + GEOMBase_DlgSkeleton* mainFrame(); QWidget* centralWidget(); QPushButton* buttonCancel() const; QPushButton* buttonOk() const; @@ -103,7 +104,9 @@ protected: QString myHelpFileName; //!< Associated HTML help file name QButtonGroup* myRBGroup; //!< radio button group - DlgRef_Skeleton* myMainFrame; //!< dialog box's mainframe widgetx + GEOMBase_DlgSkeleton* myMainFrame; //!< dialog box's mainframe widget + QString myHelpContext; //!< Help context, needed for the customization + //!< path where located plugins help HTML pages protected slots: virtual void ClickOnCancel(); @@ -111,7 +114,7 @@ protected slots: void LineEditReturnPressed(); void DeactivateActiveDialog(); void ActivateThisDialog(); - void ClickOnHelp(); + virtual void ClickOnHelp(); signals: void constructorsClicked( int ); diff --git a/src/GEOMBase/GEOM_GenericObjPtr.h b/src/GEOMBase/GEOM_GenericObjPtr.h index 552e3143d..ce5fb31bf 100644 --- a/src/GEOMBase/GEOM_GenericObjPtr.h +++ b/src/GEOMBase/GEOM_GenericObjPtr.h @@ -229,7 +229,6 @@ namespace GEOM typedef GenericObjPtr InsertOpPtr; typedef GenericObjPtr MeasureOpPtr; typedef GenericObjPtr GroupOpPtr; - typedef GenericObjPtr AdvancedOpPtr; template<> bool GEOMBASE_EXPORT GenericObjPtr::isSame( GEOM::GEOM_Object_ptr theLeft, GEOM::GEOM_Object_ptr theRight ); } diff --git a/src/GEOMGUI/CMakeLists.txt b/src/GEOMGUI/CMakeLists.txt index c5dc25f8a..74e2f4f0f 100755 --- a/src/GEOMGUI/CMakeLists.txt +++ b/src/GEOMGUI/CMakeLists.txt @@ -62,7 +62,6 @@ SET(_link_LIBRARIES ${KERNEL_SalomeDS} ${KERNEL_SalomeDSClient} ${GUI_SalomeApp} - ${QT_QTXML_LIBRARY} ) # --- headers --- @@ -72,7 +71,6 @@ SET(GEOMGUI_HEADERS GeometryGUI_Operations.h GEOMGUI.h GEOMPluginGUI.h - GEOMGUI_XmlHandler.h GEOM_Displayer.h GEOMGUI_OCCSelector.h GEOMGUI_Selection.h @@ -112,7 +110,6 @@ SET(GEOMGUI_SOURCES GeometryGUI.cxx GEOMGUI.cxx GEOMPluginGUI.cxx - GEOMGUI_XmlHandler.cxx GEOM_Displayer.cxx GEOMGUI_OCCSelector.cxx GEOMGUI_Selection.cxx diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx index 6bf1369e3..bd319bfab 100644 --- a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx +++ b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx @@ -77,7 +77,6 @@ void GEOMGUI_CreationInfoWdg::setOperation(const QPixmap& icon, const QString& n { myIconLbl->setPixmap( icon ); myOperaionLnEd->setText( name ); - myParamsTreeWd->clear(); if ( name.isEmpty() ) myOperaionLnEd->setText( tr("NO_INFO")); diff --git a/src/GEOMGUI/GEOMGUI_XmlHandler.cxx b/src/GEOMGUI/GEOMGUI_XmlHandler.cxx deleted file mode 100644 index db66695a7..000000000 --- a/src/GEOMGUI/GEOMGUI_XmlHandler.cxx +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM GEOMGUI : reading of xml file with list of available plugin actions -// File : GEOMGUI_XmlHandler.cxx -// Author : Julia DOROVSKIKH, Open CASCADE S.A.S. - -#include "GEOMGUI_XmlHandler.h" - -#include "GEOMGUI.h" - -// SALOME KERNEL includes -#include - -/*! - * Constructor - */ -GEOMGUI_XmlHandler::GEOMGUI_XmlHandler() -{ -} - -/*! - * Destructor - */ -GEOMGUI_XmlHandler::~GEOMGUI_XmlHandler() -{ -} - -/*! - * Starts parsing of document. Does some initialization - * - * Reimplemented from QXmlDefaultHandler. - */ -bool GEOMGUI_XmlHandler::startDocument() -{ - myErrorProt = ""; - return true; -} - -/*! - * Does different actions depending on the name of the tag and the - * state you are in document. - * - * Reimplemented from QXmlDefaultHandler. - */ -bool GEOMGUI_XmlHandler::startElement (const QString&, const QString&, - const QString& qName, - const QXmlAttributes& atts) -{ - if (qName == "geom-plugins") { // set of plugins - //myHypothesesMap.clear(); - //myAlgorithmsMap.clear(); - } - else if (qName == "geom-plugin") { // group of actions - myPluginData.myName = atts.value("name"); - myPluginData.myServerLib = atts.value("server-lib"); - myPluginData.myClientLib = atts.value("gui-lib"); - - //QString aResName = atts.value("resources"); - //if (aResName != "") { - // SUIT_ResourceMgr* resMgr = GEOMGUI::resourceMgr(); - // QString lang = resMgr->stringValue( resMgr->langSection(), "language", "en" ); - // resMgr->loadTranslator( "resources", QString( "%1_msg_%2.qm" ).arg( aResName, lang ) ); - // resMgr->loadTranslator( "resources", QString( "%1_images.qm" ).arg( aResName, lang ) ); - //} - } - else if (qName == "actions") { // group of actions - } - else if (qName == "action") { // an action - GEOMGUI_ActionData aData; - aData.myLabel = atts.value("label"); - aData.myIcon = atts.value("icon"); - aData.myMenu = atts.value("menu"); - aData.myTooltip = atts.value("tooltip"); - aData.myStatusBar = atts.value("status-bar"); - - myPluginData.myListOfActions.append(aData); - } - else { - // error - return false; - } - return true; -} - -/*! - * Reimplemented from QXmlDefaultHandler. - */ -bool GEOMGUI_XmlHandler::endElement (const QString&, const QString&, const QString&) -{ - return true; -} - -/*! - * Reimplemented from QXmlDefaultHandler. - */ -bool GEOMGUI_XmlHandler::characters (const QString& ch) -{ - // we are not interested in whitespaces - //QString ch_simplified = ch.simplified(); - //if ( ch_simplified.isEmpty() ) - // return true; - return true; -} - -/*! - * Returns the default error string. - * - * Reimplemented from QXmlDefaultHandler. - */ -QString GEOMGUI_XmlHandler::errorString() -{ - return "the document is not in the quote file format"; -} - -/*! - * Returns the error protocol if parsing failed - * - * Reimplemented from QXmlDefaultHandler. - */ -QString GEOMGUI_XmlHandler::errorProtocol() -{ - return myErrorProt; -} - -/*! - * Returns exception - * - * Reimplemented from QXmlDefaultHandler. - */ -bool GEOMGUI_XmlHandler::fatalError (const QXmlParseException& exception) -{ - myErrorProt += QString("fatal parsing error: %1 in line %2, column %3\n") - .arg(exception.message()) - .arg(exception.lineNumber()) - .arg(exception.columnNumber()); - - return QXmlDefaultHandler::fatalError( exception ); -} diff --git a/src/GEOMGUI/GEOMGUI_XmlHandler.h b/src/GEOMGUI/GEOMGUI_XmlHandler.h deleted file mode 100644 index dc1b64dbe..000000000 --- a/src/GEOMGUI/GEOMGUI_XmlHandler.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM GEOMGUI : reading of xml file with list of available plugin actions -// File : GEOMGUI_XmlHandler.h -// Author : Julia DOROVSKIKH, Open CASCADE S.A.S. - -#ifndef GEOMGUI_XMLHANDLER_H -#define GEOMGUI_XMLHANDLER_H - -// GEOM includes -#include "GEOMGUI.h" - -// Qt includes -#include -#include -#include - -//GUI includes -#include - -//class HypothesisData; -//class HypothesesSet; - -struct GEOMGUI_ActionData -{ - QString myLabel; // unique ID - QString myIcon; - QString myMenu; - QString myTooltip; - QString myStatusBar; - - //int myAccel; - //bool myToggle; - //QString myShortcut; -}; - -struct GEOMGUI_PluginData -{ - QString myName; - QString myServerLib; - QString myClientLib; - - //QList myListOfActions; - QList myListOfActions; -}; - -class GEOMGUI_EXPORT GEOMGUI_XmlHandler : public QXmlDefaultHandler -{ -public: - GEOMGUI_XmlHandler(); - virtual ~GEOMGUI_XmlHandler(); - - bool startDocument(); - bool startElement( const QString&, const QString&, - const QString&, const QXmlAttributes& ); - bool endElement( const QString&, const QString&, const QString& ); - bool characters( const QString& ); - - QString errorString(); - QString errorProtocol(); - bool fatalError( const QXmlParseException& ); - -public: - GEOMGUI_PluginData myPluginData; - -private: - QString myErrorProt; -}; - -#endif // GEOMGUI_XMLHANDLER_H diff --git a/src/GEOMGUI/GEOM_images.ts b/src/GEOMGUI/GEOM_images.ts index 467cc55de..115e51e67 100644 --- a/src/GEOMGUI/GEOM_images.ts +++ b/src/GEOMGUI/GEOM_images.ts @@ -1315,26 +1315,6 @@ ICON_DLG_SCALE_ALONG_AXES scale_along_axes.png - - ICON_DLG_EXPORTXAO - exportxao.png - - - ICO_EXPORTXAO - exportxao.png - - - ICON_DLG_IMPORTXAO - importxao.png - - - ICO_IMPORTXAO - importxao.png - - - ICON_OBJBROWSER_IMPORTEXPORT_204 - tree_exportxao.png - diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 13449596d..89480676b 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -1012,14 +1012,6 @@ Please, select face, shell or solid and try again GEOM_MEN_ENTER_ANGLE Enter An Angle In Degrees - - GEOM_MEN_EXPORT - Export - - - GEOM_MEN_IMPORT - Import - GEOM_MEN_ISOS Select Number Of Isos @@ -2594,7 +2586,7 @@ Please, select face, shell or solid and try again MEN_EXPORT - Export... + Export MEN_EXTRUSION @@ -2702,7 +2694,7 @@ Please, select face, shell or solid and try again MEN_IMPORT - Import... + Import MEN_INERTIA @@ -3544,10 +3536,6 @@ Please, select face, shell or solid and try again STB_EXPLODE_BLOCKS Explode on Blocks - - STB_EXPORT - Export geometry to BREP file - STB_EXTRUSION Create an extrusion @@ -3632,10 +3620,6 @@ Please, select face, shell or solid and try again STB_HEX_SOLID Hexahedral Solid - - STB_IMPORT - Import geometry from BREP file - STB_INERTIA Compute moments of intertia of the shape @@ -4152,10 +4136,6 @@ Please, select face, shell or solid and try again TOP_EXPLODE_BLOCKS Explode on Blocks - - TOP_EXPORT - Export geometry to BREP file - TOP_EXTRUSION Create an extrusion @@ -4232,10 +4212,6 @@ Please, select face, shell or solid and try again TOP_HEX_SOLID Hexahedral Solid - - TOP_IMPORT - Import geometry from BREP file - TOP_INERTIA Moments of intertia @@ -5095,11 +5071,6 @@ shells and solids on the other hand. GEOM_PUBLISH_NAMED_SHAPES Create groups for named shapes (if there are any)? - - GEOM_SCALE_DIMENSIONS - Take into account the units (%1) embedded to the file? -Ignoring units will cause model scaling (as dimensions are supposed to be specified in meters). - GEOM_PRECISION_HINT Input value precision can be adjusted using @@ -5129,54 +5100,6 @@ Ignoring units will cause model scaling (as dimensions are supposed to be specif GEOM_SELECT_IMAGE Select image... - - MEN_IMPORTEXPORT - Import / Export XAO - - - TOP_EXPORTXAO - Export to XAO - - - MEN_EXPORTXAO - Export XAO - - - STB_EXPORTXAO - Export shape to XAO format - - - TOP_IMPORTXAO - Import from XAO - - - MEN_IMPORTXAO - Import XAO - - - STB_IMPORTXAO - Import shape from XAO format - - - GEOM_IMPORTEXPORT_204 - Export XAO - - - GEOM_SELECT_IMPORT_XAO - Import from XAO - - - GEOM_SELECT_EXPORT_XAO - Export to XAO - - - XAO_FILES - XAO files (*.xao) - - - TOOLS_IMPORTEXPORT - Import / Export - CC_PNT_ITEM_X_Y X=%1, Y=%2 @@ -7009,72 +6932,6 @@ Do you want to create new material? (No info available) - - ImportExportGUI_ExportXAODlg - - GEOM_EXPORTXAO_TITLE - Export XAO - - - GEOM_EXPORTXAO - Export XAO - - - GEOM_EXPORTXAO_EXPORTINGSHAPE - Shape - - - GEOM_EXPORTXAO_FILENAME - File Name - - - GEOM_EXPORTXAO_AUTHOR - Author - - - GEOM_EXPORTXAO_LGROUPS - Groups - - - GEOM_EXPORTXAO_LFIELDS - Fields - - - EXPORT_DLG_ACCEPT - OK - - - - ImportExportGUI_ImportXAODlg - - GEOM_IMPORTXAO_TITLE - Import XAO - - - GEOM_IMPORTXAO - Import XAO - - - GEOM_IMPORTXAO_IMPORTINGSHAPE - Shape - - - GEOM_IMPORTXAO_FILENAME - File Name - - - GEOM_IMPORTXAO_LGROUPS - Groups - - - GEOM_IMPORTXAO_LFIELDS - Fields - - - STEP - Step - - EntityGUI_IsolineDlg diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 8f0b1cf93..07c02e244 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -1024,14 +1024,6 @@ Choisissez une face, une coque ou un solide et essayez de nouveau GEOM_MEN_ENTER_ANGLE Indiquez l'angle en degrés - - GEOM_MEN_EXPORT - Exporter - - - GEOM_MEN_IMPORT - Importer - GEOM_MEN_ISOS Choisir le nombre d'isolignes @@ -2602,7 +2594,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau MEN_EXPORT - Exporter... + Exporter MEN_EXTRUSION @@ -2710,7 +2702,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau MEN_IMPORT - Importer... + Importer MEN_INERTIA @@ -3548,10 +3540,6 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_EXPLODE_BLOCKS Eclater en blocs - - STB_EXPORT - Exporter la géométrie au fichier BREP - STB_EXTRUSION Créer une extrusion @@ -3636,10 +3624,6 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_HEX_SOLID Solide hexaédrique - - STB_IMPORT - Importer une géométrie d'un fichier BREP - STB_INERTIA Calculer les moments d'inertie de l'objet @@ -4156,10 +4140,6 @@ Choisissez une face, une coque ou un solide et essayez de nouveau TOP_EXPLODE_BLOCKS Eclater en blocs - - TOP_EXPORT - Exporter une géométrie au format BREP - TOP_EXTRUSION Créer une extrusion @@ -4236,10 +4216,6 @@ Choisissez une face, une coque ou un solide et essayez de nouveau TOP_HEX_SOLID Solide hexaédrique - - TOP_IMPORT - Importer une géométrie d'un fichier BREP - TOP_INERTIA Moments d'inertie @@ -5095,11 +5071,6 @@ les coques et solides d'un autre. GEOM_PUBLISH_NAMED_SHAPES Créer des groupes pour les objets indiqués (s'ils existent)? - - GEOM_SCALE_DIMENSIONS - Voulez-vous prendre les unités du fichier (%1) en considération? -Sinon le modèle sera mis à l'échelle GEOM (unités interprétées comme des mètres). - GEOM_PRECISION_HINT Il est possible d'ajuster la précision de la valeur d'entrée avec @@ -5129,54 +5100,6 @@ le paramètre '%1' aux préférences du module Géométrie.GEOM_SELECT_IMAGE Sélectionner une image... - - MEN_IMPORTEXPORT - Import / Export XAO - - - TOP_EXPORTXAO - Export XAO - - - MEN_EXPORTXAO - Export XAO - - - STB_EXPORTXAO - Exporter une forme au format XAO - - - TOP_IMPORTXAO - Import XAO - - - MEN_IMPORTXAO - Import XAO - - - STB_IMPORTXAO - Importer une forme au format XAO - - - GEOM_IMPORTEXPORT_204 - Export XAO - - - GEOM_SELECT_IMPORT_XAO - Import XAO - - - GEOM_SELECT_EXPORT_XAO - Export XAO - - - XAO_FILES - Fichiers XAO (*.xao) - - - TOOLS_IMPORTEXPORT - Import / Export XAO - CC_PNT_ITEM_X_Y X=%1, Y=%2 @@ -7009,72 +6932,6 @@ Voulez-vous en créer un nouveau ? (aucune information disponible) - - ImportExportGUI_ExportXAODlg - - GEOM_EXPORTXAO_TITLE - Export XAO - - - GEOM_EXPORTXAO - Export XAO - - - GEOM_EXPORTXAO_EXPORTINGSHAPE - Objet - - - GEOM_EXPORTXAO_FILENAME - Fichier - - - GEOM_EXPORTXAO_AUTHOR - Auteur - - - GEOM_EXPORTXAO_LGROUPS - Groupes - - - GEOM_EXPORTXAO_LFIELDS - Champs - - - EXPORT_DLG_ACCEPT - OK - - - - ImportExportGUI_ImportXAODlg - - GEOM_IMPORTXAO_TITLE - Import XAO - - - GEOM_IMPORTXAO - Import XAO - - - GEOM_IMPORTXAO_IMPORTINGSHAPE - Objet - - - GEOM_IMPORTXAO_FILENAME - Fichier - - - GEOM_IMPORTXAO_LGROUPS - Groupes - - - GEOM_IMPORTXAO_LFIELDS - Champs - - - STEP - Pas - - EntityGUI_IsolineDlg diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index 11b374459..8d7cd8e2d 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -1003,14 +1003,6 @@ GEOM_MEN_ENTER_ANGLE 角度を度数で指定します - - GEOM_MEN_EXPORT - エクスポート - - - GEOM_MEN_IMPORT - インポート - GEOM_MEN_ISOS 輪郭線の数を選択します。 @@ -1465,7 +1457,7 @@ GEOM_PRP_EXPORT - ジオメトリを %1 にエクスポート... + ジオメトリを %1 にエクスポート GEOM_PRP_LOADING @@ -2693,7 +2685,7 @@ MEN_IMPORT - インポート... + インポート MEN_INERTIA @@ -3535,10 +3527,6 @@ STB_EXPLODE_BLOCKS ブロックで展開 - - STB_EXPORT - ジオメトリをBREPファイルにエクスポート - STB_EXTRUSION 押し出しを作成 @@ -3623,10 +3611,6 @@ STB_HEX_SOLID Hexahedral_Solid - - STB_IMPORT - BREPファイルをジオメトリにインポート - STB_INERTIA オブジェクトの慣性モーメントを計算します。 @@ -4143,10 +4127,6 @@ TOP_EXPLODE_BLOCKS ブロックで展開 - - TOP_EXPORT - ジオメトリをBREPファイルでエクスポート - TOP_EXTRUSION 押し出しを作成 @@ -4223,10 +4203,6 @@ TOP_HEX_SOLID Hexahedral_Solid - - TOP_IMPORT - BREPファイルをジオメトリにインポート - TOP_INERTIA 慣性モーメント @@ -5083,10 +5059,6 @@ GEOM_PUBLISH_NAMED_SHAPES 指定したオブジェクトのグループ(存在する場合)を作成しますか? - - GEOM_SCALE_DIMENSIONS - インポートしたファイルの単位をミリメートルからメートルに変換しますか?いいえを選んだ場合、メートル単位として解釈します。 - GEOM_PRECISION_HINT パラメーターの入力値の精度を調整することは '%1' の好みにジオメトリ モジュールの。 @@ -5115,54 +5087,6 @@ GEOM_SELECT_IMAGE イメージの選択. - - MEN_IMPORTEXPORT - インポート/エクスポート - - - TOP_EXPORTXAO - エクスポートしました。 - - - MEN_EXPORTXAO - エクスポートしました。 - - - STB_EXPORTXAO - ソテーした形式でフォームをエクスポートします。 - - - TOP_IMPORTXAO - インポートしました。 - - - MEN_IMPORTXAO - インポートしました。 - - - STB_IMPORTXAO - ソテーしたフォームをインポートします。 - - - GEOM_IMPORTEXPORT_204 - エクスポートしました。 - - - GEOM_SELECT_IMPORT_XAO - XAOからインポート - - - GEOM_SELECT_EXPORT_XAO - エクスポートしました。 - - - XAO_FILES - ファイルした (*.xao) - - - TOOLS_IMPORTEXPORT - インポート/エクスポート - CC_PNT_ITEM_X_Y X=%1, Y=%2 @@ -6985,72 +6909,6 @@ (有効情報なし) - - ImportExportGUI_ExportXAODlg - - GEOM_EXPORTXAO_TITLE - エクスポートしました。 - - - GEOM_EXPORTXAO - エクスポートしました。 - - - GEOM_EXPORTXAO_EXPORTINGSHAPE - オブジェクト - - - GEOM_EXPORTXAO_FILENAME - ファイル - - - GEOM_EXPORTXAO_AUTHOR - 作成者 - - - GEOM_EXPORTXAO_LGROUPS - グループ - - - GEOM_EXPORTXAO_LFIELDS - フィールド - - - EXPORT_DLG_ACCEPT - OK - - - - ImportExportGUI_ImportXAODlg - - GEOM_IMPORTXAO_TITLE - インポートしました。 - - - GEOM_IMPORTXAO - インポートしました。 - - - GEOM_IMPORTXAO_IMPORTINGSHAPE - オブジェクト - - - GEOM_IMPORTXAO_FILENAME - ファイル - - - GEOM_IMPORTXAO_LGROUPS - グループ - - - GEOM_IMPORTXAO_LFIELDS - フィールド - - - STEP - Step - - EntityGUI_IsolineDlg diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 044f0692f..e5ec40e37 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -30,7 +30,6 @@ #include "GeometryGUI.h" #include "GeometryGUI_Operations.h" #include "GEOMPluginGUI.h" -#include "GEOMGUI_XmlHandler.h" #include "GEOMGUI_OCCSelector.h" #include "GEOMGUI_Selection.h" #include "GEOMGUI_CreationInfoWdg.h" @@ -38,6 +37,7 @@ #include "GEOM_Constants.h" #include "GEOM_Displayer.h" #include "GEOM_AISShape.hxx" +#include "GEOMUtils_XmlHandler.hxx" #include "GEOM_Actor.h" @@ -467,8 +467,6 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS createOriginAndBaseVectors(); // internal operation return; - case GEOMOp::OpImport: // MENU FILE - IMPORT - case GEOMOp::OpExport: // MENU FILE - EXPORT case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE @@ -665,10 +663,6 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS libName = "BlocksGUI"; break; - case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO - case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO - libName = "ImportExportGUI"; - break; //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base) //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS @@ -901,9 +895,6 @@ void GeometryGUI::initialize( CAM_Application* app ) // ----- create actions -------------- - createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I ); - createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E ); - createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete ); createGeomAction( GEOMOp::OpPoint, "POINT" ); @@ -1103,10 +1094,6 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false, "Geometry:Decrease number of isolines"); - // Import/Export XAO - createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" ); - createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" ); - //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" ); //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" ); //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" ); @@ -1116,13 +1103,6 @@ void GeometryGUI::initialize( CAM_Application* app ) // ---- create menus -------------------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 ); - createMenu( separator(), fileId, 10 ); - createMenu( GEOMOp::OpImport, fileId, 10 ); - createMenu( GEOMOp::OpExport, fileId, 10 ); - int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 ); - createMenu( GEOMOp::OpExportXAO, impexpId, -1 ); - createMenu( GEOMOp::OpImportXAO, impexpId, -1 ); - createMenu( separator(), fileId, -1 ); int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 ); createMenu( GEOMOp::OpDelete, editId, -1 ); @@ -1458,11 +1438,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpFeatureDetect, picturesTbId ); #endif - int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ), QString( "GEOMImportExportXAO" ) ); - createTool( GEOMOp::OpExportXAO, impexpTbId ); - createTool( GEOMOp::OpImportXAO, impexpTbId ); - - //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ), QString( "GEOMAdvanced" ) ); + //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //createTool( GEOMOp::OpSmoothingSurface, advancedTbId ); //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@// @@ -1667,131 +1643,77 @@ void GeometryGUI::addPluginActions() SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if (!resMgr) return; - // Find names of a resource XML files ("GEOMActions.xml" and others); - QString PluginsXml; - char* cenv = getenv("GEOM_PluginsList"); - if (cenv) - PluginsXml.sprintf("%s", cenv); + SalomeApp_Study* appStudy = dynamic_cast( application()->activeStudy() ); + if (!appStudy) return; - QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts); - if (PluginsXmlList.count() == 0) return; + // Find names of a resource XML files ("AdvancedGEOM.xml" and others); - // get full names of xml files from PluginsXmlList - QStringList xmlFiles; - xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent - for (int i = 0; i < PluginsXmlList.count(); i++) { - PluginsXml = PluginsXmlList[ i ]; + GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo(); - // Find full path to the resource XML file - QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml"); - if ( xmlFile.isEmpty() ) // try PLUGIN resources - xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml"); - if ( !xmlFile.isEmpty() ) - xmlFiles.append( xmlFile ); - } - - // create "Advanced Operations" menu and corresponding toolbar - //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10); - //int advancedTbarId = createTool(tr("TOOL_ADVANCED"), QString( "Advanced" )); int id = GEOMOp::OpLastOperationID; // TODO? - // loop on xmlFiles - QString aNoAccessFiles; - for (int i = 0; i < xmlFiles.count(); i++) { - QString xmlFile = xmlFiles[ i ]; + // loop on plugins + GEOMUtils::PluginInfo::const_iterator it; + for ( it = plugins.begin(); it != plugins.end(); ++it ) { + // bind action lib and label to its ID for activateOperation() method proper work + GEOMUtils::PluginData pdata = (*it); + myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str(); + std::list actions = (*it).actions; + std::list::const_iterator ait; + for ( ait = actions.begin(); ait != actions.end(); ++ait ) { + GEOMUtils::ActionData adata = (*ait); + // icon + QPixmap icon; + if ( !adata.icon.empty() ) + icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() ); + // menu text (path) + QStringList smenus = QString( adata.menuText.c_str() ).split( "/" ); + QString actionName = smenus.last(); + actionName = actionName.toUpper().prepend( "MEN_" ); + smenus.removeLast(); - QFile file (xmlFile); - if (file.exists() && file.open(QIODevice::ReadOnly)) { - file.close(); + // path to action in toolbar + QStringList stools = QString( adata.toolTip.c_str() ).split( "/" ); + QString actionTool = stools.last(); + actionTool = actionTool.toUpper().prepend( "TOP_" ); + stools.removeLast(); + + QString actionStat = adata.statusText.c_str(); + actionStat = actionStat.toUpper().prepend( "STB_" ); - GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler(); - ASSERT(aXmlHandler); - - QXmlInputSource source (&file); - QXmlSimpleReader reader; - reader.setContentHandler(aXmlHandler); - reader.setErrorHandler(aXmlHandler); - bool ok = reader.parse(source); - file.close(); - - if (ok) { - // bind action lib and label to its ID for activateOperation() method proper work - myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib; - - QListIterator anActionsIter (aXmlHandler->myPluginData.myListOfActions); - while (anActionsIter.hasNext()) { - GEOMGUI_ActionData anActionData = anActionsIter.next(); - - //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData())); - QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName, - anActionData.myIcon.toLatin1().constData()); - - // path to action in menu - QStringList smenus = anActionData.myMenu.split( "/" ); - QString actionName = smenus.last(); - actionName = actionName.toUpper().prepend("MEN_"); - smenus.removeLast(); - - // path to action in toolbar - QStringList stools = anActionData.myTooltip.split( "/" ); - QString actionTool = stools.last(); - actionTool = actionTool.toUpper().prepend("TOP_"); - stools.removeLast(); - - QString actionStat = anActionData.myStatusBar; - actionStat = actionStat.toUpper().prepend("STB_"); - - createAction(id, // ~ anActionData.myLabel - tr(actionTool.toLatin1().constData()), - icon, - tr(actionName.toLatin1().constData()), - tr(actionStat.toLatin1().constData()), - 0 /*accel*/, - application()->desktop(), - false /*toggle*/, - this, SLOT(OnGUIEvent()), - QString() /*shortcutAction*/); - - int menuId = -1; - foreach (QString subMenu, smenus) { - subMenu = subMenu.toUpper().prepend("MEN_"); - menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1); - } - //createMenu(id, pluginMenuId, -1); - createMenu(id, menuId, -1); - - QString subTool = stools[0]; - subTool = subTool.toUpper().prepend("TOOL_"); - int toolId = createTool(tr(subTool.toLatin1().constData()), subTool.toLatin1().constData()); - //createTool(id, advancedTbarId); - createTool(id, toolId); - - // add action id to map - PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel); - myPluginActions[id] = anAction; - - id++; - } + createAction( id, // ~ adata.label + tr( actionTool.toLatin1().constData() ), + icon, + tr( actionName.toLatin1().constData() ), + tr( actionStat.toLatin1().constData() ), + QKeySequence( tr( adata.accel.c_str() ) ), + application()->desktop(), + false /*toggle*/, + this, SLOT( OnGUIEvent() ), + QString() /*shortcutAction*/ ); + + int menuId = -1; + foreach ( QString subMenu, smenus ) { + QStringList subMenuList = subMenu.split( ":" ); + QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" ); + int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1; + menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup ); } - else { - SUIT_MessageBox::critical(application()->desktop(), - tr("INF_PARSE_ERROR"), - tr(aXmlHandler->errorProtocol().toLatin1().data())); + createMenu( id, menuId, -1 ); + + if ( !stools.isEmpty() ) { + QString subTool = stools[0]; + subTool = subTool.toUpper().prepend( "TOOL_" ); + int toolId = createTool( tr( subTool.toLatin1().constData() ) ); + createTool(id, toolId); } - delete aXmlHandler; - } - else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml - if (aNoAccessFiles.isEmpty()) - aNoAccessFiles = xmlFile; - else - aNoAccessFiles += ", " + xmlFile; - } - } // end loop on xmlFiles - if (!aNoAccessFiles.isEmpty()) { - QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n"; - aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE"); - SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess); + // add action id to map + PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() ); + myPluginActions[id] = anAction; + + id++; + } } } @@ -1832,8 +1754,6 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) ); // Reset actions accelerator keys - action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I - action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete GUIMap::Iterator it; @@ -1922,8 +1842,6 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study ) it.value()->deactivate(); // Unset actions accelerator keys - action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I - action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete qDeleteAll(myOCCSelectors); @@ -2099,15 +2017,22 @@ void GeometryGUI::updateCreationInfo() SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); QString name = info->operationName.in(); if ( !name.isEmpty() ) { - icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false ); + + QString plugin_name; + for ( size_t i = 0; i < info->params.length(); ++i ) { + myCreationInfoWdg->addParam( info->params[i].name.in(), + info->params[i].value.in() ); + QString value = info->params[i].name.in(); + if( value == PLUGIN_NAME ) { + plugin_name = info->params[i].value.in(); + } + } + QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name; + icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false ); operationName = tr( ("MEN_"+name).toLatin1().constData() ); if ( operationName.startsWith( "MEN_" )) operationName = name; // no translation myCreationInfoWdg->setOperation( icon, operationName ); - - for ( size_t i = 0; i < info->params.length(); ++i ) - myCreationInfoWdg->addParam( info->params[i].name.in(), - info->params[i].value.in() ); } } } diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index 4a109372a..f392e4df6 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -25,8 +25,6 @@ namespace GEOMOp { enum { // ToolsGUI --------------------//-------------------------------- - OpImport = 1000, // MENU FILE - IMPORT - OpExport = 1001, // MENU FILE - EXPORT OpDelete = 1020, // MENU EDIT - DELETE OpCheckGeom = 1030, // MENU TOOLS - CHECK GEOMETRY OpMaterialsLibrary = 1040, // MENU TOOLS - MATERIALS LIBRARY @@ -209,9 +207,6 @@ namespace GEOMOp { OpQuadFace = 6102, // MENU BLOCKS - QUADRANGLE FACE OpPropagate = 6103, // MENU BLOCKS - PROPAGATE OpExplodeBlock = 6104, // MENU BLOCKS - EXPLODE ON BLOCKS - // ImportExport ----------------//-------------------------------- - OpExportXAO = 6200, // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO - OpImportXAO = 6201, // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO // AdvancedGUI -----------------//-------------------------------- OpAdvancedNoOp = 10000, // NO OPERATION (advanced operations base) //OpPipeTShape = 10001, // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE diff --git a/src/GEOMImpl/CMakeLists.txt b/src/GEOMImpl/CMakeLists.txt index 854c54755..0fb145931 100755 --- a/src/GEOMImpl/CMakeLists.txt +++ b/src/GEOMImpl/CMakeLists.txt @@ -65,9 +65,11 @@ SET(GEOMImpl_HEADERS GEOMImpl_ICurvesOperations.hxx GEOMImpl_ILocalOperations.hxx GEOMImpl_IInsertOperations.hxx + GEOMImpl_IECallBack.hxx GEOMImpl_IMeasureOperations.hxx GEOMImpl_IGroupOperations.hxx GEOMImpl_IFieldOperations.hxx + GEOMImpl_IBaseIEOperations.hxx GEOMImpl_IGlue.hxx GEOMImpl_PointDriver.hxx GEOMImpl_IPoint.hxx @@ -171,8 +173,6 @@ SET(GEOMImpl_HEADERS GEOMImpl_GlueDriver.hxx GEOMImpl_Types.hxx GEOM_GEOMImpl.hxx - GEOMImpl_IImportExportXAO.hxx - GEOMImpl_XAODriver.hxx ) # --- sources --- @@ -187,9 +187,11 @@ SET(GEOMImpl_SOURCES GEOMImpl_ICurvesOperations.cxx GEOMImpl_ILocalOperations.cxx GEOMImpl_IInsertOperations.cxx + GEOMImpl_IECallBack.cxx GEOMImpl_IMeasureOperations.cxx GEOMImpl_IGroupOperations.cxx GEOMImpl_IFieldOperations.cxx + GEOMImpl_IBaseIEOperations.cxx GEOMImpl_Gen.cxx GEOMImpl_PointDriver.cxx GEOMImpl_VectorDriver.cxx @@ -241,7 +243,6 @@ SET(GEOMImpl_SOURCES GEOMImpl_FillingDriver.cxx GEOMImpl_GlueDriver.cxx GEOMImpl_FieldDriver.cxx - GEOMImpl_XAODriver.cxx ) # --- rules --- diff --git a/src/GEOMImpl/GEOMImpl_ExportDriver.cxx b/src/GEOMImpl/GEOMImpl_ExportDriver.cxx index 84ad697e4..8e177e9a6 100644 --- a/src/GEOMImpl/GEOMImpl_ExportDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ExportDriver.cxx @@ -20,39 +20,19 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include +// internal includes +#include "GEOMImpl_ExportDriver.hxx" +#include "GEOMImpl_IImportExport.hxx" +#include "GEOMImpl_IECallBack.hxx" +#include "GEOMImpl_Types.hxx" -#include -#include -#include +// GEOM includes #include +// OCC includes +#include #include -#include -#include - -#ifdef WIN32 -#include -#else -#include -#endif - -#ifdef WIN32 -#define LibHandle HMODULE -#define LoadLib( name ) LoadLibrary( name ) -#define GetProc GetProcAddress -#define UnLoadLib( handle ) FreeLibrary( handle ); -#else -#define LibHandle void* -#define LoadLib( name ) dlopen( name, RTLD_LAZY ) -#define GetProc dlsym -#define UnLoadLib( handle ) dlclose( handle ); -#endif - -typedef int (*funcPoint)(const TopoDS_Shape&, - const TCollection_AsciiString&, - const TCollection_AsciiString&); //======================================================================= //function : GetID @@ -93,6 +73,11 @@ Standard_Integer GEOMImpl_ExportDriver::Execute(TFunction_Logbook& log) const // !!! set the result of function to be used by next operations aFunction->SetValue(aShape); + TDF_Label aLabel = aRefFunction->GetOwnerEntry(); + if (aLabel.IsRoot()) return 0; + Handle(GEOM_Object) obj = GEOM_Object::GetObject( aLabel ); + if ( obj.IsNull() ) return 0; + // retrieve the file and format names TCollection_AsciiString aFileName = aCI.GetFileName(); TCollection_AsciiString aFormatName = aCI.GetFormatName(); @@ -100,30 +85,12 @@ Standard_Integer GEOMImpl_ExportDriver::Execute(TFunction_Logbook& log) const if (aFileName.IsEmpty() || aFormatName.IsEmpty() || aLibName.IsEmpty()) return 0; - // load plugin library - LibHandle anExportLib = LoadLib( aLibName.ToCString() ); //This is workaround of BUG OCC13051 - funcPoint fp = 0; - if ( anExportLib ) - fp = (funcPoint)GetProc( anExportLib, "Export" ); + if( !GEOMImpl_IECallBack::GetCallBack( aFormatName )->Export( GetDocID(), obj, aFileName, aFormatName ) ); + return 0; - if ( !fp ) { - TCollection_AsciiString aMsg = aFormatName; - aMsg += " plugin was not installed"; - Standard_Failure::Raise(aMsg.ToCString()); - } + log.SetTouched(Label()); - // perform the export - int res = fp( aShape, aFileName, aFormatName ); - - // unload plugin library - // commented by enk: - // the bug was occured: using ACIS Import/Export plugin - // UnLoadLib( anExportLib ); - - if ( res ) - log.SetTouched(Label()); - - return res; + return 1; } //================================================================================ diff --git a/src/GEOMImpl/GEOMImpl_ExportDriver.hxx b/src/GEOMImpl/GEOMImpl_ExportDriver.hxx index d14f51be2..62933b053 100644 --- a/src/GEOMImpl/GEOMImpl_ExportDriver.hxx +++ b/src/GEOMImpl/GEOMImpl_ExportDriver.hxx @@ -26,23 +26,6 @@ #ifndef _GEOMImpl_ExportDriver_HeaderFile #define _GEOMImpl_ExportDriver_HeaderFile -#ifndef _TColStd_SequenceOfExtendedString_HeaderFile -#include -#endif -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif #ifndef _Standard_GUID_HeaderFile #include #endif diff --git a/src/GEOMImpl/GEOMImpl_Gen.cxx b/src/GEOMImpl/GEOMImpl_Gen.cxx index ae1418e27..081bf2125 100644 --- a/src/GEOMImpl/GEOMImpl_Gen.cxx +++ b/src/GEOMImpl/GEOMImpl_Gen.cxx @@ -83,7 +83,6 @@ #include #include #include -#include //============================================================================= /*! @@ -168,9 +167,6 @@ GEOMImpl_Gen::GEOMImpl_Gen() // Field TFunction_DriverTable::Get()->AddDriver(GEOMImpl_FieldDriver::GetID(), new GEOMImpl_FieldDriver()); - // XAO operations - TFunction_DriverTable::Get()->AddDriver(GEOMImpl_XAODriver::GetID(), new GEOMImpl_XAODriver()); - /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ SetEngine(this); diff --git a/src/GEOMImpl/GEOMImpl_IBaseIEOperations.cxx b/src/GEOMImpl/GEOMImpl_IBaseIEOperations.cxx new file mode 100755 index 000000000..0f494319a --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_IBaseIEOperations.cxx @@ -0,0 +1,230 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "GEOMImpl_IBaseIEOperations.hxx" +#include "GEOMImpl_IGroupOperations.hxx" +#include "GEOMImpl_IFieldOperations.hxx" +#include "GEOMImpl_IShapesOperations.hxx" + +// OCC includes +#include +#include +#include +#include +#include +#include + +typedef NCollection_DataMap< TCollection_ExtendedString, NCollection_List > + DataMapOfStringListOfShape; + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +GEOMImpl_IBaseIEOperations::GEOMImpl_IBaseIEOperations(GEOM_Engine* theEngine, int theDocID) +: GEOM_IOperations(theEngine, theDocID) +{ + myGroupOperations = new GEOMImpl_IGroupOperations( GetEngine(), GetDocID() ); + myFieldOperations = new GEOMImpl_IFieldOperations( GetEngine(), GetDocID() ); + myShapesOperations = new GEOMImpl_IShapesOperations( GetEngine(), GetDocID() ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +GEOMImpl_IBaseIEOperations::~GEOMImpl_IBaseIEOperations() +{ + delete myGroupOperations; + delete myFieldOperations; + delete myShapesOperations; +} + +//============================================================================= +/*! + * This method creates material groups for an imported object. + * \param theObject the imported object. + */ +//============================================================================= +void GEOMImpl_IBaseIEOperations::MakeMaterialGroups + (const Handle(GEOM_Object) &theObject, + const Handle(TColStd_HSequenceOfTransient) &theSeq) +{ + TopoDS_Shape aResShape = theObject->GetValue(); + + if (aResShape.IsNull() == Standard_False) { + // Group shapes by material names. + Handle(GEOM_Function) aFunction = theObject->GetLastFunction(); + DataMapOfStringListOfShape aMapMaterialShapes; + + // check all named shapes using iterator + TDF_ChildIDIterator anIt (aFunction->GetNamingEntry(), + TNaming_NamedShape::GetID(), Standard_True); + + for (; anIt.More(); anIt.Next()) { + Handle(TNaming_NamedShape) anAttr = + Handle(TNaming_NamedShape)::DownCast(anIt.Value()); + + if (anAttr.IsNull() == Standard_False) { + TDF_Label aLabel = anAttr->Label(); + Handle(TDataStd_Comment) aComment; + + if (aLabel.FindAttribute(TDataStd_Comment::GetID(), aComment)) { + TCollection_ExtendedString aMatName = aComment->Get(); + TopoDS_Shape aShape = anAttr->Get(); + + if (aMapMaterialShapes.IsBound(aMatName) == Standard_False) { + NCollection_List anEmptyList; + + aMapMaterialShapes.Bind(aMatName, anEmptyList); + } + + aMapMaterialShapes(aMatName).Append(aShape); + } + } + } + + if (aMapMaterialShapes.IsEmpty() == Standard_False) { + // Construct groups. + TopAbs_ShapeEnum aType = aResShape.ShapeType(); + Standard_Integer i; + DataMapOfStringListOfShape::Iterator aMapIter; + + // Check each shape type. + for(i = aType; i <= TopAbs_VERTEX; i++) { + DataMapOfStringListOfShape::Iterator aMapIter(aMapMaterialShapes); + + for (; aMapIter.More(); aMapIter.Next()) { + NCollection_List &aShList = aMapIter.ChangeValue(); + NCollection_List::Iterator aShIter(aShList); + NCollection_List aShListSameType; + + while (aShIter.More()) { + const TopoDS_Shape &aShape = aShIter.Value(); + + if (i == aShape.ShapeType()) { + // Treat this element. + aShListSameType.Append(aShape); + aShList.Remove(aShIter); + } else { + // Go to the next element. + aShIter.Next(); + } + } + + if (aShListSameType.IsEmpty() == Standard_False) { + // Construct a group. + Handle(GEOM_Object) aGroup = + MakeGroup(theObject, aMapIter.Key(), aShListSameType); + + if (aGroup.IsNull() == Standard_False) { + theSeq->Append(aGroup); + } + } + } + } + } + } +} + + +//============================================================================= +/*! + * This method creates a group of shapes of certain type. + * \param theObject the imported object. + * \param theName the material name. + * \param theShapes the list of shapes to be added to this group. + * \return the created group. + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_IBaseIEOperations::MakeGroup + (const Handle(GEOM_Object) &theObject, + const TCollection_ExtendedString &theName, + const NCollection_List &theShapes) +{ + Handle(GEOM_Object) aGroup; + TopTools_IndexedMapOfShape anIndices; + Handle(TColStd_HSequenceOfInteger) aSeqIDs = new TColStd_HSequenceOfInteger; + NCollection_List::Iterator anIter(theShapes); + + TopExp::MapShapes(theObject->GetValue(), anIndices); + + // Compose shape IDs. + for (; anIter.More(); anIter.Next()) { + const TopoDS_Shape &aShape = anIter.Value(); + const Standard_Integer anIndex = anIndices.FindIndex(aShape); + + if (anIndex > 0) { + aSeqIDs->Append(anIndex); + } + } + + if (aSeqIDs->IsEmpty() == Standard_False) { + // Create a group. + const TopAbs_ShapeEnum aType = theShapes.First().ShapeType(); + + aGroup = myGroupOperations->CreateGroup(theObject, aType); + + if (aGroup.IsNull() == Standard_False) { + aGroup->GetLastFunction()->SetDescription(""); + myGroupOperations->UnionIDs(aGroup, aSeqIDs); + aGroup->GetLastFunction()->SetDescription(""); + + // Compose the group name. + TCollection_AsciiString aGroupName(theName); + + switch(aType) { + case TopAbs_VERTEX: + aGroupName += "_VERTEX"; + break; + case TopAbs_EDGE: + aGroupName += "_EDGE"; + break; + case TopAbs_WIRE: + aGroupName += "_WIRE"; + break; + case TopAbs_FACE: + aGroupName += "_FACE"; + break; + case TopAbs_SHELL: + aGroupName += "_SHELL"; + break; + case TopAbs_SOLID: + aGroupName += "_SOLID"; + break; + case TopAbs_COMPSOLID: + aGroupName += "_COMPSOLID"; + break; + case TopAbs_COMPOUND: + aGroupName += "_COMPOUND"; + break; + default: + aGroupName += "_SHAPE"; + break; + } + + aGroup->SetName(aGroupName.ToCString()); + } + } + + return aGroup; +} diff --git a/src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx b/src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx new file mode 100644 index 000000000..c5c751b32 --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx @@ -0,0 +1,53 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOMImpl_IBaseIEOperations_HXX_ +#define _GEOMImpl_IBaseIEOperations_HXX_ + +// GEOM includes +#include + +// OCC includes +#include + +class GEOMImpl_IGroupOperations; +class GEOMImpl_IFieldOperations; +class GEOMImpl_IShapesOperations; + +class GEOMImpl_IBaseIEOperations : public GEOM_IOperations +{ +public: + Standard_EXPORT GEOMImpl_IBaseIEOperations(GEOM_Engine* theEngine, int theDocID); + Standard_EXPORT ~GEOMImpl_IBaseIEOperations(); + +protected: + void MakeMaterialGroups(const Handle(GEOM_Object) &theObject, + const Handle(TColStd_HSequenceOfTransient) &theSeq); + + Handle(GEOM_Object) MakeGroup + (const Handle(GEOM_Object) &theObject, + const TCollection_ExtendedString &theName, + const NCollection_List &theShapes); +protected: + GEOMImpl_IGroupOperations* myGroupOperations; + GEOMImpl_IFieldOperations* myFieldOperations; + GEOMImpl_IShapesOperations* myShapesOperations; +}; + +#endif diff --git a/src/GEOMImpl/GEOMImpl_IECallBack.cxx b/src/GEOMImpl/GEOMImpl_IECallBack.cxx new file mode 100755 index 000000000..1cd65c135 --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_IECallBack.cxx @@ -0,0 +1,115 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "GEOMImpl_IECallBack.hxx" +#include "GEOMImpl_Gen.hxx" + +std::map GEOMImpl_IECallBack::myCallBacks; + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +GEOMImpl_IECallBack::GEOMImpl_IECallBack() +{ +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +GEOMImpl_IECallBack::~GEOMImpl_IECallBack() +{ +} + +//============================================================================= +/*! + * GetEngine + */ +//============================================================================= +GEOMImpl_Gen* GEOMImpl_IECallBack::GetEngine() +{ + return dynamic_cast( GEOM_Engine::GetEngine() ); +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool GEOMImpl_IECallBack::Export( int /*theDocId*/, + const Handle(GEOM_Object) /*theOriginal*/, + const TCollection_AsciiString& /*theFileName*/, + const TCollection_AsciiString& /*theFormatName*/ ) +{ + return false; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +GEOMImpl_IECallBack::Import( int /*theDocId*/, + const TCollection_AsciiString& /*theFormatName*/, + const TCollection_AsciiString& /*theFileName*/ ) +{ + return NULL; +} + +//============================================================================= +/*! + * ReadValue + */ +//============================================================================= +TCollection_AsciiString +GEOMImpl_IECallBack::ReadValue( int /*theDocId*/, + const TCollection_AsciiString& /*theFileName*/, + const TCollection_AsciiString& /*theFormatName*/, + const TCollection_AsciiString& /*theParameterName*/ ) +{ + return ""; +} + +//============================================================================= +/*! + * Register + */ +//============================================================================= +void GEOMImpl_IECallBack::Register( const TCollection_AsciiString& theFormatName, + GEOMImpl_IECallBack* theCallBack ) +{ + myCallBacks[theFormatName] = theCallBack; +} + +//============================================================================= +/*! + * GetCallBack + */ +//============================================================================= +GEOMImpl_IECallBack* GEOMImpl_IECallBack::GetCallBack( const TCollection_AsciiString& theFormatName ) +{ + return myCallBacks.find(theFormatName) == myCallBacks.end() ? + new GEOMImpl_IECallBack() : myCallBacks[theFormatName]; +} + diff --git a/src/GEOMImpl/GEOMImpl_IECallBack.hxx b/src/GEOMImpl/GEOMImpl_IECallBack.hxx new file mode 100644 index 000000000..890e879d2 --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_IECallBack.hxx @@ -0,0 +1,67 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOMImpl_IECallBack_HXX_ +#define _GEOMImpl_IECallBack_HXX_ + +// GEOM includes +#include "GEOM_Object.hxx" + +// OCC includes +#include + +// C++ includes +#include + +class GEOMImpl_Gen; + +class GEOMImpl_IECallBack +{ + public: + Standard_EXPORT GEOMImpl_IECallBack(); + Standard_EXPORT ~GEOMImpl_IECallBack(); + + Standard_EXPORT virtual bool Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); + + Standard_EXPORT virtual + Handle(TColStd_HSequenceOfTransient) Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ); + + Standard_EXPORT virtual + TCollection_AsciiString ReadValue( int theDocId, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theParameterName ); + + static void Register( const TCollection_AsciiString& theFormatName, GEOMImpl_IECallBack* theCallBack ); + + static GEOMImpl_IECallBack* GetCallBack( const TCollection_AsciiString& theFormatName ); + +protected: + GEOMImpl_Gen* GetEngine(); + +private: + static std::map myCallBacks; +}; + +#endif diff --git a/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx b/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx index 86e7566d5..7e7606700 100755 --- a/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx @@ -33,28 +33,12 @@ #include "GEOMImpl_IShapesOperations.hxx" #include "GEOMImpl_IGroupOperations.hxx" #include "GEOMImpl_IFieldOperations.hxx" -#include "GEOMImpl_XAODriver.hxx" -#include "GEOMImpl_IImportExportXAO.hxx" +#include "GEOMImpl_IECallBack.hxx" #include #include #include "GEOM_ISubShape.hxx" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include #include "utilities.h" @@ -89,15 +73,6 @@ #include #include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC -/** - * This function returns the input format name from the original format name. - */ -static TCollection_AsciiString GetImportFormatName - (const TCollection_AsciiString& theFormatName) -{ - return theFormatName.Token("_"); -} - //============================================================================= /*! * constructor @@ -189,52 +164,8 @@ void GEOMImpl_IInsertOperations::Export if (theOriginal.IsNull()) return; - Handle(GEOM_Function) aRefFunction = theOriginal->GetLastFunction(); - if (aRefFunction.IsNull()) return; //There is no function which creates an object to be exported - - //Add a new result object - Handle(GEOM_Object) result = GetEngine()->AddObject(GetDocID(), GEOM_IMPORT); - - //Add an Export function - Handle(GEOM_Function) aFunction = result->AddFunction(GEOMImpl_ExportDriver::GetID(), EXPORT_SHAPE); - if (aFunction.IsNull()) return; - - //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_ExportDriver::GetID()) return; - - Handle(TCollection_HAsciiString) aHLibName; - if (!IsSupported(Standard_False, theFormatName, aHLibName)) { + if ( !GEOMImpl_IECallBack::GetCallBack( theFormatName )->Export( GetDocID(), theOriginal, theFileName, theFormatName ) ) return; - } - TCollection_AsciiString aLibName = aHLibName->String(); - - //Set parameters - GEOMImpl_IImportExport aCI (aFunction); - aCI.SetOriginal(aRefFunction); - aCI.SetFileName(theFileName); - aCI.SetFormatName(theFormatName); - aCI.SetPluginName(aLibName); - - //Perform the Export - try { -#if OCC_VERSION_LARGE > 0x06010000 - OCC_CATCH_SIGNALS; -#endif - if (!GetSolver()->ComputeFunction(aFunction)) { - SetErrorCode("Not enough space on disk, or you haven't permissions to write this directory"); - return; - } - } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); - return; - } - - //Make a Python command - GEOM::TPythonDump(aFunction) << "geompy.Export(" << theOriginal << ", \"" - << theFileName.ToCString() << "\", \"" << theFormatName.ToCString() << "\")"; - SetErrorCode(OK); } @@ -251,91 +182,9 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IInsertOperations::Import if (theFileName.IsEmpty() || theFormatName.IsEmpty()) return NULL; - //Add a new result object - Handle(GEOM_Object) anImported = GetEngine()->AddObject(GetDocID(), GEOM_IMPORT); - - //Add an Import function - Handle(GEOM_Function) aFunction = - anImported->AddFunction(GEOMImpl_ImportDriver::GetID(), IMPORT_SHAPE); - - if (aFunction.IsNull()) return NULL; - - //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_ImportDriver::GetID()) return NULL; - - Handle(TCollection_HAsciiString) aHLibName; - if (!IsSupported - (Standard_True, GetImportFormatName(theFormatName), aHLibName)) { - return NULL; - } - TCollection_AsciiString aLibName = aHLibName->String(); - - //Set parameters - GEOMImpl_IImportExport aCI (aFunction); - aCI.SetFileName(theFileName); - aCI.SetFormatName(theFormatName); - aCI.SetPluginName(aLibName); - - //Perform the Import - Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; - - try { -#if OCC_VERSION_LARGE > 0x06010000 - OCC_CATCH_SIGNALS; -#endif - if (!GetSolver()->ComputeFunction(aFunction)) { - SetErrorCode("Import driver failed"); - return NULL; - } - - aSeq->Append(anImported); - - // Greate material groups. - MakeMaterialGroups(anImported, aSeq); - } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); - return NULL; - } - - //Make a Python command - if (theFormatName != "IGES_UNIT") { - GEOM::TPythonDump pd (aFunction); - if (theFormatName == "BREP") - pd << aSeq << " = geompy.ImportBREP(\"" << theFileName.ToCString() << "\")"; - else if (theFormatName == "IGES") - pd << aSeq << " = geompy.ImportIGES(\"" << theFileName.ToCString() << "\")"; - else if (theFormatName == "IGES_SCALE") - pd << aSeq << " = geompy.ImportIGES(\"" << theFileName.ToCString() << "\", True)"; - else if (theFormatName == "STEP") - pd << aSeq << " = geompy.ImportSTEP(\"" << theFileName.ToCString() << "\")"; - else if (theFormatName == "STEP_SCALE") - pd << aSeq << " = geompy.ImportSTEP(\"" << theFileName.ToCString() << "\", True)"; - else { - pd << aSeq << " = geompy.ImportFile(\"" - << theFileName.ToCString() << "\", \"" << theFormatName.ToCString() << "\")"; - } - } - + Handle(TColStd_HSequenceOfTransient) aSeq = + GEOMImpl_IECallBack::GetCallBack( theFormatName )->Import( GetDocID(), theFormatName, theFileName ); SetErrorCode(OK); - - // OLD CODE: begin - if (theFormatName == "IGES_UNIT") { - TopoDS_Shape S = aFunction->GetValue(); - TopoDS_Vertex V = TopoDS::Vertex(S); - gp_Pnt P = BRep_Tool::Pnt(V); - double scale = P.X(); - TCollection_AsciiString aUnitName = "UNIT_M"; - if (fabs(scale-0.01) < 1.e-6) - aUnitName = "UNIT_CM"; - else if (fabs(scale-0.001) < 1.e-6) - aUnitName = "UNIT_MM"; - //cout<<"IIO: aUnitName = "<String(); - - aValue = GEOMImpl_ImportDriver::ReadValue(theFileName, aLibName, theParameterName, anError); - if (anError.IsEmpty()) - SetErrorCode(OK); - else - SetErrorCode(anError.ToCString()); + aValue = GEOMImpl_IECallBack::GetCallBack( theFormatName )->ReadValue( GetDocID(), theFileName, theFormatName, theParameterName ); + SetErrorCode(OK); return aValue; } -//============================================================================= -/*! - * ImportTranslators - */ -//============================================================================= -Standard_Boolean GEOMImpl_IInsertOperations::ImportTranslators - (Handle(TColStd_HSequenceOfAsciiString)& theFormats, - Handle(TColStd_HSequenceOfAsciiString)& thePatterns) -{ - if (theFormats.IsNull()) - theFormats = new TColStd_HSequenceOfAsciiString; - else - theFormats->Clear(); - - if (thePatterns.IsNull()) - thePatterns = new TColStd_HSequenceOfAsciiString; - else - thePatterns->Clear(); - - if (!InitResMgr()) return Standard_False; - - // Read Import formats from directories - Handle(Resource_Manager) aResMgr; - Handle(TColStd_HSequenceOfAsciiString) aFormatsToAdd; - for(int index = 0; index < myResMgrList.size(); index++) { - int anOldLen = theFormats->Length(); - aResMgr = myResMgrList.at(index); - if (aResMgr->Find("Import")) { - TCollection_AsciiString aFormats (aResMgr->Value("Import")); - TCollection_AsciiString aToken = aFormats.Token("| \t", 1); - for (int i = 1; !aToken.IsEmpty(); aToken = aFormats.Token("| \t", ++i)) { - int aLenFormats = theFormats->Length(); - bool isFound = false; - for(int aInd=1;aInd<=aLenFormats;aInd++){ - if( theFormats->Value(aInd) == aToken ){ - isFound = true; - break; - } - } - if(!isFound) - theFormats->Append(aToken); - } - } - - // Read Patterns for each supported format - for (int j = anOldLen+1; j <= theFormats->Length(); j++) { - TCollection_AsciiString aKey, aPattern; - aKey = theFormats->Value(j) + ".ImportPattern"; - if (aResMgr->Find(aKey.ToCString())) - aPattern = aResMgr->Value(aKey.ToCString()); - else { - aKey = theFormats->Value(j) + ".Pattern"; - if (aResMgr->Find(aKey.ToCString())) - aPattern = aResMgr->Value(aKey.ToCString()); - else { - aPattern = theFormats->Value(j); - aPattern += " Files ( *.* )"; - } - } - thePatterns->Append(aPattern); - } - } - - return (!theFormats->IsEmpty()); -} - -//============================================================================= -/*! - * ExportTranslators - */ -//============================================================================= -Standard_Boolean GEOMImpl_IInsertOperations::ExportTranslators - (Handle(TColStd_HSequenceOfAsciiString)& theFormats, - Handle(TColStd_HSequenceOfAsciiString)& thePatterns) -{ - if (theFormats.IsNull()) - theFormats = new TColStd_HSequenceOfAsciiString; - else - theFormats->Clear(); - - if (thePatterns.IsNull()) - thePatterns = new TColStd_HSequenceOfAsciiString; - else - thePatterns->Clear(); - - if (!InitResMgr()) return Standard_False; - - // Read Export formats list from directories - Handle(Resource_Manager) aResMgr; - for(int index=0; index < myResMgrList.size(); index++) { - int anOldLen = theFormats->Length(); - aResMgr = myResMgrList.at(index); - if (aResMgr->Find("Export")) { - TCollection_AsciiString aFormats (aResMgr->Value("Export")); - TCollection_AsciiString aToken = aFormats.Token("| \t", 1); - for (int i = 1; !aToken.IsEmpty(); aToken = aFormats.Token("| \t", ++i)) { - int aLenFormats = theFormats->Length(); - bool isFound = false; - for(int aInd=1;aInd<=aLenFormats;aInd++){ - if( theFormats->Value(aInd) == aToken){ - isFound = true; - break; - } - } - if(!isFound) - theFormats->Append(aToken); - } - } - - // Read Patterns for each supported format - for (int j = anOldLen+1; j <= theFormats->Length(); j++) { - TCollection_AsciiString aKey, aPattern; - aKey = theFormats->Value(j) + ".ExportPattern"; - if (aResMgr->Find(aKey.ToCString())) - aPattern = aResMgr->Value(aKey.ToCString()); - else { - aKey = theFormats->Value(j) + ".Pattern"; - if (aResMgr->Find(aKey.ToCString())) - aPattern = aResMgr->Value(aKey.ToCString()); - else { - aPattern = theFormats->Value(j); - aPattern += " Files ( *.* )"; - } - } - thePatterns->Append(aPattern); - } - } - - return (!theFormats->IsEmpty()); -} - -//============================================================================= -/*! - * IsSupported - */ -//============================================================================= -Standard_Boolean GEOMImpl_IInsertOperations::IsSupported - (const Standard_Boolean isImport, - const TCollection_AsciiString& theFormat, - Handle(TCollection_HAsciiString)& theLibName) -{ - if (!InitResMgr()) return Standard_False; - - // Import/Export mode - TCollection_AsciiString aMode; - //Standard_CString aMode; - if (isImport) aMode = "Import"; - else aMode = "Export"; - - // Read supported formats for the certain mode from user directory - Handle(Resource_Manager) aResMgr; - for(int index=0; index < myResMgrList.size(); index++) { - aResMgr = myResMgrList.at(index); - if (aResMgr->Find(aMode.ToCString())) { - TCollection_AsciiString aFormats (aResMgr->Value(aMode.ToCString())); - if (aFormats.Search(theFormat) > -1) { - // Read library name for the supported format - TCollection_AsciiString aKey (theFormat); - aKey += "."; - aKey += aMode; - if (aResMgr->Find(aKey.ToCString())) { - TCollection_AsciiString aLibName (aResMgr->Value(aKey.ToCString())); - #ifndef WIN32 - if ( aLibName.Length() > 3 && aLibName.SubString(1,3) != "lib" ) - aLibName.Prepend("lib"); - aLibName += ".so"; - #else - aLibName += ".dll"; - #endif - theLibName = new TCollection_HAsciiString (aLibName); - return Standard_True; - } - } - } - } - - return Standard_False; -} - -//============================================================================= -/*! - * InitResMgr - */ -//============================================================================= -Standard_Boolean GEOMImpl_IInsertOperations::InitResMgr() -{ - bool isResourceFound = false; - TCollection_AsciiString aNull; - - myResMgrList.clear(); - - // Initialize the GEOM Resource Manager - TCollection_AsciiString aResDir; - aResDir = getenv("GEOM_ROOT_DIR"); -#ifdef WIN32 - aResDir += "\\share\\salome\\resources\\geom"; -#else - aResDir += "/share/salome/resources/geom"; -#endif - Handle(Resource_Manager) aGeomResMgr = new Resource_Manager ("ImportExport", aResDir, aNull, Standard_False); - if ( aGeomResMgr->Find("Import") || aGeomResMgr->Find("Export") ) { - myResMgrList.push_back( aGeomResMgr ); - isResourceFound = true; - } - - // Initialize the user's Resource Manager - TCollection_AsciiString aResDirsStr; - aResDirsStr = getenv("GEOM_ENGINE_RESOURCES_DIR"); - if ( !aResDirsStr.IsEmpty() ) - { - std::string aSep = ":"; -#ifdef WIN32 - aSep = ";"; -#endif - aResDir = aResDirsStr.Token(aSep.c_str(), 1); - for (int i = 1; !aResDir.IsEmpty(); aResDir = aResDirsStr.Token(aSep.c_str(), ++i)) { - Handle(Resource_Manager) anUserResMgr = new Resource_Manager ("ImportExport", aNull, aResDir, Standard_False); - if (anUserResMgr->Find("Import") || anUserResMgr->Find("Export")) { - myResMgrList.push_back( anUserResMgr ); - isResourceFound = true; - } - } - } - else - { - aResDir = getenv("HOME"); -#ifdef WIN32 - aResDir += "\\.config\\salome"; -#else - aResDir += "/.config/salome"; -#endif - Handle(Resource_Manager) anUserResMgr = new Resource_Manager ("ImportExport", aNull, aResDir, Standard_False); - if (anUserResMgr->Find("Import") || anUserResMgr->Find("Export")) { - myResMgrList.push_back( anUserResMgr ); - isResourceFound = true; - } - } - return isResourceFound; -} - //============================================================================= /*! * RestoreShape @@ -769,763 +366,3 @@ std::list GEOMImpl_IInsertOperations::GetAllTextures() SetErrorCode(OK); return id_list; } - -TopAbs_ShapeEnum getGroupDimension(XAO::Group* group) -{ - XAO::Dimension dim = group->getDimension(); - TopAbs_ShapeEnum rdim; - switch ( dim ) - { - case XAO::VERTEX: - rdim = TopAbs_VERTEX; break; - case XAO::EDGE: - rdim = TopAbs_EDGE; break; - case XAO::FACE: - rdim = TopAbs_FACE; break; - case XAO::SOLID: - rdim = TopAbs_SOLID; break; - default: - rdim = TopAbs_COMPOUND; break; - } - return rdim; -} - -XAO::Dimension shapeEnumToDimension(const TopAbs_ShapeEnum& shape) -{ - XAO::Dimension dim; - switch( shape ) { - case TopAbs_VERTEX: - dim = XAO::VERTEX; break; - case TopAbs_EDGE: - dim = XAO::EDGE; break; - case TopAbs_FACE: - dim = XAO::FACE; break; - case TopAbs_SOLID: - dim = XAO::SOLID; break; - default: - throw SALOME_Exception("Bad type"); // TODO - } - return dim; -} - -void GEOMImpl_IInsertOperations::exportGroups(std::list groupList, - XAO::Xao* xaoObject, - XAO::BrepGeometry* geometry) -{ - // add the groups - std::list::iterator groupIterator = groupList.begin(); - while (groupIterator != groupList.end()) - { - Handle(GEOM_Object) currGroup = (*groupIterator++); - Handle(TColStd_HArray1OfInteger) groupIds = myGroupOperations->GetObjects(currGroup); - - TopAbs_ShapeEnum shapeGroup = myGroupOperations->GetType(currGroup); - XAO::Dimension dim = shapeEnumToDimension(shapeGroup); - XAO::Group* group = xaoObject->addGroup(dim, currGroup->GetName().ToCString()); - - switch (shapeGroup) - { - case TopAbs_VERTEX: - for (int i = 1; i <= groupIds->Length(); i++) - { - std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); - int index = geometry->getVertexIndexByReference(ref); - group->add(index); - } - break; - case TopAbs_EDGE: - for (int i = 1; i <= groupIds->Length(); i++) - { - std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); - int index = geometry->getEdgeIndexByReference(ref); - group->add(index); - } - break; - case TopAbs_FACE: - for (int i = 1; i <= groupIds->Length(); i++) - { - std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); - int index = geometry->getFaceIndexByReference(ref); - group->add(index); - } - break; - case TopAbs_SOLID: - for (int i = 1; i <= groupIds->Length(); i++) - { - std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); - int index = geometry->getSolidIndexByReference(ref); - group->add(index); - } - break; - } - } -} - -void GEOMImpl_IInsertOperations::exportFields(std::list fieldList, - XAO::Xao* xaoObject, - XAO::BrepGeometry* geometry) -{ - std::list::iterator fieldIterator = fieldList.begin(); - while (fieldIterator != fieldList.end()) - { - Handle(GEOM_Field) currField = (*fieldIterator++); - - int fdim = currField->GetDimension(); - int ftype = currField->GetDataType(); - int nbComponents = currField->GetNbComponents(); - std::string name = currField->GetName().ToCString(); - - XAO::Field* field = xaoObject->addField((XAO::Type)ftype, (XAO::Dimension)fdim, nbComponents, name); - - Handle(TColStd_HArray1OfExtendedString) components = currField->GetComponents(); - for (int i = components->Lower(), j = 0; i <= components->Upper(); ++i, ++j) - { - field->setComponentName(j, TCollection_AsciiString(components->Value(i)).ToCString()); - } - - std::list< Handle(GEOM_FieldStep)> steps = currField->GetSteps(); - std::list::iterator stepIterator = steps.begin(); - while (stepIterator != steps.end()) - { - Handle(GEOM_FieldStep) currStep = (*stepIterator++); - - XAO::Step* step = field->addNewStep(currStep->GetID()); - step->setStamp(currStep->GetStamp()); - - switch (ftype) - { - case 0: // bool - { - XAO::BooleanStep* bs = (XAO::BooleanStep*)step; - Handle(TColStd_HArray1OfInteger) bvalues = currStep->GetIntValues(); - std::vector bv; - bv.reserve(bvalues->Upper()); - for ( int i = bvalues->Lower(), nb = bvalues->Upper(); i <= nb; ++i ) - { - bv.push_back(bvalues->Value(i) != 0); - } - bs->setValues(bv); - break; - } - case 1: // integer - { - XAO::IntegerStep* is = (XAO::IntegerStep*)step; - Handle(TColStd_HArray1OfInteger) ivalues = currStep->GetIntValues(); - std::vector iv; - iv.reserve(ivalues->Upper()); - for ( int i = ivalues->Lower(), nb = ivalues->Upper(); i <= nb; ++i ) - { - iv.push_back(ivalues->Value(i)); - } - is->setValues(iv); - break; - } - case 2: // double - { - XAO::DoubleStep* ds = (XAO::DoubleStep*)step; - Handle(TColStd_HArray1OfReal) dvalues = currStep->GetDoubleValues(); - std::vector dv; - dv.reserve(dvalues->Upper()); - for ( int i = dvalues->Lower(), nb = dvalues->Upper(); i <= nb; ++i ) - { - dv.push_back(dvalues->Value(i)); - } - ds->setValues(dv); - break; - } - case 3: // string - { - XAO::StringStep* ss = (XAO::StringStep*)step; - Handle(TColStd_HArray1OfExtendedString) svalues = currStep->GetStringValues(); - std::vector sv; - sv.reserve(svalues->Upper()); - for ( int i = svalues->Lower(), nb = svalues->Upper(); i <= nb; ++i ) - { - sv.push_back(TCollection_AsciiString(svalues->Value(i)).ToCString()); - } - ss->setValues(sv); - break; - } - } - } - } -} - -void GEOMImpl_IInsertOperations::exportSubshapes(const Handle(GEOM_Object)& shape, XAO::BrepGeometry* geometry) -{ - Handle(TColStd_HSequenceOfTransient) subObjects = myShapesOperations->GetExistingSubObjects(shape, false); - int nbSubObjects = subObjects->Length(); - // set the names of the sub shapes - for (int i = 1; i <= nbSubObjects; i++) - { - Handle(Standard_Transient) transientSubObject = subObjects->Value(i); - if (transientSubObject.IsNull()) - continue; - - Handle(GEOM_Object) subObject = Handle(GEOM_Object)::DownCast(transientSubObject); - if (subObject->GetType() != GEOM_GROUP) - { - int subIndex = myShapesOperations->GetSubShapeIndex(shape, subObject); - switch (subObject->GetValue().ShapeType()) - { - case TopAbs_VERTEX: - geometry->changeVertexName(subIndex, subObject->GetName().ToCString()); - break; - case TopAbs_EDGE: - geometry->changeEdgeName(subIndex, subObject->GetName().ToCString()); - break; - case TopAbs_FACE: - geometry->changeFaceName(subIndex, subObject->GetName().ToCString()); - break; - case TopAbs_SOLID: - geometry->changeSolidName(subIndex, subObject->GetName().ToCString()); - break; - } - } - } -} - -//============================================================================= -/*! - * Export a shape to XAO format - * \param shape The shape to export - * \param groups The list of groups to export - * \param fields The list of fields to export - * \param fileName The name of the file to exported - * \return boolean indicating if export was succeful. - */ -//============================================================================= -bool GEOMImpl_IInsertOperations::ExportXAO(Handle(GEOM_Object) shape, - std::list groupList, - std::list fieldList, - const char* author, - const char* fileName) -{ - SetErrorCode(KO); - - if (shape.IsNull()) return false; - - // add a new shape function with parameters - Handle(GEOM_Function) lastFunction = shape->GetLastFunction(); - if (lastFunction.IsNull()) return false; - - // add a new result object - Handle(GEOM_Object) result = GetEngine()->AddObject(GetDocID(), GEOM_IMPORT); - - // add an Export function - Handle(GEOM_Function) exportFunction = result->AddFunction(GEOMImpl_XAODriver::GetID(), IMPORTEXPORT_EXPORTXAO); - if (exportFunction.IsNull()) return false; - if (exportFunction->GetDriverGUID() != GEOMImpl_XAODriver::GetID()) return false; - - // create the XAO object - XAO::Xao* xaoObject = new XAO::Xao(); - xaoObject->setAuthor(author); - - // add the geometry - XAO::BrepGeometry* geometry = (XAO::BrepGeometry*)XAO::Geometry::createGeometry(XAO::BREP); - TopoDS_Shape topoShape = shape->GetValue(); - exportFunction->SetValue(topoShape); - XAO::BrepGeometry* brep = (XAO::BrepGeometry*)geometry; - brep->setTopoDS_Shape(topoShape); - - geometry->setName(shape->GetName().ToCString()); - exportSubshapes(shape, geometry); - xaoObject->setGeometry(geometry); - - exportGroups(groupList, xaoObject, geometry); - exportFields(fieldList, xaoObject, geometry); - - // export the XAO to the file - xaoObject->exportXAO(fileName); - - // make a Python command - GEOM::TPythonDump pd(exportFunction); - pd << "exported = geompy.ExportXAO(" << shape; - - // list of groups - pd << ", ["; - if (groupList.size() > 0) - { - std::list::iterator itGroup = groupList.begin(); - pd << (*itGroup++); - while (itGroup != groupList.end()) - { - pd << ", " << (*itGroup++); - } - } - - // list of fields - pd << "], ["; - if (fieldList.size() > 0) - { - std::list::iterator itField = fieldList.begin(); - pd << (*itField++); - while (itField != fieldList.end()) - { - pd << ", " << (*itField++); - } - } - pd << "], "; - pd << "\"" << author << "\", \"" << fileName << "\")"; - - SetErrorCode(OK); - delete xaoObject; - - return true; -} - -void GEOMImpl_IInsertOperations::importSubShapes(XAO::Geometry* xaoGeometry, - Handle(GEOM_Function) function, int shapeType, int dim, - Handle(TColStd_HSequenceOfTransient)& subShapeList) -{ - Handle(GEOM_Object) subShape; - Handle(GEOM_Function) aFunction; - Handle(TColStd_HArray1OfInteger) anArray; - - XAO::GeometricElementList::iterator elementIterator = xaoGeometry->begin((XAO::Dimension)dim); - for (; elementIterator != xaoGeometry->end((XAO::Dimension)dim); elementIterator++) - { - XAO::GeometricElement element = elementIterator->second; - if (!element.hasName()) - continue; - - std::string name = element.getName(); - std::string ref = element.getReference(); - int iref = XAO::XaoUtils::stringToInt(ref); - - anArray = new TColStd_HArray1OfInteger(1, 1); - anArray->SetValue(1, iref); - - subShape = GetEngine()->AddObject(GetDocID(), GEOM_SUBSHAPE); - Handle(GEOM_Function) aFunction = subShape->AddFunction(GEOM_Object::GetSubShapeID(), 1); - if (aFunction.IsNull()) - return; - - subShape->SetName(name.c_str()); - subShape->SetType(shapeType); - - GEOM_ISubShape aSSI(aFunction); - aSSI.SetMainShape(function); - aSSI.SetIndices(anArray); - - //aFunction->SetValue(aValue); - subShapeList->Append(subShape); - - // Put this subshape in the list of sub-shapes of theMainShape - function->AddSubShapeReference(aFunction); - } -} - -//============================================================================= -/*! - * Import a shape from XAO format - * \param fileName The name of the file to import - * \param shape The imported shape - * \param subShapes The list of imported groups - * \param groups The list of imported groups - * \param fields The list of imported fields - * \return boolean indicating if import was succeful. - */ -//============================================================================= -bool GEOMImpl_IInsertOperations::ImportXAO(const char* fileName, - Handle(GEOM_Object)& shape, - Handle(TColStd_HSequenceOfTransient)& subShapes, - Handle(TColStd_HSequenceOfTransient)& groups, - Handle(TColStd_HSequenceOfTransient)& fields) -{ - SetErrorCode(KO); - - if (fileName == NULL || groups.IsNull() || fields.IsNull()) - return false; - - // Read the XAO - XAO::Xao* xaoObject = new XAO::Xao(); - try - { - xaoObject->importXAO(fileName); - } - catch (XAO::XAO_Exception& exc) - { - delete xaoObject; - SetErrorCode(exc.what()); - return false; - } - - XAO::Geometry* xaoGeometry = xaoObject->getGeometry(); - if (xaoGeometry == NULL) - { - delete xaoObject; - SetErrorCode("Cannot import XAO: geometry format not supported."); - return false; - } - - // create the shape - shape = GetEngine()->AddObject(GetDocID(), GEOM_IMPORT); - Handle(GEOM_Function) function = shape->AddFunction(GEOMImpl_XAODriver::GetID(), IMPORTEXPORT_EXPORTXAO); - if (function.IsNull()) return false; - if (function->GetDriverGUID() != GEOMImpl_XAODriver::GetID()) return false; - - // set the geometry - if (xaoGeometry->getFormat() == XAO::BREP) - { - XAO::BrepGeometry* brep = (XAO::BrepGeometry*)xaoGeometry; - TopoDS_Shape geomShape = brep->getTopoDS_Shape(); - function->SetValue(geomShape); - shape->SetName(xaoGeometry->getName().c_str()); - } - else - { - delete xaoObject; - SetErrorCode("Cannot import XAO: geometry format not supported."); - return false; - } - - // create sub shapes with names - importSubShapes(xaoGeometry, function, GEOM_POINT, XAO::VERTEX, subShapes); - importSubShapes(xaoGeometry, function, GEOM_EDGE, XAO::EDGE, subShapes); - importSubShapes(xaoGeometry, function, GEOM_FACE, XAO::FACE, subShapes); - importSubShapes(xaoGeometry, function, GEOM_SOLID, XAO::SOLID, subShapes); - - // create groups - int nbGroups = xaoObject->countGroups(); - for (int i = 0; i < nbGroups; ++i) - { - XAO::Group* xaoGroup = xaoObject->getGroup(i); - - // build an array with the indexes of the sub shapes - int nbElt = xaoGroup->count(); - Handle(TColStd_HArray1OfInteger) array = new TColStd_HArray1OfInteger(1, nbElt); - int j = 0; - for (std::set::iterator it = xaoGroup->begin(); it != xaoGroup->end(); ++it) - { - int index = (*it); - std::string ref = xaoGeometry->getElementReference(xaoGroup->getDimension(), index); - array->SetValue(++j, XAO::XaoUtils::stringToInt(ref)); - } - - // create the group with the array of sub shapes indexes - Handle(GEOM_Object) group = GetEngine()->AddSubShape(shape, array); - group->SetType(GEOM_GROUP); - group->SetName(xaoGroup->getName().c_str()); - - // Set a sub-shape type - TDF_Label freeLabel = group->GetFreeLabel(); - TDataStd_Integer::Set(freeLabel, (Standard_Integer) getGroupDimension(xaoGroup)); - groups->Append(group); - - function = group->GetLastFunction(); - } - - // create the fields - int nbFields = xaoObject->countFields(); - for (int i = 0; i < nbFields; ++i) - { - XAO::Field* xaoField = xaoObject->getField(i); - - Handle(TColStd_HArray1OfExtendedString) components = new TColStd_HArray1OfExtendedString(0, xaoField->countComponents()-1); - for (int j = 0; j < xaoField->countComponents(); ++j) - { - components->SetValue(j, (TCollection_ExtendedString)xaoField->getComponentName(j).c_str()); - } - - Handle(GEOM_Field) field = myFieldOperations->CreateField(shape, - xaoField->getName().c_str(), - (int)xaoField->getType(), - (int)xaoField->getDimension(), - components); - - switch (xaoField->getType()) - { - case XAO::BOOLEAN: - { - XAO::BooleanField* bfield = (XAO::BooleanField*)xaoField; - for (int j = 0; j < xaoField->countSteps(); ++j) - { - XAO::BooleanStep* bstep = bfield->getStep(j); - Handle(GEOM_FieldStep) step = field->AddStep(bstep->getStep(), bstep->getStamp()); - - Handle(TColStd_HArray1OfInteger) values = new TColStd_HArray1OfInteger(0, bstep->countValues()-1); - std::vector bvalues = bstep->getValues(); - for (int k = 0; k < bstep->countValues(); ++k) - { - values->SetValue(k, bvalues[k] ? 1 : 0); - } - step->SetValues(values); - } - break; - } - case XAO::INTEGER: - { - XAO::IntegerField* ifield = (XAO::IntegerField*)xaoField; - for (int j = 0; j < xaoField->countSteps(); ++j) - { - XAO::IntegerStep* istep = ifield->getStep(j); - Handle(GEOM_FieldStep) step = field->AddStep(istep->getStep(), istep->getStamp()); - - Handle(TColStd_HArray1OfInteger) values = new TColStd_HArray1OfInteger(0, istep->countValues()-1); - std::vector ivalues = istep->getValues(); - for (int k = 0; k < istep->countValues(); ++k) - { - values->SetValue(k, ivalues[k]); - } - step->SetValues(values); - } - break; - } - case XAO::DOUBLE: - { - XAO::DoubleField* dfield = (XAO::DoubleField*)xaoField; - for (int j = 0; j < xaoField->countSteps(); ++j) - { - XAO::DoubleStep* dstep = dfield->getStep(j); - Handle(GEOM_FieldStep) step = field->AddStep(dstep->getStep(), dstep->getStamp()); - - Handle(TColStd_HArray1OfReal) values = new TColStd_HArray1OfReal(0, dstep->countValues()-1); - std::vector dvalues = dstep->getValues(); - for (int k = 0; k < dstep->countValues(); ++k) - { - values->SetValue(k, dvalues[k]); - } - step->SetValues(values); - } - break; - } - case XAO::STRING: - { - XAO::StringField* sfield = (XAO::StringField*)xaoField; - for (int j = 0; j < xaoField->countSteps(); ++j) - { - XAO::StringStep* sstep = sfield->getStep(j); - Handle(GEOM_FieldStep) step = field->AddStep(sstep->getStep(), sstep->getStamp()); - - Handle(TColStd_HArray1OfExtendedString) values = new TColStd_HArray1OfExtendedString(0, sstep->countValues()-1); - std::vector svalues = sstep->getValues(); - for (int k = 0; k < sstep->countValues(); ++k) - { - values->SetValue(k, TCollection_ExtendedString(svalues[k].c_str())); - } - step->SetValues(values); - } - break; - } - } - - fields->Append(field); - } - - // make a Python command - GEOM::TPythonDump pd(function); - pd << "(imported, " << shape << ", "; - - // list of sub shapes - pd << "["; - int nbSubshapes = subShapes->Length(); - if (nbSubshapes > 0) - { - for (int i = 1; i <= nbSubshapes; i++) - { - Handle(GEOM_Object) obj = Handle(GEOM_Object)::DownCast(subShapes->Value(i)); - pd << obj << ((i < nbSubshapes) ? ", " : ""); - } - } - pd << "], ["; - - // list of groups - if (nbGroups > 0) - { - for (int i = 1; i <= nbGroups; i++) - { - Handle(GEOM_Object) obj = Handle(GEOM_Object)::DownCast(groups->Value(i)); - pd << obj << ((i < nbGroups) ? ", " : ""); - } - } - - pd << "], ["; - - // list of fields - if (nbFields > 0) - { - for (int i = 1; i <= nbFields; i++) - { - Handle(GEOM_Field) obj = Handle(GEOM_Field)::DownCast(fields->Value(i)); - pd << obj << ((i < nbFields) ? ", " : ""); - } - } - pd << "]"; - pd << ") = geompy.ImportXAO(\"" << fileName << "\")"; - - delete xaoObject; - SetErrorCode(OK); - - return true; -} - -//============================================================================= -/*! - * This method creates material groups for an imported object. - * \param theObject the imported object. - */ -//============================================================================= -void GEOMImpl_IInsertOperations::MakeMaterialGroups - (const Handle(GEOM_Object) &theObject, - const Handle(TColStd_HSequenceOfTransient) &theSeq) -{ - TopoDS_Shape aResShape = theObject->GetValue(); - - if (aResShape.IsNull() == Standard_False) { - // Group shapes by material names. - Handle(GEOM_Function) aFunction = theObject->GetLastFunction(); - DataMapOfStringListOfShape aMapMaterialShapes; - - // check all named shapes using iterator - TDF_ChildIDIterator anIt (aFunction->GetNamingEntry(), - TNaming_NamedShape::GetID(), Standard_True); - - for (; anIt.More(); anIt.Next()) { - Handle(TNaming_NamedShape) anAttr = - Handle(TNaming_NamedShape)::DownCast(anIt.Value()); - - if (anAttr.IsNull() == Standard_False) { - TDF_Label aLabel = anAttr->Label(); - Handle(TDataStd_Comment) aComment; - - if (aLabel.FindAttribute(TDataStd_Comment::GetID(), aComment)) { - TCollection_ExtendedString aMatName = aComment->Get(); - TopoDS_Shape aShape = anAttr->Get(); - - if (aMapMaterialShapes.IsBound(aMatName) == Standard_False) { - NCollection_List anEmptyList; - - aMapMaterialShapes.Bind(aMatName, anEmptyList); - } - - aMapMaterialShapes(aMatName).Append(aShape); - } - } - } - - if (aMapMaterialShapes.IsEmpty() == Standard_False) { - // Construct groups. - TopAbs_ShapeEnum aType = aResShape.ShapeType(); - Standard_Integer i; - DataMapOfStringListOfShape::Iterator aMapIter; - - // Check each shape type. - for(i = aType; i <= TopAbs_VERTEX; i++) { - DataMapOfStringListOfShape::Iterator aMapIter(aMapMaterialShapes); - - for (; aMapIter.More(); aMapIter.Next()) { - NCollection_List &aShList = aMapIter.ChangeValue(); - NCollection_List::Iterator aShIter(aShList); - NCollection_List aShListSameType; - - while (aShIter.More()) { - const TopoDS_Shape &aShape = aShIter.Value(); - - if (i == aShape.ShapeType()) { - // Treat this element. - aShListSameType.Append(aShape); - aShList.Remove(aShIter); - } else { - // Go to the next element. - aShIter.Next(); - } - } - - if (aShListSameType.IsEmpty() == Standard_False) { - // Construct a group. - Handle(GEOM_Object) aGroup = - MakeGroup(theObject, aMapIter.Key(), aShListSameType); - - if (aGroup.IsNull() == Standard_False) { - theSeq->Append(aGroup); - } - } - } - } - } - } -} - - -//============================================================================= -/*! - * This method creates a group of shapes of certain type. - * \param theObject the imported object. - * \param theName the material name. - * \param theShapes the list of shapes to be added to this group. - * \return the created group. - */ -//============================================================================= -Handle(GEOM_Object) GEOMImpl_IInsertOperations::MakeGroup - (const Handle(GEOM_Object) &theObject, - const TCollection_ExtendedString &theName, - const NCollection_List &theShapes) -{ - Handle(GEOM_Object) aGroup; - TopTools_IndexedMapOfShape anIndices; - Handle(TColStd_HSequenceOfInteger) aSeqIDs = new TColStd_HSequenceOfInteger; - NCollection_List::Iterator anIter(theShapes); - - TopExp::MapShapes(theObject->GetValue(), anIndices); - - // Compose shape IDs. - for (; anIter.More(); anIter.Next()) { - const TopoDS_Shape &aShape = anIter.Value(); - const Standard_Integer anIndex = anIndices.FindIndex(aShape); - - if (anIndex > 0) { - aSeqIDs->Append(anIndex); - } - } - - if (aSeqIDs->IsEmpty() == Standard_False) { - // Create a group. - const TopAbs_ShapeEnum aType = theShapes.First().ShapeType(); - - aGroup = myGroupOperations->CreateGroup(theObject, aType); - - if (aGroup.IsNull() == Standard_False) { - aGroup->GetLastFunction()->SetDescription(""); - myGroupOperations->UnionIDs(aGroup, aSeqIDs); - aGroup->GetLastFunction()->SetDescription(""); - - // Compose the group name. - TCollection_AsciiString aGroupName(theName); - - switch(aType) { - case TopAbs_VERTEX: - aGroupName += "_VERTEX"; - break; - case TopAbs_EDGE: - aGroupName += "_EDGE"; - break; - case TopAbs_WIRE: - aGroupName += "_WIRE"; - break; - case TopAbs_FACE: - aGroupName += "_FACE"; - break; - case TopAbs_SHELL: - aGroupName += "_SHELL"; - break; - case TopAbs_SOLID: - aGroupName += "_SOLID"; - break; - case TopAbs_COMPSOLID: - aGroupName += "_COMPSOLID"; - break; - case TopAbs_COMPOUND: - aGroupName += "_COMPOUND"; - break; - default: - aGroupName += "_SHAPE"; - break; - } - - aGroup->SetName(aGroupName.ToCString()); - } - } - - return aGroup; -} diff --git a/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx b/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx index c3c982fec..e205f024a 100644 --- a/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IInsertOperations.hxx @@ -51,15 +51,6 @@ class Handle_TColStd_HArray1OfByte; class Handle_TDataStd_HArray1OfByte; #endif -namespace XAO { - class Geometry; - class BrepGeometry; - class Xao; -} - -typedef NCollection_DataMap > - DataMapOfStringListOfShape; - class GEOMImpl_IInsertOperations : public GEOM_IOperations { public: Standard_EXPORT GEOMImpl_IInsertOperations(GEOM_Engine* theEngine, int theDocID); @@ -80,16 +71,6 @@ class GEOMImpl_IInsertOperations : public GEOM_IOperations { const TCollection_AsciiString& theFileName, const TCollection_AsciiString& theFormatType); - Standard_EXPORT Standard_Boolean ImportTranslators (Handle(TColStd_HSequenceOfAsciiString)& theFormats, - Handle(TColStd_HSequenceOfAsciiString)& thePatterns); - - Standard_EXPORT Standard_Boolean ExportTranslators (Handle(TColStd_HSequenceOfAsciiString)& theFormats, - Handle(TColStd_HSequenceOfAsciiString)& thePatterns); - - Standard_EXPORT Standard_Boolean IsSupported (const Standard_Boolean isImport, - const TCollection_AsciiString& theFormat, - Handle(TCollection_HAsciiString)& theLibName); - Standard_EXPORT Handle(GEOM_Object) RestoreShape (std::istringstream& theStream); Standard_EXPORT int LoadTexture(const TCollection_AsciiString& theTextureFile); @@ -110,38 +91,6 @@ class GEOMImpl_IInsertOperations : public GEOM_IOperations { Standard_EXPORT std::list GetAllTextures(); - Standard_EXPORT bool ExportXAO(Handle(GEOM_Object) shape, - std::list groupList, - std::list fieldList, - const char* author, - const char* fileName); - - Standard_EXPORT bool ImportXAO(const char* fileName, - Handle(GEOM_Object)& shape, - Handle(TColStd_HSequenceOfTransient)& subShapes, - Handle(TColStd_HSequenceOfTransient)& groups, - Handle(TColStd_HSequenceOfTransient)& fields); - - private: - Standard_Boolean InitResMgr (); - - void importSubShapes(XAO::Geometry* xaoGeometry, Handle(GEOM_Function) function, - int shapeType, int dim, - Handle(TColStd_HSequenceOfTransient)& subshapeList); - void exportSubshapes(const Handle(GEOM_Object)& shape, XAO::BrepGeometry* geometry); - void exportFields(std::list fieldList, XAO::Xao* xaoObject, - XAO::BrepGeometry* geometry); - void exportGroups(std::list groupList, XAO::Xao* xaoObject, - XAO::BrepGeometry* geometry); - - void MakeMaterialGroups(const Handle(GEOM_Object) &theObject, - const Handle(TColStd_HSequenceOfTransient) &theSeq); - - Handle(GEOM_Object) MakeGroup - (const Handle(GEOM_Object) &theObject, - const TCollection_ExtendedString &theName, - const NCollection_List &theShapes); - private: std::vector myResMgrList; GEOMImpl_IShapesOperations* myShapesOperations; diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx index 31233a94f..d9bbe3062 100644 --- a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx @@ -121,7 +121,7 @@ GEOMImpl_IMeasureOperations::ShapeKind GEOMImpl_IMeasureOperations::KindOfShape int geom_type = theShape->GetType(); // check if it's advanced shape - if ( geom_type > ADVANCED_BASE ) { + if ( geom_type > USER_TYPE ) { SetErrorCode(OK); return SK_ADVANCED; } diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index efb82f39b..548ee1050 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -1151,9 +1151,38 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeGlueEdgesByList * GetExistingSubObjects */ //============================================================================= -Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetExistingSubObjects - (Handle(GEOM_Object) theShape, - const Standard_Boolean theGroupsOnly) +Handle(TColStd_HSequenceOfTransient) +GEOMImpl_IShapesOperations::GetExistingSubObjects(Handle(GEOM_Object) theShape, + const Standard_Boolean theGroupsOnly) +{ + // note: this method does not return fields + + Standard_Integer types = theGroupsOnly ? Groups : Groups|SubShapes; + Handle(TColStd_HSequenceOfTransient) results = GetExistingSubObjects(theShape, types); + + if (results->Length() > 0) { + //Make a Python command + TCollection_AsciiString anAsciiList; + for (int i = 1; i <= results->Length(); i++) + { + Handle(GEOM_BaseObject) obj = Handle(GEOM_BaseObject)::DownCast( results->Value(i)); + obj->GetEntryString(); + if ( i < results->Length() ) + anAsciiList += ","; + } + + GEOM::TPythonDump pd (theShape->GetLastFunction(), /*append=*/true); + pd << "[" << anAsciiList.ToCString(); + pd << "] = geompy.GetExistingSubObjects("; + pd << theShape << ", " << (bool)theGroupsOnly << ")"; + } + + return results; +} + +Handle(TColStd_HSequenceOfTransient) +GEOMImpl_IShapesOperations::GetExistingSubObjects(Handle(GEOM_Object) theShape, + const Standard_Integer theTypes) { SetErrorCode(KO); @@ -1171,8 +1200,6 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetExistingSubO SetErrorCode(KO); - TCollection_AsciiString anAsciiList; - TDataStd_ListIteratorOfListOfExtendedString anIt (aListEntries); for (; anIt.More(); anIt.Next()) { TCollection_ExtendedString anEntry = anIt.Value(); @@ -1180,13 +1207,14 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetExistingSubO char* anEntryStr = new char[aStrLen+1]; anEntry.ToUTF8CString(anEntryStr); Handle(GEOM_BaseObject) anObj = GetEngine()->GetObject(GetDocID(), anEntryStr, false); - if (!anObj.IsNull() && anObj->IsKind(STANDARD_TYPE(GEOM_Object))) { - if (!theGroupsOnly || anObj->GetType() == GEOM_GROUP) { + if (!anObj.IsNull() ) { + bool isGroup = anObj->IsKind(STANDARD_TYPE(GEOM_Object)) && anObj->GetType() == GEOM_GROUP; + bool isSubShape = anObj->IsKind(STANDARD_TYPE(GEOM_Object)) && anObj->GetType() != GEOM_GROUP; + bool isField = anObj->IsKind(STANDARD_TYPE(GEOM_Field)); + if (theTypes & Groups && isGroup || + theTypes & SubShapes && isSubShape || + theTypes & Fields && isField) { aSeq->Append(anObj); - - // for python command - anAsciiList += anEntryStr; - anAsciiList += ","; } } delete [] anEntryStr; @@ -1197,14 +1225,6 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetExistingSubO return aSeq; } - //Make a Python command - anAsciiList.Trunc(anAsciiList.Length() - 1); - - GEOM::TPythonDump pd (aMainShape, /*append=*/true); - pd << "[" << anAsciiList.ToCString(); - pd << "] = geompy.GetExistingSubObjects("; - pd << theShape << ", " << (bool)theGroupsOnly << ")"; - SetErrorCode(OK); return aSeq; diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx index e620817fe..d12642a36 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx @@ -54,6 +54,15 @@ class Handle(TColStd_HArray1OfInteger); class GEOMImpl_IShapesOperations : public GEOM_IOperations { public: + + enum SubShapeType { + None = 0x00, + Groups = 0x01, + Fields = 0x02, + SubShapes = 0x04, + All = Groups | Fields | SubShapes, + }; + Standard_EXPORT GEOMImpl_IShapesOperations(GEOM_Engine* theEngine, int theDocID); Standard_EXPORT ~GEOMImpl_IShapesOperations(); @@ -106,10 +115,11 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations const Standard_Real theTolerance, std::list theEdges); - Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetExistingSubObjects - (Handle(GEOM_Object) theShape, - const Standard_Boolean theGroupsOnly); - + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetExistingSubObjects(Handle(GEOM_Object) theShape, + const Standard_Boolean theGroupsOnly); + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetExistingSubObjects(Handle(GEOM_Object) theShape, + const Standard_Integer theTypes = All); + enum ExplodeType { EXPLODE_OLD_INCLUDE_MAIN, EXPLODE_NEW_INCLUDE_MAIN, diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx index 768690584..86b3f32e6 100644 --- a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx @@ -20,49 +20,19 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include +// internal includes +#include "GEOMImpl_ImportDriver.hxx" +#include "GEOMImpl_IImportExport.hxx" +#include "GEOMImpl_IECallBack.hxx" +#include "GEOMImpl_Types.hxx" -#include -#include -#include +// GEOM includes #include +// OCC includes +#include #include -#include - -#include "utilities.h" - -#include -#include - -#ifdef WIN32 -#include -#else -#include -#endif - -#ifdef WIN32 -#define LibHandle HMODULE -#define LoadLib( name ) LoadLibrary( name ) -#define GetProc GetProcAddress -#define UnLoadLib( handle ) FreeLibrary( handle ); -#else -#define LibHandle void* -#define LoadLib( name ) dlopen( name, RTLD_LAZY ) -#define GetProc dlsym -#define UnLoadLib( handle ) dlclose( handle ); -#endif - -typedef TopoDS_Shape (*funcPoint)(const TCollection_AsciiString&, - const TCollection_AsciiString&, - TCollection_AsciiString&, - const TDF_Label&); - -typedef Handle(TCollection_HAsciiString) (*pGetValue)(const TCollection_AsciiString&, - const TCollection_AsciiString&, - TCollection_AsciiString&); - //======================================================================= //function : GetID //purpose : @@ -91,104 +61,26 @@ Standard_Integer GEOMImpl_ImportDriver::Execute(TFunction_Logbook& log) const Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); GEOMImpl_IImportExport aCI (aFunction); - //Standard_Integer aType = aFunction->GetType(); // retrieve the file and plugin library names TCollection_AsciiString aFileName = aCI.GetFileName(); TCollection_AsciiString aFormatName = aCI.GetFormatName(); - TCollection_AsciiString aLibName = aCI.GetPluginName(); - if (aFileName.IsEmpty() || aFormatName.IsEmpty() || aLibName.IsEmpty()) + if (aFileName.IsEmpty() || aFormatName.IsEmpty() ) return 0; - // load plugin library - LibHandle anImportLib = LoadLib( aLibName.ToCString() ); //This is workaround of BUG OCC13051 - - // Get Import method - funcPoint fp = 0; - if ( anImportLib ) - fp = (funcPoint)GetProc( anImportLib, "Import" ); - - if ( !fp ) { - TCollection_AsciiString aMsg = aFormatName.SubString(1,4); - aMsg += " plugin was not installed"; - Standard_Failure::Raise(aMsg.ToCString()); - } - - // perform the import - TCollection_AsciiString anError; - TopoDS_Shape aShape = fp(aFileName, aFormatName, anError, aFunction->GetNamingEntry()); - - // unload plugin library - // commented by enk: - // the bug was occured: using ACIS Import/Export plugin - //UnLoadLib( anImportLib ); //This is workaround of BUG OCC13051 - - if ( aShape.IsNull() ) { - StdFail_NotDone::Raise(anError.ToCString()); + Handle(TColStd_HSequenceOfTransient) aSeq = + GEOMImpl_IECallBack::GetCallBack( aFormatName )->Import( GetDocID(), aFormatName, aFileName ); + if( aSeq.IsNull() ) return 0; - } - - // set the function result - aFunction->SetValue(aShape); + Handle(GEOM_Object) anImported = Handle(GEOM_Object)::DownCast( aSeq->Value(1) ); + TopoDS_Shape aShape = anImported->GetValue(); + aFunction->SetValue( aShape ); log.SetTouched(Label()); return 1; } -//======================================================================= -//function : ReadValue -//purpose : -//======================================================================= -TCollection_AsciiString GEOMImpl_ImportDriver::ReadValue(const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theLibName, - const TCollection_AsciiString& theParameterName, - TCollection_AsciiString& theError) -{ - TCollection_AsciiString aValue; - - if (theFileName.IsEmpty() || theLibName.IsEmpty() || theParameterName.IsEmpty()) - return aValue; - - // load plugin library - LibHandle anImportLib = LoadLib(theLibName.ToCString()); //This is workaround of BUG OCC13051 - if (!anImportLib) { - theError = theLibName + " library was not installed"; - return aValue; - } - - // Get GetValue method - pGetValue pGV = (pGetValue)GetProc(anImportLib, "GetValue"); - - if (!pGV) { - theError = theLibName + " library doesn't support GetValue method"; - return aValue; - } - - Handle(TCollection_HAsciiString) aHValue = pGV(theFileName, theParameterName, theError); - - if (aHValue.IsNull()) { - if (theError.IsEmpty()) - theError = theFileName + " doesn't contain requested parameter"; - return aValue; - } - - aValue = aHValue->String(); - - // unload plugin library - // commented by enk: - // the bug was occured: using ACIS Import/Export plugin - //UnLoadLib( anImportLib ); //This is workaround of BUG OCC13051 - - return aValue; -} - -//================================================================================ -/*! - * \brief Returns a name of creation operation and names and values of creation parameters - */ -//================================================================================ - bool GEOMImpl_ImportDriver:: GetCreationInformation(std::string& theOperationName, std::vector& theParams) diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.hxx b/src/GEOMImpl/GEOMImpl_ImportDriver.hxx index 47dbb356f..c6e4b7b68 100644 --- a/src/GEOMImpl/GEOMImpl_ImportDriver.hxx +++ b/src/GEOMImpl/GEOMImpl_ImportDriver.hxx @@ -26,23 +26,7 @@ #ifndef _GEOMImpl_ImportDriver_HeaderFile #define _GEOMImpl_ImportDriver_HeaderFile -#ifndef _TColStd_SequenceOfExtendedString_HeaderFile -#include -#endif -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif #ifndef _Standard_GUID_HeaderFile #include #endif @@ -82,13 +66,6 @@ Standard_EXPORT ~GEOMImpl_ImportDriver() {}; Standard_EXPORT virtual bool GetCreationInformation(std::string& theOperationName, std::vector& params); - - // Static method - Standard_EXPORT static TCollection_AsciiString ReadValue (const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theLibName, - const TCollection_AsciiString& theParameterName, - TCollection_AsciiString& theError); - DEFINE_STANDARD_RTTI( GEOMImpl_ImportDriver ) }; diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx index ffc758bcb..037e62900 100644 --- a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx @@ -1153,7 +1153,7 @@ TopoDS_Shape GEOMImpl_ShapeDriver::MakeIsoline const double theParameter) const { TopoDS_Shape aResult; - GEOMUtils_Hatcher aHatcher(theFace); + GEOMUtils::Hatcher aHatcher(theFace); const GeomAbs_IsoType aType = (IsUIso ? GeomAbs_IsoU : GeomAbs_IsoV); aHatcher.Init(aType, theParameter); diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx index b57080a9c..0bc7505c1 100755 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -109,8 +109,6 @@ #define GEOM_FIELD 52 // == GEOM_FIELD_OBJTYPE constant #define GEOM_FIELD_STEP 53 // == GEOM_FIELD_STEP_OBJTYPE constant -#define GEOM_EXPORTXAO 54 - #define GEOM_ISOLINE 55 //GEOM_Function types @@ -118,8 +116,8 @@ #define COPY_WITH_REF 1 #define COPY_WITHOUT_REF 2 -#define EXPORT_SHAPE 1 #define IMPORT_SHAPE 1 +#define EXPORT_SHAPE 2 #define POINT_XYZ 1 #define POINT_XYZ_REF 2 @@ -363,9 +361,10 @@ #define MARKER_SHAPE 2 #define MARKER_PNT2VEC 3 -// import/export XAO -#define IMPORTEXPORT_EXPORTXAO 1 -#define IMPORTEXPORT_IMPORTXAO 2 +// Advanced functions +#define USER_TYPE 200 // Base type for GEOM advanced shapes +#define USER_TYPE_EX 1000 // Base type for GEOM plugins -// Advanced functions (base = 200) -#define ADVANCED_BASE 200 // NO OPERATION (advanced operations base) + +//Plugins specified constants +#define PLUGIN_NAME "Plugin Name" diff --git a/src/GEOMImpl/GEOMImpl_XAODriver.cxx b/src/GEOMImpl/GEOMImpl_XAODriver.cxx deleted file mode 100644 index 4a7e7dfcf..000000000 --- a/src/GEOMImpl/GEOMImpl_XAODriver.cxx +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#include -#include -#include -#include - -#include -#include - -#include "XAO_Xao.hxx" -#include "XAO_Geometry.hxx" -#include "XAO_Group.hxx" -#include "XAO_XaoUtils.hxx" -//@@ include required header files here @@// - -//======================================================================= -//function : GetID -//purpose : -//======================================================================= -const Standard_GUID& GEOMImpl_XAODriver::GetID() -{ - static Standard_GUID aGUID("FF1BBB71-5D14-4df2-980B-3A668264EA16"); - return aGUID; -} - -//======================================================================= -//function : GEOMImpl_XAODriver -//purpose : -//======================================================================= -GEOMImpl_XAODriver::GEOMImpl_XAODriver() -{ -} - -//======================================================================= -//function : Execute -//purpose : -//======================================================================= -Standard_Integer GEOMImpl_XAODriver::Execute(TFunction_Logbook& log) const -{ - if (Label().IsNull()) return 0; - Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); - - GEOMImpl_IImportExportXAO iexao(function); - TCollection_AsciiString xao = iexao.GetData(); - - TopoDS_Shape shape; - - Standard_Integer functionType = function->GetType(); - if (functionType == IMPORTEXPORT_EXPORTXAO) - { - } - else if (functionType == IMPORTEXPORT_IMPORTXAO) - { - } - else - { - // other construction modes here - } - - if (shape.IsNull()) return 0; - - function->SetValue(shape); - - log.SetTouched(Label()); - - return 1; -} - -//======================================================================= -//function : GEOMImpl_XAODriver_Type_ -//purpose : -//======================================================================= -Standard_EXPORT Handle_Standard_Type& GEOMImpl_XAODriver_Type_() -{ - static Handle_Standard_Type aType1 = STANDARD_TYPE(TFunction_Driver); - if (aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if (aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if (aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - static Handle_Standard_Transient _Ancestors[] = { aType1, aType2, aType3, NULL }; - static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_XAODriver", - sizeof(GEOMImpl_XAODriver), - 1, - (Standard_Address) _Ancestors, - (Standard_Address) NULL); - return _aType; -} - -//======================================================================= -//function : DownCast -//purpose : -//======================================================================= -const Handle(GEOMImpl_XAODriver) Handle(GEOMImpl_XAODriver)::DownCast( - const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOMImpl_XAODriver) _anOtherObject; - - if (!AnObject.IsNull()) - { - if (AnObject->IsKind(STANDARD_TYPE(GEOMImpl_XAODriver))) - { - _anOtherObject = Handle(GEOMImpl_XAODriver)((Handle(GEOMImpl_XAODriver)&) AnObject); - } - } - - return _anOtherObject; -} diff --git a/src/GEOMImpl/GEOMImpl_XAODriver.hxx b/src/GEOMImpl/GEOMImpl_XAODriver.hxx deleted file mode 100644 index c67b6909a..000000000 --- a/src/GEOMImpl/GEOMImpl_XAODriver.hxx +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _GEOMImpl_XAODriver_HXX -#define _GEOMImpl_XAODriver_HXX - -#include - -class Handle_Standard_Type; -class GEOMImpl_XAODriver; - -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOMImpl_XAODriver); - -class Handle(GEOMImpl_XAODriver): public Handle(TFunction_Driver) -{ -public: - inline void* operator new(size_t, void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&) anAddress); - } - - Handle(GEOMImpl_XAODriver) () : - Handle(TFunction_Driver)() - { - } - Handle(GEOMImpl_XAODriver) (const Handle(GEOMImpl_XAODriver)& aHandle) : - Handle(TFunction_Driver)(aHandle) - { - } - - Handle(GEOMImpl_XAODriver) (const GEOMImpl_XAODriver* anItem) : - Handle(TFunction_Driver)((TFunction_Driver *) anItem) - { - } - - Handle(GEOMImpl_XAODriver)& operator=(const Handle(GEOMImpl_XAODriver)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(GEOMImpl_XAODriver)& operator=(const GEOMImpl_XAODriver* anItem) - { - Assign((Standard_Transient *) anItem); - return *this; - } - - GEOMImpl_XAODriver* operator->() - { - return (GEOMImpl_XAODriver *) ControlAccess(); - } - - GEOMImpl_XAODriver* operator->() const - { - return (GEOMImpl_XAODriver *) ControlAccess(); - } - - Standard_EXPORT - ~Handle(GEOMImpl_XAODriver)() - { - } - - Standard_EXPORT - static const Handle(GEOMImpl_XAODriver) DownCast(const Handle(Standard_Transient)& AnObject); -}; - -class GEOMImpl_XAODriver: public TFunction_Driver -{ -public: - inline void* operator new(size_t, void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&) anAddress); - } - - // Methods PUBLIC - // - Standard_EXPORT - GEOMImpl_XAODriver(); - Standard_EXPORT - virtual Standard_Integer Execute(TFunction_Logbook& log) const; - Standard_EXPORT - virtual void Validate(TFunction_Logbook&) const - { - } - Standard_EXPORT - Standard_Boolean MustExecute(const TFunction_Logbook&) const - { - return Standard_True; - } - Standard_EXPORT - static const Standard_GUID& GetID(); - Standard_EXPORT - ~GEOMImpl_XAODriver() - { - } - - // Type management - // - Standard_EXPORT - friend Handle_Standard_Type& GEOMImpl_ExportXAODriver_Type_(); - Standard_EXPORT - const Handle(Standard_Type)& DynamicType() const - { - return STANDARD_TYPE(GEOMImpl_XAODriver); - } - Standard_EXPORT - Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const - { - return (STANDARD_TYPE(GEOMImpl_XAODriver) == AType || TFunction_Driver::IsKind(AType)); - } -}; - -#endif // _GEOMImpl_XAODriver_HXX diff --git a/src/GEOMImpl/GUID.txt b/src/GEOMImpl/GUID.txt index 34a83e707..d11591d0f 100755 --- a/src/GEOMImpl/GUID.txt +++ b/src/GEOMImpl/GUID.txt @@ -71,8 +71,6 @@ FF1BBB69-5D14-4df2-980B-3A668264EA16 // Modify the Location FF1BBB70-5D14-4df2-980B-3A668264EA16 // Projection -FF1BBB71-5D14-4df2-980B-3A668264EA16 // Export XAO - 1C3A0F3F-729D-4E83-8232-78E74FC5637C // Pipe T-Shape 1C3A0F30-729D-4E83-8232-78E74FC5637C // Smoothing Surface diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index 0c514cb78..950b181c5 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -62,116 +62,6 @@ typedef QMap FilterMap; static QString lastUsedFilter; -//======================================================================= -// function : getFileName -// purpose : Selection of a file name for Import/Export. Returns also -// the selected file type code through argument. -//======================================================================= -static QString getFileName( QWidget* parent, - const QString& initial, - const FilterMap& filterMap, - const QStringList& filters, - const QString& caption, - bool open, - QString& format, - bool showCurrentDirInitially = false ) -{ - //QStringList filters; - QString aBrepFilter; - for (FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it) { - //filters.push_back( it.key() ); - if (it.key().contains( "BREP", Qt::CaseInsensitive )) - aBrepFilter = it.key(); - } - - SUIT_FileDlg* fd = new SUIT_FileDlg( parent, open, true, true ); - if ( !caption.isEmpty() ) - fd->setWindowTitle( caption ); - - if ( !initial.isEmpty() ) - fd->selectFile( initial ); - - if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() ) - fd->setDirectory( QDir::currentPath() ); - - fd->setFilters( filters ); - - if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) { - fd->selectFilter( lastUsedFilter ); - } - else if ( !aBrepFilter.isEmpty() ) { - fd->selectFilter( aBrepFilter ); - } - - QString filename; - if ( fd->exec() == QDialog::Accepted ) { - filename = fd->selectedFile(); - format = filterMap[fd->selectedFilter()]; - lastUsedFilter = fd->selectedFilter(); - } - - delete fd; - qApp->processEvents(); - return filename; -} - -//======================================================================= -// function : getFileNames -// purpose : Select list of files for Import operation. Returns also -// the selected file type code through argument. -//======================================================================= -static QStringList getFileNames( QWidget* parent, - const QString& initial, - const FilterMap& filterMap, - const QString& caption, - QString& format, - bool showCurrentDirInitially = false) -{ - QString aBrepFilter; - QStringList allFilters; - QStringList filters; - QRegExp re( "\\((.*)\\)" ); - re.setMinimal( true ); - for ( FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it ) { - if ( it.value().contains( "BREP", Qt::CaseInsensitive ) && aBrepFilter.isEmpty() ) - aBrepFilter = it.key(); - filters.append( it.key() ); - int pos = 0; - while ( re.indexIn( it.key(), pos ) >= 0 ) { - QString f = re.cap(1); - pos = re.pos() + f.length() + 2; - allFilters.append( f.simplified() ); - } - } - filters.append( QObject::tr( "GEOM_ALL_IMPORT_FILES" ).arg( allFilters.join( " " ) ) ); - - SUIT_FileDlg fd( parent, true, true, true ); - fd.setFileMode( SUIT_FileDlg::ExistingFiles ); - if ( !caption.isEmpty() ) - fd.setWindowTitle( caption ); - if ( !initial.isEmpty() ) - fd.selectFile( initial ); - - if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() ) - fd.setDirectory( QDir::currentPath() ); - - fd.setFilters( filters ); - - if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) - fd.selectFilter( lastUsedFilter ); - else if ( !aBrepFilter.isEmpty() ) - fd.selectFilter( aBrepFilter ); - - QStringList filenames; - if ( fd.exec() ) { - filenames = fd.selectedFiles(); - format = filterMap.contains( fd.selectedFilter() ) ? filterMap[ fd.selectedFilter() ] : QString(); - lastUsedFilter = fd.selectedFilter(); - } - qApp->processEvents(); - return filenames; -} - //======================================================================= // function : getParentComponent // purpose : Get object's parent component entry @@ -317,12 +207,6 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) case GEOMOp::OpDelete: // EDIT - DELETE OnEditDelete(); break; - case GEOMOp::OpImport: // FILE - IMPORT - Import(); - break; - case GEOMOp::OpExport: // FILE - EXPORT - Export(); - break; case GEOMOp::OpCheckGeom: // TOOLS - CHECK GEOMETRY OnCheckGeometry(); break; @@ -628,365 +512,6 @@ void GEOMToolsGUI::OnEditDelete() app->updateActions(); //SRN: To update a Save button in the toolbar } -//===================================================================================== -// function : Import -// purpose : BRep, Iges, Step, ... -//===================================================================================== -bool GEOMToolsGUI::Import() -{ - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( getGeometryGUI()->getApp() ); - if ( !app ) return false; - - SalomeApp_Study* stud = dynamic_cast ( app->activeStudy() ); - if ( !stud ) { - MESSAGE ( "FAILED to cast active study to SalomeApp_Study" ); - return false; - } - _PTR(Study) aStudy = stud->studyDS(); - - // check if study is locked - bool aLocked = (_PTR(AttributeStudyProperties)(aStudy->GetProperties()))->IsLocked(); - if ( aLocked ) { - SUIT_MessageBox::warning( app->desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("WRN_STUDY_LOCKED") ); - return false; - } - - // check if GEOM engine is available - GEOM::GEOM_Gen_var eng = GeometryGUI::GetGeomGen(); - if ( CORBA::is_nil( eng ) ) { - SUIT_MessageBox::critical( app->desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr( "GEOM Engine is not started" ) ); - return false; - } - - GEOM::GEOM_IInsertOperations_var aInsOp = eng->GetIInsertOperations( aStudy->StudyId() ); - if ( aInsOp->_is_nil() ) - return false; - - // obtain a list of available import formats - FilterMap aMap; - GEOM::string_array_var aFormats, aPatterns; - aInsOp->ImportTranslators( aFormats, aPatterns ); - - for ( int i = 0, n = aFormats->length(); i < n; i++ ) - aMap.insert( (char*)aPatterns[i], (char*)aFormats[i] ); - - // select files to be imported - QString fileType; - QStringList fileNames = getFileNames( app->desktop(), "", aMap, - tr( "GEOM_MEN_IMPORT" ), fileType, true ); - - // set Wait cursor - SUIT_OverrideCursor wc; - - if ( fileNames.count() == 0 ) - return false; // nothing selected, return - - QStringList errors; - - QList< GEOM::GEOM_Object_var > objsForDisplay; - - QStringList anEntryList; - - // iterate through all selected files - - SUIT_MessageBox::StandardButton igesAnswer = SUIT_MessageBox::NoButton; - SUIT_MessageBox::StandardButton acisAnswer = SUIT_MessageBox::NoButton; - - for ( int i = 0; i < fileNames.count(); i++ ) { - QString fileName = fileNames[i]; - - if ( fileName.isEmpty() ) - continue; - - QString aCurrentType; - if ( fileType.isEmpty() ) { - // file type is not defined, try to detect - QString ext = QFileInfo( fileName ).suffix().toUpper(); - QRegExp re( "\\*\\.(\\w+)" ); - for ( FilterMap::const_iterator it = aMap.begin(); - it != aMap.end() && aCurrentType.isEmpty(); ++it ) { - int pos = 0; - while ( re.indexIn( it.key(), pos ) >= 0 ) { - QString f = re.cap(1).trimmed().toUpper(); - if ( ext == f ) { aCurrentType = it.value(); break; } - pos = re.pos() + re.cap(1).length() + 2; - } - } - } - else { - aCurrentType = fileType; - } - - if ( aCurrentType.isEmpty() ) { - errors.append( QString( "%1 : %2" ).arg( fileName ).arg( tr( "GEOM_UNSUPPORTED_TYPE" ) ) ); - continue; - } - - GEOM_Operation* anOp = new GEOM_Operation( app, aInsOp.in() ); - try { - app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( SUIT_Tools::file( fileName, /*withExten=*/true ) ) ); - anOp->start(); - - CORBA::String_var fileN = fileName.toUtf8().constData(); - CORBA::String_var fileT = aCurrentType.toUtf8().constData(); - - // jfa 21.08.2012 for mantis issue 21511 (STEP file units) - CORBA::String_var aUnits = aInsOp->ReadValue(fileN, fileT, "LEN_UNITS"); - QString aUnitsStr (aUnits.in()); - bool needConvert = true; - if (aUnitsStr.isEmpty() || aUnitsStr == "M" || aUnitsStr.toLower() == "metre") - needConvert = false; - - if (needConvert) { - if (igesAnswer == SUIT_MessageBox::NoToAll) { - // converting for all files is already approved - fileT = (aCurrentType + "_SCALE").toLatin1().constData(); - } - else if (igesAnswer != SUIT_MessageBox::YesToAll) { - SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No; - if (i < fileNames.count() - 1) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; - igesAnswer = SUIT_MessageBox::question(app->desktop(), - "Question",//tr("WRN_WARNING"), - tr("GEOM_SCALE_DIMENSIONS").arg(aUnitsStr), - btns | SUIT_MessageBox::Cancel, - SUIT_MessageBox::No); - switch (igesAnswer) { - case SUIT_MessageBox::Cancel: - return false; // cancel (break) import operation - case SUIT_MessageBox::Yes: - case SUIT_MessageBox::YesToAll: - break; // scaling is confirmed - case SUIT_MessageBox::No: - case SUIT_MessageBox::NoAll: - fileT = (aCurrentType + "_SCALE").toLatin1().constData(); - default: - break; // scaling is rejected - } // switch ( igesAnswer ) - } // if ( igeAnswer != NoToAll ) - } // if ( needConvert ) - - /* - // skl 29.05.2009 - if ( aCurrentType == "IGES" ) { - GEOM::GEOM_Object_var anObj = aInsOp->ImportFile( fileN, "IGES_UNIT" ); - bool needConvert = false; - TCollection_AsciiString aUnitName = aInsOp->GetErrorCode(); - if ( aUnitName.SubString( 1, 4 ) == "UNIT" ) - needConvert = aUnitName.SubString( 6, aUnitName.Length() ) != "M"; - - if ( needConvert ) { - if ( igesAnswer == SUIT_MessageBox::NoToAll ) { - // converting for all files is already approved - fileT = "IGES_SCALE"; - } - else if ( igesAnswer != SUIT_MessageBox::YesToAll ) { - SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No; - if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; - igesAnswer = SUIT_MessageBox::question( app->desktop(), - "Question",//tr("WRN_WARNING"), - tr("GEOM_SCALE_DIMENSIONS"), - btns | SUIT_MessageBox::Cancel, - SUIT_MessageBox::No ); - switch ( igesAnswer ) { - case SUIT_MessageBox::Cancel: - return false; // cancel (break) import operation - case SUIT_MessageBox::Yes: - case SUIT_MessageBox::YesToAll: - break; // scaling is confirmed - case SUIT_MessageBox::No: - case SUIT_MessageBox::NoAll: - fileT = "IGES_SCALE"; - default: - break; // scaling is rejected - } // switch ( igesAnswer ) - } // if ( igeAnswer != NoToAll ) - } // if ( needConvert ) - } // if ( aCurrentType == "IGES" ) - else if ( aCurrentType == "ACIS" ) { - */ - - if ( aCurrentType == "ACIS" ) { - if ( acisAnswer != SUIT_MessageBox::YesToAll && acisAnswer != SUIT_MessageBox::NoToAll ) { - SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No; - if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; - acisAnswer = SUIT_MessageBox::question( app->desktop(), - "Question",//tr("WRN_WARNING"), - tr("GEOM_PUBLISH_NAMED_SHAPES"), - btns | SUIT_MessageBox::Cancel, - SUIT_MessageBox::No ); - if ( acisAnswer == SUIT_MessageBox::Cancel ) - return false; // cancel (break) import operation - } // if ( acisAnswer != YesToAll && acisAnswer != NoToAll ) - } // else if ( aCurrentType == "ACIS" ) - - // IMPORT - GEOM::ListOfGO_var anObj = aInsOp->ImportFile( fileN, fileT ); - - if ( anObj->length() > 0 && aInsOp->IsDone() ) { - GEOM::GEOM_Object_ptr aFather = anObj[0]._retn(); - QString aPublishObjName = - GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, /*withExten=*/true ) ); - - SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy ); - SALOMEDS::SObject_var aSO = - GeometryGUI::GetGeomGen()->PublishInStudy( aDSStudy, - SALOMEDS::SObject::_nil(), - aFather, - aPublishObjName.toLatin1().constData() ); - if ( ( !aSO->_is_nil() ) ) - anEntryList.append( aSO->GetID() ); - - objsForDisplay.append( aFather ); - - if ( aCurrentType == "ACIS" ) { - if ( acisAnswer == SUIT_MessageBox::Yes || acisAnswer == SUIT_MessageBox::YesToAll ) - GeometryGUI::GetGeomGen()->PublishNamedShapesInStudy( aDSStudy, aFather ); - } - - anOp->commit(); - - // Treat group objects. - for (int i = 1, n = anObj->length(); i < n; i++) { - GEOM::GEOM_Object_ptr anObject = anObj[i]._retn(); - GeometryGUI::GetGeomGen()->AddInStudy(aDSStudy, - anObject, tr(anObject->GetName()).toStdString().c_str(), aFather); - } - } - else { - anOp->abort(); - errors.append( QString( "%1 : %2" ).arg( fileName ).arg( aInsOp->GetErrorCode() ) ); - } - } - catch( const SALOME::SALOME_Exception& S_ex ) { - anOp->abort(); - errors.append( QString( "%1 : %2" ).arg( fileName ).arg( tr( "GEOM_UNKNOWN_IMPORT_ERROR" ) ) ); - } - } - - // update object browser - getGeometryGUI()->updateObjBrowser( true ); - - // browse published objects - app->browseObjects( anEntryList ); - - // display imported model (if only one file is selected) - if ( objsForDisplay.count() == 1 ) - GEOM_Displayer( stud ).Display( objsForDisplay[0].in() ); - - if ( errors.count() > 0 ) { - SUIT_MessageBox::critical( app->desktop(), - QObject::tr( "GEOM_ERROR" ), - QObject::tr( "GEOM_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) ); - } - - app->updateActions(); //SRN: To update a Save button in the toolbar - - return objsForDisplay.count() > 0; -} - -//===================================================================================== -// function : Export -// purpose : BRep, Iges, Step -//===================================================================================== -bool GEOMToolsGUI::Export() -{ - SalomeApp_Application* app = getGeometryGUI()->getApp(); - if (!app) return false; - - SalomeApp_Study* stud = dynamic_cast ( app->activeStudy() ); - if ( !stud ) { - MESSAGE ( "FAILED to cast active study to SalomeApp_Study" ); - return false; - } - _PTR(Study) aStudy = stud->studyDS(); - - GEOM::GEOM_Gen_var eng = GeometryGUI::GetGeomGen(); - if ( CORBA::is_nil( eng ) ) { - SUIT_MessageBox::critical( app->desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr( "GEOM Engine is not started" ) ); - return false; - } - - GEOM::GEOM_IInsertOperations_var aInsOp = eng->GetIInsertOperations( aStudy->StudyId() ); - if ( aInsOp->_is_nil() ) - return false; - - // Obtain a list of available export formats - FilterMap aMap; - QStringList filters; - GEOM::string_array_var aFormats, aPatterns; - aInsOp->ExportTranslators( aFormats, aPatterns ); - for ( int i = 0, n = aFormats->length(); i < n; i++ ) { - aMap.insert( (char*)aPatterns[i], (char*)aFormats[i] ); - filters.push_back( (char*)aPatterns[i] ); - } - - // Get selected objects - LightApp_SelectionMgr* sm = app->selectionMgr(); - if ( !sm ) - return false; - - SALOME_ListIO selectedObjects; - sm->selectedObjects( selectedObjects ); - bool appropriateObj = false; - - SALOME_ListIteratorOfListIO It( selectedObjects ); - for (; It.More(); It.Next()) { - Handle(SALOME_InteractiveObject) IObject = It.Value(); - GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( IObject ); - - if ( anObj->_is_nil() ) - continue; - - QString fileType; - QString file = getFileName(app->desktop(), QString( IObject->getName() ), aMap, filters, - tr("GEOM_MEN_EXPORT"), false, fileType, true); - - // User has pressed "Cancel" --> stop the operation - if ( file.isEmpty() || fileType.isEmpty() ) - return false; - - GEOM_Operation* anOp = new GEOM_Operation( app, aInsOp.in() ); - try { - SUIT_OverrideCursor wc; - - app->putInfo( tr("GEOM_PRP_EXPORT").arg(SUIT_Tools::file( file, /*withExten=*/true )) ); - - anOp->start(); - - aInsOp->Export( anObj, file.toUtf8().constData(), fileType.toUtf8().constData() ); - - if (aInsOp->IsDone()) - anOp->commit(); - else { - anOp->abort(); - wc.suspend(); - SUIT_MessageBox::critical(app->desktop(), - QObject::tr("GEOM_ERROR"), - QObject::tr("GEOM_PRP_ABORT") + "\n" + QObject::tr(aInsOp->GetErrorCode())); - return false; - } - } - catch (const SALOME::SALOME_Exception& S_ex) { - //QtCatchCorbaException(S_ex); - anOp->abort(); - return false; - } - appropriateObj = true; - } - - if ( !appropriateObj ) - SUIT_MessageBox::warning( app->desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("GEOM_WRN_NO_APPROPRIATE_SELECTION") ); - return true; -} - //===================================================================================== // function : RemoveObjectWithChildren // purpose : used by OnEditDelete() method diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 4ed7f9495..a79c7d30c 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -61,9 +61,6 @@ public: enum ActionType { SHOWDLG, INCR, DECR }; private: - // Import and export topology methods - bool Import(); - bool Export(); void OnEditDelete(); void OnCheckGeometry(); diff --git a/src/GEOMUtils/CMakeLists.txt b/src/GEOMUtils/CMakeLists.txt index b4969f0d9..fdd98a686 100755 --- a/src/GEOMUtils/CMakeLists.txt +++ b/src/GEOMUtils/CMakeLists.txt @@ -23,6 +23,7 @@ INCLUDE_DIRECTORIES( ${CAS_INCLUDE_DIRS} ${PTHREAD_INCLUDE_DIR} + ${LIBXML2_INCLUDE_DIR} ${KERNEL_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ) @@ -30,6 +31,7 @@ INCLUDE_DIRECTORIES( # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} + ${LIBXML2_DEFINITIONS} ) # libraries to link to @@ -40,6 +42,7 @@ SET(_link_LIBRARIES ${CAS_TKG3d} ${CAS_TKV3d} ${CAS_TKGeomBase} + ${LIBXML2_LIBRARIES} ${KERNEL_SALOMELocalTrace} ) @@ -48,12 +51,14 @@ SET(_link_LIBRARIES SET(GEOMUtils_HEADERS GEOMUtils.hxx GEOMUtils_Hatcher.hxx + GEOMUtils_XmlHandler.hxx ) # --- sources --- SET(GEOMUtils_SOURCES GEOMUtils.cxx GEOMUtils_Hatcher.cxx + GEOMUtils_XmlHandler.cxx ) # --- rules --- diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx index 89b13d96b..aa8c3d7a3 100644 --- a/src/GEOMUtils/GEOMUtils.cxx +++ b/src/GEOMUtils/GEOMUtils.cxx @@ -95,13 +95,240 @@ #define STD_SORT_ALGO 1 -namespace GEOMUtils { +namespace +{ + /** + * This function constructs and returns modified shape from the original one + * for singular cases. It is used for the method GetMinDistanceSingular. + * + * \param theShape the original shape + * \param theModifiedShape output parameter. The modified shape. + * \param theAddDist output parameter. The added distance for modified shape. + * \retval true if the shape is modified; false otherwise. + * + * \internal + */ + Standard_Boolean ModifyShape(const TopoDS_Shape &theShape, + TopoDS_Shape &theModifiedShape, + Standard_Real &theAddDist) + { + Standard_Boolean isModified = Standard_False; + TopExp_Explorer anExp; + int nbf = 0; + + theAddDist = 0.; + theModifiedShape.Nullify(); + + for ( anExp.Init( theShape, TopAbs_FACE ); anExp.More(); anExp.Next() ) { + nbf++; + theModifiedShape = anExp.Current(); + } + if(nbf==1) { + TopoDS_Shape sh = theShape; + while(sh.ShapeType()==TopAbs_COMPOUND) { + TopoDS_Iterator it(sh); + sh = it.Value(); + } + Handle(Geom_Surface) S = BRep_Tool::Surface(TopoDS::Face(theModifiedShape)); + if( S->IsKind(STANDARD_TYPE(Geom_SphericalSurface)) || + S->IsKind(STANDARD_TYPE(Geom_ToroidalSurface)) || + S->IsUPeriodic()) { + const Standard_Boolean isShell = + (sh.ShapeType()==TopAbs_SHELL || sh.ShapeType()==TopAbs_FACE); + + if( isShell || S->IsUPeriodic() ) { + // non solid case or any periodic surface (Mantis 22454). + double U1,U2,V1,V2; + // changes for 0020677: EDF 1219 GEOM: MinDistance gives 0 instead of 20.88 + //S->Bounds(U1,U2,V1,V2); changed by + ShapeAnalysis::GetFaceUVBounds(TopoDS::Face(theModifiedShape),U1,U2,V1,V2); + // end of changes for 020677 (dmv) + Handle(Geom_RectangularTrimmedSurface) TrS1 = + new Geom_RectangularTrimmedSurface(S,U1,(U1+U2)/2.,V1,V2); + Handle(Geom_RectangularTrimmedSurface) TrS2 = + new Geom_RectangularTrimmedSurface(S,(U1+U2)/2.,U2,V1,V2); + BRep_Builder B; + TopoDS_Face F1,F2; + TopoDS_Shape aMShape; + + if (isShell) { + B.MakeCompound(TopoDS::Compound(aMShape)); + } else { + B.MakeShell(TopoDS::Shell(aMShape)); + } + + B.MakeFace(F1,TrS1,1.e-7); + B.Add(aMShape,F1); + B.MakeFace(F2,TrS2,1.e-7); + B.Add(aMShape,F2); + Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape; + + if (!isShell) { + // The original shape is a solid. + TopoDS_Solid aSolid; + + B.MakeSolid(aSolid); + B.Add(aSolid, aMShape); + aMShape = aSolid; + } + + sfs->Init(aMShape); + sfs->SetPrecision(1.e-6); + sfs->SetMaxTolerance(1.0); + sfs->Perform(); + theModifiedShape = sfs->Shape(); + isModified = Standard_True; + } + else { + if( S->IsKind(STANDARD_TYPE(Geom_SphericalSurface)) ) { + Handle(Geom_SphericalSurface) SS = Handle(Geom_SphericalSurface)::DownCast(S); + gp_Pnt PC = SS->Location(); + BRep_Builder B; + TopoDS_Vertex V; + B.MakeVertex(V,PC,1.e-7); + theModifiedShape = V; + theAddDist = SS->Radius(); + isModified = Standard_True; + } + else { + Handle(Geom_ToroidalSurface) TS = Handle(Geom_ToroidalSurface)::DownCast(S); + gp_Ax3 ax3 = TS->Position(); + Handle(Geom_Circle) C = new Geom_Circle(ax3.Ax2(),TS->MajorRadius()); + BRep_Builder B; + TopoDS_Edge E; + B.MakeEdge(E,C,1.e-7); + theModifiedShape = E; + theAddDist = TS->MinorRadius(); + isModified = Standard_True; + } + } + } else { + theModifiedShape = theShape; + } + } + else + theModifiedShape = theShape; + + return isModified; + } + + //======================================================================= + //function : ShapeToDouble + //purpose : used by CompareShapes::operator() + //======================================================================= + std::pair ShapeToDouble (const TopoDS_Shape& S, bool isOldSorting) + { + // Computing of CentreOfMass + gp_Pnt GPoint; + double Len; + + if (S.ShapeType() == TopAbs_VERTEX) { + GPoint = BRep_Tool::Pnt(TopoDS::Vertex(S)); + Len = (double)S.Orientation(); + } + else { + GProp_GProps GPr; + // BEGIN: fix for Mantis issue 0020842 + if (isOldSorting) { + BRepGProp::LinearProperties(S, GPr); + } + else { + if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { + BRepGProp::LinearProperties(S, GPr); + } + else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { + BRepGProp::SurfaceProperties(S, GPr); + } + else { + BRepGProp::VolumeProperties(S, GPr); + } + } + // END: fix for Mantis issue 0020842 + GPoint = GPr.CentreOfMass(); + Len = GPr.Mass(); + } + + double dMidXYZ = GPoint.X() * 999.0 + GPoint.Y() * 99.0 + GPoint.Z() * 0.9; + return std::make_pair(dMidXYZ, Len); + } + + void parseWard( const GEOMUtils::LevelsList &theLevelList, std::string &treeStr ) + { + treeStr.append( "{" ); + for( GEOMUtils::LevelsList::const_iterator j = theLevelList.begin(); + j != theLevelList.end(); ++j ) { + if ( j != theLevelList.begin() ) { + treeStr.append( ";" ); + } + GEOMUtils::LevelInfo level = (*j); + GEOMUtils::LevelInfo::iterator upIter; + for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { + if ( upIter != level.begin() ) { + treeStr.append( "," ); + } + treeStr.append( upIter->first ); + for ( std::vector::iterator k = upIter->second.begin(); k != upIter->second.end(); ++k ) { + treeStr.append( "_" ); + treeStr.append( *k ); + } + } + } + treeStr.append( "}" ); + } + + GEOMUtils::LevelsList parseWard( const std::string& theData, std::size_t& theCursor ) + { + std::size_t indexStart = theData.find( "{", theCursor ) + 1; + std::size_t indexEnd = theData.find( "}", indexStart ); + + std::string ward = theData.substr( indexStart, indexEnd - indexStart ); + std::stringstream ss(ward); + std::string substr; + std::vector levelsListStr; + while ( std::getline( ss, substr, ';' ) ) { + if ( !substr.empty() ) + levelsListStr.push_back( substr ); + } + GEOMUtils::LevelsList levelsListData; + for( int level = 0; level < levelsListStr.size(); level++ ) { + std::vector namesListStr; + std::stringstream ss1( levelsListStr[level] ); + while ( std::getline( ss1, substr, ',' ) ) { + if ( !substr.empty() ) + namesListStr.push_back( substr ); + } + GEOMUtils::LevelInfo levelInfoData; + for( int node = 0; node < namesListStr.size(); node++ ) { + std::vector linksListStr; + std::stringstream ss2( namesListStr[node] ); + while ( std::getline( ss2, substr, '_' ) ) { + if ( !substr.empty() ) + linksListStr.push_back( substr ); + } + std::string nodeItem = linksListStr[0]; + if( !nodeItem.empty() ) { + GEOMUtils::NodeLinks linksListData; + for( int link = 1; link < linksListStr.size(); link++ ) { + std::string linkItem = linksListStr[link]; + linksListData.push_back( linkItem ); + }// Links + levelInfoData[nodeItem] = linksListData; + } + }// Level's objects + levelsListData.push_back(levelInfoData); + }// Levels + + theCursor = indexEnd + 1; + return levelsListData; + } + +} //======================================================================= //function : GetPosition //purpose : //======================================================================= -gp_Ax3 GetPosition (const TopoDS_Shape& theShape) +gp_Ax3 GEOMUtils::GetPosition (const TopoDS_Shape& theShape) { gp_Ax3 aResult; @@ -161,7 +388,7 @@ gp_Ax3 GetPosition (const TopoDS_Shape& theShape) //function : GetVector //purpose : //======================================================================= -gp_Vec GetVector (const TopoDS_Shape& theShape, +gp_Vec GEOMUtils::GetVector (const TopoDS_Shape& theShape, Standard_Boolean doConsiderOrientation) { if (theShape.IsNull()) @@ -186,51 +413,11 @@ gp_Vec GetVector (const TopoDS_Shape& theShape, return aV; } -//======================================================================= -//function : ShapeToDouble -//purpose : used by CompareShapes::operator() -//======================================================================= -std::pair ShapeToDouble (const TopoDS_Shape& S, bool isOldSorting) -{ - // Computing of CentreOfMass - gp_Pnt GPoint; - double Len; - - if (S.ShapeType() == TopAbs_VERTEX) { - GPoint = BRep_Tool::Pnt(TopoDS::Vertex(S)); - Len = (double)S.Orientation(); - } - else { - GProp_GProps GPr; - // BEGIN: fix for Mantis issue 0020842 - if (isOldSorting) { - BRepGProp::LinearProperties(S, GPr); - } - else { - if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { - BRepGProp::LinearProperties(S, GPr); - } - else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { - BRepGProp::SurfaceProperties(S, GPr); - } - else { - BRepGProp::VolumeProperties(S, GPr); - } - } - // END: fix for Mantis issue 0020842 - GPoint = GPr.CentreOfMass(); - Len = GPr.Mass(); - } - - double dMidXYZ = GPoint.X() * 999.0 + GPoint.Y() * 99.0 + GPoint.Z() * 0.9; - return std::make_pair(dMidXYZ, Len); -} - //======================================================================= //function : CompareShapes::operator() //purpose : used by std::sort(), called from SortShapes() //======================================================================= -bool CompareShapes::operator() (const TopoDS_Shape& theShape1, +bool GEOMUtils::CompareShapes::operator() (const TopoDS_Shape& theShape1, const TopoDS_Shape& theShape2) { if (!myMap.IsBound(theShape1)) { @@ -290,7 +477,7 @@ bool CompareShapes::operator() (const TopoDS_Shape& theShape1, //function : SortShapes //purpose : //======================================================================= -void SortShapes (TopTools_ListOfShape& SL, +void GEOMUtils::SortShapes (TopTools_ListOfShape& SL, const Standard_Boolean isOldSorting) { #ifdef STD_SORT_ALGO @@ -428,7 +615,7 @@ void SortShapes (TopTools_ListOfShape& SL, //function : CompsolidToCompound //purpose : //======================================================================= -TopoDS_Shape CompsolidToCompound (const TopoDS_Shape& theCompsolid) +TopoDS_Shape GEOMUtils::CompsolidToCompound (const TopoDS_Shape& theCompsolid) { if (theCompsolid.ShapeType() != TopAbs_COMPSOLID) { return theCompsolid; @@ -455,7 +642,7 @@ TopoDS_Shape CompsolidToCompound (const TopoDS_Shape& theCompsolid) //function : AddSimpleShapes //purpose : //======================================================================= -void AddSimpleShapes (const TopoDS_Shape& theShape, TopTools_ListOfShape& theList) +void GEOMUtils::AddSimpleShapes (const TopoDS_Shape& theShape, TopTools_ListOfShape& theList) { if (theShape.ShapeType() != TopAbs_COMPOUND && theShape.ShapeType() != TopAbs_COMPSOLID) { @@ -483,7 +670,7 @@ void AddSimpleShapes (const TopoDS_Shape& theShape, TopTools_ListOfShape& theLis //function : CheckTriangulation //purpose : //======================================================================= -bool CheckTriangulation (const TopoDS_Shape& aShape) +bool GEOMUtils::CheckTriangulation (const TopoDS_Shape& aShape) { bool isTriangulation = true; @@ -533,7 +720,7 @@ bool CheckTriangulation (const TopoDS_Shape& aShape) //function : GetTypeOfSimplePart //purpose : //======================================================================= -TopAbs_ShapeEnum GetTypeOfSimplePart (const TopoDS_Shape& theShape) +TopAbs_ShapeEnum GEOMUtils::GetTypeOfSimplePart (const TopoDS_Shape& theShape) { TopAbs_ShapeEnum aType = theShape.ShapeType(); if (aType == TopAbs_VERTEX) return TopAbs_VERTEX; @@ -554,7 +741,7 @@ TopAbs_ShapeEnum GetTypeOfSimplePart (const TopoDS_Shape& theShape) //function : GetEdgeNearPoint //purpose : //======================================================================= -TopoDS_Shape GetEdgeNearPoint (const TopoDS_Shape& theShape, +TopoDS_Shape GEOMUtils::GetEdgeNearPoint (const TopoDS_Shape& theShape, const TopoDS_Vertex& thePoint) { TopoDS_Shape aResult; @@ -622,7 +809,7 @@ TopoDS_Shape GetEdgeNearPoint (const TopoDS_Shape& theShape, //function : PreciseBoundingBox //purpose : //======================================================================= -Standard_Boolean PreciseBoundingBox +Standard_Boolean GEOMUtils::PreciseBoundingBox (const TopoDS_Shape &theShape, Bnd_Box &theBox) { Standard_Real aBound[6]; @@ -668,7 +855,7 @@ Standard_Boolean PreciseBoundingBox // Get minimal distance between planar face and shape. Standard_Real aMinDist = - GetMinDistance(aFace, theShape, aPMin[0], aPMin[1]); + GEOMUtils::GetMinDistance(aFace, theShape, aPMin[0], aPMin[1]); if (aMinDist < 0.) { return Standard_False; @@ -684,128 +871,11 @@ Standard_Boolean PreciseBoundingBox return Standard_True; } -//======================================================================= -// function : ModifyShape -// purpose : This function constructs and returns modified shape -// from the original one for singular cases. -// It is used for the method GetMinDistanceSingular. -// -// \param theShape the original shape -// \param theModifiedShape output parameter. The modified shape. -// \param theAddDist output parameter. The added distance for modified shape. -// \retval true if the shape is modified; false otherwise. -// - -//======================================================================= -Standard_Boolean ModifyShape(const TopoDS_Shape &theShape, - TopoDS_Shape &theModifiedShape, - Standard_Real &theAddDist) -{ - Standard_Boolean isModified = Standard_False; - TopExp_Explorer anExp; - int nbf = 0; - - theAddDist = 0.; - theModifiedShape.Nullify(); - - for ( anExp.Init( theShape, TopAbs_FACE ); anExp.More(); anExp.Next() ) { - nbf++; - theModifiedShape = anExp.Current(); - } - if(nbf==1) { - TopoDS_Shape sh = theShape; - while(sh.ShapeType()==TopAbs_COMPOUND) { - TopoDS_Iterator it(sh); - sh = it.Value(); - } - Handle(Geom_Surface) S = BRep_Tool::Surface(TopoDS::Face(theModifiedShape)); - if( S->IsKind(STANDARD_TYPE(Geom_SphericalSurface)) || - S->IsKind(STANDARD_TYPE(Geom_ToroidalSurface)) || - S->IsUPeriodic()) { - const Standard_Boolean isShell = - (sh.ShapeType()==TopAbs_SHELL || sh.ShapeType()==TopAbs_FACE); - - if( isShell || S->IsUPeriodic() ) { - // non solid case or any periodic surface (Mantis 22454). - double U1,U2,V1,V2; - // changes for 0020677: EDF 1219 GEOM: MinDistance gives 0 instead of 20.88 - //S->Bounds(U1,U2,V1,V2); changed by - ShapeAnalysis::GetFaceUVBounds(TopoDS::Face(theModifiedShape),U1,U2,V1,V2); - // end of changes for 020677 (dmv) - Handle(Geom_RectangularTrimmedSurface) TrS1 = - new Geom_RectangularTrimmedSurface(S,U1,(U1+U2)/2.,V1,V2); - Handle(Geom_RectangularTrimmedSurface) TrS2 = - new Geom_RectangularTrimmedSurface(S,(U1+U2)/2.,U2,V1,V2); - BRep_Builder B; - TopoDS_Face F1,F2; - TopoDS_Shape aMShape; - - if (isShell) { - B.MakeCompound(TopoDS::Compound(aMShape)); - } else { - B.MakeShell(TopoDS::Shell(aMShape)); - } - - B.MakeFace(F1,TrS1,1.e-7); - B.Add(aMShape,F1); - B.MakeFace(F2,TrS2,1.e-7); - B.Add(aMShape,F2); - Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape; - - if (!isShell) { - // The original shape is a solid. - TopoDS_Solid aSolid; - - B.MakeSolid(aSolid); - B.Add(aSolid, aMShape); - aMShape = aSolid; - } - - sfs->Init(aMShape); - sfs->SetPrecision(1.e-6); - sfs->SetMaxTolerance(1.0); - sfs->Perform(); - theModifiedShape = sfs->Shape(); - isModified = Standard_True; - } - else { - if( S->IsKind(STANDARD_TYPE(Geom_SphericalSurface)) ) { - Handle(Geom_SphericalSurface) SS = Handle(Geom_SphericalSurface)::DownCast(S); - gp_Pnt PC = SS->Location(); - BRep_Builder B; - TopoDS_Vertex V; - B.MakeVertex(V,PC,1.e-7); - theModifiedShape = V; - theAddDist = SS->Radius(); - isModified = Standard_True; - } - else { - Handle(Geom_ToroidalSurface) TS = Handle(Geom_ToroidalSurface)::DownCast(S); - gp_Ax3 ax3 = TS->Position(); - Handle(Geom_Circle) C = new Geom_Circle(ax3.Ax2(),TS->MajorRadius()); - BRep_Builder B; - TopoDS_Edge E; - B.MakeEdge(E,C,1.e-7); - theModifiedShape = E; - theAddDist = TS->MinorRadius(); - isModified = Standard_True; - } - } - } else { - theModifiedShape = theShape; - } - } - else - theModifiedShape = theShape; - - return isModified; -} - //======================================================================= //function : GetMinDistanceSingular //purpose : //======================================================================= -double GetMinDistanceSingular(const TopoDS_Shape& aSh1, +double GEOMUtils::GetMinDistanceSingular(const TopoDS_Shape& aSh1, const TopoDS_Shape& aSh2, gp_Pnt& Ptmp1, gp_Pnt& Ptmp2) { @@ -874,7 +944,7 @@ double GetMinDistanceSingular(const TopoDS_Shape& aSh1, //function : GetMinDistance //purpose : //======================================================================= -Standard_Real GetMinDistance +Standard_Real GEOMUtils::GetMinDistance (const TopoDS_Shape& theShape1, const TopoDS_Shape& theShape2, gp_Pnt& thePnt1, gp_Pnt& thePnt2) @@ -910,7 +980,7 @@ Standard_Real GetMinDistance // skl 30.06.2008 // additional workaround for bugs 19899, 19908 and 19910 from Mantis - double dist = GetMinDistanceSingular + double dist = GEOMUtils::GetMinDistanceSingular (theShape1, theShape2, thePnt1, thePnt2); if (dist > -1.0) { @@ -941,7 +1011,7 @@ Standard_Real GetMinDistance // function : ConvertClickToPoint() // purpose : Returns the point clicked in 3D view //======================================================================= -gp_Pnt ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) +gp_Pnt GEOMUtils::ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) { V3d_Coordinate XEye, YEye, ZEye, XAt, YAt, ZAt; aView->Eye( XEye, YEye, ZEye ); @@ -963,36 +1033,12 @@ gp_Pnt ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) return ResultPoint; } -void parseWard( const LevelsList &theLevelList, std::string &treeStr ) -{ - treeStr.append( "{" ); - for( LevelsList::const_iterator j = theLevelList.begin(); - j != theLevelList.end(); ++j ) { - if ( j != theLevelList.begin() ) { - treeStr.append( ";" ); - } - LevelInfo level = (*j); - LevelInfo::iterator upIter; - for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { - if ( upIter != level.begin() ) { - treeStr.append( "," ); - } - treeStr.append( upIter->first ); - for ( std::vector::iterator k = upIter->second.begin(); k != upIter->second.end(); ++k ) { - treeStr.append( "_" ); - treeStr.append( *k ); - } - } - } - treeStr.append( "}" ); -} - //======================================================================= // function : ConvertTreeToString() // purpose : Returns the string representation of dependency tree //======================================================================= -void ConvertTreeToString( const TreeModel &tree, - std::string &treeStr ) +void GEOMUtils::ConvertTreeToString( const TreeModel &tree, + std::string &treeStr ) { TreeModel::const_iterator i; for ( i = tree.begin(); i != tree.end(); ++i ) { @@ -1007,58 +1053,12 @@ void ConvertTreeToString( const TreeModel &tree, } } -LevelsList parseWard( const std::string& theData, std::size_t& theCursor ) -{ - std::size_t indexStart = theData.find( "{", theCursor ) + 1; - std::size_t indexEnd = theData.find( "}", indexStart ); - - std::string ward = theData.substr( indexStart, indexEnd - indexStart ); - std::stringstream ss(ward); - std::string substr; - std::vector levelsListStr; - while ( std::getline( ss, substr, ';' ) ) { - if ( !substr.empty() ) - levelsListStr.push_back( substr ); - } - LevelsList levelsListData; - for( int level = 0; level < levelsListStr.size(); level++ ) { - std::vector namesListStr; - std::stringstream ss1( levelsListStr[level] ); - while ( std::getline( ss1, substr, ',' ) ) { - if ( !substr.empty() ) - namesListStr.push_back( substr ); - } - LevelInfo levelInfoData; - for( int node = 0; node < namesListStr.size(); node++ ) { - std::vector linksListStr; - std::stringstream ss2( namesListStr[node] ); - while ( std::getline( ss2, substr, '_' ) ) { - if ( !substr.empty() ) - linksListStr.push_back( substr ); - } - std::string nodeItem = linksListStr[0]; - if( !nodeItem.empty() ) { - NodeLinks linksListData; - for( int link = 1; link < linksListStr.size(); link++ ) { - std::string linkItem = linksListStr[link]; - linksListData.push_back( linkItem ); - }// Links - levelInfoData[nodeItem] = linksListData; - } - }// Level's objects - levelsListData.push_back(levelInfoData); - }// Levels - - theCursor = indexEnd + 1; - return levelsListData; -} - //======================================================================= // function : ConvertStringToTree() // purpose : Returns the dependency tree //======================================================================= -void ConvertStringToTree( const std::string &theData, - TreeModel &tree ) +void GEOMUtils::ConvertStringToTree( const std::string &theData, + TreeModel &tree ) { std::size_t cursor = 0; @@ -1077,5 +1077,3 @@ void ConvertStringToTree( const std::string &theData, tree[objectEntry] = std::pair( upwardList, downwardList ); } } - -} //namespace GEOMUtils diff --git a/src/GEOMUtils/GEOMUtils.hxx b/src/GEOMUtils/GEOMUtils.hxx index b35495b62..95c0e7c0f 100644 --- a/src/GEOMUtils/GEOMUtils.hxx +++ b/src/GEOMUtils/GEOMUtils.hxx @@ -52,7 +52,8 @@ inline Standard_Boolean IsEqual (const TopoDS_Shape& S1, const TopoDS_Shape& S2) return S1.IsSame(S2); } -namespace GEOMUtils { +namespace GEOMUtils +{ typedef std::vector NodeLinks; typedef std::map LevelInfo; @@ -77,7 +78,7 @@ namespace GEOMUtils { * extracted from a shape. */ Standard_EXPORT gp_Vec GetVector (const TopoDS_Shape& theShape, - Standard_Boolean doConsiderOrientation); + Standard_Boolean doConsiderOrientation); /*! * \brief Sort shapes in the list by their coordinates. @@ -99,7 +100,7 @@ namespace GEOMUtils { * \brief Sort shapes by their centers of mass, using formula X*999 + Y*99 + Z*0.9 */ Standard_EXPORT void SortShapes (TopTools_ListOfShape& SL, - const Standard_Boolean isOldSorting = Standard_True); + const Standard_Boolean isOldSorting = Standard_True); /*! * \brief Convert TopoDS_COMPSOLID to TopoDS_COMPOUND. @@ -120,7 +121,7 @@ namespace GEOMUtils { * \param theList Output parameter. */ Standard_EXPORT void AddSimpleShapes (const TopoDS_Shape& theShape, - TopTools_ListOfShape& theList); + TopTools_ListOfShape& theList); /*! * \brief Build a triangulation on \a theShape if it is absent. @@ -128,7 +129,7 @@ namespace GEOMUtils { * \retval bool Returns false if the shape has no faces, i.e. impossible to build triangulation. */ Standard_EXPORT bool CheckTriangulation (const TopoDS_Shape& theShape); - + /*! * \brief Return type of shape for explode. In case of compound it will be a type of its first sub shape. * \param theShape The shape to get type of. @@ -144,7 +145,7 @@ namespace GEOMUtils { * \retval TopoDS_Shape Returns the found edge or an empty shape if multiple edges found. */ Standard_EXPORT TopoDS_Shape GetEdgeNearPoint (const TopoDS_Shape& theShape, - const TopoDS_Vertex& thePoint); + const TopoDS_Vertex& thePoint); /*! * \brief Compute precise bounding box of the shape based on the rough bounding box. @@ -153,8 +154,7 @@ namespace GEOMUtils { * \param theBox rough bounding box on input; precise bounding box on output. * \retval Standard_True in case of success; Standard_False otherwise. */ - Standard_EXPORT Standard_Boolean PreciseBoundingBox - (const TopoDS_Shape &theShape, Bnd_Box &theBox); + Standard_EXPORT Standard_Boolean PreciseBoundingBox(const TopoDS_Shape &theShape, Bnd_Box &theBox); /*! * \brief Computes minumal distance between two shapes for singular cases @@ -166,11 +166,10 @@ namespace GEOMUtils { * \param Ptmp2 the output result point on the second shape * \retval negative value if it is not a singular case; actual distance for singular case. */ - Standard_EXPORT Standard_Real GetMinDistanceSingular - (const TopoDS_Shape& aSh1, - const TopoDS_Shape& aSh2, - gp_Pnt& Ptmp1, gp_Pnt& Ptmp2); - + Standard_EXPORT Standard_Real GetMinDistanceSingular(const TopoDS_Shape& aSh1, + const TopoDS_Shape& aSh2, + gp_Pnt& Ptmp1, gp_Pnt& Ptmp2); + /*! * \brief Computes minumal distance between two shapes. * @@ -180,11 +179,10 @@ namespace GEOMUtils { * \param thePnt2 the output result point on the second shape * \retval negative value in case of failure; otherwise the real distance. */ - Standard_EXPORT Standard_Real GetMinDistance - (const TopoDS_Shape& theShape1, - const TopoDS_Shape& theShape2, - gp_Pnt& thePnt1, gp_Pnt& thePnt2); - + Standard_EXPORT Standard_Real GetMinDistance(const TopoDS_Shape& theShape1, + const TopoDS_Shape& theShape2, + gp_Pnt& thePnt1, gp_Pnt& thePnt2); + /*! * \brief Returns the point clicked in 3D view. * diff --git a/src/GEOMUtils/GEOMUtils_Hatcher.cxx b/src/GEOMUtils/GEOMUtils_Hatcher.cxx index be3500b2a..7f0d5083b 100755 --- a/src/GEOMUtils/GEOMUtils_Hatcher.cxx +++ b/src/GEOMUtils/GEOMUtils_Hatcher.cxx @@ -46,7 +46,7 @@ static float InfiniteValue = 1e38; //function : GEOMUtils_Hatcher //purpose : //======================================================================= -GEOMUtils_Hatcher::GEOMUtils_Hatcher(const TopoDS_Face &theFace) +GEOMUtils::Hatcher::Hatcher(const TopoDS_Face &theFace) : myHatcher(Geom2dHatch_Intersector (IntersectorConfusion, IntersectorTangency), HatcherConfusion2d, HatcherConfusion3d, Standard_True, Standard_False), @@ -140,7 +140,7 @@ GEOMUtils_Hatcher::GEOMUtils_Hatcher(const TopoDS_Face &theFace) //function : Init //purpose : //======================================================================= -void GEOMUtils_Hatcher::Init(const Standard_Integer theNbIsos) +void GEOMUtils::Hatcher::Init(const Standard_Integer theNbIsos) { Init(theNbIsos, theNbIsos); } @@ -149,8 +149,8 @@ void GEOMUtils_Hatcher::Init(const Standard_Integer theNbIsos) //function : Init //purpose : //======================================================================= -void GEOMUtils_Hatcher::Init(const Standard_Integer theNbIsoU, - const Standard_Integer theNbIsoV) +void GEOMUtils::Hatcher::Init(const Standard_Integer theNbIsoU, + const Standard_Integer theNbIsoV) { // Initialize data. Clear(); @@ -209,8 +209,8 @@ void GEOMUtils_Hatcher::Init(const Standard_Integer theNbIsoU, //function : Init //purpose : //======================================================================= -void GEOMUtils_Hatcher::Init(const GeomAbs_IsoType theIsoType, - const Standard_Real theParameter) +void GEOMUtils::Hatcher::Init(const GeomAbs_IsoType theIsoType, + const Standard_Real theParameter) { // Initialize data. Clear(); @@ -249,7 +249,7 @@ void GEOMUtils_Hatcher::Init(const GeomAbs_IsoType theIsoType, //function : Perform //purpose : //======================================================================= -void GEOMUtils_Hatcher::Perform() +void GEOMUtils::Hatcher::Perform() { myHatcher.Trim(); @@ -294,7 +294,7 @@ void GEOMUtils_Hatcher::Perform() //function : GetNbDomains //purpose : //======================================================================= -Standard_Integer GEOMUtils_Hatcher::GetNbDomains +Standard_Integer GEOMUtils::Hatcher::GetNbDomains (const Standard_Integer theHatchingIndex) const { Standard_Integer aResult = -1; @@ -310,7 +310,7 @@ Standard_Integer GEOMUtils_Hatcher::GetNbDomains //function : GetDomain //purpose : //======================================================================= -Standard_Boolean GEOMUtils_Hatcher::GetDomain +Standard_Boolean GEOMUtils::Hatcher::GetDomain (const Standard_Integer theHatchingIndex, const Standard_Integer theDomainIndex, Standard_Real &theParam1, @@ -348,7 +348,7 @@ Standard_Boolean GEOMUtils_Hatcher::GetDomain //function : IsDomainInfinite //purpose : //======================================================================= -Standard_Boolean GEOMUtils_Hatcher::IsDomainInfinite +Standard_Boolean GEOMUtils::Hatcher::IsDomainInfinite (const Standard_Integer theHatchingIndex, const Standard_Integer theDomainIndex) const { @@ -374,7 +374,7 @@ Standard_Boolean GEOMUtils_Hatcher::IsDomainInfinite //function : GetHatching //purpose : //======================================================================= -const Handle(Geom2d_Curve) &GEOMUtils_Hatcher::GetHatching +const Handle(Geom2d_Curve) &GEOMUtils::Hatcher::GetHatching (const Standard_Integer theHatchingIndex) const { const Geom2dAdaptor_Curve &aGACurve = @@ -387,7 +387,7 @@ const Handle(Geom2d_Curve) &GEOMUtils_Hatcher::GetHatching //function : Clear //purpose : //======================================================================= -void GEOMUtils_Hatcher::Clear() +void GEOMUtils::Hatcher::Clear() { myIsDone = Standard_False; myUPrm.Nullify(); diff --git a/src/GEOMUtils/GEOMUtils_Hatcher.hxx b/src/GEOMUtils/GEOMUtils_Hatcher.hxx index adcc2a258..845fa5dcc 100755 --- a/src/GEOMUtils/GEOMUtils_Hatcher.hxx +++ b/src/GEOMUtils/GEOMUtils_Hatcher.hxx @@ -34,175 +34,178 @@ /*! * This class represents a hatcher for topological faces. */ -class GEOMUtils_Hatcher { +namespace GEOMUtils +{ + class Hatcher + { + public: + + /** + * Constructor. Initializes the object with the face. + */ + Standard_EXPORT Hatcher(const TopoDS_Face &theFace); + + /** + * This method initializes the hatcher with hatchings. + * + * \param theNbIsos the number of U- and V-isolines. + */ + Standard_EXPORT void Init(const Standard_Integer theNbIsos); + + /** + * This method initializes the hatcher with hatchings. + * + * \param theNbIsoU the number of U-isolines. + * \param theNbIsoV the number of V-isolines. + */ + Standard_EXPORT void Init(const Standard_Integer theNbIsoU, + const Standard_Integer theNbIsoV); + + /** + * This method initializes the hatcher with a hatching. + * + * \param theIsoType the isoline type. + * \param theParameter the isoline parameter. + */ + Standard_EXPORT void Init(const GeomAbs_IsoType theIsoType, + const Standard_Real theParameter); -public: + /** + * Compute hatching domatins. + */ + Standard_EXPORT void Perform(); - /** - * Constructor. Initializes the object with the face. - */ - Standard_EXPORT GEOMUtils_Hatcher(const TopoDS_Face &theFace); + /** + * This method returns true if at least one hatching's domains + * are computed successfully. + * + * \return Standard_True is case of success. + */ + Standard_Boolean IsDone() const + { return myIsDone; } - /** - * This method initializes the hatcher with hatchings. - * - * \param theNbIsos the number of U- and V-isolines. - */ - Standard_EXPORT void Init(const Standard_Integer theNbIsos); + /** + * This method returns the initial face. + * + * \return the initial face. + */ + const TopoDS_Face &GetFace() const + { return myFace; } - /** - * This method initializes the hatcher with hatchings. - * - * \param theNbIsoU the number of U-isolines. - * \param theNbIsoV the number of V-isolines. - */ - Standard_EXPORT void Init(const Standard_Integer theNbIsoU, - const Standard_Integer theNbIsoV); + /** + * This method returns the number of domains for a particular hatching. + * If the operation is not done or there is no real hatching for + * a particular index a negative value is returned. + * + * \param theHatchingIndex the hatching index. + * \return the number of domains computed for the hatching. + */ + Standard_EXPORT Standard_Integer GetNbDomains + (const Standard_Integer theHatchingIndex) const; - /** - * This method initializes the hatcher with a hatching. - * - * \param theIsoType the isoline type. - * \param theParameter the isoline parameter. - */ - Standard_EXPORT void Init(const GeomAbs_IsoType theIsoType, - const Standard_Real theParameter); + /** + * This method returns the domputed domain range computed for a particular + * hatching. theDomainIndex should be in the range [1..GetNbDomains]. + * + * \param theHatchingIndex the hatching index. + * \param theDomainIndex the domain index for the particular hatching. + * \param theParam1 (output) the first parameter of the domain. + * \param theParam2 (output) the last parameter of the domain. + * \return Standard_True in case of success; Standard_False otherwise. + */ + Standard_EXPORT Standard_Boolean GetDomain + (const Standard_Integer theHatchingIndex, + const Standard_Integer theDomainIndex, + Standard_Real &theParam1, + Standard_Real &theParam2) const; - /** - * Compute hatching domatins. - */ - Standard_EXPORT void Perform(); + /** + * This method returns Standard_True if a domain has infinite first + * or last parameter. + * + * \param theHatchingIndex the hatching index. + * \param theDomainIndex the domain index for the particular hatching. + * \return Standard_True if a domain is infinite; Standard_False otherwise. + */ + Standard_EXPORT Standard_Boolean IsDomainInfinite + (const Standard_Integer theHatchingIndex, + const Standard_Integer theDomainIndex) const; - /** - * This method returns true if at least one hatching's domains - * are computed successfully. - * - * \return Standard_True is case of success. - */ - Standard_Boolean IsDone() const - { return myIsDone; } + /** + * This method returns the reference to OCCT hatcher. + * + * \return the reference to OCCT hatcher. + */ + Standard_EXPORT const Geom2dHatch_Hatcher &GetHatcher() const + { return myHatcher; } - /** - * This method returns the initial face. - * - * \return the initial face. - */ - const TopoDS_Face &GetFace() const - { return myFace; } + /** + * This method returns the array of indices of U-isoline hatchings. + * Can be null if the object is initialized by 0 U-isolines. + * + * \return the array of U-isoline hatching indices. + */ + Standard_EXPORT const Handle(TColStd_HArray1OfInteger) &GetUIndices() const + { return myUInd; } - /** - * This method returns the number of domains for a particular hatching. - * If the operation is not done or there is no real hatching for - * a particular index a negative value is returned. - * - * \param theHatchingIndex the hatching index. - * \return the number of domains computed for the hatching. - */ - Standard_EXPORT Standard_Integer GetNbDomains - (const Standard_Integer theHatchingIndex) const; + /** + * This method returns the array of indices of V-isoline hatchings. + * Can be null if the object is initialized by 0 V-isolines. + * + * \return the array of V-isoline hatching indices. + */ + Standard_EXPORT const Handle(TColStd_HArray1OfInteger) &GetVIndices() const + { return myVInd; } - /** - * This method returns the domputed domain range computed for a particular - * hatching. theDomainIndex should be in the range [1..GetNbDomains]. - * - * \param theHatchingIndex the hatching index. - * \param theDomainIndex the domain index for the particular hatching. - * \param theParam1 (output) the first parameter of the domain. - * \param theParam2 (output) the last parameter of the domain. - * \return Standard_True in case of success; Standard_False otherwise. - */ - Standard_EXPORT Standard_Boolean GetDomain - (const Standard_Integer theHatchingIndex, - const Standard_Integer theDomainIndex, - Standard_Real &theParam1, - Standard_Real &theParam2) const; + /** + * This method returns the array of parameters of U-isoline hatchings. + * Can be null if the object is initialized by 0 U-isolines. + * + * \return the array of U-isoline hatching parameters. + */ + Standard_EXPORT const Handle(TColStd_HArray1OfReal) &GetUParams() const + { return myUPrm; } - /** - * This method returns Standard_True if a domain has infinite first - * or last parameter. - * - * \param theHatchingIndex the hatching index. - * \param theDomainIndex the domain index for the particular hatching. - * \return Standard_True if a domain is infinite; Standard_False otherwise. - */ - Standard_EXPORT Standard_Boolean IsDomainInfinite - (const Standard_Integer theHatchingIndex, - const Standard_Integer theDomainIndex) const; + /** + * This method returns the array of parameters of V-isoline hatchings. + * Can be null if the object is initialized by 0 V-isolines. + * + * \return the array of V-isoline hatching parameters. + */ + Standard_EXPORT const Handle(TColStd_HArray1OfReal) &GetVParams() const + { return myVPrm; } - /** - * This method returns the reference to OCCT hatcher. - * - * \return the reference to OCCT hatcher. - */ - Standard_EXPORT const Geom2dHatch_Hatcher &GetHatcher() const - { return myHatcher; } + /** + * This method returns a hatching curve by its index. + * If the curve is not found null handle is returned. + * + * \param theHatchingIndex the hatching curve index. + */ + Standard_EXPORT const Handle(Geom2d_Curve) &GetHatching + (const Standard_Integer theHatchingIndex) const; - /** - * This method returns the array of indices of U-isoline hatchings. - * Can be null if the object is initialized by 0 U-isolines. - * - * \return the array of U-isoline hatching indices. - */ - Standard_EXPORT const Handle(TColStd_HArray1OfInteger) &GetUIndices() const - { return myUInd; } + protected: - /** - * This method returns the array of indices of V-isoline hatchings. - * Can be null if the object is initialized by 0 V-isolines. - * - * \return the array of V-isoline hatching indices. - */ - Standard_EXPORT const Handle(TColStd_HArray1OfInteger) &GetVIndices() const - { return myVInd; } + /** + * This method clears all hatchings data. + */ + void Clear(); - /** - * This method returns the array of parameters of U-isoline hatchings. - * Can be null if the object is initialized by 0 U-isolines. - * - * \return the array of U-isoline hatching parameters. - */ - Standard_EXPORT const Handle(TColStd_HArray1OfReal) &GetUParams() const - { return myUPrm; } + private: - /** - * This method returns the array of parameters of V-isoline hatchings. - * Can be null if the object is initialized by 0 V-isolines. - * - * \return the array of V-isoline hatching parameters. - */ - Standard_EXPORT const Handle(TColStd_HArray1OfReal) &GetVParams() const - { return myVPrm; } + Geom2dHatch_Hatcher myHatcher; + TopoDS_Face myFace; + Standard_Boolean myIsDone; + Standard_Real myUMin; + Standard_Real myUMax; + Standard_Real myVMin; + Standard_Real myVMax; + Handle(TColStd_HArray1OfReal) myUPrm; + Handle(TColStd_HArray1OfReal) myVPrm; + Handle(TColStd_HArray1OfInteger) myUInd; + Handle(TColStd_HArray1OfInteger) myVInd; - /** - * This method returns a hatching curve by its index. - * If the curve is not found null handle is returned. - * - * \param theHatchingIndex the hatching curve index. - */ - Standard_EXPORT const Handle(Geom2d_Curve) &GetHatching - (const Standard_Integer theHatchingIndex) const; - -protected: - - /** - * This method clears all hatchings data. - */ - void Clear(); - -private: - - Geom2dHatch_Hatcher myHatcher; - TopoDS_Face myFace; - Standard_Boolean myIsDone; - Standard_Real myUMin; - Standard_Real myUMax; - Standard_Real myVMin; - Standard_Real myVMax; - Handle(TColStd_HArray1OfReal) myUPrm; - Handle(TColStd_HArray1OfReal) myVPrm; - Handle(TColStd_HArray1OfInteger) myUInd; - Handle(TColStd_HArray1OfInteger) myVInd; - -}; + }; +} #endif diff --git a/src/GEOMUtils/GEOMUtils_XmlHandler.cxx b/src/GEOMUtils/GEOMUtils_XmlHandler.cxx new file mode 100644 index 000000000..00ad15878 --- /dev/null +++ b/src/GEOMUtils/GEOMUtils_XmlHandler.cxx @@ -0,0 +1,235 @@ +// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "GEOMUtils_XmlHandler.hxx" + +#include +#include + +//#define MYDEBUG + +namespace +{ + const char* env_var = "GEOM_PluginsList"; + + const xmlChar* root_tag = (xmlChar*)"geom-plugins"; + const xmlChar* plugin_tag = (xmlChar*)"geom-plugin"; + const xmlChar* name_tag = (xmlChar*)"name"; + const xmlChar* server_tag = (xmlChar*)"server-lib"; + const xmlChar* gui_tag = (xmlChar*)"gui-lib"; + const xmlChar* actions_tag = (xmlChar*)"actions"; + const xmlChar* action_tag = (xmlChar*)"action"; + const xmlChar* label_tag = (xmlChar*)"label"; + const xmlChar* icon_tag = (xmlChar*)"icon"; + const xmlChar* menu_tag = (xmlChar*)"menu"; + const xmlChar* tooltip_tag = (xmlChar*)"tooltip"; + const xmlChar* status_tag = (xmlChar*)"status-bar"; + const xmlChar* accel_tag = (xmlChar*)"accel"; + + std::string toUpper( const std::string& s ) + { + std::string r = s; + std::transform( r.begin(), r.end(), r.begin(), toupper ); + return r; + } + + std::string toLower( const std::string& s ) + { + std::string r = s; + std::transform( r.begin(), r.end(), r.begin(), tolower ); + return r; + } + + std::string readXmlAttribute(xmlNodePtr node, const xmlChar* attribute) + { + std::string result = ""; + xmlChar* strAttr = xmlGetProp(node, attribute); + if (strAttr != NULL) { + result = (char*)strAttr; + xmlFree(strAttr); + } + return result; + } + + std::list getPluginXMLFiles() + { + std::list xmlPaths; + +#ifdef WIN32 + std::string sep = "\\"; +#else + std::string sep = "/"; +#endif + + if ( const char* var = getenv( env_var ) ) + { + std::string plugins = var; + + std::string::size_type from = 0, pos; + while ( from < plugins.size() ) + { + pos = plugins.find( ':', from ); + std::string plugin; + if ( pos != std::string::npos ) + plugin = plugins.substr( from, pos-from ); + else + plugin = plugins.substr( from ), pos = plugins.size(); + from = pos + 1; + + if ( plugin.size() == 0 ) continue; + + std::string pluginRoot = toUpper( plugin+"_ROOT_DIR" ); + + const char* rootDirGeom = getenv( "GEOM_ROOT_DIR" ); + const char* rootDirPlugin = getenv( pluginRoot.c_str() ); + + bool fileOK = false; + if ( rootDirGeom ) { + std::string xmlPath = rootDirGeom; + if ( xmlPath[ xmlPath.size()-1 ] != sep[0] ) + xmlPath += sep; + xmlPath += "share" + sep + "salome" + sep + "resources" + sep + "geom" + sep + plugin + ".xml"; +#ifdef WIN32 + fileOK = (GetFileAttributes(xmlPath.c_str()) != INVALID_FILE_ATTRIBUTES); +#else + fileOK = (access(xmlPath.c_str(), F_OK) == 0); +#endif + if ( fileOK ) + xmlPaths.push_back( xmlPath ); + } + if ( !fileOK && rootDirPlugin ) { + std::string xmlPath = rootDirPlugin; + if ( xmlPath[ xmlPath.size()-1 ] != sep[0] ) + xmlPath += sep; + xmlPath += "share" + sep + "salome" + sep + "resources" + sep + toLower(plugin) + sep + plugin + ".xml"; +#ifdef WIN32 + fileOK = (GetFileAttributes(xmlPath.c_str()) != INVALID_FILE_ATTRIBUTES); +#else + fileOK = (access(xmlPath.c_str(), F_OK) == 0); +#endif + if ( fileOK ) + xmlPaths.push_back( xmlPath ); + } + } + } + return xmlPaths; + } + + void dumpinfo(const GEOMUtils::PluginInfo& info) + { + printf("DUMPING PLUGIN INFO\n"); + GEOMUtils::PluginInfo::const_iterator it; + for (it = info.begin(); it != info.end(); ++it) { + GEOMUtils::PluginData pdata = *it; + printf("Plugin: %s\n", pdata.name.c_str()); + printf(" serverLib = %s\n", pdata.serverLib.c_str()); + printf(" clientLib = %s\n", pdata.clientLib.c_str()); + printf(" actions:\n"); + std::list::const_iterator ait; + for (ait = pdata.actions.begin(); ait != pdata.actions.end(); ++ait) { + GEOMUtils::ActionData adata = *ait; + printf(" label = %s\n", adata.label.c_str()); + printf(" icon = %s\n", adata.icon.c_str()); + printf(" menuText = %s\n", adata.menuText.c_str()); + printf(" toolTip = %s\n", adata.toolTip.c_str()); + printf(" statusText = %s\n", adata.statusText.c_str()); + printf("\n"); + } + printf("-----\n"); + } + } +} + +namespace GEOMUtils +{ + PluginInfo ReadPluginInfo() + { + PluginInfo info; + + std::list xmlPaths = getPluginXMLFiles(); + + std::list::const_iterator fit; + + for ( fit = xmlPaths.begin(); fit != xmlPaths.end(); ++fit ) + { + std::string fileName = *fit; + + int options = XML_PARSE_HUGE | XML_PARSE_NOCDATA; + xmlDocPtr doc = xmlReadFile( fileName.c_str(), NULL, options ); + + if ( doc ) + { + // get root node + xmlNodePtr root = xmlDocGetRootElement(doc); + + // check if it is plugins container node + if (xmlStrcmp(root->name, root_tag) == 0) + { + // iterate through children, to get plugins data + for (xmlNodePtr node = root->children; node; node = node->next) + { + if (xmlStrcmp(node->name, plugin_tag) == 0) + { + // plugin node + PluginData data; + data.name = readXmlAttribute(node, name_tag); + data.serverLib = readXmlAttribute(node, server_tag); + data.clientLib = readXmlAttribute(node, gui_tag); + // iterate through children, to find actions container node + for (xmlNodePtr subnode = node->children; subnode; subnode = subnode->next) + { + if (xmlStrcmp(subnode->name, actions_tag) == 0) + { + // actions container node + // iterate through children, to get actions data + for (xmlNodePtr subsubnode = subnode->children; subsubnode; subsubnode = subsubnode->next) + { + if (xmlStrcmp(subsubnode->name, action_tag) == 0) + { + // action node + ActionData action; + action.label = readXmlAttribute(subsubnode, label_tag); + action.icon = readXmlAttribute(subsubnode, icon_tag); + action.menuText = readXmlAttribute(subsubnode, menu_tag); + action.toolTip = readXmlAttribute(subsubnode, tooltip_tag); + action.statusText = readXmlAttribute(subsubnode, status_tag); + action.accel = readXmlAttribute(subsubnode, accel_tag); + if (action.label != "") + data.actions.push_back(action); + } // end action node + } // end iteration through actions container node children + } // end actions container node + } // end iterations through plugin node children + + if (data.name != "") + info.push_back(data); + } // end plugin node + } // end iterations through plugins container node children + } // end root node + + xmlFreeDoc(doc); + xmlCleanupParser(); + } // end xml doc + } +#ifdef MYDEBUG + dumpinfo(info); +#endif + return info; + } +} diff --git a/src/GEOMUtils/GEOMUtils_XmlHandler.hxx b/src/GEOMUtils/GEOMUtils_XmlHandler.hxx new file mode 100644 index 000000000..e5952cff0 --- /dev/null +++ b/src/GEOMUtils/GEOMUtils_XmlHandler.hxx @@ -0,0 +1,56 @@ +// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include + +#ifndef _GEOMUtils_XmlHandler_HXX_ +#define _GEOMUtils_XmlHandler_HXX_ + +#include +#include + +namespace GEOMUtils +{ + //! Plugin action data + struct ActionData + { + std::string label; //!< unique ID + std::string icon; //!< icon + std::string menuText; //!< menu text + std::string toolTip; //!< tooltip + std::string statusText; //!< status bar text + std::string accel; //!< shortcut + }; + + //! Plugin data + struct PluginData + { + std::string name; //!< plugin name + std::string serverLib; //!< engine library + std::string clientLib; //!< GUI library + std::list actions; //!< actions + }; + + //! Plugins information + typedef std::list PluginInfo; + + PluginInfo ReadPluginInfo(); +} + +#endif // _GEOMUtils_XmlHandler_HXX_ diff --git a/src/GEOM_I/CMakeLists.txt b/src/GEOM_I/CMakeLists.txt index ca49d2aca..d916ffe60 100755 --- a/src/GEOM_I/CMakeLists.txt +++ b/src/GEOM_I/CMakeLists.txt @@ -29,7 +29,6 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOM ${PROJECT_SOURCE_DIR}/src/GEOMAlgo ${PROJECT_SOURCE_DIR}/src/GEOMUtils - ${PROJECT_SOURCE_DIR}/src/XAO ${PROJECT_BINARY_DIR}/idl ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_BINARY_DIR} @@ -45,6 +44,7 @@ ADD_DEFINITIONS( # libraries to link to SET(_link_LIBRARIES GEOMImpl + GEOMUtils SalomeIDLGEOM ${KERNEL_SALOMELocalTrace} ${KERNEL_SalomeGenericObj} @@ -56,6 +56,8 @@ SET(_link_LIBRARIES # --- headers --- SET(GEOMEngine_HEADERS + GEOM_IFieldOperations_i.hh + GEOM_BaseObject_i.hh GEOM_Object_i.hh GEOM_IOperations_i.hh GEOM_IBasicOperations_i.hh diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index a764d3aeb..8069f40fe 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -44,6 +44,7 @@ #include "GEOMImpl_CopyDriver.hxx" #include "GEOMImpl_IInsertOperations.hxx" #include "GEOM_wrap.hxx" +#include "GEOMUtils_XmlHandler.hxx" // Cascade headers #include @@ -121,6 +122,18 @@ GEOM_Gen_i::GEOM_Gen_i(CORBA::ORB_ptr orb, #endif OSD::SetSignal( raiseFPE ); } + + GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo(); + GEOMUtils::PluginInfo::const_iterator it; + for (it = plugins.begin(); it != plugins.end(); ++it) + { + try { + LoadPlugin((*it).serverLib); + } + catch (...) { + MESSAGE("Warning: can't load plugin library " << (*it).serverLib); + } + } } //============================================================================ @@ -303,7 +316,26 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, } else if ( mytype == GEOM_MARKER ) { aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_LCS"); aNamePrefix = "LocalCS_"; - } else if ( mytype > ADVANCED_BASE ) { + } else if ( mytype >= USER_TYPE_EX ) { + char buf[20]; + sprintf( buf, "%d", aBaseObj->GetType() ); + GEOM::CreationInformation_var info = aBaseObj->GetCreationInformation(); + std::string plgId; + for ( size_t i = 0; i < info->params.length(); ++i ) { + std::string param_name = info->params[i].name.in(); + std::string param_value = info->params[i].value.in(); + if( param_name == PLUGIN_NAME) { + plgId = param_value; + break; + } + } + if(plgId.length() > 0 ) { + plgId += "::"; + } + plgId +="ICON_OBJBROWSER_"; + plgId += buf; + aResultSO->SetAttrString("AttributePixMap",plgId.c_str()); + } else if ( mytype > USER_TYPE ) { char buf[20]; sprintf( buf, "%d", aBaseObj->GetType() ); std::string advId = "ICON_OBJBROWSER_ADVANCED_"; advId += buf; @@ -2404,6 +2436,40 @@ GEOM::GEOM_IFieldOperations_ptr GEOM_Gen_i::GetIFieldOperations(CORBA::Long theS GEOM::GEOM_IOperations_ptr GEOM_Gen_i::GetPluginOperations(CORBA::Long theStudyID, const char* theLibName) throw ( SALOME::SALOME_Exception ) +{ + Unexpect aCatch(SALOME_SalomeException); + MESSAGE( "GEOM_Gen_i::GetPluginOperations" ); + + GEOM::GEOM_Gen_ptr engine = _this(); + + GEOM::GEOM_IOperations_var operations; + + std::string aLibName = theLibName; + + try { + // load plugin library + LoadPlugin(aLibName); + // create a new operations object, store its ref. in engine + if ( myOpCreatorMap.find(aLibName) != myOpCreatorMap.end() ) { + GEOM_IOperations_i* aServant = 0; + aServant = myOpCreatorMap[aLibName]->Create(_poa, theStudyID, engine, _impl); + // activate the CORBA servant + if (aServant) + operations = aServant->_this(); + } + } + catch (SALOME_Exception& S_ex) { + THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); + } + + return operations._retn(); +} + +//============================================================================ +// function : LoadPlugin +// purpose : load plugin library and retrieve an instance of operations creator +//============================================================================ +void GEOM_Gen_i::LoadPlugin(const std::string& theLibName) { std::string aPlatformLibName; #ifdef WIN32 @@ -2414,63 +2480,39 @@ GEOM::GEOM_IOperations_ptr GEOM_Gen_i::GetPluginOperations(CORBA::Long theStudyI aPlatformLibName += theLibName; aPlatformLibName += ".so"; #endif - - Unexpect aCatch(SALOME_SalomeException); - MESSAGE( "GEOM_Gen_i::GetPluginOperations" ); - - GEOM::GEOM_Gen_ptr engine = _this(); - - GEOM_IOperations_i* aServant = 0; - GEOM::GEOM_IOperations_var operations; - - try { - // check, if corresponding operations are already created - if (myOpCreatorMap.find(std::string(theLibName)) == myOpCreatorMap.end()) { - // load plugin library - LibHandle libHandle = LoadLib( aPlatformLibName.c_str()/*theLibName*/ ); - if (!libHandle) { - // report any error, if occured + + // check, if corresponding operations are already created + if (myOpCreatorMap.find(theLibName) == myOpCreatorMap.end()) { + // load plugin library + LibHandle libHandle = LoadLib( aPlatformLibName.c_str() ); + if (!libHandle) { + // report any error, if occured #ifndef WIN32 - const char* anError = dlerror(); - throw(SALOME_Exception(anError)); + throw(SALOME_Exception(dlerror())); #else - throw(SALOME_Exception(LOCALIZED( "Can't load server geometry plugin library" ))); + throw(SALOME_Exception(LOCALIZED( "Can't load server geometry plugin library" ))); #endif - } - - // get method, returning operations creator - typedef GEOM_GenericOperationsCreator* (*GetOperationsCreator)(); - GetOperationsCreator procHandle = - (GetOperationsCreator)GetProc( libHandle, "GetOperationsCreator" ); - if (!procHandle) { - throw(SALOME_Exception(LOCALIZED("bad geometry plugin library"))); - UnLoadLib(libHandle); - } - - // get operations creator - GEOM_GenericOperationsCreator* aCreator = procHandle(); - if (!aCreator) { - throw(SALOME_Exception(LOCALIZED("bad geometry plugin library implementation"))); - } - - // map operations creator to a plugin name - myOpCreatorMap[std::string(theLibName)] = aCreator; } - - // create a new operations object, store its ref. in engine - aServant = myOpCreatorMap[std::string(theLibName)]->Create(_poa, theStudyID, engine, _impl); - //??? aServant->SetLibName(aPlatformLibName/*theLibName*/); // for persistency assurance + + // get method, returning operations creator + typedef GEOM_GenericOperationsCreator* (*GetOperationsCreator)(); + GetOperationsCreator procHandle = + (GetOperationsCreator)GetProc( libHandle, "GetOperationsCreator" ); + if (!procHandle) { + UnLoadLib(libHandle); + throw(SALOME_Exception(LOCALIZED("bad geometry plugin library"))); + } + + // get operations creator + GEOM_GenericOperationsCreator* aCreator = procHandle(); + if (aCreator) { + // map operations creator to a plugin name + myOpCreatorMap[theLibName] = aCreator; + } + else { + throw(SALOME_Exception(LOCALIZED("bad geometry plugin library implementation"))); + } } - catch (SALOME_Exception& S_ex) { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - - if (!aServant) - return operations._retn(); - - // activate the CORBA servant - operations = GEOM::GEOM_IOperations::_narrow( aServant->_this() ); - return operations._retn(); } //============================================================================= @@ -2925,30 +2967,26 @@ Engines::ListOfIdentifiers* GEOM_Gen_i::importData( aFile.write(aBuffer, aFileStream->length()); aFile.close(); - GEOM::GEOM_Object_var aShapeObj; - GEOM::ListOfGO_var aSubShape = new GEOM::ListOfGO; - GEOM::ListOfGO_var aGroups = new GEOM::ListOfGO; - GEOM::ListOfFields_var aFields = new GEOM::ListOfFields; + GEOM::ListOfGO_var aObjects = aInsOp->ImportFile(aFullPath.c_str(), "XAO"); - CORBA::Boolean isResultOK = aInsOp->ImportXAO(aFullPath.c_str(), aShapeObj.out(), aSubShape.out(), aGroups.out(), aFields.out()); - - if ( isResultOK && !aShapeObj->_is_nil() && aInsOp->IsDone() ) { - SALOMEDS::SObject_var aSO = PublishInStudy(aStudy, SALOMEDS::SObject::_nil(), aShapeObj, aShapeObj->GetName()); - aResult->length(aGroups->length() + 1); - aResult[0] = aSO->GetID(); // unioque identifer of the object in GEOM is entry of SObject - //Iteration for objects of the group. - for (int i = 0; i < aGroups->length(); i++) { - SALOMEDS::SObject_var aSOChild = AddInStudy(aStudy, aGroups[i], aGroups[i]->GetName(), aShapeObj); - aResult[i+1] = aSOChild->GetID(); + if ( aObjects->length() > 0 && aInsOp->IsDone() ) { + aResult->length(aObjects->length()); + // publish main object (first in the list of returned geom objects) + CORBA::String_var aName = aObjects[0]->GetName(); + SALOMEDS::SObject_var aSO = PublishInStudy(aStudy.in(), SALOMEDS::SObject::_nil(), aObjects[0].in(), aName.in()); + aResult[0] = aSO->GetID(); + // publish groups && fields + for (int i = 1; i < aObjects->length(); i++ ) { + aName = aObjects[i]->GetName(); + aSO = AddInStudy(aStudy.in(), aObjects[0].in(), aName.in(), aObjects[0].in()); + aResult[i] = aSO->GetID(); } } else { - if (aShapeObj->_is_nil()) - MESSAGE("Result of the import operation is incorrect for file "<length() == 0) + MESSAGE("ImportXAO operation is failed for file "<IsDone()) MESSAGE("Import operation is not done for file "<Resolve("/myStudyManager"); SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow( aSMObject ); + if (CORBA::is_nil(aStudyManager)) + return aResult._retn(); SALOMEDS::Study_var aStudy = aStudyManager->GetStudyByID( studyId ); + if (CORBA::is_nil(aStudy)) + return aResult._retn(); SALOMEDS::SComponent_var aComponent = aStudy->FindComponent("GEOM"); if (CORBA::is_nil(aComponent)) return aResult._retn(); SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(aComponent); // check only published shapes - GEOM::GEOM_Object_var shapeObj; - GEOM::ListOfGO_var groups = new GEOM::ListOfGO; - GEOM::ListOfFields_var fields = new GEOM::ListOfFields; - std::string anAuthorName = "SIMAN Author"; - - GEOM::GEOM_IShapesOperations_var aShapesOp = GetIShapesOperations(aStudy->StudyId()); - GEOM::GEOM_IInsertOperations_var aInsOp = GetIInsertOperations(aStudy->StudyId()); + GEOM::GEOM_IInsertOperations_var aInsOp = GetIInsertOperations(aStudy->StudyId()); + if (aInsOp->_is_nil()) { + MESSAGE("No insert operations!"); + return aResult._retn(); + } - int aSeqLength = 0; // the sequence length + GEOM::GEOM_Object_var shapeObj; + for(; anIter->More(); anIter->Next()) { SALOMEDS::SObject_var aSO = anIter->Value(); SALOMEDS::SObject_var aRefSO; @@ -3006,13 +3047,7 @@ Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId) GEOM::shape_type aCORBAShapeType = aCORBAMainShape->GetShapeType(); if (!aMainShape.IsNull() && !(aCORBAShapeType == GEOM::VERTEX) && !(aCORBAShapeType == GEOM::EDGE)) { - aSeqLength++; shapeObj = aCORBAMainShape; - if (aShapesOp->_is_nil()) { - MESSAGE("No shapes operations!"); - return aResult._retn(); - } - groups = aShapesOp->GetExistingSubObjects(aCORBAMainShape, true); break; } } @@ -3020,19 +3055,12 @@ Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId) } } - if (aInsOp->_is_nil()) { - MESSAGE("No insert operations!"); - return aResult._retn(); - } - - if (aSeqLength > 0) { // Shape is correct, write it to the temporary file - - std::string aFullXaoPath = Kernel_Utils::GetTmpFileName() + ".xao"; - CORBA::Boolean isResultOK = aInsOp->ExportXAO(shapeObj.in(), groups.in(), fields.in(), anAuthorName.c_str(), aFullXaoPath.c_str()); - + if (!CORBA::is_nil(shapeObj)) { // Shape is correct, write it to the temporary file + std::string aPath = Kernel_Utils::GetTmpFileName() + ".xao"; + aInsOp->Export(shapeObj.in(), aPath.c_str(), "XAO"); aResult->length(1); Engines::DataContainer_var aData = (new Engines_DataContainer_i( - aFullXaoPath.c_str(), "", "", true))->_this(); + aPath.c_str(), "", "", true))->_this(); aResult[0] = aData; } else { MESSAGE("No shapes to export"); diff --git a/src/GEOM_I/GEOM_Gen_i.hh b/src/GEOM_I/GEOM_Gen_i.hh index 5a2c0382b..5af305551 100644 --- a/src/GEOM_I/GEOM_Gen_i.hh +++ b/src/GEOM_I/GEOM_Gen_i.hh @@ -404,6 +404,8 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi std::set& aChildren, std::set& anOthers); + void LoadPlugin(const std::string& theLibName); + private: ::GEOMImpl_Gen* _impl; diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.cc b/src/GEOM_I/GEOM_IInsertOperations_i.cc index 3d8f79751..476e29ad7 100644 --- a/src/GEOM_I/GEOM_IInsertOperations_i.cc +++ b/src/GEOM_I/GEOM_IInsertOperations_i.cc @@ -113,11 +113,7 @@ void GEOM_IInsertOperations_i::Export if (anOriginal.IsNull()) return; //Export the shape to the file - char* aFileName = strdup(theFileName); - char* aFormatName = strdup(theFormatName); - GetOperations()->Export(anOriginal, aFileName, aFormatName); - free(aFileName); - free(aFormatName); + GetOperations()->Export(anOriginal, theFileName, theFormatName); } //============================================================================= @@ -135,18 +131,7 @@ GEOM::ListOfGO* GEOM_IInsertOperations_i::ImportFile GetOperations()->SetNotDone(); //Import the shape from the file - char* aFileName = strdup(theFileName); - char* aFormatName = strdup(theFormatName); - Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->Import(aFileName, aFormatName); - - if( strcmp(aFormatName,"IGES_UNIT")==0 && !aHSeq.IsNull() ) { - free(aFileName); - free(aFormatName); - return aSeq._retn(); - } - - free(aFileName); - free(aFormatName); + Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->Import(theFileName, theFormatName); if (!GetOperations()->IsDone() || aHSeq.IsNull()) { return aSeq._retn(); @@ -156,10 +141,8 @@ GEOM::ListOfGO* GEOM_IInsertOperations_i::ImportFile Standard_Integer aLength = aHSeq->Length(); aSeq->length(aLength); - - for (Standard_Integer i = 1; i <= aLength; i++) { + for (Standard_Integer i = 1; i <= aLength; i++) aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i))); - } return aSeq._retn(); } @@ -176,90 +159,12 @@ char* GEOM_IInsertOperations_i::ReadValue(const char* theFileName, //Set a not done flag GetOperations()->SetNotDone(); - char* aFileName = strdup(theFileName); - char* aFormatName = strdup(theFormatName); - char* aParameterName = strdup(theParameterName); - TCollection_AsciiString aUnits = GetOperations()->ReadValue - (aFileName, aFormatName, aParameterName); - - free(aFileName); - free(aFormatName); - free(aParameterName); + (theFileName, theFormatName, theParameterName); return CORBA::string_dup(aUnits.ToCString()); } -//============================================================================= -/*! - * ImportTranslators - */ -//============================================================================= -void GEOM_IInsertOperations_i::ImportTranslators - (GEOM::string_array_out theFormats, GEOM::string_array_out thePatterns) -{ - // allocate the CORBA arrays - GEOM::string_array_var aFormatsArray = new GEOM::string_array(); - GEOM::string_array_var aPatternsArray = new GEOM::string_array(); - - // Get sequences of available formats - Handle(TColStd_HSequenceOfAsciiString) aFormats = new TColStd_HSequenceOfAsciiString; - Handle(TColStd_HSequenceOfAsciiString) aPatterns = new TColStd_HSequenceOfAsciiString; - if (GetOperations()->ImportTranslators(aFormats, aPatterns)) { - const int formSize = aFormats->Length(); - if (formSize == aPatterns->Length()) { - aFormatsArray->length(formSize); - aPatternsArray->length(formSize); - - // fill the local CORBA arrays with values from sequences - CORBA::Long i = 1; - for (; i <= formSize; i++) { - aFormatsArray[i-1] = CORBA::string_dup(aFormats->Value(i).ToCString()); - aPatternsArray[i-1] = CORBA::string_dup(aPatterns->Value(i).ToCString()); - } - } - } - - // initialize out-parameters with local arrays - theFormats = aFormatsArray._retn(); - thePatterns = aPatternsArray._retn(); -} - -//============================================================================= -/*! - * ExportTranslators - */ -//============================================================================= -void GEOM_IInsertOperations_i::ExportTranslators - (GEOM::string_array_out theFormats, GEOM::string_array_out thePatterns) -{ - // allocate the CORBA arrays - GEOM::string_array_var aFormatsArray = new GEOM::string_array(); - GEOM::string_array_var aPatternsArray = new GEOM::string_array(); - - // Get sequences of available formats - Handle(TColStd_HSequenceOfAsciiString) aFormats = new TColStd_HSequenceOfAsciiString; - Handle(TColStd_HSequenceOfAsciiString) aPatterns = new TColStd_HSequenceOfAsciiString; - if (GetOperations()->ExportTranslators(aFormats, aPatterns)) { - const int formSize = aFormats->Length(); - if (formSize == aPatterns->Length()) { - aFormatsArray->length(formSize); - aPatternsArray->length(formSize); - - // fill the local CORBA arrays with values from sequences - CORBA::Long i = 1; - for (; i <= formSize; i++) { - aFormatsArray[i-1] = CORBA::string_dup(aFormats->Value(i).ToCString()); - aPatternsArray[i-1] = CORBA::string_dup(aPatterns->Value(i).ToCString()); - } - } - } - - // initialize out-parameters with local arrays - theFormats = aFormatsArray._retn(); - thePatterns = aPatternsArray._retn(); -} - //============================================================================= /*! * RestoreShape @@ -370,121 +275,4 @@ GEOM::ListOfLong* GEOM_IInsertOperations_i::GetAllTextures() return anIDs._retn(); } -//============================================================================= -/*! - * Export a shape to XAO format - * \param shape The shape to export - * \param groups The list of groups to export - * \param fields The list of fields to export - * \param author The author of the export - * \param fileName The name of the exported file - * \return boolean indicating if export was succeful. - */ -//============================================================================= -CORBA::Boolean GEOM_IInsertOperations_i::ExportXAO(GEOM::GEOM_Object_ptr shape, - const GEOM::ListOfGO& groups, - const GEOM::ListOfFields& fields, - const char* author, - const char* fileName) -{ - bool isGood = false; - // Set a not done flag - GetOperations()->SetNotDone(); - - // Get the reference shape - Handle(GEOM_Object) reference = GetObjectImpl(shape); - - // Get the reference groups - int ind = 0; - std::list groupsObj; - for (; ind < groups.length(); ind++) - { - Handle(GEOM_Object) gobj = GetObjectImpl(groups[ind]); - if (gobj.IsNull()) return false; - groupsObj.push_back(gobj); - } - // Get the reference fields - ind = 0; - std::list fieldsObj; - for (; ind < fields.length(); ind++) - { - Handle(GEOM_Field) fobj = Handle(GEOM_Field)::DownCast(GetBaseObjectImpl(fields[ind])); - if (fobj.IsNull()) return false; - fieldsObj.push_back(fobj); - } - - if (!reference.IsNull()) - { - // Export XAO - isGood = GetOperations()->ExportXAO(reference, groupsObj, fieldsObj, author, fileName); - } - - return isGood; -} - -//============================================================================= -/*! - * Import a shape from XAO format - * \param fileName The name of the file to import - * \param shape The imported shape - * \param subShapes The list of imported subShapes - * \param groups The list of imported groups - * \param fields The list of imported fields - * \return boolean indicating if import was succeful. - */ -//============================================================================= -CORBA::Boolean GEOM_IInsertOperations_i::ImportXAO(const char* fileName, - GEOM::GEOM_Object_out shape, - GEOM::ListOfGO_out subShapes, - GEOM::ListOfGO_out groups, - GEOM::ListOfFields_out fields) -{ - GEOM::GEOM_Object_var vshape; - shape = vshape._retn(); - - subShapes = new GEOM::ListOfGO; - groups = new GEOM::ListOfGO; - fields = new GEOM::ListOfFields; - - // Set a not done flag - GetOperations()->SetNotDone(); - - Handle(TColStd_HSequenceOfTransient) importedSubShapes = new TColStd_HSequenceOfTransient(); - Handle(TColStd_HSequenceOfTransient) importedGroups = new TColStd_HSequenceOfTransient(); - Handle(TColStd_HSequenceOfTransient) importedFields = new TColStd_HSequenceOfTransient(); - Handle(GEOM_Object) hshape; - bool res = GetOperations()->ImportXAO(fileName, hshape, importedSubShapes, importedGroups, importedFields); - - if (!GetOperations()->IsDone() || !res) - return false; - - // parse fields - int n = importedSubShapes->Length(); - subShapes->length(n); - for (int i = 1; i <= n; i++) - { - (*subShapes)[i - 1] = GetObject(Handle(GEOM_Object)::DownCast(importedSubShapes->Value(i))); - } - - // parse groups - n = importedGroups->Length(); - groups->length(n); - for (int i = 1; i <= n; i++) - { - (*groups)[i - 1] = GetObject(Handle(GEOM_Object)::DownCast(importedGroups->Value(i))); - } - - // parse fields - n = importedFields->Length(); - fields->length(n); - for (int i = 1; i <= n; i++) - { - (*fields)[i - 1] = GEOM::GEOM_Field::_narrow( - GetBaseObject(Handle(GEOM_Field)::DownCast(importedFields->Value(i)))); - } - - shape = GetObject(hshape); - - return res; -} diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.hh b/src/GEOM_I/GEOM_IInsertOperations_i.hh index d36e0446d..e06ffa08e 100644 --- a/src/GEOM_I/GEOM_IInsertOperations_i.hh +++ b/src/GEOM_I/GEOM_IInsertOperations_i.hh @@ -56,12 +56,6 @@ class GEOM_I_EXPORT GEOM_IInsertOperations_i : const char* theFormatName, const char* theParameterName); - void ImportTranslators (GEOM::string_array_out theFormats, - GEOM::string_array_out thePatterns); - - void ExportTranslators (GEOM::string_array_out theFormats, - GEOM::string_array_out thePatterns); - GEOM::GEOM_Object_ptr RestoreShape (const SALOMEDS::TMPFile& theStream); CORBA::Long LoadTexture(const char* theTextureFile); @@ -73,18 +67,6 @@ class GEOM_I_EXPORT GEOM_IInsertOperations_i : GEOM::ListOfLong* GetAllTextures(); - CORBA::Boolean ExportXAO (GEOM::GEOM_Object_ptr shape, - const GEOM::ListOfGO& groups, - const GEOM::ListOfFields& fields, - const char* author, - const char* fileName); - - CORBA::Boolean ImportXAO (const char* fileName, - GEOM::GEOM_Object_out shape, - GEOM::ListOfGO_out subShapes, - GEOM::ListOfGO_out groups, - GEOM::ListOfFields_out fields); - ::GEOMImpl_IInsertOperations* GetOperations() { return (::GEOMImpl_IInsertOperations*)GetImpl(); } }; diff --git a/src/GEOM_I/GEOM_wrap.hxx b/src/GEOM_I/GEOM_wrap.hxx index 181e7b18f..d4d99f776 100644 --- a/src/GEOM_I/GEOM_wrap.hxx +++ b/src/GEOM_I/GEOM_wrap.hxx @@ -60,7 +60,6 @@ namespace GEOM class GEOM_IInsertOperations; class GEOM_IMeasureOperations; class GEOM_IGroupOperations; - class GEOM_IAdvancedOperations; class GEOM_IFieldOperations; typedef SALOME::GenericObj_wrap< GEOM_IBasicOperations > GEOM_IBasicOperations_wrap; typedef SALOME::GenericObj_wrap< GEOM_ITransformOperations> GEOM_ITransformOperations_wrap; @@ -74,7 +73,6 @@ namespace GEOM typedef SALOME::GenericObj_wrap< GEOM_IInsertOperations > GEOM_IInsertOperations_wrap; typedef SALOME::GenericObj_wrap< GEOM_IMeasureOperations > GEOM_IMeasureOperations_wrap; typedef SALOME::GenericObj_wrap< GEOM_IGroupOperations > GEOM_IGroupOperations_wrap; - typedef SALOME::GenericObj_wrap< GEOM_IAdvancedOperations > GEOM_IAdvancedOperations_wrap; typedef SALOME::GenericObj_wrap< GEOM_IFieldOperations > GEOM_IFieldOperations_wrap; } diff --git a/src/GEOM_I_Superv/CMakeLists.txt b/src/GEOM_I_Superv/CMakeLists.txt index 6fe8abeac..0d5323d4d 100755 --- a/src/GEOM_I_Superv/CMakeLists.txt +++ b/src/GEOM_I_Superv/CMakeLists.txt @@ -37,6 +37,14 @@ ADD_DEFINITIONS( # libraries to link to SET(_link_LIBRARIES SalomeIDLGEOM + SalomeIDLGEOMSuperv + SalomeIDLAdvancedGEOM + SalomeIDLBREPPlugin + SalomeIDLIGESPlugin + SalomeIDLSTEPPlugin + SalomeIDLSTLPlugin + SalomeIDLVTKPlugin + SalomeIDLXAOPlugin ${KERNEL_SALOMELocalTrace} ${KERNEL_SalomeDSClient} ${KERNEL_SalomeLifeCycleCORBA} diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index de9ef8b3d..9070d8e9b 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -394,13 +394,108 @@ void GEOM_Superv_i::getAdvancedOp() { if (CORBA::is_nil(myGeomEngine)) setGeomEngine(); - // get GEOM_IAdvancedOperations interface + // get GEOM::IAdvancedOperations interface if (CORBA::is_nil(myAdvancedOp) || isNewStudy(myLastStudyID,myStudyID)) { //rnv: to fix bug "IPAL22461 6.3.0: Incorrect study storage if study contains shape modified with YACS" // Try to get id of the study from the SALOME Session if(myStudyID < 0 ) SetStudyID(-1); - //myAdvancedOp = myGeomEngine->GetIAdvancedOperations(myStudyID); - myAdvancedOp = GEOM::GEOM_IAdvancedOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "AdvancedEngine")); + myAdvancedOp = GEOM::IAdvancedOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "AdvancedEngine")); + } +} + +//============================================================================= +// getSTLPluginOp: +//============================================================================= +void GEOM_Superv_i::getSTLPluginOp() +{ + if (CORBA::is_nil(myGeomEngine)) + setGeomEngine(); + // get GEOM::ISTLOperations interface + if (CORBA::is_nil(mySTLOp) || isNewStudy(myLastStudyID,myStudyID)) { + //rnv: to fix bug "IPAL22461 6.3.0: Incorrect study storage if study contains shape modified with YACS" + // Try to get id of the study from the SALOME Session + if(myStudyID < 0 ) SetStudyID(-1); + mySTLOp = GEOM::ISTLOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "STLPluginEngine")); + } +} + +//============================================================================= +// getBREPPluginOp: +//============================================================================= +void GEOM_Superv_i::getBREPPluginOp() +{ + if (CORBA::is_nil(myGeomEngine)) + setGeomEngine(); + // get GEOM:IBREPOperations interface + if (CORBA::is_nil(myBREPOp) || isNewStudy(myLastStudyID,myStudyID)) { + //rnv: to fix bug "IPAL22461 6.3.0: Incorrect study storage if study contains shape modified with YACS" + // Try to get id of the study from the SALOME Session + if(myStudyID < 0 ) SetStudyID(-1); + myBREPOp = GEOM::IBREPOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "BREPPluginEngine")); + } +} + +//============================================================================= +// getSTEPPluginOp: +//============================================================================= +void GEOM_Superv_i::getSTEPPluginOp() +{ + if (CORBA::is_nil(myGeomEngine)) + setGeomEngine(); + // get GEOM::ISTEPOperations interface + if (CORBA::is_nil(mySTEPOp) || isNewStudy(myLastStudyID,myStudyID)) { + //rnv: to fix bug "IPAL22461 6.3.0: Incorrect study storage if study contains shape modified with YACS" + // Try to get id of the study from the SALOME Session + if(myStudyID < 0 ) SetStudyID(-1); + mySTEPOp = GEOM::ISTEPOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "STEPPluginEngine")); + } +} + +//============================================================================= +// getIGESPluginOp: +//============================================================================= +void GEOM_Superv_i::getIGESPluginOp() +{ + if (CORBA::is_nil(myGeomEngine)) + setGeomEngine(); + // get GEOM::IIGESOperations interface + if (CORBA::is_nil(myIGESOp) || isNewStudy(myLastStudyID,myStudyID)) { + //rnv: to fix bug "IPAL22461 6.3.0: Incorrect study storage if study contains shape modified with YACS" + // Try to get id of the study from the SALOME Session + if(myStudyID < 0 ) SetStudyID(-1); + myIGESOp = GEOM::IIGESOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "IGESPluginEngine")); + } +} + +//============================================================================= +// getXAOPluginOp: +//============================================================================= +void GEOM_Superv_i::getXAOPluginOp() +{ + if (CORBA::is_nil(myGeomEngine)) + setGeomEngine(); + // get GEOM::IXAOOperations interface + if (CORBA::is_nil(myXAOOp) || isNewStudy(myLastStudyID,myStudyID)) { + //rnv: to fix bug "IPAL22461 6.3.0: Incorrect study storage if study contains shape modified with YACS" + // Try to get id of the study from the SALOME Session + if(myStudyID < 0 ) SetStudyID(-1); + myXAOOp = GEOM::IXAOOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "XAOPluginEngine")); + } +} + +//============================================================================= +// getVTKPluginOp: +//============================================================================= +void GEOM_Superv_i::getVTKPluginOp() +{ + if (CORBA::is_nil(myGeomEngine)) + setGeomEngine(); + // get GEOM::IVTKOperations interface + if (CORBA::is_nil(myVTKOp) || isNewStudy(myLastStudyID,myStudyID)) { + //rnv: to fix bug "IPAL22461 6.3.0: Incorrect study storage if study contains shape modified with YACS" + // Try to get id of the study from the SALOME Session + if(myStudyID < 0 ) SetStudyID(-1); + myVTKOp = GEOM::IVTKOperations::_narrow(myGeomEngine->GetPluginOperations(myStudyID, "VTKPluginEngine")); } } @@ -1631,32 +1726,6 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::ImportFile (const char* theFileName, return anObj; } -//============================================================================= -// ImportTranslators: -//============================================================================= -void GEOM_Superv_i::ImportTranslators (GEOM::string_array_out theFormats, - GEOM::string_array_out thePatterns) -{ - beginService( " GEOM_Superv_i::ImportTranslators" ); - MESSAGE("GEOM_Superv_i::ImportTranslators"); - getInsOp(); - myInsOp->ImportTranslators(theFormats, thePatterns); - endService( " GEOM_Superv_i::ImportTranslators" ); -} - -//============================================================================= -// ExportTranslators: -//============================================================================= -void GEOM_Superv_i::ExportTranslators (GEOM::string_array_out theFormats, - GEOM::string_array_out thePatterns) -{ - beginService( " GEOM_Superv_i::ExportTranslators" ); - MESSAGE("GEOM_Superv_i::ExportTranslators"); - getInsOp(); - myInsOp->ExportTranslators(theFormats, thePatterns); - endService( " GEOM_Superv_i::ExportTranslators" ); -} - //============================= TransformOperations =========================== //============================================================================= // TranslateTwoPoints: @@ -3367,30 +3436,183 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::GetObjects (GEOM::GEOM_Object_ptr theGroup) return aListPtr->_this(); } +//=============================== Import/Export Operations ============================= //============================================================================= -// ExportXAO +// Export STL //============================================================================= -CORBA::Boolean GEOM_Superv_i::ExportXAO (GEOM::GEOM_Object_ptr shape, - const GEOM::ListOfGO& groups, const GEOM::ListOfFields& fields, - const char* author, const char* fileName) +void GEOM_Superv_i::ExportSTL( GEOM::GEOM_Object_ptr theObject, + const char* theFileName, + const bool theIsASCII, + CORBA::Double theDeflection, + const bool theIsRelative ) +{ + beginService( " GEOM_Superv_i::ExportSTL" ); + MESSAGE("GEOM_Superv_i::ExportSTL"); + getSTLPluginOp(); + mySTLOp->ExportSTL( theObject, theFileName, theIsASCII, theDeflection, theIsRelative ); + endService( " GEOM_Superv_i::ExportSTL" ); +} + +//============================================================================= +// Import STL +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::ImportSTL( const char* theFileName ) +{ + beginService( " GEOM_Superv_i::ImportSTL" ); + MESSAGE("GEOM_Superv_i::ImportSTL"); + getSTLPluginOp(); + GEOM::ListOfGO* aSeq = mySTLOp->ImportSTL(theFileName ); + GEOM::GEOM_Object_ptr anObj; + + if (aSeq->length() > 0) { + anObj = aSeq->operator[](0); + } + + endService( " GEOM_Superv_i::ImportSTL" ); + return anObj; +} + +//============================================================================= +// Export BREP +//============================================================================= +void GEOM_Superv_i::ExportBREP( GEOM::GEOM_Object_ptr theObject, + const char* theFileName ) +{ + beginService( " GEOM_Superv_i::ExportBREP" ); + MESSAGE("GEOM_Superv_i::ExportBREP"); + getBREPPluginOp(); + myBREPOp->ExportBREP( theObject, theFileName ); + endService( " GEOM_Superv_i::ExportBREP" ); +} + +//============================================================================= +// Import BREP +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::ImportBREP( const char* theFileName ) +{ + beginService( " GEOM_Superv_i::ImportBREP" ); + MESSAGE("GEOM_Superv_i::ImportBREP"); + getBREPPluginOp(); + GEOM::ListOfGO* aSeq = myBREPOp->ImportBREP(theFileName ); + GEOM::GEOM_Object_ptr anObj; + + if (aSeq->length() > 0) { + anObj = aSeq->operator[](0); + } + + endService( " GEOM_Superv_i::ImportBREP" ); + return anObj; +} + +//============================================================================= +// Export STEP +//============================================================================= +void GEOM_Superv_i::ExportSTEP( GEOM::GEOM_Object_ptr theObject, + const char* theFileName ) +{ + beginService( " GEOM_Superv_i::ExportSTEP" ); + MESSAGE("GEOM_Superv_i::ExportSTEP"); + getSTEPPluginOp(); + mySTEPOp->ExportSTEP( theObject, theFileName ); + endService( " GEOM_Superv_i::ExportSTEP" ); +} + +//============================================================================= +// Import STEP +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::ImportSTEP( const char* theFileName, + const bool theIsIgnoreUnits ) +{ + beginService( " GEOM_Superv_i::ImportSTEP" ); + MESSAGE("GEOM_Superv_i::ImportSTEP"); + getSTEPPluginOp(); + GEOM::ListOfGO* aSeq = mySTEPOp->ImportSTEP(theFileName, theIsIgnoreUnits ); + GEOM::GEOM_Object_ptr anObj; + + if (aSeq->length() > 0) { + anObj = aSeq->operator[](0); + } + + endService( " GEOM_Superv_i::ImportSTEP" ); + return anObj; +} + +//============================================================================= +// Export IGES +//============================================================================= +void GEOM_Superv_i::ExportIGES( GEOM::GEOM_Object_ptr theObject, + const char* theFileName, + const char* theVersion ) +{ + beginService( " GEOM_Superv_i::ExportIGES" ); + MESSAGE("GEOM_Superv_i::ExportIGES"); + getIGESPluginOp(); + myIGESOp->ExportIGES( theObject, theFileName, theVersion ); + endService( " GEOM_Superv_i::ExportIGES" ); +} + +//============================================================================= +// Import IGES +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::ImportIGES( const char* theFileName, + const bool theIsIgnoreUnits ) +{ + beginService( " GEOM_Superv_i::ImportIGES" ); + MESSAGE("GEOM_Superv_i::ImportIGES"); + getIGESPluginOp(); + GEOM::ListOfGO* aSeq = myIGESOp->ImportIGES(theFileName, theIsIgnoreUnits ); + GEOM::GEOM_Object_ptr anObj; + + if (aSeq->length() > 0) { + anObj = aSeq->operator[](0); + } + + endService( " GEOM_Superv_i::ImportIGES" ); + return anObj; +} + +//============================================================================= +// Export XAO +//============================================================================= +CORBA::Boolean GEOM_Superv_i::ExportXAO( GEOM::GEOM_Object_ptr shape, + const GEOM::ListOfGO& groups, + const GEOM::ListOfFields& fields, + const char* author, const char* fileName ) { beginService( " GEOM_Superv_i::ExportXAO" ); MESSAGE("GEOM_Superv_i::ExportXAO"); - getInsOp(); - CORBA::Boolean isGood = myInsOp->ExportXAO(shape, groups, fields, author, fileName); + getXAOPluginOp(); + CORBA::Boolean isGood = myXAOOp->ExportXAO( shape, groups, fields, author, fileName ); endService( " GEOM_Superv_i::ExportXAO" ); return isGood; } //============================================================================= -// ImportXAO +// Import XAO //============================================================================= -CORBA::Boolean GEOM_Superv_i::ImportXAO (const char* fileName, GEOM::GEOM_Object_out shape, - GEOM::ListOfGO_out subShapes, GEOM::ListOfGO_out groups, GEOM::ListOfFields_out fields) +CORBA::Boolean GEOM_Superv_i::ImportXAO( const char* fileName, + GEOM::GEOM_Object_out shape, + GEOM::ListOfGO_out subShapes, + GEOM::ListOfGO_out groups, + GEOM::ListOfFields_out fields ) { return false; } +//============================================================================= +// Export VTK +//============================================================================= +void GEOM_Superv_i::ExportVTK( GEOM::GEOM_Object_ptr theObject, + const char* theFileName, + CORBA::Double theDeflection ) +{ + beginService( " GEOM_Superv_i::ExportVTK" ); + MESSAGE("GEOM_Superv_i::ExportVTK"); + getVTKPluginOp(); + myVTKOp->ExportVTK( theObject, theFileName, theDeflection ); + endService( " GEOM_Superv_i::ExportVTK" ); +} + //=============================== Advanced Operations ============================= //============================================================================= // MakePipeTShape diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh index 708a0dab6..f33f4f8bb 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.hh +++ b/src/GEOM_I_Superv/GEOM_Superv_i.hh @@ -28,6 +28,13 @@ // IDL headers #include #include CORBA_CLIENT_HEADER(GEOM_Gen) +#include CORBA_CLIENT_HEADER(AdvancedGEOM) +#include CORBA_CLIENT_HEADER(STLPlugin) +#include CORBA_CLIENT_HEADER(BREPPlugin) +#include CORBA_CLIENT_HEADER(STEPPlugin) +#include CORBA_CLIENT_HEADER(IGESPlugin) +#include CORBA_CLIENT_HEADER(XAOPlugin) +#include CORBA_CLIENT_HEADER(VTKPlugin) #include CORBA_SERVER_HEADER(GEOM_Superv) #include "SALOME_Component_i.hxx" @@ -61,6 +68,12 @@ public: void getLocalOp(); void getGroupOp(); void getAdvancedOp(); + void getSTLPluginOp(); + void getBREPPluginOp(); + void getSTEPPluginOp(); + void getIGESPluginOp(); + void getXAOPluginOp(); + void getVTKPluginOp(); PortableServer::ServantBase_var GetServant(CORBA::Object_ptr theObject, PortableServer::POA_ptr thePOA); @@ -369,10 +382,6 @@ public: const char* theFormatName); GEOM::GEOM_Object_ptr ImportFile (const char* theFileName, const char* theFormatName); - void ImportTranslators (GEOM::string_array_out theFormats, - GEOM::string_array_out thePatterns); - void ExportTranslators (GEOM::string_array_out theFormats, - GEOM::string_array_out thePatterns); //-----------------------------------------------------------// // TransformOperations // @@ -699,11 +708,47 @@ public: //-----------------------------------------------------------// // ImportExport Operations // //-----------------------------------------------------------// - CORBA::Boolean ExportXAO(GEOM::GEOM_Object_ptr shape, - const GEOM::ListOfGO& groups, const GEOM::ListOfFields& fields, - const char* author, const char* fileName); - CORBA::Boolean ImportXAO(const char* fileName, GEOM::GEOM_Object_out shape, - GEOM::ListOfGO_out subShapes, GEOM::ListOfGO_out groups, GEOM::ListOfFields_out fields); + + void ExportSTL( GEOM::GEOM_Object_ptr theObject, + const char* theFileName, + const bool theIsASCII, + CORBA::Double theDeflection, + const bool theIsRelative ); + + GEOM::GEOM_Object_ptr ImportSTL( const char* theFileName ); + + void ExportBREP( GEOM::GEOM_Object_ptr theObject, + const char* theFileName ); + + GEOM::GEOM_Object_ptr ImportBREP( const char* theFileName ); + + void ExportSTEP( GEOM::GEOM_Object_ptr theObject, + const char* theFileName ); + + GEOM::GEOM_Object_ptr ImportSTEP( const char* theFileName, + const bool theIsIgnoreUnits ); + + void ExportIGES( GEOM::GEOM_Object_ptr theObject, + const char* theFileName, + const char* theVersion ); + + GEOM::GEOM_Object_ptr ImportIGES( const char* theFileName, + const bool theIsIgnoreUnits ); + + CORBA::Boolean ExportXAO( GEOM::GEOM_Object_ptr shape, + const GEOM::ListOfGO& groups, + const GEOM::ListOfFields& fields, + const char* author, + const char* fileName); + CORBA::Boolean ImportXAO( const char* fileName, + GEOM::GEOM_Object_out shape, + GEOM::ListOfGO_out subShapes, + GEOM::ListOfGO_out groups, + GEOM::ListOfFields_out fields ); + + void ExportVTK( GEOM::GEOM_Object_ptr theObject, + const char* theFileName, + CORBA::Double theDeflection ); //-----------------------------------------------------------// // Advanced Operations // @@ -754,7 +799,13 @@ private: GEOM::GEOM_ICurvesOperations_var myCurvesOp; GEOM::GEOM_ILocalOperations_var myLocalOp; GEOM::GEOM_IGroupOperations_var myGroupOp; - GEOM::GEOM_IAdvancedOperations_var myAdvancedOp; + GEOM::IAdvancedOperations_var myAdvancedOp; + GEOM::ISTLOperations_var mySTLOp; + GEOM::IBREPOperations_var myBREPOp; + GEOM::ISTEPOperations_var mySTEPOp; + GEOM::IIGESOperations_var myIGESOp; + GEOM::IXAOOperations_var myXAOOp; + GEOM::IVTKOperations_var myVTKOp; }; #endif diff --git a/src/GEOM_SWIG/AdvancedGEOMBuilder.py b/src/GEOM_SWIG/AdvancedGEOMBuilder.py new file mode 100644 index 000000000..4c9b16dbf --- /dev/null +++ b/src/GEOM_SWIG/AdvancedGEOMBuilder.py @@ -0,0 +1,572 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +from GEOM import IAdvancedOperations + +# Engine Library Name +__libraryName__ = "AdvancedEngine" + +def GetAdvancedOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(IAdvancedOperations) + +## Create a T-shape object with specified caracteristics for the main +# and the incident pipes (radius, width, half-length). +# The extremities of the main pipe are located on junctions points P1 and P2. +# The extremity of the incident pipe is located on junction point P3. +# If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and +# the main plane of the T-shape is XOY. +# +# @param theR1 Internal radius of main pipe +# @param theW1 Width of main pipe +# @param theL1 Half-length of main pipe +# @param theR2 Internal radius of incident pipe (R2 < R1) +# @param theW2 Width of incident pipe (R2+W2 < R1+W1) +# @param theL2 Half-length of incident pipe +# +# @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) +# @param theP1 1st junction point of main pipe +# @param theP2 2nd junction point of main pipe +# @param theP3 Junction point of incident pipe +# +# @param theRL Internal radius of left thickness reduction +# @param theWL Width of left thickness reduction +# @param theLtransL Length of left transition part +# @param theLthinL Length of left thin part +# +# @param theRR Internal radius of right thickness reduction +# @param theWR Width of right thickness reduction +# @param theLtransR Length of right transition part +# @param theLthinR Length of right thin part +# +# @param theRI Internal radius of incident thickness reduction +# @param theWI Width of incident thickness reduction +# @param theLtransI Length of incident transition part +# @param theLthinI Length of incident thin part +# +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. +# +# @ref tui_creation_pipetshape "Example" +# @ingroup l4_advanced +def MakePipeTShape (self, theR1, theW1, theL1, theR2, theW2, theL2, + theHexMesh=True, theP1=None, theP2=None, theP3=None, + theRL=0, theWL=0, theLtransL=0, theLthinL=0, + theRR=0, theWR=0, theLtransR=0, theLthinR=0, + theRI=0, theWI=0, theLtransI=0, theLthinI=0, + theName=None): + """ + Create a T-shape object with specified caracteristics for the main + and the incident pipes (radius, width, half-length). + The extremities of the main pipe are located on junctions points P1 and P2. + The extremity of the incident pipe is located on junction point P3. + If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and + the main plane of the T-shape is XOY. + + Parameters: + theR1 Internal radius of main pipe + theW1 Width of main pipe + theL1 Half-length of main pipe + theR2 Internal radius of incident pipe (R2 < R1) + theW2 Width of incident pipe (R2+W2 < R1+W1) + theL2 Half-length of incident pipe + theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) + theP1 1st junction point of main pipe + theP2 2nd junction point of main pipe + theP3 Junction point of incident pipe + + theRL Internal radius of left thickness reduction + theWL Width of left thickness reduction + theLtransL Length of left transition part + theLthinL Length of left thin part + + theRR Internal radius of right thickness reduction + theWR Width of right thickness reduction + theLtransR Length of right transition part + theLthinR Length of right thin part + + theRI Internal radius of incident thickness reduction + theWI Width of incident thickness reduction + theLtransI Length of incident transition part + theLthinI Length of incident thin part + + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + List of GEOM_Object, containing the created shape and propagation groups. + + Example of usage: + # create PipeTShape object + pipetshape = geompy.MakePipeTShape(80.0, 20.0, 200.0, 50.0, 20.0, 200.0) + # create PipeTShape object with position + pipetshape_position = geompy.MakePipeTShape(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, True, P1, P2, P3) + # create PipeTShape object with left thickness reduction + pipetshape_thr = geompy.MakePipeTShape(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, theRL=60, theWL=20, theLtransL=40, theLthinL=20) + """ + from salome.geom.geomBuilder import ParseParameters, RaiseIfFailed, _toListOfNames + theR1, theW1, theL1, theR2, theW2, theL2, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI) + anOp = GetAdvancedOperations(self) + if (theP1 and theP2 and theP3): + anObj = anOp.MakePipeTShapeTRWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, + theRL, theWL, theLtransL, theLthinL, + theRR, theWR, theLtransR, theLthinR, + theRI, theWI, theLtransI, theLthinI, + theHexMesh, theP1, theP2, theP3) + else: + anObj = anOp.MakePipeTShapeTR(theR1, theW1, theL1, theR2, theW2, theL2, + theRL, theWL, theLtransL, theLthinL, + theRR, theWR, theLtransR, theLthinR, + theRI, theWI, theLtransI, theLthinI, + theHexMesh) + pass + RaiseIfFailed("MakePipeTShape", anOp) + if Parameters: anObj[0].SetParameters(Parameters) + self.def_names = [ "pipeTShape" ] + [ "pipeTShape_grp_%d" % i for i in range(1, len(anObj)) ] + self._autoPublish(anObj, _toListOfNames(theName, len(anObj)), self.def_names) + anOp.UnRegister() + return anObj + +## Create a T-shape object with chamfer and with specified caracteristics for the main +# and the incident pipes (radius, width, half-length). The chamfer is +# created on the junction of the pipes. +# The extremities of the main pipe are located on junctions points P1 and P2. +# The extremity of the incident pipe is located on junction point P3. +# If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and +# the main plane of the T-shape is XOY. +# @param theR1 Internal radius of main pipe +# @param theW1 Width of main pipe +# @param theL1 Half-length of main pipe +# @param theR2 Internal radius of incident pipe (R2 < R1) +# @param theW2 Width of incident pipe (R2+W2 < R1+W1) +# @param theL2 Half-length of incident pipe +# @param theH Height of the chamfer. +# @param theW Width of the chamfer. +# @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) +# @param theP1 1st junction point of main pipe +# @param theP2 2nd junction point of main pipe +# @param theP3 Junction point of incident pipe +# +# @param theRL Internal radius of left thickness reduction +# @param theWL Width of left thickness reduction +# @param theLtransL Length of left transition part +# @param theLthinL Length of left thin part +# +# @param theRR Internal radius of right thickness reduction +# @param theWR Width of right thickness reduction +# @param theLtransR Length of right transition part +# @param theLthinR Length of right thin part +# +# @param theRI Internal radius of incident thickness reduction +# @param theWI Width of incident thickness reduction +# @param theLtransI Length of incident transition part +# @param theLthinI Length of incident thin part +# +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. +# +# @ref tui_creation_pipetshape "Example" +# @ingroup l4_advanced +def MakePipeTShapeChamfer (self, theR1, theW1, theL1, theR2, theW2, theL2, + theH, theW, theHexMesh=True, theP1=None, theP2=None, theP3=None, + theRL=0, theWL=0, theLtransL=0, theLthinL=0, + theRR=0, theWR=0, theLtransR=0, theLthinR=0, + theRI=0, theWI=0, theLtransI=0, theLthinI=0, + theName=None): + """ + Create a T-shape object with chamfer and with specified caracteristics for the main + and the incident pipes (radius, width, half-length). The chamfer is + created on the junction of the pipes. + The extremities of the main pipe are located on junctions points P1 and P2. + The extremity of the incident pipe is located on junction point P3. + If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and + the main plane of the T-shape is XOY. + + Parameters: + theR1 Internal radius of main pipe + theW1 Width of main pipe + theL1 Half-length of main pipe + theR2 Internal radius of incident pipe (R2 < R1) + theW2 Width of incident pipe (R2+W2 < R1+W1) + theL2 Half-length of incident pipe + theH Height of the chamfer. + theW Width of the chamfer. + theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) + theP1 1st junction point of main pipe + theP2 2nd junction point of main pipe + theP3 Junction point of incident pipe + + theRL Internal radius of left thickness reduction + theWL Width of left thickness reduction + theLtransL Length of left transition part + theLthinL Length of left thin part + + theRR Internal radius of right thickness reduction + theWR Width of right thickness reduction + theLtransR Length of right transition part + theLthinR Length of right thin part + + theRI Internal radius of incident thickness reduction + theWI Width of incident thickness reduction + theLtransI Length of incident transition part + theLthinI Length of incident thin part + + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + List of GEOM_Object, containing the created shape and propagation groups. + + Example of usage: + # create PipeTShape with chamfer object + pipetshapechamfer = geompy.MakePipeTShapeChamfer(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 20.0, 20.0) + # create PipeTShape with chamfer object with position + pipetshapechamfer_position = geompy.MakePipeTShapeChamfer(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 20.0, 20.0, True, P1, P2, P3) + # create PipeTShape with chamfer object with left thickness reduction + pipetshapechamfer_thr = geompy.MakePipeTShapeChamfer(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 20.0, 20.0, theRL=60, theWL=20, theLtransL=40, theLthinL=20) + """ + from salome.geom.geomBuilder import ParseParameters, RaiseIfFailed, _toListOfNames + theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI) + anOp = GetAdvancedOperations(self) + if (theP1 and theP2 and theP3): + anObj = anOp.MakePipeTShapeTRChamferWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, + theRL, theWL, theLtransL, theLthinL, + theRR, theWR, theLtransR, theLthinR, + theRI, theWI, theLtransI, theLthinI, + theH, theW, theHexMesh, theP1, theP2, theP3) + else: + anObj = anOp.MakePipeTShapeTRChamfer(theR1, theW1, theL1, theR2, theW2, theL2, + theRL, theWL, theLtransL, theLthinL, + theRR, theWR, theLtransR, theLthinR, + theRI, theWI, theLtransI, theLthinI, + theH, theW, theHexMesh) + pass + + RaiseIfFailed("MakePipeTShapeChamfer", anOp) + if Parameters: anObj[0].SetParameters(Parameters) + self.def_names = [ "pipeTShape" ] + [ "pipeTShape_grp_%d" % i for i in range(1, len(anObj)) ] + self._autoPublish(anObj, _toListOfNames(theName, len(anObj)), self.def_names) + anOp.UnRegister() + return anObj + +## Create a T-shape object with fillet and with specified caracteristics for the main +# and the incident pipes (radius, width, half-length). The fillet is +# created on the junction of the pipes. +# The extremities of the main pipe are located on junctions points P1 and P2. +# The extremity of the incident pipe is located on junction point P3. +# If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and +# the main plane of the T-shape is XOY. +# @param theR1 Internal radius of main pipe +# @param theW1 Width of main pipe +# @param theL1 Half-length of main pipe +# @param theR2 Internal radius of incident pipe (R2 < R1) +# @param theW2 Width of incident pipe (R2+W2 < R1+W1) +# @param theL2 Half-length of incident pipe +# @param theRF Radius of curvature of fillet. +# @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) +# @param theP1 1st junction point of main pipe +# @param theP2 2nd junction point of main pipe +# @param theP3 Junction point of incident pipe +# +# @param theRL Internal radius of left thickness reduction +# @param theWL Width of left thickness reduction +# @param theLtransL Length of left transition part +# @param theLthinL Length of left thin part +# +# @param theRR Internal radius of right thickness reduction +# @param theWR Width of right thickness reduction +# @param theLtransR Length of right transition part +# @param theLthinR Length of right thin part +# +# @param theRI Internal radius of incident thickness reduction +# @param theWI Width of incident thickness reduction +# @param theLtransI Length of incident transition part +# @param theLthinI Length of incident thin part +# +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. +# +# @ref tui_creation_pipetshape "Example" +# @ingroup l4_advanced +def MakePipeTShapeFillet (self, theR1, theW1, theL1, theR2, theW2, theL2, + theRF, theHexMesh=True, theP1=None, theP2=None, theP3=None, + theRL=0, theWL=0, theLtransL=0, theLthinL=0, + theRR=0, theWR=0, theLtransR=0, theLthinR=0, + theRI=0, theWI=0, theLtransI=0, theLthinI=0, + theName=None): + """ + Create a T-shape object with fillet and with specified caracteristics for the main + and the incident pipes (radius, width, half-length). The fillet is + created on the junction of the pipes. + The extremities of the main pipe are located on junctions points P1 and P2. + The extremity of the incident pipe is located on junction point P3. + + Parameters: + If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and + the main plane of the T-shape is XOY. + theR1 Internal radius of main pipe + theW1 Width of main pipe + heL1 Half-length of main pipe + theR2 Internal radius of incident pipe (R2 < R1) + theW2 Width of incident pipe (R2+W2 < R1+W1) + theL2 Half-length of incident pipe + theRF Radius of curvature of fillet. + theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) + theP1 1st junction point of main pipe + theP2 2nd junction point of main pipe + theP3 Junction point of incident pipe + + theRL Internal radius of left thickness reduction + theWL Width of left thickness reduction + theLtransL Length of left transition part + theLthinL Length of left thin part + + theRR Internal radius of right thickness reduction + theWR Width of right thickness reduction + theLtransR Length of right transition part + theLthinR Length of right thin part + + theRI Internal radius of incident thickness reduction + theWI Width of incident thickness reduction + theLtransI Length of incident transition part + theLthinI Length of incident thin part + + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + List of GEOM_Object, containing the created shape and propagation groups. + + Example of usage: + # create PipeTShape with fillet object + pipetshapefillet = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0) + # create PipeTShape with fillet object with position + pipetshapefillet_position = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0, True, P1, P2, P3) + # create PipeTShape with fillet object with left thickness reduction + pipetshapefillet_thr = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0, theRL=60, theWL=20, theLtransL=40, theLthinL=20) + """ + from salome.geom.geomBuilder import ParseParameters, RaiseIfFailed, _toListOfNames + theR1, theW1, theL1, theR2, theW2, theL2, theRF, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theRF, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI) + anOp = GetAdvancedOperations(self) + if (theP1 and theP2 and theP3): + anObj = anOp.MakePipeTShapeTRFilletWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, + theRL, theWL, theLtransL, theLthinL, + theRR, theWR, theLtransR, theLthinR, + theRI, theWI, theLtransI, theLthinI, + theRF, theHexMesh, theP1, theP2, theP3) + else: + anObj = anOp.MakePipeTShapeTRFillet(theR1, theW1, theL1, theR2, theW2, theL2, + theRL, theWL, theLtransL, theLthinL, + theRR, theWR, theLtransR, theLthinR, + theRI, theWI, theLtransI, theLthinI, + theRF, theHexMesh) + pass + RaiseIfFailed("MakePipeTShapeFillet", anOp) + if Parameters: anObj[0].SetParameters(Parameters) + self.def_names = [ "pipeTShape" ] + [ "pipeTShape_grp_%d" % i for i in range(1, len(anObj)) ] + self._autoPublish(anObj, _toListOfNames(theName, len(anObj)), self.def_names) + anOp.UnRegister() + return anObj + +## This function allows creating a disk already divided into blocks. It +# can be used to create divided pipes for later meshing in hexaedra. +# @param theR Radius of the disk +# @param theOrientation Orientation of the plane on which the disk will be built +# 1 = XOY, 2 = OYZ, 3 = OZX +# @param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM_Object, containing the created shape. +# +# @ref tui_creation_divideddisk "Example" +# @ingroup l4_advanced +def MakeDividedDisk(self, theR, theOrientation, thePattern, theName=None): + """ + Creates a disk, divided into blocks. It can be used to create divided pipes + for later meshing in hexaedra. + + Parameters: + theR Radius of the disk + theOrientation Orientation of the plane on which the disk will be built: + 1 = XOY, 2 = OYZ, 3 = OZX + thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM_Object, containing the created shape. + """ + from salome.geom.geomBuilder import ParseParameters, RaiseIfFailed, _toListOfNames + theR, Parameters = ParseParameters(theR) + anOp = GetAdvancedOperations(self) + anObj = anOp.MakeDividedDisk(theR, 67.0, theOrientation, thePattern) + RaiseIfFailed("MakeDividedDisk", anOp) + if Parameters: anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "dividedDisk") + anOp.UnRegister() + return anObj + +## This function allows creating a disk already divided into blocks. It +# can be used to create divided pipes for later meshing in hexaedra. +# @param theCenter Center of the disk +# @param theVector Normal vector to the plane of the created disk +# @param theRadius Radius of the disk +# @param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM_Object, containing the created shape. +# +# @ref tui_creation_divideddisk "Example" +# @ingroup l4_advanced +def MakeDividedDiskPntVecR(self, theCenter, theVector, theRadius, thePattern, theName=None): + """ + Creates a disk already divided into blocks. It can be used to create divided pipes + for later meshing in hexaedra. + + Parameters: + theCenter Center of the disk + theVector Normal vector to the plane of the created disk + theRadius Radius of the disk + thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM_Object, containing the created shape. + """ + from salome.geom.geomBuilder import ParseParameters, RaiseIfFailed, _toListOfNames + theRadius, Parameters = ParseParameters(theRadius) + anOp = GetAdvancedOperations(self) + anObj = anOp.MakeDividedDiskPntVecR(theCenter, theVector, theRadius, 67.0, thePattern) + RaiseIfFailed("MakeDividedDiskPntVecR", anOp) + if Parameters: anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "dividedDisk") + anOp.UnRegister() + return anObj + +## Builds a cylinder prepared for hexa meshes +# @param theR Radius of the cylinder +# @param theH Height of the cylinder +# @param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM_Object, containing the created shape. +# +# @ref tui_creation_dividedcylinder "Example" +# @ingroup l4_advanced +def MakeDividedCylinder(self, theR, theH, thePattern, theName=None): + """ + Builds a cylinder prepared for hexa meshes + + Parameters: + theR Radius of the cylinder + theH Height of the cylinder + thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM_Object, containing the created shape. + """ + from salome.geom.geomBuilder import ParseParameters, RaiseIfFailed, _toListOfNames + theR, theH, Parameters = ParseParameters(theR, theH) + anOp = GetAdvancedOperations(self) + anObj = anOp.MakeDividedCylinder(theR, theH, thePattern) + RaiseIfFailed("MakeDividedCylinder", anOp) + if Parameters: anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "dividedCylinder") + anOp.UnRegister() + return anObj + +## Create a surface from a cloud of points +# @param thelPoints list of points. Compounds of points are +# accepted as well. +# @param theNbMax maximum number of Bezier pieces in the resulting +# surface. +# @param theDegMax maximum degree of the resulting BSpline surface. +# @param theDMax 3D tolerance of initial approximation. +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# @return New GEOM_Object, containing the created shape. +# @note 3D tolerance of initial approximation represents a tolerance of +# initial plate surface approximation. If this parameter is equal +# to 0 (default value) it is computed. In this case an error of +# initial plate surface computation is used as the approximation +# tolerance. This error represents a maximal distance between +# computed plate surface and given points. +# +# @ref tui_creation_smoothingsurface "Example" +# @ingroup l4_advanced +def MakeSmoothingSurface(self, thelPoints, theNbMax=2, theDegMax=8, + theDMax=0.0, theName=None): + """ + Create a surface from a cloud of points + + Parameters: + thelPoints list of points. Compounds of points are + accepted as well. + theNbMax maximum number of Bezier pieces in the resulting + surface. + theDegMax maximum degree of the resulting BSpline surface. + theDMax 3D tolerance of initial approximation. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM_Object, containing the created shape. + + Note: + 3D tolerance of initial approximation represents a tolerance of + initial plate surface approximation. If this parameter is equal + to 0 (default value) it is computed. In this case an error of + initial plate surface computation is used as the approximation + tolerance. This error represents a maximal distance between + computed plate surface and given points. + """ + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetAdvancedOperations(self) + anObj = anOp.MakeSmoothingSurface(thelPoints, theNbMax, + theDegMax, theDMax) + RaiseIfFailed("MakeSmoothingSurface", anOp) + self._autoPublish(anObj, theName, "smoothing") + anOp.UnRegister() + return anObj diff --git a/src/GEOM_SWIG/BREPPluginBuilder.py b/src/GEOM_SWIG/BREPPluginBuilder.py new file mode 100644 index 000000000..edaba77a0 --- /dev/null +++ b/src/GEOM_SWIG/BREPPluginBuilder.py @@ -0,0 +1,91 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from GEOM import IBREPOperations + +# Engine Library Name +__libraryName__ = "BREPPluginEngine" + +def GetBREPPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(IBREPOperations) + +## Export the given shape into a file with given name in BREP format. +# @param theObject Shape to be stored in the file. +# @param theFileName Name of the file to store the given shape in. +# @ingroup l2_import_export +def ExportBREP(self, theObject, theFileName): + """ + Export the given shape into a file with given name in BREP format. + + Parameters: + theObject Shape to be stored in the file. + theFileName Name of the file to store the given shape in. + """ + anOp = GetBREPPluginOperations(self) + anOp.ExportBREP(theObject, theFileName) + if anOp.IsDone() == 0: + raise RuntimeError, "Export : " + anOp.GetErrorCode() + pass + pass + + +## Import a shape from the BREP file +# @param theFileName The file, containing the shape. +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM.GEOM_Object, containing the imported shape. +# If material names are imported it returns the list of +# objects. The first one is the imported object followed by +# material groups. +# @note Auto publishing is allowed for the shape itself. Imported +# material groups are not automatically published. +# @ingroup l2_import_export +def ImportBREP(self, theFileName, theName=None): + """ + Import a shape from the BREP file + + Parameters: + theFileName The file, containing the shape. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the imported shape. + If material names are imported it returns the list of + objects. The first one is the imported object followed by + material groups. + Note: + Auto publishing is allowed for the shape itself. Imported + material groups are not automatically published. + """ + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetBREPPluginOperations(self) + aListObj = anOp.ImportBREP(theFileName) + RaiseIfFailed("ImportBREP", anOp) + aNbObj = len(aListObj) + if aNbObj > 0: + self._autoPublish(aListObj[0], theName, "imported") + if aNbObj == 1: + return aListObj[0] + return aListObj diff --git a/src/GEOM_SWIG/CMakeLists.txt b/src/GEOM_SWIG/CMakeLists.txt index e8460ba0a..02af16cdf 100755 --- a/src/GEOM_SWIG/CMakeLists.txt +++ b/src/GEOM_SWIG/CMakeLists.txt @@ -64,6 +64,55 @@ SET(_python_SCRIPTS gsketcher.py ) +# Advanced scripts + +SET(_python_advanced_SCRIPTS + AdvancedGEOMBuilder.py + __init__.py +) + +# STL plugin scripts + +SET(_python_STL_SCRIPTS + STLPluginBuilder.py + __init__.py +) + +# BREP plugin scripts + +SET(_python_BREP_SCRIPTS + BREPPluginBuilder.py + __init__.py +) + +# STEP plugin scripts + +SET(_python_STEP_SCRIPTS + STEPPluginBuilder.py + __init__.py +) + +# IGES plugin scripts + +SET(_python_IGES_SCRIPTS + IGESPluginBuilder.py + __init__.py +) + +# XAO plugin scripts + +SET(_python_XAO_SCRIPTS + XAOPluginBuilder.py + __init__.py +) + +# VTK plugin scripts + +SET(_python_VTK_SCRIPTS + VTKPluginBuilder.py + __init__.py +) + # scripts / shared SET(_shared_SCRIPTS @@ -75,3 +124,12 @@ SET(_shared_SCRIPTS SALOME_INSTALL_SCRIPTS("${_other_SCRIPTS}" ${SALOME_INSTALL_SCRIPT_DATA} DEF_PERMS) SALOME_INSTALL_SCRIPTS("${_shared_SCRIPTS}" ${SALOME_INSTALL_PYTHON_SHARED} DEF_PERMS) SALOME_INSTALL_SCRIPTS("${_python_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/geom DEF_PERMS) + +# Install plugin scripts +SALOME_INSTALL_SCRIPTS("${_python_advanced_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/AdvancedGEOM DEF_PERMS) +SALOME_INSTALL_SCRIPTS("${_python_STL_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/STLPlugin DEF_PERMS) +SALOME_INSTALL_SCRIPTS("${_python_BREP_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/BREPPlugin DEF_PERMS) +SALOME_INSTALL_SCRIPTS("${_python_STEP_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/STEPPlugin DEF_PERMS) +SALOME_INSTALL_SCRIPTS("${_python_IGES_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/IGESPlugin DEF_PERMS) +SALOME_INSTALL_SCRIPTS("${_python_XAO_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/XAOPlugin DEF_PERMS) +SALOME_INSTALL_SCRIPTS("${_python_VTK_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/VTKPlugin DEF_PERMS) diff --git a/src/GEOM_SWIG/IGESPluginBuilder.py b/src/GEOM_SWIG/IGESPluginBuilder.py new file mode 100644 index 000000000..684b0296f --- /dev/null +++ b/src/GEOM_SWIG/IGESPluginBuilder.py @@ -0,0 +1,132 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from GEOM import IIGESOperations + +# Engine Library Name +__libraryName__ = "IGESPluginEngine" + +def GetIGESPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(IIGESOperations) + +## Export the given shape into a file with given name in IGES format. +# @param theObject Shape to be stored in the file. +# @param theFileName Name of the file to store the given shape in. +# @param theVersion Version of IGES format which defines, whether to write +# only faces (5.1 IGES format) or shells and solids also (5.3 IGES format). +# @ingroup l2_import_export +def ExportIGES(self, theObject, theFileName, theVersion="5.1"): + """ + Export the given shape into a file with given name in IGES format. + + Parameters: + theObject Shape to be stored in the file. + theFileName Name of the file to store the given shape in. + theVersion Version of IGES format which defines, whether to write + only faces (5.1 IGES format) or shells and solids also (5.3 IGES format). + """ + anOp = GetIGESPluginOperations(self) + anOp.ExportIGES(theObject, theFileName, theVersion) + if anOp.IsDone() == 0: + raise RuntimeError, "Export : " + anOp.GetErrorCode() + pass + pass + +## Import a shape from the IGES file with given name. +# @param theFileName The file, containing the shape. +# @param theIsIgnoreUnits If True, file length units will be ignored (set to 'meter') +# and result model will be scaled, if its units are not meters. +# If False (default), file length units will be taken into account. +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM.GEOM_Object, containing the imported shape. +# If material names are imported it returns the list of +# objects. The first one is the imported object followed by +# material groups. +# @note Auto publishing is allowed for the shape itself. Imported +# material groups are not automatically published. +# +# @ref swig_Import_Export "Example" +# @ingroup l2_import_export +def ImportIGES(self, theFileName, theIsIgnoreUnits = False, theName=None): + """ + Import a shape from the IGES file with given name. + + Parameters: + theFileName The file, containing the shape. + ignoreUnits If True, file length units will be ignored (set to 'meter') + and result model will be scaled, if its units are not meters. + If False (default), file length units will be taken into account. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the imported shape. + If material names are imported it returns the list of + objects. The first one is the imported object followed by + material groups. + Note: + Auto publishing is allowed for the shape itself. Imported + material groups are not automatically published. + """ + # Example: see GEOM_TestOthers.py + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetIGESPluginOperations(self) + + anIsIgnoreUnits = theIsIgnoreUnits + aName = theName + if isinstance( theIsIgnoreUnits, basestring ): + anIsIgnoreUnits = False + aName = theIsIgnoreUnits + pass + + aListObj = anOp.ImportIGES(theFileName,anIsIgnoreUnits) + RaiseIfFailed("ImportIGES", anOp) + aNbObj = len(aListObj) + if aNbObj > 0: + self._autoPublish(aListObj[0], aName, "imported") + if aNbObj == 1: + return aListObj[0] + return aListObj + +## Return length unit from given IGES file +# @param theFileName The file, containing the shape. +# @return String, containing the units name. +# +# @ref swig_Import_Export "Example" +# @ingroup l2_import_export +def GetIGESUnit(self, theFileName): + """ + Return length units from given IGES file + + Parameters: + theFileName The file, containing the shape. + + Returns: + String, containing the units name. + """ + # Example: see GEOM_TestOthers.py + anOp = GetIGESPluginOperations(self) + aUnitName = anOp.ReadValue( theFileName, "LEN_UNITS") + return aUnitName diff --git a/src/GEOM_SWIG/STEPPluginBuilder.py b/src/GEOM_SWIG/STEPPluginBuilder.py new file mode 100644 index 000000000..1a12060dd --- /dev/null +++ b/src/GEOM_SWIG/STEPPluginBuilder.py @@ -0,0 +1,128 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from GEOM import ISTEPOperations + +# Engine Library Name +__libraryName__ = "STEPPluginEngine" + +def GetSTEPPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(ISTEPOperations) + +## Export the given shape into a file with given name in STEP format. +# @param theObject Shape to be stored in the file. +# @param theFileName Name of the file to store the given shape in. +# @ingroup l2_import_export +def ExportSTEP(self, theObject, theFileName): + """ + Export the given shape into a file with given name in STEP format. + + Parameters: + theObject Shape to be stored in the file. + theFileName Name of the file to store the given shape in. + """ + anOp = GetSTEPPluginOperations(self) + anOp.ExportSTEP(theObject, theFileName) + if anOp.IsDone() == 0: + raise RuntimeError, "Export : " + anOp.GetErrorCode() + pass + pass + +## Import a shape from the STEP file with given name. +# @param theFileName The file, containing the shape. +# @param theIsIgnoreUnits If True, file length units will be ignored (set to 'meter') +# and result model will be scaled, if its units are not meters. +# If False (default), file length units will be taken into account. +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM.GEOM_Object, containing the imported shape. +# If material names are imported it returns the list of +# objects. The first one is the imported object followed by +# material groups. +# @note Auto publishing is allowed for the shape itself. Imported +# material groups are not automatically published. +# +# @ref swig_Import_Export "Example" +# @ingroup l2_import_export +def ImportSTEP(self, theFileName, theIsIgnoreUnits = False, theName=None): + """ + Import a shape from the STEP file with given name. + + Parameters: + theFileName The file, containing the shape. + ignoreUnits If True, file length units will be ignored (set to 'meter') + and result model will be scaled, if its units are not meters. + If False (default), file length units will be taken into account. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the imported shape. + If material names are imported it returns the list of + objects. The first one is the imported object followed by + material groups. + Note: + Auto publishing is allowed for the shape itself. Imported + material groups are not automatically published. + """ + # Example: see GEOM_TestOthers.py + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetSTEPPluginOperations(self) + + anIsIgnoreUnits = theIsIgnoreUnits + aName = theName + if isinstance( theIsIgnoreUnits, basestring ): + anIsIgnoreUnits = False + aName = theIsIgnoreUnits + pass + + aListObj = anOp.ImportSTEP(theFileName,anIsIgnoreUnits) + RaiseIfFailed("ImportSTEP", anOp) + aNbObj = len(aListObj) + if aNbObj > 0: + self._autoPublish(aListObj[0], aName, "imported") + if aNbObj == 1: + return aListObj[0] + return aListObj + +## Return length unit from given STEP file +# @param theFileName The file, containing the shape. +# @return String, containing the units name. +# +# @ref swig_Import_Export "Example" +# @ingroup l2_import_export +def GetSTEPUnit(self, theFileName): + """ + Return length units from given STEP file + + Parameters: + theFileName The file, containing the shape. + + Returns: + String, containing the units name. + """ + # Example: see GEOM_TestOthers.py + anOp = GetSTEPPluginOperations(self) + aUnitName = anOp.ReadValue( theFileName, "LEN_UNITS") + return aUnitName diff --git a/src/GEOM_SWIG/STLPluginBuilder.py b/src/GEOM_SWIG/STLPluginBuilder.py new file mode 100644 index 000000000..39674429f --- /dev/null +++ b/src/GEOM_SWIG/STLPluginBuilder.py @@ -0,0 +1,100 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from GEOM import ISTLOperations + +# Engine Library Name +__libraryName__ = "STLPluginEngine" + +def GetSTLPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(ISTLOperations) + +## Export the given shape into a file with given name in STL format. +# @param theObject Shape to be stored in the file. +# @param theFileName Name of the file to store the given shape in. +# @param theIsASCII The format of the exported file (ASCII or Binary) +# @param theDeflection Deflection of the given shape. +# @param theIsRelative If True (default value), the deflection +# is calculated relatively to the size of the shape; +# if False, the user defined deflection is used. +# @ingroup l2_import_export +def ExportSTL(self, theObject, theFileName, theIsASCII = True, theDeflection = 0.001, theIsRelative = True ): + """ + Export the given shape into a file with given name in STL format. + + Parameters: + theObject Shape to be stored in the file. + theFileName Name of the file to store the given shape in. + theIsASCII The format of the exported file (ASCII or Binary). + theDeflection Deflection of the given shape. + theRelative If True (default value), the deflection + is calculated relatively to the size of the shape; + if False, the user defined deflection is used. + """ + anOp = GetSTLPluginOperations(self) + anOp.ExportSTL(theObject, theFileName, theIsASCII, theDeflection, theIsRelative ) + if anOp.IsDone() == 0: + raise RuntimeError, "Export : " + anOp.GetErrorCode() + pass + pass + +## Import a shape from the STL file +# @param theFileName The file, containing the shape. +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM.GEOM_Object, containing the imported shape. +# If material names are imported it returns the list of +# objects. The first one is the imported object followed by +# material groups. +# @note Auto publishing is allowed for the shape itself. Imported +# material groups are not automatically published. +# @ingroup l2_import_export +def ImportSTL(self, theFileName, theName=None): + """ + Import a shape from the STL file + + Parameters: + theFileName The file, containing the shape. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the imported shape. + If material names are imported it returns the list of + objects. The first one is the imported object followed by + material groups. + Note: + Auto publishing is allowed for the shape itself. Imported + material groups are not automatically published. + """ + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetSTLPluginOperations(self) + aListObj = anOp.ImportSTL(theFileName) + RaiseIfFailed("ImportSTL", anOp) + aNbObj = len(aListObj) + if aNbObj > 0: + self._autoPublish(aListObj[0], theName, "imported") + if aNbObj == 1: + return aListObj[0] + return aListObj diff --git a/src/GEOM_SWIG/VTKPluginBuilder.py b/src/GEOM_SWIG/VTKPluginBuilder.py new file mode 100644 index 000000000..300535737 --- /dev/null +++ b/src/GEOM_SWIG/VTKPluginBuilder.py @@ -0,0 +1,50 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from GEOM import IVTKOperations + +# Engine Library Name +__libraryName__ = "VTKPluginEngine" + +def GetVTKPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(IVTKOperations) + +## Export the given shape into a file with given name in VTK format. +# @param theObject Shape to be stored in the file. +# @param theFileName Name of the file to store the given shape in. +# @param theDeflection Deflection of the given shape. +# @ingroup l2_import_export +def ExportVTK(self, theObject, theFileName, theDeflection=0.001): + """ + Export the given shape into a file with given name in VTK format. + + Parameters: + theObject Shape to be stored in the file. + theFileName Name of the file to store the given shape in. + theIsASCII The format of the exported file (ASCII or Binary). + theDeflection Deflection of the given shape. + """ + anOp = GetVTKPluginOperations(self) + anOp.ExportVTK(theObject, theFileName, theDeflection) + if anOp.IsDone() == 0: + raise RuntimeError, "Export : " + anOp.GetErrorCode() + pass + pass diff --git a/src/GEOM_SWIG/XAOPluginBuilder.py b/src/GEOM_SWIG/XAOPluginBuilder.py new file mode 100644 index 000000000..aa9eef681 --- /dev/null +++ b/src/GEOM_SWIG/XAOPluginBuilder.py @@ -0,0 +1,61 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from GEOM import IXAOOperations + +# Engine Library Name +__libraryName__ = "XAOPluginEngine" + +def GetXAOPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(IXAOOperations) + +## Export a shape to XAO format +# @param shape The shape to export +# @param groups The list of groups to export +# @param fields The list of fields to export +# @param author The author of the export +# @param fileName The name of the file to export +# @return boolean +# +# @ingroup l2_import_export +def ExportXAO(self, shape, groups, fields, author, fileName): + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetXAOPluginOperations(self) + res = anOp.ExportXAO(shape, groups, fields, author, fileName) + RaiseIfFailed("ExportXAO", anOp) + return res + +## Import a shape from XAO format +# @param fileName The name of the file to import +# @return tuple (res, shape, subShapes, groups, fields) +# res Flag indicating if the import was successful +# shape The imported shape +# subShapes The list of imported subShapes +# groups The list of imported groups +# fields The list of imported fields +# +# @ingroup l2_import_export +def ImportXAO(self, fileName): + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetXAOPluginOperations(self) + res = anOp.ImportXAO(fileName) + RaiseIfFailed("ImportXAO", anOp) + return res diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index c64bd6f40..c0cd25a60 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -657,7 +657,6 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self.MeasuOp = None self.BlocksOp = None self.GroupOp = None - self.AdvOp = None self.FieldOp = None pass @@ -774,14 +773,6 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self.GroupOp = self.GetIGroupOperations (self.myStudyId) self.FieldOp = self.GetIFieldOperations (self.myStudyId) - # The below line is a right way to map all plugin functions to geomBuilder, - # but AdvancedOperations are already mapped, that is why this line is commented - # and presents here only as an axample - #self.AdvOp = self.GetPluginOperations (self.myStudyId, "AdvancedEngine") - - # self.AdvOp is used by functions MakePipeTShape*, MakeDividedDisk, etc. - self.AdvOp = GEOM._objref_GEOM_Gen.GetPluginOperations (self, self.myStudyId, "AdvancedEngine") - # set GEOM as root in the use case tree self.myUseCaseBuilder = self.myStudy.GetUseCaseBuilder() self.myUseCaseBuilder.SetRootCurrent() @@ -790,16 +781,6 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): def GetPluginOperations(self, studyID, libraryName): op = GEOM._objref_GEOM_Gen.GetPluginOperations(self, studyID, libraryName) - if op: - # bind methods of operations to self - methods = op.__class__.__dict__['__methods__'] - avoid_methods = self.BasicOp.__class__.__dict__['__methods__'] - for meth_name in methods: - if not meth_name in avoid_methods: # avoid basic methods - function = getattr(op.__class__, meth_name) - if callable(function): - #self.__dict__[meth_name] = self.__PluginOperation(op, function) - self.__dict__[meth_name] = PluginOperation(op, function) return op ## Enable / disable results auto-publishing @@ -10706,8 +10687,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## @addtogroup l2_import_export ## @{ - ## Import a shape from the BREP or IGES or STEP file + ## Import a shape from the BREP, IGES, STEP or other file # (depends on given format) with given name. + # + # Note: this function is deprecated, it is kept for backward compatibility only + # Use Import instead, where is a name of desirable format to import. + # # @param theFileName The file, containing the shape. # @param theFormatName Specify format for the file reading. # Available formats can be obtained with InsertOp.ImportTranslators() method. @@ -10729,10 +10714,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): @ManageTransactions("InsertOp") def ImportFile(self, theFileName, theFormatName, theName=None): """ - Import a shape from the BREP or IGES or STEP file + Import a shape from the BREP, IGES, STEP or other file (depends on given format) with given name. - Parameters: + Note: this function is deprecated, it is kept for backward compatibility only + Use Import instead, where is a name of desirable format to import. + + Parameters: theFileName The file, containing the shape. theFormatName Specify format for the file reading. Available formats can be obtained with geompy.InsertOp.ImportTranslators() method. @@ -10753,6 +10741,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): material groups are not automatically published. """ # Example: see GEOM_TestOthers.py + print """ + WARNING: Function ImportFile is deprecated, use Import instead, + where is a name of desirable format for importing. + """ aListObj = self.InsertOp.ImportFile(theFileName, theFormatName) RaiseIfFailed("ImportFile", self.InsertOp) aNbObj = len(aListObj) @@ -10767,159 +10759,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Deprecated analog of geompy.ImportFile, kept for backward compatibility only. """ - print "WARNING: Function Import is deprecated, use ImportFile instead" # note: auto-publishing is done in self.ImportFile() return self.ImportFile(theFileName, theFormatName, theName) - ## Shortcut to ImportFile() for BREP format. - # Import a shape from the BREP file with given name. - # @param theFileName The file, containing the shape. - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return New GEOM.GEOM_Object, containing the imported shape. - # - # @ref swig_Import_Export "Example" - def ImportBREP(self, theFileName, theName=None): - """ - geompy.ImportFile(...) function for BREP format - Import a shape from the BREP file with given name. - - Parameters: - theFileName The file, containing the shape. - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - New GEOM.GEOM_Object, containing the imported shape. - """ - # Example: see GEOM_TestOthers.py - # note: auto-publishing is done in self.ImportFile() - return self.ImportFile(theFileName, "BREP", theName) - - ## Shortcut to ImportFile() for IGES format - # Import a shape from the IGES file with given name. - # @param theFileName The file, containing the shape. - # @param ignoreUnits If True, file length units will be ignored (set to 'meter') - # and result model will be scaled, if its units are not meters. - # If False (default), file length units will be taken into account. - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return New GEOM.GEOM_Object, containing the imported shape. - # - # @ref swig_Import_Export "Example" - def ImportIGES(self, theFileName, ignoreUnits = False, theName=None): - """ - geompy.ImportFile(...) function for IGES format - - Parameters: - theFileName The file, containing the shape. - ignoreUnits If True, file length units will be ignored (set to 'meter') - and result model will be scaled, if its units are not meters. - If False (default), file length units will be taken into account. - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - New GEOM.GEOM_Object, containing the imported shape. - """ - # Example: see GEOM_TestOthers.py - # note: auto-publishing is done in self.ImportFile() - if ignoreUnits: - return self.ImportFile(theFileName, "IGES_SCALE", theName) - return self.ImportFile(theFileName, "IGES", theName) - - ## Return length unit from given IGES file - # @param theFileName The file, containing the shape. - # @return String, containing the units name. - # - # @ref swig_Import_Export "Example" - @ManageTransactions("InsertOp") - def GetIGESUnit(self, theFileName): - """ - Return length units from given IGES file - - Parameters: - theFileName The file, containing the shape. - - Returns: - String, containing the units name. - """ - # Example: see GEOM_TestOthers.py - aUnitName = self.InsertOp.ReadValue(theFileName, "IGES", "LEN_UNITS") - return aUnitName - - ## Shortcut to ImportFile() for STEP format - # Import a shape from the STEP file with given name. - # @param theFileName The file, containing the shape. - # @param ignoreUnits If True, file length units will be ignored (set to 'meter') - # and result model will be scaled, if its units are not meters. - # If False (default), file length units will be taken into account. - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return New GEOM.GEOM_Object, containing the imported shape. - # If material names are imported it returns the list of - # objects. The first one is the imported object followed by - # material groups. - # @note Auto publishing is allowed for the shape itself. Imported - # material groups are not automatically published. - # - # @ref swig_Import_Export "Example" - def ImportSTEP(self, theFileName, ignoreUnits = False, theName=None): - """ - geompy.ImportFile(...) function for STEP format - - Parameters: - theFileName The file, containing the shape. - ignoreUnits If True, file length units will be ignored (set to 'meter') - and result model will be scaled, if its units are not meters. - If False (default), file length units will be taken into account. - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - New GEOM.GEOM_Object, containing the imported shape. - If material names are imported it returns the list of - objects. The first one is the imported object followed by - material groups. - Note: - Auto publishing is allowed for the shape itself. Imported - material groups are not automatically published. - """ - # Example: see GEOM_TestOthers.py - # note: auto-publishing is done in self.ImportFile() - if ignoreUnits: - return self.ImportFile(theFileName, "STEP_SCALE", theName) - return self.ImportFile(theFileName, "STEP", theName) - - ## Return length unit from given IGES or STEP file - # @param theFileName The file, containing the shape. - # @return String, containing the units name. - # - # @ref swig_Import_Export "Example" - @ManageTransactions("InsertOp") - def GetSTEPUnit(self, theFileName): - """ - Return length units from given STEP file - - Parameters: - theFileName The file, containing the shape. - - Returns: - String, containing the units name. - """ - # Example: see GEOM_TestOthers.py - aUnitName = self.InsertOp.ReadValue(theFileName, "STEP", "LEN_UNITS") - return aUnitName - ## Read a shape from the binary stream, containing its bounding representation (BRep). # @note This method will not be dumped to the python script by DumpStudy functionality. # @note GEOM.GEOM_Object.GetShapeStream() method can be used to obtain the shape's BRep stream. @@ -10955,6 +10797,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## Export the given shape into a file with given name. + # + # Note: this function is deprecated, it is kept for backward compatibility only + # Use Export instead, where is a name of desirable format to export. + # # @param theObject Shape to be stored in the file. # @param theFileName Name of the file to store the given shape in. # @param theFormatName Specify format for the shape storage. @@ -10967,7 +10813,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): """ Export the given shape into a file with given name. - Parameters: + Note: this function is deprecated, it is kept for backward compatibility only + Use Export instead, where is a name of desirable format to export. + + Parameters: theObject Shape to be stored in the file. theFileName Name of the file to store the given shape in. theFormatName Specify format for the shape storage. @@ -10975,42 +10824,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): geompy.InsertOp.ExportTranslators()[0] method. """ # Example: see GEOM_TestOthers.py + print """ + WARNING: Function Export is deprecated, use Export instead, + where is a name of desirable format for exporting. + """ self.InsertOp.Export(theObject, theFileName, theFormatName) if self.InsertOp.IsDone() == 0: raise RuntimeError, "Export : " + self.InsertOp.GetErrorCode() pass pass - ## Shortcut to Export() for BREP format - # - # @ref swig_Import_Export "Example" - def ExportBREP(self,theObject, theFileName): - """ - geompy.Export(...) function for BREP format - """ - # Example: see GEOM_TestOthers.py - return self.Export(theObject, theFileName, "BREP") - - ## Shortcut to Export() for IGES format - # - # @ref swig_Import_Export "Example" - def ExportIGES(self,theObject, theFileName): - """ - geompy.Export(...) function for IGES format - """ - # Example: see GEOM_TestOthers.py - return self.Export(theObject, theFileName, "IGES") - - ## Shortcut to Export() for STEP format - # - # @ref swig_Import_Export "Example" - def ExportSTEP(self,theObject, theFileName): - """ - geompy.Export(...) function for STEP format - """ - # Example: see GEOM_TestOthers.py - return self.Export(theObject, theFileName, "STEP") - # end of l2_import_export ## @} @@ -12645,566 +12468,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # end of l3_groups ## @} - ## @addtogroup l4_advanced - ## @{ - - ## Create a T-shape object with specified caracteristics for the main - # and the incident pipes (radius, width, half-length). - # The extremities of the main pipe are located on junctions points P1 and P2. - # The extremity of the incident pipe is located on junction point P3. - # If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and - # the main plane of the T-shape is XOY. - # - # @param theR1 Internal radius of main pipe - # @param theW1 Width of main pipe - # @param theL1 Half-length of main pipe - # @param theR2 Internal radius of incident pipe (R2 < R1) - # @param theW2 Width of incident pipe (R2+W2 < R1+W1) - # @param theL2 Half-length of incident pipe - # - # @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) - # @param theP1 1st junction point of main pipe - # @param theP2 2nd junction point of main pipe - # @param theP3 Junction point of incident pipe - # - # @param theRL Internal radius of left thickness reduction - # @param theWL Width of left thickness reduction - # @param theLtransL Length of left transition part - # @param theLthinL Length of left thin part - # - # @param theRR Internal radius of right thickness reduction - # @param theWR Width of right thickness reduction - # @param theLtransR Length of right transition part - # @param theLthinR Length of right thin part - # - # @param theRI Internal radius of incident thickness reduction - # @param theWI Width of incident thickness reduction - # @param theLtransI Length of incident transition part - # @param theLthinI Length of incident thin part - # - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. - # - # @ref tui_creation_pipetshape "Example" - @ManageTransactions("AdvOp") - def MakePipeTShape (self, theR1, theW1, theL1, theR2, theW2, theL2, - theHexMesh=True, theP1=None, theP2=None, theP3=None, - theRL=0, theWL=0, theLtransL=0, theLthinL=0, - theRR=0, theWR=0, theLtransR=0, theLthinR=0, - theRI=0, theWI=0, theLtransI=0, theLthinI=0, - theName=None): - """ - Create a T-shape object with specified caracteristics for the main - and the incident pipes (radius, width, half-length). - The extremities of the main pipe are located on junctions points P1 and P2. - The extremity of the incident pipe is located on junction point P3. - If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and - the main plane of the T-shape is XOY. - - Parameters: - theR1 Internal radius of main pipe - theW1 Width of main pipe - theL1 Half-length of main pipe - theR2 Internal radius of incident pipe (R2 < R1) - theW2 Width of incident pipe (R2+W2 < R1+W1) - theL2 Half-length of incident pipe - theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) - theP1 1st junction point of main pipe - theP2 2nd junction point of main pipe - theP3 Junction point of incident pipe - - theRL Internal radius of left thickness reduction - theWL Width of left thickness reduction - theLtransL Length of left transition part - theLthinL Length of left thin part - - theRR Internal radius of right thickness reduction - theWR Width of right thickness reduction - theLtransR Length of right transition part - theLthinR Length of right thin part - - theRI Internal radius of incident thickness reduction - theWI Width of incident thickness reduction - theLtransI Length of incident transition part - theLthinI Length of incident thin part - - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - List of GEOM_Object, containing the created shape and propagation groups. - - Example of usage: - # create PipeTShape object - pipetshape = geompy.MakePipeTShape(80.0, 20.0, 200.0, 50.0, 20.0, 200.0) - # create PipeTShape object with position - pipetshape_position = geompy.MakePipeTShape(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, True, P1, P2, P3) - # create PipeTShape object with left thickness reduction - pipetshape_thr = geompy.MakePipeTShape(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, theRL=60, theWL=20, theLtransL=40, theLthinL=20) - """ - theR1, theW1, theL1, theR2, theW2, theL2, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI) - if (theP1 and theP2 and theP3): - anObj = self.AdvOp.MakePipeTShapeTRWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, - theRL, theWL, theLtransL, theLthinL, - theRR, theWR, theLtransR, theLthinR, - theRI, theWI, theLtransI, theLthinI, - theHexMesh, theP1, theP2, theP3) - else: - anObj = self.AdvOp.MakePipeTShapeTR(theR1, theW1, theL1, theR2, theW2, theL2, - theRL, theWL, theLtransL, theLthinL, - theRR, theWR, theLtransR, theLthinR, - theRI, theWI, theLtransI, theLthinI, - theHexMesh) - RaiseIfFailed("MakePipeTShape", self.AdvOp) - if Parameters: anObj[0].SetParameters(Parameters) - def_names = [ "pipeTShape" ] + [ "pipeTShape_grp_%d" % i for i in range(1, len(anObj)) ] - self._autoPublish(anObj, _toListOfNames(theName, len(anObj)), def_names) - return anObj - - ## Create a T-shape object with chamfer and with specified caracteristics for the main - # and the incident pipes (radius, width, half-length). The chamfer is - # created on the junction of the pipes. - # The extremities of the main pipe are located on junctions points P1 and P2. - # The extremity of the incident pipe is located on junction point P3. - # If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and - # the main plane of the T-shape is XOY. - # @param theR1 Internal radius of main pipe - # @param theW1 Width of main pipe - # @param theL1 Half-length of main pipe - # @param theR2 Internal radius of incident pipe (R2 < R1) - # @param theW2 Width of incident pipe (R2+W2 < R1+W1) - # @param theL2 Half-length of incident pipe - # @param theH Height of the chamfer. - # @param theW Width of the chamfer. - # @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) - # @param theP1 1st junction point of main pipe - # @param theP2 2nd junction point of main pipe - # @param theP3 Junction point of incident pipe - # - # @param theRL Internal radius of left thickness reduction - # @param theWL Width of left thickness reduction - # @param theLtransL Length of left transition part - # @param theLthinL Length of left thin part - # - # @param theRR Internal radius of right thickness reduction - # @param theWR Width of right thickness reduction - # @param theLtransR Length of right transition part - # @param theLthinR Length of right thin part - # - # @param theRI Internal radius of incident thickness reduction - # @param theWI Width of incident thickness reduction - # @param theLtransI Length of incident transition part - # @param theLthinI Length of incident thin part - # - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. - # - # @ref tui_creation_pipetshape "Example" - @ManageTransactions("AdvOp") - def MakePipeTShapeChamfer (self, theR1, theW1, theL1, theR2, theW2, theL2, - theH, theW, theHexMesh=True, theP1=None, theP2=None, theP3=None, - theRL=0, theWL=0, theLtransL=0, theLthinL=0, - theRR=0, theWR=0, theLtransR=0, theLthinR=0, - theRI=0, theWI=0, theLtransI=0, theLthinI=0, - theName=None): - """ - Create a T-shape object with chamfer and with specified caracteristics for the main - and the incident pipes (radius, width, half-length). The chamfer is - created on the junction of the pipes. - The extremities of the main pipe are located on junctions points P1 and P2. - The extremity of the incident pipe is located on junction point P3. - If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and - the main plane of the T-shape is XOY. - - Parameters: - theR1 Internal radius of main pipe - theW1 Width of main pipe - theL1 Half-length of main pipe - theR2 Internal radius of incident pipe (R2 < R1) - theW2 Width of incident pipe (R2+W2 < R1+W1) - theL2 Half-length of incident pipe - theH Height of the chamfer. - theW Width of the chamfer. - theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) - theP1 1st junction point of main pipe - theP2 2nd junction point of main pipe - theP3 Junction point of incident pipe - - theRL Internal radius of left thickness reduction - theWL Width of left thickness reduction - theLtransL Length of left transition part - theLthinL Length of left thin part - - theRR Internal radius of right thickness reduction - theWR Width of right thickness reduction - theLtransR Length of right transition part - theLthinR Length of right thin part - - theRI Internal radius of incident thickness reduction - theWI Width of incident thickness reduction - theLtransI Length of incident transition part - theLthinI Length of incident thin part - - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - List of GEOM_Object, containing the created shape and propagation groups. - - Example of usage: - # create PipeTShape with chamfer object - pipetshapechamfer = geompy.MakePipeTShapeChamfer(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 20.0, 20.0) - # create PipeTShape with chamfer object with position - pipetshapechamfer_position = geompy.MakePipeTShapeChamfer(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 20.0, 20.0, True, P1, P2, P3) - # create PipeTShape with chamfer object with left thickness reduction - pipetshapechamfer_thr = geompy.MakePipeTShapeChamfer(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 20.0, 20.0, theRL=60, theWL=20, theLtransL=40, theLthinL=20) - """ - theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI) - if (theP1 and theP2 and theP3): - anObj = self.AdvOp.MakePipeTShapeTRChamferWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, - theRL, theWL, theLtransL, theLthinL, - theRR, theWR, theLtransR, theLthinR, - theRI, theWI, theLtransI, theLthinI, - theH, theW, theHexMesh, theP1, theP2, theP3) - else: - anObj = self.AdvOp.MakePipeTShapeTRChamfer(theR1, theW1, theL1, theR2, theW2, theL2, - theRL, theWL, theLtransL, theLthinL, - theRR, theWR, theLtransR, theLthinR, - theRI, theWI, theLtransI, theLthinI, - theH, theW, theHexMesh) - RaiseIfFailed("MakePipeTShapeChamfer", self.AdvOp) - if Parameters: anObj[0].SetParameters(Parameters) - def_names = [ "pipeTShape" ] + [ "pipeTShape_grp_%d" % i for i in range(1, len(anObj)) ] - self._autoPublish(anObj, _toListOfNames(theName, len(anObj)), def_names) - return anObj - - ## Create a T-shape object with fillet and with specified caracteristics for the main - # and the incident pipes (radius, width, half-length). The fillet is - # created on the junction of the pipes. - # The extremities of the main pipe are located on junctions points P1 and P2. - # The extremity of the incident pipe is located on junction point P3. - # If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and - # the main plane of the T-shape is XOY. - # @param theR1 Internal radius of main pipe - # @param theW1 Width of main pipe - # @param theL1 Half-length of main pipe - # @param theR2 Internal radius of incident pipe (R2 < R1) - # @param theW2 Width of incident pipe (R2+W2 < R1+W1) - # @param theL2 Half-length of incident pipe - # @param theRF Radius of curvature of fillet. - # @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) - # @param theP1 1st junction point of main pipe - # @param theP2 2nd junction point of main pipe - # @param theP3 Junction point of incident pipe - # - # @param theRL Internal radius of left thickness reduction - # @param theWL Width of left thickness reduction - # @param theLtransL Length of left transition part - # @param theLthinL Length of left thin part - # - # @param theRR Internal radius of right thickness reduction - # @param theWR Width of right thickness reduction - # @param theLtransR Length of right transition part - # @param theLthinR Length of right thin part - # - # @param theRI Internal radius of incident thickness reduction - # @param theWI Width of incident thickness reduction - # @param theLtransI Length of incident transition part - # @param theLthinI Length of incident thin part - # - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return List of GEOM.GEOM_Object, containing the created shape and propagation groups. - # - # @ref tui_creation_pipetshape "Example" - @ManageTransactions("AdvOp") - def MakePipeTShapeFillet (self, theR1, theW1, theL1, theR2, theW2, theL2, - theRF, theHexMesh=True, theP1=None, theP2=None, theP3=None, - theRL=0, theWL=0, theLtransL=0, theLthinL=0, - theRR=0, theWR=0, theLtransR=0, theLthinR=0, - theRI=0, theWI=0, theLtransI=0, theLthinI=0, - theName=None): - """ - Create a T-shape object with fillet and with specified caracteristics for the main - and the incident pipes (radius, width, half-length). The fillet is - created on the junction of the pipes. - The extremities of the main pipe are located on junctions points P1 and P2. - The extremity of the incident pipe is located on junction point P3. - - Parameters: - If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and - the main plane of the T-shape is XOY. - theR1 Internal radius of main pipe - theW1 Width of main pipe - heL1 Half-length of main pipe - theR2 Internal radius of incident pipe (R2 < R1) - theW2 Width of incident pipe (R2+W2 < R1+W1) - theL2 Half-length of incident pipe - theRF Radius of curvature of fillet. - theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True) - theP1 1st junction point of main pipe - theP2 2nd junction point of main pipe - theP3 Junction point of incident pipe - - theRL Internal radius of left thickness reduction - theWL Width of left thickness reduction - theLtransL Length of left transition part - theLthinL Length of left thin part - - theRR Internal radius of right thickness reduction - theWR Width of right thickness reduction - theLtransR Length of right transition part - theLthinR Length of right thin part - - theRI Internal radius of incident thickness reduction - theWI Width of incident thickness reduction - theLtransI Length of incident transition part - theLthinI Length of incident thin part - - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - List of GEOM_Object, containing the created shape and propagation groups. - - Example of usage: - # create PipeTShape with fillet object - pipetshapefillet = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0) - # create PipeTShape with fillet object with position - pipetshapefillet_position = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0, True, P1, P2, P3) - # create PipeTShape with fillet object with left thickness reduction - pipetshapefillet_thr = geompy.MakePipeTShapeFillet(80.0, 20.0, 200.0, 50.0, 20.0, 200.0, 5.0, theRL=60, theWL=20, theLtransL=40, theLthinL=20) - """ - theR1, theW1, theL1, theR2, theW2, theL2, theRF, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theRF, theRL, theWL, theLtransL, theLthinL, theRR, theWR, theLtransR, theLthinR, theRI, theWI, theLtransI, theLthinI) - if (theP1 and theP2 and theP3): - anObj = self.AdvOp.MakePipeTShapeTRFilletWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, - theRL, theWL, theLtransL, theLthinL, - theRR, theWR, theLtransR, theLthinR, - theRI, theWI, theLtransI, theLthinI, - theRF, theHexMesh, theP1, theP2, theP3) - else: - anObj = self.AdvOp.MakePipeTShapeTRFillet(theR1, theW1, theL1, theR2, theW2, theL2, - theRL, theWL, theLtransL, theLthinL, - theRR, theWR, theLtransR, theLthinR, - theRI, theWI, theLtransI, theLthinI, - theRF, theHexMesh) - RaiseIfFailed("MakePipeTShapeFillet", self.AdvOp) - if Parameters: anObj[0].SetParameters(Parameters) - def_names = [ "pipeTShape" ] + [ "pipeTShape_grp_%d" % i for i in range(1, len(anObj)) ] - self._autoPublish(anObj, _toListOfNames(theName, len(anObj)), def_names) - return anObj - - ## This function allows creating a disk already divided into blocks. It - # can be used to create divided pipes for later meshing in hexaedra. - # @param theR Radius of the disk - # @param theOrientation Orientation of the plane on which the disk will be built - # 1 = XOY, 2 = OYZ, 3 = OZX - # @param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return New GEOM_Object, containing the created shape. - # - # @ref tui_creation_divideddisk "Example" - @ManageTransactions("AdvOp") - def MakeDividedDisk(self, theR, theOrientation, thePattern, theName=None): - """ - Creates a disk, divided into blocks. It can be used to create divided pipes - for later meshing in hexaedra. - - Parameters: - theR Radius of the disk - theOrientation Orientation of the plane on which the disk will be built: - 1 = XOY, 2 = OYZ, 3 = OZX - thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - New GEOM_Object, containing the created shape. - """ - theR, Parameters = ParseParameters(theR) - anObj = self.AdvOp.MakeDividedDisk(theR, 67.0, theOrientation, thePattern) - RaiseIfFailed("MakeDividedDisk", self.AdvOp) - if Parameters: anObj.SetParameters(Parameters) - self._autoPublish(anObj, theName, "dividedDisk") - return anObj - - ## This function allows creating a disk already divided into blocks. It - # can be used to create divided pipes for later meshing in hexaedra. - # @param theCenter Center of the disk - # @param theVector Normal vector to the plane of the created disk - # @param theRadius Radius of the disk - # @param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return New GEOM_Object, containing the created shape. - # - # @ref tui_creation_divideddisk "Example" - @ManageTransactions("AdvOp") - def MakeDividedDiskPntVecR(self, theCenter, theVector, theRadius, thePattern, theName=None): - """ - Creates a disk already divided into blocks. It can be used to create divided pipes - for later meshing in hexaedra. - - Parameters: - theCenter Center of the disk - theVector Normal vector to the plane of the created disk - theRadius Radius of the disk - thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - New GEOM_Object, containing the created shape. - """ - theRadius, Parameters = ParseParameters(theRadius) - anObj = self.AdvOp.MakeDividedDiskPntVecR(theCenter, theVector, theRadius, 67.0, thePattern) - RaiseIfFailed("MakeDividedDiskPntVecR", self.AdvOp) - if Parameters: anObj.SetParameters(Parameters) - self._autoPublish(anObj, theName, "dividedDisk") - return anObj - - ## Builds a cylinder prepared for hexa meshes - # @param theR Radius of the cylinder - # @param theH Height of the cylinder - # @param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # - # @return New GEOM_Object, containing the created shape. - # - # @ref tui_creation_dividedcylinder "Example" - @ManageTransactions("AdvOp") - def MakeDividedCylinder(self, theR, theH, thePattern, theName=None): - """ - Builds a cylinder prepared for hexa meshes - - Parameters: - theR Radius of the cylinder - theH Height of the cylinder - thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - New GEOM_Object, containing the created shape. - """ - theR, theH, Parameters = ParseParameters(theR, theH) - anObj = self.AdvOp.MakeDividedCylinder(theR, theH, thePattern) - RaiseIfFailed("MakeDividedCylinder", self.AdvOp) - if Parameters: anObj.SetParameters(Parameters) - self._autoPublish(anObj, theName, "dividedCylinder") - return anObj - - ## Create a surface from a cloud of points - # @param thelPoints list of points. Compounds of points are - # accepted as well. - # @param theNbMax maximum number of Bezier pieces in the resulting - # surface. - # @param theDegMax maximum degree of the resulting BSpline surface. - # @param theDMax 3D tolerance of initial approximation. - # @param theName Object name; when specified, this parameter is used - # for result publication in the study. Otherwise, if automatic - # publication is switched on, default value is used for result name. - # @return New GEOM_Object, containing the created shape. - # @note 3D tolerance of initial approximation represents a tolerance of - # initial plate surface approximation. If this parameter is equal - # to 0 (default value) it is computed. In this case an error of - # initial plate surface computation is used as the approximation - # tolerance. This error represents a maximal distance between - # computed plate surface and given points. - # - # @ref tui_creation_smoothingsurface "Example" - @ManageTransactions("AdvOp") - def MakeSmoothingSurface(self, thelPoints, theNbMax=2, theDegMax=8, - theDMax=0.0, theName=None): - """ - Create a surface from a cloud of points - - Parameters: - thelPoints list of points. Compounds of points are - accepted as well. - theNbMax maximum number of Bezier pieces in the resulting - surface. - theDegMax maximum degree of the resulting BSpline surface. - theDMax 3D tolerance of initial approximation. - theName Object name; when specified, this parameter is used - for result publication in the study. Otherwise, if automatic - publication is switched on, default value is used for result name. - - Returns: - New GEOM_Object, containing the created shape. - - Note: - 3D tolerance of initial approximation represents a tolerance of - initial plate surface approximation. If this parameter is equal - to 0 (default value) it is computed. In this case an error of - initial plate surface computation is used as the approximation - tolerance. This error represents a maximal distance between - computed plate surface and given points. - """ - anObj = self.AdvOp.MakeSmoothingSurface(thelPoints, theNbMax, - theDegMax, theDMax) - RaiseIfFailed("MakeSmoothingSurface", self.AdvOp) - self._autoPublish(anObj, theName, "smoothing") - return anObj - - ## Export a shape to XAO format - # @param shape The shape to export - # @param groups The list of groups to export - # @param fields The list of fields to export - # @param author The author of the export - # @param fileName The name of the file to export - # @return boolean - # - # @ref tui_exportxao "Example" - @ManageTransactions("InsertOp") - def ExportXAO(self, shape, groups, fields, author, fileName): - res = self.InsertOp.ExportXAO(shape, groups, fields, author, fileName) - RaiseIfFailed("ExportXAO", self.InsertOp) - return res - - ## Import a shape from XAO format - # @param shape Shape to export - # @param fileName The name of the file to import - # @return tuple (res, shape, subShapes, groups, fields) - # res Flag indicating if the import was successful - # shape The imported shape - # subShapes The list of imported subShapes - # groups The list of imported groups - # fields The list of imported fields - # - # @ref tui_importxao "Example" - @ManageTransactions("InsertOp") - def ImportXAO(self, fileName): - res = self.InsertOp.ImportXAO(fileName) - RaiseIfFailed("ImportXAO", self.InsertOp) - return res - #@@ insert new functions before this line @@ do not remove this line @@# - # end of l4_advanced - ## @} - ## Create a copy of the given object # # @param theOriginal geometry object for copy @@ -13652,3 +12917,36 @@ def New( study, instance=None): assert isinstance(geom,geomBuilder), "Geom engine class is %s but should be geomBuilder.geomBuilder. Import geomBuilder before creating the instance."%geom.__class__ geom.init_geom(study) return geom + + +# Register methods from the plug-ins in the geomBuilder class +plugins_var = os.environ.get( "GEOM_PluginsList" ) + +plugins = None +if plugins_var is not None: + plugins = plugins_var.split( ":" ) + plugins=filter(lambda x: len(x)>0, plugins) +if plugins is not None: + for pluginName in plugins: + pluginBuilderName = pluginName + "Builder" + try: + exec( "from salome.%s.%s import *" % (pluginName, pluginBuilderName)) + except Exception, e: + from salome_utils import verbose + print "Exception while loading %s: %s" % ( pluginBuilderName, e ) + continue + exec( "from salome.%s import %s" % (pluginName, pluginBuilderName)) + plugin = eval( pluginBuilderName ) + + # add methods from plugin module to the geomBuilder class + for k in dir( plugin ): + if k[0] == '_': continue + method = getattr( plugin, k ) + if type( method ).__name__ == 'function': + if not hasattr( geomBuilder, k ): + setattr( geomBuilder, k, method ) + pass + pass + del pluginName + pass + pass diff --git a/src/IGESExport/CMakeLists.txt b/src/IGESExport/CMakeLists.txt deleted file mode 100755 index 4ad448cbd..000000000 --- a/src/IGESExport/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKIGES} - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(IGESExport_SOURCES - IGESExport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(IGESExport ${IGESExport_SOURCES}) -TARGET_LINK_LIBRARIES(IGESExport ${_link_LIBRARIES}) -INSTALL(TARGETS IGESExport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/IGESExport/IGESExport.cxx b/src/IGESExport/IGESExport.cxx deleted file mode 100644 index 894c2a5ba..000000000 --- a/src/IGESExport/IGESExport.cxx +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: IGESExport.cxx -// Created: Wed May 19 14:49:45 2004 -// Author: Pavel TELKOV - -#include "utilities.h" - -#include - -#include -#include -#include - -#include -#include - -#include - -#include - -#ifdef WIN32 - #if defined IGESEXPORT_EXPORTS || defined IGESExport_EXPORTS - #define IGESEXPORT_EXPORT __declspec( dllexport ) - #else - #define IGESEXPORT_EXPORT __declspec( dllimport ) - #endif -#else - #define IGESEXPORT_EXPORT -#endif - -//============================================================================= -/*! - * KindOfBRep - * \return 0 if theShape contains only simple entities (wires, edges and vertices), - * 1 if theShape contains only complex entities (shells, solids and compsolids) - * 2 if theShape contains only indifferent entities (faces) - * -1 if theShape contains both simple and complex entities (and in this case it - * cannot be saved without any loss neither in BRepMode == 0 nor in BRepMode == 1) - */ -//============================================================================= -int KindOfBRep (const TopoDS_Shape& theShape) -{ - int aKind = 2; - - switch (theShape.ShapeType()) - { - case TopAbs_COMPOUND: - { - bool isSimple = false; - bool isComplex = false; - TopoDS_Iterator anIt (theShape, Standard_True, Standard_True); - for (; anIt.More(); anIt.Next()) { - TopoDS_Shape aS = anIt.Value(); - int aKindSub = KindOfBRep(aS); - if (aKindSub == 0) - isSimple = true; - else if (aKindSub == 1) - isComplex = true; - else if (aKindSub == -1) { - return -1; // heterogeneous - } - } - if (isSimple && isComplex) - aKind = -1; // heterogeneous - else if (isSimple) - aKind = 0; - else if (isComplex) - aKind = 1; - } - break; - case TopAbs_COMPSOLID: - case TopAbs_SOLID: - case TopAbs_SHELL: - aKind = 1; - break; - case TopAbs_WIRE: - case TopAbs_EDGE: - case TopAbs_VERTEX: - aKind = 0; - break; - default: - aKind = 2; - } - - return aKind; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ -IGESEXPORT_EXPORT - int Export( const TopoDS_Shape& theShape, - const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theFormatName ) - { - bool ok = false; - - // define, whether to write only faces (5.1 IGES format) - // or shells and solids also (5.3 IGES format) - int aBrepMode = 0; - if (theFormatName.IsEqual("IGES_5_3")) - aBrepMode = 1; - - MESSAGE("Export IGES into file " << theFileName.ToCString()); - - // Mantis issue 0021350: check being exported shape, as some standalone - // entities (edges, wires and vertices) cannot be saved in BRepMode - if (aBrepMode == 1) { - int aKind = KindOfBRep(theShape); - if (aKind == -1) - Standard_Failure::Raise("EXPORT_IGES_HETEROGENEOUS_COMPOUND"); - else if (aKind == 2) - aBrepMode = 1; - else - aBrepMode = aKind; - } - - // commented for 0021350: Please don't catch exceptions silently and send an - // inappropriate error message instead, it is disturbing for the user and for us - //try - { - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - // initialize writer - IGESControl_Controller::Init(); - //IGESControl_Writer ICW (Interface_Static::CVal("write.iges.unit"), - // Interface_Static::IVal("write.iges.brep.mode")); - IGESControl_Writer ICW ("M", aBrepMode); // "write.iges.unit" ->> VSR 15.09.09: export explicitly in meters - Interface_Static::SetCVal("xstep.cascade.unit","M"); - - // 09.03.2010 skl for bug 0020726 - // change default value "Average" to "Max" - Interface_Static::SetCVal("write.precision.mode","Max"); - - // perform shape writing - if (ICW.AddShape( theShape )) { - ICW.ComputeModel(); - ok = ICW.Write( theFileName.ToCString() ); - } - } - //catch(Standard_Failure) - //{ - //} - return ok; - } -} diff --git a/src/IGESImport/CMakeLists.txt b/src/IGESImport/CMakeLists.txt deleted file mode 100755 index 61d020ced..000000000 --- a/src/IGESImport/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKIGES} ${CAS_TKCAF} - ${CAS_TKLCAF} - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(IGESImport_SOURCES - IGESImport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(IGESImport ${IGESImport_SOURCES}) -TARGET_LINK_LIBRARIES(IGESImport ${_link_LIBRARIES}) -INSTALL(TARGETS IGESImport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/IGESImport/IGESImport.cxx b/src/IGESImport/IGESImport.cxx deleted file mode 100644 index 711cceabb..000000000 --- a/src/IGESImport/IGESImport.cxx +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File: IGESImport.cxx -// Created: Wed May 19 14:36:35 2004 -// Author: Pavel TELKOV - -#include "utilities.h" - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC - -#ifdef WIN32 - #if defined IGESIMPORT_EXPORTS || defined IGESImport_EXPORTS - #define IGESIMPORT_EXPORT __declspec( dllexport ) - #else - #define IGESIMPORT_EXPORT __declspec( dllimport ) - #endif -#else - #define IGESIMPORT_EXPORT -#endif - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ - IGESIMPORT_EXPORT - Handle(TCollection_HAsciiString) GetValue (const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theParameterName, - TCollection_AsciiString& theError) - { - Handle(TCollection_HAsciiString) aValue; - - if (theParameterName != "LEN_UNITS") { - theError = theParameterName + " parameter reading is not supported by IGES plugin"; - return aValue; - } - - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - IGESControl_Reader aReader; - - Interface_Static::SetCVal("xstep.cascade.unit","M"); - - try { - OCC_CATCH_SIGNALS; - - IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString()); - if (status == IFSelect_RetDone) { - Handle(IGESData_IGESModel) aModel = - Handle(IGESData_IGESModel)::DownCast(aReader.Model()); - if (!aModel.IsNull()) { - aValue = aModel->GlobalSection().UnitName(); - - //if (!aValue.IsNull()) { - // Handle(TCollection_HAsciiString) aPrefix = new TCollection_HAsciiString ("UNIT_"); - // aValue->Prepend(aPrefix); - //} - } - } - else { - theError = theFileName + " reading failed"; - } - } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - theError = aFail->GetMessageString(); - } - - return aValue; - } - -IGESIMPORT_EXPORT - TopoDS_Shape Import (const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theFormatName, - TCollection_AsciiString& theError, - const TDF_Label& theShapeLabel) - { - TopoDS_Shape aResShape; - - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - IGESControl_Reader aReader; - - Interface_Static::SetCVal("xstep.cascade.unit","M"); - - try { - OCC_CATCH_SIGNALS; - - IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString()); - - if (status == IFSelect_RetDone) { - - // BEGIN: old code - if (theFormatName == "IGES_UNIT") { - Handle(IGESData_IGESModel) aModel = - Handle(IGESData_IGESModel)::DownCast(aReader.Model()); - gp_Pnt P (1.0, 0.0, 0.0); - if (!aModel.IsNull()) { - Handle(TCollection_HAsciiString) aUnitName = - aModel->GlobalSection().UnitName(); - if (!aUnitName.IsNull()) { - if (aUnitName->String()=="MM") { - P = gp_Pnt(0.001,0.0,0.0); - } - else if (aUnitName->String()=="CM") { - P = gp_Pnt(0.01,0.0,0.0); - } - } - } - BRep_Builder B; - TopoDS_Vertex V; - B.MakeVertex(V,P,1.e-7); - aResShape = V; - return aResShape; - } - // END: old code - - if (theFormatName == "IGES_SCALE") { - //cout<<"need re-scale a model"<GlobalSection(); - aGS.SetUnitFlag(6); - aModel->SetGlobalSection(aGS); - } - } - - MESSAGE("ImportIGES : all Geometry Transfer"); - //OCC 5.1.2 porting - // aReader.Clear(); - // aReader.TransferRoots(false); - aReader.ClearShapes(); - aReader.TransferRoots(); - - MESSAGE("ImportIGES : count of shapes produced = " << aReader.NbShapes()); - aResShape = aReader.OneShape(); - - // BEGIN: Store names of sub-shapes from file - Handle(Interface_InterfaceModel) Model = aReader.WS()->Model(); - Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader(); - if (!TR.IsNull()) { - Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess(); - Standard_Integer nb = Model->NbEntities(); - for (Standard_Integer i = 1; i <= nb; i++) { - Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast(Model->Value(i)); - if (ent.IsNull() || ! ent->HasName()) continue; - - // find target shape - Handle(Transfer_Binder) binder = TP->Find(ent); - if (binder.IsNull()) continue; - TopoDS_Shape S = TransferBRep::ShapeResult(binder); - if (S.IsNull()) continue; - - // create label and set shape - TDF_Label L; - TDF_TagSource aTag; - L = aTag.NewChild(theShapeLabel); - TNaming_Builder tnBuild (L); - tnBuild.Generated(S); - - // set a name - TCollection_AsciiString string = ent->NameValue()->String(); - string.LeftAdjust(); - string.RightAdjust(); - TCollection_ExtendedString str (string); - TDataStd_Name::Set(L, str); - } - } - // END: Store names - } else { -// switch (status) { -// case IFSelect_RetVoid: -// theError = "Nothing created or No data to process"; -// break; -// case IFSelect_RetError: -// theError = "Error in command or input data"; -// break; -// case IFSelect_RetFail: -// theError = "Execution was run, but has failed"; -// break; -// case IFSelect_RetStop: -// theError = "Execution has been stopped. Quite possible, an exception was raised"; -// break; -// default: -// break; -// } - theError = "Wrong format of the imported file. Can't import file."; - aResShape.Nullify(); - } - } - catch(Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - theError = aFail->GetMessageString(); - aResShape.Nullify(); - } - return aResShape; - } -} diff --git a/src/IGESPlugin/CMakeLists.txt b/src/IGESPlugin/CMakeLists.txt new file mode 100644 index 000000000..caa229704 --- /dev/null +++ b/src/IGESPlugin/CMakeLists.txt @@ -0,0 +1,149 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +IF(SALOME_BUILD_GUI) + INCLUDE(UseQt4Ext) + INCLUDE(${QT_USE_FILE}) +ENDIF() + +# --- options --- + +# additional include directories +INCLUDE_DIRECTORIES( + ${CAS_INCLUDE_DIRS} + ${KERNEL_INCLUDE_DIRS} + ${PROJECT_BINARY_DIR}/idl + ${PROJECT_SOURCE_DIR}/src/GEOMAlgo + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/GEOM_I + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_SOURCE_DIR}/src/GEOMUtils + ) + +IF(SALOME_BUILD_GUI) + INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIRS} + ${GUI_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/src/OBJECT + ${PROJECT_SOURCE_DIR}/src/GEOMGUI + ${PROJECT_SOURCE_DIR}/src/GEOMBase + ) +ENDIF() + +# additional preprocessor / compiler flags +ADD_DEFINITIONS( + ${CAS_DEFINITIONS} + ) + +IF(SALOME_BUILD_GUI) +ADD_DEFINITIONS( + ${QT_DEFINITIONS} + ) +ENDIF() + +# libraries to link to +SET(_link_engine_LIBRARIES + ${CAS_TKIGES} + ${KERNEL_SALOMELocalTrace} + ${KERNEL_OpUtil} + SalomeIDLGEOM + SalomeIDLIGESPlugin + GEOMEngine + GEOMClient + ) + +IF(SALOME_BUILD_GUI) + SET(_link_gui_LIBRARIES + SalomeIDLIGESPlugin + GEOMObject + GEOM + GEOMBase + ) +ENDIF() + + +# --- headers --- + +SET(IGESPluginEngine_HEADERS + IGESPlugin_IOperations_i.hh + IGESPlugin_Engine.hxx + IGESPlugin_OperationsCreator.hxx + IGESPlugin_IOperations.hxx + IGESPlugin_IExport.hxx + IGESPlugin_IImport.hxx + IGESPlugin_ImportDriver.hxx + IGESPlugin_ExportDriver.hxx + IGESPlugin_IECallBack.hxx + ) + +IF(SALOME_BUILD_GUI) + # header files / to be processed by moc + SET(_moc_HEADERS + IGESPlugin_GUI.h + IGESPlugin_ExportDlg.h + ) +ENDIF() + +# --- sources --- + +IF(SALOME_BUILD_GUI) + # sources / moc wrappings + QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) + + SET(IGESPluginGUI_SOURCES + IGESPlugin_GUI.cxx + IGESPlugin_ExportDlg.cxx + ${_moc_SOURCES} + ) +ENDIF() + +SET(IGESPluginEngine_SOURCES + IGESPlugin_Engine.cxx + IGESPlugin_OperationsCreator.cxx + IGESPlugin_IOperations_i.cc + IGESPlugin_IOperations.cxx + IGESPlugin_ExportDriver.cxx + IGESPlugin_ImportDriver.cxx + IGESPlugin_IECallBack.cxx + ) + +# resource files / to be processed by lrelease +SET(IGESPlugin_RESOURCES + IGESPlugin_msg_en.ts + IGESPlugin_msg_fr.ts + IGESPlugin_msg_ja.ts + ) + +# --- rules --- + +ADD_LIBRARY(IGESPluginEngine ${IGESPluginEngine_SOURCES}) +TARGET_LINK_LIBRARIES(IGESPluginEngine ${_link_engine_LIBRARIES}) +INSTALL(TARGETS IGESPluginEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +IF(SALOME_BUILD_GUI) + ADD_LIBRARY(IGESPluginGUI ${IGESPluginGUI_SOURCES}) + TARGET_LINK_LIBRARIES(IGESPluginGUI ${_link_gui_LIBRARIES}) + INSTALL(TARGETS IGESPluginGUI EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + + QT4_INSTALL_TS_RESOURCES("${IGESPlugin_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}") +ENDIF() + + +INSTALL(FILES ${IGESPluginEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/IGESPlugin/IGESPlugin_Engine.cxx b/src/IGESPlugin/IGESPlugin_Engine.cxx new file mode 100644 index 000000000..6f0c726ee --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_Engine.cxx @@ -0,0 +1,31 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_Engine.hxx" +#include "IGESPlugin_OperationsCreator.hxx" + +extern "C" +{ + IGESPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + return new IGESPlugin_OperationsCreator(); + } +} diff --git a/src/IGESPlugin/IGESPlugin_Engine.hxx b/src/IGESPlugin/IGESPlugin_Engine.hxx new file mode 100755 index 000000000..5d01abe8c --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_Engine.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOM_IGESPLUGIN_ENGINE_HXX_ +#define _GEOM_IGESPLUGIN_ENGINE_HXX_ + +#ifdef WIN32 + #if defined IGESPLUGINENGINE_EXPORTS || defined IGESPLUGINENGINE_EXPORTS + #define IGESPLUGINENGINE_EXPORT __declspec( dllexport ) + #else + #define IGESPLUGINENGINE_EXPORT __declspec( dllimport ) + #endif +#else + #define IGESPLUGINENGINE_EXPORT +#endif + +#endif diff --git a/src/IGESPlugin/IGESPlugin_ExportDlg.cxx b/src/IGESPlugin/IGESPlugin_ExportDlg.cxx new file mode 100644 index 000000000..1b21c2c30 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_ExportDlg.cxx @@ -0,0 +1,88 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "IGESPlugin_ExportDlg.h" + +#include +#include +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +IGESPlugin_ExportDlg::IGESPlugin_ExportDlg( QWidget* parent ) + : SUIT_FileDlg( parent, false, true, true ) +{ + QLabel* versionLabel = new QLabel( tr( "IGES_VERSION" ), this ); + + myVersionCB = new QComboBox( this ); + myVersionCB->addItem( tr( "5.1" ) ); + myVersionCB->addItem( tr( "5.3" ) ); + + layout()->addWidget( versionLabel ); + layout()->addWidget( myVersionCB ); +} + +//================================================================================= +// Destructor +//================================================================================= +IGESPlugin_ExportDlg::~IGESPlugin_ExportDlg() +{ +} + +//================================================================================= +// getVersion +//================================================================================= +QString IGESPlugin_ExportDlg::getVersion() const +{ + return myVersionCB->currentText(); +} + +//================================================================================= +// getFileName +//================================================================================= +QString IGESPlugin_ExportDlg::getFileName( const QString& initial, const QString& filters, + const QString& caption, QWidget* parent, QString& version ) +{ + QStringList fls = filters.split( ";;", QString::SkipEmptyParts ); + + QString tmpfilename = initial; + tmpfilename = tmpfilename.simplified(); + tmpfilename = tmpfilename.replace( QRegExp( "\\*" ), "" ).replace( QRegExp( "\\?" ), "" ); + + IGESPlugin_ExportDlg fd( parent ); + fd.setFileMode( AnyFile ); + fd.setFilters( fls ); + fd.setWindowTitle( caption ); + if ( !tmpfilename.isEmpty() ) + fd.processPath( tmpfilename ); + + QString filename; + + if ( fd.exec() == QDialog::Accepted ) { + filename = fd.selectedFile(); + version = fd.getVersion(); + } + + QApplication::processEvents(); + + return filename; +} + diff --git a/src/IGESPlugin/IGESPlugin_ExportDlg.h b/src/IGESPlugin/IGESPlugin_ExportDlg.h new file mode 100644 index 000000000..454b09a2a --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_ExportDlg.h @@ -0,0 +1,44 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef IGESPlugin_ExportDlg_H +#define IGESPlugin_ExportDlg_H + +#include + +class QComboBox; + +class IGESPlugin_ExportDlg: public SUIT_FileDlg +{ + Q_OBJECT + +public: + IGESPlugin_ExportDlg( QWidget* parent ); + ~IGESPlugin_ExportDlg(); + + QString getVersion() const; + + static QString getFileName( const QString& initial, const QString& filters, + const QString& caption, QWidget* parent, QString& version ); + +private: + QComboBox* myVersionCB; +}; + +#endif // IGESPlugin_ExportDlg_H diff --git a/src/IGESPlugin/IGESPlugin_ExportDriver.cxx b/src/IGESPlugin/IGESPlugin_ExportDriver.cxx new file mode 100644 index 000000000..29d1ea789 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_ExportDriver.cxx @@ -0,0 +1,198 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_ExportDriver.hxx" +#include "IGESPlugin_IExport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" + +// OOCT includes +#include +#include +#include + +#include +#include + +//============================================================================= +/*! + * KindOfBRep + * \return 0 if theShape contains only simple entities (wires, edges and vertices), + * 1 if theShape contains only complex entities (shells, solids and compsolids) + * 2 if theShape contains only indifferent entities (faces) + * -1 if theShape contains both simple and complex entities (and in this case it + * cannot be saved without any loss neither in BRepMode == 0 nor in BRepMode == 1) + */ +//============================================================================= +int KindOfBRep (const TopoDS_Shape& theShape) +{ + int aKind = 2; + + switch (theShape.ShapeType()) + { + case TopAbs_COMPOUND: + { + bool isSimple = false; + bool isComplex = false; + TopoDS_Iterator anIt (theShape, Standard_True, Standard_True); + for (; anIt.More(); anIt.Next()) { + TopoDS_Shape aS = anIt.Value(); + int aKindSub = KindOfBRep(aS); + if (aKindSub == 0) + isSimple = true; + else if (aKindSub == 1) + isComplex = true; + else if (aKindSub == -1) { + return -1; // heterogeneous + } + } + if (isSimple && isComplex) + aKind = -1; // heterogeneous + else if (isSimple) + aKind = 0; + else if (isComplex) + aKind = 1; + } + break; + case TopAbs_COMPSOLID: + case TopAbs_SOLID: + case TopAbs_SHELL: + aKind = 1; + break; + case TopAbs_WIRE: + case TopAbs_EDGE: + case TopAbs_VERTEX: + aKind = 0; + break; + default: + aKind = 2; + } + + return aKind; +} + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& IGESPlugin_ExportDriver::GetID() +{ + static Standard_GUID aGUID("8fa4111a-24cb-4819-8f03-b0e2890d2a2a"); + return aGUID; +} + +//======================================================================= +//function : IGESPlugin_ExportDriver +//purpose : +//======================================================================= +IGESPlugin_ExportDriver::IGESPlugin_ExportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer IGESPlugin_ExportDriver::Execute( TFunction_Logbook& log ) const +{ + if (Label().IsNull()) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + IGESPlugin_IExport aData (aFunction); + + // retrieve the being exported shape + TopoDS_Shape aShape; + Handle(GEOM_Function) aRefFunction = aData.GetOriginal(); + if( aRefFunction.IsNull() ) return 0; + aShape = aRefFunction->GetValue(); + if( aShape.IsNull() ) return 0; + // set the result of function to be used by next operations + aFunction->SetValue( aShape ); + + TCollection_AsciiString aFileName = aData.GetFileName(); + TCollection_AsciiString aVersion = aData.GetVersion(); + // define, whether to write only faces (5.1 IGES format) + // or shells and solids also (5.3 IGES format) + int aBrepMode = 0; + if( aVersion.IsEqual( "5.3" ) ) + aBrepMode = 1; + + MESSAGE("Export IGES into file " << aFileName.ToCString()); + + // Mantis issue 0021350: check being exported shape, as some standalone + // entities (edges, wires and vertices) cannot be saved in BRepMode + if( aBrepMode == 1 ) { + int aKind = KindOfBRep( aShape ); + if( aKind == -1 ) + Standard_Failure::Raise( "EXPORT_IGES_HETEROGENEOUS_COMPOUND" ); + else if( aKind == 2 ) + aBrepMode = 1; + else + aBrepMode = aKind; + } + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + // initialize writer + IGESControl_Controller::Init(); + IGESControl_Writer ICW( "M", aBrepMode ); // export explicitly in meters + Interface_Static::SetCVal( "xstep.cascade.unit", "M" ); + + // 09.03.2010 skl for bug 0020726 + // change default value "Average" to "Max" + Interface_Static::SetCVal( "write.precision.mode", "Max" ); + + // perform shape writing + if( ICW.AddShape( aShape ) ) { + ICW.ComputeModel(); + return ICW.Write( aFileName.ToCString() ); + } + return 0; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean IGESPlugin_ExportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ +bool IGESPlugin_ExportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + return false; +} + +IMPLEMENT_STANDARD_HANDLE( IGESPlugin_ExportDriver,GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( IGESPlugin_ExportDriver,GEOM_BaseDriver ); diff --git a/src/IGESPlugin/IGESPlugin_ExportDriver.hxx b/src/IGESPlugin/IGESPlugin_ExportDriver.hxx new file mode 100644 index 000000000..353324deb --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_ExportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _IGESPlugin_ExportDriver_HXX +#define _IGESPlugin_ExportDriver_HXX + +// internal includes +#include "IGESPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( IGESPlugin_ExportDriver, GEOM_BaseDriver ); + +class IGESPLUGINENGINE_EXPORT IGESPlugin_ExportDriver : public GEOM_BaseDriver +{ +public: + IGESPlugin_ExportDriver(); + ~IGESPlugin_ExportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( IGESPlugin_ExportDriver ) +}; + +#endif // _IGESPlugin_ExportDriver_HXX diff --git a/src/IGESPlugin/IGESPlugin_GUI.cxx b/src/IGESPlugin/IGESPlugin_GUI.cxx new file mode 100644 index 000000000..0dc269914 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_GUI.cxx @@ -0,0 +1,305 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_GUI.h" +#include "IGESPlugin_ExportDlg.h" + +// GUI includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// GEOM includes +#include "GeometryGUI.h" +#include "GEOM_Operation.h" +#include "GEOMBase.h" +#include "GEOM_Displayer.h" + +#include +#include CORBA_SERVER_HEADER(IGESPlugin) + +//======================================================================= +// function : IGESPlugin_GUI() +// purpose : Constructor +//======================================================================= +IGESPlugin_GUI::IGESPlugin_GUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) +{ +} + +//======================================================================= +// function : ~IGESPlugin_GUI +// purpose : Destructor +//======================================================================= +IGESPlugin_GUI::~IGESPlugin_GUI() +{ +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool IGESPlugin_GUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) +{ + QString cmd; + switch ( theCommandID ) { + case 1: + cmd = "Export_IGES"; break; + case 2: + cmd = "Import_IGES"; break; + default: + break; + } + return OnGUIEvent( cmd, parent ); +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool IGESPlugin_GUI::OnGUIEvent( const QString& theCommandID, SUIT_Desktop* parent ) +{ + bool result = false; + + if( theCommandID == "Export_IGES" ) { + result = exportIGES( parent ); + } + else if (theCommandID == "Import_IGES") { + result = importIGES( parent ); + } + else { + getGeometryGUI()->getApp()->putInfo( tr("GEOM_PRP_COMMAND").arg( theCommandID ) ); + } + + return true; +} + +//======================================================================= +// function : importIGES +// purpose : +//======================================================================= +bool IGESPlugin_GUI::importIGES( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "IGESPluginEngine" ); + GEOM::IIGESOperations_var igesOp = GEOM::IIGESOperations::_narrow( op ); + if ( CORBA::is_nil( igesOp ) ) return false; + + QStringList fileNames = app->getOpenFileNames( SUIT_FileDlg::getLastVisitedPath().isEmpty() ? QDir::currentPath() : QString(""), + tr( "IGES_FILES" ), + tr( "IMPORT_TITLE" ), + parent ); + if ( fileNames.count() > 0 ) + { + QStringList entryList; + QStringList errors; + SUIT_MessageBox::StandardButton igesAnswer = SUIT_MessageBox::NoButton; + + for ( int i = 0; i < fileNames.count(); i++ ) + { + QString fileName = fileNames.at( i ); + SUIT_OverrideCursor wc; + GEOM_Operation transaction( app, igesOp.in() ); + bool ignoreUnits = false; + + try + { + app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( SUIT_Tools::file( fileName, true ) ) ); + transaction.start(); + + CORBA::String_var units = igesOp->ReadValue( fileName.toUtf8().constData(), "LEN_UNITS" ); + QString unitsStr( units.in() ); + bool unitsOK = unitsStr.isEmpty() || unitsStr == "M" || unitsStr.toLower() == "metre"; + + if ( !unitsOK ) + { + if( igesAnswer == SUIT_MessageBox::NoToAll ) + { + ignoreUnits = true; + } + else if( igesAnswer != SUIT_MessageBox::YesToAll ) + { + SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No | SUIT_MessageBox::Cancel; + if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; + igesAnswer = SUIT_MessageBox::question( parent, + tr( "WRN_WARNING" ), + tr( "SCALE_DIMENSIONS" ).arg( unitsStr ), + btns, + SUIT_MessageBox::No ); + switch ( igesAnswer ) + { + case SUIT_MessageBox::Cancel: + return true; // cancel (break) import operation + case SUIT_MessageBox::Yes: + case SUIT_MessageBox::YesToAll: + break; // scaling is confirmed + case SUIT_MessageBox::No: + case SUIT_MessageBox::NoAll: + ignoreUnits = true; // scaling is rejected + default: + break; + } + } + } + + GEOM::ListOfGO_var result = igesOp->ImportIGES( fileName.toUtf8().constData(), ignoreUnits ); + if ( result->length() > 0 && igesOp->IsDone() ) + { + GEOM::GEOM_Object_var main = result[0]; + QString publishName = GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, true ) ); + SALOMEDS::SObject_var so = GeometryGUI::GetGeomGen()->PublishInStudy( dsStudy, + SALOMEDS::SObject::_nil(), + main.in(), + publishName.toUtf8().constData() ); + + entryList.append( so->GetID() ); + transaction.commit(); + GEOM_Displayer( study ).Display( main.in() ); + } + else + { + transaction.abort(); + errors.append( QString( "%1 : %2" ).arg( fileName ).arg( igesOp->GetErrorCode() ) ); + } + } + catch( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + } + } + + getGeometryGUI()->updateObjBrowser( true ); + app->browseObjects( entryList ); + + if ( errors.count() > 0 ) + { + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) ); + } + } + return fileNames.count() > 0; +} + +//======================================================================= +// function : exportIGES +// purpose : +//======================================================================= +bool IGESPlugin_GUI::exportIGES( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "IGESPluginEngine" ); + GEOM::IIGESOperations_var igesOp = GEOM::IIGESOperations::_narrow( op ); + if ( CORBA::is_nil( igesOp ) ) return false; + + LightApp_SelectionMgr* sm = app->selectionMgr(); + if ( !sm ) return false; + + SALOME_ListIO selectedObjects; + sm->selectedObjects( selectedObjects ); + bool ok = false; + + SALOME_ListIteratorOfListIO it( selectedObjects ); + for ( ; it.More(); it.Next() ) + { + Handle(SALOME_InteractiveObject) io = it.Value(); + GEOM::GEOM_Object_var obj = GEOMBase::ConvertIOinGEOMObject( io ); + + if ( CORBA::is_nil( obj ) ) continue; + + QString version; + QString fileName = IGESPlugin_ExportDlg::getFileName( QString( io->getName() ), + tr( "IGES_FILES" ), + tr( "EXPORT_TITLE" ), + parent, + version ); + + if ( fileName.isEmpty() ) + return false; + + SUIT_OverrideCursor wc; + + GEOM_Operation transaction( app, igesOp.in() ); + + try + { + app->putInfo( tr( "GEOM_PRP_EXPORT" ).arg( fileName ) ); + transaction.start(); + + igesOp->ExportIGES( obj, fileName.toUtf8().constData(), version.toUtf8().constData() ); + + if ( igesOp->IsDone() ) + { + transaction.commit(); + } + else + { + transaction.abort(); + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_PRP_ABORT" ) + "\n" + tr( igesOp->GetErrorCode() ) ); + return false; + } + } + catch ( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + return false; + } + ok = true; + } + + if ( !ok ) + { + SUIT_MessageBox::warning( parent, + tr( "WRN_WARNING" ), + tr( "GEOM_WRN_NO_APPROPRIATE_SELECTION" ) ); + } + return ok; +} + +//===================================================================================== +// EXPORTED METHODS +//===================================================================================== +extern "C" +{ +#ifdef WIN32 + __declspec( dllexport ) +#endif + GEOMGUI* GetLibGUI( GeometryGUI* parent ) + { + return new IGESPlugin_GUI( parent ); + } +} diff --git a/src/IGESPlugin/IGESPlugin_GUI.h b/src/IGESPlugin/IGESPlugin_GUI.h new file mode 100644 index 000000000..58f6f9ccd --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_GUI.h @@ -0,0 +1,40 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef IGESPlugin_GUI_H +#define IGESPlugin_GUI_H + +#include "GEOMPluginGUI.h" + +class IGESPlugin_GUI: public GEOMPluginGUI +{ + Q_OBJECT +public: + IGESPlugin_GUI( GeometryGUI* parent ); + ~IGESPlugin_GUI(); + + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); + +private: + bool importIGES( SUIT_Desktop* ); + bool exportIGES( SUIT_Desktop* ); +}; + +#endif // IGESPlugin_GUI_H diff --git a/src/IGESPlugin/IGESPlugin_IECallBack.cxx b/src/IGESPlugin/IGESPlugin_IECallBack.cxx new file mode 100755 index 000000000..85937db65 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IECallBack.cxx @@ -0,0 +1,87 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_IECallBack.hxx" +#include "IGESPlugin_IOperations.hxx" +#include "IGESPlugin_OperationsCreator.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +IGESPlugin_IECallBack::IGESPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +IGESPlugin_IECallBack::~IGESPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool IGESPlugin_IECallBack::Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + IGESPlugin_IOperations* aPluginOperations = IGESPlugin_OperationsCreator::get( GetEngine(), theDocId ); + TCollection_AsciiString aVersion = ( theFormatName == "IGES_5_3" ) ? "5.3" : "5.1"; + aPluginOperations->ExportIGES( theOriginal, theFileName, aVersion ); + return true; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +IGESPlugin_IECallBack::Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ) +{ + IGESPlugin_IOperations* aPluginOperations = IGESPlugin_OperationsCreator::get( GetEngine(), theDocId ); + bool anIsIgnoreUnits = ( theFormatName == "IGES_SCALE" ) ? true : false; + return aPluginOperations->ImportIGES( theFileName, anIsIgnoreUnits ); +} + +//============================================================================= +/*! + * ReadValue + */ +//============================================================================= +TCollection_AsciiString +IGESPlugin_IECallBack::ReadValue( int theDocId, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theParameterName ) +{ + IGESPlugin_IOperations* aPluginOperations = IGESPlugin_OperationsCreator::get( GetEngine(), theDocId ); + return aPluginOperations->ReadValue( theFileName, theParameterName ); +} diff --git a/src/IGESPlugin/IGESPlugin_IECallBack.hxx b/src/IGESPlugin/IGESPlugin_IECallBack.hxx new file mode 100644 index 000000000..49b1f14e1 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IECallBack.hxx @@ -0,0 +1,54 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _IGESPlugin_IECallBack_HXX_ +#define _IGESPlugin_IECallBack_HXX_ + +// internal includes +#include "IGESPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Object.hxx" +#include "GEOMImpl_IECallBack.hxx" + +// OCC includes +#include + +class IGESPLUGINENGINE_EXPORT IGESPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + IGESPlugin_IECallBack(); + ~IGESPlugin_IECallBack(); + + bool Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); + + Handle(TColStd_HSequenceOfTransient) Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ); + + TCollection_AsciiString ReadValue( int theDocId, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theParameterName ); +}; + +#endif diff --git a/src/IGESPlugin/IGESPlugin_IExport.hxx b/src/IGESPlugin/IGESPlugin_IExport.hxx new file mode 100644 index 000000000..212480193 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IExport.hxx @@ -0,0 +1,54 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _IGESPlugin_IExport_HXX_ +#define _IGESPlugin_IExport_HXX_ + +#include "GEOM_Function.hxx" + +#define EXPORTIGES_ARG_ORIGINAL 1 +#define EXPORTIGES_ARG_FILENAME 2 +#define EXPORTIGES_ARG_VERSION 3 + +class IGESPlugin_IExport +{ +public: + IGESPlugin_IExport( Handle(GEOM_Function) theFunction ) + : _func(theFunction) {} + + void SetOriginal( Handle( GEOM_Function ) theOriginal) + { _func->SetReference( EXPORTIGES_ARG_ORIGINAL, theOriginal ); } + Handle( GEOM_Function ) GetOriginal() + { return _func->GetReference( EXPORTIGES_ARG_ORIGINAL ); } + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( EXPORTIGES_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( EXPORTIGES_ARG_FILENAME ); } + + void SetVersion( const TCollection_AsciiString& theVersion ) + { _func->SetString( EXPORTIGES_ARG_VERSION, theVersion ); } + TCollection_AsciiString GetVersion() + { return _func->GetString( EXPORTIGES_ARG_VERSION ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _IGESPlugin_IExport_HXX_ diff --git a/src/IGESPlugin/IGESPlugin_IImport.hxx b/src/IGESPlugin/IGESPlugin_IImport.hxx new file mode 100644 index 000000000..da1953d80 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IImport.hxx @@ -0,0 +1,48 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _IGESPlugin_IImport_HXX_ +#define _IGESPlugin_IImport_HXX_ + +#include "GEOM_Function.hxx" + +#define IMPORTIGES_ARG_FILENAME 1 +#define IMPORTIGES_ARG_IGNORE_UNITS 2 + +class IGESPlugin_IImport +{ +public: + IGESPlugin_IImport( Handle(GEOM_Function) theFunction) + : _func(theFunction) {} + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( IMPORTIGES_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( IMPORTIGES_ARG_FILENAME ); } + + void SetIsIgnoreUnits( bool theIsIgnoreUnits ) + { _func->SetInteger( IMPORTIGES_ARG_IGNORE_UNITS, int( theIsIgnoreUnits ) ); } + bool GetIsIgnoreUnits() + { return bool( _func->GetInteger( IMPORTIGES_ARG_IGNORE_UNITS ) ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _IGESPlugin_IImport_HXX_ diff --git a/src/IGESPlugin/IGESPlugin_IOperations.cxx b/src/IGESPlugin/IGESPlugin_IOperations.cxx new file mode 100644 index 000000000..a6af6a7aa --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IOperations.cxx @@ -0,0 +1,210 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_IOperations.hxx" +#include "IGESPlugin_ExportDriver.hxx" +#include "IGESPlugin_ImportDriver.hxx" +#include "IGESPlugin_IExport.hxx" +#include "IGESPlugin_IImport.hxx" + +// KERNEL includes +#include + +// GEOM includes +#include "GEOM_PythonDump.hxx" +#include "GEOMImpl_Types.hxx" + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +IGESPlugin_IOperations::IGESPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "IGESPlugin_IOperations::IGESPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +IGESPlugin_IOperations::~IGESPlugin_IOperations() +{ + MESSAGE( "IGESPlugin_IOperations::~IGESPlugin_IOperations" ); +} + +//============================================================================= +/*! + * ExportIGES + * Export a shape to IGES format + * \param theOriginal The shape to export + * \param theFileName The name of the file to exported + * \param theIsASCII The format of the exported file (ASCII or Binary) + * \param theDeflection The deflection of the shape to exported + * \param theVersion The version of IGES format which defines, whether to write + * only faces (5.1 IGES format) or shells and solids also (5.3 IGES format). + */ +//============================================================================= +void IGESPlugin_IOperations::ExportIGES( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theVersion ) +{ + SetErrorCode(KO); + if( theOriginal.IsNull() ) return; + + Handle(GEOM_Function) aRefFunction = theOriginal->GetLastFunction(); + if( aRefFunction.IsNull() ) return; //There is no function which creates an object to be exported + + //Add a new result object + Handle(GEOM_Object) result = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT); + + //Add an Export function + Handle(GEOM_Function) aFunction = result->AddFunction( IGESPlugin_ExportDriver::GetID(), EXPORT_SHAPE ); + if( aFunction.IsNull() ) return; + + //Check if the function is set correctly + if( aFunction->GetDriverGUID() != IGESPlugin_ExportDriver::GetID() ) return; + + //Set parameters + IGESPlugin_IExport aCI( aFunction ); + aCI.SetOriginal( aRefFunction ); + aCI.SetFileName( theFileName ); + aCI.SetVersion( theVersion ); + + //Perform the Export + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Not enough space on disk, or you haven't permissions to write this directory" ); + return; + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << "geompy.ExportIGES(" << theOriginal << ", \"" + << theFileName.ToCString() << "\", \"" << theVersion.ToCString() << "\" )"; + + SetErrorCode(OK); +} + +//============================================================================= +/*! + * ImportIGES + * Import a shape from IGES format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +IGESPlugin_IOperations::ImportIGES( const TCollection_AsciiString& theFileName, + const bool theIsIgnoreUnits ) +{ + SetErrorCode(KO); + if( theFileName.IsEmpty() ) return NULL; + + //Add a new result object + Handle(GEOM_Object) anImported = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT ); + + //Add an Import function + Handle(GEOM_Function) aFunction = + anImported->AddFunction( IGESPlugin_ImportDriver::GetID(), IMPORT_SHAPE); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != IGESPlugin_ImportDriver::GetID()) return NULL; + + //Set parameters + IGESPlugin_IImport aCI( aFunction ); + aCI.SetFileName( theFileName ); + aCI.SetIsIgnoreUnits( theIsIgnoreUnits ); + + //Perform the Import + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Import driver failed" ); + return NULL; + } + aSeq->Append(anImported); + + // Greate material groups. + // MakeMaterialGroups( anImported, aSeq ); + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump pd (aFunction); + if( theIsIgnoreUnits ) + pd << aSeq << " = geompy.ImportIGES(\"" << theFileName.ToCString() << "\", True)"; + else + pd << aSeq << " = geompy.ImportIGES(\"" << theFileName.ToCString() << "\")"; + SetErrorCode(OK); + + return aSeq; +} + +//============================================================================= +/*! + * ReadValue + */ +//============================================================================= +TCollection_AsciiString IGESPlugin_IOperations::ReadValue + ( const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theParameterName ) +{ + SetErrorCode(KO); + + TCollection_AsciiString aValue, anError; + + if (theFileName.IsEmpty() || theParameterName.IsEmpty()) return aValue; + + aValue = IGESPlugin_ImportDriver::GetValue( theFileName, theParameterName, anError ); + + if( aValue.IsEmpty() ) { + if( anError.IsEmpty() ) + anError = theFileName + " doesn't contain requested parameter"; + return aValue; + } + if (anError.IsEmpty()) + SetErrorCode(OK); + else + SetErrorCode(anError.ToCString()); + + return aValue; +} diff --git a/src/IGESPlugin/IGESPlugin_IOperations.hxx b/src/IGESPlugin/IGESPlugin_IOperations.hxx new file mode 100644 index 000000000..a834f5765 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IOperations.hxx @@ -0,0 +1,47 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : IGESPlugin_IOperations.hxx + +#ifndef _IGESPlugin_IOperations_HXX_ +#define _IGESPlugin_IOperations_HXX_ + +// internal includes +#include "IGESPlugin_Engine.hxx" + +// GEOM includes +#include "GEOMImpl_IBaseIEOperations.hxx" + +class IGESPLUGINENGINE_EXPORT IGESPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + IGESPlugin_IOperations( GEOM_Engine*, int ); + ~IGESPlugin_IOperations(); + + void ExportIGES( const Handle(GEOM_Object), + const TCollection_AsciiString&, + const TCollection_AsciiString& ); + + Handle(TColStd_HSequenceOfTransient) ImportIGES( const TCollection_AsciiString&, + const bool ); + + TCollection_AsciiString ReadValue( const TCollection_AsciiString&, + const TCollection_AsciiString& ); +}; + +#endif diff --git a/src/IGESPlugin/IGESPlugin_IOperations_i.cc b/src/IGESPlugin/IGESPlugin_IOperations_i.cc new file mode 100644 index 000000000..0b8766629 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IOperations_i.cc @@ -0,0 +1,130 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_IOperations_i.hh" +#include "IGESPlugin_IOperations.hxx" + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +IGESPlugin_IOperations_i::IGESPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + IGESPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "IGESPlugin_IOperations_i::IGESPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +IGESPlugin_IOperations_i::~IGESPlugin_IOperations_i() +{ + MESSAGE( "IGESPlugin_IOperations_i::~IGESPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * ExportIGES + * Export a shape to IGES format + * \param theOriginal The shape to export + * \param theFileName The name of the exported file + * \param theVersion The version of IGES format which defines, whether to write + * only faces (5.1 IGES format) or shells and solids also (5.3 IGES format). + */ +//============================================================================= +void IGESPlugin_IOperations_i::ExportIGES( GEOM::GEOM_Object_ptr theOriginal, + const char* theFileName, + const char* theVersion ) +{ + // duplicate the original shape + GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate( theOriginal ); + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference shape + Handle(GEOM_Object) anOriginal = GetObjectImpl( theOriginal ); + if (anOriginal.IsNull()) return; + + GetOperations()->ExportIGES( anOriginal, theFileName, theVersion ); +} + +//============================================================================= +/*! + * ImportIGES + * Import a shape from IGES format + * \param theFileName The name of the file to import + * \param theIsIgnoreUnits If True, file length units will be ignored (set to 'meter') + * and result model will be scaled, if its units are not meters. + * If False (default), file length units will be taken into account. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +GEOM::ListOfGO* IGESPlugin_IOperations_i::ImportIGES( const char* theFileName, + const bool theIsIgnoreUnits = false ) +{ + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Import the shape from the file + Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->ImportIGES( theFileName, theIsIgnoreUnits ); + + if( !GetOperations()->IsDone() || aHSeq.IsNull() ) + return aSeq._retn(); + + // Copy created objects. + Standard_Integer aLength = aHSeq->Length(); + aSeq->length( aLength ); + for( Standard_Integer i = 1; i <= aLength; i++ ) + aSeq[i-1] = GetObject( Handle(GEOM_Object)::DownCast( aHSeq->Value(i) ) ); + + return aSeq._retn(); +} + +//============================================================================= +/*! + * ReadValue + */ +//============================================================================= +char* IGESPlugin_IOperations_i::ReadValue( const char* theFileName, + const char* theParameterName ) +{ + //Set a not done flag + GetOperations()->SetNotDone(); + + TCollection_AsciiString aParam = GetOperations()->ReadValue( theFileName, theParameterName ); + + return CORBA::string_dup( aParam.ToCString() ); +} + +IGESPlugin_IOperations* IGESPlugin_IOperations_i::GetOperations() +{ + return (IGESPlugin_IOperations*)GetImpl(); +} diff --git a/src/IGESPlugin/IGESPlugin_IOperations_i.hh b/src/IGESPlugin/IGESPlugin_IOperations_i.hh new file mode 100644 index 000000000..755b09769 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_IOperations_i.hh @@ -0,0 +1,53 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _IGESPlugin_IOperations_i_HeaderFile +#define _IGESPlugin_IOperations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( IGESPlugin ) + +// internal includes +#include "IGESPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_IOperations_i.hh" + +class IGESPlugin_IOperations; + +class IGESPLUGINENGINE_EXPORT IGESPlugin_IOperations_i : + public virtual POA_GEOM::IIGESOperations, + public virtual GEOM_IOperations_i +{ +public: + IGESPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + IGESPlugin_IOperations* theImpl ); + ~IGESPlugin_IOperations_i(); + + void ExportIGES( GEOM::GEOM_Object_ptr, const char*, const char* ); + GEOM::ListOfGO* ImportIGES( const char*, const bool ); + char* ReadValue( const char*, const char* ); + + IGESPlugin_IOperations* GetOperations(); +}; + +#endif diff --git a/src/IGESPlugin/IGESPlugin_ImportDriver.cxx b/src/IGESPlugin/IGESPlugin_ImportDriver.cxx new file mode 100644 index 000000000..4ae420e9b --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_ImportDriver.cxx @@ -0,0 +1,292 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_ImportDriver.hxx" +#include "IGESPlugin_IImport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" +#include "GEOMImpl_Types.hxx" + +// OOCT includes +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& IGESPlugin_ImportDriver::GetID() +{ + static Standard_GUID aGUID("3dbb09b8-659f-4a0f-88b9-d9968c43a448"); + return aGUID; +} + +//======================================================================= +//function : IGESPlugin_ImportDriver +//purpose : +//======================================================================= +IGESPlugin_ImportDriver::IGESPlugin_ImportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer IGESPlugin_ImportDriver::Execute( TFunction_Logbook& log ) const +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + IGESPlugin_IImport aData( aFunction ); + + TCollection_AsciiString aFileName = aData.GetFileName().ToCString(); + bool anIsIgnoreUnits = aData.GetIsIgnoreUnits(); + TDF_Label aShapeLabel = aFunction->GetNamingEntry(); + + TopoDS_Shape aResShape; + TCollection_AsciiString anError; + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + IGESControl_Reader aReader; + + Interface_Static::SetCVal( "xstep.cascade.unit", "M" ); + + try { + OCC_CATCH_SIGNALS; + + IFSelect_ReturnStatus status = aReader.ReadFile( aFileName.ToCString() ); + + if (status == IFSelect_RetDone) { + if( anIsIgnoreUnits ) { + // need re-scale a model, set UnitFlag to 'meter' + Handle(IGESData_IGESModel) aModel = + Handle(IGESData_IGESModel)::DownCast( aReader.Model() ); + if( !aModel.IsNull() ) { + IGESData_GlobalSection aGS = aModel->GlobalSection(); + aGS.SetUnitFlag(6); + aModel->SetGlobalSection(aGS); + } + } + + MESSAGE("ImportIGES : all Geometry Transfer"); + //OCC 5.1.2 porting + // aReader.Clear(); + // aReader.TransferRoots(false); + aReader.ClearShapes(); + aReader.TransferRoots(); + + MESSAGE("ImportIGES : count of shapes produced = " << aReader.NbShapes()); + aResShape = aReader.OneShape(); + + // BEGIN: Store names of sub-shapes from file + Handle(Interface_InterfaceModel) Model = aReader.WS()->Model(); + Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader(); + if (!TR.IsNull()) { + Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess(); + Standard_Integer nb = Model->NbEntities(); + for (Standard_Integer i = 1; i <= nb; i++) { + Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast(Model->Value(i)); + if (ent.IsNull() || ! ent->HasName()) continue; + + // find target shape + Handle(Transfer_Binder) binder = TP->Find( ent ); + if( binder.IsNull() ) continue; + TopoDS_Shape S = TransferBRep::ShapeResult( binder ); + if( S.IsNull() ) continue; + + // create label and set shape + TDF_Label L; + TDF_TagSource aTag; + L = aTag.NewChild( aShapeLabel ); + TNaming_Builder tnBuild (L); + tnBuild.Generated(S); + + // set a name + TCollection_AsciiString string = ent->NameValue()->String(); + string.LeftAdjust(); + string.RightAdjust(); + TCollection_ExtendedString str (string); + TDataStd_Name::Set(L, str); + } + } + // END: Store names + } + else { + switch (status) { + case IFSelect_RetVoid: + anError = "Nothing created or No data to process"; + break; + case IFSelect_RetError: + anError = "Error in command or input data"; + break; + case IFSelect_RetFail: + anError = "Execution was run, but has failed"; + break; + case IFSelect_RetStop: + anError = "Execution has been stopped. Quite possible, an exception was raised"; + break; + default: + break; + } + anError = "Wrong format of the imported file. Can't import file."; + aResShape.Nullify(); + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + anError = aFail->GetMessageString(); + aResShape.Nullify(); + } + + if( aResShape.IsNull() ) { + StdFail_NotDone::Raise( anError.ToCString() ); + return 0; + } + + aFunction->SetValue( aResShape ); + + log.SetTouched( Label() ); + + return 1; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean IGESPlugin_ImportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ + +bool IGESPlugin_ImportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction( Label() ); + + IGESPlugin_IImport aCI( function ); + Standard_Integer aType = function->GetType(); + + theOperationName = "ImportIGES"; + + switch ( aType ) { + case IMPORT_SHAPE: + AddParam( theParams, "File name", aCI.GetFileName() ); + if( aCI.GetIsIgnoreUnits() ) + AddParam( theParams, "Format", "IGES_SCALE" ); + break; + default: + return false; + } + return true; +} + +TCollection_AsciiString +IGESPlugin_ImportDriver::GetValue( const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theParameterName, + TCollection_AsciiString& theError ) +{ + Handle(TCollection_HAsciiString) aValue; + + if (theParameterName != "LEN_UNITS") { + theError = theParameterName + " parameter reading is not supported by IGES plugin"; + return TCollection_AsciiString(); + } + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + IGESControl_Reader aReader; + + Interface_Static::SetCVal("xstep.cascade.unit","M"); + + try { + OCC_CATCH_SIGNALS; + + IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString()); + if (status == IFSelect_RetDone) { + Handle(IGESData_IGESModel) aModel = + Handle(IGESData_IGESModel)::DownCast(aReader.Model()); + if (!aModel.IsNull()) { + aValue = aModel->GlobalSection().UnitName(); + //if (!aValue.IsNull()) { + // Handle(TCollection_HAsciiString) aPrefix = new TCollection_HAsciiString ("UNIT_"); + // aValue->Prepend(aPrefix); + //} + } + } + else { + theError = theFileName + " reading failed"; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + theError = aFail->GetMessageString(); + } + if (!aValue.IsNull()) + return aValue->String(); + else + return TCollection_AsciiString(); +} + + +IMPLEMENT_STANDARD_HANDLE( IGESPlugin_ImportDriver, GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( IGESPlugin_ImportDriver, GEOM_BaseDriver ); diff --git a/src/IGESPlugin/IGESPlugin_ImportDriver.hxx b/src/IGESPlugin/IGESPlugin_ImportDriver.hxx new file mode 100644 index 000000000..2ab850f85 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_ImportDriver.hxx @@ -0,0 +1,56 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _IGESPlugin_ImportDriver_HXX +#define _IGESPlugin_ImportDriver_HXX + +// internal includes +#include "IGESPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( IGESPlugin_ImportDriver, GEOM_BaseDriver ); + +class IGESPLUGINENGINE_EXPORT IGESPlugin_ImportDriver : public GEOM_BaseDriver +{ +public: + IGESPlugin_ImportDriver(); + ~IGESPlugin_ImportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + + static + TCollection_AsciiString GetValue( const TCollection_AsciiString&, + const TCollection_AsciiString&, + TCollection_AsciiString& ); + +DEFINE_STANDARD_RTTI( IGESPlugin_ImportDriver ) +}; + +#endif // _IGESPlugin_ImportDriver_HXX diff --git a/src/IGESPlugin/IGESPlugin_OperationsCreator.cxx b/src/IGESPlugin/IGESPlugin_OperationsCreator.cxx new file mode 100644 index 000000000..3ea6fc73d --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_OperationsCreator.cxx @@ -0,0 +1,72 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "IGESPlugin_OperationsCreator.hxx" +#include "IGESPlugin_IOperations_i.hh" +#include "IGESPlugin_IOperations.hxx" +#include "IGESPlugin_ExportDriver.hxx" +#include "IGESPlugin_ImportDriver.hxx" +#include "IGESPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// OCCT includes +#include + +std::map IGESPlugin_OperationsCreator::_mapOfOperations; + +IGESPlugin_OperationsCreator::IGESPlugin_OperationsCreator() +{ + // Register drivers + TFunction_DriverTable::Get()->AddDriver( IGESPlugin_ExportDriver::GetID(), + new IGESPlugin_ExportDriver() ); + TFunction_DriverTable::Get()->AddDriver( IGESPlugin_ImportDriver::GetID(), + new IGESPlugin_ImportDriver() ); + + // Register callback + IGESPlugin_IECallBack* callback = new IGESPlugin_IECallBack(); + GEOMImpl_IECallBack::Register( "IGES", callback ); + GEOMImpl_IECallBack::Register( "IGES_5_3", callback ); + GEOMImpl_IECallBack::Register( "IGES_SCALE", callback ); +} + +IGESPlugin_OperationsCreator::~IGESPlugin_OperationsCreator() +{ +} + +GEOM_IOperations_i* IGESPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "IGESPlugin_OperationsCreator::Create" ); + return new IGESPlugin_IOperations_i( thePOA, theEngine, get( theGenImpl, theStudyId ) ); +} + +IGESPlugin_IOperations* IGESPlugin_OperationsCreator::get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ) +{ + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) + _mapOfOperations[theStudyId] = new IGESPlugin_IOperations( theGenImpl, theStudyId ); + return _mapOfOperations[theStudyId]; +} diff --git a/src/IGESPlugin/IGESPlugin_OperationsCreator.hxx b/src/IGESPlugin/IGESPlugin_OperationsCreator.hxx new file mode 100755 index 000000000..fa2eeb014 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_OperationsCreator.hxx @@ -0,0 +1,57 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOM_IGESPlugin_OperationsCreator_HXX_ +#define _GEOM_IGESPlugin_OperationsCreator_HXX_ + +// internal includes +#include "IGESPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +class IGESPlugin_IOperations; + +//===================================================================== +// Operations creator +//===================================================================== +class IGESPLUGINENGINE_EXPORT IGESPlugin_OperationsCreator : public GEOM_GenericOperationsCreator +{ +public: + IGESPlugin_OperationsCreator(); + ~IGESPlugin_OperationsCreator(); + + GEOM_IOperations_i* Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ); +private: + static IGESPlugin_IOperations* get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ); + +private: + static std::map _mapOfOperations; + + friend class IGESPlugin_IECallBack; +}; + +#endif diff --git a/src/IGESPlugin/IGESPlugin_msg_en.ts b/src/IGESPlugin/IGESPlugin_msg_en.ts new file mode 100644 index 000000000..7e1586624 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_msg_en.ts @@ -0,0 +1,58 @@ + + + + + @default + + MEN_EXPORTIGES + IGES + + + TOP_EXPORTIGES + Export IGES + + + STB_EXPORTIGES + Export IGES + + + MEN_IMPORTIGES + IGES + + + TOP_IMPORTIGES + Import IGES + + + STB_IMPORTIGES + Import IGES + + + + IGESPlugin_GUI + + IGES_FILES + IGES Files ( *.iges *.igs ) + + + EXPORT_TITLE + Export IGES + + + IMPORT_TITLE + Import IGES + + + SCALE_DIMENSIONS + Take into account the units (%1) embedded to the file? +Ignoring units will cause model scaling (as dimensions are supposed to be specified in meters). + + + + IGESPlugin_ExportDlg + + IGES_VERSION + Version + + + diff --git a/src/IGESPlugin/IGESPlugin_msg_fr.ts b/src/IGESPlugin/IGESPlugin_msg_fr.ts new file mode 100644 index 000000000..f5b26302c --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_msg_fr.ts @@ -0,0 +1,58 @@ + + + + + @default + + MEN_EXPORTIGES + IGES + + + TOP_EXPORTIGES + Exporter IGES + + + STB_EXPORTIGES + Exporter IGES + + + MEN_IMPORTIGES + IGES + + + TOP_IMPORTIGES + Importer IGES + + + STB_IMPORTIGES + Importer IGES + + + + IGESPlugin_GUI + + IGES_FILES + IGES Fichiers ( *.iges *.igs ) + + + EXPORT_TITLE + Exporter IGES + + + IMPORT_TITLE + Importer IGES + + + SCALE_DIMENSIONS + Voulez-vous prendre les unités du fichier (%1) en considération? +Sinon le modèle sera mis à l'échelle GEOM (unités interprétées comme des mètres). + + + + IGESPlugin_ExportDlg + + IGES_VERSION + Version + + + diff --git a/src/IGESPlugin/IGESPlugin_msg_ja.ts b/src/IGESPlugin/IGESPlugin_msg_ja.ts new file mode 100644 index 000000000..5064dead2 --- /dev/null +++ b/src/IGESPlugin/IGESPlugin_msg_ja.ts @@ -0,0 +1,57 @@ + + + + + @default + + MEN_EXPORTIGES + IGES + + + TOP_EXPORTIGES + Export IGES + + + STB_EXPORTIGES + Export IGES + + + MEN_IMPORTIGES + IGES + + + TOP_IMPORTIGES + Import IGES + + + STB_IMPORTIGES + Import IGES + + + + IGESPlugin_GUI + + IGES_FILES + IGES Files ( *.iges *.igs ) + + + EXPORT_TITLE + Export IGES + + + IMPORT_TITLE + Import IGES + + + SCALE_DIMENSIONS + インポートしたファイルの単位をミリメートルからメートルに変換しますか?いいえを選んだ場合、メートル単位として解釈します。 + + + + IGESPlugin_ExportDlg + + IGES_VERSION + Version + + + diff --git a/src/ImportExportGUI/CMakeLists.txt b/src/ImportExportGUI/CMakeLists.txt deleted file mode 100644 index f5d9416af..000000000 --- a/src/ImportExportGUI/CMakeLists.txt +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -INCLUDE(UseQt4Ext) -INCLUDE(${QT_USE_FILE}) - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${QT_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${VTK_INCLUDE_DIRS} - ${OMNIORB_INCLUDE_DIR} - ${CAS_INCLUDE_DIRS} - ${KERNEL_INCLUDE_DIRS} - ${GUI_INCLUDE_DIRS} - ${PROJECT_BINARY_DIR}/idl - ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/src/OBJECT - ${PROJECT_SOURCE_DIR}/src/GEOMClient - ${PROJECT_SOURCE_DIR}/src/GEOMImpl - ${PROJECT_SOURCE_DIR}/src/GEOMGUI - ${PROJECT_SOURCE_DIR}/src/GEOMBase - ${PROJECT_SOURCE_DIR}/src/GEOM - ${PROJECT_SOURCE_DIR}/src/DlgRef - ${PROJECT_BINARY_DIR}/src/DlgRef - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ${OMNIORB_DEFINITIONS} - ${QT_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - GEOMObject - GEOMClient - GEOMImpl - GEOMBase - GEOM - DlgRef - ) - -# --- headers --- - -# header files / no moc processing -SET(ImportExportGUI_HEADERS - ImportExportGUI.h - ) - -# header files / to be processed by moc -SET(_moc_HEADERS - ImportExportGUI_ExportXAODlg.h - ImportExportGUI_ImportXAODlg.h - ) - -# --- sources --- - -# sources / moc wrappings -QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) - -SET(ImportExportGUI_SOURCES - ImportExportGUI.cxx - ImportExportGUI_ExportXAODlg.cxx - ImportExportGUI_ImportXAODlg.cxx - ${_moc_SOURCES} - ) - -# --- rules --- - -ADD_LIBRARY(ImportExportGUI ${ImportExportGUI_SOURCES}) -TARGET_LINK_LIBRARIES(ImportExportGUI ${_link_LIBRARIES}) -INSTALL(TARGETS ImportExportGUI EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx deleted file mode 100644 index e620fc8c6..000000000 --- a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx +++ /dev/null @@ -1,450 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -// OCCT Includes -#include -#include -#include -#include -#include - -#include -#include "ImportExportGUI_ExportXAODlg.h" - -//================================================================================= -// Constructor -//================================================================================= -ImportExportGUI_ExportXAODlg::ImportExportGUI_ExportXAODlg(GeometryGUI* geometryGUI, QWidget* parent) -: - GEOMBase_Skeleton(geometryGUI, parent, false) -{ - m_mainObj = GEOM::GEOM_Object::_nil(); - - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - QPixmap imageOp(resMgr->loadPixmap("GEOM", tr("ICON_DLG_EXPORTXAO"))); - QPixmap iconSelect(resMgr->loadPixmap("GEOM", tr("ICON_SELECT"))); - - setWindowTitle(tr("GEOM_EXPORTXAO_TITLE")); - - /***************************************************************/ - mainFrame()->GroupConstructors->setTitle(tr("GEOM_EXPORTXAO_TITLE")); - mainFrame()->RadioButton1->setIcon(imageOp); - mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose); - mainFrame()->RadioButton2->close(); - mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); - mainFrame()->RadioButton3->close(); - - // hide name - mainFrame()->GroupBoxName->hide(); - - //**************************** - // Selection Group box - QGroupBox* gbxExport = new QGroupBox(parent); - - QGridLayout* gridLayoutExport = new QGridLayout(gbxExport); -#ifndef Q_OS_MAC - gridLayoutExport->setSpacing(6); - gridLayoutExport->setContentsMargins(9, 9, 9, 9); -#endif - gridLayoutExport->setObjectName(QString::fromUtf8("gridLayoutExport")); - - // Line 0 - QLabel* lblShape = new QLabel(tr("GEOM_EXPORTXAO_EXPORTINGSHAPE"), gbxExport); - btnShapeSelect = new QPushButton(gbxExport); - btnShapeSelect->setIcon(iconSelect); - ledShape = new QLineEdit(gbxExport); - ledShape->setMinimumSize(QSize(100, 0)); - - int line = 0, col = 0; - gridLayoutExport->addWidget(lblShape, line, col++, 1, 1); - gridLayoutExport->addWidget(btnShapeSelect, line, col++, 1, 1); - gridLayoutExport->addWidget(ledShape, line, col++, 1, 1); - - // Line 1 - QLabel* lblFileName = new QLabel(tr("GEOM_EXPORTXAO_FILENAME"), gbxExport); - btnFileSelect = new QPushButton(gbxExport); - ledFileName = new QLineEdit(gbxExport); - btnFileSelect->setText("..."); - - line++; col = 0; - gridLayoutExport->addWidget(lblFileName, line, col++, 1, 1); - gridLayoutExport->addWidget(btnFileSelect, line, col++, 1, 1); - gridLayoutExport->addWidget(ledFileName, line, col++, 1, 1); - - // Line 2 - QLabel* lblAuthor = new QLabel(tr("GEOM_EXPORTXAO_AUTHOR"), gbxExport); - ledAuthor = new QLineEdit(gbxExport); - - line++; col = 0; - gridLayoutExport->addWidget(lblAuthor, line, col++, 2, 1); - col++; // span - gridLayoutExport->addWidget(ledAuthor, line, col++, 1, 1); - - //**************************** - // Filter Group box - QGroupBox* gbxFilter = new QGroupBox(parent); - - QGridLayout* gridLayoutFilter = new QGridLayout(gbxFilter); -#ifndef Q_OS_MAC - gridLayoutFilter->setSpacing(6); - gridLayoutFilter->setContentsMargins(9, 9, 9, 9); -#endif - gridLayoutFilter->setObjectName(QString::fromUtf8("gbxFilter")); - - // Line 0 - QLabel* lblGroups = new QLabel(tr("GEOM_EXPORTXAO_LGROUPS"), gbxFilter); - QLabel* lblFields = new QLabel(tr("GEOM_EXPORTXAO_LFIELDS"), gbxFilter); - - line = 0, col = 0; - gridLayoutFilter->addWidget(lblGroups, line, col++, 1, 1); - gridLayoutFilter->addWidget(lblFields, line, col++, 1, 1); - - // Line 1 - lstGroups = new QListWidget(gbxFilter); - lstGroups->setSelectionMode(QAbstractItemView::NoSelection); - lstFields = new QListWidget(gbxFilter); - lstFields->setSelectionMode(QAbstractItemView::NoSelection); - - line++; col = 0; - gridLayoutFilter->addWidget(lstGroups, line, col++, 1, 1); - gridLayoutFilter->addWidget(lstFields, line, col++, 1, 1); - - //**************************** - QVBoxLayout* layout = new QVBoxLayout(centralWidget()); - layout->setMargin(0); - layout->setSpacing(6); - layout->addWidget(gbxExport); - layout->addWidget(gbxFilter); - - // set help - setHelpFileName("xao_format_page.html"); - - Init(); -} - -//================================================================================= -// Destructor -//================================================================================= -ImportExportGUI_ExportXAODlg::~ImportExportGUI_ExportXAODlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void ImportExportGUI_ExportXAODlg::Init() -{ - // Get setting of step value from file configuration - m_groups.clear(); - m_fields.clear(); - - // Signal/slot connections - connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); - - connect(btnShapeSelect, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(((SalomeApp_Application*) (SUIT_Session::session()->activeApplication()))->selectionMgr(), - SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - - connect(btnFileSelect, SIGNAL(clicked()), this, SLOT(btnFileSelectClicked())); - - initName(tr("GEOM_EXPORTXAO")); - SelectionIntoArgument(); -} - -//================================================================================= -// function : processObject() -// purpose : Fill dialog fields in accordance with myObj -//================================================================================= -void ImportExportGUI_ExportXAODlg::processObject() -{ - lstGroups->clear(); - lstFields->clear(); - m_groups.clear(); - m_fields.clear(); - - if (m_mainObj->_is_nil()) - { - ledShape->setText(""); - } - else - { - ledShape->setText(GEOMBase::GetName(m_mainObj)); - GEOM::GEOM_IShapesOperations_var shapeOp = getGeomEngine()->GetIShapesOperations(getStudyId()); - - // add groups names - GEOM::ListOfGO_var groups = shapeOp->GetExistingSubObjects(m_mainObj, true); - for (int i = 0, n = groups->length(); i < n; i++) - { - QListWidgetItem* item = new QListWidgetItem(); - item->setData(Qt::UserRole, QVariant(i)); - item->setText(GEOMBase::GetName(groups[i])); - item->setFlags(item->flags() | Qt::ItemIsUserCheckable); - item->setCheckState(Qt::Checked); - lstGroups->addItem(item); - m_groups.append(GEOM::GeomObjPtr(groups[i].in())); - } - lstGroups->sortItems(Qt::AscendingOrder); - - // add fields - GEOM::GEOM_IFieldOperations_var fieldOp = getGeomEngine()->GetIFieldOperations(getStudyId()); - - GEOM::ListOfFields_var fields = fieldOp->GetFields(m_mainObj); - for (int i = 0, n = fields->length(); i < n; i++) - { - QListWidgetItem* item = new QListWidgetItem(); - item->setData(Qt::UserRole, QVariant(i)); - item->setText(fields[i]->GetName()); - item->setFlags(item->flags() | Qt::ItemIsUserCheckable); - item->setCheckState(Qt::Checked); - lstFields->addItem(item); - m_fields.append(GEOM::GeomFieldPtr(fields[i].in())); - } - lstFields->sortItems(Qt::AscendingOrder); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void ImportExportGUI_ExportXAODlg::ClickOnOk() -{ - setIsApplyAndClose(true); - if (ClickOnApply()) - ClickOnCancel(); - setIsApplyAndClose(false); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool ImportExportGUI_ExportXAODlg::ClickOnApply() -{ - if (!isApplyAndClose()) - { - setIsDisableBrowsing(true); - setIsDisplayResult(false); - } - - QString msg; - if (!isValid(msg)) - { - showError(msg); - return false; - } - SUIT_OverrideCursor wc; - SUIT_Session::session()->activeApplication()->putInfo(""); - - try - { - if (openCommand()) - if (!execute()) - { - abortCommand(); - showError(); - return false; - } - } - catch (const SALOME::SALOME_Exception& e) - { - SalomeApp_Tools::QtCatchCorbaException(e); - abortCommand(); - return false; - } - commitCommand(); - - if (!isApplyAndClose()) - { - setIsDisableBrowsing(false); - setIsDisplayResult(true); - } - - processObject(); - - return true; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void ImportExportGUI_ExportXAODlg::SelectionIntoArgument() -{ - m_mainObj = GEOM::GEOM_Object::_nil(); - - LightApp_SelectionMgr* selMgr = myGeomGUI->getApp()->selectionMgr(); - SALOME_ListIO selList; - selMgr->selectedObjects(selList); - - if (selList.Extent() == 1) - { - m_mainObj = GEOMBase::ConvertIOinGEOMObject(selList.First()); - } - - processObject(); -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void ImportExportGUI_ExportXAODlg::SetEditCurrentArgument() -{ - ledShape->setFocus(); - myEditCurrentArgument = ledShape; - SelectionIntoArgument(); -} - -//================================================================================= -// function : btnFileSelectClicked() -// purpose : -//================================================================================= -void ImportExportGUI_ExportXAODlg::btnFileSelectClicked() -{ - QString file = SUIT_FileDlg::getFileName(this, ledFileName->text(), - tr("XAO_FILES"), - tr("GEOM_SELECT_EXPORT_XAO"), false); - if ( !file.isEmpty() ) - ledFileName->setText( file ); -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void ImportExportGUI_ExportXAODlg::ActivateThisDialog() -{ - GEOMBase_Skeleton::ActivateThisDialog(); -} - -//================================================================================= -// function : enterEvent [REDEFINED] -// purpose : -//================================================================================= -void ImportExportGUI_ExportXAODlg::enterEvent(QEvent*) -{ - if (!mainFrame()->GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : createOperation -// purpose : -//================================================================================= -GEOM::GEOM_IOperations_ptr ImportExportGUI_ExportXAODlg::createOperation() -{ - return getGeomEngine()->GetIInsertOperations(getStudyId()); -} - -//================================================================================= -// function : isValid -// purpose : -//================================================================================= -bool ImportExportGUI_ExportXAODlg::isValid(QString& msg) -{ - // check shape - if (ledShape->text().isEmpty()) - return false; - - // check file name - if (ledFileName->text().isEmpty()) - return false; - - return true; -} - -//================================================================================= -// function : execute -// purpose : -//================================================================================= -bool ImportExportGUI_ExportXAODlg::execute() -{ - bool res = false; - - QString author = ledAuthor->text(); - QString fileName = ledFileName->text(); - - // get selected groups - QList selGroups; - for (int j = 0; j < lstGroups->count(); ++j) - { - if (lstGroups->item(j)->checkState() == Qt::Checked) - selGroups.append(lstGroups->item(j)); - } - - GEOM::ListOfGO_var groups = new GEOM::ListOfGO(); - groups->length(selGroups.count()); - int i = 0; - for (QList::iterator it = selGroups.begin(); it != selGroups.end(); ++it) - { - QListWidgetItem* item = (*it); - int index = item->data(Qt::UserRole).toInt(); - groups[i++] = m_groups[index].copy(); - } - - // get selected fields - QList selFields; - for (int j = 0; j < lstFields->count(); ++j) - { - if (lstFields->item(j)->checkState() == Qt::Checked) - selFields.append(lstFields->item(j)); - } - - GEOM::ListOfFields_var fields = new GEOM::ListOfFields(); - fields->length(selFields.count()); - i = 0; - for (QList::iterator it = selFields.begin(); it != selFields.end(); ++it) - { - QListWidgetItem* item = (*it); - int index = item->data(Qt::UserRole).toInt(); - fields[i++] = m_fields[index].copy(); - } - - // call engine function - GEOM::GEOM_IInsertOperations_var ieOp = GEOM::GEOM_IInsertOperations::_narrow(getOperation()); - res = ieOp->ExportXAO(m_mainObj, groups, fields, - author.toStdString().c_str(), - fileName.toStdString().c_str()); - - return res; -} diff --git a/src/OBJECT/GEOM_OCCReader.cxx b/src/OBJECT/GEOM_OCCReader.cxx index 02e81bdf1..61e7208b3 100644 --- a/src/OBJECT/GEOM_OCCReader.cxx +++ b/src/OBJECT/GEOM_OCCReader.cxx @@ -213,7 +213,7 @@ void GEOM_OCCReader::createISO (const TopoDS_Face &TopologicalFace, vtkPoints *Pts, vtkCellArray *Cell) { - GEOMUtils_Hatcher aHatcher(TopologicalFace); + GEOMUtils::Hatcher aHatcher(TopologicalFace); aHatcher.Init(NbIsos); aHatcher.Perform(); @@ -231,7 +231,7 @@ void GEOM_OCCReader::createISO (const TopoDS_Face &TopologicalFace, // Function : createIsos // Purpose : Create isolines obtained from hatcher. //======================================================================= -void GEOM_OCCReader::createIsos(const GEOMUtils_Hatcher &theHatcher, +void GEOM_OCCReader::createIsos(const GEOMUtils::Hatcher &theHatcher, const Standard_Boolean IsUIso, Standard_Integer &pt_start_idx, vtkPoints *Pts, diff --git a/src/OBJECT/GEOM_OCCReader.h b/src/OBJECT/GEOM_OCCReader.h index ed47445a7..63b622fb8 100644 --- a/src/OBJECT/GEOM_OCCReader.h +++ b/src/OBJECT/GEOM_OCCReader.h @@ -39,7 +39,10 @@ class vtkPoints; class vtkCellArray; -class GEOMUtils_Hatcher; +namespace GEOMUtils +{ + class Hatcher; +} // OpenCASCADE #include @@ -100,12 +103,12 @@ class GEOM_OBJECT_EXPORT GEOM_OCCReader : public vtkAlgorithm { vtkPoints* Pts, vtkCellArray* Cells); - void createIsos(const GEOMUtils_Hatcher &theHatcher, + void createIsos(const GEOMUtils::Hatcher &theHatcher, const Standard_Boolean IsUIso, - Standard_Integer &pt_start_idx, - vtkPoints *Pts, - vtkCellArray *Cell); - + Standard_Integer &pt_start_idx, + vtkPoints *Pts, + vtkCellArray *Cell); + void DrawIso(GeomAbs_IsoType aType, Standard_Real PParm, Standard_Real p1, diff --git a/src/OCC2VTK/GEOM_FaceSource.h b/src/OCC2VTK/GEOM_FaceSource.h index 4627f7a48..68d507657 100755 --- a/src/OCC2VTK/GEOM_FaceSource.h +++ b/src/OCC2VTK/GEOM_FaceSource.h @@ -1,4 +1,4 @@ -#include // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public diff --git a/src/OCC2VTK/GEOM_WireframeFace.cxx b/src/OCC2VTK/GEOM_WireframeFace.cxx index 8c94300f5..f9d31608e 100755 --- a/src/OCC2VTK/GEOM_WireframeFace.cxx +++ b/src/OCC2VTK/GEOM_WireframeFace.cxx @@ -109,7 +109,7 @@ CreateIso(const TopoDS_Face& theFace, vtkPolyData* thePolyData, vtkPoints* thePts) { - GEOMUtils_Hatcher aHatcher(theFace); + GEOMUtils::Hatcher aHatcher(theFace); aHatcher.Init(theNbIso[0], theNbIso[1]); aHatcher.Perform(); @@ -125,11 +125,11 @@ CreateIso(const TopoDS_Face& theFace, void GEOM_WireframeFace:: -CreateIso(const GEOMUtils_Hatcher &theHatcher, +CreateIso(const GEOMUtils::Hatcher &theHatcher, const Standard_Boolean IsUIso, const int theDiscret, - vtkPolyData *thePolyData, - vtkPoints *thePts) + vtkPolyData *thePolyData, + vtkPoints *thePts) { Handle(TColStd_HArray1OfInteger) anIndices; Handle(TColStd_HArray1OfReal) aParams; diff --git a/src/OCC2VTK/GEOM_WireframeFace.h b/src/OCC2VTK/GEOM_WireframeFace.h index 27947dd20..c4dcbc96b 100755 --- a/src/OCC2VTK/GEOM_WireframeFace.h +++ b/src/OCC2VTK/GEOM_WireframeFace.h @@ -27,7 +27,11 @@ #include class vtkPolyData; -class GEOMUtils_Hatcher; + +namespace GEOMUtils +{ + class Hatcher; +} class OCC2VTK_EXPORT GEOM_WireframeFace: public GEOM_FaceSource { @@ -67,11 +71,11 @@ protected: static void - CreateIso(const GEOMUtils_Hatcher &theHatcher, - const Standard_Boolean IsUIso, - const int theDiscret, - vtkPolyData *thePolyData, - vtkPoints *thePts); + CreateIso(const GEOMUtils::Hatcher &theHatcher, + const Standard_Boolean IsUIso, + const int theDiscret, + vtkPolyData *thePolyData, + vtkPoints *thePts); static void diff --git a/src/STEPExport/CMakeLists.txt b/src/STEPExport/CMakeLists.txt deleted file mode 100755 index 45965bf43..000000000 --- a/src/STEPExport/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKSTEP} - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(STEPExport_SOURCES - STEPExport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(STEPExport ${STEPExport_SOURCES}) -TARGET_LINK_LIBRARIES(STEPExport ${_link_LIBRARIES}) -INSTALL(TARGETS STEPExport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/STEPExport/STEPExport.cxx b/src/STEPExport/STEPExport.cxx deleted file mode 100644 index 35f14f27b..000000000 --- a/src/STEPExport/STEPExport.cxx +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: STEPExport.cxx -// Created: Wed May 19 14:53:52 2004 -// Author: Pavel TELKOV - -#include "utilities.h" - -#include - -#include - -#include -#include - -#include -#include - -#ifdef WIN32 - #if defined STEPEXPORT_EXPORTS || defined STEPExport_EXPORTS - #define STEPEXPORT_EXPORT __declspec( dllexport ) - #else - #define STEPEXPORT_EXPORT __declspec( dllimport ) - #endif -#else - #define STEPEXPORT_EXPORT -#endif - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ - STEPEXPORT_EXPORT int Export (const TopoDS_Shape& theShape, - const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& /*theFormatName*/) - { - MESSAGE("Export STEP into file " << theFileName.ToCString()); - - try - { - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - IFSelect_ReturnStatus status ; - //VRV: OCC 4.0 migration - STEPControl_Writer aWriter; - //VSR: 16/09/09: Convert to METERS - Interface_Static::SetCVal("xstep.cascade.unit","M"); - Interface_Static::SetCVal("write.step.unit", "M"); - Interface_Static::SetIVal("write.step.nonmanifold", 1); - //JFA: PAL6162 status = aWriter.Transfer( theShape, STEPControl_ManifoldSolidBrep ); - status = aWriter.Transfer( theShape, STEPControl_AsIs ); - //VRV: OCC 4.0 migration - if ( status == IFSelect_RetDone ) - status = aWriter.Write( theFileName.ToCString() ); - - // Return previous locale - if ( status == IFSelect_RetDone ) - return 1; - } - catch (Standard_Failure) - { - //THROW_SALOME_CORBA_EXCEPTION("Exception catched in STEPExport", SALOME::BAD_PARAM); - } - return 0; - } -} diff --git a/src/STEPImport/CMakeLists.txt b/src/STEPImport/CMakeLists.txt deleted file mode 100755 index 47ebea3e1..000000000 --- a/src/STEPImport/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKSTEP} ${CAS_TKCAF} - ${CAS_TKLCAF} - ${CAS_TKSTEPBase} - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(STEPImport_SOURCES - STEPImport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(STEPImport ${STEPImport_SOURCES}) -TARGET_LINK_LIBRARIES(STEPImport ${_link_LIBRARIES}) -INSTALL(TARGETS STEPImport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/STEPImport/STEPImport.cxx b/src/STEPImport/STEPImport.cxx deleted file mode 100644 index 0dc8d7057..000000000 --- a/src/STEPImport/STEPImport.cxx +++ /dev/null @@ -1,581 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: STEPImport.cxx -// Created: Wed May 19 14:41:10 2004 -// Author: Pavel TELKOV - -#include "utilities.h" - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC - -#ifdef WIN32 - #if defined STEPIMPORT_EXPORTS || defined STEPImport_EXPORTS - #define STEPIMPORT_EXPORT __declspec( dllexport ) - #else - #define STEPIMPORT_EXPORT __declspec( dllimport ) - #endif -#else - #define STEPIMPORT_EXPORT -#endif - - -//============================================================================= -/*! - * GetShape() - */ -//============================================================================= - -static TopoDS_Shape GetShape(const Handle(Standard_Transient) &theEnti, - const Handle(Transfer_TransientProcess) &theTP) -{ - TopoDS_Shape aResult; - Handle(Transfer_Binder) aBinder = theTP->Find(theEnti); - - if (aBinder.IsNull()) { - return aResult; - } - - aResult = TransferBRep::ShapeResult(aBinder); - - return aResult; -} - -//============================================================================= -/*! - * GetLabel() - */ -//============================================================================= - -static TDF_Label GetLabel(const Handle(Standard_Transient) &theEnti, - const TDF_Label &theShapeLabel, - const TopoDS_Shape &aShape) -{ - TDF_Label aResult; - - if (theEnti->IsKind - (STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) { - // check all named shapes using iterator - TDF_ChildIDIterator anIt - (theShapeLabel, TDataStd_Name::GetID(), Standard_True); - - for (; anIt.More(); anIt.Next()) { - Handle(TDataStd_Name) nameAttr = - Handle(TDataStd_Name)::DownCast(anIt.Value()); - - if (nameAttr.IsNull()) { - continue; - } - - TDF_Label aLab = nameAttr->Label(); - Handle(TNaming_NamedShape) shAttr; - - if (aLab.FindAttribute(TNaming_NamedShape::GetID(), shAttr) && - shAttr->Get().IsEqual(aShape)) { - aResult = aLab; - } - } - } - - // create label and set shape - if (aResult.IsNull()) { - TDF_TagSource aTag; - - aResult = aTag.NewChild(theShapeLabel); - - TNaming_Builder tnBuild (aResult); - - tnBuild.Generated(aShape); - } - - return aResult; -} - -//============================================================================= -/*! - * StoreName() - */ -//============================================================================= - -static void StoreName(const Handle(Standard_Transient) &theEnti, - const TopTools_IndexedMapOfShape &theIndices, - const Handle(Transfer_TransientProcess) &theTP, - const TDF_Label &theShapeLabel) -{ - Handle(TCollection_HAsciiString) aName; - - if (theEnti->IsKind(STANDARD_TYPE(StepShape_TopologicalRepresentationItem)) || - theEnti->IsKind(STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) { - aName = Handle(StepRepr_RepresentationItem)::DownCast(theEnti)->Name(); - } else { - Handle(StepBasic_ProductDefinition) PD = - Handle(StepBasic_ProductDefinition)::DownCast(theEnti); - - if (PD.IsNull() == Standard_False) { - Handle(StepBasic_Product) Prod = PD->Formation()->OfProduct(); - aName = Prod->Name(); - } - } - - bool isValidName = false; - - if (aName.IsNull() == Standard_False) { - isValidName = true; - - if (aName->UsefullLength() < 1) { - isValidName = false; - } else if (aName->UsefullLength() == 4 && - toupper (aName->Value(1)) == 'N' && - toupper (aName->Value(2)) == 'O' && - toupper (aName->Value(3)) == 'N' && - toupper (aName->Value(4)) == 'E') { - // skip 'N0NE' name - isValidName = false; - } else { - // special check to pass names like "Open CASCADE STEP translator 6.3 1" - TCollection_AsciiString aSkipName ("Open CASCADE STEP translator"); - - if (aName->Length() >= aSkipName.Length()) { - if (aName->String().SubString - (1, aSkipName.Length()).IsEqual(aSkipName)) { - isValidName = false; - } - } - } - } - - if (isValidName) { - TCollection_ExtendedString aNameExt (aName->ToCString()); - - // find target shape - TopoDS_Shape S = GetShape(theEnti, theTP); - - if (S.IsNull()) { - return; - } - - // as PRODUCT can be included in the main shape - // several times, we look here for all iclusions. - Standard_Integer isub, nbSubs = theIndices.Extent(); - - for (isub = 1; isub <= nbSubs; isub++) { - TopoDS_Shape aSub = theIndices.FindKey(isub); - - if (aSub.IsPartner(S)) { - TDF_Label L = GetLabel(theEnti, theShapeLabel, aSub); - - // set a name - TDataStd_Name::Set(L, aNameExt); - } - } - } -} - -//============================================================================= -/*! - * StoreMaterial() - */ -//============================================================================= - -static void StoreMaterial - (const Handle(Standard_Transient) &theEnti, - const TopTools_IndexedMapOfShape &theIndices, - const Handle(Transfer_TransientProcess) &theTP, - const TDF_Label &theShapeLabel) -{ - // Treat Product Definition Shape only. - Handle(StepRepr_ProductDefinitionShape) aPDS = - Handle(StepRepr_ProductDefinitionShape)::DownCast(theEnti); - Handle(StepBasic_ProductDefinition) aProdDef; - - if(aPDS.IsNull() == Standard_False) { - // Product Definition Shape ==> Product Definition - aProdDef = aPDS->Definition().ProductDefinition(); - } - - if (aProdDef.IsNull() == Standard_False) { - // Product Definition ==> Property Definition - const Interface_Graph &aGraph = theTP->Graph(); - Interface_EntityIterator aSubs = aGraph.Sharings(aProdDef); - TopoDS_Shape aShape; - - for(aSubs.Start(); aSubs.More(); aSubs.Next()) { - Handle(StepRepr_PropertyDefinition) aPropD = - Handle(StepRepr_PropertyDefinition)::DownCast(aSubs.Value()); - - if(aPropD.IsNull() == Standard_False) { - // Property Definition ==> Representation. - Interface_EntityIterator aSubs1 = aGraph.Sharings(aPropD); - - for(aSubs1.Start(); aSubs1.More(); aSubs1.Next()) { - Handle(StepRepr_PropertyDefinitionRepresentation) aPDR = - Handle(StepRepr_PropertyDefinitionRepresentation):: - DownCast(aSubs1.Value()); - - if(aPDR.IsNull() == Standard_False) { - // Property Definition ==> Material Name. - Handle(StepRepr_Representation) aRepr = aPDR->UsedRepresentation(); - - if(aRepr.IsNull() == Standard_False) { - Standard_Integer ir; - - for(ir = 1; ir <= aRepr->NbItems(); ir++) { - Handle(StepRepr_RepresentationItem) aRI = aRepr->ItemsValue(ir); - Handle(StepRepr_DescriptiveRepresentationItem) aDRI = - Handle(StepRepr_DescriptiveRepresentationItem)::DownCast(aRI); - - if(aDRI.IsNull() == Standard_False) { - // Get shape from Product Definition - Handle(TCollection_HAsciiString) aMatName = aDRI->Name(); - - if(aMatName.IsNull() == Standard_False) { - TCollection_ExtendedString - aMatNameExt (aMatName->ToCString()); - - if (aShape.IsNull()) { - // Get the shape. - aShape = GetShape(aProdDef, theTP); - - if (aShape.IsNull()) { - return; - } - } - - // as PRODUCT can be included in the main shape - // several times, we look here for all iclusions. - Standard_Integer isub, nbSubs = theIndices.Extent(); - - for (isub = 1; isub <= nbSubs; isub++) { - TopoDS_Shape aSub = theIndices.FindKey(isub); - - if (aSub.IsPartner(aShape)) { - TDF_Label aLabel = - GetLabel(aProdDef, theShapeLabel, aSub); - - // set a name - TDataStd_Comment::Set(aLabel, aMatNameExt); - } - } - } - } - } - } - } - } - } - } - } -} - -//============================================================================= -/*! - * Import() - */ -//============================================================================= - -extern "C" -{ - STEPIMPORT_EXPORT - Handle(TCollection_HAsciiString) GetValue (const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theParameterName, - TCollection_AsciiString& theError) - { - Handle(TCollection_HAsciiString) aValue; - - if (theParameterName != "LEN_UNITS") { - theError = theParameterName + " parameter reading is not supported by STEP plugin"; - return aValue; - } - - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - STEPControl_Reader aReader; - - Interface_Static::SetCVal("xstep.cascade.unit","M"); - Interface_Static::SetIVal("read.step.ideas", 1); - Interface_Static::SetIVal("read.step.nonmanifold", 1); - - try { -#if OCC_VERSION_LARGE > 0x06010000 - OCC_CATCH_SIGNALS; -#endif - IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString()); - if (status == IFSelect_RetDone) { - TColStd_SequenceOfAsciiString anUnitLengthNames; - TColStd_SequenceOfAsciiString anUnitAngleNames; - TColStd_SequenceOfAsciiString anUnitSolidAngleNames; - aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames); - if (anUnitLengthNames.Length() > 0) { - aValue = new TCollection_HAsciiString( anUnitLengthNames.First() ); - /* - TCollection_AsciiString aLenUnits = anUnitLengthNames.First(); - if (aLenUnits == "millimetre") - aValue = new TCollection_HAsciiString ("MM"); - else if (aLenUnits == "centimetre") - aValue = new TCollection_HAsciiString ("CM"); - else if (aLenUnits == "metre") - aValue = new TCollection_HAsciiString ("M"); - else if (aLenUnits == "INCH") - aValue = new TCollection_HAsciiString ("INCH"); - // TODO (for other units than mm, cm, m or inch) - //else if (aLenUnits == "") - // aValue = new TCollection_HAsciiString (""); - - // tmp begin - //std::cout << "$$$ --- " << anUnitLengthNames.First(); - //for (int ii = 2; ii <= anUnitLengthNames.Length(); ii++) - // std::cout << ", " << anUnitLengthNames.Value(ii); - //std::cout << std::endl; - // tmp end - */ - } - } - else { - theError = theFileName + " reading failed"; - } - } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - theError = aFail->GetMessageString(); - } - - return aValue; - } - - STEPIMPORT_EXPORT - TopoDS_Shape Import (const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theFormatName, - TCollection_AsciiString& theError, - const TDF_Label& theShapeLabel) - { - TopoDS_Shape aResShape; - - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - STEPControl_Reader aReader; - - //VSR: 16/09/09: Convert to METERS - Interface_Static::SetCVal("xstep.cascade.unit","M"); - Interface_Static::SetIVal("read.step.ideas", 1); - Interface_Static::SetIVal("read.step.nonmanifold", 1); - - BRep_Builder B; - TopoDS_Compound compound; - B.MakeCompound(compound); - - try { - OCC_CATCH_SIGNALS; - - IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString()); - - if (status == IFSelect_RetDone) { - - // Regard or not the model units - if (theFormatName == "STEP_SCALE") { - // set UnitFlag to units from file - TColStd_SequenceOfAsciiString anUnitLengthNames; - TColStd_SequenceOfAsciiString anUnitAngleNames; - TColStd_SequenceOfAsciiString anUnitSolidAngleNames; - aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames); - if (anUnitLengthNames.Length() > 0) { - TCollection_AsciiString aLenUnits = anUnitLengthNames.First(); - if (aLenUnits == "millimetre") - Interface_Static::SetCVal("xstep.cascade.unit", "MM"); - else if (aLenUnits == "centimetre") - Interface_Static::SetCVal("xstep.cascade.unit", "CM"); - else if (aLenUnits == "metre" || aLenUnits.IsEmpty()) - Interface_Static::SetCVal("xstep.cascade.unit", "M"); - else if (aLenUnits == "INCH") - Interface_Static::SetCVal("xstep.cascade.unit", "INCH"); - else { - theError = "The file contains not supported units."; - return aResShape; - } - // TODO (for other units than mm, cm, m or inch) - //else if (aLenUnits == "") - // Interface_Static::SetCVal("xstep.cascade.unit", "???"); - } - } - else { - //cout<<"need re-scale a model"<Model(); - Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader(); - if (!TR.IsNull()) { - Handle(Transfer_TransientProcess) TP = TR->TransientProcess(); - - Standard_Integer nb = Model->NbEntities(); - - for (Standard_Integer ie = 1; ie <= nb; ie++) { - Handle(Standard_Transient) enti = Model->Value(ie); - - // Store names. - StoreName(enti, anIndices, TP, theShapeLabel); - - // Store materials. - StoreMaterial(enti, anIndices, TP, theShapeLabel); - } - } - // END: Store names and materials - } - else { -// switch (status) { -// case IFSelect_RetVoid: -// theError = "Nothing created or No data to process"; -// break; -// case IFSelect_RetError: -// theError = "Error in command or input data"; -// break; -// case IFSelect_RetFail: -// theError = "Execution was run, but has failed"; -// break; -// case IFSelect_RetStop: -// theError = "Execution has been stopped. Quite possible, an exception was raised"; -// break; -// default: -// break; -// } - theError = "Wrong format of the imported file. Can't import file."; - aResShape.Nullify(); - } - } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - theError = aFail->GetMessageString(); - aResShape.Nullify(); - } - // Return previous locale - return aResShape; - } -} diff --git a/src/STEPPlugin/CMakeLists.txt b/src/STEPPlugin/CMakeLists.txt new file mode 100644 index 000000000..71c1097dc --- /dev/null +++ b/src/STEPPlugin/CMakeLists.txt @@ -0,0 +1,147 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +IF(SALOME_BUILD_GUI) + INCLUDE(UseQt4Ext) + INCLUDE(${QT_USE_FILE}) +ENDIF() + +# --- options --- + +# additional include directories +INCLUDE_DIRECTORIES( + ${CAS_INCLUDE_DIRS} + ${KERNEL_INCLUDE_DIRS} + ${PROJECT_BINARY_DIR}/idl + ${PROJECT_SOURCE_DIR}/src/GEOMAlgo + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/GEOM_I + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_SOURCE_DIR}/src/GEOMUtils + ) + +IF(SALOME_BUILD_GUI) + INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIRS} + ${GUI_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/src/OBJECT + ${PROJECT_SOURCE_DIR}/src/GEOMGUI + ${PROJECT_SOURCE_DIR}/src/GEOMBase + ) +ENDIF() + +# additional preprocessor / compiler flags +ADD_DEFINITIONS( + ${CAS_DEFINITIONS} + ) + +IF(SALOME_BUILD_GUI) +ADD_DEFINITIONS( + ${QT_DEFINITIONS} + ) +ENDIF() + +# libraries to link to +SET(_link_engine_LIBRARIES + ${CAS_TKSTEP} + ${KERNEL_SALOMELocalTrace} + ${KERNEL_OpUtil} + SalomeIDLGEOM + SalomeIDLSTEPPlugin + GEOMEngine + GEOMClient + ) + +IF(SALOME_BUILD_GUI) + SET(_link_gui_LIBRARIES + SalomeIDLSTEPPlugin + GEOMObject + GEOM + GEOMBase + ) +ENDIF() + + +# --- headers --- + +SET(STEPPluginEngine_HEADERS + STEPPlugin_IOperations_i.hh + STEPPlugin_Engine.hxx + STEPPlugin_OperationsCreator.hxx + STEPPlugin_IOperations.hxx + STEPPlugin_IExport.hxx + STEPPlugin_IImport.hxx + STEPPlugin_ImportDriver.hxx + STEPPlugin_ExportDriver.hxx + STEPPlugin_IECallBack.hxx + ) + +IF(SALOME_BUILD_GUI) + # header files / to be processed by moc + SET(_moc_HEADERS + STEPPlugin_GUI.h + ) +ENDIF() + +# --- sources --- + +IF(SALOME_BUILD_GUI) + # sources / moc wrappings + QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) + + SET(STEPPluginGUI_SOURCES + STEPPlugin_GUI.cxx + ${_moc_SOURCES} + ) +ENDIF() + +SET(STEPPluginEngine_SOURCES + STEPPlugin_Engine.cxx + STEPPlugin_OperationsCreator.cxx + STEPPlugin_IOperations_i.cc + STEPPlugin_IOperations.cxx + STEPPlugin_ExportDriver.cxx + STEPPlugin_ImportDriver.cxx + STEPPlugin_IECallBack.cxx + ) + +# resource files / to be processed by lrelease +SET(STEPPlugin_RESOURCES + STEPPlugin_msg_en.ts + STEPPlugin_msg_fr.ts + STEPPlugin_msg_ja.ts + ) + +# --- rules --- + +ADD_LIBRARY(STEPPluginEngine ${STEPPluginEngine_SOURCES}) +TARGET_LINK_LIBRARIES(STEPPluginEngine ${_link_engine_LIBRARIES}) +INSTALL(TARGETS STEPPluginEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +IF(SALOME_BUILD_GUI) + ADD_LIBRARY(STEPPluginGUI ${STEPPluginGUI_SOURCES}) + TARGET_LINK_LIBRARIES(STEPPluginGUI ${_link_gui_LIBRARIES}) + INSTALL(TARGETS STEPPluginGUI EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + + QT4_INSTALL_TS_RESOURCES("${STEPPlugin_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}") +ENDIF() + + +INSTALL(FILES ${STEPPluginEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/STEPPlugin/STEPPlugin_Engine.cxx b/src/STEPPlugin/STEPPlugin_Engine.cxx new file mode 100644 index 000000000..c1718744a --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_Engine.cxx @@ -0,0 +1,32 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_Engine.hxx" +#include "STEPPlugin_OperationsCreator.hxx" + +extern "C" +{ + STEPPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + STEPPlugin_OperationsCreator* aCreator = new STEPPlugin_OperationsCreator(); + return aCreator; + } +} diff --git a/src/STEPPlugin/STEPPlugin_Engine.hxx b/src/STEPPlugin/STEPPlugin_Engine.hxx new file mode 100755 index 000000000..624eb2210 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_Engine.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STEPPLUGIN_ENGINE_HXX_ +#define _STEPPLUGIN_ENGINE_HXX_ + +#ifdef WIN32 + #if defined STEPPLUGINENGINE_EXPORTS || defined STEPPluginEngine_EXPORTS + #define STEPPLUGINENGINE_EXPORT __declspec( dllexport ) + #else + #define STEPPLUGINENGINE_EXPORT __declspec( dllimport ) + #endif +#else + #define STEPPLUGINENGINE_EXPORT +#endif + +#endif diff --git a/src/STEPPlugin/STEPPlugin_ExportDriver.cxx b/src/STEPPlugin/STEPPlugin_ExportDriver.cxx new file mode 100644 index 000000000..ba35ffbe3 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_ExportDriver.cxx @@ -0,0 +1,129 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_ExportDriver.hxx" +#include "STEPPlugin_IExport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" + +// OOCT includes +#include +#include +#include +#include +#include + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& STEPPlugin_ExportDriver::GetID() +{ + static Standard_GUID aGUID("c47b9a61-c6a4-4335-8b13-6badb16b036f"); + return aGUID; +} + +//======================================================================= +//function : STEPPlugin_ExportDriver +//purpose : +//======================================================================= +STEPPlugin_ExportDriver::STEPPlugin_ExportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer STEPPlugin_ExportDriver::Execute( TFunction_Logbook& log ) const +{ + if (Label().IsNull()) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + STEPPlugin_IExport aData (aFunction); + + // retrieve the being exported shape + TopoDS_Shape aShape; + Handle(GEOM_Function) aRefFunction = aData.GetOriginal(); + if( aRefFunction.IsNull() ) return 0; + aShape = aRefFunction->GetValue(); + if( aShape.IsNull() ) return 0; + // set the result of function to be used by next operations + aFunction->SetValue( aShape ); + + TCollection_AsciiString aFileName = aData.GetFileName(); + + MESSAGE("Export STEP into file " << aFileName.ToCString()); + + try + { + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + IFSelect_ReturnStatus status ; + //VRV: OCC 4.0 migration + STEPControl_Writer aWriter; + Interface_Static::SetCVal("xstep.cascade.unit","M"); + Interface_Static::SetCVal("write.step.unit", "M"); + Interface_Static::SetIVal("write.step.nonmanifold", 1); + status = aWriter.Transfer( aShape, STEPControl_AsIs ); + //VRV: OCC 4.0 migration + if( status == IFSelect_RetDone ) + status = aWriter.Write( aFileName.ToCString() ); + + // Return previous locale + if( status == IFSelect_RetDone ) + return 1; + } + catch (Standard_Failure) + { + //THROW_SALOME_CORBA_EXCEPTION("Exception catched in STEPExport", SALOME::BAD_PARAM); + } + return 0; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean STEPPlugin_ExportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ +bool STEPPlugin_ExportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + return false; +} + +IMPLEMENT_STANDARD_HANDLE( STEPPlugin_ExportDriver,GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( STEPPlugin_ExportDriver,GEOM_BaseDriver ); diff --git a/src/STEPPlugin/STEPPlugin_ExportDriver.hxx b/src/STEPPlugin/STEPPlugin_ExportDriver.hxx new file mode 100644 index 000000000..000226491 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_ExportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STEPPlugin_ExportDriver_HXX +#define _STEPPlugin_ExportDriver_HXX + +// internal includes +#include "STEPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( STEPPlugin_ExportDriver, GEOM_BaseDriver ); + +class STEPPLUGINENGINE_EXPORT STEPPlugin_ExportDriver : public GEOM_BaseDriver +{ +public: + STEPPlugin_ExportDriver(); + ~STEPPlugin_ExportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( STEPPlugin_ExportDriver ) +}; + +#endif // _STEPPlugin_ExportDriver_HXX diff --git a/src/STEPPlugin/STEPPlugin_GUI.cxx b/src/STEPPlugin/STEPPlugin_GUI.cxx new file mode 100644 index 000000000..b43651a15 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_GUI.cxx @@ -0,0 +1,311 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_GUI.h" + +// GUI includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// GEOM includes +#include "GeometryGUI.h" +#include "GEOM_Operation.h" +#include "GEOMBase.h" +#include "GEOM_Displayer.h" + +#include +#include CORBA_SERVER_HEADER(STEPPlugin) + +//======================================================================= +// function : STEPPlugin_GUI() +// purpose : Constructor +//======================================================================= +STEPPlugin_GUI::STEPPlugin_GUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) +{ +} + +//======================================================================= +// function : ~STEPPlugin_GUI +// purpose : Destructor +//======================================================================= +STEPPlugin_GUI::~STEPPlugin_GUI() +{ +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool STEPPlugin_GUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) +{ + QString cmd; + switch ( theCommandID ) { + case 1: + cmd = "Export_STEP"; break; + case 2: + cmd = "Import_STEP"; break; + default: + break; + } + return OnGUIEvent( cmd, parent ); +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool STEPPlugin_GUI::OnGUIEvent( const QString& theCommandID, SUIT_Desktop* parent ) +{ + bool result = false; + + if ( theCommandID == "Export_STEP" ) + { + result = exportSTEP( parent ); + } + else if ( theCommandID == "Import_STEP" ) + { + result = importSTEP( parent ); + } + else + { + getGeometryGUI()->getApp()->putInfo( tr("GEOM_PRP_COMMAND").arg( theCommandID ) ); + } + + return result; +} + +//======================================================================= +// function : importSTEP +// purpose : +//======================================================================= +bool STEPPlugin_GUI::importSTEP( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "STEPPluginEngine" ); + GEOM::ISTEPOperations_var stepOp = GEOM::ISTEPOperations::_narrow( op ); + if ( CORBA::is_nil( stepOp ) ) return false; + + QStringList fileNames = app->getOpenFileNames( SUIT_FileDlg::getLastVisitedPath().isEmpty() ? QDir::currentPath() : QString(""), + tr( "STEP_FILES" ), + tr( "IMPORT_TITLE" ), + parent ); + if ( fileNames.count() > 0 ) + { + QStringList entryList; + QStringList errors; + SUIT_MessageBox::StandardButton stepAnswer = SUIT_MessageBox::NoButton; + + for ( int i = 0; i < fileNames.count(); i++ ) + { + QString fileName = fileNames.at( i ); + SUIT_OverrideCursor wc; + GEOM_Operation transaction( app, stepOp.in() ); + bool ignoreUnits = false; + + try + { + app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( SUIT_Tools::file( fileName, true ) ) ); + transaction.start(); + + CORBA::String_var units = stepOp->ReadValue( fileName.toUtf8().constData(), "LEN_UNITS" ); + QString unitsStr( units.in() ); + bool unitsOK = unitsStr.isEmpty() || unitsStr == "M" || unitsStr.toLower() == "metre"; + + if ( !unitsOK ) + { + if( stepAnswer == SUIT_MessageBox::NoToAll ) + { + ignoreUnits = true; + } + else if( stepAnswer != SUIT_MessageBox::YesToAll ) + { + SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No | SUIT_MessageBox::Cancel; + if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; + stepAnswer = SUIT_MessageBox::question( parent, + tr( "WRN_WARNING" ), + tr( "SCALE_DIMENSIONS" ).arg( unitsStr ), + btns, + SUIT_MessageBox::No ); + switch ( stepAnswer ) + { + case SUIT_MessageBox::Cancel: + return true; // cancel (break) import operation + case SUIT_MessageBox::Yes: + case SUIT_MessageBox::YesToAll: + break; // scaling is confirmed + case SUIT_MessageBox::No: + case SUIT_MessageBox::NoAll: + ignoreUnits = true; // scaling is rejected + default: + break; + } + } + } + + GEOM::ListOfGO_var result = stepOp->ImportSTEP( fileName.toUtf8().constData(), ignoreUnits ); + if ( result->length() > 0 && stepOp->IsDone() ) + { + GEOM::GEOM_Object_var main = result[0]; + QString publishName = GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, true ) ); + SALOMEDS::SObject_var so = GeometryGUI::GetGeomGen()->PublishInStudy( dsStudy, + SALOMEDS::SObject::_nil(), + main.in(), + publishName.toUtf8().constData() ); + + entryList.append( so->GetID() ); + for ( int i = 1, n = result->length(); i < n; i++ ) { + GEOM::GEOM_Object_ptr group = result[i]; + CORBA::String_var grpName = group->GetName(); + GeometryGUI::GetGeomGen()->AddInStudy( dsStudy, group, grpName.in(), main ); + } + transaction.commit(); + GEOM_Displayer( study ).Display( main.in() ); + } + else + { + transaction.abort(); + errors.append( QString( "%1 : %2" ).arg( fileName ).arg( stepOp->GetErrorCode() ) ); + } + } + catch( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + } + } + + getGeometryGUI()->updateObjBrowser( true ); + app->browseObjects( entryList ); + + if ( errors.count() > 0 ) + { + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) ); + } + } + return fileNames.count() > 0; +} + +//======================================================================= +// function : exportSTEP +// purpose : +//======================================================================= +bool STEPPlugin_GUI::exportSTEP( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "STEPPluginEngine" ); + GEOM::ISTEPOperations_var stepOp = GEOM::ISTEPOperations::_narrow( op ); + if ( CORBA::is_nil( stepOp ) ) return false; + + LightApp_SelectionMgr* sm = app->selectionMgr(); + if ( !sm ) return false; + + SALOME_ListIO selectedObjects; + sm->selectedObjects( selectedObjects ); + bool ok = false; + + SALOME_ListIteratorOfListIO it( selectedObjects ); + for ( ; it.More(); it.Next() ) + { + Handle(SALOME_InteractiveObject) io = it.Value(); + GEOM::GEOM_Object_var obj = GEOMBase::ConvertIOinGEOMObject( io ); + + if ( CORBA::is_nil( obj ) ) continue; + + QString fileName = app->getFileName( false, + QString( io->getName() ), + tr( "STEP_FILES" ), + tr( "EXPORT_TITLE" ), + parent ); + + if ( fileName.isEmpty() ) + return false; + + SUIT_OverrideCursor wc; + + GEOM_Operation transaction( app, stepOp.in() ); + + try + { + app->putInfo( tr( "GEOM_PRP_EXPORT" ).arg( fileName ) ); + transaction.start(); + + stepOp->ExportSTEP( obj, fileName.toUtf8().constData() ); + + if ( stepOp->IsDone() ) + { + transaction.commit(); + } + else + { + transaction.abort(); + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_PRP_ABORT" ) + "\n" + tr( stepOp->GetErrorCode() ) ); + return false; + } + } + catch ( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + return false; + } + ok = true; + } + + if ( !ok ) + { + SUIT_MessageBox::warning( parent, + tr( "WRN_WARNING" ), + tr( "GEOM_WRN_NO_APPROPRIATE_SELECTION" ) ); + } + return ok; +} + +//===================================================================================== +// EXPORTED METHODS +//===================================================================================== +extern "C" +{ +#ifdef WIN32 + __declspec( dllexport ) +#endif + GEOMGUI* GetLibGUI( GeometryGUI* parent ) + { + return new STEPPlugin_GUI( parent ); + } +} diff --git a/src/STEPPlugin/STEPPlugin_GUI.h b/src/STEPPlugin/STEPPlugin_GUI.h new file mode 100644 index 000000000..05d989474 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_GUI.h @@ -0,0 +1,40 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef STEPPlugin_GUI_H +#define STEPPlugin_GUI_H + +#include "GEOMPluginGUI.h" + +class STEPPlugin_GUI: public GEOMPluginGUI +{ + Q_OBJECT +public: + STEPPlugin_GUI( GeometryGUI* parent ); + ~STEPPlugin_GUI(); + + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); + +private: + bool importSTEP( SUIT_Desktop* ); + bool exportSTEP( SUIT_Desktop* ); +}; + +#endif // STEPPlugin_GUI_H diff --git a/src/STEPPlugin/STEPPlugin_IECallBack.cxx b/src/STEPPlugin/STEPPlugin_IECallBack.cxx new file mode 100755 index 000000000..6089df832 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IECallBack.cxx @@ -0,0 +1,87 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_IECallBack.hxx" +#include "STEPPlugin_IOperations.hxx" +#include "STEPPlugin_OperationsCreator.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +STEPPlugin_IECallBack::STEPPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +STEPPlugin_IECallBack::~STEPPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool +STEPPlugin_IECallBack::Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + STEPPlugin_IOperations* aPluginOperations = STEPPlugin_OperationsCreator::get( GetEngine(), theDocId ); + aPluginOperations->ExportSTEP( theOriginal, theFileName ); + return true; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +STEPPlugin_IECallBack::Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ) +{ + STEPPlugin_IOperations* aPluginOperations = STEPPlugin_OperationsCreator::get( GetEngine(), theDocId ); + bool anIsIgnoreUnits = ( theFormatName == "STEP_SCALE" ) ? true : false; + return aPluginOperations->ImportSTEP( theFileName, anIsIgnoreUnits ); +} + +//============================================================================= +/*! + * ReadValue + */ +//============================================================================= +TCollection_AsciiString +STEPPlugin_IECallBack::ReadValue( int theDocId, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theParameterName ) +{ + STEPPlugin_IOperations* aPluginOperations = STEPPlugin_OperationsCreator::get( GetEngine(), theDocId ); + return aPluginOperations->ReadValue( theFileName, theParameterName ); +} diff --git a/src/STEPPlugin/STEPPlugin_IECallBack.hxx b/src/STEPPlugin/STEPPlugin_IECallBack.hxx new file mode 100644 index 000000000..4f6f571c3 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IECallBack.hxx @@ -0,0 +1,54 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STEPPlugin_IECallBack_HXX_ +#define _STEPPlugin_IECallBack_HXX_ + +// internal includes +#include "STEPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Object.hxx" +#include "GEOMImpl_IECallBack.hxx" + +// OCC includes +#include + +class STEPPLUGINENGINE_EXPORT STEPPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + STEPPlugin_IECallBack(); + ~STEPPlugin_IECallBack(); + + bool Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); + + Handle(TColStd_HSequenceOfTransient) Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ); + + TCollection_AsciiString ReadValue( int theDocId, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theParameterName ); +}; + +#endif diff --git a/src/STEPPlugin/STEPPlugin_IExport.hxx b/src/STEPPlugin/STEPPlugin_IExport.hxx new file mode 100644 index 000000000..70fc5da19 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IExport.hxx @@ -0,0 +1,48 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STEPPlugin_IExport_HXX_ +#define _STEPPlugin_IExport_HXX_ + +#include "GEOM_Function.hxx" + +#define EXPORTSTEP_ARG_ORIGINAL 1 +#define EXPORTSTEP_ARG_FILENAME 2 + +class STEPPlugin_IExport +{ +public: + STEPPlugin_IExport( Handle(GEOM_Function) theFunction ) + : _func(theFunction) {} + + void SetOriginal( Handle( GEOM_Function ) theOriginal) + { _func->SetReference( EXPORTSTEP_ARG_ORIGINAL, theOriginal ); } + Handle( GEOM_Function ) GetOriginal() + { return _func->GetReference( EXPORTSTEP_ARG_ORIGINAL ); } + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( EXPORTSTEP_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( EXPORTSTEP_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _STEPPlugin_IExport_HXX_ diff --git a/src/STEPPlugin/STEPPlugin_IImport.hxx b/src/STEPPlugin/STEPPlugin_IImport.hxx new file mode 100644 index 000000000..9c2679a0c --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IImport.hxx @@ -0,0 +1,48 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STEPPlugin_IImport_HXX_ +#define _STEPPlugin_IImport_HXX_ + +#include "GEOM_Function.hxx" + +#define IMPORTSTEP_ARG_FILENAME 1 +#define IMPORTSTEP_ARG_IGNORE_UNITS 2 + +class STEPPlugin_IImport +{ +public: + STEPPlugin_IImport( Handle(GEOM_Function) theFunction) + : _func(theFunction) {} + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( IMPORTSTEP_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( IMPORTSTEP_ARG_FILENAME ); } + + void SetIsIgnoreUnits( bool theIsIgnoreUnits ) + { _func->SetInteger( IMPORTSTEP_ARG_IGNORE_UNITS, int( theIsIgnoreUnits ) ); } + bool GetIsIgnoreUnits() + { return bool( _func->GetInteger( IMPORTSTEP_ARG_IGNORE_UNITS ) ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _STEPPlugin_IImport_HXX_ diff --git a/src/STEPPlugin/STEPPlugin_IOperations.cxx b/src/STEPPlugin/STEPPlugin_IOperations.cxx new file mode 100644 index 000000000..7a0de8b8e --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IOperations.cxx @@ -0,0 +1,206 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_IOperations.hxx" +#include "STEPPlugin_ExportDriver.hxx" +#include "STEPPlugin_ImportDriver.hxx" +#include "STEPPlugin_IExport.hxx" +#include "STEPPlugin_IImport.hxx" + +// KERNEL includes +#include + +// GEOM includes +#include "GEOM_PythonDump.hxx" +#include "GEOMImpl_Types.hxx" + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +STEPPlugin_IOperations::STEPPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "STEPPlugin_IOperations::STEPPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +STEPPlugin_IOperations::~STEPPlugin_IOperations() +{ + MESSAGE( "STEPPlugin_IOperations::~STEPPlugin_IOperations" ); +} + +//============================================================================= +/*! + * ExportSTEP + * Export a shape to STEP format + * \param theOriginal The shape to export + * \param theFileName The name of the file to exported + * \param theIsASCII The format of the exported file (ASCII or Binary) + * \param theDeflection The deflection of the shape to exported + */ +//============================================================================= +void STEPPlugin_IOperations::ExportSTEP( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName ) +{ + SetErrorCode(KO); + if( theOriginal.IsNull() ) return; + + Handle(GEOM_Function) aRefFunction = theOriginal->GetLastFunction(); + if( aRefFunction.IsNull() ) return; //There is no function which creates an object to be exported + + //Add a new result object + Handle(GEOM_Object) result = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT); + + //Add an Export function + Handle(GEOM_Function) aFunction = result->AddFunction( STEPPlugin_ExportDriver::GetID(), EXPORT_SHAPE ); + if( aFunction.IsNull() ) return; + + //Check if the function is set correctly + if( aFunction->GetDriverGUID() != STEPPlugin_ExportDriver::GetID() ) return; + + //Set parameters + STEPPlugin_IExport aCI( aFunction ); + aCI.SetOriginal( aRefFunction ); + aCI.SetFileName( theFileName ); + + //Perform the Export + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Not enough space on disk, or you haven't permissions to write this directory" ); + return; + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << "geompy.ExportSTEP(" << theOriginal << ", \"" + << theFileName.ToCString() << "\" )"; + + SetErrorCode(OK); +} + +//============================================================================= +/*! + * ImportSTEP + * Import a shape from STEP format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +STEPPlugin_IOperations::ImportSTEP( const TCollection_AsciiString& theFileName, + const bool theIsIgnoreUnits ) +{ + SetErrorCode(KO); + if( theFileName.IsEmpty() ) return NULL; + + //Add a new result object + Handle(GEOM_Object) anImported = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT ); + + //Add an Import function + Handle(GEOM_Function) aFunction = + anImported->AddFunction( STEPPlugin_ImportDriver::GetID(), IMPORT_SHAPE); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != STEPPlugin_ImportDriver::GetID()) return NULL; + + //Set parameters + STEPPlugin_IImport aCI( aFunction ); + aCI.SetFileName( theFileName ); + aCI.SetIsIgnoreUnits( theIsIgnoreUnits ); + + //Perform the Import + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Import driver failed" ); + return NULL; + } + aSeq->Append(anImported); + + // Greate material groups. + MakeMaterialGroups( anImported, aSeq ); + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump pd (aFunction); + if( theIsIgnoreUnits ) + pd << aSeq << " = geompy.ImportSTEP(\"" << theFileName.ToCString() << "\", True)"; + else + pd << aSeq << " = geompy.ImportSTEP(\"" << theFileName.ToCString() << "\")"; + SetErrorCode(OK); + + return aSeq; +} + +//============================================================================= +/*! + * ReadValue + */ +//============================================================================= +TCollection_AsciiString +STEPPlugin_IOperations::ReadValue( const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theParameterName ) +{ + SetErrorCode(KO); + + TCollection_AsciiString aValue, anError; + + if (theFileName.IsEmpty() || theParameterName.IsEmpty()) return aValue; + + aValue = STEPPlugin_ImportDriver::GetValue( theFileName, theParameterName, anError ); + + if( aValue.IsEmpty() ) { + if( anError.IsEmpty() ) + anError = theFileName + " doesn't contain requested parameter"; + return aValue; + } + if (anError.IsEmpty()) + SetErrorCode(OK); + else + SetErrorCode(anError.ToCString()); + + return aValue; +} diff --git a/src/STEPPlugin/STEPPlugin_IOperations.hxx b/src/STEPPlugin/STEPPlugin_IOperations.hxx new file mode 100644 index 000000000..6d4999815 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IOperations.hxx @@ -0,0 +1,46 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : STEPPlugin_IOperations.hxx + +#ifndef _STEPPlugin_IOperations_HXX_ +#define _STEPPlugin_IOperations_HXX_ + +// internal includes +#include "STEPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOMImpl_IBaseIEOperations.hxx" + +class STEPPLUGINENGINE_EXPORT STEPPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + STEPPlugin_IOperations( GEOM_Engine*, int ); + ~STEPPlugin_IOperations(); + + void ExportSTEP( const Handle(GEOM_Object), + const TCollection_AsciiString& ); + + Handle(TColStd_HSequenceOfTransient) ImportSTEP( const TCollection_AsciiString&, + const bool ); + + TCollection_AsciiString ReadValue( const TCollection_AsciiString&, + const TCollection_AsciiString& ); +}; + +#endif diff --git a/src/STEPPlugin/STEPPlugin_IOperations_i.cc b/src/STEPPlugin/STEPPlugin_IOperations_i.cc new file mode 100644 index 000000000..1f4ded47a --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IOperations_i.cc @@ -0,0 +1,128 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_IOperations_i.hh" +#include "STEPPlugin_IOperations.hxx" + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +STEPPlugin_IOperations_i::STEPPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + STEPPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "STEPPlugin_IOperations_i::STEPPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +STEPPlugin_IOperations_i::~STEPPlugin_IOperations_i() +{ + MESSAGE( "STEPPlugin_IOperations_i::~STEPPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * ExportSTEP + * Export a shape to STEP format + * \param theOriginal The shape to export + * \param theFileName The name of the exported file + */ +//============================================================================= +void STEPPlugin_IOperations_i::ExportSTEP( GEOM::GEOM_Object_ptr theOriginal, + const char* theFileName ) +{ + // duplicate the original shape + GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate( theOriginal ); + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference shape + Handle(GEOM_Object) anOriginal = GetObjectImpl( theOriginal ); + if (anOriginal.IsNull()) return; + + //Export the shape to the file + GetOperations()->ExportSTEP( anOriginal, theFileName ); +} + +//============================================================================= +/*! + * ImportSTEP + * Import a shape from STEP format + * \param theFileName The name of the file to import + * \param theIsIgnoreUnits If True, file length units will be ignored (set to 'meter') + * and result model will be scaled, if its units are not meters. + * If False (default), file length units will be taken into account. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +GEOM::ListOfGO* STEPPlugin_IOperations_i::ImportSTEP( const char* theFileName, + const bool theIsIgnoreUnits = false ) +{ + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Import the shape from the file + Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->ImportSTEP( theFileName, theIsIgnoreUnits ); + + if( !GetOperations()->IsDone() || aHSeq.IsNull() ) + return aSeq._retn(); + + // Copy created objects. + Standard_Integer aLength = aHSeq->Length(); + aSeq->length( aLength ); + for( Standard_Integer i = 1; i <= aLength; i++ ) + aSeq[i-1] = GetObject( Handle(GEOM_Object)::DownCast( aHSeq->Value(i) ) ); + + return aSeq._retn(); +} + +//============================================================================= +/*! + * ReadValue + */ +//============================================================================= +char* STEPPlugin_IOperations_i::ReadValue( const char* theFileName, + const char* theParameterName ) +{ + //Set a not done flag + GetOperations()->SetNotDone(); + + TCollection_AsciiString aParam = GetOperations()->ReadValue( theFileName, theParameterName ); + + return CORBA::string_dup( aParam.ToCString() ); +} + +STEPPlugin_IOperations* STEPPlugin_IOperations_i::GetOperations() +{ + return (STEPPlugin_IOperations*)GetImpl(); +} diff --git a/src/STEPPlugin/STEPPlugin_IOperations_i.hh b/src/STEPPlugin/STEPPlugin_IOperations_i.hh new file mode 100644 index 000000000..41833f822 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_IOperations_i.hh @@ -0,0 +1,53 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STEPPlugin_IOperations_i_HeaderFile +#define _STEPPlugin_IOperations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( STEPPlugin ) + +// internal includes +#include "STEPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_IOperations_i.hh" + +class STEPPlugin_IOperations; + +class STEPPLUGINENGINE_EXPORT STEPPlugin_IOperations_i : + public virtual POA_GEOM::ISTEPOperations, + public virtual GEOM_IOperations_i +{ +public: + STEPPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + STEPPlugin_IOperations* theImpl ); + ~STEPPlugin_IOperations_i(); + + void ExportSTEP( GEOM::GEOM_Object_ptr, const char* ); + GEOM::ListOfGO* ImportSTEP( const char*, const bool ); + char* ReadValue( const char*, const char* ); + + STEPPlugin_IOperations* GetOperations(); +}; + +#endif diff --git a/src/STEPPlugin/STEPPlugin_ImportDriver.cxx b/src/STEPPlugin/STEPPlugin_ImportDriver.cxx new file mode 100644 index 000000000..3fb26c5cf --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_ImportDriver.cxx @@ -0,0 +1,614 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_ImportDriver.hxx" +#include "STEPPlugin_IImport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" +#include "GEOMImpl_Types.hxx" + +// OOCT includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * GetShape() + */ +//============================================================================= + +TopoDS_Shape GetShape(const Handle(Standard_Transient) &theEnti, + const Handle(Transfer_TransientProcess) &theTP) +{ + TopoDS_Shape aResult; + Handle(Transfer_Binder) aBinder = theTP->Find(theEnti); + + if (aBinder.IsNull()) { + return aResult; + } + + aResult = TransferBRep::ShapeResult(aBinder); + + return aResult; +} + +//============================================================================= +/*! + * GetLabel() + */ +//============================================================================= + +TDF_Label GetLabel(const Handle(Standard_Transient) &theEnti, + const TDF_Label &theShapeLabel, + const TopoDS_Shape &aShape) +{ + TDF_Label aResult; + + if (theEnti->IsKind + (STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) { + // check all named shapes using iterator + TDF_ChildIDIterator anIt + (theShapeLabel, TDataStd_Name::GetID(), Standard_True); + + for (; anIt.More(); anIt.Next()) { + Handle(TDataStd_Name) nameAttr = + Handle(TDataStd_Name)::DownCast(anIt.Value()); + + if (nameAttr.IsNull()) { + continue; + } + + TDF_Label aLab = nameAttr->Label(); + Handle(TNaming_NamedShape) shAttr; + + if (aLab.FindAttribute(TNaming_NamedShape::GetID(), shAttr) && + shAttr->Get().IsEqual(aShape)) { + aResult = aLab; + } + } + } + + // create label and set shape + if (aResult.IsNull()) { + TDF_TagSource aTag; + + aResult = aTag.NewChild(theShapeLabel); + + TNaming_Builder tnBuild (aResult); + + tnBuild.Generated(aShape); + } + + return aResult; +} + +//============================================================================= +/*! + * StoreName() + */ +//============================================================================= + +void StoreName( const Handle(Standard_Transient) &theEnti, + const TopTools_IndexedMapOfShape &theIndices, + const Handle(Transfer_TransientProcess) &theTP, + const TDF_Label &theShapeLabel) +{ + Handle(TCollection_HAsciiString) aName; + + if (theEnti->IsKind(STANDARD_TYPE(StepShape_TopologicalRepresentationItem)) || + theEnti->IsKind(STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) { + aName = Handle(StepRepr_RepresentationItem)::DownCast(theEnti)->Name(); + } else { + Handle(StepBasic_ProductDefinition) PD = + Handle(StepBasic_ProductDefinition)::DownCast(theEnti); + + if (PD.IsNull() == Standard_False) { + Handle(StepBasic_Product) Prod = PD->Formation()->OfProduct(); + aName = Prod->Name(); + } + } + + bool isValidName = false; + + if (aName.IsNull() == Standard_False) { + isValidName = true; + + if (aName->UsefullLength() < 1) { + isValidName = false; + } else if (aName->UsefullLength() == 4 && + toupper (aName->Value(1)) == 'N' && + toupper (aName->Value(2)) == 'O' && + toupper (aName->Value(3)) == 'N' && + toupper (aName->Value(4)) == 'E') { + // skip 'N0NE' name + isValidName = false; + } else { + // special check to pass names like "Open CASCADE STEP translator 6.3 1" + TCollection_AsciiString aSkipName ("Open CASCADE STEP translator"); + + if (aName->Length() >= aSkipName.Length()) { + if (aName->String().SubString + (1, aSkipName.Length()).IsEqual(aSkipName)) { + isValidName = false; + } + } + } + } + + if (isValidName) { + TCollection_ExtendedString aNameExt (aName->ToCString()); + + // find target shape + TopoDS_Shape S = GetShape(theEnti, theTP); + + if (S.IsNull()) { + return; + } + + // as PRODUCT can be included in the main shape + // several times, we look here for all iclusions. + Standard_Integer isub, nbSubs = theIndices.Extent(); + + for (isub = 1; isub <= nbSubs; isub++) { + TopoDS_Shape aSub = theIndices.FindKey(isub); + + if (aSub.IsPartner(S)) { + TDF_Label L = GetLabel(theEnti, theShapeLabel, aSub); + + // set a name + TDataStd_Name::Set(L, aNameExt); + } + } + } +} + +//============================================================================= +/*! + * StoreMaterial() + */ +//============================================================================= + +void StoreMaterial( const Handle(Standard_Transient) &theEnti, + const TopTools_IndexedMapOfShape &theIndices, + const Handle(Transfer_TransientProcess) &theTP, + const TDF_Label &theShapeLabel ) +{ + // Treat Product Definition Shape only. + Handle(StepRepr_ProductDefinitionShape) aPDS = + Handle(StepRepr_ProductDefinitionShape)::DownCast(theEnti); + Handle(StepBasic_ProductDefinition) aProdDef; + + if(aPDS.IsNull() == Standard_False) { + // Product Definition Shape ==> Product Definition + aProdDef = aPDS->Definition().ProductDefinition(); + } + + if (aProdDef.IsNull() == Standard_False) { + // Product Definition ==> Property Definition + const Interface_Graph &aGraph = theTP->Graph(); + Interface_EntityIterator aSubs = aGraph.Sharings(aProdDef); + TopoDS_Shape aShape; + + for(aSubs.Start(); aSubs.More(); aSubs.Next()) { + Handle(StepRepr_PropertyDefinition) aPropD = + Handle(StepRepr_PropertyDefinition)::DownCast(aSubs.Value()); + + if(aPropD.IsNull() == Standard_False) { + // Property Definition ==> Representation. + Interface_EntityIterator aSubs1 = aGraph.Sharings(aPropD); + + for(aSubs1.Start(); aSubs1.More(); aSubs1.Next()) { + Handle(StepRepr_PropertyDefinitionRepresentation) aPDR = + Handle(StepRepr_PropertyDefinitionRepresentation):: + DownCast(aSubs1.Value()); + + if(aPDR.IsNull() == Standard_False) { + // Property Definition ==> Material Name. + Handle(StepRepr_Representation) aRepr = aPDR->UsedRepresentation(); + + if(aRepr.IsNull() == Standard_False) { + Standard_Integer ir; + + for(ir = 1; ir <= aRepr->NbItems(); ir++) { + Handle(StepRepr_RepresentationItem) aRI = aRepr->ItemsValue(ir); + Handle(StepRepr_DescriptiveRepresentationItem) aDRI = + Handle(StepRepr_DescriptiveRepresentationItem)::DownCast(aRI); + + if(aDRI.IsNull() == Standard_False) { + // Get shape from Product Definition + Handle(TCollection_HAsciiString) aMatName = aDRI->Name(); + + if(aMatName.IsNull() == Standard_False) { + TCollection_ExtendedString + aMatNameExt (aMatName->ToCString()); + + if (aShape.IsNull()) { + // Get the shape. + aShape = GetShape(aProdDef, theTP); + + if (aShape.IsNull()) { + return; + } + } + + // as PRODUCT can be included in the main shape + // several times, we look here for all iclusions. + Standard_Integer isub, nbSubs = theIndices.Extent(); + + for (isub = 1; isub <= nbSubs; isub++) { + TopoDS_Shape aSub = theIndices.FindKey(isub); + + if (aSub.IsPartner(aShape)) { + TDF_Label aLabel = + GetLabel(aProdDef, theShapeLabel, aSub); + + // set a name + TDataStd_Comment::Set(aLabel, aMatNameExt); + } + } + } + } + } + } + } + } + } + } + } +} + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& STEPPlugin_ImportDriver::GetID() +{ + static Standard_GUID aGUID("a25f88df-461b-45c0-ab6b-a82101fe6ce7"); + return aGUID; +} + +//======================================================================= +//function : STEPPlugin_ImportDriver +//purpose : +//======================================================================= +STEPPlugin_ImportDriver::STEPPlugin_ImportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer STEPPlugin_ImportDriver::Execute( TFunction_Logbook& log ) const +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + STEPPlugin_IImport aData( aFunction ); + + TCollection_AsciiString aFileName = aData.GetFileName().ToCString(); + bool anIsIgnoreUnits = aData.GetIsIgnoreUnits(); + TDF_Label aShapeLabel = aFunction->GetNamingEntry(); + + MESSAGE("Import STEP from file " << aFileName.ToCString() ); + + TopoDS_Shape aResShape; + TCollection_AsciiString anError; + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + STEPControl_Reader aReader; + + //VSR: 16/09/09: Convert to METERS + Interface_Static::SetCVal("xstep.cascade.unit","M"); + Interface_Static::SetIVal("read.step.ideas", 1); + Interface_Static::SetIVal("read.step.nonmanifold", 1); + + BRep_Builder B; + TopoDS_Compound compound; + B.MakeCompound(compound); + + try + { + OCC_CATCH_SIGNALS; + IFSelect_ReturnStatus status = aReader.ReadFile(aFileName.ToCString()); + if (status == IFSelect_RetDone) { + // Regard or not the model units + if( anIsIgnoreUnits ) { + // set UnitFlag to units from file + TColStd_SequenceOfAsciiString anUnitLengthNames; + TColStd_SequenceOfAsciiString anUnitAngleNames; + TColStd_SequenceOfAsciiString anUnitSolidAngleNames; + aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames); + if (anUnitLengthNames.Length() > 0) { + TCollection_AsciiString aLenUnits = anUnitLengthNames.First(); + if (aLenUnits == "millimetre") + Interface_Static::SetCVal("xstep.cascade.unit", "MM"); + else if (aLenUnits == "centimetre") + Interface_Static::SetCVal("xstep.cascade.unit", "CM"); + else if (aLenUnits == "metre" || aLenUnits.IsEmpty()) + Interface_Static::SetCVal("xstep.cascade.unit", "M"); + else if (aLenUnits == "INCH") + Interface_Static::SetCVal("xstep.cascade.unit", "INCH"); + else { + anError = "The file contains not supported units."; + } + // TODO (for other units than mm, cm, m or inch) + // else if (aLenUnits == "") + // Interface_Static::SetCVal("xstep.cascade.unit", "???"); + } + } + else { + // Need re-scale a model (set UnitFlag to 'meter') + Interface_Static::SetCVal("xstep.cascade.unit","M"); + } + + Standard_Boolean failsonly = Standard_False; + aReader.PrintCheckLoad(failsonly, IFSelect_ItemsByEntity); + + // Root transfers + Standard_Integer nbr = aReader.NbRootsForTransfer(); + aReader.PrintCheckTransfer(failsonly, IFSelect_ItemsByEntity); + + for (Standard_Integer n = 1; n <= nbr; n++) { + Standard_Boolean ok = aReader.TransferRoot(n); + // Collecting resulting entities + Standard_Integer nbs = aReader.NbShapes(); + if (!ok || nbs == 0) + continue; // skip empty root + + // For a single entity + else if (nbr == 1 && nbs == 1) { + aResShape = aReader.Shape(1); + if (aResShape.ShapeType() == TopAbs_COMPOUND) { + int nbSub1 = 0; + TopoDS_Shape currShape; + TopoDS_Iterator It (aResShape, Standard_True, Standard_True); + for (; It.More(); It.Next()) { + nbSub1++; + currShape = It.Value(); + } + if (nbSub1 == 1) + aResShape = currShape; + } + break; + } + + for (Standard_Integer i = 1; i <= nbs; i++) { + TopoDS_Shape aShape = aReader.Shape(i); + if (aShape.IsNull()) + continue; + else + B.Add(compound, aShape); + } + } + if( aResShape.IsNull() ) + aResShape = compound; + + // Check if any BRep entity has been read, there must be at least a vertex + if ( !TopExp_Explorer( aResShape, TopAbs_VERTEX ).More() ) + anError = "No geometrical data in the imported file."; + + // BEGIN: Store names and materials of sub-shapes from file + TopTools_IndexedMapOfShape anIndices; + TopExp::MapShapes(aResShape, anIndices); + + Handle(Interface_InterfaceModel) Model = aReader.WS()->Model(); + Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader(); + if (!TR.IsNull()) { + Handle(Transfer_TransientProcess) TP = TR->TransientProcess(); + + Standard_Integer nb = Model->NbEntities(); + + for (Standard_Integer ie = 1; ie <= nb; ie++) { + Handle(Standard_Transient) enti = Model->Value(ie); + + // Store names. + StoreName(enti, anIndices, TP, aShapeLabel); + + // Store materials. + StoreMaterial(enti, anIndices, TP, aShapeLabel); + } + } + // END: Store names and materials + } + else { + switch (status) { + case IFSelect_RetVoid: + anError = "Nothing created or No data to process"; + break; + case IFSelect_RetError: + anError = "Error in command or input data"; + break; + case IFSelect_RetFail: + anError = "Execution was run, but has failed"; + break; + case IFSelect_RetStop: + anError = "Execution has been stopped. Quite possible, an exception was raised"; + break; + default: + break; + } + anError = "Wrong format of the imported file. Can't import file."; + aResShape.Nullify(); + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + anError = aFail->GetMessageString(); + aResShape.Nullify(); + } + + if( aResShape.IsNull() ) { + StdFail_NotDone::Raise( anError.ToCString() ); + return 0; + } + + aFunction->SetValue( aResShape ); + + log.SetTouched( Label() ); + + return 1; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean STEPPlugin_ImportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ + +bool STEPPlugin_ImportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction( Label() ); + + STEPPlugin_IImport aCI( function ); + Standard_Integer aType = function->GetType(); + + theOperationName = "ImportSTEP"; + + switch ( aType ) { + case IMPORT_SHAPE: + AddParam( theParams, "File name", aCI.GetFileName() ); + if( aCI.GetIsIgnoreUnits() ) + AddParam( theParams, "Format", "STEP_SCALE" ); + break; + default: + return false; + } + return true; +} + +TCollection_AsciiString +STEPPlugin_ImportDriver::GetValue( const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theParameterName, + TCollection_AsciiString& theError ) +{ + Handle(TCollection_HAsciiString) aValue; + + if (theParameterName != "LEN_UNITS") { + theError = theParameterName + " parameter reading is not supported by STEP plugin"; + return TCollection_AsciiString(); + } + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + STEPControl_Reader aReader; + + Interface_Static::SetCVal( "xstep.cascade.unit","M" ); + Interface_Static::SetIVal( "read.step.ideas", 1 ); + Interface_Static::SetIVal( "read.step.nonmanifold", 1 ); + + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + IFSelect_ReturnStatus status = aReader.ReadFile( theFileName.ToCString() ); + if (status == IFSelect_RetDone) { + TColStd_SequenceOfAsciiString anUnitLengthNames; + TColStd_SequenceOfAsciiString anUnitAngleNames; + TColStd_SequenceOfAsciiString anUnitSolidAngleNames; + aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames); + if (anUnitLengthNames.Length() > 0) { + aValue = new TCollection_HAsciiString( anUnitLengthNames.First() ); + /* + TCollection_AsciiString aLenUnits = anUnitLengthNames.First(); + if (aLenUnits == "millimetre") + aValue = new TCollection_HAsciiString ("MM"); + else if (aLenUnits == "centimetre") + aValue = new TCollection_HAsciiString ("CM"); + else if (aLenUnits == "metre") + aValue = new TCollection_HAsciiString ("M"); + else if (aLenUnits == "INCH") + aValue = new TCollection_HAsciiString ("INCH"); + // TODO (for other units than mm, cm, m or inch) + //else if (aLenUnits == "") + // aValue = new TCollection_HAsciiString (""); + */ + } + } + else { + theError = theFileName + " reading failed"; + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + theError = aFail->GetMessageString(); + } + if (!aValue.IsNull()) + return aValue->String(); + else + return TCollection_AsciiString(); +} + + +IMPLEMENT_STANDARD_HANDLE( STEPPlugin_ImportDriver, GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( STEPPlugin_ImportDriver, GEOM_BaseDriver ); diff --git a/src/STEPPlugin/STEPPlugin_ImportDriver.hxx b/src/STEPPlugin/STEPPlugin_ImportDriver.hxx new file mode 100644 index 000000000..a8c2b0cf0 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_ImportDriver.hxx @@ -0,0 +1,56 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STEPPlugin_ImportDriver_HXX +#define _STEPPlugin_ImportDriver_HXX + +// internal includes +#include "STEPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( STEPPlugin_ImportDriver, GEOM_BaseDriver ); + +class STEPPLUGINENGINE_EXPORT STEPPlugin_ImportDriver : public GEOM_BaseDriver +{ +public: + STEPPlugin_ImportDriver(); + ~STEPPlugin_ImportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + + static + TCollection_AsciiString GetValue( const TCollection_AsciiString&, + const TCollection_AsciiString&, + TCollection_AsciiString& ); + +DEFINE_STANDARD_RTTI( STEPPlugin_ImportDriver ) +}; + +#endif // _STEPPlugin_ImportDriver_HXX diff --git a/src/STEPPlugin/STEPPlugin_OperationsCreator.cxx b/src/STEPPlugin/STEPPlugin_OperationsCreator.cxx new file mode 100644 index 000000000..d3d31a18d --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_OperationsCreator.cxx @@ -0,0 +1,74 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STEPPlugin_OperationsCreator.hxx" +#include "STEPPlugin_IOperations_i.hh" +#include "STEPPlugin_IOperations.hxx" +#include "STEPPlugin_ExportDriver.hxx" +#include "STEPPlugin_ImportDriver.hxx" +#include "STEPPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOMImpl_IECallBack.hxx" + +// OCCT includes +#include + +std::map STEPPlugin_OperationsCreator::_mapOfOperations; + +STEPPlugin_OperationsCreator::STEPPlugin_OperationsCreator() +{ + // Register drivers + TFunction_DriverTable::Get()->AddDriver( STEPPlugin_ExportDriver::GetID(), + new STEPPlugin_ExportDriver() ); + TFunction_DriverTable::Get()->AddDriver( STEPPlugin_ImportDriver::GetID(), + new STEPPlugin_ImportDriver() ); + + // Register callback + STEPPlugin_IECallBack* callback = new STEPPlugin_IECallBack(); + GEOMImpl_IECallBack::Register( "STEP", callback ); + GEOMImpl_IECallBack::Register( "STEP_SCALE", callback ); +} + +STEPPlugin_OperationsCreator::~STEPPlugin_OperationsCreator() +{ +} + +GEOM_IOperations_i* STEPPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "STEPPlugin_OperationsCreator::Create" ); + return new STEPPlugin_IOperations_i( thePOA, theEngine, get( theGenImpl, theStudyId ) ); +} + +STEPPlugin_IOperations* STEPPlugin_OperationsCreator::get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ) +{ + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) + _mapOfOperations[theStudyId] = new STEPPlugin_IOperations( theGenImpl, theStudyId ); + return _mapOfOperations[theStudyId]; +} diff --git a/src/STEPPlugin/STEPPlugin_OperationsCreator.hxx b/src/STEPPlugin/STEPPlugin_OperationsCreator.hxx new file mode 100755 index 000000000..5e3cb9575 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_OperationsCreator.hxx @@ -0,0 +1,58 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOM_STEPPlugin_OperationsCreator_HXX_ +#define _GEOM_STEPPlugin_OperationsCreator_HXX_ + +// internal includes +#include "STEPPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +class STEPPlugin_IOperations; + +//===================================================================== +// Operations creator +//===================================================================== +class STEPPLUGINENGINE_EXPORT STEPPlugin_OperationsCreator : public GEOM_GenericOperationsCreator +{ +public: + STEPPlugin_OperationsCreator(); + ~STEPPlugin_OperationsCreator(); + + GEOM_IOperations_i* Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ); + +private: + static STEPPlugin_IOperations* get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ); + +private: + static std::map _mapOfOperations; + + friend class STEPPlugin_IECallBack; +}; + +#endif diff --git a/src/STEPPlugin/STEPPlugin_msg_en.ts b/src/STEPPlugin/STEPPlugin_msg_en.ts new file mode 100644 index 000000000..d24fc9014 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_msg_en.ts @@ -0,0 +1,51 @@ + + + + + @default + + MEN_EXPORTSTEP + STEP + + + TOP_EXPORTSTEP + Export STEP + + + STB_EXPORTSTEP + Export STEP + + + MEN_IMPORTSTEP + STEP + + + TOP_IMPORTSTEP + Import STEP + + + STB_IMPORTSTEP + Import STEP + + + + STEPPlugin_GUI + + STEP_FILES + STEP Files ( *.step *.stp ) + + + EXPORT_TITLE + Export STEP + + + IMPORT_TITLE + Import STEP + + + SCALE_DIMENSIONS + Take into account the units (%1) embedded to the file? +Ignoring units will cause model scaling (as dimensions are supposed to be specified in meters). + + + diff --git a/src/STEPPlugin/STEPPlugin_msg_fr.ts b/src/STEPPlugin/STEPPlugin_msg_fr.ts new file mode 100644 index 000000000..077fc096f --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_msg_fr.ts @@ -0,0 +1,51 @@ + + + + + @default + + MEN_EXPORTSTEP + STEP + + + TOP_EXPORTSTEP + Exporter STEP + + + STB_EXPORTSTEP + Exporter STEP + + + MEN_IMPORTSTEP + STEP + + + TOP_IMPORTSTEP + Importer STEP + + + STB_IMPORTSTEP + Importer STEP + + + + STEPPlugin_GUI + + STEP_FILES + STEP Fichiers ( *.step *.stp ) + + + EXPORT_TITLE + Exporter STEP + + + IMPORT_TITLE + Importer STEP + + + SCALE_DIMENSIONS + Voulez-vous prendre les unités du fichier (%1) en considération? +Sinon le modèle sera mis à l'échelle GEOM (unités interprétées comme des mètres). + + + diff --git a/src/STEPPlugin/STEPPlugin_msg_ja.ts b/src/STEPPlugin/STEPPlugin_msg_ja.ts new file mode 100644 index 000000000..459ee3442 --- /dev/null +++ b/src/STEPPlugin/STEPPlugin_msg_ja.ts @@ -0,0 +1,50 @@ + + + + + @default + + MEN_EXPORTSTEP + STEP + + + TOP_EXPORTSTEP + Export STEP + + + STB_EXPORTSTEP + Export STEP + + + MEN_IMPORTSTEP + STEP + + + TOP_IMPORTSTEP + Import STEP + + + STB_IMPORTSTEP + Import STEP + + + + STEPPlugin_GUI + + STEP_FILES + STEP Files ( *.step *.stp ) + + + EXPORT_TITLE + Export STEP + + + IMPORT_TITLE + Import STEP + + + SCALE_DIMENSIONS + インポートしたファイルの単位をミリメートルからメートルに変換しますか?いいえを選んだ場合、メートル単位として解釈します。 + + + diff --git a/src/STLExport/CMakeLists.txt b/src/STLExport/CMakeLists.txt deleted file mode 100755 index ce8046fb7..000000000 --- a/src/STLExport/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKSTL} - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(STLExport_SOURCES - STLExport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(STLExport ${STLExport_SOURCES}) -TARGET_LINK_LIBRARIES(STLExport ${_link_LIBRARIES}) -INSTALL(TARGETS STLExport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/STLExport/STLExport.cxx b/src/STLExport/STLExport.cxx deleted file mode 100644 index dc0dfb631..000000000 --- a/src/STLExport/STLExport.cxx +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: STLExport.cxx -// Created: Wed May 19 14:53:52 2004 -// Author: Pavel TELKOV -// -// -#include "utilities.h" - -#include - -#include -#include - -#ifdef WIN32 -# if defined STLEXPORT_EXPORTS || defined STLExport_EXPORTS -# define STLEXPORT_EXPORT __declspec( dllexport ) -# else -# define STLEXPORT_EXPORT __declspec( dllimport ) -# endif -#else -# define STLEXPORT_EXPORT -#endif - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ - STLEXPORT_EXPORT - int Export(const TopoDS_Shape& theShape, - const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theFormatName) - { - MESSAGE("Export STL into file " << theFileName.ToCString()); - - try - { - StlAPI_Writer aWriter; - bool aIsASCIIMode; - aIsASCIIMode = (theFormatName.IsEqual("STL_ASCII")) ? true : false; - aWriter.ASCIIMode() = aIsASCIIMode; - aWriter.Write(theShape, theFileName.ToCString()) ; - return 1; - } - catch(Standard_Failure) - { - //THROW_SALOME_CORBA_EXCEPTION("Exception catched in STLExport", SALOME::BAD_PARAM); - } - return 0; - } -} diff --git a/src/STLImport/CMakeLists.txt b/src/STLImport/CMakeLists.txt deleted file mode 100755 index 54750b83d..000000000 --- a/src/STLImport/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - ${CAS_TKSTL} - ${KERNEL_SALOMELocalTrace} - ${CAS_TKTopAlgo} - ${CAS_TKBRep} - ${CAS_TKG3d} - ) - -# --- sources --- - -SET(STLImport_SOURCES - STLImport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(STLImport ${STLImport_SOURCES}) -TARGET_LINK_LIBRARIES(STLImport ${_link_LIBRARIES}) -INSTALL(TARGETS STLImport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/STLImport/STLImport.cxx b/src/STLImport/STLImport.cxx deleted file mode 100755 index 0b4189e0a..000000000 --- a/src/STLImport/STLImport.cxx +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: STLImport.cxx -// Author: Sergey KHROMOV - - -#include "utilities.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifdef WIN32 - #if defined STLIMPORT_EXPORTS || defined STLImport_EXPORTS - #define STLIMPORT_EXPORT __declspec( dllexport ) - #else - #define STLIMPORT_EXPORT __declspec( dllimport ) - #endif -#else - #define STLIMPORT_EXPORT -#endif - - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ -STLIMPORT_EXPORT - TopoDS_Shape Import (const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& /*theFormatName*/, - TCollection_AsciiString& theError, - const TDF_Label&) - { - MESSAGE("Import STL from file " << theFileName.ToCString()); - - StlAPI_Reader aReader; - TopoDS_Shape aShape; - - aReader.Read(aShape, theFileName.ToCString()); - - if (aShape.IsNull()) { - theError = "STL Import failed"; - } else { - // Fix the orientation of closed shell or solid. - if (BRep_Tool::IsClosed(aShape)) { - TopAbs_ShapeEnum aType = aShape.ShapeType(); - - if (aType == TopAbs_SHELL || aType == TopAbs_SOLID) { - TopoDS_Solid aSolid; - - if (aType == TopAbs_SHELL) { - // Create a solid. - BRep_Builder aBuilder; - - aBuilder.MakeSolid(aSolid); - aBuilder.Add(aSolid, aShape); - } else { - aSolid = TopoDS::Solid(aShape); - } - - // Classify infinite point against solid. - BRepClass3d_SolidClassifier aClassifier(aSolid); - - aClassifier.PerformInfinitePoint(Precision::Confusion()); - - if (aClassifier.State() == TopAbs_IN) { - // The shape is inverted. Reverse it. - aShape.Reverse(); - } - } - } - } - - return aShape; - } -} diff --git a/src/STLPlugin/CMakeLists.txt b/src/STLPlugin/CMakeLists.txt new file mode 100644 index 000000000..0b9420c3f --- /dev/null +++ b/src/STLPlugin/CMakeLists.txt @@ -0,0 +1,149 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +IF(SALOME_BUILD_GUI) + INCLUDE(UseQt4Ext) + INCLUDE(${QT_USE_FILE}) +ENDIF() + +# --- options --- + +# additional include directories +INCLUDE_DIRECTORIES( + ${CAS_INCLUDE_DIRS} + ${KERNEL_INCLUDE_DIRS} + ${PROJECT_BINARY_DIR}/idl + ${PROJECT_SOURCE_DIR}/src/GEOMAlgo + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/GEOM_I + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_SOURCE_DIR}/src/GEOMUtils + ) + +IF(SALOME_BUILD_GUI) + INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIRS} + ${GUI_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/src/OBJECT + ${PROJECT_SOURCE_DIR}/src/GEOMGUI + ${PROJECT_SOURCE_DIR}/src/GEOMBase + ) +ENDIF() + +# additional preprocessor / compiler flags +ADD_DEFINITIONS( + ${CAS_DEFINITIONS} + ) + +IF(SALOME_BUILD_GUI) +ADD_DEFINITIONS( + ${QT_DEFINITIONS} + ) +ENDIF() + +# libraries to link to +SET(_link_engine_LIBRARIES + ${CAS_TKSTL} + ${KERNEL_SALOMELocalTrace} + ${KERNEL_OpUtil} + SalomeIDLGEOM + SalomeIDLSTLPlugin + GEOMEngine + GEOMClient + ) + +IF(SALOME_BUILD_GUI) + SET(_link_gui_LIBRARIES + SalomeIDLSTLPlugin + GEOMObject + GEOM + GEOMBase + ) +ENDIF() + + +# --- headers --- + +SET(STLPluginEngine_HEADERS + STLPlugin_IOperations_i.hh + STLPlugin_Engine.hxx + STLPlugin_OperationsCreator.hxx + STLPlugin_IOperations.hxx + STLPlugin_IExport.hxx + STLPlugin_IImport.hxx + STLPlugin_ImportDriver.hxx + STLPlugin_ExportDriver.hxx + STLPlugin_IECallBack.hxx + ) + +IF(SALOME_BUILD_GUI) + # header files / to be processed by moc + SET(_moc_HEADERS + STLPlugin_GUI.h + STLPlugin_ExportDlg.h + ) +ENDIF() + +# --- sources --- + +IF(SALOME_BUILD_GUI) + # sources / moc wrappings + QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) + + SET(STLPluginGUI_SOURCES + STLPlugin_GUI.cxx + STLPlugin_ExportDlg.cxx + ${_moc_SOURCES} + ) +ENDIF() + +SET(STLPluginEngine_SOURCES + STLPlugin_Engine.cxx + STLPlugin_OperationsCreator.cxx + STLPlugin_IOperations_i.cc + STLPlugin_IOperations.cxx + STLPlugin_ExportDriver.cxx + STLPlugin_ImportDriver.cxx + STLPlugin_IECallBack.cxx + ) + +# resource files / to be processed by lrelease +SET(STLPlugin_RESOURCES + STLPlugin_msg_en.ts + STLPlugin_msg_fr.ts + STLPlugin_msg_ja.ts + ) + +# --- rules --- + +ADD_LIBRARY(STLPluginEngine ${STLPluginEngine_SOURCES}) +TARGET_LINK_LIBRARIES(STLPluginEngine ${_link_engine_LIBRARIES}) +INSTALL(TARGETS STLPluginEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +IF(SALOME_BUILD_GUI) + ADD_LIBRARY(STLPluginGUI ${STLPluginGUI_SOURCES}) + TARGET_LINK_LIBRARIES(STLPluginGUI ${_link_gui_LIBRARIES}) + INSTALL(TARGETS STLPluginGUI EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + + QT4_INSTALL_TS_RESOURCES("${STLPlugin_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}") +ENDIF() + + +INSTALL(FILES ${STLPluginEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/STLPlugin/STLPlugin_Engine.cxx b/src/STLPlugin/STLPlugin_Engine.cxx new file mode 100644 index 000000000..49fb94c80 --- /dev/null +++ b/src/STLPlugin/STLPlugin_Engine.cxx @@ -0,0 +1,31 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_Engine.hxx" +#include "STLPlugin_OperationsCreator.hxx" + +extern "C" +{ + STLPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + return new STLPlugin_OperationsCreator(); + } +} diff --git a/src/STLPlugin/STLPlugin_Engine.hxx b/src/STLPlugin/STLPlugin_Engine.hxx new file mode 100755 index 000000000..df3244fa2 --- /dev/null +++ b/src/STLPlugin/STLPlugin_Engine.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STLPLUGIN_ENGINE_HXX_ +#define _STLPLUGIN_ENGINE_HXX_ + +#ifdef WIN32 + #if defined STLPLUGINENGINE_EXPORTS || defined STLPluginEngine_EXPORTS + #define STLPLUGINENGINE_EXPORT __declspec( dllexport ) + #else + #define STLPLUGINENGINE_EXPORT __declspec( dllimport ) + #endif +#else + #define STLPLUGINENGINE_EXPORT +#endif + +#endif diff --git a/src/STLPlugin/STLPlugin_ExportDlg.cxx b/src/STLPlugin/STLPlugin_ExportDlg.cxx new file mode 100644 index 000000000..8d16f234e --- /dev/null +++ b/src/STLPlugin/STLPlugin_ExportDlg.cxx @@ -0,0 +1,196 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_ExportDlg.h" + +// GUI includes +#include +#include +#include + +#include +#include +#include + +// GEOM includes +#include "GEOMBase.h" +#include "GEOM_Constants.h" + +// OCC includes +#include + +// QT includes +#include +#include +#include +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +STLPlugin_ExportDlg::STLPlugin_ExportDlg( const Handle(SALOME_InteractiveObject)& io, QWidget* parent ) +: SUIT_FileDlg( parent, false, true, true ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + QLabel* deflectionLabel = new QLabel( tr( "DEFLECTION" ), this ); + + QWidget* options = new QWidget( this ); + QHBoxLayout* optionsLayout = new QHBoxLayout( options ); + optionsLayout->setMargin( 0 ); + optionsLayout->setSpacing( 5 ); + + myDeflectionSB = new SalomeApp_DoubleSpinBox( options ); + int aPrecision = resMgr->integerValue( "Geometry", "parametric_precision", 6 ); + myDeflectionSB->setAcceptNames( false ); + myDeflectionSB->setPrecision( aPrecision ); + myDeflectionSB->setDecimals( aPrecision ); + myDeflectionSB->setRange( GEOM::minDeflection(), 1.0 ); + myDeflectionSB->setSingleStep( 1.0e-04 ); + + myModeCB = new QCheckBox( tr( "RELATIVE" ), options ); + + myFormatCB = new QCheckBox( tr( "ASCII" ) ); + + optionsLayout->addWidget( myDeflectionSB ); + optionsLayout->addWidget( myModeCB ); + optionsLayout->addWidget( myFormatCB ); + + layout()->addWidget( deflectionLabel ); + layout()->addWidget( options ); + + myShapeSize = getShapeSize( io ); + + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + SalomeApp_Study* study = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + int mgrId = app->activeViewManager()->getGlobalId(); + QVariant v = study->getObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::Deflection ), QVariant() ); + double deflection = v.isValid() ? v.toDouble() : SUIT_Session::session()->resourceMgr()->doubleValue( "Geometry", "deflection_coef", 0.001 ); + + myDeflectionSB->setValue( deflection ); + myModeCB->setChecked( true ); + myFormatCB->setChecked( true ); + + connect( myModeCB, SIGNAL( clicked ( bool ) ), this, SLOT( modeChanged() ) ); +} + +//================================================================================= +// Destructor +//================================================================================= +STLPlugin_ExportDlg::~STLPlugin_ExportDlg() +{ +} + +//================================================================================= +// modeChanged +//================================================================================= +void STLPlugin_ExportDlg::modeChanged() +{ + if ( myModeCB->isChecked() ) { + double deflection = myDeflectionSB->value() / myShapeSize; + deflection = ( deflection > 1.0 ) ? 1.0 : deflection; + myDeflectionSB->setRange( GEOM::minDeflection(), 1.0 ); + myDeflectionSB->setValue( deflection ); + } + else { + double deflection = myDeflectionSB->value() * myShapeSize; + myDeflectionSB->setRange( GEOM::minDeflection(), 10000.0 ); + myDeflectionSB->setValue( deflection ); + } +} + +//================================================================================= +// getShapeSize +//================================================================================= +double STLPlugin_ExportDlg::getShapeSize( const Handle(SALOME_InteractiveObject)& io ) +{ + TopoDS_Shape shape; + GEOM::GEOM_Object_var obj = GEOMBase::ConvertIOinGEOMObject( io ); + GEOMBase::GetShape( obj, shape, TopAbs_SHAPE ); + Standard_Real xmin, ymin, zmin, xmax, ymax, zmax; + Bnd_Box bnd; + BRepBndLib::Add( shape, bnd ); + bnd.Get( xmin, ymin, zmin, xmax, ymax, zmax ); + double xd = fabs( xmax-xmin ); + double yd = fabs( ymax-ymin ); + double zd = fabs( zmax-zmin ); + return std::max( std::max ( xd, yd ), zd ); +} + +//================================================================================= +// isAscii +//================================================================================= +bool STLPlugin_ExportDlg::isAscii() const +{ + return myFormatCB->isChecked(); +} + +//================================================================================= +// getDeflection +//================================================================================= +double STLPlugin_ExportDlg::getDeflection() const +{ + return myDeflectionSB->value(); +} + +//================================================================================= +// isDeflectionRelative +//================================================================================= +bool STLPlugin_ExportDlg::isDeflectionRelative() const +{ + return myModeCB->isChecked(); +} + +//================================================================================= +// getFileName +//================================================================================= +QString STLPlugin_ExportDlg::getFileName( const Handle(SALOME_InteractiveObject)& io, + const QString& filters, const QString& caption, + QWidget* parent, bool& isAscii, + double& deflection, bool& isRelative ) +{ + QStringList fls = filters.split( ";;", QString::SkipEmptyParts ); + + QString tmpfilename = io->getName(); + tmpfilename = tmpfilename.simplified(); + tmpfilename = tmpfilename.replace( QRegExp( "\\*" ), "" ).replace( QRegExp( "\\?" ), "" ); + + STLPlugin_ExportDlg fd( io, parent ); + fd.setFileMode( AnyFile ); + fd.setFilters( fls ); + fd.setWindowTitle( caption ); + if ( !tmpfilename.isEmpty() ) + fd.processPath( tmpfilename ); + + QString filename; + + if ( fd.exec() == QDialog::Accepted ) { + filename = fd.selectedFile(); + isAscii = fd.isAscii(); + deflection = fd.getDeflection(); + isRelative = fd.isDeflectionRelative(); + } + + QApplication::processEvents(); + + return filename; +} + diff --git a/src/STLPlugin/STLPlugin_ExportDlg.h b/src/STLPlugin/STLPlugin_ExportDlg.h new file mode 100644 index 000000000..e79722e1a --- /dev/null +++ b/src/STLPlugin/STLPlugin_ExportDlg.h @@ -0,0 +1,62 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef STLPlugin_ExportDlg_H +#define STLPlugin_ExportDlg_H + +#include +#include + +class QCheckBox; +class SalomeApp_DoubleSpinBox; + +class STLPlugin_ExportDlg: public SUIT_FileDlg +{ + Q_OBJECT + +public: + STLPlugin_ExportDlg( const Handle(SALOME_InteractiveObject)& io, QWidget* parent ); + ~STLPlugin_ExportDlg(); + + bool isAscii() const; + double getDeflection() const; + bool isDeflectionRelative() const; + + static QString getFileName( const Handle(SALOME_InteractiveObject)& io, + const QString& filters, + const QString& caption, + QWidget* parent, + bool& isAscii, + double& deflection, + bool& isRelative ); + +private slots: + void modeChanged(); + +private: + static double getShapeSize( const Handle(SALOME_InteractiveObject)& io ); + +private: + SalomeApp_DoubleSpinBox* myDeflectionSB; + QCheckBox* myModeCB; + QCheckBox* myFormatCB; + double myShapeSize; +}; + +#endif // STLPlugin_ExportDlg_H diff --git a/src/STLPlugin/STLPlugin_ExportDriver.cxx b/src/STLPlugin/STLPlugin_ExportDriver.cxx new file mode 100644 index 000000000..f800a7d0b --- /dev/null +++ b/src/STLPlugin/STLPlugin_ExportDriver.cxx @@ -0,0 +1,128 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_ExportDriver.hxx" +#include "STLPlugin_IExport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" + +// OOCT includes +#include +#include +#include + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& STLPlugin_ExportDriver::GetID() +{ + static Standard_GUID aGUID("88678a6a-885c-477c-b90b-51934572c61d"); + return aGUID; +} + +//======================================================================= +//function : STLPlugin_ExportDriver +//purpose : +//======================================================================= +STLPlugin_ExportDriver::STLPlugin_ExportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer STLPlugin_ExportDriver::Execute( TFunction_Logbook& log ) const +{ + if (Label().IsNull()) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + STLPlugin_IExport aData (aFunction); + + // retrieve the being exported shape + TopoDS_Shape aShape; + Handle(GEOM_Function) aRefFunction = aData.GetOriginal(); + if( aRefFunction.IsNull() ) return 0; + aShape = aRefFunction->GetValue(); + if( aShape.IsNull() ) return 0; + // set the result of function to be used by next operations + aFunction->SetValue( aShape ); + + TCollection_AsciiString aFileName = aData.GetFileName(); + double aDeflection = aData.GetDeflection(); + bool anIsASCII = aData.GetIsASCII(); + bool anIsRelative = aData.GetIsRelative(); + + MESSAGE( "Export STL into file " << aFileName ); + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + try + { + StlAPI_Writer aWriter; + // set relative mode on false for using custom deflection coefficient + aWriter.RelativeMode( ) = anIsRelative; + aWriter.ASCIIMode() = anIsASCII; + if( anIsRelative ) + aWriter.SetCoefficient( aDeflection ); + else + aWriter.SetDeflection( aDeflection ); + BRepBuilderAPI_Copy aCopy( aShape, Standard_False ); + aWriter.Write( aCopy.Shape(), aFileName.ToCString() ); + log.SetTouched( Label() ); + return 1; + } + catch( Standard_Failure ) + { + //THROW_SALOME_CORBA_EXCEPTION("Exception catched in ExportSTL", SALOME::BAD_PARAM); + } + return 0; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean STLPlugin_ExportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ +bool STLPlugin_ExportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + return false; +} + +IMPLEMENT_STANDARD_HANDLE( STLPlugin_ExportDriver,GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( STLPlugin_ExportDriver,GEOM_BaseDriver ); diff --git a/src/STLPlugin/STLPlugin_ExportDriver.hxx b/src/STLPlugin/STLPlugin_ExportDriver.hxx new file mode 100644 index 000000000..4726a16d3 --- /dev/null +++ b/src/STLPlugin/STLPlugin_ExportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STLPlugin_ExportDriver_HXX +#define _STLPlugin_ExportDriver_HXX + +// internal includes +#include "STLPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( STLPlugin_ExportDriver, GEOM_BaseDriver ); + +class STLPLUGINENGINE_EXPORT STLPlugin_ExportDriver : public GEOM_BaseDriver +{ +public: + STLPlugin_ExportDriver(); + ~STLPlugin_ExportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( STLPlugin_ExportDriver ) +}; + +#endif // _STLPlugin_ExportDriver_HXX diff --git a/src/STLPlugin/STLPlugin_GUI.cxx b/src/STLPlugin/STLPlugin_GUI.cxx new file mode 100644 index 000000000..d0ee88ef8 --- /dev/null +++ b/src/STLPlugin/STLPlugin_GUI.cxx @@ -0,0 +1,269 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_GUI.h" +#include "STLPlugin_ExportDlg.h" + +// GUI includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// GEOM includes +#include "GeometryGUI.h" +#include "GEOM_Operation.h" +#include "GEOMBase.h" +#include "GEOM_Displayer.h" + +#include +#include CORBA_SERVER_HEADER(STLPlugin) + +//======================================================================= +// function : STLPlugin_GUI() +// purpose : Constructor +//======================================================================= +STLPlugin_GUI::STLPlugin_GUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) +{ +} + +//======================================================================= +// function : ~STLPlugin_GUI +// purpose : Destructor +//======================================================================= +STLPlugin_GUI::~STLPlugin_GUI() +{ +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool STLPlugin_GUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) +{ + QString cmd; + switch ( theCommandID ) { + case 1: + cmd = "Export_STL"; break; + case 2: + cmd = "Import_STL"; break; + default: + break; + } + return OnGUIEvent( cmd, parent ); +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool STLPlugin_GUI::OnGUIEvent( const QString& theCommandID, SUIT_Desktop* parent ) +{ + bool result = false; + + if( theCommandID == "Export_STL" ) { + result = exportSTL( parent ); + } + else if (theCommandID == "Import_STL") { + result = importSTL( parent ); + } + else { + getGeometryGUI()->getApp()->putInfo( tr("GEOM_PRP_COMMAND").arg( theCommandID ) ); + } + + return true; +} + +//======================================================================= +// function : importSTL +// purpose : +//======================================================================= +bool STLPlugin_GUI::importSTL( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "STLPluginEngine" ); + GEOM::ISTLOperations_var stlOp = GEOM::ISTLOperations::_narrow( op ); + if ( CORBA::is_nil( stlOp ) ) return false; + + QStringList fileNames = app->getOpenFileNames( SUIT_FileDlg::getLastVisitedPath().isEmpty() ? QDir::currentPath() : QString(""), + tr( "STL_FILES" ), + tr( "IMPORT_TITLE" ), + parent ); + if ( fileNames.count() > 0 ) + { + QStringList entryList; + QStringList errors; + + foreach( QString fileName, fileNames ) + { + SUIT_OverrideCursor wc; + GEOM_Operation transaction( app, stlOp.in() ); + + try + { + app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( fileName ) ); + transaction.start(); + GEOM::ListOfGO_var result = stlOp->ImportSTL( fileName.toUtf8().constData() ); + if ( result->length() > 0 && stlOp->IsDone() ) + { + GEOM::GEOM_Object_var main = result[0]; + QString publishName = GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, true ) ); + SALOMEDS::SObject_var so = GeometryGUI::GetGeomGen()->PublishInStudy( dsStudy, + SALOMEDS::SObject::_nil(), + main.in(), + publishName.toUtf8().constData() ); + + entryList.append( so->GetID() ); + transaction.commit(); + GEOM_Displayer( study ).Display( main.in() ); + } + else + { + transaction.abort(); + errors.append( QString( "%1 : %2" ).arg( fileName ).arg( stlOp->GetErrorCode() ) ); + } + } + catch( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + } + } + getGeometryGUI()->updateObjBrowser( true ); + app->browseObjects( entryList ); + + if ( errors.count() > 0 ) + { + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) ); + } + } + return fileNames.count() > 0; +} + +//======================================================================= +// function : exportSTL +// purpose : +//======================================================================= +bool STLPlugin_GUI::exportSTL( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "STLPluginEngine" ); + GEOM::ISTLOperations_var stlOp = GEOM::ISTLOperations::_narrow( op ); + if ( CORBA::is_nil( stlOp ) ) return false; + + LightApp_SelectionMgr* sm = app->selectionMgr(); + if ( !sm ) return false; + + SALOME_ListIO selectedObjects; + sm->selectedObjects( selectedObjects ); + bool ok = false; + + SALOME_ListIteratorOfListIO it( selectedObjects ); + for ( ; it.More(); it.Next() ) + { + Handle(SALOME_InteractiveObject) io = it.Value(); + GEOM::GEOM_Object_var obj = GEOMBase::ConvertIOinGEOMObject( io ); + + if ( CORBA::is_nil( obj ) ) continue; + + bool isASCII = false; + double deflection = 0.; + bool isRelative = false; + QString fileName = STLPlugin_ExportDlg::getFileName( io, + tr( "STL_FILES" ), + tr( "EXPORT_TITLE" ), + parent, + isASCII, + deflection, + isRelative ); + + if ( fileName.isEmpty() ) + return false; + + SUIT_OverrideCursor wc; + + GEOM_Operation transaction( app, stlOp.in() ); + + try + { + app->putInfo( tr( "GEOM_PRP_EXPORT" ).arg( fileName ) ); + transaction.start(); + + stlOp->ExportSTL( obj, fileName.toUtf8().constData(), isASCII, deflection, isRelative ); + + if ( stlOp->IsDone() ) + { + transaction.commit(); + } + else + { + transaction.abort(); + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_PRP_ABORT" ) + "\n" + tr( stlOp->GetErrorCode() ) ); + return false; + } + } + catch ( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + return false; + } + ok = true; + } + + if ( !ok ) + { + SUIT_MessageBox::warning( parent, + tr( "WRN_WARNING" ), + tr( "GEOM_WRN_NO_APPROPRIATE_SELECTION" ) ); + } + return ok; +} + +//===================================================================================== +// EXPORTED METHODS +//===================================================================================== +extern "C" +{ +#ifdef WIN32 + __declspec( dllexport ) +#endif + GEOMGUI* GetLibGUI( GeometryGUI* parent ) + { + return new STLPlugin_GUI( parent ); + } +} diff --git a/src/STLPlugin/STLPlugin_GUI.h b/src/STLPlugin/STLPlugin_GUI.h new file mode 100644 index 000000000..061afb986 --- /dev/null +++ b/src/STLPlugin/STLPlugin_GUI.h @@ -0,0 +1,40 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef STLPlugin_GUI_H +#define STLPlugin_GUI_H + +#include "GEOMPluginGUI.h" + +class STLPlugin_GUI: public GEOMPluginGUI +{ + Q_OBJECT +public: + STLPlugin_GUI( GeometryGUI* parent ); + ~STLPlugin_GUI(); + + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); + +private: + bool importSTL( SUIT_Desktop* ); + bool exportSTL( SUIT_Desktop* ); +}; + +#endif // STLPlugin_GUI_H diff --git a/src/STLPlugin/STLPlugin_IECallBack.cxx b/src/STLPlugin/STLPlugin_IECallBack.cxx new file mode 100755 index 000000000..14d365cc1 --- /dev/null +++ b/src/STLPlugin/STLPlugin_IECallBack.cxx @@ -0,0 +1,75 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_IECallBack.hxx" +#include "STLPlugin_IOperations.hxx" +#include "STLPlugin_OperationsCreator.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +STLPlugin_IECallBack::STLPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +STLPlugin_IECallBack::~STLPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool +STLPlugin_IECallBack::Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + STLPlugin_IOperations* aPluginOperations = STLPlugin_OperationsCreator::get( GetEngine(), theDocId ); + bool anIsASCII = ( theFormatName == "STL_Bin") ? false : true; + const double aDeflection = 0.001; + const bool anIsRelative = true; + aPluginOperations->ExportSTL( theOriginal, theFileName, anIsASCII, aDeflection, anIsRelative ); + return true; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +STLPlugin_IECallBack::Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ) +{ + STLPlugin_IOperations* aPluginOperations = STLPlugin_OperationsCreator::get( GetEngine(), theDocId ); + return aPluginOperations->ImportSTL( theFileName ); +} + diff --git a/src/STLPlugin/STLPlugin_IECallBack.hxx b/src/STLPlugin/STLPlugin_IECallBack.hxx new file mode 100644 index 000000000..a833ced7f --- /dev/null +++ b/src/STLPlugin/STLPlugin_IECallBack.hxx @@ -0,0 +1,50 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STLPlugin_IECallBack_HXX_ +#define _STLPlugin_IECallBack_HXX_ + +// internal includes +#include "STLPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Object.hxx" +#include "GEOMImpl_IECallBack.hxx" + +// OCC includes +#include + +class STLPLUGINENGINE_EXPORT STLPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + STLPlugin_IECallBack(); + ~STLPlugin_IECallBack(); + + virtual bool Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); + + virtual + Handle(TColStd_HSequenceOfTransient) Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ); +}; + +#endif diff --git a/src/STLPlugin/STLPlugin_IExport.hxx b/src/STLPlugin/STLPlugin_IExport.hxx new file mode 100644 index 000000000..8c2573d82 --- /dev/null +++ b/src/STLPlugin/STLPlugin_IExport.hxx @@ -0,0 +1,66 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STLPlugin_IExport_HXX_ +#define _STLPlugin_IExport_HXX_ + +#include "GEOM_Function.hxx" + +#define EXPORTSTL_ARG_ORIGINAL 1 +#define EXPORTSTL_ARG_FILENAME 2 +#define EXPORTSTL_ARG_DEFLECTION 3 +#define EXPORTSTL_ARG_ISASCII 4 +#define EXPORTSTL_ARG_ISRELATIVE 5 + +class STLPlugin_IExport +{ +public: + STLPlugin_IExport( Handle(GEOM_Function) theFunction ) + : _func(theFunction) {} + + void SetOriginal( Handle( GEOM_Function ) theOriginal) + { _func->SetReference( EXPORTSTL_ARG_ORIGINAL, theOriginal ); } + Handle( GEOM_Function ) GetOriginal() + { return _func->GetReference( EXPORTSTL_ARG_ORIGINAL ); } + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( EXPORTSTL_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( EXPORTSTL_ARG_FILENAME ); } + + void SetIsASCII( bool theIsASCII ) + { _func->SetInteger( EXPORTSTL_ARG_ISASCII, int( theIsASCII ) ); } + bool GetIsASCII() + { return bool( _func->GetInteger( EXPORTSTL_ARG_ISASCII ) ); } + + void SetIsRelative( bool theIsRelative ) + { _func->SetInteger( EXPORTSTL_ARG_ISRELATIVE, int( theIsRelative ) ); } + bool GetIsRelative() + { return bool( _func->GetInteger( EXPORTSTL_ARG_ISRELATIVE ) ); } + + void SetDeflection( double theDeflection ) + { _func->SetReal( EXPORTSTL_ARG_DEFLECTION, theDeflection ); } + double GetDeflection() + { return _func->GetReal( EXPORTSTL_ARG_DEFLECTION ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _STLPlugin_IExport_HXX_ diff --git a/src/STLPlugin/STLPlugin_IImport.hxx b/src/STLPlugin/STLPlugin_IImport.hxx new file mode 100644 index 000000000..247b1be10 --- /dev/null +++ b/src/STLPlugin/STLPlugin_IImport.hxx @@ -0,0 +1,42 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STLPlugin_IImport_HXX_ +#define _STLPlugin_IImport_HXX_ + +#include "GEOM_Function.hxx" + +#define IMPORTSTL_ARG_FILENAME 1 + +class STLPlugin_IImport +{ +public: + STLPlugin_IImport( Handle(GEOM_Function) theFunction) + : _func(theFunction) {} + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( IMPORTSTL_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( IMPORTSTL_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _STLPlugin_IImport_HXX_ diff --git a/src/STLPlugin/STLPlugin_IOperations.cxx b/src/STLPlugin/STLPlugin_IOperations.cxx new file mode 100644 index 000000000..f089fdc29 --- /dev/null +++ b/src/STLPlugin/STLPlugin_IOperations.cxx @@ -0,0 +1,181 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_IOperations.hxx" +#include "STLPlugin_ExportDriver.hxx" +#include "STLPlugin_ImportDriver.hxx" +#include "STLPlugin_IExport.hxx" +#include "STLPlugin_IImport.hxx" + +// KERNEL includes +#include + +// GEOM includes +#include "GEOM_PythonDump.hxx" +#include "GEOMImpl_Types.hxx" + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +STLPlugin_IOperations::STLPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "STLPlugin_IOperations::STLPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +STLPlugin_IOperations::~STLPlugin_IOperations() +{ + MESSAGE( "STLPlugin_IOperations::~STLPlugin_IOperations" ); +} + +//============================================================================= +/*! + * ExportSTL + * Export a shape to STL format + * \param theOriginal The shape to export + * \param theFileName The name of the file to exported + * \param theIsASCII The format of the exported file (ASCII or Binary) + * \param theDeflection The deflection of the shape to exported + * \param theIsRelative The mode for writing the file. If True (default value), + * the deflection is calculated relatively to the size of the shape; + * if False, the user defined deflection is used. + */ +//============================================================================= +void STLPlugin_IOperations::ExportSTL( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const bool theIsASCII, + const double theDeflection, + const bool theIsRelative ) +{ + SetErrorCode(KO); + if( theOriginal.IsNull() ) return; + + Handle(GEOM_Function) aRefFunction = theOriginal->GetLastFunction(); + if( aRefFunction.IsNull() ) return; //There is no function which creates an object to be exported + + //Add a new result object + Handle(GEOM_Object) result = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT); + + //Add an Export function + Handle(GEOM_Function) aFunction = result->AddFunction( STLPlugin_ExportDriver::GetID(), EXPORT_SHAPE ); + if( aFunction.IsNull() ) return; + + //Check if the function is set correctly + if( aFunction->GetDriverGUID() != STLPlugin_ExportDriver::GetID() ) return; + + //Set parameters + STLPlugin_IExport aCI( aFunction ); + aCI.SetOriginal( aRefFunction ); + aCI.SetFileName( theFileName ); + aCI.SetIsASCII( theIsASCII ); + aCI.SetIsRelative( theIsRelative ); + aCI.SetDeflection( theDeflection ); + + //Perform the Export + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Not enough space on disk, or you haven't permissions to write this directory" ); + return; + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << "geompy.ExportSTL(" << theOriginal << ", \"" + << theFileName.ToCString() << "\", " << theIsASCII << ", " << theDeflection << ", " + << theIsRelative << ")"; + + SetErrorCode(OK); +} + +//============================================================================= +/*! + * ImportSTL + * Import a shape from STL format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +STLPlugin_IOperations::ImportSTL( const TCollection_AsciiString& theFileName ) +{ + SetErrorCode(KO); + if( theFileName.IsEmpty() ) return NULL; + + //Add a new result object + Handle(GEOM_Object) anImported = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT ); + + //Add an Import function + Handle(GEOM_Function) aFunction = + anImported->AddFunction( STLPlugin_ImportDriver::GetID(), IMPORT_SHAPE); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != STLPlugin_ImportDriver::GetID()) return NULL; + + //Set parameters + STLPlugin_IImport aCI( aFunction ); + aCI.SetFileName( theFileName ); + + //Perform the Import + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Import driver failed" ); + return NULL; + } + aSeq->Append(anImported); + + // Greate material groups. + // MakeMaterialGroups( anImported, aSeq ); + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump pd (aFunction); + pd << aSeq << " = geompy.ImportSTL(\"" << theFileName.ToCString() << "\" )"; + SetErrorCode(OK); + + return aSeq; +} diff --git a/src/STLPlugin/STLPlugin_IOperations.hxx b/src/STLPlugin/STLPlugin_IOperations.hxx new file mode 100644 index 000000000..c6c39daaa --- /dev/null +++ b/src/STLPlugin/STLPlugin_IOperations.hxx @@ -0,0 +1,46 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : STLPlugin_IOperations.hxx + +#ifndef _STLPlugin_IOperations_HXX_ +#define _STLPlugin_IOperations_HXX_ + +// internal includes +#include "STLPlugin_Engine.hxx" + +// GEOM includes +#include "GEOMImpl_IBaseIEOperations.hxx" + +class STLPLUGINENGINE_EXPORT STLPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + STLPlugin_IOperations( GEOM_Engine*, int ); + ~STLPlugin_IOperations(); + + void ExportSTL( const Handle(GEOM_Object), + const TCollection_AsciiString&, + const bool, + const double, + const bool ); + + Handle(TColStd_HSequenceOfTransient) + ImportSTL( const TCollection_AsciiString& ); +}; + +#endif diff --git a/src/STLPlugin/STLPlugin_IOperations_i.cc b/src/STLPlugin/STLPlugin_IOperations_i.cc new file mode 100644 index 000000000..ebb81ef06 --- /dev/null +++ b/src/STLPlugin/STLPlugin_IOperations_i.cc @@ -0,0 +1,112 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_IOperations_i.hh" +#include "STLPlugin_IOperations.hxx" + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +STLPlugin_IOperations_i::STLPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + STLPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "STLPlugin_IOperations_i::STLPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +STLPlugin_IOperations_i::~STLPlugin_IOperations_i() +{ + MESSAGE( "STLPlugin_IOperations_i::~STLPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * ExportSTL + * Export a shape to STL format + * \param theOriginal The shape to export + * \param theIsASCII The format of the exported file (ASCII or Binary) + * \param theFileName The name of the exported file + * \param theDeflection The deflection of the exported shape + */ +//============================================================================= +void STLPlugin_IOperations_i::ExportSTL( GEOM::GEOM_Object_ptr theOriginal, + const char* theFileName, + const bool theIsASCII, + const double theDeflection, + const bool theIsRelative ) +{ + // duplicate the original shape + GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate( theOriginal ); + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference shape + Handle(GEOM_Object) anOriginal = GetObjectImpl( theOriginal ); + if (anOriginal.IsNull()) return; + + GetOperations()->ExportSTL( anOriginal, theFileName, theIsASCII, theDeflection, theIsRelative ); +} + +//============================================================================= +/*! + * ImportSTL + * Import a shape from STL format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +GEOM::ListOfGO* STLPlugin_IOperations_i::ImportSTL( const char* theFileName ) +{ + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Import the shape from the file + Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->ImportSTL( theFileName ); + + if( !GetOperations()->IsDone() || aHSeq.IsNull() ) + return aSeq._retn(); + + // Copy created objects. + Standard_Integer aLength = aHSeq->Length(); + aSeq->length( aLength ); + for( Standard_Integer i = 1; i <= aLength; i++ ) + aSeq[i-1] = GetObject( Handle(GEOM_Object)::DownCast( aHSeq->Value(i) ) ); + + return aSeq._retn(); +} + +STLPlugin_IOperations* STLPlugin_IOperations_i::GetOperations() +{ + return (STLPlugin_IOperations*)GetImpl(); +} diff --git a/src/STLPlugin/STLPlugin_IOperations_i.hh b/src/STLPlugin/STLPlugin_IOperations_i.hh new file mode 100644 index 000000000..f0733e1e0 --- /dev/null +++ b/src/STLPlugin/STLPlugin_IOperations_i.hh @@ -0,0 +1,52 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STLPlugin_IOperations_i_HeaderFile +#define _STLPlugin_IOperations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( STLPlugin ) + +// internal includes +#include "STLPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_IOperations_i.hh" + +class STLPlugin_IOperations; + +class STLPLUGINENGINE_EXPORT STLPlugin_IOperations_i : + public virtual POA_GEOM::ISTLOperations, + public virtual GEOM_IOperations_i +{ +public: + STLPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + STLPlugin_IOperations* theImpl ); + ~STLPlugin_IOperations_i(); + + void ExportSTL( GEOM::GEOM_Object_ptr, const char*, const bool, const double, const bool ); + GEOM::ListOfGO* ImportSTL( const char* ); + + STLPlugin_IOperations* GetOperations(); +}; + +#endif diff --git a/src/STLPlugin/STLPlugin_ImportDriver.cxx b/src/STLPlugin/STLPlugin_ImportDriver.cxx new file mode 100644 index 000000000..40a96a889 --- /dev/null +++ b/src/STLPlugin/STLPlugin_ImportDriver.cxx @@ -0,0 +1,155 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_ImportDriver.hxx" +#include "STLPlugin_IImport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" +#include "GEOMImpl_Types.hxx" + +// OOCT includes +#include +#include +#include +#include +#include +#include +#include +#include + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& STLPlugin_ImportDriver::GetID() +{ + static Standard_GUID aGUID("69e33dc7-9630-4a73-ac19-cc4da1f659b8"); + return aGUID; +} + +//======================================================================= +//function : STLPlugin_ImportDriver +//purpose : +//======================================================================= +STLPlugin_ImportDriver::STLPlugin_ImportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer STLPlugin_ImportDriver::Execute( TFunction_Logbook& log ) const +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + STLPlugin_IImport aData( aFunction ); + + TCollection_AsciiString aFileName = aData.GetFileName().ToCString(); + + MESSAGE( "Import STL to file " << aFileName ); + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + StlAPI_Reader aReader; + TopoDS_Shape aShape; + + aReader.Read( aShape, aData.GetFileName().ToCString() ); + + if( aShape.IsNull() ) return 0; + + // Fix the orientation of closed shell or solid. + if( BRep_Tool::IsClosed( aShape ) ) { + TopAbs_ShapeEnum aType = aShape.ShapeType(); + if( aType == TopAbs_SHELL || aType == TopAbs_SOLID ) { + TopoDS_Solid aSolid; + if( aType == TopAbs_SHELL ) { + // Create a solid. + BRep_Builder aBuilder; + aBuilder.MakeSolid( aSolid ); + aBuilder.Add(aSolid, aShape ); + } + else + aSolid = TopoDS::Solid( aShape ); + + // Classify infinite point against solid. + BRepClass3d_SolidClassifier aClassifier( aSolid ); + aClassifier.PerformInfinitePoint(Precision::Confusion()); + + if( aClassifier.State() == TopAbs_IN ) { + // The shape is inverted. Reverse it. + aShape.Reverse(); + } + } + } + + aFunction->SetValue( aShape ); + + log.SetTouched( Label() ); + + return 1; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean STLPlugin_ImportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ + +bool STLPlugin_ImportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction( Label() ); + + STLPlugin_IImport aCI( function ); + Standard_Integer aType = function->GetType(); + + theOperationName = "ImportSTL"; + + switch ( aType ) { + case IMPORT_SHAPE: + AddParam( theParams, "File name", aCI.GetFileName() ); + break; + default: + return false; + } + return true; +} + +IMPLEMENT_STANDARD_HANDLE( STLPlugin_ImportDriver, GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( STLPlugin_ImportDriver, GEOM_BaseDriver ); diff --git a/src/STLPlugin/STLPlugin_ImportDriver.hxx b/src/STLPlugin/STLPlugin_ImportDriver.hxx new file mode 100644 index 000000000..8373e59d7 --- /dev/null +++ b/src/STLPlugin/STLPlugin_ImportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _STLPlugin_ImportDriver_HXX +#define _STLPlugin_ImportDriver_HXX + +// internal includes +#include "STLPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( STLPlugin_ImportDriver, GEOM_BaseDriver ); + +class STLPLUGINENGINE_EXPORT STLPlugin_ImportDriver : public GEOM_BaseDriver +{ +public: + STLPlugin_ImportDriver(); + ~STLPlugin_ImportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( STLPlugin_ImportDriver ) +}; + +#endif // _STLPlugin_ImportDriver_HXX diff --git a/src/STLPlugin/STLPlugin_OperationsCreator.cxx b/src/STLPlugin/STLPlugin_OperationsCreator.cxx new file mode 100644 index 000000000..f2a47a07b --- /dev/null +++ b/src/STLPlugin/STLPlugin_OperationsCreator.cxx @@ -0,0 +1,71 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "STLPlugin_OperationsCreator.hxx" +#include "STLPlugin_IOperations_i.hh" +#include "STLPlugin_IOperations.hxx" +#include "STLPlugin_ExportDriver.hxx" +#include "STLPlugin_ImportDriver.hxx" +#include "STLPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// OCCT includes +#include + +std::map STLPlugin_OperationsCreator::_mapOfOperations; + +STLPlugin_OperationsCreator::STLPlugin_OperationsCreator() +{ + // Register drivers + TFunction_DriverTable::Get()->AddDriver( STLPlugin_ExportDriver::GetID(), + new STLPlugin_ExportDriver() ); + TFunction_DriverTable::Get()->AddDriver( STLPlugin_ImportDriver::GetID(), + new STLPlugin_ImportDriver() ); + // Register callback + STLPlugin_IECallBack* callback = new STLPlugin_IECallBack(); + GEOMImpl_IECallBack::Register( "STL", callback ); + GEOMImpl_IECallBack::Register( "STL_Bin", callback ); + GEOMImpl_IECallBack::Register( "STL_ASCII", callback ); +} + +STLPlugin_OperationsCreator::~STLPlugin_OperationsCreator() +{ +} + +GEOM_IOperations_i* STLPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "STLPlugin_OperationsCreator::Create" ); + return new STLPlugin_IOperations_i( thePOA, theEngine, get( theGenImpl, theStudyId ) ); +} + +STLPlugin_IOperations* STLPlugin_OperationsCreator::get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ) +{ + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) + _mapOfOperations[theStudyId] = new STLPlugin_IOperations( theGenImpl, theStudyId ); + return _mapOfOperations[theStudyId]; +} diff --git a/src/STLPlugin/STLPlugin_OperationsCreator.hxx b/src/STLPlugin/STLPlugin_OperationsCreator.hxx new file mode 100755 index 000000000..62314324e --- /dev/null +++ b/src/STLPlugin/STLPlugin_OperationsCreator.hxx @@ -0,0 +1,57 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOM_STLPlugin_OperationsCreator_HXX_ +#define _GEOM_STLPlugin_OperationsCreator_HXX_ + +// internal includes +#include "STLPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +class STLPlugin_IOperations; + +//===================================================================== +// Operations creator +//===================================================================== +class STLPLUGINENGINE_EXPORT STLPlugin_OperationsCreator : public GEOM_GenericOperationsCreator +{ +public: + STLPlugin_OperationsCreator(); + ~STLPlugin_OperationsCreator(); + + GEOM_IOperations_i* Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ); +private: + static STLPlugin_IOperations* get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ); + +private: + static std::map _mapOfOperations; + + friend class STLPlugin_IECallBack; +}; + +#endif diff --git a/src/STLPlugin/STLPlugin_msg_en.ts b/src/STLPlugin/STLPlugin_msg_en.ts new file mode 100644 index 000000000..c8f10a272 --- /dev/null +++ b/src/STLPlugin/STLPlugin_msg_en.ts @@ -0,0 +1,61 @@ + + + + + @default + + MEN_EXPORTSTL + STL + + + TOP_EXPORTSTL + Export STL + + + STB_EXPORTSTL + Export STL + + + MEN_IMPORTSTL + STL + + + TOP_IMPORTSTL + Import STL + + + STB_IMPORTSTL + Import STL + + + + STLPlugin_GUI + + STL_FILES + STL files( *.stl ) + + + EXPORT_TITLE + Export STL + + + IMPORT_TITLE + Import STL + + + + STLPlugin_ExportDlg + + ASCII + Save as ASCII + + + RELATIVE + Relative + + + DEFLECTION + Deflection + + + diff --git a/src/STLPlugin/STLPlugin_msg_fr.ts b/src/STLPlugin/STLPlugin_msg_fr.ts new file mode 100644 index 000000000..e4347f829 --- /dev/null +++ b/src/STLPlugin/STLPlugin_msg_fr.ts @@ -0,0 +1,61 @@ + + + + + @default + + MEN_EXPORTSTL + STL + + + TOP_EXPORTSTL + Exporter STL + + + STB_EXPORTSTL + Exporter STL + + + MEN_IMPORTSTL + STL + + + TOP_IMPORTSTL + Importer STL + + + STB_IMPORTSTL + Importer STL + + + + STLPlugin_GUI + + STL_FILES + STL fichiers( *.stl ) + + + EXPORT_TITLE + Exporter STL + + + IMPORT_TITLE + Importer STL + + + + STLPlugin_ExportDlg + + ASCII + Save as ASCII + + + RELATIVE + Relative + + + DEFLECTION + Déflexion + + + diff --git a/src/STLPlugin/STLPlugin_msg_ja.ts b/src/STLPlugin/STLPlugin_msg_ja.ts new file mode 100644 index 000000000..1c10df04f --- /dev/null +++ b/src/STLPlugin/STLPlugin_msg_ja.ts @@ -0,0 +1,61 @@ + + + + + @default + + MEN_EXPORTSTL + STL + + + TOP_EXPORTSTL + Export STL + + + STB_EXPORTSTL + Export STL + + + MEN_IMPORTSTL + STL + + + TOP_IMPORTSTL + Import STL + + + STB_IMPORTSTL + Import STL + + + + STLPlugin_GUI + + STL_FILES + STL files( *.stl ) + + + EXPORT_TITLE + Export STL + + + IMPORT_TITLE + Import STL + + + + STLPlugin_ExportDlg + + ASCII + Save as ASCII + + + RELATIVE + Relative + + + DEFLECTION + Deflection + + + diff --git a/src/VTKExport/CMakeLists.txt b/src/VTKExport/CMakeLists.txt deleted file mode 100755 index 04081e0a3..000000000 --- a/src/VTKExport/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- options --- - -# additional include directories -INCLUDE_DIRECTORIES( - ${CAS_INCLUDE_DIRS} - ${PTHREAD_INCLUDE_DIR} - ${KERNEL_INCLUDE_DIRS} - ${VTK_INCLUDE_DIRS} - ${PROJECT_SOURCE_DIR}/src/OCC2VTK - ) - -# additional preprocessor / compiler flags -ADD_DEFINITIONS( - ${CAS_DEFINITIONS} - ) - -# libraries to link to -SET(_link_LIBRARIES - vtkIOLegacy - OCC2VTK - ${KERNEL_SALOMELocalTrace} - ) - -# --- sources --- - -SET(VTKExport_SOURCES - VTKExport.cxx - ) - -# --- rules --- - -ADD_LIBRARY(VTKExport ${VTKExport_SOURCES}) -TARGET_LINK_LIBRARIES(VTKExport ${_link_LIBRARIES}) -INSTALL(TARGETS VTKExport EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) - - diff --git a/src/VTKExport/VTKExport.cxx b/src/VTKExport/VTKExport.cxx deleted file mode 100644 index ab853c4af..000000000 --- a/src/VTKExport/VTKExport.cxx +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: VTKExport.cxx -// Author: Oleg UVAROV -// -#include "utilities.h" - -#include - -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef WIN32 -# if defined VTKEXPORT_EXPORTS || defined VTKExport_EXPORTS -# define VTKEXPORT_EXPORT __declspec( dllexport ) -# else -# define VTKEXPORT_EXPORT __declspec( dllimport ) -# endif -#else -# define VTKEXPORT_EXPORT -#endif - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ - VTKEXPORT_EXPORT - int Export(const TopoDS_Shape& theShape, - const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theFormatName) - { - MESSAGE("Export VTK into file " << theFileName.ToCString()); - - try - { - GEOM_VertexSource* myVertexSource = GEOM_VertexSource::New(); - GEOM_EdgeSource* myIsolatedEdgeSource = GEOM_EdgeSource::New(); - GEOM_EdgeSource* myOneFaceEdgeSource = GEOM_EdgeSource::New(); - GEOM_EdgeSource* mySharedEdgeSource = GEOM_EdgeSource::New(); - GEOM_WireframeFace* myWireframeFaceSource = GEOM_WireframeFace::New(); - GEOM_ShadingFace* myShadingFaceSource = GEOM_ShadingFace::New(); - - vtkAppendPolyData* myAppendFilter = vtkAppendPolyData::New(); - myAppendFilter->AddInputConnection( myVertexSource->GetOutputPort() ); - myAppendFilter->AddInputConnection( myIsolatedEdgeSource->GetOutputPort() ); - myAppendFilter->AddInputConnection( myOneFaceEdgeSource->GetOutputPort() ); - myAppendFilter->AddInputConnection( mySharedEdgeSource->GetOutputPort() ); - //myAppendFilter->AddInputConnection( myWireframeFaceSource->GetOutputPort() ); // iso-lines are unnecessary - myAppendFilter->AddInputConnection( myShadingFaceSource->GetOutputPort() ); - - float aDeflection = 0.001; - bool anIsVector = false; - - // Is shape triangulated? - bool wasMeshed = true; - TopExp_Explorer ex; - TopLoc_Location aLoc; - for (ex.Init(theShape, TopAbs_FACE); ex.More(); ex.Next()) { - const TopoDS_Face& aFace = TopoDS::Face(ex.Current()); - Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(aFace,aLoc); - if(aPoly.IsNull()) { - wasMeshed = false; - break; - } - } - - GEOM::MeshShape( theShape, aDeflection ); - - TopExp_Explorer aVertexExp( theShape, TopAbs_VERTEX ); - for( ; aVertexExp.More(); aVertexExp.Next() ) - { - const TopoDS_Vertex& aVertex = TopoDS::Vertex( aVertexExp.Current() ); - myVertexSource->AddVertex( aVertex ); - } - - TopTools_IndexedDataMapOfShapeListOfShape anEdgeMap; - TopExp::MapShapesAndAncestors( theShape, TopAbs_EDGE, TopAbs_FACE, anEdgeMap ); - - GEOM::SetShape( theShape, - anEdgeMap, - anIsVector, - 0, // all vertices were added above - myIsolatedEdgeSource, - myOneFaceEdgeSource, - mySharedEdgeSource, - myWireframeFaceSource, - myShadingFaceSource ); - - myAppendFilter->Update(); - - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - vtkPolyDataWriter* aWriter = vtkPolyDataWriter::New(); - aWriter->SetInputConnection( myAppendFilter->GetOutputPort() ); - aWriter->SetFileName( theFileName.ToCString() ); - aWriter->Write(); - aWriter->Delete(); - - myVertexSource->Delete(); - myIsolatedEdgeSource->Delete(); - myOneFaceEdgeSource->Delete(); - mySharedEdgeSource->Delete(); - myWireframeFaceSource->Delete(); - myShadingFaceSource->Delete(); - - myAppendFilter->Delete(); - - if(!wasMeshed) - BRepTools::Clean(theShape); - - return 1; - } - catch(Standard_Failure) - { - //THROW_SALOME_CORBA_EXCEPTION("Exception catched in VTKExport", SALOME::BAD_PARAM); - } - return 0; - } -} diff --git a/src/VTKPlugin/CMakeLists.txt b/src/VTKPlugin/CMakeLists.txt new file mode 100644 index 000000000..afab5da2f --- /dev/null +++ b/src/VTKPlugin/CMakeLists.txt @@ -0,0 +1,149 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +IF(SALOME_BUILD_GUI) + INCLUDE(UseQt4Ext) + INCLUDE(${QT_USE_FILE}) +ENDIF() + +# --- options --- + +# additional include directories +INCLUDE_DIRECTORIES( + ${CAS_INCLUDE_DIRS} + ${KERNEL_INCLUDE_DIRS} + ${PROJECT_BINARY_DIR}/idl + ${PROJECT_SOURCE_DIR}/src/GEOMAlgo + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/GEOM_I + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_SOURCE_DIR}/src/OCC2VTK + ${PROJECT_SOURCE_DIR}/src/GEOMUtils + ) + +IF(SALOME_BUILD_GUI) + INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIRS} + ${GUI_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/src/OBJECT + ${PROJECT_SOURCE_DIR}/src/GEOMGUI + ${PROJECT_SOURCE_DIR}/src/GEOMBase + ) +ENDIF() + +# additional preprocessor / compiler flags +ADD_DEFINITIONS( + ${CAS_DEFINITIONS} + ) + +IF(SALOME_BUILD_GUI) +ADD_DEFINITIONS( + ${QT_DEFINITIONS} + ) +ENDIF() + +# libraries to link to +SET(_link_engine_LIBRARIES + ${CAS_TKVTK} + ${KERNEL_SALOMELocalTrace} + ${KERNEL_OpUtil} + SalomeIDLGEOM + SalomeIDLVTKPlugin + GEOMEngine + GEOMClient + vtkIOLegacy + OCC2VTK + ) + +IF(SALOME_BUILD_GUI) + SET(_link_gui_LIBRARIES + SalomeIDLVTKPlugin + GEOMObject + GEOM + GEOMBase + ) +ENDIF() + + +# --- headers --- + +SET(VTKPluginEngine_HEADERS + VTKPlugin_IOperations_i.hh + VTKPlugin_Engine.hxx + VTKPlugin_OperationsCreator.hxx + VTKPlugin_IOperations.hxx + VTKPlugin_IExport.hxx + VTKPlugin_ExportDriver.hxx + VTKPlugin_IECallBack.hxx + ) + +IF(SALOME_BUILD_GUI) + # header files / to be processed by moc + SET(_moc_HEADERS + VTKPlugin_GUI.h + VTKPlugin_ExportDlg.h + ) +ENDIF() + +# --- sources --- + +IF(SALOME_BUILD_GUI) + # sources / moc wrappings + QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) + + SET(VTKPluginGUI_SOURCES + VTKPlugin_GUI.cxx + VTKPlugin_ExportDlg.cxx + ${_moc_SOURCES} + ) +ENDIF() + +SET(VTKPluginEngine_SOURCES + VTKPlugin_Engine.cxx + VTKPlugin_OperationsCreator.cxx + VTKPlugin_IOperations_i.cc + VTKPlugin_IOperations.cxx + VTKPlugin_ExportDriver.cxx + VTKPlugin_IECallBack.cxx + ) + +# resource files / to be processed by lrelease +SET(VTKPlugin_RESOURCES + VTKPlugin_msg_en.ts + VTKPlugin_msg_fr.ts + VTKPlugin_msg_ja.ts + ) + +# --- rules --- + +ADD_LIBRARY(VTKPluginEngine ${VTKPluginEngine_SOURCES}) +TARGET_LINK_LIBRARIES(VTKPluginEngine ${_link_engine_LIBRARIES}) +INSTALL(TARGETS VTKPluginEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +IF(SALOME_BUILD_GUI) + ADD_LIBRARY(VTKPluginGUI ${VTKPluginGUI_SOURCES}) + TARGET_LINK_LIBRARIES(VTKPluginGUI ${_link_gui_LIBRARIES}) + INSTALL(TARGETS VTKPluginGUI EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + + QT4_INSTALL_TS_RESOURCES("${VTKPlugin_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}") +ENDIF() + + +INSTALL(FILES ${VTKPluginEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/VTKPlugin/VTKPlugin_Engine.cxx b/src/VTKPlugin/VTKPlugin_Engine.cxx new file mode 100644 index 000000000..5c0ed2e53 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_Engine.cxx @@ -0,0 +1,32 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_Engine.hxx" +#include "VTKPlugin_OperationsCreator.hxx" + +extern "C" +{ + VTKPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + VTKPlugin_OperationsCreator* aCreator = new VTKPlugin_OperationsCreator(); + return aCreator; + } +} diff --git a/src/VTKPlugin/VTKPlugin_Engine.hxx b/src/VTKPlugin/VTKPlugin_Engine.hxx new file mode 100755 index 000000000..cd373e1d7 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_Engine.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _VTKPLUGIN_ENGINE_HXX_ +#define _VTKPLUGIN_ENGINE_HXX_ + +#ifdef WIN32 + #if defined VTKPLUGINENGINE_EXPORTS || defined VTKPluginEngine_EXPORTS + #define VTKPLUGINENGINE_EXPORT __declspec( dllexport ) + #else + #define VTKPLUGINENGINE_EXPORT __declspec( dllimport ) + #endif +#else + #define VTKPLUGINENGINE_EXPORT +#endif + +#endif diff --git a/src/VTKPlugin/VTKPlugin_ExportDlg.cxx b/src/VTKPlugin/VTKPlugin_ExportDlg.cxx new file mode 100644 index 000000000..901221594 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_ExportDlg.cxx @@ -0,0 +1,118 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_ExportDlg.h" + +#include +#include CORBA_SERVER_HEADER(VTKPlugin) + +// GUI includes +#include +#include +#include + +#include +#include +#include + +// GEOM includes +#include "GEOM_Constants.h" + +// QT includes +#include +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +VTKPlugin_ExportDlg::VTKPlugin_ExportDlg( const Handle(SALOME_InteractiveObject)& io, QWidget* parent ) +: SUIT_FileDlg( parent, false, true, true ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + QLabel* deflectionLabel = new QLabel( tr( "DEFLECTION" ), this ); + + myDeflectionSB = new SalomeApp_DoubleSpinBox( this ); + int aPrecision = resMgr->integerValue( "Geometry", "parametric_precision", 6 ); + myDeflectionSB->setAcceptNames( false ); + myDeflectionSB->setPrecision( aPrecision ); + myDeflectionSB->setDecimals( aPrecision ); + myDeflectionSB->setRange( GEOM::minDeflection(), 1.0 ); + myDeflectionSB->setSingleStep( 1.0e-04 ); + + layout()->addWidget( deflectionLabel ); + layout()->addWidget( myDeflectionSB ); + + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + SalomeApp_Study* study = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + int mgrId = app->activeViewManager()->getGlobalId(); + QVariant v = study->getObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::Deflection ), QVariant() ); + double deflection = v.isValid() ? v.toDouble() : SUIT_Session::session()->resourceMgr()->doubleValue( "Geometry", "deflection_coef", 0.001 ); + myDeflectionSB->setValue( deflection ); +} + +//================================================================================= +// Destructor +//================================================================================= +VTKPlugin_ExportDlg::~VTKPlugin_ExportDlg() +{ +} + +//================================================================================= +// getDeflection +//================================================================================= +double VTKPlugin_ExportDlg::getDeflection() const +{ + return myDeflectionSB->value(); +} + +//================================================================================= +// getFileName +//================================================================================= +QString VTKPlugin_ExportDlg::getFileName( const Handle(SALOME_InteractiveObject)& io, + const QString& filters, const QString& caption, + QWidget* parent, double& deflection ) +{ + QStringList fls = filters.split( ";;", QString::SkipEmptyParts ); + + QString tmpfilename = io->getName(); + tmpfilename = tmpfilename.simplified(); + tmpfilename = tmpfilename.replace( QRegExp( "\\*" ), "" ).replace( QRegExp( "\\?" ), "" ); + + VTKPlugin_ExportDlg fd( io, parent ); + fd.setFileMode( AnyFile ); + fd.setFilters( fls ); + fd.setWindowTitle( caption ); + if ( !tmpfilename.isEmpty() ) + fd.processPath( tmpfilename ); + + QString filename; + + if ( fd.exec() == QDialog::Accepted ) { + filename = fd.selectedFile(); + deflection = fd.getDeflection(); + } + + QApplication::processEvents(); + + return filename; +} + diff --git a/src/VTKPlugin/VTKPlugin_ExportDlg.h b/src/VTKPlugin/VTKPlugin_ExportDlg.h new file mode 100644 index 000000000..d8e4095d4 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_ExportDlg.h @@ -0,0 +1,50 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef VTKPlugin_ExportDlg_H +#define VTKPlugin_ExportDlg_H + +// GUI includes +#include +#include + +class SalomeApp_DoubleSpinBox; + +class VTKPlugin_ExportDlg: public SUIT_FileDlg +{ + Q_OBJECT + +public: + VTKPlugin_ExportDlg( const Handle(SALOME_InteractiveObject)&, QWidget* parent ); + ~VTKPlugin_ExportDlg(); + + double getDeflection() const; + + static QString getFileName( const Handle(SALOME_InteractiveObject)& io, + const QString& filters, + const QString& caption, + QWidget* parent, + double& deflection ); + +private: + SalomeApp_DoubleSpinBox* myDeflectionSB; + Handle(SALOME_InteractiveObject) myObject; +}; + +#endif // VTKPlugin_ExportDlg_H diff --git a/src/VTKPlugin/VTKPlugin_ExportDriver.cxx b/src/VTKPlugin/VTKPlugin_ExportDriver.cxx new file mode 100644 index 000000000..a77897278 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_ExportDriver.cxx @@ -0,0 +1,200 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_ExportDriver.hxx" +#include "VTKPlugin_IExport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_Function.hxx" +#include "OCC2VTK_Tools.h" +#include "GEOM_VertexSource.h" +#include "GEOM_EdgeSource.h" +#include "GEOM_WireframeFace.h" +#include "GEOM_ShadingFace.h" + +// OOCT includes +#include +#include +#include +#include +#include +#include +#include +#include + +// VTK includes +#include +#include + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& VTKPlugin_ExportDriver::GetID() +{ + static Standard_GUID aGUID("0966443c-6f3c-4ebe-ba46-c0833786d817"); + return aGUID; +} + +//======================================================================= +//function : VTKPlugin_ExportDriver +//purpose : +//======================================================================= +VTKPlugin_ExportDriver::VTKPlugin_ExportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer VTKPlugin_ExportDriver::Execute( TFunction_Logbook& log ) const +{ + if (Label().IsNull()) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + VTKPlugin_IExport aData (aFunction); + + // retrieve the being exported shape + TopoDS_Shape aShape; + Handle(GEOM_Function) aRefFunction = aData.GetOriginal(); + if( aRefFunction.IsNull() ) return 0; + aShape = aRefFunction->GetValue(); + if( aShape.IsNull() ) return 0; + // set the result of function to be used by next operations + aFunction->SetValue( aShape ); + + TCollection_AsciiString aFileName = aData.GetFileName(); + float aDeflection = float( aData.GetDeflection() ); + + MESSAGE( "Export VTK into file " << aFileName ); + try + { + GEOM_VertexSource* myVertexSource = GEOM_VertexSource::New(); + GEOM_EdgeSource* myIsolatedEdgeSource = GEOM_EdgeSource::New(); + GEOM_EdgeSource* myOneFaceEdgeSource = GEOM_EdgeSource::New(); + GEOM_EdgeSource* mySharedEdgeSource = GEOM_EdgeSource::New(); + GEOM_WireframeFace* myWireframeFaceSource = GEOM_WireframeFace::New(); + GEOM_ShadingFace* myShadingFaceSource = GEOM_ShadingFace::New(); + + vtkAppendPolyData* myAppendFilter = vtkAppendPolyData::New(); + myAppendFilter->AddInputConnection( myVertexSource->GetOutputPort() ); + myAppendFilter->AddInputConnection( myIsolatedEdgeSource->GetOutputPort() ); + myAppendFilter->AddInputConnection( myOneFaceEdgeSource->GetOutputPort() ); + myAppendFilter->AddInputConnection( mySharedEdgeSource->GetOutputPort() ); + //myAppendFilter->AddInputConnection( myWireframeFaceSource->GetOutputPort() ); // iso-lines are unnecessary + myAppendFilter->AddInputConnection( myShadingFaceSource->GetOutputPort() ); + + bool anIsVector = false; + + // Is shape triangulated? + bool wasMeshed = true; + TopExp_Explorer ex; + TopLoc_Location aLoc; + for (ex.Init(aShape, TopAbs_FACE); ex.More(); ex.Next()) { + const TopoDS_Face& aFace = TopoDS::Face(ex.Current()); + Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(aFace,aLoc); + if(aPoly.IsNull()) { + wasMeshed = false; + break; + } + } + + GEOM::MeshShape( aShape, aDeflection ); + + TopExp_Explorer aVertexExp( aShape, TopAbs_VERTEX ); + for( ; aVertexExp.More(); aVertexExp.Next() ) + { + const TopoDS_Vertex& aVertex = TopoDS::Vertex( aVertexExp.Current() ); + myVertexSource->AddVertex( aVertex ); + } + + TopTools_IndexedDataMapOfShapeListOfShape anEdgeMap; + TopExp::MapShapesAndAncestors( aShape, TopAbs_EDGE, TopAbs_FACE, anEdgeMap ); + + GEOM::SetShape( aShape, + anEdgeMap, + anIsVector, + 0, + myIsolatedEdgeSource, + myOneFaceEdgeSource, + mySharedEdgeSource, + myWireframeFaceSource, + myShadingFaceSource ); + + myAppendFilter->Update(); + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + vtkPolyDataWriter* aWriter = vtkPolyDataWriter::New(); + aWriter->SetInputConnection( myAppendFilter->GetOutputPort() ); + aWriter->SetFileName( aFileName.ToCString() ); + aWriter->Write(); + aWriter->Delete(); + + myVertexSource->Delete(); + myIsolatedEdgeSource->Delete(); + myOneFaceEdgeSource->Delete(); + mySharedEdgeSource->Delete(); + myWireframeFaceSource->Delete(); + myShadingFaceSource->Delete(); + + myAppendFilter->Delete(); + + if(!wasMeshed) + BRepTools::Clean(aShape); + + return 1; + } + catch( Standard_Failure ) + { + //THROW_SALOME_CORBA_EXCEPTION("Exception catched in ExportVTK", SALOME::BAD_PARAM); + } + return 0; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean VTKPlugin_ExportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ +bool VTKPlugin_ExportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + return false; +} + +IMPLEMENT_STANDARD_HANDLE( VTKPlugin_ExportDriver,GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( VTKPlugin_ExportDriver,GEOM_BaseDriver ); diff --git a/src/VTKPlugin/VTKPlugin_ExportDriver.hxx b/src/VTKPlugin/VTKPlugin_ExportDriver.hxx new file mode 100644 index 000000000..cc055b9d9 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_ExportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _VTKPlugin_ExportDriver_HXX +#define _VTKPlugin_ExportDriver_HXX + +// internal includes +#include "VTKPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_BaseDriver.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE( VTKPlugin_ExportDriver, GEOM_BaseDriver ); + +class VTKPLUGINENGINE_EXPORT VTKPlugin_ExportDriver : public GEOM_BaseDriver +{ +public: + VTKPlugin_ExportDriver(); + ~VTKPlugin_ExportDriver() {}; + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + virtual void Validate( TFunction_Logbook& ) const {} + + virtual bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( VTKPlugin_ExportDriver ) +}; + +#endif // _VTKPlugin_ExportDriver_HXX diff --git a/src/VTKPlugin/VTKPlugin_GUI.cxx b/src/VTKPlugin/VTKPlugin_GUI.cxx new file mode 100644 index 000000000..d5bec2d72 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_GUI.cxx @@ -0,0 +1,186 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_GUI.h" +#include "VTKPlugin_ExportDlg.h" + +// GUI includes +#include +#include +#include +#include +#include +#include +#include + +// GEOM includes +#include "GeometryGUI.h" +#include "GEOM_Operation.h" +#include "GEOMBase.h" +#include "GEOM_Displayer.h" + +#include +#include CORBA_SERVER_HEADER(VTKPlugin) + +//======================================================================= +// function : VTKPlugin_GUI() +// purpose : Constructor +//======================================================================= +VTKPlugin_GUI::VTKPlugin_GUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) +{ +} + +//======================================================================= +// function : ~VTKPlugin_GUI +// purpose : Destructor +//======================================================================= +VTKPlugin_GUI::~VTKPlugin_GUI() +{ +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool VTKPlugin_GUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) +{ + QString cmd; + switch ( theCommandID ) { + case 1: + cmd = "Export_VTK"; break; + default: + break; + } + return OnGUIEvent( cmd, parent ); +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool VTKPlugin_GUI::OnGUIEvent( const QString& theCommandID, SUIT_Desktop* parent ) +{ + bool result = false; + + if( theCommandID == "Export_VTK" ) { + result = exportVTK( parent ); + } + else { + getGeometryGUI()->getApp()->putInfo( tr("GEOM_PRP_COMMAND").arg( theCommandID ) ); + } + + return true; +} + +//======================================================================= +// function : exportVTK +// purpose : +//======================================================================= +bool VTKPlugin_GUI::exportVTK( SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return false; + SalomeApp_Study* study = dynamic_cast ( app->activeStudy() ); + if ( !study ) return false; + + SALOMEDS::Study_var dsStudy = GeometryGUI::ClientStudyToStudy( study->studyDS() ); + GEOM::GEOM_IOperations_var op = GeometryGUI::GetGeomGen()->GetPluginOperations( dsStudy->StudyId(), "VTKPluginEngine" ); + GEOM::IVTKOperations_var stlOp = GEOM::IVTKOperations::_narrow( op ); + if ( CORBA::is_nil( stlOp ) ) return false; + + LightApp_SelectionMgr* sm = app->selectionMgr(); + if ( !sm ) return false; + + SALOME_ListIO selectedObjects; + sm->selectedObjects( selectedObjects ); + bool ok = false; + + SALOME_ListIteratorOfListIO it( selectedObjects ); + for ( ; it.More(); it.Next() ) + { + Handle(SALOME_InteractiveObject) io = it.Value(); + GEOM::GEOM_Object_var obj = GEOMBase::ConvertIOinGEOMObject( io ); + + if ( CORBA::is_nil( obj ) ) continue; + + double deflection = 0.; + QString fileName = VTKPlugin_ExportDlg::getFileName( io, + tr( "VTK_FILES" ), + tr( "EXPORT_TITLE" ), + parent, + deflection ); + + if ( fileName.isEmpty() ) + return false; + + SUIT_OverrideCursor wc; + + GEOM_Operation transaction( app, stlOp.in() ); + + try + { + app->putInfo( tr( "GEOM_PRP_EXPORT" ).arg( fileName ) ); + transaction.start(); + + stlOp->ExportVTK( obj, fileName.toUtf8().constData(), deflection ); + + if ( stlOp->IsDone() ) + { + transaction.commit(); + } + else + { + transaction.abort(); + SUIT_MessageBox::critical( parent, + tr( "GEOM_ERROR" ), + tr( "GEOM_PRP_ABORT" ) + "\n" + tr( stlOp->GetErrorCode() ) ); + return false; + } + } + catch ( const SALOME::SALOME_Exception& e ) + { + transaction.abort(); + return false; + } + ok = true; + } + + if ( !ok ) + { + SUIT_MessageBox::warning( parent, + tr( "WRN_WARNING" ), + tr( "GEOM_WRN_NO_APPROPRIATE_SELECTION" ) ); + } + return ok; +} + +//===================================================================================== +// EXPORTED METHODS +//===================================================================================== +extern "C" +{ +#ifdef WIN32 + __declspec( dllexport ) +#endif + GEOMGUI* GetLibGUI( GeometryGUI* parent ) + { + return new VTKPlugin_GUI( parent ); + } +} diff --git a/src/VTKPlugin/VTKPlugin_GUI.h b/src/VTKPlugin/VTKPlugin_GUI.h new file mode 100644 index 000000000..a24f5dfdc --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_GUI.h @@ -0,0 +1,39 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef VTKPlugin_GUI_H +#define VTKPlugin_GUI_H + +#include "GEOMPluginGUI.h" + +class VTKPlugin_GUI: public GEOMPluginGUI +{ + Q_OBJECT +public: + VTKPlugin_GUI( GeometryGUI* parent ); + ~VTKPlugin_GUI(); + + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); + +private: + bool exportVTK( SUIT_Desktop* ); +}; + +#endif // VTKPlugin_GUI_H diff --git a/src/VTKPlugin/VTKPlugin_IECallBack.cxx b/src/VTKPlugin/VTKPlugin_IECallBack.cxx new file mode 100755 index 000000000..25f1658f4 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_IECallBack.cxx @@ -0,0 +1,57 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_IECallBack.hxx" +#include "VTKPlugin_IOperations.hxx" +#include "VTKPlugin_OperationsCreator.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +VTKPlugin_IECallBack::VTKPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +VTKPlugin_IECallBack::~VTKPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool VTKPlugin_IECallBack::Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + VTKPlugin_IOperations* aPluginOperations = VTKPlugin_OperationsCreator::get( GetEngine(), theDocId ); + const double aDeflection = 0.001; + aPluginOperations->ExportVTK( theOriginal, theFileName, aDeflection ); + return true; +} diff --git a/src/VTKPlugin/VTKPlugin_IECallBack.hxx b/src/VTKPlugin/VTKPlugin_IECallBack.hxx new file mode 100644 index 000000000..a0e91f4a4 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_IECallBack.hxx @@ -0,0 +1,45 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _VTKPlugin_IECallBack_HXX_ +#define _VTKPlugin_IECallBack_HXX_ + +// internal includes +#include "VTKPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Object.hxx" +#include "GEOMImpl_IECallBack.hxx" + +// OCC includes +#include + +class VTKPLUGINENGINE_EXPORT VTKPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + VTKPlugin_IECallBack(); + ~VTKPlugin_IECallBack(); + + bool Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); +}; + +#endif diff --git a/src/VTKPlugin/VTKPlugin_IExport.hxx b/src/VTKPlugin/VTKPlugin_IExport.hxx new file mode 100644 index 000000000..5fe83e646 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_IExport.hxx @@ -0,0 +1,54 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _VTKPlugin_IExport_HXX_ +#define _VTKPlugin_IExport_HXX_ + +#include "GEOM_Function.hxx" + +#define EXPORTVTK_ARG_ORIGINAL 1 +#define EXPORTVTK_ARG_FILENAME 2 +#define EXPORTVTK_ARG_DEFLECTION 3 + +class VTKPlugin_IExport +{ +public: + VTKPlugin_IExport( Handle(GEOM_Function) theFunction ) + : _func(theFunction) {} + + void SetOriginal( Handle( GEOM_Function ) theOriginal) + { _func->SetReference( EXPORTVTK_ARG_ORIGINAL, theOriginal ); } + Handle( GEOM_Function ) GetOriginal() + { return _func->GetReference( EXPORTVTK_ARG_ORIGINAL ); } + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( EXPORTVTK_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( EXPORTVTK_ARG_FILENAME ); } + + void SetDeflection( double theDeflection ) + { _func->SetReal( EXPORTVTK_ARG_DEFLECTION, theDeflection ); } + double GetDeflection() + { return _func->GetReal( EXPORTVTK_ARG_DEFLECTION ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _VTKPlugin_IExport_HXX_ diff --git a/src/VTKPlugin/VTKPlugin_IOperations.cxx b/src/VTKPlugin/VTKPlugin_IOperations.cxx new file mode 100644 index 000000000..6e18dd154 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_IOperations.cxx @@ -0,0 +1,111 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_IOperations.hxx" +#include "VTKPlugin_ExportDriver.hxx" +#include "VTKPlugin_IExport.hxx" + +// KERNEL includes +#include + +// GEOM includes +#include "GEOM_PythonDump.hxx" +#include "GEOMImpl_Types.hxx" + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +VTKPlugin_IOperations::VTKPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "VTKPlugin_IOperations::VTKPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +VTKPlugin_IOperations::~VTKPlugin_IOperations() +{ + MESSAGE( "VTKPlugin_IOperations::~VTKPlugin_IOperations" ); +} + +//============================================================================= +/*! + * ExportVTK + * Export a shape to VTK format + * \param theOriginal The shape to export + * \param theFileName The name of the file to exported + * \param theDeflection The deflection of the shape to exported + */ +//============================================================================= +void VTKPlugin_IOperations::ExportVTK( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const double theDeflection ) +{ + SetErrorCode(KO); + if( theOriginal.IsNull() ) return; + + Handle(GEOM_Function) aRefFunction = theOriginal->GetLastFunction(); + if( aRefFunction.IsNull() ) return; //There is no function which creates an object to be exported + + //Add a new result object + Handle(GEOM_Object) result = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT); + + //Add an Export function + Handle(GEOM_Function) aFunction = result->AddFunction( VTKPlugin_ExportDriver::GetID(), EXPORT_SHAPE ); + if( aFunction.IsNull() ) return; + + //Check if the function is set correctly + if( aFunction->GetDriverGUID() != VTKPlugin_ExportDriver::GetID() ) return; + + //Set parameters + VTKPlugin_IExport aCI( aFunction ); + aCI.SetOriginal( aRefFunction ); + aCI.SetFileName( theFileName ); + aCI.SetDeflection( theDeflection ); + + //Perform the Export + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Not enough space on disk, or you haven't permissions to write this directory" ); + return; + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << "geompy.ExportVTK(" << theOriginal << ", \"" + << theFileName.ToCString() << "\", " << theDeflection << ")"; + + SetErrorCode(OK); +} diff --git a/src/VTKPlugin/VTKPlugin_IOperations.hxx b/src/VTKPlugin/VTKPlugin_IOperations.hxx new file mode 100644 index 000000000..dc7a6174c --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_IOperations.hxx @@ -0,0 +1,41 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : VTKPlugin_IOperations.hxx + +#ifndef _VTKPlugin_IOperations_HXX_ +#define _VTKPlugin_IOperations_HXX_ + +// internal includes +#include "VTKPlugin_Engine.hxx" + +// GEOM includes +#include "GEOMImpl_IBaseIEOperations.hxx" + +class VTKPLUGINENGINE_EXPORT VTKPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + VTKPlugin_IOperations( GEOM_Engine*, int ); + ~VTKPlugin_IOperations(); + + void ExportVTK( const Handle(GEOM_Object), + const TCollection_AsciiString&, + const double ); +}; + +#endif diff --git a/src/VTKPlugin/VTKPlugin_IOperations_i.cc b/src/VTKPlugin/VTKPlugin_IOperations_i.cc new file mode 100644 index 000000000..f73c9486b --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_IOperations_i.cc @@ -0,0 +1,80 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_IOperations_i.hh" +#include "VTKPlugin_IOperations.hxx" + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +VTKPlugin_IOperations_i::VTKPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + VTKPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "VTKPlugin_IOperations_i::VTKPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +VTKPlugin_IOperations_i::~VTKPlugin_IOperations_i() +{ + MESSAGE( "VTKPlugin_IOperations_i::~VTKPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * ExportVTK + * Export a shape to VTK format + * \param theOriginal The shape to export + * \param theFileName The name of the exported file + * \param theDeflection The deflection of the exported shape + */ +//============================================================================= +void VTKPlugin_IOperations_i::ExportVTK( GEOM::GEOM_Object_ptr theOriginal, + const char* theFileName, + const double theDeflection ) +{ + // duplicate the original shape + GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate( theOriginal ); + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference shape + Handle(GEOM_Object) anOriginal = GetObjectImpl( theOriginal ); + if (anOriginal.IsNull()) return; + + //Export the shape to the file + GetOperations()->ExportVTK( anOriginal, theFileName, theDeflection ); +} + +VTKPlugin_IOperations* VTKPlugin_IOperations_i::GetOperations() +{ + return (VTKPlugin_IOperations*)GetImpl(); +} diff --git a/src/VTKPlugin/VTKPlugin_IOperations_i.hh b/src/VTKPlugin/VTKPlugin_IOperations_i.hh new file mode 100644 index 000000000..1a0d0aec6 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_IOperations_i.hh @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _VTKPlugin_IOperations_i_HeaderFile +#define _VTKPlugin_IOperations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( VTKPlugin ) + +// internal includes +#include "VTKPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_IOperations_i.hh" + +class VTKPlugin_IOperations; + +class VTKPLUGINENGINE_EXPORT VTKPlugin_IOperations_i : + public virtual POA_GEOM::IVTKOperations, + public virtual GEOM_IOperations_i +{ +public: + VTKPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + VTKPlugin_IOperations* theImpl ); + ~VTKPlugin_IOperations_i(); + + void ExportVTK( GEOM::GEOM_Object_ptr, const char*, const double ); + + VTKPlugin_IOperations* GetOperations(); +}; + +#endif diff --git a/src/VTKPlugin/VTKPlugin_OperationsCreator.cxx b/src/VTKPlugin/VTKPlugin_OperationsCreator.cxx new file mode 100644 index 000000000..c71ab52ed --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_OperationsCreator.cxx @@ -0,0 +1,67 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "VTKPlugin_OperationsCreator.hxx" +#include "VTKPlugin_IOperations_i.hh" +#include "VTKPlugin_IOperations.hxx" +#include "VTKPlugin_ExportDriver.hxx" +#include "VTKPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// OCCT includes +#include + +std::map VTKPlugin_OperationsCreator::_mapOfOperations; + +VTKPlugin_OperationsCreator::VTKPlugin_OperationsCreator() +{ + // Register drivers + TFunction_DriverTable::Get()->AddDriver( VTKPlugin_ExportDriver::GetID(), + new VTKPlugin_ExportDriver() ); + + // Register callback + VTKPlugin_IECallBack* callback = new VTKPlugin_IECallBack(); + GEOMImpl_IECallBack::Register( "VTK", callback ); +} + +VTKPlugin_OperationsCreator::~VTKPlugin_OperationsCreator() +{ +} + +GEOM_IOperations_i* VTKPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "VTKPlugin_OperationsCreator::Create" ); + return new VTKPlugin_IOperations_i( thePOA, theEngine, get( theGenImpl, theStudyId ) ); +} + +VTKPlugin_IOperations* VTKPlugin_OperationsCreator::get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ) +{ + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) + _mapOfOperations[theStudyId] = new VTKPlugin_IOperations( theGenImpl, theStudyId ); + return _mapOfOperations[theStudyId]; +} diff --git a/src/VTKPlugin/VTKPlugin_OperationsCreator.hxx b/src/VTKPlugin/VTKPlugin_OperationsCreator.hxx new file mode 100755 index 000000000..9d9b1aeaf --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_OperationsCreator.hxx @@ -0,0 +1,57 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOM_VTKPlugin_OperationsCreator_HXX_ +#define _GEOM_VTKPlugin_OperationsCreator_HXX_ + +// internal includes +#include "VTKPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +class VTKPlugin_IOperations; + +//===================================================================== +// Operations creator +//===================================================================== +class VTKPLUGINENGINE_EXPORT VTKPlugin_OperationsCreator : public GEOM_GenericOperationsCreator +{ +public: + VTKPlugin_OperationsCreator(); + ~VTKPlugin_OperationsCreator(); + + GEOM_IOperations_i* Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ); +private: + static VTKPlugin_IOperations* get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ); + +private: + static std::map _mapOfOperations; + + friend class VTKPlugin_IECallBack; +}; + +#endif diff --git a/src/VTKPlugin/VTKPlugin_msg_en.ts b/src/VTKPlugin/VTKPlugin_msg_en.ts new file mode 100644 index 000000000..720bfcac1 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_msg_en.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTVTK + VTK + + + TOP_EXPORTVTK + Export VTK + + + STB_EXPORTVTK + Export VTK + + + MEN_IMPORTVTK + VTK + + + TOP_IMPORTVTK + Import VTK + + + STB_IMPORTVTK + Import VTK + + + + VTKPlugin_GUI + + VTK_FILES + VTK files( *.vtk ) + + + EXPORT_TITLE + Export VTK + + + + VTKPlugin_ExportDlg + + DEFLECTION + Deflection + + + diff --git a/src/VTKPlugin/VTKPlugin_msg_fr.ts b/src/VTKPlugin/VTKPlugin_msg_fr.ts new file mode 100644 index 000000000..276a5ab48 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_msg_fr.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTVTK + VTK + + + TOP_EXPORTVTK + Exporter VTK + + + STB_EXPORTVTK + Exporter VTK + + + MEN_IMPORTVTK + VTK + + + TOP_IMPORTVTK + Importer VTK + + + STB_IMPORTVTK + Importer VTK + + + + VTKPlugin_GUI + + VTK_FILES + VTK fichiers( *.vtk ) + + + EXPORT_TITLE + Exporter VTK + + + + VTKPlugin_ExportDlg + + DEFLECTION + Déflexion + + + diff --git a/src/VTKPlugin/VTKPlugin_msg_ja.ts b/src/VTKPlugin/VTKPlugin_msg_ja.ts new file mode 100644 index 000000000..8b0df3ae8 --- /dev/null +++ b/src/VTKPlugin/VTKPlugin_msg_ja.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTVTK + VTK + + + TOP_EXPORTVTK + Export VTK + + + STB_EXPORTVTK + Export VTK + + + MEN_IMPORTVTK + VTK + + + TOP_IMPORTVTK + Import VTK + + + STB_IMPORTVTK + Import VTK + + + + VTKPlugin_GUI + + VTK_FILES + VTK files( *.vtk ) + + + EXPORT_TITLE + Export VTK + + + + VTKPlugin_ExportDlg + + DEFLECTION + Deflection + + + diff --git a/src/XAOPlugin/CMakeLists.txt b/src/XAOPlugin/CMakeLists.txt new file mode 100644 index 000000000..7d24c4345 --- /dev/null +++ b/src/XAOPlugin/CMakeLists.txt @@ -0,0 +1,151 @@ +# Copyright (C) 2012-2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +IF(SALOME_BUILD_GUI) + INCLUDE(UseQt4Ext) + INCLUDE(${QT_USE_FILE}) +ENDIF() + +# --- options --- + +# additional include directories +INCLUDE_DIRECTORIES( + ${CAS_INCLUDE_DIRS} + ${KERNEL_INCLUDE_DIRS} + ${PROJECT_BINARY_DIR}/idl + ${PROJECT_SOURCE_DIR}/src/GEOMAlgo + ${PROJECT_SOURCE_DIR}/src/GEOM + ${PROJECT_SOURCE_DIR}/src/GEOMImpl + ${PROJECT_SOURCE_DIR}/src/GEOM_I + ${PROJECT_SOURCE_DIR}/src/GEOMClient + ${PROJECT_SOURCE_DIR}/src/GEOMUtils + ${PROJECT_SOURCE_DIR}/src/XAO + ) + +IF(SALOME_BUILD_GUI) + INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIRS} + ${GUI_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/src/OBJECT + ${PROJECT_SOURCE_DIR}/src/GEOMGUI + ${PROJECT_SOURCE_DIR}/src/GEOMBase + ${PROJECT_SOURCE_DIR}/src/DlgRef + ) +ENDIF() + +# additional preprocessor / compiler flags +ADD_DEFINITIONS( + ${CAS_DEFINITIONS} + ) + +IF(SALOME_BUILD_GUI) +ADD_DEFINITIONS( + ${QT_DEFINITIONS} + ) +ENDIF() + +# libraries to link to +SET(_link_engine_LIBRARIES + ${CAS_TKXAO} + ${KERNEL_SALOMELocalTrace} + ${KERNEL_OpUtil} + SalomeIDLGEOM + SalomeIDLXAOPlugin + GEOMEngine + GEOMClient + XAO + ) + +IF(SALOME_BUILD_GUI) + SET(_link_gui_LIBRARIES + SalomeIDLXAOPlugin + DlgRef + GEOMObject + GEOM + GEOMBase + ) +ENDIF() + +# --- headers --- + +SET(XAOPluginEngine_HEADERS + XAOPlugin_IOperations_i.hh + XAOPlugin_Engine.hxx + XAOPlugin_OperationsCreator.hxx + XAOPlugin_IOperations.hxx + XAOPlugin_IImportExport.hxx + XAOPlugin_Driver.hxx + XAOPlugin_IECallBack.hxx + ) + +IF(SALOME_BUILD_GUI) + # header files / to be processed by moc + SET(_moc_HEADERS + XAOPlugin_ExportDlg.h + XAOPlugin_ImportDlg.h + ) +ENDIF() + +# --- sources --- + +IF(SALOME_BUILD_GUI) + # sources / moc wrappings + QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS}) + + SET(XAOPluginGUI_SOURCES + XAOPlugin_GUI.cxx + XAOPlugin_ExportDlg.cxx + XAOPlugin_ImportDlg.cxx + ${_moc_SOURCES} + ) +ENDIF() + +SET(XAOPluginEngine_SOURCES + XAOPlugin_Engine.cxx + XAOPlugin_OperationsCreator.cxx + XAOPlugin_IOperations_i.cc + XAOPlugin_IOperations.cxx + XAOPlugin_Driver.cxx + XAOPlugin_IECallBack.cxx + ) + +# resource files / to be processed by lrelease +SET(XAOPlugin_RESOURCES + XAOPlugin_images.ts + XAOPlugin_msg_en.ts + XAOPlugin_msg_fr.ts + XAOPlugin_msg_ja.ts + ) + +# --- rules --- + +ADD_LIBRARY(XAOPluginEngine ${XAOPluginEngine_SOURCES}) +TARGET_LINK_LIBRARIES(XAOPluginEngine ${_link_engine_LIBRARIES}) +INSTALL(TARGETS XAOPluginEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + +IF(SALOME_BUILD_GUI) + ADD_LIBRARY(XAOPluginGUI ${XAOPluginGUI_SOURCES}) + TARGET_LINK_LIBRARIES(XAOPluginGUI ${_link_gui_LIBRARIES}) + INSTALL(TARGETS XAOPluginGUI EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) + + QT4_INSTALL_TS_RESOURCES("${XAOPlugin_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}") +ENDIF() + + +INSTALL(FILES ${XAOPluginEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/XAOPlugin/XAOPlugin_Driver.cxx b/src/XAOPlugin/XAOPlugin_Driver.cxx new file mode 100644 index 000000000..1c16ae792 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_Driver.cxx @@ -0,0 +1,105 @@ +// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "XAOPlugin_Driver.hxx" +#include "XAOPlugin_IImportExport.hxx" + +// GEOM includes +#include "GEOMImpl_Types.hxx" +#include "GEOM_Function.hxx" + +#include +#include +#include +#include + +// OCC includes +#include +#include +#include + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& XAOPlugin_Driver::GetID() +{ + static Standard_GUID aGUID("FF1BBB71-5D14-4df2-980B-3A668264EA16"); + return aGUID; +} + +//======================================================================= +//function : XAOPlugin_Driver +//purpose : +//======================================================================= +XAOPlugin_Driver::XAOPlugin_Driver() +{ +} + +//======================================================================= +//function : ~XAOPlugin_Driver +//purpose : +//======================================================================= +XAOPlugin_Driver::~XAOPlugin_Driver() +{ +} + +Standard_Boolean XAOPlugin_Driver::MustExecute(const TFunction_Logbook&) const +{ + return Standard_True; +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer XAOPlugin_Driver::Execute(TFunction_Logbook& log) const +{ + if (Label().IsNull()) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); + + XAOPlugin_IImportExport iexao(function); + TCollection_AsciiString xao = iexao.GetData(); + + TopoDS_Shape shape; + + Standard_Integer functionType = function->GetType(); + if (functionType == EXPORT_SHAPE) + { + } + else if (functionType == IMPORT_SHAPE) + { + } + else + { + // other construction modes here + } + + if (shape.IsNull()) return 0; + function->SetValue(shape); + + log.SetTouched(Label()); + + return 1; +} + +IMPLEMENT_STANDARD_HANDLE (XAOPlugin_Driver, TFunction_Driver); +IMPLEMENT_STANDARD_RTTIEXT(XAOPlugin_Driver, TFunction_Driver); + diff --git a/src/XAOPlugin/XAOPlugin_Driver.hxx b/src/XAOPlugin/XAOPlugin_Driver.hxx new file mode 100644 index 000000000..855b533d1 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_Driver.hxx @@ -0,0 +1,48 @@ +// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _XAOPlugin_Driver_HXX +#define _XAOPlugin_Driver_HXX + +// internal includes +#include "XAOPlugin_Engine.hxx" + +// OCCT includes +#include + +DEFINE_STANDARD_HANDLE(XAOPlugin_Driver, TFunction_Driver); + +class XAOPLUGINENGINE_EXPORT XAOPlugin_Driver: public TFunction_Driver +{ +public: + XAOPlugin_Driver(); + ~XAOPlugin_Driver(); + + static const Standard_GUID& GetID(); + virtual Standard_Integer Execute(TFunction_Logbook& log) const; + Standard_Boolean MustExecute(const TFunction_Logbook&) const; + virtual void Validate(TFunction_Logbook&) const {} + +DEFINE_STANDARD_RTTI(XAOPlugin_Driver) +}; + +#endif // _XAOPlugin_Driver_HXX diff --git a/src/XAOPlugin/XAOPlugin_Engine.cxx b/src/XAOPlugin/XAOPlugin_Engine.cxx new file mode 100644 index 000000000..e78ce5a47 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_Engine.cxx @@ -0,0 +1,31 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "XAOPlugin_Engine.hxx" +#include "XAOPlugin_OperationsCreator.hxx" + +extern "C" +{ + XAOPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + return new XAOPlugin_OperationsCreator(); + } +} diff --git a/src/XAOPlugin/XAOPlugin_Engine.hxx b/src/XAOPlugin/XAOPlugin_Engine.hxx new file mode 100755 index 000000000..9dd44dce1 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_Engine.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _XAOPLUGIN_ENGINE_HXX_ +#define _XAOPLUGIN_ENGINE_HXX_ + +#ifdef WIN32 + #if defined XAOPLUGINENGINE_EXPORTS || defined XAOPluginEngine_EXPORTS + #define XAOPLUGINENGINE_EXPORT __declspec( dllexport ) + #else + #define XAOPLUGINENGINE_EXPORT __declspec( dllimport ) + #endif +#else + #define XAOPLUGINENGINE_EXPORT +#endif + +#endif diff --git a/src/XAOPlugin/XAOPlugin_ExportDlg.cxx b/src/XAOPlugin/XAOPlugin_ExportDlg.cxx new file mode 100644 index 000000000..01e570f64 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_ExportDlg.cxx @@ -0,0 +1,456 @@ +// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "XAOPlugin_ExportDlg.h" +#include "XAOPlugin_IOperations_i.hh" + +// GUI includes +#include +#include +#include +#include + +#include +#include +#include +#include + +// GEOM includes +#include "GeometryGUI.h" +#include "GEOMBase.h" +#include "GEOMImpl_Types.hxx" + +// OCCT Includes +#include +#include +#include +#include +#include + +// QT includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +XAOPlugin_ExportDlg::XAOPlugin_ExportDlg(GeometryGUI* geometryGUI, QWidget* parent) +: + GEOMBase_Skeleton(geometryGUI, parent, false) +{ + m_mainObj = GEOM::GEOM_Object::_nil(); + + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + QPixmap imageOp(resMgr->loadPixmap("GEOM", tr("XAOPLUGIN_EXPORT_ICON"))); + QPixmap iconSelect(resMgr->loadPixmap("GEOM", tr("ICON_SELECT"))); + + setWindowTitle(tr("XAOPLUGIN_EXPORT_TITLE")); + + /***************************************************************/ + mainFrame()->GroupConstructors->setTitle(tr("XAOPLUGIN_EXPORT_TITLE")); + mainFrame()->RadioButton1->setIcon(imageOp); + mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); + mainFrame()->RadioButton3->close(); + + // hide name + mainFrame()->GroupBoxName->hide(); + + //**************************** + // Selection Group box + QGroupBox* gbxExport = new QGroupBox(parent); + + QGridLayout* gridLayoutExport = new QGridLayout(gbxExport); +#ifndef Q_OS_MAC + gridLayoutExport->setSpacing(6); + gridLayoutExport->setContentsMargins(9, 9, 9, 9); +#endif + gridLayoutExport->setObjectName(QString::fromUtf8("gridLayoutExport")); + + // Line 0 + QLabel* lblShape = new QLabel(tr("XAOPLUGIN_EXPORT_INGSHAPE"), gbxExport); + btnShapeSelect = new QPushButton(gbxExport); + btnShapeSelect->setIcon(iconSelect); + ledShape = new QLineEdit(gbxExport); + ledShape->setMinimumSize(QSize(100, 0)); + + int line = 0, col = 0; + gridLayoutExport->addWidget(lblShape, line, col++, 1, 1); + gridLayoutExport->addWidget(btnShapeSelect, line, col++, 1, 1); + gridLayoutExport->addWidget(ledShape, line, col++, 1, 1); + + // Line 1 + QLabel* lblFileName = new QLabel(tr("XAOPLUGIN_EXPORT_FILENAME"), gbxExport); + btnFileSelect = new QPushButton(gbxExport); + ledFileName = new QLineEdit(gbxExport); + btnFileSelect->setText("..."); + + line++; col = 0; + gridLayoutExport->addWidget(lblFileName, line, col++, 1, 1); + gridLayoutExport->addWidget(btnFileSelect, line, col++, 1, 1); + gridLayoutExport->addWidget(ledFileName, line, col++, 1, 1); + + // Line 2 + QLabel* lblAuthor = new QLabel(tr("XAOPLUGIN_EXPORT_AUTHOR"), gbxExport); + ledAuthor = new QLineEdit(gbxExport); + + line++; col = 0; + gridLayoutExport->addWidget(lblAuthor, line, col++, 2, 1); + col++; // span + gridLayoutExport->addWidget(ledAuthor, line, col++, 1, 1); + + //**************************** + // Filter Group box + QGroupBox* gbxFilter = new QGroupBox(parent); + + QGridLayout* gridLayoutFilter = new QGridLayout(gbxFilter); +#ifndef Q_OS_MAC + gridLayoutFilter->setSpacing(6); + gridLayoutFilter->setContentsMargins(9, 9, 9, 9); +#endif + gridLayoutFilter->setObjectName(QString::fromUtf8("gbxFilter")); + + // Line 0 + QLabel* lblGroups = new QLabel(tr("XAOPLUGIN_EXPORT_LGROUPS"), gbxFilter); + QLabel* lblFields = new QLabel(tr("XAOPLUGIN_EXPORT_LFIELDS"), gbxFilter); + + line = 0, col = 0; + gridLayoutFilter->addWidget(lblGroups, line, col++, 1, 1); + gridLayoutFilter->addWidget(lblFields, line, col++, 1, 1); + + // Line 1 + lstGroups = new QListWidget(gbxFilter); + lstGroups->setSelectionMode(QAbstractItemView::NoSelection); + lstFields = new QListWidget(gbxFilter); + lstFields->setSelectionMode(QAbstractItemView::NoSelection); + + line++; col = 0; + gridLayoutFilter->addWidget(lstGroups, line, col++, 1, 1); + gridLayoutFilter->addWidget(lstFields, line, col++, 1, 1); + + //**************************** + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); + layout->setMargin(0); + layout->setSpacing(6); + layout->addWidget(gbxExport); + layout->addWidget(gbxFilter); + + // set help + setHelpFileName("xao_format_page.html"); + + Init(); +} + +//================================================================================= +// Destructor +//================================================================================= +XAOPlugin_ExportDlg::~XAOPlugin_ExportDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +//================================================================================= +// function : Init() +// purpose : +//================================================================================= +void XAOPlugin_ExportDlg::Init() +{ + // Get setting of step value from file configuration + m_groups.clear(); + m_fields.clear(); + + // Signal/slot connections + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); + + connect(btnShapeSelect, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(((SalomeApp_Application*) (SUIT_Session::session()->activeApplication()))->selectionMgr(), + SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + + connect(btnFileSelect, SIGNAL(clicked()), this, SLOT(btnFileSelectClicked())); + + initName(tr("XAOPLUGIN_EXPORTXAO")); + SelectionIntoArgument(); +} + +//================================================================================= +// function : processObject() +// purpose : Fill dialog fields in accordance with myObj +//================================================================================= +void XAOPlugin_ExportDlg::processObject() +{ + lstGroups->clear(); + lstFields->clear(); + m_groups.clear(); + m_fields.clear(); + + if (m_mainObj->_is_nil()) + { + ledShape->setText(""); + } + else + { + ledShape->setText(GEOMBase::GetName(m_mainObj)); + GEOM::GEOM_IShapesOperations_var shapeOp = getGeomEngine()->GetIShapesOperations(getStudyId()); + + // add groups names + GEOM::ListOfGO_var groups = shapeOp->GetExistingSubObjects(m_mainObj, true); + for (int i = 0, n = groups->length(); i < n; i++) + { + QListWidgetItem* item = new QListWidgetItem(); + item->setData(Qt::UserRole, QVariant(i)); + item->setText(GEOMBase::GetName(groups[i])); + item->setFlags(item->flags() | Qt::ItemIsUserCheckable); + item->setCheckState(Qt::Checked); + lstGroups->addItem(item); + m_groups.append(GEOM::GeomObjPtr(groups[i].in())); + } + lstGroups->sortItems(Qt::AscendingOrder); + + // add fields + GEOM::GEOM_IFieldOperations_var fieldOp = getGeomEngine()->GetIFieldOperations(getStudyId()); + + GEOM::ListOfFields_var fields = fieldOp->GetFields(m_mainObj); + for (int i = 0, n = fields->length(); i < n; i++) + { + QListWidgetItem* item = new QListWidgetItem(); + item->setData(Qt::UserRole, QVariant(i)); + item->setText(fields[i]->GetName()); + item->setFlags(item->flags() | Qt::ItemIsUserCheckable); + item->setCheckState(Qt::Checked); + lstFields->addItem(item); + m_fields.append(GEOM::GeomFieldPtr(fields[i].in())); + } + lstFields->sortItems(Qt::AscendingOrder); + } +} + +//================================================================================= +// function : ClickOnOk() +// purpose : +//================================================================================= +void XAOPlugin_ExportDlg::ClickOnOk() +{ + setIsApplyAndClose(true); + if (ClickOnApply()) + ClickOnCancel(); + setIsApplyAndClose(false); +} + +//================================================================================= +// function : ClickOnApply() +// purpose : +//================================================================================= +bool XAOPlugin_ExportDlg::ClickOnApply() +{ + if (!isApplyAndClose()) + { + setIsDisableBrowsing(true); + setIsDisplayResult(false); + } + + QString msg; + if (!isValid(msg)) + { + showError(msg); + return false; + } + SUIT_OverrideCursor wc; + SUIT_Session::session()->activeApplication()->putInfo(""); + + try + { + if (openCommand()) + if (!execute()) + { + abortCommand(); + showError(); + return false; + } + } + catch (const SALOME::SALOME_Exception& e) + { + SalomeApp_Tools::QtCatchCorbaException(e); + abortCommand(); + return false; + } + commitCommand(); + + if (!isApplyAndClose()) + { + setIsDisableBrowsing(false); + setIsDisplayResult(true); + } + + processObject(); + return true; +} + +//================================================================================= +// function : SelectionIntoArgument() +// purpose : Called when selection as changed or other case +//================================================================================= +void XAOPlugin_ExportDlg::SelectionIntoArgument() +{ + m_mainObj = GEOM::GEOM_Object::_nil(); + LightApp_SelectionMgr* selMgr = myGeomGUI->getApp()->selectionMgr(); + SALOME_ListIO selList; + selMgr->selectedObjects(selList); + + if (selList.Extent() == 1) + { + m_mainObj = GEOMBase::ConvertIOinGEOMObject(selList.First()); + } + + processObject(); +} + +//================================================================================= +// function : SetEditCurrentArgument() +// purpose : +//================================================================================= +void XAOPlugin_ExportDlg::SetEditCurrentArgument() +{ + ledShape->setFocus(); + myEditCurrentArgument = ledShape; + SelectionIntoArgument(); +} + +//================================================================================= +// function : btnFileSelectClicked() +// purpose : +//================================================================================= +void XAOPlugin_ExportDlg::btnFileSelectClicked() +{ + QString file = SUIT_FileDlg::getFileName(this, ledFileName->text(), + tr("XAOPLUGIN_FILES"), + tr("XAOPLUGIN_EXPORT_SELECT"), false); + if ( !file.isEmpty() ) + ledFileName->setText( file ); +} + +//================================================================================= +// function : ActivateThisDialog() +// purpose : +//================================================================================= +void XAOPlugin_ExportDlg::ActivateThisDialog() +{ + GEOMBase_Skeleton::ActivateThisDialog(); +} + +//================================================================================= +// function : enterEvent [REDEFINED] +// purpose : +//================================================================================= +void XAOPlugin_ExportDlg::enterEvent(QEvent*) +{ + if (!mainFrame()->GroupConstructors->isEnabled()) + ActivateThisDialog(); +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr XAOPlugin_ExportDlg::createOperation() +{ + return getGeomEngine()->GetPluginOperations( getStudyId(), "XAOPluginEngine" ); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool XAOPlugin_ExportDlg::isValid(QString& msg) +{ + // check shape + if (ledShape->text().isEmpty()) + return false; + + // check file name + if (ledFileName->text().isEmpty()) + return false; + + return true; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool XAOPlugin_ExportDlg::execute() +{ + bool res = false; + + QString author = ledAuthor->text(); + QString fileName = ledFileName->text(); + + // get selected groups + QList selGroups; + for (int j = 0; j < lstGroups->count(); ++j) + { + if (lstGroups->item(j)->checkState() == Qt::Checked) + selGroups.append(lstGroups->item(j)); + } + + GEOM::ListOfGO_var groups = new GEOM::ListOfGO(); + groups->length(selGroups.count()); + int i = 0; + for (QList::iterator it = selGroups.begin(); it != selGroups.end(); ++it) + { + QListWidgetItem* item = (*it); + int index = item->data(Qt::UserRole).toInt(); + groups[i++] = m_groups[index].copy(); + } + + // get selected fields + QList selFields; + for (int j = 0; j < lstFields->count(); ++j) + { + if (lstFields->item(j)->checkState() == Qt::Checked) + selFields.append(lstFields->item(j)); + } + + GEOM::ListOfFields_var fields = new GEOM::ListOfFields(); + fields->length(selFields.count()); + i = 0; + for (QList::iterator it = selFields.begin(); it != selFields.end(); ++it) + { + QListWidgetItem* item = (*it); + int index = item->data(Qt::UserRole).toInt(); + fields[i++] = m_fields[index].copy(); + } + + // call engine function + GEOM::IXAOOperations_var aXAOOp = GEOM::IXAOOperations::_narrow( getOperation() ); + res = aXAOOp->ExportXAO(m_mainObj, groups, fields, + author.toStdString().c_str(), + fileName.toStdString().c_str()); + return res; +} diff --git a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h b/src/XAOPlugin/XAOPlugin_ExportDlg.h similarity index 52% rename from src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h rename to src/XAOPlugin/XAOPlugin_ExportDlg.h index d241ace6b..a2338e2e5 100644 --- a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.h +++ b/src/XAOPlugin/XAOPlugin_ExportDlg.h @@ -17,52 +17,59 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef IMPORTEXPORTGUI_IMPORTXAODLG_H -#define IMPORTEXPORTGUI_IMPORTXAODLG_H +#ifndef XAOPlugin_ExportDlg_H +#define XAOPlugin_ExportDlg_H -#include -#include +// GEOM includes +#include "GEOMBase_Skeleton.h" class QLineEdit; class QButtonGroup; class QListWidget; +class QPushButton; //================================================================================= -// class : ImportExportGUI_ImportXAODlg +// class : XAOPlugin_ExportDlg // purpose : //================================================================================= -class ImportExportGUI_ImportXAODlg: public GEOMBase_Skeleton +class XAOPlugin_ExportDlg: public GEOMBase_Skeleton { - Q_OBJECT + Q_OBJECT public: - ImportExportGUI_ImportXAODlg(GeometryGUI*, QWidget* = 0); - ~ImportExportGUI_ImportXAODlg(); + XAOPlugin_ExportDlg(GeometryGUI*, QWidget* = 0); + ~XAOPlugin_ExportDlg(); protected: - // redefined from GEOMBase_Helper - virtual GEOM::GEOM_IOperations_ptr createOperation(); - virtual bool isValid(QString&); - virtual bool execute(); - virtual GEOM::GEOM_Object_ptr getFather(GEOM::GEOM_Object_ptr object); - virtual QString getObjectName(GEOM::GEOM_Object_ptr object) const; - virtual QString addFieldInStudy( GEOM::GEOM_Field_ptr theField, GEOM::GEOM_Object_ptr theFather ); + // redefined from GEOMBase_Helper + virtual GEOM::GEOM_IOperations_ptr createOperation(); + virtual bool isValid(QString&); + virtual bool execute(); private: - void Init(); - void enterEvent(QEvent*); + void Init(); + void enterEvent(QEvent*); + void processObject(); private: - QLineEdit* ledFileName; - QPushButton* btnFileSelect; - GEOM::GEOM_Object_var m_mainShape; + GEOM::GEOM_Object_var m_mainObj; + QList m_groups; + QList m_fields; + QLineEdit* ledShape; + QLineEdit* ledFileName; + QLineEdit* ledAuthor; + QListWidget* lstGroups; + QListWidget* lstFields; + QPushButton* btnShapeSelect; + QPushButton* btnFileSelect; private slots: - void ClickOnOk(); - bool ClickOnApply(); - void ActivateThisDialog(); -// void LineEditReturnPressed(); - void btnFileSelectClicked(); + void ClickOnOk(); + bool ClickOnApply(); + void ActivateThisDialog(); + void SelectionIntoArgument(); + void SetEditCurrentArgument(); + void btnFileSelectClicked(); }; -#endif // IMPORTEXPORTGUI_EXPORTXAODLG_H +#endif // XAOPlugin_ExportDlg_H diff --git a/src/ImportExportGUI/ImportExportGUI.cxx b/src/XAOPlugin/XAOPlugin_GUI.cxx similarity index 53% rename from src/ImportExportGUI/ImportExportGUI.cxx rename to src/XAOPlugin/XAOPlugin_GUI.cxx index 27de1ef59..6bb816445 100644 --- a/src/ImportExportGUI/ImportExportGUI.cxx +++ b/src/XAOPlugin/XAOPlugin_GUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -17,38 +17,31 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include -#include +// internal includes +#include "XAOPlugin_GUI.h" +#include "XAOPlugin_ExportDlg.h" +#include "XAOPlugin_ImportDlg.h" -#include "GeometryGUI.h" -#include "GeometryGUI_Operations.h" - -#include +// GUI includes #include -#include -#include #include -#include "ImportExportGUI_ExportXAODlg.h" -#include "ImportExportGUI_ImportXAODlg.h" -#include "ImportExportGUI.h" -//@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@// - +// GEOM includes +#include "GeometryGUI.h" //======================================================================= -// function : ImportExportGUI() +// function : XAOPlugin_GUI() // purpose : Constructor //======================================================================= -ImportExportGUI::ImportExportGUI(GeometryGUI* parent) : - GEOMGUI(parent) +XAOPlugin_GUI::XAOPlugin_GUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) { } //======================================================================= -// function : ~ImportExportGUI +// function : ~XAOPlugin_GUI // purpose : Destructor //======================================================================= -ImportExportGUI::~ImportExportGUI() +XAOPlugin_GUI::~XAOPlugin_GUI() { } @@ -56,32 +49,42 @@ ImportExportGUI::~ImportExportGUI() // function : OnGUIEvent() // purpose : //======================================================================= -bool ImportExportGUI::OnGUIEvent(int commandId, SUIT_Desktop* parent) +bool XAOPlugin_GUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) { - SalomeApp_Application* app = getGeometryGUI()->getApp(); - if (!app) return false; + switch ( theCommandID ) { + case 1: + return OnGUIEvent("Export_XAO", parent); + case 2: + return OnGUIEvent("Import_XAO", parent); + default: + return OnGUIEvent("", parent); + } + return false; +} - getGeometryGUI()->EmitSignalDeactivateDialog(); +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool XAOPlugin_GUI::OnGUIEvent( const QString& theCommandID, SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if (!app) return false; - QDialog* dialog = NULL; - switch (commandId) - { - case GEOMOp::OpExportXAO: - dialog = new ImportExportGUI_ExportXAODlg(getGeometryGUI(), parent); - break; - case GEOMOp::OpImportXAO: - dialog = new ImportExportGUI_ImportXAODlg(getGeometryGUI(), parent); - break; - //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@// - default: - app->putInfo(tr("GEOM_PRP_COMMAND").arg(commandId)); - break; - } + getGeometryGUI()->EmitSignalDeactivateDialog(); - if (dialog != NULL) - dialog->show(); + QDialog* dialog = NULL; + if( theCommandID == "Export_XAO" ) + dialog = new XAOPlugin_ExportDlg(getGeometryGUI(), parent); + else if( theCommandID == "Import_XAO" ) + dialog = new XAOPlugin_ImportDlg(getGeometryGUI(), parent); + else + app->putInfo( tr("GEOM_PRP_COMMAND").arg( theCommandID ) ); - return true; + if (dialog != NULL) + dialog->show(); + + return true; } //===================================================================================== @@ -92,8 +95,8 @@ extern "C" #ifdef WIN32 __declspec( dllexport ) #endif - GEOMGUI* GetLibGUI(GeometryGUI* parent) - { - return new ImportExportGUI(parent); - } + GEOMGUI* GetLibGUI(GeometryGUI* parent) + { + return new XAOPlugin_GUI(parent); + } } diff --git a/src/ImportExportGUI/ImportExportGUI.h b/src/XAOPlugin/XAOPlugin_GUI.h similarity index 68% rename from src/ImportExportGUI/ImportExportGUI.h rename to src/XAOPlugin/XAOPlugin_GUI.h index 1c3864a27..bbd83db36 100644 --- a/src/ImportExportGUI/ImportExportGUI.h +++ b/src/XAOPlugin/XAOPlugin_GUI.h @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -17,25 +17,23 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : ImportExportGUI.h -// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// -#ifndef IMPORTEXPORTGUI_H -#define IMPORTEXPORTGUI_H +#ifndef XAOPlugin_GUI_H +#define XAOPlugin_GUI_H -#include "GEOMGUI.h" +#include "GEOMPluginGUI.h" //================================================================================= -// class : ImportExportGUI +// class : XAOPlugin_GUI // purpose : //================================================================================= -class ImportExportGUI: public GEOMGUI +class XAOPlugin_GUI: public GEOMPluginGUI { public: - ImportExportGUI(GeometryGUI* parent); - ~ImportExportGUI(); + XAOPlugin_GUI(GeometryGUI* parent); + ~XAOPlugin_GUI(); - bool OnGUIEvent(int commandId, SUIT_Desktop* parent); + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); }; -#endif // IMPORTEXPORTGUI_H +#endif // XAOPlugin_GUI_H diff --git a/src/XAOPlugin/XAOPlugin_IECallBack.cxx b/src/XAOPlugin/XAOPlugin_IECallBack.cxx new file mode 100644 index 000000000..f6b19e580 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_IECallBack.cxx @@ -0,0 +1,97 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "XAOPlugin_IECallBack.hxx" +#include "XAOPlugin_IOperations.hxx" +#include "XAOPlugin_OperationsCreator.hxx" +#include "GEOMImpl_IShapesOperations.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +XAOPlugin_IECallBack::XAOPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +XAOPlugin_IECallBack::~XAOPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool +XAOPlugin_IECallBack::Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + XAOPlugin_IOperations* aPluginOperations = XAOPlugin_OperationsCreator::get( GetEngine(), theDocId ); + GEOMImpl_IShapesOperations* aShapesOperations = GetEngine()->GetIShapesOperations( theDocId ); + + Handle(TColStd_HSequenceOfTransient) groups = aShapesOperations->GetExistingSubObjects( theOriginal, GEOMImpl_IShapesOperations::Groups ); + Handle(TColStd_HSequenceOfTransient) fields = aShapesOperations->GetExistingSubObjects( theOriginal, GEOMImpl_IShapesOperations::Fields ); + std::list lgroups; + std::list lfields; + for (int i = 1; i <= groups->Length(); i++) + lgroups.push_back( Handle(GEOM_Object)::DownCast( groups->Value(i) ) ); + for (int i = 1; i <= fields->Length(); i++) + lfields.push_back( Handle(GEOM_Field)::DownCast( fields->Value(i) ) ); + aPluginOperations->ExportXAO( theOriginal, lgroups, lfields, "SIMAN Author", theFileName.ToCString() ); + return true; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +XAOPlugin_IECallBack::Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ) +{ + XAOPlugin_IOperations* aPluginOperations = XAOPlugin_OperationsCreator::get( GetEngine(), theDocId ); + + Handle(TColStd_HSequenceOfTransient) result = new TColStd_HSequenceOfTransient(); + Handle(TColStd_HSequenceOfTransient) subshapes = new TColStd_HSequenceOfTransient(); + Handle(TColStd_HSequenceOfTransient) groups = new TColStd_HSequenceOfTransient(); + Handle(TColStd_HSequenceOfTransient) fields = new TColStd_HSequenceOfTransient(); + Handle(GEOM_Object) shape; + + bool ok = aPluginOperations->ImportXAO( theFileName.ToCString(), shape, subshapes, groups, fields ); + if ( ok ) { + result->Append( shape ); + for ( int i = 1; i <= groups->Length(); i++ ) + result->Append( groups->Value(i) ); + for ( int i = 1; i <= fields->Length(); i++ ) + result->Append( fields->Value(i) ); + } + return result; +} diff --git a/src/XAOPlugin/XAOPlugin_IECallBack.hxx b/src/XAOPlugin/XAOPlugin_IECallBack.hxx new file mode 100644 index 000000000..50168eac9 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_IECallBack.hxx @@ -0,0 +1,50 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _XAOPlugin_IECallBack_HXX_ +#define _XAOPlugin_IECallBack_HXX_ + +// internal includes +#include "XAOPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Object.hxx" +#include "GEOMImpl_IECallBack.hxx" + +// OCC includes +#include + +class XAOPLUGINENGINE_EXPORT XAOPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + XAOPlugin_IECallBack(); + ~XAOPlugin_IECallBack(); + + virtual bool Export( int theDocId, + const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); + + virtual + Handle(TColStd_HSequenceOfTransient) Import( int theDocId, + const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ); +}; + +#endif diff --git a/src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx b/src/XAOPlugin/XAOPlugin_IImportExport.hxx similarity index 83% rename from src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx rename to src/XAOPlugin/XAOPlugin_IImportExport.hxx index bcbd4de28..4f5727536 100644 --- a/src/GEOMImpl/GEOMImpl_IImportExportXAO.hxx +++ b/src/XAOPlugin/XAOPlugin_IImportExport.hxx @@ -17,17 +17,17 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef _GEOMImpl_IImportExportXAO_HXX_ -#define _GEOMImpl_IImportExportXAO_HXX_ +#ifndef _XAOPlugin_IImportExport_HXX_ +#define _XAOPlugin_IImportExport_HXX_ #include "GEOM_Function.hxx" #define IMPORTEXPORTXAO_ARG_DATA 1 -class GEOMImpl_IImportExportXAO +class XAOPlugin_IImportExport { public: - GEOMImpl_IImportExportXAO(Handle(GEOM_Function) theFunction): _func(theFunction) {} + XAOPlugin_IImportExport(Handle(GEOM_Function) theFunction): _func(theFunction) {} void SetData(const TCollection_AsciiString& data) { _func->SetString(IMPORTEXPORTXAO_ARG_DATA, data); } const TCollection_AsciiString GetData() { return _func->GetString(IMPORTEXPORTXAO_ARG_DATA); } @@ -36,4 +36,4 @@ private: Handle(GEOM_Function) _func; }; -#endif // _GEOMImpl_IExportXAO_HXX_ +#endif // _XAOPlugin_IImportExport_HXX_ diff --git a/src/XAOPlugin/XAOPlugin_IOperations.cxx b/src/XAOPlugin/XAOPlugin_IOperations.cxx new file mode 100644 index 000000000..a2eae44db --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_IOperations.cxx @@ -0,0 +1,670 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "XAOPlugin_IOperations.hxx" +#include "XAOPlugin_Driver.hxx" +#include "XAOPlugin_IImportExport.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include "GEOM_PythonDump.hxx" +#include "GEOMImpl_Types.hxx" +#include "GEOMImpl_IGroupOperations.hxx" +#include "GEOMImpl_IShapesOperations.hxx" +#include "GEOMImpl_IFieldOperations.hxx" +#include "GEOM_ISubShape.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +// OCC includes +#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 +#include +#include +#else +#include +#endif +#include + + +XAO::Dimension shapeEnumToDimension(const TopAbs_ShapeEnum& shape) +{ + XAO::Dimension dim; + switch( shape ) { + case TopAbs_VERTEX: + dim = XAO::VERTEX; break; + case TopAbs_EDGE: + dim = XAO::EDGE; break; + case TopAbs_FACE: + dim = XAO::FACE; break; + case TopAbs_SOLID: + dim = XAO::SOLID; break; + default: + throw SALOME_Exception("Bad type"); // TODO + } + return dim; +} + +TopAbs_ShapeEnum getGroupDimension(XAO::Group* group) +{ + XAO::Dimension dim = group->getDimension(); + TopAbs_ShapeEnum rdim; + switch ( dim ) + { + case XAO::VERTEX: + rdim = TopAbs_VERTEX; break; + case XAO::EDGE: + rdim = TopAbs_EDGE; break; + case XAO::FACE: + rdim = TopAbs_FACE; break; + case XAO::SOLID: + rdim = TopAbs_SOLID; break; + default: + rdim = TopAbs_COMPOUND; break; + } + return rdim; +} + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +XAOPlugin_IOperations::XAOPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "XAOPlugin_IOperations::XAOPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +XAOPlugin_IOperations::~XAOPlugin_IOperations() +{ + MESSAGE( "XAOPlugin_IOperations::~XAOPlugin_IOperations" ); +} + +void XAOPlugin_IOperations::exportGroups( std::list groupList, + XAO::Xao* xaoObject, + XAO::BrepGeometry* geometry ) +{ + // add the groups + std::list::iterator groupIterator = groupList.begin(); + while (groupIterator != groupList.end()) + { + Handle(GEOM_Object) currGroup = (*groupIterator++); + Handle(TColStd_HArray1OfInteger) groupIds = myGroupOperations->GetObjects(currGroup); + + TopAbs_ShapeEnum shapeGroup = myGroupOperations->GetType(currGroup); + XAO::Dimension dim = shapeEnumToDimension(shapeGroup); + XAO::Group* group = xaoObject->addGroup(dim, currGroup->GetName().ToCString()); + + switch (shapeGroup) + { + case TopAbs_VERTEX: + for (int i = 1; i <= groupIds->Length(); i++) + { + std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); + int index = geometry->getVertexIndexByReference(ref); + group->add(index); + } + break; + case TopAbs_EDGE: + for (int i = 1; i <= groupIds->Length(); i++) + { + std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); + int index = geometry->getEdgeIndexByReference(ref); + group->add(index); + } + break; + case TopAbs_FACE: + for (int i = 1; i <= groupIds->Length(); i++) + { + std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); + int index = geometry->getFaceIndexByReference(ref); + group->add(index); + } + break; + case TopAbs_SOLID: + for (int i = 1; i <= groupIds->Length(); i++) + { + std::string ref = XAO::XaoUtils::intToString(groupIds->Value(i)); + int index = geometry->getSolidIndexByReference(ref); + group->add(index); + } + break; + } + } +} + +void XAOPlugin_IOperations::exportFields( std::list fieldList, + XAO::Xao* xaoObject, + XAO::BrepGeometry* geometry ) +{ + std::list::iterator fieldIterator = fieldList.begin(); + while (fieldIterator != fieldList.end()) + { + Handle(GEOM_Field) currField = (*fieldIterator++); + + int fdim = currField->GetDimension(); + int ftype = currField->GetDataType(); + int nbComponents = currField->GetNbComponents(); + std::string name = currField->GetName().ToCString(); + + XAO::Field* field = xaoObject->addField((XAO::Type)ftype, (XAO::Dimension)fdim, nbComponents, name); + + Handle(TColStd_HArray1OfExtendedString) components = currField->GetComponents(); + for (int i = components->Lower(), j = 0; i <= components->Upper(); ++i, ++j) + { + field->setComponentName(j, TCollection_AsciiString(components->Value(i)).ToCString()); + } + + std::list< Handle(GEOM_FieldStep)> steps = currField->GetSteps(); + std::list::iterator stepIterator = steps.begin(); + while (stepIterator != steps.end()) + { + Handle(GEOM_FieldStep) currStep = (*stepIterator++); + + XAO::Step* step = field->addNewStep(currStep->GetID()); + step->setStamp(currStep->GetStamp()); + + switch (ftype) + { + case 0: // bool + { + XAO::BooleanStep* bs = (XAO::BooleanStep*)step; + Handle(TColStd_HArray1OfInteger) bvalues = currStep->GetIntValues(); + std::vector bv; + bv.reserve(bvalues->Upper()); + for ( int i = bvalues->Lower(), nb = bvalues->Upper(); i <= nb; ++i ) + { + bv.push_back(bvalues->Value(i) != 0); + } + bs->setValues(bv); + break; + } + case 1: // integer + { + XAO::IntegerStep* is = (XAO::IntegerStep*)step; + Handle(TColStd_HArray1OfInteger) ivalues = currStep->GetIntValues(); + std::vector iv; + iv.reserve(ivalues->Upper()); + for ( int i = ivalues->Lower(), nb = ivalues->Upper(); i <= nb; ++i ) + { + iv.push_back(ivalues->Value(i)); + } + is->setValues(iv); + break; + } + case 2: // double + { + XAO::DoubleStep* ds = (XAO::DoubleStep*)step; + Handle(TColStd_HArray1OfReal) dvalues = currStep->GetDoubleValues(); + std::vector dv; + dv.reserve(dvalues->Upper()); + for ( int i = dvalues->Lower(), nb = dvalues->Upper(); i <= nb; ++i ) + { + dv.push_back(dvalues->Value(i)); + } + ds->setValues(dv); + break; + } + case 3: // string + { + XAO::StringStep* ss = (XAO::StringStep*)step; + Handle(TColStd_HArray1OfExtendedString) svalues = currStep->GetStringValues(); + std::vector sv; + sv.reserve(svalues->Upper()); + for ( int i = svalues->Lower(), nb = svalues->Upper(); i <= nb; ++i ) + { + sv.push_back(TCollection_AsciiString(svalues->Value(i)).ToCString()); + } + ss->setValues(sv); + break; + } + } + } + } +} + +void XAOPlugin_IOperations::exportSubshapes( const Handle(GEOM_Object)& shape, XAO::BrepGeometry* geometry ) +{ + Handle(TColStd_HSequenceOfTransient) subObjects = myShapesOperations->GetExistingSubObjects( shape, false ); + int nbSubObjects = subObjects->Length(); + // set the names of the sub shapes + for (int i = 1; i <= nbSubObjects; i++) + { + Handle(Standard_Transient) transientSubObject = subObjects->Value(i); + if (transientSubObject.IsNull()) + continue; + + Handle(GEOM_Object) subObject = Handle(GEOM_Object)::DownCast( transientSubObject ); + if (subObject->GetType() != GEOM_GROUP) + { + int subIndex = myShapesOperations->GetSubShapeIndex( shape, subObject ); + switch (subObject->GetValue().ShapeType()) + { + case TopAbs_VERTEX: + geometry->changeVertexName(subIndex, subObject->GetName().ToCString()); + break; + case TopAbs_EDGE: + geometry->changeEdgeName(subIndex, subObject->GetName().ToCString()); + break; + case TopAbs_FACE: + geometry->changeFaceName(subIndex, subObject->GetName().ToCString()); + break; + case TopAbs_SOLID: + geometry->changeSolidName(subIndex, subObject->GetName().ToCString()); + break; + } + } + } +} + +//============================================================================= +/*! + * Export a shape to XAO format + * \param shape The shape to export + * \param groups The list of groups to export + * \param fields The list of fields to export + * \param fileName The name of the file to exported + * \return boolean indicating if export was succeful. + */ +//============================================================================= +bool XAOPlugin_IOperations::ExportXAO( Handle(GEOM_Object) shape, + std::list groupList, + std::list fieldList, + const char* author, + const char* fileName ) +{ + SetErrorCode(KO); + + if (shape.IsNull()) return false; + + // add a new shape function with parameters + Handle(GEOM_Function) lastFunction = shape->GetLastFunction(); + if (lastFunction.IsNull()) return false; + + // add a new result object + Handle(GEOM_Object) result = GetEngine()->AddObject(GetDocID(), GEOM_IMPORT); + + // add an Export function + Handle(GEOM_Function) exportFunction = result->AddFunction(XAOPlugin_Driver::GetID(), EXPORT_SHAPE); + if (exportFunction.IsNull()) return false; + if (exportFunction->GetDriverGUID() != XAOPlugin_Driver::GetID()) return false; + + // create the XAO object + XAO::Xao* xaoObject = new XAO::Xao(); + xaoObject->setAuthor(author); + + // add the geometry + XAO::BrepGeometry* geometry = (XAO::BrepGeometry*)XAO::Geometry::createGeometry(XAO::BREP); + TopoDS_Shape topoShape = shape->GetValue(); + exportFunction->SetValue(topoShape); + XAO::BrepGeometry* brep = (XAO::BrepGeometry*)geometry; + brep->setTopoDS_Shape(topoShape); + + geometry->setName(shape->GetName().ToCString()); + exportSubshapes(shape, geometry); + xaoObject->setGeometry(geometry); + + exportGroups(groupList, xaoObject, geometry); + exportFields(fieldList, xaoObject, geometry); + + // export the XAO to the file + xaoObject->exportXAO(fileName); + + // make a Python command + GEOM::TPythonDump pd(exportFunction); + pd << "exported = geompy.ExportXAO(" << shape; + + // list of groups + pd << ", ["; + if (groupList.size() > 0) + { + std::list::iterator itGroup = groupList.begin(); + pd << (*itGroup++); + while (itGroup != groupList.end()) + { + pd << ", " << (*itGroup++); + } + } + + // list of fields + pd << "], ["; + if (fieldList.size() > 0) + { + std::list::iterator itField = fieldList.begin(); + pd << (*itField++); + while (itField != fieldList.end()) + { + pd << ", " << (*itField++); + } + } + pd << "], "; + pd << "\"" << author << "\", \"" << fileName << "\")"; + + SetErrorCode(OK); + delete xaoObject; + + return true; +} + +void XAOPlugin_IOperations::importSubShapes( XAO::Geometry* xaoGeometry, + Handle(GEOM_Function) function, int shapeType, int dim, + Handle(TColStd_HSequenceOfTransient)& subShapeList ) +{ + Handle(GEOM_Object) subShape; + Handle(GEOM_Function) aFunction; + Handle(TColStd_HArray1OfInteger) anArray; + + XAO::GeometricElementList::iterator elementIterator = xaoGeometry->begin((XAO::Dimension)dim); + for (; elementIterator != xaoGeometry->end((XAO::Dimension)dim); elementIterator++) + { + XAO::GeometricElement element = elementIterator->second; + if (!element.hasName()) + continue; + + std::string name = element.getName(); + std::string ref = element.getReference(); + int iref = XAO::XaoUtils::stringToInt(ref); + + anArray = new TColStd_HArray1OfInteger(1, 1); + anArray->SetValue(1, iref); + + subShape = GetEngine()->AddObject(GetDocID(), GEOM_SUBSHAPE); + Handle(GEOM_Function) aFunction = subShape->AddFunction(GEOM_Object::GetSubShapeID(), 1); + if (aFunction.IsNull()) + return; + + subShape->SetName(name.c_str()); + subShape->SetType(shapeType); + + GEOM_ISubShape aSSI(aFunction); + aSSI.SetMainShape(function); + aSSI.SetIndices(anArray); + + //aFunction->SetValue(aValue); + subShapeList->Append(subShape); + + // Put this subshape in the list of sub-shapes of theMainShape + function->AddSubShapeReference(aFunction); + } +} + +//============================================================================= +/*! + * Import a shape from XAO format + * \param fileName The name of the file to import + * \param shape The imported shape + * \param subShapes The list of imported groups + * \param groups The list of imported groups + * \param fields The list of imported fields + * \return boolean indicating if import was succeful. + */ +//============================================================================= +bool XAOPlugin_IOperations::ImportXAO( const char* fileName, + Handle(GEOM_Object)& shape, + Handle(TColStd_HSequenceOfTransient)& subShapes, + Handle(TColStd_HSequenceOfTransient)& groups, + Handle(TColStd_HSequenceOfTransient)& fields ) +{ + SetErrorCode(KO); + + if (fileName == NULL || groups.IsNull() || fields.IsNull()) + return false; + + // Read the XAO + XAO::Xao* xaoObject = new XAO::Xao(); + try + { + xaoObject->importXAO(fileName); + } + catch (XAO::XAO_Exception& exc) + { + delete xaoObject; + SetErrorCode(exc.what()); + return false; + } + + XAO::Geometry* xaoGeometry = xaoObject->getGeometry(); + if (xaoGeometry == NULL) + { + delete xaoObject; + SetErrorCode("Cannot import XAO: geometry format not supported."); + return false; + } + + // create the shape + shape = GetEngine()->AddObject(GetDocID(), GEOM_IMPORT); + Handle(GEOM_Function) function = shape->AddFunction(XAOPlugin_Driver::GetID(), IMPORT_SHAPE); + if (function.IsNull()) return false; + if (function->GetDriverGUID() != XAOPlugin_Driver::GetID()) return false; + + // set the geometry + if (xaoGeometry->getFormat() == XAO::BREP) + { + XAO::BrepGeometry* brep = (XAO::BrepGeometry*)xaoGeometry; + TopoDS_Shape geomShape = brep->getTopoDS_Shape(); + function->SetValue(geomShape); + shape->SetName(xaoGeometry->getName().c_str()); + } + else + { + delete xaoObject; + SetErrorCode("Cannot import XAO: geometry format not supported."); + return false; + } + + // create sub shapes with names + importSubShapes(xaoGeometry, function, GEOM_POINT, XAO::VERTEX, subShapes); + importSubShapes(xaoGeometry, function, GEOM_EDGE, XAO::EDGE, subShapes); + importSubShapes(xaoGeometry, function, GEOM_FACE, XAO::FACE, subShapes); + importSubShapes(xaoGeometry, function, GEOM_SOLID, XAO::SOLID, subShapes); + + // create groups + int nbGroups = xaoObject->countGroups(); + for (int i = 0; i < nbGroups; ++i) + { + XAO::Group* xaoGroup = xaoObject->getGroup(i); + + // build an array with the indexes of the sub shapes + int nbElt = xaoGroup->count(); + Handle(TColStd_HArray1OfInteger) array = new TColStd_HArray1OfInteger(1, nbElt); + int j = 0; + for (std::set::iterator it = xaoGroup->begin(); it != xaoGroup->end(); ++it) + { + int index = (*it); + std::string ref = xaoGeometry->getElementReference(xaoGroup->getDimension(), index); + array->SetValue(++j, XAO::XaoUtils::stringToInt(ref)); + } + + // create the group with the array of sub shapes indexes + Handle(GEOM_Object) group = GetEngine()->AddSubShape(shape, array); + group->SetType(GEOM_GROUP); + group->SetName(xaoGroup->getName().c_str()); + + // Set a sub-shape type + TDF_Label freeLabel = group->GetFreeLabel(); + TDataStd_Integer::Set(freeLabel, (Standard_Integer) getGroupDimension(xaoGroup)); + groups->Append(group); + + function = group->GetLastFunction(); + } + + // create the fields + int nbFields = xaoObject->countFields(); + for (int i = 0; i < nbFields; ++i) + { + XAO::Field* xaoField = xaoObject->getField(i); + + Handle(TColStd_HArray1OfExtendedString) components = new TColStd_HArray1OfExtendedString(0, xaoField->countComponents()-1); + for (int j = 0; j < xaoField->countComponents(); ++j) + { + components->SetValue(j, (TCollection_ExtendedString)xaoField->getComponentName(j).c_str()); + } + + Handle(GEOM_Field) field = myFieldOperations->CreateField(shape, + xaoField->getName().c_str(), + (int)xaoField->getType(), + (int)xaoField->getDimension(), + components); + + switch (xaoField->getType()) + { + case XAO::BOOLEAN: + { + XAO::BooleanField* bfield = (XAO::BooleanField*)xaoField; + for (int j = 0; j < xaoField->countSteps(); ++j) + { + XAO::BooleanStep* bstep = bfield->getStep(j); + Handle(GEOM_FieldStep) step = field->AddStep(bstep->getStep(), bstep->getStamp()); + + Handle(TColStd_HArray1OfInteger) values = new TColStd_HArray1OfInteger(0, bstep->countValues()-1); + std::vector bvalues = bstep->getValues(); + for (int k = 0; k < bstep->countValues(); ++k) + { + values->SetValue(k, bvalues[k] ? 1 : 0); + } + step->SetValues(values); + } + break; + } + case XAO::INTEGER: + { + XAO::IntegerField* ifield = (XAO::IntegerField*)xaoField; + for (int j = 0; j < xaoField->countSteps(); ++j) + { + XAO::IntegerStep* istep = ifield->getStep(j); + Handle(GEOM_FieldStep) step = field->AddStep(istep->getStep(), istep->getStamp()); + + Handle(TColStd_HArray1OfInteger) values = new TColStd_HArray1OfInteger(0, istep->countValues()-1); + std::vector ivalues = istep->getValues(); + for (int k = 0; k < istep->countValues(); ++k) + { + values->SetValue(k, ivalues[k]); + } + step->SetValues(values); + } + break; + } + case XAO::DOUBLE: + { + XAO::DoubleField* dfield = (XAO::DoubleField*)xaoField; + for (int j = 0; j < xaoField->countSteps(); ++j) + { + XAO::DoubleStep* dstep = dfield->getStep(j); + Handle(GEOM_FieldStep) step = field->AddStep(dstep->getStep(), dstep->getStamp()); + + Handle(TColStd_HArray1OfReal) values = new TColStd_HArray1OfReal(0, dstep->countValues()-1); + std::vector dvalues = dstep->getValues(); + for (int k = 0; k < dstep->countValues(); ++k) + { + values->SetValue(k, dvalues[k]); + } + step->SetValues(values); + } + break; + } + case XAO::STRING: + { + XAO::StringField* sfield = (XAO::StringField*)xaoField; + for (int j = 0; j < xaoField->countSteps(); ++j) + { + XAO::StringStep* sstep = sfield->getStep(j); + Handle(GEOM_FieldStep) step = field->AddStep(sstep->getStep(), sstep->getStamp()); + + Handle(TColStd_HArray1OfExtendedString) values = new TColStd_HArray1OfExtendedString(0, sstep->countValues()-1); + std::vector svalues = sstep->getValues(); + for (int k = 0; k < sstep->countValues(); ++k) + { + values->SetValue(k, TCollection_ExtendedString(svalues[k].c_str())); + } + step->SetValues(values); + } + break; + } + } + + fields->Append(field); + } + + // make a Python command + GEOM::TPythonDump pd(function); + pd << "(imported, " << shape << ", "; + + // list of sub shapes + pd << "["; + int nbSubshapes = subShapes->Length(); + if (nbSubshapes > 0) + { + for (int i = 1; i <= nbSubshapes; i++) + { + Handle(GEOM_Object) obj = Handle(GEOM_Object)::DownCast(subShapes->Value(i)); + pd << obj << ((i < nbSubshapes) ? ", " : ""); + } + } + pd << "], ["; + + // list of groups + if (nbGroups > 0) + { + for (int i = 1; i <= nbGroups; i++) + { + Handle(GEOM_Object) obj = Handle(GEOM_Object)::DownCast(groups->Value(i)); + pd << obj << ((i < nbGroups) ? ", " : ""); + } + } + + pd << "], ["; + + // list of fields + if (nbFields > 0) + { + for (int i = 1; i <= nbFields; i++) + { + Handle(GEOM_Field) obj = Handle(GEOM_Field)::DownCast(fields->Value(i)); + pd << obj << ((i < nbFields) ? ", " : ""); + } + } + pd << "]"; + pd << ") = geompy.ImportXAO(\"" << fileName << "\")"; + + delete xaoObject; + SetErrorCode(OK); + + return true; +} diff --git a/src/XAOPlugin/XAOPlugin_IOperations.hxx b/src/XAOPlugin/XAOPlugin_IOperations.hxx new file mode 100644 index 000000000..34e17b2c5 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_IOperations.hxx @@ -0,0 +1,74 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : XAOPlugin_IOperations.hxx + +#ifndef _XAOPlugin_IOperations_HXX_ +#define _XAOPlugin_IOperations_HXX_ + +// internal includes +#include "XAOPlugin_Engine.hxx" + +// GEOM includes +#include "GEOMImpl_IBaseIEOperations.hxx" +#include "GEOM_Object.hxx" +#include "GEOM_Field.hxx" + +#include + +namespace XAO { + class Geometry; + class BrepGeometry; + class Xao; +} + +class XAOPLUGINENGINE_EXPORT XAOPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + XAOPlugin_IOperations( GEOM_Engine*, int ); + ~XAOPlugin_IOperations(); + + bool ExportXAO( Handle(GEOM_Object) shape, + std::list groupList, + std::list fieldList, + const char* author, + const char* fileName ); + + bool ImportXAO( const char* fileName, + Handle(GEOM_Object)& shape, + Handle(TColStd_HSequenceOfTransient)& subShapes, + Handle(TColStd_HSequenceOfTransient)& groups, + Handle(TColStd_HSequenceOfTransient)& fields ); + +private: + void importSubShapes( XAO::Geometry* xaoGeometry, + Handle(GEOM_Function) function, + int shapeType, + int dim, + Handle(TColStd_HSequenceOfTransient)& subshapeList ); + void exportSubshapes( const Handle(GEOM_Object)& shape, + XAO::BrepGeometry* geometry ); + void exportFields( std::list fieldList, + XAO::Xao* xaoObject, + XAO::BrepGeometry* geometry ); + void exportGroups( std::list groupList, + XAO::Xao* xaoObject, + XAO::BrepGeometry* geometry ); +}; + +#endif diff --git a/src/XAOPlugin/XAOPlugin_IOperations_i.cc b/src/XAOPlugin/XAOPlugin_IOperations_i.cc new file mode 100644 index 000000000..cbda713a9 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_IOperations_i.cc @@ -0,0 +1,172 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "XAOPlugin_IOperations_i.hh" +#include "XAOPlugin_IOperations.hxx" + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +XAOPlugin_IOperations_i::XAOPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + XAOPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "XAOPlugin_IOperations_i::XAOPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +XAOPlugin_IOperations_i::~XAOPlugin_IOperations_i() +{ + MESSAGE( "XAOPlugin_IOperations_i::~XAOPlugin_IOperations_i" ); +} + +//============================================================================= +/*! + * Export a shape to XAO format + * \param shape The shape to export + * \param groups The list of groups to export + * \param fields The list of fields to export + * \param author The author of the export + * \param fileName The name of the exported file + * \return boolean indicating if export was succeful. + */ +//============================================================================= +CORBA::Boolean XAOPlugin_IOperations_i::ExportXAO( GEOM::GEOM_Object_ptr shape, + const GEOM::ListOfGO& groups, + const GEOM::ListOfFields& fields, + const char* author, + const char* fileName) +{ + bool isGood = false; + // Set a not done flag + GetOperations()->SetNotDone(); + + // Get the reference shape + Handle(GEOM_Object) reference = GetObjectImpl( shape ); + + // Get the reference groups + int ind = 0; + std::list groupsObj; + for (; ind < groups.length(); ind++) + { + Handle(GEOM_Object) gobj = GetObjectImpl( groups[ind] ); + if (gobj.IsNull()) return false; + groupsObj.push_back(gobj); + } + + // Get the reference fields + ind = 0; + std::list fieldsObj; + for( ; ind < fields.length(); ind++ ) + { + Handle(GEOM_Field) fobj = Handle(GEOM_Field)::DownCast( GetBaseObjectImpl( fields[ind] ) ); + if( fobj.IsNull() ) return false; + fieldsObj.push_back(fobj); + } + + if( !reference.IsNull() ) + { + // Export XAO + isGood = GetOperations()->ExportXAO( reference, groupsObj, fieldsObj, author, fileName ); + } + + return isGood; +} + +//============================================================================= +/*! + * Import a shape from XAO format + * \param fileName The name of the file to import + * \param shape The imported shape + * \param subShapes The list of imported subShapes + * \param groups The list of imported groups + * \param fields The list of imported fields + * \return boolean indicating if import was succeful. + */ +//============================================================================= +CORBA::Boolean XAOPlugin_IOperations_i::ImportXAO( const char* fileName, + GEOM::GEOM_Object_out shape, + GEOM::ListOfGO_out subShapes, + GEOM::ListOfGO_out groups, + GEOM::ListOfFields_out fields) +{ + GEOM::GEOM_Object_var vshape; + shape = vshape._retn(); + + subShapes = new GEOM::ListOfGO; + groups = new GEOM::ListOfGO; + fields = new GEOM::ListOfFields; + + // Set a not done flag + GetOperations()->SetNotDone(); + + Handle(TColStd_HSequenceOfTransient) importedSubShapes = new TColStd_HSequenceOfTransient(); + Handle(TColStd_HSequenceOfTransient) importedGroups = new TColStd_HSequenceOfTransient(); + Handle(TColStd_HSequenceOfTransient) importedFields = new TColStd_HSequenceOfTransient(); + Handle(GEOM_Object) hshape; + bool res = GetOperations()->ImportXAO( fileName, hshape, importedSubShapes, importedGroups, importedFields ); + + if( !GetOperations()->IsDone() || !res ) + return false; + + // parse fields + int n = importedSubShapes->Length(); + subShapes->length(n); + for( int i = 1; i <= n; i++ ) + { + (*subShapes)[i - 1] = GetObject( Handle(GEOM_Object)::DownCast( importedSubShapes->Value(i) ) ); + } + + // parse groups + n = importedGroups->Length(); + groups->length(n); + for( int i = 1; i <= n; i++ ) + { + (*groups)[i - 1] = GetObject( Handle(GEOM_Object)::DownCast( importedGroups->Value(i) ) ); + } + + // parse fields + n = importedFields->Length(); + fields->length(n); + for( int i = 1; i <= n; i++ ) + { + (*fields)[i - 1] = GEOM::GEOM_Field::_narrow( + GetBaseObject( Handle(GEOM_Field)::DownCast( importedFields->Value(i) ) ) ); + } + + shape = GetObject( hshape ); + + return res; +} + +XAOPlugin_IOperations* XAOPlugin_IOperations_i::GetOperations() +{ + return (XAOPlugin_IOperations*)GetImpl(); +} diff --git a/src/XAOPlugin/XAOPlugin_IOperations_i.hh b/src/XAOPlugin/XAOPlugin_IOperations_i.hh new file mode 100644 index 000000000..6e7b89cda --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_IOperations_i.hh @@ -0,0 +1,61 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _XAOPlugin_IOperations_i_HeaderFile +#define _XAOPlugin_IOperations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( XAOPlugin ) + +// internal includes +#include "XAOPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_IOperations_i.hh" + +class XAOPlugin_IOperations; + +class XAOPLUGINENGINE_EXPORT XAOPlugin_IOperations_i : + public virtual POA_GEOM::IXAOOperations, + public virtual GEOM_IOperations_i +{ +public: + XAOPlugin_IOperations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + XAOPlugin_IOperations* theImpl ); + ~XAOPlugin_IOperations_i(); + + CORBA::Boolean ExportXAO( GEOM::GEOM_Object_ptr shape, + const GEOM::ListOfGO& groups, + const GEOM::ListOfFields& fields, + const char* author, + const char* fileName ); + + CORBA::Boolean ImportXAO( const char* fileName, + GEOM::GEOM_Object_out shape, + GEOM::ListOfGO_out subShapes, + GEOM::ListOfGO_out groups, + GEOM::ListOfFields_out fields ); + + XAOPlugin_IOperations* GetOperations(); +}; + +#endif diff --git a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx b/src/XAOPlugin/XAOPlugin_ImportDlg.cxx similarity index 67% rename from src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx rename to src/XAOPlugin/XAOPlugin_ImportDlg.cxx index 5272fa788..6acce2f5e 100644 --- a/src/ImportExportGUI/ImportExportGUI_ImportXAODlg.cxx +++ b/src/XAOPlugin/XAOPlugin_ImportDlg.cxx @@ -17,26 +17,29 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include -#include -#include -#include +// internal includes +#include "XAOPlugin_ImportDlg.h" +#include "XAOPlugin_IOperations_i.hh" +// KERNEL includes +#include + +// GUI includes #include #include #include #include + #include #include #include #include -#include -#include -#include -#include -#include -#include +// GEOM includes +#include "GeometryGUI.h" +#include "GEOMBase.h" +#include "GEOM_Field.hxx" +#include "GEOMImpl_Types.hxx" // OCCT Includes #include @@ -45,26 +48,33 @@ #include #include -#include -#include "ImportExportGUI_ImportXAODlg.h" - -#include +// QT includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include //================================================================================= // Constructor //================================================================================= -ImportExportGUI_ImportXAODlg::ImportExportGUI_ImportXAODlg(GeometryGUI* geometryGUI, QWidget* parent) +XAOPlugin_ImportDlg::XAOPlugin_ImportDlg(GeometryGUI* geometryGUI, QWidget* parent) : GEOMBase_Skeleton(geometryGUI, parent, false) { SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - QPixmap imageOp(resMgr->loadPixmap("GEOM", tr("ICON_DLG_IMPORTXAO"))); + QPixmap imageOp(resMgr->loadPixmap("GEOM", tr("XAOPLUGIN_IMPORT_ICON"))); QPixmap iconSelect(resMgr->loadPixmap("GEOM", tr("ICON_SELECT"))); - setWindowTitle(tr("GEOM_IMPORTXAO_TITLE")); + setWindowTitle(tr("XAOPLUGIN_IMPORT_TITLE")); /***************************************************************/ - mainFrame()->GroupConstructors->setTitle(tr("GEOM_IMPORTXAO_TITLE")); + mainFrame()->GroupConstructors->setTitle(tr("XAOPLUGIN_IMPORT_TITLE")); mainFrame()->RadioButton1->setIcon(imageOp); mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose); mainFrame()->RadioButton2->close(); @@ -86,7 +96,7 @@ ImportExportGUI_ImportXAODlg::ImportExportGUI_ImportXAODlg(GeometryGUI* geometry gridLayoutExport->setObjectName(QString::fromUtf8("gridLayoutExport")); int line = 0, col = 0; - QLabel* lblFileName = new QLabel(tr("GEOM_IMPORTXAO_FILENAME"), gbxExport); + QLabel* lblFileName = new QLabel(tr("XAOPLUGIN_IMPORT_FILENAME"), gbxExport); btnFileSelect = new QPushButton(gbxExport); ledFileName = new QLineEdit(gbxExport); btnFileSelect->setText("..."); @@ -111,7 +121,7 @@ ImportExportGUI_ImportXAODlg::ImportExportGUI_ImportXAODlg(GeometryGUI* geometry //================================================================================= // Destructor //================================================================================= -ImportExportGUI_ImportXAODlg::~ImportExportGUI_ImportXAODlg() +XAOPlugin_ImportDlg::~XAOPlugin_ImportDlg() { // no need to delete child widgets, Qt does it all for us } @@ -120,7 +130,7 @@ ImportExportGUI_ImportXAODlg::~ImportExportGUI_ImportXAODlg() // function : Init() // purpose : //================================================================================= -void ImportExportGUI_ImportXAODlg::Init() +void XAOPlugin_ImportDlg::Init() { // Signal/slot connections connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); @@ -128,7 +138,7 @@ void ImportExportGUI_ImportXAODlg::Init() connect(btnFileSelect, SIGNAL(clicked()), this, SLOT(btnFileSelectClicked())); - initName(tr("GEOM_IMPORTXAO")); + initName(tr("XAOPLUGIN_IMPORTXAO")); //SelectionIntoArgument(); } @@ -136,7 +146,7 @@ void ImportExportGUI_ImportXAODlg::Init() // function : ClickOnOk() // purpose : //================================================================================= -void ImportExportGUI_ImportXAODlg::ClickOnOk() +void XAOPlugin_ImportDlg::ClickOnOk() { setIsApplyAndClose(true); if (ClickOnApply()) @@ -148,7 +158,7 @@ void ImportExportGUI_ImportXAODlg::ClickOnOk() // function : ClickOnApply() // purpose : //================================================================================= -bool ImportExportGUI_ImportXAODlg::ClickOnApply() +bool XAOPlugin_ImportDlg::ClickOnApply() { if(!isApplyAndClose()) { setIsDisableBrowsing( true ); @@ -191,11 +201,11 @@ bool ImportExportGUI_ImportXAODlg::ClickOnApply() // function : btnFileSelectClicked() // purpose : //================================================================================= -void ImportExportGUI_ImportXAODlg::btnFileSelectClicked() +void XAOPlugin_ImportDlg::btnFileSelectClicked() { QString file = SUIT_FileDlg::getFileName(this, ledFileName->text(), - tr("XAO_FILES"), - tr("GEOM_SELECT_IMPORT_XAO")); + tr("XAOPLUGIN_FILES"), + tr("XAOPLUGIN_IMPORT_SELECT")); if ( !file.isEmpty() ) ledFileName->setText( file ); } @@ -204,97 +214,96 @@ void ImportExportGUI_ImportXAODlg::btnFileSelectClicked() // function : ActivateThisDialog() // purpose : //================================================================================= -void ImportExportGUI_ImportXAODlg::ActivateThisDialog() +void XAOPlugin_ImportDlg::ActivateThisDialog() { - GEOMBase_Skeleton::ActivateThisDialog(); + GEOMBase_Skeleton::ActivateThisDialog(); } //================================================================================= // function : enterEvent [REDEFINED] // purpose : //================================================================================= -void ImportExportGUI_ImportXAODlg::enterEvent(QEvent*) +void XAOPlugin_ImportDlg::enterEvent(QEvent*) { - if (!mainFrame()->GroupConstructors->isEnabled()) - ActivateThisDialog(); + if (!mainFrame()->GroupConstructors->isEnabled()) + ActivateThisDialog(); } //================================================================================= // function : createOperation // purpose : //================================================================================= -GEOM::GEOM_IOperations_ptr ImportExportGUI_ImportXAODlg::createOperation() +GEOM::GEOM_IOperations_ptr XAOPlugin_ImportDlg::createOperation() { - return getGeomEngine()->GetIInsertOperations(getStudyId()); + return getGeomEngine()->GetPluginOperations( getStudyId(), "XAOPluginEngine" ); } //================================================================================= // function : isValid // purpose : //================================================================================= -bool ImportExportGUI_ImportXAODlg::isValid(QString& msg) +bool XAOPlugin_ImportDlg::isValid(QString& msg) { - // check file name - if (ledFileName->text().isEmpty()) - return false; + // check file name + if (ledFileName->text().isEmpty()) + return false; - return true; + return true; } //================================================================================= // function : execute // purpose : //================================================================================= -bool ImportExportGUI_ImportXAODlg::execute() +bool XAOPlugin_ImportDlg::execute() { - bool res = false; + bool res = false; - QString fileName = ledFileName->text(); - GEOM::GEOM_Object_var shape; - GEOM::ListOfGO_var groups, subShapes; - GEOM::ListOfFields_var fields; + QString fileName = ledFileName->text(); + GEOM::GEOM_Object_var shape; + GEOM::ListOfGO_var groups, subShapes; + GEOM::ListOfFields_var fields; - GEOM::GEOM_IInsertOperations_var ieOp = GEOM::GEOM_IInsertOperations::_narrow(getOperation()); - res = ieOp->ImportXAO(fileName.toUtf8().constData(), shape, subShapes, groups, fields); + GEOM::IXAOOperations_var ieOp = GEOM::IXAOOperations::_narrow(getOperation()); + res = ieOp->ImportXAO(fileName.toUtf8().constData(), shape, subShapes, groups, fields); - if (!shape->_is_nil()) + if (!shape->_is_nil()) + { + m_mainShape = shape; + } + else + { + m_mainShape = NULL; + } + + if (m_mainShape != NULL) + { + QStringList anEntryList; + anEntryList << addInStudy(m_mainShape, m_mainShape->GetName()); + for (int i = 0; i < subShapes->length(); i++) { - m_mainShape = shape; + addInStudy(subShapes[i].in(), subShapes[i]->GetName()); } - else + for (int i = 0; i < groups->length(); i++) { - m_mainShape = NULL; + addInStudy(groups[i].in(), groups[i]->GetName()); + } + for (int i = 0; i < fields->length(); i++) + { + addFieldInStudy(fields[i].in(), m_mainShape); } - if (m_mainShape != NULL) - { - QStringList anEntryList; - anEntryList << addInStudy(m_mainShape, m_mainShape->GetName()); - - for (int i = 0; i < subShapes->length(); i++) - { - addInStudy(subShapes[i].in(), subShapes[i]->GetName()); - } - for (int i = 0; i < groups->length(); i++) - { - addInStudy(groups[i].in(), groups[i]->GetName()); - } - for (int i = 0; i < fields->length(); i++) - { - addFieldInStudy(fields[i].in(), m_mainShape); - } - - updateObjBrowser(); - if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) { - LightApp_Application* aLightApp = dynamic_cast( anApp ); - aLightApp->browseObjects( anEntryList ); - } + updateObjBrowser(); + if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) { + LightApp_Application* aLightApp = dynamic_cast( anApp ); + aLightApp->browseObjects( anEntryList ); } + } - return res; + return res; } -QString ImportExportGUI_ImportXAODlg::addFieldInStudy( GEOM::GEOM_Field_ptr theField, GEOM::GEOM_Object_ptr theFather) +QString XAOPlugin_ImportDlg::addFieldInStudy( GEOM::GEOM_Field_ptr theField, GEOM::GEOM_Object_ptr theFather) { if ( !hasCommand() ) return QString(); @@ -319,7 +328,7 @@ QString ImportExportGUI_ImportXAODlg::addFieldInStudy( GEOM::GEOM_Field_ptr theF for (int i = 0; i < steps->length(); ++i) { GEOM::GEOM_FieldStep_ptr step = theField->GetStep(steps[i]); - QString stepName = (tr("STEP") + " %1 %2").arg( step->GetID() ).arg( step->GetStamp() ); + QString stepName = (tr("XAOPLUGIN_STEP") + " %1 %2").arg( step->GetID() ).arg( step->GetStamp() ); SALOMEDS::SObject_wrap aSOField = getGeomEngine()->AddInStudy( aStudyDS, step, stepName.toLatin1().constData(), theField ); } @@ -329,22 +338,22 @@ QString ImportExportGUI_ImportXAODlg::addFieldInStudy( GEOM::GEOM_Field_ptr theF return anEntry; } -GEOM::GEOM_Object_ptr ImportExportGUI_ImportXAODlg::getFather(GEOM::GEOM_Object_ptr object) +GEOM::GEOM_Object_ptr XAOPlugin_ImportDlg::getFather(GEOM::GEOM_Object_ptr object) { - GEOM::GEOM_Object_var fatherObj; - if (object->GetType() != GEOM_IMPORT && m_mainShape != NULL) - { - //GEOM::GEOM_IGroupOperations_var groupOper = getGeomEngine()->GetIGroupOperations(getStudyId()); - //fatherObj = groupOper->GetMainShape(object); - fatherObj = m_mainShape; - } - return fatherObj._retn(); + GEOM::GEOM_Object_var fatherObj; + if (object->GetType() != GEOM_IMPORT && m_mainShape != NULL) + { + //GEOM::GEOM_IGroupOperations_var groupOper = getGeomEngine()->GetIGroupOperations(getStudyId()); + //fatherObj = groupOper->GetMainShape(object); + fatherObj = m_mainShape; + } + return fatherObj._retn(); } -QString ImportExportGUI_ImportXAODlg::getObjectName(GEOM::GEOM_Object_ptr object) const +QString XAOPlugin_ImportDlg::getObjectName(GEOM::GEOM_Object_ptr object) const { - if (object->_is_nil()) - return QString::null; - return object->GetName(); + if (object->_is_nil()) + return QString::null; + return object->GetName(); } diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h b/src/XAOPlugin/XAOPlugin_ImportDlg.h similarity index 50% rename from src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h rename to src/XAOPlugin/XAOPlugin_ImportDlg.h index 61ceffda1..2f32db08a 100644 --- a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h +++ b/src/XAOPlugin/XAOPlugin_ImportDlg.h @@ -17,60 +17,52 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef IMPORTEXPORTGUI_EXPORTXAODLG_H -#define IMPORTEXPORTGUI_EXPORTXAODLG_H +#ifndef XAOPlugin_ImportDlg_H +#define XAOPlugin_ImportDlg_H -#include -#include +// GEOM includes +#include "GEOMBase_Skeleton.h" class QLineEdit; class QButtonGroup; class QListWidget; -//class ImportExportGUI_1Sel1LineEdit2ListWidget; - //================================================================================= -// class : ImportExportGUI_ExportXAODlg +// class : XAOPlugin_ImportDlg // purpose : //================================================================================= -class ImportExportGUI_ExportXAODlg: public GEOMBase_Skeleton +class XAOPlugin_ImportDlg: public GEOMBase_Skeleton { - Q_OBJECT + Q_OBJECT public: - ImportExportGUI_ExportXAODlg(GeometryGUI*, QWidget* = 0); - ~ImportExportGUI_ExportXAODlg(); + XAOPlugin_ImportDlg(GeometryGUI*, QWidget* = 0); + ~XAOPlugin_ImportDlg(); protected: - // redefined from GEOMBase_Helper - virtual GEOM::GEOM_IOperations_ptr createOperation(); - virtual bool isValid(QString&); - virtual bool execute(); + // redefined from GEOMBase_Helper + virtual GEOM::GEOM_IOperations_ptr createOperation(); + virtual bool isValid( QString& ); + virtual bool execute(); + virtual GEOM::GEOM_Object_ptr getFather( GEOM::GEOM_Object_ptr object ); + virtual QString getObjectName( GEOM::GEOM_Object_ptr object ) const; + virtual QString addFieldInStudy( GEOM::GEOM_Field_ptr theField, + GEOM::GEOM_Object_ptr theFather ); private: - void Init(); - void enterEvent(QEvent*); - void processObject(); + void Init(); + void enterEvent(QEvent*); private: - GEOM::GEOM_Object_var m_mainObj; - QList m_groups; - QList m_fields; - QLineEdit* ledShape; - QLineEdit* ledFileName; - QLineEdit* ledAuthor; - QListWidget* lstGroups; - QListWidget* lstFields; - QPushButton* btnShapeSelect; - QPushButton* btnFileSelect; + QLineEdit* ledFileName; + QPushButton* btnFileSelect; + GEOM::GEOM_Object_var m_mainShape; private slots: - void ClickOnOk(); - bool ClickOnApply(); - void ActivateThisDialog(); - void SelectionIntoArgument(); - void SetEditCurrentArgument(); - void btnFileSelectClicked(); + void ClickOnOk(); + bool ClickOnApply(); + void ActivateThisDialog(); + void btnFileSelectClicked(); }; -#endif // IMPORTEXPORTGUI_EXPORTXAODLG_H +#endif // XAOPlugin_ImportDlg_H diff --git a/src/XAOPlugin/XAOPlugin_OperationsCreator.cxx b/src/XAOPlugin/XAOPlugin_OperationsCreator.cxx new file mode 100644 index 000000000..21827c0be --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_OperationsCreator.cxx @@ -0,0 +1,66 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// internal includes +#include "XAOPlugin_OperationsCreator.hxx" +#include "XAOPlugin_IOperations_i.hh" +#include "XAOPlugin_IOperations.hxx" +#include "XAOPlugin_Driver.hxx" +#include "XAOPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// OCCT includes +#include + +std::map XAOPlugin_OperationsCreator::_mapOfOperations; + +XAOPlugin_OperationsCreator::XAOPlugin_OperationsCreator() +{ + // Register drivers + TFunction_DriverTable::Get()->AddDriver( XAOPlugin_Driver::GetID(), + new XAOPlugin_Driver() ); + + // Register callback + GEOMImpl_IECallBack::Register( "XAO", new XAOPlugin_IECallBack() ); +} + +XAOPlugin_OperationsCreator::~XAOPlugin_OperationsCreator() +{ +} + +GEOM_IOperations_i* XAOPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "XAOPlugin_OperationsCreator::Create" ); + return new XAOPlugin_IOperations_i( thePOA, theEngine, get( theGenImpl, theStudyId ) ); +} + +XAOPlugin_IOperations* XAOPlugin_OperationsCreator::get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ) +{ + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) + _mapOfOperations[theStudyId] = new XAOPlugin_IOperations( theGenImpl, theStudyId ); + return _mapOfOperations[theStudyId]; +} diff --git a/src/XAOPlugin/XAOPlugin_OperationsCreator.hxx b/src/XAOPlugin/XAOPlugin_OperationsCreator.hxx new file mode 100755 index 000000000..d90589d52 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_OperationsCreator.hxx @@ -0,0 +1,57 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _GEOM_XAOPlugin_OperationsCreator_HXX_ +#define _GEOM_XAOPlugin_OperationsCreator_HXX_ + +// internal includes +#include "XAOPlugin_Engine.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +class XAOPlugin_IOperations; + +//===================================================================== +// Operations creator +//===================================================================== +class XAOPLUGINENGINE_EXPORT XAOPlugin_OperationsCreator : public GEOM_GenericOperationsCreator +{ +public: + XAOPlugin_OperationsCreator(); + ~XAOPlugin_OperationsCreator(); + + GEOM_IOperations_i* Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ); +private: + static XAOPlugin_IOperations* get( ::GEOMImpl_Gen* theGenImpl, + int theStudyId ); + +private: + static std::map _mapOfOperations; + + friend class XAOPlugin_IECallBack; +}; + +#endif diff --git a/src/XAOPlugin/XAOPlugin_images.ts b/src/XAOPlugin/XAOPlugin_images.ts new file mode 100644 index 000000000..48e672f7f --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_images.ts @@ -0,0 +1,16 @@ + + + + + @default + + XAOPLUGIN_EXPORT_ICON + exportxao.png + + + XAOPLUGIN_IMPORT_ICON + importxao.png + + + + diff --git a/src/XAOPlugin/XAOPlugin_msg_en.ts b/src/XAOPlugin/XAOPlugin_msg_en.ts new file mode 100644 index 000000000..c37ffd620 --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_msg_en.ts @@ -0,0 +1,105 @@ + + + + + @default + + MEN_EXPORTXAO + XAO + + + TOP_EXPORTXAO + Export XAO + + + STB_EXPORTXAO + Export XAO + + + MEN_IMPORTXAO + XAO + + + TOP_IMPORTXAO + Import XAO + + + STB_IMPORTXAO + Import XAO + + + XAOPLUGIN_IMPORT_SELECT + Import from XAO + + + XAOPLUGIN_EXPORT_SELECT + Export to XAO + + + XAOPLUGIN_FILES + XAO files (*.xao) + + + + XAOPlugin_ExportDlg + + XAOPLUGIN_EXPORT_TITLE + Export XAO + + + XAOPLUGIN_EXPORTXAO + Export XAO + + + XAOPLUGIN_EXPORT_INGSHAPE + Shape + + + XAOPLUGIN_EXPORT_FILENAME + File Name + + + XAOPLUGIN_EXPORT_AUTHOR + Author + + + XAOPLUGIN_EXPORT_LGROUPS + Groups + + + XAOPLUGIN_EXPORT_LFIELDS + Fields + + + + XAOPlugin_ImportDlg + + XAOPLUGIN_IMPORT_TITLE + Import XAO + + + XAOPLUGIN_IMPORTXAO + Import XAO + + + XAOPLUGIN_IMPORT_INGSHAPE + Shape + + + XAOPLUGIN_IMPORT_FILENAME + File Name + + + XAOPLUGIN_IMPORT_LGROUPS + Groups + + + XAOPLUGIN_IMPORT_LFIELDS + Fields + + + XAOPLUGIN_STEP + Step + + + diff --git a/src/XAOPlugin/XAOPlugin_msg_fr.ts b/src/XAOPlugin/XAOPlugin_msg_fr.ts new file mode 100644 index 000000000..7d3a6deec --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_msg_fr.ts @@ -0,0 +1,105 @@ + + + + + @default + + MEN_EXPORTXAO + XAO + + + TOP_EXPORTXAO + Exporter XAO + + + STB_EXPORTXAO + Exporter XAO + + + MEN_IMPORTXAO + XAO + + + TOP_IMPORTXAO + Importer XAO + + + STB_IMPORTXAO + Importer XAO + + + XAOPLUGIN_IMPORT_SELECT + Import XAO + + + XAOPLUGIN_EXPORT_SELECT + Export XAO + + + XAOPLUGIN_FILES + Fichiers XAO (*.xao) + + + + XAOPlugin_ExportDlg + + XAOPLUGIN_EXPORT_TITLE + Export XAO + + + XAOPLUGIN_EXPORTXAO + Export XAO + + + XAOPLUGIN_EXPORT_INGSHAPE + Objet + + + XAOPLUGIN_EXPORT_FILENAME + Fichier + + + XAOPLUGIN_EXPORT_AUTHOR + Auteur + + + XAOPLUGIN_EXPORT_LGROUPS + Groupes + + + XAOPLUGIN_EXPORT_LFIELDS + Champs + + + + XAOPlugin_ImportDlg + + XAOPLUGIN_IMPORT_TITLE + Import XAO + + + XAOPLUGIN_IMPORTXAO + Import XAO + + + XAOPLUGIN_IMPORT_INGSHAPE + Objet + + + XAOPLUGIN_IMPORT_FILENAME + Fichier + + + XAOPLUGIN_IMPORT_LGROUPS + Groupes + + + XAOPLUGIN_IMPORT_LFIELDS + Champs + + + XAOPLUGIN_STEP + Pas + + + \ No newline at end of file diff --git a/src/XAOPlugin/XAOPlugin_msg_ja.ts b/src/XAOPlugin/XAOPlugin_msg_ja.ts new file mode 100644 index 000000000..307f0146b --- /dev/null +++ b/src/XAOPlugin/XAOPlugin_msg_ja.ts @@ -0,0 +1,105 @@ + + + + + @default + + MEN_EXPORTXAO + エクスポートしました。 + + + TOP_EXPORTXAO + エクスポートしました。 + + + STB_EXPORTXAO + ソテーした形式でフォームをエクスポートします。 + + + MEN_IMPORTXAO + インポートしました。 + + + TOP_IMPORTXAO + インポートしました。 + + + STB_IMPORTXAO + ソテーしたフォームをインポートします。 + + + XAOPLUGIN_IMPORT_SELECT + XAOからインポート + + + XAOPLUGIN_EXPORT_SELECT + エクスポートしました。 + + + XAOPLUGIN_FILES + ファイルした (*.xao) + + + + XAOPlugin_ExportDlg + + XAOPLUGIN_EXPORT_TITLE + エクスポートしました。 + + + XAOPLUGIN_EXPORTXAO + エクスポートしました。 + + + XAOPLUGIN_EXPORT_INGSHAPE + オブジェクト + + + XAOPLUGIN_EXPORT_FILENAME + ファイル + + + XAOPLUGIN_EXPORT_AUTHOR + 作成者 + + + XAOPLUGIN_EXPORT_LGROUPS + グループ + + + XAOPLUGIN_EXPORT_LFIELDS + フィールド + + + + XAOPlugin_ImportDlg + + XAOPLUGIN_IMPORT_TITLE + インポートしました。 + + + XAOPLUGIN_IMPORTXAO + インポートしました。 + + + XAOPLUGIN_IMPORT_INGSHAPE + オブジェクト + + + XAOPLUGIN_IMPORT_FILENAME + ファイル + + + XAOPLUGIN_IMPORT_LGROUPS + グループ + + + XAOPLUGIN_IMPORT_LFIELDS + フィールド + + + XAOPLUGIN_STEP + Step + + + \ No newline at end of file From b5e1dcdd78a65f6747d02786a193b0d62c7d575c Mon Sep 17 00:00:00 2001 From: vsr Date: Mon, 22 Sep 2014 11:14:42 +0400 Subject: [PATCH 100/118] Add missing library to FindGEOM() procedure --- adm_local/cmake_files/FindGEOM.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/adm_local/cmake_files/FindGEOM.cmake b/adm_local/cmake_files/FindGEOM.cmake index 0d408449a..1c99fe09f 100644 --- a/adm_local/cmake_files/FindGEOM.cmake +++ b/adm_local/cmake_files/FindGEOM.cmake @@ -31,6 +31,7 @@ FIND_LIBRARY(GEOM_GEOMEngine GEOMEngine ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_SupervEngine GEOM_SupervEngine ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_GEOMSketcher GEOMSketcher ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_SalomeIDLGEOM SalomeIDLGEOM ${GEOM_ROOT_DIR}/lib/salome) +FIND_LIBRARY(GEOM_SalomeIDLGEOMSuperv SalomeIDLGEOMSuperv ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_SalomeIDLSTLPlugin SalomeIDLSTLPlugin ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_SalomeIDLBREPPlugin SalomeIDLBREPPlugin ${GEOM_ROOT_DIR}/lib/salome) FIND_LIBRARY(GEOM_SalomeIDLSTEPPlugin SalomeIDLSTEPPlugin ${GEOM_ROOT_DIR}/lib/salome) From a1f6e9582ddccfe6117b2f8803c2618fa18b578f Mon Sep 17 00:00:00 2001 From: vsr Date: Mon, 22 Sep 2014 11:41:20 +0400 Subject: [PATCH 101/118] 0022616: [CEA 1038] Improve the quality of stl and vtk exports Additional modification to obsolete ImportFile() function, to return list of GEOM::GEOM_BaseObject, instead of list of GEOM::GEOM_Object, to properly handle fields. --- idl/GEOM_Gen.idl | 2 +- src/GEOM_I/GEOM_Gen_i.cc | 2 +- src/GEOM_I/GEOM_IInsertOperations_i.cc | 8 ++++---- src/GEOM_I/GEOM_IInsertOperations_i.hh | 4 ++-- src/GEOM_I_Superv/GEOM_Superv_i.cc | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 149bf9674..076f4fed4 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -3720,7 +3720,7 @@ module GEOM * file length unit will be ignored (set to 'meter') and result model will be scaled. * \return List of GEOM_Object, containing the created shape and groups of materials. */ - ListOfGO ImportFile (in string theFileName, in string theFormatName); + ListOfGBO ImportFile (in string theFileName, in string theFormatName); /*! * \brief Deprecated method. Use ReadValue (from the corresponding plugin) instead. diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 8069f40fe..e939d30f1 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -2967,7 +2967,7 @@ Engines::ListOfIdentifiers* GEOM_Gen_i::importData( aFile.write(aBuffer, aFileStream->length()); aFile.close(); - GEOM::ListOfGO_var aObjects = aInsOp->ImportFile(aFullPath.c_str(), "XAO"); + GEOM::ListOfGBO_var aObjects = aInsOp->ImportFile(aFullPath.c_str(), "XAO"); if ( aObjects->length() > 0 && aInsOp->IsDone() ) { aResult->length(aObjects->length()); diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.cc b/src/GEOM_I/GEOM_IInsertOperations_i.cc index 476e29ad7..5de4d1f23 100644 --- a/src/GEOM_I/GEOM_IInsertOperations_i.cc +++ b/src/GEOM_I/GEOM_IInsertOperations_i.cc @@ -33,7 +33,7 @@ #include "Utils_ExceptHandlers.hxx" #include "GEOM_Engine.hxx" -#include "GEOM_Object.hxx" +#include "GEOM_BaseObject.hxx" #include @@ -121,11 +121,11 @@ void GEOM_IInsertOperations_i::Export * ImportFile */ //============================================================================= -GEOM::ListOfGO* GEOM_IInsertOperations_i::ImportFile +GEOM::ListOfGBO* GEOM_IInsertOperations_i::ImportFile (const char* theFileName, const char* theFormatName) { - GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; + GEOM::ListOfGBO_var aSeq = new GEOM::ListOfGBO; //Set a not done flag GetOperations()->SetNotDone(); @@ -142,7 +142,7 @@ GEOM::ListOfGO* GEOM_IInsertOperations_i::ImportFile aSeq->length(aLength); for (Standard_Integer i = 1; i <= aLength; i++) - aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i))); + aSeq[i-1] = GetBaseObject(Handle(GEOM_BaseObject)::DownCast(aHSeq->Value(i))); return aSeq._retn(); } diff --git a/src/GEOM_I/GEOM_IInsertOperations_i.hh b/src/GEOM_I/GEOM_IInsertOperations_i.hh index e06ffa08e..4a2b4f2cc 100644 --- a/src/GEOM_I/GEOM_IInsertOperations_i.hh +++ b/src/GEOM_I/GEOM_IInsertOperations_i.hh @@ -49,8 +49,8 @@ class GEOM_I_EXPORT GEOM_IInsertOperations_i : const char* theFileName, const char* theFormatName); - GEOM::ListOfGO* ImportFile (const char* theFileName, - const char* theFormatName); + GEOM::ListOfGBO* ImportFile (const char* theFileName, + const char* theFormatName); char* ReadValue (const char* theFileName, const char* theFormatName, diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index 9070d8e9b..867a5c6f7 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -1715,15 +1715,15 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::ImportFile (const char* theFileName, beginService( " GEOM_Superv_i::ImportFile" ); MESSAGE("GEOM_Superv_i::ImportFile"); getInsOp(); - GEOM::ListOfGO* aSeq = myInsOp->ImportFile(theFileName, theFormatName); - GEOM::GEOM_Object_ptr anObj; + GEOM::ListOfGBO_var aSeq = myInsOp->ImportFile(theFileName, theFormatName); + GEOM::GEOM_Object_var anObj; if (aSeq->length() > 0) { - anObj = aSeq->operator[](0); + anObj = GEOM::GEOM_Object::_narrow(aSeq[0]); } endService( " GEOM_Superv_i::ImportFile" ); - return anObj; + return anObj._retn(); } //============================= TransformOperations =========================== From 95e15e30c25e267254f5c9947788882a2b8b107c Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 23 Sep 2014 10:09:30 +0400 Subject: [PATCH 102/118] Fix compilation errors --- src/GEOMUtils/GEOMUtils_XmlHandler.cxx | 6 ++++++ src/VTKPlugin/CMakeLists.txt | 1 + 2 files changed, 7 insertions(+) diff --git a/src/GEOMUtils/GEOMUtils_XmlHandler.cxx b/src/GEOMUtils/GEOMUtils_XmlHandler.cxx index 00ad15878..b3de3f351 100644 --- a/src/GEOMUtils/GEOMUtils_XmlHandler.cxx +++ b/src/GEOMUtils/GEOMUtils_XmlHandler.cxx @@ -22,6 +22,12 @@ #include #include +#ifdef WIN32 +#include +#else +#include +#endif + //#define MYDEBUG namespace diff --git a/src/VTKPlugin/CMakeLists.txt b/src/VTKPlugin/CMakeLists.txt index afab5da2f..427a48d49 100644 --- a/src/VTKPlugin/CMakeLists.txt +++ b/src/VTKPlugin/CMakeLists.txt @@ -27,6 +27,7 @@ ENDIF() # additional include directories INCLUDE_DIRECTORIES( ${CAS_INCLUDE_DIRS} + ${VTK_INCLUDE_DIRS} ${KERNEL_INCLUDE_DIRS} ${PROJECT_BINARY_DIR}/idl ${PROJECT_SOURCE_DIR}/src/GEOMAlgo From 76d199bd790d9c34fc847cfbc5d9950e7e1a32c8 Mon Sep 17 00:00:00 2001 From: ana Date: Tue, 23 Sep 2014 15:48:25 +0400 Subject: [PATCH 103/118] Win32 compatibility --- .../AdvancedEngine_DividedDiskDriver.hxx | 4 +--- src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx | 4 +--- .../AdvancedEngine_SmoothingSurfaceDriver.hxx | 4 +--- src/BREPPlugin/BREPPlugin_Engine.hxx | 2 +- src/BREPPlugin/BREPPlugin_ExportDriver.hxx | 5 +---- src/BREPPlugin/BREPPlugin_ImportDriver.hxx | 5 +---- src/BREPPlugin/CMakeLists.txt | 5 +++++ src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx | 2 +- src/GEOMImpl/GEOMImpl_IECallBack.hxx | 4 ++-- src/GEOMUtils/GEOMUtils_XmlHandler.hxx | 10 +++++----- src/IGESPlugin/CMakeLists.txt | 5 +++++ src/IGESPlugin/IGESPlugin_Engine.hxx | 2 +- src/IGESPlugin/IGESPlugin_ExportDriver.hxx | 5 +---- src/IGESPlugin/IGESPlugin_ImportDriver.hxx | 5 +---- src/STEPPlugin/CMakeLists.txt | 8 +++++++- src/STEPPlugin/STEPPlugin_ExportDriver.hxx | 5 +---- src/STEPPlugin/STEPPlugin_ImportDriver.hxx | 5 +---- src/STLPlugin/CMakeLists.txt | 5 +++++ src/STLPlugin/STLPlugin_ExportDriver.hxx | 5 +---- src/STLPlugin/STLPlugin_ImportDriver.hxx | 5 +---- src/VTKPlugin/CMakeLists.txt | 7 ++++++- src/VTKPlugin/VTKPlugin_ExportDriver.hxx | 5 +---- src/XAOPlugin/CMakeLists.txt | 5 +++++ src/XAOPlugin/XAOPlugin_Driver.hxx | 5 +---- 24 files changed, 56 insertions(+), 61 deletions(-) diff --git a/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.hxx b/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.hxx index f35b2811a..9bda25fc4 100644 --- a/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.hxx +++ b/src/AdvancedEngine/AdvancedEngine_DividedDiskDriver.hxx @@ -23,8 +23,6 @@ #ifndef _AdvancedEngine_DividedDiskDriver_HXX #define _AdvancedEngine_DividedDiskDriver_HXX -#include "AdvancedEngine.hxx" - #include "GEOM_BaseDriver.hxx" #include @@ -37,7 +35,7 @@ class gp_Ax3; DEFINE_STANDARD_HANDLE( AdvancedEngine_DividedDiskDriver, GEOM_BaseDriver ); -class ADVANCEDENGINE_EXPORT AdvancedEngine_DividedDiskDriver : public GEOM_BaseDriver +class AdvancedEngine_DividedDiskDriver : public GEOM_BaseDriver { public: // Methods PUBLIC diff --git a/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx b/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx index cba5d1492..68e6c254e 100644 --- a/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx +++ b/src/AdvancedEngine/AdvancedEngine_PipeTShapeDriver.hxx @@ -20,8 +20,6 @@ #ifndef _AdvancedEngine_PipeTShapeDriver_HXX #define _AdvancedEngine_PipeTShapeDriver_HXX -#include "AdvancedEngine.hxx" - #include "GEOM_BaseDriver.hxx" #include "GEOMAlgo_State.hxx" @@ -32,7 +30,7 @@ DEFINE_STANDARD_HANDLE( AdvancedEngine_PipeTShapeDriver, GEOM_BaseDriver ); -class ADVANCEDENGINE_EXPORT AdvancedEngine_PipeTShapeDriver : public GEOM_BaseDriver +class AdvancedEngine_PipeTShapeDriver : public GEOM_BaseDriver { public: // Methods PUBLIC diff --git a/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.hxx b/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.hxx index fd5f28bec..2e2015fe1 100644 --- a/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.hxx +++ b/src/AdvancedEngine/AdvancedEngine_SmoothingSurfaceDriver.hxx @@ -20,8 +20,6 @@ #ifndef _AdvancedEngine_SmoothingSurfaceDriver_HXX #define _AdvancedEngine_SmoothingSurfaceDriver_HXX -#include "AdvancedEngine.hxx" - #include "GEOM_BaseDriver.hxx" #include @@ -30,7 +28,7 @@ DEFINE_STANDARD_HANDLE( AdvancedEngine_SmoothingSurfaceDriver, GEOM_BaseDriver ); -class ADVANCEDENGINE_EXPORT AdvancedEngine_SmoothingSurfaceDriver : public GEOM_BaseDriver +class AdvancedEngine_SmoothingSurfaceDriver : public GEOM_BaseDriver { public: // Methods PUBLIC diff --git a/src/BREPPlugin/BREPPlugin_Engine.hxx b/src/BREPPlugin/BREPPlugin_Engine.hxx index e37624924..3dde5d56b 100755 --- a/src/BREPPlugin/BREPPlugin_Engine.hxx +++ b/src/BREPPlugin/BREPPlugin_Engine.hxx @@ -21,7 +21,7 @@ #define _BREPPLUGIN_ENGINE_HXX_ #ifdef WIN32 - #if defined BREPPLUGINENGINE_EXPORTS || defined BREPPLUGINENGINE_EXPORTS + #if defined BREPPluginEngine_EXPORTS #define BREPPLUGINENGINE_EXPORT __declspec( dllexport ) #else #define BREPPLUGINENGINE_EXPORT __declspec( dllimport ) diff --git a/src/BREPPlugin/BREPPlugin_ExportDriver.hxx b/src/BREPPlugin/BREPPlugin_ExportDriver.hxx index fbd7dd8f5..00c6dbdf3 100644 --- a/src/BREPPlugin/BREPPlugin_ExportDriver.hxx +++ b/src/BREPPlugin/BREPPlugin_ExportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _BREPPlugin_ExportDriver_HXX #define _BREPPlugin_ExportDriver_HXX -// internal includes -#include "BREPPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( BREPPlugin_ExportDriver, GEOM_BaseDriver ); -class BREPPLUGINENGINE_EXPORT BREPPlugin_ExportDriver : public GEOM_BaseDriver +class BREPPlugin_ExportDriver : public GEOM_BaseDriver { public: BREPPlugin_ExportDriver(); diff --git a/src/BREPPlugin/BREPPlugin_ImportDriver.hxx b/src/BREPPlugin/BREPPlugin_ImportDriver.hxx index 1f043659b..e6a2940d0 100644 --- a/src/BREPPlugin/BREPPlugin_ImportDriver.hxx +++ b/src/BREPPlugin/BREPPlugin_ImportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _BREPPlugin_ImportDriver_HXX #define _BREPPlugin_ImportDriver_HXX -// internal includes -#include "BREPPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( BREPPlugin_ImportDriver, GEOM_BaseDriver ); -class BREPPLUGINENGINE_EXPORT BREPPlugin_ImportDriver : public GEOM_BaseDriver +class BREPPlugin_ImportDriver : public GEOM_BaseDriver { public: BREPPlugin_ImportDriver(); diff --git a/src/BREPPlugin/CMakeLists.txt b/src/BREPPlugin/CMakeLists.txt index b9e443dc8..34a88046b 100644 --- a/src/BREPPlugin/CMakeLists.txt +++ b/src/BREPPlugin/CMakeLists.txt @@ -50,8 +50,13 @@ ENDIF() # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} + ${OMNIORB_DEFINITIONS} ) +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + IF(SALOME_BUILD_GUI) ADD_DEFINITIONS( ${QT_DEFINITIONS} diff --git a/src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx b/src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx index c5c751b32..e547cb3ed 100644 --- a/src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IBaseIEOperations.hxx @@ -37,7 +37,7 @@ public: Standard_EXPORT ~GEOMImpl_IBaseIEOperations(); protected: - void MakeMaterialGroups(const Handle(GEOM_Object) &theObject, + Standard_EXPORT void MakeMaterialGroups(const Handle(GEOM_Object) &theObject, const Handle(TColStd_HSequenceOfTransient) &theSeq); Handle(GEOM_Object) MakeGroup diff --git a/src/GEOMImpl/GEOMImpl_IECallBack.hxx b/src/GEOMImpl/GEOMImpl_IECallBack.hxx index 890e879d2..a6c26b7e0 100644 --- a/src/GEOMImpl/GEOMImpl_IECallBack.hxx +++ b/src/GEOMImpl/GEOMImpl_IECallBack.hxx @@ -53,12 +53,12 @@ class GEOMImpl_IECallBack const TCollection_AsciiString& theFormatName, const TCollection_AsciiString& theParameterName ); - static void Register( const TCollection_AsciiString& theFormatName, GEOMImpl_IECallBack* theCallBack ); + Standard_EXPORT static void Register( const TCollection_AsciiString& theFormatName, GEOMImpl_IECallBack* theCallBack ); static GEOMImpl_IECallBack* GetCallBack( const TCollection_AsciiString& theFormatName ); protected: - GEOMImpl_Gen* GetEngine(); + Standard_EXPORT GEOMImpl_Gen* GetEngine(); private: static std::map myCallBacks; diff --git a/src/GEOMUtils/GEOMUtils_XmlHandler.hxx b/src/GEOMUtils/GEOMUtils_XmlHandler.hxx index e5952cff0..4617fe7f7 100644 --- a/src/GEOMUtils/GEOMUtils_XmlHandler.hxx +++ b/src/GEOMUtils/GEOMUtils_XmlHandler.hxx @@ -17,18 +17,18 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include - #ifndef _GEOMUtils_XmlHandler_HXX_ #define _GEOMUtils_XmlHandler_HXX_ +#include + #include #include namespace GEOMUtils { //! Plugin action data - struct ActionData + struct Standard_EXPORT ActionData { std::string label; //!< unique ID std::string icon; //!< icon @@ -39,7 +39,7 @@ namespace GEOMUtils }; //! Plugin data - struct PluginData + struct Standard_EXPORT PluginData { std::string name; //!< plugin name std::string serverLib; //!< engine library @@ -50,7 +50,7 @@ namespace GEOMUtils //! Plugins information typedef std::list PluginInfo; - PluginInfo ReadPluginInfo(); + Standard_EXPORT PluginInfo ReadPluginInfo(); } #endif // _GEOMUtils_XmlHandler_HXX_ diff --git a/src/IGESPlugin/CMakeLists.txt b/src/IGESPlugin/CMakeLists.txt index caa229704..ee240841d 100644 --- a/src/IGESPlugin/CMakeLists.txt +++ b/src/IGESPlugin/CMakeLists.txt @@ -50,8 +50,13 @@ ENDIF() # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} + ${OMNIORB_DEFINITIONS} ) +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + IF(SALOME_BUILD_GUI) ADD_DEFINITIONS( ${QT_DEFINITIONS} diff --git a/src/IGESPlugin/IGESPlugin_Engine.hxx b/src/IGESPlugin/IGESPlugin_Engine.hxx index 5d01abe8c..cb20e5463 100755 --- a/src/IGESPlugin/IGESPlugin_Engine.hxx +++ b/src/IGESPlugin/IGESPlugin_Engine.hxx @@ -21,7 +21,7 @@ #define _GEOM_IGESPLUGIN_ENGINE_HXX_ #ifdef WIN32 - #if defined IGESPLUGINENGINE_EXPORTS || defined IGESPLUGINENGINE_EXPORTS + #if defined IGESPluginEngine_EXPORTS #define IGESPLUGINENGINE_EXPORT __declspec( dllexport ) #else #define IGESPLUGINENGINE_EXPORT __declspec( dllimport ) diff --git a/src/IGESPlugin/IGESPlugin_ExportDriver.hxx b/src/IGESPlugin/IGESPlugin_ExportDriver.hxx index 353324deb..53d9be6c5 100644 --- a/src/IGESPlugin/IGESPlugin_ExportDriver.hxx +++ b/src/IGESPlugin/IGESPlugin_ExportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _IGESPlugin_ExportDriver_HXX #define _IGESPlugin_ExportDriver_HXX -// internal includes -#include "IGESPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( IGESPlugin_ExportDriver, GEOM_BaseDriver ); -class IGESPLUGINENGINE_EXPORT IGESPlugin_ExportDriver : public GEOM_BaseDriver +class IGESPlugin_ExportDriver : public GEOM_BaseDriver { public: IGESPlugin_ExportDriver(); diff --git a/src/IGESPlugin/IGESPlugin_ImportDriver.hxx b/src/IGESPlugin/IGESPlugin_ImportDriver.hxx index 2ab850f85..0b12fa814 100644 --- a/src/IGESPlugin/IGESPlugin_ImportDriver.hxx +++ b/src/IGESPlugin/IGESPlugin_ImportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _IGESPlugin_ImportDriver_HXX #define _IGESPlugin_ImportDriver_HXX -// internal includes -#include "IGESPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( IGESPlugin_ImportDriver, GEOM_BaseDriver ); -class IGESPLUGINENGINE_EXPORT IGESPlugin_ImportDriver : public GEOM_BaseDriver +class IGESPlugin_ImportDriver : public GEOM_BaseDriver { public: IGESPlugin_ImportDriver(); diff --git a/src/STEPPlugin/CMakeLists.txt b/src/STEPPlugin/CMakeLists.txt index 71c1097dc..4d4db727c 100644 --- a/src/STEPPlugin/CMakeLists.txt +++ b/src/STEPPlugin/CMakeLists.txt @@ -50,8 +50,13 @@ ENDIF() # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} + ${OMNIORB_DEFINITIONS} ) - + +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + IF(SALOME_BUILD_GUI) ADD_DEFINITIONS( ${QT_DEFINITIONS} @@ -61,6 +66,7 @@ ENDIF() # libraries to link to SET(_link_engine_LIBRARIES ${CAS_TKSTEP} + ${CAS_TKSTEPBase} ${KERNEL_SALOMELocalTrace} ${KERNEL_OpUtil} SalomeIDLGEOM diff --git a/src/STEPPlugin/STEPPlugin_ExportDriver.hxx b/src/STEPPlugin/STEPPlugin_ExportDriver.hxx index 000226491..bf2acb873 100644 --- a/src/STEPPlugin/STEPPlugin_ExportDriver.hxx +++ b/src/STEPPlugin/STEPPlugin_ExportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _STEPPlugin_ExportDriver_HXX #define _STEPPlugin_ExportDriver_HXX -// internal includes -#include "STEPPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( STEPPlugin_ExportDriver, GEOM_BaseDriver ); -class STEPPLUGINENGINE_EXPORT STEPPlugin_ExportDriver : public GEOM_BaseDriver +class STEPPlugin_ExportDriver : public GEOM_BaseDriver { public: STEPPlugin_ExportDriver(); diff --git a/src/STEPPlugin/STEPPlugin_ImportDriver.hxx b/src/STEPPlugin/STEPPlugin_ImportDriver.hxx index a8c2b0cf0..40bb7b1be 100644 --- a/src/STEPPlugin/STEPPlugin_ImportDriver.hxx +++ b/src/STEPPlugin/STEPPlugin_ImportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _STEPPlugin_ImportDriver_HXX #define _STEPPlugin_ImportDriver_HXX -// internal includes -#include "STEPPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( STEPPlugin_ImportDriver, GEOM_BaseDriver ); -class STEPPLUGINENGINE_EXPORT STEPPlugin_ImportDriver : public GEOM_BaseDriver +class STEPPlugin_ImportDriver : public GEOM_BaseDriver { public: STEPPlugin_ImportDriver(); diff --git a/src/STLPlugin/CMakeLists.txt b/src/STLPlugin/CMakeLists.txt index 0b9420c3f..b4688f6b1 100644 --- a/src/STLPlugin/CMakeLists.txt +++ b/src/STLPlugin/CMakeLists.txt @@ -50,8 +50,13 @@ ENDIF() # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} + ${OMNIORB_DEFINITIONS} ) +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + IF(SALOME_BUILD_GUI) ADD_DEFINITIONS( ${QT_DEFINITIONS} diff --git a/src/STLPlugin/STLPlugin_ExportDriver.hxx b/src/STLPlugin/STLPlugin_ExportDriver.hxx index 4726a16d3..90eef7fb4 100644 --- a/src/STLPlugin/STLPlugin_ExportDriver.hxx +++ b/src/STLPlugin/STLPlugin_ExportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _STLPlugin_ExportDriver_HXX #define _STLPlugin_ExportDriver_HXX -// internal includes -#include "STLPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( STLPlugin_ExportDriver, GEOM_BaseDriver ); -class STLPLUGINENGINE_EXPORT STLPlugin_ExportDriver : public GEOM_BaseDriver +class STLPlugin_ExportDriver : public GEOM_BaseDriver { public: STLPlugin_ExportDriver(); diff --git a/src/STLPlugin/STLPlugin_ImportDriver.hxx b/src/STLPlugin/STLPlugin_ImportDriver.hxx index 8373e59d7..fb695b844 100644 --- a/src/STLPlugin/STLPlugin_ImportDriver.hxx +++ b/src/STLPlugin/STLPlugin_ImportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _STLPlugin_ImportDriver_HXX #define _STLPlugin_ImportDriver_HXX -// internal includes -#include "STLPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( STLPlugin_ImportDriver, GEOM_BaseDriver ); -class STLPLUGINENGINE_EXPORT STLPlugin_ImportDriver : public GEOM_BaseDriver +class STLPlugin_ImportDriver : public GEOM_BaseDriver { public: STLPlugin_ImportDriver(); diff --git a/src/VTKPlugin/CMakeLists.txt b/src/VTKPlugin/CMakeLists.txt index 427a48d49..d14424afe 100644 --- a/src/VTKPlugin/CMakeLists.txt +++ b/src/VTKPlugin/CMakeLists.txt @@ -52,8 +52,13 @@ ENDIF() # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} + ${OMNIORB_DEFINITIONS} ) - + +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + IF(SALOME_BUILD_GUI) ADD_DEFINITIONS( ${QT_DEFINITIONS} diff --git a/src/VTKPlugin/VTKPlugin_ExportDriver.hxx b/src/VTKPlugin/VTKPlugin_ExportDriver.hxx index cc055b9d9..b147c97d0 100644 --- a/src/VTKPlugin/VTKPlugin_ExportDriver.hxx +++ b/src/VTKPlugin/VTKPlugin_ExportDriver.hxx @@ -20,9 +20,6 @@ #ifndef _VTKPlugin_ExportDriver_HXX #define _VTKPlugin_ExportDriver_HXX -// internal includes -#include "VTKPlugin_Engine.hxx" - // GEOM includes #include "GEOM_BaseDriver.hxx" @@ -31,7 +28,7 @@ DEFINE_STANDARD_HANDLE( VTKPlugin_ExportDriver, GEOM_BaseDriver ); -class VTKPLUGINENGINE_EXPORT VTKPlugin_ExportDriver : public GEOM_BaseDriver +class VTKPlugin_ExportDriver : public GEOM_BaseDriver { public: VTKPlugin_ExportDriver(); diff --git a/src/XAOPlugin/CMakeLists.txt b/src/XAOPlugin/CMakeLists.txt index 7d24c4345..910c45b9c 100644 --- a/src/XAOPlugin/CMakeLists.txt +++ b/src/XAOPlugin/CMakeLists.txt @@ -52,8 +52,13 @@ ENDIF() # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} + ${OMNIORB_DEFINITIONS} ) +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + IF(SALOME_BUILD_GUI) ADD_DEFINITIONS( ${QT_DEFINITIONS} diff --git a/src/XAOPlugin/XAOPlugin_Driver.hxx b/src/XAOPlugin/XAOPlugin_Driver.hxx index 855b533d1..ea821cf3b 100644 --- a/src/XAOPlugin/XAOPlugin_Driver.hxx +++ b/src/XAOPlugin/XAOPlugin_Driver.hxx @@ -23,15 +23,12 @@ #ifndef _XAOPlugin_Driver_HXX #define _XAOPlugin_Driver_HXX -// internal includes -#include "XAOPlugin_Engine.hxx" - // OCCT includes #include DEFINE_STANDARD_HANDLE(XAOPlugin_Driver, TFunction_Driver); -class XAOPLUGINENGINE_EXPORT XAOPlugin_Driver: public TFunction_Driver +class XAOPlugin_Driver: public TFunction_Driver { public: XAOPlugin_Driver(); From f6c23ad0691f28c82559688bda1f56856429794f Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 23 Sep 2014 17:18:48 +0400 Subject: [PATCH 104/118] xmlCleanupParser should not be called from the application --- src/GEOMUtils/GEOMUtils_XmlHandler.cxx | 2 +- src/XAO/XAO_XaoExporter.cxx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GEOMUtils/GEOMUtils_XmlHandler.cxx b/src/GEOMUtils/GEOMUtils_XmlHandler.cxx index b3de3f351..a05371b1c 100644 --- a/src/GEOMUtils/GEOMUtils_XmlHandler.cxx +++ b/src/GEOMUtils/GEOMUtils_XmlHandler.cxx @@ -230,7 +230,7 @@ namespace GEOMUtils } // end root node xmlFreeDoc(doc); - xmlCleanupParser(); + //xmlCleanupParser();//vsr: xmlCleanupParser should not be called from the application } // end xml doc } #ifdef MYDEBUG diff --git a/src/XAO/XAO_XaoExporter.cxx b/src/XAO/XAO_XaoExporter.cxx index 9bd59eafb..f8229318a 100644 --- a/src/XAO/XAO_XaoExporter.cxx +++ b/src/XAO/XAO_XaoExporter.cxx @@ -310,7 +310,7 @@ namespace { parseXaoNode(doc, root, xaoObject); xmlFreeDoc(doc); // free document - xmlCleanupParser(); // free globals + //xmlCleanupParser(); // free globals //vsr: xmlCleanupParser should not be called from the application } void parseXaoNode(xmlDocPtr doc, xmlNodePtr xaoNode, Xao* xaoObject) From f4bb8ea64a1656b8cc8a714c1498ff45ac90b2fb Mon Sep 17 00:00:00 2001 From: vsr Date: Mon, 6 Oct 2014 15:30:58 +0400 Subject: [PATCH 105/118] Take into account merge of branch 'asl/hydro_porting_741' in GUI module. --- src/GEOMGUI/GEOM_Displayer.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index b8551a691..c68154970 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -164,7 +164,7 @@ namespace if ( aPixmap.IsNull() ) { QPixmap px(":images/default_texture.png"); if ( !px.isNull() ) - aPixmap = imageToPixmap( px.toImage() ); + aPixmap = OCCViewer_Utilities::imageToPixmap( px.toImage() ); } return aPixmap; } @@ -198,7 +198,7 @@ namespace if ( anImage.isNull() ) return NULL; - aPixmap = imageToPixmap( anImage ); + aPixmap = OCCViewer_Utilities::imageToPixmap( anImage ); aPixmapCacheMap.insert( thePath, aPixmap ); From 8866b5fcd5529bf033ebfb845dafdbaf33d3899c Mon Sep 17 00:00:00 2001 From: skv Date: Mon, 8 Sep 2014 16:07:16 +0400 Subject: [PATCH 106/118] 0022661: EDF GEOM: [HYDRO] Integration of the polyline editor in GEOM --- CMakeLists.txt | 23 +- doc/salome/examples/polyline.py | 48 + doc/salome/gui/GEOM/images/polyline_dlg.png | Bin 0 -> 27747 bytes .../GEOM/images/polyline_dlg_add_section.png | Bin 0 -> 14047 bytes .../GEOM/images/polyline_dlg_edit_section.png | Bin 0 -> 15222 bytes .../gui/GEOM/input/creating_basic_go.doc | 1 + .../gui/GEOM/input/creating_polyline.doc | 107 ++ doc/salome/gui/GEOM/input/tui_polyline.doc | 6 + idl/GEOM_Gen.idl | 80 +- src/CMakeLists.txt | 11 +- src/CurveCreator/CMakeLists.txt | 17 +- src/CurveCreator/CurveCreator.hxx | 35 +- src/CurveCreator/CurveCreator_Curve.cxx | 1016 ++++++++++- src/CurveCreator/CurveCreator_Curve.hxx | 293 ++- src/CurveCreator/CurveCreator_CurveEditor.cxx | 511 ------ src/CurveCreator/CurveCreator_CurveEditor.hxx | 166 -- src/CurveCreator/CurveCreator_Diff.cxx | 399 ++-- src/CurveCreator/CurveCreator_Diff.hxx | 82 +- src/CurveCreator/CurveCreator_Displayer.cxx | 64 + src/CurveCreator/CurveCreator_Displayer.hxx | 33 + src/CurveCreator/CurveCreator_ICurve.cxx | 459 ----- src/CurveCreator/CurveCreator_ICurve.hxx | 279 +-- src/CurveCreator/CurveCreator_Macro.hxx | 4 +- src/CurveCreator/CurveCreator_NewPointDlg.cxx | 196 -- src/CurveCreator/CurveCreator_NewPointDlg.h | 70 - .../CurveCreator_NewSectionDlg.cxx | 44 +- src/CurveCreator/CurveCreator_NewSectionDlg.h | 15 +- src/CurveCreator/CurveCreator_Operation.cxx | 240 ++- src/CurveCreator/CurveCreator_Operation.hxx | 35 +- src/CurveCreator/CurveCreator_PosPoint.hxx | 46 + src/CurveCreator/CurveCreator_Section.hxx | 6 +- src/CurveCreator/CurveCreator_TableView.cxx | 178 ++ src/CurveCreator/CurveCreator_TableView.h | 69 + src/CurveCreator/CurveCreator_TreeView.cxx | 80 +- src/CurveCreator/CurveCreator_TreeView.h | 24 +- src/CurveCreator/CurveCreator_UndoOptsDlg.cxx | 237 --- src/CurveCreator/CurveCreator_UndoOptsDlg.h | 73 - src/CurveCreator/CurveCreator_Utils.cxx | 994 ++++++++++ src/CurveCreator/CurveCreator_Utils.hxx | 211 +++ src/CurveCreator/CurveCreator_UtilsICurve.cxx | 126 ++ src/CurveCreator/CurveCreator_UtilsICurve.hxx | 69 + src/CurveCreator/CurveCreator_Widget.cxx | 1604 +++++++++++------ src/CurveCreator/CurveCreator_Widget.h | 251 ++- src/EntityGUI/CMakeLists.txt | 5 + src/EntityGUI/EntityGUI.cxx | 5 + src/EntityGUI/EntityGUI_PolylineDlg.cxx | 670 +++++++ src/EntityGUI/EntityGUI_PolylineDlg.h | 152 ++ src/GEOM/GEOM_Function.cxx | 70 + src/GEOM/GEOM_Function.hxx | 13 + src/GEOMGUI/GEOM_images.ts | 4 + src/GEOMGUI/GEOM_msg_en.ts | 162 +- src/GEOMGUI/GeometryGUI.cxx | 71 +- src/GEOMGUI/GeometryGUI_Operations.h | 5 +- src/GEOMImpl/CMakeLists.txt | 4 + src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx | 155 ++ src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx | 13 + src/GEOMImpl/GEOMImpl_IPolyline2D.cxx | 112 ++ src/GEOMImpl/GEOMImpl_IPolyline2D.hxx | 94 + src/GEOMImpl/GEOMImpl_PolylineDriver.cxx | 231 ++- src/GEOMImpl/GEOMImpl_PolylineDriver.hxx | 3 + src/GEOMImpl/GEOMImpl_PolylineDumper.cxx | 251 +++ src/GEOMImpl/GEOMImpl_PolylineDumper.hxx | 132 ++ src/GEOMImpl/GEOMImpl_Types.hxx | 6 +- src/GEOM_I/GEOM_ICurvesOperations_i.cc | 189 ++ src/GEOM_I/GEOM_ICurvesOperations_i.hh | 27 + src/GEOM_I/GEOM_IHealingOperations_i.cc | 22 +- src/GEOM_I/GEOM_IHealingOperations_i.hh | 4 - src/GEOM_I/GEOM_IOperations_i.cc | 25 + src/GEOM_I/GEOM_IOperations_i.hh | 11 +- src/GEOM_SWIG/geomBuilder.py | 21 +- src/GEOM_SWIG/gsketcher.py | 142 ++ src/OperationGUI/CMakeLists.txt | 9 - src/OperationGUI/OperationGUI.cxx | 44 - src/SKETCHER/CMakeLists.txt | 3 + .../Sketcher.hxx} | 38 +- src/SKETCHER/Sketcher_Profile.hxx | 16 +- src/SKETCHER/Sketcher_Utils.cxx | 187 ++ src/SKETCHER/Sketcher_Utils.hxx | 103 ++ 78 files changed, 8006 insertions(+), 3195 deletions(-) create mode 100644 doc/salome/examples/polyline.py create mode 100644 doc/salome/gui/GEOM/images/polyline_dlg.png create mode 100644 doc/salome/gui/GEOM/images/polyline_dlg_add_section.png create mode 100644 doc/salome/gui/GEOM/images/polyline_dlg_edit_section.png create mode 100644 doc/salome/gui/GEOM/input/creating_polyline.doc create mode 100644 doc/salome/gui/GEOM/input/tui_polyline.doc delete mode 100644 src/CurveCreator/CurveCreator_CurveEditor.cxx delete mode 100644 src/CurveCreator/CurveCreator_CurveEditor.hxx create mode 100644 src/CurveCreator/CurveCreator_Displayer.cxx create mode 100644 src/CurveCreator/CurveCreator_Displayer.hxx delete mode 100644 src/CurveCreator/CurveCreator_ICurve.cxx delete mode 100755 src/CurveCreator/CurveCreator_NewPointDlg.cxx delete mode 100755 src/CurveCreator/CurveCreator_NewPointDlg.h mode change 100755 => 100644 src/CurveCreator/CurveCreator_NewSectionDlg.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_NewSectionDlg.h create mode 100644 src/CurveCreator/CurveCreator_PosPoint.hxx create mode 100644 src/CurveCreator/CurveCreator_TableView.cxx create mode 100644 src/CurveCreator/CurveCreator_TableView.h mode change 100755 => 100644 src/CurveCreator/CurveCreator_TreeView.cxx mode change 100755 => 100644 src/CurveCreator/CurveCreator_TreeView.h delete mode 100644 src/CurveCreator/CurveCreator_UndoOptsDlg.cxx delete mode 100644 src/CurveCreator/CurveCreator_UndoOptsDlg.h create mode 100644 src/CurveCreator/CurveCreator_Utils.cxx create mode 100644 src/CurveCreator/CurveCreator_Utils.hxx create mode 100644 src/CurveCreator/CurveCreator_UtilsICurve.cxx create mode 100644 src/CurveCreator/CurveCreator_UtilsICurve.hxx create mode 100644 src/EntityGUI/EntityGUI_PolylineDlg.cxx create mode 100644 src/EntityGUI/EntityGUI_PolylineDlg.h create mode 100644 src/GEOMImpl/GEOMImpl_IPolyline2D.cxx create mode 100644 src/GEOMImpl/GEOMImpl_IPolyline2D.hxx create mode 100644 src/GEOMImpl/GEOMImpl_PolylineDumper.cxx create mode 100644 src/GEOMImpl/GEOMImpl_PolylineDumper.hxx mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_Types.hxx rename src/{CurveCreator/CurveCreator_Listener.hxx => SKETCHER/Sketcher.hxx} (53%) mode change 100755 => 100644 create mode 100644 src/SKETCHER/Sketcher_Utils.cxx create mode 100644 src/SKETCHER/Sketcher_Utils.hxx diff --git a/CMakeLists.txt b/CMakeLists.txt index d741a55cc..91ef62ccb 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,20 +67,7 @@ OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ON) OPTION(SALOME_BUILD_GUI "Enable GUI" ON) CMAKE_DEPENDENT_OPTION(SALOME_GEOM_USE_OPENCV "Enable shape recognition from picture" OFF "SALOME_BUILD_GUI" OFF) -CMAKE_DEPENDENT_OPTION(SALOME_GEOM_BUILD_CC "Enable curve creator (experimental)" OFF - "SALOME_BUILD_GUI" OFF) -MARK_AS_ADVANCED(SALOME_BUILD_GUI SALOME_GEOM_USE_OPENCV SALOME_GEOM_BUILD_CC) - -# Debug options (!!! FOR DEVELOPERS ONLY !!! TO BE REMOVED LATER !!!) -IF(CMAKE_BUILD_TYPE MATCHES "^Debug$") - CMAKE_DEPENDENT_OPTION(SALOME_GEOM_DEBUG_CC "Debug curve creator" OFF - "SALOME_GEOM_BUILD_CC" OFF) - MARK_AS_ADVANCED(SALOME_GEOM_DEBUG_CC) - - IF(SALOME_GEOM_DEBUG_CC) - ADD_DEFINITIONS(-DDEBUG_CURVE_CREATOR) - ENDIF(SALOME_GEOM_DEBUG_CC) -ENDIF() +MARK_AS_ADVANCED(SALOME_BUILD_GUI SALOME_GEOM_USE_OPENCV) # Prerequisites # ============= @@ -242,7 +229,7 @@ SET(_${PROJECT_NAME}_exposed_targets ) IF(SALOME_BUILD_GUI) LIST(APPEND _${PROJECT_NAME}_exposed_targets - AdvancedGUI BasicGUI BlocksGUI BooleanGUI BuildGUI DisplayGUI DlgRef EntityGUI GEOMBase + AdvancedGUI BasicGUI BlocksGUI BooleanGUI BuildGUI DisplayGUI DlgRef CurveCreator EntityGUI GEOMBase GEOMFiltersSelection GEOM GEOMToolsGUI GenerationGUI GroupGUI Material MeasureGUI GEOMObject OperationGUI PrimitiveGUI RepairGUI TransformationGUI DependencyTree STLPluginGUI BREPPluginGUI STEPPluginGUI IGESPluginGUI XAOPluginGUI VTKPluginGUI @@ -255,12 +242,6 @@ IF(SALOME_GEOM_USE_OPENCV) ) ENDIF(SALOME_GEOM_USE_OPENCV) -IF(SALOME_GEOM_BUILD_CC) - LIST(APPEND _${PROJECT_NAME}_exposed_targets - CurveCreator - ) -ENDIF(SALOME_GEOM_BUILD_CC) - # Add all targets to the build-tree export set EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets} FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake) diff --git a/doc/salome/examples/polyline.py b/doc/salome/examples/polyline.py new file mode 100644 index 000000000..8b7925607 --- /dev/null +++ b/doc/salome/examples/polyline.py @@ -0,0 +1,48 @@ +# 2D polyline + +import salome +salome.salome_init() +import GEOM +from salome.geom import geomBuilder +geompy = geomBuilder.New(salome.myStudy) +gg = salome.ImportComponentGUI("GEOM") + +# create vertices +p1 = geompy.MakeVertex(70., 0., 0.) +p2 = geompy.MakeVertex(70., 70., 80.) +p3 = geompy.MakeVertex( 0., 70., 0.) + +#create a vector from two points +vector_arc = geompy.MakeVector(p1, p3) + +# create an arc from three points +arc = geompy.MakeArc(p1, p2, p3) + +# create a wire +wire = geompy.MakeWire([vector_arc, arc]) + +# create a planar face +isPlanarWanted = 1 +face = geompy.MakeFace(wire, isPlanarWanted) + +# Create a 2D polyline with Polyline2D interface +pl = geompy.Polyline2D() +pl.addSection("section 1", GEOM.Polyline, True, [0, 0, 10, 0, 10, 10]) +polyline1 = pl.result([100, 0, 0, 1, 1, 1, -1, 1, 0]) + +pl = geompy.Polyline2D() +pl.addSection("section 2", GEOM.Interpolation, False) +pl.addPoints([20, 0, 30, 0, 30, 10]) +polyline2 = pl.result(face) + +# add objects in the study +id_face = geompy.addToStudy(face,"Face") +id_polyline1 = geompy.addToStudy(polyline1, "Polyline1") +id_polyline2 = geompy.addToStudy(polyline2, "Polyline2") + +# display the first polyline and the second polyline with its planar face +gg.createAndDisplayGO(id_face) +gg.setDisplayMode(id_face,1) +gg.setTransparency(id_face,0.5) +gg.createAndDisplayGO(id_polyline1) +gg.createAndDisplayGO(id_polyline2) diff --git a/doc/salome/gui/GEOM/images/polyline_dlg.png b/doc/salome/gui/GEOM/images/polyline_dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..532817c402b62d976befa27b64ab1b0b93c6f4c0 GIT binary patch literal 27747 zcmbrm1z1&GyEZxj>F#a>r9(m*Ns&-Mx{;9X4wV)u5dmos5RsDZT9mYOcXv1ZW4+(r z=iB>_bIx_nB_K`~YmPbQ7|(OpH2kHCJT?Xe1_VLa&lP0UAPC_Qf)JI^P{5I`sPq@$ zF9a7g`Daj3Kh-Aq2a4$nc^T*){wJd$FAf|*cT~`Efgl_h{1YLb4TlmOM0I_xEQ>ma zfrd^(PSw%!7#t#ZmDP5YcCfQEw|9l4oy|>L&EL>@ymhsrlYg%KQtLeqDFo3$&t;@E zJg0VMz4SF+FQXh-o{6ldk6cu9R$ITS zR&)9_r|>IAHQW1-lo7ula@r!|^!D!Ku5^^(prKv)N~B+UCb;ZBJ?~xMTb~o*%Rnxyk-_e8kSHPv_paxbornERY5>PZ-p$mxAgMuv*2j~S@Rwjor-X%t(W}VF zXpkQ=+7=XaUgsAsKVg8mAtU=5ylOa`j?RSMJ-+L45);V(vszFqHk!WvnQRHmDGIj9 z^VHX>qQ%$Uo%1fLF~lvoQCiJeH~!pXZ-qv33^9^IPb2?kZvRe3aY^>(Xc#a^|SH8mv-M?<-ZdiVD_0P{@TPC-FZ!2#qs-Yl2dv|M4{WY*|73 zO={>xtkF0{gWG_=gBC?4L+pd(u|~{rnNR0y_RWRmJ~@9TrnHSGJJn;8&msRi`e?i* zl$;Kb=bWRKF*n@kk`?ZtMl_>xgCNe{WIG_BIbFV=YzGNaNehD@*X`Tfmf8wR_vIW?pXQ+4EJ&e{^I8ET=h`HH%5V3fCgs&F&k`|AnV6n8KVdhA{+nw+&rm?;DRZlJzd#3tAwtmrslYGqkQAX zffV^L>7azCZT>l@)mtB07EZyX?RXlCe45HLJ8r85%+~zu05!s)kvS9x6;JZvyeKJe zIp)S2YZ3436If67l@#Zw@$)Xuu=dXZMpNF@XZQPp7frXU!sRv}OAffJYbt^x$~f$2 zs>3;q*q>2Gi=&)wx!%tmJJBD}JrSlf@jv>Wd2yI0K}WEf?N;#B)8|h_qNp8@2J;#j z-%naZi~5gxRrbpTyCOrCc9dA;GlUko1og))x(ZA=^WWXi?QtPAbnIY-tPgcQT$#7t z4K!+TRG+ACKMZy1y}A}p;X}yHWxjAf7hhR`E->Nt1pYNJ2}Trz+XzP#k|0Pg_BL+l<*4_>e^4NqgukLsU^Rxu7?<}=^fV! z2CdzM92Zz-YT`n~{jL`N&P%k7W=FqrBi+3(e7cm8hYGd9hF zZI&e*%!S%0Qn?UIi*gBO&pZpSdh+s*TZv#@sO7H9U}iAkh&xTp)X6jZIX|K|?NaG3 z$XC}Mv5!A5dlSSYBm_^Ne<9vWNaM^?p%F|psLf zNObjZdfeTfOTa=RjTYKTLrv!Ab~gs^bYMmj@7D@z7gk^0VodvQF*)zecjmkpA6&g$ zUmPx=#5kIhZJhWy;w13a6a%XET1NS%E&S}5u1+KACzXTjZk*!7uKxZGkNMrs$mF+S z5lslnh5{Oq>=_zKrrp2Yp2dWOaLV6AKGD_|ro1sgLFIydj4v>;u*Xz)v1x0X4E1~c z`~Jw8kK5hVWWG0v54B+YS8!4d|H?;m&w~YV@RLtJ>#XkiM`=eS<(F_Lwe?KzPzg&H zviXVMbT%zAlf2*=tU|T@#lcp1s5wP_<9dMRD(qK7pXMjg`Jc;v6+_aNNqk8>GS+y_wUHA0j?hl%5s-07_UvjB0e?@b8Oxy>p|WM zvLr(O{K&fu4%va7PlYN5m(!=o(IPG=Nlh^wi<^m&mvR+UVU?>eM)*_HI ztFq6bXJkZ@kEUr)54c0dEU<{_eqB<@S+7Y!NQk5-?=cf#e01RY1&x^%-_^T~)OBjt zN62}H$oqT?v6yopORIQ27*Ei_)M)FJogktoRl;qH$aZ&@POy~YCOf7lHX#l@RvS?- zITw0IYDA^6<;gz6tk7@_IR}Tg9Mzrk8jp@3Mny$cC-~*{HWmJJlQ4BkiHCDPbqE^m zKY+elzA+tLpDw)*XhIk4AsQdaefWiyFVMU*D!65;pIEt2?~9+}OZE^AX13Cu`9^e1 z%+SI>5%$7w#5BnUdfD5YQvu4SsQf#40W4OCV|G^*mIFpb3zs+N6{Gve4oc|){TsUc z6deAyVp${pAE)BtQ|(5!yGl}i{9W$l8Z=q#+>T8=!41LP4fMaQk4;X95W5a&tGxF| zO;s_HYv{1dBZ6RAe^g&=7=IYK=7@EFNNZ{TW>IHdy81Iydny&B=wL$ER8X=9T|6t@SB0Va3Q~$>U2)$8UsCr^%$SjGBmS$E&CO50N$9 zLj*sB%bNP$x212)7GUNoCx5V%b`+DnCf5_M0Uz~#99?_|EVQAY8 zF9LS4K4vg6tz*&}^n9Y!EU#p4a*|xoent{g%ONa2L~xDzsW%E^=()79F*KKQ^!{an zHv5N2H}&t|b6;aMBpG1O@N6V$QL>i7!eDB5V=tD4>cE=dc`%Atz2_4S0Z{Z{iNok_V-JKLJ2 z&c`I-uU=;GTNPJI>Q&PYW#76!&tW|LYr-kz{vNS%ixREL7CUl+08eYx4@oRuhCzF> zlJj_KHO;T7HDJn<-H7I+k-x~ty;%&^NdN0y`yw~(w*udca$ zl4jN?I#AzUZA)9gelBobxF*|XobzHc)K19njQ2b5V_}bz=J)A$t?S!Ozm5*SjyFn6 z*tRCQkUFia2%20sH}1o_G*-!u1>9w=D3d24GYzSdm^=MwT4{h5OAYT~oEzCv*-49d@? zf0g-1#zZFeU%oQOmEy9E(E>v6vmLZJIab@rGcgRsRF&c_1%3SrkJ15wo)4jA zG!kjm$b}OK-U^qs-~ZgZwlDD-*-U%fhF$A;aG$LvaGNG_?ae87hF}{lG@Q@N6JpAD zz4@qijqr{Zm%1(Jo)V?OFuJ(ul7!@|iuqpC%J1K6?GIHb!`n@FuGZ-G=2SYW6GDw+ z92~4FboHBPqQTu-+G=kaELx7p*-}&;Xx(<`Z|}-9I9Q@Hsy{L167|eznSVuEvOaC6 z&=jX%xXe-Dw|*b>KDmI<)=q>`q6x}VO>Y<3Z^SIsV5M3PQJy#5T8Z75&O4|*_Sqi@ z40Nf(NKY`&)I0DWykAVRoRZ2>GwGY+I#|3e!~U~Bciq$0=!JfJb@ooPpuIgJ!D+RX z)-fR0D1NIb|1Kkhdg=Dst^Kl#?KL?$-IAw9{GW&(Q8D(SqwTJ0XVb(dY9`<270RtQ zgHmQtwX6Jbiwx@CcQqB8{+xg0y0?PkQYNR}NHyVo%ORq z?U_3k5-+bwyl|P9k0_;QVKkLEd#f}rq~4?4Gj-A}8)7{9rXSW0F2)*B57py|fSv9? zv+Sf5&A5Iiwz9r1#Y7-&Zi<7N=Wg}pYQIn1<1aysFCPXnGDV;ro428}%imZ$9~7?| zotHnAOiVU|z9$dmT&=0-ivGQ;iK?Gr50hc|q13xLHI}FAHZBwJvJKnGYyf$D%zvyn zH89_StHAX|n=^5M%1z+;+`H^-{=L~A*tY=>#)qesC7|43+&M(Q*PSI3wEqs;`u*48 z#-qnyA~B`)v%6QfKT>>gGDFFbuZr53n8S8ZN(|Z$xF9Z~X_(}Z!8)|wwVeG%r^I*B z8vmR8Yk?3f5V1pwoy2T8cRwcWm3PU^_wdKLDl{Re-+Y6LE^7bKb0!pENY~TdBN%Co zWCY#U5I?Q)x>!pVOWYDf=H#er{`)7GS{jB|JmxQML~VRBHf+f*$Y5)8UpJh?D{B&F zQ*nbpWbLUEy8A(!Avnj)rMi5h7l+<7Orqm<#4qdx)8DPx2{{c~(fMU!cf=ue;-ynB z3Ac)Qf@~)U?~w1Sj0{W=!rsG%hLgj>e!M40ts}~_6vV^F=NDCjUKWgUzwS1E+iyh8 z$iVP(VDHV0yr#YQ-{E2GCTos|{J{;oTV~ z6(U=akvSO&^0ZQT)DcM=+Mgxt9D-0d} z>YpCgs~rOIipcSb=G=A;4$qSj!l$fOlXvAXU;>=!#=7r|9oZR_c^JLsZu3Ho6#SK>!_H*@*e`!4;n)vO7 z>5F=imFyw-fD0|eu$Xi#!B@%0XNu4%GCeGeY$-nKQ-oZn?C{g4PbbQq2t`FjgUl%f z?O~@j<4zmv(n2T4^!hc<$jJhByc2UB9Vl%f*lpmVf>$m3Q=~$ps23I%UfTOXcqAkt z4cBK3SI?e+tr~H8yoR}56;MIVqM8QV6RX2_5=8`D#AfUl{#e2(8XA^y3?cqd9Q6`I zEE@QL7L4~HR3FrnjX5N(BK?-1qXj{y*XO&PS<$2|b8|FjXJ;1|%h9C)^ZtRmvJCjl zs!5-AjqK#5q!45n@NuX`gI+PplYe<^_#FRd0T~OSvtgIx-ea%XIbaWJS34_U8oE#xQ z8>ikIuEJsM9SwPpF^<5!Yy1F~c?SS0BlcmG>fwgPTrRatdU|@W&d#>cQDO*>k`hx- zWSY0?{P?)7{_=QXVdI@js)$tPOSJ7j1;xK=BfdTr5;E@Wr*?F9X06&?)uE}SdN1|< z^`0#QL)KAsg_CseY9gzhI$PfGF&N1!hap#;=$1fKv%OFkd|KM*iwn=*TSrb5TpIng zvpu_6di)m$-Ak(6Z@OZ5do(mX4$YT4qveey>9Vr3W8>q4ySfyV(nM=o&(>B~(Gh^6 zbW%O~XC3C^;?k4C`F81hxHcGov>^o|bZ~mw4htvjnZ3I=yq93V^W;hMT1#?D*;bA}K@ZcL?>!1Ce(cSmU6-h*|4nviZ z)Nkm8-9()w*XPf1+-4o0g!g|KhkO(lIcYhJh-B|Bt#xwge9UQ*QptLAd1h ze{=9B=UW3!5_}pH?)}x>*SmhQa&m}Jn%|j@cmybfc*VO1dxM!s0A_wydkns|wzmEx zUPDJmzwo_Pftp1SSgUJmkCK=`h4Zv~;2DZT4K>p>KO{i+KHtO6*Z7Elgkrqk*dVum zZ2uLF*+MxsDJi_{6?#ckmHcu?Wbmn%m)Asv4KB2>njqf{g9Qyd!N(VK+S>W%*$r`t z8xhBn65=Pse56MbZf%$Quz@-5#LP=0oT~CDE-fu8B4OE)eF=+Gzq;8n30^Else?&z zZNb{r*3ltoU_R1eX2@buD@<46B43d0?d=83+;YUKeuLs-_T<|0_%y+B`|IPB z)Kn8Qv%n7@5cM0psY#0rLp50C*3bIr3Bm_|IH^BU{wB!~e*oT!AqrM-%9%M4R#)#9 z@8s;kDtc6Ff6@T=N zI+l1Wlqt!`P=#xGFd3e7_4WoOC6PlJ85zwR+l!!X73x+!v$kga!us%+-7osM?x54$ z++6tkDlk2RP1?jLejl{1@O1~>hu+Y@aLy1^2*SN*2?|W+Y0u8j&WaB9T*GA$eSCae z_lKwza|o;}ri>dDm_C5BfUC?L-*#fYVkIC{ryrd~8vHoG3vXow2G2{?w?=CisUOvc z%>8)92!PoSgzQyj(dT$L!M z*%FL~Iv1qKURCyn3MwkF8kcoPiEHt6bNI5>(t4$EzA=>DyUJhqDqGHTuV($_%a@SY ziSO5cE=1kLaQY1|xo)`?LXH}Gj#~G>)&TbNLz@lwl0QVr6&4%>dxM|oM(qDZ5B_KO z{4b4}d-Q70wMxK#=P4*=AtXzW^B;%RP_?Cj?(f~}DV+Kr4gJ6Duz$Mz55w58wSH;o zXOnHCM4*nV&@p6n5-w%ZXOfAVUYI@ou{T@0tUXbRatjLz3F7Sn)niW@-kO&?qNUeW zQiILc*4C`Xi>MJ1krsA#^ta(6F#?n-;?}Xrmq$56$Y*~egz^+0f7C84G$hCrbnI5& zlVB@I(%W0O5;QhUQchSDwa6Ab?1hRT6KMGGj`phNzczGB%h0zDs%@)@JumY$UjFZT z@t<@N4;)bAr1GLtxk2~#y}vzg6;{PnHL3k&E_>?j?THA9ii!5j zuefR$#C`SZ)w9VzQFSY3Q`5tq4hZ1-48qvr6-`d`o}?xug!Uy1w)M?ogC#oMG!+%c zqH21cHX9~Hg8&E*zs(rhDiRVBkIfi6Oh2mSZvTvNYySuDx!&0Ctj+H$Opv6SGXbdD zigxPtzS`PkXM58T8<;~I(^Xt+1Ib*!&eQjzpT{vT_D=E%`CUDs+MzBHb**VR^Vpkf z=~idqS#NlnC}tzDH`5rn%o4@O{Rr=cxDLaY!ky|K?*|W1xZyXEXsG6elXrzKwt76) zx0zn~Ig`WTrZe|5lxkfg3Ig(1}mgG!n(dd7k7 zS^3-H1(8A0v$K%v(yB6fXGQ0lou zEV);@zh+HO`HThTE-2_h@3*IzLqkKLhd(nlW$^XBgrE~|F;`(~*iwKhmhEgMG27Q- zNh_;IBg!M%x$YE zm(?S+V~R+*M_Q9kT1;Ttz%D>TM_(*R4BJ5e^7)%u&e7kgA2P+`3E$kEoLbgxBsv#J zQL}x{_Z%G^o1;=i7FJd?)+*D|(kAN7`M{v=E^cuj^x`zv9IrzVMld44hOMXjKzEMU zD^_6Q)wWkke!+Qsd@S9(1KG}$4z-^)c^M}wR`cg@GxlEo)YRUEVESZGAC?XOfJ~eeDm~R<5In$$+ z?q`#a)pO~DSt&qsA6&5k@=cH%7~_R+-+HyrIcJe!!$*$~bC0X$n3ccL2@6kUP(P%7 zIIZKX(|=3#hzJ9)J(yv%tg)nVaHr0YuX(4zT=pY?BEo3iG8rb#%*^oSAsAnTEo#@8 zK5V>Ovmvs=To7!>eg6Ep#Ae6D$3OI)Df}&vpkH~A9jskz`#4uM9fysLt)6EQ zn@ZUAN9!`Xga1k55HXF1PNn_i9|#~&wV%Fb$*F|~!FetbjT^z%9Yv{iWB{3{BABV> zN&Jnpi+@~ux#i@yx)t~4zVQ~zk%56#t1v}{3*+d0Ajqn;g&6cRtive_b35cPs8j(f zRzYJe5FlDsi~huL0Qq@gHnVLIX#}Qp{Y8^3E~w&HLG*VoU%h+5L=XmJP=FDbG;SEd z&+q9+1q{GoDNX`uhOd&W@feF7u|)k^uOmn}00zG9G6%Ju=0(`_^klYlC=M_|XkT!s zsyr`BU~~#E=Pn0jjO~}h-|y&YK6_8u^{esv`}^hgwK89l8FaL?Ab=ZJ;hlnmgVXA2 zH!ch2u2})xWUBf5eIG1x;qP~6L1cL0vUo4`=>R2dADWtbo>6cy|PMO6(>w6^B zPjiL(^n$fYQ@iE561`c%zrN{`j|zY`^hetF?!#r`leYvYI233}N}ASwwzlkFeSbeN zF);y+e`BseL>%)Hi-d%v^~de((|yynE9{r7@fRnN7s zAj!O8lhduyi3%4|UOv7>P>mu;xkAFj!<`tN4%>#;Kerae_N>HozbPrJXiItOGFauW1nV8Y-vm7RkF0lK`rgv+ujDMGJ= z2m-1l`1ttVSXf{TvuXZnK3eUG{rWY;eRs;F?;C&XBtoi6DBvi*m#YZ?_P`ce0`Un5 z)Ha#iv2?dbzu+n{x z(4Ref7Q|b1R}-wBr@GjTi^^>`^`u_(%sfTN3lY^{=-mQx3!F|u&7?-Y?+*?fcjn3{ zK^IQEUexzJ+qBfitIuc^Aejv}bj7aU=nGL|4%FwA*VH7@{H6W=Y6;ev%Mqtw_g56vm2j5OjOc?hj@?2~c6mwhlQ$fuDnjX%$473alm2xXZ1p6Ou zwuRy@pU(%#59cbEIF$aRkbHbRymt>@d|en;mEaeL z5d*NF6{6(2r@T)#B?i-fW&w6=cVj+(Gj&Cl9d8`|`}bfegYO zBmorUt(qpRV^7K0%DAwzgq5U(lJg8bss3PoX*`;Poqb_{nV8T%*_)*tFER*JVs0DBS05_S;`&4_qWK7P0uw=_dkhJ<1Xcqpd z*ZBp$_q@AYFSQ(?0arm1ic8x87BO34-J@m%z-S)S)YP>4K6{1;lnd(}Apj8;^M~(G zS%5+yEkO%fZC1-szP~z;cdwNURdjP7EE#?ufTmxu1-hT4r;Lz2^PG&S8pCJx&#{SL zwAnh%92^`D4ohsti^xCCMPOoJwElcu0OTnIE-tPg8b9TKP6KNKOs_OhAIfz(PQ3jp zu0Q=FrKqvSqhVpeK0kbc^>uw^rFmq82<&?WB_)`M)V@Yt)VNUqwUm@pwf8CO(ebg< z=HG`GmzSe|4nI)};_zAa%Yca?ASC2*SyKW>ih6$=)VjV0_YjrV_uaUm&u;8?ny?$| z9N2vNwXWzCktkq>$wb`QjfUW8e2UNa!V%WlPRWjGK=ZMkmP>A1vyjJn<&me?>-(N1 z7L{*d2)C%le__w9W`FYMHi=QUg<==Sn=|$8MjUpLfR4OLLpT&=Ql97UQ)HAD?5(IJGySrp=?P%8ZnZUPanrOL+-a zcE90$MD)?QI9zKq1e+3%lr+@5=j&m-yvzxar>VWI&y@L_H^%KBiGiFWF+mO%7bDq{ zTgC?82GE8cpLbM!D=KEcQ6Psi?w>!3+Tu)>I$370r=s=8R}#8# zCSMWpe}1nm;22LqYIykuhXEB5((w?5JSs9IG{(t%CM<9)KxNwPFVnq_0& zbo$(&;_bh*#jMUBn)bHpfOq6;Ox&dRp(Rqk1CmhN-@gP!MMY=^G_1b>Jq0N7y($+i z0Ju^L3TOaO4sDBxiIxIGs2*q~<;S+DK%4|BL(Yq@Sw2;J@KOe3H$kho|D)uns;n&g z(ipGSV>_zIpq7D-4gyH8wGvv`Tzp%i8vN`%M{-rO$2%_2Poxh%7z44)#IL&(@KSDz zUNX3NiFAeA49YYv0NKE)LUYU4VC{Otd$Kb`2r8Dj{qZBaqmu*J*FL?4-POoB@dkV# zJlaiHW`f~uoIjHQieLQn9iUyy4Y&XUsKLq2qj*JdxWyx*nA_;6)M;5xzsa3C)L%RZ z6o^((PD|bnGiQ$@HE*it9S*mo$0UA1%TWtgP8Oi2r$=bIKNP{a^+l79qT#Vp@7^pa z;oh08A_WsZROMjQn=WXiy)Q9K8^^5N3OIt})yZ3-2@zwj4QFsxriUyD5FkV`Us9NC z%WeyHL8^wyeSb1CY#D!W`&7HkLb=8dkBlr#r_6$W%^B+~po;cYfPBk;ky)Mpi_E$v z5dD`Ks&+ZY0c0lp>3(0!j!v1=`WZEqgcDp4)IRF|>^xnp!HSPZ)(nJAZ!DR0&i2hw zYksBIyjIS9v|gd@s>K2>Z$sF$iX}M{5_HB23P|s+R|6KewlJWu@bDHGIw3v{zWs=| zkBCo-s2c(Bxm(2>8tO}To2IcUH;3zRL75D;`>2{8EsASnV*^Rr+jELedD97SR`#A* zn47ocCE)g_h^bo}$$Fn{gcnX%W`X?=y(=$&QZKY23*Pg0ub=zg2svoOf%}q16Vua} zJ%j`V+@Mee$p=X@$1OHI-ERR4Tsjn+!y|dCvU{$dhLp=7NVhOVE?bH(!2;#DsL%jE z9nUCdJuNKEI`sc)Mq0Pus#6P7hs^D4Z5`M9sV64m8*S9_$U-kY|A=vMsU}8$`UG2wCS_!0#ULjqhoEp7wZ%J7ju(e}P@#d8)M4)zumQfY#<{GGW_CK*qzX=dNzG zqsdVQ6z!n>@Bmxu&?{2TY~+}lj3^9Lg`l9IgW^wNKPc4H)PHIi>Qcso%>Xr*?WVUo zG~I@18TnQ8Is=6{EIOK0uCKJTw4|bpxU$&RulovW9_x2Z2B%ar2h<|VFLCVbjlF>W8@6r;fYcg)RdHzKXztL|67U|bhX}>j*2Re>bf<94%nV| zLu0Gm&*|KcSLIn}q*bD>PZ0wV3vL*g7_wT^FN?N{gU0@V&_}%}&>C96snh+g$Z>8Q zA&>pJcCeecT{@IZZUK%-+vMs7MhK%fEBd{ro8Sk60SJN7K$`7wIe_#Hlk%f!dZh4yGENRKfn2^=j zFLH6+6a24SMp2u?d2RjuIO;dKXxs2sxtiI-vywv(K}JSKN-07^8>j8tth`Q3GVBJm zM2(G&F^V~f+$M~v7_L;_+h!I-MI3xQlDRWRVS zi`h2WouB01S3>^kH!)wnJV>zMJUBn+Dx-lmM$1TZFO;PeoiTvk2DdB7zT7sA-{Zmw zzh#=2oVMYRz^I*i_t|R!qnR-dJ-BWiEfw!zTUJ(4aNzp(kjpz$zRF|35Y!x#j!)#L zzy0dm_e|dr;*UcA=8!e{jlQea(qB_kBX_5(%uc_Jq6p56k^*VT61-AOuEJTk;ZYYV z4n-GDQ7-9KBNVIf05D;&s>bT@Brb-fP=xS@%ruwth9j0q--*`1IVyjFVT#InzzOJ` z|34J-jcx{WQat=u<_xWj6X>s3R(IQhg_m_@(iKC$^MLVmXOht8eAgUk@vm+(My)5& zPnA-GgjCz`@cFTbQxPq~By#9+AOJCI5{=ZSV>$_44`aSWMpBi-`Gl{wW6Ob;ZPjj5}Y-j%+`6(+A;MHZ>lUJcmWfQ-@kv?opkUM z)nxc-8fL>r6JD%Wg#*fKLAkzNaCK^GD);R7=Y+0XBj`Z0lmTR$CST0m-Cg1NbCa-f z<&Q}BlQ*<*apF^exhOCpfaF{2y8B^ItX3LObb3y$E(8c*O}O3(JVpelO&+WB12QIE zLQn9lJrIAk$BF_$tRM`Z@n9$`I_Pw~*r>CUHsDi^uKUY> z6#br?3<(NaNG@)Y0?ZDGuW*u>J@tChyC7E+ezEYW{PKlpMzIbVKmae7b(8zMTlj7} zJ9`p%ro&(HY-;z3$yHg*K#BLL^-QfB=I&HQ+Yxck;@+O&rjs6j1tKIQBm})HQ3cdC zo=wyAI%>D;Pj73p6jCYRkBNziUnV8wqo||+{D3=~V`F1zXlTs~2`JehtP+M6jdvv^ zAwjzXw9DRZpTjt%N@n;8k*RawtU3$l^xFPnVXK0LXsNC?B*ZOGIsUC`AT1z3Nl8gSJ0Pl@1UM5&IL*Lb4Qjf-qZBU0 z0lh(|=Jxokyy_4TOa>kvd_XVx`cp+vDQze}Q9Q*Eao@rFlM2R^D&i3m*dU!WEvlFd zEdaU?Pm8S$q(?uF%cI-XqyXOJ;obGV*2mgr1>aI((T* z064)+d5AEOX+%9C$kD~64NPk={#r05DYx~=BS7(<3*CC(-FTVYwnvciIIk#}_&oHJE>j+3Iz~jI}%?1HXGCm8XnrV$HWdIu#Esp<@7SUbSnhD_18eVmU0r;*+>vmNUls-;r69efYiB!Dk8HY( zaex0@Rkaf!e8-cGS3CFi5(4*@d^q=BWG}w5zXy&P2?|$`x%vy=i^Wjr9h_u@-;82OF2{I0|Ol6JD=ZD=R5w3|T=Ca3F;_@JIo^5^MZVfa8X9KTm52 zsGcxQRXNbYeP@$Kpm^o{Q94Zi5J@TURo8!aia+oY=nI9dcwC06ufN#F0TZP0_DoMm zSlAS76744c21maeuo1|fIy2o}ZF51A(KKQQV|osmMos=G<6{wLdPiiykdEYPymmZ2Ls3SJ-VUXg=V6cH;;nJ5W5>jq2R{ zGL{j@enm${@@q@D?`YS9^HjUw}?9 z-Re&|C7gQsT3T9W)@v378x|Lr6oYjic6)u!$iaaPmpws9A=nKxZtV(dVjx8?tgeF0 z&Ff78{vqb9yw`{7OFTTm^d-hEh!0SZO+U^Pfua&^(iRH8z5_5q2nK^`+`86k>J_3w za0L=n*Nf9}qs5h#pp6YH5c6Yt_|Rmb`8`~B)i*GJmmAQQ(WXIEj%0Ch5l;070bQgL z_nk0qdbnNdwoL-IV6YdcG&jcs5-8IX6BA^%>N=D^eR|z8Riu4^|1nYimay^e%4Vj~ zj}nMn7vOb091`|3LcJ+Z34vM+*Ofq`n+F^TpEKL~qd#n|wb$qS zZN0r%krezunMDME+16EW-g6lnY+gptF3$I6+jb_)BJC4+b~)WBY;HUQ&64F~8Yhs*F%XJJtryqULPiU;7=dKF-*8Sd7jW-q zlB&SO`Z@uuS^@%spv&rNA#FW9%5qt-tKd^gwuD<#TWdO73x7lb0#lD7C@AQAHfbs3 zd0?Ehy564(-!X9Q3*Lj^#ngrfRD9XaDC(gi0};3`OY3{^zQq1`tDnaklt>CX5dKCIiMZXL>%Im)4O5EUa=$1>?x$h2^n#rH+&o}+E zQk%}_e87?tAiKS~zBU8s7QSmi1mfTiTd~GPhuOwp=08XJ`gk1XL~Z9AXN~<{zQijs zYQmwVrOmF)4;R39V!GR3_FeI^ohd2Rcn7HXy|#nx@K$+AWvLt(^=?Dt!afsoT##hHd&2|Q zK~p||QWd{^5Qu`!TE(H8TKQMtprbN$9N<~xm5;4;gAqoATvt^WU7si_u_*=UI5}~8 zzH*pZ;*Dm3i6ft3(pLk<9$c&jDnBqVa$EhB)5RNr9?qdx@k^6(T4I`JopFG2kBb4Z zK&!9=Sda&Og7XX04vn&45d*${a5nAGmglhuEevK#Pn7s0f#-7u>%A70y$8h3si1{| z;>On8$Yi+NwsQ|q3EafB+`>dOs41}@8ORMV#jK?>e0b<(-Cg@rO#J_1kq^G z3xv`#s!UuCTp>cE3m`NtA;0u*Rz>kSiO+JZ8@mDi)F7<{J{>^>9Z3W|0r{QYlRlt0 zfeh#@yt-1&una$z`z%P>6f==Oq7igbPd#PlTN(}$O_ zJtN<@<|dfGhAl2`BBV|rOWa(DXfU&uTaRL>z3r>_h2crFv-$!f5j^8W3wLBXfn-dr zjh(~cHktb~O=VzUKwe1+>+bH_0W3BWKi@jZ*%5T3fNREDFELD`c?5oOf&|5!)~5D6 za**Jn3Ln>VJIu{u%^P-@sebQw-6$>hm85Vsy|btIJUBdwaBp4FkxM-!u!%;-U6aJn za}ilvS65v3U*09YG&{aDL%bv_8PgW8|_ThU;+qvK)n$GFl8GI_Py0#@XYlJ z6x73RmQ1qCKXq1QTL3>iH~HHK{CU>QaE`Iap6#xJm1? zbBe}u#w*ar{h|XT^*GiwQ;n2roUS?*QP$CnH0Hv@4v6fy~YRC4Er>2~-BTK@q9eGqBt* zHuKVr&1}?Jx!I0>oPJAAHUl}#iMvtv-o&R!5FQOp6v$_0ydBOZ9=ly%lqmI>Hw5<# zKG})KdsH|3*R6tBM!tv0t!-_kJ_Gi^(S(O14=3}|O#ly+rwLzQUuR^vdEkxfiFDRa z9dn|J^EvKb%GZ|ZH}BsAIxfnp`s;;YpyLNy9Jo0#Q=dm)s z>c1%^JWSa!c?`3lFZU1Zn!X z)e{tR10dgSTJ(LRf4Dj?h!4WKDBB>JYhOYG0do6uv_rnI%8Hg+*tIzt)gLx!A`N#0 z7J^&i#|(%TpbWKqfXZ2VS(uqyfiw+C7LQ8=?tv*v0@qsRCi$kpsZQO95G%ExkjIJCP)r09!kwje2s~r`{W5kYhz1GmS1H6 zcWBd+l3JF~NaiPJeQJ2V^=g}ANpKYRc)c$)JDXA1V-G7w?NZ@(abe+IYMpy)cXz(x zG`Wj#L%zBChFeXw-#X2SH$Ly)Y|vY?hrGP}+z$Hh=EVInHCVwiflKqKsHnholj4j! zUgKlP5+0-Lf5n;D1c9kgP*!dSjRfw?naq}$v~dH>0Dvdm!-vS=?495U>r8rZFfs_s z=vtn-?@ZvU^I?j1sLIVD zLU7)j5QzWL6&&V%EM8u?z>un%^F`{TJ{ereT^yqpYrJ2i1L+ZL@nO4O5XZ5WZ)g&^ zb@J=%===SK@Bd3pJ~zQj?1hf7_U00_cz`p0vXPO%;Wn12!-e#F|!b2ce# zqq~jEhyMRtxOxL!y>MT}!)Cby9ul>-qEGw$?L%S@&p!#$&QJf(_U%ddUOoIF5Rl8? z=*Ildhd{tVpiICcpJD=8E(uE~;9-GWR`Mq`N&F=Cz>aML?4ZPYlr=@j9}ynwI5=p& zZ@3Ep0oqQ+@uB~C66CLWh240+!9Ndo@cmm!IA(;OMJZ7T0m7rA`Xo?fSK@Fl4rKME z{jR1`^B$5D;Izwaf&2ikt&nGks5p+$l(th()S3|8?Dr6Zb6y6s3zcU!My zeqd-zu@dRt`s)SUR(kra;uVf%k7iIE5yrP+uEsE}Jdnl_=-lhyk9Lzsd_NNtG#=L} z+O=otZh6L+o^;;dYiU8sssAXsZ_IdRv_NzF?+eb+1CuuXQ%m)DkOuz>5PE0rUhVc1 z-w8(p@9rGkI`={y_Y>~jv$wN%Hxkgo6ZAvCE`mctZ4MS%bZ=m$#Kgo&1JqA%ZXE)~ zf!lZ5#C2ONU_bS!jk_G^zGXK9_qUdIlfPww{q$MDujILTjyVP{u2#z(;&V0dg?NXH zyHmn>N>%Lii@RULi+kVY^s9Bs`w^g4o`NKoAejeHj&y6RbKHGvrAZB3V=W|vrr8I& zyN5oJ^PRLO7+C>7WvbE6Cp(?~NpEk`^B5$k);|mw3Oej0Vy7qSN0+{}Yg;xafxWaF zQ6hUUpF4%?G@7;s8tr6eYeUdHd=yd2kU zyukfdX45MC!nC@+zWt$;RN*sL+e?_aIa8Qdv3j@*?T}`V)ynsW$K&)Rb&L(fD7O+-}HASUcBd(iv4d(idVv zgABp4!PJyXeMw;^WSydZLsP7)S<85Cs+J# zWtn+%8H@~FhrK;#* z(C^>Bdyha2^^v7T6xc+WfBq=i&DOrInsJWM@jvC)+J28pGpHrfq~_#Q3LuL4*Y=JM zYe2!*mIn=8H}-*RX*1?v@fKXdRGmk$#jVBHj%eEXjp|6T^8%w=MUl$=m#<&PZ*6VA zDbGtgKJGj^21R7|wc67g|gz-+RURJNKz-=;%x?{Qdp% zGE#8%2MdWZ8R1e)+p?7i&~Ey#yxswW5eWU4emgeW?*Lc!`0rY6>1I^bUMN${A*Qs5L-SF)y1; zWEm7dC}EjnQYytos&o(XI`PJ z+ATUdHYVU{TdJ+0rl0j?gb3_blC|d=hK5DTw666rh`S#v1TN>5o|hBAI~gqrDBYXcW+@yJUk{^!xCA03T|N209V~?|L+~+_mYxE zzL&u`G(taqBbomM>&?}*+*dputWmHz%k5`{gM)(~(~C<1cJ?tWEM|D~%c!-TS4LSQ zVvuK`-7_|vf!)b6c_0G{@7EuX6dN_E8`1-5>95azLtd#_C##rPL)$j&+xgd<=j+|3 zxLS#YYTe!8tgJJ6A5&|7pVTOXG^vPrpA2^EtDrWC{Ya$Y!Hz<^@D&F|^D!rf2CGA#Ulpox~YrHl>I-FFU+gsN2Q5dk{x3PLTfbcG$SIMav84>g$eaId!GMUy;CMY~^ zI0Y+dGc5hoL8|Kwhml%FgViLRti#I6>id>0&k-J1P^AE&o_OihhnY`LS^b~EnK<_C zezf}lyx;l!+0tZJ{L3C*y=~m)F)l9pM{%TIfmT zrKQCwx_)EBgJewB2E{!h)1-LNsgRll4wMam@i%YYY}y;G($FP2-8wjNcA{v$-ez0j z!p7aJI-L0IW8D+Ruh;9FR&e2NZm#$}F^;$U?!3-2VlZ%1b62M=fAOAVFYFA)yngNT ztq;4KGUH*K@x8@>*3weNH$%voPkFhQO@HaT)k&$xzsWr5`~dpR&^&tpnbpC{HmEu9 zHf=8V^q9pV3=AIcaY3U=Foid8UNc?rxn+9Z9 z6z06N+?w;p8*IF?=vLMhxbENJdrTy!_cLn&B&SP3@G>+sA|x#xerj)l?i*RlLK6fc z5ikjxrUZ@g_H3fHwauXFB+|$zD(tKwNgrPAXeYz;D64IgiTL=Bcvb%2MB(TPGG%H|X}O8!9k{Fb{-O#7tnRgSCf+?6%zH?AU5( znd{06*`9D1G6hsUsi~<=acVw#Mntm`VKX&yzUfNzDL$|gOW6_nch$*Ic3OozVP$Z z;o}?}$*Ea4RVX_8X^0XxLftPjZ)rxP#mLALepi&b?P;;mGRft zwGVJ!yxRVdXvK8?C^*mP!aseIpf4&1>>Hc~z%HVyJ5AH!%f z=bKTH^GR?sY?nOafvgk;yT))zD=0A1PopV$_Bjf8M=wyfNO#x=1?Y zh3PZntb5v07%Qt3uvHw#j+v_<_4E=T%>9+0|1ua51?=c={R0E-zB`G!Z#0_@dabCz zM#5aha9fa@u(mdlX`bCt`&sZTFnu}yW{1EB(9jKy41pmYt=(ZMEGnv%o104-kL%Klt=*oWNGppVr?)7I z;pWCEH|xmm1e-sB(YOrQu%x#H3K{u!SZvv>tF6YP@FR? zh;mqz=INI3y0B>_8tq)1ho+w`lNg+JX-PwdCvGn_!k^!N9V zAiZ)bjA18&fC>z(ngUkCa5TT+#4bX;C7z4i{v^u~-9zzdZWrUnZ7#M&n;P_Z%xlHM zWjpd6h>&j`791Q`;<+vidk|1ECVr|S&+54QsY*K5RSj=~1zL!m-Qn?Nfm2B8+;ZVlVU_fRU@>8H?y@EO2PnDn4sjZrNdki~QNYOrdNk zMXAg-g8U!^_h}iSVJ0jr7E(D7T*FYXs$n{nm`J9dn%a3Mr99y(bm>=dRhS43d}KACEmr+ z#}8vU z<)cSc?%zeglZvcK+^zEh*7J)IUfNt))wz?ZN$URITBrma{ANmP21-Qz`yo#6YZ-V? ztlY+l5Io|}9f@)-I#wm}q^TnvohoM9$2({#x$L=tvYo-gH))Nsmxj)0M1J+je(zg+*ah6vOK}czB-M z#l!?}ZDW1x7>{63p~svhL#O!Q$XJ>t>SByg`tM!CWUO=6~_Ivgo zVL|z8vv#xNoOE5~hwgi1_1S$O;Lt;%MExp`C~aFNBh*GWKGu)y$LwY}B_<^Ze@1?k zr>YdMC)@UvR998q1_c8L*HNxck&s05W}EA=lRXquzD-f}Y}`B-0*R=Zt_$H$dvqgX zUnIWBJPhxVb_)@Xs4S9MU_AxTh#kp?A-h_q*PR)w7RhLFRXwoO5ajEB*UhM)`euzD z(ztDW$Zlb#+kJX0v~ws5LKqoz=NU4cgyY;CbjlYLa2YeE_~V$<%HBL`YJ=(kk4UEG z%H;ug5K0WwZGx!{aJVOxt#h2FJ4m33R#LI>+b1bMQ=d%@g zN+p5YF(kiT{tbAIZH*Cj=hqC*qne~}v8NAqm2^Rbk*{#j^ z-6HpWTcS@wBGHQ8icTe^gg5uK1mPA0=4TfQlWIbH@6^?D)7og!#T~>R>Ef=Ay}Q)N zoC-E?xJWBVBmGpS%b%Qn+sZIyZvR}axGe!-iDYT<%sX&jrGd6XL%sn4;q}utH0%M+ z@n&++&-?cu+qWCrda$lZozE+QhcG2U%!k9^Xat-ts^jFfFQ*@UHZqbX4Yz23DToj? zP3rG|5FQqme0IvikfEL3$-{XdDRo>J!Iy!V>3Ffpx;APnZFUE)S&+Xy$lYz5xz@EEM~T(8d|5V~mE4Zb&1d{RvMgPIZ)<5y&dbmTySuv5 zr_S5z!-q>2YSX!6g2UsMSEg$#_iV3JQm(g^ih0VRLh_!pf6NunL>Rb~l?}x477U2- zp7W!993QtnHYMJ2?F6bNb?lYDyt9AAwp~6@9UNT(Mn`c!?Ec!0e3>Uq3$>rIy~`+|11r!SZkvB~<@* zJ>VqGtVRf1B?qPp_G2)Ly7xR{z!Nxj{CF!ynbw6NUu=>*Bj92*;Nnw(5{qn-Y%;HE z@VaLOadS?PQaZ+a&N;|ah2WY(09#FaAg!1S0V*qpM9>pX??y47<`d#3oul(Wl0=*# z8D?Jx5r_1_6r{d>wRNsFL@K4Y9X&L&Q9EOW_?@HW{3TnPiznSn4Im}4=D=-APbN5d zuEpKGg7^0x97~HeWp0#Av(JVSkqv=2C&Q#~09@Gy_Y1j zW9a70nH+k4!_h^veO>lY22@yu-^9+&4!w4lW*}$DR(;patpGxo{CgP#CFGhR=0~vP zUiZYbyk=NELkjPmV5byTm>pm9_$KrXp4I;D!9V)srrhPY*()k5Ya|Y^DcO90jUo+j z+*BQc3Mnd&W0Ly>FE0j9XOEqZc)>%}%iKfRfg#h)vsn+i@~u|H#nVfJC*G9xHGm`V z!MVp(_B+vRMdBC-$FCQK@7kD}*r*J*H9ZqM(od4Vc^icyfj?P2J)Z^+9885&5((kx zm|IN|MFKhmipsFqSkm`*-+P0wIcCukut6v79ZnR>_ zKb(rOX_jY=?n+9_%r}BELoE>p$;m}U_Z%G^EB)J`2(URkXf1R=yY3f(iE@dZ0f7@^ zLycvs)RyAy`L`--^lQS3x05t2HV`^ms-^&+?OXa|YRD>5(=RHwavb|^v5`|u+&=%M zPiy3P)W^c9B25TQbnP@gXNA%Fnw{j}A5f7f{e+3jW!0*U=fc7wVd;Yrls4xPvRY*5 zYwxu+H_1+tewu5+xtvN~iJhf^=pM(XHbG7jo@-c=hgISkA0b3dCJPKl#mM@xrq&)SCI~{*I{{Y+QMgH!uWfsgRpVKlX4$$6| zoSYmpTLaCfwoJsqYol6B83JKFS#nQDi}#DThh(5wr~R-0|=GB6pu0yre9Ib{?5y_+ppqu zWR0LtSsbLV(rB&VrU$;qfnqmW5tCbaoi;E#8jdt=4659Qq$z6C9|2rLV4@=;T2pO4 z77kpOE)D&_jHlq1Z))l&rVuW``n0mL^7Zw-TmJ=5+HY5O``!GyVxBxVJ8XLM%U{*% zUn}IaGfHdf0m6VdPT@=O`Rdz0uV7d-gWS!HCCZH*T52)bBElDM-U+_LGq+XAHaDH2>#PuS z_t9Q$GS6`PvA($#>$zg7N&wS7}4dqu!vTts#N40$&}TlznUvFbUk2`0Nx}Qq#7;pIyvYRDc8MK zoMg|QtW%s)8kW}f(QUlbSkUh)g6;i%2Ox}N{#%x#jp}^pqV0X0?ATysyVh3rv{3M@ zVIN~U*sxWF;e#{wA+P#${+yR)pN|@5Sm`WTKG8JYLFgfV$A1pFCM+sMW5NNT3F!%z z$@FG{`l<#;L$0cl0VJb?$$3k3Oef3aqG(5fbHM%oE<6JS36)jYT)0 za&0Q}uI)c@C!U3cyAlNDLGEQay1e}%kf(5&9g@tKPE1XAy7%*UF0isZ^X_mssPxLA zAIe_ec_qif!u&f`zT>~o`LE~w8|OX*ZJ8+cpGfv!&Hp~+FG&1{=6@aX_t}4F{?{RY zqv$_0|LY2W-sHb_=-- zANv2p6_`zbX#PWo{<;6qA;B6`Q5Kf{QOw^6_|Nz9e>S-Pd@nyd?f3s5U#(dU9Th=8U+MW z+G`iHJ8>l|bNj8?S)S?om%-0K{BU9BNQ~+kbt)_wY1x*X@Y zN6&uRUHA_4+NMCEK6;OT^;ZKP@(v!}ejJ66_?`Oc*5$%Pu}1kr{rBI$aN0i}a>&vw zd*`kkwC zr^dta*&g0?S+@!`qkkW3#uVB_Py9@O)@<&nI>fI6REkCu)T=2(t0^{mY)qJLH$lye zT!#_u#Ds*$faXOhx!My=3>Dn)+CDPRr{MU0h0gZ2_=JQr5X8u=uQt1SLVDd+pATQP zHCwk7QwV)h#bd?lSU! zMMN|YZVd0BwX{kV-V0&Jx!(r&S|5VwRSz_ZMpizuck5gHQeUfSmjY%I=Du)=QC4Cjk^viePFh>w6s~B8#-C+S^0KnCr9oQ{5wpc=!E)V8G}AKa2U zd{Bj=9F;0Z<(Ta_%XHCD?CwA)QV$ zvv@12wIoX)c)PlvCho&U3wmGd4>ZON+C(blUj_M8BJy#~HE*VUNuO)J{tJ4{QL=qvv3IDW!WSE5JQFs{rc;Z=I z?(+9;HA|F_VnLTv3zjR5JfPg87t1Y=(WQF_ZkQm>DU z(U7LJxq^?ls-X1+?JyacDFc_j)YX_=K>Kx=q0*ET>LP@IL#8KcY zX<#=u2l%!dpg2cL0GI4IAZloA2~)KIxa&RUN(JWPjD}1!sq_mttx|l7vD)A~z6AEz6cWs>+z=E!a2*4Gr z+?u|pQVOP$7PSpf(T&NwLSaoHs&0G2hNnRw1O$8+EF2>;CN|-IP#uwgGXmIyk#*YXYT0x;dgrT^ zw^*9v7m-&kx;*qK-E*StGFSvL;UOK$?nndWhVJ=XTq^9U3}!|pz!NV( zDD1BmIa%8b#b5)C_d=j4+hd;{A%;qYQe(#9i13bes)_PU^xl)6(@^sMUQnI8-unJ! z8?Qbb!6q7H6tX|hvKy4dI`XLSDC9{a&Z*lL>g1qDt9j_!-|#DNp>)%p^@)eopkT?Y z#4W$eplrEmG__k2NH$*fOeR>YaPnf8%Rm5|NweN+u-Ep+h-w?`G}0hM8^EncNm>RT z7rU1n6T@9`u6)9q3)27uEp1YHHX2i)5wtyJrxhiq;Z%r{?R@$YAYg3g*y41LDJ)D{ zNTOyK+z&7&UH0>$0ov1G<25Lz8}3>qVlJCwf|2(=a@nqJ%?B3WPqzRw^!4kNL?Usb z(KRT_JkCa+X_=TZ83r8*1L#idILdsalWz$(kSL$RGQ5k!c!D6^JEMATcEsKP-Me3| zU6a!rAw8aB1>8&cymfcQ5|``~JtH@xG>a!IpZdULM(9WKF%lz9nzmm28TUS+Mm?=$ zICC#A+tRac(Njh8-X5h1YU6d=G3|R|+(f%%Vp7qUhTp$m>#q@y;;#QYDp6c6ZjN?C zJMxx&N{MlX2yMp~)sM9Vy{`;JM`9L|r&R=X1+>CPxb%6_owdW|f)qh)d# z*vA}Tx1fg8$%XTk-%v?Z)No~Ur@40YCCew|7W4I18=LXG!iA_|^tyP?OFq@3xO-Vm<$;J(N2V7eOn>^}XsOY%z2 z;Q5XYQAdq8|nXn799KDVs-nC;A4$h&ENijpZj9b NxTbwIhYl%GQt1Xq1r!NUx}-~b==4Y^5()w$EhWM*G}0*2okN3k zcjtXLzyEpvcdhrn>)yQ#*v#zN@qC}>Q@m4Fl)ZX|`U(PpxcXS`p$Yqk*0HsK*MA@W-wYT)8K9oi%s^ zc2S`oX`mk1T3eggpb!rnObk#a#y4FoQ06yfA1f%UzrIF+K-@$;et7?d>(I)mn+BQL zB>uXKse_$ApEQ!B^wByp?+X3P5_;7aooZRuC0wUN-}}Bcs#$SaqTj2LU@S{U(WAxm z+8tWM-}|(PrP1bS{E652ukD&yS^QYGj;5S?IMs1daJ{9J=o6Y^o5UhwrdwiN#+vRP zeD{QFTcLlifI#?GTtXnG1rUf$Y6Ri~7J=xL`MY0|QRGhPgNj_Yjjdc4oFqO2ErA3c zkvk&pNK~M!frsag>(qhYezPCF1*OfabqGP!u8*~g^)O`Pu$Op*yiatu50SL!^5-I_>nm!flgIb zweNeH&8erOic0qkM|245{nz)?UD`~x=3=i8B05D1zn%?scZZXx=)4f;GNoor&HeUa zW}q?eUmUee#*yW&mrZZPLVNNMgQddKR za!V^XC1vU(vuvtj_YXJwtO#{BR@SbJo=a6F(Joc&Qd|P)uN8*%!BphrR3ZpSD}UH)Y~3@z@5V_u=wS5 zG9E^!)Q}_3gmQK>t>vQ;vk5O1*PL*u0i{;*cj+{CWvVq^qKKFnDk`dl`Du-eEJ9-9 zvy;7XRzXtH+TZWUbai#JR#lydmlL8B&1}s&?h>`+yH{3y`|(XpTWop3fa&8~i`I&L zH#!pyLWH#ZFxDZa;($#cI5nyflqfZ2o3GtcL5%G9<|3@`JU(0yc4`IFrGG>I6D|R}#kG-QD@QxgXTb zwW=|RYh#rj%uGy$PD9MHq5Cdd*acMmAa(m$PjVs>iCkV@4hnkjnov?wQ0+D6Tq`iX zzag`&k0))mL~IeDg}&vte{d8p=EAKM!*=7!jDy>Y7oW7yYFT|%-c?K==WD|7o12?o zSzF^1QBF)xr@mmv!^NfiwLDasRa`76EIiQOo|BZ6WY&>DBlt==s}B{Nly?d{TB5ma z$E$QP*rWaZVA^~66<_1Hu|IIrw>WMDJqWxO867=5JRC-O@9((-_bn2l1w7yOuc!M~ zrBBDqGjJp{0~Ch`2b*+E`uqE##1{1;RWf@mi?$gl%qYyv%Tr|36(r;`tYLR$ARq}Xtqn+ zxUZ8QaOX_%Q4(nmYP!g;MSY4g=cm@z){a+f*z$zNv@z9CXP8&eD{}K@O?S5n3uzwb z@Ye|$o!W@*Dw{!)K7xB*%6|Mn&mWx<|5AL>5Ix4n5%{)z;MR z>+6FjR;j4eqZ5?rPasSuOqfV_<7*8-=NNSslsD&Q5jl5!sc8rGv%jOPO~jH8#q9 zl-r)bv9vachxTSG6sB3DvogTX#Dmy7SJ%0Sy&ThRk`N8Pu=x}k+leEqKjVTIl z9XltdqT=Fo|Ej90)6-Lj(&O#S9>=L!#RPu0#!g1A)x-&!6LCU6Tq_zYIJrEH<%#(Z z2??ukvkWYL@-DyG_7jmLz0rwiM1Pe|&O6!J~P+TE6y0 zBA`{f^hw%R16^(Hte%B!_e#Z#o~3Qk%FrgwB9^B>$spSq8fyV!OlNOW~|g@%TH z(F&=OSzB0mEPlBqpR?tPFitIROiT=iTK4CAUNXwc%2wF5&6$?7{cVO0@vYYFg`SW^ zy`hTl+268rGIw`&oKUEdA}e(ms39Q=!+MIEnlV}_>AGaNiZAa{qD12}GT3Y- zMn+R}OW0lOk?qO(TVLNBY0R3ow*@r^;p^()!L3xs=fLA<`o(%8X=*Q{#F0BSRti&(W2BJ#+%bkLN+5e z{YI*sJmBln($a=7y0GA2l(Vypv~keCD5)ypoa+7Izj%Jm~QeZs5P8}lhl_(lnb+LzXt@iF>!KnjCntfH{KBxtp`kLh=kgwpptb*enOjiM z^G(2yB+BFr^-xGJznjl=fs`*(*Z(X2kpv6{7!a>q%(ce6v~!)FCv z$n6VhDotAzAt51X^vWORK(>cUcUM;R@A~`kCd*z8~T9dsoG~c!S|W(OwP^C%~HqA&d$1fc(|+# zsU|DO3EO{F)y7L2opvf1%@qIh;4sh?wIl4hK2i6cLNkg^@YUzaN{I%COJg6RzC>lU zMz+k@IFy{bbIDJdx-J6QsjK0ZEaDvt>^Hh0}CA{}uRZ<4^W8ml2gK15!x<>mjR88ssu>U~CH zhdb0KL-{NJmAtc8EtN1%!*#`5(bth0p^*bmVB5Y_3FX9R)F_DhwJX5*@b--|0C0~U z?Lc*W|K1F11#o_`bCK4{!PZ=wqDr!yhK9zsK1=P>wDNDc-(1$l+$$x8gw)w1ofo?6 z1_uX!{rcN9t4s#a5;{9OPB)H~^qunUR|ZPRl&#-YbTp)-;r84{{n?thuYKp-IIK8c zD@zl=?8*Mnd*)1gVJQi-?E_3Pw!{zxhcbB$VTSL|3z{)!#dFHeF95!*WApKy3eT|I)=vcSdfguw|ya zNlAIb+>(n-R@Tly=j51D%B1ukTUgiAto-O*Kp{UW-z53LF=CR#tA&=O2+Pqehf?)$ zbrl{Ed+Wy(aMwrAtcS;}@4G61M>;;!r|9(EQ=c0NZ~eYzBzhn25msX@Efvht|Ii;f zXBVpt7uWT9#Q1%AUGX_4Yj41_wCz+c)xwlbZ6_@vU>WvKCf|$>0_l$hu5WL}&Tk~YNp#r+TyE)t-hFoo+wWX`qGQCQ;2p%~U z>d?>^6HP6}^85TnU$m^z_OoGXUZ~yW!Au^-Hr3f;Yx{Jen5Xsm*;*;w?A%}54#LC3 zzfLk0$&7AVo47x>>a7hV=DBkx*;+eU&fHV(HfcA8S;BpL;Alnf@N4k+34_NBXG3>? zp&W~$hRkhJ2i#Bts@KxeXWf@S${8>7F%nsvUhO>AgNxW1TS4j5>>cG3M^o(;*;kkR zb1(R8yJWEpNP?!u#(}*R$-FuSFS>1#vvsooKF;U5y69&0lNlZ#Ml{v&-P^A^>lJ7u zBqXd?UNwZ!xo}U713d3guHd2snZ`LlH^z%92|Hli4;}XdZyG->(Z*K zkqf>!Au?p7q+egKUsgKZzR*HmrI)9{8Tka}ocxm~ajA+xtvJa`tdrhqa7KwfzO0n0 zlKGG+QymuRCsBE~U-%aTw~=zz*61f`PZSicUb|*9s&vL*j0@$NtSl@l+RZas@8*Xz_?`P! zKlBvYaU;Y3sA?2jqCZ|yAx`s7Vc1=fMi-}y;G;5&Q#b9WJxpfBWaVXJp848AA?>TDkmLEesQ*7gyNJyD`cvP@8N@3CD?N#~B{d zd(GdU2uOf-jxWwggHjn(85Nh}ToRFcrplv~YlBj55WJ(eH& zYt{XY9$GCUBO_75L(u*a6W7^vgpz4ng428_L#)y$EP&yV$0 zt)wOmO>BW#M}VJS>-*ReMgN-{s-ra*B0eI3w+!nIBB!+S(6xlDO-oa8+Wm9J`P z;teP{I5+^DOiU!9`>0*tSe$ILZMQ~Y6@6r_a$j3o{GoSPnJnU8mh@@-?ysMB_VO8GGUD;IF144g#cgG}Pu#`h@WB;m)Z$ku@>v)rG;sPnnyWcXK zzB~N=izcgkF+-nIX8SP#a<}s%2SVv3$_fjiZ+XDy$ETu3Hfl9SQdnS^xgOxJ@%yYd zFJ!I&R6&01+<$}h`_LTp1SuDi6EN1dfT9jbKh!I#QM5aAzldI|CcolWXt$d^m|oB~ zjP`1oG1zq(T5H9CmF@83-S3MIJ6;uJ30W#15Q1Q0@TOHDPWXNi`Uj^IJi z`ydWjtDtCEH*NY+5L_sBE+&s6Hzd4g@YXGisnAUy5B2%xZKpX_c6h67 zrVj^E^Wbm1cmI)E&b61D7#vXhEW0-9r&Enz-9aD=!5_LdJ9#Vryk&zU3^&%(v{HDDs~2KxYZ{QduglI;~j!Y__hWRtyg@6x$y%C$IPrr+{dL3zvp7bmBd>gi47p?_SP@Nn;F{}*1TCk`sSOf(2l zV?8!D)@t%C>iE-@l5ycsWC}3Jr2pr`%UReGDHm5$*GHHmbjo>O8o6kf^@&IGk?AJO}kOt zOHDxwRh5UX58+Suca|uV5WZ#L<#5!K!(ESswCL55(jGgsX=~gD3#uPanyvL*g@G+} z>KeWH{x3qFin}xZc=*@sXk}ZZj+P6=O4eu(4jNy-!B>nEHi)avba=k8vEew|-qhSa zRN&G9M9<<+6sF|ZeHKe6=8~HDWX{d|Bw(lTc+1Bt0m#T)dwhmsBKw^?d4+|oEgj5$ z(=&53Gjm;T!SV;&Jxb@o-NeLeJbYrEO6Q$|4oSXt;EKgodpYvaJQ7>cX5?&~#jl=@ zR0uy5L==*7NsO5<(+-r_j`yRr;a^397;(2vd7ess=Vc9~oQC-T#o6hv@$p2G@W{xW z?c5BDHn_i67ASZfXIr0jggQ7n@{wPo<3(*z#Cmyp5->tvGm;4t*;=B4cWVsHCHl~l ztV>BfnYrb{hwgV3LcN@?u0AfYU$}>ElQ)KqwP=An-#224IP^oKTS^? zd*C0Lv_wgqZ1?z)q^VF{r@v3|$8GH8-Q4993@)se=R5o_l$BqWp&}Q<2%mN5rgPbc z$n-pA-I|u(7$_Qe!OW)G9<~ zt4(M;m_}+q08gF%_t1;e)OX?uAt!HY@r7!E(%?_^)v(s`f|1DA}#b-snOg(o>AW|5K;;p z8x)JQ=*Y;JT_VD$1=!&T6E&|4yc{=`>(91mkFJ$4iopD5~llp{<`+&=DHPwp9y z8_P1o0Ph8>t$Q0?A8V**29h4=|TA@76gkGduUq~jGms|O9YzYzOwuVMVE-Pa@ zezO7w;B|1ebXV73hP8*f70-y#3^36IvL0X{4D&Yhga@V+jM(b|1{wh-R8av%(l-I@ zo<7q1$DshJXJTSv&1ZkCFm=qSj$Z!gOMnwtWMI}dMX$+jf_;~7{U^@{6p+tuaA^E>U(bZgSsYtlal=2D~;cGMPq-ylzZ~z zaI=L6a3M1@b3}OfJQGTEv^kQalp(UL7o$JKR~q!^4Z!x6YFb z-eW+BZ&zF+AfUVMb zLG|jH%^8qPw(7eFAguz5tTx^Vht5obl!Qr8SXc-ReqeBr%iXr?dzc!RUj7e%jt8=D zD32bv?<^KM%rt8jm>wJ*6)ZEbT|n!W3knGAfUc5XQ1Jf!d-1zb*Lt0aUE_>yQoZN0_Yd z-&T4dSx9R}kIb@ebRK2s2pfSmb#SRE|~3%NwQ1ipsmgoAf! zq|E6($>iKz35ZPe67Ic63^iMxwdLSbjeG6US&QkHq3(d929FDMDe?(xL=yp{fPjEX zW?_1I`oY<~^c}pK2xd;s?1K&Le|%i(1$px=rug`HefNd5BCGx{_f zsYN}#6)Wn*&QV7{G zsNN#25Fu8?XDr@{cO#8$70hj%G!+ZZn0sFJTM-FLQjrN+t(Dwe4XR5fOMdYp@{gSdV722SV-Y?(o_yg_N$93zN_oGu}Vsw4i#B} z&JWg1Pll51mX<;c@62>l1Td7;RO5rq8PMg+&#H~{{u&4*!7SNqhyv^g6Jg9kg2crSz*cZQFuEgKW0g>wf>{)UO%=4<5)L zIDlu1Ss3#J_)wS-LI%GsK(SKjdv;M4`5X<8Lm~aDtp$7nu7dfWzb_KP_teGt6kJ-p zAm)7dX9LH3Z_EQzlw~F^PoL3(C%x32aXV${_t!@U|?X0^$mv%VTO2C zA{ZsLyqqohK2HI9Py8`IsMBcu#y2e>uMs*!8IT-3l19eqA(g*TkBcbiSwJ-|75^BI zGu3qWLPeQ?4I&)6)R%>=ZL|VQb&B<;7H~Aw;jTa>FZ!9Ao5*IF!Ar6L6UtD7i=1o| zo10sbXAV4!#$&YF?gHDhr5qy*esA7908Jp8Q`fMf`RVhAhR?Q$VSk&$%htO@*=LHof30#v13klcE#tI zwUrrbBclgqJ?8xSwg<$F#*3fkK$w4Ob(@>}mfr|Gtf?@m1TnMK)03lE{jVAaRZD9KV~YXYe5%wKROd%hsw3%h>M129^2riQsm^t;kuAZL9xdydkUVFO9%0GP0PS1Jewr2g85VEuV1}S4+Dn{d< ze_sSYzt9tUtjFGJ+UOEYY0%*`3QVs`;vwkLz0g)UUb@ep_q2*z?gv)lPB$=kgAvHYrC8`I&b zZELfh)<5(pdk5stbnWHZ%!~=dC8no)3(PtvPRBBQPEO{V#=!tBEJWGa%>x;z%-9m| z_$L_RGVV1uHRV`6$0n5+AONvDtPl@R$Mzk#Y$b`E-u8Ggw*)Eo?Rf|z#A*rs*Wgmf zfNT)mjT3BM_+UQg6LWXPus-LbCXD^^H3SUs>@s>jbx zAmar~P(F(LUR2LzaBU->JjwtI<)Q0^HrY2nrOPAR>RN`g3JZJd>+AdaBAu&AkdR%1 z;Yk%B;;kj@Z)Flswu7jXz_QE`4%p3gRB+&MVZ^)Rq<&gWro_917b__(B$7 zY!5+KCdI-b#*w65GfsA9^GdVl9at3oy}jT176F81FLM@bhkRzdm(lV0w8Q6=Z|aqd zoE*W5M$(Gxl%EcFM$Z+0CN2ps^_Z;I=d)RxZNifwCYmu%$pvqp=Vj6#+=M$@QnI(X z>F)mF?0`_+TYTTq$^W~*lVS`ntDvA7_`{LSKy>arPw$O2sPV;tEYqJ~{yf#k4p!=} zz@Gp{x|^D&t7TQXZcKt=;7g2!!s1VX(w)(MS+{fPMxm5!V{rwYUr3gc6vUS3i z34{jo;9_%g?;15hoClazJKko1L_$$PysbVc)@y6FP>VxGZ$bsE_?Tk*bK4h{DIXCC>n1BY?=xyd60;=0-@wkQ`W=&@ zTe~Y76&{F*kMPv><8t@Ac%n10*nhA+`!e9b2G;*iqjeyUy@W`5@V^V3=Tf8Z?l->R zIe8^{Tkimf$hvFp?RrkK0{CfJ3UsgAPG?tAk{8nRBLY!XcN}OuDH$0?w=!M%w&C1w z#RTz#jjCX{>3N(jpYM)cohO%`yFUd~yRdj$U%%ATL~%I|N{b^#z1U{ho&BVD%7==; z3M5mZLf~lCm0KmxQe+^<0U~;O_Tx;UH)>f5a&q$kz1Q?AfyfnVadAnxO-{f4!(1U= znXq`)+s~zKk^J)|G}$)aj7uouc}bU59d|lcq@1qq=r0$FOU}g0qgi|PAvCf2X|uJ| zh>6Q>OXJ>0D=}sX7TlfK?6&rHNxStL(B^nC#yQ#^XW?2(v0efm9b*zybG+t% z%o4pI0aa`?7y3LyX<-qSC8_nO1w0KG=DGR~S)cO*bR~urvtT@S=Lhd*+fI+v*g*K2 z9|M78K*4uTQGCGHh~=KRJyBX^jt?$?s^ATZ8md&VhRHVa>XsJt#OiGqFiBshT?L6 z0ESOWy2;3x%zDDe*`inOjn>m(#y}jrZK)=yrVq$HEBeYZy|B|_Z)azxJ6~&zSVKpL zZEqu#TIlB5EQ8qG>COe25Ly8)(=XMDXR;hpL%9ZcT){Eqd=9@GE$;Okd!Cq93UG+B zAD;U7i{t^QpaWgv_xklefBtYS5GOC_@ML!};3DE51XkzT5JAvOump>MY{d)By}j~I;5E83t37T{2LwIg`46-(*eR}y2;$46 zm%t2Zv^qCaHp}8?i*U5b5cFDl%m%HWv6m`wXs#jXNm+t5hp}N(!$BZY!1HWr!AVLf z#)!%JG^P+I?uKLET)N8S2MD3qpmcr(S6Yuj#DV4By$$fMulO6b$BBRjxaxVPHS|ai zyiaiNk&Q3_fZYdHT$0u+0hvb~6gBl69TDTk4`AdMSz#sjMjYdLFvAX#We{v!TZy%; ziUEt@G8vmEh^O^P1+*#5TM%jIdons;`G>Sve;)}J@_dP)H`6OQ8`hL&tA#sJd#`ubX&388;W%u-<0Rn>zdjI}?z`Uw^--GXOyd_IlaI;pkEIMpp@S&CR z_I&Z8mssjJNiECb;LvFa;M+!RnAGx-%{b^Y|2fO`*Ep^fD@*-lc7KpCgKIabddw=e zyX7qwEHW)JbGUOjNYyE&rW(9Oimi`|gB_`$5Z9`XxVa!CUeA}&@oF@GXJEq!0CC}Z zV&VxOmxOgoKUX#F(W9(BU>{T*Zoe;Y?KcF{in>DMXsjFbCn2Sz+=t|Og4ZtGdq^os zo@_tYIz2sF3!|6#!d;T-fS9KpT7SpQ&hC)wV!r?T5pxn14UPHPS(%oF*_0lINIdBb3;mMaJD|pc-@qG_ zt#^FQ8TYv~mw>dwmEGemGbhL8p%Jj@kmkdkC)}=SE zA?!h<)W1;=O%qBE($Acdk_l0EwCXQjOv47h#sLkFfq?|QkYBT=H}0z$*(mV=L11GJUEDvWQlG8Y3{i{vdivjV)j(X z(eBFo;NS|^g|8ceu-3fBS9)l+QyPL5pFVx@*S8lJzgM%Jj{X=)Z?>eJ~pf=2yy$d=w{;9IEwRU#y-7 z+P1o?zIlnO&UFvtb7BRtY<;hpJ~LT~rNzZ3gph`yrKgu2VTV9Rg25T(S^(SG6_v(wLcd@4|5^xBWn?_W10betH+clYAuo*Tyr z?1;khQ<7H~wq^uE8*yrCTdY`!hOhuw{*%UsoIM!6g(8@%muM?5`UYOSY}8%>1A_8D z4eIH0Ew3s-E#fZ};(2Nfdw{qQoa_7NZS8;bUORb1;=<@Vxe&t_5lNMqK9Zu~p(@Q2 j!|(;q+V|jCYQwt!uZ2aPPw>lUh{ulxp=fg`i1-$!|_aP7n-U~%p4G08d2K+w3z6JJp z31P*67Yr8-1!+i0AN3me=bodYz6%6`-*NMc5yys41$JV&zEG9Jnz@gS!%Z`}r{N8D zQMk(Kxym@$*;&}TLS&pROkFL^={>AnVe|?wRA1`8!zYJ8=pip;pKEzeY)yOUk)Yc! zclj#gDwGWz6XZn0-^lRXw|Qo!T)Y}-tcsc&VS9{u*Iwn*^S3{4y@^Op?C9uNZ7QGc zm>P?`TW0#AxFEcuOzWN8n8n6%*WM)IvmDmdb01G%%YJ+-ORG?HrBz=Kw@5cNxGTiH z2vrCq5QYhX$nrrTSriaRa=5{@J~1)TWQW4Xs1Kd~cLN0@3s+ekD1iI@xRJO88&+I=qABOY-pJ9X~f*WBA4)tW{&7;)W7lXIdP>R!Jmw& z7;|1x%it&;ZL7U;b!2H5bA@W;o;6{4sqj@HX6Dk?BJ9FS-OA|j#^;|3ef zy`4WMhZZj5`-fyXe2}VFhwHXAWo7iiB!9?N@Y0pAeUNj=6I9OFc+AO-;EUYG`UY%zjtJ-aFdEzkh$hQP?#!CME`loKs6nOOfd_#%-*z$w^{q zlKXN>N=kb{Za@DlrR!n$NX8ufm*1|-JxPs?jk_LgTU%Sv)FO|ZVr1nM z5K4w|F)_~qQU%8(B*b05iah=OG?zK|!Gj0VnT}miG(rwjn-pV1=DZK2KYsj}r;@br z=a1|DpWnk@hwlZXXP`HtsU>+`R|f(EA(8SfyK~Qde9plKZQwMdG$F2-fi(rjK`ReK zO&?nRDTwuMy6U>VI2k|d_rIJiU0PbIx`>{=ekfv-qbZhu-%Tz(LlRwLL>$q9+iuw8 z?AGz?fkxrico$*nP*Ye)w_z@?uC@Pf?w-R9w8E!{raP}ohc=|8rTwojJz}fF`?&3= z>fE;`;w0EN#tO~c)oKut9PQlfNJ`w$i}x2wc1wZpZlCx{YNo6vuGa9D-GOAp>r|?+ z!hLkWLr#z}rj_)qQ_C0gzc_h!8>_QLa^^LEfmTr@mEa&*$#3&F59Obb6m@G6&`E+2 z%q`Lg`tc0=Rb1hE0eGlWj_cBBTLx<&bgwNM?@b!(vc7^_nVaJXP)N9#c4Y^m48T7d8`Ru ztE&Z&71{{~)%P5DlfHfXCjW`r)XpL`Hn!YlrSI6XNmpNAf1|rp$&i$W__8h<6Efg^ z;c6KA;oze8SB=(AoL8g?`qYcYI=OrXiqoIoaXl?d`KB|HK5W7 zw#M&@4vOr-Z$}poUcG2SnM%zp$wG-^fR&3|Lc9QCW)> z#>K_`c>TmjFYo1(Dkz5^@;B-?3iXPf5XPVU?Hl#P&JXTSl|AD#KhoNrzbaW6`_nSy zq-u&KsdUae4szx^koG=WeZis^ABS9WuW=8KS@^uLx%oC5rRRp(eK9!GXZ-lf-l=b- zeD*ILEh^JUxEds5%N-^zlKdj&yHZM9^#o)fFT38DhSD{r9bVcr@mO-Q^!l8%9v5N< z_1h6ghhkzgCSc6TeXx|Jg|uo08LZug&?jR+ASm4b$%pQArRO%QTv9Y zU|5OQkT3+|*@>|HcltI?90~+6l-vK#kCPm03@1>>h3e?56n?WyW1tuf1oa7qxp~)< zCp$^p1ZB9msO6VM-_CvNb?QuBfBI_H&eo~_%jeIZhpg0ww(`*%^@jGx+tYH79;ElL zIM?G%yy+k3!3|$l=sG+Yd0%8qKZjG)tOXyzYr1+D|@vud|nm;3F*w8L16F zWw~B4dPDWG=Brnz55z2YZoSLyK=t?cx3#_RU#Vm_DE%bQ+m17t=>$%)*cE-eGdqh! z!gJ9leW_wB>S?(5?(OaF!b)~(2tLw{O^j8rD`S6%ic(Wi>FMotb9CfRQXwNF>%G$c zzPAu)B$-qG0^1c>Hyw;~y{H`>GSDgZr|x z>s{PSOYC!_ZU>o^O31!g1aDwDTOU5MJz2}eERY*;eKlEQN5%ab!a*MKv!tY?rlzKM zfBNX^@|-p9WAnwBQ@di;Rzsj)E(5Xgm#lWWYdj z|L(1KP=vjby2W$^$eiGvpUgi&Y6YKFH8Dhxb#UlCtSt+PO0z7!07nPqu*SV6m@sH& z?$4hb^acp4m-PI}pTPIzvr*>!6sq9GQ|MqjXaQ@+c*fn`UHzhe(<$Yqdc1r04&2R) z7cX3vdwA4w?%euwtLh9^axgjfo0#SLGCja!W7Mwu&r@nng~M-#1A<7Ms4{J>s*Lsg@ZU z+&t*DYrS|$Ty#LtD|Vs^?OU+W`P=!%W2gS!?V5I^O3T3u5C2HAeqc&x$# zne*byeVqF&Dv6FOeKgX)ntFVQAFKT8?iO{r=m>wnNKHfY0B=A?jK8?JSU#H8Z+Gqo zC{S{bVxb7mr<^FNzlQj_^dySZOz}GLX=!QVv^%x4{u{%En&8Gy_7<}hqU~p!FWbWi zl$Din?%%J1B7VGnO%dO}cx|9G}mZPuWZ8ux)H^3Ie zg#Q`5%V*UeE}LcZq0$j0ZDKN87vehdbm^kdn zK{Z-7Hn@^1^VaA~_z0K}ot^U8qlD6W@qPVK_B|}HhO##}#{cq+2iIkx<6hHqt}nmAUH6)b@IPW>Wi>Q1GVxwxF4XcqKiaCa z>OTSjaRql<8)QbPO*Z?TcXxNogyB!Oc+5`a!uTnsr>9Bv?`NaNe$)mvH27FpSV&-r zh;J``6L-^i{6*r4e=GN=$jHdtTnkWO)zid9d{1`sF5)EZo#eliOB?-Iazu7_Q!_`| zR8N@mZ%sA0OpQ79R-1TS_;ihxmER9(Gw0PeFaWX9u7DqnM`ciLd(~b~$7#^~b~Ppw zygf8@Fs{?L~&K8y}l`& zm{?f(`T15B7GB=o-|OptFYSL}Q5S^SLc}9rC6yaPvMTSIZW&D*5>N~8cF_ftv5UQK zg@BmGNAe_p0{Bz^BYTp{GP{eU&(YiHG>INFqO{eXaXwJg0f1bOgHu*Nc70Zm8^UbT znr}r@YTUHGy}Z4+vG~NPs-k9LzwU4|%Wvu}2td*$(#KyubS>6@|86s!oP{M99HXIK zsK~T{a}qgO7j5uOqp+%?>T`FFg>H8aZy^F<7yl@NQ|$?f;A)4ZY6Lmg(cvK;4h|C8 zuW37+W}N0LX#yV+MW%Y}jMI>jS(ca}UY(zvv69@E4iC%ksziKiUvjKB1o6w8jLqOn zn{G;x+`^7@7N$N!yhqLtHuJU-##?MuZrJv<&N~YSGseBR$G{#&`aurlH_YtkOhl+8 z9umq4cX$$E+u|O8Zk?YfhTyuT6&1WJEG!_>CPGJSs&4?9u%f50v9WQQ4jge^yL{1j zVL$zy0yh-Q@DH+s&3--#3JRGo70tAaGIii1@$vCdYEh43!@CwoD%mndy&la*|;gYh00**5!uXpYvGT(GqJVxc=iWC=Wz&vC8A2cR^UN z)A{zWdkmnHiJVDQj%Uv_Y6W02E?Fs7@6Vq7dU+@sO3a{l?el-g|A1gl zAzb*gDtlb5$DU_00T8t8qZcYFpFVy1<0vej&10jcC2=hFY)GPz!q&TuK<1%jw1buH z%GT1>>~E88_5@+Y&8^L?txf&Vr9Dq*YE5I~H`9la(1VVN9;vD?AeSDTh;t@vJo1RG z`7&r@G}!>+^d?%rf1eni*z@uYW*9KPp6ag^~}xNM+MM6Zd=*I!lynt zUz%kTh|{*p6QMoz&#BRvtox~bo){c6Uy8RgTPnpMYtFInc>IL@iLdlh^!4eS30+Qp z{_)y0%c5H7GkQm7*M)?B|oDqqpaYib{^{!_Lt^t+g8)+5~<&h zTYQ?tn}%)NUcC5_nwmP3QEFxP_>Hrhi#BVVe0I5Jml`>zah>zweZ-OfsGnR-Rz}$~ z&BF4ss@HmXX{4ijPW*AnFC0`@IXF1j*eWY3-ss225BcM&=H_V_Sf_dY>?Q>dG5v36 z4!fMrBAM=?0&83aJAAa@0B7Htv8k+#yM-Q1C3Jv+_T?+vVUR&M+1YbAbZFD9{3E(n zP+SzLVjeT+vrT_xl3E(24!ZU6l_!7sN`m=Co8C3={4jprx&E(-C;&;lskFfiZgdd0 zox4rXO}1e9=M#;yYh?>k#W?Z@dFGvHD94+z!mghoB%b5Kwa3g#LktR;bvRi8}&9hrnhDGGM$_HEMpcX?u2jHC4W``HMwnTTG1 zByMV&8PxIoQ7rbI_nmkngxGh8u%GA-k^f3Zr?aBi%S4%pNOU@*avaiMT$)7q*_Ty>i9g4v!JS_S4>L#yt_>dn zh=$$or8nDUJOD%8IaO4(X>jJa7Y(l4pTB*Z%2ptF_i~`t#N@z>L0S>uDUCuEH8p%} zY}i<;y^R3|Z8S>)5&*ijTFV1*aau0dXR8if{@DpHhuYGw&NV?cuc)j<$c;vBEET)m zU43*S-rVtOVQ%gjrP#-)u0;`KDh)OD9qH#I{rd@!I7M&?0W8<){%21Cq!}5hmc&30 z#trd>NoU3!(GTHUcy~vwhM(3T4LK9q=O6yXbXgEW8*|e^moL?@d3J0M{JZ=%Gqh!0 zB>J@y5)!05cUv=rU~Utj$bxNufB*Bs=f*~HEUd8Y>4wSiiF+sSF;kCe`7C>mwkD%# zMb_7ro>q`)(}*j8PQM7?3pKdym}h8LF(kb!f3du%_nDZAo9J}<^guB7$t{HsjCN9j z$kFVMN9BQBU{F=5X!_B^YT<=9i;EH4YbN=l($t+t@w<@f^WEF<>j|0>LUoVe(4Mlk=IB3fB{@pSXc;77;QqPjuf(+_&Za4j87{L zo7s7&i)EK5!$?ox+SRoJI+nY4?*^nDT4JYn)mBxwI^JvwbAMl#^a_x0=7u3D~BZFK;=5%ZvY(gb#N z*YZDgEq*ALYw|v1Wo2j8j1$-?5-f54g6b&44ReIuu7@6+zKTA$PIt&aScaNXmXm`j zIOb$_kHHpQB0%1Jb+!QtH*z82E+(e`-+6@{h2|Fb-U-ko9Bz#2PVWF#Opv%YnDE`R zxrGJka|*h(zu;r(KkE%Q1qu-(~5-DUK zp?W;5>`&gd+m<%P$Hs!>2IiG*+8tXLlnQn^nLg+SB4i)=V4Yig&$^Sce70c)V(~Nk2isH^WpI2 ze41W63#Y&)NIxD~3Ivi-ZR-40#8v5W+*6mhkuNE7?zbUT*rL!D))st!A^RD6E@&7g z{I?;`G$rQwU%!!l zRPzAxtWsG~vA`?N#4j6UQPh}6VT-eHJ zFd)!Z`~lpxZD{myP(7(Qt$pwv$be|p_`lmf^o;RjxNE!;qShWylQml)`IJSik?&2g z1LNoqbLh)1WFB`C*+4o=-*0a7)BWc^f4b0#CsNT}-*2BAxD{wc(re)T~@LN#OWY^Ej_yk>J zeQRO=i<#YdDRC%Ae3I1lQiBI0xTy0(bT*>cv+5htf}DfWac5?8VWA#{dcG{^JW_-3 zlBS<4HkM!)5_&8oWO=x5dJCgVy!{i!yQHMbk@aXz&3yOm&EdaW!d}kDrw7q9O$N@# z_P;Mq74lWqqRen0X*M^H@%?gzV$Py-k4{?ue)WiLQ6_<-k8Yl3i zh9WGzXShJcn=wYt$5imn1Y!A}W$U<5Cig9NUH@7vZ@CoA&H2-AH`ysF76Ci0vX+?f zJ5FfuQ2rPpz{7*p6}cgc1h*$?J6h_oO+rp?yWAu4(qqY?5yi~w+#;Q+@kDE<<$8n4 z!BwDz^ueC8rR58+dQJw0Tm=ICq1x{ztKpE;5LC6HE<8pXo zUPdi9zH7cLm@qZ!DcfSwP!dvLG#>!${qS%TLqna@vl3*l-$^^cBCI|oWorb!vwm2P zDf8CeUgiAg4Rm|q5twh!C3Hu|^}oixQptCi^`}pW=y6zDmdqh0B^AZNu^*~kY!8D{ zQ8A>}RFlTXX)lc33Y52XWOb_VlxR>@Q%lfh-Tr=fRkcf}Nh-~djf(k9M9X0Qd=sIX ze%^Dk;@8yNj7m>8p(Q^~(V&nqnQ1W*eLHrXl*Bw@iR{+!@|iTL|7=pd>qNla^ZV(+ z->L?8L?Ge9mR)+P(Wvv}-ulRUm#?Q4IsOJp}pP`a1AFA8z4y3 z6J`t>pZG0?ih*fTam9C33DLr15@%*2 zBnS!-j;&W7Tb+?Bf)2Ff<=MggE3Rt`Rc2kYuv4K~Lul=`wz|5Qn3$=?;7h2UUcvU* zD~-zit;y12eZHQba+?c}j4Lh2js z9^gMSG_>6o54h_0f_g1edC5#zxl?$Kkz>~>Hl`f|MeR;=lrij-t4G)I>pi# zo89wjnYBC@+`lqE3lr08Dhxoph1&!z~ZiQ!T1# zY9IHV=c2ctO~M5Jk#u>=tX@~|A6T#0rkXqgiL(Gv0T~ak1?RY^9^x@b( z$iPIl2oJ+v>aNG?-#EDLy5`f!OIfg6=xrM7aQROX~8N1^R2{pyg~G zZYmRYh__8uOW$YCk8-AsuC-pwV+abngLT*8+}{8ZmjcuoRlOuaN+L>1qU18(cNY2w zxD6gVw4&y)ep-oH--F)s;~lgiJUrbv>FPQ`!x=n;sfnGRG(&ali_-J>p^7TRl*Y;F><#p@TCDu{?tkP_wSEX0z*FRs4 z8a#~Zy@3cGMApGsa3~`u_tfz#4Fp1ozVQMmFaXV5-)rCc*+H$3Rgz0}?dlFD*4==E zEurS-=HM8hS>RH0$Ha>vzrj_9NyhjbfdJ5MOtZXsVYS3{9N>i%G61p}HUmI>#O30xu~A`hg8ZK^?I z_o;zG{bCaWQ6Eb8>*X!n{NRF4E>p@K?Cp(I^YQfLhwT|OkAJRWeagdw8trr6Tlje! z3!f?Y3CYKSn3vMwzs-3mBiYXjtV?@djka7(O-&Wq=4xG?#>gZitNais*m?nz=wneJ znfI664a^UfjEys>EO`9ox0YQNYoSVVQqqgbe2<+Ogoso-clFgHh8!SnnfP7C{Wcf% z{sSBSRuGZENhJNp`Lu?vrrKe)dE&mXn3$Ehxt6T}y7*i3SEXx1_@_^}g(_!t>U(u= zjKRhK5>+Fu(6?HL=FvZPz?kNw`SnsphSqQjR8xpJn{Tp|AM@@^BO8x@U#Q#kIapbF z0FDV7aGZX9u@Wa$BJO+g5D}%$LnoL4N>IdEh#sy>o7tn!IFHTrU39v3H8=#!7Jqml;%otFm|t&%R2LwmHol~?I478lMM8FQ#rV^v zZ1VEk*1h76Tp(y0kU3TdGS)8EZA&GOQx?(Jmmdv*t>8iLvaA2L5SB9qWI}_Vu?7M_ z@{|(YzeLUdccv_wubI|XSAFsG>ULla^Aq7!k!aARWM?xTJQThK;QohCpQfsP&<6m1 zGvl_Gu`6E-sMDunWT@IsqI!6Nu0xF0r4xl1c~)g_c~u z^-GuZ!)B1rb^@+|$$+sEjl$3-(YI@Zxqw~9g9-4lhb=kk;YTAIK$aDn^)<7#MJ_pG z1>-*?6b5ex%sRhNwK;4+Gwk2mUpQ>|;AmbpyzT+C2lar$j*C8b#aa|j<05WN+s9TXw z^<7_#C~*j^4|a5Lut7EDfsE%E%2zLiO4?0S$wiPM3|iFSBS3e&7*dx~RaDGySXx<1 z7YneT?LW8d`zA8KL)`aGqH<@&&k1MYh;B?Bd%V%hMMes*=0>XpAI{QULn z*W_gH)d2=Eu?EoO-oNv{yIbjO$K-T9BjfdnZ94&-2s>GX z?UpSk8ygPZJ=KO7`GBQ~LtCINLlL9Xz0=}b8;dDkTwe(Hov#yWeJg(=kr9N_wvs;E zZ~b&61eixgdgHp5?uAGL8jlbgP-HqKhV?+I222^?{Ywq&2gk>g2nWl}x^A2ns{`){ zKPM!hK_TqvQIQUhj_yyB@DcUcHssg_vV3m>5GbUsFZk>pnAAI40Lw})d)4GnquP7ugB8f!q{gq?zmzqq`tH{=X!k5$SA0>-kOkB<+!av!)g)Ya8R0ncJ| zs72drAswEZn+rvB?qNYxhkyCNRIXS4f-1{Ka^K}e$ER>~S4*0=sDN^;+t!&t(2tk> zMSq;Vlx&pZA1TKoe!W_LQbDSEt)-@>=H%oAsIGi2BO@bFMG)u>K(>P7RcZhQ3M-c|1soQ6V8-TNf{S8YJc3LRZ%;%?6H8q_d%vA3k14>? zz~BU;y#}ylps<3`zuIotft?oXSIS3H3b=3TmFrz}QaL1Q9-3UA=>lF)Q866Qv~V~Z z$Hi_t0ie`vYf{03n*{*}NVV41X8{4%(Nb4+nQ*ISUutyh?N;K2tmpX{264&x7`?>e zw599Vc)&`PVWEEe7UWsP!W-hMUkS04m!uE5u>iGWh5H;AqWTUW4+5!5P8m6`oay4c z1Ce!MBO;;J>Q|@-yE#?|{z3BpiK+uv)Tn4PW0OCByu^aoDZg}V+P)gC=@JkV73Gb7 z#|V6lMu304&ICR``RZQ3dtB>JM@-4AQrb_s$}=e5=2%A*-ya)u1S=XYOv>YCKolevOvs@4JO~A8n4S?)-&4;|GY(mMod> z^S%nWbl#h^t`FFCzk&yPp`&V4*7#AR!?k zl%^H;+#R<{?@f}h0^Suju2-$(!{;vS!3xk6uo*;COF&|_>ifo{ z%S;xb%}SaIgc4}AjrQ~B&l5O}z)V6HYO+X&qhKnEieum1;7YlaJa1%y!La(81Cqf} zlROgrSzk4IQOlH3j2~D*&oPfBoc4p8nj};UXfY(BF5Qc56G{$N`e&=GzZjPi;NV0U zJnUNBgV7?uC<1(=%{o%18^&Suy-I&SJgTG4f9q_-;B=c-(&%#2C2m5}@654&s^QpK z%>dd$JsfMHPfnijBM2*9+zZIRVg1+2(RcjxwX{Gn8AccgojH$JSO_`HsHmzk2M33R z0UiA8i@IdyftZL$B%PH1#wY^JI_BVS!cJMbrN++nQ-<0jAIv}%k@VGj6kBZEKxL8aN-+XH~JYaV~V651QuRh2xV4PNudY)ZO2J1zevqGkh* zFVAClh^0Ypy>;sr6VW|}KPMj+u?T3Gf6J|q$eP(Pvb!7`$X&4Zo&&gHo)FBo8V4P{#_ z92^{%^8}*%A;E;eUOG27x6^zc)!YE?B|YG3d}s)GY;Oz~W}WQ%6&+LEQ6D}~aKCO< zp!4fk+ynXa_-N8$XqFfKHtpo%pg&jRDZ`(30x2-c8A}E=Z^s)vxVG-AD=Do{Hyi^u zhEv_`swADt<`NwjKy%X^44W)+4X1&@@tF0?A6mm^Xt~-!gCIlg|BN69z_(EAI}DX& zBu0lzl`?j>yyaqF*~RX$mDNgS>0f6LvZ;C(a>$&a5`ug{PYkv<959$So-FKNq&?*5kM>6ty zc*;1Bm{B3BxS#-ZEKi?41tdGna7F&hBWL-JPh2e*yj#A|*RScfC^8Vz2f-?jvxl7P z#hC?|m1A>%=>XOu*~yavSpjaj&cX5e>JpC6Vg9faTx@&0*=v*8h=kHh?>U%PVMUr7 zsBS#Gyc(H6N&5Kf*Dv5p(@Dt$4WT%#18A}wnhtejbcG*1dNWaFjV?7ogP!$buWR=D z%7c0XVh5LLzis@~&R*!CPN~Y49JfqJof1on2kg=aa%N^Y6#* z*8gk6c|-n*Ml7C8?SHA?ogBba1e)rJT8I95$D;TlSAfamm4&U;S@MknmT*6Y_9z`+V?xuHuM;L5~2wu3`M1zqi|dXs@(TmUNO$Da#AGoIO&+qa*wISA-p z)?b`20f&5Yz3=HUa%B1K%Y*vDgm1F4vOOt6T*AU*hJ!5u*MRj{b^Q)z(!iJC;F#UQ zd3K~4Ub^@7l^+*ZDFEpiUP5F|k`0z3?c5+$+{OyEw3rqHD5E`$0N!lNn`DDfeL@1J zKk#8!k95QPO0`%)A8T%0aEeGK9x<+97qbO0ztVD^5DWGNu}s;N4V(q54+gSrq&h<) z$diTrOL$O*ZZBPo{f)=Q%8JT`52llVd0xMAlEK%;6SS396;I_Jy=w8l#Kml1tf@yNGIL-UB z=Lu*IFyZhdEOgmIP4(i9fY-8jC&3-IyQ<5hH5vQY}w9NmkE`a8c0isQ{F??EybFM_Y`b#hb68XVWVjGPM z8R+I$4!8@}KxF6}^m=yxCYEca`*8a%BrO??-raJXw6^yTU3SV;STzA@w+191(*Gkb zsWws)0v7Jp&GL!=AXpt3kxB^m# z_aSp3QOjU9b#!&jDzz{tAQ`O`)DpSp$Nd9w$hpecky@tyYv>=*eL;`G5(o~w4clh- z!->sb<2*b(=n|82({qA+O?9brfBa&s zCl0G^X(igNK_taiGCJhVPE~rSPlWJ8>;9+Sc%JoGH>tHa|5SoD14&kl!Xt`S>^mUI z%oL(WSdxL8L4z-0$9(DsK4##GRPw?8J}_p`@NELa1Yns!;d%Up!??l|Scj{=0Y}o( zGAS7uXwW-4WTACi=XRh#0?#g(0p&Pv0#296q0Io}{!%lD@)Y!7w{IlxMUB}($Xp|WuG(KomwIRV8Ij`t6z}%&^ zzJ5#VaUnS5^1UCjLjF5Jl8oPna(?;U6K8H|DLH?;jJ=)vud(WgGX=sD;>nOD!prNt z^f30Mi6e#ig>w?35lJg5%JnGGoXi2^}iHa~BH*Jp^o(5`;e zz4}V(MX=TY!3`z|-mDDc6X9^eg^k6C>3fj=q#8dT#;S0Px%%K4J;=ZK`Tr#B|5y6` z|EdA}TO|0;*5bbox%<{>L(0}hX+5G$?*029M?HwRpJJlCJRgJkaKWqoV;!HO#v+s2$R2&AWWgG$&q7@kbyU-Pr=rP{8V`IZ+Rgw z2F1kAn&kAKXgn5{e9%5`vIefSj7-Uk@~25Zsm_8)f>k_V!twF)ic3gzMa9*j{C>b?S@x$j0bCYE zBlaj6gRs|4LBZVo4`|*2KW?I@R|h)Imdh=N{^$Hco6>ecr~zpyFmqBRtd3fBF`-a> z{D;D?K_>$Ccg0`>M#NNJsq;(dvwer()=yh)ifUB&cHoGxDq;WEpeG=mC zv00xYCTsIl(?{!Ftbhlx@H!FtQtufOc!Zm$&+LGmu&J?8K8n%{H0n^}LWE(t^H1d_ z6F`U!<*BB?GSx~An!Mcr!v%PO?5r%XdPf^4H(ogrQ{E+_9UVKwvaf(PW9 z%y~SJDdW&`c+@6`1Ni(YXZX7oyg;i-8~XwPo5MmwN7KUi2xpchf0G3Z`=*iMDm!^hh&1KnE z?P7~{^+a%Ra8c%P*1aL9JnYZP3h*fTBgpnM)9ZweL-A+qWe?CFmOei z@#;HVE^Hh?uhl#0UC|#uQVPCJ^hyJ{KvYzeNIEZ6eY(ntm}9oyWd*Pz;1OXn0HQBD z1kg=mbxzq+`fAvxp#AQOq&h~0(N()X6nva)P-3*Ux|*1t4&2N=DU&D^s1s&HQF2E$mW#VU;**3P4A@8F=Gf9l&TpPe}b zkPs&)=ZFrynArJauUGm~!TK~_rv=%w{oVO?Ab1FJZBIJ1 zr1DyPRAjnOK+rXh69_Azqyfzfm6X44_5L_;QhyWSd;0YE#Kak(sz6H@t*m{f!5Rk= zI=ZVXf8BsLX)}VW8CYTj(7SRXcqh@;*C2shqRbSOwR5}t#g0JFs(RU_<|eTR1#b=f%j%x?Y%y z`IZA=2@>61CmbE-5&(&t;c(ljHes-<==!;cu(0pxNCF7bp*1(aW_CTt4byzagvf4Oo?7Q|*2B zS0QeIVX%_X3T(g%({#SwppF>n0ic;yU^fcL@{!@_r&qNw%wZ%nl wbMCg=PKE*TT)qO50r=Xze`}L-FRlpM5mjyRe{K_lHL;Kva%!?A(y!nDe?!wHoB#j- literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/input/creating_basic_go.doc b/doc/salome/gui/GEOM/input/creating_basic_go.doc index 6693b469d..efdff9511 100644 --- a/doc/salome/gui/GEOM/input/creating_basic_go.doc +++ b/doc/salome/gui/GEOM/input/creating_basic_go.doc @@ -15,6 +15,7 @@ geometrical objects as:
  • \subpage create_isoline_page
  • \subpage create_sketcher_page
  • \subpage create_3dsketcher_page
  • +
  • \subpage create_polyline_page
  • \subpage create_vector_page
  • \subpage create_plane_page
  • \subpage create_lcs_page
  • diff --git a/doc/salome/gui/GEOM/input/creating_polyline.doc b/doc/salome/gui/GEOM/input/creating_polyline.doc new file mode 100644 index 000000000..7ec36434d --- /dev/null +++ b/doc/salome/gui/GEOM/input/creating_polyline.doc @@ -0,0 +1,107 @@ +/*! + +\page create_polyline_page 2D Polyline + +The 2D Polyline allows drawing arbitrary 2D shapes. + +To create a 2D Polyline select in the main menu New Entity -> Basic -> 2D Polyline. + +\image html polyline_dlg.png + +A polyline represents a section or a set of sections. Each section is constructed from a sequence of 2D points +connected either by linear setgments or an interpolation curve. Every section has its own attributes: +- \b Name, +- \b Type (Polyline or Spline), +- \b Closed flag. + +A Polyline created represents a shape that lies on the XOY plane. It can have the following types: +- \b Vertex for a single section with only 1 point. +- \b Wire for a single section with 2 or more points. A Wire can have multiple edges for more then 2 points if the section type is Polyline. +A single edge in the result wire is obtained for a Spline or Polyline with 2 points. +- \b Compound of Wires and/or Vertices if there are several sections. + +For the moment only one reference coordinate system for polyline creation is supported. The XOY plane of the Global coordinate system +is suggested. Implementation of another reference coordinate system is a subject of further development of this functionality. +Restore button orientates the viewer correspondingly to the chosen working plane and fits the scene to show all objects. +For the moment this button works with only one plane. + +It is possible to import a shape in this dialog using Import polyline selection button. To do it an imported object should satisfy conditions +for polyline shapes mentioned above. If a valid shape is selected, when dialog is opened, it is initialized by this shape. +Though the shape can be on any plane, an imported polyline will be defined on XOY plane only due to the limitation. + +The group \b Sections in this dialog represents the Polyline construction framework. Its toolbar has the following operations: +- \b Undo +- \b Redo +- Insert new section +- Addition mode +- Modification mode - not implemented +- Detection mode - not implemented +- \b Remove +- Join selected sections + +Undo/Redo buttons allows to undo/redo changes of the polyline. + +Insert new section button opens a dialog that allows to add a new section: + +\image html polyline_dlg_add_section.png + +In this dialog it is possible to choose: +- \b Name of section +- \b Type of section +- \b Closed flag + +To create a new section \b Add button should be clicked. \b Cancel button is used to cancel this operation. +After clicking \b Add button a new section is appeared on the list. Its name supplemented by its type and closedness +information (see icon) and the number of points (equal to 0 after creation). + +To modify section parameters it is possible to double-click on a section in the list. In this case the following dialog appears: + +\image html polyline_dlg_edit_section.png + +To apply modifications the button \b Ok should be clicked. + +Addition mode allows to add points to a section. It is necessary to select a particular section in a list of sections +and make some mouse clicks in the viewer. A section preview is recomputed after each click. + +Modification mode and Detection mode are not implemented for the moment. + +\b Remove button allows to remove a section. It is available if all modes are deactivated and one section is selected. + +Join selected sections button is available in modification mode if two or more sections are selected. It is used to +merge several sections into the first one from selection list. Joined section has parameters of the first selected one. Points of +the other sections are appended at the end of the list of the first section points. + +Some actions are available via popup menu by right mouse button click. + +If all modes are deactivated: +- Join all sections - join all defined sections into the first one. +- \b Join - join sections. Available if two or more sections are selected. + +In Addition mode: +- Join all sections - join all defined sections into the first one. + +In Modification mode: +- Join all sections - join all defined sections into the first one. +- \b Join - join sections. Available if two or more sections are selected. +- Clear all - remove all sections. Available if at least one section is selected. +- Set closed - set all selected section's Closed flag. Available if at least one section is selected. +- Set open - reset all selected section's Closed flag. Available if at least one section is selected. +- Set polyline - set all selected section's type to Polyline. Available if at least one section is selected. +- Set spline - set all selected section's type to Spline. Available if at least one section is selected. + +In Detection mode: +- Join all sections - join all defined sections into the first one. +- \b Join - join sections. Available if two or more sections are selected. + +

    TUI Commands

    + + +To create the 2D polyline in TUI Polyline2D interface is used. + +pl = geompy.Polyline2D() - returns an instance of Polyline2D interface pl. + +See the \ref gsketcher.Polyline2D "Polyline2D" interface documentation for more information. + +Our TUI Scripts provide you with useful examples of the use of +\ref tui_polyline_page "2D Polyline". +*/ diff --git a/doc/salome/gui/GEOM/input/tui_polyline.doc b/doc/salome/gui/GEOM/input/tui_polyline.doc new file mode 100644 index 000000000..ff83b9053 --- /dev/null +++ b/doc/salome/gui/GEOM/input/tui_polyline.doc @@ -0,0 +1,6 @@ +/*! + +\page tui_polyline_page 2D Polyline +\tui_script{polyline.py} + +*/ diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 076f4fed4..8863bae26 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -164,7 +164,8 @@ module GEOM /*! * \brief Kind of the curves. * - * Used in the functions GEOM_ICurvesOperations.MakeCurveParametric(), GEOM_ICurvesOperations.MakeCurveParametricNew() + * Used in the functions GEOM_ICurvesOperations.MakeCurveParametric(), GEOM_ICurvesOperations.MakeCurveParametricNew(), + * GEOM_ICurvesOperations.MakePolyline2D, GEOM_ICurvesOperations.MakePolyline2DOnPlane. */ enum curve_type { /*! Polyline curve */ @@ -208,11 +209,12 @@ module GEOM }; - typedef sequence string_array; - typedef sequence short_array; - typedef sequence ListOfBool; - typedef sequence ListOfLong; - typedef sequence ListOfDouble; + typedef sequence string_array; + typedef sequence short_array; + typedef sequence ListOfBool; + typedef sequence ListOfLong; + typedef sequence ListOfDouble; + typedef sequence ListOfListOfDouble; interface GEOM_Object; interface GEOM_BaseObject; @@ -3332,6 +3334,72 @@ module GEOM * \return New GEOM_Object, containing the created wire. */ GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates); + + /*! + * \brief Create a 2D polyline (wire or a compound of wires). + * + * The polyline can have several sections. Each section represents a set + * of points in the form of list of coordinates of the following order: + * x1, y1, x2, y2, ..., xN, yN + * Each section has its own name, type of curve (can be either + * GEOM::Polyline or GEOM::Interpolation) and Closed flag. + * For each section a wire is created. It represents either a polyline or + * interpolation BSpline either closed or not depending on the Closed flag. + * The result represents a wire if there is only one section is defined. + * Otherwise a compound of wires is returned. + * + * \param theCoordsList the list of coordinates list. theCoordsList[0] + * is the coordinates list of the first section. theCoordsList[1] + * is for the second section etc. + * \param theNamesList the list of names. The order corresponds to + * theCoordsList. + * \param theTypesList the list of curve types. The order corresponds to + * theCoordsList. + * \param theClosedList the list of Closed flags. The order corresponds to + * theCoordsList. + * \param theWorkingPlane 9 double values, defining origin, + * OZ and OX directions of the working plane. + * \return New GEOM_Object, containing the created wire or a compound + * of wires. + */ + GEOM_Object MakePolyline2D (in ListOfListOfDouble theCoordsList, + in string_array theNamesList, + in short_array theTypesList, + in ListOfBool theClosedList, + in ListOfDouble theWorkingPlane); + + /*! + * \brief Create a 2D polyline (wire or a compound of wires). + * + * The polyline can have several sections. Each section represents a set + * of points in the form of list of coordinates of the following order: + * x1, y1, x2, y2, ..., xN, yN + * Each section has its own name, type of curve (can be either + * GEOM::Polyline or GEOM::Interpolation) and Closed flag. + * For each section a wire is created. It represents either a polyline or + * interpolation BSpline either closed or not depending on the Closed flag. + * The result represents a wire if there is only one section is defined. + * Otherwise a compound of wires is returned. + * + * \param theCoordsList the list of coordinates list. theCoordsList[0] + * is the coordinates list of the first section. theCoordsList[1] + * is for the second section etc. + * \param theNamesList the list of names. The order corresponds to + * theCoordsList. + * \param theTypesList the list of curve types. The order corresponds to + * theCoordsList. + * \param theClosedList the list of Closed flags. The order corresponds to + * theCoordsList. + * \param theWorkingPlane planar Face or LCS(Marker) of the working plane. + * \return New GEOM_Object, containing the created wire or a compound + * of wires. + */ + GEOM_Object MakePolyline2DOnPlane (in ListOfListOfDouble theCoordsList, + in string_array theNamesList, + in short_array theTypesList, + in ListOfBool theClosedList, + in GEOM_Object theWorkingPlane); + }; // # GEOM_ILocalOperations: diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7c10ef0d4..b4f792af1 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,15 +27,6 @@ SET(SUBDIRS_COMMON STLPlugin BREPPlugin STEPPlugin IGESPlugin XAOPlugin VTKPlugin ) -## -# Curve creator -## -IF(SALOME_GEOM_BUILD_CC) - SET(SUBDIRS_CC - CurveCreator - ) -ENDIF() - ## # OPENCV ## @@ -52,7 +43,7 @@ IF(SALOME_BUILD_GUI) SET(SUBDIRS_GUI OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI GEOMBase DependencyTree GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI - EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI + CurveCreator EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI GEOM_SWIG_WITHIHM ) diff --git a/src/CurveCreator/CMakeLists.txt b/src/CurveCreator/CMakeLists.txt index 34582d31c..15677b68c 100644 --- a/src/CurveCreator/CMakeLists.txt +++ b/src/CurveCreator/CMakeLists.txt @@ -57,9 +57,8 @@ IF(SALOME_BUILD_GUI) # header files / to be processed by moc SET(_moc_HEADERS CurveCreator_NewSectionDlg.h - CurveCreator_NewPointDlg.h + CurveCreator_TableView.h CurveCreator_TreeView.h -# CurveCreator_UndoOptsDlg.h CurveCreator_Widget.h ) ENDIF(SALOME_BUILD_GUI) @@ -68,13 +67,15 @@ ENDIF(SALOME_BUILD_GUI) SET(_other_HEADERS CurveCreator.hxx CurveCreator_Curve.hxx - CurveCreator_CurveEditor.hxx CurveCreator_Diff.hxx + CurveCreator_Displayer.hxx CurveCreator_ICurve.hxx - CurveCreator_Listener.hxx CurveCreator_Macro.hxx CurveCreator_Operation.hxx + CurveCreator_PosPoint.hxx CurveCreator_Section.hxx + CurveCreator_UtilsICurve.hxx + CurveCreator_Utils.hxx ) # header files / to install @@ -90,17 +91,17 @@ ENDIF(SALOME_BUILD_GUI) # sources / static SET(_other_SOURCES CurveCreator_Curve.cxx - CurveCreator_CurveEditor.cxx CurveCreator_Diff.cxx - CurveCreator_ICurve.cxx + CurveCreator_Displayer.cxx CurveCreator_Operation.cxx + CurveCreator_Utils.cxx + CurveCreator_UtilsICurve.cxx ) IF(SALOME_BUILD_GUI) LIST(APPEND _other_SOURCES - CurveCreator_NewPointDlg.cxx CurveCreator_NewSectionDlg.cxx + CurveCreator_TableView.cxx CurveCreator_TreeView.cxx -# CurveCreator_UndoOptsDlg.cxx CurveCreator_Widget.cxx ) ENDIF(SALOME_BUILD_GUI) diff --git a/src/CurveCreator/CurveCreator.hxx b/src/CurveCreator/CurveCreator.hxx index 74a3faec4..9cd7ec720 100644 --- a/src/CurveCreator/CurveCreator.hxx +++ b/src/CurveCreator/CurveCreator.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -24,29 +24,30 @@ #define _CurveCreator_HeaderFile #include +#include +#include + +struct CurveCreator_Section; +struct CurveCreator_PosPoint; namespace CurveCreator { - - //! Dimension of the curve - enum Dimension - { - Dim2d = 2, - Dim3d = 3 - }; - - //! Type of the section - enum Type - { - Polyline, - BSpline - }; - //! Points coordinates typedef float TypeCoord; + /** List of coordinates in format depends on section dimension: + * 2D: [x1, y1, x2, y2, x3, y3, ..] + * 3D: [x1, y1, z1, x2, y2, z2, x3, y3, z3, ..] + */ typedef std::deque Coordinates; + //! List of sections + typedef std::deque Sections; + + // List of positioned points (points with coordinates) + typedef std::list PosPointsList; + //! Map of sections with positioned points + typedef std::map SectionsMap; }; #endif diff --git a/src/CurveCreator/CurveCreator_Curve.cxx b/src/CurveCreator/CurveCreator_Curve.cxx index b4fa90ffc..e20705c46 100644 --- a/src/CurveCreator/CurveCreator_Curve.cxx +++ b/src/CurveCreator/CurveCreator_Curve.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -21,8 +21,21 @@ // Author: Sergey KHROMOV #include "CurveCreator_Curve.hxx" + +#include "CurveCreator.hxx" +#include "CurveCreator_PosPoint.hxx" #include "CurveCreator_Section.hxx" -#include "CurveCreator_Listener.hxx" +#include "CurveCreator_Displayer.hxx" +#include "CurveCreator_Utils.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include #include @@ -30,24 +43,995 @@ // function: Constructor // purpose: //======================================================================= -CurveCreator_Curve::CurveCreator_Curve - (const CurveCreator::Dimension theDimension) -: CurveCreator_ICurve(theDimension) +CurveCreator_Curve::CurveCreator_Curve( const CurveCreator::Dimension theDimension ) +: myIsLocked (false), + myDimension (theDimension), + myDisplayer (NULL), + myAISShape (NULL), + myNbUndos (0), + myNbRedos (0), + myUndoDepth (-1), + myOpLevel(0), + mySkipSorting(false) { } //======================================================================= -// function: addPoints +// function: Destructor // purpose: //======================================================================= -void CurveCreator_Curve::addPoints - (const CurveCreator::Coordinates &thePoints, const int theISection) +CurveCreator_Curve::~CurveCreator_Curve() { - CurveCreator_Section *aSection = - (theISection == -1 ? mySections.back() : mySections.at(theISection)); - - aSection->myPoints.insert(aSection->myPoints.end(), - thePoints.begin(), thePoints.end()); - if( myListener ) - myListener->pointInserted( theISection, -1 ); + // Delete all allocated data. + clear(); +} + +//======================================================================= +// function: getDimension +// purpose: +//======================================================================= +CurveCreator::Dimension CurveCreator_Curve::getDimension() const +{ + return myDimension; +} + +//======================================================================= +// function: getUniqSectionName +// purpose: return unique section name +//======================================================================= +std::string CurveCreator_Curve::getUniqSectionName() const +{ + CurveCreator_Section* aSection; + for( int i = 0 ; i < 1000000 ; i++ ){ + char aBuffer[255]; + sprintf( aBuffer, "Section_%d", i+1 ); + std::string aName(aBuffer); + int j; + for( j = 0 ; j < mySections.size() ; j++ ){ + aSection = getSection( j ); + if ( aSection && aSection->myName == aName ) + break; + } + if( j == mySections.size() ) + return aName; + } + return ""; +} + +//======================================================================= +// function: setDisplayer +// purpose: set curve changes Displayer +//======================================================================= +void CurveCreator_Curve::setDisplayer( CurveCreator_Displayer* theDisplayer ) +{ + myDisplayer = theDisplayer; +} + +//======================================================================= +// function: getDisplayer +// purpose: get curve changes Displayer +//======================================================================= +CurveCreator_Displayer* CurveCreator_Curve::getDisplayer() +{ + return myDisplayer; +} + +//======================================================================= +// function: removeDisplayer +// purpose: remove the attached Displayer +//======================================================================= +void CurveCreator_Curve::removeDisplayer() +{ + myDisplayer = NULL; +} + +//======================================================================= +// function: addDiff +// purpose: +//======================================================================= +bool CurveCreator_Curve::addEmptyDiff() +{ + bool isEnabled = false; + + if (myUndoDepth != 0) { + // Forget all Redos after the current one. + if (myNbRedos > 0) { + myNbRedos = 0; + myListDiffs.erase(myCurrenPos, myListDiffs.end()); + } + + if (myUndoDepth == -1 || myNbUndos < myUndoDepth) { + // Increase the number of undos. + myNbUndos++; + } else { + // If there are too many differences, remove the first one. + myListDiffs.pop_front(); + } + + // Add new difference. + myListDiffs.push_back(CurveCreator_Diff()); + myCurrenPos = myListDiffs.end(); + isEnabled = true; + } + + return isEnabled; +} + +void CurveCreator_Curve::startOperation() +{ + myOpLevel++; +} + +void CurveCreator_Curve::finishOperation() +{ + myOpLevel--; +} + +//======================================================================= +// function: toICoord +// purpose: +//======================================================================= +int CurveCreator_Curve::toICoord(const int theIPnt) const +{ + return theIPnt * myDimension; +} + +//======================================================================= +// function: setUndoDepth +// purpose: +//======================================================================= +void CurveCreator_Curve::setUndoDepth(const int theDepth) +{ + if (theDepth == 0) { + // Reset all undo/redo data. + myNbUndos = 0; + myNbRedos = 0; + myListDiffs.clear(); + myCurrenPos = myListDiffs.end(); + myUndoDepth = 0; + } else if (theDepth == -1) { + // There is nothing to do as the depth become unlimited. + myUndoDepth = -1; + } else if (theDepth > 0) { + // The new "real" depth is set. + if (theDepth < myNbRedos) { + // The new depth is less then number of redos. Remove the latest redos. + int aShift = (myNbRedos - theDepth); + ListDiff::iterator aFromPos = myListDiffs.end(); + + while (aShift--) { + aFromPos--; + } + + myListDiffs.erase(aFromPos, myListDiffs.end()); + myNbRedos = theDepth; + } + + if (theDepth < myNbUndos + myNbRedos) { + // The new depth is less then the total number of differences. + // Remove the first undos. + int aShift = (myNbUndos + myNbRedos - theDepth); + ListDiff::iterator aToPos = myListDiffs.begin(); + + while (aShift--) { + aToPos++; + } + + myListDiffs.erase(myListDiffs.begin(), aToPos); + myNbUndos = theDepth - myNbRedos; + } + + myUndoDepth = theDepth; + } +} + +//======================================================================= +// function: getUndoDepth +// purpose: +//======================================================================= +int CurveCreator_Curve::getUndoDepth() const +{ + return myUndoDepth; +} + +void CurveCreator_Curve::getCoordinates( int theISection, int theIPoint, double& theX, double& theY, double& theZ ) const +{ + CurveCreator::Coordinates aCoords = getPoint( theISection, theIPoint ); + theX = aCoords[0]; + theY = aCoords[1]; + theZ = 0.; + if( getDimension() == CurveCreator::Dim3d ){ + theZ = aCoords[2]; + } +} + +void CurveCreator_Curve::redisplayCurve() +{ + if( myDisplayer ) { + myDisplayer->eraseAll( false ); + myAISShape = NULL; + + myDisplayer->display( getAISObject( true ), true ); + } +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::moveSectionInternal(const int theISection, + const int theNewIndex) +{ + bool res = false; + int aMovedSectionId = theISection >= 0 ? theISection : mySections.size()-1; + + if (aMovedSectionId != theNewIndex) { + CurveCreator_Section* aSection = getSection( aMovedSectionId ); + + // Remove section + CurveCreator::Sections::iterator anIter = mySections.begin() + aMovedSectionId; + + mySections.erase(anIter); + + // Insert section. + anIter = mySections.begin() + theNewIndex; + mySections.insert(anIter, aSection); + res = true; + } + return res; +} + +//======================================================================= +// function: moveSection +// purpose: +//======================================================================= +bool CurveCreator_Curve::moveSection(const int theISection, + const int theNewIndex) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::MoveSection, + theISection, theNewIndex); + } + + // Update the curve. + res = moveSectionInternal(theISection, theNewIndex); + finishOperation(); + return res; +} + +/************ Implementation of INTERFACE methods ************/ + +/***********************************************/ +/*** Undo/Redo methods ***/ +/***********************************************/ + +//! Get number of available undo operations +int CurveCreator_Curve::getNbUndo() const +{ + return myNbUndos; +} + +//! Undo previous operation +bool CurveCreator_Curve::undo() +{ + bool res = false; + if (myNbUndos > 0) { + myNbUndos--; + myNbRedos++; + myCurrenPos--; + myCurrenPos->applyUndo(this); + res = true; + } + return res; +} + +//! Get number of available redo operations +int CurveCreator_Curve::getNbRedo() const +{ + return myNbRedos; +} + +//! Redo last previously "undone" operation +bool CurveCreator_Curve::redo() +{ + bool res = false; + if (myNbRedos > 0) { + myCurrenPos->applyRedo(this); + myCurrenPos++; + myNbRedos--; + myNbUndos++; + res = true; + } + return res; +} + +/***********************************************/ +/*** Section methods ***/ +/***********************************************/ +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::clearInternal() +{ + // erase curve from the viewer + if( myDisplayer ) { + myDisplayer->eraseAll( true ); + myAISShape = NULL; + } + // Delete all allocated data. + int i = 0; + const int aNbSections = getNbSections(); + + CurveCreator_Section* aSection; + for (; i < aNbSections; i++) { + aSection = getSection( i ); + if ( aSection ) + delete aSection; + } + + mySections.clear(); + + return true; +} + +//======================================================================= +// function: clear +// purpose: +//======================================================================= +bool CurveCreator_Curve::clear() +{ + bool res = false; + startOperation(); + // Set the difference. + if (addEmptyDiff()) { + myListDiffs.back().init(this); + } + res = clearInternal(); + finishOperation(); + return res; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::joinInternal( const std::list& theSections ) +{ + bool res = false; + if ( theSections.empty() ) + return res; + + int anISectionMain = theSections.front(); + CurveCreator_Section* aSectionMain = getSection( anISectionMain ); + + std::list aSectionsToJoin = theSections; + aSectionsToJoin.erase( aSectionsToJoin.begin() ); // skip the main section + // it is important to sort and reverse the section ids in order to correctly remove them + aSectionsToJoin.sort(); + aSectionsToJoin.reverse(); + + std::list::const_iterator anIt = aSectionsToJoin.begin(), aLast = aSectionsToJoin.end(); + CurveCreator_Section* aSection; + for (; anIt != aLast; anIt++) { + aSection = getSection( *anIt ); + aSectionMain->myPoints.insert(aSectionMain->myPoints.end(), aSection->myPoints.begin(), + aSection->myPoints.end()); + res = removeSectionInternal(*anIt); + if ( !res ) + break; + } + + redisplayCurve(); + return res; +} + +bool CurveCreator_Curve::join( const std::list& theSections ) +{ + bool res = false; + + if ( !theSections.empty() ) + { + startOperation(); + if (addEmptyDiff()) + myListDiffs.back().init(this, CurveCreator_Operation::Join, theSections); + + res = joinInternal( theSections ); + + finishOperation(); + } + return res; +} + +//! Get number of sections +int CurveCreator_Curve::getNbSections() const +{ + return mySections.size(); +} + +//! For internal use only! Undo/Redo are not used here. +int CurveCreator_Curve::addSectionInternal + (const std::string& theName, const CurveCreator::SectionType theType, + const bool theIsClosed, const CurveCreator::Coordinates &thePoints) +{ + CurveCreator_Section *aSection = new CurveCreator_Section; + + std::string aName = theName; + if( aName.empty() ){ + aName = getUniqSectionName(); + } + aSection->myName = aName; + aSection->myType = theType; + aSection->myIsClosed = theIsClosed; + aSection->myPoints = thePoints; + mySections.push_back(aSection); + redisplayCurve(); + return mySections.size()-1; +} + +//======================================================================= +// function: addSection +// purpose: adds an empty section +//======================================================================= +int CurveCreator_Curve::addSection + (const std::string& theName, const CurveCreator::SectionType theType, + const bool theIsClosed) +{ + int resISection = -1; + // Set the difference. + startOperation(); + CurveCreator::Coordinates aCoords; //empty list + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::AddSection, + theName, aCoords, theType, theIsClosed); + } + + resISection = addSectionInternal(theName, theType, theIsClosed, aCoords); + + finishOperation(); + return resISection; +} +//======================================================================= +// function: addSection +// purpose: adds a section with the given points +//======================================================================= +int CurveCreator_Curve::addSection + (const std::string& theName, const CurveCreator::SectionType theType, + const bool theIsClosed, const CurveCreator::Coordinates &thePoints) +{ + int resISection = -1; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::AddSection, + theName, thePoints, theType, theIsClosed); + } + + resISection = addSectionInternal(theName, theType, theIsClosed, thePoints); + + finishOperation(); + return resISection; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::removeSectionInternal( const int theISection ) +{ + if (theISection == -1) { + delete mySections.back(); + mySections.pop_back(); + } else { + CurveCreator::Sections::iterator anIterRm = mySections.begin() + theISection; + + delete *anIterRm; + mySections.erase(anIterRm); + } + redisplayCurve(); + return true; +} + +//! Removes the given sections. +bool CurveCreator_Curve::removeSection( const int theISection ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) + myListDiffs.back().init(this, CurveCreator_Operation::RemoveSection, theISection); + + res = removeSectionInternal( theISection ); + + finishOperation(); + return res; +} + +/** + * Get number of points in specified section or (the total number of points + * in Curve if theISection is equal to -1). + */ +int CurveCreator_Curve::getNbPoints( const int theISection ) const +{ + int aNbCoords = 0; + + CurveCreator_Section* aSection; + if (theISection == -1) { + int i = 0; + const int aNbSections = getNbSections(); + + for (; i < aNbSections; i++) { + aSection = getSection( i ); + if ( aSection ) + aNbCoords += aSection->myPoints.size(); + } + } else { + aSection = getSection( theISection ); + if ( aSection ) + aNbCoords = aSection->myPoints.size(); + } + + return aNbCoords/myDimension; +} + +void CurveCreator_Curve::setSkipSorting( const bool theIsToSkip ) +{ + mySkipSorting = theIsToSkip; +} + +bool CurveCreator_Curve::canPointsBeSorted() +{ + return false; +} + +/** + * Saves points coordinates difference. + * \param theOldCoords the old points coordinates + */ +void CurveCreator_Curve::saveCoordDiff( const SectionToPointCoordsList &theOldCoords ) +{ + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, theOldCoords); + } + finishOperation(); +} + +//! Get "closed" flag of the specified section +bool CurveCreator_Curve::isClosed( const int theISection ) const +{ + CurveCreator_Section* aSection = getSection( theISection ); + return aSection ? aSection->myIsClosed : false; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setClosedInternal( const int theISection, + const bool theIsClosed ) +{ + CurveCreator_Section* aSection = 0; + if (theISection == -1) { + int aSize = mySections.size(); + int i; + + for (i = 0; i < aSize; i++) { + aSection = getSection( i ); + if( aSection ) { + aSection->myIsClosed = theIsClosed; + redisplayCurve(); + } + } + } else { + aSection = getSection( theISection ); + if ( aSection ) { + aSection->myIsClosed = theIsClosed; + redisplayCurve(); + } + } + return true; +} + +/** + * Set "closed" flag of the specified section (all sections if + * \a theISection is -1). + */ +bool CurveCreator_Curve::setClosed( const int theISection, + const bool theIsClosed ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::SetClosed, + theIsClosed, theISection); + } + res = setClosedInternal( theISection, theIsClosed ); + finishOperation(); + return res; +} + +//! Returns specified section name +std::string CurveCreator_Curve::getSectionName( const int theISection ) const +{ + CurveCreator_Section* aSection = getSection( theISection ); + return aSection ? aSection->myName : ""; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setSectionNameInternal( const int theISection, + const std::string& theName ) +{ + bool res = false; + CurveCreator_Section* aSection = getSection( theISection ); + if( aSection ) { + aSection->myName = theName; + res = true; + } + return res; +} + +/** Set name of the specified section */ +bool CurveCreator_Curve::setSectionName( const int theISection, + const std::string& theName ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::RenameSection, + theName, theISection); + } + res = setSectionNameInternal( theISection, theName ); + finishOperation(); + return res; +} + +//! Get type of the specified section +CurveCreator::SectionType CurveCreator_Curve::getSectionType + ( const int theISection ) const +{ + CurveCreator_Section* aSection = getSection( theISection ); + return aSection ? aSection->myType : CurveCreator::Polyline; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setSectionTypeInternal( const int theISection, + const CurveCreator::SectionType theType ) +{ + CurveCreator_Section* aSection; + if (theISection == -1) { + int i = 0; + const int aNbSections = getNbSections(); + + for (; i < aNbSections; i++) { + aSection = getSection( i ); + if ( aSection ) + aSection->myType = theType; + } + redisplayCurve(); + } else { + aSection = getSection( theISection ); + if ( aSection && aSection->myType != theType ){ + aSection->myType = theType; + redisplayCurve(); + } + } + return true; +} + +/** + * Set type of the specified section (or all sections + * if \a theISection is -1). + */ +bool CurveCreator_Curve::setSectionType( const int theISection, + const CurveCreator::SectionType theType ) +{ + bool res = false; + startOperation(); + // Set the difference. + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::SetType, + theType, theISection); + } + + res = setSectionTypeInternal( theISection, theType ); + + finishOperation(); + return res; +} + + +/***********************************************/ +/*** Point methods ***/ +/***********************************************/ + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::addPointsInternal( const CurveCreator::SectionsMap &theSectionsMap ) +{ + bool res = false; + CurveCreator::SectionsMap::const_iterator anIt = theSectionsMap.begin(); + CurveCreator_Section *aSection = 0; + for ( ; anIt != theSectionsMap.end(); anIt++ ) { + int anISection = anIt->first; + aSection = getSection( anISection ); + if( aSection ) { + CurveCreator::PosPointsList aSectionPoints = anIt->second; + CurveCreator::PosPointsList::const_iterator aPntIt = aSectionPoints.begin(); + for( ; aPntIt != aSectionPoints.end(); aPntIt++ ){ + int anIPnt = (*aPntIt)->myID; + CurveCreator::Coordinates aCoords = (*aPntIt)->myCoords; + CurveCreator::Coordinates::iterator anIterPosition; + if(anIPnt == -1) + anIterPosition = aSection->myPoints.end(); + else + anIterPosition = aSection->myPoints.begin() + toICoord(anIPnt); + CurveCreator::Coordinates::const_iterator aFirstPosition = + aCoords.begin(); + aSection->myPoints.insert(anIterPosition, + aCoords.begin(), aCoords.end()); + } + res = true; + } + } + if(res) + redisplayCurve(); + return res; +} + +/** + * Add one point to the specified section starting from the given theIPnt index + * (or at the end of points if \a theIPnt is -1). + */ +bool CurveCreator_Curve::addPoints( const CurveCreator::Coordinates& theCoords, + const int theISection, + const int theIPnt ) +{ + bool res = false; + CurveCreator::Coordinates aCoords = theCoords; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + CurveCreator_ICurve::SectionToPointCoordsList aList; + aList.push_back(std::make_pair(std::make_pair(theISection, theIPnt), theCoords)); + myListDiffs.back().init(this, CurveCreator_Operation::InsertPoints, + aList); + } + CurveCreator::SectionsMap aSectionsMap; + CurveCreator::PosPointsList aPoints; + CurveCreator_PosPoint* aPosPoint = new CurveCreator_PosPoint( theIPnt, theCoords ); + aPoints.push_back( aPosPoint ); + aSectionsMap[theISection] = aPoints; + + res = addPointsInternal( aSectionsMap ); + + finishOperation(); + return res; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setPointInternal( const CurveCreator::SectionsMap &theSectionsMap ) +{ + bool res = false; + // Update the curve. + CurveCreator::SectionsMap::const_iterator anIt = theSectionsMap.begin(); + CurveCreator_Section *aSection = 0; + for ( ; anIt != theSectionsMap.end(); anIt++ ) { + int anISection = anIt->first; + aSection = getSection( anISection ); + if( aSection ) { + CurveCreator::PosPointsList aSectionPoints = anIt->second; + CurveCreator::PosPointsList::const_iterator aPntIt = aSectionPoints.begin(); + for( ; aPntIt != aSectionPoints.end(); aPntIt++ ){ + int anIPnt = (*aPntIt)->myID; + CurveCreator::Coordinates aCoords = (*aPntIt)->myCoords; + for ( int i = 0; i < myDimension; i++) + aSection->myPoints.at(toICoord(anIPnt) + i) = aCoords[i]; + } + res = true; + } + } + if(res) + redisplayCurve(); + + return res; +} + +//! Set coordinates of specified point +bool CurveCreator_Curve::setPoint( const int theISection, + const int theIPnt, + const CurveCreator::Coordinates& theNewCoords ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + CurveCreator_ICurve::SectionToPointCoordsList aList; + aList.push_back(std::make_pair(std::make_pair(theISection, theIPnt), theNewCoords)); + myListDiffs.back().init(this, CurveCreator_Operation::SetCoordinates, + aList); + } + CurveCreator::SectionsMap aSectionsMap; + CurveCreator::PosPointsList aPoints; + CurveCreator_PosPoint* aPosPoint = new CurveCreator_PosPoint( theIPnt, theNewCoords ); + aPoints.push_back( aPosPoint ); + aSectionsMap[theISection] = aPoints; + + int aSize1 = getNbPoints( theISection ); + res = setPointInternal( aSectionsMap ); + int aSize2 = getNbPoints( theISection ); + + finishOperation(); + + return res; +} + +//! Set coordinates of specified points from different sections +bool CurveCreator_Curve::setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords, + const bool theIsToSaveDiff ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (theIsToSaveDiff && addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::SetCoordinates, + theSectionToPntCoords); + } + CurveCreator::SectionsMap aSectionsMap; + CurveCreator::PosPointsList aPosPoints; + CurveCreator_ICurve::SectionToPointCoordsList::const_iterator anIt = + theSectionToPntCoords.begin(), aLast = theSectionToPntCoords.end(); + int aSectionId, aPointId; + for ( ; anIt != aLast; anIt++ ) { + aPosPoints.clear(); + aSectionId = anIt->first.first; + aPointId = anIt->first.second; + CurveCreator::Coordinates aNewCoords = anIt->second; + CurveCreator_PosPoint* aPosPoint = + new CurveCreator_PosPoint( aPointId, aNewCoords ); + if( aSectionsMap.find(aSectionId) != aSectionsMap.end() ) + aPosPoints = aSectionsMap[aSectionId]; + aPosPoints.push_back( aPosPoint ); + aSectionsMap[aSectionId] = aPosPoints; + + } + res = setPointInternal( aSectionsMap ); + finishOperation(); + + return res; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::removePointsInternal( const SectionToPointList &thePoints ) +{ + bool aRes = false; + std::map > aConvPoints; + convert( thePoints, aConvPoints ); + std::map >::const_iterator anIt = aConvPoints.begin(), + aLast = aConvPoints.end(); + for ( ; anIt != aLast; anIt++ ) { + int aSectionId = anIt->first; + aRes = removeSectionPoints(aSectionId, anIt->second); + } + if( aRes) + redisplayCurve(); + + return aRes; +} + +//! Remove point with given id +bool CurveCreator_Curve::removePoint( const int theISection, const int theIPnt ) +{ + bool res = false; + // Set the difference. + startOperation(); + SectionToPointList aListOfSectionsToPoints; + aListOfSectionsToPoints.push_back(std::make_pair(theISection, theIPnt)); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::RemovePoints, + aListOfSectionsToPoints); + } + res = removePointsInternal( aListOfSectionsToPoints ); + finishOperation(); + return res; +} + +//! Remove several points from different sections with given ids +bool CurveCreator_Curve::removeSeveralPoints( const SectionToPointList &theSectionToPntIDs) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::RemovePoints, + theSectionToPntIDs); + } + res = removePointsInternal( theSectionToPntIDs ); + finishOperation(); + return res; +} + + //======================================================================= +// function: getCoordinates +// purpose: +//======================================================================= +CurveCreator::Coordinates CurveCreator_Curve::getPoint( const int theISection, + const int theIPnt) const +{ + CurveCreator_Section* aSection = getSection( theISection ); + CurveCreator::Coordinates::const_iterator + anIter = aSection->myPoints.begin() + toICoord(theIPnt); + CurveCreator::Coordinates aResult(anIter, anIter + myDimension); + + return aResult; +} + +//======================================================================= +// function: getPoints +// purpose: +//======================================================================= +CurveCreator::Coordinates CurveCreator_Curve::getPoints( const int theISection ) const +{ + CurveCreator_Section* aSection = getSection( theISection ); + return aSection ? aSection->myPoints : CurveCreator::Coordinates(); +} + +void CurveCreator_Curve::constructAISObject() +{ + TopoDS_Shape aShape; + CurveCreator_Utils::constructShape( this, aShape ); + + myAISShape = new AIS_Shape( aShape ); +} + +CurveCreator_Section* CurveCreator_Curve::getSection( const int theSectionId ) const +{ + CurveCreator_Section *aSection = 0; + if ( theSectionId >= 0 && theSectionId < mySections.size() ) + aSection = mySections.at( theSectionId ); + + return aSection; +} + +Handle(AIS_InteractiveObject) CurveCreator_Curve::getAISObject( const bool theNeedToBuild ) const +{ + if ( !myAISShape && theNeedToBuild ) { + CurveCreator_Curve* aCurve = (CurveCreator_Curve*)this; + aCurve->constructAISObject(); + } + return myAISShape; +} + +bool CurveCreator_Curve::removeSectionPoints( const int theSectionId, + const std::list& thePointIds ) +{ + bool aRes = false; + + CurveCreator_Section* aSection = getSection( theSectionId ); + if ( !aSection ) + return aRes; + + std::list aSectionPoints = thePointIds; + aSectionPoints.sort(); + std::list::const_reverse_iterator aPntIt = aSectionPoints.rbegin(); + for ( ; aPntIt != aSectionPoints.rend(); aPntIt++ ) { + int aPntIndx = *aPntIt; + CurveCreator::Coordinates::iterator aFirstPosition; + if ( aPntIndx == -1 ) + aFirstPosition = aSection->myPoints.end() - getDimension(); + else + aFirstPosition = aSection->myPoints.begin() + toICoord( aPntIndx ); + aSection->myPoints.erase( aFirstPosition, aFirstPosition + getDimension() ); + aRes = true; + } + return aRes; +} + +void CurveCreator_Curve::convert( const SectionToPointList& thePoints, + std::map< int, std::list >& theConvPoints ) +{ + theConvPoints.clear(); + + SectionToPointList::const_iterator anIt = thePoints.begin(), aLast = thePoints.end(); + std::list aPoints; + int aSectionId, aPointId; + for ( ; anIt != aLast; anIt++ ) { + aSectionId = anIt->first; + aPointId = anIt->second; + aPoints.clear(); + if ( theConvPoints.find( aSectionId ) != theConvPoints.end() ) + aPoints = theConvPoints[aSectionId]; + aPoints.push_back( aPointId ); + theConvPoints[aSectionId] = aPoints; + } } diff --git a/src/CurveCreator/CurveCreator_Curve.hxx b/src/CurveCreator/CurveCreator_Curve.hxx index 309d06a84..adcfc87a8 100644 --- a/src/CurveCreator/CurveCreator_Curve.hxx +++ b/src/CurveCreator/CurveCreator_Curve.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -23,23 +23,32 @@ #ifndef _CurveCreator_Curve_HeaderFile #define _CurveCreator_Curve_HeaderFile -#include "CurveCreator.hxx" #include "CurveCreator_ICurve.hxx" -#include "CurveCreator_Macro.hxx" -#include "CurveCreator_Operation.hxx" -class CurveCreator_Section; -class CurveCreator_Listener; +#include "CurveCreator_Macro.hxx" +#include "CurveCreator.hxx" +#include "CurveCreator_Diff.hxx" + +#include +#include + +struct CurveCreator_Section; +class CurveCreator_Displayer; +class AIS_Shape; +class Handle_AIS_InteractiveObject; /** * The CurveCreator_Curve object is represented as one or more sets of * connected points; thus CurveCreator_Curve object can contain several * not connected curves (polylines or b-splines), each such curve has two - * only ends � start and end points � in other words non-manifold curves + * only ends "start and end points" in other words non-manifold curves * are not supported. */ class CURVECREATOR_EXPORT CurveCreator_Curve : public CurveCreator_ICurve { +protected: + typedef std::list ListDiff; + public: //! Constructor of the curve. /** The dimension is explicitly specified in the constructor @@ -47,15 +56,273 @@ public: */ CurveCreator_Curve(const CurveCreator::Dimension theDimension); - /** Add points to the specified section (or last section + //! Destructor. + virtual ~CurveCreator_Curve(); + + //! Get the dimension. + virtual CurveCreator::Dimension getDimension() const; + + //! Return unique section name + virtual std::string getUniqSectionName() const; + + //! Set curve creator Displayer object + virtual void setDisplayer( CurveCreator_Displayer* theDisplayer ); + + //! Return curve creator Displayer object + CurveCreator_Displayer* getDisplayer(); + + //! Remove curve creator Displayer object + virtual void removeDisplayer(); + + /** Set depth of undo operations (unlimited if \a theDepth is -1 + * or disabled if \a theDepth is 0) + */ + virtual void setUndoDepth(const int theDepth = -1); + + //! Get depth of undo operations. + virtual int getUndoDepth() const; + + virtual void startOperation(); + virtual void finishOperation(); + + /** + * This method converts the point index to the index in + * an array of coordinates. + */ + virtual int toICoord(const int theIPnt) const; + + //! For internal use only! Undo/Redo are not used here. + virtual bool moveSectionInternal(const int theISection, + const int theNewIndex); + //! Move section to new position in list + virtual bool moveSection(const int theISection, + const int theNewIndex); + +protected: + /** This method updates all undo/redo information required to be updated + * after curve modification operation. It returns false if undo/redo + * is disabled and true otherwise. + */ + virtual bool addEmptyDiff(); + +public: // TODO: remove public + void getCoordinates( int theISection, int theIPoint, double& theX, double& theY, double& theZ ) const; +protected: // TODO: remove public + void redisplayCurve(); + +public: + /************ Implementation of INTERFACE methods ************/ + + /***********************************************/ + /*** Undo/Redo methods ***/ + /***********************************************/ + + //! Get number of available undo operations + virtual int getNbUndo() const; + + //! Undo previous operation + virtual bool undo(); + + //! Get number of available redo operations + virtual int getNbRedo() const; + + //! Redo last previously "undone" operation + virtual bool redo(); + + + /***********************************************/ + /*** Section methods ***/ + /***********************************************/ + + //! For internal use only! Undo/Redo are not used here. + virtual bool clearInternal(); + //! Clear the polyline (remove all sections) + virtual bool clear(); + + //! For internal use only! Undo/Redo are not used here. + virtual bool joinInternal( const std::list& theSections ); + + //! Join list of sections to one section (join all if the list is empty) + // The first section in the list is a leader, another sections are joined to it + virtual bool join( const std::list& theSections ); + + //! Get number of sections + virtual int getNbSections() const; + + //! For internal use only! Undo/Redo are not used here. + virtual int addSectionInternal( const std::string &theName, + const CurveCreator::SectionType theType, + const bool theIsClosed, + const CurveCreator::Coordinates &thePoints); + //! Add a new section. + virtual int addSection( const std::string &theName, + const CurveCreator::SectionType theType, + const bool theIsClosed ); + //! Add a new section. + virtual int addSection( const std::string &theName, + const CurveCreator::SectionType theType, + const bool theIsClosed, + const CurveCreator::Coordinates &thePoints); + + //! For internal use only! Undo/Redo are not used here. + virtual bool removeSectionInternal( const int theISection ); + //! Removes the given sections. + virtual bool removeSection( const int theISection ); + + //! Get "closed" flag of the specified section + virtual bool isClosed( const int theISection ) const; + + //! For internal use only! Undo/Redo are not used here. + virtual bool setClosedInternal( const int theISection, + const bool theIsClosed ); + /** + * Set "closed" flag of the specified section (all sections if + * \a theISection is -1). + */ + virtual bool setClosed( const int theISection, + const bool theIsClosed ); + + //! Returns specifyed section name + virtual std::string getSectionName( const int theISection ) const; + + //! For internal use only! Undo/Redo are not used here. + virtual bool setSectionNameInternal( const int theISection, + const std::string& theName ); + /** Set name of the specified section */ + virtual bool setSectionName( const int theISection, + const std::string& theName ); + + //! Get type of the specified section + virtual CurveCreator::SectionType getSectionType( const int theISection ) const; + + //! For internal use only! Undo/Redo are not used here. + virtual bool setSectionTypeInternal( const int theISection, + const CurveCreator::SectionType theType ); + /** + * Set type of the specified section (or all sections * if \a theISection is -1). */ - virtual void addPoints - (const CurveCreator::Coordinates &thePoints, const int theISection = -1); + virtual bool setSectionType( const int theISection, + const CurveCreator::SectionType theType ); - friend class CurveCreator_CurveEditor; - friend class CurveCreator_Operation; + /***********************************************/ + /*** Point methods ***/ + /***********************************************/ + + //! For internal use only! Undo/Redo are not used here. + virtual bool addPointsInternal( const CurveCreator::SectionsMap &theSectionsMap ); + /** + * Add one point to the specified section starting from the given theIPnt index + * (or at the end of points if \a theIPnt is -1). + */ + virtual bool addPoints( const CurveCreator::Coordinates &theCoords, + const int theISection, + const int theIPnt = -1 ); + + //! For internal use only! Undo/Redo are not used here. + virtual bool setPointInternal( const CurveCreator::SectionsMap &theSectionsMap ); + //! Set coordinates of specified point + virtual bool setPoint( const int theISection, + const int theIPnt, + const CurveCreator::Coordinates& theNewCoords ); + + //! Set coordinates of specified points from different sections + virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords, + const bool theIsToSaveDiff = true ); + + //! For internal use only! Undo/Redo are not used here. + virtual bool removePointsInternal( const SectionToPointList &thePoints ); + /** Remove point with given id */ + virtual bool removePoint( const int theISection, const int theIPnt = -1 ); + + //! Remove several points from different sections with given ids + virtual bool removeSeveralPoints( const SectionToPointList &theSectionToPntIDs); + + //! Get coordinates of specified point + virtual CurveCreator::Coordinates getPoint( const int theISection, + const int theIPnt ) const; + + /** + * Get points of a section (the total points in Curve if theISection is equal to -1).. + */ + virtual CurveCreator::Coordinates getPoints( const int theISection = -1 ) const; + + + /** + * Get number of points in specified section or (the total number of points + * in Curve if theISection is equal to -1). + */ + virtual int getNbPoints( const int theISection ) const; + + /** + * Set skip sorting flag. If the flag is true - points sorting will be skipped. + */ + virtual void setSkipSorting( const bool theIsToSkip ); + + /** + * Indicates whether the points can be sorted. + */ + virtual bool canPointsBeSorted(); + + /** + * Saves points coordinates difference. + * \param theOldCoords the old points coordinates + */ + virtual void saveCoordDiff( const SectionToPointCoordsList &theOldCoords ); + + /***********************************************/ + /*** Presentation methods ***/ + /***********************************************/ + /** + * Get the curve AIS object + */ + virtual Handle_AIS_InteractiveObject getAISObject( const bool theNeedToBuild = false ) const; + +protected: + /** + * Removes the points from the section. It sortes the points and remove them + * in the decreasing order + * \param theSectionId a section index + * \param thePointIds a list of section points + */ + bool removeSectionPoints( const int theSectionId, + const std::list& thePointIds ); + /** + * Converts the list of pairs of section to point into map of a section to list of points + * \param thePoints an source list + * \param theConvPoints a converted map + */ + void convert( const SectionToPointList &thePoints, + std::map > &theConvPoints ); + +protected: + virtual void constructAISObject(); + /** + * Returns the section by the section index or NULL if the index is out of the section + * list range + * \param theSectionId the section index + */ + CurveCreator_Section* getSection( const int theSectionId ) const; + +protected: + bool mySkipSorting; + +public: + bool myIsLocked; + CurveCreator::Sections mySections; //!< curve data + CurveCreator::Dimension myDimension; //!< curve dimension + CurveCreator_Displayer* myDisplayer; //!< curve displayer + +private: + + int myNbUndos; + int myNbRedos; + ListDiff::iterator myCurrenPos; + ListDiff myListDiffs; + int myUndoDepth; + int myOpLevel; + AIS_Shape* myAISShape; //!< AIS shape }; #endif diff --git a/src/CurveCreator/CurveCreator_CurveEditor.cxx b/src/CurveCreator/CurveCreator_CurveEditor.cxx deleted file mode 100644 index 559eabd5a..000000000 --- a/src/CurveCreator/CurveCreator_CurveEditor.cxx +++ /dev/null @@ -1,511 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_CurveEditor.cxx -// Author: Sergey KHROMOV - -#include "CurveCreator_CurveEditor.hxx" - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_CurveEditor::CurveCreator_CurveEditor - (CurveCreator_Curve* thePCurve) - : myNbUndos (0), - myNbRedos (0), - myPCurve (thePCurve), - myUndoDepth (-1), - myOpLevel(0) -{ - if (myPCurve != NULL) { - if (myPCurve->isLocked()) { - // This curve is locked by another editor. Invalid case. - myPCurve = NULL; - } else { - // Lock the curve. - myPCurve->myIsLocked = true; - myCurrenPos = myListDiffs.end(); - } - } -} - -//======================================================================= -// function: Destructor -// purpose: -//======================================================================= -CurveCreator_CurveEditor::~CurveCreator_CurveEditor() -{ - if (myPCurve != NULL) { - // Unlock the curve. - myPCurve->myIsLocked = false; - } -} - -//======================================================================= -// function: getCurve -// purpose: -//======================================================================= -CurveCreator_Curve *CurveCreator_CurveEditor::getCurve() const -{ - return myPCurve; -} - -//======================================================================= -// function: isAttached -// purpose: -//======================================================================= -bool CurveCreator_CurveEditor::isAttached() const -{ - return (myPCurve != NULL); -} - -//======================================================================= -// function: undo -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::undo() -{ - if (myNbUndos > 0) { - myNbUndos--; - myNbRedos++; - myCurrenPos--; - myCurrenPos->applyUndo(myPCurve); - } -} - -//======================================================================= -// function: redo -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::redo() -{ - if (myNbRedos > 0) { - myCurrenPos->applyRedo(myPCurve); - myCurrenPos++; - myNbRedos--; - myNbUndos++; - } -} - -//======================================================================= -// function: getNbUndo -// purpose: -//======================================================================= -int CurveCreator_CurveEditor::getNbUndo() const -{ - return myNbUndos; -} - -//======================================================================= -// function: getNbRedo -// purpose: -//======================================================================= -int CurveCreator_CurveEditor::getNbRedo() const -{ - return myNbRedos; -} - -//======================================================================= -// function: setUndoDepth -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::setUndoDepth(const int theDepth) -{ - if (theDepth == 0) { - // Reset all undo/redo data. - myNbUndos = 0; - myNbRedos = 0; - myListDiffs.clear(); - myCurrenPos = myListDiffs.end(); - myUndoDepth = 0; - } else if (theDepth == -1) { - // There is nothing to do as the depth become unlimited. - myUndoDepth = -1; - } else if (theDepth > 0) { - // The new "real" depth is set. - if (theDepth < myNbRedos) { - // The new depth is less then number of redos. Remove the latest redos. - int aShift = (myNbRedos - theDepth); - ListDiff::iterator aFromPos = myListDiffs.end(); - - while (aShift--) { - aFromPos--; - } - - myListDiffs.erase(aFromPos, myListDiffs.end()); - myNbRedos = theDepth; - } - - if (theDepth < myNbUndos + myNbRedos) { - // The new depth is less then the total number of differences. - // Remove the first undos. - int aShift = (myNbUndos + myNbRedos - theDepth); - ListDiff::iterator aToPos = myListDiffs.begin(); - - while (aShift--) { - aToPos++; - } - - myListDiffs.erase(myListDiffs.begin(), aToPos); - myNbUndos = theDepth - myNbRedos; - } - - myUndoDepth = theDepth; - } -} - -//======================================================================= -// function: getUndoDepth -// purpose: -//======================================================================= -int CurveCreator_CurveEditor::getUndoDepth() const -{ - return myUndoDepth; -} - -//======================================================================= -// function: setType -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::setType(const CurveCreator::Type theType, - const int theISection) -{ - if (myPCurve != NULL) { - startOperation(); - // Set the difference. - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::SetType, - theType, theISection); - } - - // Update the curve. - myPCurve->setType(theType, theISection); - finishOperation(); - } -} - -//======================================================================= -// function: addPoints -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::addPoints - (const CurveCreator::Coordinates &thePoints, - const int theISection) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::AddPoints, - thePoints, theISection); - } - - // Update the curve. - myPCurve->addPoints(thePoints, theISection); - finishOperation(); - } -} - -//======================================================================= -// function: addSection -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::addSection - (const std::string& theName, const CurveCreator::Type theType, - const bool theIsClosed, - const CurveCreator::Coordinates &thePoints) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::AddSection, - theName, thePoints, theType, theIsClosed); - } - - // Update the curve. - myPCurve->addSection(theName, theType, theIsClosed, thePoints); - finishOperation(); - } -} - -//======================================================================= -// function: removeSection -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::removeSection(const int theISection) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::RemoveSection, - theISection); - } - - // Update the curve. - myPCurve->removeSection(theISection); - finishOperation(); - } -} - -//======================================================================= -// function: insertPoints -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::insertPoints - (const CurveCreator::Coordinates &thePoints, - const int theISection, - const int theIPnt) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::InsertPoints, - thePoints, theISection, theIPnt); - } - - // Update the curve. - myPCurve->insertPoints(thePoints, theISection, theIPnt); - finishOperation(); - } -} - -//======================================================================= -// function: movePoints -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::movePoint(const int theISection, - const int theOrigIPnt, - const int theNewIPnt ) -{ - startOperation(); - myPCurve->movePoint(theISection, theOrigIPnt, theNewIPnt); - finishOperation(); -} - -//======================================================================= -// function: removePoints -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::removePoints - (const int theISection, - const int theIPnt, - const int theNbPoints) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::RemovePoints, - theISection, theIPnt, theNbPoints); - } - - // Update the curve. - myPCurve->removePoints(theISection, theIPnt, theNbPoints); - finishOperation(); - } -} - -//======================================================================= -// function: clear -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::clear() -{ - if (myPCurve != NULL) { - startOperation(); - // Set the difference. - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::Clear); - } - - // Update the curve. - myPCurve->clear(); - finishOperation(); - } -} - -//======================================================================= -// function: setCoordinates -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::setCoordinates - (const CurveCreator::Coordinates &theCoords, - const int theISection, - const int theIPnt) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::SetCoordinates, - theCoords, theISection, theIPnt); - } - - // Update the curve. - myPCurve->setCoordinates(theCoords, theISection, theIPnt); - finishOperation(); - } -} - -//======================================================================= -// function: setClosed -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::setClosed(const bool theIsClosed, - const int theISection) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::SetClosed, - theIsClosed, theISection); - } - - // Update the curve. - myPCurve->setClosed(theIsClosed, theISection); - finishOperation(); - } -} - -//======================================================================= -// function: setName -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::setName(const std::string& theName, - const int theISection) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::RenameSection, - theName, theISection); - } - myPCurve->setName( theName, theISection ); - finishOperation(); - } -} - -//======================================================================= -// function: moveSection -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::moveSection(const int theISection, - const int theNewIndex) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::MoveSection, - theISection, theNewIndex); - } - - // Update the curve. - myPCurve->moveSection(theISection, theNewIndex); - finishOperation(); - } -} - -//======================================================================= -// function: join -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::join(const int theISectionTo, - const int theISectionFrom) -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::Join, - theISectionTo, theISectionFrom); - } - - // Update the curve. - myPCurve->join(theISectionTo, theISectionFrom); - finishOperation(); - } -} - -//======================================================================= -// function: join -// purpose: -//======================================================================= -void CurveCreator_CurveEditor::join() -{ - if (myPCurve != NULL) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(myPCurve, CurveCreator_Operation::Join); - } - - // Update the curve. - myPCurve->join(); - finishOperation(); - } -} - -//======================================================================= -// function: addDiff -// purpose: -//======================================================================= -bool CurveCreator_CurveEditor::addEmptyDiff() -{ - bool isEnabled = false; - - if (myUndoDepth != 0) { - // Forget all Redos after the current one. - if (myNbRedos > 0) { - myNbRedos = 0; - myListDiffs.erase(myCurrenPos, myListDiffs.end()); - } - - if (myUndoDepth == -1 || myNbUndos < myUndoDepth) { - // Increase the number of undos. - myNbUndos++; - } else { - // If there are too many differences, remove the first one. - myListDiffs.pop_front(); - } - - // Add new difference. - myListDiffs.push_back(CurveCreator_Diff()); - myCurrenPos = myListDiffs.end(); - isEnabled = true; - } - - return isEnabled; -} - -void CurveCreator_CurveEditor::startOperation() -{ - myOpLevel++; -} - -void CurveCreator_CurveEditor::finishOperation() -{ - myOpLevel--; -} diff --git a/src/CurveCreator/CurveCreator_CurveEditor.hxx b/src/CurveCreator/CurveCreator_CurveEditor.hxx deleted file mode 100644 index 32aa00948..000000000 --- a/src/CurveCreator/CurveCreator_CurveEditor.hxx +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_CurveEditor.hxx -// Author: Sergey KHROMOV - -#ifndef _CurveCreator_CurveEditor_HeaderFile -#define _CurveCreator_CurveEditor_HeaderFile - -#include "CurveCreator_Diff.hxx" -#include "CurveCreator_Curve.hxx" - -#include - -/** - * The CurveCreator_CurveEditor is designed to manage of - * editing operations of CurveCreator_Curve class. - */ -class CURVECREATOR_EXPORT CurveCreator_CurveEditor -{ - -private: - - typedef std::list ListDiff; - -public: - - //! Constuctor, initialized by the curve object - CurveCreator_CurveEditor(CurveCreator_Curve* thePCurve); - - //! Destructor, detaches from the Curve - ~CurveCreator_CurveEditor(); - - //! Returns the curve. - CurveCreator_Curve *getCurve() const; - - //! This method returns true if this editor is attached to a valid curve. - bool isAttached() const; - - //! Undo previous operation - void undo(); - - //! Redo last previously �undoed� operation - void redo(); - - //! Get number of available undo operations - int getNbUndo() const; - - //! Get number of available redo operations - int getNbRedo() const; - - //! Set depth of undo operations (unlimited if \a theDepth is -1 - // or disabled if \a theDepth is 0) - void setUndoDepth(const int theDepth = -1); - - //! Get depth of undo operations. - int getUndoDepth() const; - - /** Set type of the specified section (or all sections - * if \a theISection is -1). - */ - void setType(const CurveCreator::Type theType, const int theISection = -1); - - /** Set section closed (or all sections - * if \a theISection is -1). - */ - void setClosed(const bool theIsClosed, const int theISection); - - /** Set section name (if theISection is invalid it is ignored). - */ - void setName(const std::string& theName, const int theISection); - - /** Add points to the specified section (or last section - * if \a theISection is -1). - */ - void addPoints(const CurveCreator::Coordinates &thePoints, - const int theISection = -1); - - //! Add a new section. - void addSection(const std::string &theName, const CurveCreator::Type theType, - const bool theIsClosed, - const CurveCreator::Coordinates &thePoints); - - //! Removes the section. If theISection equals -1, removes the last section. - void removeSection(const int theISection = -1); - - /** Insert points in the given position (add to the end of list - * if \a theIPnt parameter is -1) of the specified section - * (or last section if \a theISection parameter is -1). - */ - void insertPoints(const CurveCreator::Coordinates &thePoints, - const int theISection = -1, - const int theIPnt = -1); - - /** Remove \a nbPoints points from given \a theISection, - * starting from given \a theIPnt (of all points up to the end of - * section if \a theNbPoints is -1). - */ - void removePoints(const int theISection, - const int theIPnt, - const int theNbPoints = -1); - - /** Mobe point in \a theISection from given position \a theOrigIPnt - * to new position \a theNewIPnt. - */ - void movePoint(const int theISection, - const int theOrigIPnt, - const int theNewIPnt ); - - //! Remove all sections. - void clear(); - - //! Set coordinates of specified point - void setCoordinates(const CurveCreator::Coordinates &theCoords, - const int theISection, - const int theIPnt); - - /** Move specified \a theISection to the specified position - * in the sections list. - */ - void moveSection(const int theISection, const int theNewIndex); - - //! Join two sections to one section - void join(const int theISectionTo, const int theISectionFrom); - - //! Join all sections to the single curve - void join(); - - void startOperation(); - void finishOperation(); -private: - - /** This method updates all undo/redo information required to be updated - * after curve modification operation. It returns false if undo/redo - * is disabled and true otherwise. - */ - bool addEmptyDiff(); - -private: - - int myNbUndos; - int myNbRedos; - ListDiff::iterator myCurrenPos; - ListDiff myListDiffs; - CurveCreator_Curve* myPCurve; - int myUndoDepth; - int myOpLevel; -}; - -#endif diff --git a/src/CurveCreator/CurveCreator_Diff.cxx b/src/CurveCreator/CurveCreator_Diff.cxx index 22f099e11..d1a7dc322 100644 --- a/src/CurveCreator/CurveCreator_Diff.cxx +++ b/src/CurveCreator/CurveCreator_Diff.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -49,9 +49,9 @@ CurveCreator_Diff::~CurveCreator_Diff() // function: init // purpose: //======================================================================= -bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, - const CurveCreator_Operation::Type theType) +bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve) { + CurveCreator_Operation::Type aType = CurveCreator_Operation::Clear; bool isOK = false; if (theCurve != NULL) { @@ -60,36 +60,18 @@ bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, // Set redo. myPRedo = new CurveCreator_Operation; - if (myPRedo->init(theType)) { + if (myPRedo->init(aType)) { isOK = true; const int aNbSections = theCurve->getNbSections(); - if (theType == CurveCreator_Operation::Clear) { - // Construct undo for Clear command. - if (aNbSections > 0) { - setNbUndos(aNbSections); + // Construct undo for Clear command. + if (aNbSections > 0) { + setNbUndos(aNbSections); - for (int i = 0; i < aNbSections && isOK; i++) { - // Add AddSection command. - isOK = addSectionToUndo(theCurve, i, myPUndo[i]); - } - } - } else { // theType == CurveCreator_Operation::Join - // Construct undo for Join command. - if (aNbSections > 1) { - // Add the RemovePoints command to remove points of - // the second section fron the first one. - const int aNbPoints = theCurve->getNbPoints(0); - - setNbUndos(aNbSections); - isOK = myPUndo[0].init(CurveCreator_Operation::RemovePoints, - 0, aNbPoints, -1); - - for (int i = 1; i < aNbSections && isOK; i++) { - // Add AddSection command. - isOK = addSectionToUndo(theCurve, i, myPUndo[i]); - } + for (int i = 0; i < aNbSections && isOK; i++) { + // Add AddSection command. + isOK = addSectionToUndo(theCurve, i, myPUndo[i]); } } } @@ -176,33 +158,6 @@ bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, setNbUndos(1); isOK = myPUndo[0].init(theType, theIntParam2, theIntParam1); break; - case CurveCreator_Operation::Join: - { - // If the last section is removed, one AddSection command is - // enough. If not last section is removed, two commands are - // requred: AddSection and MoveSection. - const int aLastIndex = theCurve->getNbSections() - 1; - const int aNbPoints = theCurve->getNbPoints(theIntParam1); - - if (theIntParam2 == aLastIndex) { - setNbUndos(2); - } else { - setNbUndos(3); - } - - isOK = myPUndo[0].init(CurveCreator_Operation::RemovePoints, - theIntParam1, aNbPoints, -1); - - if (isOK) { - isOK = addSectionToUndo(theCurve, theIntParam2, myPUndo[1]); - - if (isOK && theIntParam2 != aLastIndex) { - isOK = myPUndo[2].init(CurveCreator_Operation::MoveSection, - aLastIndex, theIntParam2); - } - } - } - break; default: break; } @@ -222,77 +177,68 @@ bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, //======================================================================= bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, const CurveCreator_Operation::Type theType, - const int theIntParam1, - const int theIntParam2, - const int theIntParam3) + const std::list& theParams) { bool isOK = false; - if (theCurve != NULL) { + if (theCurve != NULL || theParams.empty()) { clear(); // Set redo. myPRedo = new CurveCreator_Operation; - if (myPRedo->init(theType, theIntParam1, theIntParam2, theIntParam3)) { - // Construct undo for RemovePoints command. - const CurveCreator::Dimension aDim = theCurve->getDimension(); - const CurveCreator::Coordinates &aPoints = - theCurve->getPoints(theIntParam1); - CurveCreator::Coordinates::const_iterator anIterBegin = - aPoints.begin() + (aDim*theIntParam2); - CurveCreator::Coordinates::const_iterator anIterEnd; + if (myPRedo->init(theType, theParams)) { + // Construct undo for different commands. + switch (theType) { + case CurveCreator_Operation::Join: + { + int aSectionMain = theParams.front(); + const int aNbPointsMain = theCurve->getNbPoints(aSectionMain); - if (theIntParam3 == -1) { - anIterEnd = aPoints.end(); - } else { - anIterEnd = anIterBegin + (aDim*theIntParam3); + std::list aSectionsToJoin = theParams; + aSectionsToJoin.erase( aSectionsToJoin.begin() ); + // it is important to sort the section indices in order to correct perform undo + // for the move sections to the previous positions + aSectionsToJoin.sort(); + // 1rst undo for remove points from the main and n-1 undoes to contain joined sections + int aSectionsToJoinNb = aSectionsToJoin.size(); + int aNbUndos = 2*aSectionsToJoinNb + 1; + setNbUndos( aNbUndos ); + + // Add joined sections to undo + std::list::const_iterator anIt = aSectionsToJoin.begin(), + aLast = aSectionsToJoin.end(); + anIt = aSectionsToJoin.begin(); + int aLastSectionId = -1; + for (int i = 0; anIt != aLast && i < aSectionsToJoinNb; anIt++, i++) { + int anISection = *anIt; + isOK = addSectionToUndo( theCurve, anISection, myPUndo[i*2] ); + if (isOK) { + isOK = myPUndo[i*2+1].init(CurveCreator_Operation::MoveSection, + aLastSectionId, anISection); + if (!isOK) + break; + } + } + // Construct undo for RemovePoints command. + if (isOK) { + int aNbPointsInJoined = 0; + anIt = aSectionsToJoin.begin(); + for ( ; anIt != aLast; anIt++ ) + aNbPointsInJoined += theCurve->getNbPoints( *anIt ); + + int aJoinedSize = aNbPointsMain + aNbPointsInJoined; + CurveCreator_ICurve::SectionToPointList aSectionToPointList; + for (int anIPoint = aNbPointsMain; anIPoint < aJoinedSize; anIPoint++) + aSectionToPointList.push_back(std::make_pair(aSectionMain, anIPoint)); + + isOK = myPUndo[aNbUndos-1].init(CurveCreator_Operation::RemovePoints, aSectionToPointList); + } + } + break; + default: + break; } - - CurveCreator::Coordinates aPointsToAdd; - - setNbUndos(1); - aPointsToAdd.insert(aPointsToAdd.end(), anIterBegin, anIterEnd); - isOK = myPUndo[0].init(CurveCreator_Operation::InsertPoints, - aPointsToAdd, theIntParam1, theIntParam2); - } - - if (!isOK) { - clear(); - } - } - - return isOK; -} - -//======================================================================= -// function: init -// purpose: -//======================================================================= -bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, - const CurveCreator_Operation::Type theType, - const CurveCreator::Coordinates &theCoords, - const int theIntParam) -{ - bool isOK = false; - - if (theCurve != NULL) { - clear(); - - // Set redo. - myPRedo = new CurveCreator_Operation; - - if (myPRedo->init(theType, theCoords, theIntParam)) { - // Construct undo for AddPoints command. - const int aSectionInd = getSectionIndex(theCurve, theIntParam); - const CurveCreator::Dimension aDim = theCurve->getDimension(); - const CurveCreator::Coordinates &aPoints = - theCurve->getPoints(aSectionInd); - const int aNbPoints = (aPoints.size()/aDim); - - setNbUndos(1); - isOK = myPUndo[0].init(CurveCreator_Operation::RemovePoints, - aSectionInd, aNbPoints, -1); } if (!isOK) { @@ -337,68 +283,6 @@ bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, return isOK; } -//======================================================================= -// function: init -// purpose: -//======================================================================= -bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, - const CurveCreator_Operation::Type theType, - const CurveCreator::Coordinates &theCoords, - const int theIntParam1, - const int theIntParam2) -{ - bool isOK = false; - - if (theCurve != NULL) { - clear(); - - // Set redo. - myPRedo = new CurveCreator_Operation; - - if (myPRedo->init(theType, theCoords, theIntParam1, theIntParam2)) { - // Construct undo for different commands. - switch (theType) { - case CurveCreator_Operation::InsertPoints: - { - const CurveCreator::Dimension aDim = theCurve->getDimension(); - const int aNbPoints = (theCoords.size()/aDim); - const int aSectionInd = getSectionIndex(theCurve, theIntParam1); - int aPointInd; - - if (theIntParam2 == -1) { - aPointInd = theCurve->getNbPoints(aSectionInd); - } else { - aPointInd = theIntParam2; - } - - setNbUndos(1); - isOK = myPUndo[0].init(CurveCreator_Operation::RemovePoints, - aSectionInd, aPointInd, aNbPoints); - } - break; - case CurveCreator_Operation::SetCoordinates: - { - const CurveCreator::Coordinates anOldCoords = - theCurve->getCoordinates(theIntParam1, theIntParam2); - - setNbUndos(1); - isOK = myPUndo[0].init(CurveCreator_Operation::SetCoordinates, - anOldCoords, theIntParam1, theIntParam2); - } - break; - default: - break; - } - } - - if (!isOK) { - clear(); - } - } - - return isOK; -} - bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, const CurveCreator_Operation::Type theType, const std::string &theName, @@ -423,6 +307,152 @@ bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, return isOK; } +bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, + const CurveCreator_Operation::Type theType, + const CurveCreator_ICurve::SectionToPointList &theParamList1) +{ + bool isOK = false; + + if (theCurve != NULL) { + clear(); + + // Set redo. + myPRedo = new CurveCreator_Operation; + + if (myPRedo->init(theType, theParamList1)) { + // Construct undo for different commands. + switch (theType) { + case CurveCreator_Operation::RemovePoints: + { + // Construct undo for RemovePoints command. + CurveCreator_ICurve::SectionToPointCoordsList aSectionToPointCoords; + CurveCreator::Coordinates aPointsToAdd; + const CurveCreator::Dimension aDim = theCurve->getDimension(); + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = theParamList1.begin(), aLast = theParamList1.end(); + std::list aPoints; + int aSectionId, aPointId; + for ( ; anIt != aLast; anIt++ ) { + aPointsToAdd.clear(); + aSectionId = anIt->first; + aPointId = anIt->second; + const CurveCreator::Coordinates &aPoints = + theCurve->getPoints(aSectionId); + CurveCreator::Coordinates::const_iterator anIterBegin = + aPoints.begin() + (aDim*aPointId); + CurveCreator::Coordinates::const_iterator anIterEnd = + anIterBegin + aDim; + aPointsToAdd.insert(aPointsToAdd.end(), anIterBegin, anIterEnd); + aSectionToPointCoords.push_back(std::make_pair(*anIt, aPointsToAdd)); + } + setNbUndos(1); + isOK = myPUndo[0].init(CurveCreator_Operation::InsertPoints, + aSectionToPointCoords); + } + break; + default: + break; + } + } + + if (!isOK) { + clear(); + } + } + + return isOK; +} + +bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, + const CurveCreator_Operation::Type theType, + const CurveCreator_ICurve::SectionToPointCoordsList &theParamList1) +{ + bool isOK = false; + + if (theCurve != NULL) { + clear(); + + // Set redo. + myPRedo = new CurveCreator_Operation; + + if (myPRedo->init(theType, theParamList1)) { + // Construct undo for different commands. + switch (theType) { + case CurveCreator_Operation::InsertPoints: + { + // Construct undo for RemovePoints command. + CurveCreator_ICurve::SectionToPointList aSectionToPointList; + CurveCreator_ICurve::SectionToPointCoordsList::const_iterator anIt = theParamList1.begin(), aLast = theParamList1.end(); + for ( ; anIt != aLast; anIt++ ) { + aSectionToPointList.push_back(anIt->first); + } + setNbUndos(1); + isOK = myPUndo[0].init(CurveCreator_Operation::RemovePoints, + aSectionToPointList); + } + break; + case CurveCreator_Operation::SetCoordinates: + { + // Construct undo for SetCoordinates command. + CurveCreator_ICurve::SectionToPointCoordsList aSectionToPointOldCoords; + CurveCreator_ICurve::SectionToPointCoordsList::const_iterator anIt = theParamList1.begin(), aLast = theParamList1.end(); + for ( ; anIt != aLast; anIt++ ) { + CurveCreator::Coordinates anOldCoords = theCurve->getPoint(anIt->first.first, anIt->first.second); + aSectionToPointOldCoords.push_back(std::make_pair(anIt->first, anOldCoords)); + } + + setNbUndos(1); + isOK = myPUndo[0].init(CurveCreator_Operation::SetCoordinates, + aSectionToPointOldCoords); + } + break; + default: + break; + } + } + + if (!isOK) { + clear(); + } + } + + return isOK; +} + +bool CurveCreator_Diff::init(const CurveCreator_Curve *theCurve, + const CurveCreator_ICurve::SectionToPointCoordsList &theOldParamList) +{ + bool isOK = false; + + if (theCurve != NULL && theOldParamList.size() > 0) { + clear(); + + // Set redo. + myPRedo = new CurveCreator_Operation; + + // Construct redo for SetCoordinates command. + CurveCreator_ICurve::SectionToPointCoordsList aSectionToPointActualCoords; + CurveCreator_ICurve::SectionToPointCoordsList::const_iterator anIt = + theOldParamList.begin(), aLast = theOldParamList.end(); + for ( ; anIt != aLast; anIt++ ) { + CurveCreator::Coordinates anActualCoords = theCurve->getPoint(anIt->first.first, anIt->first.second); + aSectionToPointActualCoords.push_back(std::make_pair(anIt->first, anActualCoords)); + } + + if (myPRedo->init(CurveCreator_Operation::SetCoordinates, aSectionToPointActualCoords)) { + // Undo for SetCoordinates command. + setNbUndos(1); + isOK = myPUndo[0].init(CurveCreator_Operation::SetCoordinates, + theOldParamList); + } + + if (!isOK) { + clear(); + } + } + + return isOK; +} + //======================================================================= // function: applyUndo // purpose: @@ -495,12 +525,13 @@ bool CurveCreator_Diff::addSectionToUndo const int theIndex, CurveCreator_Operation &theOperation) const { + const std::string aName = theCurve->getSectionName(theIndex); const CurveCreator::Coordinates &aPnts = theCurve->getPoints(theIndex); - const CurveCreator::Type aType = theCurve->getType(theIndex); + const CurveCreator::SectionType aType = theCurve->getSectionType(theIndex); const bool isClosed = theCurve->isClosed(theIndex); bool isOK = theOperation.init(CurveCreator_Operation::AddSection, - aPnts, aType, isClosed); + aName, aPnts, aType, isClosed); return isOK; } @@ -533,7 +564,7 @@ bool CurveCreator_Diff::setTypeOrClosedToUndo // Get sections to be modified. for (i = 0; i < aNbSections; i++) { if (isSetType) { - aValue = theCurve->getType(i); + aValue = theCurve->getSectionType(i); } else { aValue = theCurve->isClosed(i); } @@ -556,7 +587,7 @@ bool CurveCreator_Diff::setTypeOrClosedToUndo // There is only particular section modified. // Check if there is a real modification required. if (isSetType) { - aValue = theCurve->getType(theIntParam2); + aValue = theCurve->getSectionType(theIntParam2); } else { aValue = theCurve->isClosed(theIntParam2); } @@ -572,7 +603,7 @@ bool CurveCreator_Diff::setTypeOrClosedToUndo std::list::iterator anIter = aListOfInd.begin(); if (isSetType) { - aValue = theCurve->getType(*anIter); + aValue = theCurve->getSectionType(*anIter); } else { aValue = theCurve->isClosed(*anIter); } diff --git a/src/CurveCreator/CurveCreator_Diff.hxx b/src/CurveCreator/CurveCreator_Diff.hxx index e56b294f2..f55f5306f 100644 --- a/src/CurveCreator/CurveCreator_Diff.hxx +++ b/src/CurveCreator/CurveCreator_Diff.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -56,11 +56,9 @@ public: * parameters. It is applicable to the following operations: *
      *
    • Clear
    • - *
    • Join (without arguments)
    • *
    */ - bool init(const CurveCreator_Curve *theCurve, - const CurveCreator_Operation::Type theType); + bool init(const CurveCreator_Curve *theCurve); /** * This method initializes the difference with an operation with one integer @@ -80,7 +78,6 @@ public: *
  • SetType
  • *
  • SetClosed
  • *
  • MoveSection
  • - *
  • Join (with 2 int arguments)
  • * */ bool init(const CurveCreator_Curve *theCurve, @@ -88,46 +85,16 @@ public: const int theIntParam1, const int theIntParam2); - /** - * This method initializes the difference with an operation with three - * integer parameters. It is applicable to the following operations: + /** + * This method initializes the difference with an operation with two integer + * parameters. It is applicable to the following operations: *
      - *
    • RemovePoints
    • + *
    • Join (with a list of int arguments)
    • *
    */ bool init(const CurveCreator_Curve *theCurve, const CurveCreator_Operation::Type theType, - const int theIntParam1, - const int theIntParam2, - const int theIntParam3); - - /** - * This method initializes the difference with an operation with one - * CurveCreator::Coordinates parameter and one integer parameter. - * It is applicable to the following operations: - *
      - *
    • AddPoints
    • - *
    - */ - bool init(const CurveCreator_Curve *theCurve, - const CurveCreator_Operation::Type theType, - const CurveCreator::Coordinates &theCoords, - const int theIntParam); - - /** - * This method initializes the difference with an operation with one - * CurveCreator::Coordinates parameter and two integer parameters. - * It is applicable to the following operations: - *
      - *
    • InsertPoints
    • - *
    • SetCoordinates
    • - *
    - */ - bool init(const CurveCreator_Curve *theCurve, - const CurveCreator_Operation::Type theType, - const CurveCreator::Coordinates &theCoords, - const int theIntParam1, - const int theIntParam2); + const std::list& theParams); /** * This method initializes the difference with an operation with one @@ -157,6 +124,39 @@ public: const std::string &theName, const int theIntParam1 ); + /** + * This method initializes the difference with an operation with + * list of pairs of integer parameters. + * It is applicable to the following operations: + *
      + *
    • RemovePoints
    • + *
    + */ + bool init(const CurveCreator_Curve *theCurve, + const CurveCreator_Operation::Type theType, + const CurveCreator_ICurve::SectionToPointList &theParamList); + + /** + * This method initializes the difference with an operation with + * list of pairs of integer parameters with point coordinates. + * It is applicable to the following operations: + *
      + *
    • RemovePoints
    • + *
    + */ + bool init(const CurveCreator_Curve *theCurve, + const CurveCreator_Operation::Type theType, + const CurveCreator_ICurve::SectionToPointCoordsList &theParamList); + + /** + * This method initializes the difference with an operation with + * list of pairs of integer parameters with point coordinates. + * \param theCurve the modified curve + * \param theOldParamList the old parameters (to be saved for undo) + */ + bool init(const CurveCreator_Curve *theCurve, + const CurveCreator_ICurve::SectionToPointCoordsList &theOldParamList); + /** * This method applies undo operation to theCurve. */ diff --git a/src/CurveCreator/CurveCreator_Displayer.cxx b/src/CurveCreator/CurveCreator_Displayer.cxx new file mode 100644 index 000000000..22ae3990c --- /dev/null +++ b/src/CurveCreator/CurveCreator_Displayer.cxx @@ -0,0 +1,64 @@ +#include "CurveCreator_Displayer.hxx" + +CurveCreator_Displayer::CurveCreator_Displayer( Handle_AIS_InteractiveContext theContext, + const int theZLayer ) : + myContext( theContext ), myZLayer( theZLayer ) +{ + myObjects.clear(); +} + +CurveCreator_Displayer::~CurveCreator_Displayer(void) +{ + eraseAll( true ); + for( int i = 0 ; i < myObjects.size() ; i++ ){ + myObjects[i].Nullify(); + } + myObjects.clear(); +} + +void CurveCreator_Displayer::display( const Handle(AIS_InteractiveObject)& theObject, bool isUpdate ) +{ + if ( theObject.IsNull() ) + return; + + myObjects.push_back( theObject ); + myContext->Display( theObject, Standard_False ); + + if ( myZLayer >= 0 ) + myContext->SetZLayer( theObject, myZLayer ); + + if( isUpdate ) + myContext->UpdateCurrentViewer(); +} + +void CurveCreator_Displayer::eraseAll( bool isUpdate ) +{ + if(myObjects.empty()) + return; + for( int i = 0 ; i < myObjects.size() ; i++ ){ + myContext->Erase(myObjects[i], Standard_False); + } + myObjects.clear(); + if( isUpdate ) + myContext->UpdateCurrentViewer(); +} + +Quantity_Color CurveCreator_Displayer::getActiveColor( bool isHL ) +{ + if( isHL ){ + return Quantity_Color( 1., 0., 0., Quantity_TOC_RGB ); + } + return Quantity_Color( 0., 1., 0., Quantity_TOC_RGB ); +} + +/*void CurveCreator_Displayer::highlight( const AISObjectsList& theObjects, bool isHL ) +{ + return; + //TODO: + Quantity_Color aColor = getActiveColor( isHL ); + for( int i = 0 ; i < theObjects.size() ; i++ ){ + theObjects[i]->SetColor(aColor); + myContext->Display(theObjects[i], Standard_False); + } + myContext->UpdateCurrentViewer(); +}*/ diff --git a/src/CurveCreator/CurveCreator_Displayer.hxx b/src/CurveCreator/CurveCreator_Displayer.hxx new file mode 100644 index 000000000..f65e9d2ec --- /dev/null +++ b/src/CurveCreator/CurveCreator_Displayer.hxx @@ -0,0 +1,33 @@ +#ifndef CURVECREATOR_DISPLAYER_H +#define CURVECREATOR_DISPLAYER_H + +#include "CurveCreator_Macro.hxx" + +#include +#include + +#include + +class CURVECREATOR_EXPORT CurveCreator_Displayer +{ +typedef std::vector AISObjectsList; + +public: + CurveCreator_Displayer( Handle_AIS_InteractiveContext theContext, + const int theZLayer = -1 ); + ~CurveCreator_Displayer(void); + + void display( const Handle_AIS_InteractiveObject& theObject, bool isUpdate ); + void eraseAll( bool isUpdate ); + //void highlight( const AISObjectsList& theObjects, bool isHL ); + +protected: + Quantity_Color getActiveColor( bool isHL ); + +private: + Handle_AIS_InteractiveContext myContext; + AISObjectsList myObjects; + int myZLayer; +}; + +#endif diff --git a/src/CurveCreator/CurveCreator_ICurve.cxx b/src/CurveCreator/CurveCreator_ICurve.cxx deleted file mode 100644 index fc73f56e7..000000000 --- a/src/CurveCreator/CurveCreator_ICurve.cxx +++ /dev/null @@ -1,459 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_ICurve.cxx -// Author: Sergey KHROMOV - -#include "CurveCreator_ICurve.hxx" -#include "CurveCreator_Section.hxx" -#include "CurveCreator_Listener.hxx" - -#include - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_ICurve::CurveCreator_ICurve - (const CurveCreator::Dimension theDimension) -: myIsLocked (false), - myDimension (theDimension), - myListener(NULL) -{ -} - -//======================================================================= -// function: Destructor -// purpose: -//======================================================================= -CurveCreator_ICurve::~CurveCreator_ICurve() -{ - // Delete all allocated data. - clear(); -} - -//======================================================================= -// function: isLocked -// purpose: -//======================================================================= -bool CurveCreator_ICurve::isLocked() const -{ - return myIsLocked; -} - -//======================================================================= -// function: getDimension -// purpose: -//======================================================================= -CurveCreator::Dimension CurveCreator_ICurve::getDimension() const -{ - return myDimension; -} - -//======================================================================= -// function: getNbPoints -// purpose: -//======================================================================= -int CurveCreator_ICurve::getNbPoints(const int theISection) const -{ - int aNbCoords = 0; - - if (theISection == -1) { - int i = 0; - const int aNbSections = getNbSections(); - - for (; i < aNbSections; i++) { - aNbCoords += mySections[i]->myPoints.size(); - } - } else { - aNbCoords = mySections.at(theISection)->myPoints.size(); - } - - return aNbCoords/myDimension; -} - -//======================================================================= -// function: getNbSections -// purpose: -//======================================================================= -int CurveCreator_ICurve::getNbSections() const -{ - return mySections.size(); -} - -//======================================================================= -// function: getCoordinates -// purpose: -//======================================================================= -CurveCreator::Coordinates CurveCreator_ICurve::getCoordinates - (const int theISection, const int theIPnt) const -{ - CurveCreator_Section *aSection = mySections.at(theISection); - CurveCreator::Coordinates::const_iterator - anIter = aSection->myPoints.begin() + toICoord(theIPnt); - CurveCreator::Coordinates aResult(anIter, anIter + myDimension); - - return aResult; -} - -//======================================================================= -// function: getType -// purpose: -//======================================================================= -CurveCreator::Type CurveCreator_ICurve::getType(const int theISection) const -{ - return mySections.at(theISection)->myType; -} - -//======================================================================= -// function: getPoints -// purpose: -//======================================================================= -const CurveCreator::Coordinates &CurveCreator_ICurve::getPoints - (const int theISection) const -{ - return mySections.at(theISection)->myPoints; -} - -//======================================================================= -// function: isClosed -// purpose: -//======================================================================= -bool CurveCreator_ICurve::isClosed(const int theISection) const -{ - return mySections.at(theISection)->myIsClosed; -} - -std::string CurveCreator_ICurve::getSectionName(const int theISection) const -{ - return mySections.at(theISection)->myName; -} - -//======================================================================= -// function: setType -// purpose: -//======================================================================= -void CurveCreator_ICurve::setType - (const CurveCreator::Type theType, const int theISection) -{ - if (theISection == -1) { - int i = 0; - const int aNbSections = getNbSections(); - - for (; i < aNbSections; i++) { - mySections[i]->myType = theType; - } - if( myListener ) - myListener->curveChanged(); - } else { - if( mySections.at(theISection)->myType != theType ){ - mySections.at(theISection)->myType = theType; - if( myListener ) - myListener->sectionTypeChanged(theISection); - } - } -} - -//======================================================================= -// function: addSection -// purpose: -//======================================================================= -void CurveCreator_ICurve::addSection - (const std::string& theName, - const CurveCreator::Type theType, - const bool theIsClosed, - const CurveCreator::Coordinates &thePoints) -{ - CurveCreator_Section *aSection = new CurveCreator_Section; - - std::string aName = theName; - if( aName.empty() ){ - aName = getUnicSectionName(); - } - aSection->myName = aName; - aSection->myType = theType; - aSection->myIsClosed = theIsClosed; - aSection->myPoints = thePoints; - mySections.push_back(aSection); - if( myListener ) - myListener->sectionAdded( -1 ); -} - -//======================================================================= -// function: removeSection -// purpose: -//======================================================================= -void CurveCreator_ICurve::removeSection(const int theISection) -{ - if (theISection == -1) { - delete mySections.back(); - mySections.pop_back(); - } else { - Sections::iterator anIterRm = mySections.begin() + theISection; - - delete *anIterRm; - mySections.erase(anIterRm); - } - if( myListener ) - myListener->sectionRemoved(theISection); -} - -//======================================================================= -// function: insertPoints -// purpose: -//======================================================================= -void CurveCreator_ICurve::insertPoints - (const CurveCreator::Coordinates &thePoints, - const int theISection, - const int theIPnt) -{ - if (theIPnt == -1) { - // Add points to the end of section points. - addPoints(thePoints, theISection); - } else { - CurveCreator_Section *aSection = - (theISection == -1 ? mySections.back() : mySections.at(theISection)); - - aSection->myPoints.insert(aSection->myPoints.begin() + toICoord(theIPnt), - thePoints.begin(), thePoints.end()); - if( myListener ) - myListener->pointInserted( theISection, theIPnt ); - } -} - -void CurveCreator_ICurve::movePoint(const int theISection, const int theIPointFrom, const int theNewIndex) -{ - CurveCreator::Coordinates aCoords = getCoordinates(theISection, theIPointFrom ); - insertPoints(aCoords, theISection, theNewIndex+1); - int aRemPntIndx = theIPointFrom; - if( theNewIndex < theIPointFrom ) - aRemPntIndx++; - removePoints(theISection, aRemPntIndx, 1 ); -} - -//======================================================================= -// function: removePoints -// purpose: -//======================================================================= -void CurveCreator_ICurve::removePoints(const int theISection, - const int theIPnt, - const int theNbPoints) -{ - CurveCreator_Section *aSection = mySections.at(theISection); - CurveCreator::Coordinates::iterator anIterBegin = - aSection->myPoints.begin() + toICoord(theIPnt); - CurveCreator::Coordinates::iterator anIterEnd = - (theNbPoints == -1 ? - aSection->myPoints.end() : anIterBegin + toICoord(theNbPoints)); - - aSection->myPoints.erase(anIterBegin, anIterEnd); - if( myListener ) - myListener->pointRemoved(theISection, theIPnt, theNbPoints ); -} - -//======================================================================= -// function: clear -// purpose: -//======================================================================= -void CurveCreator_ICurve::clear() -{ - // Delete all allocated data. - int i = 0; - const int aNbSections = getNbSections(); - - for (; i < aNbSections; i++) { - delete mySections[i]; - } - - mySections.clear(); - if( myListener ) - myListener->curveChanged(); -} - -//======================================================================= -// function: setCoordinates -// purpose: -//======================================================================= -void CurveCreator_ICurve::setCoordinates - (const CurveCreator::Coordinates &theCoords, - const int theISection, - const int theIPnt) -{ - if (theCoords.size() == myDimension) { - CurveCreator_Section *aSection = mySections.at(theISection); - int i; - - for (i = 0; i < myDimension; i++) { - aSection->myPoints.at(toICoord(theIPnt) + i) = theCoords[i]; - } - - if( myListener ) - myListener->pointChanged( theISection, theIPnt ); - } -} - -//======================================================================= -// function: setClosed -// purpose: -//======================================================================= -void CurveCreator_ICurve::setClosed(const bool theIsClosed, - const int theISection) -{ - if (theISection == -1) { - int aSize = mySections.size(); - int i; - - for (i = 0; i < aSize; i++) { - mySections[i]->myIsClosed = theIsClosed; - if( myListener ){ - myListener->sectionClosed( theISection, theIsClosed ); - } - } - } else { - mySections.at(theISection)->myIsClosed = theIsClosed; - if( myListener ){ - myListener->sectionClosed( theISection, theIsClosed ); - } - } -} - -/** Set name of the specified section. - */ -void CurveCreator_ICurve::setName( const std::string& theName, const int theISection ) -{ - if( ( theISection >= 0 ) && ( theISection < mySections.size() )){ - mySections.at(theISection)->myName = theName; - } -} - -//======================================================================= -// function: moveSection -// purpose: -//======================================================================= -void CurveCreator_ICurve::moveSection(const int theISection, - const int theNewIndex) -{ - if (theISection != theNewIndex) { - CurveCreator_Section *aSection = mySections.at(theISection); - - // Remove section - Sections::iterator anIter = mySections.begin() + theISection; - - mySections.erase(anIter); - - // Insert section. - anIter = mySections.begin() + theNewIndex; - mySections.insert(anIter, aSection); - } -} - -//======================================================================= -// function: join -// purpose: -//======================================================================= -void CurveCreator_ICurve::join(const int theISectionTo, - const int theISectionFrom) -{ - if (theISectionTo != theISectionFrom) { - CurveCreator_Section *aSection1 = mySections.at(theISectionTo); - CurveCreator_Section *aSection2 = mySections.at(theISectionFrom); - - aSection1->myPoints.insert(aSection1->myPoints.end(), - aSection2->myPoints.begin(), aSection2->myPoints.end()); - - removeSection(theISectionFrom); - if( myListener ) - myListener->curveChanged(); - } -} - -//======================================================================= -// function: join -// purpose: -//======================================================================= -void CurveCreator_ICurve::join() -{ - const int aSize = mySections.size(); - - if (aSize > 1) { - CurveCreator_Section *aSection1 = mySections[0]; - int i; - - for (i = 1; i < aSize; i++) { - CurveCreator_Section *aSection2 = mySections[i]; - - aSection1->myPoints.insert(aSection1->myPoints.end(), - aSection2->myPoints.begin(), aSection2->myPoints.end()); - delete aSection2; - } - - // Just erace section pointers as they were deleted before. - mySections.erase(mySections.begin() + 1, mySections.end()); - if( myListener ) - myListener->curveChanged(); - } -} - -//======================================================================= -// function: toICoord -// purpose: -//======================================================================= -int CurveCreator_ICurve::toICoord(const int theIPnt) const -{ - return theIPnt*myDimension; -} - -//======================================================================= -// function: getUnicSectionName -// purpose: return unic section name -//======================================================================= -std::string CurveCreator_ICurve::getUnicSectionName() -{ - for( int i = 0 ; i < 1000000 ; i++ ){ - char aBuffer[255]; - sprintf( aBuffer, "Section_%d", i+1 ); - std::string aName(aBuffer); - int j; - for( j = 0 ; j < mySections.size() ; j++ ){ - if( mySections[j]->myName == aName ) - break; - } - if( j == mySections.size() ) - return aName; - } - return ""; -} - -//======================================================================= -// function: setListener -// purpose: set curve changes listener -//======================================================================= -void CurveCreator_ICurve::setListener( CurveCreator_Listener* theListener ) -{ - myListener = theListener; -} - -//======================================================================= -// function: setListener -// purpose: set curve changes listener -//======================================================================= -void CurveCreator_ICurve::removeListener() -{ - myListener = NULL; -} diff --git a/src/CurveCreator/CurveCreator_ICurve.hxx b/src/CurveCreator/CurveCreator_ICurve.hxx index ca662be1d..9effa478a 100644 --- a/src/CurveCreator/CurveCreator_ICurve.hxx +++ b/src/CurveCreator/CurveCreator_ICurve.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -17,170 +17,189 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File: CurveCreator_Curve.hxx -// Author: Sergey KHROMOV +// File: CurveCreator_ICurve.hxx +// Author: Alexander KOVALEV and Alexander SOLOVYOV #ifndef _CurveCreator_ICurve_HeaderFile #define _CurveCreator_ICurve_HeaderFile -#include "CurveCreator.hxx" #include "CurveCreator_Macro.hxx" -#include "CurveCreator_Operation.hxx" +#include +#include +#include +#include -class CurveCreator_Section; -class CurveCreator_Listener; +class Handle_AIS_InteractiveObject; + +namespace CurveCreator +{ + //! Type of the section + enum SectionType + { + Polyline, + Spline, + }; + + //! Dimension of the curve + enum Dimension + { + Dim2d = 2, + Dim3d = 3 + }; + +}; /** * The CurveCreator_ICurve object is represented as one or more sets of * connected points; thus CurveCreator_ICurve object can contain several * not connected curves (polylines or b-splines), each such curve has two - * only ends � start and end points � in other words non-manifold curves + * only ends "start and end points" in other words non-manifold curves * are not supported. */ class CURVECREATOR_EXPORT CurveCreator_ICurve { +public: + typedef std::pair SectionToPoint; + typedef std::deque SectionToPointList; - //! List of curves - typedef std::deque Sections; + typedef std::deque< std::pair< SectionToPoint,std::deque< float > > > SectionToPointCoordsList; public: - //! Constructor of the curve. - /** The dimension is explicitly specified in the constructor - * and cannot be changed later. - */ - CurveCreator_ICurve(const CurveCreator::Dimension theDimension); + /***********************************************/ + /*** Undo/Redo methods ***/ + /***********************************************/ - //! Destructor. - virtual ~CurveCreator_ICurve(); + //! Get number of available undo operations + virtual int getNbUndo() const = 0; - //! Returns true if this curve is locked by a curve editor. - virtual bool isLocked() const; + //! Undo previous operation + virtual bool undo() = 0; - //! Get the dimension. - virtual CurveCreator::Dimension getDimension() const; + //! Get number of available redo operations + virtual int getNbRedo() const = 0; - //! Get number of sections. - virtual int getNbSections() const; + //! Redo last previously "undone" operation + virtual bool redo() = 0; - /** Get number of points in specified section or (the total number of points - * in Curve if theISection is equal to -1). - */ - virtual int getNbPoints(const int theISection = -1) const; - //! Get coordinates of specified point - virtual CurveCreator::Coordinates getCoordinates - (const int theISection, const int theIPnt) const; + /***********************************************/ + /*** Section methods ***/ + /***********************************************/ - //! Get points of a section. - virtual const CurveCreator::Coordinates &getPoints(const int theISection) const; + //! Clear the polyline (remove all sections) + virtual bool clear() = 0; - //! Get type of the specified section - virtual CurveCreator::Type getType(const int theISection) const; + //! Join list of sections to one section (join all if the list is empty) + // The first section in the list is a leader, another sections are joined to it + virtual bool join( const std::list& theSections ) = 0; - //! Get �closed� flag of the specified section - virtual bool isClosed(const int theISection) const; - - //! Returns specifyed section name - virtual std::string getSectionName(const int theISection) const; - - /** - * Return unic section name - */ - virtual std::string getUnicSectionName(); - - /** - * Set curve creator listener object - */ - virtual void setListener( CurveCreator_Listener* myWatcher ); - - /** - * Remove curve creator listener object - */ - virtual void removeListener(); - -protected: - - /** Set type of the specified section (or all sections - * if \a theISection is -1). - */ - virtual void setType(const CurveCreator::Type theType, const int theISection = -1); - - /** Add points to the specified section (or last section - * if \a theISection is -1). - */ - virtual void addPoints - (const CurveCreator::Coordinates &thePoints, const int theISection = -1) = 0; + //! Get number of sections + virtual int getNbSections() const = 0; //! Add a new section. - virtual void addSection (const std::string &theName, const CurveCreator::Type theType, - const bool theIsClosed, - const CurveCreator::Coordinates &thePoints); + virtual int addSection( const std::string& theName, + const CurveCreator::SectionType theType, + const bool theIsClosed ) = 0; - //! Removes the section. If theISection equals -1, removes the last section. - virtual void removeSection(const int theISection = -1); + //! Removes the given sections. + virtual bool removeSection( const int theISection ) = 0; - /** Insert points in the given position (add to the end of list - * if \a theIPnt parameter is -1) of the specified section - * (or last section if \a theISection parameter is -1). - */ - virtual void insertPoints(const CurveCreator::Coordinates &thePoints, - const int theISection = -1, - const int theIPnt = -1); - - /** Remove \a nbPoints points from given \a theISection, - * starting from given \a theIPnt (of all points up to the end of - * section if \a theNbPoints is -1). - */ - virtual void removePoints(const int theISection, - const int theIPnt, - const int theNbPoints = -1); - - /** Move specified point within section to new position - */ - virtual void movePoint(const int theISection, - const int theIPointFrom, - const int theNewIndex); - - //! Remove all sections. - virtual void clear(); - - //! Set coordinates of specified point - virtual void setCoordinates(const CurveCreator::Coordinates &theCoords, - const int theISection, - const int theIPnt); - - /** Set �closed� flag of the specified section (all sections if - * \a theISection is -1). - */ - virtual void setClosed(const bool theIsClosed, const int theISection = -1); - - /** Set name of the specified section. - */ - virtual void setName( const std::string& theName, const int theISection ); - - /** Move specified \a theISection to the specified position - * in the sections list. - */ - virtual void moveSection(const int theISection, const int theNewIndex); - - //! Join two sections to one section - virtual void join(const int theISectionTo, const int theISectionFrom); - - //! Join all sections to the single curve - virtual void join(); + //! Get "closed" flag of the specified section + virtual bool isClosed( const int theISection ) const = 0; /** - * This method converts the point index to the index in - * an array of coordinates. + * Set "closed" flag of the specified section (all sections if + * \a theISection is -1). */ - virtual int toICoord(const int theIPnt) const; + virtual bool setClosed( const int theISection, + const bool theIsClosed ) = 0; -public: + //! Returns specifyed section name + virtual std::string getSectionName( const int theISection ) const = 0; - bool myIsLocked; - Sections mySections; //!< curve data - CurveCreator::Dimension myDimension; //!< curve dimension - CurveCreator_Listener* myListener; //!< listener + /** Set name of the specified section */ + virtual bool setSectionName( const int theISection, + const std::string& theName ) = 0; + + //! Get type of the specified section + virtual CurveCreator::SectionType getSectionType( const int theISection ) const = 0; + + /** + * Set type of the specified section (or all sections + * if \a theISection is -1). + */ + virtual bool setSectionType( const int theISection, + const CurveCreator::SectionType theType ) = 0; + + + /***********************************************/ + /*** Point methods ***/ + /***********************************************/ + + //! Get the dimension. + virtual CurveCreator::Dimension getDimension() const = 0; + + /** + * Insert one or several points to the specified section starting from the given theIPnt index + * (or add these at the end of section points if \a theIPnt is -1). + */ + virtual bool addPoints( const std::deque& theCoords, + const int theISection, + const int theIPnt = -1 ) = 0; + + //! Set coordinates of specified point + virtual bool setPoint( const int theISection, + const int theIPnt, + const std::deque& theNewCoords ) = 0; + + //! Set coordinates of specified points from different sections + virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords, + const bool theIsToSaveDiff = true ) = 0; + + //! Remove point with given id + virtual bool removePoint( const int theISection, const int theIPnt = -1 ) = 0; + //! Remove several points from different sections + virtual bool removeSeveralPoints( const SectionToPointList &theSectionToPntIDs) = 0; + + //! Get coordinates of specified point + virtual std::deque getPoint( const int theISection, + const int theIPnt ) const = 0; + + /** + * Get points of a section (the total points in Curve if theISection is equal to -1).. + */ + virtual std::deque getPoints( const int theISection = -1 ) const = 0; + + /** + * Get number of points in specified section or (the total number of points + * in Curve if theISection is equal to -1). + */ + virtual int getNbPoints( const int theISection ) const = 0; + + /** + * Set skip sorting flag. If the flag is true - points sorting will be skipped. + */ + virtual void setSkipSorting( const bool ) = 0; + + /** + * Indicates whether the points can be sorted. + */ + virtual bool canPointsBeSorted() = 0; + + /** + * Saves points coordinates difference. + * \param theOldCoords the old points coordinates + */ + virtual void saveCoordDiff( const SectionToPointCoordsList &theOldCoords ) = 0; + + /***********************************************/ + /*** Presentation methods ***/ + /***********************************************/ + + virtual Handle_AIS_InteractiveObject getAISObject( const bool theNeedToBuild = false ) const = 0; + +protected: + virtual void constructAISObject() = 0; }; diff --git a/src/CurveCreator/CurveCreator_Macro.hxx b/src/CurveCreator/CurveCreator_Macro.hxx index 9e6c31c68..ec814eb49 100644 --- a/src/CurveCreator/CurveCreator_Macro.hxx +++ b/src/CurveCreator/CurveCreator_Macro.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 diff --git a/src/CurveCreator/CurveCreator_NewPointDlg.cxx b/src/CurveCreator/CurveCreator_NewPointDlg.cxx deleted file mode 100755 index bb15571e8..000000000 --- a/src/CurveCreator/CurveCreator_NewPointDlg.cxx +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include "CurveCreator_NewPointDlg.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -CurveCreator_NewPointDlg::CurveCreator_NewPointDlg(CurveCreator::Dimension theDim, QWidget *parent) : - QWidget(parent), myX(NULL), myY(NULL), myZ(NULL), myIsEdit(false), myDim(theDim), - myIsInstantSketchingEnabled(false) -{ - QString aTitle = QString(tr("ADD_NEW_POINT")); - setWindowTitle(aTitle); - - QFrame* aFrame = new QFrame( this ); - QVBoxLayout* aLayout = new QVBoxLayout( aFrame ); - - QFrame* aCoordFrame = new QFrame( aFrame ); - QGridLayout* aCoordLayout = new QGridLayout( aCoordFrame ); - - QLabel* aLbl = new QLabel( tr("X_COORD"), this); - myX = new QDoubleSpinBox(this); - aCoordLayout->addWidget(aLbl, 0, 0); - aCoordLayout->addWidget(myX, 0, 1 ); - - aLbl = new QLabel( tr("Y_COORD"), this); - myY = new QDoubleSpinBox(this); - aCoordLayout->addWidget(aLbl, 1, 0 ); - aCoordLayout->addWidget(myY, 1, 1 ); - - myZLabel = new QLabel( tr("Z_COORD"), this); - myZ = new QDoubleSpinBox(this); - aCoordLayout->addWidget(myZLabel, 2,0 ); - aCoordLayout->addWidget(myZ, 2,1 ); - - if( theDim != CurveCreator::Dim3d ){ - myZ->hide(); - myZLabel->hide(); - } - - myBtnFrame = new QFrame( aFrame ); - QHBoxLayout* aBtnsLayout = new QHBoxLayout( myBtnFrame ); - - myAddBtn = new QPushButton( tr( "ADD_BTN" ), myBtnFrame ); - myCancelBtn = new QPushButton( tr( "CANCEL" ), myBtnFrame ); - - connect( myCancelBtn, SIGNAL( clicked() ), this, SIGNAL( cancelPoint() ) ); - - aBtnsLayout->addWidget( myAddBtn ); - aBtnsLayout->addStretch( 1 ); - aBtnsLayout->addWidget( myCancelBtn ); - - aLayout->addWidget( aCoordFrame, 0 ); - aLayout->addWidget( myBtnFrame, 1 ); - - clear(); - updateTitle(); -} - -void CurveCreator_NewPointDlg::setSectionName( const QString& theName ) -{ - mySectionName = theName; - updateTitle(); -} - -void CurveCreator_NewPointDlg::setEditMode( bool isEdit ) -{ - myIsEdit = isEdit; - if( myIsEdit ){ - myAddBtn->setText(tr("OK")); - myAddBtn->disconnect( SIGNAL( clicked() ) ); - connect( myAddBtn, SIGNAL( clicked() ), this, SIGNAL( modifyPoint() ) ); - } - else{ - myAddBtn->setText(tr("ADD_BTN")); - myAddBtn->disconnect( SIGNAL( clicked() ) ); - connect( myAddBtn, SIGNAL( clicked() ), this, SIGNAL( addPoint() ) ); - } - updateTitle(); -} - -void CurveCreator_NewPointDlg::updateTitle() -{ - QString aTitle; - if( !myIsEdit ){ - if( mySectionName.isEmpty() ){ - aTitle = tr("ADD_NEW_POINT"); - } - else{ - aTitle = QString(tr("ADD_NEW_POINT_TO_%1")).arg(mySectionName); - } - } - else{ - aTitle = tr("SET_POINT_COORDINATES"); - } - setWindowTitle(aTitle); -} - -CurveCreator::Coordinates CurveCreator_NewPointDlg::getCoordinates() const -{ - CurveCreator::Coordinates aCoords; - double anX = myX->value(); - aCoords.push_back(anX); - double anY = myY->value(); - aCoords.push_back(anY); - if( myDim == CurveCreator::Dim3d ){ - double aZ = myZ->value(); - aCoords.push_back(aZ); - } - return aCoords; -} - -void CurveCreator_NewPointDlg::clear() -{ - initSpinBox(myX); - initSpinBox(myY); - initSpinBox(myZ); -} - -void CurveCreator_NewPointDlg::setDimension(CurveCreator::Dimension theDim) -{ - if( theDim == CurveCreator::Dim2d ){ - myZ->hide(); - myZLabel->hide(); - } - else{ - myZ->show(); - myZLabel->show(); - } -} - -void CurveCreator_NewPointDlg::setCoordinates( const CurveCreator::Coordinates& theCoords ) -{ - double anX = theCoords[0]; - myX->setValue(anX); - double anY = theCoords[1]; - myY->setValue(anY); - if( theCoords.size() == 3 ){ - double aZ = theCoords[2]; - myZ->setValue(aZ); - } - if( isInstantSketchingEnabled() ) - emit addPoint(); -} - -bool CurveCreator_NewPointDlg::isInstantSketchingEnabled() const -{ - return myIsInstantSketchingEnabled; -} - -void CurveCreator_NewPointDlg::setInstantSketchingEnabled( const bool theState ) -{ - myIsInstantSketchingEnabled = theState; -} - -//======================================================================= -// function: initSpinBox -// purpose: -//======================================================================= -void CurveCreator_NewPointDlg::initSpinBox(QDoubleSpinBox *theSpinBox) -{ - const double aCoordMin = -1.e+15; - const double aCoordMax = 1.e+15; - const double aStep = 10; - const int aPrecision = 6; - - theSpinBox->setDecimals( qAbs( aPrecision ) ); - theSpinBox->setRange(aCoordMin, aCoordMax); - theSpinBox->setSingleStep(aStep); - theSpinBox->setValue(0.0); -} diff --git a/src/CurveCreator/CurveCreator_NewPointDlg.h b/src/CurveCreator/CurveCreator_NewPointDlg.h deleted file mode 100755 index a86189e54..000000000 --- a/src/CurveCreator/CurveCreator_NewPointDlg.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef CURVECREATOR_NEWPOINTDLG_H -#define CURVECREATOR_NEWPOINTDLG_H - -#include "CurveCreator.hxx" - -#include - -class QDoubleSpinBox; -class QDialogButtonBox; -class QAbstractButton; -class QPushButton; -class QLabel; -class QFrame; - -class CurveCreator_NewPointDlg : public QWidget -{ - Q_OBJECT -public: - explicit CurveCreator_NewPointDlg(CurveCreator::Dimension theDim, QWidget *parent = 0); - CurveCreator::Coordinates getCoordinates() const; - void clear(); - void setSectionName( const QString& theName ); - void setEditMode( bool isEdit ); - void setCoordinates( const CurveCreator::Coordinates& theCoords ); - void setDimension(CurveCreator::Dimension theDim); - bool isInstantSketchingEnabled() const; - void setInstantSketchingEnabled( const bool theState ); -signals: - void addPoint(); - void modifyPoint(); - void cancelPoint(); -public slots: -protected slots: -protected: - void updateTitle(); - void initSpinBox(QDoubleSpinBox *theSpinBox); -private: - QFrame* myBtnFrame; - CurveCreator::Dimension myDim; - QDoubleSpinBox* myX; - QDoubleSpinBox* myY; - QDoubleSpinBox* myZ; - QLabel* myZLabel; - QPushButton* myAddBtn; - QPushButton* myCancelBtn; - bool myIsEdit; - QString mySectionName; - bool myIsInstantSketchingEnabled; -}; - -#endif // CURVECREATOR_NEWPOINTDLG_H diff --git a/src/CurveCreator/CurveCreator_NewSectionDlg.cxx b/src/CurveCreator/CurveCreator_NewSectionDlg.cxx old mode 100755 new mode 100644 index 275a94625..f5f602a3c --- a/src/CurveCreator/CurveCreator_NewSectionDlg.cxx +++ b/src/CurveCreator/CurveCreator_NewSectionDlg.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -18,7 +18,7 @@ // #include "CurveCreator_NewSectionDlg.h" -#include "CurveCreator_Curve.hxx" +//#include "CurveCreator_Curve.hxx" #include #include @@ -31,21 +31,27 @@ #include #include -CurveCreator_NewSectionDlg::CurveCreator_NewSectionDlg( QWidget *parent ) : - QWidget(parent) +CurveCreator_NewSectionDlg::CurveCreator_NewSectionDlg( QWidget *parent, bool enableClosed ) : + QWidget(parent), myIsEnableClosed( enableClosed ) { + QVBoxLayout* aMainLayout = new QVBoxLayout( this ); + aMainLayout->setMargin( 0 ); + QFrame* aFrame = new QFrame( this ); + aMainLayout->addWidget( aFrame ); + QVBoxLayout* aLayout = new QVBoxLayout( aFrame ); + aLayout->setMargin( 0 ); QFrame* aCoordFrame = new QFrame( aFrame ); QGridLayout* aCoordLayout = new QGridLayout( aCoordFrame ); - QLabel* aLbl = new QLabel(tr("NAME"), this); + QLabel* aLbl = new QLabel(tr("SECTION_NAME"), this); myName = new QLineEdit(this); aCoordLayout->addWidget(aLbl, 0, 0); aCoordLayout->addWidget(myName, 0 , 1); - aLbl = new QLabel(tr("LINE_TYPE")); + aLbl = new QLabel(tr("SECTION_LINE_TYPE")); myLineType = new QComboBox(this); SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); @@ -54,22 +60,26 @@ CurveCreator_NewSectionDlg::CurveCreator_NewSectionDlg( QWidget *parent ) : // QPixmap aPolylinePixmap = QPixmap(tr(":images/ICON_POLYLINE")); // QPixmap aSplinePixmap = QPixmap(tr(":images/ICON_SPLINE")); - myLineType->addItem(aPolylinePixmap, tr("POLYLINE_TYPE")); - myLineType->addItem(aSplinePixmap, tr("SPLINE_TYPE")); + myLineType->addItem(aPolylinePixmap, tr("SECTION_POLYLINE_TYPE")); + myLineType->addItem(aSplinePixmap, tr("SECTION_SPLINE_TYPE")); myLineType->setCurrentIndex(0); aCoordLayout->addWidget(aLbl, 1, 0); aCoordLayout->addWidget(myLineType, 1 , 1); - aLbl = new QLabel(tr("LINE_CLOSED")); + aLbl = new QLabel(tr("SECTION_LINE_CLOSED")); myIsClosed = new QCheckBox(this); aCoordLayout->addWidget(aLbl, 2, 0); aCoordLayout->addWidget(myIsClosed, 2, 1); + if ( !myIsEnableClosed ) { + aLbl->hide(); + myIsClosed->hide(); + } myBtnFrame = new QFrame( aFrame ); QHBoxLayout* aBtnsLayout = new QHBoxLayout( myBtnFrame ); - myAddBtn = new QPushButton( tr( "ADD_BTN" ), myBtnFrame ); - myCancelBtn = new QPushButton( tr( "CANCEL" ), myBtnFrame ); + myAddBtn = new QPushButton( tr( "SECTION_ADD_BTN" ), myBtnFrame ); + myCancelBtn = new QPushButton( tr( "SECTION_CANCEL_BTN" ), myBtnFrame ); connect( myAddBtn, SIGNAL( clicked() ), this, SIGNAL( addSection() ) ); connect( myCancelBtn, SIGNAL( clicked() ), this, SIGNAL( cancelSection() ) ); @@ -82,7 +92,7 @@ CurveCreator_NewSectionDlg::CurveCreator_NewSectionDlg( QWidget *parent ) : aLayout->addWidget( myBtnFrame, 1 ); } -void CurveCreator_NewSectionDlg::setSectionParameters( const QString& theName, bool isClosed, CurveCreator::Type theType ) +void CurveCreator_NewSectionDlg::setSectionParameters( const QString& theName, bool isClosed, CurveCreator::SectionType theType ) { myName->setText(theName); myIsClosed->setChecked(isClosed); @@ -103,12 +113,12 @@ void CurveCreator_NewSectionDlg::setEditMode( bool isEdit ) { myIsEdit = isEdit; if( myIsEdit ){ - myAddBtn->setText(tr("OK")); + myAddBtn->setText(tr("SECTION_OK_BTN")); myAddBtn->disconnect( SIGNAL( clicked() ) ); connect( myAddBtn, SIGNAL( clicked() ), this, SIGNAL( modifySection() ) ); } else{ - myAddBtn->setText(tr("ADD_BTN")); + myAddBtn->setText(tr("SECTION_ADD_BTN")); myAddBtn->disconnect( SIGNAL( clicked() ) ); connect( myAddBtn, SIGNAL( clicked() ), this, SIGNAL( addSection() ) ); } @@ -125,12 +135,12 @@ bool CurveCreator_NewSectionDlg::isClosed() const return myIsClosed->isChecked(); } -CurveCreator::Type CurveCreator_NewSectionDlg::getSectionType() const +CurveCreator::SectionType CurveCreator_NewSectionDlg::getSectionType() const { if( myLineType->currentIndex() == 0 ) return CurveCreator::Polyline; else - return CurveCreator::BSpline; + return CurveCreator::Spline; } void CurveCreator_NewSectionDlg::updateTitle() diff --git a/src/CurveCreator/CurveCreator_NewSectionDlg.h b/src/CurveCreator/CurveCreator_NewSectionDlg.h old mode 100755 new mode 100644 index 7f028f20e..d37ed1176 --- a/src/CurveCreator/CurveCreator_NewSectionDlg.h +++ b/src/CurveCreator/CurveCreator_NewSectionDlg.h @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -21,10 +21,11 @@ #define CURVECREATOR_NEWSECTION_H #include "CurveCreator.hxx" +#include "CurveCreator_ICurve.hxx" #include -class CurveCreator_Curve; +//class CurveCreator_Curve; class QLineEdit; class QComboBox; @@ -38,16 +39,17 @@ class CurveCreator_NewSectionDlg : public QWidget { Q_OBJECT public: - explicit CurveCreator_NewSectionDlg(QWidget *parent = 0); + explicit CurveCreator_NewSectionDlg(QWidget *parent = 0, bool enableClosed = true ); QString getName() const; bool isClosed() const; - CurveCreator::Type getSectionType() const; + CurveCreator::SectionType getSectionType() const; - void setSectionParameters( const QString& theName, bool isClosed, CurveCreator::Type theType ); + void setSectionParameters( const QString& theName, bool isClosed, CurveCreator::SectionType theType ); void setSectionName(const QString& theName ); void clear(); void setEditMode( bool isEdit ); + bool isEnableClosed() const { return myIsEnableClosed; } signals: void addSection(); @@ -63,6 +65,7 @@ private: QComboBox* myLineType; QCheckBox* myIsClosed; bool myIsEdit; + bool myIsEnableClosed; QPushButton* myAddBtn; QPushButton* myCancelBtn; }; diff --git a/src/CurveCreator/CurveCreator_Operation.cxx b/src/CurveCreator/CurveCreator_Operation.cxx index 2e4b6416a..173e1c881 100644 --- a/src/CurveCreator/CurveCreator_Operation.cxx +++ b/src/CurveCreator/CurveCreator_Operation.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -22,6 +22,7 @@ #include "CurveCreator_Operation.hxx" #include "CurveCreator_Curve.hxx" +#include "CurveCreator.hxx" #include #include @@ -46,6 +47,11 @@ CurveCreator_Operation::~CurveCreator_Operation() clear(); } +bool compId(CurveCreator_PosPoint* p1, CurveCreator_PosPoint* p2) +{ + return p1->myID < p2->myID; +} + //======================================================================= // function: Constructor // purpose: @@ -54,8 +60,7 @@ bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType) { bool isOK = false; - if (theType == CurveCreator_Operation::Clear || - theType == CurveCreator_Operation::Join) { + if (theType == CurveCreator_Operation::Clear) { clear(); myType = theType; isOK = true; @@ -113,23 +118,28 @@ bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, // function: Constructor // purpose: //======================================================================= -bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, - const int theIntParam1, - const int theIntParam2, - const int theIntParam3) +bool CurveCreator_Operation::init(const Type theType, const std::list theParamList) { bool isOK = false; - if (theType == CurveCreator_Operation::RemovePoints) { - int *pData = (int *)allocate(3*sizeof(int)); + if (theType == CurveCreator_Operation::Join) + { + const int aNbPoints = theParamList.size(); + + const size_t aSize = + sizeof(aNbPoints) + + aNbPoints * (sizeof(int)); + + int *pIntData = (int *)allocate(aSize); + + *pIntData++ = aNbPoints; + std::list::const_iterator anIt = theParamList.begin(), aLast = theParamList.end(); + for ( ; anIt != aLast; anIt++ ) + *pIntData++ = *anIt; - pData[0] = theIntParam1; - pData[1] = theIntParam2; - pData[2] = theIntParam3; myType = theType; - isOK = true; + isOK = true; } - return isOK; } @@ -166,43 +176,6 @@ bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, return isOK; } -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, - const CurveCreator::Coordinates &theCoords, - const int theIntParam1, - const int theIntParam2) -{ - bool isOK = false; - - if (theType == CurveCreator_Operation::AddSection || - theType == CurveCreator_Operation::InsertPoints || - theType == CurveCreator_Operation::SetCoordinates) { - const int aNbCoords = theCoords.size(); - const size_t aSize = - 3*sizeof(theIntParam1) + aNbCoords*sizeof(CurveCreator::TypeCoord); - int *pIntData = (int *)allocate(aSize); - - *pIntData++ = theIntParam1; - *pIntData++ = theIntParam2; - *pIntData++ = aNbCoords; - - CurveCreator::TypeCoord *pRealData = (CurveCreator::TypeCoord *)pIntData; - int i = 0; - - for (; i < aNbCoords; i++) { - *pRealData++ = theCoords[i]; - } - - myType = theType; - isOK = true; - } - - return isOK; -} - //======================================================================= // function: Constructor // purpose: @@ -234,7 +207,7 @@ bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, pIntData = (int*)aStrPtr; *pIntData++ = aNbCoords; - CurveCreator::TypeCoord *pRealData = (CurveCreator::TypeCoord *)aStrPtr; + CurveCreator::TypeCoord *pRealData = (CurveCreator::TypeCoord *)pIntData; int i = 0; for (; i < aNbCoords; i++) { @@ -269,6 +242,84 @@ bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, return false; } +bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, + const CurveCreator_ICurve::SectionToPointCoordsList &theParamList1) +{ + bool isOK = false; + + if (theType == CurveCreator_Operation::InsertPoints || + theType == CurveCreator_Operation::SetCoordinates ) { + + const int aNbPoints = theParamList1.size(); + + CurveCreator_ICurve::SectionToPointCoordsList::const_iterator anIt = + theParamList1.begin(); + const int aNbCoords = anIt->second.size(); + + const size_t aSize = + sizeof(aNbPoints) + sizeof(aNbCoords) + + aNbPoints * (3*sizeof(int) + aNbCoords*sizeof(CurveCreator::TypeCoord)); + int *pIntData = (int *)allocate(aSize); + + *pIntData++ = aNbPoints; + *pIntData++ = aNbCoords; + int aSectionId, aPointId; + for ( ; anIt != theParamList1.end(); anIt++ ) { + aSectionId = anIt->first.first; + aPointId = anIt->first.second; + + *pIntData++ = aSectionId; + *pIntData++ = aPointId; + *pIntData++ = aNbCoords; + + const CurveCreator::Coordinates &aCoords = anIt->second; + CurveCreator::TypeCoord *pRealData = (CurveCreator::TypeCoord *)pIntData; + for (int i = 0; i < aNbCoords; i++) { + *pRealData++ = aCoords[i]; + } + pIntData = (int *)pRealData; + } + + myType = theType; + isOK = true; + } + + return isOK; +} + +bool CurveCreator_Operation::init(const CurveCreator_Operation::Type theType, + const CurveCreator_ICurve::SectionToPointList &theParamList1) +{ + bool isOK = false; + + if (theType == CurveCreator_Operation::RemovePoints) { + const int aNbPoints = theParamList1.size(); + + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = + theParamList1.begin(); + + const size_t aSize = + sizeof(aNbPoints) + + aNbPoints * (2*sizeof(int)); + int *pIntData = (int *)allocate(aSize); + + *pIntData++ = aNbPoints; + int aSectionId, aPointId; + for ( ; anIt != theParamList1.end(); anIt++ ) { + aSectionId = anIt->first; + aPointId = anIt->second; + + *pIntData++ = aSectionId; + *pIntData++ = aPointId; + } + + myType = theType; + isOK = true; + } + + return isOK; +} + //======================================================================= // function: apply // purpose: @@ -280,58 +331,81 @@ void CurveCreator_Operation::apply(CurveCreator_Curve *theCurve) switch (myType) { case CurveCreator_Operation::AddPoints: + case CurveCreator_Operation::InsertPoints: + case CurveCreator_Operation::SetCoordinates: { + int aSectionId, aPointId; + CurveCreator::SectionsMap aSectionsMap; + CurveCreator::PosPointsList aPoints; CurveCreator::Coordinates aCoords; - getCoords(&pInt[1], aCoords); - theCurve->addPoints(aCoords, pInt[0]); + int nbPoints = pInt[0]; + int nbCoords = pInt[1]; + int nbParams = 3+nbCoords; + for (int i = 0; i < nbPoints*nbParams; i=i+nbParams) { + aCoords.clear(); + aPoints.clear(); + getCoords(&pInt[4+i], aCoords); + aSectionId = pInt[2+i]; + aPointId = pInt[3+i]; + if ( aSectionsMap.find( aSectionId ) != aSectionsMap.end() ) + aPoints = aSectionsMap[aSectionId]; + CurveCreator_PosPoint* aPosPoint = new CurveCreator_PosPoint( aPointId, aCoords ); + aPoints.push_back( aPosPoint ); + aPoints.sort(compId); + aSectionsMap[aSectionId] = aPoints; + } + switch (myType) { + case CurveCreator_Operation::AddPoints: + case CurveCreator_Operation::InsertPoints: + theCurve->addPointsInternal( aSectionsMap ); + break; + case CurveCreator_Operation::SetCoordinates: + theCurve->setPointInternal( aSectionsMap ); + break; + } } break; case CurveCreator_Operation::RemovePoints: - theCurve->removePoints(pInt[0], pInt[1], pInt[2]); - break; - case CurveCreator_Operation::InsertPoints: { - CurveCreator::Coordinates aCoords; - - getCoords(&pInt[2], aCoords); - theCurve->insertPoints(aCoords, pInt[0], pInt[1]); + CurveCreator_ICurve::SectionToPointList aListOfSectionsToPoints; + int nbPoints = pInt[0]; + for (int i = 1; i < nbPoints*2; i=i+2) { + aListOfSectionsToPoints.push_back(std::make_pair(pInt[i], pInt[i+1])); + } + theCurve->removePointsInternal(aListOfSectionsToPoints); } break; case CurveCreator_Operation::SetType: { - const CurveCreator::Type aType = (CurveCreator::Type) pInt[0]; + const CurveCreator::SectionType aType = (CurveCreator::SectionType) pInt[0]; - theCurve->setType(aType, pInt[1]); + theCurve->setSectionTypeInternal( pInt[1], aType ); } break; case CurveCreator_Operation::Clear: - theCurve->clear(); - break; - case CurveCreator_Operation::SetCoordinates: - { - CurveCreator::Coordinates aCoords; - - getCoords(&pInt[2], aCoords); - theCurve->setCoordinates(aCoords, pInt[0], pInt[1]); - } + theCurve->clearInternal(); break; case CurveCreator_Operation::SetClosed: - theCurve->setClosed((pInt[0] != 0), pInt[1]); + theCurve->setClosedInternal(pInt[1], (pInt[0] != 0)); break; case CurveCreator_Operation::MoveSection: - theCurve->moveSection(pInt[0], pInt[1]); + theCurve->moveSectionInternal(pInt[0], pInt[1]); break; case CurveCreator_Operation::Join: - if (myPData == NULL) { - theCurve->join(); - } else { - theCurve->join(pInt[0], pInt[1]); + if (myPData != NULL) + { + std::list aListOfSections; + int nbSections = pInt[0]; + for (int i = 1; i < nbSections+1; i++) { + aListOfSections.push_back(pInt[i]); + } + theCurve->joinInternal(aListOfSections); } break; case CurveCreator_Operation::AddSection: { - const CurveCreator::Type aType = (CurveCreator::Type) pInt[0]; + const CurveCreator::SectionType aType = (CurveCreator::SectionType) pInt[0]; std::string aName = std::string((char*)&pInt[2]); @@ -340,16 +414,16 @@ void CurveCreator_Operation::apply(CurveCreator_Curve *theCurve) char* aPtr = ((char*)&pInt[2]); aPtr += (aName.length()) + 1; getCoords((int*)aPtr, aCoords); - theCurve->addSection(aName, aType, (pInt[1] != 0), aCoords); + theCurve->addSectionInternal(aName, aType, (pInt[1] != 0), aCoords); } break; case CurveCreator_Operation::RemoveSection: - theCurve->removeSection(pInt[0]); + theCurve->removeSectionInternal(pInt[0]); break; case CurveCreator_Operation::RenameSection: { std::string aName = std::string((char*)&pInt[1]); - theCurve->setName(aName, pInt[0]); + theCurve->setSectionNameInternal(pInt[0], aName); } break; default: diff --git a/src/CurveCreator/CurveCreator_Operation.hxx b/src/CurveCreator/CurveCreator_Operation.hxx index a74ac19ca..855d0da2a 100644 --- a/src/CurveCreator/CurveCreator_Operation.hxx +++ b/src/CurveCreator/CurveCreator_Operation.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -24,8 +24,11 @@ #define _CurveCreator_Operation_HeaderFile #include "CurveCreator.hxx" +#include "CurveCreator_ICurve.hxx" +#include "CurveCreator_PosPoint.hxx" #include +#include class CurveCreator_Curve; @@ -74,7 +77,6 @@ public: * It is applicable to the following operations: *
      *
    • Clear
    • - *
    • Join (without arguments)
    • *
    * @return true in case of success; false otherwise. */ @@ -105,15 +107,26 @@ public: const int theIntParam2); /** - * This method initializes the object with an operation with three integer + * This method initializes the object with an operation with two integer * parameters. It is applicable to the following operations: *
      + *
    • Join (with a list of int arguments)
    • + *
    + * @return true in case of success; false otherwise. + */ + bool init(const Type theType, const std::list theParamList); + + /** + * This method initializes the object with an operation with + * list of pairs of integer parameters. + * It is applicable to the following operations: + *
      *
    • RemovePoints
    • *
    * @return true in case of success; false otherwise. */ - bool init(const Type theType, const int theIntParam1, - const int theIntParam2, const int theIntParam3); + bool init(const Type theType, + const CurveCreator_ICurve::SectionToPointList &theParamList1); /** * This method initializes the object with an operation with one @@ -128,18 +141,16 @@ public: const int theIntParam); /** - * This method initializes the object with an operation with one - * CurveCreator::Coordinates parameter and two integer parameters. + * This method initializes the object with an operation with + * list of pairs of integer parameters and CurveCreator::Coordinates parameters. * It is applicable to the following operations: *
      - *
    • AddSection
    • *
    • InsertPoints
    • - *
    • SetCoordinates
    • *
    * @return true in case of success; false otherwise. */ - bool init(const Type theType, const CurveCreator::Coordinates &theCoords, - const int theIntParam1, const int theIntParam2); + bool init(const Type theType, + const CurveCreator_ICurve::SectionToPointCoordsList &theParamList1); /** * This method initializes the object with an operation with one diff --git a/src/CurveCreator/CurveCreator_PosPoint.hxx b/src/CurveCreator/CurveCreator_PosPoint.hxx new file mode 100644 index 000000000..230137423 --- /dev/null +++ b/src/CurveCreator/CurveCreator_PosPoint.hxx @@ -0,0 +1,46 @@ +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File: CurveCreator_PosPoint.hxx +// Author: Alexander KOVALEV + +#ifndef _CurveCreator_PosPoint_HeaderFile +#define _CurveCreator_PosPoint_HeaderFile + +#include "CurveCreator.hxx" + +struct CurveCreator_PosPoint +{ +public: + CurveCreator_PosPoint( int theID, CurveCreator::Coordinates theCoords ) + : myID( theID ), myCoords( theCoords ) + { }; + + ////! Overloaded operator to use sorting. + //bool operator < (CurveCreator_PosPoint const & thePosPoint) const + //{ + // return myID < thePosPoint.myID; + //} + + int myID; // point ID + CurveCreator::Coordinates myCoords; // point coordinates + +}; + +#endif diff --git a/src/CurveCreator/CurveCreator_Section.hxx b/src/CurveCreator/CurveCreator_Section.hxx index 0eafa0629..68b03aaa7 100644 --- a/src/CurveCreator/CurveCreator_Section.hxx +++ b/src/CurveCreator/CurveCreator_Section.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -36,7 +36,7 @@ struct CurveCreator_Section std::string myName; //!< section name CurveCreator::Coordinates myPoints; //!< points coordinates - CurveCreator::Type myType; //!< type of the section + CurveCreator::SectionType myType; //!< type of the section bool myIsClosed; //!< closed or not }; diff --git a/src/CurveCreator/CurveCreator_TableView.cxx b/src/CurveCreator/CurveCreator_TableView.cxx new file mode 100644 index 000000000..b40760511 --- /dev/null +++ b/src/CurveCreator/CurveCreator_TableView.cxx @@ -0,0 +1,178 @@ +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "CurveCreator_TableView.h" +#include "CurveCreator_UtilsICurve.hxx" + +#include + +#include +#include + +#include + +const double DBL_MINIMUM = -10000000.; +const double DBL_MAXIMUM = 10000000.; + +const int SECTION_NAME_COLUMN_WIDTH = 75; +const int POINT_INDEX_COLUMN_WIDTH = 40; + +const double LOCAL_SELECTION_TOLERANCE = 0.0001; + +CurveCreator_TableItemDelegate::CurveCreator_TableItemDelegate( QObject* theParent ) +: QItemDelegate( theParent ) +{ +} + +/** + * Creates an editor for the cell + */ +QWidget* CurveCreator_TableItemDelegate::createEditor( QWidget* theParent, + const QStyleOptionViewItem& theOption, + const QModelIndex& theIndex ) const +{ + QWidget* anEditor = 0; + + int aColumnId = theIndex.column(); + if ( aColumnId == 2 || aColumnId == 3 ) { + QDoubleSpinBox* aSpin = new QtxDoubleSpinBox( theParent ); + aSpin->setDecimals( 2 ); + aSpin->setRange( DBL_MINIMUM, DBL_MAXIMUM ); + anEditor = aSpin; + } + else + anEditor = QItemDelegate::createEditor( theParent, theOption, theIndex ); + + return anEditor; +} + +void CurveCreator_TableItemDelegate::setEditorData( QWidget* theEditor, + const QModelIndex& theIndex ) const +{ + int aColumnId = theIndex.column(); + if ( aColumnId == 2 || aColumnId == 3 ) { + QDoubleSpinBox* aDblSpin = dynamic_cast( theEditor ); + if ( aDblSpin ) { + double aValue = theIndex.model()->data( theIndex, Qt::EditRole ).toDouble(); + aDblSpin->setValue( aValue ); + } + } + else + QItemDelegate::setEditorData( theEditor, theIndex ); +} + +void CurveCreator_TableItemDelegate::setModelData( QWidget* theEditor, + QAbstractItemModel* theModel, + const QModelIndex& theIndex ) const +{ + int aColumnId = theIndex.column(); + if ( aColumnId == 2 || aColumnId == 3 ) { + QDoubleSpinBox* aDblSpin = dynamic_cast( theEditor ); + if ( aDblSpin ) { + double aValue = aDblSpin->value(); + theModel->setData( theIndex, aValue, Qt::UserRole); + } + } + else + QItemDelegate::setModelData( theEditor, theModel, theIndex ); +} + +CurveCreator_TableView::CurveCreator_TableView( CurveCreator_ICurve* theCurve, + QWidget* theParent, + const QStringList& theCoordTitles ) +: QTableWidget( theParent ), myCurve( theCurve ) +{ + setItemDelegate( new CurveCreator_TableItemDelegate( this ) ); + setVisible( false ); + setColumnCount( 4 ); + setColumnWidth( 0, SECTION_NAME_COLUMN_WIDTH ); + setColumnWidth( 1, POINT_INDEX_COLUMN_WIDTH ); + QStringList aLabels; + QString aCoord1 = theCoordTitles.size() > 0 ? theCoordTitles[0] : tr( "TABLE_X" ); // tr( "X_POSITION_LBL" ) + QString aCoord2 = theCoordTitles.size() > 1 ? theCoordTitles[1] : tr( "TABLE_Y" ); // tr( "Y_POSITION_LBL" ) + //aLabels << tr( "SECTION_LABEL" ) << tr( "IDENTIFIER_LABEL" ) << aCoord1 << aCoord2; + aLabels << tr( "TABLE_SECTION" ) << tr("TABLE_INDEX") << aCoord1 << aCoord2; + setHorizontalHeaderLabels( aLabels ); +} + +void CurveCreator_TableView::setCurve( CurveCreator_ICurve* theCurve ) +{ + myCurve = theCurve; +} + +void CurveCreator_TableView::setLocalPointsToTable( + const CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + setRowCount( thePoints.size() ); + + int aRowId = 0; + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = thePoints.begin(), + aLast = thePoints.end(); + for ( ; anIt != aLast; anIt++ ) { + CurveCreator_ICurve::SectionToPoint aSPoint = *anIt; + int anISection = aSPoint.first; + int anIPoint = aSPoint.second; + + QTableWidgetItem* anItem; + anItem = new QTableWidgetItem( myCurve->getSectionName( anISection ).c_str() ); + anItem->setFlags( anItem->flags() & ~Qt::ItemIsEnabled ); + anItem->setData( Qt::UserRole, anISection ); + setItem( aRowId, 0, anItem ); + + anItem = new QTableWidgetItem( QString::number( anIPoint + 1 ) ); + anItem->setFlags( anItem->flags() & ~Qt::ItemIsEnabled ); + anItem->setData( Qt::UserRole, anIPoint ); + setItem( aRowId, 1, anItem ); + + gp_Pnt aPoint; + CurveCreator_UtilsICurve::getPoint( myCurve, anISection, anIPoint, aPoint ); + + anItem = item( aRowId, 2 ); + if ( !anItem ) { + anItem = new QTableWidgetItem(); + setItem( aRowId, 2, anItem ); + } + anItem->setData( Qt::UserRole, aPoint.X() ); + anItem->setData( Qt::DisplayRole, QString::number( aPoint.X(), 'f', 2 ) ); + + anItem = item( aRowId, 3 ); + if ( !anItem ) { + anItem = new QTableWidgetItem(); + setItem( aRowId, 3, anItem ); + } + anItem->setData( Qt::UserRole, aPoint.Y() ); + anItem->setData( Qt::DisplayRole, QString::number( aPoint.Y(), 'f', 2 ) ); + + aRowId++; + } +} + +int CurveCreator_TableView::getSectionId( const int theRowId ) const +{ + return item( theRowId, 0 )->data( Qt::UserRole ).toInt(); +} + +/** + * Returns a point index from the table + * \param theRowId a table row + */ +int CurveCreator_TableView::getPointId( const int theRowId ) const +{ + return item( theRowId, 1 )->data( Qt::UserRole ).toInt(); +} diff --git a/src/CurveCreator/CurveCreator_TableView.h b/src/CurveCreator/CurveCreator_TableView.h new file mode 100644 index 000000000..4565ab5d7 --- /dev/null +++ b/src/CurveCreator/CurveCreator_TableView.h @@ -0,0 +1,69 @@ +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef CURVECREATOR_TABLEVIEW_H +#define CURVECREATOR_TABLEVIEW_H + +#include "CurveCreator_ICurve.hxx" + +#include +#include + +class CurveCreator_TableItemDelegate : public QItemDelegate +{ +public: + CurveCreator_TableItemDelegate( QObject* theParent ); + ~CurveCreator_TableItemDelegate() {} + + virtual QWidget* createEditor( QWidget* theParent, + const QStyleOptionViewItem& theOption, + const QModelIndex& theIndex ) const; + virtual void setEditorData( QWidget* theEditor, const QModelIndex& theIndex ) const; + virtual void setModelData( QWidget* theEditor, QAbstractItemModel* theModel, + const QModelIndex& theIndex ) const; +}; + +class CurveCreator_TableView : public QTableWidget +{ +public: + CurveCreator_TableView( CurveCreator_ICurve* theCurve, QWidget* theParent = 0, + const QStringList& theCoordTitles = QStringList() ); + ~CurveCreator_TableView() {}; + + void setCurve( CurveCreator_ICurve* theCurve ); + + void setLocalPointsToTable( const CurveCreator_ICurve::SectionToPointList& thePoints ); + + /** + * Returns a section index from the table + * \param theRowId a table row + */ + int getSectionId( const int theRowId ) const; + /** + * Returns a point index from the table + * \param theRowId a table row + */ + int getPointId( const int theRowId ) const; + +private: + CurveCreator_ICurve* myCurve; + +}; + +#endif // CURVECREATOR_TABLEVIEW_H diff --git a/src/CurveCreator/CurveCreator_TreeView.cxx b/src/CurveCreator/CurveCreator_TreeView.cxx old mode 100755 new mode 100644 index 1b7fa9587..36d1dfcfb --- a/src/CurveCreator/CurveCreator_TreeView.cxx +++ b/src/CurveCreator/CurveCreator_TreeView.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -18,7 +18,7 @@ // #include "CurveCreator_TreeView.h" -#include "CurveCreator_Curve.hxx" +#include "CurveCreator_ICurve.hxx" #include #include @@ -28,7 +28,7 @@ #define ID_SECTION -1 -CurveCreator_TreeViewModel::CurveCreator_TreeViewModel( CurveCreator_Curve* theCurve, QObject* parent ) : +CurveCreator_TreeViewModel::CurveCreator_TreeViewModel( CurveCreator_ICurve* theCurve, QObject* parent ) : QAbstractItemModel(parent), myCurve(theCurve) { SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); @@ -86,7 +86,7 @@ QVariant CurveCreator_TreeViewModel::data(const QModelIndex & index, int role ) } else if( role == Qt::DecorationRole ){ if( aColumn == 0 ){ - CurveCreator::Type aSectionType = myCurve->getType(aRow); + CurveCreator::SectionType aSectionType = myCurve->getSectionType(aRow); if( aSectionType == CurveCreator::Polyline ){ if( myCurve->isClosed(aRow) ){ return myCachedIcons[ICON_CLOSED_POLYLINE]; @@ -161,12 +161,12 @@ int CurveCreator_TreeViewModel::rowCount(const QModelIndex & parent ) const int aRowCnt = 0; if( myCurve != NULL ){ if( !parent.isValid() ){ - //Points level + //Section level aRowCnt = myCurve->getNbSections(); } else{ - //Section level if( parent.internalId() == ID_SECTION ){ + //Points level aRowCnt = myCurve->getNbPoints(parent.row()); } } @@ -210,14 +210,14 @@ int CurveCreator_TreeViewModel::getPoint( const QModelIndex& theIndx ) const return theIndx.row(); } -void CurveCreator_TreeViewModel::setCurve( CurveCreator_Curve* theCurve ) +void CurveCreator_TreeViewModel::setCurve( CurveCreator_ICurve* theCurve ) { myCurve = theCurve; reset(); } /*****************************************************************************************/ -CurveCreator_TreeView::CurveCreator_TreeView( CurveCreator_Curve* theCurve, QWidget *parent) : +CurveCreator_TreeView::CurveCreator_TreeView( CurveCreator_ICurve* theCurve, QWidget *parent) : QTreeView(parent) { header()->hide(); @@ -249,7 +249,6 @@ QList CurveCreator_TreeView::getSelectedSections() const aSect << aModel->getSection( anIndxs[i] ); } } - qSort(aSect.begin(), aSect.end()); return aSect; } @@ -290,7 +289,11 @@ void CurveCreator_TreeView::sectionAdded( int theSection ) { CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); if( aModel ){ - rowsInserted(QModelIndex(), theSection, theSection ); + int nbRows = aModel->rowCount(); + int aSection = (theSection == -1 ? (nbRows==0 ? 0 : nbRows-1) : theSection); + rowsInserted(QModelIndex(), aSection, aSection ); + QModelIndex aSectIndx = aModel->sectionIndex(aSection); + selectionModel()->select(aSectIndx, QItemSelectionModel::Rows | QItemSelectionModel::ClearAndSelect); } } @@ -361,16 +364,6 @@ void CurveCreator_TreeView::sectionsSwapped( int theSection, int theOffset ) } } -void CurveCreator_TreeView::pointsSwapped( int theSection, int thePointNum, int theOffset ) -{ - CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); - if( aModel ){ - QModelIndex aFirstIndex = aModel->pointIndex( theSection, thePointNum ); - QModelIndex aSecondIndex = aModel->pointIndex( theSection, thePointNum + theOffset ); - swapIndexes( aFirstIndex, aSecondIndex ); - } -} - void CurveCreator_TreeView::setSelectedSections( const QList& theList ) { CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); @@ -378,19 +371,7 @@ void CurveCreator_TreeView::setSelectedSections( const QList& theList ) selectionModel()->clearSelection(); for( int i = 0 ; i < theList.size() ; i++ ){ QModelIndex aSectIndx = aModel->sectionIndex(theList[i]); - selectionModel()->select(aSectIndx, QItemSelectionModel::Select ); - } - } -} - -void CurveCreator_TreeView::setSelectedPoints( const QList< QPair >& thePointsList ) -{ - CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); - if( aModel ){ - selectionModel()->clearSelection(); - for( int i = 0 ; i < thePointsList.size() ; i++ ){ - QModelIndex aSectIndx = aModel->pointIndex( thePointsList[i].first, thePointsList[i].second ); - selectionModel()->select(aSectIndx, QItemSelectionModel::Select ); + selectionModel()->select(aSectIndx, QItemSelectionModel::Select | QItemSelectionModel::Rows ); } } } @@ -404,25 +385,6 @@ bool pointLessThan(const QPair &s1, const QPair &s2) return s1.second < s2.second; } -QList< QPair< int, int > > CurveCreator_TreeView::getSelectedPoints() const -{ - QList< QPair< int, int > > aPoints; - CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); - if( !aModel ) - return aPoints; - QModelIndexList anIndxs = selectionModel()->selectedIndexes(); - for( int i = 0 ; i < anIndxs.size() ; i++ ){ - if( !aModel->isSection( anIndxs[i] ) ){ - int aSect = aModel->getSection(anIndxs[i]); - int aPointNum = aModel->getPoint(anIndxs[i]); - QPair< int, int > aPoint = QPair( aSect, aPointNum ); - aPoints.push_back( aPoint ); - } - } - qSort( aPoints.begin(), aPoints.end(), pointLessThan ); - return aPoints; -} - CurveCreator_TreeView::SelectionType CurveCreator_TreeView::getSelectionType() const { CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); @@ -470,16 +432,20 @@ void CurveCreator_TreeView::onActivated( QModelIndex theIndx ) int aSect = aModel->getSection(theIndx); if( aModel->isSection(theIndx) ){ emit sectionEntered( aSect ); - return; } - int aPointNum = aModel->getPoint( theIndx ); - emit pointEntered( aSect, aPointNum ); } -void CurveCreator_TreeView::setCurve( CurveCreator_Curve* theCurve ) +void CurveCreator_TreeView::setCurve( CurveCreator_ICurve* theCurve ) { CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); if( aModel ) aModel->setCurve(theCurve); reset(); } + +void CurveCreator_TreeView::reset() +{ + QList aSelSections = getSelectedSections(); + QTreeView::reset(); + setSelectedSections(aSelSections); +} diff --git a/src/CurveCreator/CurveCreator_TreeView.h b/src/CurveCreator/CurveCreator_TreeView.h old mode 100755 new mode 100644 index 09929bf35..be00a75d3 --- a/src/CurveCreator/CurveCreator_TreeView.h +++ b/src/CurveCreator/CurveCreator_TreeView.h @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -23,12 +23,12 @@ #include #include -class CurveCreator_Curve; +class CurveCreator_ICurve; class CurveCreator_TreeViewModel : public QAbstractItemModel { public: - CurveCreator_TreeViewModel( CurveCreator_Curve* theCurve, QObject* parent ); + CurveCreator_TreeViewModel( CurveCreator_ICurve* theCurve, QObject* parent ); virtual int columnCount(const QModelIndex & parent = QModelIndex()) const; virtual int rowCount(const QModelIndex & parent = QModelIndex()) const; virtual QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; @@ -44,12 +44,12 @@ public: int getSection( const QModelIndex& theIndx ) const; int getPoint( const QModelIndex& theIndx ) const; - void setCurve( CurveCreator_Curve* theCurve ); + void setCurve( CurveCreator_ICurve* theCurve ); private: enum IconType{ ICON_POLYLINE, ICON_SPLINE, ICON_CLOSED_SPLINE, ICON_CLOSED_POLYLINE, ICON_POINT }; private: - CurveCreator_Curve* myCurve; + CurveCreator_ICurve* myCurve; QMap myCachedIcons; }; @@ -59,15 +59,13 @@ class CurveCreator_TreeView : public QTreeView public: enum SelectionType{ ST_NOSEL, ST_POINTS, ST_POINTS_ONE_SECTION, ST_SECTIONS, ST_MIXED }; public: - explicit CurveCreator_TreeView( CurveCreator_Curve* theCurve, QWidget *parent = 0); + explicit CurveCreator_TreeView( CurveCreator_ICurve* theCurve, QWidget *parent = 0); SelectionType getSelectionType() const; QList getSelectedSections() const; - QList< QPair< int, int > > getSelectedPoints() const; void pointsAdded( int theSection, int thePoint, int thePointsCnt=1 ); void pointDataChanged( int theSection, int thePoint ); void pointsRemoved(int theSection, int thePoint, int thePointsCnt=1 ); - void pointsSwapped( int theSection, int thePointNum, int theOffset ); void sectionAdded( int theSection ); void sectionChanged(int theSection , int aSectCnt = 1); @@ -75,15 +73,15 @@ public: void sectionsSwapped( int theSection, int theOffset ); void setSelectedSections( const QList& theList ); - void setSelectedPoints( const QList< QPair >& thePointsList ); - void setCurve( CurveCreator_Curve* theCurve ); + void setCurve( CurveCreator_ICurve* theCurve ); + + void reset(); signals: void selectionChanged(); void sectionEntered(int); - void pointEntered(int,int); -public slots: + protected slots: void onActivated( QModelIndex theIndx ); protected: diff --git a/src/CurveCreator/CurveCreator_UndoOptsDlg.cxx b/src/CurveCreator/CurveCreator_UndoOptsDlg.cxx deleted file mode 100644 index ec8fd5898..000000000 --- a/src/CurveCreator/CurveCreator_UndoOptsDlg.cxx +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_UndoOptsDlg.cxx -// Author: Sergey KHROMOV - -#include "CurveCreator_UndoOptsDlg.h" - -#include -#include -#include -#include -#include -#include -#include - -#define UNDO_DEPTH_UNLIMITED 0 -#define UNDO_DEPTH_DISABLED 1 -#define UNDO_DEPTH_FIX_SIZE 2 - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_UndoOptsDlg::CurveCreator_UndoOptsDlg(QWidget* parent) - : QDialog (parent), - myUndoDepth (UNDO_DEPTH_UNLIMITED), - myOptsBtnGrp (NULL), - myBufferSizeEdit (NULL), - myOkBtn (NULL), - myCancelBtn (NULL) -{ - setWindowTitle(tr("CC_UNDO_OPTIONS_TITLE")); - - // Set Undo/Redo options group - QGroupBox *anUndoOptsGrp = - new QGroupBox(tr("CC_UNDO_OPTIONS_MODIFY")); - QGridLayout *anUndoOptsLO = new QGridLayout(anUndoOptsGrp); - QRadioButton *aDisabledRdBtn = - new QRadioButton(tr("CC_UNDO_OPTIONS_DISABLED"), anUndoOptsGrp); - QRadioButton *aFixSizeRdBtn = - new QRadioButton(tr("CC_UNDO_OPTIONS_FIXED_SIZE"), anUndoOptsGrp); - QRadioButton *anUnlimRdBtn = - new QRadioButton(tr("CC_UNDO_OPTIONS_UNLIMITED"), anUndoOptsGrp); - - myOptsBtnGrp = new QButtonGroup(anUndoOptsGrp); - myBufferSizeEdit = new QLineEdit(anUndoOptsGrp); - anUndoOptsLO->setMargin(9); - anUndoOptsLO->setSpacing(6); - anUndoOptsLO->addWidget(aDisabledRdBtn, 0, 0); - anUndoOptsLO->addWidget(aFixSizeRdBtn, 1, 0); - anUndoOptsLO->addWidget(anUnlimRdBtn, 2, 0); - anUndoOptsLO->addWidget(myBufferSizeEdit, 1, 1); - myOptsBtnGrp->addButton(anUnlimRdBtn, UNDO_DEPTH_UNLIMITED); - myOptsBtnGrp->addButton(aDisabledRdBtn, UNDO_DEPTH_DISABLED); - myOptsBtnGrp->addButton(aFixSizeRdBtn, UNDO_DEPTH_FIX_SIZE); - - // Set OK/Cancel buttons group - QGroupBox *anOkCancelGrp = new QGroupBox; - QGridLayout *anOkCancelLO = new QGridLayout(anOkCancelGrp); - - myOkBtn = new QPushButton(tr("GEOM_BUT_OK"), anOkCancelGrp); - myCancelBtn = new QPushButton(tr("GEOM_BUT_CANCEL"), anOkCancelGrp); - anOkCancelLO->setMargin(9); - anOkCancelLO->setSpacing(6); - anOkCancelLO->addWidget(myOkBtn, 0, 0); - anOkCancelLO->addWidget(myCancelBtn, 0, 1); - - // Set main group - QGroupBox *aMainGrp = new QGroupBox; - QVBoxLayout *aMainLO = new QVBoxLayout(aMainGrp); - - aMainLO->addWidget(anUndoOptsGrp); - aMainLO->addWidget(anOkCancelGrp); - - setLayout(aMainLO); - - init(); -} - -//======================================================================= -// function: Destructor -// purpose: -//======================================================================= -CurveCreator_UndoOptsDlg::~CurveCreator_UndoOptsDlg() -{ -} - -//======================================================================= -// function: setUndoDepth -// purpose: -//======================================================================= -void CurveCreator_UndoOptsDlg::setUndoDepth(const int theDepth) -{ - myUndoDepth = theDepth; - - const int aDepthId = myUndoDepth + 1; - int anId = UNDO_DEPTH_FIX_SIZE; - - if (aDepthId == UNDO_DEPTH_UNLIMITED || - aDepthId == UNDO_DEPTH_DISABLED) { - anId = aDepthId; - } else if (myUndoDepth > 0) { - myBufferSizeEdit->setText(QString::number(myUndoDepth)); - } - - myOptsBtnGrp->button(anId)->setChecked(true); - optionChanged(anId); -} - -//======================================================================= -// function: getUndoDepth -// purpose: -//======================================================================= -int CurveCreator_UndoOptsDlg::getUndoDepth() const -{ - return myUndoDepth; -} - -//======================================================================= -// function: isEnabled -// purpose: -//======================================================================= -bool CurveCreator_UndoOptsDlg::isEnabled() const -{ - return (myUndoDepth + 1 != UNDO_DEPTH_DISABLED); -} - -//======================================================================= -// function: isUnlimited -// purpose: -//======================================================================= -bool CurveCreator_UndoOptsDlg::isUnlimited() const -{ - return (myUndoDepth + 1 == UNDO_DEPTH_UNLIMITED); -} - -//======================================================================= -// function: init -// purpose: -//======================================================================= -void CurveCreator_UndoOptsDlg::init() -{ - // Initialize sections group. - myOptsBtnGrp->setExclusive(true); - myOptsBtnGrp->button(UNDO_DEPTH_UNLIMITED)->setChecked(true); - connect(myOptsBtnGrp, SIGNAL(buttonClicked(int)), - this, SLOT(optionChanged(int))); - - // Initialize line edit. - QIntValidator *aValidator = new QIntValidator(myBufferSizeEdit); - - aValidator->setBottom(1); - myBufferSizeEdit->setValidator(aValidator); - optionChanged(UNDO_DEPTH_UNLIMITED); - - // Init buttons. - myOkBtn->setDefault(true); - - connect(myOkBtn, SIGNAL(clicked()), this, SLOT(accept())); - connect(myCancelBtn, SIGNAL(clicked()), this, SLOT(reject())); - - setTabOrder(); -} - -//======================================================================= -// function: setTabOrder -// purpose: -//======================================================================= -void CurveCreator_UndoOptsDlg::setTabOrder() -{ - QWidget::setTabOrder(myOptsBtnGrp->button(UNDO_DEPTH_DISABLED), - myOptsBtnGrp->button(UNDO_DEPTH_FIX_SIZE)); - QWidget::setTabOrder(myOptsBtnGrp->button(UNDO_DEPTH_FIX_SIZE), - myBufferSizeEdit); - QWidget::setTabOrder(myBufferSizeEdit, - myOptsBtnGrp->button(UNDO_DEPTH_UNLIMITED)); - QWidget::setTabOrder(myOptsBtnGrp->button(UNDO_DEPTH_UNLIMITED), myOkBtn); - QWidget::setTabOrder(myOkBtn, myCancelBtn); -} - -//======================================================================= -// function: optionChanged -// purpose: -//======================================================================= -void CurveCreator_UndoOptsDlg::optionChanged(int theId) -{ - switch (theId) { - case UNDO_DEPTH_FIX_SIZE: - myBufferSizeEdit->setEnabled(true); - break; - case UNDO_DEPTH_UNLIMITED: - case UNDO_DEPTH_DISABLED: - default: - myBufferSizeEdit->setEnabled(false); - break; - } -} - -//======================================================================= -// function: accept -// purpose: -//======================================================================= -void CurveCreator_UndoOptsDlg::accept() -{ - const int anId = myOptsBtnGrp->checkedId(); - - switch (anId) { - case UNDO_DEPTH_FIX_SIZE: - myUndoDepth = myBufferSizeEdit->text().toInt(); - break; - case UNDO_DEPTH_UNLIMITED: - case UNDO_DEPTH_DISABLED: - myUndoDepth = anId - 1; - break; - default: - break; - } - - QDialog::accept(); -} diff --git a/src/CurveCreator/CurveCreator_UndoOptsDlg.h b/src/CurveCreator/CurveCreator_UndoOptsDlg.h deleted file mode 100644 index 86aa87aa3..000000000 --- a/src/CurveCreator/CurveCreator_UndoOptsDlg.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_UndoOptsDlg.h -// Author: Sergey KHROMOV - -#ifndef _CurveCreator_UndoOptsDlg_HeaderFile -#define _CurveCreator_UndoOptsDlg_HeaderFile - -#include - -class QButtonGroup; -class QLineEdit; -class QPushButton; - - -class CurveCreator_UndoOptsDlg : public QDialog -{ - Q_OBJECT - -public: - - CurveCreator_UndoOptsDlg(QWidget* parent); - - ~CurveCreator_UndoOptsDlg(); - - void setUndoDepth(const int theDepth); - - int getUndoDepth() const; - - bool isEnabled() const; - - bool isUnlimited() const; - -private: - - void init(); - - void setTabOrder(); - -private slots: - - void optionChanged(int theId); - - void accept(); - -protected: - - int myUndoDepth; - QButtonGroup *myOptsBtnGrp; - QLineEdit *myBufferSizeEdit; - QPushButton *myOkBtn; - QPushButton *myCancelBtn; - -}; - -#endif diff --git a/src/CurveCreator/CurveCreator_Utils.cxx b/src/CurveCreator/CurveCreator_Utils.cxx new file mode 100644 index 000000000..146676c95 --- /dev/null +++ b/src/CurveCreator/CurveCreator_Utils.cxx @@ -0,0 +1,994 @@ +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "CurveCreator_Utils.hxx" +#include "CurveCreator.hxx" +#include "CurveCreator_Curve.hxx" +#include "CurveCreator_UtilsICurve.hxx" + +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "CurveCreator_ICurve.hxx" + +const double LOCAL_SELECTION_TOLERANCE = 0.0001; +const int SCENE_PIXEL_PROJECTION_TOLERANCE = 10; +const int SCENE_PIXEL_POINT_TOLERANCE = 5; + +#define PLN_FREE 0 +#define PLN_ORIGIN 1 +#define PLN_OX 2 +#define PLN_FIXED 3 + +/** + * This static function returns the curve of original type from the edge. + * + * \param theEdge the edge + * \return the curve of original type. Can be null handle. + */ +static Handle(Geom_Curve) GetCurve(const TopoDS_Edge &theEdge) +{ + Handle(Geom_Curve) aResult; + + if (theEdge.IsNull()) { + return aResult; + } + + Standard_Real aF; + Standard_Real aL; + + aResult = BRep_Tool::Curve(theEdge, aF, aL); + + if (aResult.IsNull()) { + return aResult; + } + + // Get the curve of original type + Handle(Standard_Type) aType = aResult->DynamicType(); + + while (aType == STANDARD_TYPE(Geom_TrimmedCurve)) { + Handle(Geom_TrimmedCurve) aTrCurve = + Handle(Geom_TrimmedCurve)::DownCast(aResult); + + aResult = aTrCurve->BasisCurve(); + aType = aResult->DynamicType(); + } + + return aResult; +} + +//======================================================================= +// function : ConvertClickToPoint() +// purpose : Returns the point clicked in 3D view +//======================================================================= +void CurveCreator_Utils::ConvertPointToClick( const gp_Pnt& thePoint, + Handle(V3d_View) theView, + int& x, int& y ) +{ + theView->Convert(thePoint.X(), thePoint.Y(), thePoint.Z(), x, y ); +} + + +//======================================================================= +// function : ConvertClickToPoint() +// purpose : Returns the point clicked in 3D view +//======================================================================= +gp_Pnt CurveCreator_Utils::ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) +{ + // the 3D point, that is a projection of the pixels to the XYZ view plane + //return GEOMUtils::ConvertClickToPoint( x, y, aView ); + + // we need the projection to the XOY plane + // 1. find a point in the plane of the eye and the normal to the plane + Standard_Real X, Y, Z; + Quantity_Parameter Vx, Vy, Vz; + aView->ConvertWithProj( x, y, X, Y, Z, Vx, Vy, Vz ); + + // 2. build a ray from the point by the normal to the XOY plane and intersect it + // The ray equation is the following : p(x,y,z) = p0(x,y,z) + t*V(x,y,z) + // X,Y,Z - defines p0(x,y,z), Vx,Vy,Vz - defines V(x,y,z) + // p(x,y,z) - is a searched point, t - should to be calculated by the condition of XOY plane + // The system of equations is the following: + // p(x) = p0(x)+t*V(x) + // p(y) = p0(y)+t*V(y) + // p(z) = p0(z)+t*V(z) + // p(z) = 0 + + Standard_Real aXp, aYp, aZp; + //It is not possible to use Precision::Confusion(), because it is e-0.8, but V is sometimes e-6 + Standard_Real aPrec = LOCAL_SELECTION_TOLERANCE; + if ( fabs( Vz ) > aPrec ) { + Standard_Real aT = -Z/Vz; + aXp = X + aT*Vx; + aYp = Y + aT*Vy; + aZp = Z + aT*Vz; + } + else { // Vz = 0 - the eyed plane is orthogonal to Z plane - XOZ, or YOZ + aXp = aYp = aZp = 0; + if ( fabs( Vy ) < aPrec ) // Vy = 0 - the YOZ plane + aYp = Y; + else if ( fabs( Vx ) < aPrec ) // Vx = 0 - the XOZ plane + aXp = X; + } + /*std::cout << "ConvertClickToPoint: " << std::endl + << "XYZ1 = (" << X << ", " << Y << ", " << Z << "); " << std::endl + << "Vxyz = (" << Vx << ", " << Vy << ", " << Vz << "); " << std::endl + << "Resp = (" << aXp << ", " << aYp << ", " << aZp << "); " << std::endl;*/ + + gp_Pnt ResultPoint( aXp, aYp, aZp ); + return ResultPoint; +} + +void CurveCreator_Utils::constructShape( const CurveCreator_ICurve* theCurve, + TopoDS_Shape& theShape ) +{ + BRep_Builder aBuilder; + TopoDS_Compound aComp; + aBuilder.MakeCompound( aComp ); + for( int iSection = 0 ; iSection < theCurve->getNbSections() ; iSection++ ) + { + int theISection = iSection; + + CurveCreator::SectionType aSectType = theCurve->getSectionType( theISection ); + int aPointSize = theCurve->getNbPoints( theISection ); + if ( aPointSize == 0 ) + continue; + + bool aSectIsClosed = theCurve->isClosed( theISection ); + bool isPolyline = aSectType == CurveCreator::Polyline; + + int iPoint = 0; + gp_Pnt aPrevPoint, aPoint; + // filters the curve points to skip equal points + std::vector aPoints; + CurveCreator_UtilsICurve::getPoint( theCurve, theISection, iPoint, aPoint ); + aPoints.push_back( aPoint ); + aPrevPoint = aPoint; + iPoint++; + for( ; iPoint < aPointSize; iPoint++ ) { + CurveCreator_UtilsICurve::getPoint( theCurve, theISection, iPoint, aPoint ); + if ( !isEqualPoints( aPrevPoint, aPoint ) ) + aPoints.push_back( aPoint ); + aPrevPoint = aPoint; + } + int aNbPoints = aPoints.size(); + + if ( aNbPoints == 1 ) { + aPoint = aPoints.front(); + TopoDS_Vertex aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex(); + aBuilder.Add( aComp, aVertex ); + } + else if ( aNbPoints > 1 ) { + Handle(TColgp_HArray1OfPnt) aHCurvePoints = new TColgp_HArray1OfPnt(1, aNbPoints); + TColgp_Array1OfVec aTangents(1, aNbPoints); + Handle(TColStd_HArray1OfBoolean) aTangentFlags = new TColStd_HArray1OfBoolean(1, aNbPoints); + gp_Vec aNullVec(0, 0, 0); + + TopoDS_Edge aPointEdge; + TopoDS_Vertex aVertex; + + std::vector::const_iterator aPointIt = aPoints.begin(), aPointLast = aPoints.end(); + aPoint = *aPointIt; + + int aHIndex = 1; + aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex(); + aBuilder.Add( aComp, aVertex ); + if ( !isPolyline ) { + aHCurvePoints->SetValue( aHIndex, aPoint ); + aTangents.SetValue( aHIndex, aNullVec ); + aTangentFlags->SetValue( aHIndex, Standard_False ); + aHIndex++; + } + + aPrevPoint = aPoint; + aPointIt++; + for( ; aPointIt != aPointLast; aPointIt++ ) { + aPoint = *aPointIt; + aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex(); + aBuilder.Add( aComp, aVertex ); + if ( isPolyline ) { + TopoDS_Edge aPointEdge = BRepBuilderAPI_MakeEdge( aPrevPoint, aPoint ).Edge(); + aBuilder.Add( aComp, aPointEdge ); + } + else { + aHCurvePoints->SetValue( aHIndex, aPoint ); + aTangents.SetValue( aHIndex, aNullVec ); + aTangentFlags->SetValue( aHIndex, Standard_False ); + aHIndex++; + } + aPrevPoint = aPoint; + } + if( aSectIsClosed && ( aNbPoints > 2 ) ) { + aPoint = aPoints.front(); + aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex(); + aBuilder.Add( aComp, aVertex ); + if ( isPolyline ) { + aPointEdge = BRepBuilderAPI_MakeEdge( aPrevPoint, aPoint ).Edge(); + aBuilder.Add( aComp, aPointEdge ); + } + } + if( !isPolyline ) { + // compute BSpline + Handle(Geom_BSplineCurve) aBSplineCurve; + GeomAPI_Interpolate aGBC(aHCurvePoints, aSectIsClosed, gp::Resolution()); + // correct the spline degree to be as 3 for non-periodic spline if number of points + // less than 3. It is need to have a knot in each spline point. This knots are used + // to found a neighbour points when a new point is inserted between two existing. + if (!aSectIsClosed ) { + if (aHCurvePoints->Length() == 3) + aGBC.Load(aTangents, aTangentFlags); + } + + aGBC.Perform(); + if ( aGBC.IsDone() ) + aBSplineCurve = aGBC.Curve(); + TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge( aBSplineCurve ).Edge(); + TopoDS_Wire aWire = BRepBuilderAPI_MakeWire( anEdge ).Wire(); + aBuilder.Add( aComp, aWire ); + } + } + } + theShape = aComp; +} + +/** + * This is an intermediate structure for curve construction. + */ +struct Section3D +{ + Section3D() : myIsClosed(false), myIsBSpline(false) + { } + + bool myIsClosed; + bool myIsBSpline; + Handle(TColgp_HArray1OfPnt) myPoints; +}; + +//======================================================================= +// function : constructCurve +// purpose : +//======================================================================= +bool CurveCreator_Utils::constructCurve + (const TopoDS_Shape theShape, + CurveCreator_Curve *theCurve, + gp_Ax3 &theLocalCS) +{ + if (theShape.IsNull()) { + return false; + } + + // Collect wires or vertices from shape. + TopTools_ListOfShape aWOrV; + TopAbs_ShapeEnum aType = theShape.ShapeType(); + + if (aType == TopAbs_WIRE || aType == TopAbs_VERTEX) { + aWOrV.Append(theShape); + } else if (aType == TopAbs_COMPOUND) { + TopoDS_Iterator aShIter(theShape); + + for (; aShIter.More(); aShIter.Next()) { + const TopoDS_Shape &aSubShape = aShIter.Value(); + + aType = aSubShape.ShapeType(); + + if (aType == TopAbs_WIRE || aType == TopAbs_VERTEX) { + aWOrV.Append(aSubShape); + } else { + // Only subshapes of types wire or vertex are supported. + return false; + } + } + } else { + // Only wire (vertex) or compound of wires (vertices) are supported. + return false; + } + + // Treat each wire or vertex. Get points, compute the working plane. + gp_Pln aPlane; + Standard_Integer aPlaneStatus = PLN_FREE; + TopTools_ListIteratorOfListOfShape anIter(aWOrV); + std::list aListSec; + + for (; anIter.More(); anIter.Next()) { + Section3D aSec3D; + + aSec3D.myPoints = CurveCreator_Utils::getPoints + (anIter.Value(), aSec3D.myIsClosed, aSec3D.myIsBSpline); + + if (aSec3D.myPoints.IsNull()) { + return false; + } + + aListSec.push_back(aSec3D); + + if (aPlaneStatus != PLN_FIXED) { + // Compute plane + CurveCreator_Utils::FindPlane(aSec3D.myPoints, aPlane, aPlaneStatus); + } + } + + // Check if it is possible to change a computed coordinate system by + // XOY, XOZ or YOZ or parallel to them. + gp_Pnt aO(0., 0., 0.); + gp_Dir aNDir(0., 0., 1.); + gp_Dir aXDir(1., 0., 0.); + gp_Ax3 anAxis; + Standard_Real aTolAng = Precision::Confusion(); // Angular() is too small. + + switch (aPlaneStatus) { + case PLN_ORIGIN: + { + // Change the location. + aO.SetZ(aPlane.Location().Z()); + anAxis.SetLocation(aO); + aPlane.SetPosition(anAxis); + } + break; + case PLN_OX: + { + // Fixed origin + OX axis + const gp_Dir &aPlnX = aPlane.Position().XDirection(); + + if (Abs(aPlnX.Z()) <= aTolAng) { + // Make a coordinate system parallel to XOY. + aO.SetZ(aPlane.Location().Z()); + anAxis.SetLocation(aO); + aPlane.SetPosition(anAxis); + } else if (Abs(aPlnX.Y()) <= aTolAng) { + // Make a coordinate system parallel to XOZ. + aO.SetY(aPlane.Location().Y()); + aNDir.SetCoord(0., 1., 0.); + aXDir.SetCoord(0., 0., 1.); + anAxis = gp_Ax3(aO, aNDir, aXDir); + aPlane.SetPosition(anAxis); + } else if (Abs(aPlnX.X()) <= aTolAng) { + // Make a coordinate system parallel to YOZ. + aO.SetX(aPlane.Location().X()); + aNDir.SetCoord(1., 0., 0.); + aXDir.SetCoord(0., 1., 0.); + anAxis = gp_Ax3(aO, aNDir, aXDir); + aPlane.SetPosition(anAxis); + } + } + break; + case PLN_FIXED: + { + const gp_Dir &aPlnN = aPlane.Position().Direction(); + gp_Dir aYDir(0., 1., 0.); + + if (aPlnN.IsParallel(aNDir, aTolAng)) { + // Make a coordinate system parallel to XOY. + aO.SetZ(aPlane.Location().Z()); + anAxis.SetLocation(aO); + aPlane.SetPosition(anAxis); + } else if (aPlnN.IsParallel(aYDir, aTolAng)) { + // Make a coordinate system parallel to XOZ. + aO.SetY(aPlane.Location().Y()); + aNDir.SetCoord(0., 1., 0.); + aXDir.SetCoord(0., 0., 1.); + anAxis = gp_Ax3(aO, aNDir, aXDir); + aPlane.SetPosition(anAxis); + } else if (aPlnN.IsParallel(aXDir, aTolAng)) { + // Make a coordinate system parallel to YOZ. + aO.SetX(aPlane.Location().X()); + aNDir.SetCoord(1., 0., 0.); + aXDir.SetCoord(0., 1., 0.); + anAxis = gp_Ax3(aO, aNDir, aXDir); + aPlane.SetPosition(anAxis); + } + } + break; + case PLN_FREE: + default: + // Use XOY plane. + aPlane.SetPosition(anAxis); + break; + } + + // Compute 2d points. + std::list::const_iterator aSecIt = aListSec.begin(); + Standard_Real aTolConf2 = + Precision::Confusion()*Precision::Confusion(); + Standard_Real aX; + Standard_Real aY; + + for (; aSecIt != aListSec.end(); ++aSecIt) { + Standard_Integer i; + CurveCreator::Coordinates aCoords; + + for (i = aSecIt->myPoints->Lower(); i <= aSecIt->myPoints->Upper(); ++i) { + const gp_Pnt &aPnt = aSecIt->myPoints->Value(i); + + if (aPlane.SquareDistance(aPnt) > aTolConf2) { + // The point doesn't lie on the plane. + return false; + } + + ElSLib::Parameters(aPlane, aPnt, aX, aY); + aCoords.push_back(aX); + aCoords.push_back(aY); + } + + // Add a new section to the curve. + const std::string aSecName = + CurveCreator_UtilsICurve::getUniqSectionName(theCurve); + const CurveCreator::SectionType aSecType = aSecIt->myIsBSpline ? + CurveCreator::Spline : CurveCreator::Polyline; + + theCurve->addSectionInternal(aSecName, aSecType, + aSecIt->myIsClosed, aCoords); + } + + // Set the local coordinate system. + theLocalCS = aPlane.Position(); + + return true; +} + +class CompareSectionToPoint +{ +public: + CompareSectionToPoint( const int theISection = -1, const int theIPoint = -1 ) + : mySectionId( theISection ), myPointId( theIPoint ) {}; + ~CompareSectionToPoint() {} + + bool operator < ( const CompareSectionToPoint& theOther ) const + { + bool isLess = mySectionId < theOther.mySectionId; + if ( !isLess && mySectionId == theOther.mySectionId ) + isLess = myPointId < theOther.myPointId; + return isLess; + } + +private: + int mySectionId; + int myPointId; +}; + + +void CurveCreator_Utils::getSelectedPoints( Handle(AIS_InteractiveContext) theContext, + const CurveCreator_ICurve* theCurve, + CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + thePoints.clear(); + + std::list aSelectedPoints; + gp_Pnt aPnt; + std::map aPointsMap; + + CurveCreator_ICurve::SectionToPointList aPoints; + for ( theContext->InitSelected(); theContext->MoreSelected(); theContext->NextSelected() ) { + TopoDS_Vertex aVertex; + TopoDS_Shape aShape = theContext->SelectedShape(); + if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) + aVertex = TopoDS::Vertex( theContext->SelectedShape() ); + + if ( aVertex.IsNull() ) + continue; + aPnt = BRep_Tool::Pnt( aVertex ); + + CurveCreator_UtilsICurve::findSectionsToPoints( theCurve, aPnt.X(), aPnt.Y(), aPoints ); + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aPoints.begin(), + aLast = aPoints.end(); + CompareSectionToPoint aPoint; + for ( ; anIt != aLast; anIt++ ) { + aPoint = CompareSectionToPoint( (*anIt).first, (*anIt).second ); + if ( aPointsMap.find( aPoint ) != aPointsMap.end() ) + continue; + aPointsMap[aPoint] = 0; + + thePoints.push_back( *anIt ); + } + } +} + +void CurveCreator_Utils::setSelectedPoints( Handle(AIS_InteractiveContext) theContext, + const CurveCreator_ICurve* theCurve, + const CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + if ( !theCurve ) + return; + + Handle(AIS_InteractiveObject) anAIS = theCurve->getAISObject(); + if ( anAIS.IsNull() ) + return; + Handle(AIS_Shape) anAISShape = Handle(AIS_Shape)::DownCast( anAIS ); + if ( anAISShape.IsNull() ) + return; + + //ASL: we convert list of point indices to list of points coordinates + int aSize = thePoints.size(); + std::vector aPntsToSelect( aSize ); + + CurveCreator_ICurve::SectionToPointList::const_iterator + aPIt = thePoints.begin(), aPLast = thePoints.end(); + CurveCreator_ICurve::SectionToPoint aSToPoint; + for( int i=0; aPIt != aPLast; aPIt++, i++ ) + { + gp_Pnt aPntToSelect; + CurveCreator_UtilsICurve::getPoint( theCurve, aPIt->first, aPIt->second, aPntToSelect ); + aPntsToSelect[i] = aPntToSelect; + } + + theContext->ClearSelected( Standard_False ); + //ASL: we switch off automatic highlight to improve performance of selection + theContext->SetAutomaticHilight( Standard_False ); + + Handle_SelectMgr_Selection aSelection = anAISShape->Selection( AIS_Shape::SelectionMode( TopAbs_VERTEX ) ); + for( aSelection->Init(); aSelection->More(); aSelection->Next() ) + { + Handle_SelectBasics_SensitiveEntity aSenEntity = aSelection->Sensitive(); + Handle_Select3D_SensitivePoint aSenPnt = Handle_Select3D_SensitivePoint::DownCast( aSenEntity ); + + gp_Pnt anOwnerPnt = aSenPnt->Point(); + Handle_SelectMgr_EntityOwner anOwner = Handle_SelectMgr_EntityOwner::DownCast( aSenPnt->OwnerId() ); + + + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = thePoints.begin(), + aLast = thePoints.end(); + bool isFound = false; + for( int i=0; iAddOrRemoveSelected( anOwner, Standard_False ); + break; + } + } + } + + //ASL: we switch on again automatic highlight (otherwise selection will not be shown) + // and call HilightPicked to draw selected owners + theContext->SetAutomaticHilight( Standard_True ); + theContext->LocalContext()->HilightPicked( Standard_True ); +} + +//======================================================================= +// function : setLocalPointContext +// purpose : Open/close the viewer local context +//======================================================================= +void CurveCreator_Utils::setLocalPointContext( const CurveCreator_ICurve* theCurve, + Handle(AIS_InteractiveContext) theContext, + const bool theOpen ) +{ + if ( !theContext ) + return; + + if ( theOpen ) { + // Open local context if there is no one + if ( !theContext->HasOpenedContext() ) { + theContext->ClearCurrents( false ); + theContext->OpenLocalContext( false/*use displayed objects*/, true/*allow shape decomposition*/ ); + } + // load the curve AIS object to the local context with the point selection + Handle(AIS_InteractiveObject) anAIS = theCurve->getAISObject(); + if ( !anAIS.IsNull() ) + { + if ( anAIS->IsKind( STANDARD_TYPE( AIS_Shape ) ) ) + { + theContext->Load( anAIS, -1/*selection mode*/, true/*allow decomposition*/ ); + theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) ); + } + } + } + else { + if ( theContext->HasOpenedContext() ) + theContext->CloseAllContexts(); + } +} + +bool CurveCreator_Utils::pointOnObject( Handle(V3d_View) theView, + Handle(AIS_InteractiveObject) theObject, + const int theX, const int theY, + gp_Pnt& thePoint, + gp_Pnt& thePoint1, gp_Pnt& thePoint2 ) +{ + bool isFullFound = false; + + if ( theObject.IsNull() || theView.IsNull() ) + return isFullFound; + Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast( theObject ); + if ( aShape.IsNull() ) + return isFullFound; + const TopoDS_Compound& aCompound = TopoDS::Compound( aShape->Shape() ); + if ( aCompound.IsNull() ) + return isFullFound; + + gp_Pnt aCurPoint, aCurPoint1, aCurPoint2; + gp_Pnt aFoundPoint, aFoundPnt1, aFoundPnt2; + Standard_Real aParameter; + bool isFound = false; + int aDelta, aMinDelta = 2*SCENE_PIXEL_PROJECTION_TOLERANCE*SCENE_PIXEL_PROJECTION_TOLERANCE; + TopExp_Explorer anExp( aCompound, TopAbs_EDGE ); + for ( ; anExp.More(); anExp.Next()) + { + const TopoDS_Edge& anEdge = TopoDS::Edge(anExp.Current()); + if ( anEdge.IsNull() ) + continue; + Standard_Real aFirst, aLast; + Handle(Geom_Curve) aCurve = BRep_Tool::Curve( anEdge, aFirst, aLast ); + if ( aCurve->IsKind( STANDARD_TYPE(Geom_BSplineCurve) ) ) { + Handle(Geom_BSplineCurve) aBSplineCurve = + Handle(Geom_BSplineCurve)::DownCast( aCurve ); + if ( !aBSplineCurve.IsNull() ) { + isFound = hasProjectPointOnCurve( theView, theX, theY, aBSplineCurve, + aParameter, aDelta ); + if ( isFound ) { + aCurPoint = aBSplineCurve->Value( aParameter ); + Standard_Integer anI1, anI2; + aBSplineCurve->LocateU( aParameter, LOCAL_SELECTION_TOLERANCE, anI1, anI2 ); + aCurPoint1 = aBSplineCurve->Value( aBSplineCurve->Knot( anI1 ) ); + aCurPoint2 = aBSplineCurve->Value( aBSplineCurve->Knot( anI2 ) ); + } + } + } + else { // a curve built on a polyline edge + Handle(Geom_Line) aGLine = Handle(Geom_Line)::DownCast( aCurve ); + if ( aGLine.IsNull() ) + continue; + isFound = hasProjectPointOnCurve( theView, theX, theY, aGLine, aParameter, + aDelta ); + if ( isFound ) { + aCurPoint = aGLine->Value( aParameter ); + TopoDS_Vertex V1, V2; + TopExp::Vertices( anEdge, V1, V2, Standard_True ); + if ( V1.IsNull() || V2.IsNull() ) + continue; + aCurPoint1 = BRep_Tool::Pnt(V1); + aCurPoint2 = BRep_Tool::Pnt(V2); + + // check that the projected point is on the bounded curve + gp_Vec aVec1( aCurPoint1, aCurPoint ); + gp_Vec aVec2( aCurPoint2, aCurPoint ); + isFound = fabs( aVec1.Angle( aVec2 ) - M_PI ) < LOCAL_SELECTION_TOLERANCE; + } + } + if ( isFound && aMinDelta >= aDelta ) { + aMinDelta = aDelta; + + isFullFound = true; + aFoundPnt1 = aCurPoint1; + aFoundPnt2 = aCurPoint2; + aFoundPoint = aCurPoint; + } + } + if ( isFullFound ) { + int aX, anY, aX1, anY1, aX2, anY2; + int aDelta; + CurveCreator_Utils::ConvertPointToClick( aFoundPoint, theView, aX, anY ); + CurveCreator_Utils::ConvertPointToClick( aFoundPnt1, theView, aX1, anY1 ); + CurveCreator_Utils::ConvertPointToClick( aFoundPnt2, theView, aX2, anY2 ); + + isFullFound = !isEqualPixels( aX, anY, aX1, anY1, SCENE_PIXEL_POINT_TOLERANCE, aDelta ) && + !isEqualPixels( aX, anY, aX2, anY2, SCENE_PIXEL_POINT_TOLERANCE, aDelta ); + if ( isFullFound ) { + thePoint = aFoundPoint; + thePoint1 = aFoundPnt1; + thePoint2 = aFoundPnt2; + } + } + return isFullFound; +} + +bool CurveCreator_Utils::hasProjectPointOnCurve( Handle(V3d_View) theView, + const int theX, const int theY, + const Handle(Geom_Curve)& theCurve, + Standard_Real& theParameter, + int& theDelta ) +{ + bool isFound = false; + if ( theView.IsNull() ) + return isFound; + + gp_Pnt aPoint = CurveCreator_Utils::ConvertClickToPoint( theX, theY, theView ); + + GeomAPI_ProjectPointOnCurve aProj( aPoint, theCurve ); + Standard_Integer aNbPoint = aProj.NbPoints(); + if (aNbPoint > 0) { + for (Standard_Integer j = 1; j <= aNbPoint && !isFound; j++) { + gp_Pnt aNewPoint = aProj.Point( j ); + theParameter = aProj.Parameter( j ); + + int aX, anY; + CurveCreator_Utils::ConvertPointToClick( aNewPoint, theView, aX, anY ); + + isFound = isEqualPixels( aX, anY, theX, theY, SCENE_PIXEL_PROJECTION_TOLERANCE, theDelta ); + } + } + return isFound; +} + +bool CurveCreator_Utils::isEqualPixels( const int theX, const int theY, const int theOtherX, + const int theOtherY, const double theTolerance, int& theDelta ) +{ + int aXDelta = abs( theX - theOtherX ); + int anYDelta = abs( theY - theOtherY ); + + theDelta = aXDelta*aXDelta + anYDelta*anYDelta; + + return aXDelta < theTolerance && anYDelta < theTolerance; +} + +bool CurveCreator_Utils::isEqualPoints( const gp_Pnt& thePoint, const gp_Pnt& theOtherPoint ) +{ + return theOtherPoint.IsEqual( thePoint, LOCAL_SELECTION_TOLERANCE ); +} + +//======================================================================= +// function : getPoints +// purpose : +//======================================================================= +Handle(TColgp_HArray1OfPnt) CurveCreator_Utils::getPoints + (const TopoDS_Shape &theShape, + bool &IsClosed, + bool &IsBSpline) +{ + Handle(TColgp_HArray1OfPnt) aResult; + + IsClosed = false; + IsBSpline = false; + + if (theShape.IsNull()) { + return aResult; + } + + const TopAbs_ShapeEnum aShType = theShape.ShapeType(); + + if (aShType == TopAbs_VERTEX) { + // There is a single point. + gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(theShape)); + + aResult = new TColgp_HArray1OfPnt(1, 1, aPnt); + + return aResult; + } else if (aShType != TopAbs_WIRE) { + // The shape is neither a vertex nor a wire. + return aResult; + } + + // Treat wire. + BRepTools_WireExplorer anExp(TopoDS::Wire(theShape)); + + if (!anExp.More()) { + // Empty wires are not allowed. + return aResult; + } + + // Treat the first edge. + TopoDS_Edge anEdge = anExp.Current(); + Handle(Geom_Curve) aCurve = GetCurve(anEdge); + + if (aCurve.IsNull()) { + return aResult; + } + + // Check the curve type. + Handle(Standard_Type) aType = aCurve->DynamicType(); + + if (aType == STANDARD_TYPE(Geom_BSplineCurve)) { + IsBSpline = true; + } else if (aType != STANDARD_TYPE(Geom_Line)) { + // The curve is neither a line or a BSpline. It is not valid. + return aResult; + } + + // Go to the next edge. + TopoDS_Vertex aFirstVtx = anExp.CurrentVertex(); + + anExp.Next(); + + if (IsBSpline) { + // There should be a single BSpline curve in the wire. + if (anExp.More()) { + return aResult; + } + + // Construct a section from poles of BSpline. + Handle(Geom_BSplineCurve) aBSplCurve = + Handle(Geom_BSplineCurve)::DownCast(aCurve); + + // Check if the edge is valid. It should not be based on trimmed curve. + gp_Pnt aCP[2] = { aBSplCurve->StartPoint(), aBSplCurve->EndPoint() }; + TopoDS_Vertex aV[2]; + Standard_Integer i; + + TopExp::Vertices(anEdge, aV[0], aV[1]); + + for (i = 0; i < 2; i++) { + gp_Pnt aPnt = BRep_Tool::Pnt(aV[i]); + Standard_Real aTol = BRep_Tool::Tolerance(aV[i]); + + if (!aPnt.IsEqual(aCP[i], aTol)) { + return aResult; + } + } + + IsClosed = aV[0].IsSame(aV[1]) ? true : false; + + const Standard_Integer aNbPoints = aBSplCurve->NbKnots(); + TColStd_Array1OfReal aKnots(1, aNbPoints); + + aBSplCurve->Knots(aKnots); + aResult = new TColgp_HArray1OfPnt(1, aBSplCurve->NbKnots()); + + for (i = aKnots.Lower(); i <= aKnots.Upper(); ++i) { + aResult->SetValue(i, aBSplCurve->Value(aKnots.Value(i))); + } + } else { + // This is a polyline. + TopTools_ListOfShape aVertices; + Standard_Integer aNbVtx = 1; + + + aVertices.Append(aFirstVtx); + + for (; anExp.More(); anExp.Next(), ++aNbVtx) { + anEdge = anExp.Current(); + aCurve = GetCurve(anEdge); + + if (aCurve.IsNull()) { + return aResult; + } + + aType = aCurve->DynamicType(); + + if (aType != STANDARD_TYPE(Geom_Line)) { + // The curve is not a line. It is not valid. + return aResult; + } + + // Add the current vertex to the list. + aVertices.Append(anExp.CurrentVertex()); + } + + // Check if the section is closed. + TopoDS_Vertex aLastVtx = TopExp::LastVertex(anEdge, Standard_True); + + IsClosed = aFirstVtx.IsSame(aLastVtx) ? true : false; + + // Fill the array of points. + aResult = new TColgp_HArray1OfPnt(1, aNbVtx); + + Standard_Integer i; + TopTools_ListIteratorOfListOfShape aVtxIter(aVertices); + + for (i = 1; aVtxIter.More(); aVtxIter.Next(), ++i) { + gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(aVtxIter.Value())); + + aResult->SetValue(i, aPnt); + } + } + + return aResult; +} +//======================================================================= +// function : FindPlane +// purpose : +//======================================================================= +void CurveCreator_Utils::FindPlane + (const Handle_TColgp_HArray1OfPnt &thePoints, + gp_Pln &thePlane, + Standard_Integer &thePlnStatus) +{ + if (thePoints.IsNull() || thePlnStatus == PLN_FIXED) { + // The plane can't be defined or is fixed. Nothing to change. + return; + } + + Standard_Integer i; + const Standard_Real aTolConf = Precision::Confusion(); + + for (i = thePoints->Lower(); i <= thePoints->Upper(); ++i) { + const gp_Pnt &aPnt = thePoints->Value(i); + + switch (thePlnStatus) { + case PLN_FREE: + // Fix the origin. + thePlane.SetLocation(aPnt); + thePlnStatus = PLN_ORIGIN; + break; + case PLN_ORIGIN: + { + // Fix origin + OX axis + const gp_Pnt &aPlnLoc = thePlane.Location(); + + if (!aPnt.IsEqual(aPlnLoc, aTolConf)) { + // Set the X axis. + gp_Dir aXDir(aPnt.XYZ().Subtracted(aPlnLoc.XYZ())); + gp_Ax3 aXNorm(aPlnLoc, aXDir); + gp_Ax3 aNewPlnPos(aPlnLoc, aXNorm.XDirection(), aXNorm.Direction()); + + thePlane.SetPosition(aNewPlnPos); + thePlnStatus = PLN_OX; + } + } + break; + case PLN_OX: + { + // Fix OY axis + gp_Lin aXLin(thePlane.XAxis()); + Standard_Real aSqrDist = aXLin.SquareDistance(aPnt); + + if (aSqrDist > aTolConf*aTolConf) { + // Compute main axis. + const gp_Pnt &aPlnLoc = thePlane.Location(); + gp_Dir aDir(aPnt.XYZ().Subtracted(aPlnLoc.XYZ())); + gp_Ax3 aXNorm(aPlnLoc, aXLin.Direction(), aDir); + gp_Ax3 aNewPlnPos(aPlnLoc, aXNorm.YDirection(), + aXNorm.Direction()); + + thePlane.SetPosition(aNewPlnPos); + thePlnStatus = PLN_FIXED; + return; + } + } + break; + default: + return; + } + } +} diff --git a/src/CurveCreator/CurveCreator_Utils.hxx b/src/CurveCreator/CurveCreator_Utils.hxx new file mode 100644 index 000000000..8dddaf2ff --- /dev/null +++ b/src/CurveCreator/CurveCreator_Utils.hxx @@ -0,0 +1,211 @@ +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef CURVECREATOR_UTILS_H +#define CURVECREATOR_UTILS_H + +#include "CurveCreator_Macro.hxx" +#include "CurveCreator_ICurve.hxx" + +#include +#include // TODO: remove +#include +#include +#include +#include +#include + +#include +#include // TODO: remove + +class CurveCreator_Curve; + + +class CurveCreator_Utils +{ +public: + + /*! + * \brief Returns the point clicked in 3D view. + * + * \param x The X coordinate in the view. + * \param y The Y coordinate in the view. + * \param theView View where the given point takes place. + * \retval gp_Pnt Returns the point clicked in 3D view + */ + CURVECREATOR_EXPORT static void ConvertPointToClick( const gp_Pnt& thePoint, + Handle(V3d_View) theView, + int& x, int& y ); + + /*! + * \brief Returns the point clicked in 3D view. + * + * \param x The X coordinate in the view. + * \param y The Y coordinate in the view. + * \param theView View where the given point takes place. + * \retval gp_Pnt Returns the point clicked in 3D view + */ + CURVECREATOR_EXPORT static gp_Pnt ConvertClickToPoint( int x, int y, + Handle(V3d_View) theView ); + + /** + * Generates shape on the curve + * \param theCurve a curve object, that contains data + * \param theShape a generated shape + */ + CURVECREATOR_EXPORT static void constructShape( const CurveCreator_ICurve* theCurve, + TopoDS_Shape& theShape ); + + /** + * Generates a curve from a shape. + * \param theShape a shape to be converted to curve. + * \param theCurve a curve object to be initialized. + * \param theLocalCS the local coordinate system of the curve. + * \return true in case of success; false otherwise. Warning: the curve can + * be modified even if the shape is not valid for curve construction. + */ + CURVECREATOR_EXPORT static bool constructCurve + (const TopoDS_Shape theShape, + CurveCreator_Curve *theCurve, + gp_Ax3 &theLocalCS); + + /** + * Find selected points in the context + * \param theContext the viewer context + * \param theCurve a curve object, that contains data + */ + CURVECREATOR_EXPORT static void getSelectedPoints( Handle(AIS_InteractiveContext) theContext, + const CurveCreator_ICurve* theCurve, + CurveCreator_ICurve::SectionToPointList& thePoints ); + + /** + * Set selected points to the context + * \param theContext the viewer context + * \param theCurve a curve object, that contains data + * \param thePoints the curve point indices to be selected in the context + */ + CURVECREATOR_EXPORT static void setSelectedPoints( + Handle(AIS_InteractiveContext) theContext, + const CurveCreator_ICurve* theCurve, + const CurveCreator_ICurve::SectionToPointList& thePoints = + CurveCreator_ICurve::SectionToPointList() ); + + /*! + * \brief Sets the local point context for the 3D viewer. + * \param theCurve a curve object, that contains data + * \param theContext the viewer context + * \param theOpen The flag to open or close the local context. + */ + CURVECREATOR_EXPORT static void setLocalPointContext( + const CurveCreator_ICurve* theCurve, + Handle(AIS_InteractiveContext) theContext, + const bool theOpen ); + + /** + * Checks whether the point belongs to the OCC object + * \param theObject a line or shape with a bspline inside + * \param theX the X coordinate in the view. + * \param theY the Y coordinate in the view. + * \param thePoint the output point to be append to the model curve + * \param thePoint1 the output point to bound the line where a new point should be inserted + * \param thePoint2 the output point to bound the line where a new point should be inserted + */ + CURVECREATOR_EXPORT static bool pointOnObject( Handle(V3d_View) theView, + Handle(AIS_InteractiveObject) theObject, + const int theX, const int theY, + gp_Pnt& thePoint, gp_Pnt& thePoint1, + gp_Pnt& thePoint2 ); + +protected: + /* + * Returns whether the clicked point belong to the curve or has a very near projection + * \param theX the X coordinate of a point clicked in the OCC viewer + * \param theY the Y coordinate of a point clicked in the OCC viewer + * \param theCurve a geometry curve + * \param theOutPoint a found projected point on the curve + */ + static bool hasProjectPointOnCurve( + Handle(V3d_View) theView, + const int theX, const int theY, + const Handle(Geom_Curve)& theCurve, + Standard_Real& theParameter, + int& theDelta ); + + /* + * Returns whether the X and Y coordinates is in the pixel tolerance + * \param theX the X coordinate of the first point + * \param theY the Y coordinate of the first point + * \param theOtherX the X coordinate of the second point + * \param theOtherY the Y coordinate of the second point + * \param theTolerance the tolerance to compare + * \param theDelta the sum of the a square of X and a square of Y + * \returns whether the points are provide to the pixel tolerance + */ + static bool isEqualPixels( const int theX, const int theY, + const int theOtherX, const int theOtherY, + const double theTolerance, int& theDelta ); + + + /* + * Returns whether the points are the same + * \param thePoint the first point + * \param theOtherPoint the second point + * \returns whether the points are provide to the pixel tolerance + */ + static bool isEqualPoints( const gp_Pnt& thePoint, + const gp_Pnt& theOtherPoint ); + + /** + * Returns the array of points of a shape to construct a curve section. The + * shape can be either a wire or a vertex. For vertex a single point in the + * array is returned. + * + * \param theShape the shape. Can be either a wire or a vertex. + * \param IsClosed closed flag. Output parameter. + * \param IsBSpline BSpline flag. Output parameter. + * \return the array of points. Null handle in case of failure. + */ + static Handle_TColgp_HArray1OfPnt getPoints + (const TopoDS_Shape &theShape, + bool &IsClosed, + bool &IsBSpline); + + /** + * This method computes a plane using the input points. The plane is defined + * by gp_Pln object and the status. The status can have one of the following + * values: + * - 0 plane is not set.
    + * - 1 origin of the plane is fixed. The plane is defined by 1 or several + * coincident points.
    + * - 2 origin + OX axis of the plane is fixed. The plane is defined by 2 + * or more points that lie on a particular line.
    + * - 3 plane is fixed. Plane is defined by 3 not coincident points.
    + * + * \param thePoints the points. + * \param thePlane the current plane on input. It can be modified on output. + * \param thePlnStatus the current status on input. It can be modified on + * output. + */ + static void FindPlane(const Handle_TColgp_HArray1OfPnt &thePoints, + gp_Pln &thePlane, + Standard_Integer &thePlnStatus); + +}; + +#endif // CURVECREATOR_UTILS_H diff --git a/src/CurveCreator/CurveCreator_UtilsICurve.cxx b/src/CurveCreator/CurveCreator_UtilsICurve.cxx new file mode 100644 index 000000000..d11598e25 --- /dev/null +++ b/src/CurveCreator/CurveCreator_UtilsICurve.cxx @@ -0,0 +1,126 @@ +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "CurveCreator_UtilsICurve.hxx" + +#include "CurveCreator.hxx" +#include + +const double LOCAL_SELECTION_TOLERANCE = 0.0001; + +int CurveCreator_UtilsICurve::findLocalPointIndex( const CurveCreator_ICurve* theCurve, + int theSectionId, float theX, float theY ) +{ + int aPntIndex = -1; + if ( !theCurve ) + return aPntIndex; + + CurveCreator::Coordinates aCoords; + for ( int i = 0, aNb = theCurve->getNbPoints( theSectionId ); i < aNb && aPntIndex < 0; i++ ) { + aCoords = theCurve->getPoint( theSectionId, i ); + if ( aCoords.size() < 2 ) + continue; + if ( fabs( aCoords[0] - theX ) < LOCAL_SELECTION_TOLERANCE && + fabs( aCoords[1] - theY ) < LOCAL_SELECTION_TOLERANCE ) + aPntIndex = i; + } + + return aPntIndex; +} + +void CurveCreator_UtilsICurve::findSectionsToPoints( const CurveCreator_ICurve* theCurve, + const double theX, const double theY, + CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + thePoints.clear(); + + int aPointId = -1; + for ( int i = 0, aNb = theCurve->getNbSections(); i < aNb; i++ ) { + aPointId = CurveCreator_UtilsICurve::findLocalPointIndex( theCurve, i, theX, theY ); + if ( aPointId < 0 ) + continue; + CurveCreator_ICurve::SectionToPoint aPoint = std::make_pair( i, aPointId ); + if ( !CurveCreator_UtilsICurve::contains( thePoints, aPoint ) ) + thePoints.push_back( aPoint ); + } +} + +void CurveCreator_UtilsICurve::convert( const CurveCreator_ICurve::SectionToPointList& thePoints, + QMap >& theConvPoints ) +{ + theConvPoints.clear(); + + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = thePoints.begin(), + aLast = thePoints.end(); + QList aPoints; + int aSectionId, aPointId; + for ( ; anIt != aLast; anIt++ ) { + aSectionId = anIt->first; + aPointId = anIt->second; + aPoints.clear(); + if ( theConvPoints.contains( aSectionId ) ) + aPoints = theConvPoints[aSectionId]; + if ( aPoints.contains( aPointId ) ) + continue; + aPoints.append( aPointId ); + theConvPoints[aSectionId] = aPoints; + } +} + +#include "CurveCreator_Curve.hxx" // TODO +void CurveCreator_UtilsICurve::getPoint( const CurveCreator_ICurve* theCurve, const int theISection, + const int theIPoint, gp_Pnt& thePoint ) +{ + double anX, anY, aZ; + // TODO + const CurveCreator_Curve* aCurve = dynamic_cast( theCurve ); + if ( aCurve ) + aCurve->getCoordinates( theISection, theIPoint, anX, anY, aZ ); + thePoint = gp_Pnt( anX, anY, aZ); +} + +std::string CurveCreator_UtilsICurve::getUniqSectionName( CurveCreator_ICurve* theCurve ) +{ + for( int i = 0 ; i < 1000000 ; i++ ){ + char aBuffer[255]; + sprintf( aBuffer, "Section_%d", i+1 ); + std::string aName(aBuffer); + int j; + for( j = 0 ; j < theCurve->getNbSections() ; j++ ){ + if( theCurve->getSectionName(j) == aName ) + break; + } + if( j == theCurve->getNbSections() ) + return aName; + } + return ""; +} + +bool CurveCreator_UtilsICurve::contains( const CurveCreator_ICurve::SectionToPointList& theList, + const CurveCreator_ICurve::SectionToPoint& theValue ) +{ + bool isFound = false; + + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = theList.begin(), + aLast = theList.end(); + for ( ; anIt != aLast && !isFound; anIt++ ) + isFound = anIt->first == theValue.first && anIt->second == theValue.second; + + return isFound; +} diff --git a/src/CurveCreator/CurveCreator_UtilsICurve.hxx b/src/CurveCreator/CurveCreator_UtilsICurve.hxx new file mode 100644 index 000000000..96b4e454b --- /dev/null +++ b/src/CurveCreator/CurveCreator_UtilsICurve.hxx @@ -0,0 +1,69 @@ +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef CURVECREATOR_UTILS_ICURVE_H +#define CURVECREATOR_UTILS_ICURVE_H + +#include "CurveCreator_Macro.hxx" + +#include "CurveCreator_ICurve.hxx" + +#include + +#include +#include + +class CurveCreator_UtilsICurve +{ +public: + + /*! + * Returns a point index in the model curve by the point coordinates in the viewer + * \param theX the X coordinate of the point + * \param theY the Y coordinate of the point + */ + CURVECREATOR_EXPORT static int findLocalPointIndex( const CurveCreator_ICurve* theCurve, + int theSectionId, float theX, float theY ); + + CURVECREATOR_EXPORT static void findSectionsToPoints( const CurveCreator_ICurve* theCurve, + const double theX, const double theY, + CurveCreator_ICurve::SectionToPointList& thePoints ); + CURVECREATOR_EXPORT static void convert( const CurveCreator_ICurve::SectionToPointList& thePoints, + QMap >& theConvPoints ); + + CURVECREATOR_EXPORT static void getPoint( const CurveCreator_ICurve* theCurve, const int theISection, + const int theIPoint, gp_Pnt& thePoint ); + + /*! + * Returns a unique section name + * \param theCurve a curve interface + */ + CURVECREATOR_EXPORT static std::string getUniqSectionName( + CurveCreator_ICurve* theCurve ); + + /** + * Returns whethe the container has the value + * \param theList a container of values + * \param theValue a value + */ + CURVECREATOR_EXPORT static bool contains( const CurveCreator_ICurve::SectionToPointList& theList, + const CurveCreator_ICurve::SectionToPoint& theValue ); +}; + +#endif // CURVECREATOR_UTILS_ICURVE_H diff --git a/src/CurveCreator/CurveCreator_Widget.cxx b/src/CurveCreator/CurveCreator_Widget.cxx index 180284fc1..9cd21e3b7 100644 --- a/src/CurveCreator/CurveCreator_Widget.cxx +++ b/src/CurveCreator/CurveCreator_Widget.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -19,25 +19,21 @@ #include "CurveCreator_Widget.h" #include "CurveCreator_TreeView.h" -#include "CurveCreator_Curve.hxx" -#include "CurveCreator_CurveEditor.hxx" +#include "CurveCreator_ICurve.hxx" #include "CurveCreator.hxx" -#include "CurveCreator_NewPointDlg.h" #include "CurveCreator_NewSectionDlg.h" - -#include +#include "CurveCreator_Utils.hxx" +#include "CurveCreator_UtilsICurve.hxx" +#include "CurveCreator_TableView.h" #include #include #include #include -#include #include #include - -#include -#include +#include #include #include @@ -50,204 +46,304 @@ #include #include #include +#include +#include + +//#define MEASURE_TIME + +#ifdef MEASURE_TIME + + #define START_MEASURE_TIME \ + QTime aTimer; \ + aTimer.start(); \ + + #define END_MEASURE_TIME( theMsg ) \ + double aTime = aTimer.elapsed() * 0.001; \ + FILE* aFile = fopen( "performance", "a" ); \ + fprintf( aFile, "%s = %.3lf sec\n", theMsg, aTime ); \ + fclose( aFile ); \ + +#else + + #define START_MEASURE_TIME + #define END_MEASURE_TIME( theMsg ) + +#endif + + + + + CurveCreator_Widget::CurveCreator_Widget(QWidget* parent, - CurveCreator_Curve *theCurve, - Qt::WindowFlags fl) : - QWidget(parent), myNewPointEditor(NULL), myNewSectionEditor(NULL), myEdit(NULL), myCurve(theCurve) + CurveCreator_ICurve *theCurve, + const int theActionFlags, + const QStringList& theCoordTitles, + Qt::WindowFlags fl, + int theLocalPointRowLimit ) +: QWidget(parent), myNewSectionEditor(NULL), myCurve(theCurve), mySection(0), + myDragStarted( false ), myDragInteractionStyle( SUIT_ViewModel::STANDARD ), + myOCCViewer( 0 ), myLocalPointRowLimit( theLocalPointRowLimit ), + myOld2DMode(OCCViewer_ViewWindow::No2dMode) { - if( myCurve ) - myEdit = new CurveCreator_CurveEditor( myCurve ); + bool isToEnableClosed = !( theActionFlags & DisableClosedSection ); + myNewSectionEditor = new CurveCreator_NewSectionDlg( this, isToEnableClosed ); + myNewSectionEditor->hide(); + connect( myNewSectionEditor, SIGNAL(addSection()), this, SLOT(onAddNewSection()) ); + connect( myNewSectionEditor, SIGNAL(modifySection()), this, SLOT(onModifySection()) ); + connect( myNewSectionEditor, SIGNAL(cancelSection()), this, SLOT(onCancelSection()) ); - CurveCreator::Dimension aDim = CurveCreator::Dim2d; - if( myCurve ) - aDim = myCurve->getDimension(); - myNewPointEditor = new CurveCreator_NewPointDlg( aDim, this ); - myNewPointEditor->hide(); -// connect( myNewPointEditor, SIGNAL(addPoint()), this, SLOT(onAddNewPoint()) ); - connect( myNewPointEditor, SIGNAL(modifyPoint()), this, SLOT(onModifyPoint()) ); - connect( myNewPointEditor, SIGNAL(cancelPoint()), this, SLOT(onCancelPoint()) ); + QGroupBox* aSectionGroup = new QGroupBox(tr("SECTION_GROUP_TITLE"),this); - myNewSectionEditor = new CurveCreator_NewSectionDlg( this ); - myNewSectionEditor->hide(); - connect( myNewSectionEditor, SIGNAL(addSection()), this, SLOT(onAddNewSection()) ); - connect( myNewSectionEditor, SIGNAL(modifySection()), this, SLOT(onModifySection()) ); - connect( myNewSectionEditor, SIGNAL(cancelSection()), this, SLOT(onCancelSection()) ); + mySectionView = new CurveCreator_TreeView(myCurve, aSectionGroup); + mySectionView->setSelectionMode( QTreeView::ExtendedSelection ); + connect( mySectionView, SIGNAL(selectionChanged()), this, SLOT( onSelectionChanged() ) ); + connect( mySectionView, SIGNAL(sectionEntered(int)), this, SLOT(onEditSection(int)) ); + connect( mySectionView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onContextMenu(QPoint)) ); - QGroupBox* aSectionGroup = new QGroupBox(tr("Sections"),this); + myLocalPointView = new CurveCreator_TableView( myCurve, this, theCoordTitles ); + connect( myLocalPointView, SIGNAL( cellChanged( int, int ) ), + this, SLOT( onCellChanged( int, int ) ) ); - mySectionView = new CurveCreator_TreeView(myCurve, aSectionGroup); - connect( mySectionView, SIGNAL(selectionChanged()), this, SLOT( onSelectionChanged() ) ); - connect( mySectionView, SIGNAL(pointEntered(int,int)), this, SLOT(onEditPoint(int,int)) ); - connect( mySectionView, SIGNAL(sectionEntered(int)), this, SLOT(onEditSection(int)) ); - connect( mySectionView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onContextMenu(QPoint)) ); - QToolBar* aTB = new QToolBar(tr("TOOL_BAR_TLT"), aSectionGroup); + QToolBar* aTB = new QToolBar(tr("SECTION_GROUP_TITLE"), aSectionGroup); // QToolButton* anUndoBtn = new QToolButton(aTB); - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - QPixmap anUndoPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_UNDO"))); - QPixmap aRedoPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_REDO"))); - QPixmap aNewSectionPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_NEW_SECTION"))); - QPixmap aNewPointPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_NEW_POINT"))); - QPixmap anEditPointsPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_EDIT_POINTS"))); - QPixmap aDetectPointsPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_EDIT_POINTS"))); - QPixmap aPolylinePixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_POLYLINE"))); - QPixmap aSplinePixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_SPLINE"))); - QPixmap aRemovePixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_DELETE"))); - QPixmap aJoinPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_JOIN"))); - QPixmap aStepUpPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_ARROW_UP"))); - QPixmap aStepDownPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_ARROW_DOWN"))); + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + QPixmap anUndoPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_UNDO"))); + QPixmap aRedoPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_REDO"))); + QPixmap aNewSectionPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_NEW_SECTION"))); + QPixmap aNewPointPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_NEW_POINT"))); + QPixmap anEditPointsPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_EDIT_POINTS"))); + QPixmap aDetectPointsPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_EDIT_POINTS"))); + QPixmap aPolylinePixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_POLYLINE"))); + QPixmap aSplinePixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_SPLINE"))); + QPixmap aRemovePixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_DELETE"))); + QPixmap aJoinPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_JOIN"))); + QPixmap aStepUpPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_ARROW_UP"))); + QPixmap aStepDownPixmap(aResMgr->loadPixmap("GEOM", tr("ICON_CC_ARROW_DOWN"))); -/* QPixmap anUndoPixmap = QPixmap(tr(":images/ICON_UNDO")); - QPixmap aRedoPixmap = QPixmap(tr(":images/ICON_REDO")); - QPixmap aNewSectionPixmap = QPixmap(tr(":images/ICON_NEW_SECTION")); - QPixmap aNewPointPixmap = QPixmap(tr(":images/ICON_NEW_POINT")); - QPixmap aPolylinePixmap = QPixmap(tr(":images/ICON_POLYLINE")); - QPixmap aSplinePixmap = QPixmap(tr(":images/ICON_SPLINE")); - QPixmap aRemovePixmap = QPixmap(tr(":images/ICON_REMOVE")); - QPixmap aJoinPixmap = QPixmap(tr(":images/ICON_JOIN")); - QPixmap aStepUpPixmap = QPixmap(tr(":images/ICON_STEP_UP")); - QPixmap aStepDownPixmap = QPixmap(tr(":images/ICON_STEP_DOWN"));*/ + QAction* anAct = createAction( UNDO_ID, tr("UNDO"), anUndoPixmap, tr("UNDO_TLT"), + QKeySequence(Qt::ControlModifier|Qt::Key_Z) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onUndo()) ); + aTB->addAction(anAct); - QAction* anAct = createAction( UNDO_ID, tr("UNDO"), anUndoPixmap, tr("UNDO_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_Z) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onUndo()) ); - aTB->addAction(anAct); + anAct = createAction( REDO_ID, tr("REDO"), aRedoPixmap, tr("REDO_TLT"), + QKeySequence(Qt::ControlModifier|Qt::Key_Y) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onRedo()) ); + aTB->addAction(anAct); - anAct = createAction( REDO_ID, tr("REDO"), aRedoPixmap, tr("REDO_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_Y) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onRedo()) ); - aTB->addAction(anAct); - - aTB->addSeparator(); - - anAct = createAction( NEW_SECTION_ID, tr("NEW_SECTION"), aNewSectionPixmap, tr("NEW_SECTION_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_N) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onNewSection()) ); + aTB->addSeparator(); + + anAct = createAction( NEW_SECTION_ID, tr("NEW_SECTION"), aNewSectionPixmap, tr("NEW_SECTION_TLT"), + QKeySequence(Qt::ControlModifier|Qt::Key_N) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onNewSection()) ); + if ( !(theActionFlags & DisableNewSection) ) { aTB->addAction(anAct); aTB->addSeparator(); + } - anAct = createAction( INSERT_SECTION_BEFORE_ID, tr("INSERT_SECTION_BEFORE"), QPixmap(), - tr("INSERT_SECTION_BEFORE_TLT"), - QKeySequence(Qt::ControlModifier | Qt::Key_Insert ) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertSectionBefore()) ); + anAct = createAction( ADDITION_MODE_ID, tr("ADDITION_MODE"), aNewPointPixmap, tr("ADDITION_MODE_TLT"), + QKeySequence() ); + anAct->setCheckable(true); + connect(anAct, SIGNAL(triggered(bool)), this, SLOT(onAdditionMode(bool)) ); + connect(anAct, SIGNAL(toggled(bool)), this, SLOT(onModeChanged(bool)) ); + aTB->addAction(anAct); + + anAct = createAction( MODIFICATION_MODE_ID, tr("MODIFICATION_MODE"), anEditPointsPixmap, tr("MODIFICATION_MODE_TLT"), + QKeySequence() ); + anAct->setCheckable(true); + connect(anAct, SIGNAL(triggered(bool)), this, SLOT(onModificationMode(bool)) ); + connect(anAct, SIGNAL(toggled(bool)), this, SLOT(onModeChanged(bool)) ); + aTB->addAction(anAct); - anAct = createAction( INSERT_SECTION_AFTER_ID, tr("INSERT_SECTION_AFTER"), QPixmap(), - tr("INSERT_SECTION_AFTER_TLT"), - QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Insert ) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertSectionAfter()) ); - - anAct = createAction( ADDITION_MODE_ID, tr("ADDITION_MODE"), aNewPointPixmap, tr("ADDITION_MODE_TLT"), - QKeySequence() ); - anAct->setCheckable(true); - connect(anAct, SIGNAL(triggered(bool)), this, SLOT(onAdditionMode(bool)) ); - connect(anAct, SIGNAL(toggled(bool)), this, SLOT(onModeChanged(bool)) ); - aTB->addAction(anAct); - - anAct = createAction( MODIFICATION_MODE_ID, tr("MODIFICATION_MODE"), anEditPointsPixmap, tr("MODIFICATION_MODE_TLT"), - QKeySequence() ); - anAct->setCheckable(true); - connect(anAct, SIGNAL(triggered(bool)), this, SLOT(onModificationMode(bool)) ); - connect(anAct, SIGNAL(toggled(bool)), this, SLOT(onModeChanged(bool)) ); + anAct = createAction( DETECTION_MODE_ID, tr("DETECTION_MODE"), aDetectPointsPixmap, tr("DETECTION_MODE_TLT"), + QKeySequence() ); + anAct->setCheckable(true); + connect(anAct, SIGNAL(triggered(bool)), this, SLOT(onDetectionMode(bool)) ); + connect(anAct, SIGNAL(toggled(bool)), this, SLOT(onModeChanged(bool)) ); + if ( !(theActionFlags & DisableDetectionMode) ) { aTB->addAction(anAct); + } + + anAct = createAction( CLOSE_SECTIONS_ID, tr("CLOSE_SECTIONS"), QPixmap(), tr("CLOSE_SECTIONS_TLT"), + QKeySequence(Qt::ControlModifier|Qt::Key_W) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onCloseSections()) ); - anAct = createAction( DETECTION_MODE_ID, tr("DETECTION_MODE"), aDetectPointsPixmap, tr("DETECTION_MODE_TLT"), - QKeySequence() ); - anAct->setCheckable(true); - connect(anAct, SIGNAL(triggered(bool)), this, SLOT(onDetectPoints(bool)) ); - connect(anAct, SIGNAL(toggled(bool)), this, SLOT(onModeChanged(bool)) ); - aTB->addAction(anAct); + anAct = createAction( UNCLOSE_SECTIONS_ID, tr("UNCLOSE_SECTIONS"), QPixmap(), + tr("UNCLOSE_SECTIONS_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_S) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onUncloseSections()) ); - anAct = createAction( INSERT_POINT_BEFORE_ID, tr("INSERT_POINT_BEFORE"), QPixmap(), - tr("INSERT_POINT_BEFORE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_B) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertPointBefore()) ); + anAct = createAction( SET_SECTIONS_POLYLINE_ID, tr("SET_SECTIONS_POLYLINE"), + aPolylinePixmap, tr("SET_SECTIONS_POLYLINE_TLT"), + QKeySequence(Qt::ControlModifier|Qt::Key_E) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onSetPolyline()) ); - anAct = createAction( INSERT_POINT_AFTER_ID, tr("INSERT_POINT_AFTER"), QPixmap(), - tr("INSERT_POINT_AFTER_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_M) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertPointAfter()) ); - - anAct = createAction( CLOSE_SECTIONS_ID, tr("CLOSE_SECTIONS"), QPixmap(), tr("CLOSE_SECTIONS_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_W) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onCloseSections()) ); + anAct = createAction( SET_SECTIONS_SPLINE_ID, tr("SET_SECTIONS_SPLINE"), aSplinePixmap, + tr("SET_SECTIONS_SPLINE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_R) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onSetSpline()) ); - anAct = createAction( UNCLOSE_SECTIONS_ID, tr("UNCLOSE_SECTIONS"), QPixmap(), - tr("UNCLOSE_SECTIONS_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_S) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onUncloseSections()) ); + anAct = createAction( REMOVE_ID, tr("REMOVE"), aRemovePixmap, tr("REMOVE_TLT"), + QKeySequence(Qt::ControlModifier|Qt::Key_Delete ) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onRemove()) ); + aTB->addAction(anAct); + + aTB->addSeparator(); - anAct = createAction( SET_SECTIONS_POLYLINE_ID, tr("SET_SECTIONS_POLYLINE"), - aPolylinePixmap, tr("SET_POLYLINE_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_E) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onSetPolyline()) ); + anAct = createAction( JOIN_ID, tr("JOIN"), aJoinPixmap, tr("JOIN_TLT"), + QKeySequence(Qt::ControlModifier|Qt::Key_Plus ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onJoin()) ); + aTB->addAction(anAct); - anAct = createAction( SET_SECTIONS_SPLINE_ID, tr("SET_SECTIONS_SPLINE"), aSplinePixmap, - tr("SET_SPLINE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_R) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onSetSpline()) ); + anAct = createAction( CLEAR_ALL_ID, tr("CLEAR_ALL"), QPixmap(), tr("CLEAR_ALL_TLT"), + QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Delete ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT( onClearAll()) ); - anAct = createAction( REMOVE_ID, tr("REMOVE"), aRemovePixmap, tr("REMOVE_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_Delete ) ); - connect(anAct, SIGNAL(triggered()), this, SLOT(onRemove()) ); - aTB->addAction(anAct); - aTB->addSeparator(); + anAct = createAction( JOIN_ALL_ID, tr("JOIN_ALL"), QPixmap(), tr("JOIN_ALL_TLT"), + QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Plus ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onJoinAll()) ); - anAct = createAction( JOIN_ID, tr("JOIN"), aJoinPixmap, tr("JOIN_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_Plus ) ); - connect( anAct, SIGNAL(triggered()), this, SLOT(onJoin()) ); - aTB->addAction(anAct); - aTB->addSeparator(); - - anAct = createAction( UP_ID, tr("STEP_UP"), aStepUpPixmap, tr("STEP_UP_TLT"), - QKeySequence(Qt::ControlModifier|Qt::Key_Up ) ); - connect( anAct, SIGNAL(triggered()), this, SLOT(onMoveUp()) ); - - anAct = createAction( DOWN_ID, tr("STEP_DOWN"), aStepDownPixmap, tr("STEP_DOWN"), - QKeySequence(Qt::ControlModifier|Qt::Key_Down ) ); - connect( anAct, SIGNAL(triggered()), this, SLOT(onMoveDown()) ); - - anAct = createAction( CLEAR_ALL_ID, tr("CLEAR_ALL"), QPixmap(), tr("CLEAR_ALL_TLT"), - QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Delete ) ); - connect( anAct, SIGNAL(triggered()), this, SLOT( onClearAll()) ); - - anAct = createAction( JOIN_ALL_ID, tr("JOIN_ALL"), QPixmap(), tr("JOIN_ALL_TLT"), - QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Plus ) ); - connect( anAct, SIGNAL(triggered()), this, SLOT(onJoinAll()) ); - - QVBoxLayout* aSectLayout = new QVBoxLayout(); - aSectLayout->setMargin( 5 ); - aSectLayout->setSpacing( 5 ); - aSectLayout->addWidget(aTB); - aSectLayout->addWidget(mySectionView); - aSectionGroup->setLayout(aSectLayout); - QVBoxLayout* aLay = new QVBoxLayout(); - aLay->setMargin( 0 ); - aLay->setSpacing( 5 ); + QVBoxLayout* aSectLayout = new QVBoxLayout(); + aSectLayout->setMargin( 5 ); + aSectLayout->setSpacing( 5 ); + aSectLayout->addWidget(aTB); + aSectLayout->addWidget(mySectionView); + aSectLayout->addWidget( myLocalPointView ); + aSectionGroup->setLayout(aSectLayout); + QVBoxLayout* aLay = new QVBoxLayout(); + aLay->setMargin( 0 ); + aLay->setSpacing( 5 ); // aLay->addLayout(aNameLayout); - aLay->addWidget(aSectionGroup); - setLayout(aLay); - onSelectionChanged(); + aLay->addWidget(aSectionGroup); + setLayout(aLay); + + updateActionsStates(); + updateUndoRedo(); } -void CurveCreator_Widget::setCurve( CurveCreator_Curve* theCurve ) +/** + * Set an OCC viewer + */ +void CurveCreator_Widget::setOCCViewer( OCCViewer_Viewer* theViewer ) { - if( myEdit != NULL ){ - delete myEdit; - myEdit = NULL; + if ( myOCCViewer == theViewer ) + return; + + if ( myOCCViewer ) { + OCCViewer_ViewManager* aViewManager = dynamic_cast + ( myOCCViewer->getViewManager() ); + disconnect( aViewManager, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( onMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) ); + disconnect( aViewManager, SIGNAL( mouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( onMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) ); + disconnect( aViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) ); + disconnect( aViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ), + this, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) ); + // restore normal mode in the viewer + SetViewer2DMode(false); + // all local contexts should be closed if the viewer is not more used + setLocalPointContext( false, true ); } + + myOCCViewer = theViewer; + if ( myOCCViewer ) { + OCCViewer_ViewManager* aViewManager = dynamic_cast + ( myOCCViewer->getViewManager() ); + connect( aViewManager, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( onMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) ); + connect( aViewManager, SIGNAL( mouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( onMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) ); + connect( aViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) ); + connect( aViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ), + this, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) ); + SetViewer2DMode(true); + } +} + +/** + * Returns current OCC viewer + */ +OCCViewer_Viewer* CurveCreator_Widget::getOCCViewer() +{ + return myOCCViewer; +} + +/** + * Returns OCC viewer context + */ +Handle(AIS_InteractiveContext) CurveCreator_Widget::getAISContext() +{ + Handle(AIS_InteractiveContext) aContext; + OCCViewer_Viewer* aViewer = getOCCViewer(); + if ( aViewer ) + aContext = aViewer->getAISContext(); + + return aContext; +} + +/** + * Returns OCC viewer view port + */ +OCCViewer_ViewPort3d* CurveCreator_Widget::getViewPort() +{ + OCCViewer_ViewPort3d* aViewPort = 0; + OCCViewer_Viewer* aViewer = getOCCViewer(); + if ( aViewer ) + aViewPort = ((OCCViewer_ViewWindow*)aViewer->getViewManager()->getActiveView())->getViewPort(); + + return aViewPort; +} + +/** + * Set interaction style in the OCC viewer + * \param theStyle a new style + * \return the previous style + */ +int CurveCreator_Widget::changeInteractionStyle( int theStyle ) +{ + OCCViewer_Viewer* aViewer = getOCCViewer(); + if ( !aViewer ) + return -1; + + int aPrevStyle = aViewer->interactionStyle(); + aViewer->setInteractionStyle( theStyle ); + + return aPrevStyle; +} + +//======================================================================= +// function: reset +// purpose: reset the widget viewer, close local context, clear selection +//======================================================================= +void CurveCreator_Widget::reset() +{ +} + +void CurveCreator_Widget::setCurve( CurveCreator_ICurve* theCurve ) +{ myCurve = theCurve; - mySectionView->setCurve(myCurve); - if( myCurve != NULL ){ - myEdit = new CurveCreator_CurveEditor(myCurve); - } - onSelectionChanged(); + mySectionView->setCurve( myCurve ); + myLocalPointView->setCurve( myCurve ); + updateActionsStates(); updateUndoRedo(); } void CurveCreator_Widget::onSelectionChanged() +{ + updateActionsStates(); + updateUndoRedo(); + emit selectionChanged(); +} + +void CurveCreator_Widget::updateActionsStates() { QList anEnabledAct; if( myCurve ){ - anEnabledAct << NEW_SECTION_ID; + anEnabledAct << NEW_SECTION_ID << MODIFICATION_MODE_ID; + if ( removeEnabled() ) + anEnabledAct << REMOVE_ID; QList aSelSections = mySectionView->getSelectedSections(); - QList< QPair< int, int > > aSelPoints = mySectionView->getSelectedPoints(); CurveCreator_TreeView::SelectionType aSelType = mySectionView->getSelectionType(); switch( aSelType ){ case CurveCreator_TreeView::ST_NOSEL:{ @@ -258,29 +354,47 @@ void CurveCreator_Widget::onSelectionChanged() anEnabledAct << UP_ID; }*/ if( aSelSections.size() == 1 ){ - anEnabledAct << ADDITION_MODE_ID << MODIFICATION_MODE_ID << DETECTION_MODE_ID; + anEnabledAct << ADDITION_MODE_ID << DETECTION_MODE_ID; } - if (myActionMap[ADDITION_MODE_ID]->isChecked()) { - mySection = -1; - myPointNum = -1; - QList aSelSection = mySectionView->getSelectedSections(); - if( aSelSection.size() > 0 ){ - mySection = aSelSection[0]; - myPointNum = myCurve->getNbPoints(mySection); + switch ( getActionMode() ) { + case AdditionMode: { + mySection = -1; + myPointNum = -1; + QList aSelSection = mySectionView->getSelectedSections(); + if( aSelSection.size() > 0 ){ + mySection = aSelSection[0]; + myPointNum = myCurve->getNbPoints(mySection); + } } - } else if (myActionMap[MODIFICATION_MODE_ID]->isChecked()) { - anEnabledAct << REMOVE_ID; - anEnabledAct << CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID << SET_SECTIONS_POLYLINE_ID << SET_SECTIONS_SPLINE_ID; - int aSectCnt = myCurve->getNbSections(); - if( aSectCnt > 0 ) - anEnabledAct << CLEAR_ALL_ID; - if( aSectCnt > 1 ) - anEnabledAct << JOIN_ALL_ID; - if( aSelSections.size() > 1 ){ - anEnabledAct << JOIN_ID; + break; + case ModificationMode: { + if ( myNewSectionEditor->isEnableClosed() ) + anEnabledAct << CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID; + anEnabledAct << SET_SECTIONS_POLYLINE_ID << SET_SECTIONS_SPLINE_ID; + int aSectCnt = myCurve->getNbSections(); + if( aSectCnt > 0 ) + anEnabledAct << CLEAR_ALL_ID; + if( aSectCnt > 1 ) + anEnabledAct << JOIN_ALL_ID; + if( aSelSections.size() > 1 ){ + anEnabledAct << JOIN_ID; + } } - } else if (myActionMap[DETECTION_MODE_ID]->isChecked()) { - } else { //no active mode + break; + case DetectionMode: { + } + break; + case NoneMode: + { + int aSectCnt = myCurve->getNbSections(); + if( aSectCnt > 1 ) + anEnabledAct << JOIN_ALL_ID; + if( aSelSections.size() > 1 ) + anEnabledAct << JOIN_ID; + } + break; + default: + break; } /*if( aSelSections[ aSelSections.size() - 1 ] < ( myCurve->getNbSections() - 1 ) ){ anEnabledAct << DOWN_ID; @@ -326,32 +440,16 @@ void CurveCreator_Widget::onSelectionChanged() } } } - emit selectionChanged(); } void CurveCreator_Widget::onAdditionMode(bool checked) { - if( !myEdit ) + if (!checked) return; - SUIT_ViewWindow* aViewWindow = 0; - SUIT_Study* activeStudy = SUIT_Session::session()->activeApplication()->activeStudy(); - if ( activeStudy ) - aViewWindow = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); - if ( aViewWindow == 0 ) + Handle(AIS_InteractiveContext) aContext = getAISContext(); + if( !myCurve || aContext.IsNull() ) return; - SUIT_ViewManager* aViewManager = aViewWindow->getViewManager(); - - if ( aViewManager->getType() == OCCViewer_Viewer::Type() ) { - if (checked) { - connect( aViewManager, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ), - this, SLOT( onGetPointByClick( SUIT_ViewWindow*, QMouseEvent* ) ) ); - } else { - disconnect( aViewManager, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ), - this, SLOT( onGetPointByClick( SUIT_ViewWindow*, QMouseEvent* ) ) ); - return; - } - } mySection= -1; myPointNum = -1; @@ -359,78 +457,40 @@ void CurveCreator_Widget::onAdditionMode(bool checked) if( aSelSection.size() > 0 ){ mySection = aSelSection[0]; } - else{ - QList< QPair > aSelPoints = mySectionView->getSelectedPoints(); - if( aSelPoints.size() > 0 ){ - mySection = aSelPoints[0].first; - myPointNum = aSelPoints[0].second + 1; - } - } -/* - QString aSectName; - if( mySection < 0 ){ - mySection = myCurve->getNbSections() - 1; - } - aSectName = QString::fromStdString( myCurve->getSectionName(mySection)); - if( myPointNum < 0 ){ - myPointNum = myCurve->getNbPoints(mySection); - } - myNewPointEditor->clear(); - myNewPointEditor->setEditMode(false); - myNewPointEditor->setSectionName(aSectName); - myNewPointEditor->setDimension(myCurve->getDimension()); -*/ // emit subOperationStarted( myNewPointEditor ); } void CurveCreator_Widget::onModificationMode(bool checked) { - SUIT_ViewWindow* aViewWindow = 0; - SUIT_Study* activeStudy = SUIT_Session::session()->activeApplication()->activeStudy(); - if ( activeStudy ) - aViewWindow = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); - if ( aViewWindow == 0 ) - return; - SUIT_ViewManager* aViewManager = aViewWindow->getViewManager(); - if ( aViewManager->getType() == OCCViewer_Viewer::Type() ) { - if (checked) { -// connect( aViewManager, SIGNAL( mouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ), -// this, SLOT( onPointSelect( SUIT_ViewWindow*, QMouseEvent* ) ) ); - connect( aViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), - this, SLOT( onPointDrag( SUIT_ViewWindow*, QMouseEvent* ) ) ); - } - else { -// disconnect( aViewManager, SIGNAL( mouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ), -// this, SLOT( onPointSelect( SUIT_ViewWindow*, QMouseEvent* ) ) ); - disconnect( aViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), - this, SLOT( onPointDrag( SUIT_ViewWindow*, QMouseEvent* ) ) ); - return; - } - } + myLocalPointView->setVisible( checked ); } -void CurveCreator_Widget::onDetectPoints(bool checked) +void CurveCreator_Widget::onDetectionMode(bool checked) { } void CurveCreator_Widget::onModeChanged(bool checked) { + ActionMode aMode = NoneMode; if (checked) { QAction* anAction = (QAction*)sender(); switch(myActionMap.key(anAction)) { case ADDITION_MODE_ID: + aMode = AdditionMode; if (myActionMap[MODIFICATION_MODE_ID]->isChecked()) myActionMap[MODIFICATION_MODE_ID]->trigger(); else if (myActionMap[DETECTION_MODE_ID]->isChecked()) myActionMap[DETECTION_MODE_ID]->trigger(); break; case MODIFICATION_MODE_ID: + aMode = ModificationMode; if (myActionMap[ADDITION_MODE_ID]->isChecked()) myActionMap[ADDITION_MODE_ID]->trigger(); else if (myActionMap[DETECTION_MODE_ID]->isChecked()) myActionMap[DETECTION_MODE_ID]->trigger(); break; case DETECTION_MODE_ID: + aMode = DetectionMode; if (myActionMap[ADDITION_MODE_ID]->isChecked()) myActionMap[ADDITION_MODE_ID]->trigger(); else if (myActionMap[MODIFICATION_MODE_ID]->isChecked()) @@ -438,54 +498,39 @@ void CurveCreator_Widget::onModeChanged(bool checked) break; } } - onSelectionChanged(); -} - -void CurveCreator_Widget::onAddNewPoint(const CurveCreator::Coordinates& theCoords) -{ - if( !myEdit ) - return; -// CurveCreator::Coordinates aCoords = myNewPointEditor->getCoordinates(); - myEdit->insertPoints(theCoords, mySection, myPointNum ); - mySectionView->pointsAdded( mySection, myPointNum ); -// myNewPointEditor->clear(); - myPointNum++; - onSelectionChanged(); + updateActionsStates(); updateUndoRedo(); + setLocalPointContext( aMode == ModificationMode, true ); } void CurveCreator_Widget::onNewSection() { - if( !myEdit ) + if( !myCurve ) return; + + stopActionMode(); myNewSectionEditor->clear(); myNewSectionEditor->setEditMode(false); - QString aSectName = QString( myCurve->getUnicSectionName().c_str() ); + QString aSectName = QString( CurveCreator_UtilsICurve::getUniqSectionName( myCurve ).c_str() ); myNewSectionEditor->setSectionParameters(aSectName, true, CurveCreator::Polyline ); - emit subOperationStarted( myNewSectionEditor ); + emit subOperationStarted( myNewSectionEditor, false ); } void CurveCreator_Widget::onAddNewSection() { - if( !myEdit ) + if( !myCurve ) return; - CurveCreator::Coordinates aCoords; - myEdit->addSection( myNewSectionEditor->getName().toStdString(), myNewSectionEditor->getSectionType(), - myNewSectionEditor->isClosed(), aCoords ); - mySectionView->sectionAdded( mySection ); - QString aNewName = QString(myCurve->getUnicSectionName().c_str()); + myCurve->addSection( myNewSectionEditor->getName().toStdString(), + myNewSectionEditor->getSectionType(), + myNewSectionEditor->isClosed() ); + mySectionView->sectionAdded( -1 ); // add a new section to the end of list + QString aNewName = QString( CurveCreator_UtilsICurve::getUniqSectionName( myCurve ).c_str() ); myNewSectionEditor->setSectionName(aNewName); - mySection++; - onSelectionChanged(); + updateActionsStates(); updateUndoRedo(); onCancelSection(); } -void CurveCreator_Widget::onCancelPoint() -{ - emit subOperationFinished( myNewPointEditor ); -} - void CurveCreator_Widget::onCancelSection() { emit subOperationFinished( myNewSectionEditor ); @@ -504,212 +549,161 @@ QAction* CurveCreator_Widget::createAction( ActionId theId, const QString& theNa return anAct; } -QAction* CurveCreator_Widget::getAction(ActionId theId) +QAction* CurveCreator_Widget::getAction( ActionId theId ) { if( myActionMap.contains(theId) ) return myActionMap[theId]; return NULL; } +QAction* CurveCreator_Widget::getAction( ActionMode theMode ) +{ + ActionId anActionId = NONE_ID; + switch ( theMode ) { + case AdditionMode: + anActionId = ADDITION_MODE_ID; + break; + case ModificationMode: + anActionId = MODIFICATION_MODE_ID; + break; + case DetectionMode: + anActionId = DETECTION_MODE_ID; + break; + default: + break; + } + QAction* anAction = 0; + if ( anActionId != NONE_ID && myActionMap.contains( anActionId ) ) + anAction = myActionMap[anActionId]; + return anAction; +} + void CurveCreator_Widget::onEditSection( int theSection ) { - if( !myEdit ) + if( !myCurve ) return; + + stopActionMode(); mySection = theSection; QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection)); bool isClosed = myCurve->isClosed(theSection); - CurveCreator::Type aType = myCurve->getType(theSection); + CurveCreator::SectionType aType = myCurve->getSectionType(theSection); myNewSectionEditor->setEditMode(true); myNewSectionEditor->setSectionParameters( aSectName, isClosed, aType ); - emit subOperationStarted( myNewSectionEditor ); + emit subOperationStarted( myNewSectionEditor, true ); } void CurveCreator_Widget::onModifySection() { - if( !myEdit ) + if( !myCurve ) return; QString aName = myNewSectionEditor->getName(); bool isClosed = myNewSectionEditor->isClosed(); - CurveCreator::Type aSectType = myNewSectionEditor->getSectionType(); - myEdit->startOperation(); - myEdit->setClosed( isClosed, mySection ); - myEdit->setName( aName.toStdString(), mySection ); - myEdit->setType( aSectType, mySection ); - myEdit->finishOperation(); + CurveCreator::SectionType aSectType = myNewSectionEditor->getSectionType(); + if( myCurve->getSectionName(mySection) != aName.toStdString() ) + myCurve->setSectionName( mySection , aName.toStdString() ); + + bool isGeomModified = false; + + if( myCurve->getSectionType(mySection) != aSectType ) { + myCurve->setSectionType( mySection, aSectType ); + isGeomModified = true; + } + + if( myCurve->isClosed(mySection) != isClosed ) { + myCurve->setClosed( mySection, isClosed ); + isGeomModified = true; + } mySectionView->sectionChanged(mySection); updateUndoRedo(); onCancelSection(); -} -void CurveCreator_Widget::onEditPoint( int theSection, int thePoint ) -{ - if( !myNewPointEditor || !myEdit ) - return; - mySection = theSection; - myPointNum = thePoint; - QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection)); - myNewPointEditor->setEditMode(true); - myNewPointEditor->setSectionName(aSectName); - myNewPointEditor->setDimension( myCurve->getDimension() ); - CurveCreator::Coordinates aCoords = myCurve->getCoordinates(theSection,thePoint); - myNewPointEditor->setCoordinates(aCoords); - emit subOperationStarted( myNewPointEditor ); -} - -void CurveCreator_Widget::onModifyPoint() -{ - if( !myEdit ) - return; - CurveCreator::Coordinates aCoords = myNewPointEditor->getCoordinates(); - myEdit->setCoordinates( aCoords, mySection, myPointNum ); - mySectionView->pointDataChanged( mySection, myPointNum ); - updateUndoRedo(); - onCancelPoint(); + emit curveModified(); } void CurveCreator_Widget::onJoin() { - if( !myEdit ) + if( !myCurve ) return; QList aSections = mySectionView->getSelectedSections(); if( aSections.size() == 0 ){ return; } - int aMainSect = aSections[0]; - int aMainSectSize = myCurve->getNbPoints(aMainSect); - myEdit->startOperation(); - for( int i = 1 ; i < aSections.size() ; i++ ){ - int aSectNum = aSections[i] - (i-1); - myEdit->join( aMainSect, aSectNum ); - mySectionView->sectionsRemoved( aSectNum ); + stopActionMode(); + + std::list aSectionsToJoin; + for( int i = 0; i < aSections.size() ; i++ ){ + aSectionsToJoin.push_back( aSections[i] ); } - myEdit->finishOperation(); + //int aMainSect = aSectionsToJoin.front(); + //int aMainSectSize = myCurve->getNbPoints(aMainSect); + if ( myCurve->join( aSectionsToJoin ) ) + { + std::list::const_iterator anIt = aSectionsToJoin.begin(), + aLast = aSectionsToJoin.end(); + // the first section should be skipped. It is not removed, but is modified + anIt++; + for ( ; anIt != aLast; anIt++ ) + mySectionView->sectionsRemoved( *anIt ); + } + + /* The update for the points of the main section int aNewSectSize = myCurve->getNbPoints(aMainSect); if( aNewSectSize != aMainSectSize ) - mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize ); + mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize );*/ updateUndoRedo(); + + emit curveModified(); } void CurveCreator_Widget::onRemove() { - if( !myEdit ) + if( !myCurve ) return; - QList< QPair > aSelPoints = mySectionView->getSelectedPoints(); - int aCurrSect=-1; - int aRemoveCnt = 0; - myEdit->startOperation(); - for( int i = 0 ; i < aSelPoints.size() ; i++ ){ - if( aCurrSect != aSelPoints[i].first ){ - aRemoveCnt = 0; - aCurrSect = aSelPoints[i].first; - } - int aPntIndx = aSelPoints[i].second - aRemoveCnt; - myEdit->removePoints(aCurrSect,aPntIndx, 1); - mySectionView->pointsRemoved( aCurrSect, aPntIndx ); - aRemoveCnt++; - } - QList aSections = mySectionView->getSelectedSections(); - for( int i = 0 ; i < aSections.size() ; i++ ){ - int aSectNum = aSections[i] - (i); - myEdit->removeSection( aSectNum ); - mySectionView->sectionsRemoved( aSectNum ); - } - myEdit->finishOperation(); - mySectionView->clearSelection(); - updateUndoRedo(); -} -void CurveCreator_Widget::onMoveUp() -{ - if( !myEdit ) - return; - if( mySectionView->getSelectionType() == CurveCreator_TreeView::ST_SECTIONS ){ - //Move sections - QList aSections = mySectionView->getSelectedSections(); - for( int i = 0 ; i < aSections.size() ; i++ ){ - int anIndx = aSections[i]; - myEdit->moveSection( anIndx, anIndx-1); - mySectionView->sectionsSwapped( anIndx, -1 ); - } + switch( getActionMode() ) { + case NoneMode: + removeSection(); + break; + case ModificationMode: + removePoint(); + break; + default: + break; } - else{ - //Move points - QList< QPair > aPoints = mySectionView->getSelectedPoints(); - for( int i = 0 ; i < aPoints.size() ; i++ ){ - int aSection = aPoints[i].first; - int aPoint = aPoints[i].second; - myEdit->movePoint(aSection, aPoint, aPoint-2); - mySectionView->pointsSwapped( aSection, aPoint, -1 ); - } - } - updateUndoRedo(); -} - -void CurveCreator_Widget::onMoveDown() -{ - if( !myEdit ) - return; - if( mySectionView->getSelectionType() == CurveCreator_TreeView::ST_SECTIONS ){ - //Move sections - QList aSections = mySectionView->getSelectedSections(); - for( int i = aSections.size()-1 ; i >=0 ; i-- ){ - int anIndx = aSections[i]; - myEdit->moveSection( anIndx, anIndx+1); - mySectionView->sectionsSwapped( anIndx, 1 ); - } - } - else{ - //Move points - QList< QPair > aPoints = mySectionView->getSelectedPoints(); - for( int i = aPoints.size() - 1; i >= 0 ; i-- ){ - int aSection = aPoints[i].first; - int aPoint = aPoints[i].second; - myEdit->movePoint(aSection, aPoint, aPoint+1); - mySectionView->pointsSwapped( aSection, aPoint, 1 ); - } - } - updateUndoRedo(); } void CurveCreator_Widget::onClearAll() { - if( !myEdit ) + if( !myCurve ) return; - myEdit->clear(); + stopActionMode(); + myCurve->clear(); mySectionView->reset(); - onSelectionChanged(); + updateActionsStates(); updateUndoRedo(); + + emit curveModified(); } void CurveCreator_Widget::onJoinAll() { - if( !myEdit ) + if( !myCurve ) return; - myEdit->join(); + stopActionMode(); + + std::list aSectionsToJoin; + for( int i = 0, aNb = myCurve->getNbSections(); i < aNb ; i++ ){ + aSectionsToJoin.push_back( i ); + } + bool aRes = myCurve->join( aSectionsToJoin ); + mySectionView->reset(); - onSelectionChanged(); + updateActionsStates(); updateUndoRedo(); -} - -void CurveCreator_Widget::onInsertSectionBefore() -{ - -} - -void CurveCreator_Widget::onInsertSectionAfter() -{ - -} - -void CurveCreator_Widget::onInsertPointBefore() -{ - -} - -void CurveCreator_Widget::onInsertPointAfter() -{ + emit curveModified(); } void CurveCreator_Widget::onUndoSettings() @@ -719,104 +713,119 @@ void CurveCreator_Widget::onUndoSettings() void CurveCreator_Widget::onSetSpline() { - if( !myEdit ) + if( !myCurve ) return; + stopActionMode(); QList aSelSections = mySectionView->getSelectedSections(); - myEdit->startOperation(); for( int i = 0 ; i < aSelSections.size() ; i++ ){ - myEdit->setType(CurveCreator::BSpline, aSelSections[i]); + myCurve->setSectionType(aSelSections[i], CurveCreator::Spline ); mySectionView->sectionChanged(aSelSections[i]); } - myEdit->finishOperation(); updateUndoRedo(); + + emit curveModified(); } void CurveCreator_Widget::onSetPolyline() { - if( !myEdit ) + if( !myCurve ) return; - myEdit->startOperation(); + stopActionMode(); QList aSelSections = mySectionView->getSelectedSections(); for( int i = 0 ; i < aSelSections.size() ; i++ ){ - myEdit->setType(CurveCreator::Polyline, aSelSections[i]); - mySectionView->sectionChanged(aSelSections[i]); + myCurve->setSectionType( aSelSections[i], CurveCreator::Polyline ); + mySectionView->sectionChanged( aSelSections[i] ); } - myEdit->finishOperation(); updateUndoRedo(); + + emit curveModified(); } void CurveCreator_Widget::onCloseSections() { - if( !myEdit ) + if( !myCurve ) return; - myEdit->startOperation(); + stopActionMode(); QList aSelSections = mySectionView->getSelectedSections(); for( int i = 0 ; i < aSelSections.size() ; i++ ){ - myEdit->setClosed(true, aSelSections[i]); + myCurve->setClosed(aSelSections[i], true); mySectionView->sectionChanged(aSelSections[i]); } - myEdit->finishOperation(); updateUndoRedo(); + + emit curveModified(); } void CurveCreator_Widget::onUncloseSections() { - if( !myEdit ) + if( !myCurve ) return; - myEdit->startOperation(); + stopActionMode(); QList aSelSections = mySectionView->getSelectedSections(); for( int i = 0 ; i < aSelSections.size() ; i++ ){ - myEdit->setClosed(false, aSelSections[i]); + myCurve->setClosed(aSelSections[i], false); mySectionView->sectionChanged(aSelSections[i]); } - myEdit->finishOperation(); updateUndoRedo(); + + emit curveModified(); } void CurveCreator_Widget::onUndo() { - if( !myEdit ) - return; - myEdit->undo(); - mySectionView->reset(); - updateUndoRedo(); + if( !myCurve ) + return; + + CurveCreator_ICurve::SectionToPointList aPoints; + startCurveModification( aPoints, false ); + myCurve->undo(); + finishCurveModification(); + mySectionView->reset(); + + emit curveModified(); } void CurveCreator_Widget::onRedo() { - if( !myEdit ) - return; - myEdit->redo(); - mySectionView->reset(); - updateUndoRedo(); + if( !myCurve ) + return; + CurveCreator_ICurve::SectionToPointList aPoints; + startCurveModification( aPoints, false ); + myCurve->redo(); + finishCurveModification(); + mySectionView->reset(); + + emit curveModified(); } void CurveCreator_Widget::updateUndoRedo() { - QAction* anAct = myActionMap[UNDO_ID]; - if( anAct != 0 ){ - if( myEdit->getNbUndo() != 0 ){ - anAct->setEnabled(true); - } - else{ - anAct->setDisabled(true); - } + if( !myCurve ) + return; + QAction* anAct = myActionMap[UNDO_ID]; + if( anAct != 0 ){ + if( myCurve->getNbUndo() != 0 ){ + anAct->setEnabled(true); } - anAct = myActionMap[REDO_ID]; - if( anAct != 0 ){ - if( myEdit->getNbRedo() != 0 ){ - anAct->setEnabled(true); - } - else{ - anAct->setDisabled(true); - } + else{ + anAct->setDisabled(true); } + } + anAct = myActionMap[REDO_ID]; + if( anAct != 0 ){ + if( myCurve->getNbRedo() != 0 ){ + anAct->setEnabled(true); + } + else{ + anAct->setDisabled(true); + } + } } void CurveCreator_Widget::onContextMenu( QPoint thePoint ) { QList aContextActions; - aContextActions << CLEAR_ALL_ID << JOIN_ALL_ID << SEPARATOR_ID << + aContextActions << CLEAR_ALL_ID << JOIN_ID << JOIN_ALL_ID << SEPARATOR_ID << CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID << SET_SECTIONS_POLYLINE_ID << SET_SECTIONS_SPLINE_ID; QPoint aGlPoint = mySectionView->mapToGlobal(thePoint); @@ -857,35 +866,111 @@ QList CurveCreator_Widget::getSelectedSections() return mySectionView->getSelectedSections(); } -QList< QPair< int, int > > CurveCreator_Widget::getSelectedPoints() +void CurveCreator_Widget::setSelectedSections( const QList& theSections ) { - return mySectionView->getSelectedPoints(); + mySectionView->setSelectedSections( theSections ); + updateActionsStates(); + updateUndoRedo(); } -bool CurveCreator_Widget::isInstantSketchingEnabled() const +/** + * According to the widget state, performs the remove action + */ +void CurveCreator_Widget::removeSelected() { - if( myNewPointEditor ) - return myNewPointEditor->isInstantSketchingEnabled(); - return false; + onRemove(); } -void CurveCreator_Widget::setInstantSketchingEnabled( const bool theState ) +/** + * Checks whether there are some selection to be removed + */ +bool CurveCreator_Widget::removeEnabled() { - if( myNewPointEditor ) - myNewPointEditor->setInstantSketchingEnabled( theState ); + bool isEnabled = getActionMode() == ModificationMode; + if ( !isEnabled ) { + QList aSelSections = mySectionView->getSelectedSections(); + CurveCreator_TreeView::SelectionType aSelType = mySectionView->getSelectionType(); + isEnabled = aSelType == CurveCreator_TreeView::ST_SECTIONS && + aSelSections.size() == 1; + } + return isEnabled; +} + +void CurveCreator_Widget::setActionMode( const ActionMode& theMode ) +{ + ActionMode aPrevMode = getActionMode(); + QAction* aPrevAction = getAction( aPrevMode ); + QAction* anAction = getAction( theMode ); + switch ( theMode ) { + case NoneMode: + case AdditionMode: { + if ( aPrevAction ) { + if ( aPrevAction->isChecked() ) { + aPrevAction->setChecked( false ); + } + } + if ( aPrevMode == ModificationMode ) + onModificationMode( false ); + if ( aPrevMode == AdditionMode ) + onAdditionMode( false ); + + if ( theMode == AdditionMode ) + { + anAction->setChecked( true ); + onModeChanged( true ); + } + } + break; + break; + case ModificationMode: + { + //TODO + } + break; + case DetectionMode: + break; + } +} + +CurveCreator_Widget::ActionMode CurveCreator_Widget::getActionMode() const +{ + ActionMode aMode = NoneMode; + + if ( myActionMap[ADDITION_MODE_ID]->isChecked() ) + aMode = AdditionMode; + else if ( myActionMap[MODIFICATION_MODE_ID]->isChecked() ) + aMode = ModificationMode; + else if ( myActionMap[DETECTION_MODE_ID]->isChecked() ) + aMode = DetectionMode; + + return aMode; +} + +void CurveCreator_Widget::SetViewer2DMode(const bool To2D) +{ + if (myOCCViewer) { + if (To2D) { + myOld2DMode = OCCViewer_Utilities::setViewer2DMode + (myOCCViewer, OCCViewer_ViewWindow::XYPlane); + } else { + OCCViewer_Utilities::setViewer2DMode(myOCCViewer, myOld2DMode); + } + } } //================================================================================= -// function : GeometryGUI::onGetPointByClick() +// function : GeometryGUI::addCoordsByClick() // purpose : Manage mouse press events in Additon mode //================================================================================= -void CurveCreator_Widget::onGetPointByClick( SUIT_ViewWindow* theViewWindow, QMouseEvent* pe ) +void CurveCreator_Widget::addCoordsByClick( QMouseEvent* pe ) { - if ( myNewPointEditor && theViewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() && - pe->modifiers() != Qt::ControlModifier ) { - OCCViewer_Viewer* anOCCViewer = - ( (OCCViewer_ViewManager*)( theViewWindow->getViewManager() ) )->getOCCViewer(); - Handle(AIS_InteractiveContext) ic = anOCCViewer->getAISContext(); + if (pe->button() != Qt::LeftButton) + return; + + if ( pe->modifiers() != Qt::ControlModifier ) { + Handle(AIS_InteractiveContext) ic = getAISContext(); + if ( ic.IsNull() ) + return; gp_Pnt aPnt; @@ -895,18 +980,9 @@ void CurveCreator_Widget::onGetPointByClick( SUIT_ViewWindow* theViewWindow, QMo else ic->Select(); // New selection - /*TopoDS_Shape aShape; - - ic->InitSelected(); - if ( ic->MoreSelected() ) - aShape = ic->SelectedShape(); - - if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) - aPnt = BRep_Tool::Pnt( TopoDS::Vertex( ic->SelectedShape() ) ); - else*/ { - OCCViewer_ViewPort3d* vp = ((OCCViewer_ViewWindow*)theViewWindow)->getViewPort(); - aPnt = GEOMUtils::ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); + OCCViewer_ViewPort3d* vp = getViewPort(); + aPnt = CurveCreator_Utils::ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); } // set the coordinates into dialog CurveCreator::Coordinates aCoords; @@ -915,28 +991,522 @@ void CurveCreator_Widget::onGetPointByClick( SUIT_ViewWindow* theViewWindow, QMo if ( myCurve->getDimension() == 3 ) { aCoords.push_back( aPnt.Z() ); } - onAddNewPoint(aCoords); -// myNewPointEditor->setCoordinates( aCoords ); + addNewPoint(aCoords); } } -//================================================================================= -// function : GeometryGUI::onPointDrag() -// purpose : Manage mouse move events in Modification mode -//================================================================================= -void CurveCreator_Widget::onPointDrag( SUIT_ViewWindow* theViewWindow, QMouseEvent* pe ) +/** + * Manage mouse press events + * \param theWindow an owner of the signal + * \param theEvent a mouse event + */ +void CurveCreator_Widget::onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent ) { - if ( !(pe->buttons() & Qt::LeftButton) ) + if ( theEvent->button() != Qt::LeftButton ) return; - if ( (pe->pos() - myDragStartPosition).manhattanLength() < QApplication::startDragDistance() ) - return; -/* - QDrag *drag = new QDrag(this); - QMimeData *mimeData = new QMimeData; - - mimeData->setData(mimeType, data); - drag->setMimeData(mimeData); - - Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); - */ + + myPressedX = theEvent->x(); + myPressedY = theEvent->y(); + + switch( getActionMode() ) { + case ModificationMode: { + //store initial cursor position for Drag&Drop + setDragStarted( true, theEvent->pos() ); + break; + } + case AdditionMode: { + addCoordsByClick( theEvent ); + break; + } + default: + break; + } +} + +/** + * Manage mouse release events in Modification mode + * \param theWindow an owner of the signal + * \param theEvent a mouse event + */ +void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent ) +{ + if ( getActionMode() != ModificationMode ) + return; + + if ( myDragStarted ) { + bool isDragged = myDragged; + CurveCreator_ICurve::SectionToPointList aDraggedPoints; + QMap > anInitialDragPointsCoords; + if ( myDragged ) { + aDraggedPoints = myDragPoints; + anInitialDragPointsCoords = myInitialDragPointsCoords; + } + + setDragStarted( false ); + + if ( aDraggedPoints.size() > 0 ) { + // Collect old coordinates of the dragged points + CurveCreator_ICurve::SectionToPointCoordsList anOldPoints; + foreach ( const CurveCreator_ICurve::SectionToPoint aSectionToPoint, anInitialDragPointsCoords.keys() ) { + CurveCreator::Coordinates aCoords = anInitialDragPointsCoords.value( aSectionToPoint ); + anOldPoints.push_back( std::make_pair( aSectionToPoint, aCoords ) ); + } + + if ( myCurve->canPointsBeSorted() ) { + // Add old coordinates of the curve points (except the dragged points) to the list + for( int aSectionId = 0 ; aSectionId < myCurve->getNbSections() ; aSectionId++ ) { + CurveCreator::Coordinates aCoords; + for ( int aPointId = 0, aNb = myCurve->getNbPoints( aSectionId ); aPointId < aNb; aPointId++ ) { + aCoords = myCurve->getPoint( aSectionId, aPointId ); + if ( aCoords.size() < 2 ) { + continue; + } + + CurveCreator_ICurve::SectionToPoint aSectionToPoint = std::make_pair( aSectionId, aPointId ); + + if ( !anInitialDragPointsCoords.contains( aSectionToPoint ) ) { + anOldPoints.push_back( std::make_pair( aSectionToPoint, aCoords ) ); + } + } + } + + // Apply points sorting + CurveCreator_ICurve::SectionToPointList aPoints; + startCurveModification( aPoints, false ); + + myCurve->setSkipSorting( false ); + + CurveCreator_ICurve::SectionToPointCoordsList aCoordList; + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aDraggedPoints.begin(), + aLast = aDraggedPoints.end(); + for ( ; anIt != aLast; anIt++ ) { + int aSectionId = anIt->first; + int aPointId = anIt->second; + std::deque aPos = myCurve->getPoint( aSectionId, aPointId ); + + aCoordList.push_back( + std::make_pair( std::make_pair( aSectionId, aPointId ), aPos ) ); + } + + myCurve->setSeveralPoints( aCoordList, false ); + + finishCurveModification( aDraggedPoints ); + } else { + // if the drag of some points has happened, restore the drag selection + START_MEASURE_TIME; + setSelectedPoints( aDraggedPoints ); + END_MEASURE_TIME( "drop" ); + } + + // Save drag difference + myCurve->saveCoordDiff( anOldPoints ); + } + } + else // check whether the segment is clicked an a new point should be added to the segment + { + int aReleasedX = theEvent->x(); + int aReleasedY = theEvent->y(); + if ( myPressedX == aReleasedX && myPressedY == aReleasedY ) + insertPointToSelectedSegment( aReleasedX, aReleasedY ); + } + + // updates the input panel table to show the selected point coordinates + updateLocalPointView(); + updateUndoRedo(); + + emit curveModified(); +} + +/** + * Manage mouse move events in Modification mode + * \param theWindow an owner of the signal + * \param theEvent a mouse event + */ +void CurveCreator_Widget::onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent ) +{ + if ( getActionMode() != ModificationMode || !myDragStarted ) + return; + + QPoint aPos = theEvent->pos(); + if ( (aPos - myDragStartPosition).manhattanLength() < QApplication::startDragDistance() ) + return; + + START_MEASURE_TIME; + + moveSelectedPoints( aPos.x(), aPos.y() ); + myDragStartPosition = aPos; + + END_MEASURE_TIME( "drag" ); +} + +/** + * Set zero viewer by the last view closed in + * \param theManager a viewer manager + */ +void CurveCreator_Widget::onLastViewClosed( SUIT_ViewManager* theManager ) +{ + myOCCViewer = 0; +} + +void CurveCreator_Widget::onMousePress( QMouseEvent* theEvent ) +{ + onMousePress( 0, theEvent ); +} + +void CurveCreator_Widget::onMouseRelease( QMouseEvent* theEvent ) +{ + onMouseRelease( 0, theEvent ); +} + +void CurveCreator_Widget::onMouseMove( QMouseEvent* theEvent ) +{ + onMouseMove( 0, theEvent ); +} + +void CurveCreator_Widget::onCellChanged( int theRow, int theColumn ) +{ + int aCurrSect = myLocalPointView->getSectionId( theRow ); + int aPntIndex = myLocalPointView->getPointId( theRow ); + + if ( aPntIndex < 0 ) + return; + + CurveCreator_ICurve::SectionToPointList aSelPoints; + startCurveModification( aSelPoints ); + + double aX = myLocalPointView->item( theRow, 2 )->data( Qt::UserRole ).toDouble(); + double anY = myLocalPointView->item( theRow, 3 )->data( Qt::UserRole ).toDouble(); + std::deque aChangedPos; + aChangedPos.push_back( aX ); + aChangedPos.push_back( anY ); + myCurve->setPoint( aCurrSect, aPntIndex, aChangedPos ); + + finishCurveModification( aSelPoints ); + + emit curveModified(); +} + +/** + * Removes a selected section from the curve. Updates undo/redo status + */ +void CurveCreator_Widget::removeSection() +{ + stopActionMode(); + + QList aSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSections.size() ; i++ ){ + int aSectNum = aSections[i] - (i); + myCurve->removeSection( aSectNum ); + mySectionView->sectionsRemoved( aSectNum ); + } + mySectionView->clearSelection(); + updateUndoRedo(); + + emit curveModified(); +} + +/** + * Removes a selected points from the curve. Updates undo/redo status + */ +void CurveCreator_Widget::removePoint() +{ + CurveCreator_ICurve::SectionToPointList aPoints; + getSelectedPoints( aPoints ); + if ( aPoints.size() == 0 ) + return; + + CurveCreator_ICurve::SectionToPointList aSelPoints; + startCurveModification( aSelPoints, false ); + + myCurve->removeSeveralPoints( aPoints ); + finishCurveModification( CurveCreator_ICurve::SectionToPointList() ); + mySectionView->reset(); + + emit curveModified(); +} + +void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords) +{ + if( !myCurve ) + return; + QList aSections = mySectionView->getSelectedSections(); + if( aSections.size() == 0 ){ + return; + } + int aSection = aSections[0]; + myCurve->addPoints(theCoords, aSection); // add to the end of section + mySectionView->pointsAdded( aSection, myCurve->getNbPoints( aSection ) ); + updateActionsStates(); + updateUndoRedo(); + + emit curveModified(); +} + +void CurveCreator_Widget::insertPointToSelectedSegment( const int theX, + const int theY ) +{ + Handle(AIS_InteractiveContext) aContext = getAISContext(); + + OCCViewer_ViewPort3d* aViewPort = getViewPort(); + Handle(V3d_View) aView; + if ( aViewPort ) + aView = aViewPort->getView(); + + if ( aContext.IsNull() || aView.IsNull() ) + return; + gp_Pnt aPoint; + gp_Pnt aPoint1, aPoint2; + Handle(AIS_InteractiveObject) anAISObject = myCurve->getAISObject(); + bool isFoundPoint = CurveCreator_Utils::pointOnObject( aView, anAISObject, theX, theY, + aPoint, aPoint1, aPoint2 ); + if ( !isFoundPoint ) + return; + + // insert the point to the model curve + CurveCreator_ICurve::SectionToPointList aSelPoints; + startCurveModification( aSelPoints ); + + CurveCreator::Coordinates aCoords; + aCoords.push_back( aPoint.X() ); + aCoords.push_back( aPoint.Y() ); + + CurveCreator_ICurve::SectionToPointList aPoints1, aPoints2; + findSectionsToPoints( aPoint1.X(), aPoint1.Y(), aPoints1 ); + findSectionsToPoints( aPoint2.X(), aPoint2.Y(), aPoints2 ); + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aPoints1.begin(), + aLast = aPoints1.end(); + int aSectionId = -1; + // find the indices of the neighbour point + // there can be a case when a new point is added into two sections + int aPoint1Id = -1, aPoint2Id = -1; + for ( ; anIt != aLast && aSectionId < 0; anIt++ ) { + int aSectionCur = anIt->first; + CurveCreator_ICurve::SectionToPointList::const_iterator anIt2 = aPoints2.begin(), + aLast2 = aPoints2.end(); + for ( ; anIt2 != aLast2 && aSectionId < 0; anIt2++ ) { + if ( anIt2->first == aSectionCur ) { + aSectionId = aSectionCur; + aPoint1Id = anIt->second; + aPoint2Id = anIt2->second; + } + } + } + + int anInsertPos = -1; + int aLastPoint = myCurve->getNbPoints( aSectionId )-1; + if ( ( aPoint1Id == aLastPoint && aPoint2Id == 0 ) || + ( aPoint2Id == aLastPoint && aPoint1Id == 0 ) ) + anInsertPos = -1; // if the section happens between first and last points + else + anInsertPos = aPoint1Id < aPoint2Id ? aPoint1Id + 1 : aPoint2Id + 1; + + myCurve->addPoints( aCoords, aSectionId, anInsertPos ); + mySectionView->pointsAdded( aSectionId, myCurve->getNbPoints( aSectionId ) ); + + finishCurveModification( aSelPoints ); + + setSelectedPoints(); + + emit curveModified(); +} + +void CurveCreator_Widget::moveSelectedPoints( const int theXPosition, + const int theYPosition ) +{ + OCCViewer_ViewPort3d* aViewPort = getViewPort(); + if ( !aViewPort ) + return; + + CurveCreator_ICurve::SectionToPointList aPoints; + startCurveModification( aPoints, false ); + + gp_Pnt aStartPnt = CurveCreator_Utils::ConvertClickToPoint( myDragStartPosition.x(), + myDragStartPosition.y(), + aViewPort->getView() ); + gp_Pnt anEndPnt = CurveCreator_Utils::ConvertClickToPoint( theXPosition, theYPosition, + aViewPort->getView() ); + double aXDelta = aStartPnt.X() - anEndPnt.X(); + double anYDelta = aStartPnt.Y() - anEndPnt.Y(); + + CurveCreator_ICurve::SectionToPointCoordsList aCoordList; + std::deque aChangedPos; + CurveCreator_ICurve::SectionToPointList::const_iterator anIt = myDragPoints.begin(), + aLast = myDragPoints.end(); + for ( ; anIt != aLast; anIt++ ) { + int aSectionId = anIt->first; + int aPointId = anIt->second; + aChangedPos = myCurve->getPoint( aSectionId, aPointId ); + if ( aChangedPos.size() < 2 ) + continue; + + // Remember drag points coordinates + if ( !myDragged ) { + myInitialDragPointsCoords.insert( std::make_pair( aSectionId, aPointId ), aChangedPos ); + } + + aChangedPos[0] = aChangedPos[0] - aXDelta; + aChangedPos[1] = aChangedPos[1] - anYDelta; + + aCoordList.push_back( + std::make_pair(std::make_pair( aSectionId, aPointId ), + aChangedPos )); + } + myCurve->setSeveralPoints( aCoordList, false ); + + myDragged = true; + finishCurveModification( myDragPoints ); + + emit curveModified(); +} + +void CurveCreator_Widget::updateLocalPointView() +{ + if ( myDragStarted ) + return; + Handle(AIS_InteractiveContext) aContext = getAISContext(); + if ( aContext.IsNull() ) + return; + + CurveCreator_Utils::getSelectedPoints( aContext, myCurve, myLocalPoints ); + int aNbPoints = myLocalPoints.size(); + + bool isRowLimit = aNbPoints > myLocalPointRowLimit; + myLocalPointView->setVisible( getActionMode() == ModificationMode && !isRowLimit ); + + if ( !isRowLimit ) { + bool isBlocked = myLocalPointView->blockSignals(true); + + myLocalPointView->setLocalPointsToTable( myLocalPoints ); + + myLocalPointView->blockSignals( isBlocked ); + } +} + +/** + * + */ +void CurveCreator_Widget::setLocalPointContext( const bool theOpen, const bool isUpdateTable ) +{ + CurveCreator_Utils::setLocalPointContext( myCurve, getAISContext(), theOpen ); + if ( !theOpen && isUpdateTable ) + updateLocalPointView(); +} + +/** + * Set drag operation started. Save the position and a list of dragged points + * \param theState the drag operation state: started/finished + * \param thePoint the start drag position + */ +void CurveCreator_Widget::setDragStarted( const bool theState, const QPoint& thePoint ) +{ + if ( theState ) { + getSelectedPoints( myDragPoints ); + + myDragStarted = myDragPoints.size(); + myDragStartPosition = thePoint; + if ( myDragStarted ) { + // change a viewer interaction style in order to avoid a select rectangle build + myDragInteractionStyle = changeInteractionStyle( SUIT_ViewModel::KEY_FREE ); + myCurve->setSkipSorting( true ); + } + } + else { + if ( myDragStarted ) + changeInteractionStyle( myDragInteractionStyle ); + myDragStarted = false; + myDragPoints.clear(); + myInitialDragPointsCoords.clear(); + } + myDragged = false; +} + +void CurveCreator_Widget::getSelectedPoints( CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + thePoints.clear(); + thePoints = myLocalPoints; +} + +void CurveCreator_Widget::setSelectedPoints( const CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + if ( myDragStarted ) + return; + Handle(AIS_InteractiveContext) aContext = getAISContext(); + if ( aContext.IsNull() || !aContext->HasOpenedContext() ) + return; + + CurveCreator_Utils::setSelectedPoints( aContext, myCurve, thePoints ); + + updateLocalPointView(); +} + +void CurveCreator_Widget::stopActionMode() +{ + setActionMode( NoneMode ); +} + +/** + * Get viewer information before perform the curve modification. + * Take a list of selected cuve points an close local context. + * The context should be closed because the curve presentation is + * redisplayed and if it is not closed, when we close the local context + * later, the presentation shown in the local context is disappeared. + * \param thePoints an output list of curve selected points + * \param theFillPoints a flag whether the selection list should be filled + */ +void CurveCreator_Widget::startCurveModification( + CurveCreator_ICurve::SectionToPointList& thePoints, + const bool theFillPoints ) +{ + if ( theFillPoints ) { + thePoints.clear(); + getSelectedPoints( thePoints ); + } + setLocalPointContext( false ); +} + +/** + * Restore the viewer state after the curve modification is done. + * Open local context and select given points inside it. + * \param thePoints a list of curve selected points + */ +void CurveCreator_Widget::finishCurveModification( + const CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + if ( getActionMode() == ModificationMode ) + setLocalPointContext( true ); + setSelectedPoints( thePoints ); + updateUndoRedo(); +} + +/** + * Returns a point index in the model curve by the point coordinates in the viewer + * \param theX the X coordinate of the point + * \param theY the Y coordinate of the point + */ +int CurveCreator_Widget::findLocalPointIndex( int theSectionId, float theX, float theY ) +{ + return CurveCreator_UtilsICurve::findLocalPointIndex( myCurve, theSectionId, theX, theY ); +} + +void CurveCreator_Widget::findSectionsToPoints( const double theX, const double theY, + CurveCreator_ICurve::SectionToPointList& thePoints ) +{ + return CurveCreator_UtilsICurve::findSectionsToPoints( myCurve, theX, theY, thePoints ); +} + +void CurveCreator_Widget::convert( const CurveCreator_ICurve::SectionToPointList& thePoints, + QMap >& theConvPoints ) +{ + return CurveCreator_UtilsICurve::convert( thePoints, theConvPoints ); +} + +/** + * Returns whethe the container has the value + * \param theList a container of values + * \param theValue a value + */ +bool CurveCreator_Widget::contains( const CurveCreator_ICurve::SectionToPointList& theList, + const CurveCreator_ICurve::SectionToPoint& theValue ) const +{ + return CurveCreator_UtilsICurve::contains( theList, theValue ); } diff --git a/src/CurveCreator/CurveCreator_Widget.h b/src/CurveCreator/CurveCreator_Widget.h index 7f335e8db..e15e92309 100644 --- a/src/CurveCreator/CurveCreator_Widget.h +++ b/src/CurveCreator/CurveCreator_Widget.h @@ -1,9 +1,9 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. +// 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 @@ -20,101 +20,212 @@ #ifndef CURVECREATOR_WIDGET_H #define CURVECREATOR_WIDGET_H -#include "CurveCreator_Curve.hxx" +#include "CurveCreator_Macro.hxx" #include "CurveCreator.hxx" +#include "CurveCreator_ICurve.hxx" #include #include +#include #include +#include +#include + +#include +#include +#include +#include // TODO - remove + +class OCCViewer_Viewer; +class OCCViewer_ViewPort3d; + +class AIS_ListOfInteractive; class QAction; class QPixmap; -class CurveCreator_CurveEditor; +class CurveCreator_TableView; class CurveCreator_TreeView; -class CurveCreator_NewPointDlg; class CurveCreator_NewSectionDlg; class CURVECREATOR_EXPORT CurveCreator_Widget : public QWidget { - Q_OBJECT + Q_OBJECT + public: - explicit CurveCreator_Widget( QWidget* parent, - CurveCreator_Curve *theCurve, - Qt::WindowFlags fl=0 ); + enum ActionFlags { + NoFlags = 0x00000000, + DisableDetectionMode = 0x00000001, + DisableNewSection = 0x00000002, + DisableClosedSection = 0x00000004 + }; - void setCurve( CurveCreator_Curve* theCurve ); + enum ActionMode { + NoneMode, + AdditionMode, + ModificationMode, + DetectionMode + }; - QList getSelectedSections(); - QList< QPair< int, int > > getSelectedPoints(); +public: + explicit CurveCreator_Widget( QWidget* parent, + CurveCreator_ICurve *theCurve, + const int theActionFlags = NoFlags, + const QStringList& theCoordTitles = QStringList(), + Qt::WindowFlags fl=0, + int theLocalPointRowLimit = 20); - bool isInstantSketchingEnabled() const; - void setInstantSketchingEnabled( const bool theState ); + // OCC viewer manipulation + void setOCCViewer( OCCViewer_Viewer* theViewer ); + + Handle(AIS_InteractiveContext) getAISContext(); + OCCViewer_ViewPort3d* getViewPort(); + int changeInteractionStyle( int theStyle ); + + void reset(); + void setCurve( CurveCreator_ICurve* theCurve ); + + QList getSelectedSections(); + void setSelectedSections( const QList& theSections ); + + void removeSelected(); + bool removeEnabled(); + + void setActionMode( const ActionMode& theMode ); + ActionMode getActionMode() const; + + void SetViewer2DMode(const bool To2D); signals: - void selectionChanged(); - void subOperationStarted( QWidget* ); - void subOperationFinished( QWidget* ); + void selectionChanged(); + void subOperationStarted( QWidget*, bool ); + void subOperationFinished( QWidget* ); + void curveModified(); public slots: protected slots: - void onAdditionMode(bool checked); - void onModificationMode(bool checked); - void onDetectPoints(bool checked); - void onModeChanged(bool checked); - void onNewSection(); - void onSelectionChanged(); - void onAddNewPoint(const CurveCreator::Coordinates& theCoords); - void onAddNewSection(); - void onEditSection( int theSection ); - void onEditPoint( int theSection, int thePoint ); - void onModifyPoint(); - void onModifySection(); - void onCancelPoint(); - void onCancelSection(); - void onJoin(); - void onRemove(); - void onMoveUp(); - void onMoveDown(); - void onClearAll(); - void onJoinAll(); - void onInsertSectionBefore(); - void onInsertSectionAfter(); - void onSetSpline(); - void onSetPolyline(); - void onCloseSections(); - void onUncloseSections(); - void onInsertPointBefore(); - void onInsertPointAfter(); - void onUndo(); - void onRedo(); - void onUndoSettings(); - void onContextMenu(QPoint thePoint); - void onGetPointByClick( SUIT_ViewWindow*, QMouseEvent* ); -// void onPointSelect( SUIT_ViewWindow*, QMouseEvent* ); - void onPointDrag( SUIT_ViewWindow*, QMouseEvent* ); + void onAdditionMode(bool checked); + void onModificationMode(bool checked); + void onDetectionMode(bool checked); + void onModeChanged(bool checked); + void onNewSection(); + void onSelectionChanged(); + void onAddNewSection(); + void onEditSection( int theSection ); + void onModifySection(); + void onCancelSection(); + void onJoin(); + void onRemove(); + void onClearAll(); + void onJoinAll(); + void onSetSpline(); + void onSetPolyline(); + void onCloseSections(); + void onUncloseSections(); + void onUndo(); + void onRedo(); + void onUndoSettings(); + void onContextMenu(QPoint thePoint); + + void onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent ); + void onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent ); + void onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent ); + void onLastViewClosed( SUIT_ViewManager* theManager ); + + void onMousePress( QMouseEvent* theEvent ); + void onMouseRelease( QMouseEvent* theEvent ); + void onMouseMove( QMouseEvent* theEvent ); + + void onCellChanged( int theRow, int theColumn ); + protected: - enum ActionId{ UNDO_ID, REDO_ID, NEW_SECTION_ID, ADDITION_MODE_ID, REMOVE_ID, REMOVE_ALL_ID, JOIN_ID, - JOIN_ALL_ID, UP_ID, DOWN_ID, INSERT_SECTION_BEFORE_ID, INSERT_SECTION_AFTER_ID, - INSERT_POINT_BEFORE_ID, INSERT_POINT_AFTER_ID, CLOSE_SECTIONS_ID, UNCLOSE_SECTIONS_ID, - SET_SECTIONS_POLYLINE_ID, SET_SECTIONS_SPLINE_ID, CLEAR_ALL_ID, SEPARATOR_ID, - MODIFICATION_MODE_ID, DETECTION_MODE_ID }; + void addCoordsByClick( QMouseEvent* ); + +protected: + enum ActionId{ NONE_ID, + UNDO_ID, + REDO_ID, + NEW_SECTION_ID, + ADDITION_MODE_ID, + REMOVE_ID, + REMOVE_ALL_ID, + JOIN_ID, + JOIN_ALL_ID, + CLOSE_SECTIONS_ID, + UNCLOSE_SECTIONS_ID, + SET_SECTIONS_POLYLINE_ID, + SET_SECTIONS_SPLINE_ID, + CLEAR_ALL_ID, + SEPARATOR_ID, + MODIFICATION_MODE_ID, + DETECTION_MODE_ID + }; + private: - QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage, - const QString& theToolTip, const QKeySequence& theShortcut ); - QAction* getAction(ActionId theId); - void updateUndoRedo(); + OCCViewer_Viewer* getOCCViewer(); + + QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage, + const QString& theToolTip, const QKeySequence& theShortcut ); + QAction* getAction(ActionId theId); + QAction* getAction(ActionMode theMode); + + void updateActionsStates(); + void updateUndoRedo(); + + void removeSection(); + void removePoint(); + void addNewPoint(const CurveCreator::Coordinates& theCoords); + void insertPointToSelectedSegment( const int theXPosition, + const int theYPosition ); + void moveSelectedPoints( const int theXPosition, const int theYPosition ); + void updateLocalPointView(); + void setLocalPointContext( const bool theOpen, const bool isUpdateTable = false ); + + void setDragStarted( const bool theState, const QPoint& thePoint = QPoint() ); + + void getSelectedPoints( CurveCreator_ICurve::SectionToPointList& thePoints ); + void setSelectedPoints( const CurveCreator_ICurve::SectionToPointList& = + CurveCreator_ICurve::SectionToPointList() ); + + void stopActionMode(); + + void startCurveModification( CurveCreator_ICurve::SectionToPointList& thePoints, + const bool theFillPoints = true ); + void finishCurveModification( const CurveCreator_ICurve::SectionToPointList& thePoints = + CurveCreator_ICurve::SectionToPointList() ); + + // curve algorithm + int findLocalPointIndex( int theSectionId, float theX, float theY ); + void findSectionsToPoints( const double theX, const double theY, + CurveCreator_ICurve::SectionToPointList& thePoints ); + void convert( const CurveCreator_ICurve::SectionToPointList& thePoints, + QMap >& theConvPoints ); + + bool contains( const CurveCreator_ICurve::SectionToPointList& theList, + const CurveCreator_ICurve::SectionToPoint& theValue ) const; + private: - QMap myActionMap; - CurveCreator_Curve* myCurve; - CurveCreator_CurveEditor* myEdit; - CurveCreator_TreeView* mySectionView; - CurveCreator_NewPointDlg* myNewPointEditor; - CurveCreator_NewSectionDlg* myNewSectionEditor; - int mySection; - int myPointNum; - QPoint myDragStartPosition; + QMap myActionMap; + CurveCreator_ICurve* myCurve; + CurveCreator_TreeView* mySectionView; + CurveCreator_TableView* myLocalPointView; + CurveCreator_ICurve::SectionToPointList myLocalPoints; + CurveCreator_NewSectionDlg* myNewSectionEditor; + OCCViewer_Viewer* myOCCViewer; + int myLocalPointRowLimit; + int mySection; + int myPointNum; + bool myDragStarted; + QPoint myDragStartPosition; + int myDragInteractionStyle; + CurveCreator_ICurve::SectionToPointList myDragPoints; + QMap myInitialDragPointsCoords; + bool myDragged; + QByteArray myGuiState; + int myPressedX; + int myPressedY; + OCCViewer_ViewWindow::Mode2dType myOld2DMode; }; #endif // CURVECREATOR_WIDGET_H diff --git a/src/EntityGUI/CMakeLists.txt b/src/EntityGUI/CMakeLists.txt index 865678ad3..79668add1 100755 --- a/src/EntityGUI/CMakeLists.txt +++ b/src/EntityGUI/CMakeLists.txt @@ -40,6 +40,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GEOMGUI ${PROJECT_SOURCE_DIR}/src/GEOMBase ${PROJECT_SOURCE_DIR}/src/SKETCHER + ${PROJECT_SOURCE_DIR}/src/CurveCreator ${PROJECT_SOURCE_DIR}/src/ShapeRecognition ${PROJECT_SOURCE_DIR}/src/DlgRef ${PROJECT_BINARY_DIR}/src/DlgRef @@ -65,6 +66,7 @@ SET(_link_LIBRARIES GEOM DlgRef GEOMSketcher + CurveCreator ) # optional sources @@ -103,6 +105,7 @@ SET(EntityGUI_HEADERS EntityGUI.h EntityGUI_Widgets.h EntityGUI_SketcherDlg.h + EntityGUI_PolylineDlg.h EntityGUI_3DSketcherDlg.h EntityGUI_IsolineDlg.h EntityGUI_SubShapeDlg.h @@ -115,6 +118,7 @@ SET(_moc_HEADERS EntityGUI_Widgets.h EntityGUI_FieldDlg.h EntityGUI_SketcherDlg.h + EntityGUI_PolylineDlg.h EntityGUI_3DSketcherDlg.h EntityGUI_IsolineDlg.h EntityGUI_SubShapeDlg.h @@ -135,6 +139,7 @@ SET(EntityGUI_SOURCES EntityGUI_Widgets.cxx EntityGUI_FieldDlg.cxx EntityGUI_SketcherDlg.cxx + EntityGUI_PolylineDlg.cxx EntityGUI_3DSketcherDlg.cxx EntityGUI_IsolineDlg.cxx EntityGUI_SubShapeDlg.cxx diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx index b6f36c8ad..3a3bd6297 100644 --- a/src/EntityGUI/EntityGUI.cxx +++ b/src/EntityGUI/EntityGUI.cxx @@ -59,6 +59,7 @@ #include "EntityGUI_FeatureDetectorDlg.h" // Feature Detection #include "EntityGUI_PictureImportDlg.h" // Import Picture in viewer #include "EntityGUI_FieldDlg.h" // Create/Edit Field +#include "EntityGUI_PolylineDlg.h" // Create/Edit 2d polyline #include "GEOMImpl_Types.hxx" @@ -188,6 +189,10 @@ bool EntityGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) SUIT_MessageBox::warning(parent, tr("WRN_WARNING"), tr("NO_FIELD")); break; } + case GEOMOp::Op2dPolylineEditor: // POLYLINE EDITOR + getGeometryGUI()->ActiveWorkingPlane(); + aDlg = new EntityGUI_PolylineDlg( getGeometryGUI(), parent ); + break; default: app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) ); break; diff --git a/src/EntityGUI/EntityGUI_PolylineDlg.cxx b/src/EntityGUI/EntityGUI_PolylineDlg.cxx new file mode 100644 index 000000000..50c12462a --- /dev/null +++ b/src/EntityGUI/EntityGUI_PolylineDlg.cxx @@ -0,0 +1,670 @@ +// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "EntityGUI_PolylineDlg.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +//#define SET_PLANE + +//================================================================================= +// function : Constructor +// purpose : +//================================================================================= +EntityGUI_PolylineDlg::EntityGUI_PolylineDlg + (GeometryGUI* theGeometryGUI, QWidget* parent, bool modal, Qt::WindowFlags fl) + : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl ), + myCurve (0), + myEditorWidget (0), + myAddElementBox (0), + myPlnComboBox (0), + myPlnButton (0), + myPlnSelButton (0), + myWPlaneLineEdit (0), + myPolylineSelButton (0), + myPolylineEdit (0), + myEditCurrentArgument (0) +{ + QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_POLYLINE"))); + QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); + + setWindowTitle(tr("POLYLINE_DLG_TITLE")); + + /***************************************************************/ + mainFrame()->GroupConstructors->setTitle(tr("POLYLINE_TITLE")); + mainFrame()->RadioButton1->setIcon(image0); + mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton3->close(); + + QGroupBox *aGroupBox1 = new QGroupBox(tr("GEOM_CS"), this); + QGridLayout *aPlaneLayout = new QGridLayout(aGroupBox1); + + aPlaneLayout->setSpacing(6); + aPlaneLayout->setMargin(11); + + myPlnComboBox = new QComboBox(aGroupBox1); + aPlaneLayout->addWidget(myPlnComboBox, 0, 0, 1, 3); + + myPlnButton = new QPushButton (aGroupBox1); + myPlnButton->setText( tr( "GEOM_SKETCHER_RESTORE" ) ); + aPlaneLayout->addWidget(myPlnButton, 0, 3); + +#ifdef SET_PLANE + QLabel *aPlaneLbl = new QLabel(tr("GEOM_PLANE"), aGroupBox1); + + myPlnSelButton = new QPushButton (aGroupBox1); + myPlnSelButton->setIcon(image1); + myWPlaneLineEdit = new QLineEdit (aGroupBox1); + myWPlaneLineEdit->setReadOnly(true); +#endif + + QLabel *aPolylineLbl = new QLabel(tr("POLYLINE_IMPORT"), aGroupBox1); + + myPolylineSelButton = new QPushButton (aGroupBox1); + myPolylineSelButton->setIcon(image1); + myPolylineEdit = new QLineEdit (aGroupBox1); + myPolylineEdit->setReadOnly(true); + +#ifdef SET_PLANE + aPlaneLayout->addWidget(aPlaneLbl, 1, 0); + aPlaneLayout->addWidget(myPlnSelButton, 1, 1); + aPlaneLayout->addWidget(myWPlaneLineEdit, 1, 2, 1, 2); +#endif + aPlaneLayout->addWidget(aPolylineLbl, 2, 0); + aPlaneLayout->addWidget(myPolylineSelButton, 2, 1); + aPlaneLayout->addWidget(myPolylineEdit, 2, 2, 1, 2); + + aPlaneLayout->setColumnStretch(2, 1); + + myCurve = new CurveCreator_Curve( CurveCreator::Dim2d ); + myEditorWidget = new CurveCreator_Widget (centralWidget(), myCurve); + myAddElementBox = new QGroupBox (tr("POLYLINE_ADD_SECTION"), centralWidget()); + + QBoxLayout* anAddElementLayout = new QVBoxLayout( myAddElementBox ); + + anAddElementLayout->setMargin( 0 ); + anAddElementLayout->setSpacing( 6 ); + + QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); + + layout->setMargin( 0 ); + layout->setSpacing( 6 ); + layout->addWidget( aGroupBox1 ); + layout->addWidget( myEditorWidget ); + layout->addWidget( myAddElementBox ); + + /***************************************************************/ + + setHelpFileName( "create_polyline_page.html" ); + + /* Initialisations */ + Init(); +} + +//================================================================================= +// function : Destructor +// purpose : +//================================================================================= +EntityGUI_PolylineDlg::~EntityGUI_PolylineDlg() +{ + delete myCurve; +} + +//================================================================================= +// function : Init() +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::Init() +{ + initName(tr("POLYLINE_NAME")); + + SalomeApp_Application *anApp = myGeomGUI->getApp(); + OCCViewer_ViewManager *aViewManager = dynamic_cast + (anApp->getViewManager(OCCViewer_Viewer::Type(), true)); + LightApp_SelectionMgr *aSelMgr = myGeomGUI->getApp()->selectionMgr(); + + myEditorWidget->setOCCViewer(aViewManager ? aViewManager->getOCCViewer() : 0); + + // Init the list of local coordinate system + gp_Pnt aPnt(0., 0., 0.); + gp_Dir aDirN(0., 0., 1.); + gp_Dir aDirX(1., 0., 0.); + gp_Ax3 aLCS(aPnt, aDirN, aDirX); + + //add Global CS + myPlnComboBox->addItem(tr("GEOM_GCS"), false); + myWPlaneList.push_back(GEOM::GeomObjPtr()); + myLCSList.push_back(aLCS); + + connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); + connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); + +#ifdef SET_PLANE + connect(myPlnSelButton, SIGNAL(clicked()), + this, SLOT(SetEditCurrentArgument())); +#endif + connect(myPolylineSelButton, SIGNAL(clicked()), + this, SLOT(SetEditCurrentArgument())); + connect(aSelMgr, SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + connect(myEditorWidget, SIGNAL(subOperationStarted(QWidget*, bool)), + this, SLOT(processStartedSubOperation(QWidget*, bool))); + connect(myEditorWidget, SIGNAL(subOperationFinished(QWidget*)), + this, SLOT(processFinishedSubOperation(QWidget*))); + connect(myEditorWidget, SIGNAL(curveModified()), + this, SLOT(onUpdatePreview())); +#ifdef SET_PLANE + connect(myPlnComboBox, SIGNAL(activated(int)), + this, SLOT(ActivateLocalCS())); + connect(myPlnButton, SIGNAL(clicked()), + this, SLOT(ActivateLocalCS())); +#endif + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); + + myAddElementBox->hide(); + myPolylineSelButton->click(); + SelectionIntoArgument(); +} + +//================================================================================= +// function : Clear +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::Clear() +{ + delete myCurve; + + myCurve = new CurveCreator_Curve( CurveCreator::Dim2d ); + myEditorWidget->setCurve(myCurve); +} + +//================================================================================= +// function : GetCurveParams +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::GetCurveParams(GEOM::ListOfListOfDouble &theCoords, + GEOM::string_array &theNames, + GEOM::short_array &theTypes, + GEOM::ListOfBool &theCloseds) +{ + const int aNbSec = myCurve->getNbSections(); + int i; + int j; + + theCoords.length(aNbSec); + theNames.length(aNbSec); + theTypes.length(aNbSec); + theCloseds.length(aNbSec); + + for (i = 0; i < aNbSec; ++i) { + // Set coordinates + CurveCreator::Coordinates aCoords = myCurve->getPoints(i); + const int aNbPoints = aCoords.size(); + + theCoords[i].length(aNbPoints); + + for (j = 0; j < aNbPoints; ++j) { + theCoords[i][j] = aCoords[j]; + } + + // Set section type + const CurveCreator::SectionType aType = myCurve->getSectionType(i); + + switch (aType) { + case CurveCreator::Spline: + theTypes[i] = GEOM::Interpolation; + break; + case CurveCreator::Polyline: + default: + theTypes[i] = GEOM::Polyline; + break; + } + + // Set section names and closed flags. + theNames[i] = CORBA::string_dup(myCurve->getSectionName(i).c_str()); + theCloseds[i] = myCurve->isClosed(i); + } +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr EntityGUI_PolylineDlg::createOperation() +{ + return getGeomEngine()->GetICurvesOperations( getStudyId() ); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool EntityGUI_PolylineDlg::isValid( QString& msg ) +{ + return true; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool EntityGUI_PolylineDlg::execute( ObjectList& objects ) +{ + GEOM::GEOM_ICurvesOperations_var anOper = + GEOM::GEOM_ICurvesOperations::_narrow(getOperation()); + + // Get the polyline creation parameters. + GEOM::ListOfListOfDouble aCoords; + GEOM::string_array aNames; + GEOM::short_array aTypes; + GEOM::ListOfBool aCloseds; + + GetCurveParams(aCoords, aNames, aTypes, aCloseds); + + // Get Working Plane. + int ind = myPlnComboBox->currentIndex(); + + if (ind != -1) { + bool isPlane = myPlnComboBox->itemData(ind).toBool(); + GEOM::GEOM_Object_var anObj; + + // Perform operation + if (isPlane) { + anObj = anOper->MakePolyline2DOnPlane + (aCoords, aNames, aTypes, aCloseds, myWPlaneList.at(ind).get()); + } else { + gp_Ax3 anAxis = myLCSList.at(ind); + GEOM::ListOfDouble aPlane; + + aPlane.length(9); + aPlane[0] = anAxis.Location().X(); + aPlane[1] = anAxis.Location().Y(); + aPlane[2] = anAxis.Location().Z(); + aPlane[3] = anAxis.Direction().X(); + aPlane[4] = anAxis.Direction().Y(); + aPlane[5] = anAxis.Direction().Z(); + aPlane[6] = anAxis.XDirection().X(); + aPlane[7] = anAxis.XDirection().Y(); + aPlane[8] = anAxis.XDirection().Z(); + + anObj = anOper->MakePolyline2D + (aCoords, aNames, aTypes, aCloseds, aPlane); + } + + if (!anObj->_is_nil()) { + objects.push_back(anObj._retn()); + } + } + + return true; +} + +//================================================================================= +// function : ClickOnOk() +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::ClickOnOk() +{ + setIsApplyAndClose( true ); + + if (ClickOnApply()) + ClickOnCancel(); +} + +//================================================================================= +// function : ClickOnApply() +// purpose : +//================================================================================= +bool EntityGUI_PolylineDlg::ClickOnApply() +{ + if (!onAccept()) + return false; + + initName(); + + return true; +} + +//================================================================================= +// function : ClickOnCancel() +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::ClickOnCancel() +{ + myEditorWidget->SetViewer2DMode(false); + GEOMBase_Skeleton::ClickOnCancel(); +} + +//================================================================================= +// function : processStartedSubOperation +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::processStartedSubOperation( QWidget* theWidget, bool theIsEdit ) +{ + myEditorWidget->setEnabled( false ); + + myAddElementBox->setTitle( theIsEdit ? tr( "POLYLINE_EDIT_SECTION" ) : tr( "POLYLINE_ADD_SECTION" ) ); + QBoxLayout* anAddElementLayout = dynamic_cast( myAddElementBox->layout() ); + anAddElementLayout->addWidget( theWidget ); + + theWidget->show(); + myAddElementBox->show(); +} + + +//================================================================================= +// function : processFinishedSubOperation +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::processFinishedSubOperation( QWidget* theWidget ) +{ + myEditorWidget->setEnabled( true ); + + QBoxLayout* anAddElementLayout = dynamic_cast( myAddElementBox->layout() ); + anAddElementLayout->removeWidget( theWidget ); + + theWidget->hide(); + myAddElementBox->hide(); +} + +//================================================================================= +// function : deleteSelected +// purpose : Redirect the delete action to editor widget +//================================================================================= +void EntityGUI_PolylineDlg::deleteSelected() +{ + myEditorWidget->removeSelected(); +} + +//================================================================================= +// function : deleteEnabled +// purpose : Checks whether there are some to delete +//================================================================================= +bool EntityGUI_PolylineDlg::deleteEnabled() +{ + return myEditorWidget->removeEnabled(); +} + +//================================================================================= +// function : SelectionIntoArgument +// purpose : Called when selection is changed +//================================================================================= +void EntityGUI_PolylineDlg::SelectionIntoArgument() +{ + bool isModified = false; + GEOM::GeomObjPtr aSelectedObject = getSelected(TopAbs_SHAPE); + TopoDS_Shape aShape; + + if (aSelectedObject && GEOMBase::GetShape(aSelectedObject.get(), aShape) && + !aShape.IsNull()) { + QString aName = GEOMBase::GetName(aSelectedObject.get()); + + if (myEditCurrentArgument == myPolylineEdit) { + // Import a curve + CurveCreator_Curve *aNewCurve = + new CurveCreator_Curve(CurveCreator::Dim2d); + gp_Ax3 aLocalCS; + + if (CurveCreator_Utils::constructCurve(aShape, aNewCurve, aLocalCS)) { + // Change the current curve be the new one. + myEditorWidget->setCurve(aNewCurve); + delete myCurve; + myCurve = aNewCurve; + isModified = true; + myPolylineEdit->setText(aName); +#ifdef SET_PLANE + AddLocalCS(aSelectedObject.get(), false, aLocalCS); + myWPlaneLineEdit->clear(); + myPlnSelButton->setDown(false); +#endif + myPolylineSelButton->setDown(true); + } else { + // Does nothing, just clears selection. + delete aNewCurve; + } +#ifdef SET_PLANE + } else if (myEditCurrentArgument == myWPlaneLineEdit) { + // Import planar face. + if (aShape.ShapeType() == TopAbs_FACE) { + // Check if the face is planar + Handle(Geom_Surface) aSurf = BRep_Tool::Surface(TopoDS::Face(aShape)); + GeomLib_IsPlanarSurface aPlanarCheck(aSurf, Precision::Confusion()); + + if (aPlanarCheck.IsPlanar()) { + myWPlaneLineEdit->setText(aName); + myPolylineEdit->clear(); + AddLocalCS(aSelectedObject.get(), true, + WPlaneToLCS(aSelectedObject.get())); + isModified = true; + myPlnSelButton->setDown(true); + myPolylineSelButton->setDown(false); + } + } + + if (!isModified) { + myEditCurrentArgument->setText(tr("GEOM_SKETCHER_WPLANE")); + } +#endif + } + } + + if (!isModified) { + // Does nothing, just clears selection. + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + myGeomGUI->getApp()->selectionMgr()->clearSelected(); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + } +} + +//================================================================================= +// function : SetEditCurrentArgument() +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::SetEditCurrentArgument() +{ + if (sender() == myPlnSelButton) { +#ifdef SET_PLANE + myEditCurrentArgument = myWPlaneLineEdit; + myEditCurrentArgument->setFocus(); + myPlnSelButton->setDown(true); + myPolylineSelButton->setDown(false); +#endif + } else if (sender() == myPolylineSelButton) { + myEditCurrentArgument = myPolylineEdit; + myEditCurrentArgument->setFocus(); +#ifdef SET_PLANE + myPlnSelButton->setDown(false); +#endif + myPolylineSelButton->setDown(true); + } +} + +//================================================================================= +// function : ActivateThisDialog +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::ActivateThisDialog() +{ + GEOMBase_Skeleton::ActivateThisDialog(); + + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); +} + +//================================================================================= +// function : enterEvent() +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::enterEvent (QEvent*) +{ + if (!mainFrame()->GroupConstructors->isEnabled()) + ActivateThisDialog(); +} + +//================================================================================= +// function : onUpdatePreview +// purpose : +//================================================================================= +void EntityGUI_PolylineDlg::onUpdatePreview() +{ + displayPreview(true); +} + +//================================================================================= +// function : ActivateLocalCS +// purpose : Activate & Fit Working plane +//================================================================================= +void EntityGUI_PolylineDlg::ActivateLocalCS() +{ + const int ind = myPlnComboBox->currentIndex(); + + if (ind == 0) { + // Default plane +#ifdef SET_PLANE + myWPlaneLineEdit->clear(); +#endif + myPolylineEdit->clear(); + } else if (ind > 0) { // Skip 0 as it is default + // Update text on line edits. + QString aName = GEOMBase::GetName(GetActiveWPlane().get()); + bool isPlane = myPlnComboBox->itemData(ind).toBool(); + + if (isPlane) { +#ifdef SET_PLANE + myWPlaneLineEdit->setText(aName); +#endif + myPolylineEdit->clear(); + } else { + myPolylineEdit->setText(aName); +#ifdef SET_PLANE + myWPlaneLineEdit->clear(); +#endif + } + } + + gp_Ax3 anAxis = GetActiveLocalCS(); + + myGeomGUI->SetWorkingPlane(anAxis); + myGeomGUI->ActiveWorkingPlane(); +} + +//================================================================================= +// function : GetActiveLocalCS +// purpose : Get Working plane +//================================================================================= +gp_Ax3 EntityGUI_PolylineDlg::GetActiveLocalCS() +{ + const int ind = myPlnComboBox->currentIndex(); + + return ind >= 0 ? myLCSList.at(ind) : myGeomGUI->GetWorkingPlane(); +} + +//================================================================================= +// function : GetActiveWPlane +// purpose : Get Working plane +//================================================================================= +GEOM::GeomObjPtr EntityGUI_PolylineDlg::GetActiveWPlane() +{ + const int ind = myPlnComboBox->currentIndex(); + + return ind >= 0 ? myWPlaneList.at(ind) : GEOM::GeomObjPtr(); +} + +//================================================================================= +// function : AddLocalCS() +// purpose : Add All Coordinates systems in study +//================================================================================= +void EntityGUI_PolylineDlg::AddLocalCS(GEOM::GeomObjPtr theSelectedObject, + const bool IsPlane, + const gp_Ax3 &theLCS) +{ + QString aName = GEOMBase::GetName(theSelectedObject.get()); + + int index = myPlnComboBox->findText(aName, Qt::MatchExactly); + + if (index == -1) { // If the working plane hasn't been added yet + myWPlaneList.push_back(theSelectedObject); + myLCSList.push_back(theLCS); + myPlnComboBox->addItem(aName, QVariant(IsPlane)); + index = myPlnComboBox->count(); + myPlnComboBox->setCurrentIndex(index - 1); + } else { + myPlnComboBox->setCurrentIndex(index); + } + ActivateLocalCS(); +} + +//================================================================================= +// function : WPlaneToLCS ( aWPlane ) +// purpose : +//================================================================================= +gp_Ax3 EntityGUI_PolylineDlg::WPlaneToLCS(GEOM::GeomObjPtr theGeomObj) +{ + TopoDS_Shape aShape = + GEOM_Client::get_client().GetShape(GeometryGUI::GetGeomGen(), theGeomObj.get()); + gp_Ax3 aLCS; + + if (theGeomObj || aShape.IsNull()) { + MESSAGE("CORBA::is_nil(theGeomObj) || aShape.IsNull()") + } + + aLCS.Transform(aShape.Location().Transformation()); + + if (aShape.ShapeType() == TopAbs_FACE) { + GEOM::GEOM_IMeasureOperations_ptr aMeasureOp = + myGeomGUI->GetGeomGen()->GetIMeasureOperations(getStudyId()); + double Ox, Oy, Oz, Zx, Zy, Zz, Xx, Xy, Xz; + + aMeasureOp->GetPosition(theGeomObj.get(), Ox, Oy, Oz, Zx, Zy, Zz, Xx, Xy, Xz); + + if (aMeasureOp->IsDone()) { + gp_Pnt aPnt (Ox, Oy, Oz); + gp_Dir aDirN (Zx, Zy, Zz); + gp_Dir aDirX (Xx, Xy, Xz); + aLCS = gp_Ax3(aPnt, aDirN, aDirX); + } + } + + return aLCS; +} diff --git a/src/EntityGUI/EntityGUI_PolylineDlg.h b/src/EntityGUI/EntityGUI_PolylineDlg.h new file mode 100644 index 000000000..6f7b009a5 --- /dev/null +++ b/src/EntityGUI/EntityGUI_PolylineDlg.h @@ -0,0 +1,152 @@ +// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef ENTITYGUI_POLYLINEDLG_H +#define ENTITYGUI_POLYLINEDLG_H + + +#include + +class CurveCreator_Curve; +class CurveCreator_Widget; +class QGroupBox; +class QComboBox; + + +//================================================================================= +// class : EntityGUI_PolylineDlg +// purpose : +//================================================================================= +class EntityGUI_PolylineDlg : public GEOMBase_Skeleton +{ + Q_OBJECT + +public: + + EntityGUI_PolylineDlg (GeometryGUI*, QWidget* = 0, + bool = false, Qt::WindowFlags = 0); + + virtual ~EntityGUI_PolylineDlg(); + + void deleteSelected(); + bool deleteEnabled(); + +protected: + + // redefined from GEOMBase_Helper + virtual GEOM::GEOM_IOperations_ptr createOperation(); + virtual bool isValid( QString& ); + virtual bool execute( ObjectList& ); + +private: + + void Init(); + void Clear(); + void enterEvent(QEvent *); + + /** + * This method converts the curve into curve parameters required to + * construct an object using the interface + * GEOM_ICurvesOperations::MakePolyline2DOnPlane. + * + * \param theCurve a curve object, that contains data. + * \param theCoordsList the list of coordinates list. theCoordsList[0] + * is the coordinates list of the first section. theCoordsList[1] + * is for the second section etc. Output parameter. + * \param theNamesList the list of names. The order corresponds to + * theCoordsList. Output parameter. + * \param theTypesList the list of curve types. The order corresponds to + * theCoordsList. Output parameter. + * \param theClosedList the list of Closed flags. The order corresponds to + * theCoordsList. Output parameter. + */ + void GetCurveParams(GEOM::ListOfListOfDouble &theCoords, + GEOM::string_array &theNames, + GEOM::short_array &theTypes, + GEOM::ListOfBool &theCloseds); + + /** + * This method returns the current local coordinate system. + * + * \return local coordinate system. + */ + gp_Ax3 GetActiveLocalCS(); + + /** + * This method returns the current working plane. Can be null. + * + * \return the current working plane. + */ + GEOM::GeomObjPtr GetActiveWPlane(); + + /** + * This method add a local coordinate system of the selected object. + * + * \param theSelectedObject the selected object. It can be a planar face + * or an inported polyline. + * \param IsPlane true for planar face; false for imported polyline. + * \param theLCS the local coordinate system. + */ + void AddLocalCS(GEOM::GeomObjPtr theSelectedObject, + const bool IsPlane, + const gp_Ax3 &theLCS); + + /** + * This method converts the working plane object into + * the local coordinate system of the polyline. + * + * \param theGeomObj the working plane + * \return the local coordinate system + */ + gp_Ax3 WPlaneToLCS(GEOM::GeomObjPtr theGeomObj); + +protected slots: + + void ClickOnOk(); + bool ClickOnApply(); + void ClickOnCancel(); + void processStartedSubOperation( QWidget*, bool ); + void processFinishedSubOperation( QWidget* ); + void SetEditCurrentArgument(); + void SelectionIntoArgument(); + void ActivateThisDialog(); + void onUpdatePreview(); + void ActivateLocalCS(); + +private: + + CurveCreator_Curve *myCurve; + CurveCreator_Widget *myEditorWidget; + QGroupBox *myAddElementBox; + QComboBox *myPlnComboBox; + QPushButton *myPlnButton; + QPushButton *myPlnSelButton; + QPushButton *myPolylineSelButton; + QLineEdit *myWPlaneLineEdit; + QLineEdit *myPolylineEdit; + QLineEdit *myEditCurrentArgument; /* Current LineEdit */ + QList myLCSList; + QList myWPlaneList; + +}; + +#endif // ENTITYGUI_POLYLINEDLG_H diff --git a/src/GEOM/GEOM_Function.cxx b/src/GEOM/GEOM_Function.cxx index c141e2e4c..458e0a0bc 100644 --- a/src/GEOM/GEOM_Function.cxx +++ b/src/GEOM/GEOM_Function.cxx @@ -36,6 +36,8 @@ #include #include #include +#include +#include #include #include #include @@ -474,6 +476,74 @@ Handle(TColStd_HArray1OfInteger) GEOM_Function::GetIntegerArray(int thePosition) return anIntegerArray->Array(); } +//============================================================================= +/*! + * SetByteArray + */ +//============================================================================= +void GEOM_Function::SetByteArray (int thePosition, + const Handle(TColStd_HArray1OfByte)& theArray) +{ + _isDone = false; + if(thePosition <= 0) return; + TDF_Label anArgLabel = ARGUMENT(thePosition); + Handle(TDataStd_ByteArray) anAttr = + TDataStd_ByteArray::Set(anArgLabel, theArray->Lower(), theArray->Upper()); + anAttr->ChangeArray(theArray); + _isDone = true; +} + +//============================================================================= +/*! + * GetByteArray + */ +//============================================================================= +Handle(TColStd_HArray1OfByte) GEOM_Function::GetByteArray(int thePosition) +{ + _isDone = false; + if(thePosition <= 0) return 0; + Handle(TDataStd_ByteArray) aByteArray; + TDF_Label anArgLabel = ARGUMENT(thePosition); + if(!anArgLabel.FindAttribute(TDataStd_ByteArray::GetID(), aByteArray)) return 0; + + _isDone = true; + return aByteArray->InternalArray(); +} + +//============================================================================= +/*! + * SetBooleanArray + */ +//============================================================================= +void GEOM_Function::SetBooleanArray (int thePosition, + const Handle(TColStd_HArray1OfByte)& theArray) +{ + _isDone = false; + if(thePosition <= 0) return; + TDF_Label anArgLabel = ARGUMENT(thePosition); + Handle(TDataStd_BooleanArray) anAttr = + TDataStd_BooleanArray::Set(anArgLabel, theArray->Lower(), theArray->Upper()); + anAttr->SetInternalArray(theArray); + _isDone = true; +} + +//============================================================================= +/*! + * GetBooleanArray + */ +//============================================================================= +Handle(TColStd_HArray1OfByte) GEOM_Function::GetBooleanArray(int thePosition) +{ + _isDone = false; + if(thePosition <= 0) return 0; + Handle(TDataStd_BooleanArray) aBooleanArray; + TDF_Label anArgLabel = ARGUMENT(thePosition); + if(!anArgLabel.FindAttribute(TDataStd_BooleanArray::GetID(), aBooleanArray)) return 0; + + _isDone = true; + return aBooleanArray->InternalArray(); +} + //============================================================================= /*! * SetString diff --git a/src/GEOM/GEOM_Function.hxx b/src/GEOM/GEOM_Function.hxx index 702acb959..688324dae 100644 --- a/src/GEOM/GEOM_Function.hxx +++ b/src/GEOM/GEOM_Function.hxx @@ -32,6 +32,7 @@ #include #include +class Handle_TColStd_HArray1OfByte; class Handle_TColStd_HArray1OfReal; class Handle_TColStd_HArray1OfInteger; class Handle_TColStd_HSequenceOfTransient; @@ -108,6 +109,18 @@ public: //Returns an integer array argument at position thePosition Standard_EXPORT Handle(TColStd_HArray1OfInteger) GetIntegerArray(int thePosition); + //Sets a byte array argument at position thePosition + Standard_EXPORT void SetByteArray(int thePosition, const Handle(TColStd_HArray1OfByte)& theArray); + + //Returns a byte array argument at position thePosition + Standard_EXPORT Handle(TColStd_HArray1OfByte) GetByteArray(int thePosition); + + //Sets a boolean array argument at position thePosition + Standard_EXPORT void SetBooleanArray(int thePosition, const Handle(TColStd_HArray1OfByte)& theArray); + + //Returns a boolean array argument at position thePosition + Standard_EXPORT Handle(TColStd_HArray1OfByte) GetBooleanArray(int thePosition); + //Sets a reference to other function argument at position thePosition Standard_EXPORT void SetReference(int thePosition, Handle(GEOM_Function) theReference); diff --git a/src/GEOMGUI/GEOM_images.ts b/src/GEOMGUI/GEOM_images.ts index 115e51e67..40c06a632 100644 --- a/src/GEOMGUI/GEOM_images.ts +++ b/src/GEOMGUI/GEOM_images.ts @@ -1215,6 +1215,10 @@ ICO_SHELL_SEL_ONLY build_shell.png
    + + ICO_CURVE_CREATOR + polyline.png + ICO_SKETCH sketch.png diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 89480676b..754afda3d 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2366,7 +2366,15 @@ Please, select face, shell or solid and try again MEN_CURVE_CREATOR - Curve creator + 2D Polyline + + + TOP_CURVE_CREATOR + Create 2D polyline + + + STB_CURVE_CREATOR + Create 2D polyline MEN_ALL_SEL_ONLY @@ -5163,6 +5171,22 @@ shells and solids on the other hand. TOOL_IMPORTEXPORT Import / Export XAO + + TABLE_SECTION + Section + + + TABLE_INDEX + Index + + + TABLE_X + X + + + TABLE_Y + Y +
    BasicGUI_CurveDlg @@ -5404,74 +5428,39 @@ shells and solids on the other hand. Face 2 V - - CurveCreator_NewPointDlg - - ADD_NEW_POINT - Add new points - - - X_COORD - X - - - Y_COORD - Y - - - Z_COORD - Z - - - ADD_BTN - Add - - - ADD_CONTINUE_BTN - Add and continue - - - ADD_NEW_POINT_TO_%1 - Add new point to %1 - - - SET_POINT_COORDINATES - Set point coordinates - - CurveCreator_NewSectionDlg - NAME + SECTION_NAME Name - LINE_TYPE + SECTION_LINE_TYPE Type - POLYLINE_TYPE + SECTION_POLYLINE_TYPE Polyline - SPLINE_TYPE + SECTION_SPLINE_TYPE Spline - LINE_CLOSED + SECTION_LINE_CLOSED Closed - OK - Ok - - - ADD_BTN + SECTION_ADD_BTN Add - ADD_CONTINUE_BTN - Add and continue + SECTION_OK_BTN + Ok + + + SECTION_CANCEL_BTN + Cancel ADD_NEW_SECTION @@ -5496,11 +5485,7 @@ shells and solids on the other hand. CurveCreator_Widget - CURVE_NAME_TLT - Name - - - SECTION_GROUP_TLT + SECTION_GROUP_TITLE Sections @@ -5527,22 +5512,6 @@ shells and solids on the other hand. NEW_SECTION_TLT Insert new section - - INSERT_SECTION_BEFORE - Insert section before - - - INSERT_SECTION_BEFORE_TLT - Insert section before - - - INSERT_SECTION_AFTER - Insert section after - - - INSERT_SECTION_AFTER_TLT - Insert section after - ADDITION_MODE Addition mode @@ -5567,18 +5536,6 @@ shells and solids on the other hand. DETECTION_MODE_TLT Detection mode - - INSERT_POINT_BEFORE - Insert point before - - - INSERT_POINT_BEFORE_TLT - Insert point before - - - INSERT_POINT_AFTER - Insert point after - CLOSE_SECTIONS Set closed @@ -5627,22 +5584,6 @@ shells and solids on the other hand. JOIN_TLT Join selected sections - - STEP_UP - Move up - - - STEP_UP_TLT - Move selected objects up - - - STEP_DOWN - Move down - - - STEP_DOWN_TLT - Move selected objects down - CLEAR_ALL Clear all @@ -5660,6 +5601,33 @@ shells and solids on the other hand. Join all sections + + EntityGUI_PolylineDlg + + POLYLINE_DLG_TITLE + Polyline Construction + + + POLYLINE_TITLE + Polyline + + + POLYLINE_NAME + Polyline + + + POLYLINE_IMPORT + Import polyline + + + POLYLINE_ADD_SECTION + Add section + + + POLYLINE_EDIT_SECTION + Edit section + + EntityGUI_SketcherDlg diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 2b3b7ca83..d3d37411c 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -561,6 +561,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD + case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR libName = "EntityGUI"; break; case GEOMOp::OpEdge: // MENU BUILD - EDGE @@ -600,10 +601,6 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT -#ifdef DEBUG_CURVE_CREATOR - // for debug purposes, to be removed - case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR -#endif libName = "OperationGUI"; break; case GEOMOp::OpSewing: // MENU REPAIR - SEWING @@ -941,6 +938,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" ); #endif createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" ); + createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" ); createGeomAction( GEOMOp::OpEdge, "EDGE" ); createGeomAction( GEOMOp::OpWire, "WIRE" ); @@ -973,10 +971,6 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" ); createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" ); createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" ); -#ifdef DEBUG_CURVE_CREATOR - // for debug purposes, to be removed - createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" ); -#endif createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" ); createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" ); @@ -1106,19 +1100,20 @@ void GeometryGUI::initialize( CAM_Application* app ) int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 ); int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 ); - createMenu( GEOMOp::OpPoint, basicId, -1 ); - createMenu( GEOMOp::OpLine, basicId, -1 ); - createMenu( GEOMOp::OpCircle, basicId, -1 ); - createMenu( GEOMOp::OpEllipse, basicId, -1 ); - createMenu( GEOMOp::OpArc, basicId, -1 ); - createMenu( GEOMOp::OpCurve, basicId, -1 ); - createMenu( GEOMOp::Op2dSketcher, basicId, -1 ); - createMenu( GEOMOp::Op3dSketcher, basicId, -1 ); - createMenu( GEOMOp::OpIsoline, basicId, -1 ); - createMenu( separator(), basicId, -1 ); - createMenu( GEOMOp::OpVector, basicId, -1 ); - createMenu( GEOMOp::OpPlane, basicId, -1 ); - createMenu( GEOMOp::OpLCS, basicId, -1 ); + createMenu( GEOMOp::OpPoint, basicId, -1 ); + createMenu( GEOMOp::OpLine, basicId, -1 ); + createMenu( GEOMOp::OpCircle, basicId, -1 ); + createMenu( GEOMOp::OpEllipse, basicId, -1 ); + createMenu( GEOMOp::OpArc, basicId, -1 ); + createMenu( GEOMOp::OpCurve, basicId, -1 ); + createMenu( GEOMOp::Op2dSketcher, basicId, -1 ); + createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 ); + createMenu( GEOMOp::Op3dSketcher, basicId, -1 ); + createMenu( GEOMOp::OpIsoline, basicId, -1 ); + createMenu( separator(), basicId, -1 ); + createMenu( GEOMOp::OpVector, basicId, -1 ); + createMenu( GEOMOp::OpPlane, basicId, -1 ); + createMenu( GEOMOp::OpLCS, basicId, -1 ); createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 ); int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 ); @@ -1224,11 +1219,6 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::OpChamfer, operId, -1 ); createMenu( GEOMOp::OpExtrudedBoss, operId, -1 ); createMenu( GEOMOp::OpExtrudedCut, operId, -1 ); -#ifdef DEBUG_CURVE_CREATOR - // for debug purposes, to be removed - createMenu( separator(), operId, -1 ); - createMenu( GEOMOp::OpCurveCreator, operId, -1 ); -#endif //createMenu( GEOMOp::OpClipping, operId, -1 ); int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 ); @@ -1319,18 +1309,19 @@ void GeometryGUI::initialize( CAM_Application* app ) // ---- create toolbars -------------------------- int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) ); - createTool( GEOMOp::OpPoint, basicTbId ); - createTool( GEOMOp::OpLine, basicTbId ); - createTool( GEOMOp::OpCircle, basicTbId ); - createTool( GEOMOp::OpEllipse, basicTbId ); - createTool( GEOMOp::OpArc, basicTbId ); - createTool( GEOMOp::OpCurve, basicTbId ); - createTool( GEOMOp::OpVector, basicTbId ); - createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc - createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc - createTool( GEOMOp::OpIsoline, basicTbId ); - createTool( GEOMOp::OpPlane, basicTbId ); - createTool( GEOMOp::OpLCS, basicTbId ); + createTool( GEOMOp::OpPoint, basicTbId ); + createTool( GEOMOp::OpLine, basicTbId ); + createTool( GEOMOp::OpCircle, basicTbId ); + createTool( GEOMOp::OpEllipse, basicTbId ); + createTool( GEOMOp::OpArc, basicTbId ); + createTool( GEOMOp::OpCurve, basicTbId ); + createTool( GEOMOp::OpVector, basicTbId ); + createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc + createTool( GEOMOp::Op2dPolylineEditor, basicTbId ); + createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc + createTool( GEOMOp::OpIsoline, basicTbId ); + createTool( GEOMOp::OpPlane, basicTbId ); + createTool( GEOMOp::OpLCS, basicTbId ); createTool( GEOMOp::OpOriginAndVectors, basicTbId ); // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) ); @@ -1390,10 +1381,6 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpChamfer, featTbId ); createTool( GEOMOp::OpExtrudedBoss, featTbId ); createTool( GEOMOp::OpExtrudedCut, featTbId ); -#ifdef DEBUG_CURVE_CREATOR - // for debug purposes, to be removed - createTool( GEOMOp::OpCurveCreator, featTbId ); -#endif int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) ); createTool( GEOMOp::OpEdge, buildTbId ); diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index f392e4df6..f66c19df1 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -119,6 +119,7 @@ namespace GEOMOp { OpCreateField = 3305, // MENU FIELD - CREATE FIELD OpEditField = 3306, // MENU FIELD - EDIT FIELD OpEditFieldPopup = 3307, // POPUP MENU - EDIT FIELD + Op2dPolylineEditor = 3308, // MENU NEW ENTITY - BASIC - POLYLINE EDITOR // BuildGUI --------------------//-------------------------------- OpEdge = 3400, // MENU NEW ENTITY - BUILD - EDGE OpWire = 3401, // MENU NEW ENTITY - BUILD - WIRE @@ -154,10 +155,6 @@ namespace GEOMOp { OpSharedShapes = 3708, // MENU OPERATION - GET SHARED SHAPES OpExtrudedBoss = 3709, // MENU OPERATION - ETRUDED BOSS OpExtrudedCut = 3710, // MENU OPERATION - ETRUDED CUT -#ifdef DEBUG_CURVE_CREATOR - OpCurveCreator = 3799, // MENU OPERATION - CURVE CREATOR -#endif - // for debug purposes, to be removed // RepairGUI -------------------//-------------------------------- OpSewing = 4000, // MENU REPAIR - SEWING OpSuppressFaces = 4001, // MENU REPAIR - SUPPRESS FACES diff --git a/src/GEOMImpl/CMakeLists.txt b/src/GEOMImpl/CMakeLists.txt index 0fb145931..a09066811 100755 --- a/src/GEOMImpl/CMakeLists.txt +++ b/src/GEOMImpl/CMakeLists.txt @@ -74,6 +74,7 @@ SET(GEOMImpl_HEADERS GEOMImpl_PointDriver.hxx GEOMImpl_IPoint.hxx GEOMImpl_IPolyline.hxx + GEOMImpl_IPolyline2D.hxx GEOMImpl_ICircle.hxx GEOMImpl_ISpline.hxx GEOMImpl_IEllipse.hxx @@ -150,6 +151,7 @@ SET(GEOMImpl_HEADERS GEOMImpl_Block6Explorer.hxx GEOMImpl_MeasureDriver.hxx GEOMImpl_PolylineDriver.hxx + GEOMImpl_PolylineDumper.hxx GEOMImpl_CircleDriver.hxx GEOMImpl_EllipseDriver.hxx GEOMImpl_ArcDriver.hxx @@ -192,6 +194,7 @@ SET(GEOMImpl_SOURCES GEOMImpl_IGroupOperations.cxx GEOMImpl_IFieldOperations.cxx GEOMImpl_IBaseIEOperations.cxx + GEOMImpl_IPolyline2D.cxx GEOMImpl_Gen.cxx GEOMImpl_PointDriver.cxx GEOMImpl_VectorDriver.cxx @@ -221,6 +224,7 @@ SET(GEOMImpl_SOURCES GEOMImpl_Block6Explorer.cxx GEOMImpl_MeasureDriver.cxx GEOMImpl_PolylineDriver.cxx + GEOMImpl_PolylineDumper.cxx GEOMImpl_CircleDriver.cxx GEOMImpl_EllipseDriver.cxx GEOMImpl_ArcDriver.cxx diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx index df1c543e7..f6c452b95 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx @@ -51,6 +51,7 @@ #include "GEOMImpl_3DSketcherDriver.hxx" #include "GEOMImpl_IPolyline.hxx" +#include "GEOMImpl_IPolyline2D.hxx" #include "GEOMImpl_ICircle.hxx" #include "GEOMImpl_ISpline.hxx" #include "GEOMImpl_IEllipse.hxx" @@ -59,12 +60,14 @@ #include "GEOMImpl_I3DSketcher.hxx" #include "GEOMImpl_ICurveParametric.hxx" #include "GEOMImpl_IIsoline.hxx" +#include "GEOMImpl_PolylineDumper.hxx" #include #include "utilities.h" #include +#include #include #include @@ -1465,3 +1468,155 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeIsoline SetErrorCode(OK); return anIsoline; } + +//============================================================================= +/*! + * MakePolyline2D + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline2D + (const std::list > &theCoords, + const Handle(TColStd_HArray1OfExtendedString) &theNames, + const Handle(TColStd_HArray1OfByte) &theTypes, + const Handle(TColStd_HArray1OfByte) &theCloseds, + const Handle(TColStd_HArray1OfReal) &theWorkingPlane) +{ + SetErrorCode(KO); + + if (theCoords.empty() || theNames.IsNull() || theTypes.IsNull() || + theCloseds.IsNull() || theWorkingPlane.IsNull()) { + return NULL; + } + + // Add a new Polyline object + Handle(GEOM_Object) aResult = + GetEngine()->AddObject(GetDocID(), GEOM_POLYLINE2D); + Handle(GEOM_Function) aFunction = aResult->AddFunction + (GEOMImpl_PolylineDriver::GetID(), POLYLINE2D_PLN_COORDS); + + if (aFunction.IsNull()) { + return NULL; + } + + // Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_PolylineDriver::GetID()) { + return NULL; + } + + GEOMImpl_IPolyline2D aCI(aFunction); + + aCI.SetCoords(theCoords); + aCI.SetNames(theNames); + aCI.SetTypes(theTypes); + aCI.SetClosedFlags(theCloseds); + aCI.SetWorkingPlaneDbls(theWorkingPlane); + + // Compute the isoline curve + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Polyline driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOMImpl_PolylineDumper aDumper(theCoords, theNames, theTypes, + theCloseds, theWorkingPlane); + + aDumper.Dump(aResult); + + if (aDumper.IsDone() == Standard_False) { + SetErrorCode("Python dump failed"); + return NULL; + } + + SetErrorCode(OK); + return aResult; +} + +//============================================================================= +/*! + * MakePolyline2DOnPlane + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline2DOnPlane + (const std::list > &theCoords, + const Handle(TColStd_HArray1OfExtendedString) &theNames, + const Handle(TColStd_HArray1OfByte) &theTypes, + const Handle(TColStd_HArray1OfByte) &theCloseds, + const Handle(GEOM_Object) &theWorkingPlane) +{ + SetErrorCode(KO); + + if (theCoords.empty() || theNames.IsNull() || theTypes.IsNull() || + theCloseds.IsNull() || theWorkingPlane.IsNull()) { + return NULL; + } + + //Add a new Polyline object + Handle(GEOM_Object) aResult = + GetEngine()->AddObject(GetDocID(), GEOM_POLYLINE2D); + Handle(GEOM_Function) aFunction = aResult->AddFunction + (GEOMImpl_PolylineDriver::GetID(), POLYLINE2D_PLN_OBJECT); + + if (aFunction.IsNull()) { + return NULL; + } + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_PolylineDriver::GetID()) { + return NULL; + } + + Handle(GEOM_Function) aRefPlane = theWorkingPlane->GetLastFunction(); + + if (aRefPlane.IsNull()) { + return NULL; + } + + GEOMImpl_IPolyline2D aCI(aFunction); + + aCI.SetCoords(theCoords); + aCI.SetNames(theNames); + aCI.SetTypes(theTypes); + aCI.SetClosedFlags(theCloseds); + aCI.SetWorkingPlane(aRefPlane); + + //Compute the isoline curve + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Polyline driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOMImpl_PolylineDumper aDumper(theCoords, theNames, theTypes, + theCloseds, theWorkingPlane); + + aDumper.Dump(aResult); + + if (aDumper.IsDone() == Standard_False) { + SetErrorCode("Python dump failed"); + return NULL; + } + + SetErrorCode(OK); + return aResult; +} diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx index 15591a64f..fe4278cc6 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx @@ -100,6 +100,19 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations { const bool IsUIso, const double theParameter); + Standard_EXPORT Handle(GEOM_Object) MakePolyline2D + (const std::list > &theCoords, + const Handle(TColStd_HArray1OfExtendedString) &theNames, + const Handle(TColStd_HArray1OfByte) &theTypes, + const Handle(TColStd_HArray1OfByte) &theCloseds, + const Handle(TColStd_HArray1OfReal) &theWorkingPlane); + + Standard_EXPORT Handle(GEOM_Object) MakePolyline2DOnPlane + (const std::list > &theCoords, + const Handle(TColStd_HArray1OfExtendedString) &theNames, + const Handle(TColStd_HArray1OfByte) &theTypes, + const Handle(TColStd_HArray1OfByte) &theCloseds, + const Handle(GEOM_Object) &theWorkingPlane); }; #endif diff --git a/src/GEOMImpl/GEOMImpl_IPolyline2D.cxx b/src/GEOMImpl/GEOMImpl_IPolyline2D.cxx new file mode 100644 index 000000000..eb1bcfdd7 --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_IPolyline2D.cxx @@ -0,0 +1,112 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + + +#include "GEOMImpl_IPolyline2D.hxx" + +#include + + +//============================================================================= +/*! + * SetCoords + */ +//============================================================================= +void GEOMImpl_IPolyline2D::SetCoords + (const std::list > &theValue) +{ + const Standard_Integer aNbSec = theValue.size(); + + if (aNbSec > 0) { + // Compute the total number of points and fill the array of start indices. + Standard_Integer i; + Standard_Integer aNbCoords = 0; + Handle(TColStd_HArray1OfInteger) anIndices = + new TColStd_HArray1OfInteger(1, aNbSec); + Handle(TColStd_HArray1OfReal) aCoords; + std::list >::const_iterator aSecIter = theValue.begin(); + + for (i = 1; aSecIter != theValue.end(); ++aSecIter, ++i) { + anIndices->SetValue(i, aNbCoords + 1); + aNbCoords += aSecIter->size(); + } + + if (aNbCoords > 0) { + // Fill the array of coordinates. + std::list::const_iterator aCIter; + + aCoords = new TColStd_HArray1OfReal(1, aNbCoords); + aSecIter = theValue.begin(); + + for (i = 1; aSecIter != theValue.end(); ++aSecIter) { + for (aCIter = aSecIter->begin(); aCIter != aSecIter->end(); ++aCIter) { + aCoords->SetValue(i++, *aCIter); + } + } + } + + // Store the coordinates. + if (aCoords.IsNull() == Standard_False) { + _func->SetRealArray(POLY_ARG_COORDS, aCoords); + } + + _func->SetIntegerArray(POLY_ARG_START_INDICES, anIndices); + } +} + +//============================================================================= +/*! + * GetCoords + */ +//============================================================================= +void GEOMImpl_IPolyline2D::GetCoords(std::list > &theValue) +{ + theValue.clear(); + + Handle(TColStd_HArray1OfReal) aCoords = + _func->GetRealArray(POLY_ARG_COORDS); + Handle(TColStd_HArray1OfInteger) anIndices = + _func->GetIntegerArray(POLY_ARG_START_INDICES); + + if (anIndices.IsNull() == Standard_False) { + const Standard_Integer aNbSec = anIndices->Length(); + + // Create an empty sections. + theValue.resize(aNbSec); + + if (aCoords.IsNull() == Standard_False) { + Standard_Integer i; + Standard_Integer j; + std::list >::iterator anIt = theValue.begin(); + + for (i = anIndices->Lower(); i <= anIndices->Upper(); ++i, ++anIt) { + const Standard_Integer iCoord1 = anIndices->Value(i); + const Standard_Integer iCoord2 = i + 1 > anIndices->Upper() ? + aCoords->Upper() + 1 : anIndices->Value(i + 1); + + for (j = iCoord1; j < iCoord2; ++j) { + anIt->push_back(aCoords->Value(j)); + } + } + } + } +} diff --git a/src/GEOMImpl/GEOMImpl_IPolyline2D.hxx b/src/GEOMImpl/GEOMImpl_IPolyline2D.hxx new file mode 100644 index 000000000..302e9f899 --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_IPolyline2D.hxx @@ -0,0 +1,94 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +//NOTE: This is an interface to a function for the Polyline2D creation. + + +#ifndef _GEOMImpl_IPolyline2D_HXX_ +#define _GEOMImpl_IPolyline2D_HXX_ + + +#include +#include + +#include + +#include +#include +#include + + +#define POLY_ARG_NAMES 1 +#define POLY_ARG_TYPES 2 +#define POLY_ARG_CLOSEDS 3 +#define POLY_ARG_COORDS 4 +#define POLY_ARG_START_INDICES 5 +#define POLY_ARG_WPLANE_DBLS 6 +#define POLY_ARG_WPLANE_OBJ 7 + + +class GEOMIMPL_EXPORT GEOMImpl_IPolyline2D +{ + public: + + GEOMImpl_IPolyline2D(Handle(GEOM_Function) theFunction): _func(theFunction) {} + + void SetNames(const Handle_TColStd_HArray1OfExtendedString &theValue) + { _func->SetStringArray(POLY_ARG_NAMES, theValue); } + + Handle_TColStd_HArray1OfExtendedString GetNames() + { return _func->GetStringArray(POLY_ARG_NAMES); } + + void SetTypes(const Handle_TColStd_HArray1OfByte &theValue) + { _func->SetByteArray(POLY_ARG_TYPES, theValue); } + + Handle_TColStd_HArray1OfByte GetTypes() + { return _func->GetByteArray(POLY_ARG_TYPES); } + + void SetClosedFlags(const Handle_TColStd_HArray1OfByte &theValue) + { _func->SetBooleanArray(POLY_ARG_CLOSEDS, theValue); } + + Handle_TColStd_HArray1OfByte GetClosedFlags() + { return _func->GetBooleanArray(POLY_ARG_CLOSEDS); } + + void SetWorkingPlaneDbls(const Handle_TColStd_HArray1OfReal &thePlane) + { _func->SetRealArray(POLY_ARG_WPLANE_DBLS, thePlane); } + + Handle_TColStd_HArray1OfReal GetWorkingPlaneDbls() + { return _func->GetRealArray(POLY_ARG_WPLANE_DBLS); } + + void SetWorkingPlane(const Handle_GEOM_Function &thePlane) + { _func->SetReference(POLY_ARG_WPLANE_OBJ, thePlane); } + + Handle_GEOM_Function GetWorkingPlane() + { return _func->GetReference(POLY_ARG_WPLANE_OBJ); } + + void SetCoords(const std::list > &theValue); + + void GetCoords(std::list > &theValue); + + private: + + Handle(GEOM_Function) _func; +}; + +#endif diff --git a/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx b/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx index 1eeeaf277..1a996c1e5 100644 --- a/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PolylineDriver.cxx @@ -23,12 +23,17 @@ #include "GEOMImpl_PolylineDriver.hxx" #include "GEOMImpl_ICurveParametric.hxx" +#include "GEOMImpl_ICurvesOperations.hxx" #include "GEOMImpl_IPolyline.hxx" +#include "GEOMImpl_IPolyline2D.hxx" #include "GEOMImpl_Types.hxx" #include "GEOM_Function.hxx" +#include +#include #include #include +#include #include #include #include @@ -38,6 +43,7 @@ #include #include #include +#include #include //======================================================================= @@ -59,6 +65,125 @@ GEOMImpl_PolylineDriver::GEOMImpl_PolylineDriver() { } +//======================================================================= +//function : MakePolyline2D +//purpose : +//======================================================================= +Standard_Integer GEOMImpl_PolylineDriver::MakePolyline2D + (TFunction_Logbook& log) const +{ + if (Label().IsNull()) { + return 0; + } + + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); + GEOMImpl_IPolyline2D aCI(aFunction); + Standard_Integer aType = aFunction->GetType(); + TopoDS_Shape aShape; + + // Get data. + Handle(TColStd_HArray1OfExtendedString) aNames = aCI.GetNames(); + Handle(TColStd_HArray1OfByte) aTypes = aCI.GetTypes(); + Handle(TColStd_HArray1OfByte) aClosedFlags = aCI.GetClosedFlags(); + std::list > aCoords; + gp_Ax3 aWPlane; + + aCI.GetCoords(aCoords); + + // Check the data validity + if (aNames.IsNull()) { + return 0; + } + + Standard_Integer aNbSections = aNames->Length(); + + if (aTypes.IsNull() || aNbSections != aTypes->Length()) { + return 0; + } + + if (aClosedFlags.IsNull() || aNbSections != aClosedFlags->Length()) { + return 0; + } + + if (aNbSections != aCoords.size()) { + return 0; + } + + if (aType == POLYLINE2D_PLN_COORDS) { + Handle(TColStd_HArray1OfReal) aPlaneCoords = aCI.GetWorkingPlaneDbls(); + + if (aPlaneCoords.IsNull()) { + return 0; + } + + if (aPlaneCoords->Length() != 9) { + return 0; + } + + Standard_Integer i = aPlaneCoords->Lower(); + gp_Pnt aOrigin(aPlaneCoords->Value(i), aPlaneCoords->Value(i + 1), + aPlaneCoords->Value(i + 2)); + gp_Dir aDirZ(aPlaneCoords->Value(i + 3), aPlaneCoords->Value(i + 4), + aPlaneCoords->Value(i + 5)); + gp_Dir aDirX(aPlaneCoords->Value(i + 6), aPlaneCoords->Value(i + 7), + aPlaneCoords->Value(i + 8)); + aWPlane = gp_Ax3(aOrigin, aDirZ, aDirX); + } else if (aType == POLYLINE2D_PLN_OBJECT) { + Handle(GEOM_Function) aRefFace = aCI.GetWorkingPlane(); + TopoDS_Shape aShape = aRefFace->GetValue(); + + aWPlane = GEOMUtils::GetPosition(aShape); + } else { + return 0; + } + + // Construct a shape. + Standard_Integer iN = aNames->Lower(); + Standard_Integer iT = aTypes->Lower(); + Standard_Integer iC = aClosedFlags->Lower(); + std::list >::const_iterator anIter = aCoords.begin(); + BRep_Builder aBuilder; + Standard_Boolean isEmpty = Standard_True; + + if (aNbSections > 1) { + aBuilder.MakeCompound(TopoDS::Compound(aShape)); + } + + for (; anIter != aCoords.end(); ++anIter, ++iN, ++iT, ++iC) { + Standard_Integer aType = aTypes->Value(iT); + TopoDS_Shape aSection; + + if (aType == GEOMImpl_ICurvesOperations::Polyline) { + aSection = Sketcher_Utils::MakePolyline + (*anIter, aClosedFlags->Value(iC), aWPlane); + } else if (aType == GEOMImpl_ICurvesOperations::Interpolation) { + aSection = Sketcher_Utils::MakeInterpolation + (*anIter, aClosedFlags->Value(iC), aWPlane); + } + + if (aNbSections > 1) { + // There are multiple sections. + if (aSection.IsNull() == Standard_False) { + aBuilder.Add(aShape, aSection); + isEmpty = Standard_False; + } + } else { + // There is only one section. + isEmpty = aSection.IsNull(); + aShape = aSection; + } + } + + if (isEmpty) { + return 0; + } + + aFunction->SetValue(aShape); + log.SetTouched(Label()); + + return 1; +} + //======================================================================= //function : Execute //purpose : @@ -67,9 +192,13 @@ Standard_Integer GEOMImpl_PolylineDriver::Execute(TFunction_Logbook& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); + Standard_Integer aType = aFunction->GetType(); + + if (aType == POLYLINE2D_PLN_COORDS || aType == POLYLINE2D_PLN_OBJECT) { + return MakePolyline2D(log); + } GEOMImpl_IPolyline aCI (aFunction); - Standard_Integer aType = aFunction->GetType(); TopoDS_Shape aShape; @@ -166,10 +295,9 @@ GetCreationInformation(std::string& theOperationName, GEOMImpl_ICurveParametric aIP( function ); Standard_Integer aType = function->GetType(); - theOperationName = "CURVE"; - switch ( aType ) { case POLYLINE_POINTS: + theOperationName = "CURVE"; AddParam( theParams, "Type", "Polyline"); if ( aIP.HasData() ) { @@ -206,6 +334,103 @@ GetCreationInformation(std::string& theOperationName, AddParam( theParams, "Is closed", aCI.GetIsClosed() ); } break; + case POLYLINE2D_PLN_COORDS: + case POLYLINE2D_PLN_OBJECT: + { + theOperationName = "SKETCH"; + + GEOMImpl_IPolyline2D aP2d(function); + Handle(TColStd_HArray1OfExtendedString) aNames = aP2d.GetNames(); + + if (aNames.IsNull() == Standard_False) { + if (aNames->Length() == 1) { + // This is the single curve. Make its full dump. + AddParam(theParams, "Name", aNames->Value(aNames->Lower())); + + Handle(TColStd_HArray1OfByte) aTypes = aP2d.GetTypes(); + + if (aTypes.IsNull() == Standard_False && aTypes->Length() == 1) { + Standard_Integer aType = aTypes->Value(aTypes->Lower()); + + if (aType == GEOMImpl_ICurvesOperations::Polyline) { + AddParam(theParams, "Type") << "Polyline"; + } else if (aType == GEOMImpl_ICurvesOperations::Interpolation) { + AddParam(theParams, "Type") << "Interpolation"; + } + } + + Handle(TColStd_HArray1OfByte) aCloseds = aP2d.GetClosedFlags(); + + if (aCloseds.IsNull() == Standard_False && aCloseds->Length() == 1) { + const char *aYesNo = + aCloseds->Value(aCloseds->Lower()) ? "Yes" : "No"; + + AddParam(theParams, "Is closed", aYesNo); + } + + std::list > aCoords; + + aP2d.GetCoords(aCoords); + + if (aCoords.size() == 1) { + AddParam(theParams, "Number of points", aCoords.front().size()/2); + } + } else { + // There are more than 1 curve. + Standard_Integer aNbCurves = aNames->Length(); + Standard_Integer i; + std::list > aCoords; + + AddParam(theParams, "Number of curves", aNbCurves); + aP2d.GetCoords(aCoords); + + Standard_Integer aNbCoords = aCoords.size(); + std::list >::const_iterator + anIt = aCoords.begin(); + + for (i = 0; i < aNbCurves; i++) { + TCollection_AsciiString aName("Curve "); + TCollection_ExtendedString + aValue(aNames->Value(aNames->Lower() + i)); + + aName.AssignCat(i + 1); + + if (anIt != aCoords.end()) { + aValue.AssignCat(" ("); + aValue.AssignCat(Standard_Integer(anIt->size())); + aValue.AssignCat(" points)"); + anIt++; + } + + AddParam(theParams, aName.ToCString(), aValue); + } + } + } + + if (aType == POLYLINE2D_PLN_COORDS) { + Handle(TColStd_HArray1OfReal) aPln = aP2d.GetWorkingPlaneDbls(); + + if (aPln.IsNull() == Standard_False && aPln->Length() == 9) { + Standard_Integer i = aPln->Lower(); + + AddParam( theParams, "Origin") + << aPln->Value(i) << " " + << aPln->Value(i + 1) << " " + << aPln->Value(i + 2); + AddParam( theParams, "OZ") + << aPln->Value(i + 3) << " " + << aPln->Value(i + 4) << " " + << aPln->Value(i + 5); + AddParam( theParams, "OX") + << aPln->Value(i + 6) << " " + << aPln->Value(i + 7) << " " + << aPln->Value(i + 8); + } + } else { + AddParam(theParams, "Working plane", aP2d.GetWorkingPlane(), "XOY"); + } + } + break; default: return false; } diff --git a/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx b/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx index 3f8165537..b3f89d91e 100644 --- a/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx +++ b/src/GEOMImpl/GEOMImpl_PolylineDriver.hxx @@ -80,6 +80,9 @@ Standard_EXPORT ~GEOMImpl_PolylineDriver() {}; Standard_EXPORT virtual bool GetCreationInformation(std::string& theOperationName, std::vector& params); +private: + + Standard_Integer MakePolyline2D(TFunction_Logbook& log) const; DEFINE_STANDARD_RTTI( GEOMImpl_PolylineDriver ) }; diff --git a/src/GEOMImpl/GEOMImpl_PolylineDumper.cxx b/src/GEOMImpl/GEOMImpl_PolylineDumper.cxx new file mode 100644 index 000000000..05fb9a61a --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_PolylineDumper.cxx @@ -0,0 +1,251 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : GEOMImpl_PolylineDumper.cxx +// Author : Sergey KHROMOV +// Module : GEOM + + +#include "GEOMImpl_PolylineDumper.hxx" +#include "GEOMImpl_ICurvesOperations.hxx" + +#include + + +//======================================================================= +// function : Constructor +// purpose : +//======================================================================= +GEOMImpl_PolylineDumper::GEOMImpl_PolylineDumper + (const std::list > &theCoords, + const Handle(TColStd_HArray1OfExtendedString) &theNames, + const Handle(TColStd_HArray1OfByte) &theTypes, + const Handle(TColStd_HArray1OfByte) &theCloseds, + const Handle(TColStd_HArray1OfReal) &thePlnCoords) + : myCoords (theCoords), + myNames (theNames), + myTypes (theTypes), + myCloseds (theCloseds), + myPlnCoords (thePlnCoords), + myIsDone (Standard_False) +{ + init(); +} + + +//======================================================================= +// function : Constructor +// purpose : +//======================================================================= +GEOMImpl_PolylineDumper::GEOMImpl_PolylineDumper + (const std::list > &theCoords, + const Handle(TColStd_HArray1OfExtendedString) &theNames, + const Handle(TColStd_HArray1OfByte) &theTypes, + const Handle(TColStd_HArray1OfByte) &theCloseds, + const Handle(GEOM_Object) &theWorkingPlane) + : myCoords (theCoords), + myNames (theNames), + myTypes (theTypes), + myCloseds (theCloseds), + myWorkingPlane (theWorkingPlane), + myIsDone (Standard_False) +{ + init(); +} + +//======================================================================= +// function : Dump +// purpose : +//======================================================================= +Standard_Boolean GEOMImpl_PolylineDumper::Dump + (const Handle(GEOM_Object) &theObject) +{ + if (theObject.IsNull()) { + return Standard_False; + } + + if (myIsDone) { + Handle(GEOM_Function) aFunction = theObject->GetLastFunction(); + GEOM::TPythonDump aPD(aFunction); + + aPD << myDescr; + aPD << theObject << " = pl.result("; + + if (myWorkingPlane.IsNull()) { + // Add coodinates of working plane. + Standard_Integer i; + + aPD << "["; + for (i = 0; i < 9; ++i) { + aPD << myPlnCoords->Value(myPlnCoords->Lower() + i); + + if (i < 8) { + aPD << ", "; + } + } + aPD << "]"; + } else { + aPD << myWorkingPlane; + } + + aPD << ")"; + } + + return myIsDone; +} + +//======================================================================= +// function : init +// purpose : +//======================================================================= +void GEOMImpl_PolylineDumper::init() +{ + // Check input parameters. + if (myCoords.empty() || myNames.IsNull() || + myTypes.IsNull() || myCloseds.IsNull()) { + // One or more input parameters are null or empty() + return; + } + + const Standard_Integer aNbSec = myCoords.size(); + + if (aNbSec != myNames->Length() || aNbSec != myTypes->Length() || + aNbSec != myCloseds->Length()) { + // Inconsistent data. + return; + } + + // Check the reference plane + if (myPlnCoords.IsNull()) { + if (myWorkingPlane.IsNull()) { + // Null working plane + return; + } + } else { + if (myWorkingPlane.IsNull() == Standard_False) { + // Ambiguous working plane + return; + } + + if (myPlnCoords->Length() != 9) { + // Invalid number of plane coordinates. + return; + } + } + + char *aSeparator = "\n\t"; + Standard_Integer i; + std::list >::const_iterator anIt = myCoords.begin(); + + myDescr += "pl = geompy.Polyline2D()"; + + // Add sections. + for (i = 0; i < aNbSec && anIt != myCoords.end(); ++i, ++anIt) { + myDescr += aSeparator; + myDescr += "pl.addSection("; + // Add name + myDescr += "\""; + myDescr += myNames->Value(myNames->Lower() + i) + "\", "; + // Add type + const Standard_Integer aType = myTypes->Value(myTypes->Lower() + i); + + switch (aType) { + case GEOMImpl_ICurvesOperations::Polyline: + myDescr += "GEOM.Polyline, "; + break; + case GEOMImpl_ICurvesOperations::Interpolation: + myDescr += "GEOM.Interpolation, "; + break; + default: + myDescr.Clear(); + return; + break; // NEVERREACHED + } + + // Add Closed flag. + if (myCloseds->Value(myCloseds->Lower() + i)) { + myDescr += "True"; + } else { + myDescr += "False"; + } + + // Add points. + const Standard_Integer aNbCoords = anIt->size(); + + if (aNbCoords > 0) { + if (aNbCoords % 2) { + // Odd number of coordinates. + myDescr.Clear(); + return; + } + + if (aNbCoords <= 4) { + // Add 2 points to the same command addSection. + myDescr += ", ["; + + std::list ::const_iterator aCIt = anIt->begin(); + + while (aCIt != anIt->end()) { + myDescr += *aCIt; + + if (++aCIt != anIt->end()) { + myDescr += ", "; + } + } + } else { + // Add points to a separate command addPoints. + // Add maximum 4 points in a command. + std::list ::const_iterator aCIt = anIt->begin(); + Standard_Integer aMaxNbCoord = 8; + Standard_Integer j = 1; + + myDescr += ")"; + myDescr += aSeparator; + myDescr += "pl.addPoints(["; + + while (aCIt != anIt->end()) { + myDescr += *aCIt; + + if (++aCIt != anIt->end()) { + if (j == aMaxNbCoord) { + // 4 points are added. Add a new command. + myDescr += "])"; + myDescr += aSeparator; + myDescr += "pl.addPoints(["; + j = 1; + } else { + myDescr += ", "; + j++; + } + } + } + } + + myDescr += "]"; + } + + myDescr += ")"; + } + + myDescr += aSeparator; + myIsDone = Standard_True; +} diff --git a/src/GEOMImpl/GEOMImpl_PolylineDumper.hxx b/src/GEOMImpl/GEOMImpl_PolylineDumper.hxx new file mode 100644 index 000000000..1fe396bfd --- /dev/null +++ b/src/GEOMImpl/GEOMImpl_PolylineDumper.hxx @@ -0,0 +1,132 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : GEOMImpl_PolylineDumper.h +// Author : Sergey KHROMOV + + +#ifndef _GEOMImpl_PolylineDumper_HXX_ +#define _GEOMImpl_PolylineDumper_HXX_ + + +#include "GEOM_GEOMImpl.hxx" + +#include + +#include +#include +#include + +#include + + +/** + * This is a helper class to form a dump of a polyline 2d curves creation + * algorithm. + */ +class GEOMIMPL_EXPORT GEOMImpl_PolylineDumper +{ + +public: + + /** + * This construcor initializes the object with 2D polyline creation + * parameters. + * + * \param theCoords the list of coordinates list. theCoordsList[0] + * is the coordinates list of the first section. theCoordsList[1] + * is for the second section etc. + * \param theNames the list of names. The order corresponds to theCoords. + * \param theTypes the list of curve types. The order corresponds to + * theCoords. + * \param theCloseds the list of Closed flags. The order corresponds to + * theCoords. + * \param thePlnCoords 9 double values, defining origin, + * OZ and OX directions of the working plane. + */ + GEOMImpl_PolylineDumper + (const std::list > &theCoords, + const Handle_TColStd_HArray1OfExtendedString &theNames, + const Handle_TColStd_HArray1OfByte &theTypes, + const Handle_TColStd_HArray1OfByte &theCloseds, + const Handle_TColStd_HArray1OfReal &thePlnCoords); + + /** + * This construcor initializes the object with 2D polyline creation + * parameters. + * + * \param theCoords the list of coordinates list. theCoordsList[0] + * is the coordinates list of the first section. theCoordsList[1] + * is for the second section etc. + * \param theNames the list of names. The order corresponds to theCoords. + * \param theTypes the list of curve types. The order corresponds to + * theCoords. + * \param theCloseds the list of Closed flags. The order corresponds to + * theCoords. + * \param theWorkingPlane planar Face or LCS(Marker) of the working plane. + */ + GEOMImpl_PolylineDumper + (const std::list > &theCoords, + const Handle_TColStd_HArray1OfExtendedString &theNames, + const Handle_TColStd_HArray1OfByte &theTypes, + const Handle_TColStd_HArray1OfByte &theCloseds, + const Handle_GEOM_Object &theWorkingPlane); + + /** + * This method returns Standard_True if the dump description is created + * successfully. + * + * \return Standard_True in case of success; Standard_False otherwise. + */ + Standard_Boolean IsDone() const + { return myIsDone; } + + /** + * This method performs dump of the polyline. + * + * \param theObject the newly created object. + * \return Standard_True in case of success; Standard_False otherwise. + */ + Standard_Boolean Dump(const Handle_GEOM_Object &theObject); + +protected: + + /** + * This method generates the description required for python dump. + * It is called from constructor. + */ + void init(); + +private: + + const std::list > &myCoords; + Handle_TColStd_HArray1OfExtendedString myNames; + Handle_TColStd_HArray1OfByte myTypes; + Handle_TColStd_HArray1OfByte myCloseds; + Handle_TColStd_HArray1OfReal myPlnCoords; + Handle_GEOM_Object myWorkingPlane; + Standard_Boolean myIsDone; + TCollection_ExtendedString myDescr; + +}; + +#endif diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx old mode 100755 new mode 100644 index 0bc7505c1..0ea9449e2 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -111,6 +111,8 @@ #define GEOM_ISOLINE 55 +#define GEOM_POLYLINE2D 56 + //GEOM_Function types #define COPY_WITH_REF 1 @@ -250,7 +252,9 @@ #define PARTITION_HALF 2 #define PARTITION_NO_SELF_INTERSECTIONS 3 -#define POLYLINE_POINTS 1 +#define POLYLINE_POINTS 1 +#define POLYLINE2D_PLN_COORDS 2 +#define POLYLINE2D_PLN_OBJECT 3 #define SPLINE_BEZIER 1 #define SPLINE_INTERPOLATION 2 diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.cc b/src/GEOM_I/GEOM_ICurvesOperations_i.cc index f1d2469c0..06d9b66d3 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.cc +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.cc @@ -30,6 +30,9 @@ #include "GEOM_Engine.hxx" #include "GEOM_Object.hxx" +#include +#include + //============================================================================= /*! * constructor: @@ -667,3 +670,189 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::Make3DSketcher return GetObject(anObject); } + +//============================================================================= +/*! + * MakePolyline2D + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline2D + (const GEOM::ListOfListOfDouble &theCoordsList, + const GEOM::string_array &theNamesList, + const GEOM::short_array &theTypesList, + const GEOM::ListOfBool &theClosedList, + const GEOM::ListOfDouble &theWorkingPlane) +{ + //Set a not done flag + GetOperations()->SetNotDone(); + + // Convert input data + Handle(TColStd_HArray1OfExtendedString) aNames = + ConvertStringArray(theNamesList); + Handle(TColStd_HArray1OfByte) aTypes = + ConvertEnumArray(theTypesList); + Handle(TColStd_HArray1OfByte) aCloseds = + ConvertBoolArray(theClosedList); + std::list > aCoords; + + ConvertListListDouble(theCoordsList, aCoords); + + Handle(TColStd_HArray1OfReal) aWorkingPlane; + const int n = theWorkingPlane.length(); + int i; + + if (n > 0) { + aWorkingPlane = new TColStd_HArray1OfReal(1, n); + + for (i = 0; i < n; i++) { + aWorkingPlane->SetValue(i + 1, theWorkingPlane[i]); + } + } + + // Make Polyline + Handle(GEOM_Object) anObject = GetOperations()->MakePolyline2D + (aCoords, aNames, aTypes, aCloseds, aWorkingPlane); + + if (!GetOperations()->IsDone() || anObject.IsNull()) { + return GEOM::GEOM_Object::_nil(); + } + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakePolylineOnPlane + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline2DOnPlane + (const GEOM::ListOfListOfDouble &theCoordsList, + const GEOM::string_array &theNamesList, + const GEOM::short_array &theTypesList, + const GEOM::ListOfBool &theClosedList, + GEOM::GEOM_Object_ptr theWorkingPlane) +{ + //Set a not done flag + GetOperations()->SetNotDone(); + + // Convert input data + Handle(TColStd_HArray1OfExtendedString) aNames = + ConvertStringArray(theNamesList); + Handle(TColStd_HArray1OfByte) aTypes = + ConvertEnumArray(theTypesList); + Handle(TColStd_HArray1OfByte) aCloseds = + ConvertBoolArray(theClosedList); + std::list > aCoords; + Handle(GEOM_Object) aWorkingPlane = + GetObjectImpl(theWorkingPlane); + + ConvertListListDouble(theCoordsList, aCoords); + + // Make Polyline + Handle(GEOM_Object) anObject = GetOperations()->MakePolyline2DOnPlane + (aCoords, aNames, aTypes, aCloseds, aWorkingPlane); + + if (!GetOperations()->IsDone() || anObject.IsNull()) { + return GEOM::GEOM_Object::_nil(); + } + + return GetObject(anObject); +} + +//============================================================================= +/*! + * ConvertEnumArray + */ +//============================================================================= +Handle(TColStd_HArray1OfByte) GEOM_ICurvesOperations_i::ConvertEnumArray + (const GEOM::short_array &theInArray) +{ + Handle(TColStd_HArray1OfByte) anOutArray; + const int n = theInArray.length(); + int i; + + if (n <= 0) { + return anOutArray; + } + + anOutArray = new TColStd_HArray1OfByte(1, n); + + for (i = 0; i < n; i++) { + bool isOK = true; + GEOMImpl_ICurvesOperations::CurveType aType; + + switch(theInArray[i]) { + case GEOM::Polyline: + aType = GEOMImpl_ICurvesOperations::Polyline; + break; + case GEOM::Bezier: + aType = GEOMImpl_ICurvesOperations::Bezier; + break; + case GEOM::Interpolation: + aType = GEOMImpl_ICurvesOperations::Interpolation; + break; + default: + isOK = false; + break; + } + + if (isOK) { + anOutArray->SetValue(i + 1, aType); + } else { + anOutArray.Nullify(); + break; + } + } + + return anOutArray; +} + +//============================================================================= +/*! + * ConvertBoolArray + */ +//============================================================================= +Handle(TColStd_HArray1OfByte) GEOM_ICurvesOperations_i::ConvertBoolArray + (const GEOM::ListOfBool &theInArray) +{ + Handle(TColStd_HArray1OfByte) anOutArray; + const int n = theInArray.length(); + int i; + + if (n <= 0) { + return anOutArray; + } + + anOutArray = new TColStd_HArray1OfByte(1, n); + + for (i = 0; i < n; i++) { + anOutArray->SetValue(i + 1, theInArray[i]); + } + + return anOutArray; +} + +//============================================================================= +/*! + * ConvertListListDouble + */ +//============================================================================= +void GEOM_ICurvesOperations_i::ConvertListListDouble + (const GEOM::ListOfListOfDouble &theInList, + std::list > &theOutList) +{ + const int n = theInList.length(); + int i; + std::list anEmptyList; + + for (i = 0; i < n; i++) { + theOutList.push_back(anEmptyList); + + const int m = theInList[i].length(); + int j; + + for (j = 0; j < m; j++) { + theOutList.back().push_back(theInList[i][j]); + } + } +} diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.hh b/src/GEOM_I/GEOM_ICurvesOperations_i.hh index c08cb0156..90cbb2114 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.hh +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.hh @@ -112,8 +112,35 @@ class GEOM_I_EXPORT GEOM_ICurvesOperations_i : GEOM::GEOM_Object_ptr Make3DSketcher (const GEOM::ListOfDouble& theCoordinates); + GEOM::GEOM_Object_ptr MakePolyline2D + (const GEOM::ListOfListOfDouble &theCoordsList, + const GEOM::string_array &theNamesList, + const GEOM::short_array &theTypesList, + const GEOM::ListOfBool &theClosedList, + const GEOM::ListOfDouble &theWorkingPlane); + + GEOM::GEOM_Object_ptr MakePolyline2DOnPlane + (const GEOM::ListOfListOfDouble &theCoordsList, + const GEOM::string_array &theNamesList, + const GEOM::short_array &theTypesList, + const GEOM::ListOfBool &theClosedList, + GEOM::GEOM_Object_ptr theWorkingPlane); + ::GEOMImpl_ICurvesOperations* GetOperations() { return (::GEOMImpl_ICurvesOperations*)GetImpl(); } + +private: + + Handle(TColStd_HArray1OfByte) + ConvertEnumArray(const GEOM::short_array &theInArray); + + Handle(TColStd_HArray1OfByte) + ConvertBoolArray(const GEOM::ListOfBool &theInArray); + + void ConvertListListDouble + (const GEOM::ListOfListOfDouble &theCoordsList, + std::list > &theCoords); + }; #endif diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.cc b/src/GEOM_I/GEOM_IHealingOperations_i.cc index af7cb5cd4..51fe6c46e 100644 --- a/src/GEOM_I/GEOM_IHealingOperations_i.cc +++ b/src/GEOM_I/GEOM_IHealingOperations_i.cc @@ -78,25 +78,6 @@ Handle(TColStd_HArray1OfInteger) GEOM_IHealingOperations_i::Convert return anOutArray; } -//============================================================================= -/*! - * Convert - */ -//============================================================================= -Handle(TColStd_HArray1OfExtendedString) GEOM_IHealingOperations_i::Convert - (const GEOM::string_array& theInArray) -{ - Handle(TColStd_HArray1OfExtendedString) anOutArray; - int n = theInArray.length(); - if ( n <= 0 ) - return anOutArray; - anOutArray = new TColStd_HArray1OfExtendedString( 1, n ); - for ( int i = 0; i < n; i++ ) - anOutArray->SetValue( i+1, TCollection_ExtendedString( theInArray[i].in() ) ); - - return anOutArray; -} - //============================================================================= /*! * ProcessShape @@ -125,7 +106,8 @@ GEOM::GEOM_Object_ptr GEOM_IHealingOperations_i::ProcessShape (GEOM::GEOM_Object // Perform Handle(GEOM_Object) aNewObject = GetOperations()->ShapeProcess( anObject, - Convert( theOperations ), Convert( theParams ), Convert( theValues ) ); + ConvertStringArray( theOperations ), ConvertStringArray( theParams ), + ConvertStringArray( theValues ) ); if ( !GetOperations()->IsDone() || aNewObject.IsNull() ) return aGEOMObject._retn(); diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.hh b/src/GEOM_I/GEOM_IHealingOperations_i.hh index 8b30c9530..091358771 100644 --- a/src/GEOM_I/GEOM_IHealingOperations_i.hh +++ b/src/GEOM_I/GEOM_IHealingOperations_i.hh @@ -33,9 +33,6 @@ #include "GEOMImpl_IHealingOperations.hxx" -#include -#include - class GEOM_I_EXPORT GEOM_IHealingOperations_i : public virtual POA_GEOM::GEOM_IHealingOperations, public virtual GEOM_IOperations_i @@ -101,7 +98,6 @@ class GEOM_I_EXPORT GEOM_IHealingOperations_i : ::GEOMImpl_IHealingOperations* GetOperations() { return (::GEOMImpl_IHealingOperations*)GetImpl(); } private: - Handle(TColStd_HArray1OfExtendedString) Convert( const GEOM::string_array& ); Handle(TColStd_HArray1OfInteger) Convert( const GEOM::short_array& ); }; diff --git a/src/GEOM_I/GEOM_IOperations_i.cc b/src/GEOM_I/GEOM_IOperations_i.cc index 12184fd17..9cb5b8469 100644 --- a/src/GEOM_I/GEOM_IOperations_i.cc +++ b/src/GEOM_I/GEOM_IOperations_i.cc @@ -237,3 +237,28 @@ void GEOM_IOperations_i::UpdateGUIForObject(GEOM::GEOM_Object_ptr theObj) } } } + +//============================================================================= +/*! + * ConvertStringArray + */ +//============================================================================= +Handle(TColStd_HArray1OfExtendedString) GEOM_IOperations_i::ConvertStringArray + (const GEOM::string_array &theInArray) +{ + Handle(TColStd_HArray1OfExtendedString) anOutArray; + const int n = theInArray.length(); + int i; + + if (n <= 0) { + return anOutArray; + } + + anOutArray = new TColStd_HArray1OfExtendedString( 1, n ); + + for (i = 0; i < n; i++) { + anOutArray->SetValue(i + 1, TCollection_ExtendedString(theInArray[i].in())); + } + + return anOutArray; +} diff --git a/src/GEOM_I/GEOM_IOperations_i.hh b/src/GEOM_I/GEOM_IOperations_i.hh index 1d5b7fd56..b82b36c68 100644 --- a/src/GEOM_I/GEOM_IOperations_i.hh +++ b/src/GEOM_I/GEOM_IOperations_i.hh @@ -52,9 +52,6 @@ class GEOM_I_EXPORT GEOM_IOperations_i : public virtual POA_GEOM::GEOM_IOperatio virtual GEOM::GEOM_Object_ptr GetObject(Handle(GEOM_Object) theObject); virtual Handle(GEOM_Object) GetObjectImpl(GEOM::GEOM_Object_ptr theObject); - virtual Handle(TColStd_HSequenceOfTransient) - GetListOfObjectsImpl(const GEOM::ListOfGO& theObjects); - virtual void StartOperation(); virtual void FinishOperation(); @@ -66,6 +63,14 @@ class GEOM_I_EXPORT GEOM_IOperations_i : public virtual POA_GEOM::GEOM_IOperatio virtual void UpdateGUIForObject(GEOM::GEOM_Object_ptr theObj); +protected: + + Handle(TColStd_HSequenceOfTransient) + GetListOfObjectsImpl(const GEOM::ListOfGO& theObjects); + + Handle(TColStd_HArray1OfExtendedString) + ConvertStringArray(const GEOM::string_array &theInArray); + private: ::GEOM_IOperations* _impl; diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index c0cd25a60..27b194dc2 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -256,7 +256,7 @@ import math import os import functools -from salome.geom.gsketcher import Sketcher3D, Sketcher2D +from salome.geom.gsketcher import Sketcher3D, Sketcher2D, Polyline2D # service function def _toListOfNames(_names, _size=-1): @@ -2667,6 +2667,25 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): sk = Sketcher3D (self) return sk + ## Obtain a 2D polyline creation interface + # @return An instance of @ref gsketcher.Polyline2D "Polyline2D" interface + # + # @ref tui_3dsketcher_page "Example" + def Polyline2D (self): + """ + Obtain a 2D polyline creation interface. + + Example of usage: + pl = geompy.Polyline2D() + pl.addSection("section 1", GEOM.Polyline, True) + pl.addPoints(0, 0, 10, 0, 10, 10) + pl.addSection("section 2", GEOM.Interpolation, False) + pl.addPoints(20, 0, 30, 0, 30, 10) + resultObj = pl.result(WorkingPlane) + """ + pl = Polyline2D (self) + return pl + # end of l3_sketcher ## @} diff --git a/src/GEOM_SWIG/gsketcher.py b/src/GEOM_SWIG/gsketcher.py index 783bfffca..004e8e63e 100644 --- a/src/GEOM_SWIG/gsketcher.py +++ b/src/GEOM_SWIG/gsketcher.py @@ -1211,3 +1211,145 @@ class Sketcher2D: self.myCommand = "Sketcher" self.geompyD._autoPublish(face, theName, "face") return face + +## An interface to build a 2D polyline step-by-step. The polyline can contain +# several sections. Each section represents a list of 2d points. As well it +# has a name, curve type, either polyline or interpolation (BSpline curve) and +# Closed flag. +# Use geompy.Polyline2D() method to obtain an instance of this class. +# @ingroup sketcher +class Polyline2D: + """ + An interface to build a 2D polyline step-by-step. The polyline can contain + several sections. Each section represents a list of 2d points. As well it + has a name, curve type, either polyline or interpolation (BSpline curve) and + Closed flag. + Use geompy.Polyline2D() method to obtain an instance of this class. + + Example of usage: + pl = geompy.Polyline2D() + pl.addSection("section 1", GEOM.Polyline, True, [0, 0, 10, 0, 10, 10]) + pl.addSection("section 2", GEOM.Interpolation, False) + pl.addPoints([20, 0, 30, 0, 30, 10]) + resultObj = pl.result(WorkingPlane) + """ + + def __init__(self, geompyD): + self.geompyD = geompyD + self.myNameList = [] + self.myTypeList = [] + self.myClosedList = [] + self.myCoordsList = [] + pass + + ## Add a new section to the polyline. + # + # @param theName the name + # @param theType the type. It can have either CORBA enumeration type + # GEOM.curve_type or a value of type long. Possible input values + # are: GEOM.Polyline(0) and GEOM.Interpolation(2). + # @param theClosed True for closed section; False otherwise + # @param thePoints the list of 2D points coordinates in the form: + # [x1, y1, x2, y2, ..., xN, yN] for N points. + def addSection(self, theName, theType, theClosed, thePoints = None): + """ + Add a new section to the polyline. + + Parameters: + theName the name + theType the type. It can have either CORBA enumeration type + GEOM.curve_type or a value of type long. Possible input + values are: GEOM.Polyline(0) and GEOM.Interpolation(2). + theClosed True for closed section; False otherwise + thePoints the list of 2D points coordinates in the form: + [x1, y1, x2, y2, ..., xN, yN] for N points. + + Example of usage: + pl = geompy.Polyline2D() + pl.addSection("section 1", GEOM.Polyline, True, [0, 0, 10, 0, 10, 10]) + resultObj = pl.result(WorkingPlane) + """ + from salome.geom.geomBuilder import EnumToLong + self.myNameList.append(theName) + self.myTypeList.append(EnumToLong(theType)) + self.myClosedList.append(theClosed) + if thePoints is None: + self.myCoordsList.append([]) + else: + self.myCoordsList.append(thePoints) + pass + + ## Add a points to the last added section of the polyline. If there are + # no sections in the polyline it does nothing. + # + # @param thePoints the list of 2D points coordinates in the form: + # [x1, y1, x2, y2, ..., xN, yN] for N points. + def addPoints(self, thePoints): + """ + Add a points to the last added section of the polyline. If there are + no sections in the polyline it does nothing. + + Parameters: + thePoints the list of 2D points coordinates in the form: + [x1, y1, x2, y2, ..., xN, yN] for N points. + + Example of usage: + pl = geompy.Polyline2D() + pl.addSection("section 1", GEOM.Polyline, True) + pl.addPoints([0, 0, 10, 0, 10, 10]) + pl.addPoints([20, 0, 30, 0, 30, 10]) + resultObj = pl.result(WorkingPlane) + """ + if self.myNameList: + self.myCoordsList[-1].extend(thePoints) + pass + + ## Obtain the 2D polyline result as a wire or a compound of wires in case + # of several sections defined. + # + # @param theWorkingPlane - current Working Plane used for this 2D polyline + # @param theName Object name; when specified, this parameter is used + # for result publication in the study. Otherwise, if automatic + # publication is switched on, default value is used for result name. + # + # @return New GEOM_Object, containing the created shape. + def result(self, theWorkingPlane=[0, 0, 0, 0, 0, 1, 1, 0, 0], theName=None): + """ + Obtain the 2D polyline result as a wire or a compound of wires in case + of several sections defined. + + Parameters: + theWorkingPlane current Working Plane used for this 2D polyline + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM_Object, containing the created shape. + + Example of usage: + pl = geompy.Polyline2D() + pl.addSection("section 1", GEOM.Polyline, True, [0, 0, 10, 0, 10, 10]) + pl.addSection("section 2", GEOM.Interpolation, False) + pl.addPoints([20, 0, 30, 0, 30, 10]) + resultObj = pl.result(WorkingPlane) + """ + from salome.geom.geomBuilder import RaiseIfFailed + import GEOM + if isinstance(theWorkingPlane, list): + aResult = self.geompyD.CurvesOp.MakePolyline2D( + self.myCoordsList, self.myNameList, self.myTypeList, + self.myClosedList, theWorkingPlane) + if isinstance(theWorkingPlane, GEOM._objref_GEOM_Object): + aResult = self.geompyD.CurvesOp.MakePolyline2DOnPlane( + self.myCoordsList, self.myNameList, self.myTypeList, + self.myClosedList, theWorkingPlane) + + self.myNameList = [] + self.myTypeList = [] + self.myClosedList = [] + self.myCoordsList = [] + RaiseIfFailed("Polyline2D.result", self.geompyD.CurvesOp) + self.geompyD._autoPublish(aResult, theName, "polyline") + + return aResult diff --git a/src/OperationGUI/CMakeLists.txt b/src/OperationGUI/CMakeLists.txt index f176f9d0b..0f8ae114e 100755 --- a/src/OperationGUI/CMakeLists.txt +++ b/src/OperationGUI/CMakeLists.txt @@ -45,11 +45,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ) -IF(SALOME_GEOM_DEBUG_CC) - # for debug purposes, to be removed - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/CurveCreator) -ENDIF() - # additional preprocessor / compiler flags ADD_DEFINITIONS( ${CAS_DEFINITIONS} @@ -61,10 +56,6 @@ ADD_DEFINITIONS( SET(_link_LIBRARIES GEOMBase ) -IF(SALOME_GEOM_DEBUG_CC) - # for debug purposes, to be removed - LIST(APPEND _link_LIBRARIES CurveCreator) -ENDIF() # --- resources --- diff --git a/src/OperationGUI/OperationGUI.cxx b/src/OperationGUI/OperationGUI.cxx index c84dc1cf3..a705e0ae2 100644 --- a/src/OperationGUI/OperationGUI.cxx +++ b/src/OperationGUI/OperationGUI.cxx @@ -27,15 +27,8 @@ #include #include "GeometryGUI_Operations.h" -#include #include -#include #include -#include - -#include -#include -#include #include "OperationGUI_PartitionDlg.h" // Method PARTITION #include "OperationGUI_ArchimedeDlg.h" // Method ARCHIMEDE @@ -47,13 +40,6 @@ #include "OperationGUI_GetSharedShapesDlg.h" #include "OperationGUI_ExtrudedFeatureDlg.h" // Methods EXTRUDED BOSS / CUT -#ifdef DEBUG_CURVE_CREATOR -// for debug purposes, to be removed -#include "CurveCreator_Widget.h" -#include -#include -#endif - //======================================================================= // function : OperationGUI() // purpose : Constructor @@ -95,36 +81,6 @@ bool OperationGUI::OnGUIEvent (int theCommandID, SUIT_Desktop* parent) case GEOMOp::OpExtrudedCut: (new OperationGUI_ExtrudedFeatureDlg (CUT, getGeometryGUI(), parent))->show(); break; case GEOMOp::OpFillet1d: (new OperationGUI_Fillet1d2dDlg (getGeometryGUI(), parent, true))->show(); break; case GEOMOp::OpFillet2d: (new OperationGUI_Fillet1d2dDlg (getGeometryGUI(), parent, false))->show(); break; -#ifdef DEBUG_CURVE_CREATOR - // for debug purposes, to be removed - case GEOMOp::OpCurveCreator: - { - static CurveCreator_Curve *aStaticCurve = NULL; - - if (aStaticCurve == NULL) { - aStaticCurve = new CurveCreator_Curve(CurveCreator::Dim2d); - } - if (CurveCreator::Dim2d == aStaticCurve->getDimension()) { - OCCViewer_ViewWindow* vw = (OCCViewer_ViewWindow*)getGeometryGUI()->getApp()->activeViewManager()->getActiveView(); - vw->onTopView(); - } - - QDialog *aDialog = new QDialog(parent); - QVBoxLayout *aMainLO = new QVBoxLayout; - QPushButton *aQuitButton = new QPushButton(tr("Close")); - CurveCreator_Widget *aWidget = - new CurveCreator_Widget (aDialog, aStaticCurve); - - connect(aQuitButton, SIGNAL(clicked()), aDialog, SLOT(close())); - aMainLO->addWidget(aWidget); - aMainLO->addWidget(aQuitButton); - - aDialog->setLayout(aMainLO); - aDialog->setAttribute(Qt::WA_DeleteOnClose); - aDialog->show(); - } - break; -#endif default: app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); } diff --git a/src/SKETCHER/CMakeLists.txt b/src/SKETCHER/CMakeLists.txt index 257c2dd1e..ef7e87480 100755 --- a/src/SKETCHER/CMakeLists.txt +++ b/src/SKETCHER/CMakeLists.txt @@ -43,13 +43,16 @@ SET(_link_LIBRARIES # --- headers --- SET(SKETCHER_HEADERS + Sketcher.hxx Sketcher_Profile.hxx + Sketcher_Utils.hxx ) # --- sources --- SET(SKETCHER_SOURCES Sketcher_Profile.cxx + Sketcher_Utils.cxx ) # --- rules --- diff --git a/src/CurveCreator/CurveCreator_Listener.hxx b/src/SKETCHER/Sketcher.hxx old mode 100755 new mode 100644 similarity index 53% rename from src/CurveCreator/CurveCreator_Listener.hxx rename to src/SKETCHER/Sketcher.hxx index 4fd4a29fa..09602cee5 --- a/src/CurveCreator/CurveCreator_Listener.hxx +++ b/src/SKETCHER/Sketcher.hxx @@ -1,4 +1,7 @@ -// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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 @@ -17,25 +20,20 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef CURVE_CREATOR_LISTENER_HXX -#define CURVE_CREATOR_LISTENER_HXX +// File : Sketcher.hxx +// Author : Sergey KHROMOV -class CurveCreator_Listener -{ -public: - CurveCreator_Listener(void){}; - virtual ~CurveCreator_Listener(void){}; +#ifndef _SKETCHER_HXX_ +#define _SKETCHER_HXX_ - virtual void pointChanged( int theSection, int thePoint ){} - virtual void pointRemoved( int theSection, int theFirstPoint, int thePointCnt ){} - virtual void pointInserted( int theSection, int theIndx ){} +#if defined WIN32 +# if defined SKETCHER_SALOME_EXPORTS || defined SKETCHER_EXPORTS || defined GEOMSketcher_EXPORTS || defined GEOMSKETCHER_EXPORTS +# define SKETCHER_SALOME_EXPORT _declspec( dllexport ) +# else +# define SKETCHER_SALOME_EXPORT _declspec( dllimport ) +# endif +#else +# define SKETCHER_SALOME_EXPORT +#endif - virtual void sectionClosed( int theSection, bool isClosed ){} - virtual void sectionAdded( int theSection ){} - virtual void sectionRemoved( int theSection ){} - virtual void sectionTypeChanged( int theSection ){} - - virtual void curveChanged(){} -}; - -#endif \ No newline at end of file +#endif // SKETCHER_HXX \ No newline at end of file diff --git a/src/SKETCHER/Sketcher_Profile.hxx b/src/SKETCHER/Sketcher_Profile.hxx index ed792f83b..8d36b639b 100644 --- a/src/SKETCHER/Sketcher_Profile.hxx +++ b/src/SKETCHER/Sketcher_Profile.hxx @@ -23,16 +23,12 @@ // File : Sketcher_Profile.h // Author : Damien COQUERET -#if defined WIN32 -# if defined SKETCHER_SALOME_EXPORTS || defined SKETCHER_EXPORTS || defined GEOMSketcher_EXPORTS || defined GEOMSKETCHER_EXPORTS -# define SKETCHER_SALOME_EXPORT _declspec( dllexport ) -# else -# define SKETCHER_SALOME_EXPORT _declspec( dllimport ) -# endif -#else -# define SKETCHER_SALOME_EXPORT -#endif +#ifndef _Sketcher_Profile_HXX_ +#define _Sketcher_Profile_HXX_ + + +#include "Sketcher.hxx" #include #include #include @@ -63,3 +59,5 @@ private: private: TCollection_AsciiString myCommand; }; + +#endif diff --git a/src/SKETCHER/Sketcher_Utils.cxx b/src/SKETCHER/Sketcher_Utils.cxx new file mode 100644 index 000000000..725a985cf --- /dev/null +++ b/src/SKETCHER/Sketcher_Utils.cxx @@ -0,0 +1,187 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : Sketcher_Utils.cxx +// Author : Sergey KHROMOV +// Module : GEOM + + +#include "Sketcher_Utils.hxx" + +#include +#include +#include +#include +#include +#include +#include + +const double POINT_CONFUSION_TOLERANCE = 0.0001; + + +//======================================================================= +// function : MakePolyline +// purpose : +//======================================================================= +TopoDS_Shape Sketcher_Utils::MakePolyline + (const std::list &theCoords2D, + const Standard_Boolean IsClosed, + const gp_Ax3 &thePlane) +{ + std::list aPoints; + TopoDS_Shape aResult; + + To3D(theCoords2D, thePlane, aPoints); + + Standard_Integer aNbPnts = aPoints.size(); + + if (aNbPnts > 1) { + if (IsClosed && + aPoints.front().IsEqual(aPoints.back(), POINT_CONFUSION_TOLERANCE)) { + // The polyline should be closed, first and last points are confused. + // Remove the last point. + aPoints.pop_back(); + --aNbPnts; + } + } + + if (aNbPnts == 1) { + // The result is vertex. + aResult = BRepBuilderAPI_MakeVertex(aPoints.front()).Vertex(); + } else if (aNbPnts > 1) { + // There are several points. Make a polyline. + std::list ::const_iterator anIter = aPoints.begin(); + TopoDS_Vertex aVtxFirst = + BRepBuilderAPI_MakeVertex(*anIter).Vertex(); + TopoDS_Vertex aVtx[2]; + TopoDS_Edge aSegment; + BRepBuilderAPI_MakeWire aMkWire; + + aVtx[0] = aVtxFirst; + + for (++anIter; anIter != aPoints.end(); ++anIter) { + aVtx[1] = BRepBuilderAPI_MakeVertex(*anIter).Vertex(); + aSegment = BRepBuilderAPI_MakeEdge(aVtx[0], aVtx[1]).Edge(); + aMkWire.Add(aSegment); + aVtx[0] = aVtx[1]; + } + + if (IsClosed) { + // Create a closing segment. + aSegment = BRepBuilderAPI_MakeEdge(aVtx[0], aVtxFirst).Edge(); + aMkWire.Add(aSegment); + } + + aResult = aMkWire.Wire(); + } + + return aResult; +} + +//======================================================================= +// function : MakeInterpolation +// purpose : +//======================================================================= +TopoDS_Shape Sketcher_Utils::MakeInterpolation + (const std::list &theCoords2D, + const Standard_Boolean IsClosed, + const gp_Ax3 &thePlane) +{ + std::list aPoints; + TopoDS_Shape aResult; + + To3D(theCoords2D, thePlane, aPoints); + + Standard_Integer aNbPnts = aPoints.size(); + + if (aNbPnts > 1) { + if (IsClosed && + aPoints.front().IsEqual(aPoints.back(), POINT_CONFUSION_TOLERANCE)) { + // The polyline should be closed, first and last points are confused. + // Remove the last point. + aPoints.pop_back(); + --aNbPnts; + } + } + + if (aNbPnts == 1) { + // The result is vertex. + aResult = BRepBuilderAPI_MakeVertex(aPoints.front()).Vertex(); + } else if (aNbPnts > 1) { + std::list ::const_iterator anIter = aPoints.begin(); + Handle(TColgp_HArray1OfPnt) aHCurvePoints = + new TColgp_HArray1OfPnt(1, aNbPnts); + Standard_Integer i; + + for (i = 1; anIter != aPoints.end(); ++anIter, ++i) { + aHCurvePoints->SetValue(i, *anIter); + } + + // Compute BSpline + Standard_Real aTol = Precision::Confusion(); + GeomAPI_Interpolate aGBC(aHCurvePoints, IsClosed, aTol); + + aGBC.Perform(); + + if (aGBC.IsDone()) { + TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge(aGBC.Curve()).Edge(); + aResult = BRepBuilderAPI_MakeWire(anEdge).Wire(); + } + } + + return aResult; +} + +//======================================================================= +// function : To3D +// purpose : +//======================================================================= +void Sketcher_Utils::To3D(const std::list &theCoords2D, + const gp_Ax3 &thePlane, + std::list &thePoints) +{ + thePoints.clear(); + + if (theCoords2D.empty() || theCoords2D.size() % 2 == 1) { + // Odd number of coordinates or empty list. Invalid case. + return; + } + + std::list ::const_iterator anIter = theCoords2D.begin(); + Standard_Real aX = *anIter; + Standard_Real aY = *(++anIter); + gp_Pnt aPLast = ElSLib::PlaneValue (aX, aY, thePlane); + gp_Pnt aPnt; + + thePoints.push_back(aPLast); + + for (++anIter; anIter != theCoords2D.end(); ++anIter) { + aX = *anIter; + aY = *(++anIter); + aPnt = ElSLib::PlaneValue (aX, aY, thePlane); + + if (!aPLast.IsEqual(aPnt, POINT_CONFUSION_TOLERANCE)) { + thePoints.push_back(aPnt); + aPLast = aPnt; + } + } +} diff --git a/src/SKETCHER/Sketcher_Utils.hxx b/src/SKETCHER/Sketcher_Utils.hxx new file mode 100644 index 000000000..75360111d --- /dev/null +++ b/src/SKETCHER/Sketcher_Utils.hxx @@ -0,0 +1,103 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 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, or (at your option) any later version. +// +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : Sketcher_Utils.h +// Author : Sergey KHROMOV + + +#ifndef _Sketcher_Utils_HXX_ +#define _Sketcher_Utils_HXX_ + + +#include "Sketcher.hxx" + +#include +#include + +#include + + +class gp_Ax3; + + +/** + * This class represents a set of utils needed to compute sketcher geometry. + */ +class SKETCHER_SALOME_EXPORT Sketcher_Utils +{ + +public: + + /** + * This method makes a shape from the list of 2D coordinates on the working + * plane. The result represents a vertex if there is only one point + * in the contour. If there are more then one points the result is a wire + * consisting of linear segments between points. It is either closed or not + * depending on the flag IsClosed. In case of failure the result is a null + * shape. + * + * \param theCoords2D is the list of coordinates in the form x1, y1, x2, y2, + * ..., xN, yN for N 2D points. + * \param IsClosed if Standard_True the first and last points are connected + * to form the closed contour. + * \param thePlane the working plane coordinate system. + * \return the result polyline. + */ + static TopoDS_Shape MakePolyline(const std::list &theCoords2D, + const Standard_Boolean IsClosed, + const gp_Ax3 &thePlane); + + /** + * This method makes a shape from the list of 2D coordinates on the working + * plane. The result represents a vertex if there is only one point + * in the contour. If there are more then one points the result is a wire + * consisting of a points interpolation BSpline curve. It is either closed + * or not depending on the flag IsClosed. In case of failure the result is + * a null shape. + * + * \param theCoords2D is the list of coordinates in the form x1, y1, x2, y2, + * ..., xN, yN for N 2D points. + * \param IsClosed if Standard_True the first and last points are connected + * to form the closed contour. + * \param thePlane the working plane coordinate system. + * \return the result interpolation wire. + */ + static TopoDS_Shape MakeInterpolation(const std::list &theCoords2D, + const Standard_Boolean IsClosed, + const gp_Ax3 &thePlane); + + /** + * This method converts the list of 2D point coordinates into 3D points + * basing on the working plane. The result list contains not confused points. + * + * \param theCoords2D is the list of coordinates in the form x1, y1, x2, y2, + * ..., xN, yN for N 2D points. + * \param thePlane the working plane coordinate system. + * \param thePoints the list of 3D points. + */ + static void To3D(const std::list &theCoords2D, + const gp_Ax3 &thePlane, + std::list &thePoints); + +}; + +#endif From a717938af107e80130e0dd370cf3ee95b530b8cc Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 10 Oct 2014 17:32:40 +0400 Subject: [PATCH 107/118] Fix pb with wrong Help pages in dialog boxes --- src/MeasureGUI/MeasureGUI_AngleDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_InertiaDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_NormaleDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_PointDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx | 2 +- src/MeasureGUI/MeasureGUI_WhatisDlg.cxx | 2 +- src/RepairGUI/RepairGUI_FreeFacesDlg.cxx | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx index 9afe3b922..2f8f47bbd 100644 --- a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx @@ -113,7 +113,7 @@ MeasureGUI_AngleDlg::MeasureGUI_AngleDlg (GeometryGUI* GUI, QWidget* parent) /***************************************************************/ // Help page reference - myHelpFileName = "using_measurement_tools_page.html#angle_anchor"; + myHelpFileName = "angle_page.html"; // Initialisation Init(); diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx index 26763b814..8d7961412 100644 --- a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx @@ -96,7 +96,7 @@ MeasureGUI_CheckCompoundOfBlocksDlg::MeasureGUI_CheckCompoundOfBlocksDlg( Geomet /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#check_compound_anchor"; + myHelpFileName = "check_compound_of_blocks_page.html"; /* Initialisation */ Init(); diff --git a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx index 8debf294c..de712233d 100644 --- a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx @@ -87,7 +87,7 @@ MeasureGUI_CheckSelfIntersectionsDlg::MeasureGUI_CheckSelfIntersectionsDlg (Geom /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#check_self_intersections_anchor"; + myHelpFileName = "check_self_intersections_page.html"; /* Initialisation */ Init(); diff --git a/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx index 42b9e3abd..3a4394d63 100644 --- a/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CheckShapeDlg.cxx @@ -97,7 +97,7 @@ MeasureGUI_CheckShapeDlg::MeasureGUI_CheckShapeDlg( GeometryGUI* GUI, QWidget* p /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#check_anchor"; + myHelpFileName = "check_shape_page.html"; /* Initialisation */ Init(); diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx index 47a240e48..3a17446b4 100644 --- a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx @@ -87,7 +87,7 @@ MeasureGUI_InertiaDlg::MeasureGUI_InertiaDlg( GeometryGUI* GUI, QWidget* parent /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#inertia_anchor"; + myHelpFileName = "inertia_page.html"; /* Initialisation */ Init(); diff --git a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx index 0e34b7650..74ca035f5 100644 --- a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx @@ -77,7 +77,7 @@ MeasureGUI_MaxToleranceDlg::MeasureGUI_MaxToleranceDlg( GeometryGUI* GUI, QWidge /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#tolerance_anchor"; + myHelpFileName = "tolerance_page.html"; /* Initialisation */ Init(); diff --git a/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx b/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx index 457714ee8..53a5c3199 100644 --- a/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_NormaleDlg.cxx @@ -80,7 +80,7 @@ MeasureGUI_NormaleDlg::MeasureGUI_NormaleDlg (GeometryGUI* theGeometryGUI, QWidg layout->addWidget(GroupArgs); /***************************************************************/ - setHelpFileName("using_measurement_tools_page.html#normale_anchor"); + setHelpFileName("normal_page.html"); Init(); } diff --git a/src/MeasureGUI/MeasureGUI_PointDlg.cxx b/src/MeasureGUI/MeasureGUI_PointDlg.cxx index e21d5252f..245bc0a13 100644 --- a/src/MeasureGUI/MeasureGUI_PointDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_PointDlg.cxx @@ -80,7 +80,7 @@ MeasureGUI_PointDlg::MeasureGUI_PointDlg( GeometryGUI* GUI, QWidget* parent ) layout->setMargin( 0 ); layout->setSpacing( 6 ); layout->addWidget( myGrp ); - myHelpFileName = "using_measurement_tools_page.html#point_coord_anchor"; + myHelpFileName = "point_coordinates_page.html"; Init(); } diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx index 9e434c969..9b850db97 100644 --- a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx @@ -77,7 +77,7 @@ MeasureGUI_PropertiesDlg::MeasureGUI_PropertiesDlg( GeometryGUI* GUI, QWidget* p /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#basic_prop_anchor"; + myHelpFileName = "basic_prop_page.html"; /* Initialisation */ Init(); diff --git a/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx b/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx index 5789419de..7d7fc2baa 100644 --- a/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx @@ -145,7 +145,7 @@ MeasureGUI_WhatisDlg::MeasureGUI_WhatisDlg( GeometryGUI* GUI, QWidget* parent ) /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#whatis_anchor"; + myHelpFileName = "whatis_page.html"; /* Initialisation */ Init(); diff --git a/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx b/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx index ae77997a0..8fe66a4bd 100644 --- a/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx +++ b/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx @@ -124,7 +124,7 @@ RepairGUI_FreeFacesDlg::RepairGUI_FreeFacesDlg( GeometryGUI* GUI, QWidget* paren aLay->addStretch(); aLay->addWidget( aFrame ); - myHelpFileName = "using_measurement_tools_page.html#faces_anchor"; + myHelpFileName = "free_faces_page.html"; connect( aCloseBtn, SIGNAL( clicked() ), SLOT( onClose() ) ); connect( aHelpBtn, SIGNAL( clicked() ), SLOT( onHelp() ) ); From 77aff1d9751a9ca533007082c489fb1b4e906fea Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 15 Oct 2014 14:29:45 +0400 Subject: [PATCH 108/118] ParaView 4.2 porting --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 91ef62ccb..c03791e8c 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,7 +138,7 @@ ENDIF(SALOME_BUILD_GUI) ## FIND_PACKAGE(SalomeCAS REQUIRED) -FIND_PACKAGE(SalomeVTK 6.1 REQUIRED) +FIND_PACKAGE(SalomeVTK REQUIRED) # OpenCV IF(SALOME_GEOM_USE_OPENCV) From a8bbe4660f22efec885568b1a0aa37754b140c8f Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 21 Oct 2014 10:48:55 +0400 Subject: [PATCH 109/118] IPAL52533: TC7.5.0: 3D Sketch - preview of angle value is wrong --- src/EntityGUI/EntityGUI_3DSketcherDlg.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx b/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx index 4178882f1..09b96a294 100755 --- a/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx +++ b/src/EntityGUI/EntityGUI_3DSketcherDlg.cxx @@ -1707,7 +1707,7 @@ Handle(AIS_AngleDimension) EntityGUI_3DSketcherDlg::createAISAngleDimension(doub Handle(AIS_AngleDimension) anIO = new AIS_AngleDimension( P1, P0, P2 ); - anIO->SetCustomValue( theAngle ); + //anIO->SetCustomValue( theAngle ); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); int w = resMgr->integerValue( "Geometry", "measures_line_width", 1 ); From 04abbcb30729dff3c84bb1cf93d385528727a8a1 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 21 Oct 2014 17:04:53 +0400 Subject: [PATCH 110/118] Add missing dependencies --- idl/CMakeLists.txt | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt index e8ebb6082..3b4210096 100755 --- a/idl/CMakeLists.txt +++ b/idl/CMakeLists.txt @@ -70,41 +70,45 @@ SET(IDL_INCLUDE_DIRS ${KERNEL_ROOT_DIR}/idl/salome ${CMAKE_CURRENT_SOURCE_DIR} ) + SET(IDL_LINK_FLAGS ${KERNEL_SalomeIDLKernel} ) +SET(IDL_LINK_PLUGIN_FLAGS + ${KERNEL_SalomeIDLKernel} + SalomeIDLGEOM +) + +SET(IDL_LINK_SUPERV_FLAGS + ${KERNEL_SalomeIDLKernel} + SalomeIDLGEOM + SalomeIDLAdvancedGEOM +) + OMNIORB_ADD_MODULE(SalomeIDLGEOM "${SalomeIDLGEOM_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") INSTALL(TARGETS SalomeIDLGEOM EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLAdvancedGEOM "${SalomeIDLAdvancedGEOM_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLAdvancedGEOM SalomeIDLGEOM) +OMNIORB_ADD_MODULE(SalomeIDLAdvancedGEOM "${SalomeIDLAdvancedGEOM_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_PLUGIN_FLAGS}") INSTALL(TARGETS SalomeIDLAdvancedGEOM EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLSTLPlugin "${SalomeIDLSTLPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLSTLPlugin SalomeIDLGEOM) +OMNIORB_ADD_MODULE(SalomeIDLSTLPlugin "${SalomeIDLSTLPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_PLUGIN_FLAGS}") INSTALL(TARGETS SalomeIDLSTLPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLBREPPlugin "${SalomeIDLBREPPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLBREPPlugin SalomeIDLGEOM) +OMNIORB_ADD_MODULE(SalomeIDLBREPPlugin "${SalomeIDLBREPPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_PLUGIN_FLAGS}") INSTALL(TARGETS SalomeIDLBREPPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLSTEPPlugin "${SalomeIDLSTEPPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLSTEPPlugin SalomeIDLGEOM) +OMNIORB_ADD_MODULE(SalomeIDLSTEPPlugin "${SalomeIDLSTEPPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_PLUGIN_FLAGS}") INSTALL(TARGETS SalomeIDLSTEPPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLIGESPlugin "${SalomeIDLIGESPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLIGESPlugin SalomeIDLGEOM) +OMNIORB_ADD_MODULE(SalomeIDLIGESPlugin "${SalomeIDLIGESPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_PLUGIN_FLAGS}") INSTALL(TARGETS SalomeIDLIGESPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLXAOPlugin "${SalomeIDLXAOPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLXAOPlugin SalomeIDLGEOM) +OMNIORB_ADD_MODULE(SalomeIDLXAOPlugin "${SalomeIDLXAOPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_PLUGIN_FLAGS}") INSTALL(TARGETS SalomeIDLXAOPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLVTKPlugin "${SalomeIDLVTKPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLVTKPlugin SalomeIDLGEOM) +OMNIORB_ADD_MODULE(SalomeIDLVTKPlugin "${SalomeIDLVTKPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_PLUGIN_FLAGS}") INSTALL(TARGETS SalomeIDLVTKPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) -OMNIORB_ADD_MODULE(SalomeIDLGEOMSuperv "${SalomeIDLGEOMSuperv_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") -ADD_DEPENDENCIES(SalomeIDLGEOMSuperv SalomeIDLGEOM SalomeIDLAdvancedGEOM) +OMNIORB_ADD_MODULE(SalomeIDLGEOMSuperv "${SalomeIDLGEOMSuperv_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_SUPERV_FLAGS}") INSTALL(TARGETS SalomeIDLGEOMSuperv EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) From b7989b4db56e9ddd30a8496d112f9a49163175e0 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 21 Oct 2014 17:43:27 +0400 Subject: [PATCH 111/118] Add missing preference item --- resources/SalomeApp.xml.in | 1 + src/GEOMGUI/GEOMGUI_Selection.cxx | 2 +- src/GEOMGUI/GeometryGUI.cxx | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 82a6f2b6c..569ff16a8 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -85,6 +85,7 @@ + diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index 583a73078..014c622c2 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -380,7 +380,7 @@ QString GEOMGUI_Selection::displayMode( const int index ) const bool GEOMGUI_Selection::autoBringToFront( const int /*index*/ ) const { - return SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" ); + return SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" ); } bool GEOMGUI_Selection::isVectorsMode( const int index ) const diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index d3d37411c..3cb322e78 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -2020,7 +2020,7 @@ void GeometryGUI::updateCreationInfo() void GeometryGUI::onAutoBringToFront() { - bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" ); + bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" ); if( !isAutoBringToFront ) return; From 3c1414974ed3d3b939640fa7c8dd87178e74e8c8 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 21 Oct 2014 17:45:02 +0400 Subject: [PATCH 112/118] Remove obsolete staff; redesign Handle-based and CDL-generated classes --- src/BREPPlugin/BREPPlugin_GUI.cxx | 2 +- src/BasicGUI/BasicGUI_CurveDlg.cxx | 1 - src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx | 2 +- src/BooleanGUI/BooleanGUI_Dialog.cxx | 2 +- src/BuildGUI/BuildGUI_WireDlg.cxx | 2 +- src/DependencyTree/DependencyTree_View.cxx | 2 +- .../DependencyTree_ViewModel.cxx | 1 - src/DisplayGUI/DisplayGUI.cxx | 1 - src/EntityGUI/EntityGUI.cxx | 2 +- .../EntityGUI_FeatureDetectorDlg.cxx | 2 +- src/EntityGUI/EntityGUI_FieldDlg.cxx | 2 +- src/EntityGUI/EntityGUI_SubShapeDlg.cxx | 2 +- src/GEOM/CMakeLists.txt | 9 - src/GEOM/GEOM_Application.cxx | 21 +- src/GEOM/GEOM_Application.hxx | 88 +------ src/GEOM/GEOM_Application.ixx | 85 ------- src/GEOM/GEOM_Application.jxx | 31 --- ...teratorOfDataMapOfAsciiStringTransient.hxx | 107 --------- ...ratorOfDataMapOfAsciiStringTransient_0.cxx | 57 ----- ...MapNodeOfDataMapOfAsciiStringTransient.hxx | 144 ------------ ...pNodeOfDataMapOfAsciiStringTransient_0.cxx | 106 --------- .../GEOM_DataMapOfAsciiStringTransient.hxx | 97 +------- .../GEOM_DataMapOfAsciiStringTransient_0.cxx | 60 ----- src/GEOM/GEOM_Engine.cxx | 1 - src/GEOM/Handle_GEOM_Application.hxx | 99 -------- ...MapNodeOfDataMapOfAsciiStringTransient.hxx | 95 -------- src/GEOMBase/GEOMBase.cxx | 1 - src/GEOMBase/GEOMBase_Helper.cxx | 2 +- src/GEOMGUI/GEOM_Displayer.cxx | 5 +- src/GEOMGUI/GeometryGUI.cxx | 3 +- src/GEOMToolsGUI/GEOMToolsGUI.cxx | 1 - src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 1 - src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx | 1 - .../GEOMToolsGUI_MaterialPropertiesDlg.cxx | 2 +- .../GEOMToolsGUI_ReduceStudyDlg.cxx | 2 +- .../GEOMToolsGUI_TransparencyDlg.cxx | 1 - src/GroupGUI/GroupGUI_GroupDlg.cxx | 2 +- src/IGESPlugin/IGESPlugin_GUI.cxx | 2 +- src/OBJECT/CMakeLists.txt | 9 - src/OBJECT/GEOM_AISShape.cxx | 50 ++-- src/OBJECT/GEOM_AISShape.hxx | 221 +++++++----------- src/OBJECT/GEOM_AISShape.ixx | 91 -------- src/OBJECT/GEOM_AISShape.jxx | 41 ---- src/OBJECT/GEOM_InteractiveObject.cxx | 23 +- src/OBJECT/GEOM_InteractiveObject.hxx | 108 ++------- src/OBJECT/GEOM_InteractiveObject.ixx | 83 ------- src/OBJECT/GEOM_InteractiveObject.jxx | 32 --- src/OBJECT/GEOM_TopWireframeShape.cxx | 5 +- src/OBJECT/GEOM_TopWireframeShape.hxx | 98 ++------ src/OBJECT/GEOM_TopWireframeShape.ixx | 87 ------- src/OBJECT/GEOM_TopWireframeShape.jxx | 33 --- src/OBJECT/Handle_GEOM_AISShape.hxx | 100 -------- src/OBJECT/Handle_GEOM_InteractiveObject.hxx | 100 -------- src/OBJECT/Handle_GEOM_TopWireframeShape.hxx | 100 -------- src/RepairGUI/RepairGUI_GlueDlg.cxx | 2 +- src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx | 2 +- src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx | 1 - src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx | 2 +- src/STEPPlugin/STEPPlugin_GUI.cxx | 2 +- src/STLPlugin/STLPlugin_GUI.cxx | 2 +- src/TransformationGUI/TransformationGUI.cxx | 2 +- src/VTKPlugin/VTKPlugin_GUI.cxx | 2 +- 62 files changed, 234 insertions(+), 2006 deletions(-) delete mode 100644 src/GEOM/GEOM_Application.ixx delete mode 100644 src/GEOM/GEOM_Application.jxx delete mode 100644 src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx delete mode 100644 src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx delete mode 100644 src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx delete mode 100644 src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx delete mode 100644 src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx delete mode 100644 src/GEOM/Handle_GEOM_Application.hxx delete mode 100644 src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx delete mode 100644 src/OBJECT/GEOM_AISShape.ixx delete mode 100644 src/OBJECT/GEOM_AISShape.jxx delete mode 100644 src/OBJECT/GEOM_InteractiveObject.ixx delete mode 100644 src/OBJECT/GEOM_InteractiveObject.jxx delete mode 100755 src/OBJECT/GEOM_TopWireframeShape.ixx delete mode 100755 src/OBJECT/GEOM_TopWireframeShape.jxx delete mode 100644 src/OBJECT/Handle_GEOM_AISShape.hxx delete mode 100644 src/OBJECT/Handle_GEOM_InteractiveObject.hxx delete mode 100755 src/OBJECT/Handle_GEOM_TopWireframeShape.hxx diff --git a/src/BREPPlugin/BREPPlugin_GUI.cxx b/src/BREPPlugin/BREPPlugin_GUI.cxx index e6430947a..8ccabe9a8 100644 --- a/src/BREPPlugin/BREPPlugin_GUI.cxx +++ b/src/BREPPlugin/BREPPlugin_GUI.cxx @@ -29,7 +29,7 @@ #include #include #include -#include +#include // GEOM includes #include "GeometryGUI.h" diff --git a/src/BasicGUI/BasicGUI_CurveDlg.cxx b/src/BasicGUI/BasicGUI_CurveDlg.cxx index e3b91042d..500f204d4 100644 --- a/src/BasicGUI/BasicGUI_CurveDlg.cxx +++ b/src/BasicGUI/BasicGUI_CurveDlg.cxx @@ -37,7 +37,6 @@ #include #include -#include #include #include diff --git a/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx b/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx index b21c722ca..93122335a 100644 --- a/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx +++ b/src/BlocksGUI/BlocksGUI_ExplodeDlg.cxx @@ -39,7 +39,7 @@ #include #include #include -#include +#include //================================================================================= // class : BlocksGUI_ExplodeDlg() diff --git a/src/BooleanGUI/BooleanGUI_Dialog.cxx b/src/BooleanGUI/BooleanGUI_Dialog.cxx index 3ee6ba47c..bbf88ebe1 100644 --- a/src/BooleanGUI/BooleanGUI_Dialog.cxx +++ b/src/BooleanGUI/BooleanGUI_Dialog.cxx @@ -35,7 +35,7 @@ #include #include #include -#include +#include // VSR 22/08/2012: issue 0021787: remove "Preview" button from BOP and Partition operations // Comment next line to enable preview in BOP dialog box diff --git a/src/BuildGUI/BuildGUI_WireDlg.cxx b/src/BuildGUI/BuildGUI_WireDlg.cxx index 56625e30d..c0d98db63 100644 --- a/src/BuildGUI/BuildGUI_WireDlg.cxx +++ b/src/BuildGUI/BuildGUI_WireDlg.cxx @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/DependencyTree/DependencyTree_View.cxx b/src/DependencyTree/DependencyTree_View.cxx index 68dcf7669..230bfa53a 100644 --- a/src/DependencyTree/DependencyTree_View.cxx +++ b/src/DependencyTree/DependencyTree_View.cxx @@ -28,7 +28,7 @@ #include #include #include -#include +#include // GEOM includes #include diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index e6c853008..e191cad1a 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -25,7 +25,6 @@ #include #include #include -#include #include #include diff --git a/src/DisplayGUI/DisplayGUI.cxx b/src/DisplayGUI/DisplayGUI.cxx index 3f407fd34..29f51945d 100644 --- a/src/DisplayGUI/DisplayGUI.cxx +++ b/src/DisplayGUI/DisplayGUI.cxx @@ -40,7 +40,6 @@ #include #include -#include #include #include diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx index 3a3bd6297..95e5f1565 100644 --- a/src/EntityGUI/EntityGUI.cxx +++ b/src/EntityGUI/EntityGUI.cxx @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx index 1f7ff49d5..5636e4a18 100644 --- a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx +++ b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx @@ -46,7 +46,7 @@ #include #include -#include +#include #include diff --git a/src/EntityGUI/EntityGUI_FieldDlg.cxx b/src/EntityGUI/EntityGUI_FieldDlg.cxx index cead457e7..d940f5040 100644 --- a/src/EntityGUI/EntityGUI_FieldDlg.cxx +++ b/src/EntityGUI/EntityGUI_FieldDlg.cxx @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/EntityGUI/EntityGUI_SubShapeDlg.cxx b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx index 1b2060f3f..667ddd303 100644 --- a/src/EntityGUI/EntityGUI_SubShapeDlg.cxx +++ b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/GEOM/CMakeLists.txt b/src/GEOM/CMakeLists.txt index 92dd5f5c4..74de5cb4b 100755 --- a/src/GEOM/CMakeLists.txt +++ b/src/GEOM/CMakeLists.txt @@ -48,9 +48,6 @@ SET(_link_LIBRARIES SET(GEOM_HEADERS GEOM_Application.hxx - GEOM_Application.ixx - GEOM_Application.jxx - Handle_GEOM_Application.hxx GEOM_Engine.hxx GEOM_Function.hxx GEOM_Object.hxx @@ -61,10 +58,7 @@ SET(GEOM_HEADERS GEOM_ISubShape.hxx GEOM_Solver.hxx GEOM_PythonDump.hxx - GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx - GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx GEOM_DataMapOfAsciiStringTransient.hxx - Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx GEOM_BaseObject.hxx ) @@ -82,9 +76,6 @@ SET(GEOM_SOURCES GEOM_BaseDriver.cxx GEOM_SubShapeDriver.cxx GEOM_PythonDump.cxx - GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx - GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx - GEOM_DataMapOfAsciiStringTransient_0.cxx ) # --- rules --- diff --git a/src/GEOM/GEOM_Application.cxx b/src/GEOM/GEOM_Application.cxx index 8c13b8cce..79b8dcc24 100644 --- a/src/GEOM/GEOM_Application.cxx +++ b/src/GEOM/GEOM_Application.cxx @@ -20,8 +20,12 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include -#include +#include + +#include + +IMPLEMENT_STANDARD_HANDLE (GEOM_Application, TDocStd_Application) +IMPLEMENT_STANDARD_RTTIEXT(GEOM_Application, TDocStd_Application) //======================================================================= //function : GEOM_Application @@ -32,6 +36,14 @@ GEOM_Application::GEOM_Application() { } +//======================================================================= +//function : ~GEOM_Application +//purpose : +//======================================================================= + +GEOM_Application::~GEOM_Application() +{ +} //======================================================================= //function : Formats @@ -53,8 +65,3 @@ Standard_CString GEOM_Application::ResourcesName() { return Standard_CString ("GEOMDS_Resources"); } - - - - - diff --git a/src/GEOM/GEOM_Application.hxx b/src/GEOM/GEOM_Application.hxx index e6d98f164..1fad0e099 100644 --- a/src/GEOM/GEOM_Application.hxx +++ b/src/GEOM/GEOM_Application.hxx @@ -20,92 +20,28 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : GEOM_Application.hxx -// Module : GEOM -// #ifndef _GEOM_Application_HeaderFile #define _GEOM_Application_HeaderFile -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_GEOM_Application_HeaderFile -#include -#endif - -#ifndef _TDocStd_Application_HeaderFile #include -#endif -#ifndef _Standard_CString_HeaderFile -#include -#endif +#include +#include + class TColStd_SequenceOfExtendedString; +class GEOM_Application : public TDocStd_Application +{ +public: + Standard_EXPORT GEOM_Application(); + Standard_EXPORT ~GEOM_Application(); -class GEOM_Application : public TDocStd_Application { + Standard_EXPORT virtual void Formats(TColStd_SequenceOfExtendedString& Formats); + Standard_EXPORT Standard_CString ResourcesName(); public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT GEOM_Application(); -Standard_EXPORT virtual void Formats(TColStd_SequenceOfExtendedString& Formats) ; -Standard_EXPORT Standard_CString ResourcesName() ; -Standard_EXPORT ~GEOM_Application(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& GEOM_Application_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - + DEFINE_STANDARD_RTTI(GEOM_Application); }; - - - - -// other inline functions and methods (like "C++: function call" methods) -// - +DEFINE_STANDARD_HANDLE(GEOM_Application, TDocStd_Application) #endif diff --git a/src/GEOM/GEOM_Application.ixx b/src/GEOM/GEOM_Application.ixx deleted file mode 100644 index ccf2e0681..000000000 --- a/src/GEOM/GEOM_Application.ixx +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File : GEOM_Application.ixx -// Module : GEOM -// -#include "GEOM_Application.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -GEOM_Application::~GEOM_Application() {} - - - -Standard_EXPORT Handle_Standard_Type& GEOM_Application_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(TDocStd_Application); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TDocStd_Application); - static Handle_Standard_Type aType2 = STANDARD_TYPE(CDF_Application); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(CDF_Application); - static Handle_Standard_Type aType3 = STANDARD_TYPE(CDM_Application); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(CDM_Application); - static Handle_Standard_Type aType4 = STANDARD_TYPE(Standard_Transient); - if ( aType4.IsNull()) aType4 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,aType4,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("GEOM_Application", - sizeof(GEOM_Application), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - -// DownCast method -// allow safe downcasting - - -const Handle(GEOM_Application) Handle(GEOM_Application)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOM_Application) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOM_Application))) { - _anOtherObject = Handle(GEOM_Application)((Handle(GEOM_Application)&)AnObject); - } - } - - return _anOtherObject ; -} - - -const Handle(Standard_Type)& GEOM_Application::DynamicType() const -{ - return STANDARD_TYPE(GEOM_Application) ; -} -Standard_Boolean GEOM_Application::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(GEOM_Application) == AType || TDocStd_Application::IsKind(AType)); -} -Handle_GEOM_Application::~Handle_GEOM_Application() {} diff --git a/src/GEOM/GEOM_Application.jxx b/src/GEOM/GEOM_Application.jxx deleted file mode 100644 index 77a83467a..000000000 --- a/src/GEOM/GEOM_Application.jxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File : GEOM_Application.jxx -// Module : GEOM -// -#ifndef _TColStd_SequenceOfExtendedString_HeaderFile -#include -#endif -#ifndef _GEOM_Application_HeaderFile -#include "GEOM_Application.hxx" -#endif diff --git a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx deleted file mode 100644 index f7c3959eb..000000000 --- a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_HeaderFile -#define _GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_HeaderFile - -#ifndef _TCollection_BasicMapIterator_HeaderFile -#include -#endif -#ifndef _Handle_Standard_Transient_HeaderFile -#include -#endif -#ifndef _Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile -#include -#endif -class Standard_NoSuchObject; -class TCollection_AsciiString; -class Standard_Transient; -class GEOM_DataMapOfAsciiStringTransient; -class GEOM_DataMapNodeOfDataMapOfAsciiStringTransient; - - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -class GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient : public TCollection_BasicMapIterator { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient(); -Standard_EXPORT GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient(const GEOM_DataMapOfAsciiStringTransient& aMap); -Standard_EXPORT void Initialize(const GEOM_DataMapOfAsciiStringTransient& aMap) ; -Standard_EXPORT const TCollection_AsciiString& Key() const; -Standard_EXPORT const Handle_Standard_Transient& Value() const; - - - - - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - -}; - - - - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx deleted file mode 100644 index 508d3458c..000000000 --- a/src/GEOM/GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_0.cxx +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#ifndef _Standard_NoSuchObject_HeaderFile -#include -#endif -#ifndef _TCollection_AsciiString_HeaderFile -#include -#endif -#ifndef _Standard_Transient_HeaderFile -#include -#endif -#ifndef _GEOM_DataMapOfAsciiStringTransient_HeaderFile -#include -#endif -#ifndef _GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile -#include -#endif - - -#define TheKey TCollection_AsciiString -#define TheKey_hxx -#define TheItem Handle_Standard_Transient -#define TheItem_hxx -#define Hasher TCollection_AsciiString -#define Hasher_hxx -#define TCollection_DataMapNode GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_hxx -#define TCollection_DataMapIterator GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient -#define TCollection_DataMapIterator_hxx -#define Handle_TCollection_DataMapNode Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_Type_() GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_Type_() -#define TCollection_DataMap GEOM_DataMapOfAsciiStringTransient -#define TCollection_DataMap_hxx -#include - diff --git a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx deleted file mode 100644 index 92ab1a2d2..000000000 --- a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile -#define _GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile -#include -#endif - -#ifndef _TCollection_AsciiString_HeaderFile -#include -#endif -#ifndef _Handle_Standard_Transient_HeaderFile -#include -#endif -#ifndef _TCollection_MapNode_HeaderFile -#include -#endif -#ifndef _TCollection_MapNodePtr_HeaderFile -#include -#endif -class Standard_Transient; -class TCollection_AsciiString; -class GEOM_DataMapOfAsciiStringTransient; -class GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient; - - -class GEOM_DataMapNodeOfDataMapOfAsciiStringTransient : public TCollection_MapNode { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -GEOM_DataMapNodeOfDataMapOfAsciiStringTransient(const TCollection_AsciiString& K,const Handle(Standard_Transient)& I,const TCollection_MapNodePtr& n); - TCollection_AsciiString& Key() const; - Handle_Standard_Transient& Value() const; -Standard_EXPORT ~GEOM_DataMapNodeOfDataMapOfAsciiStringTransient(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -TCollection_AsciiString myKey; -Handle_Standard_Transient myValue; - - -}; - -#define TheKey TCollection_AsciiString -#define TheKey_hxx -#define TheItem Handle_Standard_Transient -#define TheItem_hxx -#define Hasher TCollection_AsciiString -#define Hasher_hxx -#define TCollection_DataMapNode GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_hxx -#define TCollection_DataMapIterator GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient -#define TCollection_DataMapIterator_hxx -#define Handle_TCollection_DataMapNode Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_Type_() GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_Type_() -#define TCollection_DataMap GEOM_DataMapOfAsciiStringTransient -#define TCollection_DataMap_hxx - -#include - -#undef TheKey -#undef TheKey_hxx -#undef TheItem -#undef TheItem_hxx -#undef Hasher -#undef Hasher_hxx -#undef TCollection_DataMapNode -#undef TCollection_DataMapNode_hxx -#undef TCollection_DataMapIterator -#undef TCollection_DataMapIterator_hxx -#undef Handle_TCollection_DataMapNode -#undef TCollection_DataMapNode_Type_ -#undef TCollection_DataMap -#undef TCollection_DataMap_hxx - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx deleted file mode 100644 index c60f7fa19..000000000 --- a/src/GEOM/GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_0.cxx +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -#ifndef _Standard_Transient_HeaderFile -#include -#endif -#ifndef _TCollection_AsciiString_HeaderFile -#include -#endif -#ifndef _GEOM_DataMapOfAsciiStringTransient_HeaderFile -#include -#endif -#ifndef _GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_HeaderFile -#include -#endif -GEOM_DataMapNodeOfDataMapOfAsciiStringTransient::~GEOM_DataMapNodeOfDataMapOfAsciiStringTransient() {} - - - -Standard_EXPORT Handle_Standard_Type& GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(TCollection_MapNode); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TCollection_MapNode); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("GEOM_DataMapNodeOfDataMapOfAsciiStringTransient", - sizeof(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient) Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient))) { - _anOtherObject = Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)((Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& GEOM_DataMapNodeOfDataMapOfAsciiStringTransient::DynamicType() const -{ - return STANDARD_TYPE(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient) ; -} -Standard_Boolean GEOM_DataMapNodeOfDataMapOfAsciiStringTransient::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient) == AType || TCollection_MapNode::IsKind(AType)); -} -Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient::~Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient() {} -#define TheKey TCollection_AsciiString -#define TheKey_hxx -#define TheItem Handle_Standard_Transient -#define TheItem_hxx -#define Hasher TCollection_AsciiString -#define Hasher_hxx -#define TCollection_DataMapNode GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_hxx -#define TCollection_DataMapIterator GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient -#define TCollection_DataMapIterator_hxx -#define Handle_TCollection_DataMapNode Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_Type_() GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_Type_() -#define TCollection_DataMap GEOM_DataMapOfAsciiStringTransient -#define TCollection_DataMap_hxx -#include - diff --git a/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx b/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx index 6a6ed7124..1a1b70044 100644 --- a/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx +++ b/src/GEOM/GEOM_DataMapOfAsciiStringTransient.hxx @@ -23,96 +23,11 @@ #ifndef _GEOM_DataMapOfAsciiStringTransient_HeaderFile #define _GEOM_DataMapOfAsciiStringTransient_HeaderFile -#ifndef _TCollection_BasicMap_HeaderFile -#include -#endif -#ifndef _Handle_Standard_Transient_HeaderFile -#include -#endif -#ifndef _Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile -#include -#endif -#ifndef _Standard_Integer_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif +#include +#include +#include -class Standard_DomainError; -class Standard_NoSuchObject; -class TCollection_AsciiString; -class Standard_Transient; -class GEOM_DataMapNodeOfDataMapOfAsciiStringTransient; -class GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient; +typedef NCollection_DataMap GEOM_DataMapOfAsciiStringTransient; +typedef GEOM_DataMapOfAsciiStringTransient::Iterator GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient; -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -#include - -class GEOM_DataMapOfAsciiStringTransient : public TCollection_BasicMap { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - - // Methods PUBLIC - // -Standard_EXPORT GEOM_DataMapOfAsciiStringTransient(const Standard_Integer NbBuckets = 1); -Standard_EXPORT GEOM_DataMapOfAsciiStringTransient& Assign(const GEOM_DataMapOfAsciiStringTransient& Other) ; - GEOM_DataMapOfAsciiStringTransient& operator =(const GEOM_DataMapOfAsciiStringTransient& Other) -{ - return Assign(Other); -} - -Standard_EXPORT void ReSize(const Standard_Integer NbBuckets) ; -Standard_EXPORT void Clear() ; -~GEOM_DataMapOfAsciiStringTransient() -{ - Clear(); -} - -Standard_EXPORT Standard_Boolean Bind(const TCollection_AsciiString& K,const Handle(Standard_Transient)& I) ; -Standard_EXPORT Standard_Boolean IsBound(const TCollection_AsciiString& K) const; -Standard_EXPORT Standard_Boolean UnBind(const TCollection_AsciiString& K) ; -Standard_EXPORT const Handle_Standard_Transient& Find(const TCollection_AsciiString& K) const; - const Handle_Standard_Transient& operator()(const TCollection_AsciiString& K) const -{ - return Find(K); -} - -Standard_EXPORT Handle_Standard_Transient& ChangeFind(const TCollection_AsciiString& K) ; - Handle_Standard_Transient& operator()(const TCollection_AsciiString& K) -{ - return ChangeFind(K); -} - -Standard_EXPORT Standard_Address Find1 (const TCollection_AsciiString& K) const; -Standard_EXPORT Standard_Address ChangeFind1 (const TCollection_AsciiString& K); - -private: - // Methods PRIVATE - // -Standard_EXPORT GEOM_DataMapOfAsciiStringTransient(const GEOM_DataMapOfAsciiStringTransient& Other); -}; - -// other Inline functions and methods (like "C++: function call" methods) -// - -#endif +#endif // _GEOM_DataMapOfAsciiStringTransient_HeaderFile diff --git a/src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx b/src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx deleted file mode 100644 index 8e14c0d01..000000000 --- a/src/GEOM/GEOM_DataMapOfAsciiStringTransient_0.cxx +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#ifndef _Standard_DomainError_HeaderFile -#include -#endif -#ifndef _Standard_NoSuchObject_HeaderFile -#include -#endif -#ifndef _TCollection_AsciiString_HeaderFile -#include -#endif -#ifndef _Standard_Transient_HeaderFile -#include -#endif -#ifndef _GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile -#include -#endif -#ifndef _GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient_HeaderFile -#include -#endif - - -#define TheKey TCollection_AsciiString -#define TheKey_hxx -#define TheItem Handle_Standard_Transient -#define TheItem_hxx -#define Hasher TCollection_AsciiString -#define Hasher_hxx -#define TCollection_DataMapNode GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_hxx -#define TCollection_DataMapIterator GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient -#define TCollection_DataMapIterator_hxx -#define Handle_TCollection_DataMapNode Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient -#define TCollection_DataMapNode_Type_() GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_Type_() -#define TCollection_DataMap GEOM_DataMapOfAsciiStringTransient -#define TCollection_DataMap_hxx -#include - diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx index c4b7a429a..a2617ff40 100644 --- a/src/GEOM/GEOM_Engine.cxx +++ b/src/GEOM/GEOM_Engine.cxx @@ -26,7 +26,6 @@ #include "GEOM_Engine.hxx" -#include "GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient.hxx" #include "GEOM_Field.hxx" #include "GEOM_Function.hxx" #include "GEOM_ISubShape.hxx" diff --git a/src/GEOM/Handle_GEOM_Application.hxx b/src/GEOM/Handle_GEOM_Application.hxx deleted file mode 100644 index 4c8e8a522..000000000 --- a/src/GEOM/Handle_GEOM_Application.hxx +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File : Handle_GEOM_Application.hxx -// Module : GEOM -// -#ifndef _Handle_GEOM_Application_HeaderFile -#define _Handle_GEOM_Application_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_TDocStd_Application_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(TDocStd_Application); -class GEOM_Application; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SimpleOCAF_Application); - -class Handle(GEOM_Application) : public Handle(TDocStd_Application) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(GEOM_Application)():Handle(TDocStd_Application)() {} - Handle(GEOM_Application)(const Handle(GEOM_Application)& aHandle) : Handle(TDocStd_Application)(aHandle) - { - } - - Handle(GEOM_Application)(const GEOM_Application* anItem) : Handle(TDocStd_Application)((TDocStd_Application *)anItem) - { - } - - Handle(GEOM_Application)& operator=(const Handle(GEOM_Application)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(GEOM_Application)& operator=(const GEOM_Application* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - GEOM_Application* operator->() - { - return (GEOM_Application *)ControlAccess(); - } - - GEOM_Application* operator->() const - { - return (GEOM_Application *)ControlAccess(); - } - - Standard_EXPORT ~Handle(GEOM_Application)(); - - Standard_EXPORT static const Handle(GEOM_Application) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx b/src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx deleted file mode 100644 index b6d7d3225..000000000 --- a/src/GEOM/Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File : Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient.hxx -// Module : GEOM -// -#ifndef _Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile -#define _Handle_GEOM_DataMapNodeOfDataMapOfAsciiStringTransient_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_TCollection_MapNode_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(TCollection_MapNode); -class GEOM_DataMapNodeOfDataMapOfAsciiStringTransient; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient); - -class Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient) : public Handle(TCollection_MapNode) { - public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)():Handle(TCollection_MapNode)() {} - Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)(const Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)& aHandle) : Handle(TCollection_MapNode)(aHandle) - { - } - - Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)(const GEOM_DataMapNodeOfDataMapOfAsciiStringTransient* anItem) : Handle(TCollection_MapNode)((TCollection_MapNode *)anItem) - { - } - - Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)& operator=(const Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)& operator=(const GEOM_DataMapNodeOfDataMapOfAsciiStringTransient* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - GEOM_DataMapNodeOfDataMapOfAsciiStringTransient* operator->() - { - return (GEOM_DataMapNodeOfDataMapOfAsciiStringTransient *)ControlAccess(); - } - - GEOM_DataMapNodeOfDataMapOfAsciiStringTransient* operator->() const - { - return (GEOM_DataMapNodeOfDataMapOfAsciiStringTransient *)ControlAccess(); - } - - Standard_EXPORT ~Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient)(); - - Standard_EXPORT static const Handle(GEOM_DataMapNodeOfDataMapOfAsciiStringTransient) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/GEOMBase/GEOMBase.cxx b/src/GEOMBase/GEOMBase.cxx index f87694359..849e433af 100644 --- a/src/GEOMBase/GEOMBase.cxx +++ b/src/GEOMBase/GEOMBase.cxx @@ -40,7 +40,6 @@ #include #include -#include #include #include diff --git a/src/GEOMBase/GEOMBase_Helper.cxx b/src/GEOMBase/GEOMBase_Helper.cxx index e7b02e6b4..880ae775b 100755 --- a/src/GEOMBase/GEOMBase_Helper.cxx +++ b/src/GEOMBase/GEOMBase_Helper.cxx @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index c68154970..cbf422eef 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -65,7 +65,6 @@ #include #include -#include #include #include @@ -235,6 +234,7 @@ namespace if ( aAISShape.IsNull() ) continue; +#ifdef USE_TEXTURED_SHAPE const Handle(Image_PixMap)& aPixmap = aAISShape->TexturePixMap(); if ( aPixmap.IsNull() ) continue; @@ -250,6 +250,7 @@ namespace aPixmapUsersMap.UnBind( aPixmap ); aPixmapCacheMap.remove( aPixmapCacheMap.key( aPixmap ) ); } +#endif } } } @@ -876,6 +877,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap aImagePath = propMap.value( GEOM::propertyName( GEOM::Texture ) ).toString(); } +#ifdef USE_TEXTURED_SHAPE Handle(Image_PixMap) aPixmap; if ( !aImagePath.isEmpty() ) aPixmap = cacheTextureFor( aImagePath, AISShape ); @@ -891,6 +893,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap else { AISShape->SetTextureMapOff(); } +#endif // set line width AISShape->SetWidth( HasWidth() ? diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 3cb322e78..20e83565b 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -78,8 +78,7 @@ #include #include -// #include -#include +#include #include #include diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index 950b181c5..916dda692 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -48,7 +48,6 @@ #include #include -#include #include // QT Includes diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index 2e33cc222..4c8d4c7d8 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -54,7 +54,6 @@ #include #include -#include #include diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx index cd85f26b5..3d8686c7d 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx @@ -38,7 +38,6 @@ #include #include #include -#include #include #include diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx index 2f35c6595..96d5cb467 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx index 82c380ea7..5554d0607 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx @@ -32,7 +32,7 @@ #include #include -#include +#include // Qt includes #include diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx index 66b43f728..2175e005b 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx @@ -31,7 +31,6 @@ #include #include -#include #include #include diff --git a/src/GroupGUI/GroupGUI_GroupDlg.cxx b/src/GroupGUI/GroupGUI_GroupDlg.cxx index fa50a5357..a34a137d4 100644 --- a/src/GroupGUI/GroupGUI_GroupDlg.cxx +++ b/src/GroupGUI/GroupGUI_GroupDlg.cxx @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/IGESPlugin/IGESPlugin_GUI.cxx b/src/IGESPlugin/IGESPlugin_GUI.cxx index 0dc269914..d6c3feb39 100644 --- a/src/IGESPlugin/IGESPlugin_GUI.cxx +++ b/src/IGESPlugin/IGESPlugin_GUI.cxx @@ -30,7 +30,7 @@ #include #include #include -#include +#include // GEOM includes #include "GeometryGUI.h" diff --git a/src/OBJECT/CMakeLists.txt b/src/OBJECT/CMakeLists.txt index e98b2d7cf..1fba59a07 100755 --- a/src/OBJECT/CMakeLists.txt +++ b/src/OBJECT/CMakeLists.txt @@ -65,17 +65,8 @@ SET(_link_LIBRARIES SET(OBJECT_HEADERS GEOM_Actor.h GEOM_AISShape.hxx - GEOM_AISShape.ixx - GEOM_AISShape.jxx - Handle_GEOM_AISShape.hxx GEOM_TopWireframeShape.hxx - GEOM_TopWireframeShape.ixx - GEOM_TopWireframeShape.jxx - Handle_GEOM_TopWireframeShape.hxx GEOM_InteractiveObject.hxx - GEOM_InteractiveObject.ixx - GEOM_InteractiveObject.jxx - Handle_GEOM_InteractiveObject.hxx GEOM_AISTrihedron.hxx GEOM_VTKTrihedron.hxx GEOM_VTKPropertyMaterial.hxx diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index f75b7a6b7..a41490235 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -20,18 +20,12 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_AISShape.cxx -// Author : Nicolas REJNERI -// Module : GEOM - /*! \class GEOM_AISShape GEOM_AISShape.hxx \brief .... */ -#include "GEOM_AISShape.ixx" -#include "SALOME_InteractiveObject.hxx" +#include "GEOM_AISShape.hxx" #include "GEOM_AISVector.hxx" #include @@ -39,9 +33,7 @@ // Open CASCADE Includes #include #include - #include - #include #include #include @@ -86,10 +78,12 @@ #include #include - #include #include +IMPLEMENT_STANDARD_HANDLE (GEOM_AISShape, SALOME_AISShape) +IMPLEMENT_STANDARD_RTTIEXT(GEOM_AISShape, SALOME_AISShape) + GEOM_AISShape::TopLevelDispMode GEOM_AISShape::myTopLevelDm = GEOM_AISShape::TopKeepCurrent; Quantity_Color GEOM_AISShape::myTopLevelColor; @@ -181,6 +175,10 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, } } +GEOM_AISShape::~GEOM_AISShape() +{ +} + void GEOM_AISShape::setIO(const Handle(SALOME_InteractiveObject)& io){ SetOwner( io ); } @@ -233,7 +231,7 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent // StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode; bool isTopLev = isTopLevel() && switchTopLevel(); switch (aMode) { - case 0://StdSelect_DM_Wireframe: + case Wireframe: case CustomHighlight: { if(isTopLev) { @@ -248,26 +246,30 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer); break; } - case 1://StdSelect_DM_Shading: + case Shading: { shadingMode(aPresentationManager, aPrs, aMode); break; } - case 2: { //ShadingWithEdges - //Shaded faces - shadingMode(aPresentationManager, aPrs, AIS_Shaded); + case ShadingWithEdges: + { + shadingMode(aPresentationManager, aPrs, Shading); myDrawer->SetFaceBoundaryDraw( Standard_True ); Handle(Prs3d_LineAspect) aBoundaryAspect = new Prs3d_LineAspect ( myEdgesInShadingColor, Aspect_TOL_SOLID, myOwnWidth ); myDrawer->SetFaceBoundaryAspect (aBoundaryAspect); break; } - case 3: //StdSelect_DM_HLR: + case TexturedShape: { if(!isTopLev) - AIS_TexturedShape::Compute(aPresentationManager, aPrs, aMode); +#ifdef USE_TEXTURED_SHAPE + AIS_TexturedShape::Compute(aPresentationManager, aPrs, aMode); +#else + AIS_Shape::Compute(aPresentationManager, aPrs, aMode); +#endif else - shadingMode(aPresentationManager, aPrs, AIS_Shaded); + shadingMode(aPresentationManager, aPrs, Shading); break; } } @@ -410,7 +412,11 @@ void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPre { // PAL12113: AIS_Shape::Compute() works correctly with shapes containing no faces //StdPrs_ShadedShape::Add(aPrs,myshape,myDrawer); +#ifdef USE_TEXTURED_SHAPE + AIS_TexturedShape::Compute(aPresentationManager, aPrs, aMode); +#else AIS_Shape::Compute(aPresentationManager, aPrs, aMode); +#endif } } @@ -424,10 +430,10 @@ void GEOM_AISShape::setTopLevel(Standard_Boolean f) { myPrevDisplayMode = DisplayMode(); Standard_Integer dm; switch(topLevelDisplayMode()) { - case TopKeepCurrent : dm = myPrevDisplayMode; break; - case TopWireFrame : dm = AIS_WireFrame; break; - case TopShadingWithEdges : dm = ShadingWithEdges; break; - default : dm = AIS_Shaded; break; + case TopKeepCurrent : dm = myPrevDisplayMode; break; + case TopWireFrame : dm = Wireframe; break; + case TopShadingWithEdges : dm = ShadingWithEdges; break; + default : dm = Shading; break; } SetDisplayMode(dm); } else { diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx index 8a60ba952..e6f185c8b 100644 --- a/src/OBJECT/GEOM_AISShape.hxx +++ b/src/OBJECT/GEOM_AISShape.hxx @@ -20,168 +20,119 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_AISShape.hxx -// Module : GEOM -// #ifndef _GEOM_AISShape_HeaderFile #define _GEOM_AISShape_HeaderFile -#include "GEOM_OBJECT_defs.hxx" +#include +#include -#include - -#ifndef _Standard_HeaderFile #include -#endif -#ifndef _Handle_GEOM_AISShape_HeaderFile -#include "Handle_GEOM_AISShape.hxx" -#endif - -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include "Handle_SALOME_InteractiveObject.hxx" -#endif -#ifndef _Standard_CString_HeaderFile -#include -#endif -#ifndef _SALOME_AISShape_HeaderFile -#include "SALOME_AISShape.hxx" -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _PrsMgr_PresentationManager_HeaderFile +#include #include -#endif -#ifndef _Handle_Prs3d_Presentation_HeaderFile #include -#endif - #include - #include -#include #include #include -class Prs3d_Presentation; -class SALOME_InteractiveObject; +#include +#include CORBA_SERVER_HEADER(GEOM_Gen) + class TopoDS_Shape; -class GEOM_OBJECT_EXPORT GEOM_AISShape : public SALOME_AISShape { - +class GEOM_AISShape : public SALOME_AISShape +{ public: + //! Enumeration of display modes + typedef enum { + Wireframe = AIS_WireFrame, //!< wireframe + Shading = AIS_Shaded, //!< shadin + ShadingWithEdges, //!< shading with edges + TexturedShape, //!< texture + CustomHighlight //!< fields + } DispMode; - //! Enumeration of display modes - typedef enum { - //WireFrame, //!< the same as AIS_WireFrame - //Shading, //!< the same as AIS_Shaded - ShadingWithEdges = AIS_Shaded+1, //!< shading with edges - TexturedShape = ShadingWithEdges+1, //!< the same as AIS_ExactHLR - CustomHighlight = TexturedShape+1 - } DispMode; + //! Enumeration of top level display modes + typedef enum { + TopShowAdditionalWActor = 0, + TopKeepCurrent, //!< Keep current display mode + TopWireFrame, + TopShading, + TopShadingWithEdges, + } TopLevelDispMode; + + Standard_EXPORT GEOM_AISShape(const TopoDS_Shape& shape, const Standard_CString aName); + Standard_EXPORT ~GEOM_AISShape(); - //! Enumeration of top level display modes - typedef enum { - TopShowAdditionalWActor = 0, - TopKeepCurrent, //!< Keep current display mode - TopWireFrame, - TopShading, - TopShadingWithEdges, - } TopLevelDispMode; + Standard_EXPORT Standard_Boolean hasIO(); + Standard_EXPORT void setIO(const Handle(SALOME_InteractiveObject)& name); + Standard_EXPORT Handle(SALOME_InteractiveObject) getIO(); + Standard_EXPORT void setName(const Standard_CString aName); + Standard_EXPORT Standard_CString getName(); - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // - GEOM_AISShape(const TopoDS_Shape& shape, const Standard_CString aName); - Standard_Boolean hasIO() ; - void setIO(const Handle(SALOME_InteractiveObject)& name) ; - void setName(const Standard_CString aName) ; - Standard_CString getName() ; - Standard_Boolean isTopLevel(); - void setTopLevel(Standard_Boolean); - Handle_SALOME_InteractiveObject getIO() ; - void highlightSubShapes(const TColStd_IndexedMapOfInteger& aIndexMap, const Standard_Boolean aHighlight ); - ~GEOM_AISShape(); + Standard_EXPORT Standard_Boolean isTopLevel(); + Standard_EXPORT void setTopLevel(Standard_Boolean); - void SetShadingColor(const Quantity_Color &aCol); - void SetEdgesInShadingColor(const Quantity_Color &aCol); - void SetDisplayVectors(bool isShow); - void SetDisplayVertices(bool isShow); + Standard_EXPORT void highlightSubShapes(const TColStd_IndexedMapOfInteger& aIndexMap, const Standard_Boolean aHighlight ); + + Standard_EXPORT void SetShadingColor(const Quantity_Color &aCol); + Standard_EXPORT void SetEdgesInShadingColor(const Quantity_Color &aCol); + Standard_EXPORT void SetDisplayVectors(bool isShow); + Standard_EXPORT void SetDisplayVertices(bool isShow); - virtual void Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, - const Handle(Prs3d_Presentation)& aPresentation, - const Standard_Integer aMode = 0) ; + Standard_EXPORT virtual void Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, + const Handle(Prs3d_Presentation)& aPresentation, + const Standard_Integer aMode = 0); + + Standard_EXPORT virtual bool isShowVectors() { return myDisplayVectors; } + Standard_EXPORT virtual bool isShowVertices() { return myDisplayVertices; } - virtual bool isShowVectors () { return myDisplayVectors; } - virtual bool isShowVertices () { return myDisplayVertices; } - virtual Standard_Boolean switchTopLevel(); - virtual Standard_Boolean toActivate(); + Standard_EXPORT virtual Standard_Boolean switchTopLevel(); + Standard_EXPORT virtual Standard_Boolean toActivate(); - // Type management - // - friend Handle_Standard_Type& GEOM_AISShape_Type_(); - const Handle(Standard_Type)& DynamicType() const; - Standard_Boolean IsKind(const Handle(Standard_Type)&) const; + Standard_EXPORT static Quantity_Color topLevelColor(); + Standard_EXPORT static void setTopLevelColor(const Quantity_Color c); - static Quantity_Color topLevelColor(); - static void setTopLevelColor(const Quantity_Color c); + Standard_EXPORT static TopLevelDispMode topLevelDisplayMode(); + Standard_EXPORT static void setTopLevelDisplayMode(const TopLevelDispMode dm); - static TopLevelDispMode topLevelDisplayMode(); - static void setTopLevelDisplayMode(const TopLevelDispMode dm); - - void setPrevDisplayMode(const Standard_Integer mode); - Standard_Integer prevDisplayMode() const {return myPrevDisplayMode;} + Standard_EXPORT void setPrevDisplayMode(const Standard_Integer mode); + Standard_EXPORT Standard_Integer prevDisplayMode() const {return myPrevDisplayMode;} // Field step information - void setFieldStepInfo( const GEOM::field_data_type theFieldDataType, - const int theFieldDimension, - const QList& theFieldStepData, - const TCollection_AsciiString& theFieldStepName, - const double theFieldStepRangeMin, - const double theFieldStepRangeMax ); - void getFieldStepInfo( GEOM::field_data_type& theFieldDataType, - int& theFieldDimension, - QList& theFieldStepData, - TCollection_AsciiString& theFieldStepName, - double& theFieldStepRangeMin, - double& theFieldStepRangeMax ) const; + Standard_EXPORT void setFieldStepInfo( const GEOM::field_data_type theFieldDataType, + const int theFieldDimension, + const QList& theFieldStepData, + const TCollection_AsciiString& theFieldStepName, + const double theFieldStepRangeMin, + const double theFieldStepRangeMax ); + Standard_EXPORT void getFieldStepInfo( GEOM::field_data_type& theFieldDataType, + int& theFieldDimension, + QList& theFieldStepData, + TCollection_AsciiString& theFieldStepName, + double& theFieldStepRangeMin, + double& theFieldStepRangeMax ) const; protected: - void shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, - const Handle(Prs3d_Presentation)& aPrs, - const Standard_Integer aMode); - + Standard_EXPORT void shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, + const Handle(Prs3d_Presentation)& aPrs, + const Standard_Integer aMode); + // Displaying the field data - void drawField( const Handle(Prs3d_Presentation)& thePrs, - const bool theIsText = false, - const bool theIsHighlight = false ); - + Standard_EXPORT void drawField( const Handle(Prs3d_Presentation)& thePrs, + const bool theIsText = false, + const bool theIsHighlight = false ); + // Auxiliary method to compute a center of mass for the specified shape - static Standard_Boolean computeMassCenter( const TopoDS_Shape& theShape, - gp_Pnt& theCenter ); - - Quantity_Color myShadingColor; - Quantity_Color myEdgesInShadingColor; - + Standard_EXPORT static Standard_Boolean computeMassCenter( const TopoDS_Shape& theShape, + gp_Pnt& theCenter ); + private: + Quantity_Color myShadingColor; + Quantity_Color myEdgesInShadingColor; + TCollection_AsciiString myName; bool myDisplayVectors; bool myDisplayVertices; @@ -195,13 +146,13 @@ private: double myFieldStepRangeMin; double myFieldStepRangeMax; - static TopLevelDispMode myTopLevelDm; - static Quantity_Color myTopLevelColor; + static TopLevelDispMode myTopLevelDm; + static Quantity_Color myTopLevelColor; + +public: + DEFINE_STANDARD_RTTI(GEOM_AISShape); }; - -// other inline functions and methods (like "C++: function call" methods) -// - +DEFINE_STANDARD_HANDLE(GEOM_AISShape, SALOME_AISShape) #endif diff --git a/src/OBJECT/GEOM_AISShape.ixx b/src/OBJECT/GEOM_AISShape.ixx deleted file mode 100644 index 292f586af..000000000 --- a/src/OBJECT/GEOM_AISShape.ixx +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_AISShape.ixx -// Module : GEOM -// -#include "GEOM_AISShape.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -GEOM_AISShape::~GEOM_AISShape() {} - - - -Standard_EXPORT Handle_Standard_Type& GEOM_AISShape_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(SALOME_AISShape); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(SALOME_AISShape); - static Handle_Standard_Type aType2 = STANDARD_TYPE(AIS_Shape); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(AIS_Shape); - static Handle_Standard_Type aType3 = STANDARD_TYPE(AIS_InteractiveObject); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(AIS_InteractiveObject); - static Handle_Standard_Type aType4 = STANDARD_TYPE(SelectMgr_SelectableObject); - if ( aType4.IsNull()) aType4 = STANDARD_TYPE(SelectMgr_SelectableObject); - static Handle_Standard_Type aType5 = STANDARD_TYPE(PrsMgr_PresentableObject); - if ( aType5.IsNull()) aType5 = STANDARD_TYPE(PrsMgr_PresentableObject); - static Handle_Standard_Type aType6 = STANDARD_TYPE(MMgt_TShared); - if ( aType6.IsNull()) aType6 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType7 = STANDARD_TYPE(Standard_Transient); - if ( aType7.IsNull()) aType7 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,aType4,aType5,aType6,aType7,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("GEOM_AISShape", - sizeof(GEOM_AISShape), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(GEOM_AISShape) Handle(GEOM_AISShape)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOM_AISShape) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOM_AISShape))) { - _anOtherObject = Handle(GEOM_AISShape)((Handle(GEOM_AISShape)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& GEOM_AISShape::DynamicType() const -{ - return STANDARD_TYPE(GEOM_AISShape) ; -} -Standard_Boolean GEOM_AISShape::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(GEOM_AISShape) == AType || SALOME_AISShape::IsKind(AType)); -} -Handle_GEOM_AISShape::~Handle_GEOM_AISShape() {} - diff --git a/src/OBJECT/GEOM_AISShape.jxx b/src/OBJECT/GEOM_AISShape.jxx deleted file mode 100644 index 4aed3f223..000000000 --- a/src/OBJECT/GEOM_AISShape.jxx +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_AISShape.jxx -// Module : GEOM -// -#ifndef _GEOM_InteractiveObject_HeaderFile -#include "GEOM_InteractiveObject.hxx" -#endif -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif -#ifndef _GEOM_AISShape_HeaderFile -#include "GEOM_AISShape.hxx" -#endif -#ifndef _PrsMgr_PresentationManager3d_HeaderFile -#include -#endif -#ifndef _Prs3d_Presentation_HeaderFile -#include -#endif diff --git a/src/OBJECT/GEOM_InteractiveObject.cxx b/src/OBJECT/GEOM_InteractiveObject.cxx index 3416b6cd7..ed6306e67 100644 --- a/src/OBJECT/GEOM_InteractiveObject.cxx +++ b/src/OBJECT/GEOM_InteractiveObject.cxx @@ -20,17 +20,15 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_InteractiveObject.cxx -// Author : Christophe ATTANASIO -// Module : GEOM -// /*! \class GEOM_InteractiveObject GEOM_InteractiveObject.hxx \brief .... */ -#include "GEOM_InteractiveObject.ixx" +#include "GEOM_InteractiveObject.hxx" + +IMPLEMENT_STANDARD_HANDLE (GEOM_InteractiveObject, SALOME_InteractiveObject) +IMPLEMENT_STANDARD_RTTIEXT(GEOM_InteractiveObject, SALOME_InteractiveObject) GEOM_InteractiveObject::GEOM_InteractiveObject() : SALOME_InteractiveObject() @@ -49,15 +47,22 @@ GEOM_InteractiveObject::GEOM_InteractiveObject(const char* anIOR, myFatherIOR = aFatherIOR; } -const char* GEOM_InteractiveObject::getIOR(){ +GEOM_InteractiveObject::~GEOM_InteractiveObject() +{ +} + +const char* GEOM_InteractiveObject::getIOR() +{ return myIOR.c_str(); } -const char* GEOM_InteractiveObject::getFatherIOR(){ +const char* GEOM_InteractiveObject::getFatherIOR() +{ return myFatherIOR.c_str(); } -Standard_Boolean GEOM_InteractiveObject::isSame(const Handle(SALOME_InteractiveObject)& anIO ){ +Standard_Boolean GEOM_InteractiveObject::isSame(const Handle(SALOME_InteractiveObject)& anIO ) +{ if ( anIO->hasEntry() && this->hasEntry() ) { if ( myEntry == anIO->getEntry() ) return Standard_True; diff --git a/src/OBJECT/GEOM_InteractiveObject.hxx b/src/OBJECT/GEOM_InteractiveObject.hxx index 27f24e4d7..2800e8fa8 100644 --- a/src/OBJECT/GEOM_InteractiveObject.hxx +++ b/src/OBJECT/GEOM_InteractiveObject.hxx @@ -20,106 +20,40 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_InteractiveObject.hxx -// Module : GEOM -// #ifndef _GEOM_InteractiveObject_HeaderFile #define _GEOM_InteractiveObject_HeaderFile -#ifndef _Standard_HeaderFile +#include + #include -#endif -#ifndef _Handle_GEOM_InteractiveObject_HeaderFile -#include "Handle_GEOM_InteractiveObject.hxx" -#endif - -#ifndef _Standard_CString_HeaderFile -#include -#endif -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include "Handle_SALOME_InteractiveObject.hxx" -#endif - -class GEOM_InteractiveObject : public SALOME_InteractiveObject { +#include +class GEOM_InteractiveObject : public SALOME_InteractiveObject +{ public: + Standard_EXPORT GEOM_InteractiveObject(); + Standard_EXPORT GEOM_InteractiveObject(const char* anIOR, + const char* aFatherIOR, + const char* aComponentDataType, + const char* anEntry = ""); + Standard_EXPORT ~GEOM_InteractiveObject(); - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT GEOM_InteractiveObject(); -Standard_EXPORT GEOM_InteractiveObject(const char* anIOR, - const char* aFatherIOR, - const char* aComponentDataType, - const char* anEntry = ""); -Standard_EXPORT void setIOR(const char* anEntry) ; -Standard_EXPORT const char* getIOR() ; -Standard_EXPORT void setFatherIOR(const char* anEntry) ; -Standard_EXPORT const char* getFatherIOR() ; -Standard_EXPORT virtual Standard_Boolean isSame(const Handle(SALOME_InteractiveObject)& anIO) ; -Standard_EXPORT ~GEOM_InteractiveObject(); + Standard_EXPORT void setIOR(const char* anEntry); + Standard_EXPORT const char* getIOR(); + Standard_EXPORT void setFatherIOR(const char* anEntry); + Standard_EXPORT const char* getFatherIOR(); - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& GEOM_InteractiveObject_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - + Standard_EXPORT virtual Standard_Boolean isSame(const Handle(SALOME_InteractiveObject)& anIO); private: + std::string myIOR; + std::string myFatherIOR; - // Methods PRIVATE - // - - - // Fields PRIVATE - // -std::string myIOR; -std::string myFatherIOR; - - +public: + DEFINE_STANDARD_RTTI(GEOM_InteractiveObject); }; - - - - -// other inline functions and methods (like "C++: function call" methods) -// - +DEFINE_STANDARD_HANDLE(GEOM_InteractiveObject, SALOME_InteractiveObject) #endif diff --git a/src/OBJECT/GEOM_InteractiveObject.ixx b/src/OBJECT/GEOM_InteractiveObject.ixx deleted file mode 100644 index 1bb456136..000000000 --- a/src/OBJECT/GEOM_InteractiveObject.ixx +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_InteractiveObject.ixx -// Module : GEOM -// -#include "GEOM_InteractiveObject.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -GEOM_InteractiveObject::~GEOM_InteractiveObject() {} - - - -Standard_EXPORT Handle_Standard_Type& GEOM_InteractiveObject_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(SALOME_InteractiveObject); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(SALOME_InteractiveObject); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("GEOM_InteractiveObject", - sizeof(GEOM_InteractiveObject), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(GEOM_InteractiveObject) Handle(GEOM_InteractiveObject)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOM_InteractiveObject) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOM_InteractiveObject))) { - _anOtherObject = Handle(GEOM_InteractiveObject)((Handle(GEOM_InteractiveObject)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& GEOM_InteractiveObject::DynamicType() const -{ - return STANDARD_TYPE(GEOM_InteractiveObject) ; -} -Standard_Boolean GEOM_InteractiveObject::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(GEOM_InteractiveObject) == AType || SALOME_InteractiveObject::IsKind(AType)); -} -Handle_GEOM_InteractiveObject::~Handle_GEOM_InteractiveObject() {} - diff --git a/src/OBJECT/GEOM_InteractiveObject.jxx b/src/OBJECT/GEOM_InteractiveObject.jxx deleted file mode 100644 index f7ea09ed3..000000000 --- a/src/OBJECT/GEOM_InteractiveObject.jxx +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_InteractiveObject.jxx -// Module : GEOM -// -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _GEOM_InteractiveObject_HeaderFile -#include "GEOM_InteractiveObject.hxx" -#endif diff --git a/src/OBJECT/GEOM_TopWireframeShape.cxx b/src/OBJECT/GEOM_TopWireframeShape.cxx index 2a2101fff..4defd1989 100755 --- a/src/OBJECT/GEOM_TopWireframeShape.cxx +++ b/src/OBJECT/GEOM_TopWireframeShape.cxx @@ -32,7 +32,7 @@ */ //Local includes -#include "GEOM_TopWireframeShape.ixx" +#include "GEOM_TopWireframeShape.hxx" #include "GEOM_AISShape.hxx" //GUI includes @@ -43,6 +43,9 @@ #include #include +IMPLEMENT_STANDARD_HANDLE(GEOM_TopWireframeShape, SALOME_AISShape) +IMPLEMENT_STANDARD_RTTIEXT(GEOM_TopWireframeShape, SALOME_AISShape) + GEOM_TopWireframeShape::GEOM_TopWireframeShape( const TopoDS_Shape& shape ) :SALOME_AISShape(shape) { diff --git a/src/OBJECT/GEOM_TopWireframeShape.hxx b/src/OBJECT/GEOM_TopWireframeShape.hxx index 97d7bf9c1..1a35990b1 100755 --- a/src/OBJECT/GEOM_TopWireframeShape.hxx +++ b/src/OBJECT/GEOM_TopWireframeShape.hxx @@ -20,91 +20,39 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_TopWireframeShape.hxx -// Module : GEOM -// #ifndef _GEOM_TopWireframeShape_HeaderFile #define _GEOM_TopWireframeShape_HeaderFile -#include "GEOM_OBJECT_defs.hxx" +#include -#ifndef _Standard_HeaderFile #include -#endif -#ifndef _Handle_GEOM_TopWireframeShape_HeaderFile -#include "Handle_GEOM_TopWireframeShape.hxx" -#endif +#include -#ifndef _SALOME_AISShape_HeaderFile -#include "SALOME_AISShape.hxx" -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif +class GEOM_TopWireframeShape : public SALOME_AISShape +{ +public: + Standard_EXPORT GEOM_TopWireframeShape(const TopoDS_Shape& shape); + Standard_EXPORT ~GEOM_TopWireframeShape(); -class GEOM_OBJECT_EXPORT GEOM_TopWireframeShape : public SALOME_AISShape { + Standard_EXPORT virtual Standard_Boolean hasIO(); + Standard_EXPORT void setIO(const Handle(SALOME_InteractiveObject)& io); + Standard_EXPORT virtual Handle(SALOME_InteractiveObject) getIO(); + + Standard_EXPORT virtual void setName(const Standard_CString aName); + Standard_EXPORT virtual Standard_CString getName(); + + Standard_EXPORT virtual Standard_Boolean isTopLevel(); + Standard_EXPORT virtual void setTopLevel(Standard_Boolean); + Standard_EXPORT virtual Standard_Boolean switchTopLevel(); + + Standard_EXPORT virtual Standard_Boolean toActivate(); + + Standard_EXPORT virtual void highlightSubShapes(const TColStd_IndexedMapOfInteger& aIndexMap, const Standard_Boolean aHighlight ); public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // inline void operator delete(void *anAddress, size_t size) - // { - // if (anAddress) Standard::Free((Standard_Address&)anAddress,size); - // } - - // Methods PUBLIC - // - GEOM_TopWireframeShape(const TopoDS_Shape& shape); - virtual Handle_SALOME_InteractiveObject getIO(); - virtual Standard_Boolean hasIO(); - virtual Standard_Boolean isTopLevel(); - virtual Standard_Boolean switchTopLevel(); - virtual Standard_Boolean toActivate(); - virtual void setTopLevel(Standard_Boolean); - virtual Standard_CString getName(); - virtual void setName(const Standard_CString aName); - virtual void highlightSubShapes(const TColStd_IndexedMapOfInteger& aIndexMap, const Standard_Boolean aHighlight ); - ~GEOM_TopWireframeShape(); - - // Type management - // - friend Handle_Standard_Type& GEOM_TopWireframeShape_Type_(); - const Handle(Standard_Type)& DynamicType() const; - Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - - - void setIO(const Handle(SALOME_InteractiveObject)& io); - -protected: - - // Methods PROTECTED - // - - // Fields PROTECTED - // - -private: - - // Methods PRIVATE - // - - // Fields PRIVATE - // + DEFINE_STANDARD_RTTI(GEOM_TopWireframeShape); }; -// other inline functions and methods (like "C++: function call" methods) -// +DEFINE_STANDARD_HANDLE(GEOM_TopWireframeShape, SALOME_AISShape) #endif diff --git a/src/OBJECT/GEOM_TopWireframeShape.ixx b/src/OBJECT/GEOM_TopWireframeShape.ixx deleted file mode 100755 index e57a7a8dd..000000000 --- a/src/OBJECT/GEOM_TopWireframeShape.ixx +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_AISShape.ixx -// Module : GEOM -// -#include "GEOM_TopWireframeShape.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -Standard_EXPORT Handle_Standard_Type& GEOM_TopWireframeShape_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(SALOME_AISShape); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(SALOME_AISShape); - static Handle_Standard_Type aType2 = STANDARD_TYPE(AIS_Shape); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(AIS_Shape); - static Handle_Standard_Type aType3 = STANDARD_TYPE(AIS_InteractiveObject); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(AIS_InteractiveObject); - static Handle_Standard_Type aType4 = STANDARD_TYPE(SelectMgr_SelectableObject); - if ( aType4.IsNull()) aType4 = STANDARD_TYPE(SelectMgr_SelectableObject); - static Handle_Standard_Type aType5 = STANDARD_TYPE(PrsMgr_PresentableObject); - if ( aType5.IsNull()) aType5 = STANDARD_TYPE(PrsMgr_PresentableObject); - static Handle_Standard_Type aType6 = STANDARD_TYPE(MMgt_TShared); - if ( aType6.IsNull()) aType6 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType7 = STANDARD_TYPE(Standard_Transient); - if ( aType7.IsNull()) aType7 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,aType4,aType5,aType6,aType7,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("GEOM_TopWireframeShape", - sizeof(GEOM_TopWireframeShape), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(GEOM_TopWireframeShape) Handle(GEOM_TopWireframeShape)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOM_TopWireframeShape) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOM_TopWireframeShape))) { - _anOtherObject = Handle(GEOM_TopWireframeShape)((Handle(GEOM_TopWireframeShape)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& GEOM_TopWireframeShape::DynamicType() const -{ - return STANDARD_TYPE(GEOM_TopWireframeShape) ; -} -Standard_Boolean GEOM_TopWireframeShape::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(GEOM_TopWireframeShape) == AType || SALOME_AISShape::IsKind(AType)); -} -Handle_GEOM_TopWireframeShape::~Handle_GEOM_TopWireframeShape() {} - diff --git a/src/OBJECT/GEOM_TopWireframeShape.jxx b/src/OBJECT/GEOM_TopWireframeShape.jxx deleted file mode 100755 index 84d248da9..000000000 --- a/src/OBJECT/GEOM_TopWireframeShape.jxx +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : GEOM_AISShape.jxx -// Module : GEOM -// -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif - -#ifndef _GEOM_TopWireframeShape_HeaderFile -#include "GEOM_TopWireframeShape.hxx" -#endif diff --git a/src/OBJECT/Handle_GEOM_AISShape.hxx b/src/OBJECT/Handle_GEOM_AISShape.hxx deleted file mode 100644 index 0193845f4..000000000 --- a/src/OBJECT/Handle_GEOM_AISShape.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : Handle_GEOM_AISShape.hxx -// Module : GEOM -// -#ifndef _Handle_GEOM_AISShape_HeaderFile -#define _Handle_GEOM_AISShape_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_SALOME_AISShape_HeaderFile -#include "Handle_SALOME_AISShape.hxx" -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(SALOME_AISShape); -class GEOM_AISShape; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOM_AISShape); - -class Handle(GEOM_AISShape) : public Handle(SALOME_AISShape) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(GEOM_AISShape)():Handle(SALOME_AISShape)() {} - Handle(GEOM_AISShape)(const Handle(GEOM_AISShape)& aHandle) : Handle(SALOME_AISShape)(aHandle) - { - } - - Handle(GEOM_AISShape)(const GEOM_AISShape* anItem) : Handle(SALOME_AISShape)((SALOME_AISShape *)anItem) - { - } - - Handle(GEOM_AISShape)& operator=(const Handle(GEOM_AISShape)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(GEOM_AISShape)& operator=(const GEOM_AISShape* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - GEOM_AISShape* operator->() - { - return (GEOM_AISShape *)ControlAccess(); - } - - GEOM_AISShape* operator->() const - { - return (GEOM_AISShape *)ControlAccess(); - } - - Standard_EXPORT ~Handle(GEOM_AISShape)(); - - Standard_EXPORT static const Handle(GEOM_AISShape) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_GEOM_InteractiveObject.hxx b/src/OBJECT/Handle_GEOM_InteractiveObject.hxx deleted file mode 100644 index f487f2b79..000000000 --- a/src/OBJECT/Handle_GEOM_InteractiveObject.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : Handle_GEOM_InteractiveObject.hxx -// Module : GEOM -// -#ifndef _Handle_GEOM_InteractiveObject_HeaderFile -#define _Handle_GEOM_InteractiveObject_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include "Handle_SALOME_InteractiveObject.hxx" -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(SALOME_InteractiveObject); -class GEOM_InteractiveObject; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOM_InteractiveObject); - -class Handle(GEOM_InteractiveObject) : public Handle(SALOME_InteractiveObject) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(GEOM_InteractiveObject)():Handle(SALOME_InteractiveObject)() {} - Handle(GEOM_InteractiveObject)(const Handle(GEOM_InteractiveObject)& aHandle) : Handle(SALOME_InteractiveObject)(aHandle) - { - } - - Handle(GEOM_InteractiveObject)(const GEOM_InteractiveObject* anItem) : Handle(SALOME_InteractiveObject)((SALOME_InteractiveObject *)anItem) - { - } - - Handle(GEOM_InteractiveObject)& operator=(const Handle(GEOM_InteractiveObject)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(GEOM_InteractiveObject)& operator=(const GEOM_InteractiveObject* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - GEOM_InteractiveObject* operator->() - { - return (GEOM_InteractiveObject *)ControlAccess(); - } - - GEOM_InteractiveObject* operator->() const - { - return (GEOM_InteractiveObject *)ControlAccess(); - } - - Standard_EXPORT ~Handle(GEOM_InteractiveObject)(); - - Standard_EXPORT static const Handle(GEOM_InteractiveObject) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_GEOM_TopWireframeShape.hxx b/src/OBJECT/Handle_GEOM_TopWireframeShape.hxx deleted file mode 100755 index f2b0a2cbd..000000000 --- a/src/OBJECT/Handle_GEOM_TopWireframeShape.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 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, or (at your option) any later version. -// -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// GEOM OBJECT : interactive object for Geometry entities visualization -// File : Handle_GEOM_TopWireframeShape.hxx -// Module : GEOM -// -#ifndef _Handle_GEOM_TopWireframeShape_HeaderFile -#define _Handle_GEOM_TopWireframeShape_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_SALOME_AISShape_HeaderFile -#include "Handle_SALOME_AISShape.hxx" -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(SALOME_AISShape); -class GEOM_TopWireframeShape; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOM_TopWireframeShape); - -class Handle(GEOM_TopWireframeShape) : public Handle(SALOME_AISShape) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(GEOM_TopWireframeShape)():Handle(SALOME_AISShape)() {} - Handle(GEOM_TopWireframeShape)(const Handle(GEOM_TopWireframeShape)& aHandle) : Handle(SALOME_AISShape)(aHandle) - { - } - - Handle(GEOM_TopWireframeShape)(const GEOM_TopWireframeShape* anItem) : Handle(SALOME_AISShape)((SALOME_AISShape *)anItem) - { - } - - Handle(GEOM_TopWireframeShape)& operator=(const Handle(GEOM_TopWireframeShape)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(GEOM_TopWireframeShape)& operator=(const GEOM_TopWireframeShape* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - GEOM_TopWireframeShape* operator->() - { - return (GEOM_TopWireframeShape *)ControlAccess(); - } - - GEOM_TopWireframeShape* operator->() const - { - return (GEOM_TopWireframeShape *)ControlAccess(); - } - - Standard_EXPORT ~Handle(GEOM_TopWireframeShape)(); - - Standard_EXPORT static const Handle(GEOM_TopWireframeShape) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/RepairGUI/RepairGUI_GlueDlg.cxx b/src/RepairGUI/RepairGUI_GlueDlg.cxx index 0e8b07e22..55a1bb27a 100644 --- a/src/RepairGUI/RepairGUI_GlueDlg.cxx +++ b/src/RepairGUI/RepairGUI_GlueDlg.cxx @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include diff --git a/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx b/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx index 5f0e140f3..69b37b9f6 100644 --- a/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx +++ b/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include diff --git a/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx b/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx index 66c02302f..926f1eb80 100755 --- a/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx +++ b/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx @@ -38,7 +38,6 @@ #include #include #include -#include #include #include diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx index 5358f2565..43a0f629e 100644 --- a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx +++ b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx @@ -33,7 +33,7 @@ #include #include #include -#include +#include // OCCT Includes #include diff --git a/src/STEPPlugin/STEPPlugin_GUI.cxx b/src/STEPPlugin/STEPPlugin_GUI.cxx index b43651a15..66ebd4cc3 100644 --- a/src/STEPPlugin/STEPPlugin_GUI.cxx +++ b/src/STEPPlugin/STEPPlugin_GUI.cxx @@ -29,7 +29,7 @@ #include #include #include -#include +#include // GEOM includes #include "GeometryGUI.h" diff --git a/src/STLPlugin/STLPlugin_GUI.cxx b/src/STLPlugin/STLPlugin_GUI.cxx index d0ee88ef8..1c9749992 100644 --- a/src/STLPlugin/STLPlugin_GUI.cxx +++ b/src/STLPlugin/STLPlugin_GUI.cxx @@ -30,7 +30,7 @@ #include #include #include -#include +#include // GEOM includes #include "GeometryGUI.h" diff --git a/src/TransformationGUI/TransformationGUI.cxx b/src/TransformationGUI/TransformationGUI.cxx index 4a6fe2fbc..eb62c1f18 100644 --- a/src/TransformationGUI/TransformationGUI.cxx +++ b/src/TransformationGUI/TransformationGUI.cxx @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include "TransformationGUI_MultiTranslationDlg.h" // Method MULTI TRANSLATION #include "TransformationGUI_MultiRotationDlg.h" // Method MULTI ROTATION diff --git a/src/VTKPlugin/VTKPlugin_GUI.cxx b/src/VTKPlugin/VTKPlugin_GUI.cxx index d5bec2d72..aa2200b11 100644 --- a/src/VTKPlugin/VTKPlugin_GUI.cxx +++ b/src/VTKPlugin/VTKPlugin_GUI.cxx @@ -28,7 +28,7 @@ #include #include #include -#include +#include // GEOM includes #include "GeometryGUI.h" From 62283977ac7aed96501b90441b7b2f7f9b96a00b Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 22 Oct 2014 18:22:21 +0400 Subject: [PATCH 113/118] Fight memory leaks --- src/DependencyTree/DependencyTree_ViewModel.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/DependencyTree/DependencyTree_ViewModel.cxx b/src/DependencyTree/DependencyTree_ViewModel.cxx index e191cad1a..750de6f80 100644 --- a/src/DependencyTree/DependencyTree_ViewModel.cxx +++ b/src/DependencyTree/DependencyTree_ViewModel.cxx @@ -67,7 +67,7 @@ void DependencyTree_ViewModel::onShowSelected() aSelMgr->selectedObjects(aSelList); SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); + GEOM_Displayer disp( appStudy ); OCCViewer_ViewManager* anOCCVM = ( OCCViewer_ViewManager* ) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/ true ); @@ -75,7 +75,7 @@ void DependencyTree_ViewModel::onShowSelected() if ( SALOME_View* viewFrame = dynamic_cast( viewModel ) ) { SALOME_ListIteratorOfListIO Iter( aSelList ); for ( ; Iter.More(); Iter.Next() ) - disp->Display( Iter.Value(), false, viewFrame ); + disp.Display( Iter.Value(), false, viewFrame ); viewFrame->Repaint(); } } @@ -97,16 +97,16 @@ void DependencyTree_ViewModel::onShowOnlySelected() aSelMgr->selectedObjects( aSelList ); SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); + GEOM_Displayer disp( appStudy ); OCCViewer_ViewManager* anOCCVM = (OCCViewer_ViewManager*) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/ true ); if ( SUIT_ViewModel* viewModel = anOCCVM->getViewModel() ) { if ( SALOME_View* viewFrame = dynamic_cast( viewModel ) ) { - disp->EraseAll( true, false, viewFrame ); + disp.EraseAll( true, false, viewFrame ); SALOME_ListIteratorOfListIO Iter( aSelList ); for ( ; Iter.More(); Iter.Next() ) - disp->Display( Iter.Value(), false, viewFrame ); + disp.Display( Iter.Value(), false, viewFrame ); viewFrame->Repaint(); } } From bd37ceaf56495d65195171f7e6d419ced7e3ef57 Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 22 Oct 2014 19:30:45 +0400 Subject: [PATCH 114/118] IPAL52544: TC7.5.0: Import XAO file crash application --- src/XAO/XAO_XaoExporter.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/XAO/XAO_XaoExporter.cxx b/src/XAO/XAO_XaoExporter.cxx index f8229318a..c3114ff67 100644 --- a/src/XAO/XAO_XaoExporter.cxx +++ b/src/XAO/XAO_XaoExporter.cxx @@ -317,7 +317,7 @@ namespace { { std::string version = readStringProp(xaoNode, C_ATTR_XAO_VERSION, false, ""); if (version != "") - xaoObject->setAuthor(version); + xaoObject->setVersion(version); std::string author = readStringProp(xaoNode, C_ATTR_XAO_AUTHOR, false, ""); xaoObject->setAuthor(author); @@ -592,7 +592,7 @@ namespace { int component = readIntegerProp(valNode, C_ATTR_VALUE_COMPONENT, true, -1); xmlChar* data = xmlNodeGetContent(valNode->children); - std::string value = (char*)data; + std::string value; if (data != NULL) { value = (char*)data; From aa8b2914fb15e7667fca35a7830af642511a3916 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 23 Oct 2014 16:33:30 +0400 Subject: [PATCH 115/118] IPAL52528: TC7.5.0: Dump study - transparency is lost Properly process visibility state on Show/Hide operations --- src/GEOMBase/GEOMBase_Helper.cxx | 23 +++++----- src/GEOMGUI/GEOM_Displayer.cxx | 45 +++++++++++-------- src/GEOMGUI/GEOM_Displayer.h | 3 ++ src/GEOMGUI/GeometryGUI.cxx | 7 ++- src/GEOMToolsGUI/GEOMToolsGUI.cxx | 2 +- .../GEOMToolsGUI_MaterialPropertiesDlg.cxx | 2 +- .../GEOMToolsGUI_ReduceStudyDlg.cxx | 2 +- 7 files changed, 48 insertions(+), 36 deletions(-) diff --git a/src/GEOMBase/GEOMBase_Helper.cxx b/src/GEOMBase/GEOMBase_Helper.cxx index 880ae775b..93c4c2da6 100755 --- a/src/GEOMBase/GEOMBase_Helper.cxx +++ b/src/GEOMBase/GEOMBase_Helper.cxx @@ -381,7 +381,7 @@ void GEOMBase_Helper::displayPreview( const SALOME_Prs* prs, SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); SALOME_View* aView = dynamic_cast(aViewModel); if (aView) - aView->Display( prs ); + aView->Display( getDisplayer(), prs ); } // Add prs to the preview list @@ -401,19 +401,20 @@ void GEOMBase_Helper::erasePreview( const bool update ) // check view frame where the preview was displayed bool vfOK = checkViewWindow() && myViewWindow; // Iterate through presentations and delete them - for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter ) { + for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter ) + { if ( vfOK ) + { + SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); + if ( aViewManager->getType() == OCCViewer_Viewer::Type() || + aViewManager->getType() == SVTK_Viewer::Type() ) { - SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); - if ( aViewManager->getType() == OCCViewer_Viewer::Type() || - aViewManager->getType() == SVTK_Viewer::Type() ) - { - SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); - SALOME_View* aView = dynamic_cast(aViewModel); - if (aView) - aView->Erase( *anIter, true ); - } + SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); + SALOME_View* aView = dynamic_cast(aViewModel); + if (aView) + aView->Erase( getDisplayer(), *anIter, true ); } + } delete *anIter; } myPreview.clear(); diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index cbf422eef..7d79a2cd5 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -525,18 +525,12 @@ void GEOM_Displayer::Display( const Handle(SALOME_InteractiveObject)& theIO, if ( prs ) { vf->BeforeDisplay( this, prs ); - vf->Display( prs ); + vf->Display( this, prs ); vf->AfterDisplay( this, prs ); if ( updateViewer ) vf->Repaint(); - int aMgrId = getViewManagerId(vf); - SalomeApp_Study* aStudy = getStudy(); - aStudy->setObjectProperty(aMgrId, theIO->getEntry(), GEOM::propertyName( GEOM::Visibility ), 1 ); - - setVisibilityState(theIO->getEntry(), Qtx::ShownState); - delete prs; // delete presentation because displayer is its owner } } @@ -581,17 +575,11 @@ void GEOM_Displayer::Erase( const Handle(SALOME_InteractiveObject)& theIO, SALOME_Prs* prs = vf->CreatePrs( theIO->getEntry() ); if ( prs ) { vf->BeforeErase( this, prs ); - vf->Erase( prs, forced ); + vf->Erase( this, prs, forced ); vf->AfterErase( this, prs ); if ( updateViewer ) vf->Repaint(); delete prs; // delete presentation because displayer is its owner - - int aMgrId = getViewManagerId(vf); - SalomeApp_Study* aStudy = getStudy(); - aStudy->setObjectProperty(aMgrId, theIO->getEntry(), GEOM::propertyName( GEOM::Visibility ), 0 ); - - setVisibilityState(theIO->getEntry(), Qtx::HiddenState); } } } @@ -694,6 +682,27 @@ void GEOM_Displayer::Display( const SALOME_ListIO& theIOList, const bool updateV UpdateViewer(); } +void GEOM_Displayer::UpdateVisibility( SALOME_View* v, const SALOME_Prs* p, bool on ) +{ + SalomeApp_Study* aStudy = getStudy(); + int vId = -1; + if ( v ) vId = getViewManagerId( v ); + + if ( p ) { + QString entry = p->GetEntry(); + if ( !entry.isEmpty() ) { + if ( vId != -1 ) + aStudy->setObjectProperty( vId, entry, GEOM::propertyName( GEOM::Visibility ), on ); + setVisibilityState( entry, on ? Qtx::ShownState : Qtx::HiddenState ); + } + } + else { + if ( vId != -1 ) { + aStudy->setObjectProperty( vId, GEOM::propertyName( GEOM::Visibility ), on ); + } + } +} + Quantity_Color GEOM_Displayer::qColorFromResources( const QString& property, const QColor& defColor ) { // VSR: this method can be improved in future: @@ -952,7 +961,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap if ( create && !isTemporary && aMgrId != -1 ) { // set properties to the study - study->setObjectPropMap( aMgrId, entry, propMap ); + study->setObjectProperties( aMgrId, entry, propMap ); } // AISShape->SetName(???); ??? necessary to set name ??? @@ -1106,7 +1115,7 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create ) if ( create && !isTemporary && aMgrId != -1 ) { // set properties to the study - study->setObjectPropMap( aMgrId, entry, propMap ); + study->setObjectProperties( aMgrId, entry, propMap ); } } @@ -2336,7 +2345,7 @@ PropMap GEOM_Displayer::getObjectProperties( SalomeApp_Study* study, if ( viewModel && viewId != -1 ) { // get properties from the study - PropMap storedMap = study->getObjectPropMap( viewId, entry ); + PropMap storedMap = study->getObjectProperties( viewId, entry ); // overwrite default properties from stored ones (that are specified) for ( int prop = GEOM::Visibility; prop <= GEOM::LastProperty; prop++ ) { if ( storedMap.contains( GEOM::propertyName( (GEOM::Property)prop ) ) ) @@ -2946,7 +2955,7 @@ void GEOM_Displayer::UpdateColorScale( const bool theIsRedisplayFieldSteps, cons { if( SUIT_ViewManager* aViewManager = *vmIt ) { - const ObjMap anObjects = aStudy->getObjectMap( aViewManager->getGlobalId() ); + const ObjMap& anObjects = aStudy->getObjectProperties( aViewManager->getGlobalId() ); for( ObjMap::ConstIterator objIt = anObjects.begin(); objIt != anObjects.end(); objIt++ ) { _PTR(SObject) aSObj( aStudyDS->FindObjectID( objIt.key().toLatin1().constData() ) ); diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index 7f0d01d99..0096c51b2 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -128,6 +128,9 @@ public: const bool theUpdateViewer, SALOME_View* theViewFrame ); + /* Update visibility state */ + void UpdateVisibility( SALOME_View*, const SALOME_Prs*, bool ); + /* build presentation accordint to the current viewer type*/ SALOME_Prs* BuildPrs ( GEOM::GEOM_Object_ptr ); SALOME_Prs* BuildPrs ( const TopoDS_Shape& ); diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 20e83565b..c7e69aec2 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -2702,10 +2702,10 @@ void GeometryGUI::storeVisualParameters (int savePoint) // saving VTK actors properties QVector views = vman->getViews(); for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) { - const ObjMap anObjects = appStudy->getObjectMap(aMgrId); + const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId); ObjMap::ConstIterator o_it = anObjects.begin(); for (; o_it != anObjects.end(); o_it++) { - const PropMap aProps = o_it.value(); + const PropMap& aProps = o_it.value(); //Check that object exists in the study _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) ); @@ -2977,8 +2977,7 @@ void GeometryGUI::restoreVisualParameters (int savePoint) QList lst = getApp()->viewManagers(); for (int index = 0; index < aListOfMap.count(); index++) { - - appStudy->setObjectPropMap(index, entry, aListOfMap[index]); + appStudy->setObjectProperties(index, entry, aListOfMap[index]); //Get Visibility property of the current PropMap if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) { diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index 916dda692..b56bc9c67 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -543,7 +543,7 @@ void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj, if (!CORBA::is_nil(geomObj)) { //Remove visual properties of the object - appStudy->removeObjectFromAll(obj->GetID().c_str()); + appStudy->removeObjectProperties(obj->GetID().c_str()); // Erase graphical object QListIterator it( views ); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx index 96d5cb467..657230a11 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx @@ -328,7 +328,7 @@ GEOMToolsGUI_MaterialPropertiesDlg::GEOMToolsGUI_MaterialPropertiesDlg( QWidget* SUIT_ViewWindow* window = app->desktop()->activeWindow(); if ( window ) { int mgrId = window->getViewManager()->getGlobalId(); - PropMap propMap = study->getObjectPropMap( mgrId, io->getEntry() ); + PropMap propMap = study->getObjectProperties( mgrId, io->getEntry() ); QString matProp = propMap.value(GEOM::propertyName( GEOM::Material )).toString(); if ( !matProp.isEmpty() ) myCurrentModel.fromProperties( matProp ); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx index 5554d0607..ffa36f27c 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx @@ -446,7 +446,7 @@ void GEOMToolsGUI_ReduceStudyDlg::removeObject( std::string& theStudyEntry ) _PTR(SObject) obj ( myStudy->FindObjectID( theStudyEntry.c_str() ) ); if ( obj ) { // remove visual properties of the object - appStudy->removeObjectFromAll(obj->GetID().c_str()); + appStudy->removeObjectProperties(obj->GetID().c_str()); // remove references to this object appStudy->deleteReferencesTo( obj ); // remove objects from study From 1d0e50ef3f20440808ab6e2bdf231384a96bd4f3 Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 24 Oct 2014 17:35:34 +0400 Subject: [PATCH 116/118] Minor improvement of Inertia dialog box look-n-feel. --- src/GEOMGUI/GEOM_msg_en.ts | 8 - src/GEOMGUI/GEOM_msg_fr.ts | 8 - src/GEOMGUI/GEOM_msg_ja.ts | 8 - .../MeasureGUI_1Sel12LineEdit_QTD.ui | 381 +++++++++++------- src/MeasureGUI/MeasureGUI_InertiaDlg.cxx | 16 +- 5 files changed, 244 insertions(+), 177 deletions(-) diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 754afda3d..79079b8c8 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -908,14 +908,6 @@ Please, select face, shell or solid and try again GEOM_INERTIA_CONSTR Matrix And Moments Of Inertia - - GEOM_INERTIA_I - %1:1 : - - - GEOM_INERTIA_IXYZ - IX & IY & IZ : - GEOM_INERTIA_TITLE Calculs Of Inertia diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 07c02e244..7bb28365f 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -920,14 +920,6 @@ Choisissez une face, une coque ou un solide et essayez de nouveau GEOM_INERTIA_CONSTR Matrice et moment d'inertie - - GEOM_INERTIA_I - %1:1 : - - - GEOM_INERTIA_IXYZ - IX & IY & IZ : - GEOM_INERTIA_TITLE Calcul de l'inertie diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index 8d7cd8e2d..8ee7476d7 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -899,14 +899,6 @@ GEOM_INERTIA_CONSTR 行列とモーメント - - GEOM_INERTIA_I - %1:1。 - - - GEOM_INERTIA_IXYZ - IX & IY & IZ : - GEOM_INERTIA_TITLE 慣性の計算 diff --git a/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui index 30b225aad..2f0e56b0e 100644 --- a/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui +++ b/src/MeasureGUI/MeasureGUI_1Sel12LineEdit_QTD.ui @@ -1,63 +1,48 @@ - + + MeasureGUI_1Sel12LineEdit_QTD - - + + 0 0 - 196 - 162 + 501 + 171 - + - - - 0 - - - 0 - - - 0 - - - 0 - - - 6 - - - 6 - - - - + + + + - - - 9 - - - 9 - - - 9 - - - 9 - - - 6 - - - 6 - - - - + + + + + TL1 + + + + + + + + 0 + 0 + + + + + + + + + + 300 0 @@ -65,109 +50,207 @@ - - - - 0 - - - 0 - - - 0 - - - 0 - - - 6 - - - 6 - - - - - - - - - - - TL2 - - - - - - - - - - TL4 - - - - - - - - - - - - - - - - - - - - - - - - - TL5 - - - - - - - - - - - - - - - - TL3 - - - - - - - - - TL1 + + + + TL2_1 - - - - - 0 - 0 - + + + + + 100 + 0 + - - + + + + + + TL2_2 + + + + + + + + 100 + 0 + + + + + + + + TL2_3 + + + + + + + + 100 + 0 + + + + + + + + TL3_1 + + + + + + + + 100 + 0 + + + + + + + + TL3_2 + + + + + + + + 100 + 0 + + + + + + + + TL3_3 + + + + + + + + 100 + 0 + + + + + + + + TL4_1 + + + + + + + + 100 + 0 + + + + + + + + TL4_2 + + + + + + + + 100 + 0 + + + + + + + + TL4_3 + + + + + + + + 100 + 0 + + + + + + + + TL5_1 + + + + + + + + 100 + 0 + + + + + + + + TL5_2 + + + + + + + + 100 + 0 + + + + + + + + TL5_3 + + + + + + + + 100 + 0 + diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx index 3a17446b4..3a011a5fe 100644 --- a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx @@ -62,10 +62,18 @@ MeasureGUI_InertiaDlg::MeasureGUI_InertiaDlg( GeometryGUI* GUI, QWidget* parent myGrp = new MeasureGUI_1Sel12LineEdit( centralWidget() ); myGrp->GroupBox1->setTitle( tr( "GEOM_MATRIX" ) ); myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) ); - myGrp->TextLabel2->setText( tr( "GEOM_INERTIA_I" ).arg( "1" ) ); - myGrp->TextLabel3->setText( tr( "GEOM_INERTIA_I" ).arg( "2" ) ); - myGrp->TextLabel4->setText( tr( "GEOM_INERTIA_I" ).arg( "3" ) ); - myGrp->TextLabel5->setText( tr( "GEOM_INERTIA_IXYZ" ) ); + myGrp->TextLabel2_1->setText( "1:1" ); + myGrp->TextLabel2_2->setText( "1:2" ); + myGrp->TextLabel2_3->setText( "1:3" ); + myGrp->TextLabel3_1->setText( "2:1" ); + myGrp->TextLabel3_2->setText( "2:2" ); + myGrp->TextLabel3_3->setText( "2:3" ); + myGrp->TextLabel4_1->setText( "3:1" ); + myGrp->TextLabel4_2->setText( "3:2" ); + myGrp->TextLabel4_3->setText( "3:3" ); + myGrp->TextLabel5_1->setText( "IX" ); + myGrp->TextLabel5_2->setText( "IY" ); + myGrp->TextLabel5_3->setText( "IZ" ); myGrp->LineEdit11->setReadOnly( true ); myGrp->LineEdit12->setReadOnly( true ); myGrp->LineEdit13->setReadOnly( true ); From cee59108f825fff17d0ba30dd4311462a7e90ebe Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 28 Oct 2014 11:34:07 +0300 Subject: [PATCH 117/118] =?UTF-8?q?IPAL52531:=20TC7.5.0:=20Dialog=20box=20?= =?UTF-8?q?=E2=80=9CFuse=20Collinear=20Edges=20within=20a=20wire=E2=80=9D?= =?UTF-8?q?=20misprint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/GEOMGUI/GEOM_msg_en.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 79079b8c8..06cb15a74 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2222,7 +2222,7 @@ Please, select face, shell or solid and try again GEOM_VERTEXES - Vertexes + Vertices GEOM_WATER_DENSITY From a86e38643dad1a05635607b5f66dc3565916e3d0 Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 28 Oct 2014 15:11:12 +0300 Subject: [PATCH 118/118] IPAL52557: TC7.5.0: default value in Hypothesis is different in new and saved studies In PreciseBoundingBox(), allow an empty bnd box as input --- src/GEOMUtils/GEOMUtils.cxx | 225 ++++++++++++++++++------------------ 1 file changed, 113 insertions(+), 112 deletions(-) diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx index aa8c3d7a3..44e55da79 100644 --- a/src/GEOMUtils/GEOMUtils.cxx +++ b/src/GEOMUtils/GEOMUtils.cxx @@ -109,8 +109,8 @@ namespace * \internal */ Standard_Boolean ModifyShape(const TopoDS_Shape &theShape, - TopoDS_Shape &theModifiedShape, - Standard_Real &theAddDist) + TopoDS_Shape &theModifiedShape, + Standard_Real &theAddDist) { Standard_Boolean isModified = Standard_False; TopExp_Explorer anExp; @@ -126,84 +126,84 @@ namespace if(nbf==1) { TopoDS_Shape sh = theShape; while(sh.ShapeType()==TopAbs_COMPOUND) { - TopoDS_Iterator it(sh); - sh = it.Value(); + TopoDS_Iterator it(sh); + sh = it.Value(); } Handle(Geom_Surface) S = BRep_Tool::Surface(TopoDS::Face(theModifiedShape)); if( S->IsKind(STANDARD_TYPE(Geom_SphericalSurface)) || - S->IsKind(STANDARD_TYPE(Geom_ToroidalSurface)) || - S->IsUPeriodic()) { - const Standard_Boolean isShell = - (sh.ShapeType()==TopAbs_SHELL || sh.ShapeType()==TopAbs_FACE); + S->IsKind(STANDARD_TYPE(Geom_ToroidalSurface)) || + S->IsUPeriodic()) { + const Standard_Boolean isShell = + (sh.ShapeType()==TopAbs_SHELL || sh.ShapeType()==TopAbs_FACE); - if( isShell || S->IsUPeriodic() ) { - // non solid case or any periodic surface (Mantis 22454). - double U1,U2,V1,V2; - // changes for 0020677: EDF 1219 GEOM: MinDistance gives 0 instead of 20.88 - //S->Bounds(U1,U2,V1,V2); changed by - ShapeAnalysis::GetFaceUVBounds(TopoDS::Face(theModifiedShape),U1,U2,V1,V2); - // end of changes for 020677 (dmv) - Handle(Geom_RectangularTrimmedSurface) TrS1 = - new Geom_RectangularTrimmedSurface(S,U1,(U1+U2)/2.,V1,V2); - Handle(Geom_RectangularTrimmedSurface) TrS2 = - new Geom_RectangularTrimmedSurface(S,(U1+U2)/2.,U2,V1,V2); - BRep_Builder B; - TopoDS_Face F1,F2; - TopoDS_Shape aMShape; + if( isShell || S->IsUPeriodic() ) { + // non solid case or any periodic surface (Mantis 22454). + double U1,U2,V1,V2; + // changes for 0020677: EDF 1219 GEOM: MinDistance gives 0 instead of 20.88 + //S->Bounds(U1,U2,V1,V2); changed by + ShapeAnalysis::GetFaceUVBounds(TopoDS::Face(theModifiedShape),U1,U2,V1,V2); + // end of changes for 020677 (dmv) + Handle(Geom_RectangularTrimmedSurface) TrS1 = + new Geom_RectangularTrimmedSurface(S,U1,(U1+U2)/2.,V1,V2); + Handle(Geom_RectangularTrimmedSurface) TrS2 = + new Geom_RectangularTrimmedSurface(S,(U1+U2)/2.,U2,V1,V2); + BRep_Builder B; + TopoDS_Face F1,F2; + TopoDS_Shape aMShape; - if (isShell) { - B.MakeCompound(TopoDS::Compound(aMShape)); - } else { - B.MakeShell(TopoDS::Shell(aMShape)); - } + if (isShell) { + B.MakeCompound(TopoDS::Compound(aMShape)); + } else { + B.MakeShell(TopoDS::Shell(aMShape)); + } - B.MakeFace(F1,TrS1,1.e-7); - B.Add(aMShape,F1); - B.MakeFace(F2,TrS2,1.e-7); - B.Add(aMShape,F2); - Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape; + B.MakeFace(F1,TrS1,1.e-7); + B.Add(aMShape,F1); + B.MakeFace(F2,TrS2,1.e-7); + B.Add(aMShape,F2); + Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape; - if (!isShell) { - // The original shape is a solid. - TopoDS_Solid aSolid; + if (!isShell) { + // The original shape is a solid. + TopoDS_Solid aSolid; - B.MakeSolid(aSolid); - B.Add(aSolid, aMShape); - aMShape = aSolid; - } + B.MakeSolid(aSolid); + B.Add(aSolid, aMShape); + aMShape = aSolid; + } - sfs->Init(aMShape); - sfs->SetPrecision(1.e-6); - sfs->SetMaxTolerance(1.0); - sfs->Perform(); - theModifiedShape = sfs->Shape(); - isModified = Standard_True; - } - else { - if( S->IsKind(STANDARD_TYPE(Geom_SphericalSurface)) ) { - Handle(Geom_SphericalSurface) SS = Handle(Geom_SphericalSurface)::DownCast(S); - gp_Pnt PC = SS->Location(); - BRep_Builder B; - TopoDS_Vertex V; - B.MakeVertex(V,PC,1.e-7); - theModifiedShape = V; - theAddDist = SS->Radius(); - isModified = Standard_True; - } - else { - Handle(Geom_ToroidalSurface) TS = Handle(Geom_ToroidalSurface)::DownCast(S); - gp_Ax3 ax3 = TS->Position(); - Handle(Geom_Circle) C = new Geom_Circle(ax3.Ax2(),TS->MajorRadius()); - BRep_Builder B; - TopoDS_Edge E; - B.MakeEdge(E,C,1.e-7); - theModifiedShape = E; - theAddDist = TS->MinorRadius(); - isModified = Standard_True; - } - } + sfs->Init(aMShape); + sfs->SetPrecision(1.e-6); + sfs->SetMaxTolerance(1.0); + sfs->Perform(); + theModifiedShape = sfs->Shape(); + isModified = Standard_True; + } + else { + if( S->IsKind(STANDARD_TYPE(Geom_SphericalSurface)) ) { + Handle(Geom_SphericalSurface) SS = Handle(Geom_SphericalSurface)::DownCast(S); + gp_Pnt PC = SS->Location(); + BRep_Builder B; + TopoDS_Vertex V; + B.MakeVertex(V,PC,1.e-7); + theModifiedShape = V; + theAddDist = SS->Radius(); + isModified = Standard_True; + } + else { + Handle(Geom_ToroidalSurface) TS = Handle(Geom_ToroidalSurface)::DownCast(S); + gp_Ax3 ax3 = TS->Position(); + Handle(Geom_Circle) C = new Geom_Circle(ax3.Ax2(),TS->MajorRadius()); + BRep_Builder B; + TopoDS_Edge E; + B.MakeEdge(E,C,1.e-7); + theModifiedShape = E; + theAddDist = TS->MinorRadius(); + isModified = Standard_True; + } + } } else { - theModifiedShape = theShape; + theModifiedShape = theShape; } } else @@ -230,18 +230,18 @@ namespace GProp_GProps GPr; // BEGIN: fix for Mantis issue 0020842 if (isOldSorting) { - BRepGProp::LinearProperties(S, GPr); + BRepGProp::LinearProperties(S, GPr); } else { - if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { - BRepGProp::LinearProperties(S, GPr); - } - else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { - BRepGProp::SurfaceProperties(S, GPr); - } - else { - BRepGProp::VolumeProperties(S, GPr); - } + if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { + BRepGProp::LinearProperties(S, GPr); + } + else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { + BRepGProp::SurfaceProperties(S, GPr); + } + else { + BRepGProp::VolumeProperties(S, GPr); + } } // END: fix for Mantis issue 0020842 GPoint = GPr.CentreOfMass(); @@ -256,21 +256,21 @@ namespace { treeStr.append( "{" ); for( GEOMUtils::LevelsList::const_iterator j = theLevelList.begin(); - j != theLevelList.end(); ++j ) { + j != theLevelList.end(); ++j ) { if ( j != theLevelList.begin() ) { - treeStr.append( ";" ); + treeStr.append( ";" ); } GEOMUtils::LevelInfo level = (*j); GEOMUtils::LevelInfo::iterator upIter; for ( upIter = level.begin(); upIter != level.end(); ++upIter ) { - if ( upIter != level.begin() ) { - treeStr.append( "," ); - } - treeStr.append( upIter->first ); - for ( std::vector::iterator k = upIter->second.begin(); k != upIter->second.end(); ++k ) { - treeStr.append( "_" ); - treeStr.append( *k ); - } + if ( upIter != level.begin() ) { + treeStr.append( "," ); + } + treeStr.append( upIter->first ); + for ( std::vector::iterator k = upIter->second.begin(); k != upIter->second.end(); ++k ) { + treeStr.append( "_" ); + treeStr.append( *k ); + } } } treeStr.append( "}" ); @@ -287,33 +287,33 @@ namespace std::vector levelsListStr; while ( std::getline( ss, substr, ';' ) ) { if ( !substr.empty() ) - levelsListStr.push_back( substr ); + levelsListStr.push_back( substr ); } GEOMUtils::LevelsList levelsListData; for( int level = 0; level < levelsListStr.size(); level++ ) { std::vector namesListStr; std::stringstream ss1( levelsListStr[level] ); while ( std::getline( ss1, substr, ',' ) ) { - if ( !substr.empty() ) - namesListStr.push_back( substr ); + if ( !substr.empty() ) + namesListStr.push_back( substr ); } GEOMUtils::LevelInfo levelInfoData; for( int node = 0; node < namesListStr.size(); node++ ) { - std::vector linksListStr; - std::stringstream ss2( namesListStr[node] ); - while ( std::getline( ss2, substr, '_' ) ) { - if ( !substr.empty() ) - linksListStr.push_back( substr ); - } - std::string nodeItem = linksListStr[0]; - if( !nodeItem.empty() ) { - GEOMUtils::NodeLinks linksListData; - for( int link = 1; link < linksListStr.size(); link++ ) { - std::string linkItem = linksListStr[link]; - linksListData.push_back( linkItem ); - }// Links - levelInfoData[nodeItem] = linksListData; - } + std::vector linksListStr; + std::stringstream ss2( namesListStr[node] ); + while ( std::getline( ss2, substr, '_' ) ) { + if ( !substr.empty() ) + linksListStr.push_back( substr ); + } + std::string nodeItem = linksListStr[0]; + if( !nodeItem.empty() ) { + GEOMUtils::NodeLinks linksListData; + for( int link = 1; link < linksListStr.size(); link++ ) { + std::string linkItem = linksListStr[link]; + linksListData.push_back( linkItem ); + }// Links + levelInfoData[nodeItem] = linksListData; + } }// Level's objects levelsListData.push_back(levelInfoData); }// Levels @@ -812,8 +812,9 @@ TopoDS_Shape GEOMUtils::GetEdgeNearPoint (const TopoDS_Shape& theShape, Standard_Boolean GEOMUtils::PreciseBoundingBox (const TopoDS_Shape &theShape, Bnd_Box &theBox) { - Standard_Real aBound[6]; + if ( theBox.IsVoid() ) BRepBndLib::Add( theShape, theBox ); + Standard_Real aBound[6]; theBox.Get(aBound[0], aBound[2], aBound[4], aBound[1], aBound[3], aBound[5]); Standard_Integer i; @@ -845,7 +846,7 @@ Standard_Boolean GEOMUtils::PreciseBoundingBox const Standard_Integer iHalf = i/2; const gp_Pln aPln(aPnt[i], aDir[iHalf]); BRepBuilderAPI_MakeFace aMkFace(aPln, -aPlnSize[iHalf], aPlnSize[iHalf], - -aPlnSize[iHalf], aPlnSize[iHalf]); + -aPlnSize[iHalf], aPlnSize[iHalf]); if (!aMkFace.IsDone()) { return Standard_False; @@ -1038,7 +1039,7 @@ gp_Pnt GEOMUtils::ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) // purpose : Returns the string representation of dependency tree //======================================================================= void GEOMUtils::ConvertTreeToString( const TreeModel &tree, - std::string &treeStr ) + std::string &treeStr ) { TreeModel::const_iterator i; for ( i = tree.begin(); i != tree.end(); ++i ) { @@ -1058,7 +1059,7 @@ void GEOMUtils::ConvertTreeToString( const TreeModel &tree, // purpose : Returns the dependency tree //======================================================================= void GEOMUtils::ConvertStringToTree( const std::string &theData, - TreeModel &tree ) + TreeModel &tree ) { std::size_t cursor = 0;