Arquivo de março, 2014

Visual – Scale – Python – Linux

Publicado: 23 de março de 2014 em Python

O Widget de escala, Scale permite que o usuário selecione um valor numérico, movendo um botão “Slider” ao longo de uma escala. Você pode controlar os valores mínimos e máximos, bem como a resolução. Você pode usar um widget de escala em vez de um widget de entrada, quando você quer que o usuário insira um valor numérico limitado.

Exemplo:

Neste exemplo exibimos um valor de um componente Scale selecionado pelo usuário em um rotulo de tela.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Scale.py

# importa modulo

from Tkinter import *

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Declara variaveis
texto = StringVar()
mostraValor = "Valor escolhido: "

# Evento do botão
def clique():
    texto.set(mostraValor + str(slider.get()))

# Declara componentes
titulo = Label(formulario, text = "Desenvolvimento Aberto - Scale")
valor = Label(formulario, textvariable =texto)
slider = Scale(formulario, from_ = 1, to = 50, orient=HORIZONTAL)
botao = Button(formulario, text="Ok", command= clique)

# Adiciona propriedades
texto.set(mostraValor)
slider.set(25)

# Exibe componentes no formulario
titulo.grid(row=0, sticky=W, padx=10, pady=20)
valor.grid(row=1,  sticky=W, padx=10)
slider.grid(row=2, sticky=W, padx =10)
botao.grid(row=3,  sticky=W, padx=10, pady=20)

# Loop do tcl
mainloop()

Visual – MFC – Slider – C++

Publicado: 23 de março de 2014 em C/C++

Slider

Um controle deslizante, também conhecido como Track Bar, é um objeto de interface gráfica (GUI) com o qual o usuário pode definir um valor movendo um indicador, geralmente de uma forma horizontal. Em alguns casos, o usuário também pode clicar em um ponto no controle deslizante para alterar a configuração.

Visual Studio

slider

Para usar o componente Slider siga os seguintes passos:

  1. Crie um novo projeto MFC Dialog Based.
  2. Coloque um componente Static Text e  um componente Edit Control mude sua propriedade Border = False e Read Only = True.
  3. Coloque um componente Slider e mude sua propriedade Auto Ticks = True e Tick Marks = True.
  4. Coloque um componente Button e crie um evento BN_CLICKED.
  5. Crie uma variável para o Edit Control chamada m_valor.
  6. Crie uma variável par o Slider chamada m_slider.
  7. Use o código abaixo para completar o código criado automaticamente.

Exemplo:

Neste exemplo criamos um programa que exibe o valor de um Slider em um controle de edição. Neste exemplo use as partes marcadas do código abaixo para completar seu programa, pois existe código escrito para a inicialização dos componentes dentro dos diálogos criados automaticamente, exemplo: OnInitDialog.

C++


// Código Gerado automaticamente
//

#include "stdafx.h"
#include "Tbarcpp.h"
#include "TbarcppDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CTbarcppDlg::CTbarcppDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CTbarcppDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTbarcppDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT1, m_valor);
	DDX_Control(pDX, IDC_SLIDER1, m_slider);
}

BEGIN_MESSAGE_MAP(CTbarcppDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &CTbarcppDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

// Desenvolvimento Aberto
// Cria variavel estatica

static CString mostraValor = L"O valor escolhido é: ";

BOOL CTbarcppDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

	// Desenvolvimento Aberto
	// Inicializa componentes

	m_valor.SetWindowTextW(mostraValor);

	m_slider.SetRangeMin(1);
	m_slider.SetRangeMax(50);
	m_slider.SetPos(25);

	return TRUE;
}

void CTbarcppDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this);

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

HCURSOR CTbarcppDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

// Desenvolvimento Aberto
// Nosso código começa aqui.
void CTbarcppDlg::OnBnClickedButton1()
{
	CString valor;
	int posicao = m_slider.GetPos();
	valor.Format(_T("%d") , posicao);
	m_valor.SetWindowTextW(mostraValor + valor);

}

Visual – TrackBar, TickStyle – C#

Publicado: 23 de março de 2014 em C#

TrackBar

Um controle deslizante, também conhecido como Slider, é um objeto de interface gráfica (GUI) com o qual o usuário pode definir um valor movendo um indicador, geralmente de uma forma horizontal. Em alguns casos, o usuário também pode clicar em um ponto no controle deslizante para alterar a configuração.

TickStyle

Especifica a localização das marcas de escala em um controle TrackBar.

Exemplo:

Neste exemplo criamos um TrackBar dinamicamente.

