Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#51 Le 07/05/2010, à 14:15

VinsS

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Salut,

Comme ceci, ce sera peut-être mieux:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# ossature_gui.py'
#
# Created: Fri May  7 13:05:42 2010

import os
from xml.dom import minidom

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    c_folder = os.getcwdu()
    f_datas = os.path.join(c_folder, "materiau.xml")
    gM = 0
    kh = 0

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(712, 483)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_3 = QtGui.QGridLayout(self.centralwidget)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.verticalLayout = QtGui.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.title_1 = QtGui.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("DejaVu Sans Mono")
        font.setPointSize(11)
        font.setWeight(75)
        font.setBold(True)
        self.title_1.setFont(font)
        self.title_1.setObjectName("title_1")
        self.verticalLayout.addWidget(self.title_1)
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.label_1 = QtGui.QLabel(self.centralwidget)
        self.label_1.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_1.setObjectName("label_1")
        self.gridLayout.addWidget(self.label_1, 0, 0, 1, 1)
        self.class_cmb = QtGui.QComboBox(self.centralwidget)
        self.class_cmb.setMaxVisibleItems(20)
        self.class_cmb.setObjectName("class_cmb")
        self.gridLayout.addWidget(self.class_cmb, 0, 1, 1, 1)
        self.label_2 = QtGui.QLabel(self.centralwidget)
        self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.base_spb = QtGui.QSpinBox(self.centralwidget)
        self.base_spb.setSuffix(" mm")
        self.base_spb.setMaximum(10000000)
        self.base_spb.setObjectName("base_spb")
        self.gridLayout.addWidget(self.base_spb, 1, 1, 1, 1)
        self.label_3 = QtGui.QLabel(self.centralwidget)
        self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
        self.height_spb = QtGui.QSpinBox(self.centralwidget)
        self.height_spb.setSuffix(" mm")
        self.height_spb.setMaximum(10000000)
        self.height_spb.setObjectName("height_spb")
        self.gridLayout.addWidget(self.height_spb, 2, 1, 1, 1)
        self.label_4 = QtGui.QLabel(self.centralwidget)
        self.label_4.setText("ft, 0, k:")
        self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
        self.ft_lbl = QtGui.QLabel(self.centralwidget)
        self.ft_lbl.setObjectName("ft_lbl")
        self.gridLayout.addWidget(self.ft_lbl, 3, 1, 1, 1)
        self.label_5 = QtGui.QLabel(self.centralwidget)
        self.label_5.setText(u"Ɣ:")
        self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_5.setObjectName("label_5")
        self.gridLayout.addWidget(self.label_5, 4, 0, 1, 1)
        self.gamma_lbl = QtGui.QLabel(self.centralwidget)
        self.gamma_lbl.setObjectName("gamma_lbl")
        self.gridLayout.addWidget(self.gamma_lbl, 4, 1, 1, 1)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, 
                                    QtGui.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.kh_btn = QtGui.QToolButton(self.centralwidget)
        self.kh_btn.setText("Kh")
        self.kh_btn.setObjectName("kh_btn")
        self.kh_btn.setEnabled(False)
        self.horizontalLayout.addWidget(self.kh_btn)
        self.gridLayout.addLayout(self.horizontalLayout, 5, 0, 1, 1)
        self.kh_lbl = QtGui.QLabel(self.centralwidget)
        self.kh_lbl.setObjectName("kh_lbl")
        self.gridLayout.addWidget(self.kh_lbl, 5, 1, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        self.title_2 = QtGui.QLabel(self.centralwidget)
        self.title_2.setFont(font)
        self.title_2.setObjectName("title_2")
        self.verticalLayout.addWidget(self.title_2)
        self.gridLayout_2 = QtGui.QGridLayout()
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label_7 = QtGui.QLabel(self.centralwidget)
        self.label_7.setText("N:")
        self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_7.setObjectName("label_7")
        self.gridLayout_2.addWidget(self.label_7, 0, 0, 1, 1)
        self.constrain_spb = QtGui.QSpinBox(self.centralwidget)
        self.constrain_spb.setSuffix(" N")
        self.constrain_spb.setMaximum(10000)
        self.constrain_spb.setObjectName("constrain_spb")
        self.gridLayout_2.addWidget(self.constrain_spb, 0, 1, 1, 1)
        self.label_8 = QtGui.QLabel(self.centralwidget)
        self.label_8.setText("Kmod:")
        self.label_8.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_8.setObjectName("label_8")
        self.gridLayout_2.addWidget(self.label_8, 1, 0, 1, 1)
        self.kmod_spb = QtGui.QDoubleSpinBox(self.centralwidget)
        self.kmod_spb.setMaximum(100000)
        self.kmod_spb.setObjectName("kmod_spb")
        self.gridLayout_2.addWidget(self.kmod_spb, 1, 1, 1, 1)
        self.compute_btn = QtGui.QToolButton(self.centralwidget)
        self.compute_btn.setObjectName("compute_btn")
        self.gridLayout_2.addWidget(self.compute_btn, 2, 0, 1, 1)
        self.reset_btn = QtGui.QToolButton(self.centralwidget)
        self.reset_btn.setObjectName("reset_btn")
        self.gridLayout_2.addWidget(self.reset_btn, 2, 1, 1, 1)
        #spacerItem1 = QtGui.QSpacerItem(50, 20, QtGui.QSizePolicy.Fixed, 
                                    #QtGui.QSizePolicy.Minimum)
        #self.gridLayout_2.addItem(spacerItem1, 2, 1, 1, 1)
        self.label_9 = QtGui.QLabel(self.centralwidget)
        self.label_9.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing
                                    |QtCore.Qt.AlignVCenter)
        self.label_9.setObjectName("label_9")
        self.gridLayout_2.addWidget(self.label_9, 3, 0, 1, 1)
        self.result_lbl = QtGui.QLabel(self.centralwidget)
        self.result_lbl.setFrameShape(QtGui.QFrame.StyledPanel)
        self.result_lbl.setStyleSheet("QWidget { background-color: white }")
        self.result_lbl.setObjectName("result_lbl")
        self.gridLayout_2.addWidget(self.result_lbl, 3, 1, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout_2)
        self.gridLayout_3.addLayout(self.verticalLayout, 0, 0, 1, 1)
        self.graphics_vuw = QtGui.QGraphicsView(self.centralwidget)
        self.graphics_vuw.setObjectName("graphics_vuw")
        self.gridLayout_3.addWidget(self.graphics_vuw, 0, 1, 1, 1)
        self.font_1 = QtGui.QFont()
        self.font_1.setFamily("DejaVu Sans Mono")
        self.font_1.setPointSize(10)
        self.font_1.setWeight(75)
        self.font_1.setBold(True)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 712, 25))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.cal = Calcul()
        self.i_dat = DataImport(self.f_datas)
        profils = ["Profils ..."]
        for p in self.i_dat.listmeca:
            profils.append(p)
        self.class_cmb.addItems(profils)

        QtCore.QObject.connect(self.class_cmb, QtCore.SIGNAL
                                ("activated(int)"), self.set_profil)
        QtCore.QObject.connect(self.base_spb, QtCore.SIGNAL
                                ("valueChanged(int)"), self.change_val)
        QtCore.QObject.connect(self.height_spb, QtCore.SIGNAL
                                ("valueChanged(int)"), self.change_val)
        QtCore.QObject.connect(self.kh_btn, QtCore.SIGNAL
                                ("clicked()"), self.kh_value)
        QtCore.QObject.connect(self.compute_btn, QtCore.SIGNAL
                                ("clicked()"), self.cal.calcul)
        QtCore.QObject.connect(self.reset_btn, QtCore.SIGNAL
                                ("clicked()"), self.reset)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow",
                                    "Ossature", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.title_1.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Définition de l\'élément étudié:", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.label_1.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Classe mécanique:", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.label_2.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Base b:", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.label_3.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Hauteur h:", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.title_2.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Définition de l\'effort:", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.compute_btn.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Calculer", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.reset_btn.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Reset", None, 
                                    QtGui.QApplication.UnicodeUTF8))
        self.label_9.setText(QtGui.QApplication.translate("MainWindow", 
                                    "Taux de travail:", None, 
                                    QtGui.QApplication.UnicodeUTF8))

    def set_profil(self, idx):
        if idx:
            self.ft0k = eval(self.i_dat.get_value(idx, "ftok"))
            self.ft_lbl.setFont(self.font_1)
            self.ft_lbl.setText("".join([str(self.ft0k), " Mpa"]))
            self.gM = eval(self.i_dat.get_value(idx, "gM"))
            self.gamma_lbl.setFont(self.font_1)
            self.gamma_lbl.setText(str(self.gM))
            self.kh_lbl.setText("") 

    def change_val(self, v):
        self.base = self.base_spb.value()
        self.height = self.height_spb.value()
        if self.base and self.height:
            self.kh_btn.setEnabled(True)
        else:
            self.kh_btn.setEnabled(False)
        self.kh_lbl.setText("")

    def kh_value(self):
        if self.gM and self.height:
            if self.gM == 1.3:
                if self.height >= 150:
                    self.kh=1.0
                elif self.height > 0 :
                    kh = (150 / self.height)
                    kh = pow(kh, 0.2)
                    kh = min(1.3, kh)
                    self.kh = (int(kh * 100)) / 100.0
                else :
                    self.statusbar.showMessage(u"Entrée incorrecte : Hauteur")
                    return 
       
            elif self.gM == 1.25:
                if self.height >= 600:
                    self.kh = 1.0
                elif self.height > 0 :
                    kh = pow(600 / self.height, 0.1)
                    kh = min(1.1, kh)
                    self.kh = (int(kh * 100)) / 100.0
                else :
                    self.statusbar.showMessage(u"Entrée incorrecte : Hauteur")
                    return 
                        
            self.kh_lbl.setFont(self.font_1)
            self.kh_lbl.setText(str(self.kh))
    
    def reset(self):
        self.class_cmb.setCurrentIndex(0)
        self.base_spb.setValue(0)
        self.height_spb.setValue(0)
        self.ft_lbl.setText("")
        self.gamma_lbl.setText("")
        self.kh_lbl.setText("")
        self.constrain_spb.setValue(0)
        self.kmod_spb.setValue(0)
        self.result_lbl.setText("")
                 
        

