LEADTOOLS ナレッジベース

[Document Imagingファミリー][ImageViewer] クリックした位置にアノテーションオブジェクトを配置するには?

ImageViewerのMouseDown、MouseUpイベントを使用して実装できます。また、クリックした位置にアノテーションを配置するには、AnnContainerMapperクラスのRectToContainerCoordinatesメソッドを使用して変換してからアノテーションコンテナに追加する必要があります。

以下は、アノテーションツールバーのスタンプオブジェクトが選択されているとき、画像上をクリックした場合に配置するサンプルです。

サンプルコード(VB.NET)

Dim ptdown As Point
Dim ptup As Point
Dim isStamp As Boolean

Private Sub viewer_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    If automation.Manager.CurrentObjectId = AnnObject.StampObjectId Then
        isStamp = True
    End If

    ptdown.X = e.X
    ptdown.Y = e.Y

End Sub

Private Sub viewer_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    ptup.X = e.X
    ptup.Y = e.Y

    If (ptdown.X = ptup.X And ptdown.Y = ptup.Y) Then

        If isStamp = True Then

            Dim obj As AnnAutomationObject = annAutomationManager.FindObjectById(AnnObject.StampObjectId)
            Dim annStamp As New AnnStampObject
            annStamp.Picture = New AnnPicture("..\..\..\Images\test.jpg")

            Dim rect As LeadRectD = automation.Container.Mapper.RectToContainerCoordinates(New LeadRectD(e.X, e.Y, 100, 100))
            annStamp.Rect = rect

            automation.Container.Children.Add(annStamp)

        End If
    End If

    isStamp = False
    viewer.Refresh()
End Sub

サンプルコード(C#)

Point ptdown;
Point ptup;
Boolean isStamp;

private void viewer_MouseDown(object sender, MouseEventArgs e)
{
    if(automation.Manager.CurrentObjectId== AnnObject.StampObjectId)
    {
        isStamp = true;
    }

    ptdown.X = e.X;
    ptdown.Y = e.Y;
}

private void viewer_MouseUp(object sender, MouseEventArgs e)
{
    ptup.X = e.X;
    ptup.Y = e.Y;

    if (ptdown.X == ptup.X & ptdown.Y == ptup.Y)
    {
        if(isStamp == true)
        {
            AnnAutomationObject obj = annAutomationManager.FindObjectById(AnnObject.StampObjectId);
            AnnStampObject annStamp = new AnnStampObject();
            annStamp.Picture = new AnnPicture(@"..\..\..\Images\test.jpg");

            LeadRectD rect = automation.Container.Mapper.RectToContainerCoordinates(new LeadRectD(e.X, e.Y, 100, 100));
            annStamp.Rect = rect;

            automation.Container.Children.Add(annStamp);
        }
    }

    isStamp = false;
    viewer.Refresh();
}

 

実際の動作は.NETコントロール チュートリアルの「アノテーション New\AutomatedAnnotations」にMouseDown、MouseUpイベントを追加してお試しください。

0 コメント

記事コメントは受け付けていません。