C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TBar
{
    public partial class Form1 : Form
    {
        // Declara componentes
        Label titulo;
        Label valor;
        TrackBar slider;
        Button botao;

        // Declara variaveis
        String mostraValor = "Valor escolhido é: ";

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            // Muda propriedades do formulario
            Form1.ActiveForm.Text = "TrackBar";
            Form1.ActiveForm.Size = new Size(250, 200);

            // Cria componentes
            titulo = new Label();
            valor = new Label();
            slider = new TrackBar();
            botao = new Button();

            // Adiciona propriedades
            titulo.Text = "Desenvolvimento Aberto - TrackBar";
            valor.Text = mostraValor;
            botao.Text = "Ok";

            slider.Maximum = 50;
            slider.Minimum = 1;
            slider.Value = 25;
            slider.TickStyle = TickStyle.BottomRight;

            titulo.Size = new Size(300, 20);
            valor.Size = new Size(300, 20);

            titulo.Location = new Point(5, 10);
            valor.Location = new Point(5, 30);
            slider.Location = new Point(5, 70);
            botao.Location = new Point(5, 120);

            // Cria evento para o botão
            botao.Click += new System.EventHandler(this.botao_Click);

            // Adiciona eventos no formulario
            Form1.ActiveForm.Controls.Add(titulo);
            Form1.ActiveForm.Controls.Add(valor);
            Form1.ActiveForm.Controls.Add(slider);
            Form1.ActiveForm.Controls.Add(botao);
        }

        private void botao_Click(object sender, EventArgs e)
        {
            // Mostra valor do trackbar
            valor.Text = mostraValor + Convert.ToString(slider.Value);
        }
    }
}

Visual – JSLider, Ticks – Java

Publicado: 23 de março de 2014 em Java

Slider

Um controle deslizante, também conhecido como Track Bar, é um objeto de interface gráfica (GUI) com o qual o usuário pode definir um valor movendo um indicador, geralmente de uma forma horizontal. Em alguns casos, o usuário também pode clicar em um ponto no controle deslizante para alterar a configuração.

Ticks

Os Ticks são os riscos de marcação do Slider e indicam a quantidades de valores que você pode diminuir ou aumentar deslizando o botão do Slider. Os Ticks são opcionais você pode mostra-los ou não usando a propriedade SetPaintTicks, você também pode configurar a quantidade e o espaçamento das marcas do Sider e mostrar suas legendas.

Exemplo:

Neste exemplo criamos um Slider e mudamos suas propriedades para que mostres as marcações e legendas de suas posições.

Java

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

public class Slider extends JPanel implements ActionListener
{
	// Declara componentes
	JLabel titulo;
	JLabel valor;
	JSlider slider;
	JButton botao;

	// Declara variaveis
	int sMin = 0;
	int sMax = 50;
	int sPos = 25;
	String mostraValor = "Valor escolhido é: ";

	Slider()
	{
		// Cria componentes
		titulo = new JLabel("Desenvolvimento Aberto - JSlider");
		valor = new JLabel(mostraValor);
		slider = new JSlider(JSlider.HORIZONTAL, sMin, sMax, sPos);
		botao = new JButton("Ok");

		// Adiciona propriedades ao componentes
		slider.setMajorTickSpacing(10);
		slider.setMinorTickSpacing(1);
		slider.setPaintTicks(true);
		slider.setPaintLabels(true);

		botao.addActionListener(this);

		// Cria layout
		GridLayout layout = new GridLayout(0,1,5,10);

		setLayout(layout);

		// Adiciona componentes no painel
		add(titulo);
		add(valor);
		add(slider);
		add(botao);

		setBorder(BorderFactory.createEmptyBorder(20,20,20,20));

	}

	public void actionPerformed(ActionEvent arg0)
	{
		// Evento do botão
		if (arg0.getSource() == botao)
		{
			valor.setText(mostraValor + String.valueOf(slider.getValue()));
		}

	}

	 private static void mostraGui()
	    {
	        // Cria GUI
		    JFrame formulario = new JFrame("JSlider");
	        formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	        JComponent painel = new Slider();
	        painel.setOpaque(true);

	        formulario.setContentPane(painel);
	        formulario.pack();
	        formulario.setVisible(true);
	    }

	public static void main(String[] args)
	{

		// Mostra GUI
		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {

				mostraGui();

			}
		});

	}
}

GlowScript – Google – Programação 3D

Publicado: 22 de março de 2014 em 3D

GlowScript é um ambiente fácil de usar, poderoso para a criação de animações em 3D e publicá-las na web.  No glowscript.org, você pode escrever e executar programas GlowScript diretamente no seu navegador, armazená-los na nuvem de graça, e facilmente compartilhá-los com outras pessoas.

GlowScript, foi inspirado pelo VPython e oferece uma seleção semelhante de objetos 3D (caixa, cilindro, etc) para os programas de JavaScript, usando a biblioteca gráfica WebGL  3D disponíveis em muitos navegadores atuais. A intenção é tornar mais fácil para escrever em tempo real objetos 3D navegáveis ​​que são executados em uma página do navegador web, enquanto que os programas VPython, sendo baseado em Python, não são executados em navegadores. Existe um programa Python que faz uma conversão parcial do VPython para GlowScript.

