X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_AttributeTables.cpp;h=5bd66451571119d87a2f32e2e44eb7a953d6e560;hb=46c0759fa291dad10b713cf02b341d6e9e60c1a4;hp=923caa3d7074eadc4a499d36675fea52c9192805;hpb=2895c0fa0d69afc25ef86a300ef00d850a3df832;p=modules%2Fshaper.git diff --git a/src/Model/Model_AttributeTables.cpp b/src/Model/Model_AttributeTables.cpp index 923caa3d7..5bd664515 100644 --- a/src/Model/Model_AttributeTables.cpp +++ b/src/Model/Model_AttributeTables.cpp @@ -1,8 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: Model_AttributeTables.cpp -// Created: 14 Nov 2016 -// Author: Mikhail Ponikarov +// Copyright (C) 2014-2020 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 "Model_AttributeTables.h" @@ -60,14 +73,13 @@ void Model_AttributeTables::setSize(const int theRows, const int theColumns, con Handle(TColStd_HArray1OfReal) anOldDouble, aNewDouble = (myType == ModelAPI_AttributeTables::DOUBLE) ? new TColStd_HArray1OfReal(0, aNewSize - 1) : Handle(TColStd_HArray1OfReal)(); - Handle(TColStd_HArray1OfByte) anOldBool, aNewBool = - (myType == ModelAPI_AttributeTables::BOOLEAN) ? - new TColStd_HArray1OfByte(0, aNewSize - 1) : Handle(TColStd_HArray1OfByte)(); + bool* anOldBool = 0; // an not work with internal arrays because of different indexing + Handle(TDataStd_BooleanArray) aBoolArray; // an existing array Handle(TColStd_HArray1OfInteger) anOldInt, aNewInt = - (myType == ModelAPI_AttributeTables::INTEGER) ? + (myType == ModelAPI_AttributeTables::INTEGER) ? new TColStd_HArray1OfInteger(0, aNewSize - 1) : Handle(TColStd_HArray1OfInteger)(); Handle(TColStd_HArray1OfExtendedString) anOldStr, aNewStr = - (myType == ModelAPI_AttributeTables::STRING) ? + (myType == ModelAPI_AttributeTables::STRING) ? new TColStd_HArray1OfExtendedString(0, aNewSize - 1) : Handle(TColStd_HArray1OfExtendedString)(); if (aSize != 0) { // copy the previous values into new positions, otherwise default values @@ -77,9 +89,14 @@ void Model_AttributeTables::setSize(const int theRows, const int theColumns, con case ModelAPI_AttributeTables::DOUBLE: anOldDouble = Handle(TDataStd_RealArray)::DownCast(anArray)->Array(); break; - case ModelAPI_AttributeTables::BOOLEAN: - anOldBool = Handle(TDataStd_BooleanArray)::DownCast(anArray)->InternalArray(); + case ModelAPI_AttributeTables::BOOLEAN: { + anOldBool = new bool[aSize]; + aBoolArray = Handle(TDataStd_BooleanArray)::DownCast(anArray); + for(int a = 0; a < aSize; a++) + anOldBool[a] = aBoolArray->Value(a); + aBoolArray->Init(0, aNewSize - 1); break; + } case ModelAPI_AttributeTables::INTEGER: anOldInt = Handle(TDataStd_IntegerArray)::DownCast(anArray)->Array(); break; @@ -87,11 +104,14 @@ void Model_AttributeTables::setSize(const int theRows, const int theColumns, con anOldStr = Handle(TDataStd_ExtStringArray)::DownCast(anArray)->Array(); break; } + } else if (myType == ModelAPI_AttributeTables::BOOLEAN) { + aBoolArray = TDataStd_BooleanArray::Set(myLab, 0, aNewSize - 1); } for(int aTable = 0; aTable < theTables; aTable++) { for(int aColumn = 0; aColumn < theColumns; aColumn++) { for(int aRow = 0; aRow < theRows; aRow++) { - int anOldIndex, anIndex = aTable * theRows * theColumns + aRow * theColumns + aColumn; + int anOldIndex = 0; + int anIndex = aTable * theRows * theColumns + aRow * theColumns + aColumn; bool aRestore = aTable < myTables && aColumn < myCols && aRow < myRows; if (aRestore) anOldIndex = aTable * myRows * myCols + aRow * myCols + aColumn; @@ -101,7 +121,7 @@ void Model_AttributeTables::setSize(const int theRows, const int theColumns, con break; } case ModelAPI_AttributeTables::BOOLEAN: { - aNewBool->SetValue(anIndex, aRestore ? anOldBool->Value(anOldIndex) : Standard_False); + aBoolArray->SetValue(anIndex, aRestore ? anOldBool[anOldIndex] : Standard_False); break; } case ModelAPI_AttributeTables::INTEGER: { @@ -121,8 +141,7 @@ void Model_AttributeTables::setSize(const int theRows, const int theColumns, con case ModelAPI_AttributeTables::DOUBLE: TDataStd_RealArray::Set(myLab, 0, aNewSize - 1)->ChangeArray(aNewDouble); break; - case ModelAPI_AttributeTables::BOOLEAN: - TDataStd_BooleanArray::Set(myLab, 0, aNewSize - 1)->SetInternalArray(aNewBool); + case ModelAPI_AttributeTables::BOOLEAN: // nothing to do: array was set in "else" of restore break; case ModelAPI_AttributeTables::INTEGER: TDataStd_IntegerArray::Set(myLab, 0, aNewSize - 1)->ChangeArray(aNewInt); @@ -151,11 +170,11 @@ void Model_AttributeTables::setType(ModelAPI_AttributeTables::ValueType theType) // remove the old attr int aSize = myRows * myCols * myTables; if (aSize != 0) { - myLab.ForgetAttribute(MY_ARRAY_ID(theType)); + myLab.ForgetAttribute(MY_ARRAY_ID(myType)); myType = theType; int aTables = myTables; - myTables = 0; // to let setSize know that there is no old array - setSize(myRows, myCols, myTables); + myTables = 0; // to let setSize know that there is no old array + setSize(myRows, myCols, aTables); } else { myType = theType; owner()->data()->sendAttributeUpdated(this); @@ -225,6 +244,26 @@ ModelAPI_AttributeTables::Value Model_AttributeTables::value( return aResult; } +std::string Model_AttributeTables::valueStr( + const int theRow, const int theColumn, const int theTable) +{ + std::ostringstream aStr; + switch(myType) { + case ModelAPI_AttributeTables::DOUBLE: + aStr<