summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeepa-chaudhari2015-07-16 17:16:04 +0530
committerdeepa-chaudhari2015-07-16 17:16:04 +0530
commit8779785d61160092c926a46d68273d4871396651 (patch)
treeabd8b5b714d553cc8dc89582fe47e6b4b05465ea
parent47739d8ac5dfcc48a76d979bbbd31bde2f66bd1e (diff)
downloadOsdagLive-8779785d61160092c926a46d68273d4871396651.tar.gz
OsdagLive-8779785d61160092c926a46d68273d4871396651.tar.bz2
OsdagLive-8779785d61160092c926a46d68273d4871396651.zip
clearance
-rw-r--r--Connections/Shear/Finplate/Finplate0dot1.py939
-rw-r--r--Connections/Shear/Finplate/fin.log658
-rw-r--r--Connections/Shear/Finplate/finPlateCalc1.py466
-rw-r--r--Connections/Shear/Finplate/finPlateMain.py3
-rw-r--r--saveINPUT.txt6
5 files changed, 662 insertions, 1410 deletions
diff --git a/Connections/Shear/Finplate/Finplate0dot1.py b/Connections/Shear/Finplate/Finplate0dot1.py
deleted file mode 100644
index bf63b13..0000000
--- a/Connections/Shear/Finplate/Finplate0dot1.py
+++ /dev/null
@@ -1,939 +0,0 @@
-'''
-Created on 07-May-2015
-
-@author: deepa
-'''
-from PyQt4.QtCore import QString
-from PyQt4.QtGui import QMessageBox
-'''
-Created on 21-Aug-2014
-
-@author: deepa
-'''
-import sys
-from OCC import VERSION
-#from PyQt4 import QtGui,QtCore
-from ui_finPlate2 import Ui_MainWindow
-from model import *
-#from finPlateCalc import finConn
-from Connections.Shear.Finplate.finPlateCalc1 import finConn
-import yaml
-import pickle
-import logging
-#from exampleSimpleGUI import init_display
-from OCC.BRepAlgoAPI import BRepAlgoAPI_Fuse
-from OCC._Quantity import Quantity_NOC_RED,Quantity_NOC_BLUE1,Quantity_NOC_SADDLEBROWN
-from ISection import ISection
-import numpy
-from OCC.Graphic3d import Graphic3d_NOT_2D_ALUMINUM
-from weld import Weld
-from plate import Plate
-from bolt import Bolt
-from nut import Nut
-import os.path
-from utilities import osdagDisplayShape
-from OCC.Display.pyqt4Display import qtViewer3d
-from colWebBeamWebConnectivity import ColWebBeamWeb
-from colFlangeBeamWebConnectivity import ColFlangeBeamWeb
-from OCC import IGESControl
-
-from filletweld import FilletWeld
-
-
-class MainController(QtGui.QMainWindow):
-
- def __init__(self):
- QtGui.QMainWindow.__init__(self)
- self.ui = Ui_MainWindow()
- self.ui.setupUi(self)
-
-
- self.gradeType ={'Please Select Type':'',
- 'HSFG': [8.8,10.8],
- 'Black Bolt':[3.6,4.6,4.8,5.6,5.8,6.8,9.8,12.9]}
- self.ui.comboType.addItems(self.gradeType.keys())
- self.ui.comboType.currentIndexChanged[str].connect(self.combotype_currentindexchanged)
- self.ui.comboType.setCurrentIndex(0)
-
- self.ui.comboConnLoc.currentIndexChanged[str].connect(self.setimage_connection)
-
-
- self.ui.btn_Reset.clicked.connect(self.resetbtn_clicked)
-
- self.ui.btn_Design.clicked.connect(self.design_btnclicked)
- self.ui.btnInput.clicked.connect(lambda: self.dockbtn_clicked(self.ui.inputDock))
- self.ui.btnOutput.clicked.connect(lambda: self.dockbtn_clicked(self.ui.outputDock))
- self.ui.btn_front.clicked.connect(self.call_Frontview)
- self.ui.btn_top.clicked.connect(self.call_Topview)
- self.ui.btn_side.clicked.connect(self.call_Sideview)
-
- self.ui.btn3D.clicked.connect(self.call_3DModel)
- self.ui.chkBxBeam.clicked.connect(self.call_3DBeam)
- self.ui.chkBxCol.clicked.connect(self.call_3DColumn)
- self.ui.chkBxFinplate.clicked.connect(self.call_3DFinplate)
-
- validator = QtGui.QIntValidator()
- self.ui.txtFu.setValidator(validator)
- self.ui.txtFy.setValidator(validator)
-
- dbl_validator = QtGui.QDoubleValidator()
- self.ui.txtPlateLen.setValidator(dbl_validator)
- self.ui.txtPlateLen.setMaxLength(7)
- self.ui.txtPlateWidth.setValidator(dbl_validator)
- self.ui.txtPlateWidth.setMaxLength(7)
- self.ui.txtShear.setValidator(dbl_validator)
- self.ui.txtShear.setMaxLength(7)
-
- minfuVal = 290
- maxfuVal = 590
- self.ui.txtFu.editingFinished.connect(lambda: self.check_range(self.ui.txtFu,self.ui.lbl_fu, minfuVal, maxfuVal))
-
- minfyVal = 165
- maxfyVal = 450
- self.ui.txtFy.editingFinished.connect(lambda: self.check_range(self.ui.txtFy,self.ui.lbl_fy, minfyVal, maxfyVal))
-
- self.ui.combo_Beam.addItems(get_beamcombolist())
- self.ui.comboColSec.addItems(get_columncombolist())
- self.ui.menuView.addAction(self.ui.inputDock.toggleViewAction())
- self.ui.menuView.addAction(self.ui.outputDock.toggleViewAction())
- self.ui.btn_CreateDesign.clicked.connect(self.save_design)
- #self.ui.btn_Saveoutput.clicked.connect(self.save_design)
- self.ui.btn_SaveMessages.clicked.connect(self.save_log)
- #self.ui.btn_Savelog.clicked.connect(self.save_log)
-
-
- # Saving and Restoring the finPlate window state.
- self.retrieve_prevstate()
-
- # Initialising the qtviewer
- self.display,_ = self.init_display(backend_str="pyqt4")
-
- self.ui.btnSvgSave.clicked.connect(self.save3DtoIGES)
- #self.ui.btnSvgSave.clicked.connect(lambda:self.saveTopng(self.display))
-
-
- def saveTopng(self,display):
- display.ExportToImage('/home/Pictures/cad.png')
-
- def retrieve_prevstate(self):
- uiObj = self.get_prevstate()
- if(uiObj != None):
-
- self.ui.combo_Beam.setCurrentIndex(self.ui.combo_Beam.findText(uiObj['Member']['beamSection']))
- self.ui.comboColSec.setCurrentIndex(self.ui.comboColSec.findText(uiObj['Member']['columSection']))
-
- self.ui.txtFu.setText(str(uiObj['Member']['fu(MPa)']))
- self.ui.txtFy.setText(str(uiObj['Member']['fy(MPa)']))
-
- self.ui.comboConnLoc.setCurrentIndex(self.ui.comboConnLoc.findText(str(uiObj['Member']['connectivity'])))
-
- self.ui.txtShear.setText(str(uiObj['Load']['shearForce(kN)']))
-
- self.ui.comboDaimeter.setCurrentIndex(self.ui.comboDaimeter.findText(str(uiObj['Bolt']['diameter(mm)'])))
- comboTypeIndex = self.ui.comboType.findText(str(uiObj['Bolt']['type']))
- self.ui.comboType.setCurrentIndex(comboTypeIndex)
- self.combotype_currentindexchanged(str(uiObj['Bolt']['type']))
-
- prevValue = str(uiObj['Bolt']['grade'])
-
- comboGradeIndex = self.ui.comboGrade.findText(prevValue)
-
- self.ui.comboGrade.setCurrentIndex(comboGradeIndex)
-
- #self.ui.comboDaimeter.currentText(str(uiObj['Bolt']['diameter(mm)']))
- #self.ui.comboType.currentText(str(uiObj['Bolt']['diameter(mm)']))
- #self.ui.comboGrade.currentText(str(uiObj['Bolt']['grade']))
-
- self.ui.comboPlateThick_2.setCurrentIndex(self.ui.comboPlateThick_2.findText(str(uiObj['Plate']['thickness(mm)'])))
- #self.ui.comboPlateThick_2.currentText(str(uiObj['Plate']['thickness(mm)']))
- self.ui.txtPlateLen.setText(str(uiObj['Plate']['length(mm)']))
- self.ui.txtPlateWidth.setText(str(uiObj['Plate']['width(mm)']))
-
- self.ui.comboWldSize.setCurrentIndex(self.ui.comboWldSize.findText(str(uiObj['Weld']['size(mm)'])))
- #self.ui.comboWldSize.currentText(str(uiObj['Weld']['size(mm)']))
- #else:
- # self.btnreset_clicked()
-
- def setimage_connection(self):
- '''
- Setting image to connctivity.
- '''
- self.ui.lbl_connectivity.show()
- loc = self.ui.comboConnLoc.currentText()
- if loc == "Column flange-Beam web":
-
- pixmap = QtGui.QPixmap(":/newPrefix/images/beam2.jpg")
- pixmap.scaledToHeight(50)
- pixmap.scaledToWidth(60)
- self.ui.lbl_connectivity.setPixmap(pixmap)
- #self.ui.lbl_connectivity.show()
- elif(loc == "Column web-Beam web"):
- picmap = QtGui.QPixmap(":/newPrefix/images/beam.jpg")
- picmap.scaledToHeight(50)
- picmap.scaledToWidth(60)
- self.ui.lbl_connectivity.setPixmap(picmap)
- else:
- self.ui.lbl_connectivity.hide()
-
-
- def getuser_inputs(self):
- '''(nothing) -> Dictionary
-
- Returns the dictionary object with the user input fields for designing fin plate connection
-
- '''
- uiObj = {}
- uiObj["Bolt"] = {}
- uiObj["Bolt"]["diameter(mm)"] = self.ui.comboDaimeter.currentText().toInt()[0]
- uiObj["Bolt"]["grade"] = float(self.ui.comboGrade.currentText())
- uiObj["Bolt"]["type"] = str(self.ui.comboType.currentText())
-
-
- uiObj["Weld"] = {}
- uiObj["Weld"]['size(mm)'] = self.ui.comboWldSize.currentText().toInt()[0]
-
- uiObj['Member'] = {}
- uiObj['Member']['beamSection'] = str(self.ui.combo_Beam.currentText())
- uiObj['Member']['columSection'] = str(self.ui.comboColSec.currentText())
- uiObj['Member']['connectivity'] = str(self.ui.comboConnLoc.currentText())
- uiObj['Member']['fu(MPa)'] = self.ui.txtFu.text().toInt()[0]
- uiObj['Member']['fy(MPa)'] = self.ui.txtFy.text().toInt()[0]
-
- uiObj['Plate'] = {}
- uiObj['Plate']['thickness(mm)'] = self.ui.comboPlateThick_2.currentText().toInt()[0]
- uiObj['Plate']['height(mm)'] = self.ui.txtPlateLen.text().toInt()[0] # changes the label length to height
- uiObj['Plate']['width(mm)'] = self.ui.txtPlateWidth.text().toInt()[0]
-
- uiObj['Load'] = {}
- uiObj['Load']['shearForce(kN)'] = self.ui.txtShear.text().toInt()[0]
-
-
- return uiObj
-
- def save_inputs(self,uiObj):
-
- '''(Dictionary)--> None
-
- '''
- inputFile = QtCore.QFile('saveINPUT.txt')
- if not inputFile.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text):
- QtGui.QMessageBox.warning(self, "Application",
- "Cannot write file %s:\n%s." % (inputFile, file.errorString()))
- #yaml.dump(uiObj, inputFile,allow_unicode=True, default_flow_style = False)
- pickle.dump(uiObj, inputFile)
-
-
- def get_prevstate(self):
- '''
- '''
- fileName = 'saveINPUT.txt'
-
- if os.path.isfile(fileName):
- fileObject = open(fileName,'r')
- uiObj = pickle.load(fileObject)
- return uiObj
- else:
- return None
-
-
- def outputdict(self):
-
- ''' Returns the output of design in dictionary object.
- '''
- outObj = {}
- outObj['Plate'] ={}
- #outObj['Plate']["Thickness(mm)"] = float(self.ui.txtPlateThick.text())
- outObj['Plate']["External Moment(kNm)"] = float(self.ui.txtExtMomnt.text())
- outObj['Plate']["Moment Capacity(kNm)"] = float(self.ui.txtMomntCapacity.text())
-
- outObj['Weld'] ={}
- #outObj['Weld']["Weld Thickness(mm)"] = float(self.ui.txtWeldThick.text())
- outObj['Weld']["Resultant Shear(kN/mm)"] = float(self.ui.txtResltShr.text())
- outObj['Weld']["Weld Strength(kN/mm)"] = float(self.ui.txtWeldStrng.text())
-
- outObj['Bolt'] = {}
- outObj['Bolt']["Shear Capacity(kN)"] = float(self.ui.txtShrCapacity.text())
- outObj['Bolt']["Bearing Capacity(kN)"] = float(self.ui.txtbearCapacity.text())
- outObj['Bolt']["Capacity Of Bolt(kN)"] = float(self.ui.txtBoltCapacity.text())
- outObj['Bolt']["No Of Bolts"] = float(self.ui.txtNoBolts.text())
- outObj['Bolt']["No.Of Row"] = int(self.ui.txt_row.text())
- outObj['Bolt']["No.Of Column"] = int(self.ui.txt_col.text())
- outObj['Bolt']["Pitch Distance(mm)"] = float(self.ui.txtPitch.text())
- outObj['Bolt']["Guage Distance(mm)"] = float(self.ui.txtGuage.text())
- outObj['Bolt']["End Distance(mm)"]= float(self.ui.txtEndDist.text())
- outObj['Bolt']["Edge Distance(mm)"]= float(self.ui.txtEdgeDist.text())
-
- return outObj
-
-
- def save_design(self):
- self.outdict = self.outputdict()
- self.inputdict = self.getuser_inputs()
- self.save_yaml(self.outdict,self.inputdict)
-
- #self.save(self.outdict,self.inputdict)
-
- def save_log(self):
-
- fileName,pat =QtGui.QFileDialog.getSaveFileNameAndFilter(self,"Save File As","/home/deepa/SaveMessages","Text files (*.txt)")
- return self.save_file(fileName+".txt")
-
- def save_file(self, fileName):
- '''(file open for writing)-> boolean
- '''
- fname = QtCore.QFile(fileName)
- if not fname.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text):
- QtGui.QMessageBox.warning(self, "Application",
- "Cannot write file %s:\n%s." % (fileName, fname.errorString()))
- return False
-
- outf = QtCore.QTextStream(fname)
- QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
- outf << self.ui.textEdit.toPlainText()
- QtGui.QApplication.restoreOverrideCursor()
-
- #self.setCurrentFile(fileName);
- QtGui.QMessageBox.about(self,'Information',"File saved")
- return True
-
-
- def save_yaml(self,outObj,uiObj):
- '''(dictiionary,dictionary) -> NoneType
- Saving input and output to file in following format.
- Bolt:
- diameter: 6
- grade: 8.800000190734863
- type: HSFG
- Load:
- shearForce: 100
-
- '''
- newDict = {"INPUT": uiObj, "OUTPUT": outObj}
- fileName = QtGui.QFileDialog.getSaveFileName(self,"Save File As","/home/deepa/SaveDesign","Text File (*.txt)")
- f = open(fileName,'w')
- yaml.dump(newDict,f,allow_unicode=True, default_flow_style=False)
- return self.save_file(fileName+".txt")
-
-
- def resetbtn_clicked(self):
- '''(NoneType) -> NoneType
-
- Resets all fields in input as well as output window
-
- '''
- # user Inputs
- self.ui.combo_Beam.setCurrentIndex((0))
- self.ui.comboColSec.setCurrentIndex((0))
- self.ui.comboConnLoc.setCurrentIndex((0))
- self.ui.txtFu.clear()
- self.ui.txtFy.clear()
-
- self.ui.txtShear.clear()
-
- self.ui.comboDaimeter.setCurrentIndex(0)
- self.ui.comboType.setCurrentIndex((0))
- self.ui.comboGrade.setCurrentIndex((0))
-
- self.ui.comboPlateThick_2.setCurrentIndex((0))
- self.ui.txtPlateLen.clear()
- self.ui.txtPlateWidth.clear()
-
- self.ui.comboWldSize.setCurrentIndex((0))
-
- #----Output
- self.ui.txtShrCapacity.clear()
- self.ui.txtbearCapacity.clear()
- self.ui.txtBoltCapacity.clear()
- self.ui.txtNoBolts.clear()
- self.ui.txtboltgrpcapacity.clear()
- self.ui.txt_row.clear()
- self.ui.txt_col.clear()
- self.ui.txtPitch.clear()
- self.ui.txtGuage.clear()
- self.ui.txtEndDist.clear()
- self.ui.txtEdgeDist.clear()
-
- #self.ui.txtPlateThick.clear()
- self.ui.txtplate_ht.clear()
- self.ui.txtplate_width.clear()
- self.ui.txtExtMomnt.clear()
- self.ui.txtMomntCapacity.clear()
-
- #self.ui.txtWeldThick.clear()
- self.ui.txtResltShr.clear()
- self.ui.txtWeldStrng.clear()
- self.ui.textEdit.clear()
-
- def dockbtn_clicked(self,widget):
-
- '''(QWidget) -> NoneType
-
- This method dock and undock widget(QdockWidget)
- '''
-
- flag = widget.isHidden()
- if(flag):
-
- widget.show()
- else:
- widget.hide()
-
- def combotype_currentindexchanged(self,index):
-
- '''(Number) -> NoneType
- '''
- items = self.gradeType[str(index)]
-
- self.ui.comboGrade.clear()
- strItems = []
- for val in items:
- strItems.append(str(val))
-
- self.ui.comboGrade.addItems(strItems)
-
-
- def check_range(self, widget,lblwidget, minVal, maxVal):
-
- '''(QlineEdit,QLable,Number,Number)---> NoneType
- Validating F_u(ultimate Strength) and F_y (Yeild Strength) textfields
- '''
- textStr = widget.text()
- val = int(textStr)
- if( val < minVal or val > maxVal):
- QtGui.QMessageBox.about(self,'Error','Please Enter a value between %s-%s' %(minVal, maxVal))
- widget.clear()
- widget.setFocus()
- palette = QtGui.QPalette()
- palette.setColor(QtGui.QPalette.Foreground,QtCore.Qt.red)
- lblwidget.setPalette(palette)
- else:
- palette = QtGui.QPalette()
- lblwidget.setPalette(palette)
-
- def display_output(self, resultObj):
-
- '''(dictionary) --> NoneType
-
- Setting design result values to the respective textboxes in the output window
-
- '''
- # resultObj['Bolt']
- shear_capacity = resultObj['Bolt']['shearcapacity']
- self.ui.txtShrCapacity.setText(str(shear_capacity))
-
- bearing_capacity = resultObj['Bolt']['bearingcapacity']
- self.ui.txtbearCapacity.setText(str(bearing_capacity))
-
- bolt_capacity = resultObj['Bolt']['boltcapacity']
- self.ui.txtBoltCapacity.setText(str(bolt_capacity))
-
- no_ofbolts = resultObj['Bolt']['numofbolts']
- self.ui.txtNoBolts.setText(str(no_ofbolts))
- #newly added field
- boltGrp_capacity = resultObj['Bolt']['boltgrpcapacity']
- self.ui.txtboltgrpcapacity.setText(str(boltGrp_capacity))
-
- no_ofrows = resultObj['Bolt']['numofrow']
- self.ui.txt_row.setText(str(no_ofrows))
-
- no_ofcol = resultObj['Bolt']['numofcol']
- self.ui.txt_col.setText(str(no_ofcol))
-
- pitch_dist = resultObj['Bolt']['pitch']
- self.ui.txtPitch.setText(str(pitch_dist))
-
- gauge_dist = resultObj['Bolt']['gauge']
- self.ui.txtGuage.setText(str(gauge_dist))
-
- end_dist = resultObj['Bolt']['enddist']
- self.ui.txtEndDist.setText(str(end_dist))
-
- edge_dist = resultObj['Bolt']['edge']
- self.ui.txtEdgeDist.setText(str(edge_dist))
-
- # resultObj['Weld']
- # weld_thickness = resultObj['Weld']['thickness']
- # self.ui.txtWeldThick.setText(str(weld_thickness))
-
- resultant_shear = resultObj['Weld']['resultantshear']
- self.ui.txtResltShr.setText(str(resultant_shear))
-
- weld_strength = resultObj['Weld']['weldstrength']
- self.ui.txtWeldStrng.setText(str(weld_strength))
-
-
- # Newly included fields
- plate_ht = resultObj['Plate']['height']
- self.ui.txtplate_ht.setText(str(plate_ht))
-
- plate_width = resultObj['Plate']['width']
- self.ui.txtplate_width.setText(str(plate_width))
-
- moment_demand = resultObj['Plate']['externalmoment']
- self.ui.txtExtMomnt.setText(str(moment_demand))
-
- moment_capacity = resultObj['Plate']['momentcapacity']
- self.ui.txtMomntCapacity.setText(str(moment_capacity))
-
-
- def displaylog_totextedit(self):
- '''
- This method displaying Design messages(log messages)to textedit widget.
- '''
-
- afile = QtCore.QFile('fin.log')
-
- if not afile.open(QtCore.QIODevice.ReadOnly):
- QtGui.QMessageBox.information(None, 'info', afile.errorString())
-
- stream = QtCore.QTextStream(afile)
- self.ui.textEdit.setHtml(stream.readAll())
-
- def get_backend(self):
- """
- loads a backend
- backends are loaded in order of preference
- since python comes with Tk included, but that PySide or PyQt4
- is much preferred
- """
- try:
- from PySide import QtCore, QtGui
- return 'pyside'
- except:
- pass
- try:
- from PyQt4 import QtCore, QtGui
- return 'pyqt4'
- except:
- pass
- # Check wxPython
- try:
- import wx
- return 'wx'
- except:
- raise ImportError("No compliant GUI library found. You must have either PySide, PyQt4 or wxPython installed.")
- sys.exit(1)
-
- # QtViewer
- def init_display(self,backend_str=None, size=(1024, 768)):
-
- global display, start_display, app, _, USED_BACKEND
-
- if not backend_str:
- USED_BACKEND = self.get_backend()
- elif backend_str in [ 'pyside', 'pyqt4']:
- USED_BACKEND = backend_str
- else:
- raise ValueError("You should pass either 'qt' or 'tkinter' to the init_display function.")
- sys.exit(1)
-
- # Qt based simple GUI
- if USED_BACKEND in ['pyqt4', 'pyside']:
- if USED_BACKEND == 'pyqt4':
- from PyQt4 import QtCore, QtGui, QtOpenGL
- from OCC.Display.pyqt4Display import qtViewer3d
- elif USED_BACKEND == 'pyside':
- from PySide import QtCore, QtGui, QtOpenGL
- from OCC.Display.pysideDisplay import qtViewer3d
-
- self.ui.modelTab = qtViewer3d(self)
- #self.ui.model2dTab = qtViewer3d(self)
- self.setWindowTitle("Osdag-%s 3d viewer ('%s' backend)" % (VERSION, USED_BACKEND))
- self.ui.mytabWidget.resize(size[0], size[1])
- self.ui.mytabWidget.addTab(self.ui.modelTab,"3D")
- #self.ui.mytabWidget.addTab(self.ui.model2dTab, "2D")
-
- #self.ui.mytabWidget.setCentralWidget(self.ui.modelTab)
- #self.ui.mytabWidget.centerOnScreen()
-
- self.ui.modelTab.InitDriver()
- display = self.ui.modelTab._display
- #display_2d = self.ui.model2dTab._display
-
- # background gradient
- display.set_bg_gradient_color(23,1,32,23,1,32)
- #display_2d.set_bg_gradient_color(255,255,255,255,255,255)
- # display black trihedron
- display.display_trihedron()
- display.View.SetProj(1, 1, 1)
- def centerOnScreen(self):
- '''Centers the window on the screen.'''
- resolution = QtGui.QDesktopWidget().screenGeometry()
- self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
- (resolution.height() / 2) - (self.frameSize().height() / 2))
- def start_display():
-
- self.ui.modelTab.raise_() # make the application float to the top
-
- return display, start_display
-
- def display3Dmodel(self,cadlist,component):
-
- if component == "Column":
- self.display.EraseAll()
- osdagDisplayShape(self.display, cadlist[0], update=True)
- elif component == "Beam":
- display.EraseAll()
- osdagDisplayShape(self.display, cadlist[1],material = Graphic3d_NOT_2D_ALUMINUM, update=True)
- elif component == "Finplate" :
- display.EraseAll()
- osdagDisplayShape(self.display,cadlist[2],color = 'red', update = True)
- osdagDisplayShape(self.display, cadlist[3], color = 'blue', update = True)
- self.display.DisplayShape(cadlist[4],color = Quantity_NOC_SADDLEBROWN, update=True)
- self.display.DisplayShape(cadlist[5],color = Quantity_NOC_SADDLEBROWN, update = True)
- elif component == "Model":
- osdagDisplayShape(self.display, cadlist[0], update=True)
- osdagDisplayShape(self.display, cadlist[1],material = Graphic3d_NOT_2D_ALUMINUM, update=True)
- osdagDisplayShape(self.display,cadlist[2],color = 'red', update = True)
- osdagDisplayShape(self.display,cadlist[3],color = 'red', update = True)
- osdagDisplayShape(self.display, cadlist[4], color = 'blue', update = True)
- self.display.DisplayShape(cadlist[5],color = Quantity_NOC_SADDLEBROWN, update=True)
- self.display.DisplayShape(cadlist[6],color = Quantity_NOC_SADDLEBROWN, update = True)
- else:
- pass
-
- start_display()
-
-
- def create3DColWebBeamWeb(self):
- '''
- creating 3d cad model with column web beam web
- '''
-
- column = ISection(B = 83, T = 14.1, D = 250, t = 11, R1 = 12, R2 = 3.2, alpha = 98, length = 1000)
- beam = ISection(B = 140, T = 16,D = 400,t = 8.9, R1 = 14, R2 = 7, alpha = 98,length = 500)
- Fweld1 = FilletWeld(L= 300,b = 6, h = 6)
- #Fweld1 = Weld(L= 300,W = beam.t, T = 8)
-
- plate = Plate(L= 300,W =100, T = 10)
- boltRadius = 10
- nutRadius = 10
-
- colwebconn = ColWebBeamWeb(column,beam,Fweld1,plate,boltRadius,nutRadius)
- return colwebconn.create_3dmodel()
-
- def createColFlangeBeamWeb(self):
- '''
- Creating 3d cad model with column flange beam web connection
- '''
- column = ISection(B = 83, T = 14.1, D = 250, t = 11, R1 = 12, R2 = 3.2, alpha = 98, length = 1000)
- beam = ISection(B = 140, T = 16,D = 400,t = 8.9, R1 = 14, R2 = 7, alpha = 98,length = 500)
- weld = Weld(L= 300,b = 6.0, T = 8)
- plate = Plate(L= weld.L,W =100, T = 10)
- boltRadius = 10
- nutRadius = 10
-
- colflangeconn = ColFlangeBeamWeb(column,beam,weld,plate,boltRadius,nutRadius)
- return colflangeconn.create_3dmodel()
-
- def call_3DModel(self):
- if self.ui.btn3D.isEnabled():
- self.ui.chkBxBeam.setChecked(QtCore.Qt.Unchecked)
- self.ui.chkBxCol.setChecked(QtCore.Qt.Unchecked)
- self.ui.chkBxFinplate.setChecked(QtCore.Qt.Unchecked)
- self.ui.mytabWidget.setCurrentIndex(0)
-
- if self.ui.comboConnLoc.currentText()== "Column web-Beam web":
- memberlist = self.create3DColWebBeamWeb()
- else:
- self.ui.mytabWidget.setCurrentIndex(0)
- memberlist = self.createColFlangeBeamWeb()
-
- #memberlist = self.create_3dmodel()
- #self.ui.btn3D.setStyleSheet("background-color: red")
- self.display3Dmodel(memberlist, "Model")
-
-
- def call_3DBeam(self):
- '''
- Creating and displaying 3D Beam
- '''
- memberlist = self.create3DColWebBeamWeb()
-
- if self.ui.chkBxBeam.isChecked():
- self.ui.chkBxCol.setChecked(QtCore.Qt.Unchecked)
- self.ui.chkBxFinplate.setChecked(QtCore.Qt.Unchecked)
- self.ui.mytabWidget.setCurrentIndex(0)
- self.display3Dmodel(memberlist, "Beam")
- #self.ui.chkBxBeam.setChecked(QtCore.Qt.Unchecked)
-
- def call_3DColumn(self):
- memberlist = self.create3DColWebBeamWeb()
- if self.ui.chkBxCol.isChecked():
- self.ui.chkBxBeam.setChecked(QtCore.Qt.Unchecked)
- self.ui.chkBxFinplate.setChecked(QtCore.Qt.Unchecked)
- self.ui.mytabWidget.setCurrentIndex(0)
- self.display3Dmodel(memberlist, "Column")
- #self.ui.chkBxBeam.setChecked(QtCore.Qt.Unchecked
-
- def call_3DFinplate(self):
- memberlist = self.create3DColWebBeamWeb()
- if self.ui.chkBxFinplate.isChecked():
- self.ui.chkBxBeam.setChecked(QtCore.Qt.Unchecked)
- self.ui.chkBxCol.setChecked(QtCore.Qt.Unchecked)
- self.ui.mytabWidget.setCurrentIndex(0)
- self.display3Dmodel(memberlist, "Finplate")
- #self.ui.chkBxBeam.setChecked(QtCore.Qt.Unchecked
-
- def design_btnclicked(self):
-
- # Getting User Inputs.
- uiObj = self.getuser_inputs()
- print uiObj
-
- # FinPlate Design Calculations.
- resultObj = finConn(uiObj)
-
- # Displaying Design Calculations To Output Window
- self.display_output(resultObj)
-
- # Displaying Messages related to FinPlate Design.
- self.ui.textEdit.clear()
- self.displaylog_totextedit()
-
-
- def close_event(self, event):
- '''
- Closing finPlate window.
- '''
- uiInput = self.getuser_inputs()
- self.save_inputs(uiInput)
- reply = QtGui.QMessageBox.question(self, 'Message',
- "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
-
- if reply == QtGui.QMessageBox.Yes:
- event.accept()
- else:
- event.ignore()
-
-
- def create2Dcad(self):
-
-
-
- # ISection COLUMN
- origin1 = numpy.array([0, 0, 0])
- uDir1 = numpy.array([1.0, 0, 0])
- wDir1 = numpy.array([0.0, 0, 1.0])
- t = 8.9
- weldThick = 8
- iSection1 = ISection(B = 83, T = 14.1, D = 250, t = 11, R1 = 12, R2 = 3.2, alpha = 98, length = 1000)
- iSection1.place(origin1, uDir1, wDir1)
-
- # ISection BEAM
- uDir2 = numpy.array([0, 1.0, 0])
- wDir2 = numpy.array([1.0, 0, 0.0])
- d = t/2.0 + weldThick
- origin2 = numpy.array([0, 0, 500]) + (d+7.55) * wDir2
- iSection2 = ISection(B = 140, T = 16,D = 400,t = 8.9, R1 = 14, R2 = 7, alpha = 98,length = 400)
- iSection2.place(origin2, uDir2, wDir2)
-
- # WELD
- weld = Weld(L= 300,W =iSection2.t, T = 8)
- #plateThickness = 10
- uDir3 = numpy.array([0, 1.0, 0])
- wDir3 = numpy.array([1.0, 0, 0.0])
- origin3 = (iSection1.secOrigin +
- iSection1.t/2.0 * iSection1.uDir +
- iSection1.length/2.0 * iSection1.wDir +
- iSection2.t/2.0 * (-iSection2.uDir)+
- weld.W/2.0 * (-iSection2.uDir))
- #origin3 = numpy.array([0, 0, 500]) + t/2.0 *wDir3 + plateThickness/2.0 * (-iSection2.uDir)
- weld.place(origin3, uDir3, wDir3)
-
- # PLATE
- plate = Plate(L= weld.L,W =100, T = 10)
- uDir4 = numpy.array([0, 1.0, 0])
- wDir4 = numpy.array([1.0, 0, 0.0])
- origin4 = weld.secOrigin + weld.T * weld.wDir
- plate.place(origin4, uDir4, wDir4)
-
- # BOLT BODY
- bolt_T = 6.0
- origin51 = (plate.secOrigin + (-
- plate.T/2.0 - bolt_T) * plate.uDir +
- plate.W/2.0 * plate.wDir)
-
- uDir5 = plate.wDir
- wDir5 = plate.uDir
- ## Bolt1
- bolt1 = Bolt(R = 10.0,T = bolt_T, H = 30.0, r = 4.0 )
- bolt1.place(origin51, uDir5, wDir5)
-
- ## Bolt2
- bolt2 = Bolt(R = 10.0,T = bolt_T, H = 30.0, r = 4.0 )
- origin52 = origin51 + 50 *plate.vDir
- bolt2.place(origin52, uDir5, wDir5)
-
- ## Bolt3
- bolt3 = Bolt(R = 10.0,T = bolt_T, H = 30.0, r = 4.0 )
- origin53 = origin51 - 50*plate.vDir
- bolt3.place(origin53, uDir5, wDir5)
- bolt_list =[bolt1,bolt2,bolt3]
-
- # NUTBODY
- ## Nut1
- nut1 = Nut(R = 10.0,T = 10.0, H = 6.1, innerR1 = 6.0, outerR2 = 8.3)
- uDir = uDir5
- wDir = wDir5
- nut_Origin1 = origin51 + (bolt1.T/2 * plate.uDir)+(plate.T *plate.uDir)+ (iSection2.T/2 * plate.uDir)
- nut1.place(nut_Origin1, uDir, wDir)
-
- ## Nut2
- nut2 = Nut(R = 10.0,T = 10.0, H = 6.1, innerR1 = 6.0, outerR2 = 8.3)
- nut_Origin2 = origin52 + (bolt1.T/2 * plate.uDir)+(plate.T *plate.uDir)+ (iSection2.T/2 * plate.uDir)
- nut2.place(nut_Origin2, uDir, wDir)
-
- ## Nut3
- nut3 =Nut(R = 10.0,T = 10.0, H = 6.1, innerR1 = 6.0, outerR2 = 8.3)
- nut_Origin3 = origin53 + (bolt1.T/2 * plate.uDir)+(plate.T *plate.uDir)+ (iSection2.T/2 * plate.uDir)
- nut3.place(nut_Origin3, uDir5, wDir5)
- nut_list = [nut1,nut2,nut3]
-
- # Call for createModel
- iSectionModel1 = iSection1.createModel()
- iSectionModel2 = iSection2.createModel()
- weldModel = weld.createModel()
- plateModel = plate.createModel()
- boltModels = []
- for bolt in bolt_list:
-
- boltModels.append(bolt.createModel())
-
- #color = Quantity_NOC_SADDLEBROWN,
- nutModels = []
- for nut in nut_list:
- nutModels.append(nut.createModel())
-
- isection = BRepAlgoAPI_Fuse(iSectionModel1,iSectionModel2).Shape()
- weld_isection = BRepAlgoAPI_Fuse(isection,weldModel).Shape()
- plate_weld = BRepAlgoAPI_Fuse(weld_isection,plateModel).Shape()
-
- plate_weld_bolt = plate_weld
- for bolt in boltModels:
- plate_weld_bolt = BRepAlgoAPI_Fuse(plate_weld_bolt, bolt).Shape()
-
-
- final_model = plate_weld_bolt
- for nt in nutModels:
- final_model = BRepAlgoAPI_Fuse(final_model,nt).Shape()
- return final_model
-
- # Export to IGES
- def save3DtoIGES(self):
- shape = self.create2Dcad()
- i = IGESControl.IGESControl_Controller()
- i.Init()
- iges_writer = IGESControl.IGESControl_Writer()
- iges_writer.AddShape(shape)
- iges_writer.Write('/home/deepa/Pictures/osdag.iges')
-
- def display2DModel(self, final_model, viewName):
-
- #display, start_display, _, _ = self.simpleGUI()
-
- self.display.set_bg_gradient_color(255, 255, 255, 255, 255, 255)
- # Get Context
- ais_context = self.display.GetContext().GetObject()
-
- # Get Prs3d_drawer from previous context
- drawer_handle = ais_context.DefaultDrawer()
- drawer = drawer_handle.GetObject()
- drawer.EnableDrawHiddenLine()
-
- hla = drawer.HiddenLineAspect().GetObject()
- hla.SetWidth(2)
- hla.SetColor(Quantity_NOC_RED)
-
- # increase line width in the current viewer
- # This is only viewed in the HLR mode (hit 'e' key for instance)
-
- line_aspect = drawer.SeenLineAspect().GetObject()
- line_aspect.SetWidth(2.8)
- line_aspect.SetColor(Quantity_NOC_BLUE1)
-
- self.display.DisplayShape(final_model, update = True)
-
- self.display.SetModeHLR()
- self.display.FitAll()
-
- if (viewName == "Front"):
- display.View_Front()
- elif (viewName == "Top"):
- display.View_Top()
- elif (viewName == "Right"):
- display.View_Right()
- else:
- pass
-
- start_display()
-
- def call_Frontview(self):
-
- '''Displays front view of 2Dmodel
- '''
- self.ui.mytabWidget.setCurrentIndex(1)
- final_model = self.create2Dcad()
- self.display2DModel(final_model, "Front")
-
- def call_Topview(self):
-
- '''Displays Top view of 2Dmodel
- '''
- final_model = self.create2Dcad()
- self.display2DModel(final_model, "Top")
-
- def call_Sideview(self):
-
- '''Displays Side view of the 2Dmodel'
- '''
- final_model = self.create2Dcad()
- self.display2DModel(final_model, "Right")
-
-def set_osdaglogger():
-
- logger = logging.getLogger("osdag")
- logger.setLevel(logging.DEBUG)
-
- # create the logging file handler
- fh = logging.FileHandler("fin.log", mode="a")
-
- #,datefmt='%a, %d %b %Y %H:%M:%S'
- #formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-
- formatter = logging.Formatter('''
- <div class="LOG %(levelname)s">
- <span class="DATE">%(asctime)s</span>
- <span class="LEVEL">%(levelname)s</span>
- <span class="MSG">%(message)s</span>
- </div>''')
- formatter.datefmt = '%a, %d %b %Y %H:%M:%S'
- fh.setFormatter(formatter)
-
- # add handler to logger object
- logger.addHandler(fh)
-
-
-if __name__ == '__main__':
-
- # linking css to log file to display colour logs.
- set_osdaglogger()
- rawLogger = logging.getLogger("raw")
- rawLogger.setLevel(logging.INFO)
- fh = logging.FileHandler("fin.log", mode="w")
- formatter = logging.Formatter('''%(message)s''')
- fh.setFormatter(formatter)
- rawLogger.addHandler(fh)
- rawLogger.info('''<link rel="stylesheet" type="text/css" href="log.css"/>''')
-
-
-
- app = QtGui.QApplication(sys.argv)
- window = MainController()
- window.show()
- sys.exit(app.exec_())
-
-
-
-
-
diff --git a/Connections/Shear/Finplate/fin.log b/Connections/Shear/Finplate/fin.log
index 9b5e7d3..2cfbd93 100644
--- a/Connections/Shear/Finplate/fin.log
+++ b/Connections/Shear/Finplate/fin.log
@@ -8237,3 +8237,661 @@
<span class="LEVEL">DEBUG</span>
<span class="MSG"> :=========End Of design===========</span>
</div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:11</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:11</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:11</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:11</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:24</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:24</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 6.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:24</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:24</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:30</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:30</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:30</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:30</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:46</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:46</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:47</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:07:47</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:04</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:04</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 5.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:04</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:04</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:12</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:12</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:12</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:08:12</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Height of plate is more than the clear depth of the beam</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Maximum plate height allowed is 46.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Bolt strength is insufficient to carry the shear force</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Increase bolt diameter and/or bolt grade</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Plate width provided is less than the minimum required</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum plate width required is 150.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 15.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:45</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Height of plate is more than the clear depth of the beam</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Maximum plate height allowed is 46.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Bolt strength is insufficient to carry the shear force</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Increase bolt diameter and/or bolt grade</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Plate width provided is less than the minimum required</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum plate width required is 150.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 15.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:53</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Height of plate is more than the clear depth of the beam</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Maximum plate height allowed is 46.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Bolt strength is insufficient to carry the shear force</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Increase bolt diameter and/or bolt grade</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Plate width provided is less than the minimum required</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum plate width required is 150.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 15.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:09:57</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Height of plate is more than the clear depth of the beam</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Maximum plate height allowed is 46.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Bolt strength is insufficient to carry the shear force</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Increase bolt diameter and/or bolt grade</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Plate width provided is less than the minimum required</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum plate width required is 150.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 12.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:10</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Height of plate is more than the clear depth of the beam</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Maximum plate height allowed is 46.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Bolt strength is insufficient to carry the shear force</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Increase bolt diameter and/or bolt grade</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Plate width provided is less than the minimum required</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum plate width required is 150.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 25.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:20</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Height of plate is more than the clear depth of the beam</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Maximum plate height allowed is 46.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Bolt strength is insufficient to carry the shear force</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Increase bolt diameter and/or bolt grade</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Plate width provided is less than the minimum required</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum plate width required is 150.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 25.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:38</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Height of plate is more than the clear depth of the beam</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Maximum plate height allowed is 94.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Bolt strength is insufficient to carry the shear force</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Increase bolt diameter and/or bolt grade</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Plate width provided is less than the minimum required</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum plate width required is 150.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 6.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:10:49</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:13</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:13</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:13</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:13</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:27</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Weld thickness is not sufficient</span>
+ </div>
+
+ <div class="LOG WARNING">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:27</span>
+ <span class="LEVEL">WARNING</span>
+ <span class="MSG">: Minimum weld thickness is required is 6.00 mm </span>
+ </div>
+
+ <div class="LOG ERROR">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:27</span>
+ <span class="LEVEL">ERROR</span>
+ <span class="MSG">: Design is not safe
+ </span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:27</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:31</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:31</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
+
+ <div class="LOG INFO">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:31</span>
+ <span class="LEVEL">INFO</span>
+ <span class="MSG">: Overall finplate connection design is safe
+</span>
+ </div>
+
+ <div class="LOG DEBUG">
+ <span class="DATE">Thu, 16 Jul 2015 17:11:31</span>
+ <span class="LEVEL">DEBUG</span>
+ <span class="MSG"> :=========End Of design===========</span>
+ </div>
diff --git a/Connections/Shear/Finplate/finPlateCalc1.py b/Connections/Shear/Finplate/finPlateCalc1.py
deleted file mode 100644
index 34efdb4..0000000
--- a/Connections/Shear/Finplate/finPlateCalc1.py
+++ /dev/null
@@ -1,466 +0,0 @@
-'''
-Created on 25-May-2015
-
-@author: subhrajit
-'''
-'''
-Example 5.18 Page 412 N. Subramanium
-Design of steel structures
-Design of fin-plate:
-Design a web side plate connection (welded to the column and site bolted to the beam) for ISMB 400 in Fe 410 grade steel and to carry a reaction of 140 kN due
-to factored loads. The connection is to the flange of an ISSC 200 column.
-
-'''
-import cmath;
-import math
-import sys;
-
-from model import *
-from PyQt4.Qt import QString
-import logging
-flag = 1
-logger = None
-
-def module_setup():
-
- global logger
- logger = logging.getLogger("osdag.finPlateCalc")
-
-module_setup()
-# def set_designlogger():
-# global logger
-# logger = logging.getLogger("Designlogger")
-# logger.setLevel(logging.DEBUG)
-#
-# # create the logging file handler
-# fh = logging.FileHandler("fin.log", mode="w")
-#
-# #,datefmt='%a, %d %b %Y %H:%M:%S'
-# #formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-#
-# formatter = logging.Formatter('''
-# <div class="LOG %(levelname)s">
-# <span class="DATE">%(asctime)s</span>
-# <span class="LEVEL">%(levelname)s</span>
-# <span class="MSG">%(message)s</span>
-# </div>''')
-# formatter.datefmt = '%a, %d %b %Y %H:%M:%S'
-# fh.setFormatter(formatter)
-#
-# # add handler to logger object
-# logger.addHandler(fh)
-#
-
-
-
-
-#FUNCTION DEFINITIONS---------------
-#BOLT: determination of shear capacity = fu * n * A / (root(3) * Y)
-def bolt_shear(dia, n, fu):
- A = cmath.pi * dia * dia * 0.25 * 0.78; #threaded area = 0.78 x shank area
- root3 = cmath.sqrt(3);
- Vs = fu * n * A / (root3 * 1.25 * 1000);
- Vs = round(Vs.real,3);
- return Vs
-
-#BOLT: determination of bearing capacity = 2.5 * kb * d * t * fu / Y
-def bolt_bearing(dia, t, fu):
- #add code to determine kb if pitch, gauge, edge distance known
- kb = 0.5; #assumption
- Vb = 2.5 * kb * dia * t * fu / (1.25 * 1000);
- Vb = round(Vb.real,3);
- return Vb;
-
-# PLATE: minimum thickness of web plate for eccentricity
-def web_min_h(shear, fy, thk):
- min_plate_ht = 5*shear*1000/(fy*thk);
- return min_plate_ht;
-
-
-def finConn(uiObj):
- global logger
- beam_sec = uiObj['Member']['BeamSection']
- column_sec = uiObj['Member']['ColumSection']
- connectivity = uiObj['Member']['Connectivity']
- beam_fu = uiObj['Member']['fu (MPa)']
- beam_fy = uiObj['Member']['fy (MPa)']
-
- shear_load = uiObj['Load']['ShearForce (kN)']
-
- bolt_dia = uiObj['Bolt']['Diameter (mm)']
- bolt_type = uiObj["Bolt"]["Type"]
- bolt_grade = uiObj['Bolt']['Grade']
-
- web_plate_t = uiObj['Plate']['Thickness (mm)']
- web_plate_w = uiObj['Plate']['Width (mm)']
- web_plate_l = uiObj['Plate']['Height (mm)']
- web_plate_fu = uiObj['Member']['fu (MPa)']
- web_plate_fy = uiObj['Member']['fy (MPa)']
-
- weld_t = uiObj["Weld"]['Size (mm)']
- weld_fu = 410
-
- bolt_planes = 1
- dictbeamdata = get_beamdata(beam_sec)
- beam_w_t = float(dictbeamdata[QString("tw")])
- beam_f_t = float(dictbeamdata[QString("T")])
- beam_d = float(dictbeamdata[QString("D")])
-
-
- # ############### Need to discuss with sir ########################
- # #Bolt grade chosen from drop down list
- #
- # #Bolt dia chosen from list of standard sizes between 12 and 36
- #
- # # web_plate_t lies between (5, 63)
- # if web_plate_t < 5 | web_plate_t > 63:
- # sys.exit();
- #
- # #weld_fu lies between (410, 610)
- # if weld_fu <= 410 | weld_fu >= 610:
- # sys.exit();
-
- ########################################################################
- # INPUT FOR PLATE DIMENSIONS (FOR OPTIONAL INPUTS) AND VALIDATION
-
- # Plate thickness check
- if web_plate_t < beam_w_t:
- web_plate_t = beam_w_t
- #logger.error("The length of the plate is more than the available depth of %2.2f mm " % (plate_len))
-
- logger.error(": Chosen web plate thickness is not sufficient" )
- logger.warning(" : Minimum required thickness %2.2f mm" % (beam_w_t))
-
- # Plate height check
- # Maximum/minimum plate height
- max_plate_height = beam_d - 2 * beam_f_t - 40;
- min_plate_height = web_min_h(shear_load,web_plate_fy,web_plate_t);
- min_plate_height = int(min_plate_height) /10 * 10 +10;
- min_plate_height = round(min_plate_height,3)
-
- # Height input and check
-
- if web_plate_l != 0:
- if web_plate_l > max_plate_height :
- logger.error(": Height of plate is more than the clear depth of the beam")
- logger.warning(": Maximum plate height allowed is %2.2f mm " % (max_plate_height))
- web_plate_l = max_plate_height ;
-
- elif min_plate_height > max_plate_height:
- logger.error(": Minimum required plate height is more than the clear depth of the beam")
- logger.warning(": Plate height required should be more than %2.2f mm " % (min_plate_height))
- logger.warning(": Maximum plate height allowed is %2.2f mm " % (max_plate_height))
- logger.info(": Increase the plate thickness")
- web_plate_l = max_plate_height;
-
- elif min_plate_height >= web_plate_l:
-
- logger.error(": Plate height provided is less than the minimum required ")
- logger.warning(": Plate height required should be more than %2.2f mm " % (min_plate_height))
-
- web_plate_l = min_plate_height
- else:
- if min_plate_height < max_plate_height:
- web_plate_l = min_plate_height +10
- elif min_plate_height >= max_plate_height:
- web_plate_l = (max_plate_height-10)//10*10 ;
-
-
- ########################################################################
- # Bolt design:
-
- # I: Check for number of bolts -------------------
- bolt_fu = int(bolt_grade) * 100
- bolt_fy = (bolt_grade - int(bolt_grade))*bolt_fu;
-
- t_thinner = min(beam_w_t.real,web_plate_t.real);
- bolt_shear_capacity = bolt_shear(bolt_dia,bolt_planes,bolt_fu).real;
- bolt_bearing_capacity = bolt_bearing(bolt_dia,t_thinner,beam_fu).real;
-
- bolt_capacity = min(bolt_shear_capacity, bolt_bearing_capacity);
-
- bolts_required = int(shear_load/bolt_capacity) + 1;
- if bolts_required <= 2:
- bolts_required = 3;
-
- bolt_group_capacity = bolts_required * bolt_capacity;
-
- # Spacing of bolts for web plate -------------------
- if bolt_dia == 12 or bolt_dia == 14:
- dia_hole = bolt_dia + 1
- elif bolt_dia == 16 or bolt_dia == 18 or bolt_dia == 20 or bolt_dia == 22 or bolt_dia == 24:
- dia_hole = bolt_dia + 2
- else:
- dia_hole = bolt_dia + 3
-
- # Minimum/maximum pitch and gauge
- min_pitch = int(2.5 * bolt_dia);
- min_gauge = int(2.5 * bolt_dia);
-
- if min_pitch%10 != 0 or min_gauge%10 != 0:
- min_pitch = (min_pitch/10)*10 + 10;
- min_gauge = (min_gauge/10)*10 + 10;
- else:
- min_pitch = min_pitch;
- min_gauge = min_gauge;
- #clause 10.2.2 is800
- max_spacing = int(min(100 + 4 * t_thinner, 200)); #clause 10.2.3.3 is800
-
- min_edge_dist = int(1.5 * (dia_hole)) + 10; # 10 mm added than min. value
- if min_edge_dist%10 != 0:
- min_edge_dist = (min_edge_dist/10)*10 + 10;
- else:
- min_edge_dist = min_edge_dist;
-
- max_edge_dist = int((12 * t_thinner * cmath.sqrt(250/beam_fy)).real)-1;
-
- # Determine single or double line of bolts
-
- length_avail = (web_plate_l-2*min_edge_dist);
- pitch = round(length_avail/(bolts_required-1),3);
-
-
-
- ## Calculation of moment demand
-
- M1 = bolt_shear_capacity * (20+min_edge_dist/2);
- # Single line of bolts
- if pitch >= min_pitch:
- bolt_line =1;
- gauge = 0;
- bolts_one_line = bolts_required;
- K = bolts_one_line / 2;
- M2=0;
- if bolts_required % 2 ==0 or bolts_required % 2 !=0:
- for k in range (0,K):
- M2 = M2 + 2*(bolt_shear_capacity * ((length_avail/2 - k * pitch)**2/(length_avail/2 - k * pitch)));
- moment_demand = max(M1,M2);
- moment_demand = round(moment_demand * 0.001,3)
-
- # Multi-line of bolts
- if pitch < min_pitch:
- bolt_line = 2;
- if bolts_required % 2 == 0:
- bolts_one_line = bolts_required/2;
- else:
- bolts_one_line = (bolts_required/2) + 1;
-
- pitch = round(length_avail/(bolts_one_line-1),3);
- gauge = min_gauge;
- M1 = bolt_shear_capacity * (20+ min_edge_dist + gauge/2);
-
- if pitch >= min_pitch:
- K = bolts_one_line / 2;
- M2=0;
- if bolts_required % 2 ==0 or bolts_required % 2 !=0:
- for k in range (0,K):
- V = length_avail/2 - k * pitch
- H = gauge/2;
- d = math.sqrt(V**2 + H**2);
- M2 = M2 + 2*(bolt_shear_capacity * (d**2/d));
- M2=M2*2;
- moment_demand = max(M1,M2);
- moment_demand = round(moment_demand * 0.001,3)
-
- # Needs discussion with Sir
- else:
- logger.error(": Bolt strength is insufficient to carry the shear force")
- logger.warning (": Increase bolt diameter and/or bolt grade")
- moment_demand=0.0
- ####################################################################################
- # Design of plate:
-
- # Width input (optional) and validation
- if web_plate_w != 0:
- if bolt_line == 1:
- web_plate_w_req = 2 * min_edge_dist
- end_dist = web_plate_w/2
- if bolt_line == 2:
- web_plate_w_req = gauge + 2 * min_edge_dist
- end_dist = (web_plate_w - gauge)/2
-
- if web_plate_w == 0:
- if bolt_line == 1:
- web_plate_w_req = 2 * min_edge_dist;
- web_plate_w = web_plate_w_req
- end_dist = web_plate_w /2
- if bolt_line == 2:
- web_plate_w_req = gauge + 2 * min_edge_dist;
- web_plate_w = web_plate_w_req;
- end_dist = (web_plate_w - gauge)/2
-
-
- # if web_plate_w < web_plate_w_req:
- # web_plate_w = web_plate_w_req;
-
- # Moment capacity of web plate
- moment_capacity = 1.2 * (web_plate_fy/1.1) * (web_plate_t * web_plate_l * web_plate_l)/6 * 0.001;
- moment_capacity = round(moment_capacity * 0.001,3);
-
- if moment_capacity > moment_demand:
- pass
- else:
- logger.error(": Plate moment capacity is less than the moment demand")
-
- logger.warning(": Re-design with increased plate dimensions")
-
-
- # Plate dimension optimisation
-
- web_plate_l_req1 = math.sqrt((moment_demand*1000*6*1.1)/(1.2*beam_fy*web_plate_t));
- # Single line of bolts
- if bolt_line == 1:
- web_plate_l_req2 = (bolts_required-1) * min_pitch + 2 * min_edge_dist;
- if web_plate_l == 0 or web_plate_l == min_plate_height or web_plate_l == max_plate_height:
- web_plate_l_req = max(web_plate_l_req1, web_plate_l_req2, web_plate_l);
- else:
- web_plate_l_req = max(web_plate_l_req1, web_plate_l_req2,min_plate_height);
-
- # Multi line of bolts
- if bolt_line == 2:
- web_plate_l_req2 = (bolts_one_line-1) * min_pitch + 2 * min_edge_dist;
-
- if web_plate_l == 0 or web_plate_l == min_plate_height or web_plate_l == max_plate_height:
- web_plate_l_req = max(web_plate_l_req1, web_plate_l_req2, web_plate_l);
- elif web_plate_l > min_plate_height or web_plate_l < max_plate_height:
- web_plate_l_req = max(web_plate_l_req1, web_plate_l_req2, min_plate_height);
-
- if web_plate_l != min_plate_height +10 or web_plate_l != (max_plate_height-10)//10*10 :
- pass
- else:
- if web_plate_l < web_plate_l_req:
- logger.error(": Plate height provided is less than the minimum required")
-
- if web_plate_w < web_plate_w_req:
-
- logger.error(": Plate width provided is less than the minimum required")
- logger.warning(": Minimum plate width required is %2.2f mm " %(web_plate_w_req))
-
- ##################################################################################
- ## Weld design
- # V: Weld shear strength -------------------
- weld_l = web_plate_l - weld_t * 2;
-
- #direct shear
- Vy1 = shear_load *1000 /float(2*weld_l);
-
- #shear due to moment
- xCritical = 0; #single line weld
- yCritical = weld_l * 0.5; #single line weld
-
- Ip = weld_l * weld_l * weld_l / 12;
-
- Vx = moment_demand * yCritical *1000000 / (2 * Ip);
- Vy2 = moment_demand * xCritical * 1000000 / (2 * Ip);
-
- Vr = math.sqrt(Vx ** 2 + (Vy1 + Vy2) ** 2);
- Vr = round(Vr,3);
-
- weld_strength = 0.7 * weld_t * weld_fu / (math.sqrt(3) * 1.25);
- weld_strength = round(weld_strength,3);
-
- weld_t_req = (Vr * (math.sqrt(3) * 1.25))/(0.7 * weld_fu) ;
-
- if weld_t_req != int(weld_t_req):
- weld_t_req = int(weld_t_req) + 1;
- else:
- weld_t_req = weld_t_req;
-
- if weld_t >= weld_t_req:
- pass
- else:
- logger.error(": Weld thickness is not sufficient")
- logger.warning(": Minimum weld thickness is required is %2.2f mm " % (weld_t_req))
-
- # End of calculation
- outputObj = {}
- outputObj['Bolt'] ={}
- outputObj['Bolt']['status'] = True
- outputObj['Bolt']['shearcapacity'] = bolt_shear_capacity
- outputObj['Bolt']['bearingcapacity'] = bolt_bearing_capacity
- outputObj['Bolt']['boltcapacity'] = bolt_capacity
- outputObj['Bolt']['numofbolts'] = bolts_required
- outputObj['Bolt']['boltgrpcapacity'] = bolt_group_capacity
- outputObj['Bolt']['numofrow'] = bolts_one_line
- outputObj['Bolt']['numofcol'] = bolt_line
- outputObj['Bolt']['pitch'] = pitch
- outputObj['Bolt']['enddist'] = float(end_dist)
- outputObj['Bolt']['edge'] = float(min_edge_dist)
- outputObj['Bolt']['gauge'] = float(gauge)
-
- outputObj['Weld'] = {}
- outputObj['Weld']['thickness'] = weld_t_req
- outputObj['Weld']['resultantshear'] = Vr
- outputObj['Weld']['weldstrength'] = weld_strength
-
- outputObj['Plate'] = {}
- outputObj['Plate']['minHeight'] = web_plate_l_req
- outputObj['Plate']['minWidth'] = web_plate_w_req
- outputObj['Plate']['externalmoment'] = moment_demand
- outputObj['Plate']['momentcapacity'] = moment_capacity
- outputObj['Plate']['height'] = float(web_plate_l)
- outputObj['Plate']['width'] = float(web_plate_w)
-
-
- #return outputObj
-
- if web_plate_l == (min_plate_height+10) or web_plate_l == ((max_plate_height-10)//10*10):
- if bolt_line==1:
- if web_plate_l == min_plate_height or web_plate_l == max_plate_height or web_plate_l < web_plate_l_req or web_plate_w < web_plate_w_req or weld_t_req > weld_t:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
- elif moment_capacity < moment_demand:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
-
- if bolt_line==2:
- if pitch < min_pitch:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
- elif web_plate_l == min_plate_height or web_plate_l == max_plate_height or web_plate_l < web_plate_l_req or web_plate_w < web_plate_w_req or weld_t_req > weld_t:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
- elif moment_capacity < moment_demand:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
- else:
-
- pass
-
- else:
- if web_plate_l == min_plate_height or web_plate_l == max_plate_height or web_plate_l < web_plate_l_req or web_plate_w < web_plate_w_req or weld_t_req > weld_t:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
- elif moment_capacity < moment_demand:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
- elif bolt_line==2:
- if pitch < min_pitch:
- for k in outputObj.keys():
- for key in outputObj[k].keys():
- outputObj[k][key] = ""
-
-# outputObj = {}
- if outputObj['Bolt']['status'] == True:
-
- logger.info(": Overall finplate connection design is safe \n")
- logger.debug(" :=========End Of design===========")
-
- else:
- logger.error(": Design is not safe \n ")
- logger.debug(" :=========End Of design===========")
-
- return outputObj
-
-
-
-
-
-
diff --git a/Connections/Shear/Finplate/finPlateMain.py b/Connections/Shear/Finplate/finPlateMain.py
index 1d677b4..03faffb 100644
--- a/Connections/Shear/Finplate/finPlateMain.py
+++ b/Connections/Shear/Finplate/finPlateMain.py
@@ -8,14 +8,13 @@ from PyQt4.QtCore import QString, pyqtSignal
from OCC.TopoDS import topods, TopoDS_Shape
from OCC.gp import gp_Pnt
from nutBoltPlacement import NutBoltArray
-from PyQt4.Qt import QScrollBar
from OCC import VERSION, BRepTools
from ui_finPlate import Ui_MainWindow
from model import *
from finPlateCalc import finConn
import yaml
import pickle
-from OCC.BRepAlgoAPI import BRepAlgoAPI_Fuse, BRepAlgoAPI_Cut
+from OCC.BRepAlgoAPI import BRepAlgoAPI_Fuse
from OCC._Quantity import Quantity_NOC_RED,Quantity_NOC_BLUE1,Quantity_NOC_SADDLEBROWN
from ISection import ISection
from OCC.Graphic3d import Graphic3d_NOT_2D_ALUMINUM
diff --git a/saveINPUT.txt b/saveINPUT.txt
index 1b66f24..f40487c 100644
--- a/saveINPUT.txt
+++ b/saveINPUT.txt
@@ -4,7 +4,7 @@ p1
(dp2
S'ColumSection'
p3
-S'ISMC 300'
+S'ISSC 150*'
p4
sS'fu (MPa)'
p5
@@ -18,7 +18,7 @@ p8
I250
sS'Connectivity'
p9
-S'Column flange-Beam web'
+S'Column web-Beam web'
p10
ssS'Plate'
p11
@@ -31,7 +31,7 @@ p14
I300
sS'Thickness (mm)'
p15
-I20
+I10
ssS'Load'
p16
(dp17