Com usar

GlowScript foi adotado pela Google e você pode programar diretamente das nuvens, para isto é necessário somente uma conta do Google e o navegador Google Chrome, caso queira utilizar o GlowScript de outro navegador basta instalar o plug-in Google Chrome Frame.

Entre no site http://www.glowscript.org/ e efetue um login, crie um novo programa, cole o código abaixo e rode o programa. Como o GlowScript roda diretamente do browser você pode usar este link para testar o código direto da web.

Rode direto da web: AtomicSolid

glow

Exemplo:

Neste exemplo criamos vários objetos sphere 3D unidos  por objetos helix animados simulando efeitos de molas.

GlowScript

GlowScript 1.0
/* In GlowScript programs, rotate the camera by dragging with the right mouse button, or hold down the Ctrl key and drag.

To zoom, drag with the left+right mouse buttons, or hold down the Alt key and drag, or use the mouse wheel.*/

vec.axes = [vec(1,0,0), vec(0,1,0), vec(0,0,1)]

var k = 1
var m = 1
var spacing = 1.0
var atom_radius = 0.3*spacing
var L0 = spacing-1.8*atom_radius
var V0 = pi*pow(0.5*atom_radius,2)*L0 // initial volume of spring
var N = 3
var crystal = makeCrystal(N, atom_radius, spacing, 0.1*spacing*sqrt(k/m))
scene.center = 0.5*(N-1)*vec(1,1,1)
scene.autoscale = false
var dt = 0.04*(2*pi*sqrt(m/k))

function display_instructions() {
    var s1 = "In GlowScript programs:\n\n"
    var s2 = "    Rotate the camera by dragging with the right mouse button,\n        or hold down the Ctrl key and drag.\n\n"
    var s3 = "    To zoom, drag with the left+right mouse buttons,\n         or hold down the Alt key and drag,\n         or use the mouse wheel."
    scene.caption.text(s1+s2+s3)
}

// Display text below the 3D graphics:
scene.title.text("A model of a solid represented as atoms connected by interatomic bonds")
display_instructions()

