mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-26 17:30:35 +05:00
Merge from V7_siman 11/10/2013
This commit is contained in:
parent
bdbb7196fa
commit
959c2db5b3
@ -977,6 +977,17 @@ std::list<int> GEOM_Engine::getAllTextures(int theDocID)
|
|||||||
return id_list;
|
return id_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GEOM_Engine::DocumentModified(const int theDocId, const bool isModified)
|
||||||
|
{
|
||||||
|
if (isModified) _mapModifiedDocs.Add(theDocId);
|
||||||
|
else _mapModifiedDocs.Remove(theDocId);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GEOM_Engine::DocumentModified(const int theDocId)
|
||||||
|
{
|
||||||
|
return _mapModifiedDocs.Contains(theDocId);
|
||||||
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
// Internal functions
|
// Internal functions
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include <TDocStd_Document.hxx>
|
#include <TDocStd_Document.hxx>
|
||||||
#include <TColStd_HArray1OfInteger.hxx>
|
#include <TColStd_HArray1OfInteger.hxx>
|
||||||
#include <TColStd_HSequenceOfAsciiString.hxx>
|
#include <TColStd_HSequenceOfAsciiString.hxx>
|
||||||
|
#include <TColStd_MapOfInteger.hxx>
|
||||||
#include <TDF_Label.hxx>
|
#include <TDF_Label.hxx>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
@ -179,6 +180,10 @@ class GEOM_Engine
|
|||||||
const TCollection_AsciiString& anEntry,
|
const TCollection_AsciiString& anEntry,
|
||||||
Resource_DataMapOfAsciiStringAsciiString& aNameToEntry);
|
Resource_DataMapOfAsciiStringAsciiString& aNameToEntry);
|
||||||
|
|
||||||
|
void DocumentModified(const int theDocId, const bool isModified);
|
||||||
|
|
||||||
|
bool DocumentModified(const int theDocId);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Standard_EXPORT static void SetEngine(GEOM_Engine* theEngine);
|
Standard_EXPORT static void SetEngine(GEOM_Engine* theEngine);
|
||||||
|
|
||||||
@ -186,6 +191,8 @@ class GEOM_Engine
|
|||||||
|
|
||||||
Handle(GEOM_Application) _OCAFApp;
|
Handle(GEOM_Application) _OCAFApp;
|
||||||
TColStd_DataMapOfIntegerTransient _mapIDDocument;
|
TColStd_DataMapOfIntegerTransient _mapIDDocument;
|
||||||
|
TColStd_MapOfInteger _mapModifiedDocs; // keeps the identifiers of the modified document ids
|
||||||
|
|
||||||
int _UndoLimit;
|
int _UndoLimit;
|
||||||
GEOM_DataMapOfAsciiStringTransient _objects;
|
GEOM_DataMapOfAsciiStringTransient _objects;
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ void GEOM_IOperations::FinishOperation()
|
|||||||
Handle(TDocStd_Document) aDoc = _engine->GetDocument(_docID);
|
Handle(TDocStd_Document) aDoc = _engine->GetDocument(_docID);
|
||||||
if(aDoc->GetUndoLimit() > 0)
|
if(aDoc->GetUndoLimit() > 0)
|
||||||
aDoc->CommitCommand();
|
aDoc->CommitCommand();
|
||||||
|
_engine->DocumentModified(_docID, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
@ -60,6 +60,8 @@
|
|||||||
|
|
||||||
#include <SALOMEDS_Tool.hxx>
|
#include <SALOMEDS_Tool.hxx>
|
||||||
#include <SALOMEDS_wrap.hxx>
|
#include <SALOMEDS_wrap.hxx>
|
||||||
|
#include <SALOME_DataContainer_i.hxx>
|
||||||
|
#include <Basics_DirUtils.hxx>
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -2879,6 +2881,131 @@ void GEOM_Gen_i::Move( const GEOM::object_list& what,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : importData
|
||||||
|
// purpose : imports geometrical data file into the GEOM internal data structure
|
||||||
|
//=================================================================================
|
||||||
|
Engines::ListOfIdentifiers* GEOM_Gen_i::importData(
|
||||||
|
CORBA::Long studyId, Engines::DataContainer_ptr data, const Engines::ListOfOptions& options)
|
||||||
|
{
|
||||||
|
CORBA::Object_var aSMObject = name_service->Resolve( "/myStudyManager" );
|
||||||
|
SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow( aSMObject );
|
||||||
|
SALOMEDS::Study_var aStudy = aStudyManager->GetStudyByID( studyId );
|
||||||
|
|
||||||
|
Engines::ListOfIdentifiers_var aResult = new Engines::ListOfIdentifiers;
|
||||||
|
GEOM::GEOM_IInsertOperations_var aInsOp = GetIInsertOperations(aStudy->StudyId());
|
||||||
|
if (aInsOp->_is_nil()) {
|
||||||
|
MESSAGE("No insert operations!");
|
||||||
|
return aResult._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a temporary directory to store a file
|
||||||
|
std::string aTmpDir = SALOMEDS_Tool::GetTmpDir();
|
||||||
|
std::string aFileName("file");
|
||||||
|
if (aFileName.rfind("/") != std::string::npos) { // remove folders from the name
|
||||||
|
aFileName = aFileName.substr(aFileName.rfind("/") + 1);
|
||||||
|
}
|
||||||
|
std::string anExtension(data->extension());
|
||||||
|
aFileName += "." + anExtension;
|
||||||
|
// convert extension to upper case
|
||||||
|
std::transform(anExtension.begin(), anExtension.end(), anExtension.begin(), ::toupper);
|
||||||
|
|
||||||
|
std::string aFullPath = aTmpDir + aFileName;
|
||||||
|
|
||||||
|
Engines::TMPFile* aFileStream = data->get();
|
||||||
|
const char *aBuffer = (const char*)aFileStream->NP_data();
|
||||||
|
#ifdef WIN32
|
||||||
|
std::ofstream aFile(aFullPath.c_str(), std::ios::binary);
|
||||||
|
#else
|
||||||
|
std::ofstream aFile(aFullPath.c_str());
|
||||||
|
#endif
|
||||||
|
aFile.write(aBuffer, aFileStream->length());
|
||||||
|
aFile.close();
|
||||||
|
|
||||||
|
GEOM::GEOM_Object_var anObj = aInsOp->ImportFile(aFullPath.c_str(), anExtension.c_str());
|
||||||
|
if ( !anObj->_is_nil() && aInsOp->IsDone() ) {
|
||||||
|
SALOMEDS::SObject_var aSO = PublishInStudy(aStudy, SALOMEDS::SObject::_nil(), anObj, data->name());
|
||||||
|
aResult->length(1);
|
||||||
|
aResult[0] = aSO->GetID(); // unioque identifer of the object in GEOM is entry of SObject
|
||||||
|
} else {
|
||||||
|
if (anObj->_is_nil())
|
||||||
|
MESSAGE("Result of the import operation is incorrect for file "<<aFullPath.c_str());
|
||||||
|
if (!aInsOp->IsDone())
|
||||||
|
MESSAGE("Import operation is not done for file "<<aFullPath.c_str());
|
||||||
|
return aResult._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove temporary file and directory
|
||||||
|
SALOMEDS::ListOfFileNames aTmpFiles;
|
||||||
|
aTmpFiles.length(1);
|
||||||
|
aTmpFiles[0] = aFileName.c_str();
|
||||||
|
SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir, aTmpFiles, true);
|
||||||
|
|
||||||
|
_impl->DocumentModified(studyId, false);
|
||||||
|
return aResult._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : getModifiedData
|
||||||
|
// purpose : exports all geometry of this GEOM module into one BRep file
|
||||||
|
//=================================================================================
|
||||||
|
Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId)
|
||||||
|
{
|
||||||
|
Engines::ListOfData_var aResult = new Engines::ListOfData;
|
||||||
|
|
||||||
|
if (!_impl->DocumentModified(studyId)) {
|
||||||
|
MESSAGE("Document is not modified")
|
||||||
|
return aResult._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
CORBA::Object_var aSMObject = name_service->Resolve("/myStudyManager");
|
||||||
|
SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow( aSMObject );
|
||||||
|
SALOMEDS::Study_var aStudy = aStudyManager->GetStudyByID( studyId );
|
||||||
|
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
|
||||||
|
TopoDS_Compound aResultComp;
|
||||||
|
BRep_Builder aBB;
|
||||||
|
aBB.MakeCompound(aResultComp);
|
||||||
|
int aNumInComp = 0; // number of shapes in resulting compound
|
||||||
|
for(; anIter->More(); anIter->Next()) {
|
||||||
|
SALOMEDS::SObject_var aSO = anIter->Value();
|
||||||
|
SALOMEDS::SObject_var aRefSO;
|
||||||
|
// export only not referenced objects, or referenced outside of GEOM
|
||||||
|
if (!aSO->ReferencedObject(aRefSO) || aRefSO->GetFatherComponent()->GetID() != aComponent->GetID()) {
|
||||||
|
CORBA::Object_var anObj = aSO->GetObject();
|
||||||
|
if (!CORBA::is_nil(anObj)) {
|
||||||
|
GEOM::GEOM_Object_var aCORBAMainShape = GEOM::GEOM_Object::_narrow(anObj);
|
||||||
|
if(!aCORBAMainShape->_is_nil()) {
|
||||||
|
CORBA::String_var entry = aCORBAMainShape->GetEntry();
|
||||||
|
Handle(GEOM_Object) aMainShape = Handle(GEOM_Object)::DownCast( _impl->GetObject(studyId, entry) );
|
||||||
|
if (!aMainShape.IsNull()) {
|
||||||
|
TopoDS_Shape aMainSh = aMainShape->GetValue();
|
||||||
|
if (!aMainSh.IsNull()) {
|
||||||
|
aBB.Add(aResultComp, aMainSh);
|
||||||
|
aNumInComp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (aNumInComp > 0) { // compund is correct, write it to the temporary file
|
||||||
|
std::string aFullPath = Kernel_Utils::GetTmpFileName() + ".brep";
|
||||||
|
BRepTools::Write(aResultComp, aFullPath.c_str());
|
||||||
|
MESSAGE("Write compound of "<<aNumInComp<<" shapes to "<<aFullPath.c_str());
|
||||||
|
aResult->length(1);
|
||||||
|
Engines::DataContainer_var aData = (new Engines_DataContainer_i(
|
||||||
|
aFullPath.c_str(), "", "", true))->_this();
|
||||||
|
aResult[0] = aData;
|
||||||
|
} else {
|
||||||
|
MESSAGE("No shapes to export");
|
||||||
|
}
|
||||||
|
|
||||||
|
return aResult._retn();
|
||||||
|
}
|
||||||
|
|
||||||
//=====================================================================================
|
//=====================================================================================
|
||||||
// EXPORTED METHODS
|
// EXPORTED METHODS
|
||||||
//=====================================================================================
|
//=====================================================================================
|
||||||
|
@ -309,6 +309,13 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi
|
|||||||
SALOMEDS::SObject_ptr where,
|
SALOMEDS::SObject_ptr where,
|
||||||
CORBA::Long row );
|
CORBA::Long row );
|
||||||
|
|
||||||
|
// SIMAN-related functions (check out/check in) : import data to study
|
||||||
|
virtual Engines::ListOfIdentifiers* importData(CORBA::Long studyId,
|
||||||
|
Engines::DataContainer_ptr data,
|
||||||
|
const Engines::ListOfOptions& options);
|
||||||
|
// SIMAN-related functions (check out/check in) : get modified data
|
||||||
|
virtual Engines::ListOfData* getModifiedData(CORBA::Long studyId);
|
||||||
|
|
||||||
//-----------------------------------------------------------------------//
|
//-----------------------------------------------------------------------//
|
||||||
// Internal methods //
|
// Internal methods //
|
||||||
//-----------------------------------------------------------------------//
|
//-----------------------------------------------------------------------//
|
||||||
|
@ -229,7 +229,11 @@ def _toListOfNames(_names, _size=-1):
|
|||||||
## @ingroup l1_geomBuilder_auxiliary
|
## @ingroup l1_geomBuilder_auxiliary
|
||||||
def RaiseIfFailed (Method_name, Operation):
|
def RaiseIfFailed (Method_name, Operation):
|
||||||
if Operation.IsDone() == 0 and Operation.GetErrorCode() != "NOT_FOUND_ANY":
|
if Operation.IsDone() == 0 and Operation.GetErrorCode() != "NOT_FOUND_ANY":
|
||||||
|
Operation.AbortOperation()
|
||||||
raise RuntimeError, Method_name + " : " + Operation.GetErrorCode()
|
raise RuntimeError, Method_name + " : " + Operation.GetErrorCode()
|
||||||
|
else:
|
||||||
|
Operation.FinishOperation()
|
||||||
|
pass
|
||||||
|
|
||||||
## Return list of variables value from salome notebook
|
## Return list of variables value from salome notebook
|
||||||
## @ingroup l1_geomBuilder_auxiliary
|
## @ingroup l1_geomBuilder_auxiliary
|
||||||
@ -4308,6 +4312,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
|
|||||||
New GEOM.GEOM_Object, containing the created compound.
|
New GEOM.GEOM_Object, containing the created compound.
|
||||||
"""
|
"""
|
||||||
# Example: see GEOM_TestAll.py
|
# Example: see GEOM_TestAll.py
|
||||||
|
self.ShapesOp.StartOperation()
|
||||||
anObj = self.ShapesOp.MakeCompound(theShapes)
|
anObj = self.ShapesOp.MakeCompound(theShapes)
|
||||||
RaiseIfFailed("MakeCompound", self.ShapesOp)
|
RaiseIfFailed("MakeCompound", self.ShapesOp)
|
||||||
self._autoPublish(anObj, theName, "compound")
|
self._autoPublish(anObj, theName, "compound")
|
||||||
|
Loading…
Reference in New Issue
Block a user