← 返回所有博客文章

作为LEAD Technologies 25周年纪念的一部分,我们正在搞一个“25天收集25个项目来展示LEAD功能强度和易用性”的活动。今天要展示的项目来自于哈迪的分享。

clip_image001[7]

CustomAnnotations截图

它是做什么的

该C#的应用程序将利用LEADTOOLS第19版来创建多个自定义的注解。

所使用的功能

 

· Annotations

· Viewers

 

开发进程日志

大家好,我是哈迪。我要写这样一个示例应用程序,该程序可以对LEADTOOLS注解SDK的各种功能进行演示,更具体地说,是演示应该如何创建自定义注解和设计器。

我计划从编写一个使用默认注解和ImageViewer 的简单项目开始,这样,我就会有一个往下进行的基础。位于该目录\Examples\DotNet\CS\AnnotationsDemo下的WinForms注解的演示程序将会运行得很好。

既然已经有了一个创建好的示例项目,我就要开始自己的第一个自定义对象,AnnEllipseObject 。我想让该自定义对象最大程度地与AnnCircleObject类似,但它不能是椭圆,而必须是一个完美的圆形。

在开始之前,我需要创建一些新的目录,以使各项事务保持有序;然后,我会通过创建一个基于椭圆的新对象来启动这个进程。

接下来,我要控制的是拖放该对象的步骤,所以我需要基于AnnEllipseDrawDesigner来创建自己的自定义绘制设计器。我将覆盖OnPointerDown 和OnPointerMove 这两个事件,这样才可以控制该椭圆,并迫使它成为一个完美的圆。

在OnPointerDown 事件中,我设置了起始点和结束点;在OnPointerMove事件中,我通过一些计算来获得所绘制矩形的宽度和高度。因此,我可以迫使该环形具有相同的宽度和高度,从而创建一个完美的圆形。

我也不想对新的AnnCircleObject 进行修改,并将其更改为卵形或椭圆形,因此,我创建了一个基于AnnEllipseObjectRenderer的自定义的ObjectRenderer,并覆盖了RenderThumbs 事件,这样,就不会渲染到顶部、左侧、右侧和底部的调整大拇指。用户也就不能分别修改其高度和宽度。

接下来,我将创建一个基于文本的自定义对象,AnnNumberObject。该对象会是一个自定义的基于文本的注解对象,在拖放时,它将计算并显示出同一个AnnContainer 中其他AnnNumberObjects 的数目。

我是基于AnnNumberObject 上的AnnNumberObject ,以及AnnRectangleDrawDesigner上的绘制设计器来进行处理。在绘制设计器中,我覆盖了OnPointerDown事件,这样,它就会通过AnnContainer 中的每一个对象进行循环,且,在NumberObject 的Text 属性设置为该值时,每个发现的对象是逐一递增计数器的。

至于NumberObject,我也得创建一个基于AnnTextEditDesigner 的编辑设计器,这样,当对象的大小更改时,我才能使它有相应的字体大小变化。为了做到这一点,我覆盖了OnPointerDown 事件来捕捉NumberObject的边界与字体大小的起始值,然后,我又覆盖了OnEdit 事件,进行了一些数学运算来得到一个比值,从中可以看出应该如何编辑宽度,以及如何改变字体大小来适应它。

我创建的第三个对象是基于AnnPolylineObject的AnnStarObject 。该对象可以让用户点击并拖动自己的鼠标来设置一个完美的黄金星的圆心和半径。为了做到这一点,我创建了一个基于AnnPolylineDrawDesigner的自定义绘制设计器。我覆盖了OnPointerDown事件来设置该星形的中心,然后我覆盖了OnPointerMove事件,并且做了一些必要的运算来创建完美的星形。我计算了中心点与鼠标当前位置之间的距离,来得出其半径;然后,我用一个公式来找到该星形的10个点,并将它们添加到对象中。

我所添加的最后一个对象是基于AnnStampObject的AnnTinyStampObject。除了我用单击它来绘制邮票以外,该对象与StampObject是非常相似的。为了做到这一点,我创建了一个不基于另一个对象的绘制设计器的自定义的绘制设计器。我覆盖了OnPointerDown事件,并计算出基于鼠标位置的矩形的4个点,并将它们添加到那些微小的邮票对象,并在在OnPointerUp事件中结束运行设计器。

创建了我的所有对象以后,我不得不将它们添加到自己的AnnAutomationManager.AutomationObject列表,以便用户可以访问并使用它们。我创建了一个用来处理和添加对象的方法,它也可以用来设置ToolbarImage,以方便用户查找工具栏中的对象。

总体来说,我花了不到一天的时间来写这个项目,因为我手头有开始着手时使用的AnnotationDemo,以及LEADTOOLS文档中有关如何实现自定义注解的有用的教程:

Documentation: Implementing User-Defined Objects With LEADTOOLS Annotations in Windows Forms

 

下载该项目

该示例项目的源代码您可以点击这里进行下载。

想要运行这个例子,请将文件解压缩至:C:\LEADTOOLS 19\Examples\DotNet\CS 目录下。

支持

关于其他产品的更多信息,请访问我们的官方网站

欢迎下载免费的全功能评估版SDK,全功能试用版中有这个例子的全部源代码。

同时欢迎您使用评估版期间的免费技术支持