function makeCrystal( N, atom_radius, spacing, momentumRange ) {
    var crystal = { atoms:[], springs:[] }
    var atom
    var x,y,z

    function atomAt(np) {
        if (np.x>=0 && np.y>=0 && np.z>=0 && np.x            return crystal.atoms[np.x + np.y*N + np.z*N*N]
        // Otherwise create an invisible wall and return it
        var w = box()
        w.visible = false  // comment out to see the true model
        w.size = atom_radius*vec(1,1,1)
        w.pos = np*spacing
        w.momentum = vec(0,0,0)
        return w
    }

    // Create N^3 atoms in a grid
    for(z=0; z<N; z++)
        for(y=0; y<N; y++)
            for(x=0; x<N; x++) {
                atom = sphere()
                atom.pos = vec(x,y,z)*spacing
                atom.size = 2*atom_radius*vec(1,1,1)
                atom.color = vec(0,0.58,0.69)
                atom.momentum = momentumRange*vec.random()
                crystal.atoms.push( atom )
            }

    // Create a grid of springs linking each atom to the adjacent atoms
    // in each dimension, or to invisible walls where no atom is adjacent
    for(var d=0; d<3; d++)
        for(z=-1; z<N; z++)
            for(y=-1; y<N; y++)
                for(x=-1; x<N; x++) {
                    atom = atomAt(vec(x,y,z))
                    var neighbor = atomAt(vec(x,y,z)+vec.axes[d])

                    if (atom.visible || neighbor.visible) {
                        var spring = helix()
                        spring.visible = atom.visible && neighbor.visible
                        spring.thickness = 0.05
                        spring.size = vec(spacing,atom_radius,atom_radius)
                        spring.up = vec(1,1,1) // prevent fibrillation of vertical springs
                        spring.atoms = [ atom, neighbor ]
                        spring.color = vec(1,0.5,0)
                        crystal.springs.push(spring)
                    }
                }
    return crystal
}

while (true) {
    rate(30,wait)
    for(var a=0; a<crystal.atoms.length; a++) {
        var atom = crystal.atoms[a]
        atom.pos = atom.pos + atom.momentum/m*dt
    }
    for(var s=0; s<crystal.springs.length; s++) {
        var spring = crystal.springs[s]
        spring.axis = spring.atoms[1].pos - spring.atoms[0].pos
        var L = mag(spring.axis)
        spring.axis = spring.axis.norm()
        spring.pos = spring.atoms[0].pos+0.5*atom_radius*spring.axis
        var Ls = L-1*atom_radius
        spring.size.x = Ls
        var Fdt = spring.axis * (k*dt * (1-spacing/L))
        spring.atoms[0].momentum = spring.atoms[0].momentum + Fdt
        spring.atoms[1].momentum = spring.atoms[1].momentum - Fdt
    }
}

Introdução a programação 3D – VPhyton

Publicado: 22 de março de 2014 em 3D

VPython é a linguagem de programação Python, adicionada de um módulo de gráficos 3D chamado Visual. VPython permite aos usuários criar objetos como esferas e cones no espaço 3D e exibe esses objetos em uma janela. Isto torna mais fácil para criar visualizações simples, permitindo que os programadores se concentrar mais no aspecto computacional de seus programas. A simplicidade de VPython tornou uma ferramenta para a ilustração de física simples, especialmente no ambiente educacional.

Controles

  • Rotação : use o botão direito do mouse para girar o objeto 3D
  • Zoom: use os dois botões do mouse simultaneamente para dar zoom, posicionando o mouse para frente e para traz.

Requisitos

  • Sistema Operacional  – Windows, Linux ou Mac.
  • Python Versão 2.75
  • VPython 6
  • VIDLE – Ide Visual Python

Downloads

Python e VPython

Windows: http://www.vpython.org/contents/download_windows.html

Linux: http://www.vpython.org/contents/download_linux.html

Mac: http://www.vpython.org/contents/download_mac.html

Instalação

Primeiro você precisa instalar o Python 2.75 para o seu sistema operacional, depois instale o Vpython. O VPython utiliza sua própria IDE, ao invés de usar a IDE visual tradicional para o Python chamada IDLE, você precisa usar a IDE que é instalada automaticamente com o VPython chamada VIDLE.

Recomendação

É necessário saber o básico da linguagem Python, para isto use nosso Walktrought Python, usando o menu do lado esquerdo do site chamado Categoria e escolha a opção Python, os posts mais recentes vem em primeiro lugar, caso queira iniciar na linguagem Python vá para o primeiro post.

Exemplo:

Após a instalação do VPython, abra a IDE VIDLE e use o exemplo abaixo para testar o VPython, use os controles para efeito de zoom e rotação dos objetos 3D. Este exemplo ilustra a Lei de Faraday usada na área da Física.

intro

Lei de Faraday

A lei de Faraday-Neumann-Lenz, ou lei da indução eletromagnética, é uma das quatro equações de Maxwell que regem o eletromagnetismo clássico. É com essa lei que se entende a produção de corrente elétrica em um circuito colocado sob efeito de um campo magnético variável ou por um circuito em movimento em um campo magnético constante. É a base do funcionamento dos alternadores, dínamos e transformadores.

VPython

from visual import *
#needs a code clean-up (seems to now work on Python 2.4/VPython 3.2.9)

print """
Electromagnetism: Faraday Law (v2.76) 2008-02-29
Rob Salgado (salgado@physics.syr.edu)

Electric Field vectors are blue. Magnetic Field vectors are red.

  The thick green vector representing
d|B|/dt ("time-rate-of-change-of-the-magnitude-of-the-magnetic-field")
is associated with the spatial arrangement of the electric field according to
the FARADAY Law (as evaluated on the green loop).
[The sense of circulation on the green loop (by the RightHandRule) determines
the direction of change of the magnetic field... OPPOSITE to your thumb.]

      CLICK the mouse to start and stop the animation
      TOGGLE: (f)araday
              (d)im-fields (n) color-scheme  (v)erbose"""

scene=display(
    width=800,height=600,
    x=0, y=0)

colorScheme=0          #key n (negative)
colorBackground=[color.black,color.white]
colorEdimmed=[(0.0,0,0.4),(0.5,0.5,1)]
scene.ambient=0.4
Ecolor=[color.blue,(0.5,0.5,1),color.green]
Ecolor[1]=colorEdimmed[colorScheme]

scene.background=colorBackground[colorScheme]
scene.background=color.black; Ecolor=[color.blue,(0,0,.4),color.green]
#scene.background=color.white; Ecolor=[color.blue,(0.9,0.9,0.9),color.yellow]
scene.title="FARADAY: Changing-Bs are associated with Curly-Es"
scene.range=(2.5,2.5,2.5)
scene.forward=(-2.85804, -1.26038, -2.96742)

#scene.forward=(0.089623,4.193811,0.983082)

#scene.range=(1.5,1.5,1.5)
#scene.forward=(2.102859,-3.185552,1.998194)

showFaraday=0
dimFields=0

B=[]
B.append( arrow(pos=vector(0.25,0,0),axis=vector(0,0,1e-3), shaftwidth=0.04,fixedwidth=1, color=color.red)  )
B.append( arrow(pos=vector(-0.25,0,0),axis=vector(0,0,1e-3),shaftwidth=0.04,fixedwidth=1, color=color.red)  )
B.append( arrow(pos=vector(0,0.25,0),axis=vector(0,0,1e-3), shaftwidth=0.04,fixedwidth=1, color=color.red)  )
B.append( arrow(pos=vector(0,-0.25,0),axis=vector(0,0,1e-3), shaftwidth=0.04,fixedwidth=1, color=color.red)  )
B.append( arrow(pos=vector(0.25,0,-2),axis=vector(0,0,1e-3), shaftwidth=0.04,fixedwidth=1, color=color.red)  )
B.append( arrow(pos=vector(-0.25,0,-2),axis=vector(0,0,1e-3),shaftwidth=0.04,fixedwidth=1, color=color.red)  )
B.append( arrow(pos=vector(0,0.25,-2),axis=vector(0,0,1e-3), shaftwidth=0.04,fixedwidth=1, color=color.red)  )
B.append( arrow(pos=vector(0,-0.25,-2),axis=vector(0,0,1e-3), shaftwidth=0.04,fixedwidth=1, color=color.red)  )

N=8
dBdt=0.2
E=[]
Ebox=[]

for z in [0]:
    for r in [0.5]:
        for i in arange(0,N):
            theta=2.*pi*i/N
            theta_hat=vector(-sin(theta), cos(theta), 0)
            Efield= -dBdt*theta_hat/r
            A=arrow(pos=vector(r*cos(theta),r*sin(theta),z) , axis=Efield,shaftwidth=0.04,fixedwidth=1,color=color.blue)
            E.append(A)
            Ebox.append( box(pos=A.pos+A.axis/4.,axis=A.axis,length=mag(A.axis)/2.,height=0.04,width=0.04,color=color.blue) )
    for r in [1,1.5]:
        for i in arange(0,N):
            theta=2.*pi*i/N
            theta_hat=vector(-sin(theta), cos(theta), 0)
            Efield= -dBdt*theta_hat/r
            A=arrow(pos=vector(r*cos(theta),r*sin(theta),z) , axis=Efield,shaftwidth=0.04,fixedwidth=1,color=color.blue)
            E.append(A)
            Ebox.append( box(pos=A.pos+A.axis/4.,axis=A.axis,length=mag(A.axis)/2.,height=0.04,width=0.04,color=color.blue) )

for z in [-0.5,0.5,-1,1]:
    for r in arange (.5,1.5,.5):
        for i in arange(0,N):
            theta=2.*pi*i/N
            theta_hat=vector(-sin(theta), cos(theta), 0)
            Efield= -dBdt*theta_hat/r
            A=arrow(pos=vector(r*cos(theta),r*sin(theta),z) , axis=Efield,shaftwidth=0.04,fixedwidth=1,color=color.blue)
            E.append(A)
            Ebox.append( box(pos=A.pos+A.axis/4.,axis=A.axis,length=mag(A.axis)/2.,height=0.04,width=0.04,color=color.blue) )

hcolor=Ecolor[2]

Bp=[]
for b in B:
    Bp.append( arrow(pos=b.pos+b.axis,axis=dBdt*norm(b.axis),
                     #length=dBdt,
                     fixedwidth=1, color=hcolor, shaftwidth=0.07,headwidth=0.14, visible=showFaraday)  )

Eloop_rad=mag(E[0].pos)
FaradayLoop=curve(color=hcolor, x=Eloop_rad*cos(2.*pi*arange(40)/40.), y=Eloop_rad*sin(2.*pi*arange(40)/40.), visible=showFaraday )

#I=cylinder(radius=0.04,pos=vector(0,0,-2),axis=vector(0,0,4), color=color.yellow)
#chgpos=[]
#chg=[]
#for i in arange(0,N):
#    chgpos.append(vector(I.pos+I.axis*i/N))
#    chg.append(sphere(pos=chgpos[-1],radius=0.05,color=I.color))

t=9.50
#t=10.0
#t=10.5

dt=1

#Now... WHEN AN OBJECT IS PICKED,
#TRANSLATE THE scene.center TO THE OBJECT'S POSITION
while 1:
    rate(10)
    t += dt
##    for i in arange(0,N):
##        chg[i].pos = chgpos[i]+(t%4)*vector(0,0,.125)
    bcount=0
    for b in B:
        b.length = (t%20)/10.+1e-3
        Bp[bcount].pos=b.pos+b.axis; bcount +=1

    if scene.mouse.clicked:
        scene.mouse.getclick()
        newPick=scene.mouse.pick
        if newPick !=None:
            ### ANIMATE TO SELECTED POSITION
            tempcolor=newPick.color
            newPick.color=color.yellow
            target=newPick.pos
            step=(target-scene.center)/20.
            for i in arange(1,20,1):
                rate(10)
                scene.center +=step
                scene.scale *= 1.037  #(1.037**19=1.99)
            newPick.color=tempcolor

    if scene.kb.keys: # is there an event waiting to be processed?
        s = scene.kb.getkey() # obtain keyboard information
        if s=='f':
            showFaraday +=1; showFaraday %=2; FaradayLoop.visible=showFaraday
            for i in Bp:
                i.visible=showFaraday

            if showFaraday==1:
                for i in arange(0,N):
                    E[i].color=hcolor
                    Ebox[i].color=hcolor
            else:
                for i in arange(0,N):
                    E[i].color=color.blue
                    Ebox[i].color=color.blue

        if s=='d':
            dimFields +=1; dimFields %=2;

            for i in arange(N,len(E)):
                E[i].color=Ecolor[dimFields]
                Ebox[i].color=Ecolor[dimFields]
            for i in arange(1,4*N+1):
                E[-i].visible=(1-dimFields)
                Ebox[-i].visible=(1-dimFields)

        if s=='n':
            colorScheme = (colorScheme+1)%2 #TOGGLE colorScheme
            scene.background=colorBackground[colorScheme]
            Ecolor[1]=colorEdimmed[colorScheme]
            scene.background=colorBackground[colorScheme]

            for i in arange(N,len(E)):
                E[i].color=Ecolor[dimFields]
                Ebox[i].color=Ecolor[dimFields]
            for i in arange(1,4*N+1):
                E[-i].visible=(1-dimFields)
                Ebox[-i].visible=(1-dimFields)

        if s=='z':
            print "scene.center=(%f,%f,%f)"  % tuple(scene.center)
            print "scene.forward=(%f,%f,%f)"  % tuple(scene.forward)
            print "scene.range=(%f,%f,%f)"  % tuple(scene.range)
            print "t=%f\n" %t

        if s==' ':
            dt  +=1; dt %=2;

Visual – SpinBox – Python – Linux

Publicado: 22 de março de 2014 em Python

Em computação, um SpinBox é um elemento de interface gráfica  que permite aumentar ou diminuir um valor, geralmente, de um parâmetro numérico (por exemplo, tamanho ou data) de um objeto quando o usuário pressiona os botões do SpinBox . O SpinBox normalmente é  usado em conjunto com caixa de texto que permitem inserir ou editar dados diretamente. Dependendo do gerenciador de janela ou aplicação em uso, existem muitos estilos de apresentação gráfica de SpinBox.

O Widget Spinbox é uma variante do widget Tkinter entrada padrão, que pode ser usado para selecionar a partir de um número fixo de valores. O  Spinbox pode ser usado em vez de uma entrada comum, nos casos em que o usuário só tem um número limitado de valores ordenados para escolher.

Exemplo:

Neste exemplo criamos um SpinBox e jogamos sua propriedade para um Label.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# SpinBox.py

# importa modulo
from Tkinter import *

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Limpa Label
def limpa():
    limpa = chr(32)
    for i in range(1,18):
          limpa = limpa + chr(32)
    return limpa

# Evento On Click do botão
def clique():
    txt = "Numero: " + spinner.get() + limpa()
    texto = Label(formulario,text = txt)
    texto.grid(row=2, sticky=W, padx = 20)

# Cria comcponentes
titulo = Label(formulario, text = "Desenvolvimento Aberto - Spin")

descricao = Label(formulario, text = "Minimo = 1, Maximo = 10")

texto = Label(formulario, text = "Numero:")

spinner = Spinbox(formulario, from_ = 1, to = 10)

botao = Button(formulario, text="Ok", command = clique)

# Alinha componentes na tela
titulo.grid(row= 0, sticky=W, padx=20, pady=5)
descricao.grid(row=1, sticky=W, padx=20)
texto.grid(row=2, sticky=W, padx=20, pady=10)
spinner.grid(row=3, sticky=W, padx=20)
botao.grid(row=4, sticky=W, padx=20, pady=10)

# Looping do tcl
mainloop()

Spin Control

É um controle de rotação, onde os usuários podem clicar em botões de seta para alterar gradualmente o valor dentro de sua caixa de texto numérico . A caixa de rotação refere-se à combinação de uma caixa de texto e seu controle de rotação associado.

O Spin Control é um controle que deve ser associado a um Edit Control através da propriedade AutoBuddy e é necessário  que os controles estejam alinhados e sejam colocados no dialogo na ordem de associação.

OnInitDialog

Este método é chamado em resposta à mensagem WM_INITDIALOG e o utilizamos quando precisamos inicializar componentes.

Uso do Spin Control

  • Geralmente o Spin Control é usado para entrada de dados numéricos.
  • Use Spin Controls quando se sabe exatamente os valores numéricos de escolha.
  • O Spin Control não deve ser usado sozinho ou com outro tipo de controle a não ser um Text Control.

Design

Desenhe um dialogo e insira os componentes na mesma ordem dispostos como imagem abaixo :

spincontrolVisual Studio

  1. Crie um projeto MFC Application Dialog Based chamado SpinControl.
  2. Coloque os componentes no dialogo e use a imagem acima para referencia.
  3. Adicione dois Static Text, dois Text Control, um Spin Control e um Button.
  4. Crie uma variável para o primeiro Edit Control chamada m_edit e para o segundo Edit Control crie uma variável chamada m_textoSpin.
  5. Crie uma variável para o Spin Control chamada m_spin.
  6. No Spin Control modifique suas propriedades: Alignment = Right Align, Auto Buddy = True e Set Buddy Integer = True.
  7. Crie um evento BN_CLICKED para o botão.
  8. Use o código abaixo para completar o código gerado automaticamente.

Exemplo:

Neste exemplo usamos um Spin Control e o associamos a um Text Control e inicializamos o SpinControl no dialogo OnInitDialog, parametrizando um valor mínimo e um valor máximo para o controle.

C#

// Código gerado Automaticamente

#include "stdafx.h"
#include "SpinControl.h"
#include "SpinControlDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CSpinControlDlg::CSpinControlDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CSpinControlDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSpinControlDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_SPIN1, m_spin);
	DDX_Control(pDX, IDC_EDIT2, m_edit);
	DDX_Control(pDX, IDC_EDIT1, m_textoSpin);
}

