LEADTOOLS(Leadtools.Annotations.Core)

フレームを表示

プロジェクトを開始して、LEADTOOLS WinRTアノテーションのカスタムアノテーション機能を説明する若干のcodeを追加するために、以下の手順をとります。

  1. Visual Studio .NET 2012を開始します。
  2. WinRTの自動アノテーションの操作」で作成したそれを計画しますを開きます。
  3. MainPage.xamlのコードビューに切り替えて(ソリューションエクスプローラーでMainPage.xamlを右クリックして[コードの表示]をクリックする)、ファイルの先頭に以下の行を追加します。

    [C#]

    
                Leadtools.Annotations.Designers;
                
    
  4. MainPage()が以下に示すように機能させる最新版:

    [C#]

    
                public MainPage()
                {
                   this.InitializeComponent();
                   RasterSupport.Initialize();
                   AnnAutomationManager manager = new AnnAutomationManager();
                   manager.CreateDefaultObjects();
                   AutomationControl viewerControl = new AutomationControl(_viewer);
                   _automation = new AnnAutomation(manager, viewerControl);
                   _rbDesignMode.IsChecked = true;
                   _automation.Active = true;
                
                   AddItem(_annObjects, AnnObject.SelectObjectId);
                   AddItem(_annObjects, AnnObject.PointerObjectId);
                   AddItem(_annObjects, AnnObject.RectangleObjectId);
                   AddItem(_annObjects, AnnObject.TextObjectId);
                   AddItem(_annObjects, AnnObject.RulerObjectId);
                   _annObjects.SelectedIndex = 0;
                
                   AnnTriangleObject triangle = new AnnTriangleObject();
                   // Create user defined automation object
                   AnnAutomationObject triangleAutomation = CreateTriangleAutomationObject(manager, triangle);
                   _automation.Manager.Objects.Add(triangleAutomation);
                
                   AddItem(_annObjects, triangleAutomation.Id);
                }
                
    
  5. 以下のクラスが機能させるadd:

    [C#]

    
                private AnnAutomationObject CreateTriangleAutomationObject(AnnAutomationManager manager, AnnObject annObject)
                {
                   AnnAutomationObject automationObj = new AnnAutomationObject();
                   automationObj.Id = annObject.Id;
                   automationObj.Name = "Triangle";
                   automationObj.DrawDesignerType = typeof(AnnTriangleDrawDesigner); // hook the custom draw designer
                   automationObj.EditDesignerType = typeof(AnnPolylineEditDesigner); // hook the custom edit designer
                   automationObj.RunDesignerType = typeof(AnnRunDesigner);
                
                   AnnTriangleRenderer annTriangleRenderer = new AnnTriangleRenderer();
                   IAnnObjectRenderer annPolylineRenderer = manager.Renderers[AnnObject.PolylineObjectId];
                
                   annTriangleRenderer.LocationsThumbStyle = annPolylineRenderer.LocationsThumbStyle;
                   annTriangleRenderer.RotateCenterThumbStyle = annPolylineRenderer.RotateCenterThumbStyle;
                   annTriangleRenderer.RotateGripperThumbStyle = annPolylineRenderer.RotateGripperThumbStyle;
                
                   AnnRenderingEngine.Renderers[annObject.Id] = annTriangleRenderer; // hook the custom renderer
                   automationObj.ObjectTemplate = annObject;
                   return automationObj;
                }
                
    
  6. 「ソリューションエクスプローラー」ウィンドウでは、「プロジェクト名」を右クリックします、そして、コンテキストメニューからの選ばれた「add」は「新しい項目」をその後選択します...。に「新しい項目を追加します」、ダイアログボックス、選ばれたClassandは、それにVisual C#Codeツリー表示項目からのTriangleObjectという名前をつけます

    [追加]をクリックして上記のファイルをアプリケーションに追加します。

  7. TriangleObject.csのコードビューを開いて(ソリューションエクスプローラーでTriangleObject.csを右クリックして[コードの表示]をクリックする)、ファイルの先頭に以下の行を追加します。

    [C#]

    
                using Leadtools;
                using Leadtools.Annotations.Rendering;
                using Windows.UI.Xaml;
                using Windows.UI.Xaml.Media;
                using Leadtools.Annotations.Core;
                using Windows.Foundation;
                using Windows.UI.Xaml.Shapes;
                using Windows.UI;
                using Leadtools.Annotations.Designers;
                
    
  8. 開いたTriangleObject.cs codeは表示して(ソリューションエクスプローラーの右クリックTriangleObject.csはビューCodeをその後選択します)、以下でクラスTriangleObjectを置換します:

    [C#]

    
                public class AnnTriangleRenderer : AnnPolylineObjectRenderer
                {
                   private LeadPointD[] _points;
                   private GeometryGroup _group = new GeometryGroup();
                   private AnnObject _annObject;
                
                   public override List<FrameworkElement> VisualComponents
                   {
                      get
                      {
                         List<FrameworkElement> _visualComponents = base.VisualComponents;
                
                         if (_group.Children.Count < 2)
                         {
                            _group.Children.Add(new EllipseGeometry());
                            _group.Children.Add(new EllipseGeometry());
                         }
                
                         if (_points.Length > 0)
                         {
                            EllipseGeometry ellipse = (EllipseGeometry)_group.Children[0];
                            ellipse.RadiusX = 10;
                            ellipse.RadiusY = 10;
                            ellipse.Center = new Point(_points[0].X, _points[0].Y);
                            if (_points.Length == 2)
                            {
                               ellipse = (EllipseGeometry)_group.Children[1];
                               ellipse.RadiusX = 10;
                               ellipse.RadiusY = 10;
                               ellipse.Center = new Point(_points[1].X, _points[1].Y);
                            }
                         }
                
                         if (_visualComponents.Count == 1)
                         {
                            _visualComponents.Add(new Path());
                         }
                
                         Path path = (Path)_visualComponents[1];
                         // if we are finished 'drawing', allow the base class AnnPolylineObjectRenderer to handle the job
                         if (_annObject.Tag == null || "drawing".CompareTo((string)_annObject.Tag) != 0)
                         {
                            path.Data = null;
                            _group.Children.Clear();
                         }
                         else
                         {
                            path.Data = _group;
                         }
                         path.Stroke = new SolidColorBrush(Colors.Green);
                         path.StrokeThickness = 2;
                
                         return _visualComponents;
                      }
                
                   }
                   public override void Render(AnnContainerMapper mapper, AnnObject annObject)
                   {
                      _annObject = annObject;
                      _points = mapper.PointsFromContainerCoordinates(annObject.Points.ToArray(), annObject.FixedStateOperations);
                
                      base.Render(mapper, annObject);
                   }
                }
                
                public class AnnTriangleDrawDesigner : AnnDrawDesigner
                {
                   public AnnTriangleDrawDesigner(IAnnAutomationControl automationControl, AnnContainer container, AnnObject annObject)
                      : base(automationControl, container, annObject)
                   {
                   }
                
                   // override the onPointerDown method and add 3 points for our triangle
                   public override bool OnPointerDown(AnnContainer container, AnnPointerEventArgs e)
                   {
                      bool handled = base.OnPointerDown(container, e);
                      AnnObject targetObject = this.TargetObject;
                      if (targetObject.Points.Count < 3)
                      {
                         targetObject.Tag = "drawing";
                         this.StartWorking();
                         targetObject.Points.Add(e.Location);
                         handled = true;
                      }
                
                      return handled;
                   }
                
                   // override the onPointerUp method and end the drawing when we have our 3 points
                   public override bool OnPointerUp(AnnContainer container, AnnPointerEventArgs e)
                   {
                      bool handled = base.OnPointerUp(container, e);
                      handled = true;
                      AnnObject targetObject = this.TargetObject;
                      if (targetObject.Points.Count >= 3)
                      {
                         targetObject.Tag = null;
                         this.EndWorking();
                      }
                      return handled;
                   }
                }
                
                public class AnnTriangleObject : AnnPolylineObject
                {
                   public AnnTriangleObject()
                      : base()
                   {
                      this.IsClosed = true; // triangle is a closed figure
                      this.SetId(-99); // set the object id
                      this.Tag = null;
                   }
                
                   protected override AnnObject Create()
                   {
                      return new AnnTriangleObject();
                   }
                
                   public override string FriendlyName
                   {
                      get
                      {
                         return "Triangle";
                      }
                   }
                }
                
    
  9. プログラムをビルドして実行し、テストします。

    アノテーションを選択するために、ビューワの下でコンボボックスを使います。オプションボタンによって設計モードと実行モードを切り替えることができます。