#1
Posted
:
Monday, January 15, 2018 10:21:25 PM(UTC)
Groups: Registered
Posts: 10
Thanks: 1 times
I want to measure the length of the NITF image using the Ruler function.
https://drive.google.com/open?id...6wopCU94tTFh1DnLSGoknDxzThe image above is on the way to using the Ruler, so I don't want the length to be displayed.
I want to know how I can control the options of the Ruler function.
Additionally, Except for the GetSelectItem () function, I want to know how I can access the Object inside the Container.
#2
Posted
:
Tuesday, January 16, 2018 1:51:04 PM(UTC)
Groups: Registered, Tech Support, Administrators
Posts: 199
Was thanked: 28 time(s) in 28 post(s)
Hello,
Since you didn't specify what language you are developing with, my answers are for C#, let me know if it's different and I'll change my answers to the language you are using.
You can stop the ruler length from being displayed by changing the
Font property to
null on the ruler. To have this set by default, you can modify the AnnAutomationObject's template for the ruler and poly ruler, below is a snippet for how to achieve this:
Code:
foreach (AnnAutomationObject autoObj in annAutomationObj.Manager.Objects)
{
AnnObject obj = autoObj.ObjectTemplate;
if (obj.Id == AnnObject.RulerObjectId || obj.Id == AnnObject.PolyRulerObjectId)
obj.Font = null;
}
You can get the length of a ruler annotation by using the
GetRulerLength method, for the argument
calibrationScale you can pass the
CalibrationScale of the current container's mapper, below is a snippet for how to achieve this:
Code:
LeadLengthD rulerLength = rulerObj.GetRulerLength(annContainerObj.Mapper.CalibrationScale);
For getting the current ruler, you can iterate through the children of the container and check the
IsSelected property. Below is a snippet for how to perform some operation on the selected ruler.
Code:
AnnPolyRulerObject currentRuler = null;
foreach (AnnObject obj in annContainerObj.Children)
{
if (obj.Id == AnnObject.RulerObjectId)
currentRuler = (AnnPolyRulerObject)obj;
}
if (currentRuler != null)
{
// A ruler was selected, do something with it
}
Anthony Northrup
Developer Support Engineer
LEAD Technologies, Inc.
#3
Posted
:
Tuesday, January 16, 2018 7:49:39 PM(UTC)
Groups: Registered
Posts: 10
Thanks: 1 times
Sorry. It's my mistake.
I am working on an MFC environment and appreciate your answers.
#4
Posted
:
Wednesday, January 17, 2018 11:54:41 AM(UTC)
Groups: Registered, Tech Support, Administrators
Posts: 199
Was thanked: 28 time(s) in 28 post(s)
Hello,
For these answers I modified the following demo:[LEADTOOLS 19]\Examples\ClassLibrary\MSVC\Annotate
You can hide the length of the ruler annotations by using the
OnAnnEvent callback. You can use the
SetShowFlags method of the LAnnRuler to hide just the length. Below is the modified OnAnnEvent from the demo I referred to above
Code:
L_VOID CAnnDemoBitmap::OnAnnEvent(L_UINT uAnnEvent, LPARAM lParam)
{
LAnnotationWindow::OnAnnEvent(uAnnEvent, lParam);
switch (uAnnEvent)
{
case LTANNEVENT_INSERT:
{
LAnnotation * pAnnObj;
pAnnObj = LAnnotation::CreateAnnObject((HANNOBJECT)(LONG_PTR)lParam);
if (pAnnObj != NULL)
{
if (pAnnObj->GetType()== ANNOBJECT_BUTTON)
{
pAnnObj->SetTag(++m_nButtons, 0);
}
else
{
if (pAnnObj->GetType()== ANNOBJECT_HOTSPOT)
{
pAnnObj->SetTag(++m_nHotspots, 0);
}
// Added the following if statement
if (pAnnObj->GetType() == ANNOBJECT_RULER || pAnnObj->GetType() == ANNOBJECT_POLYRULER)
{
((LAnnRuler*)pAnnObj)->SetShowFlags(ANNSHOW_GAUGE | ANNSHOW_TICMARKS);
}
pAnnObj->SetHandle(NULL);
delete pAnnObj;
}
}
}
break;
// Rest of method...
In order to get the length of a ruler, you can use the
GetDistance method. Here's a helper you can use for getting the length:
Code:
L_INT GetLengthOfRuler(LAnnObject *obj, L_DOUBLE *pdDistance)
{
// No object?
if (obj == NULL)
return FAILURE;
// Invalid type?
if (obj->GetType() != ANNOBJECT_RULER && obj->GetType() != ANNOBJECT_POLYRULER)
return FAILURE;
// Cast to a ruler
LAnnRuler *ruler = (LAnnRuler*)obj;
// Return length
return ruler->GetDistance(pdDistance);
}
And yes, you will most likely have to use the
GetSelectedItems method. However, if you create these manually, you can simply store the
tag of the annotations and use
GetObjectFromTag.
Anthony Northrup
Developer Support Engineer
LEAD Technologies, Inc.
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.