diff --git a/.gitignore b/.gitignore index acf4f59..148e96c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,9 @@ $RECYCLE.BIN/ # ========================= # Operating System Files # ========================= +tests.ipynb +test.py + +__pycache__/ +app/__pycache__/ +.vscode/ \ No newline at end of file diff --git a/LEGAL.md b/LEGAL.md new file mode 100644 index 0000000..fb9a261 --- /dev/null +++ b/LEGAL.md @@ -0,0 +1,16 @@ +# Aviso Legal - Fork de Navier + +## Direitos Autorais +- **Projeto Original**: [Anderson3/Navier](https://github.com/Anderson3/Navier) +- **Autor Original**: Anderson3 +- **Direitos**: Todos os direitos do código original pertencem ao autor Anderson3 + +## Propósito deste Fork +Este fork foi criado para: +- Manter o projeto atualizado +- Corrigir issues e bugs +- Adicionar novas funcionalidades +- Enviar melhorias via Pull Request para o projeto original + +## Status +Aguardando resposta do autor original para coordenação de contribuições. \ No newline at end of file diff --git a/README.md b/README.md index 1b470fa..79312f9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,12 @@ -# Navier -Software de cálculo de peças de concreto armado, baseado na NBR 6118/14. Desenvolvido com Python 3.7 + PyQt5. +# Navier - Fork de Contribuição -![image](https://user-images.githubusercontent.com/17939997/70842933-d2987580-1e08-11ea-824c-51b98e1c73d8.png) +> **⚠️ AVISO LEGAL**: Este é um fork do projeto original [Anderson3/Navier](https://github.com/Anderson3/Navier). +> Todos os direitos do código original pertencem a Anderson3. +> Este fork tem fins de manutenção, atualização e contribuição para o projeto original. + +**Fork mantido por [viviangiulia](https://github.com/viviangiulia)** + +--- ## Pequena Descrição O Navier é um programa desenvolvido em Python com finalidade de produzir dados de dimensionamento de peças de Concreto Armado. Essa aplicação com finalidade para Desktops permite calcular Vigas, Pilares, Lajes e Sapatas analisando as peças de manaira isolada. Cada elemento estrutural é tratado no programa como um módulo de cálculo interno. O Navier se baseia nas condições normativas brasileiras de Concreto Armado, principalmente respaldadas através da ABNT NBR 6118/14. diff --git a/bitolas_ferros.ui b/app/bitolas_ferros.ui similarity index 100% rename from bitolas_ferros.ui rename to app/bitolas_ferros.ui diff --git a/app/calculos/vigas.py b/app/calculos/vigas.py new file mode 100644 index 0000000..c1111ef --- /dev/null +++ b/app/calculos/vigas.py @@ -0,0 +1,356 @@ +import sys +import os +import math + +from dataclasses import dataclass + + +@dataclass +class DadosViga: + mk: float + vk: float + bw: float + h: float + d: float + fck: float + fyk: float + fcd: float + fyd: float + vsd: float + theta_transversal: int = 45 + modelo_calculo: str = "Modelo I" + xis_dominio: float = 0.450 + + def validar_dados(self) -> tuple[bool, str]: + """Valida se todos os dados necessários para cálculo foram preenchidos.""" + campos = { + "Momento Fletor (Mk)": self.mk, + "Largura da Viga (bw)": self.bw, + "Altura Total (h)": self.h, + "Altura Útil (d)": self.d, + "Concreto (fck)": self.fck, + "Aço (fyk)": self.fyk, + "Concreto (fcd)": self.fcd, + "Aço (fyd)": self.fyd, + } + + for nome, valor in campos.items(): + if valor is None or valor <= 0: + return False, f"O valor de '{nome}' está ausente ou inválido." + + return True, "Todos os dados válidos." + + +class CalculadoraViga: + + @staticmethod + def calcular_viga_cortante(dados_viga: DadosViga) -> dict: + + alfa_transversal = ( + 90 # Estribos verticais (ãngulo de 90° com relação ao eixo da barra) + ) + + alfa_transversal = (alfa_transversal / 180) * math.pi + fator_cotangentes_transversal = ( + (math.cos(alfa_transversal) / math.sin(alfa_transversal)) + ) + ( + math.cos(dados_viga.theta_transversal) + / math.sin(dados_viga.theta_transversal) + ) + fator_cotangentes_transversal = 1 + + vrd2 = ( + # -------------- TENSÃO MÁXIMA CONVENCIONAL DE CISALHAMENTO + 0.27 + * (1 - (dados_viga.fck / 250)) # alfav2 + * dados_viga.fcd + # -------------- TENSÃO MÁXIMA CONVENCIONAL DE CISALHAMENTO + * (dados_viga.bw / 100) # bw em metros + * (dados_viga.d / 100) # d em metros + * (math.sin(2 * dados_viga.theta_transversal)) + * fator_cotangentes_transversal + * 1000 + ) # Força cortante resistente de cálculo + vrd2 = round(vrd2, 2) + + print( + f"[NOTICE] Força Cortante Solicitante de Cálculo Vsd: {dados_viga.vsd:.2f} kN" + ) + print( + f"[NOTICE] Força Cortante Resistente de Cálculo (ruína das diagonais comprimidas) VRd2: {vrd2:.2f} kN" + ) + + if vrd2 < dados_viga.vsd: + print( + "[ERROR] A seção de concreto não permite gerar bielas resistentes à compressão. " + "Reveja as dimensões da viga ou esforços de cálculo para a estrutura." + ) + raise ValueError( + "A seção de concreto não permite gerar bielas resistentes à compressão. " + "Reveja as dimensões da viga ou esforços de cálculo para a estrutura." + ) + else: + vc_0 = ( + 0.09 + * (dados_viga.fck ** (2 / 3)) + * (dados_viga.bw / 100) + * (dados_viga.d / 100) + * 1000 + ) + if dados_viga.modelo_calculo == "Modelo II": + vc_0 = vc_0 * ((vrd2 - dados_viga.vsd) / (vrd2 - vc_0)) + + vsw = dados_viga.vsd - vc_0 + + as_transversal = ( + vsw + / (0.9 * (dados_viga.d / 100) * dados_viga.fyd) + * math.tan(dados_viga.theta_transversal) + ) * 1000 + + taxa_aco_cortante_retangular = ( + 0.2 * (0.3 * dados_viga.fck ** (2 / 3)) / dados_viga.fyk + ) + + as_min_transversal = ( + (dados_viga.bw * 10) * taxa_aco_cortante_retangular + ) * 1000 # para deixar em mm² + + print(f"[NOTICE] Força Cortante Vk: {dados_viga.vk:.2f} kN") + print( + f"[NOTICE] Força Cortante Mecanismos Complementares (ângulo = 45)° Vc0: {vc_0:.2f} kN" + ) + print( + f"[NOTICE] Força Cortante parcela resistida pela armadura transversal Vsw: {vsw:.2f} kN" + ) + print( + f"[NOTICE] Área da Seção Transversão dos Estribos Asw: {as_transversal:.2f} mm²" + ) + print( + f"[NOTICE] Área de aço transversal mínima por metro linear Aswmin/s: {as_min_transversal:.2f} mm²/m" + ) + + # TODO verificar se vou usar essa informação + if dados_viga.vsd <= 0.67 * vrd2: + espass_maximo = 30 + else: + espass_maximo = 20 + + return { + "vk_viga": dados_viga.vk, + "vsd": dados_viga.vsd, + "vrd2": vrd2, + "vc_0": vc_0, + "as_transversal": as_transversal, + "taxa_aco_cortante_retangular": taxa_aco_cortante_retangular, + "as_min_transversal": as_min_transversal, + "vsw": vsw, + } + + @staticmethod + def calcular_viga_simples(dados_viga: DadosViga) -> dict: + """Retonar um dicionário com os resultados obtidos após terminar o dimensionamento da viga simplesmente armada.""" + d_linha = dados_viga.h - dados_viga.d + area_secao_viga = dados_viga.bw * dados_viga.h + + kmd_viga = (dados_viga.mk * 1.4 * 1000) / ( + (dados_viga.bw / 100) + * ((dados_viga.d / 100) ** 2) + * (0.85 * dados_viga.fcd * 1000000) + ) + + if kmd_viga > 0.5: + print( + "[ERROR] Os esforços especificados não são suportados pela seção de concreto analisada. " + "Por favor altere as dimensões da seção da viga ou reveja os esforços de cálculo para a estrutura." + ) + raise ValueError( + "Os esforços especificados não são suportados pela seção de concreto analisada. " + "Por favor altere as dimensões da seção da viga ou reveja os esforços de cálculo para a estrutura." + ) + else: + kx_viga = (1 - math.sqrt(1 - 2 * kmd_viga)) / 0.8 + kz_viga = 1 - 0.4 * kx_viga + as_viga = (dados_viga.mk * 1.4 * 1000) / ( + kz_viga * (dados_viga.d / 100) * dados_viga.fyd + ) + + as_sobre_apoio_viga = as_viga / 3 + if dados_viga.h >= 60: + as_pele = (0.1 / 100) * area_secao_viga * 100 + else: + as_pele = 0 + + as_max_viga = (4 / 100) * area_secao_viga * 100 + + # TODO código repetido refatorar + taxa_aco_por_fck = { + 20: 0.0015, + 25: 0.0015, + 30: 0.00173, + 35: 0.00201, + 40: 0.00203, + 45: 0.00259, + 50: 0.00288, + } + taxa_aco_viga_retangular = taxa_aco_por_fck.get(dados_viga.fck) + + if taxa_aco_viga_retangular is None: + raise ValueError(f"fck inválido: {dados_viga.fck}") + + as_min_viga = taxa_aco_viga_retangular * area_secao_viga * 100 + + # TODO melhorar esta estrutura + if kx_viga < 0: + dominio_viga = "Domínio 1" + elif kx_viga > 0 and kx_viga < 0.259: + dominio_viga = "Domínio 2" + elif kx_viga > 0.259 and kx_viga < 0.45: + dominio_viga = "Domínio 3 - Dúctil" + elif kx_viga > 0.45 and kx_viga < 0.63: + dominio_viga = "Domínio 3 - Não Dúctil" + elif kx_viga > 0.628 and kx_viga < 1: + dominio_viga = "Domínio 4a" + elif (kx_viga > 0.438 and kx_viga < 1) and (dados_viga.fyk == 600): + dominio_viga = "Domínio 4a" + else: + dominio_viga = "Domínio 4b" + + print( + f"[NOTICE] Intensidade do momento fletor solicitante Kmd: {kmd_viga:.2f}" + ) + print(f"[NOTICE] Profundidade da linha neutra Kx: {kx_viga:.2f}") + print(f"[NOTICE] Altura do braço de alavanca interno Kz: {kz_viga:.2f}") + print( + f"[NOTICE] Área da seção transversal da armadura longitudinal de tração As: {as_viga:.2f} mm²" + ) + + resultados_viga = CalculadoraViga.calcular_viga_cortante(dados_viga) + + resultados_viga.update( + { + "kmd_viga": kmd_viga, + "kx_viga": kx_viga, + "kz_viga": kz_viga, + "as_viga": as_viga, + "as_sobre_apoio_viga": as_sobre_apoio_viga, + "as_max_viga": as_max_viga, + "as_min_viga": as_min_viga, + "as_pele": as_pele, + "d_linha": d_linha, + "dominio_viga": dominio_viga, + } + ) + + return resultados_viga + + @staticmethod + def calcular_viga_dupla(dados_viga: DadosViga) -> dict: + + d_linha = dados_viga.h - dados_viga.d + + xis_dominio = dados_viga.xis_dominio + + d_min_viga = math.sqrt( + (dados_viga.mk * 1.4 * 1000) + / ( + (dados_viga.bw / 100) + * (dados_viga.fcd * 1000000) + * (0.68 * xis_dominio - 0.272 * (xis_dominio**2)) + ) + ) + + x_lim_viga = xis_dominio * (dados_viga.d / 100) + + momento_lim_viga = ( + 0.68 + * (dados_viga.bw / 100) + * (dados_viga.fcd * 1000) + * x_lim_viga + * ((dados_viga.d / 100) - 0.4 * x_lim_viga) + ) + + if d_min_viga < (dados_viga.h / 100): + print( + "[NOTICE] A altura atual da viga é maior que a altura útil mínima, calcule como simplesmente armada." + ) + raise ValueError( + "A altura atual da viga é maior que a altura útil mínima, calcule como simplesmente armada." + ) + + else: + momento_lim_viga = ( + 0.68 + * (dados_viga.bw / 100) + * (dados_viga.fcd * 1000) + * x_lim_viga + * ((dados_viga.d / 100) - 0.4 * x_lim_viga) + ) + momento_2_viga = (dados_viga.mk * 1.4) - momento_lim_viga + + as_compressao_viga = (momento_2_viga * 1000) / ( + ((dados_viga.d / 100) - (d_linha / 100)) * (dados_viga.fyd) + ) + + as_tracao_viga = (momento_lim_viga * 1000) / ( + (1 - 0.4 * xis_dominio) * (dados_viga.d / 100) * dados_viga.fyd + ) + + as_tracao_viga = as_tracao_viga + as_compressao_viga + + as_total_viga = as_tracao_viga + as_compressao_viga + + as_sobre_apoio_viga = as_tracao_viga / 3 + + area_secao_viga = dados_viga.bw * dados_viga.h + if dados_viga.h >= 60: + as_pele = (0.1 / 100) * area_secao_viga * 100 + else: + as_pele = 0 + + # TODO Código repetido refatorar + taxa_aco_por_fck = { + 20: 0.0015, + 25: 0.0015, + 30: 0.00173, + 35: 0.00201, + 40: 0.00203, + 45: 0.00259, + 50: 0.00288, + } + taxa_aco_viga_retangular = taxa_aco_por_fck.get(dados_viga.fck) + + if taxa_aco_viga_retangular is None: + raise ValueError(f"fck inválido: {dados_viga.fck}") + + as_max_viga = (4 / 100) * area_secao_viga * 100 + as_min_viga = taxa_aco_viga_retangular * area_secao_viga * 100 + + + print(f"[NOTICE] Altura útil mínima para evitar armadura dupla d_min: {d_min_viga:.2f} m") + print(f"[NOTICE] Posição limite da linha neutra para domínio 3 x_lim: {x_lim_viga:.2f} m") + print(f"[NOTICE] Momento resistente último para armadura simples Mlim: {momento_lim_viga:.2f} kN.m") + print(f"[NOTICE] Momento excedente para armadura dupla Momento2: {momento_2_viga:.2f} kN.m") + print(f"[NOTICE] Área de aço de compressão As Compressão: {as_compressao_viga:.2f} mm²") + print(f"[NOTICE] Área de aço de tração As Tração: {as_tracao_viga:.2f} mm²") + + resultados_viga = CalculadoraViga.calcular_viga_cortante(dados_viga) + + resultados_viga.update( + { + "d_min_viga": d_min_viga, + "x_lim_viga": x_lim_viga, + "momento_lim_viga": momento_lim_viga, + "momento_2_viga": momento_2_viga, + "as_compressao_viga": as_compressao_viga, + "as_tracao_viga": as_tracao_viga, + "as_sobre_apoio_viga": as_sobre_apoio_viga, + "as_max_viga": as_max_viga, + "as_min_viga": as_min_viga, + "as_pele": as_pele, + "as_total_viga":as_total_viga, + "d_linha": d_linha, + } + ) + + return resultados_viga diff --git a/class_agres.ui b/app/class_agres.ui similarity index 100% rename from class_agres.ui rename to app/class_agres.ui diff --git a/detalhamento_vigas_alt.ui b/app/detalhamento_vigas_alt.ui similarity index 100% rename from detalhamento_vigas_alt.ui rename to app/detalhamento_vigas_alt.ui diff --git a/btn_caa.png b/app/images/btn_caa.png similarity index 100% rename from btn_caa.png rename to app/images/btn_caa.png diff --git a/btn_cadicional.png b/app/images/btn_cadicional.png similarity index 100% rename from btn_cadicional.png rename to app/images/btn_cadicional.png diff --git a/btn_flexaocomposta.png b/app/images/btn_flexaocomposta.png similarity index 100% rename from btn_flexaocomposta.png rename to app/images/btn_flexaocomposta.png diff --git a/btn_flexaosimples.png b/app/images/btn_flexaosimples.png similarity index 100% rename from btn_flexaosimples.png rename to app/images/btn_flexaosimples.png diff --git a/btn_inicio_fundacoes.png b/app/images/btn_inicio_fundacoes.png similarity index 100% rename from btn_inicio_fundacoes.png rename to app/images/btn_inicio_fundacoes.png diff --git a/btn_inicio_lajes.png b/app/images/btn_inicio_lajes.png similarity index 100% rename from btn_inicio_lajes.png rename to app/images/btn_inicio_lajes.png diff --git a/btn_inicio_pilares.png b/app/images/btn_inicio_pilares.png similarity index 100% rename from btn_inicio_pilares.png rename to app/images/btn_inicio_pilares.png diff --git a/btn_inicio_vigas.png b/app/images/btn_inicio_vigas.png similarity index 100% rename from btn_inicio_vigas.png rename to app/images/btn_inicio_vigas.png diff --git a/btn_tabbitolas.png b/app/images/btn_tabbitolas.png similarity index 100% rename from btn_tabbitolas.png rename to app/images/btn_tabbitolas.png diff --git a/btn_tabmarcus.png b/app/images/btn_tabmarcus.png similarity index 100% rename from btn_tabmarcus.png rename to app/images/btn_tabmarcus.png diff --git a/btn_tabventirinni.png b/app/images/btn_tabventirinni.png similarity index 100% rename from btn_tabventirinni.png rename to app/images/btn_tabventirinni.png diff --git a/cota_h_laje.png b/app/images/cota_h_laje.png similarity index 100% rename from cota_h_laje.png rename to app/images/cota_h_laje.png diff --git a/cota_v_laje.png b/app/images/cota_v_laje.png similarity index 100% rename from cota_v_laje.png rename to app/images/cota_v_laje.png diff --git a/engaste_d.xcf b/app/images/engaste_d.xcf similarity index 100% rename from engaste_d.xcf rename to app/images/engaste_d.xcf diff --git a/engh.png b/app/images/engh.png similarity index 100% rename from engh.png rename to app/images/engh.png diff --git a/engv.png b/app/images/engv.png similarity index 100% rename from engv.png rename to app/images/engv.png diff --git a/esquema_bielas.png b/app/images/esquema_bielas.png similarity index 100% rename from esquema_bielas.png rename to app/images/esquema_bielas.png diff --git a/esquema_bielas_legenda.png b/app/images/esquema_bielas_legenda.png similarity index 100% rename from esquema_bielas_legenda.png rename to app/images/esquema_bielas_legenda.png diff --git a/esquema_pilar.png b/app/images/esquema_pilar.png similarity index 100% rename from esquema_pilar.png rename to app/images/esquema_pilar.png diff --git a/git_logo.png b/app/images/git_logo.png similarity index 100% rename from git_logo.png rename to app/images/git_logo.png diff --git a/laje-esqm.png b/app/images/laje-esqm.png similarity index 100% rename from laje-esqm.png rename to app/images/laje-esqm.png diff --git a/laje.png b/app/images/laje.png similarity index 100% rename from laje.png rename to app/images/laje.png diff --git a/laje_unidirecional_ee.png b/app/images/laje_unidirecional_ee.png similarity index 100% rename from laje_unidirecional_ee.png rename to app/images/laje_unidirecional_ee.png diff --git a/laje_unidirecional_ee2.png b/app/images/laje_unidirecional_ee2.png similarity index 100% rename from laje_unidirecional_ee2.png rename to app/images/laje_unidirecional_ee2.png diff --git a/laje_unidirecional_le.png b/app/images/laje_unidirecional_le.png similarity index 100% rename from laje_unidirecional_le.png rename to app/images/laje_unidirecional_le.png diff --git a/laje_unidirecional_le2.png b/app/images/laje_unidirecional_le2.png similarity index 100% rename from laje_unidirecional_le2.png rename to app/images/laje_unidirecional_le2.png diff --git a/laje_unidirecional_ll.png b/app/images/laje_unidirecional_ll.png similarity index 100% rename from laje_unidirecional_ll.png rename to app/images/laje_unidirecional_ll.png diff --git a/laje_unidirecional_ll2.png b/app/images/laje_unidirecional_ll2.png similarity index 100% rename from laje_unidirecional_ll2.png rename to app/images/laje_unidirecional_ll2.png diff --git a/laje_unidirecional_modelo.png.png b/app/images/laje_unidirecional_modelo.png.png similarity index 100% rename from laje_unidirecional_modelo.png.png rename to app/images/laje_unidirecional_modelo.png.png diff --git a/lajes_view.png b/app/images/lajes_view.png similarity index 100% rename from lajes_view.png rename to app/images/lajes_view.png diff --git a/livh.png b/app/images/livh.png similarity index 100% rename from livh.png rename to app/images/livh.png diff --git a/livv.png b/app/images/livv.png similarity index 100% rename from livv.png rename to app/images/livv.png diff --git a/logo.ico b/app/images/logo.ico similarity index 100% rename from logo.ico rename to app/images/logo.ico diff --git a/logo.png b/app/images/logo.png similarity index 100% rename from logo.png rename to app/images/logo.png diff --git a/logo3.png b/app/images/logo3.png similarity index 100% rename from logo3.png rename to app/images/logo3.png diff --git a/logo_a3_mini.png b/app/images/logo_a3_mini.png similarity index 100% rename from logo_a3_mini.png rename to app/images/logo_a3_mini.png diff --git a/logo_brunel.png b/app/images/logo_brunel.png similarity index 100% rename from logo_brunel.png rename to app/images/logo_brunel.png diff --git a/logo_engtool.png b/app/images/logo_engtool.png similarity index 100% rename from logo_engtool.png rename to app/images/logo_engtool.png diff --git a/nassau_logo.png b/app/images/nassau_logo.png similarity index 100% rename from nassau_logo.png rename to app/images/nassau_logo.png diff --git a/navier_logo.png b/app/images/navier_logo.png similarity index 100% rename from navier_logo.png rename to app/images/navier_logo.png diff --git a/navier_logo_mini.png b/app/images/navier_logo_mini.png similarity index 100% rename from navier_logo_mini.png rename to app/images/navier_logo_mini.png diff --git a/navier_logo_mini_alt.png b/app/images/navier_logo_mini_alt.png similarity index 100% rename from navier_logo_mini_alt.png rename to app/images/navier_logo_mini_alt.png diff --git a/navier_logo_mod.png b/app/images/navier_logo_mod.png similarity index 100% rename from navier_logo_mod.png rename to app/images/navier_logo_mod.png diff --git a/navier_pilar_esquema.png b/app/images/navier_pilar_esquema.png similarity index 100% rename from navier_pilar_esquema.png rename to app/images/navier_pilar_esquema.png diff --git a/navier_viga_dupla.png b/app/images/navier_viga_dupla.png similarity index 100% rename from navier_viga_dupla.png rename to app/images/navier_viga_dupla.png diff --git a/pilar_engaste_a.png b/app/images/pilar_engaste_a.png similarity index 100% rename from pilar_engaste_a.png rename to app/images/pilar_engaste_a.png diff --git a/pilar_engaste_b.png b/app/images/pilar_engaste_b.png similarity index 100% rename from pilar_engaste_b.png rename to app/images/pilar_engaste_b.png diff --git a/pilar_engaste_c.png b/app/images/pilar_engaste_c.png similarity index 100% rename from pilar_engaste_c.png rename to app/images/pilar_engaste_c.png diff --git a/pilar_engaste_d.png b/app/images/pilar_engaste_d.png similarity index 100% rename from pilar_engaste_d.png rename to app/images/pilar_engaste_d.png diff --git a/sapata_perfil.png b/app/images/sapata_perfil.png similarity index 100% rename from sapata_perfil.png rename to app/images/sapata_perfil.png diff --git a/sapata_sup.png b/app/images/sapata_sup.png similarity index 100% rename from sapata_sup.png rename to app/images/sapata_sup.png diff --git a/secao_viga.png b/app/images/secao_viga.png similarity index 100% rename from secao_viga.png rename to app/images/secao_viga.png diff --git a/secao_viga_detalhamento.png b/app/images/secao_viga_detalhamento.png similarity index 100% rename from secao_viga_detalhamento.png rename to app/images/secao_viga_detalhamento.png diff --git a/secao_viga_detalhamento_infos.png.png b/app/images/secao_viga_detalhamento_infos.png.png similarity index 100% rename from secao_viga_detalhamento_infos.png.png rename to app/images/secao_viga_detalhamento_infos.png.png diff --git a/inicio_alt.ui b/app/inicio_alt.ui similarity index 99% rename from inicio_alt.ui rename to app/inicio_alt.ui index 749dfc2..1a054fa 100644 --- a/inicio_alt.ui +++ b/app/inicio_alt.ui @@ -63,7 +63,7 @@ p, li { white-space: pre-wrap; } - navier_logo_mini.png + images/navier_logo_mini.png @@ -397,7 +397,7 @@ p, li { white-space: pre-wrap; } - navier_logo.png + images/navier_logo.png false @@ -416,7 +416,7 @@ p, li { white-space: pre-wrap; } - nassau_logo.png + images/nassau_logo.png true @@ -1086,7 +1086,7 @@ p, li { white-space: pre-wrap; } - navier_logo.png + images/navier_logo.png @@ -1168,7 +1168,7 @@ p, li { white-space: pre-wrap; } - logo_a3_mini.png + images/logo_a3_mini.png true @@ -1187,7 +1187,7 @@ p, li { white-space: pre-wrap; } - git_logo.png + images/git_logo.png true @@ -1219,7 +1219,7 @@ p, li { white-space: pre-wrap; } - logo_brunel.png + images/logo_brunel.png true @@ -1238,7 +1238,7 @@ p, li { white-space: pre-wrap; } - logo_engtool.png + images/logo_engtool.png true diff --git a/lajes_alt.ui b/app/lajes_alt.ui similarity index 100% rename from lajes_alt.ui rename to app/lajes_alt.ui diff --git a/lajes_carg_adicional_atualizada.ui b/app/lajes_carg_adicional_atualizada.ui similarity index 100% rename from lajes_carg_adicional_atualizada.ui rename to app/lajes_carg_adicional_atualizada.ui diff --git a/app/main.py b/app/main.py new file mode 100644 index 0000000..2ba826e --- /dev/null +++ b/app/main.py @@ -0,0 +1,2460 @@ +import sys +import os +import math + +from PyQt6.uic import loadUi +from PyQt6.QtWidgets import ( + QApplication, + QMainWindow, + QLabel, + QMessageBox, + QVBoxLayout, + QHBoxLayout, + QDialog, + QMessageBox, + QTableWidget, + QTableWidgetItem, + QStatusBar, + QToolBar, + QLineEdit, + QComboBox, + QSpinBox, +) +from PyQt6.QtGui import QPixmap, QIcon, QImage +from PyQt6 import QtWidgets, QtGui, QtCore +import pyqtgraph as pg +from calculos.vigas import DadosViga, CalculadoraViga + +# import marcus + +tabela_marcus = "tabela_marcus.pdf" +abaco_normal = "abaco_normal.pdf" +abaco_obliqua = "abaco_obliqua.pdf" + + +class Inicio(QMainWindow): + def __init__(self, parent=None): + super().__init__(parent) + self.setWindowTitle("Navier - Início") + self.ui = None + self.load_ui() + self.load_signals() + + def load_ui(self): + self.ui = loadUi("inicio_alt.ui", self) + self.label.setStyleSheet("Background-Color: #ddebff;") + + self.pushButton.setIcon(QtGui.QIcon("images/btn_inicio_vigas.png")) + self.pushButton.setIconSize(QtCore.QSize(52, 52)) + self.pushButton_3.setIcon(QtGui.QIcon("images/btn_inicio_pilares.png")) + self.pushButton_3.setIconSize(QtCore.QSize(42, 42)) + self.pushButton_9.setIcon(QtGui.QIcon("images/btn_inicio_lajes.png")) + self.pushButton_9.setIconSize(QtCore.QSize(42, 42)) + self.pushButton_11.setIcon(QtGui.QIcon("images/btn_inicio_fundacoes.png")) + self.pushButton_11.setIconSize(QtCore.QSize(45, 45)) + + self.label_5.setStyleSheet("Background-Color: #ddebff;") + self.label_10.setStyleSheet("Background-Color: #ddebff;") + self.label_9.setStyleSheet("Background-Color: #ddebff;") + self.label_11.setStyleSheet("Background-Color: #ddebff;") + + self.pushButton_2.setIcon(QtGui.QIcon("images/btn_caa.png")) + self.pushButton_2.setIconSize(QtCore.QSize(45, 45)) + self.pushButton_5.setIcon(QtGui.QIcon("images/btn_cadicional.png")) + self.pushButton_5.setIconSize(QtCore.QSize(45, 45)) + self.pushButton_6.setIcon(QtGui.QIcon("images/btn_tabbitolas.png")) + self.pushButton_6.setIconSize(QtCore.QSize(45, 45)) + self.pushButton_7.setIcon(QtGui.QIcon("images/btn_tabmarcus.png")) + self.pushButton_7.setIconSize(QtCore.QSize(45, 45)) + self.pushButton_8.setIcon(QtGui.QIcon("images/btn_flexaosimples.png")) + self.pushButton_8.setIconSize(QtCore.QSize(45, 45)) + self.pushButton_23.setIcon(QtGui.QIcon("images/btn_flexaocomposta.png")) + self.pushButton_23.setIconSize(QtCore.QSize(45, 45)) + + self.label_21.setToolTip( + "Brunel - programa de cálculo e verificação de perfis metálicos para perfis brasileiros" + ) + self.label_22.setToolTip( + "EngTool - aplicação mobile para cálculo de vigas de concreto armado" + ) + + self.setFixedSize(570, 450) + + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.show() + + def load_signals(self): + self.pushButton.clicked.connect(self.iniciar_vigas) + self.pushButton_3.clicked.connect(self.iniciar_pilares) + self.pushButton_9.clicked.connect(self.iniciar_lajes) + self.pushButton_11.clicked.connect(self.iniciar_fundacoes) + + self.pushButton_2.clicked.connect(self.iniciar_classe_agressividade) + self.pushButton_5.clicked.connect(self.iniciar_carga_adicional) + self.pushButton_6.clicked.connect(self.iniciar_tabela_bitolas) + + self.pushButton_7.clicked.connect( + lambda: self.abrirTabelaAuxiliar(tabela_marcus) + ) + self.pushButton_23.clicked.connect( + lambda: self.abrirTabelaAuxiliar(abaco_normal) + ) + self.pushButton_8.clicked.connect( + lambda: self.abrirTabelaAuxiliar(abaco_obliqua) + ) + + def abrirTabelaAuxiliar(self, file): + os.startfile(file) + + def iniciar_vigas(self) -> None: + """Exibe a janela de dimensiomaneto de vigas.""" + print("[INFO] Janela de Dimensionamento de Vigas carregada corretamente!") + vigas.show() + + def iniciar_pilares(self): + print("pilares") + pilares.show() + + def iniciar_lajes(self): + print("lajes") + lajes.show() + + def iniciar_fundacoes(self): + print("fundações") + sapatas.show() + + # --------------------------- forms complementares ----------------------------- + def iniciar_carga_adicional(self): + print("carga adicional") + carga_adicional.show() + + def iniciar_tabela_bitolas(self): + print("carga adicional") + tabela_bitolas.show() + + def iniciar_classe_agressividade(self): + print("classe de agressividade") + tabela_classe_agressividade.show() + + +class Vigas(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.ui = loadUi("vigas_alt.ui", self) + self.load_signals() + + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Vigas") + self.setFixedSize(860, 620) + + def load_signals(self): + self.btn_viga_armacao_simples.clicked.connect( + lambda: self.stacked_viga_modelo_armacao.setCurrentIndex(1) + ) + self.btn_viga_armacao_dupla.clicked.connect( + lambda: self.stacked_viga_modelo_armacao.setCurrentIndex(0) + ) + self.btn_viga_gerar_detalhamento.clicked.connect(lambda: detalhar_vigas.show()) + + self.btn_viga_calcular.clicked.connect(self.calcular_viga_index) + self.btn_viga_limpar.clicked.connect(self.limpar_preenchimento_janela_vigas) + + self.radio_viga_dominio_2.clicked.connect( + lambda: self.ledit_viga_linha_neutra.setText("0.450") + ) + self.radio_viga_dominio_3.clicked.connect( + lambda: self.ledit_viga_linha_neutra.setText("0.628") + ) + + def calcular_viga_index(self) -> None: + """Define o tipo de cálculo a ser realizado para dimensionamento da viga. + Viga simplesmente ou duplamente armada. + """ + indice = self.stacked_viga_modelo_armacao.currentIndex() + + if indice == 1: + print("[INFO] Calculando Viga Simplesmente armada.") + try: + dados_viga = self._coletar_dados_interface(tipo_armacao_viga="Simples") + calculos_viga = CalculadoraViga() + dicionario_resultados = calculos_viga.calcular_viga_simples(dados_viga) + self._atualizar_dados_interface( + dicionario_resultados, tipo_armacao_viga="Simples" + ) + except Exception as e: + QMessageBox.warning( + self, + "Aviso", + str(e) or "Dados inconsistentes — verifique os campos.", + ) + return + else: + print("[INFO] Calculando Viga Duplamente armada.") + try: + dados_viga = self._coletar_dados_interface(tipo_armacao_viga="Dupla") + calculos_viga = CalculadoraViga() + dicionario_resultados = calculos_viga.calcular_viga_dupla(dados_viga) + self._atualizar_dados_interface( + dicionario_resultados, tipo_armacao_viga="Dupla" + ) + except Exception as e: + QMessageBox.warning( + self, + "Aviso", + str(e) or "Dados inconsistentes — verifique os campos.", + ) + return + + def limpar_preenchimento_janela_vigas(self) -> None: + """Retorna todos os widgets da janela para seus valores default.""" + + for widget in self.findChildren(QLineEdit): + widget.clear() + + for widget in self.findChildren(QComboBox): + widget.setCurrentIndex(0) + + for spin in self.findChildren(QSpinBox): + if spin.objectName() == "spin_viga_angulo_theta": + spin.setValue(30) + + self.radio_viga_dominio_3.setChecked(False) + self.radio_viga_dominio_2.setChecked(True) + self.radio_viga_modelo_calculo_1.setChecked(True) + self.radio_viga_modelo_calculo_2.setChecked(False) + + def _verificar_modelo_calculo_viga(self) -> str: + """Retorna o modelo de cálculo que será utilizado para verificação ao cisalhamento no ELU. + + Modelo I: Diagonais de compressão inclinadas a 45° em relação ao eixo longitudinal do elemento estrutural e + parcela complementar Vc de valor constante, independente de VSd. + + Modelo II: Diagonais de compressão inclinadas em relação ao eixo longitudinal da peça, variando livremente entre 30° e 45°. Admite ainda + que a parcela complementar Vc sofra redução com o aumento de VSd. + + """ + if self.radio_viga_modelo_calculo_2.isChecked(): + modelo_calculo = "Modelo II" + else: + modelo_calculo = "Modelo I" + return modelo_calculo + + def _coletar_dados_interface(self, tipo_armacao_viga: str) -> DadosViga: + """Coleta e converte dados da interface para DTO para serem utilizados no dimensionamento das vigas.""" + + modelo_calculo = self._verificar_modelo_calculo_viga() + + if modelo_calculo == "Modelo I": + theta_transversal = 45 + else: + theta_transversal = self.spin_viga_angulo_theta.value() + + if tipo_armacao_viga == "Simples": + + dados_calculo_viga = DadosViga( + mk=float(self.ledit_viga_momento_fletor.text()), + vk=float(self.ledit_viga_cortante.text()), + bw=float(self.ledit_viga_armacao_simples_largura.text()), + h=float(self.ledit_viga_armacao_simples_altura.text()), + d=float(self.ledit_viga_armacao_simples_altura_util.text()), + fck=float(self.combo_viga_concreto_fck.currentText()), + fyk=float(self.combo_viga_aco_classe.currentText()), + fcd=float(self.combo_viga_concreto_fck.currentText()) / 1.4, + fyd=float(self.combo_viga_aco_classe.currentText()) / 1.15, + vsd=float(self.ledit_viga_cortante.text()) * 1.4, + theta_transversal=(theta_transversal / 180) * math.pi, + modelo_calculo=modelo_calculo, + ) + + validacao, mensagem = dados_calculo_viga.validar_dados() + if not validacao: + raise ValueError(mensagem) + + return dados_calculo_viga + + else: + dados_calculo_viga = DadosViga( + mk=float(self.ledit_viga_momento_fletor.text()), + vk=float(self.ledit_viga_cortante.text()), + bw=float(self.ledit_viga_armacao_dupla_lagura.text()), + h=float(self.ledit_viga_armacao_dupla_altura.text()), + d=float(self.ledit_viga_armacao_dupla_altura_util.text()), + fck=float(self.combo_viga_concreto_fck.currentText()), + fyk=float(self.combo_viga_aco_classe.currentText()), + fcd=float(self.combo_viga_concreto_fck.currentText()) / 1.4, + fyd=float(self.combo_viga_aco_classe.currentText()) / 1.15, + vsd=float(self.ledit_viga_cortante.text()) * 1.4, + theta_transversal=(theta_transversal / 180) * math.pi, + modelo_calculo=modelo_calculo, + xis_dominio=float(self.ledit_viga_linha_neutra.text()), + ) + + validacao, mensagem = dados_calculo_viga.validar_dados() + if not validacao: + raise ValueError(mensagem) + + return dados_calculo_viga + + def _atualizar_dados_interface( + self, resultados_viga: dict, tipo_armacao_viga: str + ) -> None: + """Atualiza a interface com os resultados do cálculo do dimensionamento da viga.""" + + dados_viga = self._coletar_dados_interface(tipo_armacao_viga) + + self.ledit_viga_vsd.setText( + str(round(resultados_viga["vk_viga"] * 1.4, ndigits=4)) + ) + self.ledit_viga_vrd2.setText(str(round(resultados_viga["vrd2"], ndigits=4))) + self.ledit_viga_vc.setText(str(round(resultados_viga["vc_0"], ndigits=4))) + self.ledit_viga_vsw.setText(str(round(resultados_viga["vsw"], ndigits=4))) + self.ledit_viga_as_s.setText( + str(round(resultados_viga["as_transversal"], ndigits=4)) + ) + self.ledit_viga_as_min_s.setText( + str(round(resultados_viga["as_min_transversal"], ndigits=4)) + ) + + if tipo_armacao_viga == "Simples": + + self.ledit_viga_armacao_simples_md.setText( + str(round(dados_viga.mk * 1.4, ndigits=4)) + ) + self.ledit_viga_armacao_simples_kmd.setText( + str(round(resultados_viga["kmd_viga"], 4)) + ) + self.ledit_viga_armacao_simples_kx.setText( + str(round(resultados_viga["kx_viga"], 4)) + ) + self.ledit_viga_armacao_simples_kz.setText( + str(round(resultados_viga["kz_viga"], 4)) + ) + + self.ledit_viga_armacao_simples_as.setText( + str(round(resultados_viga["as_viga"], ndigits=4)) + ) + self.ledit_viga_armacao_simples_area_sobre_apoio.setText( + str(round(resultados_viga["as_sobre_apoio_viga"], ndigits=4)) + ) + self.ledit_viga_armacao_simples_as_pele.setText( + str(round(resultados_viga["as_pele"], ndigits=4)) + ) + self.ledit_viga_armacao_simples_as_max.setText( + str(round(resultados_viga["as_max_viga"], ndigits=4)) + ) + self.ledit_viga_armacao_simples_as_min.setText( + str(round(resultados_viga["as_min_viga"], ndigits=4)) + ) + + self.ledit_viga_armacao_simples_dominio_ruptura.setText( + resultados_viga["dominio_viga"] + ) + + self.ledit_viga_armacao_simples_d_linha.setText( + str(round(resultados_viga["d_linha"], ndigits=2)) + ) + + if (resultados_viga["dominio_viga"] == "Domínio 4a") or ( + resultados_viga["dominio_viga"] == "Domínio 4b" + ): + QMessageBox.about( + self, + "Atenção", + "Domínio de Cálculo 4: recomenda-se utilizar, em seção retangular, armadura dupla ou seção tê para contenção dos esforços de compressão do concreto.", + ) + + if resultados_viga["as_viga"] > resultados_viga["as_max_viga"]: + QMessageBox.about( + self, + "Atenção", + "Área Total calculada superior a Área Máxima especificada para a seção da viga.", + ) + if resultados_viga["as_viga"] < resultados_viga["as_min_viga"]: + QMessageBox.about( + self, + "Atenção", + "Área Total calculada inferior a Área Mínima especificada para a seção da viga.", + ) + + else: + + self.ledit_viga_d_limite.setText( + str(round(resultados_viga["d_min_viga"], ndigits=5)) + ) + self.ledit_viga_x_limite.setText( + str(round(resultados_viga["x_lim_viga"], ndigits=5)) + ) + self.ledit_viga_momento_limite.setText( + str(round(resultados_viga["momento_lim_viga"], ndigits=5)) + ) + self.ledit_viga_momento_2.setText( + str(round(resultados_viga["momento_2_viga"], ndigits=5)) + ) + + self.ledit_viga_as_compressao.setText( + str(round(resultados_viga["as_compressao_viga"], ndigits=5)) + ) + self.ledit_viga_as_tracao.setText( + str(round(resultados_viga["as_tracao_viga"], ndigits=5)) + ) + self.ledit_viga_area_sobre_apoio.setText( + str(round(resultados_viga["as_sobre_apoio_viga"], ndigits=5)) + ) + self.ledit_viga_as_pele.setText( + str(round(resultados_viga["as_pele"], ndigits=5)) + ) + self.ledit_viga_as_total.setText( + str(round(resultados_viga["as_total_viga"], ndigits=2)) + ) + self.ledit_viga_as_max.setText( + str(round(resultados_viga["as_max_viga"], ndigits=2)) + ) + self.ledit_viga_as_min.setText( + str(round(resultados_viga["as_min_viga"], ndigits=2)) + ) + + self.ledit_viga_armacao_dupla_d_linha.setText( + str(round(resultados_viga["d_linha"], ndigits=2)) + ) + + if resultados_viga["as_total_viga"] > resultados_viga["as_max_viga"]: + QMessageBox.about( + self, + "Atenção", + "Área Total calculada superior a Área Máxima especificada para a seção da viga.", + ) + if resultados_viga["as_total_viga"] < resultados_viga["as_min_viga"]: + QMessageBox.about( + self, + "Atenção", + "Área Total calculada inferior a Área Mínima especificada para a seção da viga.", + ) + + +tabela_bitolas_ferro = [ + [6.3, 31.17], + [8, 50.26], + [10, 78.53], + [12.5, 122.71], + [16, 201.06], + [20, 314.15], + [25, 490.87], + [32, 804.24], + [40, 1256.63], +] + + +class Detalhar_viga(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.load_ui() + self.load_signals() + + def load_ui(self): + self.ui = loadUi("detalhamento_vigas_alt.ui", self) + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Vigas - Detalhamento") + self.setFixedSize(845, 600) + + def load_signals(self): + print("inicializado") + self.pushButton.clicked.connect(self.calcular_area) + # self.pushButton.clicked.connect(self.calcular_estribos) + self.pushButton_2.clicked.connect(self.limpar_detalhamento) + self.pushButton_3.clicked.connect(self.recuperarValores) + + # pg.plot(x=[0,1,2,3,4], y=[0,1,2,3,4]**2 ) + header = self.tableWidget.horizontalHeader() + # FIXME Verificar a propriedade atualizada caso necessário + # header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) + # header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(5, QtWidgets.QHeaderView.Stretch) + + self.widget.setTitle("nº barras/Bitola") + self.widget.showGrid(x=True, y=True, alpha=1) + + # if '0' not in info_viga: + # self.recuperarValores() + + def calcular_estribos(self): + vsw = self.lineEdit_14.text() + fyk_estribo = self.comboBox_2.currentText() + tramos = self.lineEdit_15.text() + + if vsw != "0" and tramos != "0": + vsw = float(self.lineEdit_14.text()) + bitola_estribo = float(self.comboBox.currentText()) + fyk_estribo = float(self.comboBox_2.currentText()) + tramos = float(self.lineEdit_15.text()) + d = float(self.lineEdit_13.text()) + + espass_horizontal = info_viga_cortante[1] + + area_bitola = 3.14 * ((bitola_estribo / 1000) ** 2) / 4 + + print(vsw) + print(bitola_estribo) + print(tramos) + print(fyk_estribo) + print(area_bitola) + + s_estribo = ( + (tramos * area_bitola * 0.9 * (d / 100) * (fyk_estribo * 100000 / 1.15)) + / vsw + * 1000 + ) / 100 + s_estribo = round(s_estribo, ndigits=3) + + if s_estribo < espass_horizontal: + self.lineEdit.setText(str(espass_horizontal)) + else: + self.lineEdit.setText(str(s_estribo)) + + else: + QMessageBox.about( + self, + "Falta de Dados", + "Por favor insira dados consistentes para o cálculo dos Estribos!", + ) + + def recuperarValores(self): + area_aco = info_viga[0] + base = info_viga[1] + altura = info_viga[2] + d = info_viga[3] + d_agreg = info_viga[4] + + vsw = info_viga_cortante[0] + + self.lineEdit_11.setText(area_aco) + self.lineEdit_10.setText(base) + self.lineEdit_9.setText(altura) + self.lineEdit_12.setText(d_agreg) + self.lineEdit_13.setText(d) + self.lineEdit_14.setText(vsw) + + def calcular_area(self): + area_aco = self.lineEdit_11.text() + base = self.lineEdit_10.text() + altura = self.lineEdit_9.text() + d_agreg = self.lineEdit_12.text() + d = self.lineEdit_13.text() + + if ( + area_aco != "0" + and base != "0" + and altura != "0" + and d_agreg != "0" + and d != "0" + ): + + self.widget.clear() + area_aco = float(self.lineEdit_11.text()) + base = float(self.lineEdit_10.text()) + altura = float(self.lineEdit_9.text()) + cobrimento = float(self.comboBox_3.currentText()) + bitola_estribo = float(self.comboBox.currentText()) + x = [] + y = [] + z = [] + cont = 0 + for i in tabela_bitolas_ferro: + n_barras = float(area_aco / i[1]) + print("bitola: ", i[0], " - nº barras: ", n_barras) + + self.tableWidget.setItem( + cont, 2, QTableWidgetItem(str(round(n_barras, ndigits=2))) + ) + self.tableWidget.setItem( + cont, 3, QTableWidgetItem(str(round(n_barras + 0.5) + 1)) + ) + + x.append(i[0]) + y.append(round(n_barras + 0.5) + 1) + + bitola = x[cont] + n_barras = round(n_barras + 0.5) + 1 + + espass_horizontal = ( + round( + base + - 2 * (cobrimento + bitola_estribo / 10) + - n_barras * (bitola / 10), + ndigits=2, + ) + ) / (n_barras - 1) + + z.append(round(espass_horizontal, ndigits=2)) + self.tableWidget.setItem( + cont, 4, QTableWidgetItem(str(espass_horizontal)) + ) + + print("base:", base) + print("cobrimento:", cobrimento) + print("bitola_estribo:", bitola_estribo) + print("n_barras:", n_barras) + + cont += 1 + + # print(x) + # print(y) + # print(z) + + self.widget.plot(x=x, y=y, pen=(3)) + + self.calcular_espacamentos() + self.calcular_estribos() + + else: + QMessageBox.about( + self, "Falta de Dados", "Por favor insira dados consistentes!" + ) + + def calcular_espacamentos(self): + bitola = float(self.comboBox_4.currentText()) + d_agreg = float(self.lineEdit_12.text()) + + s_horizontal = max(2, (bitola / 10), 1.2 * d_agreg) + s_vertical = max(2, (bitola / 10), 0.5 * d_agreg) + + # ------------------------------- saida de dados ---------------------------------- + self.lineEdit_7.setText(str(s_horizontal)) + self.lineEdit_8.setText(str(s_vertical)) + + def limpar_detalhamento(self): + self.widget.clear() + self.lineEdit_11.setText(str("0")) + self.lineEdit_9.setText(str("0")) + self.lineEdit_10.setText(str("0")) + self.lineEdit_7.setText(str("0")) + self.lineEdit_8.setText(str("0")) + + +class Tabela_Bitolas(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.ui = loadUi("bitolas_ferros.ui", self) + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + header = self.tableWidget.horizontalHeader() + # FIXME Verificar a propriedade atualizada caso necessário + # header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + + self.setWindowTitle("Navier - Tabela de Bitolas") + self.setFixedSize(456, 372) + + +global pilares_info +pilares_info = [0, 0, 0, 0] + +global pilares_info_aco +pilares_info_aco = [0, 0, 0, 0, 0, 0, 0] + + +class Pilares(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.ui = loadUi("pilares_alt.ui", self) + self.load_signals() + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Pilares") + self.setFixedSize(997, 670) + + def load_signals(self): + print("pilares carregado") + self.cont_x = 0 + self.cont_y = 0 + + self.pushButton_6.clicked.connect(self.calcular_pilares) + self.pushButton_7.clicked.connect(self.limpar_pilares) + + self.pushButton.clicked.connect(self.gerar_envoltoria) + self.pushButton_3.clicked.connect(lambda: pilares_areas_aco.show()) + + def calcular_pilares(self): + x_pilar = self.lineEdit.text() + y_pilar = self.lineEdit_2.text() + altura_pilar = self.lineEdit_3.text() + altura_lance = self.lineEdit_4.text() + + nk_pilar = self.lineEdit_5.text() + momento_x_topo = self.lineEdit_6.text() + momento_x_base = self.lineEdit_7.text() + momento_y_topo = self.lineEdit_8.text() + momento_y_base = self.lineEdit_9.text() + + if ( + x_pilar != "0" + and y_pilar != "0" + and altura_pilar != "0" + and altura_lance != "0" + and nk_pilar != "0" + ): + fck_pilar = float(self.comboBox_3.currentText()) + fcd_pilar = fck_pilar / 1.4 + fyk_pilar = float(self.comboBox_4.currentText()) + fyd_pilar = fyk_pilar / 1.15 + cobrimento_pilar = float(self.comboBox_5.currentText()) + + x_pilar = float(self.lineEdit.text()) + y_pilar = float(self.lineEdit_2.text()) + altura_pilar = float(self.lineEdit_3.text()) + altura_lance = float(self.lineEdit_4.text()) + + nk_pilar = float(self.lineEdit_5.text()) + momento_x_topo = float(self.lineEdit_6.text()) + momento_x_base = float(self.lineEdit_7.text()) + momento_y_topo = float(self.lineEdit_8.text()) + momento_y_base = float(self.lineEdit_9.text()) + + area_secao_pilar = (x_pilar / 100) * (y_pilar / 100) + + # nd_pilar = (nk_pilar + ((x_pilar/100)*(y_pilar/100)*altura_pilar*25)) * 1.4 + nd_pilar = (nk_pilar) * 1.4 + md_x_topo = 1.4 * momento_x_topo + md_x_base = 1.4 * momento_x_base + md_y_topo = 1.4 * momento_y_topo + md_y_base = 1.4 * momento_y_base + + tipo_apoio_x = "AA" + + if ( + momento_x_topo == 0 + and momento_x_base == 0 + and momento_y_topo == 0 + and momento_y_base == 0 + ): + self.tipo_pilar = "intermediario" + elif momento_x_topo == 0 and momento_x_base == 0: + self.tipo_pilar = "extremidade-x" + elif momento_y_topo == 0 and momento_y_base == 0: + self.tipo_pilar = "extremidade-y" + else: + self.tipo_pilar = "canto" + + self.lineEdit_13.setText(str(round(md_x_topo, ndigits=5))) + self.lineEdit_14.setText(str(round(md_x_base, ndigits=5))) + self.lineEdit_22.setText(str(round(md_y_topo, ndigits=5))) + self.lineEdit_28.setText(str(round(md_y_base, ndigits=5))) + + # -Eixo-X---------------------------------------------------------------------- + b = y_pilar + h = x_pilar + + m_a = max(md_x_topo, md_x_base) + m_b = min(md_x_topo, md_x_base) + + if self.tipo_pilar == "intermediario" or self.tipo_pilar == "extremidade-x": + alfa_b_x = 1.0 + else: + alfa_b_x = 0.6 + 0.4 * (m_b / m_a) + + if alfa_b_x < 0.4: + alfa_b_x = 0.4 + + # excen_min_x = (1.5+0.03*h) + momento_min_x = (nd_pilar * (1.5 + 0.03 * h)) / 100 + excen_min_x = momento_min_x / nd_pilar + + if md_x_topo < momento_min_x: + md_x_topo = momento_min_x + print("momento topo - mínimo") + alfa_b_x = 1.0 + if md_x_base < momento_min_x: + md_x_base = momento_min_x + print("momento base - mínimo") + alfa_b_x = 1.0 + + compr_efetivo_x = (altura_pilar * 100) + h + if altura_lance * 100 < compr_efetivo_x: + compr_efetivo_x = altura_lance * 100 + + excen_x_acidental = compr_efetivo_x / 400 + v_0 = (nd_pilar * 1000) / (area_secao_pilar * fcd_pilar * 1000000) + + excentricidade_relativa = ( + max(md_x_topo, md_x_base, momento_min_x) / nd_pilar + ) / h + + lambda_pilar_x = 3.46 * (compr_efetivo_x / h) + lambda_pilar_x_limite = (25 + 12.5 * (excentricidade_relativa)) / alfa_b_x + if lambda_pilar_x_limite < 35: + lambda_pilar_x_limite = 35 + + excen_2_x = (compr_efetivo_x**2) / 10 * (0.005 / ((v_0 + 0.5) * h)) + + md2_x = nd_pilar * (excen_2_x / 100) + + if lambda_pilar_x > lambda_pilar_x_limite: + print("efeitos de 2 ordem considerados") + excen_2 = (compr_efetivo_x**2) / 10 * (0.005 / ((v_0 + 0.5) * h)) + md2_x_relativo = nd_pilar * (excen_2 / 100) + else: + md2_x_relativo = 0 + print("efeitos de 2 ordem desconsiderados") + + msd_x_intermediario = ( + alfa_b_x * max(abs(md_x_topo), abs(md_x_base), abs(momento_min_x)) + + md2_x_relativo + ) + # msd_x_intermediario = alfa_b_x * abs(momento_min_x) + md2_x_relativo + + mi_x = msd_x_intermediario / (h * area_secao_pilar * fcd_pilar) / 10 + delta_x = cobrimento_pilar / h + + # -Eixo-Y---------------------------------------------------------------------- + h = y_pilar + b = x_pilar + + m_a = max(md_y_topo, md_y_base) + m_b = min(md_y_topo, md_y_base) + + if self.tipo_pilar == "intermediario" or self.tipo_pilar == "extremidade-y": + alfa_b_y = 1.0 + else: + alfa_b_y = 0.6 + 0.4 * (m_b / m_a) + + if alfa_b_y < 0.4: + alfa_b_y = 0.4 + + momento_min_y = (nd_pilar * (1.5 + 0.03 * h)) / 100 + excen_min_y = momento_min_y / nd_pilar + + if md_y_topo < momento_min_y: + md_y_topo = momento_min_y + print("momento topo - mínimo") + alfa_b_y = 1.0 + if md_y_base < momento_min_y: + md_y_base = momento_min_y + print("momento base - mínimo") + alfa_b_y = 1.0 + + compr_efetivo_y = (altura_pilar * 100) + h + if altura_lance * 100 < compr_efetivo_y: + compr_efetivo_y = altura_lance * 100 + + excen_y_acidental = compr_efetivo_y / 400 + v_0 = (nd_pilar * 1000) / (area_secao_pilar * fcd_pilar * 1000000) + + excentricidade_relativa = ( + max(md_y_topo, md_y_base, momento_min_y) / nd_pilar + ) / h + + lambda_pilar_y = 3.46 * (compr_efetivo_y / h) + lambda_pilar_y_limite = (25 + 12.5 * (excentricidade_relativa)) / alfa_b_y + if lambda_pilar_y_limite < 35: + lambda_pilar_y_limite = 35 + + excen_2_y = (compr_efetivo_y**2) / 10 * (0.005 / ((v_0 + 0.5) * h)) + + md2_y = nd_pilar * (excen_2_y / 100) + + if lambda_pilar_y > lambda_pilar_y_limite: + print("efeitos de 2 ordem considerados") + excen_2 = (compr_efetivo_y**2) / 10 * (0.005 / ((v_0 + 0.5) * h)) + md2_y_relativo = nd_pilar * (excen_2 / 100) + else: + md2_y_relativo = 0 + print("efeitos de 2 ordem desconsiderados") + + msd_y_intermediario = ( + alfa_b_y * max(abs(md_y_topo), abs(md_y_base), abs(momento_min_y)) + + md2_y_relativo + ) + # msd_y_intermediario = alfa_b_y * abs(momento_min_y) + md2_y_relativo + + mi_y = msd_y_intermediario / (h * area_secao_pilar * fcd_pilar) / 10 + delta_y = cobrimento_pilar / h + + # --------------------------------------------- saida de dados --------------------------------------------- + self.lineEdit_10.setText(str(round(nd_pilar, ndigits=4))) + self.lineEdit_11.setText(str(round(area_secao_pilar, ndigits=4))) + self.lineEdit_12.setText(str(round(v_0, ndigits=4))) + + self.lineEdit_15.setText(str(round(momento_min_x, ndigits=5))) + self.lineEdit_16.setText(str(round(excen_min_x * 100, ndigits=5))) + self.lineEdit_17.setText(str(round(lambda_pilar_x, ndigits=5))) + self.lineEdit_18.setText(str(round(lambda_pilar_x_limite, ndigits=5))) + self.lineEdit_19.setText(str(round(excen_2_x, ndigits=5))) + self.lineEdit_20.setText(str(round(md2_x, ndigits=5))) + self.lineEdit_21.setText(str(round(msd_x_intermediario, ndigits=5))) + + self.lineEdit_24.setText(str(round(momento_min_y, ndigits=5))) + self.lineEdit_25.setText(str(round(excen_min_y * 100, ndigits=5))) + self.lineEdit_26.setText(str(round(lambda_pilar_y, ndigits=5))) + self.lineEdit_23.setText(str(round(lambda_pilar_y_limite, ndigits=5))) + self.lineEdit_30.setText(str(round(excen_2_y, ndigits=5))) + self.lineEdit_29.setText(str(round(md2_y, ndigits=5))) + self.lineEdit_27.setText(str(round(msd_y_intermediario, ndigits=5))) + + self.lineEdit_31.setText(str(round(mi_x, ndigits=2))) + self.lineEdit_32.setText(str(round(mi_y, ndigits=2))) + self.lineEdit_33.setText(str(round(delta_x, ndigits=2))) + self.lineEdit_34.setText(str(round(delta_y, ndigits=2))) + + global pilares_info + pilares_info = [ + msd_x_intermediario, + msd_y_intermediario, + momento_min_x, + momento_min_y, + ] + + if md2_x_relativo == 0: + self.label_39.setText("não considera 2º ordem") + else: + self.label_39.setText("considera 2º ordem") + + if md2_y_relativo == 0: + self.label_44.setText("não considera 2º ordem") + else: + self.label_44.setText("considera 2º ordem") + + if self.tipo_pilar == "intermediario": + self.label.setText("PILAR INTERMEDIÁRIO") + elif (self.tipo_pilar == "extremidade-x") or ( + self.tipo_pilar == "extremidade-y" + ): + self.label.setText("PILAR DE EXTREMIDADE") + else: + self.label.setText("PILAR DE CANTO") + + global pilares_info_aco + pilares_info_aco = [ + mi_x, + delta_x, + mi_y, + delta_y, + fck_pilar, + area_secao_pilar, + nk_pilar, + ] + + else: + QMessageBox.about( + self, "Falta de Dados", "Por favor insira dados consistentes!" + ) + + def gerar_envoltoria(self): + msd_x_intermediario = pilares_info[0] + msd_y_intermediario = pilares_info[1] + momento_min_x = pilares_info[2] + momento_min_y = pilares_info[3] + + x = [] + y = [] + for i in range(360): + theta = i + theta_conv = (theta * math.pi) / 180 + + seno = math.sin(theta_conv) + seno = momento_min_y * seno + + cosseno = math.cos(theta_conv) + cosseno = momento_min_x * cosseno + + x.append(seno) + y.append(cosseno) + + z = [] + w = [] + for j in range(360): + theta = j + theta_conv = (theta * math.pi) / 180 + + seno = math.sin(theta_conv) + seno = msd_y_intermediario * seno + + cosseno = math.cos(theta_conv) + cosseno = msd_x_intermediario * cosseno + + z.append(seno) + w.append(cosseno) + + # create plot + """plt = pg.plot(x, y, title='theTitle', pen='r') + plt.showGrid(x=True,y=True) + """ + # create plot + plt = pg.plot() + plt.clear() + plt.showGrid(x=True, y=True) + plt.addLegend() + plt.setTitle("Envoltória de Momentos") + + # set properties + plt.setLabel("left", "Momentos Y", units="KN.m") + plt.setLabel("bottom", "Momentos X", units="KN.m") + plt.setXRange(0, 10) + plt.setYRange(0, 20) + + plt.enableAutoRange() + plt.setWindowTitle("pyqtgraph plot") + # plot + c1 = plt.plot(x, y, pen="r", name="Envoltória Momentos min") + c2 = plt.plot(z, w, pen="b", name="Envoltória Momentos máx") + + def limpar_pilares(self): + print("limpar") + self.comboBox_3.setCurrentIndex(0) + self.comboBox_4.setCurrentIndex(0) + self.comboBox_5.setCurrentIndex(0) + + self.lineEdit.setText("0") + self.lineEdit_2.setText("0") + self.lineEdit_3.setText("0") + self.lineEdit_4.setText("0") + self.lineEdit_5.setText("0") + self.lineEdit_6.setText("0") + self.lineEdit_7.setText("0") + self.lineEdit_8.setText("0") + self.lineEdit_9.setText("0") + + self.lineEdit_10.setText("") + self.lineEdit_11.setText("") + self.lineEdit_12.setText("") + self.lineEdit_13.setText("") + self.lineEdit_14.setText("") + self.lineEdit_15.setText("") + self.lineEdit_16.setText("") + self.lineEdit_17.setText("") + self.lineEdit_18.setText("") + self.lineEdit_19.setText("") + self.lineEdit_20.setText("") + self.lineEdit_21.setText("") + self.lineEdit_22.setText("") + self.lineEdit_23.setText("") + self.lineEdit_24.setText("") + self.lineEdit_25.setText("") + self.lineEdit_26.setText("") + self.lineEdit_27.setText("") + self.lineEdit_28.setText("") + self.lineEdit_29.setText("") + self.lineEdit_30.setText("") + + self.lineEdit_31.setText("") + self.lineEdit_32.setText("") + self.lineEdit_33.setText("") + self.lineEdit_34.setText("") + + +class Pilar_area_aco(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.load_ui() + self.load_signals() + + def load_ui(self): + self.ui = loadUi("pilares_areas_aco.ui", self) + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Pilares - Áreas de Aço") + self.setFixedSize(484, 300) + + self.pushButton_4.setIcon(QtGui.QIcon("images/btn_flexaosimples.png")) + self.pushButton_4.setIconSize(QtCore.QSize(50, 60)) + self.pushButton_5.setIcon(QtGui.QIcon("images/btn_flexaocomposta.png")) + self.pushButton_5.setIconSize(QtCore.QSize(50, 60)) + + def load_signals(self): + print("inicializado") + self.pushButton_2.clicked.connect(self.calcular_area_aco) + self.pushButton.clicked.connect(self.recuperar_dados) + self.pushButton_3.clicked.connect(self.limpar) + self.pushButton_4.clicked.connect( + lambda: self.abrirTabelaAuxiliar(abaco_normal) + ) + self.pushButton_5.clicked.connect( + lambda: self.abrirTabelaAuxiliar(abaco_obliqua) + ) + + def recuperar_dados(self): + self.lineEdit_2.setText(str(round(pilares_info_aco[0], ndigits=2))) + self.lineEdit_3.setText(str(round(pilares_info_aco[1], ndigits=2))) + self.lineEdit_5.setText(str(round(pilares_info_aco[2], ndigits=2))) + self.lineEdit_6.setText(str(round(pilares_info_aco[3], ndigits=2))) + self.lineEdit_12.setText(str(round(pilares_info_aco[4], ndigits=2))) + self.lineEdit_13.setText(str(round(pilares_info_aco[5], ndigits=2))) + self.lineEdit_14.setText(str(round(pilares_info_aco[6], ndigits=2))) + + def calcular_area_aco(self): + fck = float(self.lineEdit_12.text()) + fcd = fck / 1.4 + fyd = 500 / 1.15 + area_concreto = float(self.lineEdit_13.text()) + nk = float(self.lineEdit_14.text()) + nd = 1.4 * nk + + mi_x = float(self.lineEdit_2.text()) + delta_x = float(self.lineEdit_3.text()) + + mi_y = float(self.lineEdit_5.text()) + delta_y = float(self.lineEdit_6.text()) + + omega_x = float(self.lineEdit_4.text()) + omega_y = float(self.lineEdit_7.text()) + + as_x = (omega_x * (area_concreto * 1000000) * fcd) / fyd + as_y = (omega_y * (area_concreto * 1000000) * fcd) / fyd + + as_x = round(as_x, ndigits=3) + as_y = round(as_y, ndigits=3) + + as_pilar_min = 0.15 * (nd / fyd) + if as_pilar_min < (0.004 * area_concreto * 100000): + as_pilar_min = round((0.004 * area_concreto * 100000), ndigits=3) + + as_pilar_max = round((0.08 * area_concreto * 1000000), ndigits=3) + + # -------------------------------------- saída de dados ---------------------------------------------------- + self.lineEdit_8.setText(str(as_x)) + self.lineEdit_9.setText(str(as_y)) + self.lineEdit_10.setText(str(as_pilar_max)) + self.lineEdit_11.setText(str(as_pilar_min)) + + def teste(self): + print("teste") + + def limpar(self): + self.lineEdit_2.setText("0") + self.lineEdit_3.setText("0") + self.lineEdit_4.setText("1") + self.lineEdit_5.setText("0") + self.lineEdit_6.setText("0") + self.lineEdit_7.setText("1") + self.lineEdit_8.setText("0") + self.lineEdit_9.setText("0") + self.lineEdit_10.setText("0") + self.lineEdit_11.setText("0") + self.lineEdit_12.setText("0") + self.lineEdit_13.setText("0") + self.lineEdit_14.setText("0") + + def abrirTabelaAuxiliar(self, file): + if sys.platform == "linux2": + subprocess.call(["xdg-open", file]) + else: + os.startfile(file) + + +class Lajes(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.ui = loadUi("lajes_alt.ui", self) + + self.lado1 = "livre" + self.lado2 = "livre" + self.lado3 = "livre" + self.lado4 = "livre" + self.label_37.hide() + self.label_38.hide() + self.label_40.hide() + self.label_41.hide() + global caso + caso = "1" + global lx_lage + lx_lage = "l_menor" + self.lineEdit.setReadOnly(True) + + self.load_signals() + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Lajes") + self.setFixedSize(1245, 587) + + def load_signals(self): + print("lajes iniciado") + self.pushButton.clicked.connect(self.estado_l1) + self.pushButton_2.clicked.connect(self.estado_l2) + self.pushButton_3.clicked.connect(self.estado_l3) + self.pushButton_4.clicked.connect(self.estado_l4) + self.pushButton.clicked.connect(self.situacao_laje) + self.pushButton_2.clicked.connect(self.situacao_laje) + self.pushButton_3.clicked.connect(self.situacao_laje) + self.pushButton_4.clicked.connect(self.situacao_laje) + + self.pushButton_5.clicked.connect( + lambda: self.abrirTabelaAuxiliar(tabela_marcus) + ) + self.pushButton_6.clicked.connect(self.calcular_laje) + self.pushButton_7.clicked.connect(self.limpar_lajes) + + self.toolButton.clicked.connect(self.revelar_carg_acidental) + + def abrirTabelaAuxiliar(self, file): + if sys.platform == "linux2": + subprocess.call(["xdg-open", file]) + else: + os.startfile(file) + + def teste(self): + lado1 = float(self.lineEdit_3.text()) + lado2 = float(self.lineEdit_4.text()) + espes = float(self.lineEdit_5.text()) + + pp = (espes * 25) / 100 + self.lineEdit.setText(str(pp)) + + def revelar_carg_acidental(self): + print("oi--") + carga_adicional.show() + + def estado_l1(self): + if self.lado1 == "livre": + self.lado1 = "engastado" + pixmap = QPixmap("images/engv.png") + self.pushButton.setIcon(QIcon(pixmap)) + else: + self.lado1 = "livre" + pixmap = QPixmap("images/livv.png") + self.pushButton.setIcon(QIcon(pixmap)) + + def estado_l2(self): + if self.lado2 == "livre": + self.lado2 = "engastado" + pixmap = QPixmap("images/engh.png") + self.pushButton_2.setIcon(QIcon(pixmap)) + else: + self.lado2 = "livre" + pixmap = QPixmap("images/livh.png") + self.pushButton_2.setIcon(QIcon(pixmap)) + + def estado_l3(self): + if self.lado3 == "livre": + self.lado3 = "engastado" + pixmap = QPixmap("images/engh.png") + self.pushButton_3.setIcon(QIcon(pixmap)) + else: + self.lado3 = "livre" + pixmap = QPixmap("images/livh.png") + self.pushButton_3.setIcon(QIcon(pixmap)) + + def estado_l4(self): + if self.lado4 == "livre": + self.lado4 = "engastado" + pixmap = QPixmap("images/engv.png") + self.pushButton_4.setIcon(QIcon(pixmap)) + else: + self.lado4 = "livre" + pixmap = QPixmap("images/livv.png") + self.pushButton_4.setIcon(QIcon(pixmap)) + + def situacao_laje(self): + l1 = self.lado1 + l2 = self.lado2 + l3 = self.lado3 + l4 = self.lado4 + + cota_v1 = self.label_37 + cota_v2 = self.label_40 + cota_h1 = self.label_38 + cota_h2 = self.label_41 + + if l1 == "livre" and l2 == "livre" and l3 == "livre" and l4 == "livre": + global caso + caso = "1" + + cota_v1.show() + cota_v2.show() + cota_h1.hide() + cota_h2.hide() + + global lx_lage + lx_lage = "l_menor" + elif ( + l1 == "engastado" and l2 == "livre" and l3 == "livre" and l4 == "livre" + ) or (l1 == "livre" and l2 == "livre" and l3 == "livre" and l4 == "engastado"): + caso = "2" + + cota_v1.hide() + cota_v2.hide() + cota_h1.show() + cota_h2.show() + + lx_lage = "l_maior" + elif ( + l1 == "livre" and l2 == "engastado" and l3 == "livre" and l4 == "livre" + ) or (l1 == "livre" and l2 == "livre" and l3 == "engastado" and l4 == "livre"): + caso = "2" + + cota_v1.show() + cota_v2.show() + cota_h1.hide() + cota_h2.hide() + + lx_lage = "l_menor" + elif ( + ( + l1 == "engastado" + and l2 == "engastado" + and l3 == "livre" + and l4 == "livre" + ) + or ( + l1 == "engastado" + and l2 == "livre" + and l3 == "engastado" + and l4 == "livre" + ) + or ( + l1 == "livre" + and l2 == "engastado" + and l3 == "livre" + and l4 == "engastado" + ) + or ( + l1 == "livre" + and l2 == "livre" + and l3 == "engastado" + and l4 == "engastado" + ) + ): + caso = "3" + + cota_v1.show() + cota_v2.show() + cota_h1.hide() + cota_h2.hide() + + lx_lage = "l_menor" + elif ( + l1 == "engastado" and l2 == "livre" and l3 == "livre" and l4 == "engastado" + ): + caso = "4" + + cota_v1.hide() + cota_v2.hide() + cota_h1.show() + cota_h2.show() + + lx_lage = "l_maior" + elif ( + l1 == "livre" and l2 == "engastado" and l3 == "engastado" and l4 == "livre" + ): + caso = "4" + + cota_v1.show() + cota_v2.show() + cota_h1.hide() + cota_h2.hide() + + lx_lage = "l_menor" + elif ( + l1 == "engastado" + and l2 == "livre" + and l3 == "engastado" + and l4 == "engastado" + ) or ( + l1 == "engastado" + and l2 == "engastado" + and l3 == "livre" + and l4 == "engastado" + ): + caso = "5" + + cota_v1.hide() + cota_v2.hide() + cota_h1.show() + cota_h2.show() + + lx_lage = "l_maior" + elif ( + l1 == "livre" + and l2 == "engastado" + and l3 == "engastado" + and l4 == "engastado" + ) or ( + l1 == "engastado" + and l2 == "engastado" + and l3 == "engastado" + and l4 == "livre" + ): + caso = "5" + + cota_v1.show() + cota_v2.show() + cota_h1.hide() + cota_h2.hide() + + lx_lage = "l_menor" + elif ( + l1 == "engastado" + and l2 == "engastado" + and l3 == "engastado" + and l4 == "engastado" + ): + caso = "6" + + cota_v1.show() + cota_v2.show() + cota_h1.hide() + cota_h2.hide() + + lx_lage = "l_menor" + else: + caso = "ainda não existe, não sei como você chegou até aqui srsrrsrsrsrsrs" + + print(caso) + self.lineEdit_6.setText(str(caso)) + + def calcular_laje(self): + lado_maior = float(self.lineEdit_3.text()) + lado_menor = float(self.lineEdit_4.text()) + espes = float(self.lineEdit_5.text()) + d = float(self.lineEdit_27.text()) + + self.lineEdit_7.setText("") + self.lineEdit_9.setText("") + self.lineEdit_8.setText("") + self.lineEdit_10.setText("") + self.lineEdit_16.setText("") + self.lineEdit_14.setText("") + self.lineEdit_15.setText("") + self.lineEdit_16.setText("") + + if lado_maior != 0 and lado_menor != 0 and espes != 0 and d != 0: + lado1 = float(self.lineEdit_3.text()) + lado2 = float(self.lineEdit_4.text()) + espes = float(self.lineEdit_5.text()) + d = float(self.lineEdit_27.text()) + carreg_adicional = float(self.lineEdit_2.text()) + # fck_laje = float(self.comboBox.currentText()) + # fcd_laje = fck_laje/1.4 + # fyk_laje = float(self.comboBox_2.currentText()) + # fyd_laje = fyk_laje/1.15 + + pp = (espes * 25) / 100 + self.lineEdit.setText(str(pp)) + + carreg_total = pp + carreg_adicional + # print(caso) + # print(lx_lage) + # ---------------------------------- cálculo do Lx baseado no caso do tipo de situação da laje ----------------- + global lx + global lambda_laje + if lx_lage == "l_menor": + lx = lado2 + lambda_laje = round((lado1 / lado2), ndigits=2) + elif lx_lage == "l_maior": + lx = lado1 + lambda_laje = round((lado2 / lado1), ndigits=2) + print(lx_lage) + + # ---------------------------------- definição se a laje é unidirecional ou bidirecional baseado no lambda ----------------- + global tipo_laje + if float(lambda_laje) > 2.001: + tipo_laje = "UNIDIRECIONAL" + self.laje_unidirecional(carreg_total) + else: + tipo_laje = "BIDIRECIONAL" + # self.label_43.setStyleSheet("Background: url('laje_unidirecional_modelo.png') no-repeat") + + mx = my = nx = ny = "" + + if caso == "1": + caso1 = marcus.caso1 + linhas = len(caso1) + colunas = len(caso1[0]) + + for i in range(linhas): + aux = caso1[i][0] + if lambda_laje == aux: + print(caso1[i]) + mx = caso1[i][2] + my = caso1[i][3] + + print("mx: ", mx) + print("my: ", my) + + if caso == "2": + caso2 = marcus.caso2 + linhas = len(caso2) + colunas = len(caso2[0]) + + for i in range(linhas): + aux = caso2[i][0] + if lambda_laje == aux: + print(caso2[i]) + mx = caso2[i][2] + nx = caso2[i][3] + my = caso2[i][4] + + print("mx: ", mx) + print("nx: ", nx) + print("my: ", my) + + if caso == "3": + caso3 = marcus.caso3 + linhas = len(caso3) + colunas = len(caso3[0]) + + for i in range(linhas): + aux = caso3[i][0] + if lambda_laje == aux: + print(caso3[i]) + mx = caso3[i][2] + nx = caso3[i][3] + my = caso3[i][4] + ny = caso3[i][5] + + print("mx: ", mx) + print("nx: ", nx) + print("my: ", my) + print("ny: ", ny) + + if caso == "4": + caso4 = marcus.caso4 + linhas = len(caso4) + colunas = len(caso4[0]) + + for i in range(linhas): + aux = caso4[i][0] + if lambda_laje == aux: + print(caso4[i]) + mx = caso4[i][2] + nx = caso4[i][3] + my = caso4[i][4] + + print("mx: ", mx) + print("nx: ", nx) + print("my: ", my) + + if caso == "5": + caso5 = marcus.caso5 + linhas = len(caso5) + colunas = len(caso5[0]) + + for i in range(linhas): + aux = caso5[i][0] + if lambda_laje == aux: + print(caso5[i]) + mx = caso5[i][2] + nx = caso5[i][3] + my = caso5[i][4] + ny = caso5[i][5] + + print("mx: ", mx) + print("nx: ", nx) + print("my: ", my) + print("ny: ", ny) + + if caso == "6": + caso6 = marcus.caso6 + linhas = len(caso6) + colunas = len(caso6[0]) + + for i in range(linhas): + aux = caso6[i][0] + if lambda_laje == aux: + print(caso6[i]) + mx = caso6[i][2] + nx = caso6[i][3] + my = caso6[i][4] + ny = caso6[i][5] + + print("mx: ", mx) + print("nx: ", nx) + print("my: ", my) + print("ny: ", ny) + + print(lx) + if mx != "": + self.lineEdit_7.setText(str(mx)) + momento_pos_x = (carreg_total * (lx**2)) / mx + momento_pos_x = round(momento_pos_x, ndigits=4) + + self.lineEdit_13.setText(str(momento_pos_x)) + # else: + # self.lineEdit_13.setText('0') + if nx != "": + self.lineEdit_9.setText(str(nx)) + momento_neg_x = round(((carreg_total * (lx**2)) / nx), ndigits=4) + self.lineEdit_14.setText(str(momento_neg_x)) + # momento_neg_x = round(momento_neg_x,ndigits=2) + # else: + # self.lineEdit_14.setText('0') + if my != "": + self.lineEdit_8.setText(str(my)) + momento_pos_y = (carreg_total * (lx**2)) / my + momento_pos_y = round(momento_pos_y, ndigits=4) + self.lineEdit_15.setText(str(momento_pos_y)) + # else: + # self.lineEdit_15.setText('0') + if ny != "": + self.lineEdit_10.setText(str(ny)) + momento_neg_y = round(((carreg_total * (lx**2)) / ny), ndigits=4) + self.lineEdit_16.setText(str(momento_neg_y)) + # momento_neg_y = round(momento_neg_y,ndigits=2) + + # ----------------------------------- enviar resultados de saida ao programa --------------------------------------- + self.lineEdit_11.setText(str(lambda_laje)) + self.label_16.setText(str(tipo_laje)) + self.lineEdit_12.setText(str(carreg_total)) + + self.resultados_laje() + else: + QMessageBox.about( + self, "Falta de Dados", "Por favor insira dados consistentes" + ) + + def laje_unidirecional(self, carreg_total): + + self.lado1 = "livre" + pixmap = QPixmap("images/livv.png") + self.pushButton.setIcon(QIcon(pixmap)) + + self.lado4 = "livre" + pixmap = QPixmap("images/livv.png") + self.pushButton_4.setIcon(QIcon(pixmap)) + + print("unidirecional") + # l1 = self.lado1 + l2 = self.lado2 + l3 = self.lado3 + # l4 = self.lado4 + l1 = l4 = "livre" + print(carreg_total) + if l2 == "livre" and l3 == "livre": + self.label_43.setStyleSheet( + "Background: url('images/laje_unidirecional_ll2.png') no-repeat" + ) + momento_pos_y = (carreg_total * (lx**2)) / 8 + momento_neg_y = 0 + elif l2 == "engastado" and l3 == "engastado": + self.label_43.setStyleSheet( + "Background: url('images/laje_unidirecional_ee2.png') no-repeat" + ) + momento_pos_y = (carreg_total * (lx**2)) / 24 + momento_neg_y = (carreg_total * (lx**2)) / 12 + elif (l2 == "engastado" and l3 == "livre") or ( + l2 == "livre" and l3 == "engastado" + ): + self.label_43.setStyleSheet( + "Background: url('images/laje_unidirecional_le2.png') no-repeat" + ) + momento_pos_y = (carreg_total * (lx**2)) / 14.2 + momento_neg_y = (carreg_total * (lx**2)) / 8 + + print("momento_pos_y: ", momento_pos_y) + print("momento_neg_y: ", momento_neg_y) + + # ----------------------------------- enviar resultados de saida ao programa --------------------------------------- + momento_pos_y = round(momento_pos_y, ndigits=4) + self.lineEdit_15.setText(str(momento_pos_y)) + momento_neg_y = round(momento_neg_y, ndigits=4) + self.lineEdit_16.setText(str(momento_neg_y)) + + self.lineEdit_13.setText("0") + self.lineEdit_14.setText("0") + + self.lineEdit_11.setText(str(lambda_laje)) + self.label_16.setText(str(tipo_laje)) + self.lineEdit_12.setText(str(carreg_total)) + + self.resultados_laje() + + def truncar(self, x): + aux = "{:.9f}".format(x) + return aux + + def resultados_laje(self): + fck_laje = float(self.comboBox.currentText()) + fcd_laje = fck_laje / 1.4 + fyk_laje = float(self.comboBox_2.currentText()) + fyd_laje = fyk_laje / 1.15 + espes = float(self.lineEdit_5.text()) + + area_concreto_laje = round(((espes / 100) * 1000000), ndigits=4) + + ro_armad_minima = 0 + if fck_laje == 20: + ro_armad_minima = 0.15 / 100 + elif fck_laje == 25: + ro_armad_minima = 0.15 / 100 + elif fck_laje == 30: + ro_armad_minima = 0.15 / 100 + elif fck_laje == 35: + ro_armad_minima = 0.164 / 100 + elif fck_laje == 40: + ro_armad_minima = 0.179 / 100 + + armad_max_laje = (0.4 / 100) * area_concreto_laje + armad_neg_min = ro_armad_minima * area_concreto_laje + armad_pos_cruz = round(0.67 * (ro_armad_minima * area_concreto_laje), ndigits=2) + armad_princ_unid = ro_armad_minima * area_concreto_laje + armad_secnd_unid = max( + (0.2 * armad_princ_unid), + (90), + (0.5 * (ro_armad_minima * area_concreto_laje)), + ) + + mx = self.lineEdit_13.text() + if mx == "": + self.lineEdit_13.setText("0") + + my = self.lineEdit_15.text() + if my == "": + self.lineEdit_15.setText("0") + + nx = self.lineEdit_14.text() + if nx == "": + self.lineEdit_14.setText("0") + + ny = self.lineEdit_16.text() + if ny == "": + self.lineEdit_16.setText("0") + + fck_laje = float(self.comboBox.currentText()) + fyk_laje = float(self.comboBox_2.currentText()) + fcd_laje = fck_laje * 1000000 / 1.4 + fyd_laje = fyk_laje * 1000000 / 1.15 + d_laje = float(self.lineEdit_27.text()) + espes = float(self.lineEdit_5.text()) + + # ------------------------------------------enxerto----------------------- + + mx = float(self.lineEdit_13.text()) + my = float(self.lineEdit_15.text()) + nx = float(self.lineEdit_14.text()) + ny = float(self.lineEdit_16.text()) + # print('mx: ',mx) + # print('nx: ',nx) + # print('my: ',my) + # print('ny: ',ny) + mk_x = mx + mk_y = my + + nk_x = nx + nk_y = ny + + md_x = round(1.4 * mk_x, ndigits=4) + kmd_x_laje = (md_x * 1000) / (1 * ((d_laje / 100) ** 2) * 0.85 * (fcd_laje)) + kx_x_laje = (1 - math.sqrt(1 - 2 * kmd_x_laje)) / 0.8 + kz_x_laje = 1 - 0.4 * kx_x_laje + + as_x_laje = (md_x * 1000 / (kz_x_laje * (d_laje / 100) * fyd_laje)) * 1000000 + + print("md_x: ", md_x) + print("kmd_x_laje: ", kmd_x_laje) + print("kx_x_laje: ", kx_x_laje) + print("kz_x_laje: ", kz_x_laje) + print("as_x_laje: ", as_x_laje) + + md_y = round(1.4 * mk_y, ndigits=4) + kmd_y_laje = (md_y * 1000) / (1 * ((d_laje / 100) ** 2) * 0.85 * (fcd_laje)) + kx_y_laje = (1 - math.sqrt(1 - 2 * kmd_y_laje)) / 0.8 + kz_y_laje = 1 - 0.4 * kx_y_laje + + as_y_laje = (md_y * 1000 / (kz_y_laje * (d_laje / 100) * fyd_laje)) * 1000000 + + print("md_y: ", md_y) + print("kmd_y_laje: ", kmd_y_laje) + print("kx_y_laje: ", kx_y_laje) + print("kz_y_laje: ", kz_y_laje) + print("as_y_laje: ", as_y_laje) + + nd_x = round(1.4 * nk_x, ndigits=4) + kmd_x_laje_n = (nd_x * 1000) / (1 * ((d_laje / 100) ** 2) * 0.85 * (fcd_laje)) + kx_x_laje_n = (1 - math.sqrt(1 - 2 * kmd_x_laje_n)) / 0.8 + kz_x_laje_n = 1 - 0.4 * kx_x_laje_n + + as_x_laje_n = ( + nd_x * 1000 / (kz_x_laje_n * (d_laje / 100) * fyd_laje) + ) * 1000000 + + nd_y = round(1.4 * nk_y, ndigits=4) + kmd_y_laje_n = (nd_y * 1000) / (1 * ((d_laje / 100) ** 2) * 0.85 * (fcd_laje)) + kx_y_laje_n = (1 - math.sqrt(1 - 2 * kmd_y_laje_n)) / 0.8 + kz_y_laje_n = 1 - 0.4 * kx_y_laje_n + + as_y_laje_n = ( + nd_x * 1000 / (kz_y_laje_n * (d_laje / 100) * fyd_laje) + ) * 1000000 + + # ------------------------------------------ saida de dados ------------------------------------ + kmd_x_laje = self.truncar(kmd_x_laje) + kx_x_laje = self.truncar(kx_x_laje) + kz_x_laje = self.truncar(kz_x_laje) + as_x_laje = self.truncar(as_x_laje) + + kmd_y_laje = self.truncar(kmd_y_laje) + kx_y_laje = self.truncar(kx_y_laje) + kz_y_laje = self.truncar(kz_y_laje) + as_y_laje = self.truncar(as_y_laje) + + self.lineEdit_17.setText(str(md_x)) + self.lineEdit_18.setText(str(kmd_x_laje)) + self.lineEdit_19.setText(str(kx_x_laje)) + self.lineEdit_20.setText(str(kz_x_laje)) + self.lineEdit_21.setText(str(as_x_laje)) + + self.lineEdit_22.setText(str(md_y)) + self.lineEdit_24.setText(str(kmd_y_laje)) + self.lineEdit_25.setText(str(kx_y_laje)) + self.lineEdit_26.setText(str(kz_y_laje)) + self.lineEdit_23.setText(str(as_y_laje)) + + self.lineEdit_38.setText(str(area_concreto_laje)) + self.lineEdit_39.setText(str(ro_armad_minima * 100)) + self.lineEdit_42.setText(str(armad_max_laje)) + self.lineEdit_40.setText(str(armad_neg_min)) + self.lineEdit_41.setText(str(armad_pos_cruz)) + self.lineEdit_43.setText(str(armad_princ_unid)) + self.lineEdit_44.setText(str(armad_secnd_unid)) + + if tipo_laje == "UNIDIRECIONAL": + self.label_44.setText("Distribuição") + if float(as_y_laje) < armad_princ_unid: + self.label_45.setText("Mínima") + else: + self.label_45.setText("") + + if tipo_laje == "BIDIRECIONAL": + if float(as_x_laje) < armad_pos_cruz: + self.label_44.setText("Mínima") + else: + self.label_44.setText("") + + if float(as_y_laje) < armad_pos_cruz: + self.label_45.setText("Mínima") + else: + self.label_45.setText("") + + def limpar_lajes(self): + self.comboBox.setCurrentIndex(0) + self.comboBox_2.setCurrentIndex(0) + + self.lineEdit.setText("0") + self.lineEdit_2.setText("0") + self.lineEdit_3.setText("0") + self.lineEdit_4.setText("0") + self.lineEdit_5.setText("0") + self.lineEdit_27.setText("0") + + self.lineEdit_7.setText("") + self.lineEdit_8.setText("") + self.lineEdit_9.setText("") + self.lineEdit_10.setText("") + + self.lineEdit_11.setText("") + self.lineEdit_12.setText("") + self.lineEdit_38.setText("") + self.lineEdit_39.setText("") + self.lineEdit_42.setText("") + self.lineEdit_40.setText("") + self.lineEdit_41.setText("") + self.lineEdit_43.setText("") + self.lineEdit_44.setText("") + + self.lineEdit_13.setText("") + self.lineEdit_14.setText("") + self.lineEdit_15.setText("") + self.lineEdit_16.setText("") + + self.lineEdit_16.setText("") + self.lineEdit_17.setText("") + self.lineEdit_18.setText("") + self.lineEdit_19.setText("") + self.lineEdit_20.setText("") + self.lineEdit_21.setText("") + self.lineEdit_22.setText("") + self.lineEdit_23.setText("") + self.lineEdit_24.setText("") + self.lineEdit_25.setText("") + self.lineEdit_26.setText("") + + +class Carga_Adicional(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + + self.ui = loadUi("lajes_carg_adicional_atualizada.ui", self) + + header = self.tableWidget.horizontalHeader() + # FIXME Verificar a propriedade atualizada caso necessário + # header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) + # header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + self.tableWidget.resizeRowsToContents() + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Cargas Adicionais") + self.setFixedSize(649, 504) + + +class Sapatas(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.ui = loadUi("sapatas_alt.ui", self) + self.load_signals() + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Sapatas") + self.setFixedSize(946, 574) + + def load_signals(self): + print("sapatas carregado") + self.pushButton_6.clicked.connect(self.calcular_sapata) + self.pushButton_7.clicked.connect(self.limpar_sapatas) + self.pushButton.clicked.connect(self.gerar_dim_sapata) + + def arredondar_cinco(self, numero): + numero = round(numero, ndigits=2) + numero = 100 * numero + resto = numero % 5 + while resto != 0: + numero += 1 + resto = numero % 5 + print("numero:", numero, " - resto: ", resto) + + numero = numero / 100 + return numero + + def calcular_sapata(self): + + nk = float(self.lineEdit_3.text()) + momento_x_sapata = float(self.lineEdit_4.text()) + momento_y_sapata = float(self.lineEdit_5.text()) + x_pilar = float(self.lineEdit.text()) + y_pilar = float(self.lineEdit_2.text()) + tensao_adm_solo = float(self.lineEdit_35.text()) + fator_solo = float(self.lineEdit_13.text()) + + base_y_sapata = float(self.lineEdit_10.text()) + base_x_sapata = float(self.lineEdit_9.text()) + h_total = float(self.lineEdit_11.text()) + h_0 = float(self.lineEdit_12.text()) + + y_sapata = float(self.lineEdit_9.text()) + x_sapata = float(self.lineEdit_10.text()) + h_total = float(self.lineEdit_11.text()) + h_0 = float(self.lineEdit_12.text()) + + if ( + nk != 0 + and x_pilar != 0 + and y_pilar != 0 + and tensao_adm_solo != 0 + and fator_solo != 0 + and base_y_sapata != 0 + and base_x_sapata != 0 + and h_total != 0 + and h_0 != 0 + ): + if x_sapata < 0.6 or y_sapata < 0.6: + QMessageBox.about( + self, + "Erro de Entrada", + "As sapatas não podem apresentar lados menores de 60 cm, conforme a NBR 6122", + ) + else: + fck_sapata = float(self.comboBox.currentText()) + fcd_sapata = fck_sapata / 1.4 + fyk_sapata = float(self.comboBox_2.currentText()) + fyd_sapata = fyk_sapata / 1.15 + nk = float(self.lineEdit_3.text()) + momento_x_sapata = float(self.lineEdit_4.text()) + momento_y_sapata = float(self.lineEdit_5.text()) + tensao_adm_solo = float(self.lineEdit_35.text()) + fator_solo = float(self.lineEdit_13.text()) + angulo_dissp_sapata = float(self.spinBox.value()) + + angulo_dissp_sapata = (angulo_dissp_sapata / 180) * 3.14 + + x_pilar = float(self.lineEdit.text()) / 100 + y_pilar = float(self.lineEdit_2.text()) / 100 + + y_sapata = float(self.lineEdit_9.text()) + x_sapata = float(self.lineEdit_10.text()) + h_total = float(self.lineEdit_11.text()) + h_0 = float(self.lineEdit_12.text()) + + if (momento_x_sapata != 0 and momento_y_sapata == 0) or ( + momento_x_sapata == 0 and momento_y_sapata != 0 + ): + fator_acrescimo_dimensoes = 1.05 + elif momento_x_sapata != 0 and momento_y_sapata != 0: + fator_acrescimo_dimensoes = 1.103 + else: + fator_acrescimo_dimensoes = 1.0 + + x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) + y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) + + wx = x_sapata * (y_sapata**2) / 6 + wy = y_sapata * (x_sapata**2) / 6 + + mw_x = (momento_x_sapata / wx) * 1000 + mw_y = (momento_y_sapata / wy) * 1000 + + tensao_sapata = (fator_solo * nk * 1000) / (x_sapata * y_sapata) + tensao_max_sapata = tensao_sapata + mw_x + mw_y + tensao_min_sapata = tensao_sapata - mw_x - mw_y + + nk_equiv = (x_sapata * y_sapata * tensao_max_sapata) / fator_solo + area_sapata = round( + fator_solo * ((nk * 1000) / (tensao_adm_solo * 1000000)), ndigits=6 + ) + + ca_sapata = (x_sapata - x_pilar) / 2 + cb_sapata = (y_sapata - y_pilar) / 2 + h_rig_x = 2 / 3 * ca_sapata + h_rig_y = 2 / 3 * cb_sapata + + h_mincis = (1.4 * nk_equiv) / ( + 2 + * (x_pilar + y_pilar) + * 0.27 + * (1 - (fck_sapata / 250)) + * (fcd_sapata * 1000000) + ) + if h_mincis < 0.40: + h_mincis = 0.40 + if h_total < h_mincis: + h_total = h_mincis + + braco_alavanca_sapata = h_total - 0.05 + + h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) + h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) + + # h0 = round(h0a, ndigits=2) + # if h0a < h0b: + # h0 = round(h0b, ndigits=2) + + volume_concreto_sapata = (h_total - h_0) / ( + 3 + * ( + x_sapata * y_sapata + + x_pilar * y_pilar + + math.sqrt(x_sapata * y_sapata * x_pilar * y_pilar) + ) + + x_sapata * y_sapata * h_0 + ) + + tracao_x_sapata = ( + 1.1 * nk_equiv * (x_sapata - x_pilar) / (8 * braco_alavanca_sapata) + ) + tracao_y_sapata = ( + 1.1 * nk_equiv * (y_sapata - y_pilar) / (8 * braco_alavanca_sapata) + ) + as_x_sapata = (1.4 * tracao_x_sapata) / (fyd_sapata) + as_y_sapata = (1.4 * tracao_y_sapata) / fyd_sapata + + taxa_aco_sapata = (0.078 * (fck_sapata) ** (2 / 3)) / fyd_sapata + + if taxa_aco_sapata <= 0.0015: + taxa_aco_sapata = 0.0015 + + as_x_min_laje = 0.67 * taxa_aco_sapata * h_mincis * x_sapata + as_y_min_laje = 0.67 * taxa_aco_sapata * h_mincis * y_sapata + + print("x_sapata: ", x_sapata) + print("y_sapata: ", y_sapata) + + print("wx: ", wx) + print("wy: ", wy) + print("mw_x: ", mw_x) + print("mw_y: ", mw_y) + print("tensao_max_sapata: ", tensao_max_sapata) + print("tensao_min_sapata: ", tensao_min_sapata) + print("nk_equiv: ", nk_equiv) + print("ca_sapata: ", ca_sapata) + print("cb_sapata: ", cb_sapata) + print("h0a: ", h0a) + print("h0b: ", h0b) + print("h_mincis: ", h_mincis) + # print('h0: ',h0) + print("h_total", h_total) + print("-------------------------------------\n") + + # -------------------------------------- saida dos dados -------------------------------------------------- + self.lineEdit_11.setText(str(h_total)) + # self.lineEdit_12.setText(str(h0)) + + self.lineEdit_15.setText(str(area_sapata)) + self.lineEdit_16.setText(str(round(wx, ndigits=6))) + self.lineEdit_17.setText(str(round(wy, ndigits=6))) + self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) + self.lineEdit_19.setText( + str(round(tensao_max_sapata / 1000000, ndigits=4)) + ) + self.lineEdit_20.setText( + str(round(tensao_min_sapata / 1000000, ndigits=4)) + ) + self.lineEdit_21.setText(str(round(ca_sapata * 100, ndigits=4))) + self.lineEdit_22.setText(str(round(cb_sapata * 100, ndigits=4))) + + self.lineEdit_23.setText(str(round(h_rig_x * 100, ndigits=4))) + self.lineEdit_24.setText(str(round(h_rig_y * 100, ndigits=4))) + self.lineEdit_25.setText(str(round(h_mincis * 100, ndigits=4))) + self.lineEdit_26.setText(str(round(h0a * 100, ndigits=4))) + self.lineEdit_28.setText(str(round(h0b * 100, ndigits=4))) + self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) + + self.lineEdit_14.setText(str(round(tracao_x_sapata / 1000, ndigits=4))) + self.lineEdit_29.setText(str(round(tracao_y_sapata / 1000, ndigits=4))) + self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) + self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) + + self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) + self.lineEdit_33.setText(str(round(as_x_min_laje * 1000000, ndigits=4))) + self.lineEdit_34.setText(str(round(as_y_min_laje * 1000000, ndigits=4))) + + else: + QMessageBox.about( + self, "Falta de Dados", "Por favor insira dados consistentes" + ) + + def gerar_dim_sapata(self): + + nk = float(self.lineEdit_3.text()) + momento_x_sapata = float(self.lineEdit_4.text()) + momento_y_sapata = float(self.lineEdit_5.text()) + x_pilar = float(self.lineEdit.text()) + y_pilar = float(self.lineEdit_2.text()) + tensao_adm_solo = float(self.lineEdit_35.text()) + fator_solo = float(self.lineEdit_13.text()) + + if ( + nk != 0 + and x_pilar != 0 + and y_pilar != 0 + and tensao_adm_solo != 0 + and fator_solo != 0 + ): + + fck_sapata = float(self.comboBox.currentText()) + fcd_sapata = fck_sapata / 1.4 + fyk_sapata = float(self.comboBox_2.currentText()) + fyd_sapata = fyk_sapata / 1.15 + nk = float(self.lineEdit_3.text()) + momento_x_sapata = float(self.lineEdit_4.text()) + momento_y_sapata = float(self.lineEdit_5.text()) + tensao_adm_solo = float(self.lineEdit_35.text()) + fator_solo = float(self.lineEdit_13.text()) + angulo_dissp_sapata = float(self.spinBox.value()) + + angulo_dissp_sapata = (angulo_dissp_sapata / 180) * 3.14 + + x_pilar = float(self.lineEdit.text()) / 100 + y_pilar = float(self.lineEdit_2.text()) / 100 + + area_sapata = round( + fator_solo * ((nk * 1000) / (tensao_adm_solo * 1000000)), ndigits=6 + ) + + y_sapata = 0.5 * (y_pilar - x_pilar) + math.sqrt( + 0.25 * ((y_pilar - x_pilar) ** 2) + area_sapata + ) + + x_sapata = area_sapata / y_sapata + + if (momento_x_sapata != 0 and momento_y_sapata == 0) or ( + momento_x_sapata == 0 and momento_y_sapata != 0 + ): + fator_acrescimo_dimensoes = 1.05 + elif momento_x_sapata != 0 and momento_y_sapata != 0: + fator_acrescimo_dimensoes = 1.103 + else: + fator_acrescimo_dimensoes = 1.0 + + x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) + y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) + + if x_sapata < 0.6: + x_sapata = 0.6 + if y_sapata < 0.6: + y_sapata = 0.6 + print(x_sapata, "<--------------------------------------------------") + wx = x_sapata * (y_sapata**2) / 6 + wy = y_sapata * (x_sapata**2) / 6 + + mw_x = (momento_x_sapata / wx) * 1000 + mw_y = (momento_y_sapata / wy) * 1000 + + tensao_sapata = (fator_solo * nk * 1000) / (x_sapata * y_sapata) + tensao_max_sapata = tensao_sapata + mw_x + mw_y + tensao_min_sapata = tensao_sapata - mw_x - mw_y + + x_sapata = self.arredondar_cinco(x_sapata) + y_sapata = self.arredondar_cinco(y_sapata) + if x_sapata < 0.6: + x_sapata = 0.6 + if y_sapata < 0.6: + y_sapata = 0.6 + + nk_equiv = (x_sapata * y_sapata * tensao_max_sapata) / fator_solo + + ca_sapata = (x_sapata - x_pilar) / 2 + cb_sapata = (y_sapata - y_pilar) / 2 + h_rig_x = 2 / 3 * ca_sapata + h_rig_y = 2 / 3 * cb_sapata + + h_total = h_rig_x + if h_total < h_rig_y: + h_total = h_rig_y + + h_mincis = (1.4 * nk_equiv) / ( + 2 + * (x_pilar + y_pilar) + * 0.27 + * (1 - (fck_sapata / 250)) + * (fcd_sapata * 1000000) + ) + if h_mincis < 0.40: + h_mincis = 0.40 + h_mincis = round(h_mincis, ndigits=4) + + if h_total < h_mincis: + h_total = h_mincis + + h_total = self.arredondar_cinco(h_total) + + h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) + h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) + h0_prerrogativo = h_total / 3 + tangente_angulo = math.tan(angulo_dissp_sapata) + h0 = round(h0a, ndigits=2) + if h0a < h0b: + h0 = round(h0b, ndigits=2) + elif h0b < h0_prerrogativo: + h0 = h0_prerrogativo + if h0 < 0.25: + h0 = 0.25 + h0 = self.arredondar_cinco(h0) + + volume_concreto_sapata = ( + (h_total - h0) + / 3 + * ( + x_sapata * y_sapata + + x_pilar * y_pilar + + math.sqrt(x_sapata * y_sapata * x_pilar * y_pilar) + ) + ) + (x_sapata * y_sapata * h0) + + braco_alavanca_sapata = h_total - 0.05 + + tracao_x_sapata = ( + 1.1 * nk_equiv * (x_sapata - x_pilar) / (8 * braco_alavanca_sapata) + ) + tracao_y_sapata = ( + 1.1 * nk_equiv * (y_sapata - y_pilar) / (8 * braco_alavanca_sapata) + ) + as_x_sapata = (1.4 * tracao_x_sapata) / (fyd_sapata) + as_y_sapata = (1.4 * tracao_y_sapata) / fyd_sapata + + taxa_aco_sapata = (0.078 * (fck_sapata) ** (2 / 3)) / fyd_sapata + + if taxa_aco_sapata <= 0.0015: + taxa_aco_sapata = 0.0015 + + as_x_min_laje = 0.67 * taxa_aco_sapata * h_total * x_sapata + as_y_min_laje = 0.67 * taxa_aco_sapata * h_total * y_sapata + + print("x_sapata: ", x_sapata) + print("y_sapata: ", y_sapata) + + print("wx: ", wx) + print("wy: ", wy) + print("mw_x: ", mw_x) + print("mw_y: ", mw_y) + print("tensao_max_sapata: ", tensao_max_sapata) + print("tensao_min_sapata: ", tensao_min_sapata) + print("nk_equiv: ", nk_equiv) + print("ca_sapata: ", ca_sapata) + print("cb_sapata: ", cb_sapata) + print("h0a: ", h0a) + print("h0b: ", h0b) + print("h_mincis: ", h_mincis) + print("h0: ", h0) + print("tangente_angulo: ", tangente_angulo) + print("----------") + print("h_total: ", h_total) + print("tracao_x_sapata: ", tracao_x_sapata) + print("tracao_y_sapata: ", tracao_y_sapata) + print("as_x_sapata: ", as_x_sapata) + print("as_y_sapata: ", as_y_sapata) + print("taxa_aco_sapata: ", taxa_aco_sapata) + print("as_x_min_laje: ", as_x_min_laje) + print("as_y_min_laje: ", as_y_min_laje) + print("-------------------------------------\n") + # ------------------------------ saida de dados --------------------------------------------- + self.lineEdit_9.setText(str(y_sapata)) + self.lineEdit_10.setText(str(x_sapata)) + self.lineEdit_15.setText(str(area_sapata)) + + self.lineEdit_11.setText(str(round(h_total, ndigits=4))) + self.lineEdit_12.setText(str(round(h0, ndigits=4))) + + self.lineEdit_15.setText(str(area_sapata)) + self.lineEdit_16.setText(str(round(wx, ndigits=6))) + self.lineEdit_17.setText(str(round(wy, ndigits=6))) + self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) + self.lineEdit_19.setText(str(round(tensao_max_sapata / 1000000, ndigits=4))) + self.lineEdit_20.setText(str(round(tensao_min_sapata / 1000000, ndigits=4))) + self.lineEdit_21.setText(str(round(ca_sapata * 100, ndigits=4))) + self.lineEdit_22.setText(str(round(cb_sapata * 100, ndigits=4))) + + self.lineEdit_23.setText(str(round(h_rig_x * 100, ndigits=4))) + self.lineEdit_24.setText(str(round(h_rig_y * 100, ndigits=4))) + self.lineEdit_25.setText(str(round(h_mincis * 100, ndigits=4))) + self.lineEdit_26.setText(str(round(h0a * 100, ndigits=4))) + self.lineEdit_28.setText(str(round(h0b * 100, ndigits=4))) + self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) + + self.lineEdit_14.setText(str(round(tracao_x_sapata / 1000, ndigits=4))) + self.lineEdit_29.setText(str(round(tracao_y_sapata / 1000, ndigits=4))) + self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) + self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) + + self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) + self.lineEdit_33.setText(str(round(as_x_min_laje * 1000000, ndigits=4))) + self.lineEdit_34.setText(str(round(as_y_min_laje * 1000000, ndigits=4))) + + else: + QMessageBox.about( + self, "Falta de Dados", "Por favor insira dados consistentes" + ) + + def limpar_sapatas(self): + self.comboBox.setCurrentIndex(0) + self.comboBox_2.setCurrentIndex(0) + + self.lineEdit.setText("0") + self.lineEdit_2.setText("0") + self.lineEdit_3.setText("0") + self.lineEdit_4.setText("0") + self.lineEdit_5.setText("0") + + self.lineEdit_35.setText("0") + self.lineEdit_13.setText("1.1") + self.spinBox.setValue(30) + + self.lineEdit_9.setText("0") + self.lineEdit_10.setText("0") + self.lineEdit_11.setText("0") + self.lineEdit_12.setText("0") + + self.lineEdit_15.setText("") + self.lineEdit_16.setText("") + self.lineEdit_17.setText("") + self.lineEdit_18.setText("") + self.lineEdit_19.setText("") + self.lineEdit_20.setText("") + self.lineEdit_21.setText("") + self.lineEdit_22.setText("") + self.lineEdit_23.setText("") + self.lineEdit_24.setText("") + self.lineEdit_25.setText("") + self.lineEdit_26.setText("") + self.lineEdit_27.setText("") + self.lineEdit_28.setText("") + + self.lineEdit_14.setText("") + self.lineEdit_29.setText("") + self.lineEdit_30.setText("") + self.lineEdit_31.setText("") + self.lineEdit_32.setText("") + self.lineEdit_33.setText("") + self.lineEdit_34.setText("") + + +# ---------------------------------------------- Janelas Adicionais ---------------------------------------------------- + + +class Tabela_Classe_Agressividade(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.load_ui() + self.load_signals() + + def load_ui(self): + self.ui = loadUi("class_agres.ui", self) + + # scriptDir = os.path.dirname(os.path.realpath(__file__)) + # self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) + self.setWindowIcon(QtGui.QIcon("images/logo.ico")) + + self.setWindowTitle("Navier - Classes de Agressividade e Cobrimentos Mínimos") + self.setFixedSize(579, 520) + + def load_signals(self): + print("inicializado") + header = self.tableWidget.horizontalHeader() + # FIXME Verificar a propriedade atualizada caso necessário + # header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + # header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) + + self.tableWidget.setSpan(0, 0, 1, 4) + + header_2 = self.tableWidget_2.horizontalHeader() + # FIXME Verificar a propriedade atualizada caso necessário + # header_2.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + # header_2.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + # header_2.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + # header_2.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + + self.tableWidget_2.setSpan(0, 0, 2, 1) + self.tableWidget_2.setSpan(0, 1, 2, 1) + self.tableWidget_2.setSpan(0, 3, 2, 1) + + self.tableWidget_2.setSpan(3, 0, 2, 1) + self.tableWidget_2.setSpan(3, 1, 2, 1) + self.tableWidget_2.setSpan(3, 3, 2, 1) + + self.tableWidget_2.setSpan(5, 0, 2, 1) + self.tableWidget_2.setSpan(5, 1, 2, 1) + self.tableWidget_2.setSpan(5, 3, 2, 1) + + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + inicio = Inicio() + vigas = Vigas() + detalhar_vigas = Detalhar_viga() + pilares = Pilares() + pilares_areas_aco = Pilar_area_aco() + lajes = Lajes() + sapatas = Sapatas() + carga_adicional = Carga_Adicional() + tabela_classe_agressividade = Tabela_Classe_Agressividade() + tabela_bitolas = Tabela_Bitolas() + + inicio.show() + sys.exit(app.exec()) + + # app.exec_() diff --git a/marcus.py b/app/marcus.py similarity index 100% rename from marcus.py rename to app/marcus.py diff --git a/pilares_alt.ui b/app/pilares_alt.ui similarity index 100% rename from pilares_alt.ui rename to app/pilares_alt.ui diff --git a/pilares_areas_aco.ui b/app/pilares_areas_aco.ui similarity index 100% rename from pilares_areas_aco.ui rename to app/pilares_areas_aco.ui diff --git a/sapatas_alt.ui b/app/sapatas_alt.ui similarity index 100% rename from sapatas_alt.ui rename to app/sapatas_alt.ui diff --git a/tabela_marcus.pdf b/app/tabela_marcus.pdf similarity index 100% rename from tabela_marcus.pdf rename to app/tabela_marcus.pdf diff --git a/vigas_alt.ui b/app/vigas_alt.ui similarity index 78% rename from vigas_alt.ui rename to app/vigas_alt.ui index 3704cfe..1c0e423 100644 --- a/vigas_alt.ui +++ b/app/vigas_alt.ui @@ -6,8 +6,8 @@ 0 0 - 868 - 627 + 871 + 634 @@ -26,11 +26,11 @@ 0 - + Seção Retangular - + -1 @@ -40,10 +40,10 @@ - 1 + 0 - - + + 20 @@ -55,7 +55,7 @@ Dimensões - + 130 @@ -68,7 +68,7 @@ 0 - + 130 @@ -81,7 +81,7 @@ 0 - + 131 @@ -94,20 +94,20 @@ 0 - + 20 30 - 81 + 101 16 - Base - bw [cm] + Largura - bw [cm] - + 20 @@ -120,12 +120,12 @@ Altura - h [cm] - + 20 90 - 91 + 101 16 @@ -133,7 +133,7 @@ Altura Útil - d [cm] - + 0 @@ -145,7 +145,7 @@ Projeção de Domínio - + 140 @@ -158,7 +158,7 @@ Domínio 3 - + 30 @@ -174,20 +174,20 @@ true - + - 100 + 30 50 - 47 + 81 21 - ξ + Linha Neutra ξ - + 130 @@ -200,10 +200,10 @@ 0.450 - + - 60 + 30 80 71 21 @@ -213,7 +213,7 @@ d limite [m] - + 130 @@ -223,7 +223,7 @@ - + 131 @@ -233,10 +233,10 @@ - + - 60 + 30 110 91 21 @@ -247,7 +247,7 @@ - + 19 @@ -260,7 +260,7 @@ d' [cm] - + 130 @@ -277,19 +277,19 @@ - + 290 0 - 251 + 261 141 Seção - + 71 @@ -309,24 +309,24 @@ - + 290 150 - 251 + 261 321 Armadura Longitudinal - + - 20 + 10 50 - 91 + 101 21 @@ -334,17 +334,17 @@ Momento2 [KN.m] - + - 130 + 150 50 100 20 - + 0 @@ -356,22 +356,22 @@ Áreas de Aço - + - 129 - 18 + 150 + 20 91 20 - + 20 18 - 111 + 121 21 @@ -379,12 +379,12 @@ As Compressão [mm²] - + 20 78 - 101 + 111 21 @@ -392,27 +392,27 @@ Asobre-apoio [mm²] - + - 129 - 78 + 150 + 80 91 20 - + - 129 + 149 108 91 20 - + 20 @@ -425,7 +425,7 @@ As.pele [mm²] - + 21 @@ -438,27 +438,27 @@ As.máx [mm²] - + - 130 + 150 170 91 20 - + - 129 - 48 + 150 + 50 91 20 - + 20 @@ -471,7 +471,7 @@ As Tração [mm²] - + 21 @@ -484,17 +484,17 @@ As.mín [mm²] - + - 130 + 150 200 91 20 - + 21 @@ -507,10 +507,10 @@ As.total [mm²] - + - 130 + 150 140 91 20 @@ -518,22 +518,22 @@ - + - 130 + 150 20 100 20 - + - 20 + 10 20 - 111 + 131 21 @@ -543,8 +543,8 @@ - - + + 20 @@ -556,7 +556,7 @@ Dimensões - + 130 @@ -569,7 +569,7 @@ 0 - + 130 @@ -582,7 +582,7 @@ 0 - + 131 @@ -595,7 +595,7 @@ 0 - + 20 @@ -608,7 +608,7 @@ Base - bw [cm] - + 20 @@ -621,7 +621,7 @@ Altura - h [cm] - + 20 @@ -634,7 +634,7 @@ Altura Útil - d [cm] - + 19 @@ -647,7 +647,7 @@ d' [cm] - + 130 @@ -664,7 +664,7 @@ - + 20 @@ -676,7 +676,7 @@ Seção - + 70 @@ -696,7 +696,7 @@ - + 290 @@ -708,10 +708,10 @@ Armadura Longitudinal - + - 19 + 10 20 91 21 @@ -721,20 +721,20 @@ Md [KN.m] - + 130 20 - 100 + 111 20 - + - 60 + 10 80 91 21 @@ -744,20 +744,20 @@ Kmd - + - 110 + 130 80 - 100 + 111 20 - + - 60 + 10 110 91 21 @@ -767,20 +767,20 @@ Kx - + - 110 + 130 110 - 100 + 111 20 - + - 60 + 10 140 91 21 @@ -790,17 +790,17 @@ Kz - + - 110 + 130 140 - 100 + 111 20 - + 0 @@ -812,17 +812,17 @@ Áreas de Aço - + - 129 + 150 30 91 20 - + 20 @@ -835,12 +835,12 @@ As [mm²] - + 20 60 - 101 + 121 21 @@ -848,27 +848,27 @@ Asobre-apoio [mm²] - + - 129 + 150 60 91 20 - + - 129 + 150 90 91 20 - + 20 @@ -881,7 +881,7 @@ As.pele [mm²] - + 21 @@ -894,27 +894,27 @@ As.máx [mm²] - + - 130 + 150 120 91 20 - + - 129 + 150 150 91 20 - + 20 @@ -928,7 +928,7 @@ - + 130 @@ -938,10 +938,10 @@ - + - 20 + 10 50 111 21 @@ -954,7 +954,7 @@ - + 540 @@ -967,7 +967,7 @@ Simplesmente Armada - + 690 @@ -980,7 +980,7 @@ Duplamente Armada - + 20 @@ -992,7 +992,7 @@ Solicitações - + 150 @@ -1005,7 +1005,7 @@ 0 - + 150 @@ -1018,7 +1018,7 @@ 0 - + 20 @@ -1031,7 +1031,7 @@ Momento Fletor [KN.m] - + 20 @@ -1045,7 +1045,7 @@ - + 20 @@ -1057,7 +1057,7 @@ Concreto - + 20 @@ -1070,7 +1070,7 @@ Resistência - fck [MPa] - + 150 @@ -1115,7 +1115,7 @@ - + 150 @@ -1140,7 +1140,7 @@ - + 20 @@ -1154,7 +1154,7 @@ - + 570 @@ -1166,7 +1166,7 @@ Armadura Transversal - + 0 @@ -1178,7 +1178,7 @@ Modelo de Cálculo - + 20 @@ -1194,12 +1194,12 @@ true - + 20 40 - 211 + 221 21 @@ -1207,7 +1207,7 @@ Modelo II - α = 90º e 30º < θ < 45º - + 170 @@ -1223,7 +1223,7 @@ 45 - + 140 @@ -1256,7 +1256,7 @@ true - + 30 @@ -1269,7 +1269,7 @@ Vsd [KN] - + 110 @@ -1279,7 +1279,7 @@ - + 30 @@ -1292,7 +1292,7 @@ Vrd2 [KN] - + 110 @@ -1305,7 +1305,7 @@ - + 110 @@ -1318,7 +1318,7 @@ - + 30 @@ -1331,7 +1331,7 @@ Vc [KN] - + 30 @@ -1344,7 +1344,7 @@ Vsw[KN] - + 110 @@ -1357,7 +1357,7 @@ - + 0 @@ -1369,7 +1369,7 @@ Área de Aço - + 122 @@ -1382,12 +1382,12 @@ - + - 30 + 10 20 - 71 + 81 16 @@ -1395,7 +1395,7 @@ As/s [mm²/m] - + 122 @@ -1408,12 +1408,12 @@ - + - 30 + 10 50 - 91 + 101 16 @@ -1422,7 +1422,7 @@ - + 127 @@ -1436,7 +1436,7 @@ - + 660 @@ -1449,7 +1449,7 @@ Calcular - + 750 @@ -1469,8 +1469,8 @@ 720 0 - 131 - 51 + 6 + 16 @@ -1486,8 +1486,8 @@ 0 0 - 868 - 21 + 871 + 22 diff --git a/app/vigas_alt_ui.py b/app/vigas_alt_ui.py new file mode 100644 index 0000000..864f089 --- /dev/null +++ b/app/vigas_alt_ui.py @@ -0,0 +1,494 @@ +# Form implementation generated from reading ui file 'd:\Python\Navier\app\vigas_alt.ui' +# +# Created by: PyQt6 UI code generator 6.9.1 +# +# WARNING: Any manual changes made to this file will be lost when pyuic6 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt6 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(871, 634) + self.centralwidget = QtWidgets.QWidget(parent=MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.tabWidget = QtWidgets.QTabWidget(parent=self.centralwidget) + self.tabWidget.setGeometry(QtCore.QRect(0, 30, 861, 571)) + self.tabWidget.setObjectName("tabWidget") + self.tab_viga_retangular = QtWidgets.QWidget() + self.tab_viga_retangular.setObjectName("tab_viga_retangular") + self.stacked_viga_modelo_armacao = QtWidgets.QStackedWidget(parent=self.tab_viga_retangular) + self.stacked_viga_modelo_armacao.setGeometry(QtCore.QRect(-1, 39, 551, 511)) + self.stacked_viga_modelo_armacao.setObjectName("stacked_viga_modelo_armacao") + self.page_viga_armacao_dupla = QtWidgets.QWidget() + self.page_viga_armacao_dupla.setObjectName("page_viga_armacao_dupla") + self.group_viga_armacao_dupla_dimensoes = QtWidgets.QGroupBox(parent=self.page_viga_armacao_dupla) + self.group_viga_armacao_dupla_dimensoes.setGeometry(QtCore.QRect(20, 180, 251, 291)) + self.group_viga_armacao_dupla_dimensoes.setObjectName("group_viga_armacao_dupla_dimensoes") + self.ledit_viga_armacao_dupla_lagura = QtWidgets.QLineEdit(parent=self.group_viga_armacao_dupla_dimensoes) + self.ledit_viga_armacao_dupla_lagura.setGeometry(QtCore.QRect(130, 30, 101, 20)) + self.ledit_viga_armacao_dupla_lagura.setObjectName("ledit_viga_armacao_dupla_lagura") + self.ledit_viga_armacao_dupla_altura = QtWidgets.QLineEdit(parent=self.group_viga_armacao_dupla_dimensoes) + self.ledit_viga_armacao_dupla_altura.setGeometry(QtCore.QRect(130, 60, 101, 20)) + self.ledit_viga_armacao_dupla_altura.setObjectName("ledit_viga_armacao_dupla_altura") + self.ledit_viga_armacao_dupla_altura_util = QtWidgets.QLineEdit(parent=self.group_viga_armacao_dupla_dimensoes) + self.ledit_viga_armacao_dupla_altura_util.setGeometry(QtCore.QRect(131, 90, 100, 20)) + self.ledit_viga_armacao_dupla_altura_util.setObjectName("ledit_viga_armacao_dupla_altura_util") + self.label_viga_armacao_dupla_largura = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_dimensoes) + self.label_viga_armacao_dupla_largura.setGeometry(QtCore.QRect(20, 30, 101, 16)) + self.label_viga_armacao_dupla_largura.setObjectName("label_viga_armacao_dupla_largura") + self.label_viga_armacao_dupla_altura = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_dimensoes) + self.label_viga_armacao_dupla_altura.setGeometry(QtCore.QRect(20, 60, 81, 16)) + self.label_viga_armacao_dupla_altura.setObjectName("label_viga_armacao_dupla_altura") + self.label_viga_armacao_dupla_altura_util = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_dimensoes) + self.label_viga_armacao_dupla_altura_util.setGeometry(QtCore.QRect(20, 90, 101, 16)) + self.label_viga_armacao_dupla_altura_util.setObjectName("label_viga_armacao_dupla_altura_util") + self.group_viga_armacao_dupla_dominio = QtWidgets.QGroupBox(parent=self.group_viga_armacao_dupla_dimensoes) + self.group_viga_armacao_dupla_dominio.setGeometry(QtCore.QRect(0, 150, 260, 141)) + self.group_viga_armacao_dupla_dominio.setObjectName("group_viga_armacao_dupla_dominio") + self.radio_viga_dominio_3 = QtWidgets.QRadioButton(parent=self.group_viga_armacao_dupla_dominio) + self.radio_viga_dominio_3.setGeometry(QtCore.QRect(140, 20, 82, 21)) + self.radio_viga_dominio_3.setObjectName("radio_viga_dominio_3") + self.radio_viga_dominio_2 = QtWidgets.QRadioButton(parent=self.group_viga_armacao_dupla_dominio) + self.radio_viga_dominio_2.setGeometry(QtCore.QRect(30, 20, 82, 21)) + self.radio_viga_dominio_2.setChecked(True) + self.radio_viga_dominio_2.setObjectName("radio_viga_dominio_2") + self.label_viga_linha_neutra = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_dominio) + self.label_viga_linha_neutra.setGeometry(QtCore.QRect(30, 50, 81, 21)) + self.label_viga_linha_neutra.setObjectName("label_viga_linha_neutra") + self.ledit_viga_linha_neutra = QtWidgets.QLineEdit(parent=self.group_viga_armacao_dupla_dominio) + self.ledit_viga_linha_neutra.setGeometry(QtCore.QRect(130, 50, 81, 20)) + self.ledit_viga_linha_neutra.setObjectName("ledit_viga_linha_neutra") + self.label_viga_d_limite = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_dominio) + self.label_viga_d_limite.setGeometry(QtCore.QRect(30, 80, 71, 21)) + self.label_viga_d_limite.setObjectName("label_viga_d_limite") + self.ledit_viga_d_limite = QtWidgets.QLineEdit(parent=self.group_viga_armacao_dupla_dominio) + self.ledit_viga_d_limite.setGeometry(QtCore.QRect(130, 80, 81, 20)) + self.ledit_viga_d_limite.setObjectName("ledit_viga_d_limite") + self.ledit_viga_x_limite = QtWidgets.QLineEdit(parent=self.group_viga_armacao_dupla_dominio) + self.ledit_viga_x_limite.setGeometry(QtCore.QRect(131, 110, 81, 20)) + self.ledit_viga_x_limite.setObjectName("ledit_viga_x_limite") + self.label_viga_armacao_dupla_x_limite = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_dominio) + self.label_viga_armacao_dupla_x_limite.setGeometry(QtCore.QRect(30, 110, 91, 21)) + self.label_viga_armacao_dupla_x_limite.setObjectName("label_viga_armacao_dupla_x_limite") + self.label_viga_armacao_dupla_d_linha = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_dimensoes) + self.label_viga_armacao_dupla_d_linha.setGeometry(QtCore.QRect(19, 120, 91, 16)) + self.label_viga_armacao_dupla_d_linha.setObjectName("label_viga_armacao_dupla_d_linha") + self.ledit_viga_armacao_dupla_d_linha = QtWidgets.QLineEdit(parent=self.group_viga_armacao_dupla_dimensoes) + self.ledit_viga_armacao_dupla_d_linha.setGeometry(QtCore.QRect(130, 120, 100, 20)) + self.ledit_viga_armacao_dupla_d_linha.setReadOnly(True) + self.ledit_viga_armacao_dupla_d_linha.setObjectName("ledit_viga_armacao_dupla_d_linha") + self.group_viga_armacao_dupla_secao = QtWidgets.QGroupBox(parent=self.page_viga_armacao_dupla) + self.group_viga_armacao_dupla_secao.setGeometry(QtCore.QRect(290, 0, 261, 141)) + self.group_viga_armacao_dupla_secao.setObjectName("group_viga_armacao_dupla_secao") + self.label_viga_armacao_dupla_secao = QtWidgets.QLabel(parent=self.group_viga_armacao_dupla_secao) + self.label_viga_armacao_dupla_secao.setGeometry(QtCore.QRect(71, 6, 110, 131)) + self.label_viga_armacao_dupla_secao.setText("") + self.label_viga_armacao_dupla_secao.setPixmap(QtGui.QPixmap("d:\\Python\\Navier\\app\\navier_viga_dupla.png")) + self.label_viga_armacao_dupla_secao.setScaledContents(True) + self.label_viga_armacao_dupla_secao.setObjectName("label_viga_armacao_dupla_secao") + self.group_viga_armadura_longitudinal = QtWidgets.QGroupBox(parent=self.page_viga_armacao_dupla) + self.group_viga_armadura_longitudinal.setGeometry(QtCore.QRect(290, 150, 261, 321)) + self.group_viga_armadura_longitudinal.setObjectName("group_viga_armadura_longitudinal") + self.label_viga_momento_2 = QtWidgets.QLabel(parent=self.group_viga_armadura_longitudinal) + self.label_viga_momento_2.setGeometry(QtCore.QRect(10, 50, 101, 21)) + self.label_viga_momento_2.setObjectName("label_viga_momento_2") + self.ledit_viga_momento_2 = QtWidgets.QLineEdit(parent=self.group_viga_armadura_longitudinal) + self.ledit_viga_momento_2.setGeometry(QtCore.QRect(150, 50, 100, 20)) + self.ledit_viga_momento_2.setObjectName("ledit_viga_momento_2") + self.group_viga_areas_aco = QtWidgets.QGroupBox(parent=self.group_viga_armadura_longitudinal) + self.group_viga_areas_aco.setGeometry(QtCore.QRect(0, 90, 260, 231)) + self.group_viga_areas_aco.setObjectName("group_viga_areas_aco") + self.ledit_viga_as_compressao = QtWidgets.QLineEdit(parent=self.group_viga_areas_aco) + self.ledit_viga_as_compressao.setGeometry(QtCore.QRect(150, 20, 91, 20)) + self.ledit_viga_as_compressao.setObjectName("ledit_viga_as_compressao") + self.label_viga_as_compressao = QtWidgets.QLabel(parent=self.group_viga_areas_aco) + self.label_viga_as_compressao.setGeometry(QtCore.QRect(20, 18, 121, 21)) + self.label_viga_as_compressao.setObjectName("label_viga_as_compressao") + self.label_viga_area_sobre_apoio = QtWidgets.QLabel(parent=self.group_viga_areas_aco) + self.label_viga_area_sobre_apoio.setGeometry(QtCore.QRect(20, 78, 111, 21)) + self.label_viga_area_sobre_apoio.setObjectName("label_viga_area_sobre_apoio") + self.ledit_viga_area_sobre_apoio = QtWidgets.QLineEdit(parent=self.group_viga_areas_aco) + self.ledit_viga_area_sobre_apoio.setGeometry(QtCore.QRect(150, 80, 91, 20)) + self.ledit_viga_area_sobre_apoio.setObjectName("ledit_viga_area_sobre_apoio") + self.ledit_viga_as_pele = QtWidgets.QLineEdit(parent=self.group_viga_areas_aco) + self.ledit_viga_as_pele.setGeometry(QtCore.QRect(149, 108, 91, 20)) + self.ledit_viga_as_pele.setObjectName("ledit_viga_as_pele") + self.label_viga_as_pele = QtWidgets.QLabel(parent=self.group_viga_areas_aco) + self.label_viga_as_pele.setGeometry(QtCore.QRect(20, 108, 91, 21)) + self.label_viga_as_pele.setObjectName("label_viga_as_pele") + self.label_viga_as_max = QtWidgets.QLabel(parent=self.group_viga_areas_aco) + self.label_viga_as_max.setGeometry(QtCore.QRect(21, 170, 91, 21)) + self.label_viga_as_max.setObjectName("label_viga_as_max") + self.ledit_viga_as_max = QtWidgets.QLineEdit(parent=self.group_viga_areas_aco) + self.ledit_viga_as_max.setGeometry(QtCore.QRect(150, 170, 91, 20)) + self.ledit_viga_as_max.setObjectName("ledit_viga_as_max") + self.ledit_viga_as_tracao = QtWidgets.QLineEdit(parent=self.group_viga_areas_aco) + self.ledit_viga_as_tracao.setGeometry(QtCore.QRect(150, 50, 91, 20)) + self.ledit_viga_as_tracao.setObjectName("ledit_viga_as_tracao") + self.label_viga_as_tracao = QtWidgets.QLabel(parent=self.group_viga_areas_aco) + self.label_viga_as_tracao.setGeometry(QtCore.QRect(20, 48, 111, 21)) + self.label_viga_as_tracao.setObjectName("label_viga_as_tracao") + self.label_viga_as_min = QtWidgets.QLabel(parent=self.group_viga_areas_aco) + self.label_viga_as_min.setGeometry(QtCore.QRect(21, 200, 91, 21)) + self.label_viga_as_min.setObjectName("label_viga_as_min") + self.ledit_viga_as_min = QtWidgets.QLineEdit(parent=self.group_viga_areas_aco) + self.ledit_viga_as_min.setGeometry(QtCore.QRect(150, 200, 91, 20)) + self.ledit_viga_as_min.setObjectName("ledit_viga_as_min") + self.label_viga_as_total = QtWidgets.QLabel(parent=self.group_viga_areas_aco) + self.label_viga_as_total.setGeometry(QtCore.QRect(21, 140, 91, 21)) + self.label_viga_as_total.setObjectName("label_viga_as_total") + self.ledit_viga_as_total = QtWidgets.QLineEdit(parent=self.group_viga_areas_aco) + self.ledit_viga_as_total.setGeometry(QtCore.QRect(150, 140, 91, 20)) + self.ledit_viga_as_total.setObjectName("ledit_viga_as_total") + self.ledit_viga_momento_limite = QtWidgets.QLineEdit(parent=self.group_viga_armadura_longitudinal) + self.ledit_viga_momento_limite.setGeometry(QtCore.QRect(150, 20, 100, 20)) + self.ledit_viga_momento_limite.setObjectName("ledit_viga_momento_limite") + self.label_viga_momento_limite = QtWidgets.QLabel(parent=self.group_viga_armadura_longitudinal) + self.label_viga_momento_limite.setGeometry(QtCore.QRect(10, 20, 131, 21)) + self.label_viga_momento_limite.setObjectName("label_viga_momento_limite") + self.stacked_viga_modelo_armacao.addWidget(self.page_viga_armacao_dupla) + self.page_viga_armacao_simples = QtWidgets.QWidget() + self.page_viga_armacao_simples.setObjectName("page_viga_armacao_simples") + self.group_viga_armacao_simples_dimensoes = QtWidgets.QGroupBox(parent=self.page_viga_armacao_simples) + self.group_viga_armacao_simples_dimensoes.setGeometry(QtCore.QRect(20, 180, 251, 151)) + self.group_viga_armacao_simples_dimensoes.setObjectName("group_viga_armacao_simples_dimensoes") + self.ledit_viga_armacao_simples_largura = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_dimensoes) + self.ledit_viga_armacao_simples_largura.setGeometry(QtCore.QRect(130, 30, 101, 20)) + self.ledit_viga_armacao_simples_largura.setObjectName("ledit_viga_armacao_simples_largura") + self.ledit_viga_armacao_simples_altura = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_dimensoes) + self.ledit_viga_armacao_simples_altura.setGeometry(QtCore.QRect(130, 60, 101, 20)) + self.ledit_viga_armacao_simples_altura.setObjectName("ledit_viga_armacao_simples_altura") + self.ledit_viga_armacao_simples_altura_util = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_dimensoes) + self.ledit_viga_armacao_simples_altura_util.setGeometry(QtCore.QRect(131, 90, 100, 20)) + self.ledit_viga_armacao_simples_altura_util.setObjectName("ledit_viga_armacao_simples_altura_util") + self.label_viga_armacao_simples_largura = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_dimensoes) + self.label_viga_armacao_simples_largura.setGeometry(QtCore.QRect(20, 30, 81, 16)) + self.label_viga_armacao_simples_largura.setObjectName("label_viga_armacao_simples_largura") + self.label_viga_armacao_simples_altura = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_dimensoes) + self.label_viga_armacao_simples_altura.setGeometry(QtCore.QRect(20, 60, 81, 16)) + self.label_viga_armacao_simples_altura.setObjectName("label_viga_armacao_simples_altura") + self.label_viga_armacao_simples_altura_util = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_dimensoes) + self.label_viga_armacao_simples_altura_util.setGeometry(QtCore.QRect(20, 90, 91, 16)) + self.label_viga_armacao_simples_altura_util.setObjectName("label_viga_armacao_simples_altura_util") + self.label_viga_armacao_simples_d_linha = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_dimensoes) + self.label_viga_armacao_simples_d_linha.setGeometry(QtCore.QRect(19, 120, 91, 16)) + self.label_viga_armacao_simples_d_linha.setObjectName("label_viga_armacao_simples_d_linha") + self.ledit_viga_armacao_simples_d_linha = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_dimensoes) + self.ledit_viga_armacao_simples_d_linha.setGeometry(QtCore.QRect(130, 120, 100, 20)) + self.ledit_viga_armacao_simples_d_linha.setReadOnly(True) + self.ledit_viga_armacao_simples_d_linha.setObjectName("ledit_viga_armacao_simples_d_linha") + self.group_viga_armacao_simples_secao = QtWidgets.QGroupBox(parent=self.page_viga_armacao_simples) + self.group_viga_armacao_simples_secao.setGeometry(QtCore.QRect(20, 340, 251, 141)) + self.group_viga_armacao_simples_secao.setObjectName("group_viga_armacao_simples_secao") + self.label_viga_armacao_simples_secao = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_secao) + self.label_viga_armacao_simples_secao.setGeometry(QtCore.QRect(70, 6, 111, 131)) + self.label_viga_armacao_simples_secao.setText("") + self.label_viga_armacao_simples_secao.setPixmap(QtGui.QPixmap("d:\\Python\\Navier\\app\\secao_viga.png")) + self.label_viga_armacao_simples_secao.setScaledContents(True) + self.label_viga_armacao_simples_secao.setObjectName("label_viga_armacao_simples_secao") + self.group_viga_armacao_simples_armadura_longitudinal = QtWidgets.QGroupBox(parent=self.page_viga_armacao_simples) + self.group_viga_armacao_simples_armadura_longitudinal.setGeometry(QtCore.QRect(290, 2, 251, 351)) + self.group_viga_armacao_simples_armadura_longitudinal.setObjectName("group_viga_armacao_simples_armadura_longitudinal") + self.label_viga_armacao_simples_md = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.label_viga_armacao_simples_md.setGeometry(QtCore.QRect(10, 20, 91, 21)) + self.label_viga_armacao_simples_md.setObjectName("label_viga_armacao_simples_md") + self.ledit_viga_armacao_simples_md = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.ledit_viga_armacao_simples_md.setGeometry(QtCore.QRect(130, 20, 111, 20)) + self.ledit_viga_armacao_simples_md.setObjectName("ledit_viga_armacao_simples_md") + self.label_viga_armacao_simples_kmd = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.label_viga_armacao_simples_kmd.setGeometry(QtCore.QRect(10, 80, 91, 21)) + self.label_viga_armacao_simples_kmd.setObjectName("label_viga_armacao_simples_kmd") + self.ledit_viga_armacao_simples_kmd = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.ledit_viga_armacao_simples_kmd.setGeometry(QtCore.QRect(130, 80, 111, 20)) + self.ledit_viga_armacao_simples_kmd.setObjectName("ledit_viga_armacao_simples_kmd") + self.label_viga_armacao_simples_kx = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.label_viga_armacao_simples_kx.setGeometry(QtCore.QRect(10, 110, 91, 21)) + self.label_viga_armacao_simples_kx.setObjectName("label_viga_armacao_simples_kx") + self.ledit_viga_armacao_simples_kx = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.ledit_viga_armacao_simples_kx.setGeometry(QtCore.QRect(130, 110, 111, 20)) + self.ledit_viga_armacao_simples_kx.setObjectName("ledit_viga_armacao_simples_kx") + self.label_viga_armacao_simples_kz = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.label_viga_armacao_simples_kz.setGeometry(QtCore.QRect(10, 140, 91, 21)) + self.label_viga_armacao_simples_kz.setObjectName("label_viga_armacao_simples_kz") + self.ledit_viga_armacao_simples_kz = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.ledit_viga_armacao_simples_kz.setGeometry(QtCore.QRect(130, 140, 111, 20)) + self.ledit_viga_armacao_simples_kz.setObjectName("ledit_viga_armacao_simples_kz") + self.group_viga_armacao_simples_areas_aco = QtWidgets.QGroupBox(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.group_viga_armacao_simples_areas_aco.setGeometry(QtCore.QRect(0, 170, 260, 181)) + self.group_viga_armacao_simples_areas_aco.setObjectName("group_viga_armacao_simples_areas_aco") + self.ledit_viga_armacao_simples_as = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_areas_aco) + self.ledit_viga_armacao_simples_as.setGeometry(QtCore.QRect(150, 30, 91, 20)) + self.ledit_viga_armacao_simples_as.setObjectName("ledit_viga_armacao_simples_as") + self.label_viga_armacao_simples_as = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_areas_aco) + self.label_viga_armacao_simples_as.setGeometry(QtCore.QRect(20, 30, 91, 21)) + self.label_viga_armacao_simples_as.setObjectName("label_viga_armacao_simples_as") + self.label_viga_armacao_simples_area_sobre_apoio = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_areas_aco) + self.label_viga_armacao_simples_area_sobre_apoio.setGeometry(QtCore.QRect(20, 60, 121, 21)) + self.label_viga_armacao_simples_area_sobre_apoio.setObjectName("label_viga_armacao_simples_area_sobre_apoio") + self.ledit_viga_armacao_simples_area_sobre_apoio = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_areas_aco) + self.ledit_viga_armacao_simples_area_sobre_apoio.setGeometry(QtCore.QRect(150, 60, 91, 20)) + self.ledit_viga_armacao_simples_area_sobre_apoio.setObjectName("ledit_viga_armacao_simples_area_sobre_apoio") + self.ledit_viga_armacao_simples_as_pele = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_areas_aco) + self.ledit_viga_armacao_simples_as_pele.setGeometry(QtCore.QRect(150, 90, 91, 20)) + self.ledit_viga_armacao_simples_as_pele.setObjectName("ledit_viga_armacao_simples_as_pele") + self.label_viga_armacao_simples_as_pele = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_areas_aco) + self.label_viga_armacao_simples_as_pele.setGeometry(QtCore.QRect(20, 90, 91, 21)) + self.label_viga_armacao_simples_as_pele.setObjectName("label_viga_armacao_simples_as_pele") + self.label_viga_armacao_simples_as_max = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_areas_aco) + self.label_viga_armacao_simples_as_max.setGeometry(QtCore.QRect(21, 120, 91, 21)) + self.label_viga_armacao_simples_as_max.setObjectName("label_viga_armacao_simples_as_max") + self.ledit_viga_armacao_simples_as_max = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_areas_aco) + self.ledit_viga_armacao_simples_as_max.setGeometry(QtCore.QRect(150, 120, 91, 20)) + self.ledit_viga_armacao_simples_as_max.setObjectName("ledit_viga_armacao_simples_as_max") + self.ledit_viga_armacao_simples_as_min = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_areas_aco) + self.ledit_viga_armacao_simples_as_min.setGeometry(QtCore.QRect(150, 150, 91, 20)) + self.ledit_viga_armacao_simples_as_min.setObjectName("ledit_viga_armacao_simples_as_min") + self.label_viga_armacao_simples_as_min = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_areas_aco) + self.label_viga_armacao_simples_as_min.setGeometry(QtCore.QRect(20, 150, 91, 21)) + self.label_viga_armacao_simples_as_min.setObjectName("label_viga_armacao_simples_as_min") + self.ledit_viga_armacao_simples_dominio_ruptura = QtWidgets.QLineEdit(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.ledit_viga_armacao_simples_dominio_ruptura.setGeometry(QtCore.QRect(130, 50, 111, 20)) + self.ledit_viga_armacao_simples_dominio_ruptura.setObjectName("ledit_viga_armacao_simples_dominio_ruptura") + self.label_viga_armacao_simples_dominio_ruptura = QtWidgets.QLabel(parent=self.group_viga_armacao_simples_armadura_longitudinal) + self.label_viga_armacao_simples_dominio_ruptura.setGeometry(QtCore.QRect(10, 50, 111, 21)) + self.label_viga_armacao_simples_dominio_ruptura.setObjectName("label_viga_armacao_simples_dominio_ruptura") + self.stacked_viga_modelo_armacao.addWidget(self.page_viga_armacao_simples) + self.btn_viga_armacao_simples = QtWidgets.QPushButton(parent=self.tab_viga_retangular) + self.btn_viga_armacao_simples.setGeometry(QtCore.QRect(540, 10, 131, 23)) + self.btn_viga_armacao_simples.setObjectName("btn_viga_armacao_simples") + self.btn_viga_armacao_dupla = QtWidgets.QPushButton(parent=self.tab_viga_retangular) + self.btn_viga_armacao_dupla.setGeometry(QtCore.QRect(690, 10, 141, 23)) + self.btn_viga_armacao_dupla.setObjectName("btn_viga_armacao_dupla") + self.group_viga_solicitacoes = QtWidgets.QGroupBox(parent=self.tab_viga_retangular) + self.group_viga_solicitacoes.setGeometry(QtCore.QRect(20, 130, 251, 81)) + self.group_viga_solicitacoes.setObjectName("group_viga_solicitacoes") + self.ledit_viga_momento_fletor = QtWidgets.QLineEdit(parent=self.group_viga_solicitacoes) + self.ledit_viga_momento_fletor.setGeometry(QtCore.QRect(150, 20, 81, 20)) + self.ledit_viga_momento_fletor.setObjectName("ledit_viga_momento_fletor") + self.ledit_viga_cortante = QtWidgets.QLineEdit(parent=self.group_viga_solicitacoes) + self.ledit_viga_cortante.setGeometry(QtCore.QRect(150, 50, 81, 20)) + self.ledit_viga_cortante.setObjectName("ledit_viga_cortante") + self.label_viga_momento_fletor = QtWidgets.QLabel(parent=self.group_viga_solicitacoes) + self.label_viga_momento_fletor.setGeometry(QtCore.QRect(20, 20, 141, 20)) + self.label_viga_momento_fletor.setObjectName("label_viga_momento_fletor") + self.label_viga_cortante = QtWidgets.QLabel(parent=self.group_viga_solicitacoes) + self.label_viga_cortante.setGeometry(QtCore.QRect(20, 49, 111, 21)) + self.label_viga_cortante.setObjectName("label_viga_cortante") + self.group_viga_materiais = QtWidgets.QGroupBox(parent=self.tab_viga_retangular) + self.group_viga_materiais.setGeometry(QtCore.QRect(20, 40, 251, 81)) + self.group_viga_materiais.setObjectName("group_viga_materiais") + self.label_viga_concreto_fck = QtWidgets.QLabel(parent=self.group_viga_materiais) + self.label_viga_concreto_fck.setGeometry(QtCore.QRect(20, 20, 121, 20)) + self.label_viga_concreto_fck.setObjectName("label_viga_concreto_fck") + self.combo_viga_concreto_fck = QtWidgets.QComboBox(parent=self.group_viga_materiais) + self.combo_viga_concreto_fck.setGeometry(QtCore.QRect(150, 20, 81, 22)) + self.combo_viga_concreto_fck.setObjectName("combo_viga_concreto_fck") + self.combo_viga_concreto_fck.addItem("") + self.combo_viga_concreto_fck.addItem("") + self.combo_viga_concreto_fck.addItem("") + self.combo_viga_concreto_fck.addItem("") + self.combo_viga_concreto_fck.addItem("") + self.combo_viga_concreto_fck.addItem("") + self.combo_viga_concreto_fck.addItem("") + self.combo_viga_aco_classe = QtWidgets.QComboBox(parent=self.group_viga_materiais) + self.combo_viga_aco_classe.setGeometry(QtCore.QRect(150, 50, 81, 22)) + self.combo_viga_aco_classe.setObjectName("combo_viga_aco_classe") + self.combo_viga_aco_classe.addItem("") + self.combo_viga_aco_classe.addItem("") + self.combo_viga_aco_classe.addItem("") + self.label_viga_aco_classe = QtWidgets.QLabel(parent=self.group_viga_materiais) + self.label_viga_aco_classe.setGeometry(QtCore.QRect(20, 50, 121, 20)) + self.label_viga_aco_classe.setObjectName("label_viga_aco_classe") + self.group_viga_armacao_transversal = QtWidgets.QGroupBox(parent=self.tab_viga_retangular) + self.group_viga_armacao_transversal.setGeometry(QtCore.QRect(570, 40, 261, 471)) + self.group_viga_armacao_transversal.setObjectName("group_viga_armacao_transversal") + self.group_viga_armacao_modelo_calculo = QtWidgets.QGroupBox(parent=self.group_viga_armacao_transversal) + self.group_viga_armacao_modelo_calculo.setGeometry(QtCore.QRect(0, 140, 271, 91)) + self.group_viga_armacao_modelo_calculo.setObjectName("group_viga_armacao_modelo_calculo") + self.radio_viga_modelo_calculo_1 = QtWidgets.QRadioButton(parent=self.group_viga_armacao_modelo_calculo) + self.radio_viga_modelo_calculo_1.setGeometry(QtCore.QRect(20, 20, 211, 21)) + self.radio_viga_modelo_calculo_1.setChecked(True) + self.radio_viga_modelo_calculo_1.setObjectName("radio_viga_modelo_calculo_1") + self.radio_viga_modelo_calculo_2 = QtWidgets.QRadioButton(parent=self.group_viga_armacao_modelo_calculo) + self.radio_viga_modelo_calculo_2.setGeometry(QtCore.QRect(20, 40, 221, 21)) + self.radio_viga_modelo_calculo_2.setObjectName("radio_viga_modelo_calculo_2") + self.spin_viga_angulo_theta = QtWidgets.QSpinBox(parent=self.group_viga_armacao_modelo_calculo) + self.spin_viga_angulo_theta.setGeometry(QtCore.QRect(170, 60, 42, 22)) + self.spin_viga_angulo_theta.setMinimum(30) + self.spin_viga_angulo_theta.setMaximum(45) + self.spin_viga_angulo_theta.setObjectName("spin_viga_angulo_theta") + self.label_viga_angulo_theta = QtWidgets.QLabel(parent=self.group_viga_armacao_modelo_calculo) + self.label_viga_angulo_theta.setGeometry(QtCore.QRect(140, 60, 47, 21)) + self.label_viga_angulo_theta.setObjectName("label_viga_angulo_theta") + self.label_32 = QtWidgets.QLabel(parent=self.group_viga_armacao_transversal) + self.label_32.setGeometry(QtCore.QRect(30, 20, 221, 131)) + self.label_32.setText("") + self.label_32.setPixmap(QtGui.QPixmap("d:\\Python\\Navier\\app\\esquema_bielas.png")) + self.label_32.setScaledContents(True) + self.label_32.setObjectName("label_32") + self.label_viga_vsd = QtWidgets.QLabel(parent=self.group_viga_armacao_transversal) + self.label_viga_vsd.setGeometry(QtCore.QRect(30, 240, 47, 16)) + self.label_viga_vsd.setObjectName("label_viga_vsd") + self.ledit_viga_vsd = QtWidgets.QLineEdit(parent=self.group_viga_armacao_transversal) + self.ledit_viga_vsd.setGeometry(QtCore.QRect(110, 240, 113, 20)) + self.ledit_viga_vsd.setObjectName("ledit_viga_vsd") + self.label_viga_vrd2 = QtWidgets.QLabel(parent=self.group_viga_armacao_transversal) + self.label_viga_vrd2.setGeometry(QtCore.QRect(30, 270, 47, 16)) + self.label_viga_vrd2.setObjectName("label_viga_vrd2") + self.ledit_viga_vrd2 = QtWidgets.QLineEdit(parent=self.group_viga_armacao_transversal) + self.ledit_viga_vrd2.setGeometry(QtCore.QRect(110, 270, 113, 20)) + self.ledit_viga_vrd2.setText("") + self.ledit_viga_vrd2.setObjectName("ledit_viga_vrd2") + self.ledit_viga_vc = QtWidgets.QLineEdit(parent=self.group_viga_armacao_transversal) + self.ledit_viga_vc.setGeometry(QtCore.QRect(110, 300, 113, 20)) + self.ledit_viga_vc.setText("") + self.ledit_viga_vc.setObjectName("ledit_viga_vc") + self.label_viga_vc = QtWidgets.QLabel(parent=self.group_viga_armacao_transversal) + self.label_viga_vc.setGeometry(QtCore.QRect(30, 300, 47, 16)) + self.label_viga_vc.setObjectName("label_viga_vc") + self.label_viga_vsw = QtWidgets.QLabel(parent=self.group_viga_armacao_transversal) + self.label_viga_vsw.setGeometry(QtCore.QRect(30, 330, 47, 16)) + self.label_viga_vsw.setObjectName("label_viga_vsw") + self.ledit_viga_vsw = QtWidgets.QLineEdit(parent=self.group_viga_armacao_transversal) + self.ledit_viga_vsw.setGeometry(QtCore.QRect(110, 330, 113, 20)) + self.ledit_viga_vsw.setText("") + self.ledit_viga_vsw.setObjectName("ledit_viga_vsw") + self.group_viga_area_aco = QtWidgets.QGroupBox(parent=self.group_viga_armacao_transversal) + self.group_viga_area_aco.setGeometry(QtCore.QRect(0, 360, 270, 81)) + self.group_viga_area_aco.setObjectName("group_viga_area_aco") + self.ledit_viga_as_s = QtWidgets.QLineEdit(parent=self.group_viga_area_aco) + self.ledit_viga_as_s.setGeometry(QtCore.QRect(122, 20, 101, 20)) + self.ledit_viga_as_s.setText("") + self.ledit_viga_as_s.setObjectName("ledit_viga_as_s") + self.label_viga_as_s = QtWidgets.QLabel(parent=self.group_viga_area_aco) + self.label_viga_as_s.setGeometry(QtCore.QRect(10, 20, 81, 16)) + self.label_viga_as_s.setObjectName("label_viga_as_s") + self.ledit_viga_as_min_s = QtWidgets.QLineEdit(parent=self.group_viga_area_aco) + self.ledit_viga_as_min_s.setGeometry(QtCore.QRect(122, 50, 101, 20)) + self.ledit_viga_as_min_s.setText("") + self.ledit_viga_as_min_s.setObjectName("ledit_viga_as_min_s") + self.label_viga_as_min_s = QtWidgets.QLabel(parent=self.group_viga_area_aco) + self.label_viga_as_min_s.setGeometry(QtCore.QRect(10, 50, 101, 16)) + self.label_viga_as_min_s.setObjectName("label_viga_as_min_s") + self.btn_viga_gerar_detalhamento = QtWidgets.QPushButton(parent=self.group_viga_armacao_transversal) + self.btn_viga_gerar_detalhamento.setGeometry(QtCore.QRect(127, 447, 121, 20)) + self.btn_viga_gerar_detalhamento.setObjectName("btn_viga_gerar_detalhamento") + self.btn_viga_calcular = QtWidgets.QPushButton(parent=self.tab_viga_retangular) + self.btn_viga_calcular.setGeometry(QtCore.QRect(660, 520, 75, 23)) + self.btn_viga_calcular.setObjectName("btn_viga_calcular") + self.btn_viga_limpar = QtWidgets.QPushButton(parent=self.tab_viga_retangular) + self.btn_viga_limpar.setGeometry(QtCore.QRect(750, 520, 75, 23)) + self.btn_viga_limpar.setObjectName("btn_viga_limpar") + self.tabWidget.addTab(self.tab_viga_retangular, "") + self.label_45 = QtWidgets.QLabel(parent=self.centralwidget) + self.label_45.setGeometry(QtCore.QRect(720, 0, 6, 16)) + self.label_45.setText("") + self.label_45.setPixmap(QtGui.QPixmap("d:\\Python\\Navier\\app\\navier_logo_mini_alt.png")) + self.label_45.setObjectName("label_45") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(parent=MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 871, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + self.tabWidget.setCurrentIndex(0) + self.stacked_viga_modelo_armacao.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.group_viga_armacao_dupla_dimensoes.setTitle(_translate("MainWindow", "Dimensões")) + self.ledit_viga_armacao_dupla_lagura.setText(_translate("MainWindow", "0")) + self.ledit_viga_armacao_dupla_altura.setText(_translate("MainWindow", "0")) + self.ledit_viga_armacao_dupla_altura_util.setText(_translate("MainWindow", "0")) + self.label_viga_armacao_dupla_largura.setText(_translate("MainWindow", "Largura - bw [cm]")) + self.label_viga_armacao_dupla_altura.setText(_translate("MainWindow", "Altura - h [cm]")) + self.label_viga_armacao_dupla_altura_util.setText(_translate("MainWindow", "Altura Útil - d [cm]")) + self.group_viga_armacao_dupla_dominio.setTitle(_translate("MainWindow", "Projeção de Domínio")) + self.radio_viga_dominio_3.setText(_translate("MainWindow", "Domínio 3")) + self.radio_viga_dominio_2.setText(_translate("MainWindow", "Domínio 2")) + self.label_viga_linha_neutra.setText(_translate("MainWindow", "Linha Neutra ξ ")) + self.ledit_viga_linha_neutra.setText(_translate("MainWindow", "0.450")) + self.label_viga_d_limite.setText(_translate("MainWindow", "d limite [m]")) + self.label_viga_armacao_dupla_x_limite.setText(_translate("MainWindow", "X-limite [m]")) + self.label_viga_armacao_dupla_d_linha.setText(_translate("MainWindow", " d\' [cm]")) + self.ledit_viga_armacao_dupla_d_linha.setText(_translate("MainWindow", "0")) + self.group_viga_armacao_dupla_secao.setTitle(_translate("MainWindow", "Seção")) + self.group_viga_armadura_longitudinal.setTitle(_translate("MainWindow", "Armadura Longitudinal")) + self.label_viga_momento_2.setText(_translate("MainWindow", "Momento2 [KN.m]")) + self.group_viga_areas_aco.setTitle(_translate("MainWindow", "Áreas de Aço")) + self.label_viga_as_compressao.setText(_translate("MainWindow", "As Compressão [mm²]")) + self.label_viga_area_sobre_apoio.setText(_translate("MainWindow", "Asobre-apoio [mm²]")) + self.label_viga_as_pele.setText(_translate("MainWindow", "As.pele [mm²]")) + self.label_viga_as_max.setText(_translate("MainWindow", "As.máx [mm²]")) + self.label_viga_as_tracao.setText(_translate("MainWindow", "As Tração [mm²]")) + self.label_viga_as_min.setText(_translate("MainWindow", "As.mín [mm²]")) + self.label_viga_as_total.setText(_translate("MainWindow", "As.total [mm²]")) + self.label_viga_momento_limite.setText(_translate("MainWindow", "Momento-limite [KN.m]")) + self.group_viga_armacao_simples_dimensoes.setTitle(_translate("MainWindow", "Dimensões")) + self.ledit_viga_armacao_simples_largura.setText(_translate("MainWindow", "0")) + self.ledit_viga_armacao_simples_altura.setText(_translate("MainWindow", "0")) + self.ledit_viga_armacao_simples_altura_util.setText(_translate("MainWindow", "0")) + self.label_viga_armacao_simples_largura.setText(_translate("MainWindow", "Base - bw [cm]")) + self.label_viga_armacao_simples_altura.setText(_translate("MainWindow", "Altura - h [cm]")) + self.label_viga_armacao_simples_altura_util.setText(_translate("MainWindow", "Altura Útil - d [cm]")) + self.label_viga_armacao_simples_d_linha.setText(_translate("MainWindow", " d\' [cm] ")) + self.ledit_viga_armacao_simples_d_linha.setText(_translate("MainWindow", "0")) + self.group_viga_armacao_simples_secao.setTitle(_translate("MainWindow", "Seção")) + self.group_viga_armacao_simples_armadura_longitudinal.setTitle(_translate("MainWindow", "Armadura Longitudinal")) + self.label_viga_armacao_simples_md.setText(_translate("MainWindow", "Md [KN.m]")) + self.label_viga_armacao_simples_kmd.setText(_translate("MainWindow", "Kmd")) + self.label_viga_armacao_simples_kx.setText(_translate("MainWindow", "Kx")) + self.label_viga_armacao_simples_kz.setText(_translate("MainWindow", "Kz")) + self.group_viga_armacao_simples_areas_aco.setTitle(_translate("MainWindow", "Áreas de Aço")) + self.label_viga_armacao_simples_as.setText(_translate("MainWindow", "As [mm²]")) + self.label_viga_armacao_simples_area_sobre_apoio.setText(_translate("MainWindow", "Asobre-apoio [mm²]")) + self.label_viga_armacao_simples_as_pele.setText(_translate("MainWindow", "As.pele [mm²]")) + self.label_viga_armacao_simples_as_max.setText(_translate("MainWindow", "As.máx [mm²]")) + self.label_viga_armacao_simples_as_min.setText(_translate("MainWindow", "As.mín [mm²]")) + self.label_viga_armacao_simples_dominio_ruptura.setText(_translate("MainWindow", "Domínio de Ruptura:")) + self.btn_viga_armacao_simples.setText(_translate("MainWindow", "Simplesmente Armada")) + self.btn_viga_armacao_dupla.setText(_translate("MainWindow", "Duplamente Armada")) + self.group_viga_solicitacoes.setTitle(_translate("MainWindow", "Solicitações")) + self.ledit_viga_momento_fletor.setText(_translate("MainWindow", "0")) + self.ledit_viga_cortante.setText(_translate("MainWindow", "0")) + self.label_viga_momento_fletor.setText(_translate("MainWindow", "Momento Fletor [KN.m]")) + self.label_viga_cortante.setText(_translate("MainWindow", "Cortante [KN]")) + self.group_viga_materiais.setTitle(_translate("MainWindow", "Concreto")) + self.label_viga_concreto_fck.setText(_translate("MainWindow", "Resistência - fck [MPa]")) + self.combo_viga_concreto_fck.setItemText(0, _translate("MainWindow", "20")) + self.combo_viga_concreto_fck.setItemText(1, _translate("MainWindow", "25")) + self.combo_viga_concreto_fck.setItemText(2, _translate("MainWindow", "30")) + self.combo_viga_concreto_fck.setItemText(3, _translate("MainWindow", "35")) + self.combo_viga_concreto_fck.setItemText(4, _translate("MainWindow", "40")) + self.combo_viga_concreto_fck.setItemText(5, _translate("MainWindow", "45")) + self.combo_viga_concreto_fck.setItemText(6, _translate("MainWindow", "50")) + self.combo_viga_aco_classe.setItemText(0, _translate("MainWindow", "250")) + self.combo_viga_aco_classe.setItemText(1, _translate("MainWindow", "500")) + self.combo_viga_aco_classe.setItemText(2, _translate("MainWindow", "600")) + self.label_viga_aco_classe.setText(_translate("MainWindow", "Tipo de Aço - CA")) + self.group_viga_armacao_transversal.setTitle(_translate("MainWindow", "Armadura Transversal")) + self.group_viga_armacao_modelo_calculo.setTitle(_translate("MainWindow", "Modelo de Cálculo")) + self.radio_viga_modelo_calculo_1.setText(_translate("MainWindow", "Modelo I - α = 90º e θ = 45º")) + self.radio_viga_modelo_calculo_2.setText(_translate("MainWindow", "Modelo II - α = 90º e 30º < θ < 45º")) + self.label_viga_angulo_theta.setText(_translate("MainWindow", " θ :")) + self.label_viga_vsd.setText(_translate("MainWindow", "Vsd [KN]")) + self.label_viga_vrd2.setText(_translate("MainWindow", "Vrd2 [KN]")) + self.label_viga_vc.setText(_translate("MainWindow", "Vc [KN]")) + self.label_viga_vsw.setText(_translate("MainWindow", "Vsw[KN]")) + self.group_viga_area_aco.setTitle(_translate("MainWindow", "Área de Aço")) + self.label_viga_as_s.setText(_translate("MainWindow", "As/s [mm²/m]")) + self.label_viga_as_min_s.setText(_translate("MainWindow", "As.min/s [mm²/m]")) + self.btn_viga_gerar_detalhamento.setText(_translate("MainWindow", "Gerar Detalhamento")) + self.btn_viga_calcular.setText(_translate("MainWindow", "Calcular")) + self.btn_viga_limpar.setText(_translate("MainWindow", "Limpar")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_viga_retangular), _translate("MainWindow", "Seção Retangular")) diff --git a/cargas adicionais.py b/cargas adicionais.py deleted file mode 100644 index 2fb9575..0000000 --- a/cargas adicionais.py +++ /dev/null @@ -1,41 +0,0 @@ - - - -import sys - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem - - -class Carga_Adicional(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - - self.ui = loadUi('lajes_carg_adicional_atualizada.ui',self) - #self.tableWidget.setRowCount(linhas) - #self.tableWidget.setColumnCount(colunas) - #table = self.tableWidget() - #header = self.tableWidget.horizontalHeader() - #header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - #header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - - self.tableWidget.resizeRowsToContents() - - self.setWindowTitle('Navier - Cargas Adicionais') - self.show() - - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - aplicacao = Carga_Adicional() - app.exec_() diff --git a/cargas adicionais_atualizada.py b/cargas adicionais_atualizada.py deleted file mode 100644 index 6b1780e..0000000 --- a/cargas adicionais_atualizada.py +++ /dev/null @@ -1,47 +0,0 @@ - - - -import sys - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem -from PyQt5 import QtWidgets, QtGui, QtCore - - -class Carga_Adicional(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - - self.ui = loadUi('lajes_carg_adicional_atualizada.ui',self) - #self.tableWidget.setRowCount(linhas) - #self.tableWidget.setColumnCount(colunas) - #table = self.tableWidget() - #header = self.tableWidget.horizontalHeader() - #header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - #header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - - header = self.tableWidget.horizontalHeader() - #header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - #header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - #header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - - #item = QTableWidgetItem('Cargas') # create the item - #item.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter) # change the alignment - - - #self.tableWidget.resizeRowsToContents() - - self.setWindowTitle('Navier - Cargas Adicionais') - self.show() - - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - aplicacao = Carga_Adicional() - app.exec_() diff --git a/detalhamento_vigas.py b/detalhamento_vigas.py deleted file mode 100644 index b7a1a5e..0000000 --- a/detalhamento_vigas.py +++ /dev/null @@ -1,185 +0,0 @@ - - - -import sys - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem -import pyqtgraph as pg - -tabela_bitolas = [ - [6.3, 31.17], - [8, 50.26], - [10, 78.53], - [12.5, 122.71], - [16, 201.06], - [20, 314.15], - [25, 490.87], - [32, 804.24], - [40, 1256.63] - ] -info_viga = ['95','12','45','40','1.9'] - -class Detalhar_viga(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('detalhamento_vigas_alt.ui',self) - self.setWindowTitle('Navier - Vigas - Detalhamento') - self.show() - def load_signals(self): - print('inicializado') - self.pushButton.clicked.connect(self.calcular_area) - #self.pushButton.clicked.connect(self.calcular_estribos) - self.pushButton_2.clicked.connect(self.limpar_detalhamento) - self.pushButton_3.clicked.connect(self.recuperarValores) - - - #pg.plot(x=[0,1,2,3,4], y=[0,1,2,3,4]**2 ) - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(5, QtWidgets.QHeaderView.Stretch) - - self.widget.setTitle('nº barras/Bitola') - self.widget.showGrid(x=True,y=True,alpha=1) - - #if '0' not in info_viga: - # self.recuperarValores() - - def calcular_estribos(self): - vsw = self.lineEdit_14.text() - fyk_estribo = self.comboBox_2.currentText() - tramos = self.lineEdit_15.text() - - if (vsw != '0' and tramos != '0'): - vsw = float(self.lineEdit_14.text()) - bitola_estribo = float(self.comboBox.currentText()) - fyk_estribo = float(self.comboBox_2.currentText()) - tramos = float(self.lineEdit_15.text()) - d = float(self.lineEdit_13.text()) - - area_bitola = (3.14*((bitola_estribo/1000)**2)/4) - - print(vsw) - print(bitola_estribo) - print(tramos) - print(fyk_estribo) - print(area_bitola) - - - s_estribo = ((tramos * area_bitola * 0.9 * (d/100) * (fyk_estribo*100000/1.15))/vsw*1000)/100 - s_estribo = round(s_estribo, ndigits=3) - - self.lineEdit.setText(str(s_estribo)) - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes para o cálculo dos Estribos!") - - - def recuperarValores(self): - area_aco = info_viga[0] - base = info_viga[1] - altura = info_viga[2] - d = info_viga[3] - d_agreg = info_viga[4] - - self.lineEdit_11.setText(area_aco) - self.lineEdit_10.setText(base) - self.lineEdit_9.setText(altura) - self.lineEdit_12.setText(d_agreg) - self.lineEdit_13.setText(d) - - def calcular_area(self): - area_aco = self.lineEdit_11.text() - base = self.lineEdit_10.text() - altura = self.lineEdit_9.text() - d_agreg = self.lineEdit_12.text() - d = self.lineEdit_13.text() - - if (area_aco != '0' and base != '0' and altura != '0' and d_agreg != '0' and d != '0'): - - self.widget.clear() - area_aco = float(self.lineEdit_11.text()) - base = float(self.lineEdit_10.text()) - altura = float(self.lineEdit_9.text()) - cobrimento = float(self.comboBox_3.currentText()) - bitola_estribo = float(self.comboBox.currentText()) - x = [] - y = [] - z = [] - cont = 0 - for i in tabela_bitolas: - n_barras = float(area_aco/i[1]) - print('bitola: ',i[0],' - nº barras: ',n_barras) - - self.tableWidget.setItem(cont,2, QTableWidgetItem(str(round(n_barras, ndigits=2)))) - self.tableWidget.setItem(cont,3, QTableWidgetItem(str(round(n_barras +0.5)+1))) - - x.append(i[0]) - y.append(round(n_barras +0.5)+1) - - bitola = x[cont] - n_barras = (round(n_barras +0.5)+1) - - espass_horizontal = (round(base - 2*(cobrimento+bitola_estribo/10) - n_barras*(bitola/10), ndigits=2))/(n_barras-1) - - z.append(round(espass_horizontal,ndigits=2)) - self.tableWidget.setItem(cont,4, QTableWidgetItem(str(espass_horizontal))) - - print('base:',base) - print('cobrimento:',cobrimento) - print('bitola_estribo:',bitola_estribo) - print('n_barras:',n_barras) - - cont +=1 - - #print(x) - #print(y) - #print(z) - - self.widget.plot(x=x,y=y,pen=(3)) - - self.calcular_espacamentos() - self.calcular_estribos() - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - def calcular_espacamentos(self): - bitola = float(self.comboBox_4.currentText()) - d_agreg = float(self.lineEdit_12.text()) - - s_horizontal = max(2, (bitola/10), 1.2*d_agreg) - s_vertical = max(2, (bitola/10), 0.5*d_agreg) - - #------------------------------- saida de dados ---------------------------------- - self.lineEdit_7.setText(str(s_horizontal)) - self.lineEdit_8.setText(str(s_vertical)) - - def limpar_detalhamento(self): - self.widget.clear() - self.lineEdit_11.setText(str('0')) - self.lineEdit_9.setText(str('0')) - self.lineEdit_10.setText(str('0')) - self.lineEdit_7.setText(str('0')) - self.lineEdit_8.setText(str('0')) - - - - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - inicio = Detalhar_viga() - app.exec_() diff --git a/detalhamento_vigas.ui b/detalhamento_vigas.ui deleted file mode 100644 index 2c16a61..0000000 --- a/detalhamento_vigas.ui +++ /dev/null @@ -1,556 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 831 - 531 - - - - MainWindow - - - - - - 30 - 20 - 91 - 16 - - - - Área de Aço [mm²] - - - - - - 130 - 20 - 81 - 20 - - - - 0 - - - - - - 30 - 260 - 471 - 231 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Bitola - - - - - As unit [mm²] - - - - - nº aprox. - - - - - nº Barras - - - - - s [cm] - - - - - 6.3 - - - - - 31.17 - - - - - 8 - - - - - 50.26 - - - - - - - - - - 10 - - - - - 78.53 - - - - - 12.5 - - - - - 122.71 - - - - - 16 - - - - - 201.06 - - - - - 25 - - - - - 490.87 - - - - - 32 - - - - - 804.24 - - - - - 40 - - - - - 1256.63 - - - - - - - 420 - 190 - 75 - 23 - - - - Cálcular - - - - - - 510 - 320 - 281 - 161 - - - - - - - 520 - 50 - 261 - 181 - - - - - - - secao_viga_detalhamento_infos.png.png - - - true - - - - - - 420 - 220 - 75 - 23 - - - - Limpar - - - - - - 40 - 50 - 191 - 111 - - - - Seção - - - - - 10 - 20 - 91 - 16 - - - - Base - bw [cm] - - - - - - 100 - 50 - 81 - 20 - - - - 0 - - - - - - 10 - 80 - 91 - 16 - - - - Cobrimento [cm] - - - - - - 100 - 80 - 81 - 22 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - - - 10 - 50 - 91 - 16 - - - - Altura - h [cm] - - - - - - 100 - 20 - 81 - 20 - - - - 0 - - - - - - - 240 - 50 - 161 - 81 - - - - Material - - - - - 10 - 20 - 47 - 21 - - - - Bitola - - - - - - 70 - 20 - 81 - 22 - - - - - 6.3 - - - - - 8 - - - - - 10 - - - - - 12.5 - - - - - 16 - - - - - 25 - - - - - 32 - - - - - 40 - - - - - - - 12 - 50 - 47 - 21 - - - - φ agrg. - - - - - - 70 - 50 - 81 - 20 - - - - 1.9 - - - - - - - 40 - 170 - 201 - 81 - - - - Espaçamentos Calculados - - - - - 20 - 20 - 71 - 21 - - - - Horizontal [cm] - - - - - - 100 - 20 - 91 - 20 - - - - 0 - - - - - - 100 - 50 - 91 - 20 - - - - 0 - - - - - - 20 - 50 - 71 - 21 - - - - Vertical [cm] - - - - - - - - 0 - 0 - 831 - 21 - - - - - - - - PlotWidget - QWidget -
pyqtgraph
- 1 -
-
- - -
diff --git a/envoltorias_pilares.py b/envoltorias_pilares.py deleted file mode 100644 index a219c1f..0000000 --- a/envoltorias_pilares.py +++ /dev/null @@ -1,84 +0,0 @@ - -import pyqtgraph as pg -import pyqtgraph.exporters -import numpy as np -import math - -momento_x_min = 45 -momento_x = 67 -momento_y_min = 30 -momento_y = 50 -''' -theta = 30 -z = [] -w = [] -for theta in range(360): - theta_conv = (theta*math.pi)/180 - seno = math.sin(theta_conv) - cosseno = math.cos(theta_conv) - z.append(seno) - w.append(seno) - -print(z) -print(w) -''' - -x = [] -y = [] -for i in range(360): - theta = i - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = momento_y_min * seno - - cosseno = math.cos(theta_conv) - cosseno = momento_x_min * cosseno - - x.append(seno) - y.append(cosseno) - -z = [] -w = [] -for j in range(360): - theta = j - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = momento_y * seno - - cosseno = math.cos(theta_conv) - cosseno = momento_x * cosseno - - z.append(seno) - w.append(cosseno) - -# create plot -'''plt = pg.plot(x, y, title='theTitle', pen='r') -plt.showGrid(x=True,y=True) -''' -# create plot -plt = pg.plot() -plt.showGrid(x=True,y=True) -plt.addLegend() - -# set properties -plt.setLabel('left', 'Momentos Y', units='KN.m') -plt.setLabel('bottom', 'Momentos X', units='KN.m') -plt.setXRange(0,10) -plt.setYRange(0,20) -plt.setWindowTitle('pyqtgraph plot') - -plt.enableAutoRange() - -# plot -c1 = plt.plot(x, y, pen='r', name='Envoltória Momentos min') -c2 = plt.plot(z, w, pen='b', name='Envoltória Momentos máx') -#c2 = plt.plot(x, y2, pen='r', symbol='o', symbolPen='r', symbolBrush=0.2, name='blue') - - -## Start Qt event loop. -if __name__ == '__main__': - import sys - if sys.flags.interactive != 1 or not hasattr(pg.QtCore, 'PYQT_VERSION'): - pg.QtGui.QApplication.exec_() \ No newline at end of file diff --git a/gerador_abaco.py b/gerador_abaco.py deleted file mode 100644 index 336a4d1..0000000 --- a/gerador_abaco.py +++ /dev/null @@ -1,70 +0,0 @@ - - - -import sys - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem -import pyqtgraph as pg - -tabela_bitolas = [ - [6.3, 31.17], - [8, 50.26], - [10, 78.53], - [12.5, 122.71], - [16, 201.06], - [20, 314.15], - [25, 490.87], - [32, 804.24], - [40, 1256.63] - ] - -class Detalhar_viga(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('scrollAreaTeste.ui',self) - self.show() - def load_signals(self): - print('inicializado') - self.pushButton.clicked.connect(self.calcular_area) - - #pg.plot(x=[0,1,2,3,4], y=[0,1,2,3,4]**2 ) - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - - - def calcular_area(self): - area_aco = float(self.lineEdit.text()) - x = [] - y = [] - cont = 0 - for i in tabela_bitolas: - n_barras = float(area_aco/i[1]) - print('bitola: ',i[0],' - nº barras: ',n_barras) - - self.tableWidget.setItem(cont,2, QTableWidgetItem(str(round(n_barras, ndigits=2)))) - self.tableWidget.setItem(cont,3, QTableWidgetItem(str(round(n_barras +0.5)+1))) - - x.append(i[0]) - y.append(round(n_barras +0.5)+1) - cont +=1 - - print(x) - print(y) - - self.widget.plot(x=x,y=y,pen=(3)) - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - inicio = Detalhar_viga() - app.exec_() diff --git a/inicial.py b/inicial.py deleted file mode 100644 index be38bf5..0000000 --- a/inicial.py +++ /dev/null @@ -1,2167 +0,0 @@ - - -import sys -import os -import math - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox, QTableWidget, QTableWidgetItem -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -import pyqtgraph as pg - - -import marcus - -file = 'file:///C:/Users/Acer/Desktop/tessssst/sample.pdf' - -class Inicio(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = None - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('inicio_alt.ui',self) - self.label.setStyleSheet("Background-Color: #ddebff;") - - self.setWindowTitle('Navier - inicio') - - self.pushButton.setIcon(QtGui.QIcon('btn_inicio_vigas.png')) - self.pushButton.setIconSize(QtCore.QSize(52,52)) - self.pushButton_3.setIcon(QtGui.QIcon('btn_inicio_pilares.png')) - self.pushButton_3.setIconSize(QtCore.QSize(42,42)) - self.pushButton_9.setIcon(QtGui.QIcon('btn_inicio_lajes.png')) - self.pushButton_9.setIconSize(QtCore.QSize(42,42)) - self.pushButton_11.setIcon(QtGui.QIcon('btn_inicio_fundacoes.png')) - self.pushButton_11.setIconSize(QtCore.QSize(45,45)) - - #self.tab_2.setStyleSheet("background: url('navier_logo.png') no-repeat contain") - #self.tab_2.setStyleSheet("background-image: url(navier_logo.png); background-repeat: no-repeat; background-position: right bottom") - - self.label_5.setStyleSheet("Background-Color: #ddebff;") - self.label_10.setStyleSheet("Background-Color: #ddebff;") - self.label_9.setStyleSheet("Background-Color: #ddebff;") - self.label_11.setStyleSheet("Background-Color: #ddebff;") - - self.pushButton_2.setIcon(QtGui.QIcon('btn_caa.png')) - self.pushButton_2.setIconSize(QtCore.QSize(45,45)) - self.pushButton_5.setIcon(QtGui.QIcon('btn_cadicional.png')) - self.pushButton_5.setIconSize(QtCore.QSize(45,45)) - self.pushButton_6.setIcon(QtGui.QIcon('btn_tabbitolas.png')) - self.pushButton_6.setIconSize(QtCore.QSize(45,45)) - self.pushButton_7.setIcon(QtGui.QIcon('btn_tabmarcus.png')) - self.pushButton_7.setIconSize(QtCore.QSize(45,45)) - self.pushButton_8.setIcon(QtGui.QIcon('btn_flexaosimples.png')) - self.pushButton_8.setIconSize(QtCore.QSize(45,45)) - self.pushButton_23.setIcon(QtGui.QIcon('btn_flexaocomposta.png')) - self.pushButton_23.setIconSize(QtCore.QSize(45,45)) - - #self.textBrowser_14.hide() - self.label_21.setToolTip('Brunel - programa de cálculo e verificação de perfis metálicos para perfis brasileiros') - self.label_22.setToolTip('EngTool - aplicação mobile para cálculo de vigas de concreto armado') - - #self.scrollArea.setStyleSheet("background-color:transparent;") - #self.scrollArea.setStyleSheet("QScrollArea {background-color:transparent;}"); - #self.scrollAreaContents.setStyleSheet("background-color:transparent;"); - - self.setFixedSize(570, 450) - self.show() - - - def load_signals(self): - self.pushButton.clicked.connect(self.iniciar_vigas) - self.pushButton_3.clicked.connect(self.iniciar_pilares) - self.pushButton_9.clicked.connect(self.iniciar_lajes) - self.pushButton_11.clicked.connect(self.iniciar_fundacoes) - - self.pushButton_2.clicked.connect(self.iniciar_classe_agressividade) - self.pushButton_5.clicked.connect(self.iniciar_carga_adicional) - self.pushButton_6.clicked.connect(self.iniciar_tabela_bitolas) - - self.pushButton_7.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - self.pushButton_8.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - def iniciar_vigas(self): - print('vigas') - vigas.show() - def iniciar_pilares(self): - print('pilares') - pilares.show() - def iniciar_lajes(self): - print('lajes') - lajes.show() - def iniciar_fundacoes(self): - print('fundações') - sapatas.show() - #--------------------------- forms complementares ----------------------------- - def iniciar_carga_adicional(self): - print('carga adicional') - carga_adicional.show() - def iniciar_tabela_bitolas(self): - print('carga adicional') - tabela_bitolas.show() - def iniciar_classe_agressividade(self): - print('classe de agressividade') - tabela_classe_agressividade.show() - - '''def abrir_segunda(self): - print('oi') - gui2.hide() - time.sleep(0.5) - gui2.show() - ''' - - - -class Vigas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('vigas_alt.ui',self) - self.load_signals() - - self.setWindowTitle('Navier - Vigas') - - def load_signals(self): - print('viga carregado') - self.pushButton.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(1)) - self.pushButton_2.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(0)) - self.pushButton_3.clicked.connect(lambda: detalhar_vigas.show()) - - self.pushButton_6.clicked.connect(self.calcular_viga_index) - - self.radioButton.clicked.connect(lambda: self.lineEdit_35.setText('0.450')) - self.radioButton_2.clicked.connect(lambda: self.lineEdit_35.setText('0.628')) - - - def calcular_viga_index(self): - aux = self.stackedWidget.currentIndex() #retorn o indice do stackedwidget e indica se o cálculo é de simples ou dupla - #aux == 0 (Simples), aux == 1 (Dupla) - if aux == 1: - self.calcular_viga_simples() - else: - self.calcular_viga_dupla() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def calcular_viga_cortante(self): - aux = self.stackedWidget.currentIndex() - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - - if aux == 1: - bw_viga = float(self.lineEdit_3.text()) - h_viga = float(self.lineEdit_4.text()) - d_viga = float(self.lineEdit_5.text()) - - else: - bw_viga = float(self.lineEdit_15.text()) - h_viga = float(self.lineEdit_16.text()) - d_viga = float(self.lineEdit_17.text()) - - - theta_transversal = 45 - alfa_transversal = 90 - if self.radioButton_4.isChecked(): - theta_transversal = self.spinBox.value() - - theta_transversal = (theta_transversal/180)*math.pi - alfa_transversal = (alfa_transversal/180)*math.pi - - fator_cotangentes_transversal = ((math.cos(alfa_transversal)/math.sin(alfa_transversal))) + ((math.cos(theta_transversal)/math.sin(theta_transversal))) - fator_cotangentes_transversal = 1 - - vsd = vk_viga * 1.4 - vrd2 = 0.27 * (1-(fck_viga/250)) * (bw_viga/100) * fcd_viga * (d_viga/100) *(math.sin(2*theta_transversal))*fator_cotangentes_transversal * 1000 - print('VSD: ',vsd) - print('VRD2: ',vrd2) - - if vrd2 < vsd: - QMessageBox.about(self, "Alerta", "A seção de concreto não permite gerar bielas resistentes à compressão. Reveja as dimensões da viga ou esforços de cálculo para a estrutura.") - else: - vc_0 = 0.09*(fck_viga**(2/3))*(bw_viga/100)*(d_viga/100)*1000 - if self.radioButton_4.isChecked(): - vc_0 = vc_0*((vrd2 - vsd)/(vrd2 - vc_0)) - - vsw = vsd - vc_0 - - #as_transversal = (vsw/(0.9*(d_viga/100)*fyd_viga*fator_cotangentes_transversal*math.sin(alfa_transversal)))*1000 - as_transversal = (vsw/(0.9*(d_viga/100)*fyd_viga)*math.tan(theta_transversal))*1000 - - taxa_aco_cortante_retangular = 0.2*(0.3*fck_viga**(2/3))/fyk_viga - - as_min_transversal = ((bw_viga*10)*taxa_aco_cortante_retangular)*1000 # para deixar em mm² - - print('vk_viga: ',vk_viga) - print('vsd: ',vsd) - print('vrd2: ',vrd2) - print('vc_0: ',vc_0) - print('vsw: ',vsw) - print('as_transversal: ',as_transversal) - print('taxa_aco_cortante_retangular: ',taxa_aco_cortante_retangular) - print('as_min_transversal',as_min_transversal) - - #------------------------------------------- saida de dados -------------------------------------------------- - self.lineEdit_30.setText(str(round(vk_viga*1.4, ndigits=4))) - self.lineEdit_31.setText(str(round(vrd2, ndigits=4))) - self.lineEdit_32.setText(str(round(vc_0, ndigits=4))) - self.lineEdit_33.setText(str(round(vsw, ndigits=4))) - - self.lineEdit_34.setText(str(round(as_transversal, ndigits=4))) - self.lineEdit_37.setText(str(round(as_min_transversal, ndigits=4))) - - - def calcular_viga_simples(self): - mk_viga = self.lineEdit.text() - vk_viga = self.lineEdit_2.text() - bw_viga = self.lineEdit_3.text() - h_viga = self.lineEdit_4.text() - d_viga = self.lineEdit_5.text() - - if (mk_viga != '0' and vk_viga != '0' and bw_viga != '0' and h_viga != '0' and d_viga != '0'): - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - bw_viga = float(self.lineEdit_3.text()) - h_viga = float(self.lineEdit_4.text()) - d_viga = float(self.lineEdit_5.text()) - - d_linha_viga = h_viga - d_viga - self.lineEdit_21.setText(str(round(d_linha_viga, ndigits=2))) - area_secao_viga = bw_viga * h_viga - - kmd_viga = (mk_viga * 1.4 * 1000)/((bw_viga/100) * ((d_viga/100)**2) * (0.85*fcd_viga*1000000)) - if kmd_viga >0.5: - QMessageBox.about(self, "Alerta", "Os esforços especificados não são suportados pela seção de concreto analisada. Por favor altera as dimensões da seção da viga ou reveja os esforços de cálculo para a estrutura.") - else: - kx_viga = (1 - math.sqrt(1 - 2*kmd_viga))/0.8 - kz_viga = 1 - 0.4*kx_viga - as_viga = (mk_viga * 1.4 * 1000)/(kz_viga * (d_viga/100) * fyd_viga) - - as_sobre_apoio_viga = as_viga/3 - if h_viga >= 60: - as_pele = (0.1/100)*area_secao_viga*100 - else: - as_pele = 0 - - as_max_viga = (4/100)*area_secao_viga*100 - - if fck_viga == 20: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 25: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 30: - taxa_aco_viga_retangular = 0.173/100 - elif fck_viga == 35: - taxa_aco_viga_retangular = 0.201/100 - elif fck_viga == 40: - taxa_aco_viga_retangular = 0.203/100 - elif fck_viga == 45: - taxa_aco_viga_retangular = 0.259/100 - elif fck_viga == 50: - taxa_aco_viga_retangular = 0.288/100 - - as_min_viga = taxa_aco_viga_retangular * area_secao_viga*100 - - - if kx_viga < 0: - dominio_viga = 'Domínio 1' - elif kx_viga > 0 and kx_viga <0.259: - dominio_viga = 'Domínio 2' - elif kx_viga > 0.259 and kx_viga <0.45: - dominio_viga = 'Domínio 3 - Dúctil' - elif kx_viga > 0.45 and kx_viga <0.63: - dominio_viga = 'Domínio 3 - Não Dúctil' - elif (kx_viga > 0.628 and kx_viga <1): - dominio_viga = 'Domínio 4a' - elif (kx_viga > 0.438 and kx_viga <1) and (fyk_viga == 600): - dominio_viga = 'Domínio 4a' - else: - dominio_viga = 'Domínio 4b' - - kmd_viga = self.truncar(kmd_viga) - kx_viga = self.truncar(kx_viga) - kz_viga = self.truncar(kz_viga) - - print('kmd_viga: ',kmd_viga) - print('kx_viga: ',kx_viga) - print('kz_viga: ',kz_viga) - print('as_viga: ',as_viga) - print('as_sobre_apoio_viga: ',as_sobre_apoio_viga) - print('as_max_viga: ',as_max_viga) - print('as_min_viga',as_min_viga) - - #-------------------------------------- saida de dados ------------------------------------------------ - self.lineEdit_6.setText(str(round(mk_viga*1.4,ndigits=4))) - self.lineEdit_13.setText(dominio_viga) - self.lineEdit_7.setText(str(kmd_viga)) - self.lineEdit_8.setText(str(kx_viga)) - self.lineEdit_9.setText(str(kz_viga)) - - self.lineEdit_10.setText(str(round(as_viga,ndigits=4))) - self.lineEdit_11.setText(str(round(as_sobre_apoio_viga,ndigits=4))) - self.lineEdit_12.setText(str(round(as_pele,ndigits=4))) - self.lineEdit_14.setText(str(round(as_max_viga,ndigits=4))) - self.lineEdit_20.setText(str(round(as_min_viga,ndigits=4))) - - #------------------------------------------------------------------------------------------------- - if (dominio_viga == 'Domínio 4a') or (dominio_viga == 'Domínio 4b'): - QMessageBox.about(self, "Atenção", "Domínio de cálculo 4, recomenda-se utilizar, em seção retangular, armadura dupla ou seção tê para contenção dos esforços de compressão do concreto.") - - if as_viga > as_max_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada superior a Área Máxima especificada para a seção da viga.") - if as_viga < as_min_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada inferior a Área Mínima especificada para a seção da viga.") - - self.calcular_viga_cortante() - - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - def calcular_viga_dupla(self): - mk_viga = self.lineEdit.text() - vk_viga = self.lineEdit_2.text() - bw_viga = self.lineEdit_15.text() - h_viga = self.lineEdit_16.text() - d_viga = self.lineEdit_17.text() - - if (mk_viga != '0' and vk_viga != '0' and bw_viga != '0' and h_viga != '0' and d_viga != '0'): - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - bw_viga = float(self.lineEdit_15.text()) - h_viga = float(self.lineEdit_16.text()) - d_viga = float(self.lineEdit_17.text()) - - d_linha_viga = h_viga - d_viga - self.lineEdit_27.setText(str(round(d_linha_viga, ndigits=4))) - - xis_dominio = float(self.lineEdit_35.text()) - - d_min_viga = math.sqrt((mk_viga*1.4*1000)/((bw_viga/100) * (fcd_viga*1000000) * (0.68*xis_dominio - 0.272*(xis_dominio**2)))) - - x_lim_viga = xis_dominio * (d_viga/100) - - momento_lim_viga = 0.68 * (bw_viga/100) * (fcd_viga*1000) * x_lim_viga*((d_viga/100) - 0.4*x_lim_viga) - - print('d_min_viga: ',d_min_viga) - print('x_lim_viga: ',x_lim_viga) - print('momento_lim_viga: ',momento_lim_viga) - - if d_min_viga < (h_viga/100): - self.lineEdit_36.setText(str(round(d_min_viga, ndigits=5))) - self.lineEdit_18.setText(str(round(x_lim_viga, ndigits=5))) - QMessageBox.about(self, "Observação", "A altura atual da viga é maior que a altura útil mínima, calcule como simplesmente armada") - - else: - - momento_lim_viga = 0.68 * (bw_viga/100) * (fcd_viga*1000) * x_lim_viga*((d_viga/100) - 0.4*x_lim_viga) - momento_2_viga = (mk_viga*1.4) - momento_lim_viga - - as_compressao_viga = (momento_2_viga * 1000)/(((d_viga/100) - (d_linha_viga/100))*(fyd_viga)) - #as_tracao_viga = ((momento_lim_viga * 1000)/((1 - 0.4*x_lim_viga)*(d_viga/100)*fyd_viga)) - as_tracao_viga = ((momento_lim_viga * 1000)/((1 - 0.4*xis_dominio)*(d_viga/100)*fyd_viga)) - - as_tracao_viga = as_tracao_viga + as_compressao_viga - - as_total_viga = as_tracao_viga + as_compressao_viga - - as_sobre_apoio_viga = as_tracao_viga/3 - - area_secao_viga = bw_viga * h_viga - if h_viga >= 60: - as_pele = (0.1/100)*area_secao_viga*100 - else: - as_pele = 0 - - if fck_viga == 20: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 25: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 30: - taxa_aco_viga_retangular = 0.173/100 - elif fck_viga == 35: - taxa_aco_viga_retangular = 0.201/100 - elif fck_viga == 40: - taxa_aco_viga_retangular = 0.203/100 - elif fck_viga == 45: - taxa_aco_viga_retangular = 0.259/100 - elif fck_viga == 50: - taxa_aco_viga_retangular = 0.288/100 - - as_max_viga = (4/100)*area_secao_viga*100 - as_min_viga = taxa_aco_viga_retangular * area_secao_viga*100 - - - print('momento_lim_viga: ',momento_lim_viga) - print('momento_2_viga: ',momento_2_viga) - print('as_compressao_viga: ',as_compressao_viga) - print('as_tracao_viga: ',as_tracao_viga) - - - #------------------------------------------ saida de dados -------------------------------------------------- - self.lineEdit_36.setText(str(round(d_min_viga, ndigits=5))) - self.lineEdit_18.setText(str(round(x_lim_viga, ndigits=5))) - self.lineEdit_26.setText(str(round(momento_lim_viga, ndigits=5))) - self.lineEdit_19.setText(str(round(momento_2_viga, ndigits=5))) - - self.lineEdit_22.setText(str(round(as_compressao_viga, ndigits=5))) - self.lineEdit_28.setText(str(round(as_tracao_viga, ndigits=5))) - self.lineEdit_23.setText(str(round(as_sobre_apoio_viga, ndigits=5))) - self.lineEdit_24.setText(str(round(as_pele, ndigits=5))) - self.lineEdit_38.setText(str(round(as_total_viga, ndigits=2))) - self.lineEdit_25.setText(str(round(as_max_viga, ndigits=2))) - self.lineEdit_29.setText(str(round(as_min_viga, ndigits=2))) - #------------------------------------------ ------------- -------------------------------------------------- - - if as_total_viga > as_max_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada superior a Área Máxima especificada para a seção da viga.") - if as_total_viga < as_min_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada inferior a Área Mínima especificada para a seção da viga.") - - self.calcular_viga_cortante() - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - -global pilares_info -pilares_info = [0,0,0,0] - -global pilares_info_aco -pilares_info_aco = [0, 0, 0, 0, 0, 0, 0] - -class Pilares(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('pilares_alt.ui',self) - self.load_signals() - - self.setWindowTitle('Navier - Pilares') - - - def load_signals(self): - print('pilares carregado') - self.cont_x = 0 - self.cont_y = 0 - #self.pushButton.clicked.connect(self.pilar_alterar_tipo_engaste_x) - #self.pushButton_2.clicked.connect(self.pilar_alterar_tipo_engaste_y) - self.pushButton_6.clicked.connect(self.calcular_pilares) - self.pushButton.clicked.connect(self.gerar_envoltoria) - self.pushButton_3.clicked.connect(lambda: pilares_areas_aco.show()) - - - def calcular_pilares(self): - x_pilar = self.lineEdit.text() - y_pilar = self.lineEdit_2.text() - altura_pilar = self.lineEdit_3.text() - altura_lance = self.lineEdit_4.text() - - nk_pilar = self.lineEdit_5.text() - momento_x_topo = self.lineEdit_6.text() - momento_x_base = self.lineEdit_7.text() - momento_y_topo = self.lineEdit_8.text() - momento_y_base = self.lineEdit_9.text() - - - if (x_pilar != '0' and y_pilar != '0' and altura_pilar != '0' and altura_lance != '0' and nk_pilar != '0'): - fck_pilar = float(self.comboBox_3.currentText()) - fcd_pilar = fck_pilar/1.4 - fyk_pilar = float(self.comboBox_4.currentText()) - fyd_pilar = fyk_pilar/1.15 - cobrimento_pilar = float(self.comboBox_5.currentText()) - - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - altura_pilar = float(self.lineEdit_3.text()) - altura_lance = float(self.lineEdit_4.text()) - - nk_pilar = float(self.lineEdit_5.text()) - momento_x_topo = float(self.lineEdit_6.text()) - momento_x_base = float(self.lineEdit_7.text()) - momento_y_topo = float(self.lineEdit_8.text()) - momento_y_base = float(self.lineEdit_9.text()) - - area_secao_pilar = (x_pilar/100)*(y_pilar/100) - - #nd_pilar = (nk_pilar + ((x_pilar/100)*(y_pilar/100)*altura_pilar*25)) * 1.4 - nd_pilar = (nk_pilar) * 1.4 - md_x_topo = 1.4 * momento_x_topo - md_x_base = 1.4 * momento_x_base - md_y_topo = 1.4 * momento_y_topo - md_y_base = 1.4 * momento_y_base - - '''apoio_x = self.stackedWidget.currentIndex() - if apoio_x == 0: - tipo_apoio_x = 'AA' - elif apoio_x == 1: - tipo_apoio_x = 'EA' - elif apoio_x == 2: - tipo_apoio_x = 'EE' - ''' - - tipo_apoio_x = 'AA' - - if momento_x_topo == 0 and momento_x_base == 0 and momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'intermediario' - elif momento_x_topo == 0 and momento_x_base == 0: - self.tipo_pilar = 'extremidade-x' - elif momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'extremidade-y' - else: - self.tipo_pilar = 'canto' - - - self.lineEdit_13.setText(str(round(md_x_topo, ndigits=5))) - self.lineEdit_14.setText(str(round(md_x_base, ndigits=5))) - self.lineEdit_22.setText(str(round(md_y_topo, ndigits=5))) - self.lineEdit_28.setText(str(round(md_y_base, ndigits=5))) - - #-Eixo-X---------------------------------------------------------------------- - b = y_pilar - h = x_pilar - - m_a = max(md_x_topo, md_x_base) - m_b = min(md_x_topo, md_x_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-x': - alfa_b_x = 1.0 - else: - alfa_b_x = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_x < 0.4: - alfa_b_x = 0.4 - - #excen_min_x = (1.5+0.03*h) - momento_min_x = (nd_pilar *(1.5+0.03*h))/100 - excen_min_x = momento_min_x/nd_pilar - - if md_x_topo < momento_min_x: - md_x_topo = momento_min_x - print('momento topo - mínimo') - alfa_b_x = 1.0 - if md_x_base < momento_min_x: - md_x_base = momento_min_x - print('momento base - mínimo') - alfa_b_x = 1.0 - - compr_efetivo_x = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_x): - compr_efetivo_x = altura_lance*100 - - excen_x_acidental = compr_efetivo_x/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_x_topo,md_x_base,momento_min_x)/nd_pilar)/h - - lambda_pilar_x = 3.46 * (compr_efetivo_x/h) - lambda_pilar_x_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_x - if lambda_pilar_x_limite < 35: - lambda_pilar_x_limite = 35 - - excen_2_x = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_x = nd_pilar * (excen_2_x/100) - - if lambda_pilar_x > lambda_pilar_x_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - md2_x_relativo = nd_pilar * (excen_2/100) - else: - md2_x_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_x_intermediario = alfa_b_x * max(abs(md_x_topo), abs(md_x_base), abs(momento_min_x)) + md2_x_relativo - #msd_x_intermediario = alfa_b_x * abs(momento_min_x) + md2_x_relativo - - mi_x = msd_x_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_x = cobrimento_pilar/h - - - #-Eixo-Y---------------------------------------------------------------------- - h = y_pilar - b = x_pilar - - m_a = max(md_y_topo, md_y_base) - m_b = min(md_y_topo, md_y_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-y': - alfa_b_y = 1.0 - else: - alfa_b_y = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_y < 0.4: - alfa_b_y = 0.4 - - momento_min_y = (nd_pilar *(1.5+0.03*h))/100 - excen_min_y = momento_min_y/nd_pilar - - if md_y_topo < momento_min_y: - md_y_topo = momento_min_y - print('momento topo - mínimo') - alfa_b_y = 1.0 - if md_y_base < momento_min_y: - md_y_base = momento_min_y - print('momento base - mínimo') - alfa_b_y = 1.0 - - compr_efetivo_y = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_y): - compr_efetivo_y = altura_lance*100 - - excen_y_acidental = compr_efetivo_y/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_y_topo,md_y_base,momento_min_y)/nd_pilar)/h - - lambda_pilar_y = 3.46 * (compr_efetivo_y/h) - lambda_pilar_y_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_y - if lambda_pilar_y_limite < 35: - lambda_pilar_y_limite = 35 - - excen_2_y = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_y = nd_pilar * (excen_2_y/100) - - if lambda_pilar_y > lambda_pilar_y_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - md2_y_relativo = nd_pilar * (excen_2/100) - else: - md2_y_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_y_intermediario = alfa_b_y * max(abs(md_y_topo), abs(md_y_base), abs(momento_min_y)) + md2_y_relativo - #msd_y_intermediario = alfa_b_y * abs(momento_min_y) + md2_y_relativo - - mi_y = msd_y_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_y = cobrimento_pilar/h - - #print('v_0: ',v_0) - #print('excen_2_x: ',excen_2_x) - #print('compr_efetivo_x: ',compr_efetivo_x) - #print('alfa_b_x: ',alfa_b_x) - #print('lambda_pilar_x: ',lambda_pilar_x) - #print('lambda_pilar_x_limite: ',lambda_pilar_x_limite) - #print('momento_min_x: ',momento_min_x) - #print('md_x_topo: ',md_x_topo) - #print('md_x_base: ',md_x_base) - #print('msd_x_intermediario: ',msd_x_intermediario) - #print('md2_x: ',md2_x) - #print('--------------------------------------------------') - #print('lambda_pilar_y: ',lambda_pilar_y) - #print('lambda_pilar_y_limite: ',lambda_pilar_y_limite) - #print('momento_min_y: ',momento_min_y) - #print('md_y_topo: ',md_y_topo) - #print('md_y_base: ',md_y_base) - #print('msd_y_intermediario: ',msd_y_intermediario) - - #--------------------------------------------- saida de dados --------------------------------------------- - self.lineEdit_10.setText(str(round(nd_pilar, ndigits=4))) - self.lineEdit_11.setText(str(round(area_secao_pilar, ndigits=4))) - self.lineEdit_12.setText(str(round(v_0, ndigits=4))) - - self.lineEdit_15.setText(str(round(momento_min_x, ndigits=5))) - self.lineEdit_16.setText(str(round(excen_min_x*100, ndigits=5))) - self.lineEdit_17.setText(str(round(lambda_pilar_x, ndigits=5))) - self.lineEdit_18.setText(str(round(lambda_pilar_x_limite, ndigits=5))) - self.lineEdit_19.setText(str(round(excen_2_x, ndigits=5))) - self.lineEdit_20.setText(str(round(md2_x, ndigits=5))) - self.lineEdit_21.setText(str(round(msd_x_intermediario, ndigits=5))) - - self.lineEdit_24.setText(str(round(momento_min_y, ndigits=5))) - self.lineEdit_25.setText(str(round(excen_min_y*100, ndigits=5))) - self.lineEdit_26.setText(str(round(lambda_pilar_y, ndigits=5))) - self.lineEdit_23.setText(str(round(lambda_pilar_y_limite, ndigits=5))) - self.lineEdit_30.setText(str(round(excen_2_y, ndigits=5))) - self.lineEdit_29.setText(str(round(md2_y, ndigits=5))) - self.lineEdit_27.setText(str(round(msd_y_intermediario, ndigits=5))) - - self.lineEdit_31.setText(str(round(mi_x, ndigits=2))) - self.lineEdit_32.setText(str(round(mi_y, ndigits=2))) - self.lineEdit_33.setText(str(round(delta_x, ndigits=2))) - self.lineEdit_34.setText(str(round(delta_y, ndigits=2))) - - global pilares_info - pilares_info = [msd_x_intermediario, msd_y_intermediario, momento_min_x, momento_min_y] - - if md2_x_relativo == 0: - self.label_39.setText('não considera 2º ordem') - else: - self.label_39.setText('considera 2º ordem') - - if md2_y_relativo == 0: - self.label_44.setText('não considera 2º ordem') - else: - self.label_44.setText('considera 2º ordem') - - - if self.tipo_pilar == 'intermediario': - self.label.setText('PILAR INTERMEDIÁRIO') - elif (self.tipo_pilar == 'extremidade-x') or (self.tipo_pilar == 'extremidade-y'): - self.label.setText('PILAR DE EXTREMIDADE') - else: - self.label.setText('PILAR DE CANTO') - - global pilares_info_aco - pilares_info_aco = [mi_x, delta_x, mi_y, delta_y, fck_pilar, area_secao_pilar, nk_pilar] - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - def gerar_envoltoria(self): - msd_x_intermediario = pilares_info[0] - msd_y_intermediario = pilares_info[1] - momento_min_x = pilares_info[2] - momento_min_y = pilares_info[3] - - x = [] - y = [] - for i in range(360): - theta = i - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = momento_min_y * seno - - cosseno = math.cos(theta_conv) - cosseno = momento_min_x * cosseno - - x.append(seno) - y.append(cosseno) - - z = [] - w = [] - for j in range(360): - theta = j - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = msd_y_intermediario * seno - - cosseno = math.cos(theta_conv) - cosseno = msd_x_intermediario * cosseno - - z.append(seno) - w.append(cosseno) - - # create plot - '''plt = pg.plot(x, y, title='theTitle', pen='r') - plt.showGrid(x=True,y=True) - ''' - # create plot - plt = pg.plot() - plt.clear() - plt.showGrid(x=True,y=True) - plt.addLegend() - plt.setTitle('Envoltória de Momentos') - - - # set properties - plt.setLabel('left', 'Momentos Y', units='KN.m') - plt.setLabel('bottom', 'Momentos X', units='KN.m') - plt.setXRange(0,10) - plt.setYRange(0,20) - - - plt.enableAutoRange() - plt.setWindowTitle('pyqtgraph plot') - # plot - c1 = plt.plot(x, y, pen='r', name='Envoltória Momentos min') - c2 = plt.plot(z, w, pen='b', name='Envoltória Momentos máx') - - -class Pilar_area_aco(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('pilares_areas_aco.ui',self) - self.setWindowTitle('Navier - Pilares - Áreas de Aço') - - self.pushButton_4.setIcon(QtGui.QIcon('btn_flexaosimples.png')) - self.pushButton_4.setIconSize(QtCore.QSize(50,60)) - self.pushButton_5.setIcon(QtGui.QIcon('btn_flexaocomposta.png')) - self.pushButton_5.setIconSize(QtCore.QSize(50,60)) - - def load_signals(self): - print('inicializado') - self.pushButton_2.clicked.connect(self.calcular_area_aco) - self.pushButton.clicked.connect(self.recuperar_dados) - self.pushButton_3.clicked.connect(self.limpar) - self.pushButton_4.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - self.pushButton_5.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - - def recuperar_dados(self): - self.lineEdit_2.setText(str(round(pilares_info_aco[0], ndigits=2))) - self.lineEdit_3.setText(str(round(pilares_info_aco[1], ndigits=2))) - self.lineEdit_5.setText(str(round(pilares_info_aco[2], ndigits=2))) - self.lineEdit_6.setText(str(round(pilares_info_aco[3], ndigits=2))) - self.lineEdit_12.setText(str(round(pilares_info_aco[4], ndigits=2))) - self.lineEdit_13.setText(str(round(pilares_info_aco[5], ndigits=2))) - self.lineEdit_14.setText(str(round(pilares_info_aco[6], ndigits=2))) - - def calcular_area_aco(self): - fck = float(self.lineEdit_12.text()) - fcd = fck/1.4 - fyd = 500/1.15 - area_concreto = float(self.lineEdit_13.text()) - nk = float(self.lineEdit_14.text()) - nd = 1.4 * nk - - mi_x = float(self.lineEdit_2.text()) - delta_x = float(self.lineEdit_3.text()) - - mi_y = float(self.lineEdit_5.text()) - delta_y = float(self.lineEdit_6.text()) - - omega_x = float(self.lineEdit_4.text()) - omega_y = float(self.lineEdit_7.text()) - - as_x = (omega_x * (area_concreto*1000000) * fcd)/fyd - as_y = (omega_y * (area_concreto*1000000) * fcd)/fyd - - as_x = round(as_x, ndigits=3) - as_y = round(as_y, ndigits=3) - - as_pilar_min = 0.15 * (nd/fyd) - if as_pilar_min < (0.004*area_concreto*100000): - as_pilar_min = round((0.004*area_concreto*100000), ndigits=3) - - as_pilar_max = round((0.08*area_concreto*1000000), ndigits=3) - - #-------------------------------------- saída de dados ---------------------------------------------------- - self.lineEdit_8.setText(str(as_x)) - self.lineEdit_9.setText(str(as_y)) - self.lineEdit_10.setText(str(as_pilar_max)) - self.lineEdit_11.setText(str(as_pilar_min)) - - def teste(self): - print('teste') - - def limpar(self): - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('1') - self.lineEdit_5.setText('0') - self.lineEdit_6.setText('0') - self.lineEdit_7.setText('1') - self.lineEdit_8.setText('0') - self.lineEdit_9.setText('0') - self.lineEdit_10.setText('0') - self.lineEdit_11.setText('0') - self.lineEdit_12.setText('0') - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - - - - - -class Lajes(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('lajes.ui',self) - - self.lado1 = 'livre' - self.lado2 = 'livre' - self.lado3 = 'livre' - self.lado4 = 'livre' - self.label_37.hide() - self.label_38.hide() - self.label_40.hide() - self.label_41.hide() - global caso - caso = '1' - global lx_lage - lx_lage = 'l_menor' - self.lineEdit.setReadOnly(True) - - self.load_signals() - - self.setWindowTitle('Navier - Lajes') - - def load_signals(self): - print('lajes iniciado') - self.pushButton.clicked.connect(self.estado_l1) - self.pushButton_2.clicked.connect(self.estado_l2) - self.pushButton_3.clicked.connect(self.estado_l3) - self.pushButton_4.clicked.connect(self.estado_l4) - self.pushButton.clicked.connect(self.situacao_laje) - self.pushButton_2.clicked.connect(self.situacao_laje) - self.pushButton_3.clicked.connect(self.situacao_laje) - self.pushButton_4.clicked.connect(self.situacao_laje) - - self.pushButton_5.clicked.connect(self.teste) - self.pushButton_6.clicked.connect(self.calcular_laje) - - self.toolButton.clicked.connect(self.revelar_carg_acidental) - - def teste(self): - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - def revelar_carg_acidental(self): - print('oi--') - carga_adicional.show() - - def estado_l1(self): - if self.lado1 == 'livre': - self.lado1 = 'engastado' - pixmap = QPixmap('engv.png') - self.pushButton.setIcon(QIcon(pixmap)) - else: - self.lado1 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - def estado_l2(self): - if self.lado2 == 'livre': - self.lado2 = 'engastado' - pixmap = QPixmap('engh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - else: - self.lado2 = 'livre' - pixmap = QPixmap('livh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - - def estado_l3(self): - if self.lado3 == 'livre': - self.lado3 = 'engastado' - pixmap = QPixmap('engh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - else: - self.lado3 = 'livre' - pixmap = QPixmap('livh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - - def estado_l4(self): - if self.lado4 == 'livre': - self.lado4 = 'engastado' - pixmap = QPixmap('engv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - else: - self.lado4 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - def situacao_laje(self): - l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - l4 = self.lado4 - - cota_v1 = self.label_37 - cota_v2 = self.label_40 - cota_h1 = self.label_38 - cota_h2 = self.label_41 - - if (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre'): - global caso - caso = '1' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - global lx_lage - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '2' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') : - caso = '2' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') or (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado'): - caso = '3' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '4' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '4' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado'): - caso = '5' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '5' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado'): - caso = '6' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - else: - caso='ainda não existe, não sei como você chegou até aqui srsrrsrsrsrsrs' - - - print(caso) - self.lineEdit_6.setText(str(caso)) - - def calcular_laje(self): - lado_maior = float(self.lineEdit_3.text()) - lado_menor = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - - self.lineEdit_7.setText('') - self.lineEdit_9.setText('') - self.lineEdit_8.setText('') - self.lineEdit_10.setText('') - self.lineEdit_16.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - - if lado_maior != 0 and lado_menor != 0 and espes != 0 and d != 0: - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - carreg_adicional = float(self.lineEdit_2.text()) - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - carreg_total = pp + carreg_adicional - #print(caso) - #print(lx_lage) - #---------------------------------- cálculo do Lx baseado no caso do tipo de situação da laje ----------------- - global lx - global lambda_laje - if lx_lage == 'l_menor': - lx = lado2 - lambda_laje = round((lado1/lado2),ndigits=2) - elif lx_lage == 'l_maior': - lx = lado1 - lambda_laje = round((lado2/lado1),ndigits=2) - print(lx_lage) - - #---------------------------------- definição se a laje é unidirecional ou bidirecional baseado no lambda ----------------- - global tipo_laje - if float(lambda_laje) > 2.001: - tipo_laje = 'UNIDIRECIONAL' - self.laje_unidirecional(carreg_total) - else: - tipo_laje = 'BIDIRECIONAL' - self.label_43.setStyleSheet("Background: url('laje_unidirecional_modelo.png') no-repeat") - - mx = my = nx = ny = '' - - if caso == '1': - caso1 = marcus.caso1 - linhas = len(caso1) - colunas = len(caso1[0]) - - for i in range(linhas): - aux = caso1[i][0] - if lambda_laje == aux: - print(caso1[i]) - mx = caso1[i][2] - my = caso1[i][3] - - print('mx: ',mx) - print('my: ',my) - - if caso == '2': - caso2 = marcus.caso2 - linhas = len(caso2) - colunas = len(caso2[0]) - - for i in range(linhas): - aux = caso2[i][0] - if lambda_laje == aux: - print(caso2[i]) - mx = caso2[i][2] - nx = caso2[i][3] - my = caso2[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '3': - caso3 = marcus.caso3 - linhas = len(caso3) - colunas = len(caso3[0]) - - for i in range(linhas): - aux = caso3[i][0] - if lambda_laje == aux: - print(caso3[i]) - mx = caso3[i][2] - nx = caso3[i][3] - my = caso3[i][4] - ny = caso3[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '4': - caso4 = marcus.caso4 - linhas = len(caso4) - colunas = len(caso4[0]) - - for i in range(linhas): - aux = caso4[i][0] - if lambda_laje == aux: - print(caso4[i]) - mx = caso4[i][2] - nx = caso4[i][3] - my = caso4[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '5': - caso5 = marcus.caso5 - linhas = len(caso5) - colunas = len(caso5[0]) - - for i in range(linhas): - aux = caso5[i][0] - if lambda_laje == aux: - print(caso5[i]) - mx = caso5[i][2] - nx = caso5[i][3] - my = caso5[i][4] - ny = caso5[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '6': - caso6 = marcus.caso6 - linhas = len(caso6) - colunas = len(caso6[0]) - - for i in range(linhas): - aux = caso6[i][0] - if lambda_laje == aux: - print(caso6[i]) - mx = caso6[i][2] - nx = caso6[i][3] - my = caso6[i][4] - ny = caso6[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - print(lx) - if mx != '': - self.lineEdit_7.setText(str(mx)) - momento_pos_x = ((carreg_total * (lx**2))/mx) - momento_pos_x = round(momento_pos_x,ndigits=4) - self.lineEdit_13.setText(str(momento_pos_x)) - #else: - # self.lineEdit_13.setText('0') - if nx != '': - self.lineEdit_9.setText(str(nx)) - momento_neg_x = round(((carreg_total * (lx**2))/nx),ndigits=4) - self.lineEdit_14.setText(str(momento_neg_x)) - #momento_neg_x = round(momento_neg_x,ndigits=2) - #else: - # self.lineEdit_14.setText('0') - if my != '': - self.lineEdit_8.setText(str(my)) - momento_pos_y = ((carreg_total * (lx**2))/my) - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - #else: - # self.lineEdit_15.setText('0') - if ny != '': - self.lineEdit_10.setText(str(ny)) - momento_neg_y = round(((carreg_total * (lx**2))/ny),ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - #momento_neg_y = round(momento_neg_y,ndigits=2) - #else: - # self.lineEdit_16.setText('0') - - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - def laje_unidirecional(self,carreg_total): - - #self.lineEdit_7.setText('') - #self.lineEdit_9.setText('') - #self.lineEdit_8.setText('') - #self.lineEdit_10.setText('') - #self.lineEdit_16.setText('') - #self.lineEdit_13.setText('') - #self.lineEdit_14.setText('') - #self.lineEdit_15.setText('') - #self.lineEdit_16.setText('') - - print('unidirecional') - #l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - #l4 = self.lado4 - print(carreg_total) - if (l2 == 'livre' and l3 == 'livre'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_ll2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/8 - momento_neg_y = 0 - elif (l2 == 'engastado' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_ee2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/24 - momento_neg_y = (carreg_total * (lx**2))/12 - elif (l2 == 'engastado' and l3 == 'livre') or (l2 == 'livre' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_le2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/14.2 - momento_neg_y = (carreg_total * (lx**2))/8 - - print('momento_pos_y: ',momento_pos_y) - print('momento_neg_y: ',momento_neg_y) - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - momento_neg_y = round(momento_neg_y,ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def resultados_laje(self): - - mx = self.lineEdit_13.text() - if mx == '': - self.lineEdit_13.setText('0') - - my = self.lineEdit_15.text() - if my == '': - self.lineEdit_15.setText('0') - - nx = self.lineEdit_14.text() - if nx == '': - self.lineEdit_14.setText('0') - - ny = self.lineEdit_16.text() - if ny == '': - self.lineEdit_16.setText('0') - - fck_laje = float(self.comboBox.currentText()) - fyk_laje = float(self.comboBox_2.currentText()) - fcd_laje = fck_laje * 1.4 * 1000000 - fyd_laje = fyk_laje * 1.4 * 1000000 - d_laje = float(self.lineEdit_27.text()) - - mx = float(self.lineEdit_13.text()) - my = float(self.lineEdit_15.text()) - nx = float(self.lineEdit_14.text()) - ny = float(self.lineEdit_16.text()) - #print('mx: ',mx) - #print('nx: ',nx) - #print('my: ',my) - #print('ny: ',ny) - if mx > nx: - mk_x = mx - else: - mk_x = nx - if my > ny: - mk_y = my - else: - mk_y = ny - - #print('mkx: ',mk_x) - #print('mky: ',mk_y) - md_x = round(1.4 * mk_x, ndigits = 4) - kmd_x_laje = (md_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_x_laje = (1 - math.sqrt(1 - 2*kmd_x_laje))/0.8 - kz_x_laje = 1 - 0.4 * kx_x_laje - - as_x_laje = (md_x * 1000/ (kz_x_laje * (d_laje/100) * fyd_laje))*100000 - - print('md_x: ', md_x) - print('kmd_x_laje: ', kmd_x_laje) - print('kx_x_laje: ', kx_x_laje) - print('kz_x_laje: ', kz_x_laje) - print('as_x_laje: ', as_x_laje) - - md_y = round(1.4 * mk_y, ndigits = 4) - kmd_y_laje = (md_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje = (1 - math.sqrt(1 - 2*kmd_y_laje))/0.8 - kz_y_laje = 1 - 0.4 * kx_y_laje - - as_y_laje = (md_y * 1000/ (kz_y_laje * (d_laje/100) * fyd_laje))*100000 - - print('md_y: ', md_y) - print('kmd_y_laje: ', kmd_y_laje) - print('kx_y_laje: ', kx_y_laje) - print('kz_y_laje: ', kz_y_laje) - print('as_y_laje: ', as_y_laje) - - #------------------------------------------ saida de dados ------------------------------------ - kmd_x_laje = self.truncar(kmd_x_laje) - kx_x_laje = self.truncar(kx_x_laje) - kz_x_laje = self.truncar(kz_x_laje) - as_x_laje = self.truncar(as_x_laje) - - kmd_y_laje = self.truncar(kmd_y_laje) - kx_y_laje = self.truncar(kx_y_laje) - kz_y_laje = self.truncar(kz_y_laje) - as_y_laje = self.truncar(as_y_laje) - - self.lineEdit_17.setText(str(md_x)) - self.lineEdit_18.setText(str(kmd_x_laje)) - self.lineEdit_19.setText(str(kx_x_laje)) - self.lineEdit_20.setText(str(kz_x_laje)) - self.lineEdit_21.setText(str(as_x_laje)) - - self.lineEdit_22.setText(str(md_y)) - self.lineEdit_24.setText(str(kmd_y_laje)) - self.lineEdit_25.setText(str(kx_y_laje)) - self.lineEdit_26.setText(str(kz_y_laje)) - self.lineEdit_23.setText(str(as_y_laje)) - - - -class Carga_Adicional(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - - self.ui = loadUi('lajes_carg_adicional.ui',self) - #self.tableWidget.setRowCount(linhas) - #self.tableWidget.setColumnCount(colunas) - #table = self.tableWidget() - #header = self.tableWidget.horizontalHeader() - #header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - #header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - self.tableWidget.resizeRowsToContents() - - self.setWindowTitle('Navier - Cargas Adicionais') - -class Sapatas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('sapatas_alt.ui',self) - self.load_signals() - self.setWindowTitle('Navier - Sapatas') - - def load_signals(self): - print('sapatas carregado') - self.pushButton_6.clicked.connect(self.calcular_sapata) - self.pushButton.clicked.connect(self.gerar_dim_sapata) - - def arredondar_cinco(self, numero): - numero = round(numero, ndigits=2) - numero = 100*numero - resto = numero%5 - while resto != 0: - numero += 1 - resto = numero%5 - print('numero:',numero,' - resto: ',resto) - - numero = numero/100 - return numero - - def calcular_sapata(self): - - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - - base_y_sapata = float(self.lineEdit_10.text()) - base_x_sapata = float(self.lineEdit_9.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - y_sapata = float(self.lineEdit_9.text()) - x_sapata = float(self.lineEdit_10.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - if (nk != 0 and x_pilar != 0 and y_pilar != 0 and tensao_adm_solo != 0 and fator_solo != 0 and base_y_sapata != 0 and base_x_sapata != 0 and h_total != 0 and h_0 != 0): - if (x_sapata < 0.6 or y_sapata < 0.6): - QMessageBox.about(self, "Erro de Entrada", "As sapatas não podem apresentar lados menores de 60 cm, conforme a NBR 6122") - else: - fck_sapata = float(self.comboBox.currentText()) - fcd_sapata = fck_sapata / 1.4 - fyk_sapata = float(self.comboBox_2.currentText()) - fyd_sapata = fyk_sapata / 1.15 - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - angulo_dissp_sapata = float(self.spinBox.value()) - - angulo_dissp_sapata = (angulo_dissp_sapata / 180)* 3.14 - - x_pilar = float(self.lineEdit.text())/100 - y_pilar = float(self.lineEdit_2.text())/100 - - y_sapata = float(self.lineEdit_9.text()) - x_sapata = float(self.lineEdit_10.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - if (momento_x_sapata != 0 and momento_y_sapata == 0) or (momento_x_sapata == 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.05 - elif (momento_x_sapata != 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.103 - else: - fator_acrescimo_dimensoes = 1.0 - - x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) - y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) - - wx = x_sapata * (y_sapata**2)/6 - wy = y_sapata * (x_sapata**2)/6 - - mw_x = (momento_x_sapata/wx)*1000 - mw_y = (momento_y_sapata/wy)*1000 - - tensao_sapata = (fator_solo*nk*1000)/(x_sapata*y_sapata) - tensao_max_sapata = tensao_sapata + mw_x + mw_y - tensao_min_sapata = tensao_sapata - mw_x - mw_y - - nk_equiv = (x_sapata * y_sapata * tensao_max_sapata)/fator_solo - area_sapata = round(fator_solo * ((nk*1000)/(tensao_adm_solo*1000000)),ndigits=6) - - ca_sapata = (x_sapata - x_pilar)/2 - cb_sapata = (y_sapata - y_pilar)/2 - h_rig_x = 2/3 * ca_sapata - h_rig_y = 2/3 * cb_sapata - - h_mincis = (1.4 * nk_equiv)/(2*(x_pilar+y_pilar)*0.27*(1-(fck_sapata/250))*(fcd_sapata*1000000)) - if h_mincis < 0.40: - h_mincis = 0.40 - if h_total < h_mincis: - h_total = h_mincis - - braco_alavanca_sapata = h_total - 0.05 - - h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) - h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) - - #h0 = round(h0a, ndigits=2) - #if h0a < h0b: - # h0 = round(h0b, ndigits=2) - - volume_concreto_sapata = (h_total-h_0)/(3*(x_sapata*y_sapata+x_pilar*y_pilar+math.sqrt(x_sapata*y_sapata*x_pilar*y_pilar))+x_sapata*y_sapata*h_0) - - tracao_x_sapata = 1.1 * nk_equiv * (x_sapata - x_pilar)/(8 * braco_alavanca_sapata) - tracao_y_sapata = 1.1 * nk_equiv * (y_sapata - y_pilar)/(8 * braco_alavanca_sapata) - as_x_sapata = (1.4 * tracao_x_sapata)/(fyd_sapata) - as_y_sapata = (1.4 * tracao_y_sapata)/fyd_sapata - - taxa_aco_sapata = (0.078 * (fck_sapata)**(2/3))/fyd_sapata - - if taxa_aco_sapata <= 0.0015: - taxa_aco_sapata = 0.0015 - - as_x_min_laje = 0.67 * taxa_aco_sapata * h_mincis * x_sapata - as_y_min_laje = 0.67 * taxa_aco_sapata * h_mincis * y_sapata - - print('x_sapata: ',x_sapata) - print('y_sapata: ',y_sapata) - - print('wx: ',wx) - print('wy: ',wy) - print('mw_x: ',mw_x) - print('mw_y: ',mw_y) - print('tensao_max_sapata: ',tensao_max_sapata) - print('tensao_min_sapata: ',tensao_min_sapata) - print('nk_equiv: ',nk_equiv) - print('ca_sapata: ',ca_sapata) - print('cb_sapata: ',cb_sapata) - print('h0a: ',h0a) - print('h0b: ',h0b) - print('h_mincis: ',h_mincis) - #print('h0: ',h0) - print('h_total',h_total) - print('-------------------------------------\n') - - #-------------------------------------- saida dos dados -------------------------------------------------- - self.lineEdit_11.setText(str(h_total)) - #self.lineEdit_12.setText(str(h0)) - - self.lineEdit_15.setText(str(area_sapata)) - self.lineEdit_16.setText(str(round(wx, ndigits=6))) - self.lineEdit_17.setText(str(round(wy, ndigits=6))) - self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) - self.lineEdit_19.setText(str(round(tensao_max_sapata/1000000, ndigits=4))) - self.lineEdit_20.setText(str(round(tensao_min_sapata/1000000, ndigits=4))) - self.lineEdit_21.setText(str(round(ca_sapata*100, ndigits=4))) - self.lineEdit_22.setText(str(round(cb_sapata*100, ndigits=4))) - - self.lineEdit_23.setText(str(round(h_rig_x*100, ndigits=4))) - self.lineEdit_24.setText(str(round(h_rig_y*100, ndigits=4))) - self.lineEdit_25.setText(str(round(h_mincis*100, ndigits=4))) - self.lineEdit_26.setText(str(round(h0a*100, ndigits=4))) - self.lineEdit_28.setText(str(round(h0b*100, ndigits=4))) - self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) - - self.lineEdit_14.setText(str(round(tracao_x_sapata/1000, ndigits=4))) - self.lineEdit_29.setText(str(round(tracao_y_sapata/1000, ndigits=4))) - self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) - self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) - - self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) - self.lineEdit_33.setText(str(round(as_x_min_laje*1000000, ndigits=4))) - self.lineEdit_34.setText(str(round(as_y_min_laje*1000000, ndigits=4))) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - - def gerar_dim_sapata(self): - - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - - - if (nk != 0 and x_pilar != 0 and y_pilar != 0 and tensao_adm_solo != 0 and fator_solo != 0): - - fck_sapata = float(self.comboBox.currentText()) - fcd_sapata = fck_sapata / 1.4 - fyk_sapata = float(self.comboBox_2.currentText()) - fyd_sapata = fyk_sapata / 1.15 - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - angulo_dissp_sapata = float(self.spinBox.value()) - - angulo_dissp_sapata = (angulo_dissp_sapata / 180)* 3.14 - - x_pilar = float(self.lineEdit.text())/100 - y_pilar = float(self.lineEdit_2.text())/100 - - area_sapata = round(fator_solo * ((nk*1000)/(tensao_adm_solo*1000000)),ndigits=6) - - y_sapata = 0.5*(y_pilar - x_pilar) + math.sqrt(0.25*((y_pilar - x_pilar)**2)+area_sapata) - - x_sapata = area_sapata/y_sapata - - if (momento_x_sapata != 0 and momento_y_sapata == 0) or (momento_x_sapata == 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.05 - elif (momento_x_sapata != 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.103 - else: - fator_acrescimo_dimensoes = 1.0 - - x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) - y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) - - if x_sapata < 0.6: - x_sapata = 0.6 - if y_sapata < 0.6: - y_sapata = 0.6 - print(x_sapata,'<--------------------------------------------------') - wx = x_sapata * (y_sapata**2)/6 - wy = y_sapata * (x_sapata**2)/6 - - mw_x = (momento_x_sapata/wx)*1000 - mw_y = (momento_y_sapata/wy)*1000 - - tensao_sapata = (fator_solo*nk*1000)/(x_sapata*y_sapata) - tensao_max_sapata = tensao_sapata + mw_x + mw_y - tensao_min_sapata = tensao_sapata - mw_x - mw_y - - x_sapata = self.arredondar_cinco(x_sapata) - y_sapata = self.arredondar_cinco(y_sapata) - if x_sapata < 0.6: - x_sapata = 0.6 - if y_sapata < 0.6: - y_sapata = 0.6 - - nk_equiv = (x_sapata * y_sapata * tensao_max_sapata)/fator_solo - - ca_sapata = (x_sapata - x_pilar)/2 - cb_sapata = (y_sapata - y_pilar)/2 - h_rig_x = 2/3 * ca_sapata - h_rig_y = 2/3 * cb_sapata - - h_total = h_rig_x - if h_total < h_rig_y: - h_total = h_rig_y - - h_mincis = (1.4 * nk_equiv)/(2*(x_pilar+y_pilar)*0.27*(1-(fck_sapata/250))*(fcd_sapata*1000000)) - if h_mincis < 0.40: - h_mincis = 0.40 - h_mincis = round(h_mincis, ndigits=4) - - if h_total < h_mincis: - h_total = h_mincis - - h_total = self.arredondar_cinco(h_total) - - h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) - h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) - h0_prerrogativo = h_total/3 - tangente_angulo = math.tan(angulo_dissp_sapata) - h0 = round(h0a, ndigits=2) - if h0a < h0b: - h0 = round(h0b, ndigits=2) - elif h0b < h0_prerrogativo: - h0 = h0_prerrogativo - if h0 < 0.25: - h0 = 0.25 - h0 = self.arredondar_cinco(h0) - - volume_concreto_sapata = ((h_total-h0)/3*(x_sapata*y_sapata+x_pilar*y_pilar+math.sqrt(x_sapata*y_sapata*x_pilar*y_pilar)))+(x_sapata*y_sapata*h0) - - braco_alavanca_sapata = h_total - 0.05 - - tracao_x_sapata = 1.1 * nk_equiv * (x_sapata - x_pilar)/(8 * braco_alavanca_sapata) - tracao_y_sapata = 1.1 * nk_equiv * (y_sapata - y_pilar)/(8 * braco_alavanca_sapata) - as_x_sapata = (1.4 * tracao_x_sapata)/(fyd_sapata) - as_y_sapata = (1.4 * tracao_y_sapata)/fyd_sapata - - taxa_aco_sapata = (0.078 * (fck_sapata)**(2/3))/fyd_sapata - - if taxa_aco_sapata <= 0.0015: - taxa_aco_sapata = 0.0015 - - as_x_min_laje = 0.67 * taxa_aco_sapata * h_total * x_sapata - as_y_min_laje = 0.67 * taxa_aco_sapata * h_total * y_sapata - - print('x_sapata: ',x_sapata) - print('y_sapata: ',y_sapata) - - print('wx: ',wx) - print('wy: ',wy) - print('mw_x: ',mw_x) - print('mw_y: ',mw_y) - print('tensao_max_sapata: ',tensao_max_sapata) - print('tensao_min_sapata: ',tensao_min_sapata) - print('nk_equiv: ',nk_equiv) - print('ca_sapata: ',ca_sapata) - print('cb_sapata: ',cb_sapata) - print('h0a: ',h0a) - print('h0b: ',h0b) - print('h_mincis: ',h_mincis) - print('h0: ',h0) - print('tangente_angulo: ',tangente_angulo) - print('----------') - print('h_total: ',h_total) - print('tracao_x_sapata: ',tracao_x_sapata) - print('tracao_y_sapata: ',tracao_y_sapata) - print('as_x_sapata: ',as_x_sapata) - print('as_y_sapata: ',as_y_sapata) - print('taxa_aco_sapata: ',taxa_aco_sapata) - print('as_x_min_laje: ',as_x_min_laje) - print('as_y_min_laje: ',as_y_min_laje) - print('-------------------------------------\n') - #------------------------------ saida de dados --------------------------------------------- - self.lineEdit_9.setText(str(y_sapata)) - self.lineEdit_10.setText(str(x_sapata)) - self.lineEdit_15.setText(str(area_sapata)) - - self.lineEdit_11.setText(str(round(h_total, ndigits=4))) - self.lineEdit_12.setText(str(round(h0, ndigits=4))) - - - self.lineEdit_15.setText(str(area_sapata)) - self.lineEdit_16.setText(str(round(wx, ndigits=6))) - self.lineEdit_17.setText(str(round(wy, ndigits=6))) - self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) - self.lineEdit_19.setText(str(round(tensao_max_sapata/1000000, ndigits=4))) - self.lineEdit_20.setText(str(round(tensao_min_sapata/1000000, ndigits=4))) - self.lineEdit_21.setText(str(round(ca_sapata*100, ndigits=4))) - self.lineEdit_22.setText(str(round(cb_sapata*100, ndigits=4))) - - self.lineEdit_23.setText(str(round(h_rig_x*100, ndigits=4))) - self.lineEdit_24.setText(str(round(h_rig_y*100, ndigits=4))) - self.lineEdit_25.setText(str(round(h_mincis*100, ndigits=4))) - self.lineEdit_26.setText(str(round(h0a*100, ndigits=4))) - self.lineEdit_28.setText(str(round(h0b*100, ndigits=4))) - self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) - - self.lineEdit_14.setText(str(round(tracao_x_sapata/1000, ndigits=4))) - self.lineEdit_29.setText(str(round(tracao_y_sapata/1000, ndigits=4))) - self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) - self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) - - self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) - self.lineEdit_33.setText(str(round(as_x_min_laje*1000000, ndigits=4))) - self.lineEdit_34.setText(str(round(as_y_min_laje*1000000, ndigits=4))) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - -class App2(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.setGeometry(400, 100, 200, 200) - self.editor = QtWidgets.QTextEdit('Achou', self) - self.editor.setGeometry(20, 20, 160, 160) - -#---------------------------------------------- Janelas de Detalhamento ---------------------------------------------------- -tabela_bitolas_ferro = [ - [6.3, 31.17], - [8, 50.26], - [10, 78.53], - [12.5, 122.71], - [16, 201.06], - [20, 314.15], - [25, 490.87], - [32, 804.24], - [40, 1256.63] - ] - -'''class Detalhar_viga(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('detalhamento_vigas.ui',self) - self.setWindowTitle('Navier - Vigas - Detalhamento') - def load_signals(self): - print('inicializado') - self.pushButton.clicked.connect(self.calcular_area) - self.pushButton_2.clicked.connect(self.limpar_detalhamento) - - #pg.plot(x=[0,1,2,3,4], y=[0,1,2,3,4]**2 ) - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(5, QtWidgets.QHeaderView.Stretch) - - self.widget.setTitle('Nº barras/Bitola') - self.widget.showGrid(x=True,y=True,alpha=1) - - - def calcular_area(self): - area_aco = self.lineEdit.text() - base = self.lineEdit_2.text() - altura = self.lineEdit_3.text() - d_agreg = self.lineEdit_4.text() - - if (area_aco != '0' and base != '0' and altura != '0' and d_agreg != '0'): - - self.widget.clear() - area_aco = float(self.lineEdit.text()) - base = float(self.lineEdit_2.text()) - altura = float(self.lineEdit_3.text()) - cobrimento = float(self.comboBox.currentText()) - x = [] - y = [] - z = [] - cont = 0 - for i in tabela_bitolas_ferro: - n_barras = float(area_aco/i[1]) - print('bitola: ',i[0],' - nº barras: ',n_barras) - - self.tableWidget.setItem(cont,2, QTableWidgetItem(str(round(n_barras, ndigits=2)))) - self.tableWidget.setItem(cont,3, QTableWidgetItem(str(round(n_barras +0.5)+1))) - - x.append(i[0]) - y.append(round(n_barras +0.5)+1) - - bitola = x[cont] - n_barras = (round(n_barras +0.5)+1) - - espass_horizontal = (round(base - 2*(cobrimento+0.5) - n_barras*(bitola/10), ndigits=2))/(n_barras-1) - z.append(round(espass_horizontal,ndigits=2)) - self.tableWidget.setItem(cont,4, QTableWidgetItem(str(espass_horizontal))) - - cont +=1 - - print(x) - print(y) - print(z) - - self.widget.plot(x=x,y=y,pen=(3)) - - self.calcular_espacamentos() - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - def calcular_espacamentos(self): - bitola = float(self.comboBox_2.currentText()) - d_agreg = float(self.lineEdit_4.text()) - - s_horizontal = max(2, (bitola/10), 1.2*d_agreg) - s_vertical = max(2, (bitola/10), 0.5*d_agreg) - - #------------------------------- saida de dados ---------------------------------- - self.lineEdit_5.setText(str(s_horizontal)) - self.lineEdit_6.setText(str(s_vertical)) - - def limpar_detalhamento(self): - self.widget.clear() - self.lineEdit.setText(str('0')) - self.lineEdit_2.setText(str('0')) - self.lineEdit_3.setText(str('0')) - self.lineEdit_5.setText(str('0')) - self.lineEdit_4.setText(str('0')) -''' - -tabela_bitolas_ferro = [ - [6.3, 31.17], - [8, 50.26], - [10, 78.53], - [12.5, 122.71], - [16, 201.06], - [20, 314.15], - [25, 490.87], - [32, 804.24], - [40, 1256.63] - ] -info_viga = ['95','12','45','40','1.9'] - -class Detalhar_viga(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('detalhamento_vigas_alt.ui',self) - self.setWindowTitle('Navier - Vigas - Detalhamento') - #self.show() - def load_signals(self): - print('inicializado') - self.pushButton.clicked.connect(self.calcular_area) - #self.pushButton.clicked.connect(self.calcular_estribos) - self.pushButton_2.clicked.connect(self.limpar_detalhamento) - self.pushButton_3.clicked.connect(self.recuperarValores) - - - #pg.plot(x=[0,1,2,3,4], y=[0,1,2,3,4]**2 ) - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(5, QtWidgets.QHeaderView.Stretch) - - self.widget.setTitle('nº barras/Bitola') - self.widget.showGrid(x=True,y=True,alpha=1) - - #if '0' not in info_viga: - # self.recuperarValores() - - def calcular_estribos(self): - vsw = self.lineEdit_14.text() - fyk_estribo = self.comboBox_2.currentText() - tramos = self.lineEdit_15.text() - - if (vsw != '0' and tramos != '0'): - vsw = float(self.lineEdit_14.text()) - bitola_estribo = float(self.comboBox.currentText()) - fyk_estribo = float(self.comboBox_2.currentText()) - tramos = float(self.lineEdit_15.text()) - d = float(self.lineEdit_13.text()) - - area_bitola = (3.14*((bitola_estribo/1000)**2)/4) - - print(vsw) - print(bitola_estribo) - print(tramos) - print(fyk_estribo) - print(area_bitola) - - - s_estribo = ((tramos * area_bitola * 0.9 * (d/100) * (fyk_estribo*100000/1.15))/vsw*1000)/100 - s_estribo = round(s_estribo, ndigits=3) - - self.lineEdit.setText(str(s_estribo)) - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes para o cálculo dos Estribos!") - - - def recuperarValores(self): - area_aco = info_viga[0] - base = info_viga[1] - altura = info_viga[2] - d = info_viga[3] - d_agreg = info_viga[4] - - self.lineEdit_11.setText(area_aco) - self.lineEdit_10.setText(base) - self.lineEdit_9.setText(altura) - self.lineEdit_12.setText(d_agreg) - self.lineEdit_13.setText(d) - - def calcular_area(self): - area_aco = self.lineEdit_11.text() - base = self.lineEdit_10.text() - altura = self.lineEdit_9.text() - d_agreg = self.lineEdit_12.text() - d = self.lineEdit_13.text() - - if (area_aco != '0' and base != '0' and altura != '0' and d_agreg != '0' and d != '0'): - - self.widget.clear() - area_aco = float(self.lineEdit_11.text()) - base = float(self.lineEdit_10.text()) - altura = float(self.lineEdit_9.text()) - cobrimento = float(self.comboBox_3.currentText()) - bitola_estribo = float(self.comboBox.currentText()) - x = [] - y = [] - z = [] - cont = 0 - for i in tabela_bitolas_ferro: - n_barras = float(area_aco/i[1]) - print('bitola: ',i[0],' - nº barras: ',n_barras) - - self.tableWidget.setItem(cont,2, QTableWidgetItem(str(round(n_barras, ndigits=2)))) - self.tableWidget.setItem(cont,3, QTableWidgetItem(str(round(n_barras +0.5)+1))) - - x.append(i[0]) - y.append(round(n_barras +0.5)+1) - - bitola = x[cont] - n_barras = (round(n_barras +0.5)+1) - - espass_horizontal = (round(base - 2*(cobrimento+bitola_estribo/10) - n_barras*(bitola/10), ndigits=2))/(n_barras-1) - - z.append(round(espass_horizontal,ndigits=2)) - self.tableWidget.setItem(cont,4, QTableWidgetItem(str(espass_horizontal))) - - print('base:',base) - print('cobrimento:',cobrimento) - print('bitola_estribo:',bitola_estribo) - print('n_barras:',n_barras) - - cont +=1 - - #print(x) - #print(y) - #print(z) - - self.widget.plot(x=x,y=y,pen=(3)) - - self.calcular_espacamentos() - self.calcular_estribos() - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - def calcular_espacamentos(self): - bitola = float(self.comboBox_4.currentText()) - d_agreg = float(self.lineEdit_12.text()) - - s_horizontal = max(2, (bitola/10), 1.2*d_agreg) - s_vertical = max(2, (bitola/10), 0.5*d_agreg) - - #------------------------------- saida de dados ---------------------------------- - self.lineEdit_7.setText(str(s_horizontal)) - self.lineEdit_8.setText(str(s_vertical)) - - def limpar_detalhamento(self): - self.widget.clear() - self.lineEdit_11.setText(str('0')) - self.lineEdit_9.setText(str('0')) - self.lineEdit_10.setText(str('0')) - self.lineEdit_7.setText(str('0')) - self.lineEdit_8.setText(str('0')) - - - -class Tabela_Bitolas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('bitolas_ferros.ui',self) - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - self.setWindowTitle('Navier - Tabela de Bitolas') - -class Tabela_Classe_Agressividade(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('class_agres.ui',self) - self.setWindowTitle('Navier - Classes de Agressividade e Cobrimentos Mínimos') - def load_signals(self): - print('inicializado') - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - - self.tableWidget.setSpan(0, 0, 1, 4) - - header_2 = self.tableWidget_2.horizontalHeader() - header_2.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - - self.tableWidget_2.setSpan(0, 0, 2, 1) - self.tableWidget_2.setSpan(0, 1, 2, 1) - self.tableWidget_2.setSpan(0, 3, 2, 1) - - self.tableWidget_2.setSpan(3, 0, 2, 1) - self.tableWidget_2.setSpan(3, 1, 2, 1) - self.tableWidget_2.setSpan(3, 3, 2, 1) - - self.tableWidget_2.setSpan(5, 0, 2, 1) - self.tableWidget_2.setSpan(5, 1, 2, 1) - self.tableWidget_2.setSpan(5, 3, 2, 1) - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - inicio = Inicio() - vigas = Vigas() - detalhar_vigas = Detalhar_viga() - pilares = Pilares() - pilares_areas_aco = Pilar_area_aco() - #pilares.show() - #vigas.show() - lajes = Lajes() - #lajes.show() - sapatas = Sapatas() - #sapatas.show() - carga_adicional = Carga_Adicional() - tabela_classe_agressividade = Tabela_Classe_Agressividade() - tabela_bitolas = Tabela_Bitolas() - - app.exec_() \ No newline at end of file diff --git a/inicial_new.py b/inicial_new.py deleted file mode 100644 index 5659a9a..0000000 --- a/inicial_new.py +++ /dev/null @@ -1,3040 +0,0 @@ - - -import sys -import os -import math - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox, QTableWidget, QTableWidgetItem -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -import pyqtgraph as pg - - -#import marcus - -tabela_marcus = 'tabela_marcus.pdf' -abaco_normal = 'abaco_normal.pdf' -abaco_obliqua = 'abaco_obliqua.pdf' - - -import numpy as np - -marcus_caso1 = np.array([ -[0.50, 0.059, 169.18, 42.29 ], -[0.51, 0.063, 158.42, 41.20 ], -[0.52, 0.068, 148.64, 40.19 ], -[0.53, 0.073, 139.70, 39.24 ], -[0.54, 0.078, 131.55, 38.36 ], -[0.55, 0.084, 124.10, 37.53 ], -[0.56, 0.089, 117.25, 36.77 ], -[0.57, 0.095, 110.96, 36.05 ], -[0.58, 0.102, 105.19, 35.38 ], -[0.59, 0.108, 99.86, 34.76 ], -[0.60, 0.115, 94.94, 34.18 ], -[0.61, 0.122, 90.40, 33.64 ], -[0.62, 0.129, 86.20, 33.13 ], -[0.63, 0.136, 82.30, 32.66 ], -[0.64, 0.144, 78.68, 32.23 ], -[0.65, 0.151, 75.32, 31.82 ], -[0.66, 0.159, 72.19, 31.44 ], -[0.67, 0.168, 69.27, 31.09 ], -[0.68, 0.176, 66.54, 30.99 ], -[0.69, 0.185, 63.99, 30.46 ], -[0.70, 0.194, 61.60, 30.18 ], -[0.71, 0.203, 59.37, 29.93 ], -[0.72, 0.212, 57.27, 29.69 ], -[0.73, 0.221, 55.29, 29.47 ], -[0.74, 0.231, 53.44, 29.26 ], -[0.75, 0.240, 51.69, 29.07 ], -[0.76, 0.250, 50.04, 28.90 ], -[0.77, 0.260, 48.48, 28.74 ], -[0.78, 0.270, 47.01, 28.60 ], -[0.79, 0.280, 45.61, 28.46 ], -[0.80, 0.290, 44.29, 28.34 ], -[0.81, 0.301, 43.03, 28.23 ], -[0.82, 0.311, 41.84, 28.13 ], -[0.83, 0.322, 40.70, 28.04 ], -[0.84, 0.332, 39.62, 27.96 ], -[0.85, 0.343, 38.59, 27.88 ], -[0.86, 0.354, 37.61, 27.81 ], -[0.87, 0.364, 36.67, 27.75 ], -[0.88, 0.375, 35.77, 27.70 ], -[0.89, 0.385, 34.91, 27.65 ], -[0.90, 0.396, 34.09, 27.61 ], -[0.91, 0.407, 33.30, 27.57 ], -[0.92, 0.417, 32.54, 27.54 ], -[0.93, 0.428, 31.81, 27.51 ], -[0.94, 0.438, 31.11, 27.49 ], -[0.95, 0.449, 30.44, 27.47 ], -[0.96, 0.459, 29.79, 27.45 ], -[0.97, 0.469, 29.17, 27.44 ], -[0.98, 0.480, 28.57, 27.43 ], -[0.99, 0.490, 27.99, 27.43 ], -[1.00, 0.500, 27.43, 27.43 ], -[1.00, 0.500, 27.43, 27.43], -[1.01, 0.510, 26.89, 27.43], -[1.02, 0.520, 26.37, 27.43], -[1.03, 0.529, 25.87, 27.44], -[1.04, 0.539, 25.38, 27.45], -[1.05, 0.549, 24.91, 27.47], -[1.06, 0.558, 24.46, 27.48], -[1.07, 0.567, 24.02, 27.50], -[1.08, 0.576, 23.60, 27.52], -[1.09, 0.585, 23.19, 27.55], -[1.10, 0.594, 22.79, 27.57], -[1.11, 0.603, 22.41, 27.61], -[1.12, 0.611, 22.03, 27.64], -[1.13, 0.620, 21.67, 27.67], -[1.14, 0.628, 21.32, 27.71], -[1.15, 0.636, 20.99, 27.76], -[1.16, 0.644, 20.66, 27.80], -[1.17, 0.652, 20.34, 27.85], -[1.18, 0.660, 20.04, 27.90], -[1.19, 0.667, 19.74, 27.95], -[1.20, 0.675, 19.45, 28.01], -[1.21, 0.682, 19.17, 28.07], -[1.22, 0.689, 18.90, 28.13], -[1.23, 0.696, 18.64, 28.20], -[1.24, 0.703, 18.39, 28.27], -[1.25, 0.709, 18.14, 28.34], -[1.26, 0.716, 17.90, 28.42], -[1.27, 0.722, 17.67, 28.50], -[1.28, 0.729, 17.44, 28.58], -[1.29, 0.735, 17.23, 28.67], -[1.30, 0.741, 17.01, 28.76], -[1.31, 0.746, 16.81, 28.85], -[1.32, 0.752, 16.61, 28.94], -[1.33, 0.758, 16.42, 29.04], -[1.34, 0.763, 16.23, 29.14], -[1.35, 0.769, 16.05, 29.25], -[1.36, 0.774, 15.87, 29.36], -[1.37, 0.779, 15.70, 29.47], -[1.38, 0.784, 15.53, 29.58], -[1.39, 0.789, 15.37, 29.70], -[1.40, 0.793, 15.21, 29.82], -[1.41, 0.798, 15.06, 29.95], -[1.42, 0.803, 14.91, 30.07], -[1.43, 0.807, 14.77, 30.20], -[1.44, 0.811, 14.63, 30.34], -[1.45, 0.815, 14.49, 30.47], -[1.46, 0.820, 14.36, 30.61], -[1.47, 0.824, 14.23, 30.76], -[1.48, 0.827, 14.11, 30.90], -[1.49, 0.831, 13.99, 31.05], -[1.50, 0.835, 13.87, 31.21], -[1.50, 0.835, 13.87, 31.21], -[1.51, 0.839, 13.75, 31.36], -[1.52, 0.842, 13.64, 31.52], -[1.53, 0.846, 13.53, 31.68], -[1.54, 0.849, 13.43, 31.85], -[1.55, 0.852, 13.32, 32.01], -[1.56, 0.855, 13.22, 32.18], -[1.57, 0.859, 13.13, 32.36], -[1.58, 0.862, 13.03, 32.53], -[1.59, 0.865, 12.94, 32.71], -[1.60, 0.868, 12.85, 32.80], -[1.61, 0.870, 12.76, 33.08], -[1.62, 0.873, 12.68, 33.27], -[1.63, 0.876, 12.59, 33.46], -[1.64, 0.878, 12.51, 33.65], -[1.65, 0.881, 12.43, 33.85], -[1.66, 0.884, 12.35, 34.04], -[1.67, 0.886, 12.28, 34.24], -[1.68, 0.888, 12.21, 34.45], -[1.69, 0.891, 12.13, 34.65], -[1.70, 0.893, 12.06, 34.87], -[1.71, 0.895, 12.00, 35.08], -[1.72, 0.897, 11.93, 35.29], -[1.73, 0.899, 11.86, 35.51], -[1.74, 0.902, 11.80, 35.73], -[1.75, 0.904, 11.74, 35.95], -[1.76, 0.906, 11.68, 36.17], -[1.77, 0.907, 11.62, 36.40], -[1.78, 0.909, 11.56, 36.63], -[1.79, 0.911, 11.51, 36.86], -[1.80, 0.913, 11.45, 37.10], -[1.81, 0.915, 11.40, 37.33], -[1.82, 0.916, 11.34, 37.58], -[1.83, 0.918, 11.29, 37.82], -[1.84, 0.920, 11.24, 38.06], -[1.85, 0.921, 11.19, 38.31], -[1.86, 0.923, 11.15, 38.56], -[1.87, 0.924, 11.10, 38.81], -[1.88, 0.926, 11.05, 39.07], -[1.89, 0.927, 11.01, 39.32], -[1.90, 0.929, 10.96, 39.58], -[1.91, 0.930, 10.92, 39.84], -[1.92, 0.931, 10.88, 40.10], -[1.93, 0.933, 10.84, 40.37], -[1.94, 0.934, 10.80, 40.63], -[1.95, 0.935, 10.76, 40.91], -[1.96, 0.936, 10.72, 41.18], -[1.97, 0.938, 10.68, 41.45], -[1.98, 0.939, 10.64, 41.73], -[1.99, 0.940, 10.60, 42.01], -[2.00, 0.941, 10.57, 42.29],]) - - - -marcus_caso2 = np.array([ -[0.50, 0.135, 140.93, 59.20, 45.13], -[0.51, 0.145, 132.95, 55.31, 44.11], -[0.52, 0.154, 125.68, 51.77, 43.22], -[0.53, 0.165, 119.03, 48.56, 42.38], -[0.54, 0.175, 112.94, 45.64, 41.60], -[0.55, 0.186, 107.35, 42.97, 40.88], -[0.56, 0.197, 102.20, 40.54, 40.21], -[0.57, 0.209, 97.46, 38.32, 39.60], -[0.58, 0.220, 93.08, 36.28, 39.03], -[0.59, 0.232, 89.03, 34.41, 38.51], -[0.60, 0.245, 85.28, 32.69, 38.04], -[0.61, 0.257, 81.79, 31.11, 37.60], -[0.62, 0.270, 78.55, 29.66, 37.20], -[0.63, 0.282, 75.53, 28.31, 36.83], -[0.64, 0.295, 72.71, 27.07, 36.49], -[0.65, 0.308, 70.07, 25.93, 36.19], -[0.66, 0.322, 67.60, 24.86, 35.92], -[0.67, 0.335, 65.28, 23.88, 35.67], -[0.68, 0.348, 63.10, 22.97, 35.44], -[0.69, 0.362, 61.05, 22.12, 35.25], -[0.70, 0.375, 59.12, 21.33, 35.07], -[0.71, 0.388, 57.30, 20.59, 34.92], -[0.72, 0.402, 55.58, 19.91, 34.78], -[0.73, 0.415, 53.95, 19.27, 34.67], -[0.74, 0.428, 52.41, 18.67, 34.57], -[0.75, 0.442, 50.94, 18.11, 34.50], -[0.76, 0.455, 49.56, 17.59, 34.44], -[0.77, 0.468, 48.24, 17.10, 34.39], -[0.78, 0.481, 46.98, 16.64, 34.36], -[0.79, 0.493, 45.79, 16.21, 34.35], -[0.80, 0.506, 44.65, 15.81, 34.35], -[0.81, 0.518, 43.56, 15.43, 34.36], -[0.82, 0.531, 42.53, 15.08, 34.39], -[0.83, 0.543, 41.54, 14.74, 34.42], -[0.84, 0.554, 40.60, 14.43, 34.48], -[0.85, 0.566, 39.69, 14.13, 34.54], -[0.86, 0.578, 38.83, 13.85, 34.62], -[0.87, 0.589, 38.01, 13.59, 34.70], -[0.88, 0.600, 97.22, 13.34, 34.80], -[0.89, 0.611, 96.46, 13.10, 34.91], -[0.90, 0.621, 95.73, 12.88, 35.03], -[0.91, 0.632, 35.04, 12.67, 35.16], -[0.92, 0.642, 34.37, 12.47, 35.29], -[0.93, 0.652, 33.73, 12.28, 35.44], -[0.94, 0.661, 33.12, 12.10, 35.60], -[0.95, 0.671, 32.53, 11.93, 35.77], -[0.96, 0.680, 31.97, 11.77, 35.95], -[0.97, 0.689, 31.43, 11.61, 36.13], -[0.98, 0.697, 30.91, 11.47, 36.33], -[0.99, 0.706, 30.41, 11.33, 36.53], -[1.00, 0.714, 29.93, 11.20, 36.74], -[ 1.00, 0.714, 29.93, 11.20, 36], -[ 1.02, 0.730, 29.02, 10.96, 37], -[ 1.04, 0.745, 28.18, 10.73, 37], -[ 1.06, 0.759, 27.41, 10.53, 38], -[ 1.08, 0.773, 26.69, 10.35, 38], -[ 1.10, 0.785, 26.02, 10.18, 39], -[ 1.12, 0.797, 25.40, 10.03, 39], -[1.14, 0.808, 24.83, 9.89, 40.55], -[1.16, 0.819, 24.29, 9.77, 41.21], -[1.18, 0.829, 23.79, 9.65, 41.90], -[1.20, 0.838, 23.33, 9.45, 42.62], -[1.22, 0.847, 22.89, 9.44, 43.36], -[1.24, 0.855, 22.49, 9.35, 44.13], -[1.26, 0.863, 22.11, 9.27, 44.93], -[1.28, 0.870, 21.75, 9.19, 45.75], -[1.30, 0.877, 21.42, 9.12, 46.59], -[1.32, 0.884, 21.11, 9.05, 47.46], -[1.34, 0.889, 20.82, 8.99, 48.34], -[1.36, 0.895, 20.54, 8.93, 49.26], -[1.38, 0.901, 20.28, 8.88, 50.20], -[1.40, 0.906, 20.04, 8.83, 51.15], -[1.42, 0.910, 19.81, 8.79, 52.14], -[1.44, 0.915, 19.59, 8.74, 53.14], -[1.46, 0.919, 19.39, 8.70, 54.16], -[1.48, 0.923, 19.20, 8.67, 55.21], -[1.50, 0.927, 19.01, 8.63, 56.28], -[1.52, 0.930, 18.84, 8.60, 57.36], -[1.54, 0.934, 18.68, 8.57, 58.47], -[1.56, 0.937, 18.52, 8.54, 59.60], -[1.58, 0.940, 18.37, 8.51, 60.74], -[1.60, 0.942, 18.23, 8.49, 61.91], -[1.62, 0.945, 18.10, 8.46, 63.11], -[1.64, 0.948, 17.97, 8.44, 64.31], -[1.66, 0.950, 17.85, 8.42, 65.53], -[1.68, 0.952, 17.74, 8.40, 66.78], -[1.70, 0.954, 17.63, 8.38, 68.04], -[1.72, 0.956, 17.52, 8.36, 69.33], -[1.74, 0.958, 17.42, 8.35, 70.63], -[1.76, 0.960, 17.33, 8.33, 71.96], -[1.78, 0.962, 17.25, 8.32, 73.30], -[1.80, 0.963, 17.15, 8.30, 74.65], -[1.82, 0.965, 17.07, 8.29, 76.03], -[1.84, 0.966, 16.99, 8.28, 77.42], -[1.86, 0.968, 16.91, 8.27, 78.85], -[1.88, 0.969, 16.84, 8.26, 80.27], -[1.90, 0.970, 16.77, 8.24, 81.73], -[1.92, 0.971, 16.70, 8.23, 83.18], -[1.94, 0.972, 16.64, 8.23, 84.67], -[1.96, 0.974, 16.57, 8.22, 86.19], -[1.98, 0.975, 16.51, 8.21, 87.70], -[2.00, 0.976, 16.46, 8.20, 89.22],]) - - -marcus_caso3 = np.array([ -[1.00, 0.500, 37.14, 16.00, 37.14, 16.00], -[1.01, 0.510, 36.42, 15.69, 37.15, 16.00], -[1.02, 0.520, 35.72, 15.39, 37.16, 16.01], -[1.03, 0.529, 35.05, 15.11, 37.19, 16.03], -[1.04, 0.539, 34.42, 14.84, 37.22, 16.05], -[1.05, 0.549, 33.81, 14.58, 37.27, 16.08], -[1.06, 0.558, 33.21, 14.34, 27.32, 16.11], -[1.07, 0.567, 32.65, 14.10, 37.38, 16.15], -[1.08, 0.576, 32.11, 13.88, 37.45, 16.19], -[1.09, 0.585, 31.59, 13.67, 37.53, 16.24], -[1.10, 0.594, 31.09, 13.46, 37.61, 16.29], -[1.11, 0.603, 30.61, 13.27, 37.71, 16.35], -[1.12, 0.611, 30.14, 13.08, 37.81, 16.41], -[1.13, 0.620, 29.70, 12.91, 37.92, 16.48], -[1.14, 0.628, 29.27, 12.74, 38.04, 16.55], -[1.15, 0.636, 28.85, 12.57, 38.16, 16.63], -[1.16, 0.644, 28.46, 12.42, 38.29, 16.71], -[1.17, 0.652, 28.08, 12.27, 38.43, 16.79], -[1.18, 0.660, 27.71, 12.13, 38.58, 16.88], -[1.19, 0.667, 27.35, 11.99, 38.73, 16.98], -[1.20, 0.674, 27.00, 11.85, 38.89, 17.07], -[1.21, 0.682, 26.68, 11.73, 39.06, 17.18], -[1.22, 0.690, 26.36, 11.61, 39.23, 17.28], -[1.23, 0.696, 26.05, 11.49, 39.41, 17.39], -[1.24, 0.703, 25.75, 11.38, 39.59, 17.50], -[1.25, 0.709, 25.46, 11.28, 39.78, 17.62], -[1.26, 0.716, 25.18, 11.17, 39.98, 17.74], -[1.27, 0.722, 24.92, 11.07, 40.19, 17.86], -[1.28, 0.729, 24.66, 10.98, 40.40, 17.99], -[1.29, 0.735, 24.40, 10.89, 40.61, 18.12], -[1.30, 0.741, 24.16, 10.80, 40.83, 18.25], -[1.31, 0.746, 23.93, 10.72, 41.06, 18.39], -[1.32, 0.752, 23.70, 10.63, 41.29, 18.53], -[1.33, 0.758, 23.48, 10.56, 41.53, 18.67], -[1.34, 0.763, 23.26, 10.48, 41.77, 18.82], -[1.35, 0.769, 23.06, 10.41, 42.02, 18.97], -[1.36, 0.774, 22.86, 10.34, 42.28, 19.12], -[1.37, 0.779, 22.66, 10.27, 42.54, 19.28], -[1.38, 0.784, 22.48, 10.21, 42.80, 19.43], -[1.39, 0.789, 22.29, 10.14, 43.07, 19.60], -[1.40, 0.793, 22.12, 10.08, 43.35, 19.76], -[1.41, 0.798, 21.95, 10.02, 43.63, 19.93], -[1.42, 0.803, 21.78, 9.97, 43.92, 20.10], -[1.43, 0.807, 21.62, 9.91, 44.21, 20.27], -[1.44, 0.811, 21.46, 9.86, 44.50, 20.45], -[1.45, 0.815, 21.31, 9.81, 44.80, 20.62], -[1.46, 0.820, 21.16, 9.76, 45.11, 20.80], -[1.47, 0.824, 21.02, 9.71, 45.42, 20.99], -[1.48, 0.827, 20.88, 9.67, 45.74, 21.17], -[1.49, 0.831, 20.75, 9.62, 46.06, 21.36], -[1.50, 0.835, 20.61, 9.38, 46.38, 21.55], -[1.50, 0.835, 20.61, 9.58, 46.38, 21.55], -[1.51, 0.839, 20.49, 9.54, 46.71, 21.75], -[1.52, 0.842, 20.36, 9.50, 47.05, 21.94], -[1.53, 0.846, 20.24, 9.46, 47.38, 22.14], -[1.54, 0.849, 20.12, 9.42, 47.73, 22.34], -[1.55, 0.852, 20.01, 9.39, 48.07, 22.55], -[1.56, 0.855, 19.90, 9.35, 48.43, 22.76], -[1.57, 0.859, 19.79, 9.32, 48.78, 22.96], -[1.58, 0.862, 19.69, 9.28, 49.14, 23.17], -[1.59, 0.865, 19.58, 9.25, 49.51, 23.09], -[1.60, 0.868, 19.48, 9.22, 49.88, 23.60], -[1.61, 0.870, 19.39, 9.19, 50.25, 23.82], -[1.62, 0.873, 19.29, 9.16, 52.63, 24.04], -[1.63, 0.876, 19.20, 9.13, 51.01, 24.26], -[1.64, 0.878, 19.11, 9.11, 51.40, 24.49], -[1.65, 0.881, 19.02, 9.08, 51.79, 24.72], -[1.66, 0.884, 18.94, 9.05, 52.19, 24.95], -[1.67, 0.886, 18.86, 9.03, 52.58, 25.18], -[1.68, 0.888, 18.77, 9.00, 52.99, 25.41], -[1.69, 0.891, 18.70, 8.98, 53.39, 25.65], -[1.70, 0.893, 18.62, 8.96, 53.81, 25.89], -[1.71, 0.895, 18.54, 8.93, 54.22, 26.13], -[1.72, 0.897, 18.47, 8.91, 54.64, 26.37], -[1.73, 0.899, 18.40, 8.89, 55.07, 26.61], -[1.74, 0.902, 18.33, 8.87, 55.49, 26.86], -[1.75, 0.904, 18.26, 8.85, 55.92, 27.11], -[1.76, 0.906, 18.18, 8.83, 56.36, 27.36], -[1.77, 0.907, 18.13, 8.81, 56.80, 27.61], -[1.78, 0.909, 18.07, 8.80, 57.24, 27.87], -[1.79, 0.911, 18.00, 8.78, 57.68, 28.13], -[1.80, 0.913, 17.94, 8.76, 58.14, 28.39], -[1.81, 0.915, 17.88, 8.74, 58.59, 28.65], -[1.82, 0.916, 17.83, 8.73, 59.05, 28.91], -[1.83, 0.918, 17.77, 8.71, 59.51, 29.18], -[1.84, 0.920, 17.72, 8.70, 59.97, 29.44], -[1.85, 0.921, 17.66, 8.68, 60.44, 29.72], -[1.86, 0.923, 17.61, 8.67, 60.92, 29.99], -[1.87, 0.924, 17.56, 8.65, 61.39, 30.26], -[1.88, 0.926, 17.51, 8.64, 61.88, 30.54], -[1.89, 0.927, 17.46, 8.63, 62.36, 30.81], -[1.90, 0.929, 17.41, 8.61, 62.85, 31.09], -[1.91, 0.930, 17.36, 8.60, 63.34, 31.38], -[1.92, 0.931, 17.32, 8.59, 63.83, 31.66], -[1.93, 0.933, 17.27, 8.58, 64.33, 31.94], -[1.94, 0.934, 17.23, 8.56, 64.83, 32.23], -[1.95, 0.935, 17.18, 8.55, 65.34, 32.52], -[1.96, 0.936, 17.14, 8.54, 65.84, 32.81], -[1.97, 0.938, 17.10, 8.53, 66.36, 33.10], -[1.98, 0.939, 17.06, 8.52, 66.88, 33.40], -[1.99, 0.940, 17.02, 8.51, 67.39, 33.70], -[2.00, 0.941, 16.93, 8.50, 67.92, 34.00],]) - - -marcus_caso5 = np.array([ -[0.50, 0.111, 246.52, 108.00, 71.43, 36.00], -[0.51, 0.119, 230.76, 100.70, 69.53, 34.92], -[0.52, 0.127, 216.51, 95.07, 67.77, 33.91], -[0.53, 0.136, 203.52, 88.05, 66.13, 32.97], -[0.54, 0.145, 191.66, 82.56, 64.60, 32.10], -[0.55, 0.155, 180.83, 77.57, 63.18, 31.29], -[0.56, 0.164, 170.91, 73.01, 61.86, 30.53], -[0.57, 0.174, 161.79, 68.84, 60.63, 29.82], -[0.58, 0.184, 153.42, 65.02, 59.49, 29.16], -[0.59, 0.195, 145.72, 61.52, 58.42, 28.55], -[0.60, 0.206, 138.61, 58.30, 57.43, 27.98], -[0.61, 0.217, 132.05, 55.34, 56.52, 27.45], -[0.62, 0.228, 125.98, 52.61, 55.67, 26.96], -[0.63, 0.239, 120.36, 50.09, 54.88, 26.51], -[0.64, 0.251, 115.15, 47.76, 54.15, 26.08], -[0.65, 0.263, 110.30, 45.61, 53.48, 25.69], -[0.66, 0.275, 105.81, 43.62, 52.85, 25.33], -[0.67, 0.287, 101.61, 41.77, 52.28, 25.00], -[0.68, 0.299, 97.70, 40.06, 51.76, 24.70], -[0.69, 0.312, 94.06, 38.47, 51.28, 24.42], -[0.70, 0.324, 90.65, 36.99, 50.84, 24.17], -[0.71, 0.337, 87.46, 35.61, 50.45, 23.93], -[0.72, 0.349, 84.48, 34.33, 50.09, 23.73], -[0.73, 0.362, 81.68, 33.13, 49.77, 23.54], -[0.74, 0.375, 82.05, 32.48, 49.05, 23.37], -[0.75, 0.387, 76.58, 30.96, 49.23, 23.22], -[0.76, 0.400, 74.26, 29.98, 49.00, 23.09], -[0.77, 0.413, 72.08, 29.07, 48.81, 22.98], -[0.78, 0.425, 70.02, 28.21, 48.65, 22.88], -[0.79, 0.438, 68.08, 27.40, 48.51, 22.80], -[0.80, 0.450, 66.24, 26.65, 48.40, 22.74], -[0.81, 0.463, 64.51, 25.94, 48.32, 22.69], -[0.82, 0.475, 62.88, 25.27, 48.26, 22.65], -[0.83, 0.487, 61.33, 24.64, 48.22, 22.63], -[0.84, 0.499, 59.86, 24.05, 48.21, 22.63], -[0.85, 0.511, 58.47, 23.49, 48.22, 22.63], -[0.86, 0.522, 57.15, 22.97, 48.25, 22.65], -[0.87, 0.543, 55.90, 22.47, 48.30, 22.68], -[0.88, 0.545, 54.71, 22.00, 48.37, 22.72], -[0.89, 0.558, 53.58, 21.56, 48.46, 22.77], -[0.90, 0.567, 52.51, 21.14, 48.57, 22.84], -[0.91, 0.578, 51.49, 20.75, 48.69, 22.91], -[0.92, 0.589, 50.51, 20.37, 48.83, 22.99], -[0.93, 0.599, 49.59, 20.02, 48.99, 23.09], -[0.94, 0.610, 48.70, 19.68, 49.17, 23.19], -[0.95, 0.620, 47.86, 19.37, 49.06, 13.30], -[0.96, 0.629, 47.06, 19.06, 49.57, 23.42], -[0.97, 0.639, 46.29, 18.78, 49.80, 23.56], -[0.98, 0.648, 45.55, 18.50, 50.04, 23.70], -[0.99, 0.658, 44.85, 18.25, 50.29, 23.84], -[1.00, 0.667, 44.18, 18.00, 50.56, 24.00], -[1.00, 0.667, 44.18, 18.00, 50.56, 24.00], -[1.02, 0.684, 42.92, 17.54, 51.14, 24.33], -[1.04, 0.700, 41.77, 17.13, 51.76, 24.70], -[1.06, 0.716, 40.71, 16.75, 52.44, 25.10], -[1.08, 0.731, 39.74, 16.41, 53.18, 25.52], -[1.10, 0.745, 38.84, 16.10, 53.95, 25.97], -[1.12, 0.759, 38.01, 15.81, 54.78, 26.45], -[1.14, 0.772, 37.25, 15.55, 55.64, 26.95], -[1.16, 0.784, 36.54, 15.31, 56.55, 27.47], -[1.18, 0.795, 35.88, 15.09, 57.50, 28.02], -[1.20, 0.806, 35.27, 14.89, 58.50, 28.59], -[1.22, 0.816, 34.70, 14.71, 59.53, 29.19], -[1.24, 0.825, 34.17, 14.54, 60.60, 29.80], -[1.26, 0.834, 33.68, 14.38, 61.71, 30.44], -[1.28, 0.843, 33.22, 14.23, 62.85, 31.10], -[1.30, 0.851, 32.79, 14.10, 64.03, 31.77], -[1.32, 0.859, 32.38, 13.98, 65.25, 32.47], -[1.34, 0.866, 32.01, 13.86, 66.50, 33.18], -[1.36, 0.872, 31.65, 13.75, 66.78, 33.92], -[1.38, 0.879, 31.02, 13.65, 69.10, 34.67], -[1.40, 0.885, 31.01, 13.56, 70.45, 35.44], -[1.42, 0.890, 30.72, 13.47, 71.83, 36.23], -[1.44, 0.896, 30.44, 13.39, 73.24, 37.03], -[1.46, 0.901, 30.18, 13.32, 74.69, 37.86], -[1.48, 0.906, 29.94, 13.25, 76.17, 38.70], -[1.50, 0.910, 29.71, 13.18, 77.67, 39.55], -[1.52, 0.914, 29.49, 13.12, 79.20, 40.43], -[1.54, 0.918, 29.28, 13.07, 80.77, 41.32], -[1.56, 0.922, 29.09, 13.01, 82.36, 12.22], -[1.58, 0.926, 28.90, 12.96, 83.98, 43.14], -[1.60, 0.929, 28.73, 12.91, 85.64, 44.08], -[1.62, 0.932, 28.56, 12.87, 87.31, 45.03], -[1.64, 0.935, 28.40, 12.83, 89.02, 46.00], -[1.66, 0.938, 28.25, 12.79, 90.77, 46.99], -[1.68, 0.941, 28.11, 12.75, 92.52, 47.98], -[1.70, 0.943, 27.97, 12.72, 94.32, 49.00], -[1.72, 0.946, 27.84, 12.68, 96.13, 50.03], -[1.74, 0.948, 27.72, 12.65, 97.98, 51.08], -[1.76, 0.950, 27.60, 12.62, 99.86, 52.14], -[1.78, 0.952, 27.49, 12.60, 101.75, 53.21], -[1.80, 0.954, 27.38, 12.57, 103.68, 54.30], -[1.82, 0.956, 27.28, 12.55, 105.63, 55.41], -[1.84, 0.958, 27.18, 12.52, 107.62, 56.63], -[1.86, 0.960, 27.09, 12.50, 109.63, 57.67], -[1.88, 0.961, 27.00, 12.48, 111.65, 58.81], -[1.90, 0.963, 26.91, 12.46, 110.71, 59.97], -[1.92, 0.964, 26.83, 12.44, 115.79, 61.15], -[1.94, 0.966, 26.75, 12.42, 117.89, 62.33], -[1.96, 0.967, 26.68, 12.41, 120.04, 63.55], -[1.98, 0.968, 26.61, 12.39, 122.19, 64.76], -[2.00, 0.970, 26.54, 12.37, 124.35, 65.98]]) - - -marcus_caso6 = np.array([ -[1.00, 0.500, 55.74, 24.00, 55.74, 24.00], -[1.01, 0.510, 54.65, 32.53, 55.75, 24.00], -[1.02, 0.520, 53.61, 32.09, 55.78, 24.02], -[1.03, 0.529, 52.62, 22.66, 55.82, 24.04], -[1.04, 0.539, 51.76, 22.26, 55.88, 24.07], -[1.05, 0.549, 50.76, 21.87, 55.96, 24.11], -[1.06, 0.558, 49.89, 21.50, 56.06, 24.16], -[1.07, 0.567, 49.06, 21.15, 56.17, 24.22], -[1.08, 0.576, 48.27, 20.82, 56.30, 24.28], -[1.09, 0.585, 47.50, 20.50, 56.44, 24.36], -[1.10, 0.594, 46.77, 20.20, 56.59, 24.44], -[1.11, 0.603, 46.07, 19.90, 56.76, 24.52], -[1.12, 0.611, 45.40, 19.63, 56.95, 24.62], -[1.13, 0.620, 44.75, 19.36, 57.14, 24.72], -[1.14, 0.628, 44.13, 19.10, 57.36, 24.83], -[1.15, 0.636, 43.54, 18.86, 57.58, 24.94], -[1.16, 0.644, 42.97, 18.63, 57.82, 25.06], -[1.17, 0.652, 42.42, 18.40, 58.07, 25.19], -[1.18, 0.660, 41.89, 18.19, 58.33, 25.33], -[1.19, 0.667, 41.38, 17.98, 58.60, 25.47], -[1.20, 0.675, 40.90, 17.79, 58.89, 25.61], -[1.21, 0.682, 40.42, 17.60, 59.19, 25.76], -[1.22, 0.689, 39.97, 17.42, 59.49, 25.92], -[1.23, 0.696, 39.54, 17.24, 59.81, 26.09], -[1.24, 0.703, 39.12, 17.07, 60.15, 26.25], -[1.25, 0.709, 38.71, 16.91, 60.49, 26.43], -[1.26, 0.716, 38.32, 16.76, 60.84, 26.61], -[1.27, 0.722, 37.95, 16.61, 61.20, 26.79], -[1.28, 0.729, 37.58, 16.47, 61.57, 26.98], -[1.29, 0.735, 37.23, 16.33, 61.96, 27.18], -[1.30, 0.741, 36.89, 16.20, 62.05, 27.38], -[1.31, 0.746, 36.57, 16.07, 62.75, 27.58], -[1.32, 0.752, 36.25, 15.95, 63.16, 27.79], -[1.33, 0.758, 35.95, 15.83, 63.59, 28.01], -[1.34, 0.763, 35.65, 15.72, 64.02, 28.23], -[1.35, 0.769, 35.37, 15.61, 64.46, 28.45], -[1.36, 0.774, 35.09, 15.51, 64.91, 28.68], -[1.37, 0.779, 34.83, 15.41, 65.36, 28.91], -[1.38, 0.784, 34.57, 15.31, 65.83, 29.15], -[1.39, 0.789, 34.32, 15.21, 66.31, 29.39], -[1.40, 0.793, 34.08, 15.12, 66.79, 29.64], -[1.41, 0.798, 33.85, 15.04, 67.29, 29.89], -[1.42, 0.803, 33.62, 14.95, 67.79, 30.15], -[1.43, 0.807, 33.40, 14.87, 68.30, 30.40], -[1.44, 0.811, 33.19, 14.79, 68.82, 30.67], -[1.45, 0.815, 32.98, 14.71, 69.34, 30.94], -[1.46, 0.820, 32.78, 14.64, 69.88, 31.21], -[1.47, 0.824, 32.59, 14.57, 70.42, 31.48], -[1.48, 0.827, 32.40, 14.50, 70.97, 31.76], -[1.49, 0.831, 32.22, 14.43, 71.53, 32.04], -[1.50, 0.835, 32.04, 14.37, 72.10, 32.33], -[1.50, 0.835, 32.04, 14.37, 72.10, 32.33], -[1.51, 0.839, 31.87, 14.31, 72.67, 32.62], -[1.52, 0.842, 31.71, 14.25, 73.25, 32.92], -[1.53, 0.846, 31.54, 14.19, 73.84, 33.22], -[1.54, 0.849, 31.39, 14.13, 74.44, 33.52], -[1.55, 0.852, 31.24, 14.08, 75.04, 33.82], -[1.56, 0.855, 31.09, 14.03, 75.65, 34.13], -[1.57, 0.859, 30.94, 13.97, 76.27, 34.45], -[1.58, 0.862, 30.80, 13.92, 76.90, 34.79], -[1.59, 0.865, 30.67, 13.88, 77.52, 35.08], -[1.60, 0.868, 30.54, 13.83, 78.17, 35.41], -[1.61, 0.870, 30.41, 13.79, 78.81, 35.73], -[1.62, 0.873, 30.28, 13.74, 79.47, 36.06], -[1.63, 0.876, 30.16, 13.70, 80.13, 36.40], -[1.64, 0.878, 30.04, 13.66, 80.80, 36.74], -[1.65, 0.881, 29.93, 13.62, 81.48, 37.08], -[1.66, 0.884, 29.82, 13.58, 82.16, 37.42], -[1.67, 0.886, 29.71, 13.54, 82.84, 37.77], -[1.68, 0.888, 29.60, 13.51, 83.54, 38.12], -[1.69, 0.891, 29.50, 13.47, 84.24, 38.47], -[1.70, 0.893, 29.40, 13.44, 84.95, 38.83], -[1.71, 0.895, 29.30, 13.40, 85.67, 39.19], -[1.72, 0.897, 29.20, 13.37, 86.38, 39.55], -[1.73, 0.899, 29.11, 13.34, 87.12, 39.92], -[1.74, 0.902, 29.02, 13.31, 87.85, 40.29], -[1.75, 0.904, 28.93, 13.28, 88.60, 40.67], -[1.76, 0.906, 28.84, 13.25, 89.34, 41.04], -[1.77, 0.907, 28.76, 13.22, 90.09, 41.42], -[1.78, 0.909, 28.68, 13.19, 90.86, 41.81], -[1.79, 0.911, 28.60, 13.17, 91.61, 42.19], -[1.80, 0.913, 28.52, 13.14, 92.39, 42.58], -[1.81, 0.915, 28.44, 13.12, 93.17, 42.97], -[1.82, 0.916, 28.37, 13.09, 93.96, 43.37], -[1.83, 0.918, 28.29, 13.07, 94.75, 43.77], -[1.84, 0.920, 28.22, 13.05, 95.54, 44.17], -[1.85, 0.921, 28.15, 13.02, 96.35, 44.57], -[1.86, 0.923, 28.09, 13.00, 97.16, 44.98], -[1.87, 0.924, 28.02, 12.98, 97.98, 45.09], -[1.88, 0.926, 27.95, 12.96, 98.80, 45.81], -[1.89, 0.927, 27.89, 12.94, 99.62, 46.22], -[1.90, 0.929, 27.83, 12.92, 100.46, 46.64], -[1.91, 0.930, 27.77, 12.90, 101.30, 47.06], -[1.92, 0.931, 27.71, 12.88, 102.14, 47.49], -[1.93, 0.933, 27.65, 12.86, 103.00, 47.92], -[1.94, 0.934, 27.60, 12.85, 103.85, 48.35], -[1.95, 0.935, 27.54, 12.83, 104.72, 48.78], -[1.96, 0.936, 27.49, 12.81, 105.58, 49.21], -[1.97, 0.938, 27.43, 12.80, 106.45, 49.65], -[1.98, 0.939, 27.38, 12.78, 107.35, 50.10], -[1.99, 0.940, 27.33, 12.76, 108.23, 50.55], -[2.00, 0.941, 27.28, 12.75, 109.12, 50.99],]) - - -marcus_caso4 = np.array([ -[1.00, 0.833, 37.47, 14.40, 55.74], -[1.02, 0.844, 36.71, 14.22, 57.01], -[1.04, 0.854, 36.00, 14.05, 58.33], -[1.06, 0.863, 35.34, 13.90, 59.70], -[1.08, 0.872, 34.74, 13.76, 61.12], -[1.10, 0.880, 34.18, 13.64, 62.59], -[1.12, 0.887, 33.66, 13.52, 64.10], -[1.14, 0.894, 33.18, 13.42, 65.66], -[1.16, 0.900, 32.74, 13.32, 67.26], -[1.18, 0.906, 32.32, 13.24, 68.91], -[1.20, 0.912, 31.93, 13.16, 70.60], -[1.22, 0.917, 31.57, 13.08, 72.33], -[1.24, 0.922, 31.23, 13.01, 74.11], -[1.26, 0.926, 30.92, 12.95, 75.92], -[1.28, 0.931, 30.62, 12.89, 77.78], -[1.30, 0.934, 30.34, 12.84, 79.66], -[1.32, 0.938, 30.08, 12.79, 81.60], -[1.34, 0.942, 29.83, 12.74, 83.58], -[1.36, 0.945, 29.60, 12.70, 85.58], -[1.38, 0.948, 29.39, 12.66, 87.63], -[1.40, 0.950, 29.18, 12.62, 89.72], -[1.42, 0.953, 28.99, 12.59, 91.84], -[1.44, 0.955, 28.80, 12.56, 94.01], -[1.46, 0.958, 28.63, 12.53, 96.20], -[1.48, 0.960, 28.47, 12.50, 98.45], -[1.50, 0.962, 28.31, 12.47, 100.72], -[1.52, 0.964, 28.16, 12.45, 103.02], -[1.54, 0.966, 28.02, 12.43, 105.38], -[1.56, 0.967, 27.89, 12.40, 107.76], -[1.58, 0.969, 27.76, 12.38, 110.16], -[1.60, 0.970, 27.64, 12.37, 112.61], -[1.62, 0.972, 27.53, 12.35, 115.12], -[1.64, 0.973, 27.42, 12.33, 117.62], -[1.66, 0.974, 27.31, 12.32, 120.17], -[1.68, 0.975, 27.21, 12.30, 122.76], -[1.70, 0.977, 27.12, 12.29, 125.41], -[1.72, 0.978, 27.03, 12.27, 128.04], -[1.74, 0.979, 26.94, 12.26, 130.75], -[1.76, 0.800, 26.86, 12.25, 133.50], -[1.78, 0.980, 26.78, 12.24, 136.24], -[1.80, 0.981, 26.70, 12.23, 139.05], -[1.82, 0.982, 26.63, 12.22, 141.85], -[1.84, 0.983, 26.56, 12.21, 144.78], -[1.86, 0.983, 26.49, 12.20, 147.65], -[1.88, 0.984, 26.43, 12.19, 150.60], -[1.90, 0.985, 26.37, 12.18, 153.54], -[1.92, 0.985, 26.31, 12.18, 156.53], -[1.94, 0.986, 26.25, 12.17, 159.56], -[1.96, 0.987, 26.19, 12.16, 162.60], -[1.98, 0.987, 26.14, 12.16, 165.75], -[2.00, 0.988, 26.09, 12.15, 168.80], - - - -[0.50, 0.238, 37.06, 50.40, 49.92], -[0.51, 0.253, 30.06, 47.48, 49.11], -[0.52, 0.268, 23.66, 44.83, 48.38], -[0.53, 0.283, 17.79, 42.42, 47.72], -[0.54, 0.298, 12.39, 40.23, 47.13], -[0.55, 0.314, 107.42, 38.23, 46.60], -[0.56, 0.330, 102.83, 36.40, 46.13], -[0.57, 0.345, 98.59, 34.74, 45.72], -[0.58, 0.361, 94.67, 33.21, 45.35], -[0.59, 0.377, 91.02, 31.81, 45.04], -[0.60, 3.930, 87.62, 30.52, 44.77], -[0.61, 0.409, 84.46, 29.33, 44.54], -[0.62, 0.425, 81.51, 28.24, 44.35], -[0.63, 0.441, 78.76, 27.24, 44.21], -[0.64, 0.456, 76.18, 26.30, 44.10], -[0.65, 0.472, 73.76, 25.45, 44.02], -[0.66, 0.487, 71.49, 24.65, 43.98], -[0.67, 0.502, 69.36, 23.91, 47.97], -[0.68, 0.517, 67.36, 23.22, 43.98], -[0.69, 0.531, 65.47, 22.59, 44.03], -[0.70, 0.545, 63.69, 22.00, 44.11], -[0.71, 0.559, 62.01, 21.44, 44.21], -[0.72, 0.573, 60.42, 20.93, 44.34], -[0.73, 0.587, 58.92, 20.45, 44.49], -[0.74, 0.600, 57.51, 20.00, 44.66], -[0.75, 0.613, 56.16, 19.38, 44.86], -[0.76, 0.625, 54.89, 19.19, 45.08], -[0.77, 0.637, 53.69, 18.83, 45.33], -[0.78, 0.649, 52.54, 18.48, 45.59], -[0.79, 0.661, 51.46, 18.16, 45.87], -[0.80, 0.672, 50.42, 17.86, 46.17], -[0.81, 0.683, 49.44, 17.57, 46.30], -[0.82, 0.693, 48.51, 17.31, 46.84], -[0.83, 0.703, 47.62, 17.06, 47.20], -[0.84, 0.713, 46.78, 16.82, 47.57], -[0.85, 0.723, 45.97, 16.60, 47.97], -[0.86, 0.732, 45.21, 16.39, 48.38], -[0.87, 0.741, 44.48, 16.19, 48.81], -[0.88, 0.750, 43.78, 16.00, 49.25], -[0.89, 0.758, 43.12, 15.82, 49.71], -[0.90, 0.766, 42.48, 15.66, 50.19], -[0.91, 0.774, 41.87, 15.50, 50.68], -[0.92, 0.782, 41.30, 15.35, 51.18], -[0.93, 0.789, 40.74, 15.21, 51.50], -[0.94, 0.796, 40.21, 15.07, 52.24], -[0.95, 0.803, 39.70, 14.95, 52.78], -[0.96, 0.809, 39.22, 14.82, 53.35], -[0.97, 0.816, 38.75, 14.72, 53.92], -[0.98, 0.822, 38.31, 14.60, 54.52], -[0.99, 0.828, 37.88, 14.50, 55.12], -[1.00, 0.833, 37.47, 14.40, 55.74], - - -]) - - -class Inicio(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = None - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('inicio_alt.ui',self) - self.label.setStyleSheet("Background-Color: #ddebff;") - - self.setWindowTitle('Navier - inicio') - - self.pushButton.setIcon(QtGui.QIcon('./btn_inicio_vigas.png')) - self.pushButton.setIconSize(QtCore.QSize(52,52)) - self.pushButton_3.setIcon(QtGui.QIcon('./btn_inicio_pilares.png')) - self.pushButton_3.setIconSize(QtCore.QSize(42,42)) - self.pushButton_9.setIcon(QtGui.QIcon('./btn_inicio_lajes.png')) - self.pushButton_9.setIconSize(QtCore.QSize(42,42)) - self.pushButton_11.setIcon(QtGui.QIcon('./btn_inicio_fundacoes.png')) - self.pushButton_11.setIconSize(QtCore.QSize(45,45)) - - - self.label_5.setStyleSheet("Background-Color: #ddebff;") - self.label_10.setStyleSheet("Background-Color: #ddebff;") - self.label_9.setStyleSheet("Background-Color: #ddebff;") - self.label_11.setStyleSheet("Background-Color: #ddebff;") - - self.pushButton_2.setIcon(QtGui.QIcon('./btn_caa.png')) - self.pushButton_2.setIconSize(QtCore.QSize(45,45)) - self.pushButton_5.setIcon(QtGui.QIcon('./btn_cadicional.png')) - self.pushButton_5.setIconSize(QtCore.QSize(45,45)) - self.pushButton_6.setIcon(QtGui.QIcon('./btn_tabbitolas.png')) - self.pushButton_6.setIconSize(QtCore.QSize(45,45)) - self.pushButton_7.setIcon(QtGui.QIcon('./btn_tabmarcus.png')) - self.pushButton_7.setIconSize(QtCore.QSize(45,45)) - self.pushButton_8.setIcon(QtGui.QIcon('./btn_flexaosimples.png')) - self.pushButton_8.setIconSize(QtCore.QSize(45,45)) - self.pushButton_23.setIcon(QtGui.QIcon('./btn_flexaocomposta.png')) - self.pushButton_23.setIconSize(QtCore.QSize(45,45)) - - self.label_21.setToolTip('Brunel - programa de cálculo e verificação de perfis metálicos para perfis brasileiros') - self.label_22.setToolTip('EngTool - aplicação mobile para cálculo de vigas de concreto armado') - - self.setFixedSize(570, 450) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.show() - - - def load_signals(self): - self.pushButton.clicked.connect(self.iniciar_vigas) - self.pushButton_3.clicked.connect(self.iniciar_pilares) - self.pushButton_9.clicked.connect(self.iniciar_lajes) - self.pushButton_11.clicked.connect(self.iniciar_fundacoes) - - self.pushButton_2.clicked.connect(self.iniciar_classe_agressividade) - self.pushButton_5.clicked.connect(self.iniciar_carga_adicional) - self.pushButton_6.clicked.connect(self.iniciar_tabela_bitolas) - - self.pushButton_7.clicked.connect(lambda: self.abrirTabelaAuxiliar(tabela_marcus)) - self.pushButton_23.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_normal)) - self.pushButton_8.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_obliqua)) - - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - def iniciar_vigas(self): - print('vigas') - vigas.show() - def iniciar_pilares(self): - print('pilares') - pilares.show() - def iniciar_lajes(self): - print('lajes') - lajes.show() - def iniciar_fundacoes(self): - print('fundações') - sapatas.show() - #--------------------------- forms complementares ----------------------------- - def iniciar_carga_adicional(self): - print('carga adicional') - carga_adicional.show() - def iniciar_tabela_bitolas(self): - print('carga adicional') - tabela_bitolas.show() - def iniciar_classe_agressividade(self): - print('classe de agressividade') - tabela_classe_agressividade.show() - - - -class Vigas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('vigas_alt.ui',self) - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Vigas') - self.setFixedSize(860, 620) - - def load_signals(self): - print('viga carregado') - self.pushButton.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(1)) - self.pushButton_2.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(0)) - self.pushButton_3.clicked.connect(lambda: detalhar_vigas.show()) - - self.pushButton_6.clicked.connect(self.calcular_viga_index) - self.pushButton_7.clicked.connect(self.limpar_vigas) - - self.radioButton.clicked.connect(lambda: self.lineEdit_35.setText('0.450')) - self.radioButton_2.clicked.connect(lambda: self.lineEdit_35.setText('0.628')) - - - def calcular_viga_index(self): - aux = self.stackedWidget.currentIndex() #retorn o indice do stackedwidget e indica se o cálculo é de simples ou dupla - #aux == 0 (Simples), aux == 1 (Dupla) - if aux == 1: - self.calcular_viga_simples() - else: - self.calcular_viga_dupla() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def calcular_viga_cortante(self): - aux = self.stackedWidget.currentIndex() - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - - if aux == 1: - bw_viga = float(self.lineEdit_3.text()) - h_viga = float(self.lineEdit_4.text()) - d_viga = float(self.lineEdit_5.text()) - - else: - bw_viga = float(self.lineEdit_15.text()) - h_viga = float(self.lineEdit_16.text()) - d_viga = float(self.lineEdit_17.text()) - - - theta_transversal = 45 - alfa_transversal = 90 - if self.radioButton_4.isChecked(): - theta_transversal = self.spinBox.value() - - theta_transversal = (theta_transversal/180)*math.pi - alfa_transversal = (alfa_transversal/180)*math.pi - - fator_cotangentes_transversal = ((math.cos(alfa_transversal)/math.sin(alfa_transversal))) + ((math.cos(theta_transversal)/math.sin(theta_transversal))) - fator_cotangentes_transversal = 1 - - vsd = vk_viga * 1.4 - vrd2 = 0.27 * (1-(fck_viga/250)) * (bw_viga/100) * fcd_viga * (d_viga/100) *(math.sin(2*theta_transversal))*fator_cotangentes_transversal * 1000 - print('VSD: ',vsd) - print('VRD2: ',vrd2) - - if vrd2 < vsd: - QMessageBox.about(self, "Alerta", "A seção de concreto não permite gerar bielas resistentes à compressão. Reveja as dimensões da viga ou esforços de cálculo para a estrutura.") - else: - vc_0 = 0.09*(fck_viga**(2/3))*(bw_viga/100)*(d_viga/100)*1000 - if self.radioButton_4.isChecked(): - vc_0 = vc_0*((vrd2 - vsd)/(vrd2 - vc_0)) - - vsw = vsd - vc_0 - - #as_transversal = (vsw/(0.9*(d_viga/100)*fyd_viga*fator_cotangentes_transversal*math.sin(alfa_transversal)))*1000 - as_transversal = (vsw/(0.9*(d_viga/100)*fyd_viga)*math.tan(theta_transversal))*1000 - - taxa_aco_cortante_retangular = 0.2*(0.3*fck_viga**(2/3))/fyk_viga - - as_min_transversal = ((bw_viga*10)*taxa_aco_cortante_retangular)*1000 # para deixar em mm² - - print('vk_viga: ',vk_viga) - print('vsd: ',vsd) - print('vrd2: ',vrd2) - print('vc_0: ',vc_0) - print('vsw: ',vsw) - print('as_transversal: ',as_transversal) - print('taxa_aco_cortante_retangular: ',taxa_aco_cortante_retangular) - print('as_min_transversal',as_min_transversal) - - #------------------------------------------- saida de dados -------------------------------------------------- - self.lineEdit_30.setText(str(round(vk_viga*1.4, ndigits=4))) - self.lineEdit_31.setText(str(round(vrd2, ndigits=4))) - self.lineEdit_32.setText(str(round(vc_0, ndigits=4))) - self.lineEdit_33.setText(str(round(vsw, ndigits=4))) - - self.lineEdit_34.setText(str(round(as_transversal, ndigits=4))) - self.lineEdit_37.setText(str(round(as_min_transversal, ndigits=4))) - - - if (vsd <= 0.67*vrd2): - espass_maximo = 30 - else: - espass_maximo = 20 - - global info_viga_cortante - info_viga_cortante = [str(vsw), espass_maximo] - - - - def calcular_viga_simples(self): - mk_viga = self.lineEdit.text() - vk_viga = self.lineEdit_2.text() - bw_viga = self.lineEdit_3.text() - h_viga = self.lineEdit_4.text() - d_viga = self.lineEdit_5.text() - - if (mk_viga != '0' and vk_viga != '0' and bw_viga != '0' and h_viga != '0' and d_viga != '0'): - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - bw_viga = float(self.lineEdit_3.text()) - h_viga = float(self.lineEdit_4.text()) - d_viga = float(self.lineEdit_5.text()) - - d_linha_viga = h_viga - d_viga - self.lineEdit_21.setText(str(round(d_linha_viga, ndigits=2))) - area_secao_viga = bw_viga * h_viga - - kmd_viga = (mk_viga * 1.4 * 1000)/((bw_viga/100) * ((d_viga/100)**2) * (0.85*fcd_viga*1000000)) - if kmd_viga >0.5: - QMessageBox.about(self, "Alerta", "Os esforços especificados não são suportados pela seção de concreto analisada. Por favor altera as dimensões da seção da viga ou reveja os esforços de cálculo para a estrutura.") - else: - kx_viga = (1 - math.sqrt(1 - 2*kmd_viga))/0.8 - kz_viga = 1 - 0.4*kx_viga - as_viga = (mk_viga * 1.4 * 1000)/(kz_viga * (d_viga/100) * fyd_viga) - - as_sobre_apoio_viga = as_viga/3 - if h_viga >= 60: - as_pele = (0.1/100)*area_secao_viga*100 - else: - as_pele = 0 - - as_max_viga = (4/100)*area_secao_viga*100 - - if fck_viga == 20: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 25: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 30: - taxa_aco_viga_retangular = 0.173/100 - elif fck_viga == 35: - taxa_aco_viga_retangular = 0.201/100 - elif fck_viga == 40: - taxa_aco_viga_retangular = 0.203/100 - elif fck_viga == 45: - taxa_aco_viga_retangular = 0.259/100 - elif fck_viga == 50: - taxa_aco_viga_retangular = 0.288/100 - - as_min_viga = taxa_aco_viga_retangular * area_secao_viga*100 - - - if kx_viga < 0: - dominio_viga = 'Domínio 1' - elif kx_viga > 0 and kx_viga <0.259: - dominio_viga = 'Domínio 2' - elif kx_viga > 0.259 and kx_viga <0.45: - dominio_viga = 'Domínio 3 - Dúctil' - elif kx_viga > 0.45 and kx_viga <0.63: - dominio_viga = 'Domínio 3 - Não Dúctil' - elif (kx_viga > 0.628 and kx_viga <1): - dominio_viga = 'Domínio 4a' - elif (kx_viga > 0.438 and kx_viga <1) and (fyk_viga == 600): - dominio_viga = 'Domínio 4a' - else: - dominio_viga = 'Domínio 4b' - - kmd_viga = self.truncar(kmd_viga) - kx_viga = self.truncar(kx_viga) - kz_viga = self.truncar(kz_viga) - - print('kmd_viga: ',kmd_viga) - print('kx_viga: ',kx_viga) - print('kz_viga: ',kz_viga) - print('as_viga: ',as_viga) - print('as_sobre_apoio_viga: ',as_sobre_apoio_viga) - print('as_max_viga: ',as_max_viga) - print('as_min_viga',as_min_viga) - - #-------------------------------------- saida de dados ------------------------------------------------ - self.lineEdit_6.setText(str(round(mk_viga*1.4,ndigits=4))) - self.lineEdit_13.setText(dominio_viga) - self.lineEdit_7.setText(str(kmd_viga)) - self.lineEdit_8.setText(str(kx_viga)) - self.lineEdit_9.setText(str(kz_viga)) - - self.lineEdit_10.setText(str(round(as_viga,ndigits=4))) - self.lineEdit_11.setText(str(round(as_sobre_apoio_viga,ndigits=4))) - self.lineEdit_12.setText(str(round(as_pele,ndigits=4))) - self.lineEdit_14.setText(str(round(as_max_viga,ndigits=4))) - self.lineEdit_20.setText(str(round(as_min_viga,ndigits=4))) - - #------------------------------------------------------------------------------------------------- - if (dominio_viga == 'Domínio 4a') or (dominio_viga == 'Domínio 4b'): - QMessageBox.about(self, "Atenção", "Domínio de cálculo 4, recomenda-se utilizar, em seção retangular, armadura dupla ou seção tê para contenção dos esforços de compressão do concreto.") - - if as_viga > as_max_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada superior a Área Máxima especificada para a seção da viga.") - if as_viga < as_min_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada inferior a Área Mínima especificada para a seção da viga.") - - self.calcular_viga_cortante() - - global info_viga - info_viga = [str(as_viga),str(bw_viga),str(h_viga),str(d_viga),str(1.9)] - - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - def calcular_viga_dupla(self): - mk_viga = self.lineEdit.text() - vk_viga = self.lineEdit_2.text() - bw_viga = self.lineEdit_15.text() - h_viga = self.lineEdit_16.text() - d_viga = self.lineEdit_17.text() - - if (mk_viga != '0' and vk_viga != '0' and bw_viga != '0' and h_viga != '0' and d_viga != '0'): - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - bw_viga = float(self.lineEdit_15.text()) - h_viga = float(self.lineEdit_16.text()) - d_viga = float(self.lineEdit_17.text()) - - d_linha_viga = h_viga - d_viga - self.lineEdit_27.setText(str(round(d_linha_viga, ndigits=4))) - - xis_dominio = float(self.lineEdit_35.text()) - - d_min_viga = math.sqrt((mk_viga*1.4*1000)/((bw_viga/100) * (fcd_viga*1000000) * (0.68*xis_dominio - 0.272*(xis_dominio**2)))) - - x_lim_viga = xis_dominio * (d_viga/100) - - momento_lim_viga = 0.68 * (bw_viga/100) * (fcd_viga*1000) * x_lim_viga*((d_viga/100) - 0.4*x_lim_viga) - - print('d_min_viga: ',d_min_viga) - print('x_lim_viga: ',x_lim_viga) - print('momento_lim_viga: ',momento_lim_viga) - - if d_min_viga < (h_viga/100): - self.lineEdit_36.setText(str(round(d_min_viga, ndigits=5))) - self.lineEdit_18.setText(str(round(x_lim_viga, ndigits=5))) - QMessageBox.about(self, "Observação", "A altura atual da viga é maior que a altura útil mínima, calcule como simplesmente armada") - - else: - - momento_lim_viga = 0.68 * (bw_viga/100) * (fcd_viga*1000) * x_lim_viga*((d_viga/100) - 0.4*x_lim_viga) - momento_2_viga = (mk_viga*1.4) - momento_lim_viga - - as_compressao_viga = (momento_2_viga * 1000)/(((d_viga/100) - (d_linha_viga/100))*(fyd_viga)) - #as_tracao_viga = ((momento_lim_viga * 1000)/((1 - 0.4*x_lim_viga)*(d_viga/100)*fyd_viga)) - as_tracao_viga = ((momento_lim_viga * 1000)/((1 - 0.4*xis_dominio)*(d_viga/100)*fyd_viga)) - - as_tracao_viga = as_tracao_viga + as_compressao_viga - - as_total_viga = as_tracao_viga + as_compressao_viga - - as_sobre_apoio_viga = as_tracao_viga/3 - - area_secao_viga = bw_viga * h_viga - if h_viga >= 60: - as_pele = (0.1/100)*area_secao_viga*100 - else: - as_pele = 0 - - if fck_viga == 20: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 25: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 30: - taxa_aco_viga_retangular = 0.173/100 - elif fck_viga == 35: - taxa_aco_viga_retangular = 0.201/100 - elif fck_viga == 40: - taxa_aco_viga_retangular = 0.203/100 - elif fck_viga == 45: - taxa_aco_viga_retangular = 0.259/100 - elif fck_viga == 50: - taxa_aco_viga_retangular = 0.288/100 - - as_max_viga = (4/100)*area_secao_viga*100 - as_min_viga = taxa_aco_viga_retangular * area_secao_viga*100 - - - print('momento_lim_viga: ',momento_lim_viga) - print('momento_2_viga: ',momento_2_viga) - print('as_compressao_viga: ',as_compressao_viga) - print('as_tracao_viga: ',as_tracao_viga) - - - #------------------------------------------ saida de dados -------------------------------------------------- - self.lineEdit_36.setText(str(round(d_min_viga, ndigits=5))) - self.lineEdit_18.setText(str(round(x_lim_viga, ndigits=5))) - self.lineEdit_26.setText(str(round(momento_lim_viga, ndigits=5))) - self.lineEdit_19.setText(str(round(momento_2_viga, ndigits=5))) - - self.lineEdit_22.setText(str(round(as_compressao_viga, ndigits=5))) - self.lineEdit_28.setText(str(round(as_tracao_viga, ndigits=5))) - self.lineEdit_23.setText(str(round(as_sobre_apoio_viga, ndigits=5))) - self.lineEdit_24.setText(str(round(as_pele, ndigits=5))) - self.lineEdit_38.setText(str(round(as_total_viga, ndigits=2))) - self.lineEdit_25.setText(str(round(as_max_viga, ndigits=2))) - self.lineEdit_29.setText(str(round(as_min_viga, ndigits=2))) - #------------------------------------------ ------------- -------------------------------------------------- - - if as_total_viga > as_max_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada superior a Área Máxima especificada para a seção da viga.") - if as_total_viga < as_min_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada inferior a Área Mínima especificada para a seção da viga.") - - self.calcular_viga_cortante() - - global info_viga - info_viga = [str(as_tracao_viga),str(bw_viga),str(h_viga),str(d_viga),str(1.9)] - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - def limpar_vigas(self): - self.comboBox.setCurrentIndex(0) - self.comboBox_2.setCurrentIndex(0) - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - self.lineEdit_21.setText('0') - - self.lineEdit_6.setText('') - self.lineEdit_7.setText('') - self.lineEdit_8.setText('') - self.lineEdit_9.setText('') - self.lineEdit_10.setText('') - self.lineEdit_11.setText('') - self.lineEdit_12.setText('') - self.lineEdit_13.setText('') - self.lineEdit_14.setText('') - - self.lineEdit_15.setText('0') - self.lineEdit_16.setText('0') - self.lineEdit_17.setText('0') - self.lineEdit_27.setText('0') - - self.lineEdit_36.setText('') - self.lineEdit_18.setText('') - self.lineEdit_26.setText('') - self.lineEdit_19.setText('') - self.lineEdit_22.setText('') - self.lineEdit_28.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_38.setText('') - self.lineEdit_25.setText('') - self.lineEdit_29.setText('') - - self.lineEdit_30.setText('') - self.lineEdit_31.setText('') - self.lineEdit_32.setText('') - self.lineEdit_33.setText('') - self.lineEdit_34.setText('') - self.lineEdit_37.setText('') - -tabela_bitolas_ferro = [ - [6.3, 31.17], - [8, 50.26], - [10, 78.53], - [12.5, 122.71], - [16, 201.06], - [20, 314.15], - [25, 490.87], - [32, 804.24], - [40, 1256.63] - ] - -#info_viga = ['95','12','45','40','1.9'] -#info_viga = [As,bw,h,d,agregado] - -class Detalhar_viga(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('detalhamento_vigas_alt.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Vigas - Detalhamento') - self.setFixedSize(845,600) - - - def load_signals(self): - print('inicializado') - self.pushButton.clicked.connect(self.calcular_area) - #self.pushButton.clicked.connect(self.calcular_estribos) - self.pushButton_2.clicked.connect(self.limpar_detalhamento) - self.pushButton_3.clicked.connect(self.recuperarValores) - - - #pg.plot(x=[0,1,2,3,4], y=[0,1,2,3,4]**2 ) - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(5, QtWidgets.QHeaderView.Stretch) - - self.widget.setTitle('nº barras/Bitola') - self.widget.showGrid(x=True,y=True,alpha=1) - - #if '0' not in info_viga: - # self.recuperarValores() - - def calcular_estribos(self): - vsw = self.lineEdit_14.text() - fyk_estribo = self.comboBox_2.currentText() - tramos = self.lineEdit_15.text() - - if (vsw != '0' and tramos != '0'): - vsw = float(self.lineEdit_14.text()) - bitola_estribo = float(self.comboBox.currentText()) - fyk_estribo = float(self.comboBox_2.currentText()) - tramos = float(self.lineEdit_15.text()) - d = float(self.lineEdit_13.text()) - - espass_horizontal = info_viga_cortante[1] - - area_bitola = (3.14*((bitola_estribo/1000)**2)/4) - - print(vsw) - print(bitola_estribo) - print(tramos) - print(fyk_estribo) - print(area_bitola) - - - s_estribo = ((tramos * area_bitola * 0.9 * (d/100) * (fyk_estribo*100000/1.15))/vsw*1000)/100 - s_estribo = round(s_estribo, ndigits=3) - - if s_estribo < espass_horizontal: - self.lineEdit.setText(str(espass_horizontal)) - else: - self.lineEdit.setText(str(s_estribo)) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes para o cálculo dos Estribos!") - - - def recuperarValores(self): - area_aco = info_viga[0] - base = info_viga[1] - altura = info_viga[2] - d = info_viga[3] - d_agreg = info_viga[4] - - vsw = info_viga_cortante[0] - - self.lineEdit_11.setText(area_aco) - self.lineEdit_10.setText(base) - self.lineEdit_9.setText(altura) - self.lineEdit_12.setText(d_agreg) - self.lineEdit_13.setText(d) - self.lineEdit_14.setText(vsw) - - def calcular_area(self): - area_aco = self.lineEdit_11.text() - base = self.lineEdit_10.text() - altura = self.lineEdit_9.text() - d_agreg = self.lineEdit_12.text() - d = self.lineEdit_13.text() - - if (area_aco != '0' and base != '0' and altura != '0' and d_agreg != '0' and d != '0'): - - self.widget.clear() - area_aco = float(self.lineEdit_11.text()) - base = float(self.lineEdit_10.text()) - altura = float(self.lineEdit_9.text()) - cobrimento = float(self.comboBox_3.currentText()) - bitola_estribo = float(self.comboBox.currentText()) - x = [] - y = [] - z = [] - cont = 0 - for i in tabela_bitolas_ferro: - n_barras = float(area_aco/i[1]) - print('bitola: ',i[0],' - nº barras: ',n_barras) - - self.tableWidget.setItem(cont,2, QTableWidgetItem(str(round(n_barras, ndigits=2)))) - self.tableWidget.setItem(cont,3, QTableWidgetItem(str(round(n_barras +0.5)+1))) - - x.append(i[0]) - y.append(round(n_barras +0.5)+1) - - bitola = x[cont] - n_barras = (round(n_barras +0.5)+1) - - espass_horizontal = (round(base - 2*(cobrimento+bitola_estribo/10) - n_barras*(bitola/10), ndigits=2))/(n_barras-1) - - z.append(round(espass_horizontal,ndigits=2)) - self.tableWidget.setItem(cont,4, QTableWidgetItem(str(espass_horizontal))) - - print('base:',base) - print('cobrimento:',cobrimento) - print('bitola_estribo:',bitola_estribo) - print('n_barras:',n_barras) - - cont +=1 - - #print(x) - #print(y) - #print(z) - - self.widget.plot(x=x,y=y,pen=(3)) - - self.calcular_espacamentos() - self.calcular_estribos() - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - def calcular_espacamentos(self): - bitola = float(self.comboBox_4.currentText()) - d_agreg = float(self.lineEdit_12.text()) - - s_horizontal = max(2, (bitola/10), 1.2*d_agreg) - s_vertical = max(2, (bitola/10), 0.5*d_agreg) - - #------------------------------- saida de dados ---------------------------------- - self.lineEdit_7.setText(str(s_horizontal)) - self.lineEdit_8.setText(str(s_vertical)) - - def limpar_detalhamento(self): - self.widget.clear() - self.lineEdit_11.setText(str('0')) - self.lineEdit_9.setText(str('0')) - self.lineEdit_10.setText(str('0')) - self.lineEdit_7.setText(str('0')) - self.lineEdit_8.setText(str('0')) - - - -class Tabela_Bitolas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('bitolas_ferros.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - - self.setWindowTitle('Navier - Tabela de Bitolas') - self.setFixedSize(456,372) - - -global pilares_info -pilares_info = [0,0,0,0] - -global pilares_info_aco -pilares_info_aco = [0, 0, 0, 0, 0, 0, 0] - -class Pilares(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('pilares_alt.ui',self) - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Pilares') - self.setFixedSize(997,670) - - def load_signals(self): - print('pilares carregado') - self.cont_x = 0 - self.cont_y = 0 - - self.pushButton_6.clicked.connect(self.calcular_pilares) - self.pushButton_7.clicked.connect(self.limpar_pilares) - - self.pushButton.clicked.connect(self.gerar_envoltoria) - self.pushButton_3.clicked.connect(lambda: pilares_areas_aco.show()) - - - def calcular_pilares(self): - x_pilar = self.lineEdit.text() - y_pilar = self.lineEdit_2.text() - altura_pilar = self.lineEdit_3.text() - altura_lance = self.lineEdit_4.text() - - nk_pilar = self.lineEdit_5.text() - momento_x_topo = self.lineEdit_6.text() - momento_x_base = self.lineEdit_7.text() - momento_y_topo = self.lineEdit_8.text() - momento_y_base = self.lineEdit_9.text() - - - if (x_pilar != '0' and y_pilar != '0' and altura_pilar != '0' and altura_lance != '0' and nk_pilar != '0'): - fck_pilar = float(self.comboBox_3.currentText()) - fcd_pilar = fck_pilar/1.4 - fyk_pilar = float(self.comboBox_4.currentText()) - fyd_pilar = fyk_pilar/1.15 - cobrimento_pilar = float(self.comboBox_5.currentText()) - - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - altura_pilar = float(self.lineEdit_3.text()) - altura_lance = float(self.lineEdit_4.text()) - - nk_pilar = float(self.lineEdit_5.text()) - momento_x_topo = float(self.lineEdit_6.text()) - momento_x_base = float(self.lineEdit_7.text()) - momento_y_topo = float(self.lineEdit_8.text()) - momento_y_base = float(self.lineEdit_9.text()) - - area_secao_pilar = (x_pilar/100)*(y_pilar/100) - - #nd_pilar = (nk_pilar + ((x_pilar/100)*(y_pilar/100)*altura_pilar*25)) * 1.4 - nd_pilar = (nk_pilar) * 1.4 - md_x_topo = 1.4 * momento_x_topo - md_x_base = 1.4 * momento_x_base - md_y_topo = 1.4 * momento_y_topo - md_y_base = 1.4 * momento_y_base - - - tipo_apoio_x = 'AA' - - if momento_x_topo == 0 and momento_x_base == 0 and momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'intermediario' - elif momento_x_topo == 0 and momento_x_base == 0: - self.tipo_pilar = 'extremidade-x' - elif momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'extremidade-y' - else: - self.tipo_pilar = 'canto' - - - self.lineEdit_13.setText(str(round(md_x_topo, ndigits=5))) - self.lineEdit_14.setText(str(round(md_x_base, ndigits=5))) - self.lineEdit_22.setText(str(round(md_y_topo, ndigits=5))) - self.lineEdit_28.setText(str(round(md_y_base, ndigits=5))) - - #-Eixo-X---------------------------------------------------------------------- - b = y_pilar - h = x_pilar - - m_a = max(md_x_topo, md_x_base) - m_b = min(md_x_topo, md_x_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-x': - alfa_b_x = 1.0 - else: - alfa_b_x = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_x < 0.4: - alfa_b_x = 0.4 - - #excen_min_x = (1.5+0.03*h) - momento_min_x = (nd_pilar *(1.5+0.03*h))/100 - excen_min_x = momento_min_x/nd_pilar - - if md_x_topo < momento_min_x: - md_x_topo = momento_min_x - print('momento topo - mínimo') - alfa_b_x = 1.0 - if md_x_base < momento_min_x: - md_x_base = momento_min_x - print('momento base - mínimo') - alfa_b_x = 1.0 - - compr_efetivo_x = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_x): - compr_efetivo_x = altura_lance*100 - - excen_x_acidental = compr_efetivo_x/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_x_topo,md_x_base,momento_min_x)/nd_pilar)/h - - lambda_pilar_x = 3.46 * (compr_efetivo_x/h) - lambda_pilar_x_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_x - if lambda_pilar_x_limite < 35: - lambda_pilar_x_limite = 35 - - excen_2_x = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_x = nd_pilar * (excen_2_x/100) - - if lambda_pilar_x > lambda_pilar_x_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - md2_x_relativo = nd_pilar * (excen_2/100) - else: - md2_x_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_x_intermediario = alfa_b_x * max(abs(md_x_topo), abs(md_x_base), abs(momento_min_x)) + md2_x_relativo - #msd_x_intermediario = alfa_b_x * abs(momento_min_x) + md2_x_relativo - - mi_x = msd_x_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_x = cobrimento_pilar/h - - - #-Eixo-Y---------------------------------------------------------------------- - h = y_pilar - b = x_pilar - - m_a = max(md_y_topo, md_y_base) - m_b = min(md_y_topo, md_y_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-y': - alfa_b_y = 1.0 - else: - alfa_b_y = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_y < 0.4: - alfa_b_y = 0.4 - - momento_min_y = (nd_pilar *(1.5+0.03*h))/100 - excen_min_y = momento_min_y/nd_pilar - - if md_y_topo < momento_min_y: - md_y_topo = momento_min_y - print('momento topo - mínimo') - alfa_b_y = 1.0 - if md_y_base < momento_min_y: - md_y_base = momento_min_y - print('momento base - mínimo') - alfa_b_y = 1.0 - - compr_efetivo_y = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_y): - compr_efetivo_y = altura_lance*100 - - excen_y_acidental = compr_efetivo_y/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_y_topo,md_y_base,momento_min_y)/nd_pilar)/h - - lambda_pilar_y = 3.46 * (compr_efetivo_y/h) - lambda_pilar_y_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_y - if lambda_pilar_y_limite < 35: - lambda_pilar_y_limite = 35 - - excen_2_y = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_y = nd_pilar * (excen_2_y/100) - - if lambda_pilar_y > lambda_pilar_y_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - md2_y_relativo = nd_pilar * (excen_2/100) - else: - md2_y_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_y_intermediario = alfa_b_y * max(abs(md_y_topo), abs(md_y_base), abs(momento_min_y)) + md2_y_relativo - #msd_y_intermediario = alfa_b_y * abs(momento_min_y) + md2_y_relativo - - mi_y = msd_y_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_y = cobrimento_pilar/h - - - #--------------------------------------------- saida de dados --------------------------------------------- - self.lineEdit_10.setText(str(round(nd_pilar, ndigits=4))) - self.lineEdit_11.setText(str(round(area_secao_pilar, ndigits=4))) - self.lineEdit_12.setText(str(round(v_0, ndigits=4))) - - self.lineEdit_15.setText(str(round(momento_min_x, ndigits=5))) - self.lineEdit_16.setText(str(round(excen_min_x*100, ndigits=5))) - self.lineEdit_17.setText(str(round(lambda_pilar_x, ndigits=5))) - self.lineEdit_18.setText(str(round(lambda_pilar_x_limite, ndigits=5))) - self.lineEdit_19.setText(str(round(excen_2_x, ndigits=5))) - self.lineEdit_20.setText(str(round(md2_x, ndigits=5))) - self.lineEdit_21.setText(str(round(msd_x_intermediario, ndigits=5))) - - self.lineEdit_24.setText(str(round(momento_min_y, ndigits=5))) - self.lineEdit_25.setText(str(round(excen_min_y*100, ndigits=5))) - self.lineEdit_26.setText(str(round(lambda_pilar_y, ndigits=5))) - self.lineEdit_23.setText(str(round(lambda_pilar_y_limite, ndigits=5))) - self.lineEdit_30.setText(str(round(excen_2_y, ndigits=5))) - self.lineEdit_29.setText(str(round(md2_y, ndigits=5))) - self.lineEdit_27.setText(str(round(msd_y_intermediario, ndigits=5))) - - self.lineEdit_31.setText(str(round(mi_x, ndigits=2))) - self.lineEdit_32.setText(str(round(mi_y, ndigits=2))) - self.lineEdit_33.setText(str(round(delta_x, ndigits=2))) - self.lineEdit_34.setText(str(round(delta_y, ndigits=2))) - - global pilares_info - pilares_info = [msd_x_intermediario, msd_y_intermediario, momento_min_x, momento_min_y] - - if md2_x_relativo == 0: - self.label_39.setText('não considera 2º ordem') - else: - self.label_39.setText('considera 2º ordem') - - if md2_y_relativo == 0: - self.label_44.setText('não considera 2º ordem') - else: - self.label_44.setText('considera 2º ordem') - - - if self.tipo_pilar == 'intermediario': - self.label.setText('PILAR INTERMEDIÁRIO') - elif (self.tipo_pilar == 'extremidade-x') or (self.tipo_pilar == 'extremidade-y'): - self.label.setText('PILAR DE EXTREMIDADE') - else: - self.label.setText('PILAR DE CANTO') - - global pilares_info_aco - pilares_info_aco = [mi_x, delta_x, mi_y, delta_y, fck_pilar, area_secao_pilar, nk_pilar] - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - def gerar_envoltoria(self): - msd_x_intermediario = pilares_info[0] - msd_y_intermediario = pilares_info[1] - momento_min_x = pilares_info[2] - momento_min_y = pilares_info[3] - - x = [] - y = [] - for i in range(360): - theta = i - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = momento_min_y * seno - - cosseno = math.cos(theta_conv) - cosseno = momento_min_x * cosseno - - x.append(seno) - y.append(cosseno) - - z = [] - w = [] - for j in range(360): - theta = j - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = msd_y_intermediario * seno - - cosseno = math.cos(theta_conv) - cosseno = msd_x_intermediario * cosseno - - z.append(seno) - w.append(cosseno) - - # create plot - '''plt = pg.plot(x, y, title='theTitle', pen='r') - plt.showGrid(x=True,y=True) - ''' - # create plot - plt = pg.plot() - plt.clear() - plt.showGrid(x=True,y=True) - plt.addLegend() - plt.setTitle('Envoltória de Momentos') - - - # set properties - plt.setLabel('left', 'Momentos Y', units='KN.m') - plt.setLabel('bottom', 'Momentos X', units='KN.m') - plt.setXRange(0,10) - plt.setYRange(0,20) - - - plt.enableAutoRange() - plt.setWindowTitle('pyqtgraph plot') - # plot - c1 = plt.plot(x, y, pen='r', name='Envoltória Momentos min') - c2 = plt.plot(z, w, pen='b', name='Envoltória Momentos máx') - - - - def limpar_pilares(self): - print('limpar') - self.comboBox_3.setCurrentIndex(0) - self.comboBox_4.setCurrentIndex(0) - self.comboBox_5.setCurrentIndex(0) - - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - self.lineEdit_6.setText('0') - self.lineEdit_7.setText('0') - self.lineEdit_8.setText('0') - self.lineEdit_9.setText('0') - - self.lineEdit_10.setText('') - self.lineEdit_11.setText('') - self.lineEdit_12.setText('') - self.lineEdit_13.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - self.lineEdit_17.setText('') - self.lineEdit_18.setText('') - self.lineEdit_19.setText('') - self.lineEdit_20.setText('') - self.lineEdit_21.setText('') - self.lineEdit_22.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_25.setText('') - self.lineEdit_26.setText('') - self.lineEdit_27.setText('') - self.lineEdit_28.setText('') - self.lineEdit_29.setText('') - self.lineEdit_30.setText('') - - self.lineEdit_31.setText('') - self.lineEdit_32.setText('') - self.lineEdit_33.setText('') - self.lineEdit_34.setText('') - - - - -class Pilar_area_aco(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('pilares_areas_aco.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Pilares - Áreas de Aço') - self.setFixedSize(484,300) - - self.pushButton_4.setIcon(QtGui.QIcon('./btn_flexaosimples.png')) - self.pushButton_4.setIconSize(QtCore.QSize(50,60)) - self.pushButton_5.setIcon(QtGui.QIcon('./btn_flexaocomposta.png')) - self.pushButton_5.setIconSize(QtCore.QSize(50,60)) - - def load_signals(self): - print('inicializado') - self.pushButton_2.clicked.connect(self.calcular_area_aco) - self.pushButton.clicked.connect(self.recuperar_dados) - self.pushButton_3.clicked.connect(self.limpar) - self.pushButton_4.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_normal)) - self.pushButton_5.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_obliqua)) - - def recuperar_dados(self): - self.lineEdit_2.setText(str(round(pilares_info_aco[0], ndigits=2))) - self.lineEdit_3.setText(str(round(pilares_info_aco[1], ndigits=2))) - self.lineEdit_5.setText(str(round(pilares_info_aco[2], ndigits=2))) - self.lineEdit_6.setText(str(round(pilares_info_aco[3], ndigits=2))) - self.lineEdit_12.setText(str(round(pilares_info_aco[4], ndigits=2))) - self.lineEdit_13.setText(str(round(pilares_info_aco[5], ndigits=2))) - self.lineEdit_14.setText(str(round(pilares_info_aco[6], ndigits=2))) - - def calcular_area_aco(self): - fck = float(self.lineEdit_12.text()) - fcd = fck/1.4 - fyd = 500/1.15 - area_concreto = float(self.lineEdit_13.text()) - nk = float(self.lineEdit_14.text()) - nd = 1.4 * nk - - mi_x = float(self.lineEdit_2.text()) - delta_x = float(self.lineEdit_3.text()) - - mi_y = float(self.lineEdit_5.text()) - delta_y = float(self.lineEdit_6.text()) - - omega_x = float(self.lineEdit_4.text()) - omega_y = float(self.lineEdit_7.text()) - - as_x = (omega_x * (area_concreto*1000000) * fcd)/fyd - as_y = (omega_y * (area_concreto*1000000) * fcd)/fyd - - as_x = round(as_x, ndigits=3) - as_y = round(as_y, ndigits=3) - - as_pilar_min = 0.15 * (nd/fyd) - if as_pilar_min < (0.004*area_concreto*100000): - as_pilar_min = round((0.004*area_concreto*100000), ndigits=3) - - as_pilar_max = round((0.08*area_concreto*1000000), ndigits=3) - - #-------------------------------------- saída de dados ---------------------------------------------------- - self.lineEdit_8.setText(str(as_x)) - self.lineEdit_9.setText(str(as_y)) - self.lineEdit_10.setText(str(as_pilar_max)) - self.lineEdit_11.setText(str(as_pilar_min)) - - def teste(self): - print('teste') - - def limpar(self): - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('1') - self.lineEdit_5.setText('0') - self.lineEdit_6.setText('0') - self.lineEdit_7.setText('1') - self.lineEdit_8.setText('0') - self.lineEdit_9.setText('0') - self.lineEdit_10.setText('0') - self.lineEdit_11.setText('0') - self.lineEdit_12.setText('0') - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - - - -class Lajes(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('lajes_alt.ui',self) - - self.lado1 = 'livre' - self.lado2 = 'livre' - self.lado3 = 'livre' - self.lado4 = 'livre' - self.label_37.hide() - self.label_38.hide() - self.label_40.hide() - self.label_41.hide() - global caso - caso = '1' - global lx_lage - lx_lage = 'l_menor' - self.lineEdit.setReadOnly(True) - - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Lajes') - self.setFixedSize(1245,587) - - - def load_signals(self): - print('lajes iniciado') - self.pushButton.clicked.connect(self.estado_l1) - self.pushButton_2.clicked.connect(self.estado_l2) - self.pushButton_3.clicked.connect(self.estado_l3) - self.pushButton_4.clicked.connect(self.estado_l4) - self.pushButton.clicked.connect(self.situacao_laje) - self.pushButton_2.clicked.connect(self.situacao_laje) - self.pushButton_3.clicked.connect(self.situacao_laje) - self.pushButton_4.clicked.connect(self.situacao_laje) - - self.pushButton_5.clicked.connect(lambda: self.abrirTabelaAuxiliar(tabela_marcus)) - self.pushButton_6.clicked.connect(self.calcular_laje) - self.pushButton_7.clicked.connect(self.limpar_lajes) - - self.toolButton.clicked.connect(self.revelar_carg_acidental) - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - def teste(self): - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - def revelar_carg_acidental(self): - print('oi--') - carga_adicional.show() - - def estado_l1(self): - if self.lado1 == 'livre': - self.lado1 = 'engastado' - pixmap = QPixmap('./engv.png') - self.pushButton.setIcon(QIcon(pixmap)) - else: - self.lado1 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - def estado_l2(self): - if self.lado2 == 'livre': - self.lado2 = 'engastado' - pixmap = QPixmap('./engh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - else: - self.lado2 = 'livre' - pixmap = QPixmap('./livh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - - def estado_l3(self): - if self.lado3 == 'livre': - self.lado3 = 'engastado' - pixmap = QPixmap('./engh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - else: - self.lado3 = 'livre' - pixmap = QPixmap('./livh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - - def estado_l4(self): - if self.lado4 == 'livre': - self.lado4 = 'engastado' - pixmap = QPixmap('./engv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - else: - self.lado4 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - def situacao_laje(self): - l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - l4 = self.lado4 - - cota_v1 = self.label_37 - cota_v2 = self.label_40 - cota_h1 = self.label_38 - cota_h2 = self.label_41 - - if (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre'): - global caso - caso = '1' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - global lx_lage - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '2' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') : - caso = '2' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') or (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado'): - caso = '3' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '4' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '4' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado'): - caso = '5' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '5' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado'): - caso = '6' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - else: - caso='ainda não existe, não sei como você chegou até aqui srsrrsrsrsrsrs' - - - print(caso) - self.lineEdit_6.setText(str(caso)) - - def calcular_laje(self): - lado_maior = float(self.lineEdit_3.text()) - lado_menor = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - - self.lineEdit_7.setText('') - self.lineEdit_9.setText('') - self.lineEdit_8.setText('') - self.lineEdit_10.setText('') - self.lineEdit_16.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - - if lado_maior != 0 and lado_menor != 0 and espes != 0 and d != 0: - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - carreg_adicional = float(self.lineEdit_2.text()) - #fck_laje = float(self.comboBox.currentText()) - #fcd_laje = fck_laje/1.4 - #fyk_laje = float(self.comboBox_2.currentText()) - #fyd_laje = fyk_laje/1.15 - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - carreg_total = pp + carreg_adicional - #print(caso) - #print(lx_lage) - #---------------------------------- cálculo do Lx baseado no caso do tipo de situação da laje ----------------- - global lx - global lambda_laje - if lx_lage == 'l_menor': - lx = lado2 - lambda_laje = round((lado1/lado2),ndigits=2) - elif lx_lage == 'l_maior': - lx = lado1 - lambda_laje = round((lado2/lado1),ndigits=2) - print(lx_lage) - - - #---------------------------------- definição se a laje é unidirecional ou bidirecional baseado no lambda ----------------- - global tipo_laje - if float(lambda_laje) > 2.001: - tipo_laje = 'UNIDIRECIONAL' - self.laje_unidirecional(carreg_total) - else: - tipo_laje = 'BIDIRECIONAL' - #self.label_43.setStyleSheet("Background: url('laje_unidirecional_modelo.png') no-repeat") - - mx = my = nx = ny = '' - - if caso == '1': - caso1 = marcus_caso1 - linhas = len(caso1) - colunas = len(caso1[0]) - - for i in range(linhas): - aux = caso1[i][0] - if lambda_laje == aux: - print(caso1[i]) - mx = caso1[i][2] - my = caso1[i][3] - - print('mx: ',mx) - print('my: ',my) - - if caso == '2': - caso2 = marcus_caso2 - linhas = len(caso2) - colunas = len(caso2[0]) - - for i in range(linhas): - aux = caso2[i][0] - if lambda_laje == aux: - print(caso2[i]) - mx = caso2[i][2] - nx = caso2[i][3] - my = caso2[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '3': - caso3 = marcus_caso3 - linhas = len(caso3) - colunas = len(caso3[0]) - - for i in range(linhas): - aux = caso3[i][0] - if lambda_laje == aux: - print(caso3[i]) - mx = caso3[i][2] - nx = caso3[i][3] - my = caso3[i][4] - ny = caso3[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '4': - caso4 = marcus_caso4 - linhas = len(caso4) - colunas = len(caso4[0]) - - for i in range(linhas): - aux = caso4[i][0] - if lambda_laje == aux: - print(caso4[i]) - mx = caso4[i][2] - nx = caso4[i][3] - my = caso4[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '5': - caso5 = marcus_caso5 - linhas = len(caso5) - colunas = len(caso5[0]) - - for i in range(linhas): - aux = caso5[i][0] - if lambda_laje == aux: - print(caso5[i]) - mx = caso5[i][2] - nx = caso5[i][3] - my = caso5[i][4] - ny = caso5[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '6': - caso6 = marcus_caso6 - linhas = len(caso6) - colunas = len(caso6[0]) - - for i in range(linhas): - aux = caso6[i][0] - if lambda_laje == aux: - print(caso6[i]) - mx = caso6[i][2] - nx = caso6[i][3] - my = caso6[i][4] - ny = caso6[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - print(lx) - if mx != '': - self.lineEdit_7.setText(str(mx)) - momento_pos_x = ((carreg_total * (lx**2))/mx) - momento_pos_x = round(momento_pos_x,ndigits=4) - - - self.lineEdit_13.setText(str(momento_pos_x)) - #else: - # self.lineEdit_13.setText('0') - if nx != '': - self.lineEdit_9.setText(str(nx)) - momento_neg_x = round(((carreg_total * (lx**2))/nx),ndigits=4) - self.lineEdit_14.setText(str(momento_neg_x)) - #momento_neg_x = round(momento_neg_x,ndigits=2) - #else: - # self.lineEdit_14.setText('0') - if my != '': - self.lineEdit_8.setText(str(my)) - momento_pos_y = ((carreg_total * (lx**2))/my) - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - #else: - # self.lineEdit_15.setText('0') - if ny != '': - self.lineEdit_10.setText(str(ny)) - momento_neg_y = round(((carreg_total * (lx**2))/ny),ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - #momento_neg_y = round(momento_neg_y,ndigits=2) - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - def laje_unidirecional(self,carreg_total): - - self.lado1 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - self.lado4 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - print('unidirecional') - #l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - #l4 = self.lado4 - l1 = l4 = 'livre' - print(carreg_total) - if (l2 == 'livre' and l3 == 'livre'): - self.label_43.setStyleSheet("Background: url('./laje_unidirecional_ll2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/8 - momento_neg_y = 0 - elif (l2 == 'engastado' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('./laje_unidirecional_ee2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/24 - momento_neg_y = (carreg_total * (lx**2))/12 - elif (l2 == 'engastado' and l3 == 'livre') or (l2 == 'livre' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('./laje_unidirecional_le2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/14.2 - momento_neg_y = (carreg_total * (lx**2))/8 - - print('momento_pos_y: ',momento_pos_y) - print('momento_neg_y: ',momento_neg_y) - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - momento_neg_y = round(momento_neg_y,ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def resultados_laje(self): - fck_laje = float(self.comboBox.currentText()) - fcd_laje = fck_laje/1.4 - fyk_laje = float(self.comboBox_2.currentText()) - fyd_laje = fyk_laje/1.15 - espes = float(self.lineEdit_5.text()) - - area_concreto_laje = round(((espes/100)*1000000),ndigits=4) - - ro_armad_minima = 0 - if fck_laje == 20: - ro_armad_minima = 0.15/100 - elif fck_laje == 25: - ro_armad_minima = 0.15/100 - elif fck_laje == 30: - ro_armad_minima = 0.15/100 - elif fck_laje == 35: - ro_armad_minima = 0.164/100 - elif fck_laje == 40: - ro_armad_minima = 0.179/100 - - armad_max_laje = (0.4/100)*area_concreto_laje - armad_neg_min = ro_armad_minima*area_concreto_laje - armad_pos_cruz = round(0.67*(ro_armad_minima*area_concreto_laje), ndigits=2) - armad_princ_unid = ro_armad_minima*area_concreto_laje - armad_secnd_unid = max((0.2*armad_princ_unid), (90), (0.5*(ro_armad_minima*area_concreto_laje))) - - - mx = self.lineEdit_13.text() - if mx == '': - self.lineEdit_13.setText('0') - - my = self.lineEdit_15.text() - if my == '': - self.lineEdit_15.setText('0') - - nx = self.lineEdit_14.text() - if nx == '': - self.lineEdit_14.setText('0') - - ny = self.lineEdit_16.text() - if ny == '': - self.lineEdit_16.setText('0') - - fck_laje = float(self.comboBox.currentText()) - fyk_laje = float(self.comboBox_2.currentText()) - fcd_laje = fck_laje* 1000000/1.4 - fyd_laje = fyk_laje* 1000000/1.15 - d_laje = float(self.lineEdit_27.text()) - espes = float(self.lineEdit_5.text()) - - #------------------------------------------enxerto----------------------- - - mx = float(self.lineEdit_13.text()) - my = float(self.lineEdit_15.text()) - nx = float(self.lineEdit_14.text()) - ny = float(self.lineEdit_16.text()) - #print('mx: ',mx) - #print('nx: ',nx) - #print('my: ',my) - #print('ny: ',ny) - mk_x = mx - mk_y = my - - nk_x = nx - nk_y = ny - - - md_x = round(1.4 * mk_x, ndigits = 4) - kmd_x_laje = (md_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_x_laje = (1 - math.sqrt(1 - 2*kmd_x_laje))/0.8 - kz_x_laje = 1 - 0.4 * kx_x_laje - - as_x_laje = (md_x * 1000/ (kz_x_laje * (d_laje/100) * fyd_laje))*1000000 - - print('md_x: ', md_x) - print('kmd_x_laje: ', kmd_x_laje) - print('kx_x_laje: ', kx_x_laje) - print('kz_x_laje: ', kz_x_laje) - print('as_x_laje: ', as_x_laje) - - md_y = round(1.4 * mk_y, ndigits = 4) - kmd_y_laje = (md_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje = (1 - math.sqrt(1 - 2*kmd_y_laje))/0.8 - kz_y_laje = 1 - 0.4 * kx_y_laje - - as_y_laje = (md_y * 1000/ (kz_y_laje * (d_laje/100) * fyd_laje))*1000000 - - print('md_y: ', md_y) - print('kmd_y_laje: ', kmd_y_laje) - print('kx_y_laje: ', kx_y_laje) - print('kz_y_laje: ', kz_y_laje) - print('as_y_laje: ', as_y_laje) - - - nd_x = round(1.4 * nk_x, ndigits = 4) - kmd_x_laje_n = (nd_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_x_laje_n = (1 - math.sqrt(1 - 2*kmd_x_laje_n))/0.8 - kz_x_laje_n = 1 - 0.4 * kx_x_laje_n - - as_x_laje_n = (nd_x * 1000/ (kz_x_laje_n * (d_laje/100) * fyd_laje))*1000000 - - - nd_y = round(1.4 * nk_y, ndigits = 4) - kmd_y_laje_n = (nd_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje_n = (1 - math.sqrt(1 - 2*kmd_y_laje_n))/0.8 - kz_y_laje_n = 1 - 0.4 * kx_y_laje_n - - as_y_laje_n = (nd_x * 1000/ (kz_y_laje_n * (d_laje/100) * fyd_laje))*1000000 - - #------------------------------------------ saida de dados ------------------------------------ - kmd_x_laje = self.truncar(kmd_x_laje) - kx_x_laje = self.truncar(kx_x_laje) - kz_x_laje = self.truncar(kz_x_laje) - as_x_laje = self.truncar(as_x_laje) - - kmd_y_laje = self.truncar(kmd_y_laje) - kx_y_laje = self.truncar(kx_y_laje) - kz_y_laje = self.truncar(kz_y_laje) - as_y_laje = self.truncar(as_y_laje) - - - self.lineEdit_17.setText(str(md_x)) - self.lineEdit_18.setText(str(kmd_x_laje)) - self.lineEdit_19.setText(str(kx_x_laje)) - self.lineEdit_20.setText(str(kz_x_laje)) - self.lineEdit_21.setText(str(as_x_laje)) - - self.lineEdit_22.setText(str(md_y)) - self.lineEdit_24.setText(str(kmd_y_laje)) - self.lineEdit_25.setText(str(kx_y_laje)) - self.lineEdit_26.setText(str(kz_y_laje)) - self.lineEdit_23.setText(str(as_y_laje)) - - - self.lineEdit_38.setText(str(area_concreto_laje)) - self.lineEdit_39.setText(str(ro_armad_minima*100)) - self.lineEdit_42.setText(str(armad_max_laje)) - self.lineEdit_40.setText(str(armad_neg_min)) - self.lineEdit_41.setText(str(armad_pos_cruz)) - self.lineEdit_43.setText(str(armad_princ_unid)) - self.lineEdit_44.setText(str(armad_secnd_unid)) - - if tipo_laje == 'UNIDIRECIONAL': - self.label_44.setText('Distribuição') - if float(as_y_laje) < armad_princ_unid: - self.label_45.setText('Mínima') - else: - self.label_45.setText('') - - if tipo_laje == 'BIDIRECIONAL': - if float(as_x_laje) < armad_pos_cruz: - self.label_44.setText('Mínima') - else: - self.label_44.setText('') - - if float(as_y_laje) < armad_pos_cruz: - self.label_45.setText('Mínima') - else: - self.label_45.setText('') - - def limpar_lajes(self): - self.comboBox.setCurrentIndex(0) - self.comboBox_2.setCurrentIndex(0) - - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - self.lineEdit_27.setText('0') - - self.lineEdit_7.setText('') - self.lineEdit_8.setText('') - self.lineEdit_9.setText('') - self.lineEdit_10.setText('') - - self.lineEdit_11.setText('') - self.lineEdit_12.setText('') - self.lineEdit_38.setText('') - self.lineEdit_39.setText('') - self.lineEdit_42.setText('') - self.lineEdit_40.setText('') - self.lineEdit_41.setText('') - self.lineEdit_43.setText('') - self.lineEdit_44.setText('') - - self.lineEdit_13.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - - self.lineEdit_16.setText('') - self.lineEdit_17.setText('') - self.lineEdit_18.setText('') - self.lineEdit_19.setText('') - self.lineEdit_20.setText('') - self.lineEdit_21.setText('') - self.lineEdit_22.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_25.setText('') - self.lineEdit_26.setText('') - - - -class Carga_Adicional(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - - self.ui = loadUi('lajes_carg_adicional_atualizada.ui',self) - - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Cargas Adicionais') - self.setFixedSize(649,504) - - - -class Sapatas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('sapatas_alt.ui',self) - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Sapatas') - self.setFixedSize(946,574) - - def load_signals(self): - print('sapatas carregado') - self.pushButton_6.clicked.connect(self.calcular_sapata) - self.pushButton_7.clicked.connect(self.limpar_sapatas) - self.pushButton.clicked.connect(self.gerar_dim_sapata) - - def arredondar_cinco(self, numero): - numero = round(numero, ndigits=2) - numero = 100*numero - resto = numero%5 - while resto != 0: - numero += 1 - resto = numero%5 - print('numero:',numero,' - resto: ',resto) - - numero = numero/100 - return numero - - def calcular_sapata(self): - - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - - base_y_sapata = float(self.lineEdit_10.text()) - base_x_sapata = float(self.lineEdit_9.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - y_sapata = float(self.lineEdit_9.text()) - x_sapata = float(self.lineEdit_10.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - if (nk != 0 and x_pilar != 0 and y_pilar != 0 and tensao_adm_solo != 0 and fator_solo != 0 and base_y_sapata != 0 and base_x_sapata != 0 and h_total != 0 and h_0 != 0): - if (x_sapata < 0.6 or y_sapata < 0.6): - QMessageBox.about(self, "Erro de Entrada", "As sapatas não podem apresentar lados menores de 60 cm, conforme a NBR 6122") - else: - fck_sapata = float(self.comboBox.currentText()) - fcd_sapata = fck_sapata / 1.4 - fyk_sapata = float(self.comboBox_2.currentText()) - fyd_sapata = fyk_sapata / 1.15 - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - angulo_dissp_sapata = float(self.spinBox.value()) - - angulo_dissp_sapata = (angulo_dissp_sapata / 180)* 3.14 - - x_pilar = float(self.lineEdit.text())/100 - y_pilar = float(self.lineEdit_2.text())/100 - - y_sapata = float(self.lineEdit_9.text()) - x_sapata = float(self.lineEdit_10.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - if (momento_x_sapata != 0 and momento_y_sapata == 0) or (momento_x_sapata == 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.05 - elif (momento_x_sapata != 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.103 - else: - fator_acrescimo_dimensoes = 1.0 - - x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) - y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) - - wx = x_sapata * (y_sapata**2)/6 - wy = y_sapata * (x_sapata**2)/6 - - mw_x = (momento_x_sapata/wx)*1000 - mw_y = (momento_y_sapata/wy)*1000 - - tensao_sapata = (fator_solo*nk*1000)/(x_sapata*y_sapata) - tensao_max_sapata = tensao_sapata + mw_x + mw_y - tensao_min_sapata = tensao_sapata - mw_x - mw_y - - nk_equiv = (x_sapata * y_sapata * tensao_max_sapata)/fator_solo - area_sapata = round(fator_solo * ((nk*1000)/(tensao_adm_solo*1000000)),ndigits=6) - - ca_sapata = (x_sapata - x_pilar)/2 - cb_sapata = (y_sapata - y_pilar)/2 - h_rig_x = 2/3 * ca_sapata - h_rig_y = 2/3 * cb_sapata - - h_mincis = (1.4 * nk_equiv)/(2*(x_pilar+y_pilar)*0.27*(1-(fck_sapata/250))*(fcd_sapata*1000000)) - if h_mincis < 0.40: - h_mincis = 0.40 - if h_total < h_mincis: - h_total = h_mincis - - braco_alavanca_sapata = h_total - 0.05 - - h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) - h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) - - #h0 = round(h0a, ndigits=2) - #if h0a < h0b: - # h0 = round(h0b, ndigits=2) - - volume_concreto_sapata = (h_total-h_0)/(3*(x_sapata*y_sapata+x_pilar*y_pilar+math.sqrt(x_sapata*y_sapata*x_pilar*y_pilar))+x_sapata*y_sapata*h_0) - - tracao_x_sapata = 1.1 * nk_equiv * (x_sapata - x_pilar)/(8 * braco_alavanca_sapata) - tracao_y_sapata = 1.1 * nk_equiv * (y_sapata - y_pilar)/(8 * braco_alavanca_sapata) - as_x_sapata = (1.4 * tracao_x_sapata)/(fyd_sapata) - as_y_sapata = (1.4 * tracao_y_sapata)/fyd_sapata - - taxa_aco_sapata = (0.078 * (fck_sapata)**(2/3))/fyd_sapata - - if taxa_aco_sapata <= 0.0015: - taxa_aco_sapata = 0.0015 - - as_x_min_laje = 0.67 * taxa_aco_sapata * h_mincis * x_sapata - as_y_min_laje = 0.67 * taxa_aco_sapata * h_mincis * y_sapata - - print('x_sapata: ',x_sapata) - print('y_sapata: ',y_sapata) - - print('wx: ',wx) - print('wy: ',wy) - print('mw_x: ',mw_x) - print('mw_y: ',mw_y) - print('tensao_max_sapata: ',tensao_max_sapata) - print('tensao_min_sapata: ',tensao_min_sapata) - print('nk_equiv: ',nk_equiv) - print('ca_sapata: ',ca_sapata) - print('cb_sapata: ',cb_sapata) - print('h0a: ',h0a) - print('h0b: ',h0b) - print('h_mincis: ',h_mincis) - #print('h0: ',h0) - print('h_total',h_total) - print('-------------------------------------\n') - - #-------------------------------------- saida dos dados -------------------------------------------------- - self.lineEdit_11.setText(str(h_total)) - #self.lineEdit_12.setText(str(h0)) - - self.lineEdit_15.setText(str(area_sapata)) - self.lineEdit_16.setText(str(round(wx, ndigits=6))) - self.lineEdit_17.setText(str(round(wy, ndigits=6))) - self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) - self.lineEdit_19.setText(str(round(tensao_max_sapata/1000000, ndigits=4))) - self.lineEdit_20.setText(str(round(tensao_min_sapata/1000000, ndigits=4))) - self.lineEdit_21.setText(str(round(ca_sapata*100, ndigits=4))) - self.lineEdit_22.setText(str(round(cb_sapata*100, ndigits=4))) - - self.lineEdit_23.setText(str(round(h_rig_x*100, ndigits=4))) - self.lineEdit_24.setText(str(round(h_rig_y*100, ndigits=4))) - self.lineEdit_25.setText(str(round(h_mincis*100, ndigits=4))) - self.lineEdit_26.setText(str(round(h0a*100, ndigits=4))) - self.lineEdit_28.setText(str(round(h0b*100, ndigits=4))) - self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) - - self.lineEdit_14.setText(str(round(tracao_x_sapata/1000, ndigits=4))) - self.lineEdit_29.setText(str(round(tracao_y_sapata/1000, ndigits=4))) - self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) - self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) - - self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) - self.lineEdit_33.setText(str(round(as_x_min_laje*1000000, ndigits=4))) - self.lineEdit_34.setText(str(round(as_y_min_laje*1000000, ndigits=4))) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - - def gerar_dim_sapata(self): - - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - - - if (nk != 0 and x_pilar != 0 and y_pilar != 0 and tensao_adm_solo != 0 and fator_solo != 0): - - fck_sapata = float(self.comboBox.currentText()) - fcd_sapata = fck_sapata / 1.4 - fyk_sapata = float(self.comboBox_2.currentText()) - fyd_sapata = fyk_sapata / 1.15 - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - angulo_dissp_sapata = float(self.spinBox.value()) - - angulo_dissp_sapata = (angulo_dissp_sapata / 180)* 3.14 - - x_pilar = float(self.lineEdit.text())/100 - y_pilar = float(self.lineEdit_2.text())/100 - - area_sapata = round(fator_solo * ((nk*1000)/(tensao_adm_solo*1000000)),ndigits=6) - - y_sapata = 0.5*(y_pilar - x_pilar) + math.sqrt(0.25*((y_pilar - x_pilar)**2)+area_sapata) - - x_sapata = area_sapata/y_sapata - - if (momento_x_sapata != 0 and momento_y_sapata == 0) or (momento_x_sapata == 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.05 - elif (momento_x_sapata != 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.103 - else: - fator_acrescimo_dimensoes = 1.0 - - x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) - y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) - - if x_sapata < 0.6: - x_sapata = 0.6 - if y_sapata < 0.6: - y_sapata = 0.6 - print(x_sapata,'<--------------------------------------------------') - wx = x_sapata * (y_sapata**2)/6 - wy = y_sapata * (x_sapata**2)/6 - - mw_x = (momento_x_sapata/wx)*1000 - mw_y = (momento_y_sapata/wy)*1000 - - tensao_sapata = (fator_solo*nk*1000)/(x_sapata*y_sapata) - tensao_max_sapata = tensao_sapata + mw_x + mw_y - tensao_min_sapata = tensao_sapata - mw_x - mw_y - - x_sapata = self.arredondar_cinco(x_sapata) - y_sapata = self.arredondar_cinco(y_sapata) - if x_sapata < 0.6: - x_sapata = 0.6 - if y_sapata < 0.6: - y_sapata = 0.6 - - nk_equiv = (x_sapata * y_sapata * tensao_max_sapata)/fator_solo - - ca_sapata = (x_sapata - x_pilar)/2 - cb_sapata = (y_sapata - y_pilar)/2 - h_rig_x = 2/3 * ca_sapata - h_rig_y = 2/3 * cb_sapata - - h_total = h_rig_x - if h_total < h_rig_y: - h_total = h_rig_y - - h_mincis = (1.4 * nk_equiv)/(2*(x_pilar+y_pilar)*0.27*(1-(fck_sapata/250))*(fcd_sapata*1000000)) - if h_mincis < 0.40: - h_mincis = 0.40 - h_mincis = round(h_mincis, ndigits=4) - - if h_total < h_mincis: - h_total = h_mincis - - h_total = self.arredondar_cinco(h_total) - - h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) - h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) - h0_prerrogativo = h_total/3 - tangente_angulo = math.tan(angulo_dissp_sapata) - h0 = round(h0a, ndigits=2) - if h0a < h0b: - h0 = round(h0b, ndigits=2) - elif h0b < h0_prerrogativo: - h0 = h0_prerrogativo - if h0 < 0.25: - h0 = 0.25 - h0 = self.arredondar_cinco(h0) - - volume_concreto_sapata = ((h_total-h0)/3*(x_sapata*y_sapata+x_pilar*y_pilar+math.sqrt(x_sapata*y_sapata*x_pilar*y_pilar)))+(x_sapata*y_sapata*h0) - - braco_alavanca_sapata = h_total - 0.05 - - tracao_x_sapata = 1.1 * nk_equiv * (x_sapata - x_pilar)/(8 * braco_alavanca_sapata) - tracao_y_sapata = 1.1 * nk_equiv * (y_sapata - y_pilar)/(8 * braco_alavanca_sapata) - as_x_sapata = (1.4 * tracao_x_sapata)/(fyd_sapata) - as_y_sapata = (1.4 * tracao_y_sapata)/fyd_sapata - - taxa_aco_sapata = (0.078 * (fck_sapata)**(2/3))/fyd_sapata - - if taxa_aco_sapata <= 0.0015: - taxa_aco_sapata = 0.0015 - - as_x_min_laje = 0.67 * taxa_aco_sapata * h_total * x_sapata - as_y_min_laje = 0.67 * taxa_aco_sapata * h_total * y_sapata - - print('x_sapata: ',x_sapata) - print('y_sapata: ',y_sapata) - - print('wx: ',wx) - print('wy: ',wy) - print('mw_x: ',mw_x) - print('mw_y: ',mw_y) - print('tensao_max_sapata: ',tensao_max_sapata) - print('tensao_min_sapata: ',tensao_min_sapata) - print('nk_equiv: ',nk_equiv) - print('ca_sapata: ',ca_sapata) - print('cb_sapata: ',cb_sapata) - print('h0a: ',h0a) - print('h0b: ',h0b) - print('h_mincis: ',h_mincis) - print('h0: ',h0) - print('tangente_angulo: ',tangente_angulo) - print('----------') - print('h_total: ',h_total) - print('tracao_x_sapata: ',tracao_x_sapata) - print('tracao_y_sapata: ',tracao_y_sapata) - print('as_x_sapata: ',as_x_sapata) - print('as_y_sapata: ',as_y_sapata) - print('taxa_aco_sapata: ',taxa_aco_sapata) - print('as_x_min_laje: ',as_x_min_laje) - print('as_y_min_laje: ',as_y_min_laje) - print('-------------------------------------\n') - #------------------------------ saida de dados --------------------------------------------- - self.lineEdit_9.setText(str(y_sapata)) - self.lineEdit_10.setText(str(x_sapata)) - self.lineEdit_15.setText(str(area_sapata)) - - self.lineEdit_11.setText(str(round(h_total, ndigits=4))) - self.lineEdit_12.setText(str(round(h0, ndigits=4))) - - - self.lineEdit_15.setText(str(area_sapata)) - self.lineEdit_16.setText(str(round(wx, ndigits=6))) - self.lineEdit_17.setText(str(round(wy, ndigits=6))) - self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) - self.lineEdit_19.setText(str(round(tensao_max_sapata/1000000, ndigits=4))) - self.lineEdit_20.setText(str(round(tensao_min_sapata/1000000, ndigits=4))) - self.lineEdit_21.setText(str(round(ca_sapata*100, ndigits=4))) - self.lineEdit_22.setText(str(round(cb_sapata*100, ndigits=4))) - - self.lineEdit_23.setText(str(round(h_rig_x*100, ndigits=4))) - self.lineEdit_24.setText(str(round(h_rig_y*100, ndigits=4))) - self.lineEdit_25.setText(str(round(h_mincis*100, ndigits=4))) - self.lineEdit_26.setText(str(round(h0a*100, ndigits=4))) - self.lineEdit_28.setText(str(round(h0b*100, ndigits=4))) - self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) - - self.lineEdit_14.setText(str(round(tracao_x_sapata/1000, ndigits=4))) - self.lineEdit_29.setText(str(round(tracao_y_sapata/1000, ndigits=4))) - self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) - self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) - - self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) - self.lineEdit_33.setText(str(round(as_x_min_laje*1000000, ndigits=4))) - self.lineEdit_34.setText(str(round(as_y_min_laje*1000000, ndigits=4))) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - def limpar_sapatas(self): - self.comboBox.setCurrentIndex(0) - self.comboBox_2.setCurrentIndex(0) - - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - - self.lineEdit_35.setText('0') - self.lineEdit_13.setText('1.1') - self.spinBox.setValue(30) - - self.lineEdit_9.setText('0') - self.lineEdit_10.setText('0') - self.lineEdit_11.setText('0') - self.lineEdit_12.setText('0') - - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - self.lineEdit_17.setText('') - self.lineEdit_18.setText('') - self.lineEdit_19.setText('') - self.lineEdit_20.setText('') - self.lineEdit_21.setText('') - self.lineEdit_22.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_25.setText('') - self.lineEdit_26.setText('') - self.lineEdit_27.setText('') - self.lineEdit_28.setText('') - - self.lineEdit_14.setText('') - self.lineEdit_29.setText('') - self.lineEdit_30.setText('') - self.lineEdit_31.setText('') - self.lineEdit_32.setText('') - self.lineEdit_33.setText('') - self.lineEdit_34.setText('') - -#---------------------------------------------- Janelas Adicionais ---------------------------------------------------- - - -class Tabela_Classe_Agressividade(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('class_agres.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Classes de Agressividade e Cobrimentos Mínimos') - self.setFixedSize(579, 520) - - def load_signals(self): - print('inicializado') - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - - self.tableWidget.setSpan(0, 0, 1, 4) - - header_2 = self.tableWidget_2.horizontalHeader() - header_2.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - - self.tableWidget_2.setSpan(0, 0, 2, 1) - self.tableWidget_2.setSpan(0, 1, 2, 1) - self.tableWidget_2.setSpan(0, 3, 2, 1) - - self.tableWidget_2.setSpan(3, 0, 2, 1) - self.tableWidget_2.setSpan(3, 1, 2, 1) - self.tableWidget_2.setSpan(3, 3, 2, 1) - - self.tableWidget_2.setSpan(5, 0, 2, 1) - self.tableWidget_2.setSpan(5, 1, 2, 1) - self.tableWidget_2.setSpan(5, 3, 2, 1) - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - inicio = Inicio() - vigas = Vigas() - detalhar_vigas = Detalhar_viga() - pilares = Pilares() - pilares_areas_aco = Pilar_area_aco() - #pilares.show() - #vigas.show() - lajes = Lajes() - #lajes.show() - sapatas = Sapatas() - #sapatas.show() - carga_adicional = Carga_Adicional() - tabela_classe_agressividade = Tabela_Classe_Agressividade() - tabela_bitolas = Tabela_Bitolas() - - app.exec_() \ No newline at end of file diff --git a/inicial_new_1.py b/inicial_new_1.py deleted file mode 100644 index 2b1fbbd..0000000 --- a/inicial_new_1.py +++ /dev/null @@ -1,2355 +0,0 @@ - - -import sys -import os -import math - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox, QTableWidget, QTableWidgetItem -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -import pyqtgraph as pg - - -import marcus - -tabela_marcus = 'tabela_marcus.pdf' -abaco_normal = 'abaco_normal.pdf' -abaco_obliqua = 'abaco_obliqua.pdf' - - -class Inicio(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = None - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('inicio_alt.ui',self) - self.label.setStyleSheet("Background-Color: #ddebff;") - - self.setWindowTitle('Navier - inicio') - - self.pushButton.setIcon(QtGui.QIcon('./btn_inicio_vigas.png')) - self.pushButton.setIconSize(QtCore.QSize(52,52)) - self.pushButton_3.setIcon(QtGui.QIcon('./btn_inicio_pilares.png')) - self.pushButton_3.setIconSize(QtCore.QSize(42,42)) - self.pushButton_9.setIcon(QtGui.QIcon('./btn_inicio_lajes.png')) - self.pushButton_9.setIconSize(QtCore.QSize(42,42)) - self.pushButton_11.setIcon(QtGui.QIcon('./btn_inicio_fundacoes.png')) - self.pushButton_11.setIconSize(QtCore.QSize(45,45)) - - - self.label_5.setStyleSheet("Background-Color: #ddebff;") - self.label_10.setStyleSheet("Background-Color: #ddebff;") - self.label_9.setStyleSheet("Background-Color: #ddebff;") - self.label_11.setStyleSheet("Background-Color: #ddebff;") - - self.pushButton_2.setIcon(QtGui.QIcon('./btn_caa.png')) - self.pushButton_2.setIconSize(QtCore.QSize(45,45)) - self.pushButton_5.setIcon(QtGui.QIcon('./btn_cadicional.png')) - self.pushButton_5.setIconSize(QtCore.QSize(45,45)) - self.pushButton_6.setIcon(QtGui.QIcon('./btn_tabbitolas.png')) - self.pushButton_6.setIconSize(QtCore.QSize(45,45)) - self.pushButton_7.setIcon(QtGui.QIcon('./btn_tabmarcus.png')) - self.pushButton_7.setIconSize(QtCore.QSize(45,45)) - self.pushButton_8.setIcon(QtGui.QIcon('./btn_flexaosimples.png')) - self.pushButton_8.setIconSize(QtCore.QSize(45,45)) - self.pushButton_23.setIcon(QtGui.QIcon('./btn_flexaocomposta.png')) - self.pushButton_23.setIconSize(QtCore.QSize(45,45)) - - self.label_21.setToolTip('Brunel - programa de cálculo e verificação de perfis metálicos para perfis brasileiros') - self.label_22.setToolTip('EngTool - aplicação mobile para cálculo de vigas de concreto armado') - - self.setFixedSize(570, 450) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.show() - - - def load_signals(self): - self.pushButton.clicked.connect(self.iniciar_vigas) - self.pushButton_3.clicked.connect(self.iniciar_pilares) - self.pushButton_9.clicked.connect(self.iniciar_lajes) - self.pushButton_11.clicked.connect(self.iniciar_fundacoes) - - self.pushButton_2.clicked.connect(self.iniciar_classe_agressividade) - self.pushButton_5.clicked.connect(self.iniciar_carga_adicional) - self.pushButton_6.clicked.connect(self.iniciar_tabela_bitolas) - - self.pushButton_7.clicked.connect(lambda: self.abrirTabelaAuxiliar(tabela_marcus)) - self.pushButton_23.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_normal)) - self.pushButton_8.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_obliqua)) - - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - def iniciar_vigas(self): - print('vigas') - vigas.show() - def iniciar_pilares(self): - print('pilares') - pilares.show() - def iniciar_lajes(self): - print('lajes') - lajes.show() - def iniciar_fundacoes(self): - print('fundações') - sapatas.show() - #--------------------------- forms complementares ----------------------------- - def iniciar_carga_adicional(self): - print('carga adicional') - carga_adicional.show() - def iniciar_tabela_bitolas(self): - print('carga adicional') - tabela_bitolas.show() - def iniciar_classe_agressividade(self): - print('classe de agressividade') - tabela_classe_agressividade.show() - - - -class Vigas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('vigas_alt.ui',self) - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Vigas') - self.setFixedSize(860, 620) - - def load_signals(self): - print('viga carregado') - self.pushButton.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(1)) - self.pushButton_2.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(0)) - self.pushButton_3.clicked.connect(lambda: detalhar_vigas.show()) - - self.pushButton_6.clicked.connect(self.calcular_viga_index) - self.pushButton_7.clicked.connect(self.limpar_vigas) - - self.radioButton.clicked.connect(lambda: self.lineEdit_35.setText('0.450')) - self.radioButton_2.clicked.connect(lambda: self.lineEdit_35.setText('0.628')) - - - def calcular_viga_index(self): - aux = self.stackedWidget.currentIndex() #retorn o indice do stackedwidget e indica se o cálculo é de simples ou dupla - #aux == 0 (Simples), aux == 1 (Dupla) - if aux == 1: - self.calcular_viga_simples() - else: - self.calcular_viga_dupla() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def calcular_viga_cortante(self): - aux = self.stackedWidget.currentIndex() - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - - if aux == 1: - bw_viga = float(self.lineEdit_3.text()) - h_viga = float(self.lineEdit_4.text()) - d_viga = float(self.lineEdit_5.text()) - - else: - bw_viga = float(self.lineEdit_15.text()) - h_viga = float(self.lineEdit_16.text()) - d_viga = float(self.lineEdit_17.text()) - - - theta_transversal = 45 - alfa_transversal = 90 - if self.radioButton_4.isChecked(): - theta_transversal = self.spinBox.value() - - theta_transversal = (theta_transversal/180)*math.pi - alfa_transversal = (alfa_transversal/180)*math.pi - - fator_cotangentes_transversal = ((math.cos(alfa_transversal)/math.sin(alfa_transversal))) + ((math.cos(theta_transversal)/math.sin(theta_transversal))) - fator_cotangentes_transversal = 1 - - vsd = vk_viga * 1.4 - vrd2 = 0.27 * (1-(fck_viga/250)) * (bw_viga/100) * fcd_viga * (d_viga/100) *(math.sin(2*theta_transversal))*fator_cotangentes_transversal * 1000 - print('VSD: ',vsd) - print('VRD2: ',vrd2) - - if vrd2 < vsd: - QMessageBox.about(self, "Alerta", "A seção de concreto não permite gerar bielas resistentes à compressão. Reveja as dimensões da viga ou esforços de cálculo para a estrutura.") - else: - vc_0 = 0.09*(fck_viga**(2/3))*(bw_viga/100)*(d_viga/100)*1000 - if self.radioButton_4.isChecked(): - vc_0 = vc_0*((vrd2 - vsd)/(vrd2 - vc_0)) - - vsw = vsd - vc_0 - - #as_transversal = (vsw/(0.9*(d_viga/100)*fyd_viga*fator_cotangentes_transversal*math.sin(alfa_transversal)))*1000 - as_transversal = (vsw/(0.9*(d_viga/100)*fyd_viga)*math.tan(theta_transversal))*1000 - - taxa_aco_cortante_retangular = 0.2*(0.3*fck_viga**(2/3))/fyk_viga - - as_min_transversal = ((bw_viga*10)*taxa_aco_cortante_retangular)*1000 # para deixar em mm² - - print('vk_viga: ',vk_viga) - print('vsd: ',vsd) - print('vrd2: ',vrd2) - print('vc_0: ',vc_0) - print('vsw: ',vsw) - print('as_transversal: ',as_transversal) - print('taxa_aco_cortante_retangular: ',taxa_aco_cortante_retangular) - print('as_min_transversal',as_min_transversal) - - #------------------------------------------- saida de dados -------------------------------------------------- - self.lineEdit_30.setText(str(round(vk_viga*1.4, ndigits=4))) - self.lineEdit_31.setText(str(round(vrd2, ndigits=4))) - self.lineEdit_32.setText(str(round(vc_0, ndigits=4))) - self.lineEdit_33.setText(str(round(vsw, ndigits=4))) - - self.lineEdit_34.setText(str(round(as_transversal, ndigits=4))) - self.lineEdit_37.setText(str(round(as_min_transversal, ndigits=4))) - - - if (vsd <= 0.67*vrd2): - espass_maximo = 30 - else: - espass_maximo = 20 - - global info_viga_cortante - info_viga_cortante = [str(vsw), espass_maximo] - - - - def calcular_viga_simples(self): - mk_viga = self.lineEdit.text() - vk_viga = self.lineEdit_2.text() - bw_viga = self.lineEdit_3.text() - h_viga = self.lineEdit_4.text() - d_viga = self.lineEdit_5.text() - - if (mk_viga != '0' and vk_viga != '0' and bw_viga != '0' and h_viga != '0' and d_viga != '0'): - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - bw_viga = float(self.lineEdit_3.text()) - h_viga = float(self.lineEdit_4.text()) - d_viga = float(self.lineEdit_5.text()) - - d_linha_viga = h_viga - d_viga - self.lineEdit_21.setText(str(round(d_linha_viga, ndigits=2))) - area_secao_viga = bw_viga * h_viga - - kmd_viga = (mk_viga * 1.4 * 1000)/((bw_viga/100) * ((d_viga/100)**2) * (0.85*fcd_viga*1000000)) - if kmd_viga >0.5: - QMessageBox.about(self, "Alerta", "Os esforços especificados não são suportados pela seção de concreto analisada. Por favor altera as dimensões da seção da viga ou reveja os esforços de cálculo para a estrutura.") - else: - kx_viga = (1 - math.sqrt(1 - 2*kmd_viga))/0.8 - kz_viga = 1 - 0.4*kx_viga - as_viga = (mk_viga * 1.4 * 1000)/(kz_viga * (d_viga/100) * fyd_viga) - - as_sobre_apoio_viga = as_viga/3 - if h_viga >= 60: - as_pele = (0.1/100)*area_secao_viga*100 - else: - as_pele = 0 - - as_max_viga = (4/100)*area_secao_viga*100 - - if fck_viga == 20: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 25: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 30: - taxa_aco_viga_retangular = 0.173/100 - elif fck_viga == 35: - taxa_aco_viga_retangular = 0.201/100 - elif fck_viga == 40: - taxa_aco_viga_retangular = 0.203/100 - elif fck_viga == 45: - taxa_aco_viga_retangular = 0.259/100 - elif fck_viga == 50: - taxa_aco_viga_retangular = 0.288/100 - - as_min_viga = taxa_aco_viga_retangular * area_secao_viga*100 - - - if kx_viga < 0: - dominio_viga = 'Domínio 1' - elif kx_viga > 0 and kx_viga <0.259: - dominio_viga = 'Domínio 2' - elif kx_viga > 0.259 and kx_viga <0.45: - dominio_viga = 'Domínio 3 - Dúctil' - elif kx_viga > 0.45 and kx_viga <0.63: - dominio_viga = 'Domínio 3 - Não Dúctil' - elif (kx_viga > 0.628 and kx_viga <1): - dominio_viga = 'Domínio 4a' - elif (kx_viga > 0.438 and kx_viga <1) and (fyk_viga == 600): - dominio_viga = 'Domínio 4a' - else: - dominio_viga = 'Domínio 4b' - - kmd_viga = self.truncar(kmd_viga) - kx_viga = self.truncar(kx_viga) - kz_viga = self.truncar(kz_viga) - - print('kmd_viga: ',kmd_viga) - print('kx_viga: ',kx_viga) - print('kz_viga: ',kz_viga) - print('as_viga: ',as_viga) - print('as_sobre_apoio_viga: ',as_sobre_apoio_viga) - print('as_max_viga: ',as_max_viga) - print('as_min_viga',as_min_viga) - - #-------------------------------------- saida de dados ------------------------------------------------ - self.lineEdit_6.setText(str(round(mk_viga*1.4,ndigits=4))) - self.lineEdit_13.setText(dominio_viga) - self.lineEdit_7.setText(str(kmd_viga)) - self.lineEdit_8.setText(str(kx_viga)) - self.lineEdit_9.setText(str(kz_viga)) - - self.lineEdit_10.setText(str(round(as_viga,ndigits=4))) - self.lineEdit_11.setText(str(round(as_sobre_apoio_viga,ndigits=4))) - self.lineEdit_12.setText(str(round(as_pele,ndigits=4))) - self.lineEdit_14.setText(str(round(as_max_viga,ndigits=4))) - self.lineEdit_20.setText(str(round(as_min_viga,ndigits=4))) - - #------------------------------------------------------------------------------------------------- - if (dominio_viga == 'Domínio 4a') or (dominio_viga == 'Domínio 4b'): - QMessageBox.about(self, "Atenção", "Domínio de cálculo 4, recomenda-se utilizar, em seção retangular, armadura dupla ou seção tê para contenção dos esforços de compressão do concreto.") - - if as_viga > as_max_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada superior a Área Máxima especificada para a seção da viga.") - if as_viga < as_min_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada inferior a Área Mínima especificada para a seção da viga.") - - self.calcular_viga_cortante() - - global info_viga - info_viga = [str(as_viga),str(bw_viga),str(h_viga),str(d_viga),str(1.9)] - - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - def calcular_viga_dupla(self): - mk_viga = self.lineEdit.text() - vk_viga = self.lineEdit_2.text() - bw_viga = self.lineEdit_15.text() - h_viga = self.lineEdit_16.text() - d_viga = self.lineEdit_17.text() - - if (mk_viga != '0' and vk_viga != '0' and bw_viga != '0' and h_viga != '0' and d_viga != '0'): - fck_viga = float(self.comboBox.currentText()) - fcd_viga = fck_viga/1.4 - fyk_viga = float(self.comboBox_2.currentText()) - fyd_viga = fyk_viga/1.15 - - mk_viga = float(self.lineEdit.text()) - vk_viga = float(self.lineEdit_2.text()) - bw_viga = float(self.lineEdit_15.text()) - h_viga = float(self.lineEdit_16.text()) - d_viga = float(self.lineEdit_17.text()) - - d_linha_viga = h_viga - d_viga - self.lineEdit_27.setText(str(round(d_linha_viga, ndigits=4))) - - xis_dominio = float(self.lineEdit_35.text()) - - d_min_viga = math.sqrt((mk_viga*1.4*1000)/((bw_viga/100) * (fcd_viga*1000000) * (0.68*xis_dominio - 0.272*(xis_dominio**2)))) - - x_lim_viga = xis_dominio * (d_viga/100) - - momento_lim_viga = 0.68 * (bw_viga/100) * (fcd_viga*1000) * x_lim_viga*((d_viga/100) - 0.4*x_lim_viga) - - print('d_min_viga: ',d_min_viga) - print('x_lim_viga: ',x_lim_viga) - print('momento_lim_viga: ',momento_lim_viga) - - if d_min_viga < (h_viga/100): - self.lineEdit_36.setText(str(round(d_min_viga, ndigits=5))) - self.lineEdit_18.setText(str(round(x_lim_viga, ndigits=5))) - QMessageBox.about(self, "Observação", "A altura atual da viga é maior que a altura útil mínima, calcule como simplesmente armada") - - else: - - momento_lim_viga = 0.68 * (bw_viga/100) * (fcd_viga*1000) * x_lim_viga*((d_viga/100) - 0.4*x_lim_viga) - momento_2_viga = (mk_viga*1.4) - momento_lim_viga - - as_compressao_viga = (momento_2_viga * 1000)/(((d_viga/100) - (d_linha_viga/100))*(fyd_viga)) - #as_tracao_viga = ((momento_lim_viga * 1000)/((1 - 0.4*x_lim_viga)*(d_viga/100)*fyd_viga)) - as_tracao_viga = ((momento_lim_viga * 1000)/((1 - 0.4*xis_dominio)*(d_viga/100)*fyd_viga)) - - as_tracao_viga = as_tracao_viga + as_compressao_viga - - as_total_viga = as_tracao_viga + as_compressao_viga - - as_sobre_apoio_viga = as_tracao_viga/3 - - area_secao_viga = bw_viga * h_viga - if h_viga >= 60: - as_pele = (0.1/100)*area_secao_viga*100 - else: - as_pele = 0 - - if fck_viga == 20: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 25: - taxa_aco_viga_retangular = 0.15/100 - elif fck_viga == 30: - taxa_aco_viga_retangular = 0.173/100 - elif fck_viga == 35: - taxa_aco_viga_retangular = 0.201/100 - elif fck_viga == 40: - taxa_aco_viga_retangular = 0.203/100 - elif fck_viga == 45: - taxa_aco_viga_retangular = 0.259/100 - elif fck_viga == 50: - taxa_aco_viga_retangular = 0.288/100 - - as_max_viga = (4/100)*area_secao_viga*100 - as_min_viga = taxa_aco_viga_retangular * area_secao_viga*100 - - - print('momento_lim_viga: ',momento_lim_viga) - print('momento_2_viga: ',momento_2_viga) - print('as_compressao_viga: ',as_compressao_viga) - print('as_tracao_viga: ',as_tracao_viga) - - - #------------------------------------------ saida de dados -------------------------------------------------- - self.lineEdit_36.setText(str(round(d_min_viga, ndigits=5))) - self.lineEdit_18.setText(str(round(x_lim_viga, ndigits=5))) - self.lineEdit_26.setText(str(round(momento_lim_viga, ndigits=5))) - self.lineEdit_19.setText(str(round(momento_2_viga, ndigits=5))) - - self.lineEdit_22.setText(str(round(as_compressao_viga, ndigits=5))) - self.lineEdit_28.setText(str(round(as_tracao_viga, ndigits=5))) - self.lineEdit_23.setText(str(round(as_sobre_apoio_viga, ndigits=5))) - self.lineEdit_24.setText(str(round(as_pele, ndigits=5))) - self.lineEdit_38.setText(str(round(as_total_viga, ndigits=2))) - self.lineEdit_25.setText(str(round(as_max_viga, ndigits=2))) - self.lineEdit_29.setText(str(round(as_min_viga, ndigits=2))) - #------------------------------------------ ------------- -------------------------------------------------- - - if as_total_viga > as_max_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada superior a Área Máxima especificada para a seção da viga.") - if as_total_viga < as_min_viga: - QMessageBox.about(self, "Atenção", "Área Total calculada inferior a Área Mínima especificada para a seção da viga.") - - self.calcular_viga_cortante() - - global info_viga - info_viga = [str(as_tracao_viga),str(bw_viga),str(h_viga),str(d_viga),str(1.9)] - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - def limpar_vigas(self): - self.comboBox.setCurrentIndex(0) - self.comboBox_2.setCurrentIndex(0) - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - self.lineEdit_21.setText('0') - - self.lineEdit_6.setText('') - self.lineEdit_7.setText('') - self.lineEdit_8.setText('') - self.lineEdit_9.setText('') - self.lineEdit_10.setText('') - self.lineEdit_11.setText('') - self.lineEdit_12.setText('') - self.lineEdit_13.setText('') - self.lineEdit_14.setText('') - - self.lineEdit_15.setText('0') - self.lineEdit_16.setText('0') - self.lineEdit_17.setText('0') - self.lineEdit_27.setText('0') - - self.lineEdit_36.setText('') - self.lineEdit_18.setText('') - self.lineEdit_26.setText('') - self.lineEdit_19.setText('') - self.lineEdit_22.setText('') - self.lineEdit_28.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_38.setText('') - self.lineEdit_25.setText('') - self.lineEdit_29.setText('') - - self.lineEdit_30.setText('') - self.lineEdit_31.setText('') - self.lineEdit_32.setText('') - self.lineEdit_33.setText('') - self.lineEdit_34.setText('') - self.lineEdit_37.setText('') - -tabela_bitolas_ferro = [ - [6.3, 31.17], - [8, 50.26], - [10, 78.53], - [12.5, 122.71], - [16, 201.06], - [20, 314.15], - [25, 490.87], - [32, 804.24], - [40, 1256.63] - ] - -#info_viga = ['95','12','45','40','1.9'] -#info_viga = [As,bw,h,d,agregado] - -class Detalhar_viga(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('detalhamento_vigas_alt.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Vigas - Detalhamento') - self.setFixedSize(845,600) - - - def load_signals(self): - print('inicializado') - self.pushButton.clicked.connect(self.calcular_area) - #self.pushButton.clicked.connect(self.calcular_estribos) - self.pushButton_2.clicked.connect(self.limpar_detalhamento) - self.pushButton_3.clicked.connect(self.recuperarValores) - - - #pg.plot(x=[0,1,2,3,4], y=[0,1,2,3,4]**2 ) - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(5, QtWidgets.QHeaderView.Stretch) - - self.widget.setTitle('nº barras/Bitola') - self.widget.showGrid(x=True,y=True,alpha=1) - - #if '0' not in info_viga: - # self.recuperarValores() - - def calcular_estribos(self): - vsw = self.lineEdit_14.text() - fyk_estribo = self.comboBox_2.currentText() - tramos = self.lineEdit_15.text() - - if (vsw != '0' and tramos != '0'): - vsw = float(self.lineEdit_14.text()) - bitola_estribo = float(self.comboBox.currentText()) - fyk_estribo = float(self.comboBox_2.currentText()) - tramos = float(self.lineEdit_15.text()) - d = float(self.lineEdit_13.text()) - - espass_horizontal = info_viga_cortante[1] - - area_bitola = (3.14*((bitola_estribo/1000)**2)/4) - - print(vsw) - print(bitola_estribo) - print(tramos) - print(fyk_estribo) - print(area_bitola) - - - s_estribo = ((tramos * area_bitola * 0.9 * (d/100) * (fyk_estribo*100000/1.15))/vsw*1000)/100 - s_estribo = round(s_estribo, ndigits=3) - - if s_estribo < espass_horizontal: - self.lineEdit.setText(str(espass_horizontal)) - else: - self.lineEdit.setText(str(s_estribo)) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes para o cálculo dos Estribos!") - - - def recuperarValores(self): - area_aco = info_viga[0] - base = info_viga[1] - altura = info_viga[2] - d = info_viga[3] - d_agreg = info_viga[4] - - vsw = info_viga_cortante[0] - - self.lineEdit_11.setText(area_aco) - self.lineEdit_10.setText(base) - self.lineEdit_9.setText(altura) - self.lineEdit_12.setText(d_agreg) - self.lineEdit_13.setText(d) - self.lineEdit_14.setText(vsw) - - def calcular_area(self): - area_aco = self.lineEdit_11.text() - base = self.lineEdit_10.text() - altura = self.lineEdit_9.text() - d_agreg = self.lineEdit_12.text() - d = self.lineEdit_13.text() - - if (area_aco != '0' and base != '0' and altura != '0' and d_agreg != '0' and d != '0'): - - self.widget.clear() - area_aco = float(self.lineEdit_11.text()) - base = float(self.lineEdit_10.text()) - altura = float(self.lineEdit_9.text()) - cobrimento = float(self.comboBox_3.currentText()) - bitola_estribo = float(self.comboBox.currentText()) - x = [] - y = [] - z = [] - cont = 0 - for i in tabela_bitolas_ferro: - n_barras = float(area_aco/i[1]) - print('bitola: ',i[0],' - nº barras: ',n_barras) - - self.tableWidget.setItem(cont,2, QTableWidgetItem(str(round(n_barras, ndigits=2)))) - self.tableWidget.setItem(cont,3, QTableWidgetItem(str(round(n_barras +0.5)+1))) - - x.append(i[0]) - y.append(round(n_barras +0.5)+1) - - bitola = x[cont] - n_barras = (round(n_barras +0.5)+1) - - espass_horizontal = (round(base - 2*(cobrimento+bitola_estribo/10) - n_barras*(bitola/10), ndigits=2))/(n_barras-1) - - z.append(round(espass_horizontal,ndigits=2)) - self.tableWidget.setItem(cont,4, QTableWidgetItem(str(espass_horizontal))) - - print('base:',base) - print('cobrimento:',cobrimento) - print('bitola_estribo:',bitola_estribo) - print('n_barras:',n_barras) - - cont +=1 - - #print(x) - #print(y) - #print(z) - - self.widget.plot(x=x,y=y,pen=(3)) - - self.calcular_espacamentos() - self.calcular_estribos() - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - def calcular_espacamentos(self): - bitola = float(self.comboBox_4.currentText()) - d_agreg = float(self.lineEdit_12.text()) - - s_horizontal = max(2, (bitola/10), 1.2*d_agreg) - s_vertical = max(2, (bitola/10), 0.5*d_agreg) - - #------------------------------- saida de dados ---------------------------------- - self.lineEdit_7.setText(str(s_horizontal)) - self.lineEdit_8.setText(str(s_vertical)) - - def limpar_detalhamento(self): - self.widget.clear() - self.lineEdit_11.setText(str('0')) - self.lineEdit_9.setText(str('0')) - self.lineEdit_10.setText(str('0')) - self.lineEdit_7.setText(str('0')) - self.lineEdit_8.setText(str('0')) - - - -class Tabela_Bitolas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('bitolas_ferros.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - - self.setWindowTitle('Navier - Tabela de Bitolas') - self.setFixedSize(456,372) - - -global pilares_info -pilares_info = [0,0,0,0] - -global pilares_info_aco -pilares_info_aco = [0, 0, 0, 0, 0, 0, 0] - -class Pilares(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('pilares_alt.ui',self) - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Pilares') - self.setFixedSize(997,670) - - def load_signals(self): - print('pilares carregado') - self.cont_x = 0 - self.cont_y = 0 - - self.pushButton_6.clicked.connect(self.calcular_pilares) - self.pushButton_7.clicked.connect(self.limpar_pilares) - - self.pushButton.clicked.connect(self.gerar_envoltoria) - self.pushButton_3.clicked.connect(lambda: pilares_areas_aco.show()) - - - def calcular_pilares(self): - x_pilar = self.lineEdit.text() - y_pilar = self.lineEdit_2.text() - altura_pilar = self.lineEdit_3.text() - altura_lance = self.lineEdit_4.text() - - nk_pilar = self.lineEdit_5.text() - momento_x_topo = self.lineEdit_6.text() - momento_x_base = self.lineEdit_7.text() - momento_y_topo = self.lineEdit_8.text() - momento_y_base = self.lineEdit_9.text() - - - if (x_pilar != '0' and y_pilar != '0' and altura_pilar != '0' and altura_lance != '0' and nk_pilar != '0'): - fck_pilar = float(self.comboBox_3.currentText()) - fcd_pilar = fck_pilar/1.4 - fyk_pilar = float(self.comboBox_4.currentText()) - fyd_pilar = fyk_pilar/1.15 - cobrimento_pilar = float(self.comboBox_5.currentText()) - - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - altura_pilar = float(self.lineEdit_3.text()) - altura_lance = float(self.lineEdit_4.text()) - - nk_pilar = float(self.lineEdit_5.text()) - momento_x_topo = float(self.lineEdit_6.text()) - momento_x_base = float(self.lineEdit_7.text()) - momento_y_topo = float(self.lineEdit_8.text()) - momento_y_base = float(self.lineEdit_9.text()) - - area_secao_pilar = (x_pilar/100)*(y_pilar/100) - - #nd_pilar = (nk_pilar + ((x_pilar/100)*(y_pilar/100)*altura_pilar*25)) * 1.4 - nd_pilar = (nk_pilar) * 1.4 - md_x_topo = 1.4 * momento_x_topo - md_x_base = 1.4 * momento_x_base - md_y_topo = 1.4 * momento_y_topo - md_y_base = 1.4 * momento_y_base - - - tipo_apoio_x = 'AA' - - if momento_x_topo == 0 and momento_x_base == 0 and momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'intermediario' - elif momento_x_topo == 0 and momento_x_base == 0: - self.tipo_pilar = 'extremidade-x' - elif momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'extremidade-y' - else: - self.tipo_pilar = 'canto' - - - self.lineEdit_13.setText(str(round(md_x_topo, ndigits=5))) - self.lineEdit_14.setText(str(round(md_x_base, ndigits=5))) - self.lineEdit_22.setText(str(round(md_y_topo, ndigits=5))) - self.lineEdit_28.setText(str(round(md_y_base, ndigits=5))) - - #-Eixo-X---------------------------------------------------------------------- - b = y_pilar - h = x_pilar - - m_a = max(md_x_topo, md_x_base) - m_b = min(md_x_topo, md_x_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-x': - alfa_b_x = 1.0 - else: - alfa_b_x = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_x < 0.4: - alfa_b_x = 0.4 - - #excen_min_x = (1.5+0.03*h) - momento_min_x = (nd_pilar *(1.5+0.03*h))/100 - excen_min_x = momento_min_x/nd_pilar - - if md_x_topo < momento_min_x: - md_x_topo = momento_min_x - print('momento topo - mínimo') - alfa_b_x = 1.0 - if md_x_base < momento_min_x: - md_x_base = momento_min_x - print('momento base - mínimo') - alfa_b_x = 1.0 - - compr_efetivo_x = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_x): - compr_efetivo_x = altura_lance*100 - - excen_x_acidental = compr_efetivo_x/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_x_topo,md_x_base,momento_min_x)/nd_pilar)/h - - lambda_pilar_x = 3.46 * (compr_efetivo_x/h) - lambda_pilar_x_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_x - if lambda_pilar_x_limite < 35: - lambda_pilar_x_limite = 35 - - excen_2_x = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_x = nd_pilar * (excen_2_x/100) - - if lambda_pilar_x > lambda_pilar_x_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - md2_x_relativo = nd_pilar * (excen_2/100) - else: - md2_x_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_x_intermediario = alfa_b_x * max(abs(md_x_topo), abs(md_x_base), abs(momento_min_x)) + md2_x_relativo - #msd_x_intermediario = alfa_b_x * abs(momento_min_x) + md2_x_relativo - - mi_x = msd_x_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_x = cobrimento_pilar/h - - - #-Eixo-Y---------------------------------------------------------------------- - h = y_pilar - b = x_pilar - - m_a = max(md_y_topo, md_y_base) - m_b = min(md_y_topo, md_y_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-y': - alfa_b_y = 1.0 - else: - alfa_b_y = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_y < 0.4: - alfa_b_y = 0.4 - - momento_min_y = (nd_pilar *(1.5+0.03*h))/100 - excen_min_y = momento_min_y/nd_pilar - - if md_y_topo < momento_min_y: - md_y_topo = momento_min_y - print('momento topo - mínimo') - alfa_b_y = 1.0 - if md_y_base < momento_min_y: - md_y_base = momento_min_y - print('momento base - mínimo') - alfa_b_y = 1.0 - - compr_efetivo_y = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_y): - compr_efetivo_y = altura_lance*100 - - excen_y_acidental = compr_efetivo_y/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_y_topo,md_y_base,momento_min_y)/nd_pilar)/h - - lambda_pilar_y = 3.46 * (compr_efetivo_y/h) - lambda_pilar_y_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_y - if lambda_pilar_y_limite < 35: - lambda_pilar_y_limite = 35 - - excen_2_y = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_y = nd_pilar * (excen_2_y/100) - - if lambda_pilar_y > lambda_pilar_y_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - md2_y_relativo = nd_pilar * (excen_2/100) - else: - md2_y_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_y_intermediario = alfa_b_y * max(abs(md_y_topo), abs(md_y_base), abs(momento_min_y)) + md2_y_relativo - #msd_y_intermediario = alfa_b_y * abs(momento_min_y) + md2_y_relativo - - mi_y = msd_y_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_y = cobrimento_pilar/h - - - #--------------------------------------------- saida de dados --------------------------------------------- - self.lineEdit_10.setText(str(round(nd_pilar, ndigits=4))) - self.lineEdit_11.setText(str(round(area_secao_pilar, ndigits=4))) - self.lineEdit_12.setText(str(round(v_0, ndigits=4))) - - self.lineEdit_15.setText(str(round(momento_min_x, ndigits=5))) - self.lineEdit_16.setText(str(round(excen_min_x*100, ndigits=5))) - self.lineEdit_17.setText(str(round(lambda_pilar_x, ndigits=5))) - self.lineEdit_18.setText(str(round(lambda_pilar_x_limite, ndigits=5))) - self.lineEdit_19.setText(str(round(excen_2_x, ndigits=5))) - self.lineEdit_20.setText(str(round(md2_x, ndigits=5))) - self.lineEdit_21.setText(str(round(msd_x_intermediario, ndigits=5))) - - self.lineEdit_24.setText(str(round(momento_min_y, ndigits=5))) - self.lineEdit_25.setText(str(round(excen_min_y*100, ndigits=5))) - self.lineEdit_26.setText(str(round(lambda_pilar_y, ndigits=5))) - self.lineEdit_23.setText(str(round(lambda_pilar_y_limite, ndigits=5))) - self.lineEdit_30.setText(str(round(excen_2_y, ndigits=5))) - self.lineEdit_29.setText(str(round(md2_y, ndigits=5))) - self.lineEdit_27.setText(str(round(msd_y_intermediario, ndigits=5))) - - self.lineEdit_31.setText(str(round(mi_x, ndigits=2))) - self.lineEdit_32.setText(str(round(mi_y, ndigits=2))) - self.lineEdit_33.setText(str(round(delta_x, ndigits=2))) - self.lineEdit_34.setText(str(round(delta_y, ndigits=2))) - - global pilares_info - pilares_info = [msd_x_intermediario, msd_y_intermediario, momento_min_x, momento_min_y] - - if md2_x_relativo == 0: - self.label_39.setText('não considera 2º ordem') - else: - self.label_39.setText('considera 2º ordem') - - if md2_y_relativo == 0: - self.label_44.setText('não considera 2º ordem') - else: - self.label_44.setText('considera 2º ordem') - - - if self.tipo_pilar == 'intermediario': - self.label.setText('PILAR INTERMEDIÁRIO') - elif (self.tipo_pilar == 'extremidade-x') or (self.tipo_pilar == 'extremidade-y'): - self.label.setText('PILAR DE EXTREMIDADE') - else: - self.label.setText('PILAR DE CANTO') - - global pilares_info_aco - pilares_info_aco = [mi_x, delta_x, mi_y, delta_y, fck_pilar, area_secao_pilar, nk_pilar] - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - def gerar_envoltoria(self): - msd_x_intermediario = pilares_info[0] - msd_y_intermediario = pilares_info[1] - momento_min_x = pilares_info[2] - momento_min_y = pilares_info[3] - - x = [] - y = [] - for i in range(360): - theta = i - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = momento_min_y * seno - - cosseno = math.cos(theta_conv) - cosseno = momento_min_x * cosseno - - x.append(seno) - y.append(cosseno) - - z = [] - w = [] - for j in range(360): - theta = j - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = msd_y_intermediario * seno - - cosseno = math.cos(theta_conv) - cosseno = msd_x_intermediario * cosseno - - z.append(seno) - w.append(cosseno) - - # create plot - '''plt = pg.plot(x, y, title='theTitle', pen='r') - plt.showGrid(x=True,y=True) - ''' - # create plot - plt = pg.plot() - plt.clear() - plt.showGrid(x=True,y=True) - plt.addLegend() - plt.setTitle('Envoltória de Momentos') - - - # set properties - plt.setLabel('left', 'Momentos Y', units='KN.m') - plt.setLabel('bottom', 'Momentos X', units='KN.m') - plt.setXRange(0,10) - plt.setYRange(0,20) - - - plt.enableAutoRange() - plt.setWindowTitle('pyqtgraph plot') - # plot - c1 = plt.plot(x, y, pen='r', name='Envoltória Momentos min') - c2 = plt.plot(z, w, pen='b', name='Envoltória Momentos máx') - - - - def limpar_pilares(self): - print('limpar') - self.comboBox_3.setCurrentIndex(0) - self.comboBox_4.setCurrentIndex(0) - self.comboBox_5.setCurrentIndex(0) - - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - self.lineEdit_6.setText('0') - self.lineEdit_7.setText('0') - self.lineEdit_8.setText('0') - self.lineEdit_9.setText('0') - - self.lineEdit_10.setText('') - self.lineEdit_11.setText('') - self.lineEdit_12.setText('') - self.lineEdit_13.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - self.lineEdit_17.setText('') - self.lineEdit_18.setText('') - self.lineEdit_19.setText('') - self.lineEdit_20.setText('') - self.lineEdit_21.setText('') - self.lineEdit_22.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_25.setText('') - self.lineEdit_26.setText('') - self.lineEdit_27.setText('') - self.lineEdit_28.setText('') - self.lineEdit_29.setText('') - self.lineEdit_30.setText('') - - self.lineEdit_31.setText('') - self.lineEdit_32.setText('') - self.lineEdit_33.setText('') - self.lineEdit_34.setText('') - - - - -class Pilar_area_aco(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('pilares_areas_aco.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Pilares - Áreas de Aço') - self.setFixedSize(484,300) - - self.pushButton_4.setIcon(QtGui.QIcon('./btn_flexaosimples.png')) - self.pushButton_4.setIconSize(QtCore.QSize(50,60)) - self.pushButton_5.setIcon(QtGui.QIcon('./btn_flexaocomposta.png')) - self.pushButton_5.setIconSize(QtCore.QSize(50,60)) - - def load_signals(self): - print('inicializado') - self.pushButton_2.clicked.connect(self.calcular_area_aco) - self.pushButton.clicked.connect(self.recuperar_dados) - self.pushButton_3.clicked.connect(self.limpar) - self.pushButton_4.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_normal)) - self.pushButton_5.clicked.connect(lambda: self.abrirTabelaAuxiliar(abaco_obliqua)) - - def recuperar_dados(self): - self.lineEdit_2.setText(str(round(pilares_info_aco[0], ndigits=2))) - self.lineEdit_3.setText(str(round(pilares_info_aco[1], ndigits=2))) - self.lineEdit_5.setText(str(round(pilares_info_aco[2], ndigits=2))) - self.lineEdit_6.setText(str(round(pilares_info_aco[3], ndigits=2))) - self.lineEdit_12.setText(str(round(pilares_info_aco[4], ndigits=2))) - self.lineEdit_13.setText(str(round(pilares_info_aco[5], ndigits=2))) - self.lineEdit_14.setText(str(round(pilares_info_aco[6], ndigits=2))) - - def calcular_area_aco(self): - fck = float(self.lineEdit_12.text()) - fcd = fck/1.4 - fyd = 500/1.15 - area_concreto = float(self.lineEdit_13.text()) - nk = float(self.lineEdit_14.text()) - nd = 1.4 * nk - - mi_x = float(self.lineEdit_2.text()) - delta_x = float(self.lineEdit_3.text()) - - mi_y = float(self.lineEdit_5.text()) - delta_y = float(self.lineEdit_6.text()) - - omega_x = float(self.lineEdit_4.text()) - omega_y = float(self.lineEdit_7.text()) - - as_x = (omega_x * (area_concreto*1000000) * fcd)/fyd - as_y = (omega_y * (area_concreto*1000000) * fcd)/fyd - - as_x = round(as_x, ndigits=3) - as_y = round(as_y, ndigits=3) - - as_pilar_min = 0.15 * (nd/fyd) - if as_pilar_min < (0.004*area_concreto*100000): - as_pilar_min = round((0.004*area_concreto*100000), ndigits=3) - - as_pilar_max = round((0.08*area_concreto*1000000), ndigits=3) - - #-------------------------------------- saída de dados ---------------------------------------------------- - self.lineEdit_8.setText(str(as_x)) - self.lineEdit_9.setText(str(as_y)) - self.lineEdit_10.setText(str(as_pilar_max)) - self.lineEdit_11.setText(str(as_pilar_min)) - - def teste(self): - print('teste') - - def limpar(self): - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('1') - self.lineEdit_5.setText('0') - self.lineEdit_6.setText('0') - self.lineEdit_7.setText('1') - self.lineEdit_8.setText('0') - self.lineEdit_9.setText('0') - self.lineEdit_10.setText('0') - self.lineEdit_11.setText('0') - self.lineEdit_12.setText('0') - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - - - -class Lajes(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('lajes_alt.ui',self) - - self.lado1 = 'livre' - self.lado2 = 'livre' - self.lado3 = 'livre' - self.lado4 = 'livre' - self.label_37.hide() - self.label_38.hide() - self.label_40.hide() - self.label_41.hide() - global caso - caso = '1' - global lx_lage - lx_lage = 'l_menor' - self.lineEdit.setReadOnly(True) - - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Lajes') - self.setFixedSize(1245,587) - - - def load_signals(self): - print('lajes iniciado') - self.pushButton.clicked.connect(self.estado_l1) - self.pushButton_2.clicked.connect(self.estado_l2) - self.pushButton_3.clicked.connect(self.estado_l3) - self.pushButton_4.clicked.connect(self.estado_l4) - self.pushButton.clicked.connect(self.situacao_laje) - self.pushButton_2.clicked.connect(self.situacao_laje) - self.pushButton_3.clicked.connect(self.situacao_laje) - self.pushButton_4.clicked.connect(self.situacao_laje) - - self.pushButton_5.clicked.connect(lambda: self.abrirTabelaAuxiliar(tabela_marcus)) - self.pushButton_6.clicked.connect(self.calcular_laje) - self.pushButton_7.clicked.connect(self.limpar_lajes) - - self.toolButton.clicked.connect(self.revelar_carg_acidental) - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - def teste(self): - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - def revelar_carg_acidental(self): - print('oi--') - carga_adicional.show() - - def estado_l1(self): - if self.lado1 == 'livre': - self.lado1 = 'engastado' - pixmap = QPixmap('./engv.png') - self.pushButton.setIcon(QIcon(pixmap)) - else: - self.lado1 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - def estado_l2(self): - if self.lado2 == 'livre': - self.lado2 = 'engastado' - pixmap = QPixmap('./engh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - else: - self.lado2 = 'livre' - pixmap = QPixmap('./livh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - - def estado_l3(self): - if self.lado3 == 'livre': - self.lado3 = 'engastado' - pixmap = QPixmap('./engh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - else: - self.lado3 = 'livre' - pixmap = QPixmap('./livh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - - def estado_l4(self): - if self.lado4 == 'livre': - self.lado4 = 'engastado' - pixmap = QPixmap('./engv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - else: - self.lado4 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - def situacao_laje(self): - l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - l4 = self.lado4 - - cota_v1 = self.label_37 - cota_v2 = self.label_40 - cota_h1 = self.label_38 - cota_h2 = self.label_41 - - if (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre'): - global caso - caso = '1' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - global lx_lage - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '2' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') : - caso = '2' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') or (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado'): - caso = '3' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '4' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '4' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado'): - caso = '5' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '5' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado'): - caso = '6' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - else: - caso='ainda não existe, não sei como você chegou até aqui srsrrsrsrsrsrs' - - - print(caso) - self.lineEdit_6.setText(str(caso)) - - def calcular_laje(self): - lado_maior = float(self.lineEdit_3.text()) - lado_menor = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - - self.lineEdit_7.setText('') - self.lineEdit_9.setText('') - self.lineEdit_8.setText('') - self.lineEdit_10.setText('') - self.lineEdit_16.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - - if lado_maior != 0 and lado_menor != 0 and espes != 0 and d != 0: - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - carreg_adicional = float(self.lineEdit_2.text()) - #fck_laje = float(self.comboBox.currentText()) - #fcd_laje = fck_laje/1.4 - #fyk_laje = float(self.comboBox_2.currentText()) - #fyd_laje = fyk_laje/1.15 - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - carreg_total = pp + carreg_adicional - #print(caso) - #print(lx_lage) - #---------------------------------- cálculo do Lx baseado no caso do tipo de situação da laje ----------------- - global lx - global lambda_laje - if lx_lage == 'l_menor': - lx = lado2 - lambda_laje = round((lado1/lado2),ndigits=2) - elif lx_lage == 'l_maior': - lx = lado1 - lambda_laje = round((lado2/lado1),ndigits=2) - print(lx_lage) - - - #---------------------------------- definição se a laje é unidirecional ou bidirecional baseado no lambda ----------------- - global tipo_laje - if float(lambda_laje) > 2.001: - tipo_laje = 'UNIDIRECIONAL' - self.laje_unidirecional(carreg_total) - else: - tipo_laje = 'BIDIRECIONAL' - #self.label_43.setStyleSheet("Background: url('laje_unidirecional_modelo.png') no-repeat") - - mx = my = nx = ny = '' - - if caso == '1': - caso1 = marcus.caso1 - linhas = len(caso1) - colunas = len(caso1[0]) - - for i in range(linhas): - aux = caso1[i][0] - if lambda_laje == aux: - print(caso1[i]) - mx = caso1[i][2] - my = caso1[i][3] - - print('mx: ',mx) - print('my: ',my) - - if caso == '2': - caso2 = marcus.caso2 - linhas = len(caso2) - colunas = len(caso2[0]) - - for i in range(linhas): - aux = caso2[i][0] - if lambda_laje == aux: - print(caso2[i]) - mx = caso2[i][2] - nx = caso2[i][3] - my = caso2[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '3': - caso3 = marcus.caso3 - linhas = len(caso3) - colunas = len(caso3[0]) - - for i in range(linhas): - aux = caso3[i][0] - if lambda_laje == aux: - print(caso3[i]) - mx = caso3[i][2] - nx = caso3[i][3] - my = caso3[i][4] - ny = caso3[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '4': - caso4 = marcus.caso4 - linhas = len(caso4) - colunas = len(caso4[0]) - - for i in range(linhas): - aux = caso4[i][0] - if lambda_laje == aux: - print(caso4[i]) - mx = caso4[i][2] - nx = caso4[i][3] - my = caso4[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '5': - caso5 = marcus.caso5 - linhas = len(caso5) - colunas = len(caso5[0]) - - for i in range(linhas): - aux = caso5[i][0] - if lambda_laje == aux: - print(caso5[i]) - mx = caso5[i][2] - nx = caso5[i][3] - my = caso5[i][4] - ny = caso5[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '6': - caso6 = marcus.caso6 - linhas = len(caso6) - colunas = len(caso6[0]) - - for i in range(linhas): - aux = caso6[i][0] - if lambda_laje == aux: - print(caso6[i]) - mx = caso6[i][2] - nx = caso6[i][3] - my = caso6[i][4] - ny = caso6[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - print(lx) - if mx != '': - self.lineEdit_7.setText(str(mx)) - momento_pos_x = ((carreg_total * (lx**2))/mx) - momento_pos_x = round(momento_pos_x,ndigits=4) - - - self.lineEdit_13.setText(str(momento_pos_x)) - #else: - # self.lineEdit_13.setText('0') - if nx != '': - self.lineEdit_9.setText(str(nx)) - momento_neg_x = round(((carreg_total * (lx**2))/nx),ndigits=4) - self.lineEdit_14.setText(str(momento_neg_x)) - #momento_neg_x = round(momento_neg_x,ndigits=2) - #else: - # self.lineEdit_14.setText('0') - if my != '': - self.lineEdit_8.setText(str(my)) - momento_pos_y = ((carreg_total * (lx**2))/my) - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - #else: - # self.lineEdit_15.setText('0') - if ny != '': - self.lineEdit_10.setText(str(ny)) - momento_neg_y = round(((carreg_total * (lx**2))/ny),ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - #momento_neg_y = round(momento_neg_y,ndigits=2) - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - def laje_unidirecional(self,carreg_total): - - self.lado1 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - self.lado4 = 'livre' - pixmap = QPixmap('./livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - print('unidirecional') - #l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - #l4 = self.lado4 - l1 = l4 = 'livre' - print(carreg_total) - if (l2 == 'livre' and l3 == 'livre'): - self.label_43.setStyleSheet("Background: url('./laje_unidirecional_ll2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/8 - momento_neg_y = 0 - elif (l2 == 'engastado' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('./laje_unidirecional_ee2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/24 - momento_neg_y = (carreg_total * (lx**2))/12 - elif (l2 == 'engastado' and l3 == 'livre') or (l2 == 'livre' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('./laje_unidirecional_le2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/14.2 - momento_neg_y = (carreg_total * (lx**2))/8 - - print('momento_pos_y: ',momento_pos_y) - print('momento_neg_y: ',momento_neg_y) - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - momento_neg_y = round(momento_neg_y,ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def resultados_laje(self): - fck_laje = float(self.comboBox.currentText()) - fcd_laje = fck_laje/1.4 - fyk_laje = float(self.comboBox_2.currentText()) - fyd_laje = fyk_laje/1.15 - espes = float(self.lineEdit_5.text()) - - area_concreto_laje = round(((espes/100)*1000000),ndigits=4) - - ro_armad_minima = 0 - if fck_laje == 20: - ro_armad_minima = 0.15/100 - elif fck_laje == 25: - ro_armad_minima = 0.15/100 - elif fck_laje == 30: - ro_armad_minima = 0.15/100 - elif fck_laje == 35: - ro_armad_minima = 0.164/100 - elif fck_laje == 40: - ro_armad_minima = 0.179/100 - - armad_max_laje = (0.4/100)*area_concreto_laje - armad_neg_min = ro_armad_minima*area_concreto_laje - armad_pos_cruz = round(0.67*(ro_armad_minima*area_concreto_laje), ndigits=2) - armad_princ_unid = ro_armad_minima*area_concreto_laje - armad_secnd_unid = max((0.2*armad_princ_unid), (90), (0.5*(ro_armad_minima*area_concreto_laje))) - - - mx = self.lineEdit_13.text() - if mx == '': - self.lineEdit_13.setText('0') - - my = self.lineEdit_15.text() - if my == '': - self.lineEdit_15.setText('0') - - nx = self.lineEdit_14.text() - if nx == '': - self.lineEdit_14.setText('0') - - ny = self.lineEdit_16.text() - if ny == '': - self.lineEdit_16.setText('0') - - fck_laje = float(self.comboBox.currentText()) - fyk_laje = float(self.comboBox_2.currentText()) - fcd_laje = fck_laje* 1000000/1.4 - fyd_laje = fyk_laje* 1000000/1.15 - d_laje = float(self.lineEdit_27.text()) - espes = float(self.lineEdit_5.text()) - - #------------------------------------------enxerto----------------------- - - mx = float(self.lineEdit_13.text()) - my = float(self.lineEdit_15.text()) - nx = float(self.lineEdit_14.text()) - ny = float(self.lineEdit_16.text()) - #print('mx: ',mx) - #print('nx: ',nx) - #print('my: ',my) - #print('ny: ',ny) - mk_x = mx - mk_y = my - - nk_x = nx - nk_y = ny - - - md_x = round(1.4 * mk_x, ndigits = 4) - kmd_x_laje = (md_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_x_laje = (1 - math.sqrt(1 - 2*kmd_x_laje))/0.8 - kz_x_laje = 1 - 0.4 * kx_x_laje - - as_x_laje = (md_x * 1000/ (kz_x_laje * (d_laje/100) * fyd_laje))*1000000 - - print('md_x: ', md_x) - print('kmd_x_laje: ', kmd_x_laje) - print('kx_x_laje: ', kx_x_laje) - print('kz_x_laje: ', kz_x_laje) - print('as_x_laje: ', as_x_laje) - - md_y = round(1.4 * mk_y, ndigits = 4) - kmd_y_laje = (md_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje = (1 - math.sqrt(1 - 2*kmd_y_laje))/0.8 - kz_y_laje = 1 - 0.4 * kx_y_laje - - as_y_laje = (md_y * 1000/ (kz_y_laje * (d_laje/100) * fyd_laje))*1000000 - - print('md_y: ', md_y) - print('kmd_y_laje: ', kmd_y_laje) - print('kx_y_laje: ', kx_y_laje) - print('kz_y_laje: ', kz_y_laje) - print('as_y_laje: ', as_y_laje) - - - nd_x = round(1.4 * nk_x, ndigits = 4) - kmd_x_laje_n = (nd_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_x_laje_n = (1 - math.sqrt(1 - 2*kmd_x_laje_n))/0.8 - kz_x_laje_n = 1 - 0.4 * kx_x_laje_n - - as_x_laje_n = (nd_x * 1000/ (kz_x_laje_n * (d_laje/100) * fyd_laje))*1000000 - - - nd_y = round(1.4 * nk_y, ndigits = 4) - kmd_y_laje_n = (nd_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje_n = (1 - math.sqrt(1 - 2*kmd_y_laje_n))/0.8 - kz_y_laje_n = 1 - 0.4 * kx_y_laje_n - - as_y_laje_n = (nd_x * 1000/ (kz_y_laje_n * (d_laje/100) * fyd_laje))*1000000 - - #------------------------------------------ saida de dados ------------------------------------ - kmd_x_laje = self.truncar(kmd_x_laje) - kx_x_laje = self.truncar(kx_x_laje) - kz_x_laje = self.truncar(kz_x_laje) - as_x_laje = self.truncar(as_x_laje) - - kmd_y_laje = self.truncar(kmd_y_laje) - kx_y_laje = self.truncar(kx_y_laje) - kz_y_laje = self.truncar(kz_y_laje) - as_y_laje = self.truncar(as_y_laje) - - - self.lineEdit_17.setText(str(md_x)) - self.lineEdit_18.setText(str(kmd_x_laje)) - self.lineEdit_19.setText(str(kx_x_laje)) - self.lineEdit_20.setText(str(kz_x_laje)) - self.lineEdit_21.setText(str(as_x_laje)) - - self.lineEdit_22.setText(str(md_y)) - self.lineEdit_24.setText(str(kmd_y_laje)) - self.lineEdit_25.setText(str(kx_y_laje)) - self.lineEdit_26.setText(str(kz_y_laje)) - self.lineEdit_23.setText(str(as_y_laje)) - - - self.lineEdit_38.setText(str(area_concreto_laje)) - self.lineEdit_39.setText(str(ro_armad_minima*100)) - self.lineEdit_42.setText(str(armad_max_laje)) - self.lineEdit_40.setText(str(armad_neg_min)) - self.lineEdit_41.setText(str(armad_pos_cruz)) - self.lineEdit_43.setText(str(armad_princ_unid)) - self.lineEdit_44.setText(str(armad_secnd_unid)) - - if tipo_laje == 'UNIDIRECIONAL': - self.label_44.setText('Distribuição') - if float(as_y_laje) < armad_princ_unid: - self.label_45.setText('Mínima') - else: - self.label_45.setText('') - - if tipo_laje == 'BIDIRECIONAL': - if float(as_x_laje) < armad_pos_cruz: - self.label_44.setText('Mínima') - else: - self.label_44.setText('') - - if float(as_y_laje) < armad_pos_cruz: - self.label_45.setText('Mínima') - else: - self.label_45.setText('') - - def limpar_lajes(self): - self.comboBox.setCurrentIndex(0) - self.comboBox_2.setCurrentIndex(0) - - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - self.lineEdit_27.setText('0') - - self.lineEdit_7.setText('') - self.lineEdit_8.setText('') - self.lineEdit_9.setText('') - self.lineEdit_10.setText('') - - self.lineEdit_11.setText('') - self.lineEdit_12.setText('') - self.lineEdit_38.setText('') - self.lineEdit_39.setText('') - self.lineEdit_42.setText('') - self.lineEdit_40.setText('') - self.lineEdit_41.setText('') - self.lineEdit_43.setText('') - self.lineEdit_44.setText('') - - self.lineEdit_13.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - - self.lineEdit_16.setText('') - self.lineEdit_17.setText('') - self.lineEdit_18.setText('') - self.lineEdit_19.setText('') - self.lineEdit_20.setText('') - self.lineEdit_21.setText('') - self.lineEdit_22.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_25.setText('') - self.lineEdit_26.setText('') - - - -class Carga_Adicional(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - - self.ui = loadUi('lajes_carg_adicional.ui',self) - - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - self.tableWidget.resizeRowsToContents() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Cargas Adicionais') - self.setFixedSize(649,504) - - - -class Sapatas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('sapatas_alt.ui',self) - self.load_signals() - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Sapatas') - self.setFixedSize(946,574) - - def load_signals(self): - print('sapatas carregado') - self.pushButton_6.clicked.connect(self.calcular_sapata) - self.pushButton_7.clicked.connect(self.limpar_sapatas) - self.pushButton.clicked.connect(self.gerar_dim_sapata) - - def arredondar_cinco(self, numero): - numero = round(numero, ndigits=2) - numero = 100*numero - resto = numero%5 - while resto != 0: - numero += 1 - resto = numero%5 - print('numero:',numero,' - resto: ',resto) - - numero = numero/100 - return numero - - def calcular_sapata(self): - - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - - base_y_sapata = float(self.lineEdit_10.text()) - base_x_sapata = float(self.lineEdit_9.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - y_sapata = float(self.lineEdit_9.text()) - x_sapata = float(self.lineEdit_10.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - if (nk != 0 and x_pilar != 0 and y_pilar != 0 and tensao_adm_solo != 0 and fator_solo != 0 and base_y_sapata != 0 and base_x_sapata != 0 and h_total != 0 and h_0 != 0): - if (x_sapata < 0.6 or y_sapata < 0.6): - QMessageBox.about(self, "Erro de Entrada", "As sapatas não podem apresentar lados menores de 60 cm, conforme a NBR 6122") - else: - fck_sapata = float(self.comboBox.currentText()) - fcd_sapata = fck_sapata / 1.4 - fyk_sapata = float(self.comboBox_2.currentText()) - fyd_sapata = fyk_sapata / 1.15 - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - angulo_dissp_sapata = float(self.spinBox.value()) - - angulo_dissp_sapata = (angulo_dissp_sapata / 180)* 3.14 - - x_pilar = float(self.lineEdit.text())/100 - y_pilar = float(self.lineEdit_2.text())/100 - - y_sapata = float(self.lineEdit_9.text()) - x_sapata = float(self.lineEdit_10.text()) - h_total = float(self.lineEdit_11.text()) - h_0 = float(self.lineEdit_12.text()) - - if (momento_x_sapata != 0 and momento_y_sapata == 0) or (momento_x_sapata == 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.05 - elif (momento_x_sapata != 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.103 - else: - fator_acrescimo_dimensoes = 1.0 - - x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) - y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) - - wx = x_sapata * (y_sapata**2)/6 - wy = y_sapata * (x_sapata**2)/6 - - mw_x = (momento_x_sapata/wx)*1000 - mw_y = (momento_y_sapata/wy)*1000 - - tensao_sapata = (fator_solo*nk*1000)/(x_sapata*y_sapata) - tensao_max_sapata = tensao_sapata + mw_x + mw_y - tensao_min_sapata = tensao_sapata - mw_x - mw_y - - nk_equiv = (x_sapata * y_sapata * tensao_max_sapata)/fator_solo - area_sapata = round(fator_solo * ((nk*1000)/(tensao_adm_solo*1000000)),ndigits=6) - - ca_sapata = (x_sapata - x_pilar)/2 - cb_sapata = (y_sapata - y_pilar)/2 - h_rig_x = 2/3 * ca_sapata - h_rig_y = 2/3 * cb_sapata - - h_mincis = (1.4 * nk_equiv)/(2*(x_pilar+y_pilar)*0.27*(1-(fck_sapata/250))*(fcd_sapata*1000000)) - if h_mincis < 0.40: - h_mincis = 0.40 - if h_total < h_mincis: - h_total = h_mincis - - braco_alavanca_sapata = h_total - 0.05 - - h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) - h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) - - #h0 = round(h0a, ndigits=2) - #if h0a < h0b: - # h0 = round(h0b, ndigits=2) - - volume_concreto_sapata = (h_total-h_0)/(3*(x_sapata*y_sapata+x_pilar*y_pilar+math.sqrt(x_sapata*y_sapata*x_pilar*y_pilar))+x_sapata*y_sapata*h_0) - - tracao_x_sapata = 1.1 * nk_equiv * (x_sapata - x_pilar)/(8 * braco_alavanca_sapata) - tracao_y_sapata = 1.1 * nk_equiv * (y_sapata - y_pilar)/(8 * braco_alavanca_sapata) - as_x_sapata = (1.4 * tracao_x_sapata)/(fyd_sapata) - as_y_sapata = (1.4 * tracao_y_sapata)/fyd_sapata - - taxa_aco_sapata = (0.078 * (fck_sapata)**(2/3))/fyd_sapata - - if taxa_aco_sapata <= 0.0015: - taxa_aco_sapata = 0.0015 - - as_x_min_laje = 0.67 * taxa_aco_sapata * h_mincis * x_sapata - as_y_min_laje = 0.67 * taxa_aco_sapata * h_mincis * y_sapata - - print('x_sapata: ',x_sapata) - print('y_sapata: ',y_sapata) - - print('wx: ',wx) - print('wy: ',wy) - print('mw_x: ',mw_x) - print('mw_y: ',mw_y) - print('tensao_max_sapata: ',tensao_max_sapata) - print('tensao_min_sapata: ',tensao_min_sapata) - print('nk_equiv: ',nk_equiv) - print('ca_sapata: ',ca_sapata) - print('cb_sapata: ',cb_sapata) - print('h0a: ',h0a) - print('h0b: ',h0b) - print('h_mincis: ',h_mincis) - #print('h0: ',h0) - print('h_total',h_total) - print('-------------------------------------\n') - - #-------------------------------------- saida dos dados -------------------------------------------------- - self.lineEdit_11.setText(str(h_total)) - #self.lineEdit_12.setText(str(h0)) - - self.lineEdit_15.setText(str(area_sapata)) - self.lineEdit_16.setText(str(round(wx, ndigits=6))) - self.lineEdit_17.setText(str(round(wy, ndigits=6))) - self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) - self.lineEdit_19.setText(str(round(tensao_max_sapata/1000000, ndigits=4))) - self.lineEdit_20.setText(str(round(tensao_min_sapata/1000000, ndigits=4))) - self.lineEdit_21.setText(str(round(ca_sapata*100, ndigits=4))) - self.lineEdit_22.setText(str(round(cb_sapata*100, ndigits=4))) - - self.lineEdit_23.setText(str(round(h_rig_x*100, ndigits=4))) - self.lineEdit_24.setText(str(round(h_rig_y*100, ndigits=4))) - self.lineEdit_25.setText(str(round(h_mincis*100, ndigits=4))) - self.lineEdit_26.setText(str(round(h0a*100, ndigits=4))) - self.lineEdit_28.setText(str(round(h0b*100, ndigits=4))) - self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) - - self.lineEdit_14.setText(str(round(tracao_x_sapata/1000, ndigits=4))) - self.lineEdit_29.setText(str(round(tracao_y_sapata/1000, ndigits=4))) - self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) - self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) - - self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) - self.lineEdit_33.setText(str(round(as_x_min_laje*1000000, ndigits=4))) - self.lineEdit_34.setText(str(round(as_y_min_laje*1000000, ndigits=4))) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - - def gerar_dim_sapata(self): - - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - - - if (nk != 0 and x_pilar != 0 and y_pilar != 0 and tensao_adm_solo != 0 and fator_solo != 0): - - fck_sapata = float(self.comboBox.currentText()) - fcd_sapata = fck_sapata / 1.4 - fyk_sapata = float(self.comboBox_2.currentText()) - fyd_sapata = fyk_sapata / 1.15 - nk = float(self.lineEdit_3.text()) - momento_x_sapata = float(self.lineEdit_4.text()) - momento_y_sapata = float(self.lineEdit_5.text()) - tensao_adm_solo = float(self.lineEdit_35.text()) - fator_solo = float(self.lineEdit_13.text()) - angulo_dissp_sapata = float(self.spinBox.value()) - - angulo_dissp_sapata = (angulo_dissp_sapata / 180)* 3.14 - - x_pilar = float(self.lineEdit.text())/100 - y_pilar = float(self.lineEdit_2.text())/100 - - area_sapata = round(fator_solo * ((nk*1000)/(tensao_adm_solo*1000000)),ndigits=6) - - y_sapata = 0.5*(y_pilar - x_pilar) + math.sqrt(0.25*((y_pilar - x_pilar)**2)+area_sapata) - - x_sapata = area_sapata/y_sapata - - if (momento_x_sapata != 0 and momento_y_sapata == 0) or (momento_x_sapata == 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.05 - elif (momento_x_sapata != 0 and momento_y_sapata != 0): - fator_acrescimo_dimensoes = 1.103 - else: - fator_acrescimo_dimensoes = 1.0 - - x_sapata = round(x_sapata * fator_acrescimo_dimensoes, ndigits=4) - y_sapata = round(y_sapata * fator_acrescimo_dimensoes, ndigits=4) - - if x_sapata < 0.6: - x_sapata = 0.6 - if y_sapata < 0.6: - y_sapata = 0.6 - print(x_sapata,'<--------------------------------------------------') - wx = x_sapata * (y_sapata**2)/6 - wy = y_sapata * (x_sapata**2)/6 - - mw_x = (momento_x_sapata/wx)*1000 - mw_y = (momento_y_sapata/wy)*1000 - - tensao_sapata = (fator_solo*nk*1000)/(x_sapata*y_sapata) - tensao_max_sapata = tensao_sapata + mw_x + mw_y - tensao_min_sapata = tensao_sapata - mw_x - mw_y - - x_sapata = self.arredondar_cinco(x_sapata) - y_sapata = self.arredondar_cinco(y_sapata) - if x_sapata < 0.6: - x_sapata = 0.6 - if y_sapata < 0.6: - y_sapata = 0.6 - - nk_equiv = (x_sapata * y_sapata * tensao_max_sapata)/fator_solo - - ca_sapata = (x_sapata - x_pilar)/2 - cb_sapata = (y_sapata - y_pilar)/2 - h_rig_x = 2/3 * ca_sapata - h_rig_y = 2/3 * cb_sapata - - h_total = h_rig_x - if h_total < h_rig_y: - h_total = h_rig_y - - h_mincis = (1.4 * nk_equiv)/(2*(x_pilar+y_pilar)*0.27*(1-(fck_sapata/250))*(fcd_sapata*1000000)) - if h_mincis < 0.40: - h_mincis = 0.40 - h_mincis = round(h_mincis, ndigits=4) - - if h_total < h_mincis: - h_total = h_mincis - - h_total = self.arredondar_cinco(h_total) - - h0a = h_total - ca_sapata * math.tan(angulo_dissp_sapata) - h0b = h_total - cb_sapata * math.tan(angulo_dissp_sapata) - h0_prerrogativo = h_total/3 - tangente_angulo = math.tan(angulo_dissp_sapata) - h0 = round(h0a, ndigits=2) - if h0a < h0b: - h0 = round(h0b, ndigits=2) - elif h0b < h0_prerrogativo: - h0 = h0_prerrogativo - if h0 < 0.25: - h0 = 0.25 - h0 = self.arredondar_cinco(h0) - - volume_concreto_sapata = ((h_total-h0)/3*(x_sapata*y_sapata+x_pilar*y_pilar+math.sqrt(x_sapata*y_sapata*x_pilar*y_pilar)))+(x_sapata*y_sapata*h0) - - braco_alavanca_sapata = h_total - 0.05 - - tracao_x_sapata = 1.1 * nk_equiv * (x_sapata - x_pilar)/(8 * braco_alavanca_sapata) - tracao_y_sapata = 1.1 * nk_equiv * (y_sapata - y_pilar)/(8 * braco_alavanca_sapata) - as_x_sapata = (1.4 * tracao_x_sapata)/(fyd_sapata) - as_y_sapata = (1.4 * tracao_y_sapata)/fyd_sapata - - taxa_aco_sapata = (0.078 * (fck_sapata)**(2/3))/fyd_sapata - - if taxa_aco_sapata <= 0.0015: - taxa_aco_sapata = 0.0015 - - as_x_min_laje = 0.67 * taxa_aco_sapata * h_total * x_sapata - as_y_min_laje = 0.67 * taxa_aco_sapata * h_total * y_sapata - - print('x_sapata: ',x_sapata) - print('y_sapata: ',y_sapata) - - print('wx: ',wx) - print('wy: ',wy) - print('mw_x: ',mw_x) - print('mw_y: ',mw_y) - print('tensao_max_sapata: ',tensao_max_sapata) - print('tensao_min_sapata: ',tensao_min_sapata) - print('nk_equiv: ',nk_equiv) - print('ca_sapata: ',ca_sapata) - print('cb_sapata: ',cb_sapata) - print('h0a: ',h0a) - print('h0b: ',h0b) - print('h_mincis: ',h_mincis) - print('h0: ',h0) - print('tangente_angulo: ',tangente_angulo) - print('----------') - print('h_total: ',h_total) - print('tracao_x_sapata: ',tracao_x_sapata) - print('tracao_y_sapata: ',tracao_y_sapata) - print('as_x_sapata: ',as_x_sapata) - print('as_y_sapata: ',as_y_sapata) - print('taxa_aco_sapata: ',taxa_aco_sapata) - print('as_x_min_laje: ',as_x_min_laje) - print('as_y_min_laje: ',as_y_min_laje) - print('-------------------------------------\n') - #------------------------------ saida de dados --------------------------------------------- - self.lineEdit_9.setText(str(y_sapata)) - self.lineEdit_10.setText(str(x_sapata)) - self.lineEdit_15.setText(str(area_sapata)) - - self.lineEdit_11.setText(str(round(h_total, ndigits=4))) - self.lineEdit_12.setText(str(round(h0, ndigits=4))) - - - self.lineEdit_15.setText(str(area_sapata)) - self.lineEdit_16.setText(str(round(wx, ndigits=6))) - self.lineEdit_17.setText(str(round(wy, ndigits=6))) - self.lineEdit_18.setText(str(round(nk_equiv, ndigits=4))) - self.lineEdit_19.setText(str(round(tensao_max_sapata/1000000, ndigits=4))) - self.lineEdit_20.setText(str(round(tensao_min_sapata/1000000, ndigits=4))) - self.lineEdit_21.setText(str(round(ca_sapata*100, ndigits=4))) - self.lineEdit_22.setText(str(round(cb_sapata*100, ndigits=4))) - - self.lineEdit_23.setText(str(round(h_rig_x*100, ndigits=4))) - self.lineEdit_24.setText(str(round(h_rig_y*100, ndigits=4))) - self.lineEdit_25.setText(str(round(h_mincis*100, ndigits=4))) - self.lineEdit_26.setText(str(round(h0a*100, ndigits=4))) - self.lineEdit_28.setText(str(round(h0b*100, ndigits=4))) - self.lineEdit_27.setText(str(round(volume_concreto_sapata, ndigits=4))) - - self.lineEdit_14.setText(str(round(tracao_x_sapata/1000, ndigits=4))) - self.lineEdit_29.setText(str(round(tracao_y_sapata/1000, ndigits=4))) - self.lineEdit_30.setText(str(round(as_x_sapata, ndigits=4))) - self.lineEdit_31.setText(str(round(as_y_sapata, ndigits=4))) - - self.lineEdit_32.setText(str(round(taxa_aco_sapata, ndigits=7))) - self.lineEdit_33.setText(str(round(as_x_min_laje*1000000, ndigits=4))) - self.lineEdit_34.setText(str(round(as_y_min_laje*1000000, ndigits=4))) - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - def limpar_sapatas(self): - self.comboBox.setCurrentIndex(0) - self.comboBox_2.setCurrentIndex(0) - - self.lineEdit.setText('0') - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('0') - self.lineEdit_5.setText('0') - - self.lineEdit_35.setText('0') - self.lineEdit_13.setText('1.1') - self.spinBox.setValue(30) - - self.lineEdit_9.setText('0') - self.lineEdit_10.setText('0') - self.lineEdit_11.setText('0') - self.lineEdit_12.setText('0') - - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - self.lineEdit_17.setText('') - self.lineEdit_18.setText('') - self.lineEdit_19.setText('') - self.lineEdit_20.setText('') - self.lineEdit_21.setText('') - self.lineEdit_22.setText('') - self.lineEdit_23.setText('') - self.lineEdit_24.setText('') - self.lineEdit_25.setText('') - self.lineEdit_26.setText('') - self.lineEdit_27.setText('') - self.lineEdit_28.setText('') - - self.lineEdit_14.setText('') - self.lineEdit_29.setText('') - self.lineEdit_30.setText('') - self.lineEdit_31.setText('') - self.lineEdit_32.setText('') - self.lineEdit_33.setText('') - self.lineEdit_34.setText('') - -#---------------------------------------------- Janelas Adicionais ---------------------------------------------------- - - -class Tabela_Classe_Agressividade(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('class_agres.ui',self) - - #scriptDir = os.path.dirname(os.path.realpath(__file__)) - #self.setWindowIcon(QtGui.QIcon(scriptDir + os.path.sep + 'logo.ico')) - self.setWindowIcon(QtGui.QIcon('./logo.ico')) - - self.setWindowTitle('Navier - Classes de Agressividade e Cobrimentos Mínimos') - self.setFixedSize(579, 520) - - def load_signals(self): - print('inicializado') - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - - self.tableWidget.setSpan(0, 0, 1, 4) - - header_2 = self.tableWidget_2.horizontalHeader() - header_2.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - - self.tableWidget_2.setSpan(0, 0, 2, 1) - self.tableWidget_2.setSpan(0, 1, 2, 1) - self.tableWidget_2.setSpan(0, 3, 2, 1) - - self.tableWidget_2.setSpan(3, 0, 2, 1) - self.tableWidget_2.setSpan(3, 1, 2, 1) - self.tableWidget_2.setSpan(3, 3, 2, 1) - - self.tableWidget_2.setSpan(5, 0, 2, 1) - self.tableWidget_2.setSpan(5, 1, 2, 1) - self.tableWidget_2.setSpan(5, 3, 2, 1) - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - inicio = Inicio() - vigas = Vigas() - detalhar_vigas = Detalhar_viga() - pilares = Pilares() - pilares_areas_aco = Pilar_area_aco() - #pilares.show() - #vigas.show() - lajes = Lajes() - #lajes.show() - sapatas = Sapatas() - #sapatas.show() - carga_adicional = Carga_Adicional() - tabela_classe_agressividade = Tabela_Classe_Agressividade() - tabela_bitolas = Tabela_Bitolas() - - app.exec_() \ No newline at end of file diff --git a/inicio.ui b/inicio.ui deleted file mode 100644 index 7ad2e69..0000000 --- a/inicio.ui +++ /dev/null @@ -1,1274 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 567 - 500 - - - - MainWindow - - - - - - - 0 - - - - Navier - Início - - - - - 215 - 60 - 261 - 41 - - - - QFrame::NoFrame - - - QFrame::Sunken - - - QAbstractScrollArea::AdjustToContents - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cálculo de peças em Concreto Armado (Vigas, Lajes, Fundações) segundo a NBR 6118/14.</p></body></html> - - - - - - 260 - 20 - 141 - 51 - - - - - - - navier_logo_mini.png - - - - - - -10 - -8 - 171 - 431 - - - - - - - - - - 410 - 40 - 71 - 31 - - - - <html><head/><body><p><span style=" font-style:italic;">- v.beta 0.1</span></p></body></html> - - - Qt::RichText - - - - - - 180 - 130 - 361 - 271 - - - - Elementos Estruturais - - - - - 10 - 20 - 341 - 60 - - - - Vigas - - - - - 270 - 10 - 61 - 50 - - - - - - - - - - 20 - 20 - 241 - 21 - - - - Vigas Simples e Duplamente Armada - - - - - - - 10 - 140 - 341 - 61 - - - - Lajes - - - - - 270 - 10 - 61 - 50 - - - - - - - - - - 20 - 20 - 241 - 21 - - - - Lajes Maciças Unidirecionais e Bidirecionais - - - - - - 200 - 60 - 351 - 61 - - - - Vigas - - - - - 280 - 10 - 61 - 41 - - - - VIGAS - - - - - - 20 - 20 - 241 - 21 - - - - Simples e Dupla Armação, Tê - - - - - - - - 10 - 200 - 341 - 61 - - - - Fundação - - - - - 270 - 10 - 61 - 50 - - - - - - - - - - 20 - 20 - 241 - 21 - - - - Sapatas Isoladas Excêntricas - - - - - - 200 - 60 - 351 - 61 - - - - Vigas - - - - - 280 - 10 - 61 - 41 - - - - VIGAS - - - - - - 20 - 20 - 241 - 21 - - - - Simples e Dupla Armação, Tê - - - - - - - - 10 - 80 - 341 - 61 - - - - Pilares - - - - - 270 - 10 - 61 - 50 - - - - - - - - - - 20 - 16 - 251 - 31 - - - - <html><head/><body><p>Pilares Intermediários, de Extremidade e Canto</p></body></html> - - - Qt::RichText - - - - - - 200 - 60 - 351 - 61 - - - - Vigas - - - - - 280 - 10 - 61 - 41 - - - - VIGAS - - - - - - 20 - 20 - 241 - 21 - - - - Simples e Dupla Armação, Tê - - - - - - - - - 10 - 80 - 141 - 141 - - - - - - - navier_logo.png - - - false - - - - - - 20 - 330 - 131 - 51 - - - - - - - nassau_logo.png - - - true - - - - - - Descrição - - - - - -10 - -1 - 91 - 421 - - - - - - - - - - 100 - 80 - 451 - 291 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">O Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">_______________________________________________________________________</p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Este programa permite realizar cálculos de Vigas, Pilares, Lajes e Sapatas de concreto armado em alguns casos espefícicos. Os cálculos envolvidos são estabelecidos para as situações críticas das peças no ELU (estado limite último), obedecendo os critérios indicados na ABNT NBR 6118/2014 (Projetos de estruturas de concreto - Procedimento). Este software foi desenvolvido em ambiente acadêmico. </p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Responsabilidade</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">_______________________________________________________________________</p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">O Navier realiza cálculos baseado em roteiros de cálculo de elementos estruturais isolados, explicitas em literaturas da área. Os resultados obtidos na utilização do programa deve ser analisados com cautela e estudados antes de qualquer aplicação, sendo voltado principalmente para profissionais envolvidos na área da construção civil com conhecimento técnico sobre análise de estruturas e concreto armado, a saber principalmente engenheiros e estudantes. O desenvolvedor não tem nenhuma responsabilidade sobre a aplicação dos resultados, cabendo a uma pessoa legalmente habilitada [engenheiro] a palavra final sobre um projeto<span style=" font-size:8pt;"> (cf. Resolução 1010, 22 de agosto de 2005, Art. 5º)</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Cálculos Realizados</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">____________________________________________________________</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">- Vigas:</span> </p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cálculo de vigas de concreto armado com seções retangular, permite calcular armaduras de aço longitudinal e transversal. Para o armadura longitudinal existe as opções de calcular armadura simples ou armadura dupla, verificando requisitos como seção da viga, esforços e material para geração das áreas de aço (englobando armadura principal, sobre-apoio, pele e limitantes máxima e mínima), coeficientes (kmd, kx, kz) e dados sobre o domínio de ruptura. No cálculo das armaduras transversais o Navier permite o cálculo dos estribos baseados nos dois modelos de cálculo expressos na norma, sendo o modelo I o mais aplicado em projetos, já o modelo II possibilita a inserção de angulação para as bielas comprimidas diminuindo a taxa de área de aço.</p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">- Pilares:</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cálculos de pilares de concreto armado com seção retangular, permite calcular situações de pilares centrais e de extremidade, resolucionando situações de compressão centrada e flexo-compressão normal.</p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">- Lajes:</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cálculo de lajes de concreto armado do tipo maciça, permite calcular lajes unidirecionais e bidirecionais, utiliza-se dos coeficientes de Marcus para obtenção de esforços em elementos bidirecionais (tipo cruz) e utiliza as formulações dos momentos típicos em vigas biapoiadas para casos unidirecionais. Também são gerados coeficientes e informações relativas a laje com armaduras em ambas as direções. O Navier permite a entrada dos tipos de fixação laterais em engastadas ou livres.</p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">- Fundações:</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cálculo de fundações de concreto armado do tipo isolada simples, permite calcular sapatas do tipo excêntricas e isoladas, através de informações dos materiais, esforços e dados do solo encontra as área de aço finais de tração em cada um dos sentidos assim como também diversas informações como alturas exigidas, balanços, normal equivalente e também tensões máximas e mínimas atuantes na base da sapata. Para obter resultados podem ser inseridos dimensões esperadas ou também solicitar dimensionamento automático da fundação.</p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">_______________________________________________________________________</p></body></html> - - - - - - 120 - 30 - 371 - 31 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; font-weight:600;">Navier - software de cálculo de peças de concreto armado</span></p></body></html> - - - - - - Tabelas e Infos - - - - - -10 - 0 - 91 - 421 - - - - - - - - - - 110 - 20 - 321 - 30 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Tabelas importantes de normas brasileiras e cálculo</span></p></body></html> - - - - - - 129 - 255 - 391 - 150 - - - - Tabelas de auxílio de cálculo - - - - - 30 - 89 - 221 - 51 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">- Ábacos de Flexotração</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><span style=" font-size:7pt;"> </span><span style=" font-size:8pt;">Normal (Venturini &amp; Rodrigues)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> Oblíqua (Libânio M. Pinheiro)</span></p></body></html> - - - - - - 30 - 27 - 221 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">- Tabela de Marcus </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><span style=" font-size:8pt;">(Lajes Bidirecionais)</span></p></body></html> - - - - - - 330 - 88 - 51 - 50 - - - - - - - - - - 330 - 26 - 51 - 51 - - - - - - - - - - 10 - 20 - 381 - 60 - - - - - - - - - - 10 - 83 - 381 - 60 - - - - - - - - - - 270 - 88 - 51 - 50 - - - - - - - groupBox_26 - groupBox_17 - textBrowser_13 - textBrowser_12 - pushButton_8 - pushButton_7 - pushButton_23 - - - - - 130 - 43 - 391 - 211 - - - - Tabelas de Normas - - - - - 30 - 159 - 281 - 30 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">- Relação de bitolas de aços comerciais</span></p></body></html> - - - - - - 30 - 36 - 281 - 30 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">- Agressividade Ambiental (NBR 6118/2014)</span></p></body></html> - - - - - - 330 - 26 - 51 - 51 - - - - - - - - - - 330 - 87 - 51 - 51 - - - - - - - - - - 30 - 97 - 281 - 30 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">- Carregamento Adicional (NBR 6120/2017)</span></p></body></html> - - - - - - 330 - 149 - 51 - 51 - - - - - - - - - - 10 - 20 - 381 - 61 - - - - - - - - - - 10 - 82 - 381 - 61 - - - - - - - - - - 10 - 144 - 381 - 60 - - - - - - - groupBox_16 - groupBox_15 - groupBox_14 - textBrowser_11 - textBrowser_9 - pushButton_2 - pushButton_5 - textBrowser_10 - pushButton_6 - - - - - Normas e Referências - - - - - -10 - 0 - 91 - 421 - - - - - - - - - - 140 - 60 - 401 - 51 - - - - - - - - - 10 - 5 - 381 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 6118: Projeto de estruturas de concreto - Procedimento. Rio de Janeiro, 2014. </p></body></html> - - - - - - - 140 - 110 - 401 - 51 - - - - - - - - - 10 - 5 - 381 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 6120: Cargas para o cálculo de estruturas de edificações. Rio de Janeiro, 2017. </p></body></html> - - - - - - - 110 - 27 - 91 - 30 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Referências </span></p></body></html> - - - - - - 140 - 160 - 401 - 51 - - - - - - - - - 10 - 5 - 381 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 6120: Cargas para o cálculo de estruturas de edificações. Rio de Janeiro, 2017. </p></body></html> - - - - - - - 140 - 210 - 401 - 51 - - - - - - - - - 10 - 5 - 381 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 6120: Cargas para o cálculo de estruturas de edificações. Rio de Janeiro, 2017. </p></body></html> - - - - - - - 140 - 260 - 401 - 51 - - - - - - - - - 10 - 5 - 381 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 6120: Cargas para o cálculo de estruturas de edificações. Rio de Janeiro, 2017. </p></body></html> - - - - - - - 140 - 310 - 401 - 51 - - - - - - - - - 10 - 5 - 381 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 6120: Cargas para o cálculo de estruturas de edificações. Rio de Janeiro, 2017. </p></body></html> - - - - - - - Sobre - - - - - -10 - 0 - 91 - 421 - - - - - - - - - - 420 - 250 - 141 - 151 - - - - - - - navier_logo.png - - - - - - 160 - 351 - 256 - 51 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">&quot;Convém que Ele cresça e eu diminua&quot; </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;"> João 3:30.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - 110 - 60 - 401 - 71 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Navier </span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><span style=" font-size:8pt;"> Software para cálculo de peças de Concreto Armado</span> </p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Programado em Python 3.8 </p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Interface grágica com PyQt5</p></body></html> - - - - - - 210 - 160 - 321 - 41 - - - - QFrame::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Anderson Alves de Aguiar (andersonalvesmath@hotmail.com)</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - 120 - 140 - 91 - 51 - - - - - - - logo_a3_mini.png - - - true - - - - - - 180 - 210 - 40 - 31 - - - - - - - git_logo.png - - - true - - - - - - 230 - 220 - 151 - 16 - - - - https://github.com/Anderson3 - - - - - - 310 - 240 - 41 - 41 - - - - - - - logo_brunel.png - - - true - - - - - - 250 - 240 - 41 - 41 - - - - - - - logo_engtool.png - - - true - - - - - - - - - - - - 0 - 0 - 567 - 21 - - - - - - - diff --git a/lajes.py b/lajes.py deleted file mode 100644 index c5c3b31..0000000 --- a/lajes.py +++ /dev/null @@ -1,561 +0,0 @@ - - - -import sys -import math - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem -import pyqtgraph as pg - -import marcus - -class Lajes(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('lajes.ui',self) - - self.lado1 = 'livre' - self.lado2 = 'livre' - self.lado3 = 'livre' - self.lado4 = 'livre' - self.label_37.hide() - self.label_38.hide() - self.label_40.hide() - self.label_41.hide() - global caso - caso = '1' - global lx_lage - lx_lage = 'l_menor' - self.lineEdit.setReadOnly(True) - - self.load_signals() - - self.setWindowTitle('Navier - Lajes') - self.show() - - def load_signals(self): - print('lajes iniciado') - self.pushButton.clicked.connect(self.estado_l1) - self.pushButton_2.clicked.connect(self.estado_l2) - self.pushButton_3.clicked.connect(self.estado_l3) - self.pushButton_4.clicked.connect(self.estado_l4) - self.pushButton.clicked.connect(self.situacao_laje) - self.pushButton_2.clicked.connect(self.situacao_laje) - self.pushButton_3.clicked.connect(self.situacao_laje) - self.pushButton_4.clicked.connect(self.situacao_laje) - - self.pushButton_5.clicked.connect(self.teste) - self.pushButton_6.clicked.connect(self.calcular_laje) - - self.toolButton.clicked.connect(self.revelar_carg_acidental) - - def teste(self): - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - def revelar_carg_acidental(self): - print('oi--') - carga_adicional.show() - - def estado_l1(self): - if self.lado1 == 'livre': - self.lado1 = 'engastado' - pixmap = QPixmap('engv.png') - self.pushButton.setIcon(QIcon(pixmap)) - else: - self.lado1 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - def estado_l2(self): - if self.lado2 == 'livre': - self.lado2 = 'engastado' - pixmap = QPixmap('engh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - else: - self.lado2 = 'livre' - pixmap = QPixmap('livh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - - def estado_l3(self): - if self.lado3 == 'livre': - self.lado3 = 'engastado' - pixmap = QPixmap('engh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - else: - self.lado3 = 'livre' - pixmap = QPixmap('livh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - - def estado_l4(self): - if self.lado4 == 'livre': - self.lado4 = 'engastado' - pixmap = QPixmap('engv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - else: - self.lado4 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - def situacao_laje(self): - l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - l4 = self.lado4 - - cota_v1 = self.label_37 - cota_v2 = self.label_40 - cota_h1 = self.label_38 - cota_h2 = self.label_41 - - if (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre'): - global caso - caso = '1' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - global lx_lage - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '2' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') : - caso = '2' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') or (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado'): - caso = '3' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '4' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '4' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado'): - caso = '5' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '5' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado'): - caso = '6' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - else: - caso='ainda não existe, não sei como você chegou até aqui srsrrsrsrsrsrs' - - - print(caso) - self.lineEdit_6.setText(str(caso)) - - def calcular_laje(self): - lado_maior = float(self.lineEdit_3.text()) - lado_menor = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - - self.lineEdit_7.setText('') - self.lineEdit_9.setText('') - self.lineEdit_8.setText('') - self.lineEdit_10.setText('') - self.lineEdit_16.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - - if lado_maior != 0 and lado_menor != 0 and espes != 0 and d != 0: - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - carreg_adicional = float(self.lineEdit_2.text()) - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - carreg_total = pp + carreg_adicional - #print(caso) - #print(lx_lage) - #---------------------------------- cálculo do Lx baseado no caso do tipo de situação da laje ----------------- - global lx - global lambda_laje - if lx_lage == 'l_menor': - lx = lado2 - lambda_laje = round((lado1/lado2),ndigits=2) - elif lx_lage == 'l_maior': - lx = lado1 - lambda_laje = round((lado2/lado1),ndigits=2) - print(lx_lage) - - #---------------------------------- definição se a laje é unidirecional ou bidirecional baseado no lambda ----------------- - global tipo_laje - if float(lambda_laje) > 2.001: - tipo_laje = 'UNIDIRECIONAL' - self.laje_unidirecional(carreg_total) - else: - tipo_laje = 'BIDIRECIONAL' - self.label_43.setStyleSheet("Background: url('laje_unidirecional_modelo.png') no-repeat") - - mx = my = nx = ny = '' - - if caso == '1': - caso1 = marcus.caso1 - linhas = len(caso1) - colunas = len(caso1[0]) - - for i in range(linhas): - aux = caso1[i][0] - if lambda_laje == aux: - print(caso1[i]) - mx = caso1[i][2] - my = caso1[i][3] - - print('mx: ',mx) - print('my: ',my) - - if caso == '2': - caso2 = marcus.caso2 - linhas = len(caso2) - colunas = len(caso2[0]) - - for i in range(linhas): - aux = caso2[i][0] - if lambda_laje == aux: - print(caso2[i]) - mx = caso2[i][2] - nx = caso2[i][3] - my = caso2[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '3': - caso3 = marcus.caso3 - linhas = len(caso3) - colunas = len(caso3[0]) - - for i in range(linhas): - aux = caso3[i][0] - if lambda_laje == aux: - print(caso3[i]) - mx = caso3[i][2] - nx = caso3[i][3] - my = caso3[i][4] - ny = caso3[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '4': - caso4 = marcus.caso4 - linhas = len(caso4) - colunas = len(caso4[0]) - - for i in range(linhas): - aux = caso4[i][0] - if lambda_laje == aux: - print(caso4[i]) - mx = caso4[i][2] - nx = caso4[i][3] - my = caso4[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '5': - caso5 = marcus.caso5 - linhas = len(caso5) - colunas = len(caso5[0]) - - for i in range(linhas): - aux = caso5[i][0] - if lambda_laje == aux: - print(caso5[i]) - mx = caso5[i][2] - nx = caso5[i][3] - my = caso5[i][4] - ny = caso5[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '6': - caso6 = marcus.caso6 - linhas = len(caso6) - colunas = len(caso6[0]) - - for i in range(linhas): - aux = caso6[i][0] - if lambda_laje == aux: - print(caso6[i]) - mx = caso6[i][2] - nx = caso6[i][3] - my = caso6[i][4] - ny = caso6[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - print(lx) - if mx != '': - self.lineEdit_7.setText(str(mx)) - momento_pos_x = ((carreg_total * (lx**2))/mx) - momento_pos_x = round(momento_pos_x,ndigits=4) - self.lineEdit_13.setText(str(momento_pos_x)) - #else: - # self.lineEdit_13.setText('0') - if nx != '': - self.lineEdit_9.setText(str(nx)) - momento_neg_x = round(((carreg_total * (lx**2))/nx),ndigits=4) - self.lineEdit_14.setText(str(momento_neg_x)) - #momento_neg_x = round(momento_neg_x,ndigits=2) - #else: - # self.lineEdit_14.setText('0') - if my != '': - self.lineEdit_8.setText(str(my)) - momento_pos_y = ((carreg_total * (lx**2))/my) - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - #else: - # self.lineEdit_15.setText('0') - if ny != '': - self.lineEdit_10.setText(str(ny)) - momento_neg_y = round(((carreg_total * (lx**2))/ny),ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - #momento_neg_y = round(momento_neg_y,ndigits=2) - #else: - # self.lineEdit_16.setText('0') - - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - def laje_unidirecional(self,carreg_total): - - #self.lineEdit_7.setText('') - #self.lineEdit_9.setText('') - #self.lineEdit_8.setText('') - #self.lineEdit_10.setText('') - #self.lineEdit_16.setText('') - #self.lineEdit_13.setText('') - #self.lineEdit_14.setText('') - #self.lineEdit_15.setText('') - #self.lineEdit_16.setText('') - - print('unidirecional') - #l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - #l4 = self.lado4 - print(carreg_total) - if (l2 == 'livre' and l3 == 'livre'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_ll2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/8 - momento_neg_y = 0 - elif (l2 == 'engastado' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_ee2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/24 - momento_neg_y = (carreg_total * (lx**2))/12 - elif (l2 == 'engastado' and l3 == 'livre') or (l2 == 'livre' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_le2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/14.2 - momento_neg_y = (carreg_total * (lx**2))/8 - - print('momento_pos_y: ',momento_pos_y) - print('momento_neg_y: ',momento_neg_y) - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - momento_neg_y = round(momento_neg_y,ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def resultados_laje(self): - - mx = self.lineEdit_13.text() - if mx == '': - self.lineEdit_13.setText('0') - - my = self.lineEdit_15.text() - if my == '': - self.lineEdit_15.setText('0') - - nx = self.lineEdit_14.text() - if nx == '': - self.lineEdit_14.setText('0') - - ny = self.lineEdit_16.text() - if ny == '': - self.lineEdit_16.setText('0') - - fck_laje = float(self.comboBox.currentText()) - fyk_laje = float(self.comboBox_2.currentText()) - fcd_laje = fck_laje * 1.4 * 1000000 - fyd_laje = fyk_laje * 1.4 * 1000000 - d_laje = float(self.lineEdit_27.text()) - - mx = float(self.lineEdit_13.text()) - my = float(self.lineEdit_15.text()) - nx = float(self.lineEdit_14.text()) - ny = float(self.lineEdit_16.text()) - #print('mx: ',mx) - #print('nx: ',nx) - #print('my: ',my) - #print('ny: ',ny) - if mx > nx: - mk_x = mx - else: - mk_x = nx - if my > ny: - mk_y = my - else: - mk_y = ny - - #print('mkx: ',mk_x) - #print('mky: ',mk_y) - md_x = round(1.4 * mk_x, ndigits = 4) - kmd_x_laje = (md_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - print('kmd_x_laje-',kmd_x_laje) - kx_x_laje = (1 - math.sqrt(1 - 2*kmd_x_laje))/0.8 - kz_x_laje = 1 - 0.4 * kx_x_laje - - as_x_laje = (md_x * 1000/ (kz_x_laje * (d_laje/100) * fyd_laje))*100000 - - print('md_x: ', md_x) - print('kmd_x_laje: ', kmd_x_laje) - print('kx_x_laje: ', kx_x_laje) - print('kz_x_laje: ', kz_x_laje) - print('as_x_laje: ', as_x_laje) - - md_y = round(1.4 * mk_y, ndigits = 4) - kmd_y_laje = (md_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje = (1 - math.sqrt(1 - 2*kmd_y_laje))/0.8 - kz_y_laje = 1 - 0.4 * kx_y_laje - - as_y_laje = (md_y * 1000/ (kz_y_laje * (d_laje/100) * fyd_laje))*100000 - - print('md_y: ', md_y) - print('kmd_y_laje: ', kmd_y_laje) - print('kx_y_laje: ', kx_y_laje) - print('kz_y_laje: ', kz_y_laje) - print('as_y_laje: ', as_y_laje) - - #------------------------------------------ saida de dados ------------------------------------ - kmd_x_laje = self.truncar(kmd_x_laje) - kx_x_laje = self.truncar(kx_x_laje) - kz_x_laje = self.truncar(kz_x_laje) - as_x_laje = self.truncar(as_x_laje) - - kmd_y_laje = self.truncar(kmd_y_laje) - kx_y_laje = self.truncar(kx_y_laje) - kz_y_laje = self.truncar(kz_y_laje) - as_y_laje = self.truncar(as_y_laje) - - self.lineEdit_17.setText(str(md_x)) - self.lineEdit_18.setText(str(kmd_x_laje)) - self.lineEdit_19.setText(str(kx_x_laje)) - self.lineEdit_20.setText(str(kz_x_laje)) - self.lineEdit_21.setText(str(as_x_laje)) - - self.lineEdit_22.setText(str(md_y)) - self.lineEdit_24.setText(str(kmd_y_laje)) - self.lineEdit_25.setText(str(kx_y_laje)) - self.lineEdit_26.setText(str(kz_y_laje)) - self.lineEdit_23.setText(str(as_y_laje)) - - - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - inicio = Lajes() - - app.exec_() diff --git a/lajes.ui b/lajes.ui deleted file mode 100644 index 631dd29..0000000 --- a/lajes.ui +++ /dev/null @@ -1,1331 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 933 - 643 - - - - MainWindow - - - - - - 20 - 340 - 251 - 81 - - - - Carregamento - - - - - 20 - 20 - 121 - 20 - - - - Peso Próprio [KN/m²] - - - - - - 140 - 20 - 81 - 20 - - - - 0 - - - - - - 20 - 50 - 121 - 20 - - - - Carg. Adicional [KN/m²] - - - - - - 140 - 50 - 81 - 20 - - - - 0 - - - - - - 221 - 50 - 25 - 19 - - - - ... - - - - - - - 20 - 177 - 251 - 151 - - - - Dimensões - - - - - 20 - 30 - 101 - 16 - - - - L1 - lado maior [m] - - - - - - 132 - 30 - 101 - 20 - - - - 0 - - - - - - 20 - 60 - 101 - 16 - - - - L2 - lado menor [m] - - - - - - 132 - 60 - 101 - 20 - - - - 0 - - - - - - 18 - 90 - 91 - 16 - - - - Espessura [cm] - - - - - - 130 - 90 - 101 - 20 - - - - 0 - - - - - - 132 - 120 - 101 - 20 - - - - 0 - - - - - - 20 - 120 - 91 - 16 - - - - Altura Útil [cm] - - - - - - - 20 - 86 - 251 - 81 - - - - Concreto - - - - - 20 - 20 - 121 - 20 - - - - Resistência - fck [MPa] - - - - - - 150 - 20 - 81 - 22 - - - - - 20 - - - - - 25 - - - - - 30 - - - - - 35 - - - - - 40 - - - - - 45 - - - - - 50 - - - - - - - 150 - 50 - 81 - 22 - - - - - 250 - - - - - 500 - - - - - 600 - - - - - - - 20 - 50 - 121 - 20 - - - - Resistência do Aço [MPa] - - - - - - - 20 - 430 - 251 - 141 - - - - Representação - - - - - 20 - 17 - 221 - 120 - - - - - - - laje-esqm.png - - - true - - - - - - - 290 - 87 - 281 - 481 - - - - Caso de Cálculo Laje - - - - - 40 - 50 - 191 - 121 - - - - - - - laje.png - - - true - - - - - - 20 - 50 - 21 - 121 - - - - false - - - - - - - livv.pnglivv.png - - - - 50 - 210 - - - - false - - - - - - 40 - 30 - 190 - 21 - - - - - - - - livh.pnglivh.png - - - - 300 - 50 - - - - - - - 40 - 170 - 190 - 21 - - - - - - - - livh.pnglivh.png - - - - 300 - 50 - - - - - - - 230 - 50 - 21 - 120 - - - - - - - - livv.pnglivv.png - - - - 50 - 210 - - - - - - - 60 - 200 - 111 - 16 - - - - CASO (para cálculo): - - - - - - 170 - 200 - 31 - 20 - - - - false - - - 1 - - - Qt::AlignCenter - - - - - - 0 - 360 - 281 - 121 - - - - Laje Bidirecional - Coeficientes de Marcus - - - - - 160 - 90 - 101 - 23 - - - - Obter Coeficientes - - - - - - 20 - 30 - 47 - 16 - - - - mx - - - - - - 50 - 30 - 81 - 20 - - - - - - - 50 - 60 - 81 - 20 - - - - - - - 20 - 60 - 47 - 16 - - - - my - - - - - - 140 - 30 - 47 - 16 - - - - nx - - - - - - 170 - 30 - 81 - 20 - - - - - - - 140 - 60 - 47 - 16 - - - - ny - - - - - - 170 - 60 - 81 - 20 - - - - - - - - 190 - 100 - 21 - 16 - - - - lx - - - - - - 130 - 130 - 21 - 16 - - - - lx - - - - - - 110 - 150 - 91 - 16 - - - - - - - - - - 200 - 50 - 21 - 121 - - - - - - - cota_v_laje.png - - - - - - 50 - 140 - 171 - 20 - - - - - - - cota_h_laje.png - - - true - - - - - - 120 - 100 - 31 - 16 - - - - - - - - - - 0 - 250 - 281 - 231 - - - - Laje Unidirecional - Casos - - - - - 20 - 10 - 241 - 101 - - - - - - - laje_unidirecional_modelo.png.png - - - false - - - - groupBox_11 - label_4 - pushButton - pushButton_2 - pushButton_3 - pushButton_4 - label_10 - lineEdit_6 - groupBox_6 - label_37 - label_38 - label_39 - label_40 - label_41 - label_42 - - - - - 590 - 88 - 330 - 481 - - - - Dimensionamento - - - - - 134 - 40 - 71 - 21 - - - - Tipo de Laje: - - - - - - 50 - 40 - 61 - 20 - - - - - - - 220 - 40 - 91 - 21 - - - - ______________ - - - - - - 20 - 40 - 31 - 21 - - - - λ : - - - - - - 20 - 80 - 111 - 21 - - - - Carreg. Total [KN/m²] - - - - - - 150 - 80 - 101 - 20 - - - - - - - 0 - 120 - 341 - 90 - - - - Momentos Atuantes [KN/m²] - - - - - 90 - 30 - 31 - 21 - - - - Mx - - - - - - 110 - 30 - 81 - 20 - - - - - - - - - - 210 - 30 - 31 - 21 - - - - Nx - - - - - - 230 - 30 - 81 - 20 - - - - - - - - - - 90 - 60 - 31 - 21 - - - - My - - - - - - 110 - 60 - 81 - 20 - - - - - - - - - - 230 - 60 - 81 - 20 - - - - - - - - - - 210 - 60 - 31 - 21 - - - - Ny - - - - - - 20 - 30 - 51 - 16 - - - - Sentido X: - - - - - - 20 - 60 - 51 - 16 - - - - Sentido Y: - - - - - - - 0 - 240 - 170 - 201 - - - - Sentido X - - - - - 20 - 40 - 47 - 16 - - - - Md - - - - - - 60 - 40 - 91 - 20 - - - - - - - 20 - 70 - 47 - 16 - - - - Kmd - - - - - - 60 - 70 - 91 - 20 - - - - - - - 60 - 100 - 91 - 20 - - - - - - - 20 - 100 - 47 - 16 - - - - Kx - - - - - - 60 - 130 - 91 - 20 - - - - - - - 20 - 130 - 47 - 16 - - - - Kz - - - - - - 20 - 160 - 47 - 16 - - - - As - - - - - - 60 - 160 - 91 - 20 - - - - - - - - 169 - 240 - 171 - 201 - - - - Sentido Y - - - - - 50 - 160 - 91 - 20 - - - - - - - 50 - 70 - 91 - 20 - - - - - - - 10 - 70 - 47 - 16 - - - - Kmd - - - - - - 10 - 40 - 47 - 16 - - - - Md - - - - - - 10 - 130 - 47 - 16 - - - - Kz - - - - - - 10 - 100 - 47 - 16 - - - - Kx - - - - - - 50 - 130 - 91 - 20 - - - - - - - 50 - 100 - 91 - 20 - - - - - - - 10 - 160 - 47 - 16 - - - - As - - - - - - 50 - 40 - 91 - 20 - - - - - - - - 130 - 216 - 101 - 21 - - - - Áreas de Aço [mm²] - - - - - - 190 - 450 - 121 - 23 - - - - Gerar Detalhamento - - - - - - - 670 - 580 - 75 - 23 - - - - Calcular - - - - - - 760 - 580 - 75 - 23 - - - - Limpar - - - - - - 850 - 580 - 75 - 23 - - - - Salvar - - - - - - - 0 - 0 - 933 - 21 - - - - - - - - diff --git a/lajes_carg_adicional.ui b/lajes_carg_adicional.ui deleted file mode 100644 index d6d1433..0000000 --- a/lajes_carg_adicional.ui +++ /dev/null @@ -1,906 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 649 - 504 - - - - MainWindow - - - - - - 10 - 60 - 631 - 421 - - - - - 631 - 421 - - - - - Arquibancada - - - - - Balcões - - - - - Bancos - - - - - - - - - - Bibliotecas - - - - - - - - - - - - - - - Casas de Máquinas - - - - - Cinemas - - - - - - - - - - - - - - - Clubes - - - - - - - - - - - - - - - - - - - - Corredores - - - - - - - - - - Cozinhas e Residências - - - - - Depósitos - - - - - Edifícios Residenciais - - - - - - - - - - Escadas - - - - - - - - - - Escolas - - - - - - - - - - - - - - - Escritórios - - - - - Forros - - - - - Galeria de Artes - - - - - Galeria de Lojas - - - - - Garagens e Estacionamentos - - - - - Ginásio de Esportes - - - - - Hospital - - - - - - - - - - Laboratórios - - - - - Lavanderias - - - - - Lojas - - - - - Restaurantes - - - - - Teatros - - - - - - - - - - Terraços - - - - - - - - - - - - - - - - - - - - Vestíbulo - - - - - - - - - - Descrição - - - - - Cargas [KN/m²] - - - AlignCenter - - - - - 4 - - - AlignCenter - - - - - Mesma carga da peça com a qual se comunicam as previstas em 2.2.1.5 - - - - - - - - - AlignCenter - - - - - Escritórios e Banheiros - - - - - 2 - - - AlignCenter - - - - - Salas de diretoria e de Gerência - - - - - 1.5 - - - AlignCenter - - - - - Salas de leitura - - - - - 2.5 - - - AlignCenter - - - - - Salas para depósito de livros - - - - - 4 - - - AlignCenter - - - - - Salas com estante de livros a ser determinada em cada caso ou 2.5 KN/m² por metro de altura observado, porém valor mínimo de - - - - - 6 - - - AlignCenter - - - - - (incluindo o peso das máquinas) a ser determinada em cada caso, porém o valor mínimo de - - - - - 7.5 - - - AlignCenter - - - - - Plateia com assentos fixos - - - - - 3 - - - AlignCenter - - - - - Estúdio e plateia com assentos móveis - - - - - 4 - - - AlignCenter - - - - - Banheiro - - - - - 2 - - - AlignCenter - - - - - Sala de refeições e de assembleia com assentos fixos - - - - - 3 - - - AlignCenter - - - - - Sala de assembleia com assentos móveis - - - - - 4 - - - AlignCenter - - - - - Salão de danças e salão de esportes - - - - - 5 - - - AlignCenter - - - - - Sala de bilhar e banheiro - - - - - 2 - - - AlignCenter - - - - - com acesso ao público - - - - - 3 - - - AlignCenter - - - - - sem acesso ao público - - - - - 2 - - - AlignCenter - - - - - a ser determinada em cada caso, porém mínimo de - - - - - 3 - - - AlignCenter - - - - - a ser determinada em cada caso e na falta de valores experimentais cf indicado 2.2.1.3 - - - - - - - - - AlignCenter - - - - - Dormitórios, sala, copa, cozinha e banheiro - - - - - 1.5 - - - AlignCenter - - - - - Despensa, área de serviço e lavanderia - - - - - 2 - - - AlignCenter - - - - - com acesso ao público - - - - - 3 - - - AlignCenter - - - - - sem acesso ao público - - - - - 2.5 - - - AlignCenter - - - - - Anfiteatro com assentos fixos - - - - - - - - AlignCenter - - - - - Corredor e sala de aula - - - - - 3 - - - AlignCenter - - - - - outras salas - - - - - 2 - - - AlignCenter - - - - - Salas de uso geral e banheiro - - - - - 2 - - - AlignCenter - - - - - sem acesso a pessoas - - - - - 0.5 - - - AlignCenter - - - - - a ser determinada em cada caso, porém mínimo de - - - - - 3 - - - AlignCenter - - - - - a ser determinada em cada caso, porém mínimo de - - - - - 3 - - - AlignCenter - - - - - Para veículos de passageiros ou semelhantes com carga máxima de 25 KN por veículo. Valores de o indicados em 2.2.1.6 - - - - - 3 - - - AlignCenter - - - - - 3 - - - AlignCenter - - - - - Dormitórios, enfermarias, sala de recuperação, sala de cirurgia, sala de raio X e banheiro - - - - - 2 - - - AlignCenter - - - - - Corredor - - - - - 3 - - - AlignCenter - - - - - Incluindo equipamentos a ser determinados em cada caso, porém com no mínimo - - - - - 3 - - - AlignCenter - - - - - Incluindo equipamentos - - - - - 3 - - - AlignCenter - - - - - 4 - - - AlignCenter - - - - - 3 - - - AlignCenter - - - - - Palco - - - - - 5 - - - AlignCenter - - - - - Demais dependências: cargas iguais às especificadas para cinemas - - - - - - - - - AlignCenter - - - - - sem acesso ao público - - - - - 2 - - - AlignCenter - - - - - com acesso ao público - - - - - 3 - - - AlignCenter - - - - - inacessível a pessoas - - - - - 0.5 - - - AlignCenter - - - - - Destinados a heliportos elevados: as cargas deverão ser fornecidas pelo orgão competente do Ministério da Aeronáutica - - - - - - - - - AlignCenter - - - - - sem acesso ao público - - - - - 1.5 - - - AlignCenter - - - - - com acesso ao público - - - - - 3 - - - AlignCenter - - - - - - - 40 - 20 - 241 - 31 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">Carrregamentos Adicionais</span></p></body></html> - - - Qt::AutoText - - - - - - 360 - 20 - 251 - 31 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Informações extraídas da NBR 6120/19 - Tabela 10.</p></body></html> - - - - - - - 0 - 0 - 649 - 21 - - - - - - - - diff --git a/lajes_revisao.py b/lajes_revisao.py deleted file mode 100644 index de48bbb..0000000 --- a/lajes_revisao.py +++ /dev/null @@ -1,713 +0,0 @@ - - - -import sys, os -import math - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem - -import marcus - - - -class Lajes(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('lajes_alt.ui',self) - - self.lado1 = 'livre' - self.lado2 = 'livre' - self.lado3 = 'livre' - self.lado4 = 'livre' - self.label_37.hide() - self.label_38.hide() - self.label_40.hide() - self.label_41.hide() - global caso - caso = '1' - global lx_lage - lx_lage = 'l_menor' - self.lineEdit.setReadOnly(True) - - self.load_signals() - - self.setWindowTitle('Navier - Lajes') - self.show() - - - def load_signals(self): - print('lajes iniciado') - self.pushButton.clicked.connect(self.estado_l1) - self.pushButton_2.clicked.connect(self.estado_l2) - self.pushButton_3.clicked.connect(self.estado_l3) - self.pushButton_4.clicked.connect(self.estado_l4) - self.pushButton.clicked.connect(self.situacao_laje) - self.pushButton_2.clicked.connect(self.situacao_laje) - self.pushButton_3.clicked.connect(self.situacao_laje) - self.pushButton_4.clicked.connect(self.situacao_laje) - - self.pushButton_5.clicked.connect(self.teste) - self.pushButton_6.clicked.connect(self.calcular_laje) - - self.toolButton.clicked.connect(self.revelar_carg_acidental) - - def teste(self): - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - def revelar_carg_acidental(self): - print('oi--') - carga_adicional.show() - - def estado_l1(self): - if self.lado1 == 'livre': - self.lado1 = 'engastado' - pixmap = QPixmap('engv.png') - self.pushButton.setIcon(QIcon(pixmap)) - else: - self.lado1 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - def estado_l2(self): - if self.lado2 == 'livre': - self.lado2 = 'engastado' - pixmap = QPixmap('engh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - else: - self.lado2 = 'livre' - pixmap = QPixmap('livh.png') - self.pushButton_2.setIcon(QIcon(pixmap)) - - def estado_l3(self): - if self.lado3 == 'livre': - self.lado3 = 'engastado' - pixmap = QPixmap('engh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - else: - self.lado3 = 'livre' - pixmap = QPixmap('livh.png') - self.pushButton_3.setIcon(QIcon(pixmap)) - - def estado_l4(self): - if self.lado4 == 'livre': - self.lado4 = 'engastado' - pixmap = QPixmap('engv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - else: - self.lado4 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - def situacao_laje(self): - l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - l4 = self.lado4 - - cota_v1 = self.label_37 - cota_v2 = self.label_40 - cota_h1 = self.label_38 - cota_h2 = self.label_41 - - if (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre'): - global caso - caso = '1' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - global lx_lage - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '2' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') : - caso = '2' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'livre') or (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'livre') or (l1 == 'livre' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado') or (l1 == 'livre' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado'): - caso = '3' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'livre' and l4 == 'engastado'): - caso = '4' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '4' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'livre' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'livre' and l4 == 'engastado'): - caso = '5' - - cota_v1.hide() - cota_v2.hide() - cota_h1.show() - cota_h2.show() - - lx_lage = 'l_maior' - elif (l1 == 'livre' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado') or (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'livre'): - caso = '5' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - elif (l1 == 'engastado' and l2 == 'engastado' and l3 == 'engastado' and l4 == 'engastado'): - caso = '6' - - cota_v1.show() - cota_v2.show() - cota_h1.hide() - cota_h2.hide() - - lx_lage = 'l_menor' - else: - caso='ainda não existe, não sei como você chegou até aqui srsrrsrsrsrsrs' - - - print(caso) - self.lineEdit_6.setText(str(caso)) - - def calcular_laje(self): - lado_maior = float(self.lineEdit_3.text()) - lado_menor = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - - self.lineEdit_7.setText('') - self.lineEdit_9.setText('') - self.lineEdit_8.setText('') - self.lineEdit_10.setText('') - self.lineEdit_16.setText('') - self.lineEdit_14.setText('') - self.lineEdit_15.setText('') - self.lineEdit_16.setText('') - - if lado_maior != 0 and lado_menor != 0 and espes != 0 and d != 0: - lado1 = float(self.lineEdit_3.text()) - lado2 = float(self.lineEdit_4.text()) - espes = float(self.lineEdit_5.text()) - d = float(self.lineEdit_27.text()) - carreg_adicional = float(self.lineEdit_2.text()) - #fck_laje = float(self.comboBox.currentText()) - #fcd_laje = fck_laje/1.4 - #fyk_laje = float(self.comboBox_2.currentText()) - #fyd_laje = fyk_laje/1.15 - - pp = (espes * 25)/100 - self.lineEdit.setText(str(pp)) - - carreg_total = pp + carreg_adicional - #print(caso) - #print(lx_lage) - #---------------------------------- cálculo do Lx baseado no caso do tipo de situação da laje ----------------- - global lx - global lambda_laje - if lx_lage == 'l_menor': - lx = lado2 - lambda_laje = round((lado1/lado2),ndigits=2) - elif lx_lage == 'l_maior': - lx = lado1 - lambda_laje = round((lado2/lado1),ndigits=2) - print(lx_lage) - - - #---------------------------------- definição se a laje é unidirecional ou bidirecional baseado no lambda ----------------- - global tipo_laje - if float(lambda_laje) > 2.001: - tipo_laje = 'UNIDIRECIONAL' - self.laje_unidirecional(carreg_total) - else: - tipo_laje = 'BIDIRECIONAL' - #self.label_43.setStyleSheet("Background: url('laje_unidirecional_modelo.png') no-repeat") - - mx = my = nx = ny = '' - - if caso == '1': - caso1 = marcus.caso1 - linhas = len(caso1) - colunas = len(caso1[0]) - - for i in range(linhas): - aux = caso1[i][0] - if lambda_laje == aux: - print(caso1[i]) - mx = caso1[i][2] - my = caso1[i][3] - - print('mx: ',mx) - print('my: ',my) - - if caso == '2': - caso2 = marcus.caso2 - linhas = len(caso2) - colunas = len(caso2[0]) - - for i in range(linhas): - aux = caso2[i][0] - if lambda_laje == aux: - print(caso2[i]) - mx = caso2[i][2] - nx = caso2[i][3] - my = caso2[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '3': - caso3 = marcus.caso3 - linhas = len(caso3) - colunas = len(caso3[0]) - - for i in range(linhas): - aux = caso3[i][0] - if lambda_laje == aux: - print(caso3[i]) - mx = caso3[i][2] - nx = caso3[i][3] - my = caso3[i][4] - ny = caso3[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '4': - caso4 = marcus.caso4 - linhas = len(caso4) - colunas = len(caso4[0]) - - for i in range(linhas): - aux = caso4[i][0] - if lambda_laje == aux: - print(caso4[i]) - mx = caso4[i][2] - nx = caso4[i][3] - my = caso4[i][4] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - - if caso == '5': - caso5 = marcus.caso5 - linhas = len(caso5) - colunas = len(caso5[0]) - - for i in range(linhas): - aux = caso5[i][0] - if lambda_laje == aux: - print(caso5[i]) - mx = caso5[i][2] - nx = caso5[i][3] - my = caso5[i][4] - ny = caso5[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - if caso == '6': - caso6 = marcus.caso6 - linhas = len(caso6) - colunas = len(caso6[0]) - - for i in range(linhas): - aux = caso6[i][0] - if lambda_laje == aux: - print(caso6[i]) - mx = caso6[i][2] - nx = caso6[i][3] - my = caso6[i][4] - ny = caso6[i][5] - - print('mx: ',mx) - print('nx: ',nx) - print('my: ',my) - print('ny: ',ny) - - print(lx) - if mx != '': - self.lineEdit_7.setText(str(mx)) - momento_pos_x = ((carreg_total * (lx**2))/mx) - momento_pos_x = round(momento_pos_x,ndigits=4) - - if caso == '1': - print('caso 1----------------------------------------------------------') - elif caso == '2': - print('caso 2----------------------------------------------------------') - elif caso == '3': - print('caso 3----------------------------------------------------------') - elif caso == '4': - print('caso 4----------------------------------------------------------') - elif caso == '5': - print('caso 5----------------------------------------------------------') - elif caso == '6': - print('caso 6----------------------------------------------------------') - - - self.lineEdit_13.setText(str(momento_pos_x)) - #else: - # self.lineEdit_13.setText('0') - if nx != '': - self.lineEdit_9.setText(str(nx)) - momento_neg_x = round(((carreg_total * (lx**2))/nx),ndigits=4) - self.lineEdit_14.setText(str(momento_neg_x)) - #momento_neg_x = round(momento_neg_x,ndigits=2) - #else: - # self.lineEdit_14.setText('0') - if my != '': - self.lineEdit_8.setText(str(my)) - momento_pos_y = ((carreg_total * (lx**2))/my) - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - #else: - # self.lineEdit_15.setText('0') - if ny != '': - self.lineEdit_10.setText(str(ny)) - momento_neg_y = round(((carreg_total * (lx**2))/ny),ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - #momento_neg_y = round(momento_neg_y,ndigits=2) - #else: - # self.lineEdit_16.setText('0') - - ''' - if mx != '': - self.lineEdit_7.setText(str(mx)) - momento_pos_x = ((carreg_total * (lx**2))/mx) - momento_pos_x = round(momento_pos_x,ndigits=4) - self.lineEdit_13.setText(str(momento_pos_x)) - #else: - # self.lineEdit_13.setText('0') - if nx != '': - self.lineEdit_9.setText(str(nx)) - momento_neg_x = round(((carreg_total * (lx**2))/nx),ndigits=4) - self.lineEdit_14.setText(str(momento_neg_x)) - #momento_neg_x = round(momento_neg_x,ndigits=2) - #else: - # self.lineEdit_14.setText('0') - if my != '': - self.lineEdit_8.setText(str(my)) - momento_pos_y = ((carreg_total * (lx**2))/my) - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - #else: - # self.lineEdit_15.setText('0') - if ny != '': - self.lineEdit_10.setText(str(ny)) - momento_neg_y = round(((carreg_total * (lx**2))/ny),ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - #momento_neg_y = round(momento_neg_y,ndigits=2) - #else: - # self.lineEdit_16.setText('0') - ''' - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes") - - - def laje_unidirecional(self,carreg_total): - - #self.lineEdit_7.setText('') - #self.lineEdit_9.setText('') - #self.lineEdit_8.setText('') - #self.lineEdit_10.setText('') - #self.lineEdit_16.setText('') - #self.lineEdit_13.setText('') - #self.lineEdit_14.setText('') - #self.lineEdit_15.setText('') - #self.lineEdit_16.setText('') - - self.lado1 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton.setIcon(QIcon(pixmap)) - - self.lado4 = 'livre' - pixmap = QPixmap('livv.png') - self.pushButton_4.setIcon(QIcon(pixmap)) - - print('unidirecional') - #l1 = self.lado1 - l2 = self.lado2 - l3 = self.lado3 - #l4 = self.lado4 - l1 = l4 = 'livre' - print(carreg_total) - if (l2 == 'livre' and l3 == 'livre'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_ll2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/8 - momento_neg_y = 0 - elif (l2 == 'engastado' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_ee2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/24 - momento_neg_y = (carreg_total * (lx**2))/12 - elif (l2 == 'engastado' and l3 == 'livre') or (l2 == 'livre' and l3 == 'engastado'): - self.label_43.setStyleSheet("Background: url('laje_unidirecional_le2.png') no-repeat") - momento_pos_y = (carreg_total * (lx**2))/14.2 - momento_neg_y = (carreg_total * (lx**2))/8 - - print('momento_pos_y: ',momento_pos_y) - print('momento_neg_y: ',momento_neg_y) - - #----------------------------------- enviar resultados de saida ao programa --------------------------------------- - momento_pos_y = round(momento_pos_y,ndigits=4) - self.lineEdit_15.setText(str(momento_pos_y)) - momento_neg_y = round(momento_neg_y,ndigits=4) - self.lineEdit_16.setText(str(momento_neg_y)) - - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - self.lineEdit_11.setText(str(lambda_laje)) - self.label_16.setText(str(tipo_laje)) - self.lineEdit_12.setText(str(carreg_total)) - - self.resultados_laje() - - def truncar(self,x): - aux = '{:.9f}'.format(x) - return aux - - def resultados_laje(self): - fck_laje = float(self.comboBox.currentText()) - fcd_laje = fck_laje/1.4 - fyk_laje = float(self.comboBox_2.currentText()) - fyd_laje = fyk_laje/1.15 - espes = float(self.lineEdit_5.text()) - - area_concreto_laje = round(((espes/100)*1000000),ndigits=4) - - ro_armad_minima = 0 - if fck_laje == 20: - ro_armad_minima = 0.15/100 - elif fck_laje == 25: - ro_armad_minima = 0.15/100 - elif fck_laje == 30: - ro_armad_minima = 0.15/100 - elif fck_laje == 35: - ro_armad_minima = 0.164/100 - elif fck_laje == 40: - ro_armad_minima = 0.179/100 - - armad_max_laje = (0.4/100)*area_concreto_laje - armad_neg_min = ro_armad_minima*area_concreto_laje - armad_pos_cruz = round(0.67*(ro_armad_minima*area_concreto_laje), ndigits=2) - armad_princ_unid = ro_armad_minima*area_concreto_laje - armad_secnd_unid = max((0.2*armad_princ_unid), (90), (0.5*(ro_armad_minima*area_concreto_laje))) - - - mx = self.lineEdit_13.text() - if mx == '': - self.lineEdit_13.setText('0') - - my = self.lineEdit_15.text() - if my == '': - self.lineEdit_15.setText('0') - - nx = self.lineEdit_14.text() - if nx == '': - self.lineEdit_14.setText('0') - - ny = self.lineEdit_16.text() - if ny == '': - self.lineEdit_16.setText('0') - - fck_laje = float(self.comboBox.currentText()) - fyk_laje = float(self.comboBox_2.currentText()) - fcd_laje = fck_laje* 1000000/1.4 - fyd_laje = fyk_laje* 1000000/1.15 - d_laje = float(self.lineEdit_27.text()) - espes = float(self.lineEdit_5.text()) - - #------------------------------------------enxerto----------------------- - - mx = float(self.lineEdit_13.text()) - my = float(self.lineEdit_15.text()) - nx = float(self.lineEdit_14.text()) - ny = float(self.lineEdit_16.text()) - #print('mx: ',mx) - #print('nx: ',nx) - #print('my: ',my) - #print('ny: ',ny) - mk_x = mx - mk_y = my - - nk_x = nx - nk_y = ny - - - md_x = round(1.4 * mk_x, ndigits = 4) - kmd_x_laje = (md_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_x_laje = (1 - math.sqrt(1 - 2*kmd_x_laje))/0.8 - kz_x_laje = 1 - 0.4 * kx_x_laje - - as_x_laje = (md_x * 1000/ (kz_x_laje * (d_laje/100) * fyd_laje))*1000000 - - print('md_x: ', md_x) - print('kmd_x_laje: ', kmd_x_laje) - print('kx_x_laje: ', kx_x_laje) - print('kz_x_laje: ', kz_x_laje) - print('as_x_laje: ', as_x_laje) - - md_y = round(1.4 * mk_y, ndigits = 4) - kmd_y_laje = (md_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje = (1 - math.sqrt(1 - 2*kmd_y_laje))/0.8 - kz_y_laje = 1 - 0.4 * kx_y_laje - - as_y_laje = (md_y * 1000/ (kz_y_laje * (d_laje/100) * fyd_laje))*1000000 - - print('md_y: ', md_y) - print('kmd_y_laje: ', kmd_y_laje) - print('kx_y_laje: ', kx_y_laje) - print('kz_y_laje: ', kz_y_laje) - print('as_y_laje: ', as_y_laje) - - - nd_x = round(1.4 * nk_x, ndigits = 4) - kmd_x_laje_n = (nd_x * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_x_laje_n = (1 - math.sqrt(1 - 2*kmd_x_laje_n))/0.8 - kz_x_laje_n = 1 - 0.4 * kx_x_laje_n - - as_x_laje_n = (nd_x * 1000/ (kz_x_laje_n * (d_laje/100) * fyd_laje))*1000000 - - - nd_y = round(1.4 * nk_y, ndigits = 4) - kmd_y_laje_n = (nd_y * 1000)/(1 * ((d_laje/100)**2) * 0.85 * (fcd_laje)) - kx_y_laje_n = (1 - math.sqrt(1 - 2*kmd_y_laje_n))/0.8 - kz_y_laje_n = 1 - 0.4 * kx_y_laje_n - - as_y_laje_n = (nd_x * 1000/ (kz_y_laje_n * (d_laje/100) * fyd_laje))*1000000 - - #------------------------------------------ saida de dados ------------------------------------ - kmd_x_laje = self.truncar(kmd_x_laje) - kx_x_laje = self.truncar(kx_x_laje) - kz_x_laje = self.truncar(kz_x_laje) - as_x_laje = self.truncar(as_x_laje) - - kmd_y_laje = self.truncar(kmd_y_laje) - kx_y_laje = self.truncar(kx_y_laje) - kz_y_laje = self.truncar(kz_y_laje) - as_y_laje = self.truncar(as_y_laje) - ''' - kmd_x_laje_n = self.truncar(kmd_x_laje_n) - kx_x_laje_n = self.truncar(kx_x_laje_n) - kz_x_laje_n = self.truncar(kz_x_laje_n) - as_x_laje_n = self.truncar(as_x_laje_n) - - kmd_y_laje_n = self.truncar(kmd_y_laje_n) - kx_y_laje_n = self.truncar(kx_y_laje_n) - kz_y_laje_n = self.truncar(kz_y_laje_n) - as_y_laje_n = self.truncar(as_y_laje_n) - ''' - - self.lineEdit_17.setText(str(md_x)) - self.lineEdit_18.setText(str(kmd_x_laje)) - self.lineEdit_19.setText(str(kx_x_laje)) - self.lineEdit_20.setText(str(kz_x_laje)) - self.lineEdit_21.setText(str(as_x_laje)) - - self.lineEdit_22.setText(str(md_y)) - self.lineEdit_24.setText(str(kmd_y_laje)) - self.lineEdit_25.setText(str(kx_y_laje)) - self.lineEdit_26.setText(str(kz_y_laje)) - self.lineEdit_23.setText(str(as_y_laje)) - ''' - self.lineEdit_28.setText(str(nd_x)) - self.lineEdit_29.setText(str(kmd_x_laje_n)) - self.lineEdit_30.setText(str(kx_x_laje_n)) - self.lineEdit_31.setText(str(kz_x_laje_n)) - self.lineEdit_32.setText(str(as_x_laje_n)) - - self.lineEdit_37.setText(str(nd_y)) - self.lineEdit_34.setText(str(kmd_y_laje_n)) - self.lineEdit_36.setText(str(kx_y_laje_n)) - self.lineEdit_35.setText(str(kz_y_laje_n)) - self.lineEdit_33.setText(str(as_y_laje_n)) - ''' - - - - self.lineEdit_38.setText(str(area_concreto_laje)) - self.lineEdit_39.setText(str(ro_armad_minima*100)) - self.lineEdit_42.setText(str(armad_max_laje)) - self.lineEdit_40.setText(str(armad_neg_min)) - self.lineEdit_41.setText(str(armad_pos_cruz)) - self.lineEdit_43.setText(str(armad_princ_unid)) - self.lineEdit_44.setText(str(armad_secnd_unid)) - - if tipo_laje == 'UNIDIRECIONAL': - self.label_44.setText('Distribuição') - if float(as_y_laje) < armad_princ_unid: - self.label_45.setText('Mínima') - else: - self.label_45.setText('') - - if tipo_laje == 'BIDIRECIONAL': - if float(as_x_laje) < armad_pos_cruz: - self.label_44.setText('Mínima') - else: - self.label_44.setText('') - - if float(as_y_laje) < armad_pos_cruz: - self.label_45.setText('Mínima') - else: - self.label_45.setText('') - - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - lajes = Lajes() - - app.exec_() diff --git a/pilar_area_aco.py b/pilar_area_aco.py deleted file mode 100644 index 5db82c4..0000000 --- a/pilar_area_aco.py +++ /dev/null @@ -1,115 +0,0 @@ - -import sys, os - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem -import pyqtgraph as pg - -file = 'file:///C:/Users/Acer/Desktop/tessssst/sample.pdf' - - -global pilares_info_aco -pilares_info_aco = [1.4,0.5,1.0,0.1,20,0.4,1000] - -class Pilar_area_aco(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('pilares_areas_aco.ui',self) - self.setWindowTitle('Navier - Pilares - Áreas de Aço') - - self.pushButton_4.setIcon(QtGui.QIcon('btn_flexaosimples.png')) - self.pushButton_4.setIconSize(QtCore.QSize(50,60)) - self.pushButton_5.setIcon(QtGui.QIcon('btn_flexaocomposta.png')) - self.pushButton_5.setIconSize(QtCore.QSize(50,60)) - - self.show() - - def load_signals(self): - print('inicializado') - self.pushButton_2.clicked.connect(self.calcular_area_aco) - self.pushButton.clicked.connect(self.recuperar_dados) - self.pushButton_3.clicked.connect(self.limpar) - self.pushButton_4.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - self.pushButton_5.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - - def recuperar_dados(self): - self.lineEdit_2.setText(str(pilares_info_aco[0])) - self.lineEdit_3.setText(str(pilares_info_aco[1])) - self.lineEdit_5.setText(str(pilares_info_aco[2])) - self.lineEdit_6.setText(str(pilares_info_aco[3])) - self.lineEdit_12.setText(str(pilares_info_aco[4])) - self.lineEdit_13.setText(str(pilares_info_aco[5])) - self.lineEdit_14.setText(str(pilares_info_aco[6])) - - def calcular_area_aco(self): - fck = float(self.lineEdit_12.text()) - fcd = fck/1.4 - fyd = 500/1.15 - area_concreto = float(self.lineEdit_13.text()) - nk = float(self.lineEdit_14.text()) - nd = 1.4 * nk - - mi_x = float(self.lineEdit_2.text()) - delta_x = float(self.lineEdit_3.text()) - - mi_y = float(self.lineEdit_5.text()) - delta_y = float(self.lineEdit_6.text()) - - omega_x = float(self.lineEdit_4.text()) - omega_y = float(self.lineEdit_7.text()) - - as_x = (omega_x * (area_concreto*1000000) * fcd)/fyd - as_y = (omega_y * (area_concreto*1000000) * fcd)/fyd - - as_x = round(as_x, ndigits=3) - as_y = round(as_y, ndigits=3) - - as_pilar_min = 0.15 * (nd/fyd) - if as_pilar_min < (0.004*area_concreto*100000): - as_pilar_min = round((0.004*area_concreto*100000), ndigits=3) - - as_pilar_max = round((0.08*area_concreto*1000000), ndigits=3) - - #-------------------------------------- saída de dados ---------------------------------------------------- - self.lineEdit_8.setText(str(as_x)) - self.lineEdit_9.setText(str(as_y)) - self.lineEdit_10.setText(str(as_pilar_max)) - self.lineEdit_11.setText(str(as_pilar_min)) - - def teste(self): - print('teste') - - def limpar(self): - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('1') - self.lineEdit_5.setText('0') - self.lineEdit_6.setText('0') - self.lineEdit_7.setText('1') - self.lineEdit_8.setText('0') - self.lineEdit_9.setText('0') - self.lineEdit_10.setText('0') - self.lineEdit_11.setText('0') - self.lineEdit_12.setText('0') - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - inicio = Pilar_area_aco() - app.exec_() diff --git a/pilares.py b/pilares.py deleted file mode 100644 index c3af02c..0000000 --- a/pilares.py +++ /dev/null @@ -1,471 +0,0 @@ - - - -import sys, os -import math - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem -import pyqtgraph as pg - -global pilares_info -pilares_info = [0,0,0,0] - -global pilares_info_aco -pilares_info_aco = [0, 0, 0, 0, 0, 0, 0] - -class Pilares(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.ui = loadUi('pilares_alt.ui',self) - self.load_signals() - - self.setWindowTitle('Navier - Pilares') - - - def load_signals(self): - print('pilares carregado') - self.cont_x = 0 - self.cont_y = 0 - #self.pushButton.clicked.connect(self.pilar_alterar_tipo_engaste_x) - #self.pushButton_2.clicked.connect(self.pilar_alterar_tipo_engaste_y) - self.pushButton_6.clicked.connect(self.calcular_pilares) - self.pushButton.clicked.connect(self.gerar_envoltoria) - self.pushButton_3.clicked.connect(lambda: pilares_areas_aco.show()) - - self.show() - - - def calcular_pilares(self): - x_pilar = self.lineEdit.text() - y_pilar = self.lineEdit_2.text() - altura_pilar = self.lineEdit_3.text() - altura_lance = self.lineEdit_4.text() - - nk_pilar = self.lineEdit_5.text() - momento_x_topo = self.lineEdit_6.text() - momento_x_base = self.lineEdit_7.text() - momento_y_topo = self.lineEdit_8.text() - momento_y_base = self.lineEdit_9.text() - - - if (x_pilar != '0' and y_pilar != '0' and altura_pilar != '0' and altura_lance != '0' and nk_pilar != '0'): - fck_pilar = float(self.comboBox_3.currentText()) - fcd_pilar = fck_pilar/1.4 - fyk_pilar = float(self.comboBox_4.currentText()) - fyd_pilar = fyk_pilar/1.15 - cobrimento_pilar = float(self.comboBox_5.currentText()) - - x_pilar = float(self.lineEdit.text()) - y_pilar = float(self.lineEdit_2.text()) - altura_pilar = float(self.lineEdit_3.text()) - altura_lance = float(self.lineEdit_4.text()) - - nk_pilar = float(self.lineEdit_5.text()) - momento_x_topo = float(self.lineEdit_6.text()) - momento_x_base = float(self.lineEdit_7.text()) - momento_y_topo = float(self.lineEdit_8.text()) - momento_y_base = float(self.lineEdit_9.text()) - - area_secao_pilar = (x_pilar/100)*(y_pilar/100) - - #nd_pilar = (nk_pilar + ((x_pilar/100)*(y_pilar/100)*altura_pilar*25)) * 1.4 - nd_pilar = (nk_pilar) * 1.4 - md_x_topo = 1.4 * momento_x_topo - md_x_base = 1.4 * momento_x_base - md_y_topo = 1.4 * momento_y_topo - md_y_base = 1.4 * momento_y_base - - '''apoio_x = self.stackedWidget.currentIndex() - if apoio_x == 0: - tipo_apoio_x = 'AA' - elif apoio_x == 1: - tipo_apoio_x = 'EA' - elif apoio_x == 2: - tipo_apoio_x = 'EE' - ''' - - tipo_apoio_x = 'AA' - - if momento_x_topo == 0 and momento_x_base == 0 and momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'intermediario' - elif momento_x_topo == 0 and momento_x_base == 0: - self.tipo_pilar = 'extremidade-x' - elif momento_y_topo == 0 and momento_y_base == 0: - self.tipo_pilar = 'extremidade-y' - else: - self.tipo_pilar = 'canto' - - - self.lineEdit_13.setText(str(round(md_x_topo, ndigits=5))) - self.lineEdit_14.setText(str(round(md_x_base, ndigits=5))) - self.lineEdit_22.setText(str(round(md_y_topo, ndigits=5))) - self.lineEdit_28.setText(str(round(md_y_base, ndigits=5))) - - #-Eixo-X---------------------------------------------------------------------- - b = y_pilar - h = x_pilar - - m_a = max(md_x_topo, md_x_base) - m_b = min(md_x_topo, md_x_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-x': - alfa_b_x = 1.0 - else: - alfa_b_x = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_x < 0.4: - alfa_b_x = 0.4 - - #excen_min_x = (1.5+0.03*h) - momento_min_x = (nd_pilar *(1.5+0.03*h))/100 - excen_min_x = momento_min_x/nd_pilar - - if md_x_topo < momento_min_x: - md_x_topo = momento_min_x - print('momento topo - mínimo') - alfa_b_x = 1.0 - if md_x_base < momento_min_x: - md_x_base = momento_min_x - print('momento base - mínimo') - alfa_b_x = 1.0 - - compr_efetivo_x = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_x): - compr_efetivo_x = altura_lance*100 - - excen_x_acidental = compr_efetivo_x/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_x_topo,md_x_base,momento_min_x)/nd_pilar)/h - - lambda_pilar_x = 3.46 * (compr_efetivo_x/h) - lambda_pilar_x_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_x - if lambda_pilar_x_limite < 35: - lambda_pilar_x_limite = 35 - - excen_2_x = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_x = nd_pilar * (excen_2_x/100) - - if lambda_pilar_x > lambda_pilar_x_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_x**2)/10 *(0.005/((v_0+0.5)*h)) - md2_x_relativo = nd_pilar * (excen_2/100) - else: - md2_x_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_x_intermediario = alfa_b_x * max(abs(md_x_topo), abs(md_x_base), abs(momento_min_x)) + md2_x_relativo - #msd_x_intermediario = alfa_b_x * abs(momento_min_x) + md2_x_relativo - - mi_x = msd_x_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_x = cobrimento_pilar/h - - - #-Eixo-Y---------------------------------------------------------------------- - h = y_pilar - b = x_pilar - - m_a = max(md_y_topo, md_y_base) - m_b = min(md_y_topo, md_y_base) - - if self.tipo_pilar == 'intermediario' or self.tipo_pilar == 'extremidade-y': - alfa_b_y = 1.0 - else: - alfa_b_y = (0.6 + 0.4*(m_b/m_a)) - - if alfa_b_y < 0.4: - alfa_b_y = 0.4 - - momento_min_y = (nd_pilar *(1.5+0.03*h))/100 - excen_min_y = momento_min_y/nd_pilar - - if md_y_topo < momento_min_y: - md_y_topo = momento_min_y - print('momento topo - mínimo') - alfa_b_y = 1.0 - if md_y_base < momento_min_y: - md_y_base = momento_min_y - print('momento base - mínimo') - alfa_b_y = 1.0 - - compr_efetivo_y = (altura_pilar*100) + h - if (altura_lance*100 < compr_efetivo_y): - compr_efetivo_y = altura_lance*100 - - excen_y_acidental = compr_efetivo_y/400 - v_0 = (nd_pilar*1000)/(area_secao_pilar * fcd_pilar*1000000) - - excentricidade_relativa = (max(md_y_topo,md_y_base,momento_min_y)/nd_pilar)/h - - lambda_pilar_y = 3.46 * (compr_efetivo_y/h) - lambda_pilar_y_limite = (25 + 12.5*(excentricidade_relativa))/alfa_b_y - if lambda_pilar_y_limite < 35: - lambda_pilar_y_limite = 35 - - excen_2_y = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - - md2_y = nd_pilar * (excen_2_y/100) - - if lambda_pilar_y > lambda_pilar_y_limite: - print('efeitos de 2 ordem considerados') - excen_2 = (compr_efetivo_y**2)/10 *(0.005/((v_0+0.5)*h)) - md2_y_relativo = nd_pilar * (excen_2/100) - else: - md2_y_relativo = 0 - print('efeitos de 2 ordem desconsiderados') - - msd_y_intermediario = alfa_b_y * max(abs(md_y_topo), abs(md_y_base), abs(momento_min_y)) + md2_y_relativo - #msd_y_intermediario = alfa_b_y * abs(momento_min_y) + md2_y_relativo - - mi_y = msd_y_intermediario/(h * area_secao_pilar * fcd_pilar)/10 - delta_y = cobrimento_pilar/h - - #print('v_0: ',v_0) - #print('excen_2_x: ',excen_2_x) - #print('compr_efetivo_x: ',compr_efetivo_x) - #print('alfa_b_x: ',alfa_b_x) - #print('lambda_pilar_x: ',lambda_pilar_x) - #print('lambda_pilar_x_limite: ',lambda_pilar_x_limite) - #print('momento_min_x: ',momento_min_x) - #print('md_x_topo: ',md_x_topo) - #print('md_x_base: ',md_x_base) - #print('msd_x_intermediario: ',msd_x_intermediario) - #print('md2_x: ',md2_x) - #print('--------------------------------------------------') - #print('lambda_pilar_y: ',lambda_pilar_y) - #print('lambda_pilar_y_limite: ',lambda_pilar_y_limite) - #print('momento_min_y: ',momento_min_y) - #print('md_y_topo: ',md_y_topo) - #print('md_y_base: ',md_y_base) - #print('msd_y_intermediario: ',msd_y_intermediario) - - #--------------------------------------------- saida de dados --------------------------------------------- - self.lineEdit_10.setText(str(round(nd_pilar, ndigits=4))) - self.lineEdit_11.setText(str(round(area_secao_pilar, ndigits=4))) - self.lineEdit_12.setText(str(round(v_0, ndigits=4))) - - self.lineEdit_15.setText(str(round(momento_min_x, ndigits=5))) - self.lineEdit_16.setText(str(round(excen_min_x*100, ndigits=5))) - self.lineEdit_17.setText(str(round(lambda_pilar_x, ndigits=5))) - self.lineEdit_18.setText(str(round(lambda_pilar_x_limite, ndigits=5))) - self.lineEdit_19.setText(str(round(excen_2_x, ndigits=5))) - self.lineEdit_20.setText(str(round(md2_x, ndigits=5))) - self.lineEdit_21.setText(str(round(msd_x_intermediario, ndigits=5))) - - self.lineEdit_24.setText(str(round(momento_min_y, ndigits=5))) - self.lineEdit_25.setText(str(round(excen_min_y*100, ndigits=5))) - self.lineEdit_26.setText(str(round(lambda_pilar_y, ndigits=5))) - self.lineEdit_23.setText(str(round(lambda_pilar_y_limite, ndigits=5))) - self.lineEdit_30.setText(str(round(excen_2_y, ndigits=5))) - self.lineEdit_29.setText(str(round(md2_y, ndigits=5))) - self.lineEdit_27.setText(str(round(msd_y_intermediario, ndigits=5))) - - self.lineEdit_31.setText(str(round(mi_x, ndigits=2))) - self.lineEdit_32.setText(str(round(mi_y, ndigits=2))) - self.lineEdit_33.setText(str(round(delta_x, ndigits=2))) - self.lineEdit_34.setText(str(round(delta_y, ndigits=2))) - - global pilares_info - pilares_info = [msd_x_intermediario, msd_y_intermediario, momento_min_x, momento_min_y] - - if md2_x_relativo == 0: - self.label_39.setText('não considera 2º ordem') - else: - self.label_39.setText('considera 2º ordem') - - if md2_y_relativo == 0: - self.label_44.setText('não considera 2º ordem') - else: - self.label_44.setText('considera 2º ordem') - - - if self.tipo_pilar == 'intermediario': - self.label.setText('PILAR INTERMEDIÁRIO') - elif (self.tipo_pilar == 'extremidade-x') or (self.tipo_pilar == 'extremidade-y'): - self.label.setText('PILAR DE EXTREMIDADE') - else: - self.label.setText('PILAR DE CANTO') - - global pilares_info_aco - pilares_info_aco = [mi_x, delta_x, mi_y, delta_y, fck_pilar, area_secao_pilar, nk_pilar] - - else: - QMessageBox.about(self, "Falta de Dados", "Por favor insira dados consistentes!") - - - - def gerar_envoltoria(self): - msd_x_intermediario = pilares_info[0] - msd_y_intermediario = pilares_info[1] - momento_min_x = pilares_info[2] - momento_min_y = pilares_info[3] - - x = [] - y = [] - for i in range(360): - theta = i - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = momento_min_y * seno - - cosseno = math.cos(theta_conv) - cosseno = momento_min_x * cosseno - - x.append(seno) - y.append(cosseno) - - z = [] - w = [] - for j in range(360): - theta = j - theta_conv = (theta*math.pi)/180 - - seno = math.sin(theta_conv) - seno = msd_y_intermediario * seno - - cosseno = math.cos(theta_conv) - cosseno = msd_x_intermediario * cosseno - - z.append(seno) - w.append(cosseno) - - # create plot - '''plt = pg.plot(x, y, title='theTitle', pen='r') - plt.showGrid(x=True,y=True) - ''' - # create plot - plt = pg.plot() - plt.clear() - plt.showGrid(x=True,y=True) - plt.addLegend() - plt.setTitle('Envoltória de Momentos') - - - # set properties - plt.setLabel('left', 'Momentos Y', units='KN.m') - plt.setLabel('bottom', 'Momentos X', units='KN.m') - plt.setXRange(0,10) - plt.setYRange(0,20) - - - plt.enableAutoRange() - plt.setWindowTitle('pyqtgraph plot') - # plot - c1 = plt.plot(x, y, pen='r', name='Envoltória Momentos min') - c2 = plt.plot(z, w, pen='b', name='Envoltória Momentos máx') - - - - - -file = 'file:///C:/Users/Acer/Desktop/tessssst/sample.pdf' - -#global pilares_info_aco -#pilares_info_aco = [1.4,0.5,1.0,0.1,20,0.4,1000] - -class Pilar_area_aco(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('pilares_areas_aco.ui',self) - self.setWindowTitle('Navier - Pilares - Áreas de Aço') - - self.pushButton_4.setIcon(QtGui.QIcon('btn_flexaosimples.png')) - self.pushButton_4.setIconSize(QtCore.QSize(50,60)) - self.pushButton_5.setIcon(QtGui.QIcon('btn_flexaocomposta.png')) - self.pushButton_5.setIconSize(QtCore.QSize(50,60)) - - def load_signals(self): - print('inicializado') - self.pushButton_2.clicked.connect(self.calcular_area_aco) - self.pushButton.clicked.connect(self.recuperar_dados) - self.pushButton_3.clicked.connect(self.limpar) - self.pushButton_4.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - self.pushButton_5.clicked.connect(lambda: self.abrirTabelaAuxiliar(file)) - - def recuperar_dados(self): - self.lineEdit_2.setText(str(round(pilares_info_aco[0], ndigits=2))) - self.lineEdit_3.setText(str(round(pilares_info_aco[1], ndigits=2))) - self.lineEdit_5.setText(str(round(pilares_info_aco[2], ndigits=2))) - self.lineEdit_6.setText(str(round(pilares_info_aco[3], ndigits=2))) - self.lineEdit_12.setText(str(round(pilares_info_aco[4], ndigits=2))) - self.lineEdit_13.setText(str(round(pilares_info_aco[5], ndigits=2))) - self.lineEdit_14.setText(str(round(pilares_info_aco[6], ndigits=2))) - - def calcular_area_aco(self): - fck = float(self.lineEdit_12.text()) - fcd = fck/1.4 - fyd = 500/1.15 - area_concreto = float(self.lineEdit_13.text()) - nk = float(self.lineEdit_14.text()) - nd = 1.4 * nk - - mi_x = float(self.lineEdit_2.text()) - delta_x = float(self.lineEdit_3.text()) - - mi_y = float(self.lineEdit_5.text()) - delta_y = float(self.lineEdit_6.text()) - - omega_x = float(self.lineEdit_4.text()) - omega_y = float(self.lineEdit_7.text()) - - as_x = (omega_x * (area_concreto*1000000) * fcd)/fyd - as_y = (omega_y * (area_concreto*1000000) * fcd)/fyd - - as_x = round(as_x, ndigits=3) - as_y = round(as_y, ndigits=3) - - as_pilar_min = 0.15 * (nd/fyd) - if as_pilar_min < (0.004*area_concreto*100000): - as_pilar_min = round((0.004*area_concreto*100000), ndigits=3) - - as_pilar_max = round((0.08*area_concreto*1000000), ndigits=3) - - #-------------------------------------- saída de dados ---------------------------------------------------- - self.lineEdit_8.setText(str(as_x)) - self.lineEdit_9.setText(str(as_y)) - self.lineEdit_10.setText(str(as_pilar_max)) - self.lineEdit_11.setText(str(as_pilar_min)) - - def teste(self): - print('teste') - - def limpar(self): - self.lineEdit_2.setText('0') - self.lineEdit_3.setText('0') - self.lineEdit_4.setText('1') - self.lineEdit_5.setText('0') - self.lineEdit_6.setText('0') - self.lineEdit_7.setText('1') - self.lineEdit_8.setText('0') - self.lineEdit_9.setText('0') - self.lineEdit_10.setText('0') - self.lineEdit_11.setText('0') - self.lineEdit_12.setText('0') - self.lineEdit_13.setText('0') - self.lineEdit_14.setText('0') - - def abrirTabelaAuxiliar(self,file): - if sys.platform == 'linux2': - subprocess.call(["xdg-open", file]) - else: - os.startfile(file) - - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - pilares = Pilares() - pilares_areas_aco = Pilar_area_aco() - - app.exec_() diff --git a/pilares.ui b/pilares.ui deleted file mode 100644 index 8a36646..0000000 --- a/pilares.ui +++ /dev/null @@ -1,1633 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 1004 - 714 - - - - MainWindow - - - - - - 6 - 50 - 991 - 641 - - - - 0 - - - - Seção Retangular - - - - - 10 - 30 - 231 - 81 - - - - Concreto - - - - - 10 - 20 - 111 - 21 - - - - Resistência - fck [MPa] - - - - - - 140 - 20 - 81 - 22 - - - - - 20 - - - - - 25 - - - - - 30 - - - - - 35 - - - - - 40 - - - - - 45 - - - - - 50 - - - - - - - 140 - 50 - 81 - 22 - - - - - 500 - - - - - - - 10 - 50 - 111 - 21 - - - - Tipo de Aço - CA - - - - - - - 10 - 120 - 231 - 441 - - - - Esquema Pilar - - - - - 40 - 10 - 141 - 171 - - - - - - - esquema_pilar.png - - - true - - - - - - 16 - 190 - 191 - 161 - - - - - - - - - - - 260 - 330 - 251 - 231 - - - - Solicitações - - - - - 30 - 20 - 71 - 21 - - - - Nk [KN] - - - - - - 130 - 20 - 91 - 20 - - - - 0 - - - - - - 10 - 50 - 241 - 81 - - - - Momentos X - - - - - 18 - 20 - 91 - 21 - - - - Mx Topo [KN.m] - - - - - - 120 - 20 - 91 - 20 - - - - 0 - - - - - - 18 - 50 - 81 - 21 - - - - Mx Base [KN.m] - - - - - - 120 - 50 - 91 - 20 - - - - 0 - - - - - - - 10 - 140 - 241 - 80 - - - - Momentos Y - - - - - 18 - 20 - 91 - 21 - - - - My Topo [KN.m] - - - - - - 120 - 20 - 91 - 20 - - - - 0 - - - - - - 18 - 50 - 81 - 21 - - - - My Base [KN.m] - - - - - - 120 - 50 - 91 - 20 - - - - 0 - - - - - - - - 260 - 30 - 251 - 291 - - - - Dimensões - - - - - 20 - 20 - 121 - 21 - - - - Largura - Xpilar [cm] - - - - - - 150 - 20 - 71 - 20 - - - - 0 - - - - - - 150 - 50 - 71 - 20 - - - - 0 - - - - - - 20 - 50 - 121 - 21 - - - - Comprimento - Ypilar [cm] - - - - - - 20 - 80 - 121 - 21 - - - - Altura do Pilar [m] - - - - - - 150 - 80 - 71 - 20 - - - - 0 - - - - - - 20 - 110 - 121 - 21 - - - - Altura do Lance [m] - - - - - - 150 - 110 - 71 - 20 - - - - 0 - - - - - - 20 - 140 - 121 - 21 - - - - Cobrimento [cm] - - - - - - 150 - 140 - 69 - 22 - - - - - 2.0 - - - - - 3.0 - - - - - 4.0 - - - - - 5.0 - - - - - - - 20 - 170 - 47 - 13 - - - - Eixo X - - - - - - 130 - 170 - 47 - 13 - - - - Eixo Y - - - - - - 30 - 260 - 75 - 20 - - - - Alterar - - - - - - 140 - 260 - 75 - 20 - - - - Alterar - - - - - - 40 - 180 - 41 - 71 - - - - 0 - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_a.png - - - true - - - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_b.png - - - true - - - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_c.png - - - true - - - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_d.png - - - true - - - - - - - - 160 - 180 - 41 - 71 - - - - 0 - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_a.png - - - true - - - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_b.png - - - true - - - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_c.png - - - true - - - - - - - - -10 - 10 - 51 - 61 - - - - - - - pilar_engaste_d.png - - - true - - - - - - - - - 800 - 580 - 75 - 23 - - - - Limpar - - - - - - 890 - 580 - 75 - 23 - - - - Salvar - - - - - - 710 - 580 - 75 - 23 - - - - Calcular - - - - - - 530 - 30 - 441 - 531 - - - - Resultados - - - - - 18 - 20 - 47 - 21 - - - - Nd [KN] - - - - - - 100 - 20 - 91 - 20 - - - - - - - 18 - 50 - 61 - 21 - - - - Área [cm²] - - - - - - 100 - 50 - 91 - 20 - - - - - - - 9 - 80 - 211 - 321 - - - - Eixo X - - - - - 20 - 20 - 81 - 21 - - - - Md Topo [KN.m] - - - - - - 110 - 20 - 81 - 20 - - - - - - - 20 - 50 - 81 - 21 - - - - Md Base [KN.m] - - - - - - 110 - 50 - 81 - 20 - - - - - - - 30 - 80 - 81 - 21 - - - - Mx mim [KN.m] - - - - - - 110 - 80 - 81 - 20 - - - - - - - - - - 30 - 110 - 81 - 21 - - - - e1 min [cm] - - - - - - 110 - 110 - 81 - 20 - - - - - - - - - - 50 - 140 - 31 - 21 - - - - λx - - - - - - 100 - 140 - 81 - 20 - - - - - - - - - - 100 - 170 - 81 - 20 - - - - - - - - - - 50 - 170 - 41 - 21 - - - - λ1x - - - - - - 110 - 230 - 81 - 20 - - - - - - - - - - 20 - 230 - 41 - 21 - - - - e2 [cm] - - - - - - 20 - 260 - 81 - 21 - - - - Mx2 [KN.m] - - - - - - 110 - 260 - 81 - 20 - - - - - - - - - - 110 - 290 - 81 - 20 - - - - - - - - - - 20 - 290 - 81 - 21 - - - - Md totx [KN.m] - - - - - - 36 - 200 - 141 - 20 - - - - - - - - - - - 220 - 80 - 211 - 321 - - - - Eixo Y - - - - - 110 - 20 - 81 - 20 - - - - - - - 20 - 290 - 81 - 21 - - - - Md toty [KN.m] - - - - - - 100 - 170 - 81 - 20 - - - - - - - - - - 20 - 260 - 81 - 21 - - - - My2 [KN.m] - - - - - - 20 - 230 - 41 - 21 - - - - e2 [cm] - - - - - - 110 - 80 - 81 - 20 - - - - - - - - - - 50 - 170 - 41 - 21 - - - - λ1y - - - - - - 110 - 110 - 81 - 20 - - - - - - - - - - 100 - 140 - 81 - 20 - - - - - - - - - - 110 - 290 - 81 - 20 - - - - - - - - - - 36 - 200 - 141 - 20 - - - - - - - - - - 30 - 80 - 81 - 21 - - - - My mim [KN.m] - - - - - - 50 - 140 - 31 - 21 - - - - λy - - - - - - 110 - 50 - 81 - 20 - - - - - - - 110 - 260 - 81 - 20 - - - - - - - - - - 110 - 230 - 81 - 20 - - - - - - - - - - 20 - 20 - 81 - 21 - - - - Md Topo [KN.m] - - - - - - 20 - 50 - 81 - 21 - - - - Md Base [KN.m] - - - - - - 30 - 110 - 81 - 21 - - - - e1 min [cm] - - - - - - - 260 - 50 - 91 - 20 - - - - - - - 230 - 50 - 41 - 21 - - - - ν0 - - - - - - 274 - 503 - 121 - 20 - - - - Gerar Detalhamento - - - - - - 10 - 410 - 211 - 81 - - - - Adimensionais X - - - - - 50 - 20 - 41 - 21 - - - - μx - - - - - - 70 - 18 - 81 - 20 - - - - - - - 70 - 46 - 81 - 20 - - - - - - - 50 - 48 - 41 - 21 - - - - δx - - - - - - - 220 - 410 - 211 - 81 - - - - Adimensionais Y - - - - - 70 - 20 - 81 - 20 - - - - - - - 50 - 22 - 41 - 21 - - - - μy - - - - - - 70 - 48 - 81 - 20 - - - - - - - 50 - 50 - 41 - 21 - - - - δx - - - - - - - - Seção Circular - - - - - 10 - 30 - 231 - 81 - - - - Concreto - - - - - 10 - 20 - 121 - 21 - - - - Resistência - fck [MPa] - - - - - - 140 - 20 - 81 - 22 - - - - - 20 - - - - - 25 - - - - - 30 - - - - - 35 - - - - - 40 - - - - - 45 - - - - - 50 - - - - - - - 10 - 50 - 121 - 21 - - - - Tipo de Aço - CA - - - - - - 140 - 50 - 81 - 22 - - - - - 500 - - - - - - - - - - - 0 - 0 - 1004 - 21 - - - - - - - - diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8e91211 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,12 @@ +click==8.3.0 +colorama==0.4.6 +numpy==2.2.6 +PyQt6==6.9.1 +pyqt6-plugins==6.4.2.2.3 +PyQt6-Qt6==6.9.2 +pyqt6-tools==6.4.2.3.3 +PyQt6_sip==13.10.2 +pyqtgraph==0.13.7 +python-dotenv==1.1.1 +qt6-applications==6.4.3.2.3 +qt6-tools==6.4.3.1.3 diff --git a/sapatas.ui b/sapatas.ui deleted file mode 100644 index 6870d56..0000000 --- a/sapatas.ui +++ /dev/null @@ -1,1185 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 946 - 619 - - - - MainWindow - - - - - - 20 - 80 - 251 - 81 - - - - Concreto - - - - - 20 - 20 - 121 - 20 - - - - Resistência - fck [MPa] - - - - - - 150 - 20 - 81 - 22 - - - - - 20 - - - - - 25 - - - - - 30 - - - - - 35 - - - - - 40 - - - - - 45 - - - - - 50 - - - - - - - 150 - 50 - 81 - 22 - - - - - 250 - - - - - 500 - - - - - 600 - - - - - - - 20 - 50 - 121 - 20 - - - - Resistência do Aço [MPa] - - - - - - - 20 - 171 - 251 - 121 - - - - Solicitações - - - - - 20 - 30 - 101 - 16 - - - - Nk [KN] - - - - - - 132 - 30 - 91 - 20 - - - - 0 - - - - - - 20 - 60 - 101 - 16 - - - - Momento Y [KN.m] - - - - - - 132 - 60 - 91 - 20 - - - - 0 - - - - - - 20 - 90 - 91 - 16 - - - - Momento X [KN.m] - - - - - - 132 - 90 - 91 - 20 - - - - 0 - - - - - - - 20 - 300 - 251 - 81 - - - - Pilar - - - - - 30 - 20 - 71 - 16 - - - - Base - Yp [cm] - - - - - - 122 - 20 - 91 - 20 - - - - 0 - - - - - - 30 - 50 - 81 - 16 - - - - Base - Xp [cm] - - - - - - 120 - 50 - 91 - 20 - - - - 0 - - - - - - - 290 - 80 - 251 - 171 - - - - Sapata - - - - - 30 - 50 - 101 - 21 - - - - Base X - Xsap [m] - - - - - - 132 - 50 - 91 - 20 - - - - 0 - - - - - - 132 - 20 - 91 - 20 - - - - 0 - - - - - - 30 - 20 - 101 - 21 - - - - Base Y - Ysap[m] - - - - - - 30 - 80 - 91 - 21 - - - - Alt. Total - Ht [m] - - - - - - 132 - 80 - 91 - 20 - - - - 0 - - - - - - 132 - 110 - 91 - 20 - - - - 0 - - - - - - 30 - 110 - 101 - 21 - - - - Alt. Prisma - Ho [m] - - - - - - 134 - 140 - 91 - 23 - - - - Gerar Dimensões - - - - - - - 290 - 260 - 251 - 331 - - - - Esquema da Sapata - - - - - 0 - 30 - 251 - 181 - - - - - - - sapata_sup.png - - - true - - - - - - 10 - 230 - 231 - 81 - - - - - - - sapata_perfil.png - - - true - - - - - - - 20 - 390 - 251 - 201 - - - - Solo - - - - - 20 - 60 - 121 - 16 - - - - Coef. Influência do Solo - - - - - - 150 - 60 - 71 - 20 - - - - 1.1 - - - - - - 20 - 90 - 111 - 21 - - - - Ângulo Dissipação - - - - - - 150 - 90 - 71 - 22 - - - - 30 - - - 50 - - - - - - 150 - 30 - 71 - 20 - - - - 0 - - - - - - 20 - 30 - 131 - 16 - - - - Tensão Adm. Solo [MPa] - - - - - - - 560 - 80 - 381 - 511 - - - - Dimensionamento - - - - - 30 - 20 - 121 - 21 - - - - Área da Sapata [cm²] - - - - - - 150 - 20 - 91 - 20 - - - - - - - 20 - 50 - 51 - 21 - - - - Wx [cm³] - - - - - - 120 - 50 - 61 - 20 - - - - - - - - - - 290 - 50 - 61 - 20 - - - - - - - - - - 200 - 50 - 51 - 21 - - - - Wy [cm³] - - - - - - 140 - 80 - 101 - 20 - - - - - - - - - - 30 - 80 - 81 - 21 - - - - N equiv. [N] - - - - - - 20 - 110 - 121 - 21 - - - - Tensão Máx [MPa] - - - - - - 119 - 110 - 70 - 20 - - - - - - - - - - 290 - 110 - 71 - 20 - - - - - - - - - - 200 - 110 - 91 - 21 - - - - Tensão Mín [MPa] - - - - - - 20 - 150 - 91 - 21 - - - - Balanço X [cm] - - - - - - 119 - 150 - 71 - 20 - - - - - - - - - - 290 - 150 - 71 - 20 - - - - - - - - - - 200 - 150 - 81 - 21 - - - - Balanço Y [cm] - - - - - - 120 - 180 - 71 - 20 - - - - - - - - - - 20 - 180 - 91 - 21 - - - - H rigidez X [cm] - - - - - - 290 - 180 - 71 - 20 - - - - - - - - - - 200 - 180 - 91 - 21 - - - - H rigidez Y [cm] - - - - - - 30 - 210 - 121 - 21 - - - - H min,cis [cm] - - - - - - 140 - 210 - 101 - 20 - - - - - - - - - - 120 - 240 - 71 - 20 - - - - - - - - - - 20 - 240 - 91 - 21 - - - - H prisma X [cm] - - - - - - 30 - 270 - 121 - 21 - - - - Volume de Concreto [m³] - - - - - - 160 - 270 - 81 - 20 - - - - - - - - - - 200 - 240 - 91 - 21 - - - - H prisma Y [cm] - - - - - - 290 - 240 - 71 - 20 - - - - - - - - - - 0 - 300 - 381 - 81 - - - - Áreas de Aço - - - - - 18 - 20 - 71 - 16 - - - - Tração X [KN] - - - - - - 100 - 20 - 81 - 20 - - - - - - - 280 - 20 - 81 - 20 - - - - - - - 200 - 20 - 71 - 16 - - - - Tração Y [KN] - - - - - - 100 - 50 - 81 - 20 - - - - - - - 20 - 50 - 71 - 16 - - - - Asx [mm²] - - - - - - 282 - 50 - 81 - 20 - - - - - - - 200 - 50 - 71 - 16 - - - - Asy [mm²] - - - - - - - 0 - 389 - 381 - 81 - - - - Áreas de Aço Mínimas - - - - - 40 - 20 - 121 - 16 - - - - Taxa Armd. Mínima [%] - - - - - - 172 - 20 - 101 - 20 - - - - - - - 98 - 50 - 81 - 20 - - - - - - - 198 - 50 - 71 - 16 - - - - Asy [mm²] - - - - - - 18 - 50 - 71 - 16 - - - - Asx [mm²] - - - - - - 280 - 50 - 81 - 20 - - - - - - - - 230 - 480 - 111 - 23 - - - - Gerar Detalhamento - - - - - - - 770 - 610 - 75 - 23 - - - - Limpar - - - - - - 860 - 610 - 75 - 23 - - - - Salvar - - - - - - 680 - 610 - 75 - 23 - - - - Calcular - - - - - - - 0 - 0 - 946 - 21 - - - - - - - - diff --git a/tabela_bitolas.py b/tabela_bitolas.py deleted file mode 100644 index 7179d3a..0000000 --- a/tabela_bitolas.py +++ /dev/null @@ -1,38 +0,0 @@ - -import sys - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem - - -class Tabela_Bitolas(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - - self.ui = loadUi('bitolas_ferros.ui',self) - #self.tableWidget.setRowCount(linhas) - #self.tableWidget.setColumnCount(colunas) - #table = self.tableWidget() - #header = self.tableWidget.horizontalHeader() - #header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - #header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - - - self.setWindowTitle('Navier - Tabela de Bitolas') - self.show() - - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - aplicacao = Tabela_Bitolas() - app.exec_() \ No newline at end of file diff --git a/teste_classe_agressividade.py b/teste_classe_agressividade.py deleted file mode 100644 index fdc09f1..0000000 --- a/teste_classe_agressividade.py +++ /dev/null @@ -1,58 +0,0 @@ - - - -import sys - -from PyQt5.uic import loadUi -from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox, QVBoxLayout, QHBoxLayout, QDialog, QMessageBox -from PyQt5.QtGui import QPixmap, QIcon, QImage -from PyQt5 import QtWidgets, QtGui, QtCore -from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem - - -class Tabela_Classe_Agressividade(QtWidgets.QMainWindow): - def __init__(self): - super().__init__() - self.load_ui() - self.load_signals() - - def load_ui(self): - self.ui = loadUi('class_agres.ui',self) - self.setWindowTitle('Navier - Classes de Agressividade e Cobrimentos Mínimos') - self.show() - def load_signals(self): - print('inicializado') - header = self.tableWidget.horizontalHeader() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch) - - - self.tableWidget.setSpan(0, 0, 1, 4) - #self.tableWidget.horizontalHeader().setVisible(False) //QtWidgets.QHeaderView.ResizeToContents - - header_2 = self.tableWidget_2.horizontalHeader() - header_2.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - header_2.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - - self.tableWidget_2.setSpan(0, 0, 2, 1) - self.tableWidget_2.setSpan(0, 1, 2, 1) - self.tableWidget_2.setSpan(0, 3, 2, 1) - - self.tableWidget_2.setSpan(3, 0, 2, 1) - self.tableWidget_2.setSpan(3, 1, 2, 1) - self.tableWidget_2.setSpan(3, 3, 2, 1) - - self.tableWidget_2.setSpan(5, 0, 2, 1) - self.tableWidget_2.setSpan(5, 1, 2, 1) - self.tableWidget_2.setSpan(5, 3, 2, 1) - - - -if __name__ == '__main__': - app = QtWidgets.QApplication(sys.argv) - aplicacao = Tabela_Classe_Agressividade() - app.exec_() diff --git a/vigas.ui b/vigas.ui deleted file mode 100644 index 8e13aa2..0000000 --- a/vigas.ui +++ /dev/null @@ -1,1495 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 868 - 666 - - - - MainWindow - - - - - - 0 - 60 - 861 - 571 - - - - 0 - - - - Seção Retangular - - - - - -1 - 39 - 551 - 511 - - - - 1 - - - - - - 20 - 180 - 251 - 291 - - - - Dimensões - - - - - 130 - 30 - 101 - 20 - - - - 0 - - - - - - 130 - 60 - 101 - 20 - - - - 0 - - - - - - 131 - 90 - 100 - 20 - - - - 0 - - - - - - 20 - 30 - 81 - 16 - - - - Base - bw [cm] - - - - - - 20 - 60 - 81 - 16 - - - - Altura - h [cm] - - - - - - 20 - 90 - 91 - 16 - - - - Altura Útil - d [cm] - - - - - - 0 - 150 - 260 - 141 - - - - Projeção de Domínio - - - - - 140 - 20 - 82 - 21 - - - - Domínio 3 - - - - - - 30 - 20 - 82 - 21 - - - - Domínio 2 - - - true - - - - - - 100 - 50 - 47 - 21 - - - - ξ - - - - - - 130 - 50 - 81 - 20 - - - - 0.450 - - - - - - 60 - 80 - 71 - 21 - - - - d limite [m] - - - - - - 130 - 80 - 81 - 20 - - - - - - - 131 - 110 - 81 - 20 - - - - - - - 60 - 110 - 91 - 21 - - - - X-limite [m] - - - - - - - 19 - 120 - 91 - 16 - - - - d' [cm] - - - - - - 130 - 120 - 100 - 20 - - - - 0 - - - true - - - - - - - 290 - 0 - 251 - 141 - - - - Seção - - - - - 71 - 6 - 110 - 131 - - - - - - - navier_viga_dupla.png - - - true - - - - - - - 290 - 150 - 251 - 321 - - - - Armadura Longitudinal - - - - - 20 - 50 - 91 - 21 - - - - Momento2 [KN.m] - - - - - - 130 - 50 - 100 - 20 - - - - - - - 0 - 90 - 260 - 231 - - - - Áreas de Aço - - - - - 129 - 18 - 91 - 20 - - - - - - - 20 - 18 - 111 - 21 - - - - As Compressão [mm²] - - - - - - 20 - 78 - 101 - 21 - - - - Asobre-apoio [mm²] - - - - - - 129 - 78 - 91 - 20 - - - - - - - 129 - 108 - 91 - 20 - - - - - - - 20 - 108 - 91 - 21 - - - - As.pele [mm²] - - - - - - 21 - 170 - 91 - 21 - - - - As.máx [mm²] - - - - - - 130 - 170 - 91 - 20 - - - - - - - 129 - 48 - 91 - 20 - - - - - - - 20 - 48 - 111 - 21 - - - - As Tração [mm²] - - - - - - 21 - 200 - 91 - 21 - - - - As.mín [mm²] - - - - - - 130 - 200 - 91 - 20 - - - - - - - 21 - 140 - 91 - 21 - - - - As.total [mm²] - - - - - - 130 - 140 - 91 - 20 - - - - - - - - 130 - 20 - 100 - 20 - - - - - - - 20 - 20 - 111 - 21 - - - - Momento-limite [KN.m] - - - - - - - - - 20 - 180 - 251 - 151 - - - - Dimensões - - - - - 130 - 30 - 101 - 20 - - - - 0 - - - - - - 130 - 60 - 101 - 20 - - - - 0 - - - - - - 131 - 90 - 100 - 20 - - - - 0 - - - - - - 20 - 30 - 81 - 16 - - - - Base - bw [cm] - - - - - - 20 - 60 - 81 - 16 - - - - Altura - h [cm] - - - - - - 20 - 90 - 91 - 16 - - - - Altura Útil - d [cm] - - - - - - 19 - 120 - 91 - 16 - - - - d' [cm] - - - - - - 130 - 120 - 100 - 20 - - - - 0 - - - true - - - - - - - 20 - 340 - 251 - 141 - - - - Seção - - - - - 70 - 6 - 111 - 131 - - - - - - - secao_viga.png - - - true - - - - - - - 290 - 2 - 251 - 351 - - - - Armadura Longitudinal - - - - - 19 - 20 - 91 - 21 - - - - Md [KN] - - - - - - 130 - 20 - 100 - 20 - - - - - - - 60 - 80 - 91 - 21 - - - - Kmd - - - - - - 110 - 80 - 100 - 20 - - - - - - - 60 - 110 - 91 - 21 - - - - Kx - - - - - - 110 - 110 - 100 - 20 - - - - - - - 60 - 140 - 91 - 21 - - - - Kz - - - - - - 110 - 140 - 100 - 20 - - - - - - - 0 - 170 - 260 - 181 - - - - Áreas de Aço - - - - - 129 - 30 - 91 - 20 - - - - - - - 20 - 30 - 91 - 21 - - - - As [mm²] - - - - - - 20 - 60 - 101 - 21 - - - - Asobre-apoio [mm²] - - - - - - 129 - 60 - 91 - 20 - - - - - - - 129 - 90 - 91 - 20 - - - - - - - 20 - 90 - 91 - 21 - - - - As.pele [mm²] - - - - - - 21 - 120 - 91 - 21 - - - - As.máx [mm²] - - - - - - 130 - 120 - 91 - 20 - - - - - - - 129 - 150 - 91 - 20 - - - - - - - 20 - 150 - 91 - 21 - - - - As.mín [mm²] - - - - - - - 130 - 50 - 111 - 20 - - - - - - - 20 - 50 - 111 - 21 - - - - Domínio de Ruptura: - - - - - - - - - 540 - 10 - 131 - 23 - - - - Simplesmente Armada - - - - - - 690 - 10 - 141 - 23 - - - - Duplamente Armada - - - - - - 20 - 130 - 251 - 81 - - - - Solicitações - - - - - 150 - 20 - 81 - 20 - - - - 0 - - - - - - 150 - 50 - 81 - 20 - - - - 0 - - - - - - 20 - 20 - 141 - 20 - - - - Momento Fletor [KN.m] - - - - - - 20 - 49 - 111 - 21 - - - - Cortante [KN] - - - - - - - 20 - 40 - 251 - 81 - - - - Concreto - - - - - 20 - 20 - 121 - 20 - - - - Resistência - fck [MPa] - - - - - - 150 - 20 - 81 - 22 - - - - - 20 - - - - - 25 - - - - - 30 - - - - - 35 - - - - - 40 - - - - - 45 - - - - - 50 - - - - - - - 150 - 50 - 81 - 22 - - - - - 250 - - - - - 500 - - - - - 600 - - - - - - - 20 - 50 - 121 - 20 - - - - Tipo de Aço - CA - - - - - - - 570 - 40 - 261 - 471 - - - - Armadura Transversal - - - - - 0 - 140 - 271 - 91 - - - - Modelo de Cálculo - - - - - 20 - 20 - 211 - 21 - - - - Modelo I - α = 90º e θ = 45º - - - true - - - - - - 20 - 40 - 211 - 21 - - - - Modelo II - α = 90º e 30º < θ < 45º - - - - - - 170 - 60 - 42 - 22 - - - - 30 - - - 45 - - - - - - 140 - 60 - 47 - 21 - - - - θ : - - - - - - - 30 - 20 - 221 - 131 - - - - - - - esquema_bielas.png - - - true - - - - - - 30 - 240 - 47 - 16 - - - - Vsd [KN] - - - - - - 110 - 240 - 113 - 20 - - - - - - - 30 - 270 - 47 - 16 - - - - Vrd2 [KN] - - - - - - 110 - 270 - 113 - 20 - - - - - - - - - - 110 - 300 - 113 - 20 - - - - - - - - - - 30 - 300 - 47 - 16 - - - - Vc [KN] - - - - - - 30 - 330 - 47 - 16 - - - - Vsw[KN] - - - - - - 110 - 330 - 113 - 20 - - - - - - - - - - 0 - 360 - 270 - 81 - - - - Área de Aço - - - - - 122 - 20 - 101 - 20 - - - - - - - - - - 30 - 20 - 71 - 16 - - - - As/s [mm²/m] - - - - - - 122 - 50 - 101 - 20 - - - - - - - - - - 30 - 50 - 91 - 16 - - - - As.min/s [mm²/m] - - - - - - - 127 - 447 - 121 - 20 - - - - Gerar Detalhamento - - - - - - - 580 - 520 - 75 - 23 - - - - Calcular - - - - - - 760 - 520 - 75 - 23 - - - - Salvar - - - - - - 670 - 520 - 75 - 23 - - - - Limpar - - - - - - - - - 0 - 0 - 868 - 21 - - - - - - - -