X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_AttributeTables.cpp;h=c0e79e4d0791ab5c7525ba2f8d57146b78ab63c7;hb=4635fa2d17f7d9cca2892169b7372ffa37cd2180;hp=e7a5685b75e9efda8cea43e144f77410fd7ac057;hpb=658bdf0960445584a6dce55376afc7c5bdddf60d;p=modules%2Fshaper.git diff --git a/src/Model/Model_AttributeTables.cpp b/src/Model/Model_AttributeTables.cpp index e7a5685b7..c0e79e4d0 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,9 +73,8 @@ 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) ? new TColStd_HArray1OfInteger(0, aNewSize - 1) : Handle(TColStd_HArray1OfInteger)(); @@ -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,6 +104,8 @@ 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++) { @@ -101,7 +120,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 +140,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);