BEGIN_MESSAGE_MAP(CSpinControlDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &CSpinControlDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

BOOL CSpinControlDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

	//  ****************************
	//  *                          *
	//  *  Desenvolvimento Aberto  *
	//  *  Inicializa Spin Control *
	//  *                          *
	//  ****************************

	m_spin.SetRange(1,10);

	return TRUE;
}

void CSpinControlDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this);

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);

		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

HCURSOR CSpinControlDlg::OnQueryDragIcon()
{
	return static_cast(m_hIcon);
}

//  ******************************
//  *                            *
//  *  Desenvolvimento Aberto    *
//  *  Nosso código Começa aqui. *
//  *                            *
//  ******************************

void CSpinControlDlg::OnBnClickedButton1()
{
	CString texto;
	m_textoSpin.GetWindowTextW(texto);
	m_edit.SetWindowTextW(texto);
}

Visual – SpinBox, NumericUpDown, DomainUpDown – C#

Publicado: 22 de março de 2014 em C#

Em computação, um SpinBox é um elemento de interface gráfica  que permite aumentar ou diminuir um valor, geralmente, de um parâmetro numérico (por exemplo, tamanho ou data) de um objeto quando o usuário pressiona os botões do SpinBox . O SpinBox normalmente é  usado em conjunto com caixa de texto que permitem inserir ou editar dados diretamente. Dependendo do gerenciador de janela ou aplicação em uso, existem muitos estilos de apresentação gráfica de SpinBox.

