Ir al contenido


Foto

Diagrama de sistema de agua de una casa

#image #graficos

  • Por favor identifícate para responder
1 respuesta en este tema

#1 Dan Morales

Dan Morales

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 22 septiembre 2021 - 12:55

Hola buen día a todos, espero me puedan ayudar con lo siguiente:
 
Tengo este panel
Archivo adjunto  Delphi3.png   15,76KB   1 descargas
 
Y lo que me gustaría es encontrar el método para poder dibujar lo siguiente en este TImage:
Archivo adjunto  Delphi.png   90,95KB   1 descargas
 
Las fotos obviamente son imagenes que descargue de la red pero en lo que concierne a las lineas se deben pintar al dar Click en una area especifica del TImage en color naranja con un grosor de 6 pixeles, y lo mismo para la líneas negras. y quisiera ver la posibilidad de que fueran líneas rectas.

En cuanto a las imagenes deben también aparecer en el punto donde de click en el TImage y debejen poder rotar a un angulo que el usuario desee con un Edit
 
La malla como referencia tiene 20 pixeles (por lo que todo es a esa escala en teoría).
 
De momento quería implementar lo siguiente pero no se muy bien como:
 


delphi
  1. type
  2. TForm1 = class(TForm)
  3. ScrollBar1: TScrollBar;
  4. ScrollBar2: TScrollBar;
  5. Image1: TImage;
  6. Label1: TLabel;
  7.  
  8. procedure Image1Click(Sender: TObject);
  9. private
  10. { Private declarations }
  11. public
  12. { Public declarations }
  13. end;
  14. type Tlinea = packed record // Es un registro
  15. x1 : integer; //Uso de base de datos
  16. y1 : integer;
  17. x2 : integer;
  18. y2 : integer;
  19.  
  20. end;
  21. type Tfigura = packed record // Es un registro
  22. x1 : integer; //Esquina superior izq de la figura
  23. y1 : integer;
  24. angulo : integer;
  25. nTubo : integer;
  26.  
  27. end;
  28. var
  29.  
  30. Form1: TForm1;
  31. Tubo : Array [1..100] of Tlinea;
  32. Casa : Array[1..50] of Tfigura;
  33. nTubo : Integer;
  34. nCasa : Integer;
  35.  
  36. implementation
  37.  
  38. {$R *.dfm}
  39.  
  40. procedure TForm1.Image1Click(Sender: TObject);
  41. var
  42. K,I: Integer;
  43. begin
  44. Image1.Canvas.Pen.Color := RGB(147,212,255);
  45. for I := 1 to 100 do
  46. begin
  47. image1.canvas.moveto(0,i*20);
  48. image1.canvas.Lineto(2000,i*20);
  49. Image1.canvas.MoveTo(i*20,0);
  50. Image1.canvas.LineTo(i*20,2000);
  51. end;
  52. nTubo:=0;
  53. nCasa:=0;
  54. end;

Espero me puedan apollar  :(


  • 0

#2 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 828 mensajes
  • LocationMisiones, Argentina

Escrito 12 octubre 2021 - 06:22

Buen día Dan.

Por mi parte es poco lo que puedo hacer para ayudarte. Pero, 

Hay bibliotecas que hacen ese trabajo de rotación, pues es algo complicado.

Por otra parte, deberías usar el canvas y ubicar en él a los objetos, no veo conveniente eso de insertar imágenes dentro de un contenedor TImage.

Estoy algo alejado de este tipo de programación, pero creo que FireMonkey tiene un soporte bastante bueno como para lo que buscas.

 

En cuanto al click, es relativamente fácil, pues debes leer las coordenadas del puntero en ese momento y convertirlas a valores relativos dentro de la imagen. Eso, junto con un "mapa" de "objetos" dentro del esquema y debería estar solucionado.

 

Saludos


  • 0