X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelHighAPI%2FModelHighAPI_Tools.cpp;h=d87fcae8ca7beeeb7a1e56f8dabd6bd478f4153d;hb=b1892f175d345f15c4b13b8e62c7d326bb9b4aab;hp=f3a28048810519d2b992eae3202396a92350fba1;hpb=08a991619fbd4f803d52e698dd48f0f7f46d118e;p=modules%2Fshaper.git diff --git a/src/ModelHighAPI/ModelHighAPI_Tools.cpp b/src/ModelHighAPI/ModelHighAPI_Tools.cpp index f3a280488..d87fcae8c 100644 --- a/src/ModelHighAPI/ModelHighAPI_Tools.cpp +++ b/src/ModelHighAPI/ModelHighAPI_Tools.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2024 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -29,6 +29,8 @@ #include #include //-------------------------------------------------------------------------------------- +#include +//-------------------------------------------------------------------------------------- #include //-------------------------------------------------------------------------------------- #include @@ -168,8 +170,18 @@ void fillAttribute(const std::shared_ptr & theValue, void fillAttribute(const std::list > & theValue, const std::shared_ptr & theAttribute) { - theAttribute->clear(); - for (auto it = theValue.begin(); it != theValue.end(); ++it) + int aSize = theAttribute->size(); + // keep objects at the beginning of the list if they the same + auto it = theValue.begin(); + for (int anIndex = 0; it != theValue.end() && anIndex < aSize; ++it, ++anIndex) + if (theAttribute->object(anIndex) != *it) { + // remove the tail of the list + while (++anIndex <= aSize) + theAttribute->removeLast(); + break; + } + // append the rest of elements + for (; it != theValue.end(); ++it) theAttribute->append(*it); } @@ -214,6 +226,13 @@ void fillAttribute(const std::string & theValue, theAttribute->setValue(theValue); } +//-------------------------------------------------------------------------------------- +void fillAttribute(const std::wstring & theValue, + const std::shared_ptr & theAttribute) +{ + theAttribute->setValue(theValue); +} + //-------------------------------------------------------------------------------------- void fillAttribute(const char * theValue, const std::shared_ptr & theAttribute) @@ -279,8 +298,8 @@ GeomAPI_Shape::ShapeType shapeTypeByStr(std::string theShapeTypeStr) { GeomAPI_Shape::ShapeType aShapeType = GeomAPI_Shape::SHAPE; - std::transform(theShapeTypeStr.begin(), theShapeTypeStr.end(), - theShapeTypeStr.begin(), ::tolower); + std::transform(theShapeTypeStr.begin(), theShapeTypeStr.end(), theShapeTypeStr.begin(), + [](char c) { return static_cast(::tolower(c)); }); if(theShapeTypeStr == "compound") { aShapeType = GeomAPI_Shape::COMPOUND; @@ -349,7 +368,7 @@ GeomAPI_Shape::ShapeType getShapeType(const ModelHighAPI_Selection& theSelection case ModelHighAPI_Selection::VT_ResultSubShapePair: { ResultSubShapePair aPair = theSelection.resultSubShapePair(); GeomShapePtr aShape = aPair.second; - if(!aShape.get()) { + if(!aShape.get() && aPair.first.get()) { aShape = aPair.first->shape(); } if(!aShape.get()) { @@ -377,6 +396,8 @@ GeomAPI_Shape::ShapeType getShapeType(const ModelHighAPI_Selection& theSelection aShapeType = shapeTypeByStr(aType); break; } + default: + break; // do nothing [to avoid compilation warning] } return aShapeType; @@ -386,7 +407,8 @@ GeomAPI_Shape::ShapeType getShapeType(const ModelHighAPI_Selection& theSelection ModelAPI_AttributeTables::ValueType valueTypeByStr(const std::string& theValueTypeStr) { std::string aType = theValueTypeStr; - std::transform(aType.begin(), aType.end(), aType.begin(), ::tolower); + std::transform(aType.begin(), aType.end(), aType.begin(), + [](char c) { return static_cast(::tolower(c)); }); if (aType == "boolean") return ModelAPI_AttributeTables::BOOLEAN; else if (aType == "integer") @@ -421,7 +443,7 @@ std::string storeFeatures(const std::wstring& theDocName, DocumentPtr theDoc, } } // store the model features information: iterate all features - int anObjectsCount = 0; // stores the number of compared features for this document to compare + size_t anObjectsCount = 0; // stores the number of compared features for this document to compare std::set aProcessed; // processed features names (that are in the current document) // process all objects (features and folders) @@ -509,6 +531,8 @@ static bool dumpToPython(SessionPtr theSession, if (aDump.get()) { aDump->string("file_path")->setValue(theFilename); aDump->string("file_format")->setValue("py"); + std::string aTrek = GeomAlgoAPI_Tools::File_Tools::path(theFilename); + aDump->string("dump_dir")->setValue(aTrek); aDump->boolean("topological_naming")->setValue((theSelectionType & CHECK_NAMING) != 0); aDump->boolean("geometric_selection")->setValue((theSelectionType & CHECK_GEOMETRICAL) != 0); aDump->boolean("weak_naming")->setValue((theSelectionType & CHECK_WEAK) != 0); @@ -535,7 +559,7 @@ static bool checkDump(SessionPtr theSession, // execute the dumped PyGILState_STATE gstate = PyGILState_Ensure(); /* acquire python thread */ static char aReadMode[] = "r"; - FILE* PyFileObject = _Py_fopen(theFilename, aReadMode); + FILE* PyFileObject = fopen(theFilename, aReadMode); PyRun_SimpleFileEx(PyFileObject, theFilename, 1); PyGILState_Release(gstate); /* release python thread */ @@ -553,10 +577,15 @@ static bool checkDump(SessionPtr theSession, return true; } -bool checkPyDump(const std::string& theFilenameNaming, - const std::string& theFilenameGeo, - const std::string& theFilenameWeak, - const checkDumpType theCheckType) +bool checkPyDump( +#ifdef _DEBUG + const std::string&, const std::string&, const std::string&, +#else + const std::string& theFilenameNaming, + const std::string& theFilenameGeo, + const std::string& theFilenameWeak, +#endif + const checkDumpType theCheckType) { static const std::string anErrorByNaming("checkPythonDump by naming"); static const std::string anErrorByGeometry("checkPythonDump by geometry");