class DataImport(object):

    def __init__(self, datas):
        xmldoc = minidom.parse(datas)
        self.reflist = xmldoc.getElementsByTagName('profil')
        self.listmeca = [ligneX.attributes["id"].value for ligneX in self.reflist]

    def get_value(self, idx, d) :
        ligneX = self.reflist[idx]
        valeur_symbole = ligneX.attributes[d]
        valeur_symbole = valeur_symbole.value
        valeur_symbole = valeur_symbole.encode('utf-8')
        return valeur_symbole


class Calcul(object):
    def __init__(self):
        pass

    def calcul(self):
        effort = float(ui.constrain_spb.value())
        Kmod = float(ui.kmod_spb.value())
        if effort and Kmod and ui.base and ui.height and ui.ft0k:
            aire = ui.base * ui.height
            st0d = effort / aire
            #print type(ui.ft0k), type(ui.kh), type(Kmod), type(ui.gM)
            Ft0d = ui.ft0k * ui.kh * Kmod / ui.gM
            self.travail = (st0d / Ft0d)
            ui.result_lbl.setText(str(self.travail))
        else:
            ui.statusbar.showMessage(u"Données insufisantes.")



if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

L'espace blanc, tu auras deviné, est un espace graphique.

L'interface devrait, bien sur, être séparée du programme principal et les différents calculs aussi d'ailleurs et seraient, alors importés comme des modules.

La communication entre les widgets de l'interface et l'appli est très facile à gérer.

Si tu n'as jamais utilisé Qt, je te montrerai, c'est simple.

vincent

Dernière modification par VinsS (Le 08/05/2010, à 14:11)


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#52 Le 14/05/2010, à 19:39

peterp@n

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Salut salut,

Voilà mon script en PyQt pour calculer la neige selon les EC1.

Neige EC1 PyQT.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Created: 16/05/2010 15:40:32
#      by: peterp@n
#
# Ce script permet de calculer la charge de neige sur une toiture selon les normes de calculs des Eurcodes 1-1-3
# N'est valable qu'en France
#
# Nécessite Python 2.6, PyQt4