NumericUpDown

Representa um Windows SpinBox, também conhecido como um controle de cima para baixo, que exibe valores numéricos.

DomainUpDown

Representa um Windows SpinBox, também conhecido como um controle de cima para baixo que exibe valores de cadeia de texto.

Exemplo:

Neste exemplo criamos dois SpinBox, um para valores numéricos e outro que suporta Arrays.

C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Spinner
{
    public partial class Form1 : Form
    {
        // Declara Componentes
        Label titulo;
        Label texto;
        Label numero;
        Label lista;
        NumericUpDown spinner1;
        DomainUpDown spinner2;
        Button botao;

        String[] tEstacao = { "Primavera", "Verão", "Outono", "Inverno" };

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            // Cria Componentes
            titulo = new Label();
            texto = new Label();
            numero = new Label();
            lista = new Label();
            botao = new Button();

            spinner1 = new NumericUpDown();
            spinner2 = new DomainUpDown();

            // Adiciona valores as propriedades dos componentes
            spinner1.Value = 1;
            spinner1.Minimum = 0;
            spinner1.Maximum = 10;
            spinner1.Increment = 1;

            // Adiciona Array
            spinner2.Items.AddRange(tEstacao);

            titulo.Text = "Desenvolvoimento Aberto - NumericUPDown";
            texto.Text = "Texto:";
            numero.Text = "Incio= 1, min= 0, max= 10, alimeta= 1";
            lista.Text = "Lista de estações do ano";
            botao.Text = "Ok";

            // Tamanho dos componentes
            titulo.Size = new Size(300, 20);
            texto.Size = new Size(300, 20);
            numero.Size = new Size(300, 20);
            lista.Size = new Size(300, 20);

            // posição dos compomentes no formulario
            titulo.Location = new Point(5, 10);
            texto.Location = new Point(5, 45);
            numero.Location = new Point(5, 70);
            spinner1.Location = new Point(5,90);
            lista.Location = new Point(5, 120);
            spinner2.Location = new Point(5, 140);
            botao.Location = new Point(5, 170);

            // Evento do botão
            botao.Click += new System.EventHandler(this.botao_Click);

            // Adiciona componentes ao formulario
            Form1.ActiveForm.Controls.Add(titulo);
            Form1.ActiveForm.Controls.Add(texto);
            Form1.ActiveForm.Controls.Add(numero);
            Form1.ActiveForm.Controls.Add(spinner1);
            Form1.ActiveForm.Controls.Add(lista);
            Form1.ActiveForm.Controls.Add(spinner2);
            Form1.ActiveForm.Controls.Add(botao);

        }

        // Dispara evento on click do botão
        private void botao_Click(object sender, EventArgs e)
        {
            texto.Text = "Numero: " + spinner1.Value.ToString() + " " +
                         "Estação: " + spinner2.Text;
        }

    }
}

