Usuário com melhor resposta
Medir distância entre pontos

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?
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.
- Editado EricJhon92 domingo, 24 de setembro de 2017 18:53
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 29 de setembro de 2017 13:06
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
-
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.
- Editado EricJhon92 domingo, 24 de setembro de 2017 18:53
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 29 de setembro de 2017 13:06