LEADTOOLS(Leadtools.Annotations.Core)

フレームを表示

LEADTOOLSアノテーションでは、独自のカスタム制御点を作成できます。場所、回転中心と回転グリップ制御点のためにカスタムスタイルを作成することができます。

ユーザー定義のサムネイルスタイルを実装するために、IAnnThumbStyleインターフェースを実装するクラスを作成します。その後、カスタムサムネイルスタイルクラスをIAnnObjectRendererインターフェース(アノテーションにオブジェクトを与えるとき、カスタムサムネイルスタイルをその後使います)に割り当てます。

以下のサンプルは、アノテーションオブジェクトのカスタム制御点の作成方法を示します。「User-Defined Objects With LEADTOOLS Annotations」で作成したサンプルから始めます

1番目に、新しいクラス(ベースクラスAnnThumbStyleに由来する)を作成して、AddPathメソッドをオーバーライドします:

[C#]


            public class AnnTriangleThumbStyle : AnnThumbStyle
            {
               protected override AnnThumbStyle Create()
               {
                  return new AnnTriangleThumbStyle();
               }
            
               protected override void AddPath(System.Drawing.Drawing2D.GraphicsPath path, LeadRectD rect)
               {
                  if (path != null)
                  {
                     // Add our triangle
                     float left = (float)rect.Left;
                     float right = (float)rect.Right;
                     float width = (right - left) / 2;
                     float top = (float)rect.Top;
                     float bottom = (float)rect.Bottom;
            
                     path.AddLine(left, bottom, left + width, top);
                     path.AddLine(left + width, top, right, bottom);
                     path.AddLine(right, bottom, left, bottom);
                     path.CloseFigure();
                  }
               }
            }
            

次に、作成したカスタム制御点スタイルクラスをアノテーションオブジェクトレンダラーに割り当てます。InitializeTriangleObjectにおける「レンダラーを設定。AnnPolylineObject' と同じ」コメントの後ろのコードを置き換えます

[C#]


            // Set our renderer
            
            // Get the current polyline renderer (we need to use some of the properties we are not changing)
            IAnnObjectRenderer polylineRenderer = annotations.AutomationManager.RenderingEngine.Renderers[AnnObject.PolylineObjectId];
            
            // Create the new renderer
            IAnnObjectRenderer renderer = new AnnPolylineObjectRenderer();
            // Use the existing label renderer. It is not being changed
            renderer.LabelRenderer = polylineRenderer.LabelRenderer;
            
            // Now, use the new triangle thumbs:
            
            // Change the location thumb style
            AnnTriangleThumbStyle locationThumb = new AnnTriangleThumbStyle();
            locationThumb.Size = LeadSizeD.Create(72 * 2, 72 * 2);
            locationThumb.Stroke = AnnStroke.Create(AnnSolidColorBrush.Create("black"), LeadLengthD.Create(1));
            locationThumb.Fill = AnnSolidColorBrush.Create("#7F0000FF");
            renderer.LocationsThumbStyle = locationThumb;
            
            // Change the rotation center thumb style
            AnnTriangleThumbStyle rotateCenterThumb = new AnnTriangleThumbStyle();
            rotateCenterThumb.Size = LeadSizeD.Create(72, 72);
            rotateCenterThumb.Stroke = AnnStroke.Create(AnnSolidColorBrush.Create("black"), LeadLengthD.Create(1));
            rotateCenterThumb.Fill = AnnSolidColorBrush.Create("#EFFF0000");
            renderer.RotateCenterThumbStyle = rotateCenterThumb;
            
            // Change the Rotation gripper thumb style
            AnnTriangleThumbStyle rotateGripperThumb = new AnnTriangleThumbStyle();
            rotateGripperThumb.Size = LeadSizeD.Create(72 * 2, 72 * 2);
            rotateGripperThumb.Stroke = AnnStroke.Create(AnnSolidColorBrush.Create("black"), LeadLengthD.Create(1));
            rotateGripperThumb.Fill = AnnSolidColorBrush.Create("#3F00FF00");
            renderer.RotateGripperThumbStyle = rotateGripperThumb;
            
            annotations.AutomationManager.RenderingEngine.Renderers[AnnTriangleObject.MyId] = renderer;