none
Medir distância entre pontos RRS feed

  • Pergunta

  • Olá, pessoa.

    Na minha aplicação tenho um picturebox com do tamanho da imagem que está carregada nele. Essa imagem é um desenho técnico em escala. O que eu gostaria era de medir a distância real do projeto em centímetros a partir de cliques no picturebox. Criei o código abaixo, mas não sei onde está o erro:

    Public Sub BlueprintClick(sender As Object, e As MouseEventArgs)
            If e.Button = MouseButtons.Left Then
                If Inicio.IsEmpty Then
                    Inicio = New Point(e.X, e.Y)
                Else
                    Final = New Point(e.X, e.Y)
                End If
            End If
    
            If Inicio.IsEmpty = False And Final.IsEmpty = False Then
                Dim cBlueprint As RPLControls.Blueprint = GetBlueprint("Blueprint" & FormPrincipal.TabProjeto.SelectedIndex + 1)
                Dim escala As Integer = cBlueprint.Scale.Replace("1:", "")
    
                Dim Xa As Double = PixelTOCentímetro(Inicio.X) / cBlueprint.DPI
                Dim Xb As Double = PixelTOCentímetro(Final.X) / cBlueprint.DPI
                Dim Ya As Double = PixelTOCentímetro(Inicio.Y) / cBlueprint.DPI
                Dim Yb As Double = PixelTOCentímetro(Final.Y) / cBlueprint.DPI
    
                Dim dist As Double = (Xb - Xa) ^ 2 + (Yb - Ya) ^ 2
                MsgBox(dist * escala)
    
                Inicio = Nothing
                Final = Nothing
            End If
    End Sub

    O objetivo é capturar as coordenadas no mouse, iniciais e finais, as quais representam um reta (que pode ser em qualquer direção), calcular a distância entre os pontos, em algum momento do processo converter as coordenadas para centímetros e aplicar a escala do desenho afim de se obter o tamanho real. Alguém poderia me ajudar?
    sábado, 23 de setembro de 2017 02:40

Respostas

  • EricJhon92,

        Desculpe, mas esse código está estranho demais!

        1 - O "if": "If Inicio.IsEmpty Then" preenche o Inicio OU o Final? Deveria preencher os dois! Pois nesta "If" ou vai preencher um ou vai preencher o outro. Logo abaixo existe outro "If" exigindo que os dois "Points" estejam preenchidos.

        2 - Do que se trata "RPLControls.Blueprint" uma biblioteca particular?

        3 - De onde vem "PixelTOCentímetro"?

    []'s,
    Fabio I.

    As variáveis Inicio e Final são declaradas no topo do documento, como Private. No primeiro clique o código preenche o Inicio e no segundo clique ele preenche o Final, faz o calculo da distância entre os dois pontos e libera as variáveis Inicio e Final.

    Eu consegui fazer os cálculos necessário com a ajuda desse link: https://social.msdn.microsoft.com/Forums/vstudio/en-US/9dd3d681-7fee-48ea-8fc1-5a8a17433342/distance-between-two-points-on-an-image-in-terms-of-pixels?forum=vbgeneral

    Mas também gostaria de saber se esse método que estou utilizando é eficiente.

    domingo, 24 de setembro de 2017 18:51

Todas as Respostas

  • EricJhon92,

        Desculpe, mas esse código está estranho demais!

        1 - O "if": "If Inicio.IsEmpty Then" preenche o Inicio OU o Final? Deveria preencher os dois! Pois nesta "If" ou vai preencher um ou vai preencher o outro. Logo abaixo existe outro "If" exigindo que os dois "Points" estejam preenchidos.

        2 - Do que se trata "RPLControls.Blueprint" uma biblioteca particular?

        3 - De onde vem "PixelTOCentímetro"?

    []'s,
    Fabio I.

    • Editado Fabio I sábado, 23 de setembro de 2017 15:02
    sábado, 23 de setembro de 2017 15:02
  • EricJhon92,

        Desculpe, mas esse código está estranho demais!

        1 - O "if": "If Inicio.IsEmpty Then" preenche o Inicio OU o Final? Deveria preencher os dois! Pois nesta "If" ou vai preencher um ou vai preencher o outro. Logo abaixo existe outro "If" exigindo que os dois "Points" estejam preenchidos.

        2 - Do que se trata "RPLControls.Blueprint" uma biblioteca particular?

        3 - De onde vem "PixelTOCentímetro"?

    []'s,
    Fabio I.

    As variáveis Inicio e Final são declaradas no topo do documento, como Private. No primeiro clique o código preenche o Inicio e no segundo clique ele preenche o Final, faz o calculo da distância entre os dois pontos e libera as variáveis Inicio e Final.

    Eu consegui fazer os cálculos necessário com a ajuda desse link: https://social.msdn.microsoft.com/Forums/vstudio/en-US/9dd3d681-7fee-48ea-8fc1-5a8a17433342/distance-between-two-points-on-an-image-in-terms-of-pixels?forum=vbgeneral

    Mas também gostaria de saber se esse método que estou utilizando é eficiente.

    domingo, 24 de setembro de 2017 18:51