May 02 2007

C#: obtendo a diferença em dias entre duas datas

Autor: Marcos Dell Antonio - Categorias: .NET

Recebi via e-mail a dúvida de um usuário que não sabia como obter a diferença entre duas datas em C#.

 Eu lembro que no livro 58+ Soluções em .NET, do Fabio Camara, ele sugeria o uso do método DateDiff do VB.NET. Mas ora, será que o C# não tem algo equivalente?

Tem sim. Veja no exemplo abaixo:

static void Main(string[] args) { DateTime inicio = new DateTime(2007, 05, 01); DateTime fim = new DateTime(2007, 06, 05); TimeSpan diff; // Subtraindo normalmente diff = fim - inicio; Console.WriteLine(diff.Days); // Usando Subtract diff = fim.Subtract(inicio); Console.WriteLine(diff.Days); // Convertendo os dias em meses DateTime data = new DateTime().AddDays(diff.Days); Console.WriteLine(data.ToString("dd/MM")); Console.ReadLine(); }

É isso ae! Até +.

Comentários 4 comentários

May 01 2007

MD3DM: Renderizando objetos texturizados

Autor: Marcos Dell Antonio - Categorias: .NET, Direct3D, Mobilidade

A renderização de objetos texturizados, penúltima etapa do meu TCC, é muito simples de ser executada no Managed Direct3D Mobile.

Basicamente o desenvolvedor deve se preocupar com o seguinte:

  • Carregar todas as texturas necessárias dentro de uma lista ou array de objetos Texture;
  • Definir a luz ambiente do Device;
  • Definir a luz ambiente do objeto utilizando um material;
  • Para cada objeto, definir a textura que o Device utilizará para desenhá-lo.

Com essa receita de bolo as coisas ficam mais fáceis. Quem dera eu tê-la a 8 horas atrás (é, feriado só existe pros amigos :().

Na prática, isso fica da seguinte maneira:

- Carregar as texturas

A partir de um array de nomes de arquivos (normalmente) basta utilizar o método FromFile da classe TextureLoader para carregar todas as texturas em um array ou lista de objetos Texture. Exemplo:

string file = @"Program Files...cube_text.jpg";
texture = TextureLoader.FromFile(device, file);

No exemplo acima só tenho um objeto e uma textura, por isso utilizei uma única variável.

- Definir a luz do ambiente e do objeto

Eu simplesmente esqueci disso por 8 horas. Passei todo este tempo removendo e adicionando código tentando fazer com que as texturas aparecessem. Nada!

Porém, vale a pena salientar um detalhe: as texturas eram renderizadas, só não estavam iluminadas. Logo, o que acontece se você entra com um papel preto numa sala escura? Não vê ele. O mesmo acontecia com as minhas texturas.

Para definir a luz ambiente do Device, faça o seguinte:

device.RenderState.Ambient = Color.White;

E a luz ambiente do objeto:

material = new Material();
material.Ambient = Color.White;

device.Material = material;

- Definir a textura do objeto a ser desenhado

Esta é a parte mais fácil e óbvia. Sempre que o Device for desenhar os objetos, utilize o seguinte comando:

device.SetTexture(0, texture);

- Exemplo

Um trecho de código demonstrando todos os itens acima é apresentado abaixo:

private void Render()
{
    device.Clear(ClearFlags.Target,
                 Color.White,
                 1.0f,
                 0);
    device.BeginScene();

    if (texture != null)
        texture.Dispose();

    string file = @"...cube_text.jpg";
    texture = TextureLoader.FromFile(device, file);

    material = new Material();
    material.Ambient = Color.White;

    device.Material = material;
    device.SetTexture(0, texture);

    device.RenderState.Ambient = Color.White;

    device.SetStreamSource(0, vertexBuffer, 0);
    device.DrawPrimitives(PrimitiveType.TriangleList,
                          0,
                          2);

    device.EndScene();
    device.Present();
}

É claro que o seu VertexBuffer deve possuir, além dos vértices e/ou normais, as coordenadas de textura (U e V).

É isso ae. Até +.

Comentários Faça o seu comentário

May 01 2007

Ao fazer uma referência, vá direto à fonte

Autor: Marcos Dell Antonio - Categorias: Blogging, Cotidiano

Ao ler um post por aí* sobre o lançamento do primeiro aparelho com Windows Mobile 6, o tal do XDA terra, fui procurar quais eram as características do hardware deste dispositivo.

O mais interessante de tudo é que até chegar ao post original eu tive que visitar quatro referências. Um post linkou outro, que linkou outro, mais um, e então o original.

Isso não é um exagero?

Nas aulas que tive sobre elaboração de referências sempre sugeriram que elas fossem feitas da forma mais direta possível. Isto significa que logo no primeiro post eu já deveria ter acesso à fonte da notícia.

Talvez a blogosfera condene isso, pois esse relacionamento entre sites, através de pingbacks e trackbacks, é positivo para todos, exceto ao leitor, neste caso.

Logo, fica aí a minha opinião: vá direto à fonte. Se você acessou 35 blogs recursivamente até encontrar o link original, aproveite e facilite a vida do usuário, afinal provavelmente ele vai passar por todo este trabalho novamente.

T+

* Conto o pecado mas não o pecador. Nada de flames.

Comentários 1 comentário

« Página anterior