![]() |
|
|
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. |
||
Você está aqui: Cards de Engenharia Civil - Construção Civil |
||
|
||
|
|
||
C++ ::: Win32 API (Windows API) ::: Aplicativos e Outros |
C++ Windows API GUI - Como criar sua primeira aplicação de interface gráfica usando C++ e WinAPIQuantidade de visualizações: 48492 vezes |
|
Esta dica mostra o código completo para uma aplicação de interface gráfica usando C++ e a Win32 (WinAPI - Windows Programming Interface). Trata-se de uma janela simples, mas com todas as características presentes em todas as janelas das aplicações Windows: uma barra de títulos, o ícone e os botões de maximizar, minimizar e fechar. Antes de executar o exemplo observe que este código contém o ponto inicial para a criação de qualquer aplicação gráfica em C++/WinAPI, a saber: A função de entrada WinMain, o laço de mensagens Message Loop, a função de callback Window Procedure e as técnicas de registrar e criar a janela. Neste momento não discutimos os detalhes do código. Em outras dicas você encontrará análises mais aprofundadas de cada parte. Este código foi escrito e testado no Dev-C++, mas, deve funcionar sem problemas em outros compiladores C++ para Windows. Assim, abra o Dev-C++, vá em File -> New -> Projec. Na aba Basic, selecione Console Application, dê um nome ao projeto e deixe a opção C++ Project marcada. Salve o projeto e inclua o código abaixo no arquivo .cpp principal:
#include <windows.h>
// define o nome da classe de janela
const char nomeJanela[] = "aCodigos";
// esta é a Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM
wParam, LPARAM lParam){
switch(msg){
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam,
lParam);
}
return 0;
}
// função de entrada da aplicação
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE
hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
// vamos registrar a Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = nomeJanela;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)){
MessageBox(NULL, "Erro ao registrar a janela!",
"Erro!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// cria a janela
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, nomeJanela,
"Minha primeira aplicação Win32",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
350, 200, NULL, NULL, hInstance, NULL);
if(hwnd == NULL){
MessageBox(NULL, "Erro ao criar a janela!",
"Erro!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// mostra a janela
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// Este é o laço de mensagens (Message Loop)
while(GetMessage(&Msg, NULL, 0, 0) > 0){
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
Pronto! Só compilar (geralmente F9 no Dev-C++), observar o resultado e estudar o código atentamente. |
C++ ::: Win32 API (Windows API) ::: Arquivos e Diretórios |
Arquivos e diretórios em C++ - Como escrever em arquivos usando a função WriteFile() da API do WindowsQuantidade de visualizações: 9693 vezes |
|
A função WriteFile() da Win32 API é útil quando precisamos escrever em arquivos. Esta função foi projetada para escritas síncronas e assíncronas, enquanto WriteFileEx() é somente para escritas assíncronas. Veja o protótipo desta função: BOOL WINAPI WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ); Antes de escrevermos em um arquivo, é importante entendermos o significado dos parâmetros da função WriteFile(): a) HANDLE hFile - Este é o handle para o arquivo no qual queremos escrever. Este handle deve ser criado com os direitos de acesso de escrita GENERIC_WRITE. b) LPCVOID lpBuffer - Um ponteiro para o buffer que contém os dados que serão escritos no arquivo. c) DWORD nNumberOfBytesToWrite - O número de bytes a serem escritos no arquivo. d) LPDWORD lpNumberOfBytesWritten - Um ponteiro para uma variável que receberá o número de bytes escritos. A função WriteFile() define o valor desta variável como zero antes de fazer seu trabalho ou verificação de erro. d) LPOVERLAPPED lpOverlapped - Um ponteiro para um estrutura OVERLAPPED. Esta estrutura é exigida se o handle para o arquivo for obtido usando FILE_FLAG_OVERLAPPED para o parâmetro dwFlagsAndAttributes da função CreateFile(). Geralmente usamos NULL para este parâmetro. Veja um trecho de código no qual usamos a função WriteFile() para escrever duas linhas em um arquivo texto:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[]){
// dados a serem escritos no arquivo
CHAR frase[80];
DWORD nOut; // bytes escritos
// nome do arquivo
CHAR arquivo[] = "C:\\testes.txt";
// vamos abrir o arquivo para escrita.
// se o arquivo não existir nós vamos criá-lo.
HANDLE hArquivo = CreateFile(arquivo, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hArquivo == INVALID_HANDLE_VALUE){
cout << "Erro ao abrir o arquivo: " << GetLastError() << endl;
}
else{
// arquivo aberto com sucesso. Vamos escrever
// dados a serem escritos no arquivo
CHAR frase1[80] = "Programar em C++ é bom demais\r\n";
CHAR frase2[80] = "E a Win32 é da hora!!!!";
DWORD nOut; // bytes escritos
// vamos escrever a primeira frase
WriteFile(hArquivo, frase1, strlen(frase1), &nOut, NULL);
cout << nOut << " bytes foram escritos. " << endl;
// vamos escrever a segunda frase
WriteFile(hArquivo, frase2, strlen(frase2), &nOut, NULL);
cout << nOut << " bytes foram escritos. " << endl;
}
// vamos fechar o handle
CloseHandle(hArquivo);
system("PAUSE");
return EXIT_SUCCESS;
}
|
Dart ::: Dicas & Truques ::: Aplicativos e Outros |
Como calcular a distância entre dois pontos na terra em DartQuantidade de visualizações: 2022 vezes |
|
Nesta dica mostrarei como calcular a distância em quilômetros entre dois pontos na terra dadas suas latitudes e longitudes. Neste exemplo eu coloquei o valor de 6378.137 para o raio da terra, mas você pode definir para o valor que achar mais adequado. O cálculo usado neste código se baseia na Fórmula de Haversine, que determina a distância do grande círculo entre dois pontos em uma esfera, dadas suas longitudes e latitudes. Veja o código Dart completo:
// Vamos importar a biblioteca dart:io
import "dart:io";
// vamos importar a biblioteca dart:math
import "dart:math";
void main(){
// vamos ler as latitudes e longitudes das duas
// localizações
stdout.write("Informe a primeira latitude: ");
double lat1 = double.parse(stdin.readLineSync());
stdout.write("Informe a primeira longitude: ");
double lon1 = double.parse(stdin.readLineSync());
stdout.write("Informe a segunda latitude: ");
double lat2 = double.parse(stdin.readLineSync());
stdout.write("Informe a segunda longitude: ");
double lon2 = double.parse(stdin.readLineSync());
// vamos calcular a distância entre os dois pontos em Kms
double distancia = calcularDistancia(lat1, lat2, lon1, lon2);
// mostramos o resultado
print("Distância entre os dois pontos: ${distancia} kms");
}
// função que recebe dois pontos na terra e retorna a distância
// entre eles em quilômetros
double calcularDistancia(double lat1,
double lat2, double lon1, double lon2){
double raio_terra = 6378.137; // raio da terra em quilômetros
// o primeiro passo é converter as latitudes e longitudes
// para radianos
lon1 = grausParaRadianos(lon1);
lon2 = grausParaRadianos(lon2);
lat1 = grausParaRadianos(lat1);
lat2 = grausParaRadianos(lat2);
// agora aplicamos a Fórmula de Haversine
double dlon = lon2 - lon1;
double dlat = lat2 - lat1;
double a = pow(sin(dlat / 2), 2) + cos(lat1) * cos(lat2)
* pow(sin(dlon / 2),2);
double c = 2 * asin(sqrt(a));
// e retornamos a distância
return(c * raio_terra);
}
// função que permite converter graus em radianos
double grausParaRadianos(double graus){
return graus * (pi / 180);
}
Ao executar este código Dart nós teremos o seguinte resultado: Informe a primeira latitude: -16.674551 Informe a primeira longitude: -49.303598 Informe a segunda latitude: -15.579321 Informe a segunda longitude: -56.10009 A distância entre os dois pontos é: 736.9183827638687kms Neste exemplo eu calculei a distância entre as cidades de Goiânia-GO e Cuibá-MT. A latitude é a distância ao Equador medida ao longo do meridiano de Greenwich. Esta distância mede-se em graus, podendo variar entre 0o e 90o para Norte(N) ou para Sul(S). A longitude é a distância ao meridiano de Greenwich medida ao longo do Equador. |
PHP ::: PHP + MySQL ::: MySQL Improved Extension (mysqli) |
Código completo: Como listar os campos de uma tabela MySQL, seus tipos de dados e detalhes adicionais - O comando DML SHOW FULL COLUMNS FROM - RevisadoQuantidade de visualizações: 12768 vezes |
|
O comando DML do MySQL (e MariaDB) SHOW FULL COLUMNS FROM [nome_tabela] é usado quando queremos obter informações sobre os campos de uma determinada tabela. Entre essas informações temos Field (nome do campo), Type (tipo de dados), Collation (o conjunto de caracteres usado), Null (se o campo aceita nulo ou não), Key (se é uma chave e o tipo da chave), Default (o valor padrão), Extra (informação extra, tal como auto-incremento), Privileges (privilégio do usuário logado) e Comment (comentário). Veja um trecho de código PHP no qual nos conectamos a uma base de dados MySQL usando a extensão mysqli e obtemos as informações dos campos de uma tabela chamada "usuarios". Note como o resultado é exibido em uma tabela HTML. Veja o código a seguir:
<?
// vamos efetuar a conexão com o banco
$con = new mysqli("localhost", "root",
"osmar1234", "estudos");
// conexão efetuada com sucesso?
if($con->connect_errno){
echo "Não foi possível efetuar a conexão: " .
$mysqli->connect_error;
exit(); // vamos sair daqui
}
// obtém os nomes dos campos da tabela, seus tipos e
// detalhes adicionais
$query = mysqli_query($con, "SHOW FULL COLUMNS FROM usuarios");
// títulos da tabela HTML
$titulos = array('Campo', 'Tipo', 'Collation', 'Null',
'Chave', 'Padrão', 'Extra');
echo '<table border="1"><tr>';
for($i = 0; $i < count($titulos); $i++){
echo '<td>' . $titulos[$i] . '</td>';
}
echo '</tr>';
while($result = mysqli_fetch_array($query)){
echo '<tr>';
for($i = 0; $i < count($titulos); $i++){
echo '<td>' . $result[$i] . ' </td>';
}
echo '</tr>';
}
echo '</table>';
mysqli_close($con); // fecha a conexão
?>
Esta dica foi revisada, atualizada e testada com o PHP 8. |
AutoCAD Civil 3D .NET C# ::: Dicas & Truques ::: Alinhamento - Alignment |
Como retornar a quantidade de perfis de um alinhamento do Civil 3D usando a função GetProfileIds() da API C# do AutoCAD Civil 3DQuantidade de visualizações: 766 vezes |
|
Em algumas situações nós precisamos obter a quantidade de perfis (profiles) de um determinado alinhamento do AutoCAD Civil 3D. Para isso nós podemos usar a função GetProfileIds(), que retorna uma coleção ObjectIdCollection contendo os ids de todos os perfis pertencentes a um determinado alinhamento. Para este exemplo eu usei um alinhamento chamado "EIXO DA RODOVIA" e criei para ele um profile chamado "TN - SUPERFÍCIE NATURAL" para representar a superfície natural e outro chamado "GREIDE - PERFIL VERTICAL DA RODOVIA" para representar o alinhamento vertical. Note que, após obtermos a coleção ObjectIdCollection por meio da função GetProfileIds(), tudo que temos a fazer é acessar a sua propriedade Count. Veja o código AutoCAD Civil 3D .NET C# completo para o exemplo:
using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Civil.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.Civil.DatabaseServices;
namespace Estudos {
public class Class1 : IExtensionApplication {
[CommandMethod("Alinhamento")]
public void Alinhamento() {
// vamos obter uma referência ao documento atual do Civil 3D
CivilDocument doc = CivilApplication.ActiveDocument;
// obtemos o editor
Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;
// vamos pesquisar o alinhamento chamado "EIXO DA RODOVIA"
string nome = "EIXO DA RODOVIA";
// vamos iniciar um nova transação
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.
Database.TransactionManager.StartTransaction()) {
try {
// efetuamos uma chamada ao método GetAlignmentByName() passando
// o documento atual do AutoCAD Civil 3D e o nome do alinhamento
// que queremos encontrar
Alignment alinhamento = GetAlignmentByName(doc, nome);
// ops, o alinhamento não foi encontrado
if (alinhamento == null) {
editor.WriteMessage("\nO alinhamento não foi encontrado.");
}
else {
// encontramos o alinhamento. Vamos mostrar a quantidade de perfis
// que ele possui
ObjectIdCollection ids_perfis = alinhamento.GetProfileIds();
// e mostramos o resultado
editor.WriteMessage("\nO alinhamento possui " + ids_perfis.Count +
" perfis.\n");
}
}
catch (System.Exception e) {
// vamos tratar o erro
editor.WriteMessage("Erro: {0}", e.Message);
}
}
}
// função C# que retorna um alinhamento por nome, ou null em
// caso de não encontrar o alinhamento desejado
public Alignment GetAlignmentByName(CivilDocument doc, string nome) {
// vamos declarar um objeto da classe Alignment
Alignment alinhamento = null;
// agora vamos obter os ids de todos os alinhamentos
ObjectIdCollection alinhamentos = doc.GetAlignmentIds();
// vamos percorrer todos os ids de alinhamentos retornados
foreach (ObjectId idAlinhamento in alinhamentos) {
alinhamento = idAlinhamento.GetObject(OpenMode.ForRead) as Alignment;
// encontramos o alinhamento
if (alinhamento.Name.Equals(nome)) {
return alinhamento;
}
}
// retorna null se o alinhamento não for encontrado
return null;
}
public void Initialize() {
// pode deixar em branco
}
public void Terminate() {
// pode deixar em branco
}
}
}
Ao executar este código AutoCAD Civil 3D .NET C# nós teremos o seguinte resultado: O alinhamento possui 2 perfis. |
Veja mais Dicas e truques de AutoCAD Civil 3D .NET C# |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




