The base class for all the designers in the annotation toolkit.
public abstract class AnnDesigner Public MustInherit Class AnnDesigner
public ref class AnnDesigner abstract An AnnDesigner derived class controls the user interface functionality involved in drawing, editing or running an object. This class provides the basic functionality common to all the designers such as hooking into a container, clipping the mouse cursor, etc.
You pass an AnnContainer object to this class constructor. Then based on the exact designer functionality, it will hook into the various mouse events to draw a new, edit an existing (by moving, resizing, etc.) or run (if the container is in run user mode) an AnnObject.
using Leadtools.Windows.Controls;using Leadtools.Windows.Annotations;using Leadtools.Demos;using Leadtools.Help;/// Shows how to use designers to create and select annotation objectsclass MyWindow1 : Window{AnnContainer container;//AnnAutomationManager manager;ImageViewer viewer;AnnDesigner currentDesigner;public MyWindow1(string title){this.Title = title;this.Width = 500;this.Height = 200;viewer = new ImageViewer();// load an image into the viewer// fix this path to an existing image file on your systemviewer.Source = new BitmapImage(new Uri(Path.Combine(LEAD_VARS.ImagesDir, "cannon.jpg")));viewer.Width = double.NaN;viewer.Height = double.NaN;// create and set up the containercontainer = new AnnContainer();container.Width = viewer.Source.Width;container.Height = viewer.Source.Height;container.MouseLeftButtonDown += new MouseButtonEventHandler(container_MouseLeftButtonDown);container.MouseMove += new MouseEventHandler(container_MouseMove);container.MouseLeftButtonUp += new MouseButtonEventHandler(container_MouseLeftButtonUp);// Set the container as a content of viewerviewer.Content = container;// Create a panel with three buttonsStackPanel stackPanel = new StackPanel();DockPanel.SetDock(stackPanel, Dock.Top);// Create three buttonsButton buttonLine = new Button();buttonLine.Click += new RoutedEventHandler(buttonLine_Click);buttonLine.Content = "Line";stackPanel.Children.Add(buttonLine);Button buttonRectangle = new Button();buttonRectangle.Click += new RoutedEventHandler(buttonRectangle_Click);buttonRectangle.Content = "Rectangle";stackPanel.Children.Add(buttonRectangle);Button buttonSelect = new Button();buttonSelect.Click += new RoutedEventHandler(buttonSelect_Click);buttonSelect.Content = "Select";stackPanel.Children.Add(buttonSelect);// Add the viewerDockPanel panel = new DockPanel();panel.Children.Add(viewer);// set panel as contentthis.Content = panel;}private void buttonSelect_Click(object sender, System.EventArgs e){// Select button is clicked// cancel any draw designer runningif (currentDesigner != null && currentDesigner is AnnDrawDesigner){AnnDrawDesigner drawDesigner = currentDesigner as AnnDrawDesigner;drawDesigner.Cancel();currentDesigner = null;}}private void buttonLine_Click(object sender, RoutedEventArgs e){// Line button is clicked// first end any current designer (if any)EndDesigner();// start a new Line draw designerAnnLineDrawDesigner lineDrawDesigner = new AnnLineDrawDesigner(this.container);// set up the object template (a 2 pixels-wide pen)AnnLineObject lineObject = new AnnLineObject();lineObject.Stroke = Colors.Red;lineObject.StrokeThickness = 2.0;lineDrawDesigner.ObjectTemplate = lineObject;StartDrawDesigner(lineDrawDesigner);}private void buttonRectangle_Click(object sender, RoutedEventArgs e){// Rectangle button is clicked// first end any current designer (if any)EndDesigner();// start a new Rectangle draw designerAnnRectangleDrawDesigner rectangleDrawDesigner = new AnnRectangleDrawDesigner(this.container);// set up the object template (a 2 pixels-wide pen)AnnRectangleObject rectangleObject = new AnnRectangleObject();rectangleObject.Stroke = Colors.Red;rectangleObject.Fill = Colors.Yellow;rectangleObject.StrokeThickness = 2.0;rectangleDrawDesigner.ObjectTemplate = rectangleObject;StartDrawDesigner(rectangleDrawDesigner);}private void EndDesigner(){// ends any running designerif (currentDesigner != null){if (currentDesigner is AnnEditDesigner){AnnEditDesigner editDesigner = currentDesigner as AnnEditDesigner;editDesigner.End();}else if (currentDesigner is AnnDrawDesigner){AnnDrawDesigner drawDesigner = currentDesigner as AnnDrawDesigner;drawDesigner.Cancel();}}}private void StartDrawDesigner(AnnDrawDesigner drawDesigner){// set up the current designerdrawDesigner.Draw += new EventHandler<AnnDrawDesignerEventArgs>(OnDesignerDraw);currentDesigner = drawDesigner;}private void OnDesignerDraw(object sender, AnnDrawDesignerEventArgs e){// show information on the current draw operationConsole.Write("Status: {0}, Object: {1}, Coordinates:", e.OperationStatus, e.Object.GetType().Name);if (e.Object is AnnLineObject){AnnLineObject lineObject = e.Object as AnnLineObject;Console.WriteLine("Start Point: {{0},{1}}, EndPoint: {{2},{3}}",lineObject.Start.X, lineObject.Start.Y, lineObject.End.X, lineObject.End.Y);}else if (e.Object is AnnRectangleObject){AnnRectangleObject rectangleObject = e.Object as AnnRectangleObject;Console.WriteLine("Left: {0}", rectangleObject.Rect.Left);Console.WriteLine("Top: {0}", rectangleObject.Rect.Top);Console.WriteLine("Width: {0}", rectangleObject.Rect.Width);Console.WriteLine("Height: {0}", rectangleObject.Rect.Height);}}void container_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){// see if a designer is currently running, if so, let it handle this eventif (currentDesigner != null){e = new MouseButtonEventArgs(InputManager.Current.PrimaryMouseDevice,e.Timestamp,MouseButton.Left);currentDesigner.OnMouseLeftButtonDown(sender as AnnContainer, e);}if (!e.Handled){// the mouse click was ! handled by a designer// check if the click was on top of an existing object that we can start editingPoint pt = e.GetPosition(container);AnnObject obj = container.HitTest(pt);if (obj != null){// yes, start the edit designer for this objectif (obj is AnnLineObject){AnnLineEditDesigner lineEditDesigner = new AnnLineEditDesigner(obj as AnnLineObject, viewer.Content as AnnContainer);StartEditing(lineEditDesigner, obj, pt);lineEditDesigner.OnMouseLeftButtonDown(sender as AnnContainer, e);}else if (obj is AnnRectangleObject){AnnRectangleEditDesigner rectangleEditDesigner = new AnnRectangleEditDesigner(obj as AnnRectangleObject,viewer.Content as AnnContainer);StartEditing(rectangleEditDesigner, obj, pt);rectangleEditDesigner.OnMouseLeftButtonDown(sender as AnnContainer, e);}}}}private void StartEditing(AnnEditDesigner editDesigner, AnnObject obj, Point pt){// first end any running designersEndDesigner();// set up the current designereditDesigner.Edit += new EventHandler<AnnEditDesignerEventArgs>(OnDesignerEdit);editDesigner.RotateModifierKey = ModifierKeys.Shift;for (int i = 0; i < editDesigner.ControlPointCount; i++){// set up the edit designer control pointsSystem.Windows.Controls.Primitives.Thumb cp = new System.Windows.Controls.Primitives.Thumb();cp.Width = cp.Height = 10; ;cp.BorderBrush = Brushes.Blue;cp.BorderThickness = new Thickness(1.0);cp.Background = Brushes.White;editDesigner.ControlPoints[i] = cp;}editDesigner.Start();currentDesigner = editDesigner;}private void OnDesignerEdit(object sender, AnnEditDesignerEventArgs e){// show information on the current draw operationConsole.Write("Object: {0}, Operation: {1}, Status: {2}, ", e.Object.GetType().Name, e.Operation, e.OperationStatus);if (e.Operation == AnnEditDesignerOperation.MoveControlPoint)Console.WriteLine("Control Point index: {0}", e.MoveControlPointIndex);}void container_MouseMove(object sender, MouseEventArgs e){// see if a designer is currently running, if so, let it handle this eventif (currentDesigner != null){e = new MouseEventArgs(InputManager.Current.PrimaryMouseDevice,e.Timestamp);currentDesigner.OnMouseMove(sender as AnnContainer, e);}}void container_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){// see if a designer is currently running, if so, let it handle this eventif (currentDesigner != null){e = new MouseButtonEventArgs(InputManager.Current.PrimaryMouseDevice,e.Timestamp,MouseButton.Left);currentDesigner.OnMouseLeftButtonUp(sender as AnnContainer, e);}}}public void AnnDesigner_AnnDesigner(string title){MyWindow1 form = new MyWindow1(title);form.ShowDialog();}static class LEAD_VARS{public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";}
Imports Leadtools.Windows.ControlsImports Leadtools.Windows.Annotations''' Shows how to use designers to create and select annotation objectsPrivate Class MyWindow1 : Inherits WindowPrivate container As AnnContainer'AnnAutomationManager manager;Private viewer As ImageViewerPrivate currentDesigner As AnnDesignerPublic Sub New(ByVal title As String)Me.Title = titleMe.Width = 500Me.Height = 200viewer = New ImageViewer()' load an image into the viewer' fix this path to an existing image file on your systemviewer.Source = New BitmapImage(New Uri(Path.Combine(LEAD_VARS.ImagesDir, "cannon.jpg")))viewer.Width = Double.NaNviewer.Height = Double.NaN' create and set up the containercontainer = New AnnContainer()container.Width = viewer.Source.Widthcontainer.Height = viewer.Source.HeightAddHandler container.MouseLeftButtonDown, AddressOf container_MouseLeftButtonDownAddHandler container.MouseMove, AddressOf container_MouseMoveAddHandler container.MouseLeftButtonUp, AddressOf container_MouseLeftButtonUp' Set the container as a content of viewerviewer.Content = container' Create a panel with three buttonsDim stackPanel As StackPanel = New StackPanel()DockPanel.SetDock(stackPanel, Dock.Top)' Create three buttonsDim buttonLine As Button = New Button()AddHandler buttonLine.Click, AddressOf buttonLine_ClickbuttonLine.Content = "Line"stackPanel.Children.Add(buttonLine)Dim buttonRectangle As Button = New Button()AddHandler buttonRectangle.Click, AddressOf buttonRectangle_ClickbuttonRectangle.Content = "Rectangle"stackPanel.Children.Add(buttonRectangle)Dim buttonSelect As Button = New Button()AddHandler buttonSelect.Click, AddressOf buttonSelect_ClickbuttonSelect.Content = "Select"stackPanel.Children.Add(buttonSelect)' Add the viewerDim panel As DockPanel = New DockPanel()panel.Children.Add(viewer)' set panel as contentMe.Content = panelEnd SubPrivate Sub buttonSelect_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)' Select button is clicked' cancel any draw designer runningIf Not currentDesigner Is Nothing AndAlso TypeOf currentDesigner Is AnnDrawDesigner ThenDim drawDesigner As AnnDrawDesigner = DirectCast(currentDesigner, AnnDrawDesigner)drawDesigner.Cancel()currentDesigner = NothingEnd IfEnd SubPrivate Sub buttonLine_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)' Line button is clicked' first end any current designer (if any)EndDesigner()' start a new Line draw designerDim lineDrawDesigner As AnnLineDrawDesigner = New AnnLineDrawDesigner(Me.container)' set up the object template (a 2 pixels-wide pen)Dim lineObject As AnnLineObject = New AnnLineObject()lineObject.Stroke = Colors.RedlineObject.StrokeThickness = 2.0lineDrawDesigner.ObjectTemplate = lineObjectStartDrawDesigner(lineDrawDesigner)End SubPrivate Sub buttonRectangle_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)' Rectangle button is clicked' first end any current designer (if any)EndDesigner()' start a new Rectangle draw designerDim rectangleDrawDesigner As AnnRectangleDrawDesigner = New AnnRectangleDrawDesigner(Me.container)' set up the object template (a 2 pixels-wide pen)Dim rectangleObject As AnnRectangleObject = New AnnRectangleObject()rectangleObject.Stroke = Colors.RedrectangleObject.StrokeThickness = 2.0rectangleObject.Fill = Colors.YellowrectangleDrawDesigner.ObjectTemplate = rectangleObjectStartDrawDesigner(rectangleDrawDesigner)End SubPrivate Sub EndDesigner()' ends any running designerIf Not currentDesigner Is Nothing ThenIf TypeOf currentDesigner Is AnnEditDesigner ThenDim editDesigner As AnnEditDesigner = DirectCast(currentDesigner, AnnEditDesigner)editDesigner.End()ElseIf TypeOf currentDesigner Is AnnDrawDesigner ThenDim drawDesigner As AnnDrawDesigner = DirectCast(currentDesigner, AnnDrawDesigner)drawDesigner.Cancel()End IfEnd IfEnd SubPrivate Sub StartDrawDesigner(ByVal drawDesigner As AnnDrawDesigner)' set up the current designerAddHandler drawDesigner.Draw, AddressOf OnDesignerDrawcurrentDesigner = drawDesignerEnd SubPrivate Sub OnDesignerDraw(ByVal sender As Object, ByVal e As AnnDrawDesignerEventArgs)' show information on the current draw operationConsole.Write("Status: {0}, Object: {1}, Coordinates:", e.OperationStatus, e.Object.GetType().Name)If TypeOf e.Object Is AnnLineObject ThenDim lineObject As AnnLineObject = DirectCast(e.Object, AnnLineObject)Console.WriteLine("Start Point: {{0},{1}}, EndPoint: {{2},{3}}",lineObject.Start.X, lineObject.Start.Y, lineObject.End.X, lineObject.End.Y)ElseIf TypeOf e.Object Is AnnRectangleObject ThenDim rectangleObject As AnnRectangleObject = DirectCast(e.Object, AnnRectangleObject)Console.WriteLine("Left: {0}", rectangleObject.Rect.Left)Console.WriteLine("Top: {0}", rectangleObject.Rect.Top)Console.WriteLine("Width: {0}", rectangleObject.Rect.Width)Console.WriteLine("Height: {0}", rectangleObject.Rect.Height)End IfEnd SubPrivate Sub container_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)' see if a designer is currently running, if so, let it handle this eventIf Not currentDesigner Is Nothing Thene = New MouseButtonEventArgs(InputManager.Current.PrimaryMouseDevice, e.Timestamp, MouseButton.Left)currentDesigner.OnMouseLeftButtonDown(DirectCast(sender, AnnContainer), e)End IfIf (Not e.Handled) Then' the mouse click was ! handled by a designer' check if the click was on top of an existing object that we can start editingDim pt As System.Windows.Point = e.GetPosition(container)Dim obj As AnnObject = container.HitTest(pt)If Not obj Is Nothing Then' yes, start the edit designer for this objectIf TypeOf obj Is AnnLineObject ThenDim lineEditDesigner As New AnnLineEditDesigner(DirectCast(obj, AnnLineObject), DirectCast(viewer.Content, AnnContainer))StartEditing(lineEditDesigner, obj, pt)lineEditDesigner.OnMouseLeftButtonDown(DirectCast(sender, AnnContainer), e)ElseIf TypeOf obj Is AnnRectangleObject ThenDim rectangleEditDesigner As New AnnRectangleEditDesigner(DirectCast(obj, AnnRectangleObject),DirectCast(viewer.Content, AnnContainer))StartEditing(rectangleEditDesigner, obj, pt)rectangleEditDesigner.OnMouseLeftButtonDown(DirectCast(sender, AnnContainer), e)End IfEnd IfEnd IfEnd SubPrivate Sub StartEditing(ByVal editDesigner As AnnEditDesigner, ByVal obj As AnnObject, ByVal pt As System.Windows.Point)' first end any running designersEndDesigner()' set up the current designerAddHandler editDesigner.Edit, AddressOf OnDesignerEditeditDesigner.RotateModifierKey = ModifierKeys.ShiftDim i As Integer = 0Do While i < editDesigner.ControlPointCount' set up the edit designer control pointsDim cp As System.Windows.Controls.Primitives.Thumb = New System.Windows.Controls.Primitives.Thumb()cp.Width = 10cp.Height = 10cp.BorderBrush = Brushes.Bluecp.BorderThickness = New Thickness(1.0)cp.Background = Brushes.WhiteeditDesigner.ControlPoints(i) = cpi += 1LoopeditDesigner.Start()currentDesigner = editDesignerEnd SubPrivate Sub OnDesignerEdit(ByVal sender As Object, ByVal e As AnnEditDesignerEventArgs)' show information on the current draw operationConsole.Write("Object: {0}, Operation: {1}, Status: {2}, ", e.Object.GetType().Name, e.Operation, e.OperationStatus)If e.Operation = AnnEditDesignerOperation.MoveControlPoint ThenConsole.WriteLine("Control Point index: {0}", e.MoveControlPointIndex)End IfEnd SubPrivate Sub container_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)' see if a designer is currently running, if so, let it handle this eventIf Not currentDesigner Is Nothing Thene = New MouseEventArgs(InputManager.Current.PrimaryMouseDevice, e.Timestamp)currentDesigner.OnMouseMove(DirectCast(sender, AnnContainer), e)End IfEnd SubPrivate Sub container_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)' see if a designer is currently running, if so, let it handle this eventIf Not currentDesigner Is Nothing Thene = New MouseButtonEventArgs(InputManager.Current.PrimaryMouseDevice, e.Timestamp, MouseButton.Left)currentDesigner.OnMouseLeftButtonUp(DirectCast(sender, AnnContainer), e)End IfEnd SubEnd ClassPublic Sub AnnDesigner_AnnDesigner(ByVal title As String)Dim form As MyWindow1 = New MyWindow1(title)form.ShowDialog()End SubPublic NotInheritable Class LEAD_VARSPublic Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"End Class
using Leadtools.Windows.Controls;using Leadtools.Windows.Annotations;using Leadtools.Examples;//using Leadtools.Help;/// Shows how to use designers to create and select annotation objectsclass MyWindow1 : ChildWindow{AnnContainer container;//AnnAutomationManager manager;ImageViewer viewer;AnnDesigner currentDesigner;public MyWindow1(string title){this.Title = title;this.Width = 500;this.Height = 200;viewer = new ImageViewer();// load an image into the viewer// fix this path to an existing image file on your systemviewer.Source = new BitmapImage(new Uri(LeadtoolsExamples.Common.ImagesPath.Path + "ScarletMacaws.jpg"));viewer.Width = double.NaN;viewer.Height = double.NaN;// create and set up the containercontainer = new AnnContainer();container.Width = ((BitmapSource)viewer.Source).PixelWidth;container.Height = ((BitmapSource)viewer.Source).PixelHeight;container.MouseLeftButtonDown += new MouseButtonEventHandler(container_MouseLeftButtonDown);container.MouseMove += new MouseEventHandler(container_MouseMove);container.MouseLeftButtonUp += new MouseButtonEventHandler(container_MouseLeftButtonUp);// Set the container as a content of viewerviewer.Content = container;// Create a panel with three buttonsStackPanel stackPanel = new StackPanel();// Create three buttonsButton buttonLine = new Button();buttonLine.Click += new RoutedEventHandler(buttonLine_Click);buttonLine.Content = "Line";stackPanel.Children.Add(buttonLine);Button buttonRectangle = new Button();buttonRectangle.Click += new RoutedEventHandler(buttonRectangle_Click);buttonRectangle.Content = "Rectangle";stackPanel.Children.Add(buttonRectangle);Button buttonSelect = new Button();buttonSelect.Click += new RoutedEventHandler(buttonSelect_Click);buttonSelect.Content = "Select";stackPanel.Children.Add(buttonSelect);// Add the viewerStackPanel panel = new StackPanel();panel.Children.Add(viewer);// set panel as contentthis.Content = panel;}private void buttonSelect_Click(object sender, System.EventArgs e){// Select button is clicked// cancel any draw designer runningif (currentDesigner != null && currentDesigner is AnnDrawDesigner){AnnDrawDesigner drawDesigner = currentDesigner as AnnDrawDesigner;drawDesigner.Cancel();currentDesigner = null;}}private void buttonLine_Click(object sender, RoutedEventArgs e){// Line button is clicked// first end any current designer (if any)EndDesigner();// start a new Line draw designerAnnLineDrawDesigner lineDrawDesigner = new AnnLineDrawDesigner(this.container);// set up the object template (a 2 pixels-wide pen)AnnLineObject lineObject = new AnnLineObject();lineObject.Stroke = Colors.Red;lineObject.StrokeThickness = 2.0;lineDrawDesigner.ObjectTemplate = lineObject;StartDrawDesigner(lineDrawDesigner);}private void buttonRectangle_Click(object sender, RoutedEventArgs e){// Rectangle button is clicked// first end any current designer (if any)EndDesigner();// start a new Rectangle draw designerAnnRectangleDrawDesigner rectangleDrawDesigner = new AnnRectangleDrawDesigner(this.container);// set up the object template (a 2 pixels-wide pen)AnnRectangleObject rectangleObject = new AnnRectangleObject();rectangleObject.Stroke = Colors.Red;rectangleObject.Fill = Colors.Yellow;rectangleObject.StrokeThickness = 2.0;rectangleDrawDesigner.ObjectTemplate = rectangleObject;StartDrawDesigner(rectangleDrawDesigner);}private void EndDesigner(){// ends any running designerif (currentDesigner != null){if (currentDesigner is AnnEditDesigner){AnnEditDesigner editDesigner = currentDesigner as AnnEditDesigner;editDesigner.End();}else if (currentDesigner is AnnDrawDesigner){AnnDrawDesigner drawDesigner = currentDesigner as AnnDrawDesigner;drawDesigner.Cancel();}}}private void StartDrawDesigner(AnnDrawDesigner drawDesigner){// set up the current designerdrawDesigner.Draw += new EventHandler<AnnDrawDesignerEventArgs>(OnDesignerDraw);currentDesigner = drawDesigner;}private void OnDesignerDraw(object sender, AnnDrawDesignerEventArgs e){// show information on the current draw operationConsole.Write("Status: {0}, Object: {1}, Coordinates:", e.OperationStatus, e.Object.GetType().Name);if (e.Object is AnnLineObject){AnnLineObject lineObject = e.Object as AnnLineObject;Console.WriteLine("Start Point:" +"{{0},{1}}, EndPoint: {{2},{3}}", lineObject.Start.X, lineObject.Start.Y, lineObject.End.X, lineObject.End.Y);}else if (e.Object is AnnRectangleObject){AnnRectangleObject rectangleObject = e.Object as AnnRectangleObject;Console.WriteLine("Left: {0}", rectangleObject.Rect.Left);Console.WriteLine("Top: {0}", rectangleObject.Rect.Top);Console.WriteLine("Width: {0}", rectangleObject.Rect.Width);Console.WriteLine("Height: {0}", rectangleObject.Rect.Height);}}void container_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){// see if a designer is currently running, if so, let it handle this eventif (currentDesigner != null){currentDesigner.OnMouseLeftButtonDown(sender as AnnContainer, e);}if (!e.Handled){// the mouse click was ! handled by a designer// check if the click was on top of an existing object that we can start editingPoint pt = e.GetPosition(container);AnnObject obj = container.HitTest(pt);if (obj != null){// yes, start the edit designer for this objectif (obj is AnnLineObject){AnnLineEditDesigner lineEditDesigner = new AnnLineEditDesigner(obj as AnnLineObject, viewer.Content as AnnContainer);StartEditing(lineEditDesigner, obj, pt);lineEditDesigner.OnMouseLeftButtonDown(sender as AnnContainer, e);}else if (obj is AnnRectangleObject){AnnRectangleEditDesigner rectangleEditDesigner = new AnnRectangleEditDesigner(obj as AnnRectangleObject,viewer.Content as AnnContainer);StartEditing(rectangleEditDesigner, obj, pt);rectangleEditDesigner.OnMouseLeftButtonDown(sender as AnnContainer, e);}}}}private void StartEditing(AnnEditDesigner editDesigner, AnnObject obj, Point pt){// first end any running designersEndDesigner();// set up the current designereditDesigner.Edit += new EventHandler<AnnEditDesignerEventArgs>(OnDesignerEdit);editDesigner.RotateModifierKey = ModifierKeys.Shift;for (int i = 0; i < editDesigner.ControlPointCount; i++){// set up the edit designer control pointsSystem.Windows.Controls.Primitives.Thumb cp = new System.Windows.Controls.Primitives.Thumb();cp.Width = cp.Height = 10; ;cp.BorderBrush = new SolidColorBrush(Colors.Blue);cp.BorderThickness = new Thickness(1.0);cp.Background = new SolidColorBrush(Colors.White);editDesigner.ControlPoints[i] = cp;}editDesigner.Start();currentDesigner = editDesigner;}private void OnDesignerEdit(object sender, AnnEditDesignerEventArgs e){// show information on the current draw operationConsole.Write("Object: {0}, Operation: {1}, Status: {2}, ", e.Object.GetType().Name, e.Operation, e.OperationStatus);if (e.Operation == AnnEditDesignerOperation.MoveControlPoint)Console.WriteLine("Control Point index: {0}", e.MoveControlPointIndex);}void container_MouseMove(object sender, MouseEventArgs e){// see if a designer is currently running, if so, let it handle this eventif (currentDesigner != null){currentDesigner.OnMouseMove(sender as AnnContainer, e);}}void container_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){// see if a designer is currently running, if so, let it handle this eventif (currentDesigner != null){currentDesigner.OnMouseLeftButtonUp(sender as AnnContainer, e);}}}public void AnnDesigner_AnnDesigner(string title){MyWindow1 form = new MyWindow1(title);form.Show();}
Imports Leadtools.Windows.ControlsImports Leadtools.Windows.Annotations''' Shows how to use designers to create and select annotation objectsPrivate Class MyWindow1 : Inherits ChildWindowPrivate container As AnnContainer'AnnAutomationManager manager;Private viewer As ImageViewerPrivate currentDesigner As AnnDesignerPublic Sub New(ByVal title As String)Me.Title = titleMe.Width = 500Me.Height = 200viewer = New ImageViewer()' load an image into the viewer' fix this path to an existing image file on your systemviewer.Source = New BitmapImage(New Uri(LeadtoolsExamples.Common.ImagesPath.Path & "ScarletMacaws.jpg"))viewer.Width = Double.NaNviewer.Height = Double.NaN' create and set up the containercontainer = New AnnContainer()container.Width = (CType(viewer.Source, BitmapSource)).PixelWidthcontainer.Height = (CType(viewer.Source, BitmapSource)).PixelHeightAddHandler container.MouseLeftButtonDown, AddressOf container_MouseLeftButtonDownAddHandler container.MouseMove, AddressOf container_MouseMoveAddHandler container.MouseLeftButtonUp, AddressOf container_MouseLeftButtonUp' Set the container as a content of viewerviewer.Content = container' Create a panel with three buttonsDim stackPanel As StackPanel = New StackPanel()' Create three buttonsDim buttonLine As Button = New Button()AddHandler buttonLine.Click, AddressOf buttonLine_ClickbuttonLine.Content = "Line"stackPanel.Children.Add(buttonLine)Dim buttonRectangle As Button = New Button()AddHandler buttonRectangle.Click, AddressOf buttonRectangle_ClickbuttonRectangle.Content = "Rectangle"stackPanel.Children.Add(buttonRectangle)Dim buttonSelect As Button = New Button()AddHandler buttonSelect.Click, AddressOf buttonSelect_ClickbuttonSelect.Content = "Select"stackPanel.Children.Add(buttonSelect)' Add the viewerDim panel As StackPanel = New StackPanel()panel.Children.Add(viewer)' set panel as contentMe.Content = panelEnd SubPrivate Sub buttonSelect_Click(ByVal sender As Object, ByVal e As System.EventArgs)' Select button is clicked' cancel any draw designer runningIf Not currentDesigner Is Nothing AndAlso TypeOf currentDesigner Is AnnDrawDesigner ThenDim drawDesigner As AnnDrawDesigner = TryCast(currentDesigner, AnnDrawDesigner)drawDesigner.Cancel()currentDesigner = NothingEnd IfEnd SubPrivate Sub buttonLine_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)' Line button is clicked' first end any current designer (if any)EndDesigner()' start a new Line draw designerDim lineDrawDesigner As AnnLineDrawDesigner = New AnnLineDrawDesigner(Me.container)' set up the object template (a 2 pixels-wide pen)Dim lineObject As AnnLineObject = New AnnLineObject()lineObject.Stroke = Colors.RedlineObject.StrokeThickness = 2.0lineDrawDesigner.ObjectTemplate = lineObjectStartDrawDesigner(lineDrawDesigner)End SubPrivate Sub buttonRectangle_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)' Rectangle button is clicked' first end any current designer (if any)EndDesigner()' start a new Rectangle draw designerDim rectangleDrawDesigner As AnnRectangleDrawDesigner = New AnnRectangleDrawDesigner(Me.container)' set up the object template (a 2 pixels-wide pen)Dim rectangleObject As AnnRectangleObject = New AnnRectangleObject()rectangleObject.Stroke = Colors.RedrectangleObject.Fill = Colors.YellowrectangleObject.StrokeThickness = 2.0rectangleDrawDesigner.ObjectTemplate = rectangleObjectStartDrawDesigner(rectangleDrawDesigner)End SubPrivate Sub EndDesigner()' ends any running designerIf Not currentDesigner Is Nothing ThenIf TypeOf currentDesigner Is AnnEditDesigner ThenDim editDesigner As AnnEditDesigner = TryCast(currentDesigner, AnnEditDesigner)editDesigner.End()ElseIf TypeOf currentDesigner Is AnnDrawDesigner ThenDim drawDesigner As AnnDrawDesigner = TryCast(currentDesigner, AnnDrawDesigner)drawDesigner.Cancel()End IfEnd IfEnd SubPrivate Sub StartDrawDesigner(ByVal drawDesigner As AnnDrawDesigner)' set up the current designerAddHandler drawDesigner.Draw, AddressOf OnDesignerDrawcurrentDesigner = drawDesignerEnd SubPrivate Sub OnDesignerDraw(ByVal sender As Object, ByVal e As AnnDrawDesignerEventArgs)' show information on the current draw operationConsole.Write("Status: {0}, Object: {1}, Coordinates:", e.OperationStatus, e.Object.GetType().Name)If TypeOf e.Object Is AnnLineObject ThenDim lineObject As AnnLineObject = TryCast(e.Object, AnnLineObject)Console.WriteLine("Start Point: {{0},{1}}, EndPoint: {{2},{3}}",lineObject.Start.X, lineObject.Start.Y, lineObject.End.X, lineObject.End.Y)ElseIf TypeOf e.Object Is AnnRectangleObject ThenDim rectangleObject As AnnRectangleObject = TryCast(e.Object, AnnRectangleObject)Console.WriteLine("Left: {0}", rectangleObject.Rect.Left)Console.WriteLine("Top: {0}", rectangleObject.Rect.Top)Console.WriteLine("Width: {0}", rectangleObject.Rect.Width)Console.WriteLine("Height: {0}", rectangleObject.Rect.Height)End IfEnd SubPrivate Sub container_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)' see if a designer is currently running, if so, let it handle this eventIf Not currentDesigner Is Nothing ThencurrentDesigner.OnMouseLeftButtonDown(TryCast(sender, AnnContainer), e)End IfIf (Not e.Handled) Then' the mouse click was ! handled by a designer' check if the click was on top of an existing object that we can start editingDim pt As Point = e.GetPosition(container)Dim obj As AnnObject = container.HitTest(pt)If Not obj Is Nothing Then' yes, start the edit designer for this objectIf TypeOf obj Is AnnLineObject ThenDim lineEditDesigner As AnnLineEditDesigner = New AnnLineEditDesigner(TryCast(obj, AnnLineObject),TryCast(viewer.Content, AnnContainer))StartEditing(lineEditDesigner, obj, pt)lineEditDesigner.OnMouseLeftButtonDown(TryCast(sender, AnnContainer), e)ElseIf TypeOf obj Is AnnRectangleObject ThenDim rectangleEditDesigner As AnnRectangleEditDesigner = New AnnRectangleEditDesigner(TryCast(obj, AnnRectangleObject),TryCast(viewer.Content, AnnContainer))StartEditing(rectangleEditDesigner, obj, pt)rectangleEditDesigner.OnMouseLeftButtonDown(TryCast(sender, AnnContainer), e)End IfEnd IfEnd IfEnd SubPrivate Sub StartEditing(ByVal editDesigner As AnnEditDesigner, ByVal obj As AnnObject, ByVal pt As Point)' first end any running designersEndDesigner()' set up the current designerAddHandler editDesigner.Edit, AddressOf OnDesignerEditeditDesigner.RotateModifierKey = ModifierKeys.ShiftDim i As Integer = 0Do While i < editDesigner.ControlPointCount' set up the edit designer control pointsDim cp As System.Windows.Controls.Primitives.Thumb = New System.Windows.Controls.Primitives.Thumb()cp.Width = 10cp.Height = 10cp.BorderBrush = New SolidColorBrush(Colors.Blue)cp.BorderThickness = New Thickness(1.0)cp.Background = New SolidColorBrush(Colors.White)editDesigner.ControlPoints(i) = cpi += 1LoopeditDesigner.Start()currentDesigner = editDesignerEnd SubPrivate Sub OnDesignerEdit(ByVal sender As Object, ByVal e As AnnEditDesignerEventArgs)' show information on the current draw operationConsole.Write("Object: {0}, Operation: {1}, Status: {2}, ", e.Object.GetType().Name, e.Operation, e.OperationStatus)If e.Operation = AnnEditDesignerOperation.MoveControlPoint ThenConsole.WriteLine("Control Point index: {0}", e.MoveControlPointIndex)End IfEnd SubPrivate Sub container_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)' see if a designer is currently running, if so, let it handle this eventIf Not currentDesigner Is Nothing ThencurrentDesigner.OnMouseMove(TryCast(sender, AnnContainer), e)End IfEnd SubPrivate Sub container_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)' see if a designer is currently running, if so, let it handle this eventIf Not currentDesigner Is Nothing ThencurrentDesigner.OnMouseLeftButtonUp(TryCast(sender, AnnContainer), e)End IfEnd SubEnd ClassPublic Sub AnnDesigner_AnnDesigner(ByVal title As String)Dim form As MyWindow1 = New MyWindow1(title)form.Show()End Sub
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
