Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Diagrama de sistema de agua de una casa (https://www.clubdelphi.com/foros/showthread.php?t=95406)

DaniMir 22-09-2021 21:23:52

Diagrama de sistema de agua de una casa
 
2 Archivos Adjunto(s)
Hola buen día a todos, espero me puedan ayudar con lo siguiente:

Lo que me gustaría es encontrar el método para poder dibujar lo siguiente en este TImage:

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:

Código Delphi [-]
type
TForm1 = class(TForm)
ScrollBar1: TScrollBar;
ScrollBar2: TScrollBar;
Image1: TImage;
Label1: TLabel;
 
 procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type Tlinea = packed record // Es un registro
x1 : integer; //Uso de base de datos
y1 : integer;
x2 : integer;
y2 : integer;
 
 end;
type Tfigura = packed record // Es un registro
x1 : integer; //Esquina superior izq de la figura
y1 : integer;
angulo : integer;
nTubo : integer;
 
 end;
var
 
 Form1: TForm1;
Tubo : Array [1..100] of Tlinea;
Casa : Array[1..50] of Tfigura;
nTubo : Integer;
nCasa : Integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Image1Click(Sender: TObject);
var
K,I: Integer;
begin
Image1.Canvas.Pen.Color := RGB(147,212,255);
for I := 1 to 100 do
begin
image1.canvas.moveto(0,i*20);
image1.canvas.Lineto(2000,i*20);
Image1.canvas.MoveTo(i*20,0);
Image1.canvas.LineTo(i*20,2000);
end;
nTubo:=0;
nCasa:=0;
end;

Espero me puedan ayudar :eek:

Neftali [Germán.Estévez] 23-09-2021 09:52:11

Si no tienes limitación para usar componentes, te recomiendo utilizar TSimpleGraph de Delphi Area. Es gratuito y con código.
Yo lo he usado en varios proyectos y te puede facilitar mucho el trabajo.
Baja las demos, revísalas y a ver si te sirve para lo que necesitas.



Si no puedes usar componentes o no deseas usarlos, intenta concretar un poco más lo que necesitas o dividirlo en problemas más pequeños, porque tal como está planteado es muy genérico.

En este segundo caso, revisa estos links, sobre imágenes a ver si te son útiles:
https://neftali.clubdelphi.com/crear...-con-el-raton/
https://neftali.clubdelphi.com/ejemp...nos-y-figuras/
https://neftali.clubdelphi.com/crear...n-runtime-ide/
https://neftali.clubdelphi.com/selec...s-visualmente/

DaniMir 24-09-2021 05:01:10

Bueno, más bien estaba intentando hacer algo así:

Código:

Image2.Canvas.Pen.Color := ClMaroon;
Image2.Canvas.Pen.Width := 6;
Image2.Canvas.MoveTo(x1,y1);
Image2.Canvas.LineTo(x2,y2);
Image2.Canvas.Pen.Color := ClBlack;
Image2.Canvas.Pen.Width := 1;

Con esto puedo sacar las líneas para los tubos

pero ocupe un TBitmap para tratar de llamar o colocar las imagenes mediante un TButton con:

Código:

var
Casa : TBitMap;

Image2.Canvas.Rectangle(x1,y1,x2,y2);
Casa := TBitMap.Create;
Casa.LoadFromFile('casa.bmp');

Y si me dibuja el rectangulo en cualquier posicion del plano pero no carga la imagen :(

Ñuño Martínez 05-10-2021 12:12:37

Lo que pretendes es algo complejo, así que yo te recomiendo que te olvides del TImage y uses el proyecto sugerido por Neftali. Quizá parezca que tener que aprender a usarlo sea una pérdida de tiempo, pero seguro que te merecerá la pena.


La franja horaria es GMT +2. Ahora son las 05:08:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi