#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.5aptAnchor.x = 10.2;aptAnchor.y = 50.5ptLocation.x = 10;ptLocation.y = 20;L_AnnDefine2(hObject, &aptAnchor, ANNDEFINE_SETANCHORPOINT);L_AnnDefine2(hObject, &aptMove, ANNDEFINE_BEGINROTATE);// One or more ANNDEFINE_APPENDL_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 inputstatic L_INT nCallCount = 0;L_UINT uType;ANNRECT arcRect;ANNPOINT aptAnchor; // Anchor point in container coordinatesANNPOINT aptMove; // Move point in container coordinatesPOINT ptMove; // Move point in client coordinatesL_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