Em computação, um Spinner  é um elemento de interface gráfica  que permite aumentar ou diminuir um valor, geralmente, de um parâmetro numérico (por exemplo, tamanho ou data) de um objeto quando o usuário pressiona os botões do Spinner. O Spinner normalmente é  usado em conjunto com caixa de texto que permitem inserir ou editar dados diretamente. Dependendo do gerenciador de janela ou aplicação em uso, existem muitos estilos de apresentação gráfica de Spinner.

NumberModel

É uma classe associada ao Spinner que permite parametrizar um modelo baseado em números.

ListModel

É uma classe associada ao Spinner que permite parametrizar um modelo baseada em Arrays.

DateModel

É uma classe associada ao Spinner que permite parametrizar um modelo baseada em datas.

Calendar

A classe Calendar é uma classe abstrata que fornece métodos para a conversão entre um instante específico no tempo e um conjunto de campos de calendário, como YEAR, MONTH, DAY_OF_MONTH, hora, e assim por diante, e para manipular os campos de calendário, como obter a data da próxima semana.

Exemplo:

Neste programa desenvolvemos três modelos de Spinners baseados em cada um dos seus SpinnerModels e extraímos seus valores para uma saída de tela.

Java

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;

public class Spinner extends JPanel implements ActionListener
{
	// Declara Labels
	JLabel titulo;
	JLabel texto;
	JLabel numero;
	JLabel lista;
	JLabel ano;

