From b15520064b106d9cf62e444e90039fb0f86c42cd Mon Sep 17 00:00:00 2001 From: skv Date: Mon, 4 Apr 2016 16:41:31 +0300 Subject: [PATCH] New OCAF doc reading/writing for OCCT7.0.0 --- resources/GEOMDS_Resources | 14 +++++++++++--- resources/Plugin.in | 7 +++++++ src/GEOM/GEOM_Application.cxx | 3 +++ src/GEOM/GEOM_Engine.cxx | 13 ++++++++++++- src/GEOM_I/GEOM_Gen_i.cc | 25 +++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 4 deletions(-) mode change 100755 => 100644 src/GEOM_I/GEOM_Gen_i.cc diff --git a/resources/GEOMDS_Resources b/resources/GEOMDS_Resources index 06f018f22..deb6655f9 100644 --- a/resources/GEOMDS_Resources +++ b/resources/GEOMDS_Resources @@ -1,5 +1,7 @@ -formatlist:SALOME_GEOM - +formatlist:SALOME_GEOM|BinOcaf +! +! SALOME_GEOM format +! SALOME_GEOM.Description: GEOM Document Version 1.0 SALOME_GEOM.FileExtension: sgd SALOME_GEOM.StoragePlugin: ad696000-5b34-11d1-b5ba-00a0c9064368 @@ -7,4 +9,10 @@ SALOME_GEOM.RetrievalPlugin: ad696001-5b34-11d1-b5ba-00a0c9064368 SALOME_GEOMSchema: ad696002-5b34-11d1-b5ba-00a0c9064368 SALOME_GEOM.AttributeStoragePlugin: 47b0b826-d931-11d1-b5da-00a0c9064368 SALOME_GEOM.AttributeRetrievalPlugin: 47b0b827-d931-11d1-b5da-00a0c9064368 - +! +! BinOcaf format +! +BinOcaf.Description: Bin Ocaf Document Version 1.0 +BinOcaf.FileExtension: cbf +BinOcaf.StoragePlugin: 03a56835-8269-11d5-aab2-0050044b1af1 +BinOcaf.RetrievalPlugin: 03a56836-8269-11d5-aab2-0050044b1af1 diff --git a/resources/Plugin.in b/resources/Plugin.in index 771dbabd3..2d5485bf9 100644 --- a/resources/Plugin.in +++ b/resources/Plugin.in @@ -5,4 +5,11 @@ a148e300-5740-11d1-a904-080036aaa103.Location: FWOSPlugin ! ! standard attribute drivers plugin ! +ad696000-5b34-11d1-b5ba-00a0c9064368.Location: @CAS_STDPLUGIN@ ad696001-5b34-11d1-b5ba-00a0c9064368.Location: @CAS_STDPLUGIN@ +ad696002-5b34-11d1-b5ba-00a0c9064368.Location: @CAS_STDPLUGIN@ +! +! BinOcaf Document Plugin +! +03a56835-8269-11d5-aab2-0050044b1af1.Location: @CAS_BINPLUGIN@ +03a56836-8269-11d5-aab2-0050044b1af1.Location: @CAS_BINPLUGIN@ diff --git a/src/GEOM/GEOM_Application.cxx b/src/GEOM/GEOM_Application.cxx index 673977810..a3c84dc44 100644 --- a/src/GEOM/GEOM_Application.cxx +++ b/src/GEOM/GEOM_Application.cxx @@ -50,6 +50,9 @@ GEOM_Application::~GEOM_Application() void GEOM_Application::Formats(TColStd_SequenceOfExtendedString& Formats) { Formats.Append(TCollection_ExtendedString ("SALOME_GEOM")); +#if OCC_VERSION_MAJOR > 6 + Formats.Append(TCollection_ExtendedString ("BinOcaf")); +#endif } diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx index d89a590d7..c56069990 100644 --- a/src/GEOM/GEOM_Engine.cxx +++ b/src/GEOM/GEOM_Engine.cxx @@ -264,7 +264,11 @@ Handle(TDocStd_Document) GEOM_Engine::GetDocument(int theDocID, bool force) aDoc = Handle(TDocStd_Document)::DownCast(_mapIDDocument(theDocID)); } else if (force) { +#if OCC_VERSION_MAJOR > 6 + _OCAFApp->NewDocument("BinOcaf", aDoc); +#else _OCAFApp->NewDocument("SALOME_GEOM", aDoc); +#endif aDoc->SetUndoLimit(_UndoLimit); _mapIDDocument.Bind(theDocID, aDoc); TDataStd_Integer::Set(aDoc->Main(), theDocID); @@ -563,6 +567,13 @@ bool GEOM_Engine::Load(int theDocID, const char* theFileName) return false; } +#if OCC_VERSION_MAJOR > 6 + // Replace old document format by the new one. + if (aDoc->StorageFormat().IsEqual("SALOME_GEOM")) { + aDoc->ChangeStorageFormat("BinOcaf"); + } +#endif + aDoc->SetUndoLimit(_UndoLimit); if(_mapIDDocument.IsBound(theDocID)) _mapIDDocument.UnBind(theDocID); @@ -1877,7 +1888,7 @@ TCollection_AsciiString GetPublishCommands if (aRefIt != theMapRefs.end()) { // Recursively publish all references. std::list< int >::const_iterator aRefTagIt = aRefIt->second.begin(); - + for(; aRefTagIt != aRefIt->second.end(); ++aRefTagIt) { const TCollection_AsciiString aRefCmd = GetPublishCommands (*aRefTagIt, theEntryToCmdMap, theMapRefs, thePublished); diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc old mode 100755 new mode 100644 index 32bc31041..b9e49d60f --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -600,7 +600,11 @@ SALOMEDS::TMPFile* GEOM_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent, if (isMultiFile) aNameWithExt = TCollection_AsciiString((char*)(SALOMEDS_Tool::GetNameFromPath (theComponent->GetStudy()->URL())).c_str()); +#if OCC_VERSION_MAJOR > 6 + aNameWithExt += TCollection_AsciiString("_GEOM.cbf"); +#else aNameWithExt += TCollection_AsciiString("_GEOM.sgd"); +#endif aSeq[0] = CORBA::string_dup(aNameWithExt.ToCString()); // Build a full file name of temporary file TCollection_AsciiString aFullName = TCollection_AsciiString((char*)aTmpDir.c_str()) + aNameWithExt; @@ -662,11 +666,32 @@ CORBA::Boolean GEOM_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent, // Prepare a file name to open TCollection_AsciiString aNameWithExt(""); SALOMEDS::Study_var study = theComponent->GetStudy(); + +#if OCC_VERSION_MAJOR > 6 + // Get the file name. + int i; + int aLength = aSeq->length(); + const char *aGeomSgd = "_GEOM.sgd"; + const char *aGeomcbf = "_GEOM.cbf"; + + for(i = 0; i < aLength; i++) { + std::string aName(aSeq[i]); + + if (aName.rfind(aGeomSgd) != std::string::npos || + aName.rfind(aGeomcbf) != std::string::npos) { + aNameWithExt = aName.c_str(); + break; + } + } +#else if (isMultiFile) { CORBA::String_var url = study->URL(); aNameWithExt = (char*)SALOMEDS_Tool::GetNameFromPath(url.in()).c_str(); } + aNameWithExt += "_GEOM.sgd"; +#endif + TCollection_AsciiString aFullName = (TCollection_AsciiString((char*)aTmpDir.c_str()) + aNameWithExt); // Open document -- 2.39.2