import os
from xml.dom import minidom

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    c_folder = os.getcwdu()
    f_datas = os.path.join(c_folder, "zone_neige.xml")
    sk = 0
    altitude = 0
    unit_surf = u" kN/m²"

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(694, 769)
        font = QtGui.QFont()
        font.setFamily("FreeSans")
        MainWindow.setFont(font)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.verticalLayout_1 = QtGui.QVBoxLayout()
        self.verticalLayout_1.setObjectName("verticalLayout_1")
        self.main_title = QtGui.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setWeight(75)
        font.setBold(True)
        self.main_title.setFont(font)
        self.main_title.setObjectName("main_title")
        self.verticalLayout_1.addWidget(self.main_title)
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.label_name_project = QtGui.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.label_name_project.setFont(font)
        self.label_name_project.setObjectName("label_name_project")
        self.gridLayout.addWidget(self.label_name_project, 0, 0, 1, 1)
        self.lineEdit_name_project = QtGui.QLineEdit(self.centralwidget)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lineEdit_name_project.sizePolicy().hasHeightForWidth())
        self.lineEdit_name_project.setSizePolicy(sizePolicy)
        self.lineEdit_name_project.setMaximumSize(QtCore.QSize(250, 26))
        self.lineEdit_name_project.setObjectName("lineEdit_name_project")
        self.gridLayout.addWidget(self.lineEdit_name_project, 0, 1, 1, 1)
        self.verticalLayout_1.addLayout(self.gridLayout)
        self.verticalLayout.addLayout(self.verticalLayout_1)
        self.verticalLayout_2 = QtGui.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.title_geography = QtGui.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.title_geography.setFont(font)
        self.title_geography.setObjectName("title_geography")
        self.verticalLayout_2.addWidget(self.title_geography)
        self.gridLayout_2 = QtGui.QGridLayout()
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label_snow_zone = QtGui.QLabel(self.centralwidget)
        self.label_snow_zone.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_snow_zone.setObjectName("label_snow_zone")
        self.gridLayout_2.addWidget(self.label_snow_zone, 0, 0, 1, 1)
        self.comboBox_snow_zone = QtGui.QComboBox(self.centralwidget)
        self.comboBox_snow_zone.setObjectName("comboBox_snow_zone")
        self.gridLayout_2.addWidget(self.comboBox_snow_zone, 0, 1, 1, 1)
        self.label_altitude = QtGui.QLabel(self.centralwidget)
        self.label_altitude.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_altitude.setObjectName("label_altitude")
        self.gridLayout_2.addWidget(self.label_altitude, 1, 0, 1, 1)
        self.spinBox_altitude = QtGui.QSpinBox(self.centralwidget)
        self.spinBox_altitude.setSuffix(" m")
        self.spinBox_altitude.setMaximum(2000)
        self.spinBox_altitude.setSingleStep(100)
        self.spinBox_altitude.setObjectName("spinBox_altitude")
        self.gridLayout_2.addWidget(self.spinBox_altitude, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.gridLayout_2)
        self.title_valeurs_k = QtGui.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.title_valeurs_k.setFont(font)
        self.title_valeurs_k.setObjectName("title_valeurs_k")
        self.verticalLayout_2.addWidget(self.title_valeurs_k)
        self.gridLayout_3 = QtGui.QGridLayout()
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.label_sk200 = QtGui.QLabel(self.centralwidget)
        self.label_sk200.setText("Sk200 = ")
        self.label_sk200.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_sk200.setObjectName("label_sk200")
        self.gridLayout_3.addWidget(self.label_sk200, 0, 0, 1, 1)
        self.label_sad = QtGui.QLabel(self.centralwidget)
        self.label_sad.setText("SAd = ")
        self.label_sad.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_sad.setObjectName("label_sad")
        self.gridLayout_3.addWidget(self.label_sad, 1, 0, 1, 1)
        self.frame_1 = QtGui.QFrame(self.centralwidget)
        self.frame_1.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_1.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_1.setObjectName("frame_1")
        self.label_rslt_sk200 = QtGui.QLabel(self.frame_1)
        self.label_rslt_sk200.setGeometry(QtCore.QRect(0, 0, 221, 16))
        self.label_rslt_sk200.setObjectName("label_rslt_sk200")
        self.gridLayout_3.addWidget(self.frame_1, 0, 1, 1, 1)
        self.frame_2 = QtGui.QFrame(self.centralwidget)
        self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.label_rslt_sad = QtGui.QLabel(self.frame_2)
        self.label_rslt_sad.setGeometry(QtCore.QRect(0, 0, 221, 16))
        self.label_rslt_sad.setObjectName("label_rslt_sad")
        self.gridLayout_3.addWidget(self.frame_2, 1, 1, 1, 1)
        self.pushButton_sk = QtGui.QPushButton(self.centralwidget)
        self.pushButton_sk.setText("Sk = ")
        self.pushButton_sk.setObjectName("pushButton_sk")
        self.gridLayout_3.addWidget(self.pushButton_sk, 2, 0, 1, 1)
        self.frame_3 = QtGui.QFrame(self.centralwidget)
        self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_3.setObjectName("frame_3")
        self.label_rslt_sk = QtGui.QLabel(self.frame_3)
        self.label_rslt_sk.setGeometry(QtCore.QRect(0, 4, 81, 21))
        self.label_rslt_sk.setObjectName("label_rslt_sk")
        self.gridLayout_3.addWidget(self.frame_3, 2, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.gridLayout_3)
        self.title_coefficient = QtGui.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.title_coefficient.setFont(font)
        self.title_coefficient.setObjectName("title_coefficient")
        self.verticalLayout_2.addWidget(self.title_coefficient)
        self.gridLayout_4 = QtGui.QGridLayout()
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.label_coef_expo = QtGui.QLabel(self.centralwidget)
        self.label_coef_expo.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_coef_expo.setObjectName("label_coef_expo")
        self.gridLayout_4.addWidget(self.label_coef_expo, 0, 0, 1, 1)
        self.doubleSpinBox_coef_expo = QtGui.QDoubleSpinBox(self.centralwidget)
        self.doubleSpinBox_coef_expo.setMinimum(1.0)
        self.doubleSpinBox_coef_expo.setMaximum(1.25)
        self.doubleSpinBox_coef_expo.setSingleStep(0.25)
        self.doubleSpinBox_coef_expo.setObjectName("doubleSpinBox_coef_expo")
        self.gridLayout_4.addWidget(self.doubleSpinBox_coef_expo, 0, 1, 1, 1)
        self.label_coef_thermik = QtGui.QLabel(self.centralwidget)
        self.label_coef_thermik.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_coef_thermik.setObjectName("label_coef_thermik")
        self.gridLayout_4.addWidget(self.label_coef_thermik, 1, 0, 1, 1)
        self.doubleSpinBox_coef_thermik = QtGui.QDoubleSpinBox(self.centralwidget)
        self.doubleSpinBox_coef_thermik.setMinimum(1.0)
        self.doubleSpinBox_coef_thermik.setMaximum(3.0)
        self.doubleSpinBox_coef_thermik.setObjectName("doubleSpinBox_coef_thermik")
        self.gridLayout_4.addWidget(self.doubleSpinBox_coef_thermik, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.gridLayout_4)
        self.title_geometry = QtGui.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.title_geometry.setFont(font)
        self.title_geometry.setObjectName("title_geometry")
        self.verticalLayout_2.addWidget(self.title_geometry)
        self.gridLayout_5 = QtGui.QGridLayout()
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.doubleSpinBox_pente_2 = QtGui.QDoubleSpinBox(self.centralwidget)
        self.doubleSpinBox_pente_2.setEnabled(False)
        self.doubleSpinBox_pente_2.setDecimals(1)
        self.doubleSpinBox_pente_2.setMaximum(90.0)
        self.doubleSpinBox_pente_2.setObjectName("doubleSpinBox_pente_2")
        self.gridLayout_5.addWidget(self.doubleSpinBox_pente_2, 2, 2, 1, 1)
        self.doubleSpinBox_pente_1 = QtGui.QDoubleSpinBox(self.centralwidget)
        self.doubleSpinBox_pente_1.setEnabled(False)
        self.doubleSpinBox_pente_1.setDecimals(1)
        self.doubleSpinBox_pente_1.setMaximum(90.0)
        self.doubleSpinBox_pente_1.setObjectName("doubleSpinBox_pente_1")
        self.gridLayout_5.addWidget(self.doubleSpinBox_pente_1, 2, 1, 1, 1)
        self.label_versant_2 = QtGui.QLabel(self.centralwidget)
        self.label_versant_2.setEnabled(False)
        self.label_versant_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_versant_2.setObjectName("label_versant_2")
        self.gridLayout_5.addWidget(self.label_versant_2, 1, 2, 1, 1)
        self.label_versant = QtGui.QLabel(self.centralwidget)
        self.label_versant.setAlignment(QtCore.Qt.AlignCenter)
        self.label_versant.setObjectName("label_versant")
        self.gridLayout_5.addWidget(self.label_versant, 1, 0, 1, 1)
        self.label_pente = QtGui.QLabel(self.centralwidget)
        self.label_pente.setAlignment(QtCore.Qt.AlignCenter)
        self.label_pente.setObjectName("label_pente")
        self.gridLayout_5.addWidget(self.label_pente, 2, 0, 1, 1)
        self.label_versant_1 = QtGui.QLabel(self.centralwidget)
        self.label_versant_1.setEnabled(False)
        self.label_versant_1.setAlignment(QtCore.Qt.AlignCenter)
        self.label_versant_1.setObjectName("label_versant_1")
        self.gridLayout_5.addWidget(self.label_versant_1, 1, 1, 1, 1)
        self.comboBox_type_toiture = QtGui.QComboBox(self.centralwidget)
        self.comboBox_type_toiture.setObjectName("comboBox_type_toiture")
        self.comboBox_type_toiture.addItem("")
        self.comboBox_type_toiture.addItem("")
        self.comboBox_type_toiture.addItem("")
        self.gridLayout_5.addWidget(self.comboBox_type_toiture, 0, 0, 1, 1)
        self.checkBox_2versants = QtGui.QCheckBox(self.centralwidget)
        self.checkBox_2versants.setObjectName("checkBox_2versants")
        self.gridLayout_5.addWidget(self.checkBox_2versants, 0, 2, 1, 1)
        self.label_dispositif_retenu = QtGui.QLabel(self.centralwidget)
        self.label_dispositif_retenu.setAlignment(QtCore.Qt.AlignCenter)
        self.label_dispositif_retenu.setObjectName("label_dispositif_retenu")
        self.gridLayout_5.addWidget(self.label_dispositif_retenu, 3, 0, 1, 1)
        self.checkBox_retenu_1 = QtGui.QCheckBox(self.centralwidget)
        self.checkBox_retenu_1.setEnabled(False)
        self.checkBox_retenu_1.setObjectName("checkBox_retenu_1")
        self.gridLayout_5.addWidget(self.checkBox_retenu_1, 3, 1, 1, 1)
        self.checkBox_retenu_2 = QtGui.QCheckBox(self.centralwidget)
        self.checkBox_retenu_2.setEnabled(False)
        self.checkBox_retenu_2.setObjectName("checkBox_retenu_2")
        self.gridLayout_5.addWidget(self.checkBox_retenu_2, 3, 2, 1, 1)
        self.label_zone_faible_pente = QtGui.QLabel(self.centralwidget)
        self.label_zone_faible_pente.setEnabled(False)
        self.label_zone_faible_pente.setAlignment(QtCore.Qt.AlignCenter)
        self.label_zone_faible_pente.setObjectName("label_zone_faible_pente")
        self.gridLayout_5.addWidget(self.label_zone_faible_pente, 4, 0, 1, 1)
        self.label_rslt_finaux = QtGui.QLabel(self.centralwidget)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_rslt_finaux.sizePolicy().hasHeightForWidth())
        self.label_rslt_finaux.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setWeight(75)
        font.setBold(True)
        self.label_rslt_finaux.setFont(font)
        self.label_rslt_finaux.setObjectName("label_rslt_finaux")
        self.gridLayout_5.addWidget(self.label_rslt_finaux, 5, 0, 1, 3)
        self.label_coef_forme = QtGui.QLabel(self.centralwidget)
        self.label_coef_forme.setObjectName("label_coef_forme")
        self.gridLayout_5.addWidget(self.label_coef_forme, 6, 0, 1, 1)
        self.frame_40 = QtGui.QFrame(self.centralwidget)
        self.frame_40.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_40.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_40.setObjectName("frame_40")
        self.label_mu_1 = QtGui.QLabel(self.frame_40)
        self.label_mu_1.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_mu_1.setObjectName("label_mu_1")
        self.gridLayout_5.addWidget(self.frame_40, 6, 1, 1, 1)
        self.frame_41 = QtGui.QFrame(self.centralwidget)
        self.frame_41.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_41.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_41.setObjectName("frame_41")
        self.label_mu_2 = QtGui.QLabel(self.frame_41)
        self.label_mu_2.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_mu_2.setObjectName("label_mu_2")
        self.gridLayout_5.addWidget(self.frame_41, 6, 2, 1, 1)
        self.label_rslt_si = QtGui.QLabel(self.centralwidget)
        self.label_rslt_si.setObjectName("label_rslt_si")
        self.gridLayout_5.addWidget(self.label_rslt_si, 8, 0, 1, 1)
        self.frame_60 = QtGui.QFrame(self.centralwidget)
        self.frame_60.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_60.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_60.setObjectName("frame_60")
        self.label_rslt_s1 = QtGui.QLabel(self.frame_60)
        self.label_rslt_s1.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_s1.setObjectName("label_rslt_s1")
        self.gridLayout_5.addWidget(self.frame_60, 8, 1, 1, 1)
        self.frame_61 = QtGui.QFrame(self.centralwidget)
        self.frame_61.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_61.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_61.setObjectName("frame_61")
        self.label_rslt_s2 = QtGui.QLabel(self.frame_61)
        self.label_rslt_s2.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_s2.setObjectName("label_rslt_s2")
        self.gridLayout_5.addWidget(self.frame_61, 8, 2, 1, 1)
        self.label_rslt_sadi = QtGui.QLabel(self.centralwidget)
        self.label_rslt_sadi.setObjectName("label_rslt_sadi")
        self.gridLayout_5.addWidget(self.label_rslt_sadi, 10, 0, 1, 1)
        self.frame_80 = QtGui.QFrame(self.centralwidget)
        self.frame_80.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_80.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_80.setObjectName("frame_80")
        self.label_rslt_sad_1 = QtGui.QLabel(self.frame_80)
        self.label_rslt_sad_1.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_sad_1.setObjectName("label_rslt_sad_1")
        self.gridLayout_5.addWidget(self.frame_80, 10, 1, 1, 1)
        self.frame_81 = QtGui.QFrame(self.centralwidget)
        self.frame_81.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_81.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_81.setObjectName("frame_81")
        self.label_rslt_sad_2 = QtGui.QLabel(self.frame_81)
        self.label_rslt_sad_2.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_sad_2.setObjectName("label_rslt_sad_2")
        self.gridLayout_5.addWidget(self.frame_81, 10, 2, 1, 1)
        self.label_rslt_sw = QtGui.QLabel(self.centralwidget)
        self.label_rslt_sw.setObjectName("label_rslt_sw")
        self.gridLayout_5.addWidget(self.label_rslt_sw, 9, 0, 1, 1)
        self.frame_70 = QtGui.QFrame(self.centralwidget)
        self.frame_70.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_70.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_70.setObjectName("frame_70")
        self.label_rslt_sw_1 = QtGui.QLabel(self.frame_70)
        self.label_rslt_sw_1.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_sw_1.setObjectName("label_rslt_sw_1")
        self.gridLayout_5.addWidget(self.frame_70, 9, 1, 1, 1)
        self.frame_71 = QtGui.QFrame(self.centralwidget)
        self.frame_71.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_71.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_71.setObjectName("frame_71")
        self.label_rslt_sw_2 = QtGui.QLabel(self.frame_71)
        self.label_rslt_sw_2.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_sw_2.setObjectName("label_rslt_sw_2")
        self.gridLayout_5.addWidget(self.frame_71, 9, 2, 1, 1)
        self.label_rslt_sacc = QtGui.QLabel(self.centralwidget)
        self.label_rslt_sacc.setEnabled(False)
        self.label_rslt_sacc.setObjectName("label_rslt_sacc")
        self.gridLayout_5.addWidget(self.label_rslt_sacc, 7, 0, 1, 1)
        self.frame_50 = QtGui.QFrame(self.centralwidget)
        self.frame_50.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_50.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_50.setObjectName("frame_50")
        self.label_rslt_sacc_1 = QtGui.QLabel(self.frame_50)
        self.label_rslt_sacc_1.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_sacc_1.setObjectName("label_rslt_sacc_1")
        self.gridLayout_5.addWidget(self.frame_50, 7, 1, 1, 1)
        self.frame_51 = QtGui.QFrame(self.centralwidget)
        self.frame_51.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame_51.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_51.setObjectName("frame_51")
        self.label_rslt_sacc_2 = QtGui.QLabel(self.frame_51)
        self.label_rslt_sacc_2.setGeometry(QtCore.QRect(6, 0, 61, 16))
        self.label_rslt_sacc_2.setObjectName("label_rslt_sacc_2")
        self.gridLayout_5.addWidget(self.frame_51, 7, 2, 1, 1)
        self.verticalLayout_2.addLayout(self.gridLayout_5)
        self.verticalLayout.addLayout(self.verticalLayout_2)
        self.gridLayout_6 = QtGui.QGridLayout()
        self.gridLayout_6.setObjectName("gridLayout_6")
        self.pushButton_reset = QtGui.QPushButton(self.centralwidget)
        self.pushButton_reset.setObjectName("pushButton_reset")
        self.gridLayout_6.addWidget(self.pushButton_reset, 0, 0, 1, 1)
        self.pushButton_exit = QtGui.QPushButton(self.centralwidget)
        self.pushButton_exit.setObjectName("pushButton_exit")
        self.gridLayout_6.addWidget(self.pushButton_exit, 0, 2, 1, 1)
        self.pushButton_calcul = QtGui.QPushButton(self.centralwidget)
        self.pushButton_calcul.setObjectName("pushButton_calcul")
        self.gridLayout_6.addWidget(self.pushButton_calcul, 0, 1, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout_6)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 694, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.cal=Calcul()
        self.i_dat = DataImport(self.f_datas)
        zone_neige = ["Zone de neige ..."]
        for p in self.i_dat.listneige:
            zone_neige.append(p)
        self.comboBox_snow_zone.addItems(zone_neige)
      
        QtCore.QObject.connect(self.lineEdit_name_project, QtCore.SIGNAL                                
                                ("editingFinished()"), self.set_nameProject)
        QtCore.QObject.connect(self.comboBox_snow_zone, QtCore.SIGNAL
                                ("activated(int)"), self.set_profil)
        QtCore.QObject.connect(self.spinBox_altitude, QtCore.SIGNAL
                                ("valueChanged(int)"), self.change_val_altitude)
        QtCore.QObject.connect(self.pushButton_sk, QtCore.SIGNAL
                                ("clicked()"), self.sk_value)
        QtCore.QObject.connect(self.comboBox_type_toiture, QtCore.SIGNAL
                                ("activated(int)"), self.set_versant_1)
        QtCore.QObject.connect(self.checkBox_2versants, QtCore.SIGNAL
                                ("stateChanged(int)"), self.set_versant_2)
        QtCore.QObject.connect(self.doubleSpinBox_pente_1, QtCore.SIGNAL
                                ("valueChanged(int)"), self.change_val) 
        QtCore.QObject.connect(self.doubleSpinBox_pente_2, QtCore.SIGNAL
                                ("valueChanged(int)"), self.change_val)
        QtCore.QObject.connect(self.pushButton_reset, QtCore.SIGNAL
                                ("clicked()"), self.reset)
        QtCore.QObject.connect(self.pushButton_calcul, QtCore.SIGNAL
                                ("clicked()"), self.cal.calcul)
        QtCore.QObject.connect(self.pushButton_exit, QtCore.SIGNAL
                                ("clicked()"), self.quit_application)


    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Charge de neige EC1-1-3", None, QtGui.QApplication.UnicodeUTF8))
        self.main_title.setText(QtGui.QApplication.translate("MainWindow", "Calcul de charge de neige sur une toiture", None, QtGui.QApplication.UnicodeUTF8))
        self.label_name_project.setText(QtGui.QApplication.translate("MainWindow", "Nom du projet : ", None, QtGui.QApplication.UnicodeUTF8))
        self.title_geography.setText(QtGui.QApplication.translate("MainWindow", "Situation géographique du bâtiment", None, QtGui.QApplication.UnicodeUTF8))
        self.label_snow_zone.setToolTip(QtGui.QApplication.translate("MainWindow", "La carte des zones de neige en France est fournit dans l\'annexe nationale des Eurocodes 1 - 1 - 3.\n"
"Voir aussi dans le dossier media où est présent le script.", None, QtGui.QApplication.UnicodeUTF8))
        self.label_snow_zone.setText(QtGui.QApplication.translate("MainWindow", "Zone de neige : ", None, QtGui.QApplication.UnicodeUTF8))
        self.label_altitude.setText(QtGui.QApplication.translate("MainWindow", "Altitude, A : ", None, QtGui.QApplication.UnicodeUTF8))
        self.title_valeurs_k.setText(QtGui.QApplication.translate("MainWindow", "Valeurs caractéristiques", None, QtGui.QApplication.UnicodeUTF8))
        self.label_sk200.setToolTip(QtGui.QApplication.translate("MainWindow", "Valeur caractéristique de la charge de neige sur le sol à une altitude inférieure à 200 m.", None, QtGui.QApplication.UnicodeUTF8))
        self.label_sad.setToolTip(QtGui.QApplication.translate("MainWindow", "Valeur de calcul de la charge de neige exceptionnelle de neige sur le sol.\n"
"SAd est indépendante de l\'altitude.", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_sk.setToolTip(QtGui.QApplication.translate("MainWindow", "Sk est la valeur caractéristique de charge de neige à l\'altitude A.", None, QtGui.QApplication.UnicodeUTF8))
        self.title_coefficient.setText(QtGui.QApplication.translate("MainWindow", "Coefficients", None, QtGui.QApplication.UnicodeUTF8))
        self.label_coef_expo.setToolTip(QtGui.QApplication.translate("MainWindow", "Le coefficient d\'exposition (Ce) permet de prendre en compte les conditions d\'abris de la toiture.\n"
"Si la toiture est protégée du vent par des bâtiments plus élévés ou par la présence de grands arbres à proximité, on prendra Ce=1,25.\n"
"On prendra Ce=1,0 dans tout les autres cas.", None, QtGui.QApplication.UnicodeUTF8))
        self.label_coef_expo.setText(QtGui.QApplication.translate("MainWindow", "Coefficient d\'exposition, Ce : ", None, QtGui.QApplication.UnicodeUTF8))
        self.label_coef_thermik.setToolTip(QtGui.QApplication.translate("MainWindow", "Le coefficient thermique (Ct) permet de prendre en compte l\'influence du flux de chaleur\n"
"au travers de la toiture sur la fonte de la neige.\n"
"Les bâtiments normalement chauffés étant systématiquement isolés,\n"
" il convient de prendre Ct=1,0 sauf spécifications particulières dûment justifiées du projet individuel.", None, QtGui.QApplication.UnicodeUTF8))
        self.label_coef_thermik.setText(QtGui.QApplication.translate("MainWindow", "Coefficient thermique, Ct : ", None, QtGui.QApplication.UnicodeUTF8))
        self.title_geometry.setText(QtGui.QApplication.translate("MainWindow", "Géométrie de la toiture", None, QtGui.QApplication.UnicodeUTF8))
        self.doubleSpinBox_pente_2.setSuffix(QtGui.QApplication.translate("MainWindow", " °", None, QtGui.QApplication.UnicodeUTF8))
        self.doubleSpinBox_pente_1.setSuffix(QtGui.QApplication.translate("MainWindow", " °", None, QtGui.QApplication.UnicodeUTF8))
        self.label_versant_2.setText(QtGui.QApplication.translate("MainWindow", "Versant 2", None, QtGui.QApplication.UnicodeUTF8))
        self.label_versant.setText(QtGui.QApplication.translate("MainWindow", "Toiture", None, QtGui.QApplication.UnicodeUTF8))
        self.label_pente.setToolTip(QtGui.QApplication.translate("MainWindow", "Pente du versant étudié en degrés.", None, QtGui.QApplication.UnicodeUTF8))
        self.label_pente.setText(QtGui.QApplication.translate("MainWindow", "Pente, αi", None, QtGui.QApplication.UnicodeUTF8))
        self.label_versant_1.setText(QtGui.QApplication.translate("MainWindow", "Versant 1", None, QtGui.QApplication.UnicodeUTF8))
        self.comboBox_type_toiture.setToolTip(QtGui.QApplication.translate("MainWindow", "Choisissez le type de toiture : \n"
"Toiture simple pour des toiture à 1 ou 2 versants.\n"
"Toiture multique pour des toiture de bâtiments industriels (shelter ...).", None, QtGui.QApplication.UnicodeUTF8))
        self.comboBox_type_toiture.setItemText(0, QtGui.QApplication.translate("MainWindow", "Type de toiture ...", None, QtGui.QApplication.UnicodeUTF8))
        self.comboBox_type_toiture.setItemText(1, QtGui.QApplication.translate("MainWindow", "Toiture simple", None, QtGui.QApplication.UnicodeUTF8))
        self.comboBox_type_toiture.setItemText(2, QtGui.QApplication.translate("MainWindow", "Toiture multiple", None, QtGui.QApplication.UnicodeUTF8))
        self.checkBox_2versants.setText(QtGui.QApplication.translate("MainWindow", "2eme versant ?", None, QtGui.QApplication.UnicodeUTF8))
        self.label_dispositif_retenu.setToolTip(QtGui.QApplication.translate("MainWindow", "Cocher la case si il y a un dispositif de retenu de neige, barre à neige, acrotère, mur ...", None, QtGui.QApplication.UnicodeUTF8))
        self.label_dispositif_retenu.setText(QtGui.QApplication.translate("MainWindow", "Dispositif de retenue de neige ?", None, QtGui.QApplication.UnicodeUTF8))
        self.checkBox_retenu_1.setText(QtGui.QApplication.translate("MainWindow", "Présence", None, QtGui.QApplication.UnicodeUTF8))
        self.checkBox_retenu_2.setText(QtGui.QApplication.translate("MainWindow", "Présence", None, QtGui.QApplication.UnicodeUTF8))
        self.label_zone_faible_pente.setText(QtGui.QApplication.translate("MainWindow", "Zone de faible pente (Noue)", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_finaux.setText(QtGui.QApplication.translate("MainWindow", "Résultats", None, QtGui.QApplication.UnicodeUTF8))
        self.label_coef_forme.setToolTip(QtGui.QApplication.translate("MainWindow", "Le coefficient de forme dépend : \n"
" - du type de toiture selectionné ;\n"
" - de la pente du versant ;\n"
" - et de la présence d\'un dispositif de retenue de neige.", None, QtGui.QApplication.UnicodeUTF8))
        self.label_coef_forme.setText(QtGui.QApplication.translate("MainWindow", "Coefficient de forme : μi(αi)", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_si.setToolTip(QtGui.QApplication.translate("MainWindow", "Si est la charge de neige horizontal à appliqué sur une toiture en situation normale.\n"
"Si =  μi(αi) * Ce * Ct * Sk ( + Sacc,i)", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_si.setText(QtGui.QApplication.translate("MainWindow", "Charge de neige : Si", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_sadi.setToolTip(QtGui.QApplication.translate("MainWindow", "SAd est la charge de neige en situation accidentelle,\n"
"elle est utilisée uniquement avec des combinaisons de situation accidentelle. ", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_sadi.setText(QtGui.QApplication.translate("MainWindow", "Charge exceptionnelle : SAd,i", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_sw.setToolTip(QtGui.QApplication.translate("MainWindow", "Sw est la cahrge de neige compatible avec le vent, elle s\'applique sur le versant face au vent.", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_sw.setText(QtGui.QApplication.translate("MainWindow", "Charge compatible avec le vent : Sw,i", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_sacc.setToolTip(QtGui.QApplication.translate("MainWindow", "Sacc est une charge de neige supplémentaire appliquée sur une zone de faible pente\n"
"et sur 2 mètre de rampant de part et d\'autres de la zone de faible pente.\n"
"Cette charge s\'ajoute à la cahrge Si. ", None, QtGui.QApplication.UnicodeUTF8))
        self.label_rslt_sacc.setText(QtGui.QApplication.translate("MainWindow", "Charge supplémentaire : Sacc,i", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_reset.setText(QtGui.QApplication.translate("MainWindow", "Reset", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_exit.setText(QtGui.QApplication.translate("MainWindow", "Quitter", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_calcul.setText(QtGui.QApplication.translate("MainWindow", "Calculer", None, QtGui.QApplication.UnicodeUTF8))

    def set_nameProject(self):
        name_project = self.lineEdit_name_project.text()
        window_title = "Charge de neige EC1-1-3"
        if name_project:
            MainWindow.setWindowTitle(window_title + " | Projet : " + name_project)
        else :
            MainWindow.setWindowTitle(window_title)

    def set_profil(self, idx):
        if idx:
            self.sk200 = eval(self.i_dat.get_value(idx, "sk200"))
            self.label_rslt_sk200.setText(str(self.sk200) + self.unit_surf)
            self.sad = eval(self.i_dat.get_value(idx, "sad"))
            self.label_rslt_sad.setText(str(self.sad) + self.unit_surf)
            self.zoneneige = self.comboBox_snow_zone.currentText()
            self.zoneneigeIndex=self.comboBox_snow_zone.currentIndex()
            self.pushButton_sk.setEnabled(True)
            self.label_rslt_sk.setText("")
            self.sk = 0
        else:
            self.pushButton_sk.setEnabled(False)
            self.label_rslt_sk200.setText("")
            self.label_rslt_sad.setText("")
            self.label_rslt_sk.setText("")
            self.sk200 = 0
            self.sad = 0
            self.sk = 0

    def change_val(self, v):
        #self.altitude = self.spinBox_altitude.value()
        self.pente_1 = self.doubleSpinBox_pente_1.value()
        self.pente_2 = self.doubleSpinBox_pente_2.value()

    def change_val_altitude(self, v):
        self.label_rslt_sk.setText("")
        self.sk = 0
        self.altitude = self.spinBox_altitude.value()
    

    def sk_value(self):
        if self.altitude > 200 :
            if self.zoneneigeIndex == 8:
                if self.altitude < 500:
                    sk = self.sk200 + 0.15 * ((self.altitude-200) / 100)
                    self.sk = sk
                elif altitude > 1000:
                    sk = self.sk200 + 2.20 + 0.70 * ((self.altitude-1000) / 100)
                    self.sk = sk
                else :
                    sk = self.sk200 + 0.45 + 0.35 * ((self.altitude-500) / 100)
                    self.sk = sk
            else :
                if self.altitude < 500:
                    sk = self.sk200 + 0.10 * ((self.altitude-200) / 100)
                    self.sk = sk
                elif self.altitude > 1000:
                    sk = self.sk200 + 1.05 + 0.35 * ((self.altitude-1000) / 100)
                    self.sk = sk
                else :
                    sk = self.sk200 + 0.1 + 0.15 * ((self.altitude-500) / 100)
                    self.sk = sk
        else :
            self.sk = self.sk200
        #print self.sk
        self.label_rslt_sk.setText(str(self.sk) + self.unit_surf)

    def set_versant_1(self):
        combobox_toit_Index = self.comboBox_type_toiture.currentIndex()
        if combobox_toit_Index == 1:
            self.label_versant_1.setEnabled(True)
            self.doubleSpinBox_pente_1.setEnabled(True)
            self.checkBox_retenu_1.setEnabled(True)
            self.checkBox_2versants.setEnabled(True)
            self.pushButton_calcul.setEnabled(True)
        else:
            self.label_versant_1.setEnabled(False)
            self.doubleSpinBox_pente_1.setEnabled(False)
            self.checkBox_retenu_1.setEnabled(False)
            self.checkBox_2versants.setCheckState(False)
            self.checkBox_2versants.setEnabled(False)
            self.pushButton_calcul.setEnabled(False)

    def set_versant_2(self):
        if self.checkBox_2versants.isChecked():
            self.label_versant_2.setEnabled(True)
            self.doubleSpinBox_pente_2.setEnabled(True)
            self.checkBox_retenu_2.setEnabled(True)            
        else:
            self.label_versant_2.setEnabled(False)
            self.doubleSpinBox_pente_2.setEnabled(False)
            self.checkBox_retenu_2.setEnabled(False)          

    def quit_application(self):
         sys.exit()

    def reset(self):
        self.comboBox_snow_zone.setCurrentIndex(0)
        self.set_profil(0)
        self.spinBox_altitude.setValue(0)
        self.doubleSpinBox_coef_expo.setValue(1)
        self.doubleSpinBox_coef_thermik.setValue(1)
        self.comboBox_type_toiture.setCurrentIndex(0)
        self.set_versant_1()
        self.doubleSpinBox_pente_1.setValue(0)
        self.doubleSpinBox_pente_2.setValue(0)
        self.checkBox_retenu_1.setCheckState(False)
        self.checkBox_retenu_2.setCheckState(False)
        self.label_mu_1.setText("")
        self.mu_1 = 0
        self.label_mu_2.setText("")
        self.mu_2 = 0
        self.label_rslt_s1.setText("")
        self.s1 = 0
        self.label_rslt_s2.setText("")
        self.s2 = 0
        self.label_rslt_sw_1.setText("")
        self.sw_1 = 0
        self.label_rslt_sw_2.setText("")
        self.sw_2 = 0
        self.label_rslt_sad_1.setText("")
        self.sad_1 = 0
        self.label_rslt_sad_2.setText("")
        self.sad_2 = 0

class DataImport(object):

    def __init__(self, datas):
        xmldoc = minidom.parse(datas)
        self.reflist = xmldoc.getElementsByTagName('profil')
        self.listneige = [ligneX.attributes["id"].value for ligneX in self.reflist]

    def get_value(self, idx, d) :
        ligneX = self.reflist[idx - 1]
        valeur_symbole = ligneX.attributes[d]
        valeur_symbole = valeur_symbole.value
        valeur_symbole = valeur_symbole.encode('utf-8')
        return valeur_symbole

class Calcul(object):
    def __init__(self):
        pass

    def mui_simple_toit_calcul(self, pente, retenu) : 
        if retenu == "true" or pente <= 30 :
            self.mui = 0.8
            return self.mui
        else :
            if pente >= 60 :
                self.mui = 0
                return self.mui
            else :
                self.mui=(60 - pente) * 0.8 / 30
                return self.mui

    def set_mui(self):
        if ui.checkBox_retenu_1.isChecked():
            retenu_1 = "true"
            pente_1 = ui.doubleSpinBox_pente_1.value()
            self.mu_1 = self.mui_simple_toit_calcul(pente_1, retenu_1)
            ui.label_mu_1.setText(str( "%.2f" % self.mu_1))
        else :
            retenu_1 = "false"
            pente_1 = ui.doubleSpinBox_pente_1.value()
            self.mu_1 = self.mui_simple_toit_calcul(pente_1, retenu_1)
            ui.label_mu_1.setText(str("%.2f" % self.mu_1))
        if ui.checkBox_2versants.isChecked():
            if ui.checkBox_retenu_2.isChecked():
                retenu_2 = "true"
                pente_2 = ui.doubleSpinBox_pente_2.value()
                self.mu_2 = self.mui_simple_toit_calcul(pente_2, retenu_2)
                ui.label_mu_2.setText(str("%.2f" % self.mu_2))
            else :
                retenu_2 = "false"
                pente_2 = ui.doubleSpinBox_pente_2.value()
                self.mu_2 = self.mui_simple_toit_calcul(pente_2, retenu_2)
                ui.label_mu_2.setText(str("%.2f" % self.mu_2))

    def si_calcul(self, mui):
        ce = ui.doubleSpinBox_coef_expo.value()
        ct = ui.doubleSpinBox_coef_thermik.value()
        sk = ui.sk 
        self.si = mui * ce * ct * sk
        return self.si
          
    def set_si(self):
        if ui.sk:
            self.s1 = self.si_calcul(self.mu_1)
            ui.label_rslt_s1.setText(str("%.2f" % self.s1) + ui.unit_surf)
            ui.statusbar.clearMessage()
            if ui.checkBox_2versants.isChecked():
                self.s2 = self.si_calcul(self.mu_2)
                ui.label_rslt_s2.setText(str("%.2f" % self.s2) + ui.unit_surf)
        else :
            ui.statusbar.showMessage(u"Données insufisantes : Zone de neige ou Sk non définis.")
            ui.label_rslt_s1.setText("")
            ui.label_rslt_s2.setText("")

    def swi_calcul(self, mui):
        ce = ui.doubleSpinBox_coef_expo.value()
        ct = ui.doubleSpinBox_coef_thermik.value()
        sk = ui.sk 
        self.swi = (mui * 0.5) * ce * ct * sk
        return self.swi    

    def set_swi(self):
        if ui.sk:
            self.sw_1 = self.swi_calcul(self.mu_1)
            ui.label_rslt_sw_1.setText(str("%.2f" % self.sw_1) + ui.unit_surf)
            ui.statusbar.clearMessage()
            if ui.checkBox_2versants.isChecked():
                self.sw_2 = self.swi_calcul(self.mu_2)
                ui.label_rslt_sw_2.setText(str("%.2f" % self.sw_2) + ui.unit_surf)
        else :
            ui.statusbar.showMessage(u"Données insufisantes : Zone de neige ou Sk non définis.")
            ui.label_rslt_sw_1.setText("")
            ui.label_rslt_sw_2.setText("")

    def sadi_calcul(self, mui):
        ce = ui.doubleSpinBox_coef_expo.value()
        ct = ui.doubleSpinBox_coef_thermik.value()
        sad = ui.sad 
        self.sadi = mui * ce * ct * sad
        return self.sadi    

    def set_sadi(self):
        if ui.sk:
            if ui.sad:
                self.sad_1 = self.sadi_calcul(self.mu_1)
                ui.label_rslt_sad_1.setText(str("%.2f" % self.sad_1) + ui.unit_surf)
                ui.statusbar.clearMessage()
                if ui.checkBox_2versants.isChecked():
                    self.sad_2 = self.sadi_calcul(self.mu_2)
                    ui.label_rslt_sad_2.setText(str("%.2f" % self.sad_2) + ui.unit_surf)
            else :
                ui.statusbar.showMessage(u"Remarque : Cette zone n'est pas en situation de charge de neige exceptionnelle (Sad).")
                ui.label_rslt_sad_1.setText("")
                ui.label_rslt_sad_2.setText("")
        else :
            ui.statusbar.showMessage(u"Données insufisantes : Zone de neige ou Sk non définis.")
            ui.label_rslt_sad_1.setText("")
            ui.label_rslt_sad_2.setText("")

    def calcul(self) :
        self.set_mui()
        self.set_si()
        self.set_swi()
        self.set_sadi()


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

La base de données associée :
zone_neige.xml

<?xml version="1.0" ?>

<element_racine>

        <profil id="A1" sk200="0.45" sad="0"/>

        <profil id="A2" sk200="0.45" sad="1.00"/>

        <profil id="B1" sk200="0.55" sad="1.00"/>

        <profil id="B2" sk200="0.55" sad="1.35"/>

        <profil id="C1" sk200="0.65" sad="0"/>

        <profil id="C2" sk200="0.65" sad="1.35"/>

        <profil id="D" sk200="0.90" sad="1.80"/>

        <profil id="E" sk200="1.40" sad="0"/>

</element_racine>

Voilà, si vous avez des remarques, des améliorations à apporter ou des rapports de bugs, je suis tout ouïe !

P.S.: Merci VinsS !

Dernière modification par Peterpan12 (Le 16/05/2010, à 15:48)


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#53 Le 14/05/2010, à 23:13

VinsS

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Bonsoir,

J'ai testé, évidemment, ça prend forme, il faudrait joindre ceci au calcul d'ossature, pour conserver un ensemble qui progresse de fonctionnalités en fonctionnalités, même si ce sont des fichiers différents.

Par contre, c'est pas redimensionnable ...

Je dis ça au cas ou tu t'ennuyerais ce week-end. roll

Vincent


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#54 Le 16/05/2010, à 15:54

peterp@n

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Voilà j'ai mis à jour le script sur le post #52.

C'est redimensionnable et il y a encore plus de tooltips (informations quand la souris reste sur les labels).


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#55 Le 19/05/2010, à 22:13

peterp@n

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Le programme de calcul de neige à évolué, la carte des zones est accessible directement via la GUI.

Archive disponible ici : http://dl.free.fr/bzS5BIBBH

J'ai pas encore intégré le module de traction car il faut que je le modifie afin de recevoir le résultat de la charge de neige... Sacré chantier !


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#56 Le 26/05/2010, à 20:32

g_barthe

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Bonsoir,

J'ai créé un soft pour le génie climatique en libre. Et le fait de créer le même genre pour la RDM pourrait bien être une très bonne ouverture pour le logiciel libre.

Après si vous développez à plusieurs il faudrait que vous vous organisiez autour d'une forge (codingteam par ex) afin de bien mettre à plat vos idées, vos langages de prog (python, QT, wxpython, TK...) car là tout le monde y va de son langage c'est dommage.

Mais l'idée est bonne et cela ne peut qu'encourager le logiciel libre.

Bonne continuation. Je suivrais le développement du projet.

@ bientôt.


Mon forum perso sur le génie climatique http://le-genie-climatique.positifforum.com/
Le forum des travaux manuels : http://pausebroderie.fr/

Hors ligne

#57 Le 26/05/2010, à 21:49

peterp@n

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Salut g_barthe

Je télécharge ton soft pour voir ce que donne l'interface wxpython (je connais pas).
[edit]: au fait c'est quel paquet qu'il faut installer ?

Niveau langage on est plutôt bon, tous les programme dans ce post sont en python.

Le premier script que je présente est en Tk mais c'est parceque je ne connaissais que ça. Je me suis mis à PyQt grace à VinsS et j'adhère.

Le soft de ossatureLibre (pyOpenShelter) est très intéressant et très prometteur. Pour l'instant je développe quelque modules (charges permanentes, neiges, exploitation etc...) qui devrait pouvoir s'adapter à n'importe quel soft python.

Pour l'instant j'ai pas trop le temps d'organiser ça, mais vers mi-juin ça ira mieux.

Dernière modification par Peterpan12 (Le 26/05/2010, à 21:56)


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#58 Le 26/05/2010, à 22:30

g_barthe

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

j'ai fait un .exe pour les windosiens mais sinon tu as les sources et tu lances le script astugeclim.py

Je trouve wxpython sympa et plus facile que qt et plus complet que tk.

Après le plus dur est de faire une interface graphique simple. Mais la rdm peut peut etre se faire aussi en "console" pour certaines choses. C'est moins attractif mais assez efficace aussi.


Mon forum perso sur le génie climatique http://le-genie-climatique.positifforum.com/
Le forum des travaux manuels : http://pausebroderie.fr/

Hors ligne

#59 Le 26/05/2010, à 22:36

peterp@n

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Ben oui mais il me faut la lib python-wx pour faire fonctionner le script.
Or dans synaptic il y a plein de wx mais aucun qui se nomme juste python-wx. Donc je voulais savoir quel paquet faut il installer (que j'installe pas 5 lib pour rien).

Pour la rdm, ce qu'il se passe c'est qu'il existe déjà 2 softs,
- pyBar (en python avec interface gtk, qui fait de la rdm en plan et à qui il manque des modules de chargements et de vérifications de pièces)
- pyOpenShelter (qui se base sur code-aster et qui fait de la rdm tridimensionnelle et à qui il manque une interface graphique).

Donc je pense qu'il ne faut pas recréer un soft de rdm. Mais je ne sais pas encore comment faire communiquer pyBar et mes modules et pyOpenShelter va être réécrit...

Dernière modification par Peterpan12 (Le 26/05/2010, à 22:42)


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#60 Le 27/05/2010, à 22:49

g_barthe

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

il me semble qu'il s'agit de la python_wxgtk2.8-2.8.10.1-oubuntu1 sous lucid

Si tu veux mixer les 2 softs existants et que tu penses que pyBar est le plus abouti le mieux est de repartir de celui là mais cela t'oblige à développer en gtk pour le graphique.

A voir faut peser le pour le contre. As tu contacter l'équipe de dév de pyBar pour voir s'ils acceptaient de rajouter des fonctions à leur soft ?


Mon forum perso sur le génie climatique http://le-genie-climatique.positifforum.com/
Le forum des travaux manuels : http://pausebroderie.fr/

Hors ligne

#61 Le 07/07/2010, à 21:37

mondial974

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Salut à tous. il n'y a plus grand monde sur le forum. Ca sent les vacances.
bon voila il y a quelques années j'avais commencer un site internet concernant le calcul libre en génie civil. Je donne l'adresse si ca interesse certains :

http://pagesperso-orange.fr/ikba/ikba-reference.html

Bon il date un peu, mais comme les eurocodes devrait bientôt rentrer définitivement en application c'est sûrement le moment de relancer le projet.

En gros mon idée était de créer essentiellement des feuilles de tableur type opencalc gnumeric ou autre. Voir excel car c'est quand même  très répandu dans les entreprises (mais ca peut changer) pour des calculs bien spécifique.

Mais avant tout il faudrait écrire une bibliothèque de fonction qu'on pourrai utiliser ensuite à loisir dans le tableur qu'on souhaite. C'est que je sais pas trop comment faire, est qu'on peut ecrire des lib en C++ ou python par exemple et les utiliser ensuite dans le tableur souhaité? Je sais pas.

Sinon pybar est génial, simple dans pratique. Mais à mon avis si on veut pas créer une usine à gaz genre robot ou graitec il faut séparer la partie calcul de la partie vérification. De cette manière aussi on peut imprimer les tableurs en guise de note de calcul détaillé.

Pour conclure il y a plein de chose à voir et à mettre en place. J'attends vos commentaire.

PS : je suis ingénieur dans un bureau d'étude structure spécialisé en béton armé mais on fait aussi de la charpente métallique et bois.


Si vous voulez m'aider à créer un programme de calcul de béton armé sous linux contactez moi

Hors ligne

#62 Le 19/07/2010, à 20:39

mondial974

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Voila !!! Je viens de créer le projet "Eurocodes : Bibliothèques de fonctions" sur sourceforge. Faites un tour sur le site :https://sourceforge.net/projects/libeurocodes/.
En ce qui me concerne je me concentre sur l'eurocode 2 mais je vous invite à rallier le projet pour le compléter avec les autres eurocodes. Il y a pas mal de manière pour contribuer au projet, n'hésiter pas à me solliciter.
Pour le moment je vais écrire une bibliothèque de fonction en python, il sera ainsi plus facile pour les interfacer avec pybar.
Mais j'ai aussi trouver de la documentation pour créer une extension *.otx pour OpenCalc, voir cette adresse : http://www.biochemfusion.com/doc/Calc_addin_howto.html.

En gros en créer :
- des bibliothèquesen python,
- un fichier qui permet de faire le lien avec OpenCalc,
- un fichier xml de documentation des fonctions,
- plus quelques autres fichiers dont je ne saisis pas encore l'utilité,
- on zip le tout dans un fichiers *.otx

Ensuite :
- on double clic sur le fichier *.otx
- ce qui install le Add-In
- est on peut finalement utiliser tout les fonctions (avec toutes les explications nécessaire à leur fonctionnement) comme si elles faisaient partie d'OpenCalc.

J'attends vos commentaires.


Si vous voulez m'aider à créer un programme de calcul de béton armé sous linux contactez moi

Hors ligne

#63 Le 29/07/2010, à 21:56

mondial974

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Je viens de créer un blog sur les bibliothèques de fonctions que je suis en train d'écrire. J'y décris le projet sur cette page : http://libeurocodes.blogspot.com/2010/0 … codes.html. Si vous avez des commentaires, des idées, des éléments que vous souhaiteriez y voir intégré, n'hésiter pas à me contacter.


Si vous voulez m'aider à créer un programme de calcul de béton armé sous linux contactez moi

Hors ligne

#64 Le 19/11/2010, à 13:04

toinelom

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Salut,

Je suis artisan charpentier en train de développer une offre ossature bois. Je n'ai que très peu de compétences en informatique : je suis simple utilisateur, curieux, et averti sur certain sujets. J'aimerai en savoir plus, mais cela réclame un investissement en temps qui est hors de portée.
En revanche, je peux vous guider dans ce qui est utile ou non pour un artisan, puisque votre projet à l'origine était tourné vers les PME.
Où en êtes vous ?

A bientôt,

Hors ligne

#65 Le 19/11/2010, à 18:56

mondial974

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

toinelom a écrit :

Salut,

Je suis artisan charpentier en train de développer une offre ossature bois. Je n'ai que très peu de compétences en informatique : je suis simple utilisateur, curieux, et averti sur certain sujets. J'aimerai en savoir plus, mais cela réclame un investissement en temps qui est hors de portée.
En revanche, je peux vous guider dans ce qui est utile ou non pour un artisan, puisque votre projet à l'origine était tourné vers les PME.
Où en êtes vous ?

A bientôt,

Salut, effectivement ca peut être interessant de savoir ce que recherche un artisan comme outil de calcul. Ca peut nous aider à aller à l'essentiel.
Peux tu me faire une liste et j'essairai de voir ce qu'on peut faire.
Peux tu nous détail ton offre ossature bois ??
A+


Si vous voulez m'aider à créer un programme de calcul de béton armé sous linux contactez moi

Hors ligne

#66 Le 21/04/2011, à 20:45

betbatiment

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Bonjour, je viens créer un blog traitant du calcul de structure dans le domaine du bâtiment. J'espère qu'il vous sera utile.
L'adresse du blog est : www.bet-batiment.fr
Bonne lecture.

Hors ligne

#67 Le 15/12/2011, à 13:02

Hiram

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Bonjour,
Il existe un autre logiciel de calcul de structures (180 installations) qui se nomme Bar2010 (et Bar2012 à sortir). Il fait du 2D et du 3D.
La version Eurocodes est presque finalisée. On pourra consulter le site http://bar-edmi.com

Hors ligne

#68 Le 15/12/2011, à 13:16

peterp@n

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Salut,

C'est libre ce logiciel ? Et multi plateforme ?


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#69 Le 15/12/2011, à 15:01

Hiram

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Non, ce logiciel n'est pas libre et fonctionne uniquement sur Windows.
C'était simplement pour répondre au fait qu'il était indiqué au début du forum qu'il n'existait que 3 logiciels dans le commerce.
Les 180 sites installés montrent que ce n'est pas le cas. En fait, je suis l'auteur de Bar2010 et termine les EC0, 1, 5 et 8 (sismique) pour mettre à jour les clients.

Il sait faire tous les assemblages en automatique, créer l'épure de la structure (standard ou spéciale) et l'exporter dans Cadwork. A ce jour aucun logiciel ne sait créer des épures (pour le bois). Il suffit d'aller voir sur le site.

Je suis bien d'accord que Robot est une usine à gaz et que celui qui ne fait que du 2D n'a pas toujours... tout bon.

Hors ligne

#70 Le 27/12/2011, à 10:48

Baptiste61

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Ok merci pour la pub. J'utilise votre logiciel et je dois dire qu'il est bien (mis a part certain bugs et quelques regrets concernant interface/utilisation/interaction/intuitivité...). Mais c'est un forum concernant le libre/open source et je me demande bien ce que bar vient faire la dedans : payant/sous os commercial/et locked source... Enfin je ne serais pas contre une version gratuite open source...


OS : Ubuntu 12.04.1 LTS
Processeur 64 bits : Intel® Core™ i5 CPU 650 @ 3.20GHz × 4
Memoire RAM : 3Go
Carte Graphique : AMD Radeon HD 6450

Hors ligne

#71 Le 27/12/2011, à 11:27

peterp@n

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Ben déjà opensource, même payant, ça a son intérêt pour ajouter ses "plugins".

Sinon pour le coté libre on doit se voir bientôt avec ossaturelibre (qui travail pas loin de là où je bosse aussi) et un BE bois qui se lance en ce début d'année.
J'ai testé aussi FreeCAD et je pense qu'il y a matière pour un soft de type Dessin/Conception/Calcul dans un seul logiciel.
On pourrait dire usine à gaz mais en fait si avec un seul "dessin" on obtient les notes de calculs et les plans d'éxécution on arrive à un temps passé sur une étude tout à fait raisonnable.


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#72 Le 28/12/2011, à 15:37

Baptiste61

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Tout a fait d'accord avec ce que tu as ecris peterpan. As tu deja des realisations faites avec freecad ? Je vais essayer ce logiciel cet aprem qui ne m'a pas l'air mal du tout. C'est qui le BE Bois qui se lance ?


OS : Ubuntu 12.04.1 LTS
Processeur 64 bits : Intel® Core™ i5 CPU 650 @ 3.20GHz × 4
Memoire RAM : 3Go
Carte Graphique : AMD Radeon HD 6450

Hors ligne

#73 Le 08/04/2012, à 17:37

emlaurent

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Hello,

Un UP sur ce fil de discussion très intéressant !
Je cherche à calculer des structures en treillis (genre dome) et comme je suis linuxien depuis longtemps,
je cherche du soft libre.
J'utilise déjà FreeCAD pour dessiner et un peu la suite CAElinux (pour de la modélisation physique).
Autant dire que vos échanges autour de ces softs m'intéressent !

Est-ce que vous avez progressé pour des codes ?

Le site http://www.pyopenshelter.com a l'air down, c'est arrêté ? ?
ou l'adresse a changé ?

A+
Emmanuel


Technistub : Atelier-laboratoire ouvert en Alsace http://www.technistub.fr

Hors ligne

#74 Le 11/11/2012, à 11:54

Prisonerofnux

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Bonjour à tous,

Je viens de parcourir le projet "libeurocodes" sur le site de Sourceforge, utilisant assez souvent les régles Eurocode je serais bien tenté d'y participer. Hélas les derniers mises à jour ont l'air de dater d'assez longtemps.

Quelqu'un sait si le projet est encore d'actualité ? Si non, connaissez-vous d'autre projets de logiciels structuels libres auxquels on peut participer ?

Hors ligne

#75 Le 26/03/2013, à 18:53

emlaurent

Re : Idée projet Logiciel RDM Eurocodes Structures Bois, Acier, Béton...

Hello,

Je viens de découvrir cette série de code sous scilab pour calculer des structures selon l'eurocode
http://www.developpement-durable.gouv.f … codes.html

C'est hébergé par un ministère (pourquoi celui du dev dur ? ...)

Bref, y a pas mal de fonctions mais j'ai pas trop compris comment on s'en sert...
Apparemment, les données sont rentrées dans un fichier excel que scilab lit ensuite pour lancer des calculs,
résultats qui ont l'air de s'afficher en ligne dans la console scilab.

Y a bien un tutorial mais c'est pour faire ses premiers pas sous scilab et pas pour utiliser leurs codes.

Quelqu'un a essayé de travailler avec ?

merci


Technistub : Atelier-laboratoire ouvert en Alsace http://www.technistub.fr

Hors ligne