实现用户定义的对象与LEADTOOLS注释

总结

您可以轻松地创建自己的注释LEADTOOLS注释的对象框架。本教程展示了如何创建两个新注释对象和如何编写所需的设计师为他们的对象可以插入LEADTOOLS注释自动化框架。

  1. 首先创建一个新的HTML文件以下标记:

    < !DOCTYPE html >< html xmlns =“http://www.w3.org/1999/xhtml”><头><标题>实现用户定义的对象与LEADTOOLS注释< /名称>< meta http-equiv =“X-UA-Compatible”内容=“IE = 9”/ >< meta http-equiv =“内容类型”内容=“text / html;charset = utf - 8”/ >< meta name =“视口”内容=“宽度=设备宽度,初始= 1.0,user-scalable = 0,最小规模= 1.0,最大范围= 1.0 "/ ><时尚> # imageViewerDiv{边界:1 px固体# 000000;宽度:600 px;身高:400 px;background - color: # 7 f7f7f;}> < /风格< / >头<身体onload =“新()”>< div id =“imageViewerDiv”> < / div >< /身体>< / html >

  2. 添加脚本标签,标签在页面的头,LEADTOOLS JavaScript库。注意:在这个例子中,LEADTOOLS. js文件位于一个自由子文件夹:

    <脚本类型=“text / javascript”src =“lib / Leadtools.js”> < /脚本><脚本类型=“text / javascript”src =“lib / Leadtools.Controls.js”> < /脚本><脚本类型=“text / javascript”src =“lib / Leadtools.Annotations.Engine.js”> < /脚本><脚本类型=“text / javascript”src =“lib / Leadtools.Annotations.Rendering.JavaScript.js”> < /脚本><脚本类型=“text / javascript”src =“lib / Leadtools.Annotations.Designers.js”> < /脚本><脚本类型=“text / javascript”src =“lib / Leadtools.Annotations.Automation.js”> < /脚本><脚本类型=“text / javascript”src =“lib / Leadtool188金宝搏beat体育官网s.Demos.js”> < /脚本><脚本类型=“text / javascript”src =“lib / Leadtool188金宝搏beat体育官网s.Demos.Annotations.js”> < /脚本>

  3. 要创建的对象是一个简单的对象,一个三角形。这个对象有三个点三角形的结束点,它会使用一个中风的三角形边缘和内部填充。

    我们需要创建一个自定义注释对象类型。因为一个三角形是一个多边形只有三分,我们可以得到的AnnPolylineObject类。将下面的代码添加到您的脚本标记:

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / AnnTriangleObjectAnnTriangleObject =函数AnnTriangleObject () {AnnTriangleObject.initializeBase ();.isClosed =真正的;/ /三角形是一个封闭的图.setId (-99);/ /设置对象ID}AnnTriangleObject。原型= {创建:函数AnnTriangleObject美元create () {/ /定义自定义注释对象(三角形是一个多段线只有3分)返回AnnTriangleObject ();}}AnnTriangleObject.registerClass (“AnnTriangleObject”,lt.Annotations.Engine.AnnPolylineObject);

  4. 因为没有现有的绘制和编辑设计师可以使用AnnTriangleObject类,需要创建一个。首先,创建设计师画类,来自AnnDrawDesigner。将下面的代码添加到您的脚本标记,之后AnnTriangleObject代码:

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / AnnTriangleDrawDesignerAnnTriangleDrawDesigner =函数AnnTriangleDrawDesigner (automationControl容器,annPolyineObject) {AnnTriangleDrawDesigner.initializeBase ((automationControl容器,annPolyineObject]);}AnnTriangleDrawDesigner。原型= {/ /覆盖onPointerDown三角形法和加3分onPointerDown:函数AnnTriangleDrawDesigner onPointerDown美元(发送者,e) {var处理= AnnTriangleDrawDesigner.callBaseMethod (,“onPointerDown”(发送者,e));如果(.targetObject.points。数< 3)如果(e。按钮= = = lt.Annotations.Engine.AnnMouseButton.left) {如果(.startWorking ()).targetObject.points.add (e.location);处理=真正的;}返回处理;},/ /覆盖onPointerUp方法和所绘制的图纸3点时结束onPointerUp:函数AnnTriangleDrawDesigner onPointerUp美元(发送者,e) {var处理= AnnTriangleDrawDesigner.callBaseMethod (,“onPointerUp”(发送者,e));处理=真正的;如果(.targetObject.points。数> = 3).endWorking ();.invalidate (lt.LeadRectD.empty);返回处理;}}AnnTriangleDrawDesigner.registerClass (“AnnTriangleDrawDesigner”,lt.Annotations.Designers.AnnDrawDesigner);

  5. 接下来,创建编辑设计类,派生的AnnPolylineEditDesigner类。后,将下面的代码添加到您的脚本AnnTriangleDrawDesigner代码。注意,这个对象与LEADTOOLS设计工作AnnHtml5RenderingEngine渲染引擎。的代码创建一个渲染引擎AnnSvgRenderingEngine本教程的最后实现。

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / AnnTriangleEditDesigner/ /不需要这个类的定制。AnnTriangleEditDesigner =函数AnnTriangleEditDesigner (automationControl容器,annPolylineObject) {AnnTriangleEditDesigner.initializeBase ((automationControl容器,annPolylineObject]);}AnnTriangleEditDesigner.registerClass (“AnnTriangleEditDesigner”,lt.Annotations.Designers.AnnPolylineEditDesigner);

  6. 现在创建一个自定义渲染器AnnTriangleObject,来自AnnPolylineEditDesigner类。后,将下面的代码添加到您的脚本AnnTriangleDrawDesigner代码:

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / AnnTriangleRenderer (HTML5画布版)AnnTriangleRenderer =函数AnnTriangleRenderer () {AnnTriangleRenderer.initializeBase ();}AnnTriangleRenderer。原型= {/ /覆盖渲染方法为了画3点为用户创建它们。呈现:函数AnnTriangleRenderer美元呈现(annObject mapper) {AnnTriangleRenderer.callBaseMethod (,“呈现”映射器,annObject]);/ /如果图纸已经完成,使基类AnnPolylineObjectRenderer处理工作如果(annObject.points。数= = = 3)返回;var引擎= Type.safeCast (.renderingEngine lt.Annotations.Rendering.AnnHtml5RenderingEngine);如果(引擎! =){var上下文= engine.context;如果(上下文! =){context.save ();var点= mapper.pointsFromContainerCoordinates (annObject.points.toArray (), annObject.fixedStateOperations);lt.Annotations.Rendering.AnnHtml5RenderingEngine。setStroke(上下文,lt.Annotations.Engine.AnnStroke.create (lt.Annotations.Engine.AnnSolidColorBrush.create (“绿色”),lt.LeadLengthD.create (1)));context.beginPath ();(varx = 0;x < points.length;x + +) {var点=点[x];如果(! point.isEmpty) {var矩形= lt.LeadRectD.create(点。x - 10点。y - 10、20、20);lt.Annotations.Rendering.AnnHtml5RenderingEngine。drawEllipse(上下文、矩形);}}context.closePath ();context.stroke ();context.restore ();}}}}AnnTriangleRenderer.registerClass (“AnnTriangleRenderer”,lt.Annotations.Rendering.AnnPolylineObjectRenderer);

  7. 最后一步是编写代码,胶水LEADTOOLS imageview和自动注释对象在一起。

    / /共享变量var自动化;/ /创建自定义自动化对象和钩的设计师函数createTriangleAutomationObject (annObject) {/ /创建自动化对象varautomationObj =lt.Annotations.Automation.AnnAutomationObject ();automationObj。id = annObject.id;automationObj.name =“三角形”;automationObj。drawDesignerType = AnnTriangleDrawDesigner;/ /自定义画钩设计师automationObj。editDesignerType = AnnTriangleEditDesigner;/ /钩自定义编辑设计师automationObj.runDesignerType = lt.Annotations.Designers.AnnRunDesigner;/ /得到当前的渲染引擎varrenderingEngine = annAutomation.manager.renderingEngine;/ /设置拇指varannTriangleRenderer =AnnTriangleRenderer ();varannPolylineRenderer = renderingEngine.renderers [lt.Annotations.Engine.AnnObject.polylineObjectId];annTriangleRenderer。locationsThumbStyle = annPolylineRenderer.locationsThumbStyle;annTriangleRenderer。rotateCenterThumbStyle = annPolylineRenderer.rotateCenterThumbStyle;annTriangleRenderer。rotateGripperThumbStyle = annPolylineRenderer.rotateGripperThumbStyle;renderingEngine.renderers [annObject。id] = annTriangleRenderer;/ /自定义渲染器automationObj。objectTemplate = annObject;返回automationObj;}函数setupTriangleAnnotation () {/ /创建三角形对象var三角=AnnTriangleObject ();三角形。填补= lt.Annotations.Engine.AnnSolidColorBrush.create (“蓝色”);/ /创建一个用户定义的自动化对象varautomationObj = createTriangleAutomationObject(三角形);annAutomation.manager.objects.add (automationObj);}函数新(){/ /创建查看器varcreateOptions =lt.Controls.ImageViewerCreateOptions (. getelementbyid (“imageViewerDiv”));varimageview =lt.Controls.ImageViewer (createOptions);/ /表项改变事件设置容器的大小和当前对象id当映像被加载imageViewer.itemChanged.add (imageViewer_ItemChanged);/ /设置图像URL -负载使用浏览器支持imageview。imageUrl =“https://demo.leadtools.com/images/jpeg/cactus.jpg”;/ /符合内的图像查看器imageViewer.zoom (lt.Controls.ControlSizeMode。健康,1.0,imageViewer.defaultZoomOrigin);/ /创建注释自动化控制和附加一个图像浏览器varimageViewerAutomationControl =lt.188金宝搏beat体育官网Demos.Annotations.ImageViewerAutomationControl ();imageViewerAutomationControl。imageview = imageview;/ /创建automation manager和默认对象var经理=lt.Annotations.Automation.AnnAutomationManager ();manager.createDefaultObjects ();/ /创建一个注释的渲染引擎,并将其绑定到自动化管理器/ /在这个例子中,使用一个HTML5 5渲染引擎。/ /替换这个AnnSvgRenderingEngine使用SVG引擎。varrenderingEngine =lt.Annotations.Rendering.AnnHtml5RenderingEngine ();经理。renderingEngine = renderingEngine;/ /创建一个自动化交互模式实例并结合自动化控制varautomationInteractiveMode =lt.188金宝搏beat体育官网Demos.Annotations.AutomationInteractiveMode ();automationInteractiveMode。automationControl = imageViewerAutomationControl;/ /添加自动化交互模式列表和观众互动模式启用它imageViewer.interactiveModes.beginUpdate ();imageViewer.interactiveModes.add (automationInteractiveMode);automationInteractiveMode。isEnabled =真正的;imageViewer.interactiveModes.endUpdate ();/ /创建注释自动化对象annAutomation =lt.Annotations.Automation。AnnAutomation(经理,imageViewerAutomationControl);/ /设置三角形注释setupTriangleAnnotation ();/ /激活注释自动化annAutomation。活跃的=真正的;}函数imageViewer_ItemChanged(发送者,e) {如果(e。原因= = lt.Controls.ImageViewerItemChangedReason.url) {/ /加载图像大小var图象尺寸= sender.activeItem.imageSize;/ /设置容器大小和加载图像大小var容器= annAutomation.container;容器。大小= container.mapper.sizeToContainerCoordinates (lt.LeadSizeD.create(图象尺寸。宽度,imageSize.height));/ /设置当前对象ID的三角形annAutomation.manager。currentObjectId = -99;}}

  8. 保存您的HTML文件和加载在你最喜欢的浏览器。然后,单击/利用三个不同的点在画一个查看器控制AnnTriangleObject

  9. 使用自定义AnnTriangleObject与LEADTOOLSAnnSvgRenderingEngine第6步,更新如下:

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / AnnTriangleRenderer (SVG版本)AnnTriangleRenderer =函数AnnTriangleRenderer () {._activeId = 2美元;AnnTriangleRenderer.initializeBase ();}AnnTriangleRenderer。原型= {setActivePolyLineID:函数AnnTriangleRenderer setActivePolyLineID美元(Id) {._activeId 2美元= Id;},createObject:函数AnnTriangleRenderer createObject美元(annObject) {AnnTriangleRenderer.callBaseMethod (,“createObject”[annObject]);varg = lt.Annotations.Rendering.AnnSvgHelpers.getElementById (annObject.get_stateId ());var多段线= lt.Annotations.Rendering.AnnSvgHelpers.createPolyline ();varpolylineId = lt.Annotations.Rendering.AnnSvgHelpers.getPolylineId (annObject.get_stateId ());多段线。id = polylineId;varclipPathPolyline = lt.Annotations.Rendering.AnnSvgHelpers.createPolyline ();varclipPathId = lt.Annotations.Rendering.AnnSvgHelpers.getClipPathId (annObject.get_stateId ());clipPathPolyline。id = lt.Annotations.Rendering.AnnSvgHelpers.getPolylineId (clipPathId);var元素= lt.Annotations.Rendering.AnnSvgHelpers.getElementById (clipPathId);element.appendChild (clipPathPolyline);.setActivePolyLineID ();g.appendChild(多线);},removeObject:函数AnnTriangleRenderer removeObject美元(annObject) {varid = annObject.get_stateId ();如果(! String.isNullOrEmpty (id)) {varclipPathId = lt.Annotations.Rendering.AnnSvgHelpers.getClipPathId (annObject.get_stateId ());如果(! String.isNullOrEmpty (clipPathId)) {var元素= lt.Annotations.Rendering.AnnSvgHelpers.getElementById (clipPathId);如果(元素! =){lt.Annotations.Rendering.AnnSvgHelpers。removeElement(元素,lt.Annotations.Rendering.AnnSvgHelpers.getElementById (lt.Annotations.Rendering.AnnSvgHelpers.getPolylineId (clipPathId)));}}varobjectElement = lt.Annotations.Rendering.AnnSvgHelpers.getElementById (id);如果(objectElement ! =){lt.Annotations.Rendering.AnnSvgHelpers。removeElement (objectElement lt.Annotations.Rendering.AnnSvgHelpers.getElementById (lt.Annotations.Rendering.AnnSvgHelpers.getPolylineId (id)));}}AnnTriangleRenderer.callBaseMethod (,“removeObject”[annObject]);},呈现:函数AnnTriangleRenderer美元呈现(annObject mapper) {如果(mapper = =){lt.Annotations.Engine.ExceptionHelper.argumentNullException (“映射”);}如果(annObject = =){lt.Annotations.Engine.ExceptionHelper.argumentNullException (“annObject”);}varsvgEngine = Type.safeCast (.get_renderingEngine (), lt.Annotations.Rendering.AnnSvgRenderingEngine);如果(svgEngine ! =){varstateId = annObject.get_stateId ();varoldStateID = annObject.get_stateId ();varobjectElement = lt.Annotations.Rendering.AnnSvgHelpers.getElementById (stateId);如果(objectElement ! =){如果(svgEngine.get_element () .contains (objectElement)) {如果(String.isNullOrEmpty (._activeId 2美元)){._activeId 2美元= lt.Annotations.Rendering.AnnSvgHelpers.getPolylineId (stateId);}var多段线= lt.Annotations.Rendering.AnnSvgHelpers.getElementById (._activeId 2美元);如果(.get_clipPath ()) {varclipPathId = lt.Annotations.Rendering.AnnSvgHelpers.getClipPathId (stateId);lt.Annotations.Rendering.SvgDrawingHelper.drawPolyline (lt.Annotations.Rendering.AnnSvgHelpers.getElementById (lt.Annotations.Rendering.AnnSvgHelpers.getPolylineId (clipPathId)),映射器,annObject);}lt.Annotations.Rendering.SvgDrawingHelper。drawPolyline(折线,映射器,annObject);}其他的{.addObject (annObject);.render (mapper annObject);annObject.set_stateId (oldStateID);}}AnnTriangleRenderer.callBaseMethod (,“呈现”映射器,annObject]);._activeId = 2美元;}}}AnnTriangleRenderer.registerClass (“AnnTriangleRenderer”,lt.Annotations.Rendering.AnnSvgObjectRenderer);

帮助21.0.2021.7.2版本
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。< !--END Copyright notice-->
LEADTOOLS HTML5 JavaScript
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。< !--END Copyright notice-->