Mostrando entradas con la etiqueta app. Mostrar todas las entradas
Mostrando entradas con la etiqueta app. Mostrar todas las entradas

Rotaciones en 3D con RAD Studio


En este post veremos cómo crear y rotar una figura en 3D,  utilizando Delphi RAD Studio.

Empezamos desde File – New – Multi-Device Application y
seleccionamos “3D Application





A continuación vamos añadiendo los componentes básicos:

-     tViewPort3D : será el lienzo donde se mostrará la
animación en 3D.

-    tColorMaterialSource, en la propiedad “Color”
selecciono “Snow”
.
tLightMaterialSource, dejamos marcadas las
propiedades como se indica en la imagen: 



Ahora tenemos que indicar la orientación de la luz y la
orientación del observador de la escena.

Añadimos 2 componentes más:

tLight


tCamera






Estos dos últimos componentes tienen unos botones de control
que permiten moverlos en los 3 ejes del espacio.




Y otro botón más que permite cambiar el tamaño de cada una
de las caras del objeto.



Por último sólo nos queda añadir los bloques de la figura
que queremos crear.

En nuestro caso utilizaremos los siguientes:

tRoundcube (el bloque principal), tPlane (será la pantalla)
y dos tDisk correspondientes a las cámaras




Utilizando los controles de orientación tendremos que mover
cada bloque
hasta conseguir lo siguiente:



Ahora sólo nos queda conseguir el movimiento de la figura

Lo haremos utilizando un tTimer y variaremos el ángulo de
rotación.


PROCEDURE TForm1.Timer1Timer(Sender: TObject);


BEGIN


  WITH
RoundCube1.RotationAngle DO


    Point := Point +
Point3D(2, 0, 0);




END;





Activamos el Timer y 
¡¡ ya lo tenemos !!





UNIT Unit1;

INTERFACE

USES
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
System.Math.Vectors, FMX.Types3D, System.Sensors, System.Sensors.Components,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.MaterialSources,
FMX.Objects3D, FMX.Controls3D, FMX.Viewport3D;

TYPE
TForm1 = CLASS(TForm)
Viewport3D1: TViewport3D;
Dummy1: TDummy;
Camera1: TCamera;
Light1: TLight;
RoundCube1: TRoundCube;
Plane1: TPlane;
Disk1: TDisk;
LightMaterialSource1: TLightMaterialSource;
ColorMaterialSource1: TColorMaterialSource;
Disk2: TDisk;
Timer1: TTimer;
PROCEDURE Timer1Timer(Sender: TObject);
PRIVATE
{ Private declarations }
PUBLIC
{ Public declarations }
END;

VAR
Form1: TForm1;

IMPLEMENTATION

{$R *.fmx}


PROCEDURE TForm1.Timer1Timer(Sender: TObject);
BEGIN

WITH RoundCube1.RotationAngle DO
Point := Point + Point3D(2, 0, 0);

END;

END.




Accediendo a la cámara del dispositivo Android con Rad Studio 10


Para empezar vamos a hacer una pequeña aplicación móvil en la que vamos a capturar y compartir imágenes de la cámara y de la galería de nuestro dispositivo. Nuestra aplicación va a estar escrita en código  Delphi y se ejecutará en un dispositivo Android.





Empecemos...



Iniciamos nuestro Delphi RAD Studio 10 y empezamos a crear nuestra aplicación desde File–New–Multi Device Application 

Vale la pena señalar que hay varias plantillas de diseño de aplicaciones que se pueden seleccionar, en nuestro caso elegimos una en blanco (Blank Application).









En Style seleccionaremos Android y en View= Master, el Form le llamaremos Form1. Salvamos el proyecto a través de la opción de menú  File – Save All




Vamos a incluir en nuestro proyecto un TImage, un TToolBar,  tres TButton y un TActionListAhora tenemos que cambiar algunas propiedades de los objetos en nuestro proyecto, empezando por la forma en que se mostrará en el dispositivo de visualización IDE, Los otros objetos seguirán se configurarán como sigue:



