Mantis issue 0021350: EDF 1948 GEOM: Export IGES 5.3 impossible.

This commit is contained in:
jfa 2012-03-07 08:05:30 +00:00
parent ee46a27702
commit 9f11350cbe
3 changed files with 146 additions and 76 deletions

View File

@ -4423,6 +4423,13 @@ Please, select face, shell or solid and try again</translation>
<source>GEOM_IMPORT_ERRORS</source> <source>GEOM_IMPORT_ERRORS</source>
<translation>Import operation has finished with errors:</translation> <translation>Import operation has finished with errors:</translation>
</message> </message>
<message>
<source>EXPORT_IGES_HETEROGENEOUS_COMPOUND</source>
<translation>This compound cannot be exported in IGES format
without loss, because it contains entities, that must be saved in
different modes. It is vertices, edges and wires on the one hand and
shells and solids on the other hand.</translation>
</message>
<message> <message>
<source>GEOM_PUBLISH_NAMED_SHAPES</source> <source>GEOM_PUBLISH_NAMED_SHAPES</source>
<translation>Create groups for named shapes (if there are any)?</translation> <translation>Create groups for named shapes (if there are any)?</translation>

View File

@ -18,12 +18,11 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : GEOMBase_Tools.cxx // File : GEOMBase_Tools.cxx
// Author : Damien COQUERET, Open CASCADE S.A.S. // Author : Damien COQUERET, Open CASCADE S.A.S.
//
#include "GEOMToolsGUI.h" #include "GEOMToolsGUI.h"
#include "GEOMToolsGUI_DeleteDlg.h" #include "GEOMToolsGUI_DeleteDlg.h"
@ -78,9 +77,9 @@ static QString getFileName( QWidget* parent,
{ {
//QStringList filters; //QStringList filters;
QString aBrepFilter; QString aBrepFilter;
for ( FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it ) { for (FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it) {
//filters.push_back( it.key() ); //filters.push_back( it.key() );
if ( it.key().contains( "BREP", Qt::CaseInsensitive ) ) if (it.key().contains( "BREP", Qt::CaseInsensitive ))
aBrepFilter = it.key(); aBrepFilter = it.key();
} }
@ -90,12 +89,12 @@ static QString getFileName( QWidget* parent,
if ( !initial.isEmpty() ) if ( !initial.isEmpty() )
fd->selectFile( initial ); fd->selectFile( initial );
if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() ) if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() )
fd->setDirectory( QDir::currentPath() ); fd->setDirectory( QDir::currentPath() );
fd->setFilters( filters ); fd->setFilters( filters );
if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) { if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) {
fd->selectFilter( lastUsedFilter ); fd->selectFilter( lastUsedFilter );
} }
@ -144,19 +143,19 @@ static QStringList getFileNames( QWidget* parent,
} }
} }
filters.append( QObject::tr( "GEOM_ALL_IMPORT_FILES" ).arg( allFilters.join( " " ) ) ); filters.append( QObject::tr( "GEOM_ALL_IMPORT_FILES" ).arg( allFilters.join( " " ) ) );
SUIT_FileDlg fd( parent, true, true, true ); SUIT_FileDlg fd( parent, true, true, true );
fd.setFileMode( SUIT_FileDlg::ExistingFiles ); fd.setFileMode( SUIT_FileDlg::ExistingFiles );
if ( !caption.isEmpty() ) if ( !caption.isEmpty() )
fd.setWindowTitle( caption ); fd.setWindowTitle( caption );
if ( !initial.isEmpty() ) if ( !initial.isEmpty() )
fd.selectFile( initial ); fd.selectFile( initial );
if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() ) if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() )
fd.setDirectory( QDir::currentPath() ); fd.setDirectory( QDir::currentPath() );
fd.setFilters( filters ); fd.setFilters( filters );
if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) )
fd.selectFilter( lastUsedFilter ); fd.selectFilter( lastUsedFilter );
else if ( !aBrepFilter.isEmpty() ) else if ( !aBrepFilter.isEmpty() )
@ -208,7 +207,7 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap<QStri
aSelectedSO.push_back(so); aSelectedSO.push_back(so);
CORBA::Object_var corbaObj_rem = GeometryGUI::ClientSObjectToObject( so ); CORBA::Object_var corbaObj_rem = GeometryGUI::ClientSObjectToObject( so );
GEOM::GEOM_Object_var geomObj_rem = GEOM::GEOM_Object::_narrow( corbaObj_rem ); GEOM::GEOM_Object_var geomObj_rem = GEOM::GEOM_Object::_narrow( corbaObj_rem );
if( CORBA::is_nil( geomObj_rem ) ) if( CORBA::is_nil( geomObj_rem ) )
continue; continue;
gobjects.insert( oit.key(), geomObj_rem ); gobjects.insert( oit.key(), geomObj_rem );
} }
@ -216,7 +215,7 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap<QStri
// Search References with other Modules // Search References with other Modules
std::list< _PTR(SObject) >::iterator itSO = aSelectedSO.begin(); std::list< _PTR(SObject) >::iterator itSO = aSelectedSO.begin();
for ( ; itSO != aSelectedSO.end(); ++itSO ) { for ( ; itSO != aSelectedSO.end(); ++itSO ) {
std::vector<_PTR(SObject)> aReferences = study->FindDependances( *itSO ); std::vector<_PTR(SObject)> aReferences = study->FindDependances( *itSO );
int aRefLength = aReferences.size(); int aRefLength = aReferences.size();
if (aRefLength) { if (aRefLength) {
for (int i = 0; i < aRefLength; i++) { for (int i = 0; i < aRefLength; i++) {
@ -235,11 +234,11 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap<QStri
_PTR(SObject) child( it->Value() ); _PTR(SObject) child( it->Value() );
CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child ); CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child );
GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
if( CORBA::is_nil( geomObj ) ) if( CORBA::is_nil( geomObj ) )
continue; continue;
GEOM::ListOfGO_var list = geomObj->GetDependency(); GEOM::ListOfGO_var list = geomObj->GetDependency();
if( list->length() == 0 ) if( list->length() == 0 )
continue; continue;
for( int i = 0; i < list->length(); i++ ) { for( int i = 0; i < list->length(); i++ ) {
@ -257,7 +256,6 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap<QStri
return false; return false;
} }
//======================================================================= //=======================================================================
// function : GEOMToolsGUI() // function : GEOMToolsGUI()
// purpose : Constructor // purpose : Constructor
@ -267,7 +265,6 @@ GEOMToolsGUI::GEOMToolsGUI( GeometryGUI* parent )
{ {
} }
//======================================================================= //=======================================================================
// function : ~GEOMToolsGUI() // function : ~GEOMToolsGUI()
// purpose : Destructor // purpose : Destructor
@ -276,7 +273,6 @@ GEOMToolsGUI::~GEOMToolsGUI()
{ {
} }
//======================================================================= //=======================================================================
// function : OnGUIEvent() // function : OnGUIEvent()
// purpose : // purpose :
@ -375,7 +371,7 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
OnEdgeWidth(); OnEdgeWidth();
break; break;
case GEOMOp::OpIsosWidth: case GEOMOp::OpIsosWidth:
OnIsosWidth(); OnIsosWidth();
break; break;
default: default:
SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
@ -384,7 +380,6 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
return true; return true;
} }
//=============================================================================== //===============================================================================
// function : OnEditDelete() // function : OnEditDelete()
// purpose : // purpose :
@ -408,7 +403,7 @@ void GEOMToolsGUI::OnEditDelete()
return; return;
_PTR(Study) aStudy = appStudy->studyDS(); _PTR(Study) aStudy = appStudy->studyDS();
// check if study is locked // check if study is locked
if ( _PTR(AttributeStudyProperties)( aStudy->GetProperties() )->IsLocked() ) { if ( _PTR(AttributeStudyProperties)( aStudy->GetProperties() )->IsLocked() ) {
SUIT_MessageBox::warning( app->desktop(), SUIT_MessageBox::warning( app->desktop(),
@ -416,7 +411,7 @@ void GEOMToolsGUI::OnEditDelete()
tr("WRN_STUDY_LOCKED") ); tr("WRN_STUDY_LOCKED") );
return; // study is locked return; // study is locked
} }
// get GEOM component // get GEOM component
CORBA::String_var geomIOR = app->orb()->object_to_string( GeometryGUI::GetGeomGen() ); CORBA::String_var geomIOR = app->orb()->object_to_string( GeometryGUI::GetGeomGen() );
QString geomComp = getParentComponent( aStudy->FindObjectIOR( geomIOR.in() ) ); QString geomComp = getParentComponent( aStudy->FindObjectIOR( geomIOR.in() ) );
@ -425,7 +420,7 @@ void GEOMToolsGUI::OnEditDelete()
QMap<QString,QString> toBeDeleted; QMap<QString,QString> toBeDeleted;
QMap<QString,QString> allDeleted; QMap<QString,QString> allDeleted;
bool isComponentSelected = false; bool isComponentSelected = false;
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
Handle(SALOME_InteractiveObject) anIObject = It.Value(); Handle(SALOME_InteractiveObject) anIObject = It.Value();
if ( !anIObject->hasEntry() ) if ( !anIObject->hasEntry() )
@ -444,9 +439,9 @@ void GEOMToolsGUI::OnEditDelete()
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
// if GEOM component is selected, so skip other checks // if GEOM component is selected, so skip other checks
if ( isComponentSelected ) continue; if ( isComponentSelected ) continue;
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
// check if object is reference // check if object is reference
_PTR(SObject) refobj; _PTR(SObject) refobj;
if ( obj && obj->ReferencedObject( refobj ) ) { if ( obj && obj->ReferencedObject( refobj ) ) {
@ -474,7 +469,7 @@ void GEOMToolsGUI::OnEditDelete()
allDeleted.insert( child->GetID().c_str(), aName ); allDeleted.insert( child->GetID().c_str(), aName );
} }
} }
// is there is anything to delete? // is there is anything to delete?
if ( !isComponentSelected && allDeleted.count() <= 0 ) if ( !isComponentSelected && allDeleted.count() <= 0 )
return; // nothing to delete return; // nothing to delete
@ -483,7 +478,7 @@ void GEOMToolsGUI::OnEditDelete()
GEOMToolsGUI_DeleteDlg dlg( app->desktop(), allDeleted, isComponentSelected ); GEOMToolsGUI_DeleteDlg dlg( app->desktop(), allDeleted, isComponentSelected );
if ( !dlg.exec() ) if ( !dlg.exec() )
return; // operation is cancelled by user return; // operation is cancelled by user
// get currently opened views // get currently opened views
QList<SALOME_View*> views; QList<SALOME_View*> views;
SALOME_View* view; SALOME_View* view;
@ -495,10 +490,10 @@ void GEOMToolsGUI::OnEditDelete()
if ( view ) if ( view )
views.append( view ); views.append( view );
} }
_PTR(StudyBuilder) aStudyBuilder (aStudy->NewBuilder()); _PTR(StudyBuilder) aStudyBuilder (aStudy->NewBuilder());
GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); GEOM_Displayer* disp = new GEOM_Displayer( appStudy );
if ( isComponentSelected ) { if ( isComponentSelected ) {
// GEOM component is selected: delete all objects recursively // GEOM component is selected: delete all objects recursively
_PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() ); _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() );
@ -529,12 +524,10 @@ void GEOMToolsGUI::OnEditDelete()
// remove object from GEOM engine // remove object from GEOM engine
removeObjectWithChildren( obj, aStudy, views, disp ); removeObjectWithChildren( obj, aStudy, views, disp );
// remove objects from study // remove objects from study
aStudyBuilder->RemoveObjectWithChildren( obj ); aStudyBuilder->RemoveObjectWithChildren( obj );
} }
} }
selected.Clear(); selected.Clear();
aSelMgr->setSelectedObjects( selected ); aSelMgr->setSelectedObjects( selected );
getGeometryGUI()->updateObjBrowser(); getGeometryGUI()->updateObjBrowser();
@ -620,7 +613,7 @@ bool GEOMToolsGUI::Import()
// file type is not defined, try to detect // file type is not defined, try to detect
QString ext = QFileInfo( fileName ).suffix().toUpper(); QString ext = QFileInfo( fileName ).suffix().toUpper();
QRegExp re( "\\*\\.(\\w+)" ); QRegExp re( "\\*\\.(\\w+)" );
for ( FilterMap::const_iterator it = aMap.begin(); for ( FilterMap::const_iterator it = aMap.begin();
it != aMap.end() && aCurrentType.isEmpty(); ++it ) { it != aMap.end() && aCurrentType.isEmpty(); ++it ) {
int pos = 0; int pos = 0;
while ( re.indexIn( it.key(), pos ) >= 0 ) { while ( re.indexIn( it.key(), pos ) >= 0 ) {
@ -696,23 +689,24 @@ bool GEOMToolsGUI::Import()
return false; // cancel (break) import operation return false; // cancel (break) import operation
} // if ( acisAnswer != YesToAll && acisAnswer != NoToAll ) } // if ( acisAnswer != YesToAll && acisAnswer != NoToAll )
} // else if ( aCurrentType == "ACIS" ) } // else if ( aCurrentType == "ACIS" )
GEOM::GEOM_Object_var anObj = aInsOp->ImportFile( fileN, fileT ); GEOM::GEOM_Object_var anObj = aInsOp->ImportFile( fileN, fileT );
if ( !anObj->_is_nil() && aInsOp->IsDone() ) { if ( !anObj->_is_nil() && aInsOp->IsDone() ) {
QString aPublishObjName = QString aPublishObjName =
GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, /*withExten=*/true ) ); GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, /*withExten=*/true ) );
SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy ); SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy );
SALOMEDS::SObject_var aSO = GeometryGUI::GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject_var aSO =
SALOMEDS::SObject::_nil(), GeometryGUI::GetGeomGen()->PublishInStudy( aDSStudy,
anObj, SALOMEDS::SObject::_nil(),
aPublishObjName.toLatin1().constData() ); anObj,
if( ( !aSO->_is_nil() ) ) aPublishObjName.toLatin1().constData() );
if ( ( !aSO->_is_nil() ) )
anEntryList.append( aSO->GetID() ); anEntryList.append( aSO->GetID() );
objsForDisplay.append( anObj ); objsForDisplay.append( anObj );
if ( aCurrentType == "ACIS" ) { if ( aCurrentType == "ACIS" ) {
if ( acisAnswer == SUIT_MessageBox::Yes || acisAnswer == SUIT_MessageBox::YesToAll ) if ( acisAnswer == SUIT_MessageBox::Yes || acisAnswer == SUIT_MessageBox::YesToAll )
GeometryGUI::GetGeomGen()->PublishNamedShapesInStudy( aDSStudy, anObj ); GeometryGUI::GetGeomGen()->PublishNamedShapesInStudy( aDSStudy, anObj );
@ -752,7 +746,6 @@ bool GEOMToolsGUI::Import()
return objsForDisplay.count() > 0; return objsForDisplay.count() > 0;
} }
//===================================================================================== //=====================================================================================
// function : Export // function : Export
// purpose : BRep, Iges, Step // purpose : BRep, Iges, Step
@ -801,7 +794,7 @@ bool GEOMToolsGUI::Export()
bool appropriateObj = false; bool appropriateObj = false;
SALOME_ListIteratorOfListIO It( selectedObjects ); SALOME_ListIteratorOfListIO It( selectedObjects );
for(;It.More();It.Next()) { for (; It.More(); It.Next()) {
Handle(SALOME_InteractiveObject) IObject = It.Value(); Handle(SALOME_InteractiveObject) IObject = It.Value();
GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( IObject ); GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( IObject );
@ -824,20 +817,18 @@ bool GEOMToolsGUI::Export()
anOp->start(); anOp->start();
aInsOp->Export( anObj, file.toStdString().c_str(), fileType.toLatin1().constData() ); aInsOp->Export( anObj, file.toStdString().c_str(), fileType.toLatin1().constData() );
if ( aInsOp->IsDone() ) if (aInsOp->IsDone())
anOp->commit(); anOp->commit();
else else {
{ anOp->abort();
anOp->abort(); wc.suspend();
wc.suspend(); SUIT_MessageBox::critical(app->desktop(),
SUIT_MessageBox::critical( app->desktop(), QObject::tr("GEOM_ERROR"),
QObject::tr( "GEOM_ERROR" ), QObject::tr("GEOM_PRP_ABORT") + "\n" + QObject::tr(aInsOp->GetErrorCode()));
QObject::tr("GEOM_PRP_ABORT") + "\n" + QString( aInsOp->GetErrorCode() ) ); return false;
return false; }
}
} }
catch (const SALOME::SALOME_Exception& S_ex) { catch (const SALOME::SALOME_Exception& S_ex) {
//QtCatchCorbaException(S_ex); //QtCatchCorbaException(S_ex);
@ -873,7 +864,7 @@ void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj,
_PTR(GenericAttribute) anAttr; _PTR(GenericAttribute) anAttr;
if (obj->FindAttribute(anAttr, "AttributeIOR")) { if (obj->FindAttribute(anAttr, "AttributeIOR")) {
_PTR(AttributeIOR) anIOR (anAttr); _PTR(AttributeIOR) anIOR (anAttr);
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() ); SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
// Delete shape in Client // Delete shape in Client
@ -883,16 +874,16 @@ void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj,
CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj); CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj);
GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
if (!CORBA::is_nil(geomObj)) { if (!CORBA::is_nil(geomObj)) {
//Remove visual properties of the object //Remove visual properties of the object
appStudy->removeObjectFromAll(obj->GetID().c_str()); appStudy->removeObjectFromAll(obj->GetID().c_str());
// Erase graphical object // Erase graphical object
QListIterator<SALOME_View*> it( views ); QListIterator<SALOME_View*> it( views );
while ( it.hasNext() ) while ( it.hasNext() )
if ( SALOME_View* view = it.next() ) if ( SALOME_View* view = it.next() )
disp->Erase(geomObj, true, view); disp->Erase(geomObj, true, view);
// Remove object from Engine // Remove object from Engine
// We can't directly remove object from engine. All we can do is to unpublish the object // We can't directly remove object from engine. All we can do is to unpublish the object
// from the study. Another client could be using the object. // from the study. Another client could be using the object.

View File

@ -31,8 +31,12 @@
#include <IGESControl_Writer.hxx> #include <IGESControl_Writer.hxx>
#include <Interface_Static.hxx> #include <Interface_Static.hxx>
#include <TCollection_AsciiString.hxx>
#include <TopoDS_Shape.hxx> #include <TopoDS_Shape.hxx>
#include <TopoDS_Iterator.hxx>
#include <TCollection_AsciiString.hxx>
#include <Standard_Failure.hxx>
#ifdef WNT #ifdef WNT
#if defined IGESEXPORT_EXPORTS || defined IGESExport_EXPORTS #if defined IGESEXPORT_EXPORTS || defined IGESExport_EXPORTS
@ -52,6 +56,63 @@
#define IGESEXPORT_EXPORT #define IGESEXPORT_EXPORT
#endif #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;
}
//============================================================================= //=============================================================================
/*! /*!
* *
@ -65,17 +126,32 @@ IGESEXPORT_EXPORT
const TCollection_AsciiString& theFileName, const TCollection_AsciiString& theFileName,
const TCollection_AsciiString& theFormatName ) 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()); 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 // 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 // inappropriate error message instead, it is disturbing for the user and for us
//try //try
{ {
// 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;
// Set "C" numeric locale to save numbers correctly // Set "C" numeric locale to save numbers correctly
Kernel_Utils::Localizer loc; Kernel_Utils::Localizer loc;
@ -91,18 +167,14 @@ IGESEXPORT_EXPORT
Interface_Static::SetCVal("write.precision.mode","Max"); Interface_Static::SetCVal("write.precision.mode","Max");
// perform shape writing // perform shape writing
ICW.AddShape( theShape ); if (ICW.AddShape( theShape )) {
ICW.ComputeModel(); ICW.ComputeModel();
bool ok = ICW.Write( theFileName.ToCString() ); ok = ICW.Write( theFileName.ToCString() );
}
// Return previous locale
if ( ok )
return 1;
} }
//catch(Standard_Failure) //catch(Standard_Failure)
//{ //{
// //THROW_SALOME_CORBA_EXCEPTION("Exception catched in IGESExport", SALOME::BAD_PARAM);
//} //}
return 0; return ok;
} }
} }