// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // 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. // // 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 // %ExportedHeaderCode #include #include %End %ModuleCode PyObject* convertToPythonAltitudeList( const HYDROData_Bathymetry::AltitudePoints& thePoints ); HYDROData_Bathymetry::AltitudePoints convertFromPythonAltitudeList( PyObject* thePythonList ); %End class HYDROData_Bathymetry : HYDROData_Object { %ConvertToSubClassCode if ( !Handle(HYDROData_Bathymetry)::DownCast( sipCpp ).IsNull() ) sipClass = sipClass_HYDROData_Bathymetry; else sipClass = NULL; %End %TypeHeaderCode #include %End %TypeCode PyObject* convertToPythonAltitudeList( const HYDROData_Bathymetry::AltitudePoints& thePoints ) { int aListSize = thePoints.size(); PyObject* aPythonList = NULL; if ( ( aPythonList = PyList_New( aListSize ) ) == NULL ) return NULL; for ( int i = 0; i < aListSize; ++i ) { const HYDROData_Bathymetry::AltitudePoint& aPoint = thePoints.at( i ); PyObject* aTypleObj = Py_BuildValue( "(ddd)", aPoint.X(), aPoint.Y(), aPoint.Z() ); PyList_SET_ITEM( aPythonList, i, aTypleObj ); } return aPythonList; } HYDROData_Bathymetry::AltitudePoints convertFromPythonAltitudeList( PyObject* thePythonList ) { HYDROData_Bathymetry::AltitudePoints aPoints; if ( thePythonList == NULL ) return aPoints; for ( int i = 0, n = PyList_GET_SIZE( thePythonList ); i < n; ++i ) { PyObject* aTypleObj = PyList_GET_ITEM( thePythonList, i ); double anArr[ 3 ]; if ( !PyArg_ParseTuple( aTypleObj, "ddd", &anArr[ 0 ], &anArr[ 1 ], &anArr[ 2 ] ) ) continue; HYDROData_Bathymetry::AltitudePoint aPoint; aPoint.SetX( anArr[ 0 ] ); aPoint.SetY( anArr[ 1 ] ); aPoint.SetZ( anArr[ 2 ] ); aPoints.append( aPoint ); } return aPoints; } %End public: const ObjectKind GetKind() const; public: // Public methods to work with Bathymetry altitudes. /** * Returns altitude points list. * \return points list */ static double GetInvalidAltitude(); /** * Replace current altitude points by new one. * \param thePoints the altitude points list */ virtual void SetAltitudePoints( SIP_PYLIST ) [void (const HYDROData_Bathymetry::AltitudePoints&)] ; %MethodCode // The C++ API takes a list of gp_XYZ objects, // but we pass a list of python tuples. HYDROData_Bathymetry::AltitudePoints aPoints = convertFromPythonAltitudeList( a0 ); Py_BEGIN_ALLOW_THREADS sipSelfWasArg ? sipCpp->HYDROData_Bathymetry::SetAltitudePoints( aPoints ) : sipCpp->SetAltitudePoints( aPoints ); Py_END_ALLOW_THREADS %End %VirtualCatcherCode PyObject* aPythonList = convertToPythonAltitudeList( a0 ); if ( aPythonList != NULL ) { sipCallMethod( &sipIsErr, sipMethod, "O", aPythonList ); Py_DECREF( aPythonList ); } %End /** * Returns altitude points list. * \return points list */ SIP_PYLIST GetAltitudePoints() const [HYDROData_Bathymetry::AltitudePoints ()] ; %MethodCode // The C++ API returns a list of gp_XYZ objects, // we convert it to list of python tuples. HYDROData_Bathymetry::AltitudePoints aPoints; Py_BEGIN_ALLOW_THREADS aPoints = sipSelfWasArg ? sipCpp->HYDROData_Bathymetry::GetAltitudePoints() : sipCpp->GetAltitudePoints(); Py_END_ALLOW_THREADS sipRes = convertToPythonAltitudeList( aPoints ); %End /** * Remove all altitude points. */ void RemoveAltitudePoints(); /** * Returns altitude for given point. * \param thePoint the point to examine * \return altitude value */ double GetAltitudeForPoint( const QPointF& thePoint ) const; public: // Public methods to work with files. /** * Imports Bathymetry data from file. The supported file types: * - xyz * \param theFileName the path to file * \return \c true if file has been successfully read */ bool ImportFromFile( const QString& theFileName ); protected: /** * Creates new object in the internal data structure. Use higher level objects * to create objects with real content. */ HYDROData_Bathymetry(); /** * Destructs properties of the object and object itself, removes it from the document. */ ~HYDROData_Bathymetry(); };