L_AnnCalibrateRulerSuccessive
#include "l_bitmap.h"
L_LTANN_API L_INT L_AnnCalibrateRulerSuccessive (hObject, dCalibrateLength, uCalibrateUnit)
|
HANNOBJECT hObject; |
/* handle to an ANNOBJECT_RULER object */ |
|
L_DOUBLE dCalibrateLength; |
/* length to assign to the ruler */ |
|
L_UINT uCalibrateUnit; |
/* units of the length */ |
Calibrates an ANNOBJECT_RULER annotation object. This function is available in the Document/Medical Toolkits.
|
Parameter |
Description |
|
|
hObject |
Handle to an ANNOBJECT_RULER object. |
|
|
dCalibrateLength |
Length to be assigned to the ruler. |
|
|
uCalibrateUnit |
Units of the length. Possible values are: |
|
|
|
Value |
Meaning |
|
|
ANNUNIT_INCHES |
[0] Inches. |
|
|
ANNUNIT_FEET |
[1] Feet. |
|
|
ANNUNIT_YARDS |
[2] Yards. |
|
|
ANNUNIT_MICROMETERS |
[3] Micrometers. |
|
|
ANNUNIT_MILLIMETERS |
[4] Millimeters. |
|
|
ANNUNIT_CENTIMETERS |
[5] Centimeters. |
|
|
ANNUNIT_METERS |
[6] Meters. |
Returns
|
SUCCESS |
The function was successful. |
|
< 1 |
An error occurred. Refer to Return Codes. |
Comments
Use this function in conjunction with L_AnnCalibrateRuler to calibrate an ANNOBJECT_RULER object. This function is used to assign any existing ANNOBJECT_RULER object to a specific length.
Note that this function only works on ANNOBJECT_RULER objects, but can be used to indirectly calibrate other objects.
Calibrating the ANNOBJECT_RULER annotation object can be accomplished in two different ways:
1. Specifying one ruler length and a DPI ratio. This is accomplished by calling L_AnnCalibrateRuler. For more on the DPI ratio, see the L_AnnCalibrateRuler.
2. Specifying two ruler lengths. This is accomplished first by calling L_AnnCalibrateRuler (specifying 1.0 for the dDpiRatioXtoY parameter), changing the orientation of the ruler, and then calling L_AnnCalibrateRulerSuccessive. Typically, this method is used when a user wants to calibrate a ruler by a horizontal calibration, followed by a vertical calibration. Note that when using this method, the two ruler calibrations can be on a ruler(s) of ANY angle. The only requirement the two calibrations must be on rulers that do not have the same orientation (angle between the ruler and the X-axis).
While this function only works on ANNOBJECT_RULER objects, it can be used indirectly to calibrate any or all ruler objects, including ANNOBJECT_POLYRULER, ANNOBJECT_CROSSPRODUCT, and ANNOBJECT_POLYRULER. To do this, calibrate an ANNOBJECT_RULER object, get the resulting resolutions, and assign this resolution to all objects in the container. The example illustrates how to do this.
Required DLLs and Libraries
|
LTANN For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application. |
Platforms
Windows 2000 / XP/Vista.
See Also
Example
This example calibrates all annotation ruler objects without specifying a DPI Ratio. This is done by calibrating a ruler twice. The first calibration is horizontal, 200 pixels in length, and set to have a length of 2 inches. The second calibration is vertical, 200 pixels in length, and set to have a legnth of 1 inch. This result is that the horizizontal resolution of 100, and a vertical resolution of 200.
L_INT AnnCalibrateRulerSuccessiveExample(HANNOBJECT hContainer,
HANNOBJECT hAutomation)
{
L_INT nRet = SUCCESS;
HANNOBJECT hRuler = 0;
WCHAR szMsg[200];
// Create the ruler -- set it horizontal, length of 200 pixels
L_AnnCreate(ANNOBJECT_RULER, &hRuler);
ANNPOINT aptH[2] = {100,100, 300, 100};
L_AnnSetPoints(hRuler, aptH, 2);
L_AnnInsert(hContainer, hRuler, FALSE);
// Calibrate the horizontal ruler for a length of two inches
L_AnnCalibrateRuler(hRuler, 2, ANNUNIT_INCHES, 1.0); // it does not matter what is passed for the last argument
// Move the ruler so that it is vertical
ANNPOINT aptV[2] = {100,100,100,300};
L_AnnSetPoints(hRuler, aptV, 2);
// Calibrate the vertical ruler for a length of one inch
L_AnnCalibrateRulerSuccessive(hRuler, 1, ANNUNIT_INCHES); // it does not matter what is passed for the last argument
L_DOUBLE dDpiX = 0;
L_DOUBLE dDpiY = 0;
nRet = L_AnnGetBitmapDpiX (hRuler, &dDpiX);
if(nRet != SUCCESS)
return nRet;
nRet = L_AnnGetBitmapDpiY (hRuler, &dDpiY);
if(nRet != SUCCESS)
return nRet;
wsprintf(szMsg, TEXT("Resulting horizontal resolution: %d -- it should be 100"), (int)dDpiX);
MessageBox(NULL, szMsg,TEXT("Error"), MB_OK);
wsprintf(szMsg, TEXT("Resulting vertical resolution: %d -- it should be 200"), (int)dDpiY);
MessageBox(NULL, szMsg,TEXT("Error"), MB_OK);
MessageBox(NULL, TEXT("Now all existing and newly created ruler objects will be matched to this calibration."), TEXT("Error"), MB_OK);
// Match calibration to existing objects in container
nRet = L_AnnSetBitmapDpiX(hContainer, dDpiX, ANNFLAG_RECURSE);
if(nRet != SUCCESS)
return nRet;
nRet = L_AnnSetBitmapDpiY(hContainer, dDpiY, ANNFLAG_RECURSE);
if(nRet != SUCCESS)
return nRet;
// Set automation defaults so that all newly created objects have this calibration
nRet = L_AnnSetBitmapDpiX(hAutomation, dDpiX, ANNFLAG_RECURSE);
if(nRet != SUCCESS)
return nRet;
nRet = L_AnnSetBitmapDpiY(hAutomation, dDpiY, ANNFLAG_RECURSE);
if(nRet != SUCCESS)
return nRet;
return SUCCESS;
}