public abstract class AnnObject : IAnnObjectCloneable
@interface LTAnnObject : NSObject<NSCoding, NSCopying> // ABSTRACT
public abstract class AnnObject implements IAnnObjectCloneable
public:
ref class AnnObject abstract : IAnnObjectCloneable
class AnnObjectCloneable.md):
The AnnObject class provides all the basic functionality common to all LEADTOOLS annotation objects. AnnObject is an abstract class: you cannot instantiate objects of this class directly. Instead, you create an instance of a derived class such as AnnPolylineObject or AnnRectangleObject and use the methods and properties of the base AnnObject through the derived class.
AnnObject contains the following members:
Member | Description |
---|---|
Each AnnObject contains an array of Leadtools.LeadPointD points in container coordinates that define its location and size. How these points are interpreted to form the object shape is up to the derived class. For instance, a line object normally has two points: a starting point and an ending point. A rectangle object has four points, one for each corner (to keep track of rotated objects) and so forth. |
|
Object rotation center and gripper. |
|
The objects to use when drawing the boundary, filling the interior of an annotation object and drawing any text strings. A line object uses only the stroke object whereas a rectangle object uses both stroke and fill objects. A text object use all three to render its string. |
|
Scale, ScaleVector, Translate and Rotate |
Helper method that transforms the object instead of directly manipulating the raw points. |
IsVisible and IsSelected |
Hides/shows and selects/unselects an object in the container. |
Extra properties that are not used directly by the object, but can be used to store a hyperlink or any user-defined data. |
|
Password, Lock, Unlock, IsLocked and LockPicture |
Properties and methods for locking an object with a password. A locked object cannot be moved nor deleted by the automation framework and can be rendered with a special "lock" picture next to it. |
Opacity value to use when rendering the object. |
|
Text labels that can be used to draw text legends next to an object, such as a name. |
|
Reviews | Review items that can be used to add review comments and replies to this AnnObject. |
Helper method to determine whether a point intersects with this object. |
|
Serialize and Deserialize |
Saves and loads objects from an XML element. Used to load and save an object to an annotation file, as well as to perform undo/redo operations. |
AnnObjects are added to a container using the AnnContainer.Children property. Objects can optionally be added to layers inside the container. For more information, refer to AnnLayer.
using Leadtools.Annotations.Automation;
using Leadtools.Annotations.Engine;
using Leadtools.Codecs;
using Leadtools.Annotations.WinForms;
public void AnnContainer_AnnContainer()
{
double inch = 720.0;
// Create a new annotation container, 8.5 by 11 inches
AnnContainer container = new AnnContainer();
// Size must be in annotation units (1/720 of an inch)
container.Size = LeadSizeD.Create(8.5 * inch, 11 * inch);
//Change Offset position
container.Offset = new LeadPointD(10, 10);
// Add a red line object, from 1in 1in to 2in 2in
AnnPolylineObject lineObj = new AnnPolylineObject();
lineObj.Points.Add(LeadPointD.Create(1 * inch, 1 * inch));
lineObj.Points.Add(LeadPointD.Create(2 * inch, 2 * inch));
lineObj.Stroke = AnnStroke.Create(AnnSolidColorBrush.Create("Red"), LeadLengthD.Create(1));
container.Children.Add(lineObj);
// Add a blue on yellow rectangle from 3in 3in to 4in 4in
AnnRectangleObject rectObj = new AnnRectangleObject();
rectObj.Rect = LeadRectD.Create(3 * inch, 3 * inch, 1 * inch, 1 * inch);
rectObj.Stroke = AnnStroke.Create(AnnSolidColorBrush.Create("Blue"), LeadLengthD.Create(1));
rectObj.Fill = AnnSolidColorBrush.Create("Yellow");
container.Children.Add(rectObj);
// Show the container
ShowContainer("Before save", container);
// Create the codecs object to save and load annotations
AnnCodecs codecs = new AnnCodecs();
// Save the container
string destFileName = @"container.xml";
codecs.Save(destFileName, container, AnnFormat.Annotations, 1);
// delete the container
container = null;
// Show information about the data we just saved
AnnCodecsInfo info = codecs.GetInfo(destFileName);
string message;
if (info.Format == AnnFormat.Annotations)
{
message = "Version: ";
message += info.Version;
message += " No. of pages: ";
message += info.Pages.Length;
message += " page nos: ";
for (int i = 0; i < info.Pages.Length; i++)
{
message += info.Pages[i] + " ";
}
}
else
{
message = "Invalid annotations data";
}
Debug.WriteLine(message);
// Load the container we just saved
container = codecs.Load(destFileName, 1);
// Show it
ShowContainer("After load", container);
}
private void ShowContainer(String message, AnnContainer container)
{
string str = message + "\nContainer size: ";
// Add the size
double inch = 720;
double width = container.Size.Width / inch;
double height = container.Size.Height / inch;
str += width + " by " + height + " inches" + "\n";
// Add the objects
str += "Contains " + container.Children.Count + " objects(s)\n";
for (int i = 0; i < container.Children.Count; i++)
{
AnnObject annObj = container.Children[i];
str += "Object: " + annObj.FriendlyName + " at ";
for (int j = 0; j < annObj.Points.Count; j++)
{
LeadPointD pt = annObj.Points[j];
double x = pt.X / inch;
double y = pt.Y / inch;
str += "(" + x + ", " + y + ") ";
}
str += "\n";
}
Debug.WriteLine(str);
}
import java.io.File;
import java.io.IOException;
import org.junit.*;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import static org.junit.Assert.*;
import leadtools.*;
import leadtools.annotations.engine.*;
public void annContainerExample() {
final double inch = 720.0;
// create a new annotation container, 8.5 by 11 inches
AnnContainer container = new AnnContainer();
// Size must be in annotation units (1/720 of an inch)
container.setSize(LeadSizeD.create(8.5 * inch, 11 * inch));
// Change Offset position
container.setOffset(new LeadPointD(10, 10));
// Add a red line object, from 1in 1in to 2in 2in
AnnPolylineObject lineObj = new AnnPolylineObject();
lineObj.getPoints().add(LeadPointD.create(1 * inch, 1 * inch));
lineObj.getPoints().add(LeadPointD.create(2 * inch, 2 * inch));
lineObj.setStroke(AnnStroke.create(AnnSolidColorBrush.create("Red"), LeadLengthD.create(1)));
container.getChildren().add(lineObj);
// Add a blue on yellow rectangle from 3in 3in to 4in 4in
AnnRectangleObject rectObj = new AnnRectangleObject();
rectObj.setRect(LeadRectD.create(3 * inch, 3 * inch, 1 * inch, 1 * inch));
rectObj.setStroke(AnnStroke.create(AnnSolidColorBrush.create("Blue"), LeadLengthD.create(1)));
rectObj.setFill(AnnSolidColorBrush.create("Yellow"));
container.getChildren().add(rectObj);
// Show the container
showContainer("Before save", container);
// create the codecs object to save and load annotations
AnnCodecs codecs = new AnnCodecs();
// Save the container
var xmlData = codecs.save(container, AnnFormat.ANNOTATIONS, null, 1);
// delete the container
container = null;
// Show information about the data we just saved
AnnCodecsInfo info = codecs.getInfo(xmlData);
String message;
if (info.getFormat() == AnnFormat.ANNOTATIONS) {
message = "Version: ";
message += info.getVersion();
message += " No. of pages: ";
message += info.getPages().length;
message += " page nos: ";
for (int i = 0; i < info.getPages().length; i++) {
message += info.getPages()[i] + " ";
}
} else {
message = "Invalid annotations data";
}
System.out.println(message);
// Load the container we just saved
container = codecs.load(xmlData, 1);
// Show it
showContainer("After load", container);
}
private void showContainer(String message, AnnContainer container) {
String str = message + "\nContainer size: ";
// Add the size
double inch = 720;
double width = container.getSize().getWidth() / inch;
double height = container.getSize().getHeight() / inch;
str += width + " by " + height + " inches" + "\n";
// Add the objects
str += "Contains " + container.getChildren().size() + " objects(s)\n";
for (int i = 0; i < container.getChildren().size(); i++) {
AnnObject annObj = container.getChildren().get(i);
str += "Object: " + annObj.getFriendlyName() + " at ";
for (int j = 0; j < annObj.getPoints().size(); j++) {
LeadPointD pt = annObj.getPoints().get(j);
double x = pt.getX() / inch;
double y = pt.getY() / inch;
str += "(" + x + ", " + y + ") ";
}
str += "\n";
}
System.out.println(str);
var exists = str;
assertTrue(exists, true);
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document