Format
SDO_UTIL.AFFINETRANSFORMS( geometry IN SDO_GEOMETRY, translation IN VARCHAR2 DEFAULT 'FALSE', tx IN NUMBER DEFAULT 0.0, ty IN NUMBER DEFAULT 0.0, tz IN NUMBER DEFAULT 0.0, scaling IN VARCHAR2 DEFAULT 'FALSE', psc1 IN SDO_GEOMETRY DEFAULT NULL, sx IN NUMBER DEFAULT 0.0, sy IN NUMBER DEFAULT 0.0, sz IN NUMBER DEFAULT 0.0, rotation IN VARCHAR2 DEFAULT 'FALSE', p1 IN SDO_GEOMETRY DEFAULT NULL, line1 IN SDO_GEOMETRY DEFAULT NULL, angle IN NUMBER DEFAULT 0.0, dir IN NUMBER DEFAULT -1, shearing IN VARCHAR2 DEFAULT 'FALSE', shxy IN NUMBER DEFAULT 0.0, shyx IN NUMBER DEFAULT 0.0, shxz IN NUMBER DEFAULT 0.0, shzx IN NUMBER DEFAULT 0.0, shyz IN NUMBER DEFAULT 0.0, shzy IN NUMBER DEFAULT 0.0, reflection IN VARCHAR2 DEFAULT 'FALSE', pref IN SDO_GEOMETRY DEFAULT NULL, lineR IN SDO_GEOMETRY DEFAULT NULL, dirR IN NUMBER DEFAULT -1, planeR IN VARCHAR2 DEFAULT 'FALSE', n IN SDO_NUMBER_ARRAY DEFAULT NULL, bigD IN SDO_NUMBER_ARRAY DEFAULT NULL, ) RETURN SDO_GEOMETRY;
Description
Returns a geometry that reflects an affine transformation of the input geometry.
Parameters
Input geometry on which to perform the affine transformation.
A string value of TRUE
causes translation to be performed; a string value of FALSE
(the default) causes translation not to be performed. If this parameter is TRUE
, translation is performed about the point at (tx,ty) or (tx,ty,tz).
X-axis value for translation. The default value is 0.0.
Y-axis value for translation. The default value is 0.0.
Z-axis value for translation. The default value is 0.0.
A string value of TRUE
causes scaling to be performed; a string value of FALSE
(the default) causes scaling not to be performed.
Point on the input geometry about which to perform the scaling. If scaling
is TRUE
, this geometry should be either a zero point (point geometry with 0,0 or 0,0,0 ordinates for scaling about the origin) or a nonzero point (point geometry with ordinates for scaling about a point other than the origin). If scaling
is FALSE
, psc1
can be a null value.
X-axis value for scaling (about either the point specified in the psc1
parameter or the origin). The default value is 0.0.
Y-axis value for scaling (about either the point specified in the psc1
parameter or the origin). The default value is 0.0.
Z-axis value for scaling (about either the point specified in the psc1
parameter or the origin). The default value is 0.0.
A string value of TRUE
causes rotation to be performed; a string value of FALSE
(the default) causes rotation not to be performed.
For two-dimensional geometries, rotation uses the p1
and angle
values. For three-dimensional geometries, rotation uses either the angle
and dir
values or the line1
and angle
values.
Point for two-dimensional geometry rotation about a specified point.
Line for rotation about a specified axis.
Angle rotation parameter (in radians) for rotation about a specified axis or about the X, Y, or Z axis. The default value is 0.0.
Rotation parameter for x(0), y(1), or z(2)-axis roll. If the rotation
parameter value is TRUE
but the dir
parameter is not used, use a value of -1 (the default)
A string value of TRUE
causes shearing to be performed; a string value of FALSE
(the default) causes shearing not to be performed.
For two-dimensional geometries, shearing uses the shxy
and shyx
parameter values. For three-dimensional geometries, shearing uses the shxy
, shyx
, shxz
, shzx
, shyz
, and shzy
parameter values.
Value for shearing due to X along the Y direction. The default value is 0.0.
Value for shearing due to Y along the X direction. The default value is 0.0.
Value for shearing due to X along the Z direction (three-dimensional geometries only). The default value is 0.0.
Value for shearing due to Z along the X direction (three-dimensional geometries only).
Value for shearing due to Y along the Z direction (three-dimensional geometries only).
Value for shearing due to Z along the Y direction (three-dimensional geometries only).
A string value of TRUE
causes reflection to be performed; a string value of FALSE
(the default) causes reflection not to be performed.
For two-dimensional geometries, reflection uses the lineR
value for reflection about an axis and the pref
value for the centroid for self-reflection. For three-dimensional geometries, reflection uses the lineR
value for reflection about an axis; the dirR
value for reflection about the yz, xz, and xy planes; the planeR
, n
, and bigD
values for reflection about a specified plane; and the pref
value for the centroid for self-reflection.
Point through which to perform reflection.
Line along which to perform reflection.
Number indicating the plane about (through) which to perform reflection: 0 for the yz plane, 1 for the xz plane, or 2 for the xy plane. If the reflection
parameter value is TRUE
but the dirR
parameter is not used, use a value of -1 (the default).
A string value of TRUE
causes reflection about an arbitrary plane to be performed; a string value of FALSE
(the default) causes reflection about an arbitrary plane not to be performed.
Normal vector of the plane.
Delta value for the plane equation in three-dimensional geometries.
For three-dimensional geometries, bigD
= delta and n
= (A,B,C) where n
is the normal of the plane in three-dimensional space. Thus, the plane equation is:
Ax+By+Cz+bigD = 3DDotProd(n,anypointonplane)+bigD = 0
Usage Notes
The order of affine transforms matter because these are matrix and vector multiplications.
You should validate the resulting geometry using the SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT function.
Examples
The following example performs an affine transformation on a two-dimensional geometry.
-- Polygon reflection in 2D about a specified line segment SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1), sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)), translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0, scaling => 'FALSE', psc1 => NULL, sx => 0.0, sy => 0.0, sz => 0.0, rotation => 'TRUE', p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null), line1 => NULL, angle => -2.35253274913915, dir => -1, shearing => 'FALSE', shxy => 0.0, shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0, reflection => 'FALSE', pref => NULL, lineR => NULL, dirR => 0, planeR => 'FALSE', n => NULL, bigD => NULL ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR -------------------------------------------------------------------------------- SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122, 0, 2))
The following is a simplified version of the preceding example, using the default values for most parameters.
-- Simpler form, using most default values SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1), sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)), rotation => 'TRUE', p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null), angle => -2.35253274913915 ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR -------------------------------------------------------------------------------- SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122, 0, 2))
The following example performs an affine transformation on a three-dimensional geometry.
-- Polygon reflection in 3D about a specified plane (z=1 plane in this example) SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => MDSYS.SDO_GEOMETRY(3003, 0, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY( 1.5,0,0, 2.5,1,0, 1.5,2,0, 0.5,2,0, 0.5,0,0, 1.5,0,0)), translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0, scaling => 'FALSE', psc1 => NULL, sx => 0.0, sy => 0.0, sz => 0.0, rotation => 'FALSE', p1 => NULL, line1 => NULL, angle => 0.0, dir => 0, shearing => 'FALSE', shxy => 0.0, shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0, reflection => 'TRUE', pref => NULL, lineR => NULL, dirR => -1, planeR => 'TRUE', n => SDO_NUMBER_ARRAY(0.0, 0.0, 1.0), bigD => SDO_NUMBER_ARRAY(-1.0) ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>MDSYS.SDO_GEOMETRY(3003,0,NULL,MDSYS.SDO_ELE -------------------------------------------------------------------------------- SDO_GEOMETRY(3003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(1.5, 0, 2, 2.5, 1, 2, 1.5, 2, 2, .5, 2, 2, .5, 0, 2, 1.5, 0, 2))
Related Topics