![]() |
|
|
Planilha de Dimensionamento de Tubulações
Hidráulicas Água Fria e Água Quente CompletaNossa planilha automática de dimensionamento de tubulações de água fria e quente é uma ferramenta desenvolvida para auxiliar engenheiros e projetistas no cálculo rápido e preciso das redes hidráulicas de edificaçoes. Por meio da inserçao de dados como vazao, diâmetro da tubulaçao, comprimento da rede, material do tubo e coeficientes hidráulicos, a planilha realiza automaticamente os cálculos necessários para verificar velocidade da água, perda de carga e dimensionamento adequado das tubulaçoes. |
||
Java ::: Dicas & Truques ::: Programação Orientada a Objetos |
Como usar o modificador final em classes, variáveis e métodos Java - Programação Orientada a Objetos em JavaQuantidade de visualizações: 14052 vezes |
O modificador final pode ser usado com classes, variáveis e métodos. É claro que o significado varia dependendo do uso. Por exemplo, ao marcarmos uma variável com o modificador final, estamos na verdade criando uma constante, ou seja, uma variável cujo conteúdo não pode ser alterado durante a execução do programa. Veja:
public class Estudos{
static final int VALOR = 45;
public static void main(String args[]){
// vamos tentar alterar o valor da
// constante
VALOR = 10;
}
}
Ao tentarmos compilar este programa teremos a seguinte mensagem de erro:
Estudos.java:7: cannot assign a value to
final variable VALOR
VALOR = 10;
^
1 error
Tenha em mente, porém, que quando uma variável marcada como final é uma referência a um objeto, é a referência que não poderá ser alterada. As propriedades do objeto para a qual ela aponta poderão sofrer alterações, exceto se estes também estiverem marcados como final. Quando aplicado a classes, o modificador final garante que a classe não poderá ser extendida, ou seja, não é possível criar uma classe derivada a partir de uma classe marcada como final. Veja:
// superclasse
final class Pessoa{
public String nome;
}
// subclasse
class Aluno extends Pessoa{
public String matricula;
}
public class Estudos{
public static void main(String args[]){
// Cria um objeto da classe Aluno
Aluno a = new Aluno();
}
}
Ao tentarmos compilar este código teremos a seguinte mensagem de erro:
Estudos.java:7: cannot inherit from
final Pessoa
class Aluno extends Pessoa{
^
1 error
Um método marcado como final não pode ser sobrescrito. Veja um exemplo:
// superclasse
class Pessoa{
protected String nome;
public final String getNome(){
return this.nome;
}
}
// subclasse
class Aluno extends Pessoa{
// estamos sobrescrevendo o método
// herdado da superclasse
public final String getNome(){
return "Aluno: " + this.nome;
}
}
public class Estudos{
public static void main(String args[]){
// Cria um objeto da classe Aluno
Aluno a = new Aluno();
}
}
Ao tentarmos compilar este código teremos a seguinte mensagem de erro:
Estudos.java:14: getNome() in Aluno cannot
override getNome() in Pessoa; overriden method is final
public final String getNome(){
^
1 error
Resumindo: variáveis marcadas com final não poder sofrer alterações. Classes marcadas como final não podem ter classes derivadas. Métodos marcados como final não podem ser sobrescritos. |
Java ::: Dicas & Truques ::: Imagens e Processamento de Imagens |
Como converter uma imagem colorida para tons de cinza em Java usando o filtro GrayFilter - Processamento de imagens em JavaQuantidade de visualizações: 11854 vezes |
O exemplo abaixo mostra como usar a classe GrayFilter para converter uma imagem JPG colorida em uma imagem com tons de cinza. Veja que o segundo argumento no construtor da classe GrayFilter que usamos permite definir o nível de cinza (em porcentagem) que será aplicado:
import java.awt.*;
import java.io.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;
public class Estudos extends JFrame{
private BufferedImage imagem;
private BufferedImage imagemCinza;
AreaImagem areaImagem;
public Estudos(){
super("Estudos Java");
Container c = getContentPane();
c.setLayout(new BorderLayout());
JButton btn = new JButton("Carregar Imagem");
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser fc = new JFileChooser();
int res = fc.showOpenDialog(null);
if(res == JFileChooser.APPROVE_OPTION){
File arquivo = fc.getSelectedFile();
imagem = null;
try{
imagem = ImageIO.read(arquivo);
}
catch(IOException exc){
JOptionPane.showMessageDialog(null,
"Erro ao carregar a imagem: " +
exc.getMessage());
}
if(imagem != null){
areaImagem.imagem = imagem;
areaImagem.repaint();
}
}
}
}
);
JButton btn2 =
new JButton("Converter Escala Cinza");
btn2.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
converterEscalaCinza();
}
}
);
JPanel painel = new JPanel();
painel.setLayout(new FlowLayout());
painel.add(btn);
painel.add(btn2);
c.add(painel, BorderLayout.SOUTH);
// Cria a área de exibição da imagem
areaImagem = new AreaImagem();
c.add(areaImagem, BorderLayout.CENTER);
setSize(400, 300);
setVisible(true);
}
public void converterEscalaCinza(){
ImageFilter filter = new GrayFilter(true, 30);
ImageProducer producer = new FilteredImageSource(
imagem.getSource(), filter);
Image imagemTemp = this.createImage(producer);
// precisamos converter Image para BufferedImage
imagemCinza = new BufferedImage(imagem.getWidth(),
imagem.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = imagemCinza.getGraphics();
g.drawImage(imagemTemp, 0, 0, null);
g.dispose();
areaImagem.imagem = imagemCinza;
areaImagem.repaint();
}
public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
// Sub-classe de JPanel para exibir a imagem
class AreaImagem extends JPanel{
public BufferedImage imagem;
public void paintComponent(Graphics g){
super.paintComponent(g);
// desenha a imagem no JPanel
g.drawImage(imagem, 0, 0, this);
}
}
|
Revit C# ::: Dicas & Truques ::: Tratamento de Erros |
Como corrigir o erro OperationCanceledException em macros e add-ins do Revit C# APIQuantidade de visualizações: 625 vezes |
|
Nesta dica mostrarei como podemos tratar a exceção OperationCanceledException em macros e plug-ins feitos para o Revit usando a Revit C# API. Esta exceção está no namespace Autodesk.Revit.Exceptions e deve ser declarada por seu nome completo, para não ser confundida com System.OperationCanceledException. O erro OperationCanceledException ocorre quando uma operação é cancelada de forma inesperada. Por exemplo, no código abaixo nós pedimos para o usuário selecionar um grupo e, em seguida, informar um ponto na área de desenho do Revit para que o grupo seja copiado e colocado no ponto indicado. Se o usuário clicar com o botão direito ou pressionar Esc, a operação é cancelada automaticamente. O tratamento da exceção OperationCanceledException nos permite reagir a isso, indicando ao usuário o melhor caminho a ser seguido. O código apresentado aqui já foi visto em dicas e truques sobre a criação e manipulação de grupos de elementos no Revit usando a Revit C# API. No entanto, no código apresentado eu não fiz o tratamento de exceções. Veja o código Revit C# API completo para o exemplo:
using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;
namespace Estudos {
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.
TransactionMode.Manual)]
[Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")]
public partial class ThisApplication {
private void Module_Startup(object sender, EventArgs e) {
// vamos obter uma referência ao Document ativo
Document doc = this.ActiveUIDocument.Document;
// Vamos definir um objeto Reference para guardar
// o elemento selecionado pelo usuário
Reference ref_selecionado = null;
// pedimos para o usuário selecionar um grupo
Selection selecao = this.ActiveUIDocument.Selection;
try {
ref_selecionado = selecao.PickObject(ObjectType.Element,
"Selecione um grupo");
Element elem = doc.GetElement(ref_selecionado);
Group group = elem as Group;
// vamos pedir para o usuário selecionar um ponto na área de
// desenho do Revit
XYZ ponto = selecao.PickPoint(
"Selecione um ponto para posicionar o grupo");
// criamos uma nova transação e posicionamos a cópia do
// grupo nas coordenadas indicadas pelo usuário
Transaction transacao = new Transaction(doc);
transacao.Start("Copiar Grupo no Revit");
doc.Create.PlaceGroup(ponto, group.GroupType);
transacao.Commit();
// mostramos o resultado
TaskDialog.Show("Aviso", "O grupo foi copiado com sucesso.");
}
// Se o usuário clicar com o botão direito ou pressionar Esc
catch (Autodesk.Revit.Exceptions.OperationCanceledException ex) {
TaskDialog.Show("Aviso", "Erro: Operação cancelada pelo usuário");
}
catch (Exception ex) {
TaskDialog.Show("Aviso", "Erro: " + ex.Message);
}
}
private void Module_Shutdown(object sender, EventArgs e) {
// para fazer alguma limpeza de memória ou algo assim
}
#region Revit Macros generated code
private void InternalStartup() {
this.Startup += new System.EventHandler(Module_Startup);
this.Shutdown += new System.EventHandler(Module_Shutdown);
}
#endregion
}
}
Se o usuário cancelar a operação, ou seja, não selecionar nenhum grupo (talvez pressionando a tecla Esc), o código reagirá e mostrará a mensagem: Erro: The user aborted the pick operation. Se, em vez de selecionar um grupo, o usuário selecionar um outro elemento, então a mensagem de erro será: Erro: Referência de objeto não definida para uma instância de um objeto. |
Delphi ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter um valor inteiro em um caractere usando a função Chr() do DelphiQuantidade de visualizações: 14717 vezes |
|
Em algumas situações precisamos converter um valor inteiro em um caractere, ou seja, uma letra, símbolo, dígito, etc. Para isso podemos usar a função Chr() do Delphi. Esta função recebe um valor inteiro e retorna seu caractere correspondente de acordo com a tabela ASCII. Vamos ver um exemplo? Eis um trecho de código que declara uma variável do tipo Integer e depois a converte para um caractere: procedure TForm3.Button2Click(Sender: TObject); var valor: Integer; letra: Char; begin // vamos atribuir à variável valor o número 70 valor := 70; // vamos converter este valor para um caractere // o resultado será a letra F letra := Chr(valor); // vamos mostrar o resultado ShowMessage(letra); end; Ao executar este código teremos o valor 70 convertido para a letra "F". Note que também é possível converter um valor inteiro em um caractere usando uma conversão forçada (cast) para o tipo Char. Veja: procedure TForm3.Button2Click(Sender: TObject); var valor: Integer; letra: Char; begin // vamos atribuir à variável valor o número 70 valor := 70; // vamos converter este valor para um caractere // o resultado será a letra F letra := Char(valor); // vamos mostrar o resultado ShowMessage(letra); end; Neste segundo trecho de código nós conseguimos o mesmo resultado do código anterior, mas, sem usar a função Chr(). |
Nossas 20 dicas & truques de programação mais populares |
|
LISP - Como converter Coordenadas Cartesianas para Coordenadas Polares em LISP - LISP para Engenharia C - Como calcular a transposta de uma matriz em C - Curso de C para Geometria Analítica e Álgebra Linear |
Você também poderá gostar das dicas e truques de programação abaixo |
|
Python - Como definir o texto de um wx.Button do wxPython em tempo de execução usando a função SetLabel() |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




