This document is archived and information here might be outdated.  Recommended version.


IAffineTransformation2D3GEN.GetControlPointError Method (ArcObjects .NET 10.4 SDK)
ArcObjects Library Reference (Geometry)  

IAffineTransformation2D3GEN.GetControlPointError Method

Returns the errors involved in moving control point i from the 'from' to 'to' system. These error terms are valid after using DefineFromControlPoints/Ex to define the transformation.

[Visual Basic .NET]
Public Sub GetControlPointError ( _
    ByVal i As Integer, _
    ByRef fromError As Double, _
    ByRef toError As Double _
)
[C#]
public void GetControlPointError (
    int i,
    ref double fromError,
    ref double toError
);
[C++]
HRESULT GetControlPointError(
  long i,
  double* fromError,
  double* toError
);
[C++]

Parameters i [in] i is a parameter of type long fromError [in, out] fromError is a parameter of type double toError [in, out] toError is a parameter of type double

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.
[C#]

/// This example demonstrates how to get the GetControlPointError
///for an AffineTransformation
public void GetControlPointError_Example()
{
    try
    {
        //From point
        IPoint[] fromPoints=new IPoint[4];
        fromPoints[0]=CreatePoint(0, 0);
        fromPoints[1]=CreatePoint(0, 1);
        fromPoints[2]=CreatePoint(1, 0);
        fromPoints[3]=CreatePoint(1, 1);
        //To point
        IPoint[] toPoints=new IPoint[4];
        toPoints[0]=CreatePoint(5, 5);
        toPoints[1]=CreatePoint(5, 6);
        toPoints[2]=CreatePoint(6, 5);
        toPoints[3]=CreatePoint(6, 6);

        //Create an AffineTransformation2D object
        IAffineTransformation2D3GEN affineTransformation2D=new AffineTransformation2DClass();
        affineTransformation2D.DefineFromControlPoints(ref fromPoints, ref toPoints);

        double fromError=0;
        double toError=0;
        for (int i=0; i < 4; i++)
        {
            affineTransformation2D.GetControlPointError(i, ref fromError, ref toError);
            System.Windows.Forms.MessageBox.Show("The fromError value is 0 because the control points define a perfect fit : " + fromError);
            System.Windows.Forms.MessageBox.Show("The toError value is 0 because the control points define a perfect fit : " + toError);
        }
        //Now lets introduce some error by modifying one control point to break the perfect fit
        toPoints[3]=CreatePoint(5.9, 5.9);
        //Redefine the affine transformation
        affineTransformation2D.DefineFromControlPoints(ref fromPoints, ref toPoints);
        affineTransformation2D.GetRMSError(ref fromError, ref toError);
        System.Windows.Forms.MessageBox.Show("The fromError value is 0.039 because the control points do not define a perfect fit : " + fromError);
        System.Windows.Forms.MessageBox.Show("The toError value is 0.035 because the control points do not define a perfect fit : " + toError);
    }
    catch (Exception e)
    {
        System.Windows.Forms.MessageBox.Show(e.Message);
    }
}
public IPoint CreatePoint(double x, double y)
{
    IPoint point=new ESRI.ArcGIS.Geometry.Point();
    point.X=x;
    point.Y=y;
    return point;
}

[Visual Basic .NET]

    'This example demonstrates how to get the RMS error
    'for all the control points of an AffineTransformation
    Private Sub GetControlPointError_example()
        On Error GoTo ErrorHandler
        'Create an AffineTransformation2D object
        Dim pA2D As IAffineTransformation2D3GEN
        pA2D=New AffineTransformation2D
        Dim pArrFromPts(3) As IPoint
        pArrFromPts(0)=New Point
        pArrFromPts(1)=New Point
        pArrFromPts(2)=New Point
        pArrFromPts(3)=New Point

        Dim pArrToPts(3) As IPoint
        pArrToPts(0)=New Point
        pArrToPts(1)=New Point
        pArrToPts(2)=New Point
        pArrToPts(3)=New Point
        'Define the Affine using control points
        'forming a perfect fit
        pArrFromPts(0).PutCoords(0, 0)
        pArrFromPts(1).PutCoords(0, 1)
        pArrFromPts(2).PutCoords(1, 0)
        pArrFromPts(3).PutCoords(1, 1)
        pArrToPts(0).PutCoords(5, 5)
        pArrToPts(1).PutCoords(5, 6)
        pArrToPts(2).PutCoords(6, 5)
        pArrToPts(3).PutCoords(6, 6)

        pA2D.DefineFromControlPoints(pArrFromPts, pArrToPts)

        Dim dFromErr As Double, dToErr As Double
        Dim i As Long
        Debug.Print("**** Control point errors - Perfect fit ****")
        For i=0 To 3
            pA2D.GetControlPointError(i, dFromErr, dToErr)
            Debug.Print("FromErr on control point" & i & "=" & dFromErr)
            Debug.Print("ToErr on control point" & i & "=" & dToErr)
        Next
        'Now lets introduce some error by modifying one control point to break the perfect fit
        pArrToPts(3).PutCoords(5.9, 5.9)
        pA2D.DefineFromControlPoints(pArrFromPts, pArrToPts)
        Debug.Print("**** Control point errors - With error ****")
        For i=0 To 3
            pA2D.GetControlPointError(i, dFromErr, dToErr)
            Debug.Print("FromErr on control point" & i & "=" & dFromErr)
            Debug.Print("ToErr on control point" & i & "=" & dToErr)
        Next

        Exit Sub
ErrorHandler:
        Debug.Print(Err.Description)
    End Sub

See Also

IAffineTransformation2D3GEN Interface