←Select platform

InteractiveService Property

Summary

Interactive service for this mode.

Syntax
C#
Objective-C
C++/CLI
public virtual InteractiveService InteractiveService { get; } 
@property (nonatomic, strong, readonly, nullable) LTInteractiveService *interactiveService; 
public:  
   virtual property InteractiveService^ InteractiveService 
   { 
      InteractiveService^ get() 
   } 

Property Value

The interactive service for this mode.

Remarks

This value is useful when deriving your own interactive mode classes. Refer to ImageViewerInteractiveMode for an example.

Example
C#
using Leadtools; 
using Leadtools.Controls; 
using Leadtools.Codecs; 
using Leadtools.Drawing; 
 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Color; 
 
public ImageViewerForm _form = new ImageViewerForm(); 
public ImageViewer _imageViewer; 
 
public void ImageViewerInteractiveModeExample() 
{ 
   // Get the Form's ImageViewer control 
   _imageViewer = _form.ImageViewer; 
 
   // Use vertical view layout 
   _imageViewer.ViewLayout = new ImageViewerVerticalViewLayout(); 
 
   // Add 4 items to the viewer 
   using (var codecs = new RasterCodecs()) 
   { 
      for (var page = 1; page <= 4; page++) 
      { 
         var item = new ImageViewerItem(); 
         var fileName = Path.Combine(LEAD_VARS.ImagesDir, string.Format("ocr{0}.tif", page)); 
 
         // Create a thumbnail from the image 
         using (var image = codecs.Load(fileName, page)) 
         { 
            item.Image = image.CreateThumbnail(180, 180, 24, RasterViewPerspective.TopLeft, RasterSizeFlags.Resample); 
         } 
 
         item.Text = string.Format("Item {0}", page - 1); 
         _imageViewer.Items.Add(item); 
      } 
   } 
 
   // Create and add the ItemRotate interactive mode to the viewer 
   ItemRotateInteractiveMode itemRotate = new ItemRotateInteractiveMode { IsEnabled = true }; 
   _imageViewer.InteractiveModes.BeginUpdate(); 
   _imageViewer.InteractiveModes.Add(itemRotate); 
   _imageViewer.InteractiveModes.EndUpdate(); 
} 
 
public class ItemRotateInteractiveMode : ImageViewerInteractiveMode 
{ 
   public ItemRotateInteractiveMode() : base() 
   { 
      this.AutoItemMode = ImageViewerAutoItemMode.AutoSet; 
      this.IdleCursor = Cursors.VSplit; 
      this.MouseButtons = MouseButtons.Left | MouseButtons.Right; 
   } 
 
   public override string Name 
   { 
      get { return "ItemRotate"; } 
   } 
 
   public override int Id 
   { 
      get { return ImageViewerInteractiveMode.UserModeId; } 
   } 
 
   public override void Start(ImageViewer imageViewer) 
   { 
      base.Start(imageViewer); 
      var service = base.InteractiveService; 
 
      // Rotate events on horizontal drag 
      service.DragStarted += new EventHandler<InteractiveDragStartedEventArgs>(service_DragStarted); 
      service.DragDelta += new EventHandler<InteractiveDragDeltaEventArgs>(service_DragDelta); 
      service.DragCompleted += new EventHandler<InteractiveDragCompletedEventArgs>(service_DragCompleted); 
 
      // Reset event on double tap 
      service.DoubleTap += new EventHandler<InteractiveEventArgs>(service_DoubleTap); 
   } 
 
   public override void Stop(ImageViewer imageViewer) 
   { 
      if (IsStarted) 
      { 
         var service = base.InteractiveService; 
 
         service.DragStarted -= new EventHandler<InteractiveDragStartedEventArgs>(service_DragStarted); 
         service.DragDelta -= new EventHandler<InteractiveDragDeltaEventArgs>(service_DragDelta); 
         service.DragCompleted -= new EventHandler<InteractiveDragCompletedEventArgs>(service_DragCompleted); 
         service.DoubleTap -= new EventHandler<InteractiveEventArgs>(service_DoubleTap); 
 
         base.Stop(imageViewer); 
      } 
   } 
 
   private void service_DragStarted(object sender, InteractiveDragStartedEventArgs e) 
   { 
      // Make sure pinch is not working, otherwise, ignore pan 
      if (!this.CanStartWork(e)) 
         return; 
 
      // Make sure we are on an item 
      if (this.Item == null) 
         return; 
 
      Debug.WriteLine("Item Starting Rotation Angle: " + this.Item.RotateAngle); 
 
      e.IsHandled = true; 
      this.OnWorkStarted(EventArgs.Empty); 
   } 
 
   private void service_DragDelta(object sender, InteractiveDragDeltaEventArgs e) 
   { 
      if (!this.IsWorking) 
         return; 
 
      var item = this.Item; 
      if (item == null) 
         return; 
 
      // Find out what to do 
      if (e.Change.X == 0 && e.Change.Y == 0) 
         return; 
 
      // Rotate clockwise when dragging right and counter-clockwise when dragging left 
      if(e.Change.X > 0) 
         this.Item.RotateAngle += 2; 
      else if (e.Change.X < 0) 
         this.Item.RotateAngle -= 2; 
 
      e.IsHandled = true; 
   } 
 
   private void service_DragCompleted(object sender, InteractiveDragCompletedEventArgs e) 
   { 
      if (!this.IsWorking) 
         return; 
 
      Debug.WriteLine("Item Final Rotation Angle: " + this.Item.RotateAngle); 
 
      e.IsHandled = true; 
      OnWorkCompleted(EventArgs.Empty); 
   } 
 
   private void service_DoubleTap(object sender, InteractiveEventArgs e) 
   { 
      // Make sure we not working already 
      if (this.IsWorking || !this.CanStartWork(e)) 
         return; 
 
      // Make sure we have an item 
      var item = this.Item; 
      if (item == null) 
         return; 
 
      e.IsHandled = true; 
 
      this.OnWorkStarted(EventArgs.Empty); 
      ResetPosition(this.ImageViewer, item); 
      this.OnWorkCompleted(EventArgs.Empty); 
   } 
 
   private void ResetPosition(ImageViewer imageViewer, ImageViewerItem item) 
   { 
      // Use the identity matrix to reset the transform of the item 
      item.Transform = LeadMatrix.Identity; 
   } 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
Requirements

Target Platforms

Help Version 23.0.2024.2.29
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Controls Assembly

Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.