Button1

- Name= btnCam

- StyleLookup=cameratoolbutton

Button2

- Name= btnArchivo



- StyleLookup=searchtoolbutton

Button3

- Name= btnCompartir

- StyleLookup=actiontoolbutton

image1

-Name=ImgFoto

-Align=Client




Asignación de código y acciones



Con la aplicación que tiene el diseño ya definido falta sólo poner nuestras líneas de código, pero junto con este proceso vamos a asignar acciones predefinidas para poder permitir que nuestra aplicación pueda acceder a las características del dispositivo Android. 

Seleccione la btnCam y Object Inspector haga clic en la propiedad Action, a continuación, seleccione New Standard Action-Media Library-TTakePhotoFromCameraAction





Desde el Object Inspectorvaya a la pestaña Events y expanda la propiedad Action, ver más abajo:









desde allí seleccione el evento onDidFinishTaking y escriba image1.Bitmap.Assign(Image);





















procedure TfrmAndPrincipal.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);


begin


    image1.Bitmap.Assign(Image);

end;





Con este código nuestra aplicación es capaz de capturar imágenes desde la cámara del dispositivo. 


Para el botón   btnArchivo, haremos el mismo procedimiento, usando New Standard Action-Media Library-TTakePhotoFromLibraryAction. Para este botón también se utilizará el mismo evento onDidFinishTaking y su código para btnArchivo será:



















procedure TfrmAndPrincipal.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);


begin   

image1.Bitmap.Assign(Image);

end;








Finalmente asignamos a  btnCompartir  desde New Standard Action - Media Library –TShowShareSheetAction y en este caso va a codificar su evento onBeforeExecute:





















procedure TfrmAndPrincipal.ShowShareSheetAction1BeforeExecute(Sender: TObject);


begin


    ShowShareSheetAction1.Bitmap.Assign(image1.Bitmap);


end;









Compilar y distribuir



Terminado nuestro proceso de codificación de aplicaciones ahora vamos a compilar y desplegar nuestra aplicación. Seleccione el dispositivo de destino para nuestra aplicación, en mi caso elegí un Nexus5.


Aquí tenemos que recordar que el teléfono debe estar con el modo de depuración USB activo y la aceptación de aplicaciones de fuentes desconocidas.



Dar un Build al proyecto y ejecutar sin depurar (Run without debugging). Espere a que el propio RAD Studio 10 se encargue de instalar el APK en su dispositivo.





Como ven con sólo 3 líneas de código hemos podido crear una aplicación que capture fotos con nuestro dispositivo,  las selecciona desde la galería y las comparte, ¡¡ esto es Delphi !! ...cada día facilitándonos la vida a los programadores...





La unit quedaría así:




unit Unit1;



interface



uses

  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,

  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,

  FMX.MediaLibrary.Actions, System.Actions, FMX.ActnList, FMX.StdActns,

  FMX.StdCtrls, FMX.Controls.Presentation, FMX.Objects;



type

  TForm1 = class(TForm)

    Image1: TImage;

    ToolBar1: TToolBar;

    BtnCam: TButton;

    BtnArchivo: TButton;

    BtnCompartir: TButton;

    ActionList1: TActionList;

    TakePhotoFromCameraAction1: TTakePhotoFromCameraAction;

    TakePhotoFromLibraryAction1: TTakePhotoFromLibraryAction;

    ShowShareSheetAction1: TShowShareSheetAction;

    procedure TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);

    procedure TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);

    procedure ShowShareSheetAction1BeforeExecute(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  Form1: TForm1;



implementation



{$R *.fmx}

{$R *.LgXhdpiPh.fmx ANDROID}



procedure TForm1.ShowShareSheetAction1BeforeExecute(Sender: TObject);

begin

ShowShareSheetAction1.Bitmap.Assign(image1.Bitmap);

end;



procedure TForm1.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);

begin

image1.Bitmap.Assign(Image);

end;



procedure TForm1.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);

begin

image1.Bitmap.Assign(Image);

end;



end.







Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...