	// Declara Spinners
	JSpinner spinner1;
	JSpinner spinner2;
	JSpinner spinner3;

	// Declara modelos de Spinner
	SpinnerModel numeros;
	SpinnerModel estacao;
	SpinnerModel data;

	// Declara Botão
	JButton botao;

	// Declara Array
	String[] tEstacao = {"Primavera", "Verão", "Outono", "Inverno"};

	Spinner()
	{
		// Cria Componentes
		titulo = new  JLabel("Desenvolvoimento Aberto - JSpinner");
		texto = new JLabel("Texto:");
		numero = new JLabel("Incio= 1, min= 0, max= 10, alimeta= 1");
		lista = new JLabel("Lista de estações do ano");
		ano = new JLabel("inicio= ano atual, min= -10, max= +10, alimenta= 1");

		// Cria Modelos de Spinner
	    numeros = new SpinnerNumberModel(1, 0, 10, 1);
	    estacao = new SpinnerListModel(tEstacao);

	    // Cria um calendario e assoia a um modelo de spinner
	    Calendar calendario =  Calendar.getInstance();
	    Date dataInicial = calendario.getTime();

	    calendario.add(calendario.YEAR , -10);
	    Date minData = calendario.getTime();

	    calendario.add(calendario.YEAR , +20);
	    Date maxData = calendario.getTime();

	    // Cria modelo de Spinner
	    data = new SpinnerDateModel(dataInicial, minData, maxData , 1);

	    // Cria Spinners
		spinner1 = new JSpinner(numeros);
		spinner2 = new JSpinner(estacao);
		spinner3 = new JSpinner(data);

		// Cria botão e seu evento on click
		botao = new JButton("OK");
		botao.addActionListener(this);

		// Cria um Layout
		GridLayout layout = new GridLayout(0,1,5,5);
		setLayout(layout);

		// Adiciona componentes ao painel
		add(titulo);
		add(texto);
		add(numero);
		add(spinner1);
		add(lista);
		add(spinner2);
		add(ano);
		add(spinner3);
		add(botao);

		// Cria uma borda no painel
		setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

	}

	public void actionPerformed(ActionEvent arg0) {

		// Evento on click do botão
		if (arg0.getSource() == botao)
		{
			texto.setText("Numero: " + String.valueOf(spinner1.getValue()) + " " +
					      "Texto: "  + String.valueOf(spinner2.getValue()) + " " +
					      "Data: "   + String.valueOf(spinner3.getValue()));
		}

	}

	 private static void mostraGui()
	    {
		    // Cria Formulario, adiciona suas propriedades e associa seus componentes
	        JFrame formulario = new JFrame("Lista de Música");
	        formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	        JComponent painel = new Spinner();
	        painel.setOpaque(true);

	        formulario.setContentPane(painel);
	        formulario.pack();
	        formulario.setVisible(true);
	    }

	public static void main(String[] args) {

		// Cria GUI.
		javax.swing.SwingUtilities.invokeLater(new  Runnable()
        {
            @Override
            public void run()
            {
                mostraGui();

            }
        });
   }
}