API: Add board origin setter/getter
See https://gitlab.com/kicad/code/kicad-python/-/issues/20
This commit is contained in:
@@ -82,6 +82,8 @@ API_HANDLER_PCB::API_HANDLER_PCB( PCB_EDIT_FRAME* aFrame ) :
|
||||
&API_HANDLER_PCB::handleGetTitleBlockInfo );
|
||||
registerHandler<ExpandTextVariables, ExpandTextVariablesResponse>(
|
||||
&API_HANDLER_PCB::handleExpandTextVariables );
|
||||
registerHandler<GetBoardOrigin, types::Vector2>( &API_HANDLER_PCB::handleGetBoardOrigin );
|
||||
registerHandler<SetBoardOrigin, Empty>( &API_HANDLER_PCB::handleSetBoardOrigin );
|
||||
|
||||
registerHandler<InteractiveMoveItems, Empty>( &API_HANDLER_PCB::handleInteractiveMoveItems );
|
||||
registerHandler<GetNets, NetsResponse>( &API_HANDLER_PCB::handleGetNets );
|
||||
@@ -869,6 +871,92 @@ HANDLER_RESULT<GraphicsDefaultsResponse> API_HANDLER_PCB::handleGetGraphicsDefau
|
||||
}
|
||||
|
||||
|
||||
HANDLER_RESULT<types::Vector2> API_HANDLER_PCB::handleGetBoardOrigin(
|
||||
const HANDLER_CONTEXT<GetBoardOrigin>& aCtx )
|
||||
{
|
||||
if( HANDLER_RESULT<bool> documentValidation = validateDocument( aCtx.Request.board() );
|
||||
!documentValidation )
|
||||
{
|
||||
return tl::unexpected( documentValidation.error() );
|
||||
}
|
||||
|
||||
VECTOR2I origin;
|
||||
const BOARD_DESIGN_SETTINGS& settings = frame()->GetBoard()->GetDesignSettings();
|
||||
|
||||
switch( aCtx.Request.type() )
|
||||
{
|
||||
case BOT_GRID:
|
||||
origin = settings.GetGridOrigin();
|
||||
break;
|
||||
|
||||
case BOT_DRILL:
|
||||
origin = settings.GetAuxOrigin();
|
||||
break;
|
||||
|
||||
default:
|
||||
case BOT_UNKNOWN:
|
||||
{
|
||||
ApiResponseStatus e;
|
||||
e.set_status( ApiStatusCode::AS_BAD_REQUEST );
|
||||
e.set_error_message( "Unexpected origin type" );
|
||||
return tl::unexpected( e );
|
||||
}
|
||||
}
|
||||
|
||||
types::Vector2 reply;
|
||||
PackVector2( reply, origin );
|
||||
return reply;
|
||||
}
|
||||
|
||||
HANDLER_RESULT<Empty> API_HANDLER_PCB::handleSetBoardOrigin(
|
||||
const HANDLER_CONTEXT<SetBoardOrigin>& aCtx )
|
||||
{
|
||||
if( std::optional<ApiResponseStatus> busy = checkForBusy() )
|
||||
return tl::unexpected( *busy );
|
||||
|
||||
if( HANDLER_RESULT<bool> documentValidation = validateDocument( aCtx.Request.board() );
|
||||
!documentValidation )
|
||||
{
|
||||
return tl::unexpected( documentValidation.error() );
|
||||
}
|
||||
|
||||
BOARD_DESIGN_SETTINGS& settings = frame()->GetBoard()->GetDesignSettings();
|
||||
VECTOR2I origin = UnpackVector2( aCtx.Request.origin() );
|
||||
|
||||
switch( aCtx.Request.type() )
|
||||
{
|
||||
case BOT_GRID:
|
||||
settings.SetGridOrigin( origin );
|
||||
frame()->Refresh();
|
||||
break;
|
||||
|
||||
case BOT_DRILL:
|
||||
{
|
||||
PCB_EDIT_FRAME* f = frame();
|
||||
|
||||
frame()->CallAfter( [f, origin]()
|
||||
{
|
||||
TOOL_MANAGER* mgr = f->GetToolManager();
|
||||
mgr->RunAction( PCB_ACTIONS::drillSetOrigin, origin );
|
||||
f->Refresh();
|
||||
} );
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
case BOT_UNKNOWN:
|
||||
{
|
||||
ApiResponseStatus e;
|
||||
e.set_status( ApiStatusCode::AS_BAD_REQUEST );
|
||||
e.set_error_message( "Unexpected origin type" );
|
||||
return tl::unexpected( e );
|
||||
}
|
||||
}
|
||||
|
||||
return Empty();
|
||||
}
|
||||
|
||||
|
||||
HANDLER_RESULT<GetBoundingBoxResponse> API_HANDLER_PCB::handleGetBoundingBox(
|
||||
const HANDLER_CONTEXT<GetBoundingBox>& aCtx )
|
||||
{
|
||||
@@ -913,10 +1001,11 @@ HANDLER_RESULT<GetBoundingBoxResponse> API_HANDLER_PCB::handleGetBoundingBox(
|
||||
HANDLER_RESULT<PadShapeAsPolygonResponse> API_HANDLER_PCB::handleGetPadShapeAsPolygon(
|
||||
const HANDLER_CONTEXT<GetPadShapeAsPolygon>& aCtx )
|
||||
{
|
||||
HANDLER_RESULT<bool> documentValidation = validateDocument( aCtx.Request.board() );
|
||||
|
||||
if( !documentValidation )
|
||||
if( HANDLER_RESULT<bool> documentValidation = validateDocument( aCtx.Request.board() );
|
||||
!documentValidation )
|
||||
{
|
||||
return tl::unexpected( documentValidation.error() );
|
||||
}
|
||||
|
||||
PadShapeAsPolygonResponse response;
|
||||
PCB_LAYER_ID layer = FromProtoEnum<PCB_LAYER_ID, board::types::BoardLayer>( aCtx.Request.layer() );
|
||||
|
||||
Reference in New Issue
Block a user