Delphi - Etiquetar Cubo

 
Vista:
sin imagen de perfil
Val: 15
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Luis Carlos (7 intervenciones) el 16/01/2021 18:01:54
Buenos dias

Estoy tratando de colocar en Tcube usando firemonkey una etiqueta que sea visible.
Yo trabajo con Delphi XE4 y no he podido hacerlo.
La idea es en Runtime asociados a un Tdummy crea varios cubos simulando un almacén donde cada cubo es una ubicación de este y para cada cubo aparezca una etiqueta de identificación.
Lo otro que quiero hace es hace una navegación a través de cada uno de los pasillos que contiene esta simulación del almacén.
Si alguien me puede dar una idea le agradezco.
Revise en YouTube donde hacen esto usando un Bitmap pero en esta versión no funciona.
Nunca he trabajado con FireMonkey.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 15
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Luis Carlos (7 intervenciones) el 21/01/2021 22:13:58
Buenas tardes

Con el propósito de aclarar mi necesidad adjunto figura.
Reitero lo que me falta es poder colocar una etiqueta o label en cada cubo.
Agradezco cualquier idea. Recuerdo que trabajo con delphi XE4.

Y envio como esta quedando el desarrollo

Mucha gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha aumentado 1 puesto en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Ezequiel (1228 intervenciones) el 22/01/2021 01:30:46
Lo que pude hacer, aunque en Delphi 10.3.3, fue colocar dentro de un cubo un TTextLayer3D, al colocarlo el text queda dentro del cubo, sólo hay que mover su posición para que quede en una de sus caras.

ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por [email protected] (7 intervenciones) el 22/01/2021 16:54:44
Muchas gracias


Tengo una pregunta como puede hacer para ubicar ese TTextLayer3d en una cara determinada del cubo'?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha aumentado 1 puesto en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Ezequiel (1228 intervenciones) el 22/01/2021 20:25:37
Tienes que jugar con las propiedades RotationAngle y Position del componente TTextLayer3d

ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Luis Carlos (7 intervenciones) el 25/01/2021 15:56:10
Señor Ezequiel muchisimas gracias por su interés y ayuda.
Quisiera comentarle que lo que yo pretendo y todo hacerlo en ejecucion(RunTime) estuve intentando basándome en una información que encontré en youtube que haen exactamnet lo que quiero pero lo hacen coon XE6 pero en XE4 no me funciona:

La información la obtube de :
https://www.youtube.com/watch?v=5cAHCT6nJ0k&ab_channel=QuarkCube

Lo primero que noto es que ese TBitmap la clase es interfecedpersistent el que yo puedo definir en XE4 es TAGBitmap. Al intentar hace la función que le adjunto no me funciona.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function TF3D.CreaCubo(pEntrada:Olevariant;
                    out pSalida :OleVariant;
                    out pTxTerror : WideString): Integer;
var
  Cubo : TCube;
  Estroke : TStrokeCube;
  lDoUbiCont : Double;
  lInLeft    : Double;
  lInTop     : Double;
  lInZ       : Double;
  lStUbiCona : string;
  ColorA     : TAlphaColor;
  lLight     : TLightMaterialSource;
 
  B          : TBitmap;
  R          : TRectF;
  F          : TBrush;
 
  a          : TImage;
  ARect      : TRectF;
begin
     B := TBitMap.create(100,100);
 
     with B do
          begin
              if canvas.BeginScene then
                 try
                   Canvas.Clear(0);
                   R := RectF(0,0,Width, Height);
                   F := TBrush.Create(TBrushKind.bkSolid,lLight.Diffuse);
                   Canvas.FillRect(R,10.10,[TCorner.crTopLeft,
                                            TCorner.crTopRight,
                                            TCorner.crBottomLeft,
                                            TCorner.crBottomRight],
                                            1,
                                           1,F);
 
 
                               Canvas.Fill.Color := TAlphaColors.Black;
                               Canvas.Font.size  := 9;
                               Canvas.Filltext(R, FloatToStr(lDoUbiCont), False,1,[],
                               TTextAlign.taCenter,
                               TTextAlign.taLeading);
                             finally
                               Canvas.EndScene;
                             end;
                           lLight.Texture.Assign(B);
                           b.Free;
                      end;
 
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha aumentado 1 puesto en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Ezequiel (1228 intervenciones) el 26/01/2021 00:06:58
Puede que el video que muestras no te sirva del todo, pues ahi se usa una TMesh para hacer los cubos, y tu ya usas un TCube, lo que pude hacer es lo siguiente
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.Button1Click(Sender: TObject);
var texto: TTextLayer3D;
begin
  texto := TTextLayer3D.Create(self);
  texto.Parent := Cube1;
  texto.Text := 'hola mundo';
  texto.Font.Size := 80;
  Cube1.AddObject(texto);
  texto.Position.X := (Cube1.Width / 2) + 0.1;
  texto.RotationAngle.Y := 270;
end;
En este código lo que puede cambiar para que te funcione es:
En esta linea texto.Position.X := (Cube1.Width / 2) + 0.1; Puede ser X, Y, o Z el valor a modificar, dependiendo de la cara en que desees mostrar tu etiqueta
En esta otra texto.RotationAngle.Y := 270; tambien puede ser X, Y o Z y los valores serían 90 o 270, dependiendo de la cara en que se va a mostrar la etiqueta, solo queda a probar para dejarlo funcional.
Además hay que tomar en cuenta también el tamaño de fuente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Luis Carlos (7 intervenciones) el 25/02/2021 15:33:34
Señor Ezequiel muchas gracias por su interés y ayuda. He hecho el ejercicio funciona aunque no se como ubicar el texto al lado izquierdo. Pero tengo otro inconveniente cuando se pasa de cierta cantidad de Tcube que los genero en runtime me genera un access vilolation que no se por que ?? sucede esto (solo sucede si agrego el texto). He seguido intentando también crear un TBitmap y agregarlo a la propiedad Texture de un TLigthMaterialSource pero no he podido como le digo trabajo en XE4.

Respetuoso saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha aumentado 1 puesto en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Ezequiel (1228 intervenciones) el 25/02/2021 17:50:00
Como te comenté en mi respuesta anterior
1
2
texto.Position.X := (Cube1.Width / 2) + 0.1;
texto.RotationAngle.Y := 270;
Esas dos lineas las debes modificar a tu necesidad, por ejemplo: en la linea 1 si pones:
1
2
3
texto.Position.X := (Cube1.Width / 2) + 0.1;
//en lugar de esto
texto.Position.X := ((Cube1.Width / 2) + 0.1) * -1;
Te va a mover el texto al lado contrario del cubo, tal vez veas el texto invertido, para corregirlo debes girar el texto con la linea 2, de 270 a 90 o 180.
No sabria decirte que sucede con el error que te da, debes buscarle a ver el por que, si es al crear cubos o al eliminarlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Luis Carlos (7 intervenciones) el 25/02/2021 18:30:07
No Ezequiel el problema es cuando le agrego texto al cubo. Si no le agrego texto aunque se demora funciona con n cubos y es al crearlos. Hice la prueba con una cantidad de cubos que se crean en runtime y funciona pero después de cierta cantidad agregándole texto me genera el access violation: pero todo se crea de la misma forma porque lo que llamo es una función de creación y estos cubos los adiciono a u TDummy.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Etiquetar Cubo

Publicado por Luis Carlos (7 intervenciones) el 15/04/2021 00:04:56
Ezquiel quisiera decirle que me funcionó todo muy bien. Muchas gracias por su ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar