mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4549 Add python method to get cell centers on a grid
Equivalent to GetCellCenters in Octave.
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "RiaGrpcCallbacks.h"
|
||||
|
||||
#include "RigCell.h"
|
||||
#include "RigEclipseCaseData.h"
|
||||
#include "RigMainGrid.h"
|
||||
|
||||
@@ -26,11 +27,86 @@
|
||||
|
||||
using namespace rips;
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Convert internal ResInsight representation of cells with negative depth to positive depth.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
static inline void convertVec3dToPositiveDepth( cvf::Vec3d* vec )
|
||||
{
|
||||
double& z = vec->z();
|
||||
z *= -1;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
grpc::Status
|
||||
RiaGrpcGridService::GetDimensions( grpc::ServerContext* context, const GridRequest* request, GridDimensions* reply )
|
||||
RiaCellCenterStateHandler::RiaCellCenterStateHandler()
|
||||
: m_request( nullptr )
|
||||
, m_eclipseCase( nullptr )
|
||||
, m_grid( nullptr )
|
||||
, m_currentCellIdx( 0u )
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
grpc::Status RiaCellCenterStateHandler::init( const rips::GridRequest* request )
|
||||
{
|
||||
CAF_ASSERT( request );
|
||||
m_request = request;
|
||||
|
||||
RimCase* rimCase = RiaGrpcServiceInterface::findCase( m_request->case_request().id() );
|
||||
m_eclipseCase = dynamic_cast<RimEclipseCase*>( rimCase );
|
||||
|
||||
if ( !m_eclipseCase )
|
||||
{
|
||||
return grpc::Status( grpc::NOT_FOUND, "Eclipse Case not found" );
|
||||
}
|
||||
|
||||
size_t gridIndex = (size_t)request->grid_index();
|
||||
if ( gridIndex >= m_eclipseCase->mainGrid()->gridCount() )
|
||||
{
|
||||
return grpc::Status( grpc::NOT_FOUND, "Grid not found" );
|
||||
}
|
||||
|
||||
m_grid = m_eclipseCase->mainGrid()->gridByIndex( gridIndex );
|
||||
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
grpc::Status RiaCellCenterStateHandler::assignReply( rips::CellCenters* reply )
|
||||
{
|
||||
const size_t packageSize = RiaGrpcServiceInterface::numberOfMessagesForByteCount( sizeof( rips::CellCenters ) );
|
||||
size_t packageIndex = 0u;
|
||||
reply->mutable_centers()->Reserve( (int)packageSize );
|
||||
for ( ; packageIndex < packageSize && m_currentCellIdx < m_grid->cellCount(); ++packageIndex )
|
||||
{
|
||||
cvf::Vec3d center = m_grid->cell( m_currentCellIdx ).center();
|
||||
|
||||
convertVec3dToPositiveDepth( ¢er );
|
||||
|
||||
Vec3d* cellCenter = reply->add_centers();
|
||||
cellCenter->set_x( center.x() );
|
||||
cellCenter->set_y( center.y() );
|
||||
cellCenter->set_z( center.z() );
|
||||
m_currentCellIdx++;
|
||||
}
|
||||
if ( packageIndex > 0u )
|
||||
{
|
||||
return Status::OK;
|
||||
}
|
||||
return Status( grpc::OUT_OF_RANGE, "We've reached the end. This is not an error but means transmission is finished" );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
grpc::Status RiaGrpcGridService::GetDimensions( grpc::ServerContext* context,
|
||||
const rips::GridRequest* request,
|
||||
rips::GridDimensions* reply )
|
||||
{
|
||||
RimCase* rimCase = findCase( request->case_request().id() );
|
||||
|
||||
@@ -55,6 +131,17 @@ grpc::Status
|
||||
return grpc::Status( grpc::NOT_FOUND, "Eclipse Case not found" );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
grpc::Status RiaGrpcGridService::GetCellCenters( grpc::ServerContext* context,
|
||||
const rips::GridRequest* request,
|
||||
rips::CellCenters* reply,
|
||||
RiaCellCenterStateHandler* stateHandler )
|
||||
{
|
||||
return stateHandler->assignReply( reply );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -62,9 +149,14 @@ std::vector<RiaGrpcCallbackInterface*> RiaGrpcGridService::createCallbacks()
|
||||
{
|
||||
typedef RiaGrpcGridService Self;
|
||||
|
||||
return {new RiaGrpcUnaryCallback<Self, GridRequest, GridDimensions>( this,
|
||||
&Self::GetDimensions,
|
||||
&Self::RequestGetDimensions )};
|
||||
return {
|
||||
|
||||
new RiaGrpcServerToClientStreamCallback<Self, GridRequest, CellCenters, RiaCellCenterStateHandler>( this,
|
||||
&Self::GetCellCenters,
|
||||
&Self::RequestGetCellCenters,
|
||||
new RiaCellCenterStateHandler ),
|
||||
|
||||
new RiaGrpcUnaryCallback<Self, GridRequest, GridDimensions>( this, &Self::GetDimensions, &Self::RequestGetDimensions )};
|
||||
}
|
||||
|
||||
static bool RiaGrpcGridService_init =
|
||||
|
||||
Reference in New Issue
Block a user