Starlink-AST
view release on metacpan or search on metacpan
ast/src/region.c view on Meta::CPAN
ps5 = astAnnul( ps5 );
}
}
}
/* If there was no intersection or overlap, but the regions touch, then we
consider there to be an intersection if either region is closed. */
if( touch && result == 1 ) {
if( astGetClosed( this) || astGetClosed( that ) ) {
result = 4;
}
}
/* Free resources.*/
reg2_submesh = astAnnul( reg2_submesh );
ps2 = astAnnul( ps2 );
}
/* Free resources.*/
map_reg1 = astAnnul( map_reg1 );
map = astAnnul( map );
ps1 = astAnnul( ps1 );
unc1 = astAnnul( unc1 );
if( mask) mask = astFree( mask );
reg2_mesh = astAnnul( reg2_mesh );
}
cmap = astAnnul( cmap );
lbnd = astFree( lbnd );
ubnd = astFree( ubnd );
/* If not OK, return zero. */
if( !astOK ) result = 0;
/* Return the result. */
return result;
}
static void Overlay( AstFrame *template_frame, const int *template_axes,
AstFrame *result, int *status ) {
/*
* Name:
* Overlay
* Purpose:
* Overlay the attributes of a template Region on to another Frame.
* Type:
* Private function.
* Synopsis:
* #include "region.h"
* void Overlay( AstFrame *template, const int *template_axes,
* AstFrame *result, int *status )
* Class Membership:
* Region member function (over-rides the protected astOverlay
* method inherited from the Frame class).
* Description:
* This function overlays attributes from the current Frame of a
* Region on to another Frame, so as to over-ride selected
* attributes of that second Frame. Normally only those attributes
* which have been specifically set in the template will be
* transferred. This implements a form of defaulting, in which a
* Frame acquires attributes from the template, but retains its
* original attributes (as the default) if new values have not
* previously been explicitly set in the template.
* Parameters:
* template
* Pointer to the template Region, for whose current Frame
* values should have been explicitly set for any attribute
* which is to be transferred.
* template_axes
* Pointer to an array of int, with one element for each axis of
* the "result" Frame (see below). For each axis in the result
* frame, the corresponding element of this array should contain
* the (zero-based) index of the axis in the current Frame of
* the template Region to which it corresponds. This array is
* used to establish from which template Frame axis any
* axis-dependent attributes should be obtained.
*
* If any axis in the result Frame is not associated with a
* template Frame axis, the corresponding element of this array
* should be set to -1.
*
* If a NULL pointer is supplied, the template and result axis
* indices are assumed to be identical.
* result
* Pointer to the Frame which is to receive the new attribute values.
* status
* Pointer to the inherited status variable.
*/
/* Local Variables: */
AstFrame *fr; /* Pointer to current Frame */
/* Check the global error status. */
if ( !astOK ) return;
/* Obtain a pointer to the current Frame in the Region and invoke its
astOverlay method to overlay its attributes. Annul the Frame pointer
afterwards. */
fr = astGetFrame( ((AstRegion *) template_frame)->frameset, AST__CURRENT );
astOverlay( fr, template_axes, result );
fr = astAnnul( fr );
}
static void PermAxes( AstFrame *this_frame, const int perm[], int *status ) {
/*
* Name:
* PermAxes
* Purpose:
* Permute the order of a Region's axes.
* Type:
* Private function.
* Synopsis:
* #include "region.h"
* void PermAxes( AstFrame *this, const int perm[], int *status )
* Class Membership:
* Region member function (over-rides the astPermAxes method
* inherited from the Frame class).
* Description:
* This function permutes the order in which the axes in the
* current Frame of a Region occur.
* Parameters:
* this
* Pointer to the Region.
* perm
* An array of int (with one element for each axis of the
* Region's current Frame) which lists the axes in their new
* order. Each element of this array should be a (zero-based)
* axis index identifying the axes according to their old
* (un-permuted) order.
* status
* Pointer to the inherited status variable.
* Notes:
* - Only genuine permutations of the axis order are permitted, so
* each axis must be referenced exactly once in the "perm" array.
* - If more than one axis permutation is applied to the same Frame
* in a Region, the effects are cumulative.
*/
/* Local Variables: */
AstRegion *this; /* Pointer to the Region structure */
/* Check the global error status. */
if ( !astOK ) return;
/* Obtain a pointer to the Region structure. */
this = (AstRegion *) this_frame;
/* Invoke the astPermAxes method on the encapsulated FrameSet. */
astPermAxes( this->frameset, perm );
ast/src/region.c view on Meta::CPAN
s2_ubnd = astFree( s2_ubnd );
bfrm = astAnnul( bfrm );
/* If we can use the simplified uncertainty Region, indicate that we have
performed some simplification, and store the new uncertainty Region. */
if( ok ) {
simpler = 1;
astSetUnc( new, sunc );
}
}
/* Free resources */
unc = astAnnul( unc );
sunc = astAnnul( sunc );
}
/* If any simplification could be performed, return the new Region.
Otherwise, return a clone of the supplied pointer. */
if( simpler ){
result = (AstMapping *) new;
} else {
new = astAnnul( new );
result = astClone( this );
}
/* If an error occurred, annul the returned pointer. */
if ( !astOK ) result = astAnnul( result );
/* Return the result. */
return result;
}
static int SubFrame( AstFrame *this_frame, AstFrame *template,
int result_naxes,
const int *target_axes, const int *template_axes,
AstMapping **map, AstFrame **result, int *status ) {
/*
* Name:
* SubFrame
* Purpose:
* Select axes from a Region and convert to the new coordinate system.
* Type:
* Private function.
* Synopsis:
* #include "region.h"
* int SubFrame( AstFrame *target, AstFrame *template, int result_naxes,
* const int *target_axes, const int *template_axes,
* AstMapping **map, AstFrame **result, int *status )
* Class Membership:
* Region member function (over-rides the protected astSubFrame
* method inherited from the Frame class).
* Description:
* This function selects a requested sub-set (or super-set) of the
* axes from the current Frame of a "target" Region and creates a
* new Frame with copies of the selected axes assembled in the
* requested order. It then optionally overlays the attributes of a
* "template" Frame on to the result. It returns both the resulting
* Frame and a Mapping that describes how to convert between the
* coordinate systems described by the current Frame of the target
* Region and the result Frame. If necessary, this Mapping takes
* account of any differences in the Frames' attributes due to the
* influence of the template.
* Parameters:
* target
* Pointer to the target Region, from whose current Frame the
* axes are to be selected.
* template
* Pointer to the template Frame, from which new attributes for
* the result Frame are to be obtained. Optionally, this may be
* NULL, in which case no overlaying of template attributes will
* be performed.
* result_naxes
* Number of axes to be selected from the target Region. This
* number may be greater than or less than the number of axes in
* the Region's current Frame (or equal).
* target_axes
* Pointer to an array of int with result_naxes elements, giving
* a list of the (zero-based) axis indices of the axes to be
* selected from the current Frame of the target Region. The
* order in which these are given determines the order in which
* the axes appear in the result Frame. If any of the values in
* this array is set to -1, the corresponding result axis will
* not be derived from the target Region, but will be assigned
* default attributes instead.
* template_axes
* Pointer to an array of int with result_naxes elements. This
* should contain a list of the template axes (given as
* zero-based axis indices) with which the axes of the result
* Frame are to be associated. This array determines which axes
* are used when overlaying axis-dependent attributes of the
* template on to the result. If any element of this array is
* set to -1, the corresponding result axis will not receive any
* template attributes.
*
* If the template argument is given as NULL, this array is not
* used and a NULL pointer may also be supplied here.
* map
* Address of a location to receive a pointer to the returned
* Mapping. The forward transformation of this Mapping will
* describe how to convert coordinates from the coordinate
* system described by the current Frame of the target Region
* to that described by the result Frame. The inverse
* transformation will convert in the opposite direction.
* result
* Address of a location to receive a pointer to the result Frame.
* status
* Pointer to the inherited status variable.
* Returned Value:
* A non-zero value is returned if coordinate conversion is
* possible between the current Frame of the target Region and
* the result Frame. Otherwise zero is returned and *map and
* *result are returned as NULL (but this will not in itself result
* in an error condition). In general, coordinate conversion should
* always be possible if no template Frame is supplied but may not
* always be possible otherwise.
* Notes:
* - A value of zero will be returned if this function is invoked
* with the global error status set, or if it should fail for any
* reason.
*/
/* Local Variables: */
AstFrame *fr; /* Pointer to Region's current Frame */
int match; /* Result to be returned */
/* Initialise. */
*map = NULL;
*result = NULL;
match = 0;
/* Check the global error status. */
if ( !astOK ) return match;
/* Invoke the parent astSubFrame method on the Frame represented by the
region. */
fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
match = astSubFrame( fr, template, result_naxes, target_axes, template_axes,
map, result );
fr = astAnnul( fr );
/* Return the result. */
return match;
}
static AstSystemType SystemCode( AstFrame *this_frame, const char *system, int *status ) {
/*
* Name:
* SystemCode
( run in 0.607 second using v1.01-cache-2.11-cpan-7fcb06a456a )