#include "l_bitmap.h"
L_LTANN_API L_INT L_AnnDefine2(hObject, apt, uState)
HANNOBJECT hObject; |
handle to the annotation object |
pANNPOINT apt; |
pointer to an ANNPOINT structure |
L_UINT uState; |
state of the process of modifying the annotation object |
Specifies the shape when creating or transforming an annotation object. This function specifies one point in the current window each time it is called.
Parameter | Description | |
hObject | Handle to the annotation object. | |
apt | Pointer to an ANNPOINT structure. The specified point is in container coordinates. | |
uState | State of the process of modifying the annotation object. Possible values are: | |
Value | Meaning | |
ANNDEFINE_SETANCHORPOINT | [13] This is an anchor point. Use this value when rotating an annotation object around a point other than its center. When doing this, call L_AnnDefine2 with this flag set prior to calling L_AnnDefine2 with the ANNDEFINE_BEGINROTATE flag set. | |
ANNDEFINE_BEGINMOVEPOINT | [11] This is a starting point, used when moving one point on an annotation object. This can be used to move a single point on any of the following annotation objects: | |
ANNOBJECT_LINE | ||
ANNOBJECT_POLYLINE | ||
ANNOBJECT_POLYGON | ||
ANNOBJECT_POINTER | ||
ANNOBJECT_FREEHAND | ||
ANNOBJECT_FREEHANDHOTSPOT | ||
ANNOBJECT_RULER | ||
ANNOBJECT_CROSSPRODUCT | ||
ANNOBJECT_PROTRACTOR | ||
ANNOBJECT_CURVE | ||
ANNOBJECT_CURVECLOSED | ||
You can use ANNDEFINE_BEGINMOVEPOINT to perform a simultaneous rotate and resize for the following objects: | ||
(Note that you must set an anchor point prior to using ANNDEFINE_BEGINMOVEPOINT) | ||
ANNOBJECT_RECT | ||
ANNOBJECT_ELLIPSE | ||
ANNOBJECT_HILITE | ||
ANNOBJECT_REDACT | ||
ANNOBJECT_TEXT | ||
ANNOBJECT_NOTE | ||
ANNOBJECT_STAMP | ||
ANNOBJECT_HOTSPOT | ||
When doing this, call L_AnnDefine2 with the ANNDEFINE_SETANCHORPOINT flag set prior to calling L_AnnDefine2 with the ANNDEFINE_BEGINMOVEPOINT flag set. |
SUCCESS |
The function was successful. |
< 1 |
An error occurred. Refer to Return Codes. |
This function is used only with the following states:
ANNDEFINE_SETANCHORPOINT
ANNDEFINE_BEGINMOVEPOINT
If you try to use a uState value other than ANNDEFINE_SETANCHORPOINT or ANNDEFINE_BEGINMOVEPOINT, the function returns ERROR_INV_PARAMETER.
This function is similar to L_AnnDefine, except that L_AnnDefine2 takes a point in container coordinates, whereas L_AnnDefine takes a point in client coordinates.
Use this function when additional accuracy is required when setting an anchor point, or doing a simultaneous rotate and resize. This function should be used in conjunction with L_AnnDefine.
As an example, suppose you want to rotate and resize the rectangle around the anchor point aptAnchor by moving the point aptMove, as shown in the following figure:
This can be done by using only L_AnnDefine, but because L_AnnDefine takes integral arguments and aptAnchor and aptMove are not integral, the rotate and resize will not be exact.
To solve this and accurately perform simultaneous rotation and resizing, use L_AnnDefine2 and L_AnnDefine as follows:
ANNPOINT aptAnchor;
ANNPOINT aptMove;
aptMove.x = 10.2;
aptMove.y = 10.5
aptAnchor.x = 10.2;
aptAnchor.y = 50.5
ptLocation.x = 10;
ptLocation.y = 20;
L_AnnDefine2(hObject, &aptAnchor, ANNDEFINE_SETANCHORPOINT);
L_AnnDefine2(hObject, &aptMove, ANNDEFINE_BEGINROTATE);
// One or more ANNDEFINE_APPEND
L_AnnDefine(pData->hObjectChange, &pMousePos->pt, ANNDEFINE_APPEND);
L_AnnDefine(pData->hObjectChange, &pMousePos->pt, ANNDEFINE_END);
Required DLLs and Libraries
For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application. |
Win32, x64.
This example uses static variables to simulate user input to rotate/resize a rectangle around a point on the bottom center line of the rectangle. Initially the rectangle must not be rotated.
L_INT AnnDefine2Example(HANNOBJECT hRect)
{
L_INT nRet;
// Counter for simulating user input
static L_INT nCallCount = 0;
L_UINT uType;
ANNRECT arcRect;
ANNPOINT aptAnchor; // Anchor point in container coordinates
ANNPOINT aptMove; // Move point in container coordinates
POINT ptMove; // Move point in client coordinates
L_DOUBLE dAngle;
HANNOBJECT hContainer;
nRet = L_AnnGetType(hRect, &uType);
if(nRet != SUCCESS)
return nRet;
if (uType != ANNOBJECT_RECT)
{
MessageBox(NULL, TEXT("Object must be a rectangle."), TEXT("Error"), MB_OK);
return 0;
}
nRet = L_AnnGetRotateAngle(hRect, &dAngle);
if(nRet != SUCCESS)
return nRet;
if (dAngle != 0)
{
MessageBox(NULL, TEXT("Object must not be rotated."), TEXT("Error"), MB_OK);
return nRet;
}
++nCallCount;
switch (nCallCount)
{
case 1:
nRet = L_AnnGetRect(hRect, &arcRect, NULL);
if(nRet != SUCCESS)
return nRet;
aptAnchor.x = (arcRect.left + arcRect.right) / 2;
aptAnchor.y = arcRect.bottom;
aptMove.x = (arcRect.left + arcRect.right) / 2;
aptMove.y = arcRect.top;
nRet = L_AnnDefine2(hRect, &aptAnchor, ANNDEFINE_SETANCHORPOINT);
if(nRet != SUCCESS)
return nRet;
nRet = L_AnnDefine2(hRect, &aptMove, ANNDEFINE_BEGINMOVEPOINT);
if(nRet != SUCCESS)
return nRet;
MessageBox(NULL, TEXT("Call ExampleAnnDefine2 to complete the rotate/resize."), TEXT(""), MB_OK);
break;
case 2:
nRet = L_AnnGetRect(hRect, &arcRect, NULL);
if(nRet != SUCCESS)
return nRet;
aptMove.x = arcRect.right;
aptMove.y = arcRect.top;
nRet = L_AnnGetTopContainer(hRect, &hContainer);
if(nRet != SUCCESS)
return nRet;
nRet = L_AnnConvert(hContainer, &ptMove, &aptMove, 1, ANNCONVERT_TO_CLIENT);
if(nRet != SUCCESS)
return nRet;
nRet = L_AnnDefine(hRect, &ptMove, ANNDEFINE_END);
if(nRet != SUCCESS)
return nRet;
nCallCount = 0;
MessageBox(NULL, TEXT("Rotate/resize finished!"), TEXT(""), MB_OK);
break;
}
return SUCCESS;
}
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET