Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-18 09:22:09

0001 // Created on: 1999-06-16
0002 // Created by: Sergey RUIN
0003 // Copyright (c) 1999 Matra Datavision
0004 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0005 //
0006 // This file is part of Open CASCADE Technology software library.
0007 //
0008 // This library is free software; you can redistribute it and/or modify it under
0009 // the terms of the GNU Lesser General Public License version 2.1 as published
0010 // by the Free Software Foundation, with special exception defined in the file
0011 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0012 // distribution for complete text of the license and disclaimer of any warranty.
0013 //
0014 // Alternatively, this file may be used under the terms of Open CASCADE
0015 // commercial license or contractual agreement.
0016 
0017 #ifndef _TDataStd_RealArray_HeaderFile
0018 #define _TDataStd_RealArray_HeaderFile
0019 
0020 #include <Standard.hxx>
0021 
0022 #include <NCollection_Array1.hxx>
0023 #include <NCollection_HArray1.hxx>
0024 #include <TDF_Attribute.hxx>
0025 #include <Standard_Integer.hxx>
0026 #include <Standard_Real.hxx>
0027 #include <Standard_OStream.hxx>
0028 #include <Standard_GUID.hxx>
0029 
0030 class TDF_Label;
0031 class TDF_RelocationTable;
0032 class TDF_DeltaOnModification;
0033 
0034 //! A framework for an attribute composed of a real number array.
0035 class TDataStd_RealArray : public TDF_Attribute
0036 {
0037   friend class TDataStd_DeltaOnModificationOfRealArray;
0038   DEFINE_STANDARD_RTTIEXT(TDataStd_RealArray, TDF_Attribute)
0039 public:
0040   //! class methods
0041   //! =============
0042   //! Returns the GUID for arrays of reals.
0043   Standard_EXPORT static const Standard_GUID& GetID();
0044 
0045   //! Finds or creates on the <label> a real array attribute with
0046   //! the specified <lower> and <upper> boundaries.
0047   //! If <isDelta> == False, DefaultDeltaOnModification is used.
0048   //! If <isDelta> == True, DeltaOnModification of the current attribute is used.
0049   //! If attribute is already set, input parameter <isDelta> is refused and the found
0050   //! attribute returned.
0051   Standard_EXPORT static occ::handle<TDataStd_RealArray> Set(const TDF_Label& label,
0052                                                              const int        lower,
0053                                                              const int        upper,
0054                                                              const bool       isDelta = false);
0055 
0056   //! Finds, or creates, an RealArray attribute with explicit user defined <guid>.
0057   //! The RealArray attribute is returned.
0058   Standard_EXPORT static occ::handle<TDataStd_RealArray> Set(const TDF_Label&     label,
0059                                                              const Standard_GUID& theGuid,
0060                                                              const int            lower,
0061                                                              const int            upper,
0062                                                              const bool           isDelta = false);
0063 
0064   //! Initialize the inner array with bounds from <lower> to <upper>
0065   Standard_EXPORT void Init(const int lower, const int upper);
0066 
0067   //! Sets the explicit GUID (user defined) for the attribute.
0068   Standard_EXPORT void SetID(const Standard_GUID& theGuid) override;
0069 
0070   //! Sets default GUID for the attribute.
0071   Standard_EXPORT void SetID() override;
0072 
0073   //! Sets the <Index>th element of the array to <Value>
0074   //! OutOfRange exception is raised if <Index> doesn't respect Lower and Upper bounds of the
0075   //! internal array.
0076   Standard_EXPORT void SetValue(const int Index, const double Value);
0077 
0078   //! Return the value of the <Index>th element of the array
0079   Standard_EXPORT double Value(const int Index) const;
0080 
0081   double operator()(const int Index) const { return Value(Index); }
0082 
0083   //! Returns the lower boundary of the array.
0084   Standard_EXPORT int Lower() const;
0085 
0086   //! Returns the upper boundary of the array.
0087   Standard_EXPORT int Upper() const;
0088 
0089   //! Returns the number of elements of the array of reals
0090   //! in terms of the number of elements it contains.
0091   Standard_EXPORT int Length() const;
0092 
0093   //! Sets the inner array <myValue> of the RealArray attribute
0094   //! to <newArray>. If value of <newArray> differs from <myValue>,
0095   //! Backup performed and myValue refers to new instance of HArray1OfReal
0096   //! that holds <newArray> values
0097   //! If <isCheckItems> equal True each item of <newArray> will be checked with each
0098   //! item of <myValue> for coincidence (to avoid backup).
0099   Standard_EXPORT void ChangeArray(const occ::handle<NCollection_HArray1<double>>& newArray,
0100                                    const bool isCheckItems = true);
0101 
0102   //! Returns the handle of this array of reals.
0103   const occ::handle<NCollection_HArray1<double>>& Array() const { return myValue; }
0104 
0105   bool GetDelta() const { return myIsDelta; }
0106 
0107   //! for internal use only!
0108   void SetDelta(const bool isDelta) { myIsDelta = isDelta; }
0109 
0110   Standard_EXPORT TDataStd_RealArray();
0111 
0112   Standard_EXPORT const Standard_GUID& ID() const override;
0113 
0114   Standard_EXPORT void Restore(const occ::handle<TDF_Attribute>& With) override;
0115 
0116   Standard_EXPORT occ::handle<TDF_Attribute> NewEmpty() const override;
0117 
0118   //! Note. Uses inside ChangeArray() method
0119   Standard_EXPORT void Paste(const occ::handle<TDF_Attribute>&       Into,
0120                              const occ::handle<TDF_RelocationTable>& RT) const override;
0121 
0122   Standard_EXPORT Standard_OStream& Dump(Standard_OStream& anOS) const override;
0123 
0124   //! Makes a DeltaOnModification between <me> and
0125   //! <anOldAttribute>.
0126   Standard_EXPORT occ::handle<TDF_DeltaOnModification> DeltaOnModification(
0127     const occ::handle<TDF_Attribute>& anOldAttribute) const override;
0128 
0129   //! Dumps the content of me into the stream
0130   Standard_EXPORT void DumpJson(Standard_OStream& theOStream, int theDepth = -1) const override;
0131 
0132 private:
0133   void RemoveArray() { myValue.Nullify(); }
0134 
0135 private:
0136   occ::handle<NCollection_HArray1<double>> myValue;
0137   bool                                     myIsDelta;
0138   Standard_GUID                            myID;
0139 };
0140 
0141 #endif // _TDataStd_RealArray_HeaderFile