segunda-feira, 30 de outubro de 2017

Desenhando linhas com efeito gradiente

Aqui vamos demonstrar como explorar um efeito gradiente na composição da cor de uma linha.

Para tanto, precisamos dos seguintes componentes principais:
  • Definimos form.CreateGraphics
  • Definimos 2 pontos p1 e p2 para traçar a linha
  • Criamos o objeto LinearGradientBrush
  • Criamos o objeto pen
  • Traçamos a linha
[System.Drawing.Graphics]$g = $f.CreateGraphics()
$lgb = New-Object System.Drawing.Drawing2D.LinearGradientBrush($p1, $p2, $c1, $c2)
$pen = New-Object System.Drawing.Pen($lgb)
$g.DrawLine($pen, $p1, $p2)


Nesse exemplo de código, estaremos traçando linhas a partir de um ponto central a todos os 360º de um círculo. Cada linha terá o efeito gradiente com as cores verde e azul. O código é o seguinte:
[reflection.assembly]::LoadWithPartialName( "System.Windows.Forms")
[reflection.assembly]::LoadWithPartialName( "System.Drawing")
[System.Windows.Forms.Application]::EnableVisualStyles();

Function line([Int32]$val,[String]$c1,[String]$c2) {
    $ang = $val * ([math]::PI/180) ## em Radianos
    $r=150 ## tamanho da linha
    [System.Drawing.Graphics]$g = $f.CreateGraphics()   
    $p1 = New-Object System.Drawing.Point(190, 180)
    $p2 = New-Object System.Drawing.Point((190+$r*[math]::Cos($ang)), (180+$r*[math]::Sin($ang)))
    $lgb = New-Object System.Drawing.Drawing2D.LinearGradientBrush($p1, $p2, $c1, $c2)
    $pen = New-Object System.Drawing.Pen($lgb)
    $g.DrawLine($pen, $p1, $p2)
    $g.Dispose()
}

$f = New-Object Windows.Forms.Form
$f.Width = 400
$f.Height = 400
$f.Show()
$f.Refresh()

for ([Int32]$angulo=0;$angulo -lt 360;$angulo++) {
    line $angulo 'Green' 'Blue'
    Start-Sleep -Milliseconds 50
}

Start-Sleep -s 5
$f.Close()
$f.Dispose()

Segue o resultado:

Nenhum comentário:

Postar um comentário