diff options
Diffstat (limited to 'Connections/Shear/Finplate/finPlateMain.py')
-rw-r--r-- | Connections/Shear/Finplate/finPlateMain.py | 222 |
1 files changed, 126 insertions, 96 deletions
diff --git a/Connections/Shear/Finplate/finPlateMain.py b/Connections/Shear/Finplate/finPlateMain.py index d42cf3b..f07dca3 100644 --- a/Connections/Shear/Finplate/finPlateMain.py +++ b/Connections/Shear/Finplate/finPlateMain.py @@ -8,14 +8,14 @@ from PyQt4.QtCore import QString, pyqtSignal from OCC.TopoDS import topods, TopoDS_Shape from OCC.gp import gp_Pnt from nutBoltPlacement import NutBoltArray -from OCC import VERSION, BRepTools, OSD +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 -from OCC._Quantity import Quantity_NOC_RED,Quantity_NOC_BLUE1,Quantity_NOC_SADDLEBROWN +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 from weld import Weld @@ -24,7 +24,7 @@ from bolt import Bolt from nut import Nut import os.path from utilities import osdagDisplayShape -from OCC.Display.pyqt4Display import qtViewer3d +from OCC.Display.qtDisplay import qtViewer3d from colWebBeamWebConnectivity import ColWebBeamWeb from colFlangeBeamWebConnectivity import ColFlangeBeamWeb from OCC import IGESControl @@ -33,8 +33,7 @@ from OCC.STEPControl import STEPControl_Writer, STEPControl_AsIs from OCC.Interface import Interface_Static_SetCVal from OCC.IFSelect import IFSelect_RetDone from OCC.StlAPI import StlAPI_Writer -from drawing_2D import Fin2DCreatorFront -import svgwrite +from drawing_2D import FinCommonData # Developed by deepa class MainController(QtGui.QMainWindow): @@ -45,8 +44,6 @@ class MainController(QtGui.QMainWindow): self.ui = Ui_MainWindow() self.ui.setupUi(self) - self.ui.comboConnLoc.currentIndexChanged[str].connect(self.setimage_connection) - #self.ui.comboConnLoc.currentIndexChanged[str].connect(self.changeColtoBeamSection) self.ui.combo_Beam.addItems(get_beamcombolist()) self.ui.comboColSec.addItems(get_columncombolist()) @@ -60,7 +57,7 @@ class MainController(QtGui.QMainWindow): self.ui.comboType.setCurrentIndex(0) - + self.ui.comboConnLoc.currentIndexChanged[str].connect(self.setimage_connection) self.retrieve_prevstate() self.ui.btnInput.clicked.connect(lambda: self.dockbtn_clicked(self.ui.inputDock)) self.ui.btnOutput.clicked.connect(lambda: self.dockbtn_clicked(self.ui.outputDock)) @@ -145,16 +142,6 @@ class MainController(QtGui.QMainWindow): self.fuse_model = None self.disableViewButtons() - def changeColtoBeamSection(self): - if self.ui.comboConnLoc.currentText() == "Beam-Beam": - self.ui.lbl_ISsection.setText("Beam section") - self.ui.comboColSec.clear() - self.ui.comboColSec.addItems(get_beamcombolist()) - else: - self.ui.lbl_ISsection.setText("Column section") - self.ui.comboColSec.clear() - self.ui.comboColSec.addItems(get_beamcombolist()) - def showFontDialogue(self): font, ok = QtGui.QFontDialog.getFont() @@ -164,11 +151,12 @@ class MainController(QtGui.QMainWindow): self.ui.textEdit.setFont(font) def callZoomin(self): - self.display.ZoomFactor(1.5) + self.display.ZoomFactor(2) def callZoomout(self): self.display.ZoomFactor(0.5) + def callRotation(self): self.display.Rotation(15,0) def call_Pannig(self): @@ -213,6 +201,7 @@ class MainController(QtGui.QMainWindow): self.ui.chkBxFinplate.setEnabled(True) def fillPlateThickCombo(self): + '''Populates the plate thickness on the basis of beam web thickness and plate thickness check ''' dictbeamdata = self.fetchBeamPara() @@ -231,6 +220,8 @@ class MainController(QtGui.QMainWindow): def populateWeldThickCombo(self): ''' Returns the weld thickness on the basis column flange and plate thickness check + ThickerPart between column Flange and plate thickness again get checked according to the IS 800 Table 21 (Name of the table :Minimum Size of First Rum or of a + Single Run Fillet Weld) ''' newlist = ["Select weld thickness"] weldlist = [3,4,5,6,8,10,12,16] @@ -305,23 +296,22 @@ class MainController(QtGui.QMainWindow): self.ui.lbl_connectivity.show() loc = self.ui.comboConnLoc.currentText() if loc == "Column flange-Beam web": - pixmap = QtGui.QPixmap(":/newPrefix/images/colF2.png") - pixmap.scaledToHeight(600) - pixmap.scaledToWidth(55) + pixmap.scaledToHeight(60) + pixmap.scaledToWidth(50) self.ui.lbl_connectivity.setPixmap(pixmap) #self.ui.lbl_connectivity.show() elif(loc == "Column web-Beam web"): picmap = QtGui.QPixmap(":/newPrefix/images/colW3.png") picmap.scaledToHeight(60) - picmap.scaledToWidth(55) + picmap.scaledToWidth(50) self.ui.lbl_connectivity.setPixmap(picmap) else: self.ui.lbl_connectivity.hide() def getuser_inputs(self): - '''(nothing) -> Dictionary + '''(none) -> Dictionary Returns the dictionary object with the user input fields for designing fin plate connection @@ -411,6 +401,7 @@ class MainController(QtGui.QMainWindow): def save_design(self): + self.outdict = self.outputdict() self.inputdict = self.getuser_inputs() self.save_yaml(self.outdict,self.inputdict) @@ -442,7 +433,7 @@ class MainController(QtGui.QMainWindow): #QtGui.QMessageBox.about(self,'Information',"File saved") - + ################ def save_yaml(self,outObj,uiObj): '''(dictiionary,dictionary) -> NoneType Saving input and output to file in following format. @@ -517,7 +508,7 @@ class MainController(QtGui.QMainWindow): def dockbtn_clicked(self,widget): - '''(QWidget) -> NoneType + '''(QWidget) -> None This method dock and undock widget(QdockWidget) ''' @@ -531,7 +522,7 @@ class MainController(QtGui.QMainWindow): def combotype_currentindexchanged(self,index): - '''(Number) -> NoneType + '''(Number) -> None ''' items = self.gradeType[str(index)] @@ -545,7 +536,7 @@ class MainController(QtGui.QMainWindow): def check_range(self, widget,lblwidget, minVal, maxVal): - '''(QlineEdit,QLable,Number,Number)---> NoneType + '''(QlineEdit, QLable, Number, Number)---> None Validating F_u(ultimate Strength) and F_y (Yeild Strength) textfields ''' textStr = widget.text() @@ -632,7 +623,7 @@ class MainController(QtGui.QMainWindow): This method displaying Design messages(log messages)to textedit widget. ''' - afile = QtCore.QFile('./Connections/Shear/Finplate/fin.log') + afile = QtCore.QFile('./fin.log') if not afile.open(QtCore.QIODevice.ReadOnly):#ReadOnly QtGui.QMessageBox.information(None, 'info', afile.errorString()) @@ -652,11 +643,11 @@ class MainController(QtGui.QMainWindow): 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 PySide import QtCore, QtGui +# return 'pyside' +# except: +# pass try: from PyQt4 import QtCore, QtGui return 'pyqt4' @@ -687,11 +678,8 @@ class MainController(QtGui.QMainWindow): 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 - + from OCC.Display.qtDisplay import qtViewer3d + self.ui.modelTab = qtViewer3d(self) #self.ui.model2dTab = qtViewer3d(self) @@ -707,7 +695,7 @@ class MainController(QtGui.QMainWindow): # background gradient display.set_bg_gradient_color(23,1,32,23,1,32) - #display.set_bg_gradient_color(255,255,255,255,255,255) + #display_2d.set_bg_gradient_color(255,255,255,255,255,255) # display black trihedron display.display_trihedron() display.View.SetProj(1, 1, 1) @@ -725,10 +713,10 @@ class MainController(QtGui.QMainWindow): def display3Dmodel(self, component): self.display.EraseAll() + self.display.SetModeShaded() display.DisableAntiAliasing() self.display.set_bg_gradient_color(23,1,32,23,1,32) - #self.display.set_bg_gradient_color(186,195,201,255,255,255) self.display.View_Front() self.display.View_Iso() self.display.FitAll() @@ -759,18 +747,89 @@ class MainController(QtGui.QMainWindow): def fetchBeamPara(self): beam_sec = self.ui.combo_Beam.currentText() dictbeamdata = get_beamdata(beam_sec) + print dictbeamdata return dictbeamdata def fetchColumnPara(self): column_sec = self.ui.comboColSec.currentText() dictcoldata = get_columndata(column_sec) + print dictcoldata return dictcoldata + def boltHeadThick_Calculation(self,boltDia): + ''' + This routine takes the bolt diameter and return bolt head thickness as per IS:3757(1989) + + bolt Head Dia + <--------> + __________ + | | | T = Thickness + |________| | + | | + | | + | | + + ''' + dict = {5:4, 6:5, 8:6, 10:7, 12:8, 16:10, 20:12.5, 22:14, 24:15, 27:17, 30:18.7, 36:22.5 } + return dict[boltDia] + + + def boltHeadDia_Calculation(self,boltDia): + ''' + This routine takes the bolt diameter and return bolt head diameter as per IS:3757(1989) + + bolt Head Dia + <--------> + __________ + | | + |________| + | | + | | + | | + + ''' + dict = {5:7, 6:8, 8:10, 10:15, 12:20, 16:27, 20:34, 22:36, 24:41, 27:46, 30:50, 36:60 } + return dict[boltDia] + + def boltLength_Calculation(self,boltDia): + ''' + This routine takes the bolt diameter and return bolt head diameter as per IS:3757(1985) + + bolt Head Dia + <--------> + __________ ______ + | | | + |________| | + | | | + | | | + | | | + | | | + | | | l= length + | | | + | | | + | | | + |__| ___|__ + + ''' + dict = {5:40, 6:40, 8:40, 10:40, 12:40, 16:50, 20:50, 22:50, 24:50, 27:60, 30:65, 36:75 } + + return dict[boltDia] + + def nutThick_Calculation(self,boltDia): + ''' + Returns the thickness of the nut depending upon the nut diameter as per IS1363-3(2002) + ''' + dict = {5:5, 6:5.65, 8:7.15, 10:8.75, 12:11.3, 16:15, 20:17.95, 22:19.0, 24:21.25, 27:23, 30:25.35, 36:30.65 } + + return dict[boltDia] + def create3DColWebBeamWeb(self): ''' creating 3d cad model with column web beam web + ''' uiObj = self.getuser_inputs() + print uiObj resultObj = finConn(uiObj) dictbeamdata = self.fetchBeamPara() @@ -811,12 +870,13 @@ class MainController(QtGui.QMainWindow): plate_thick = uiObj['Plate']['Thickness (mm)'] bolt_dia = uiObj["Bolt"]["Diameter (mm)"] bolt_r = bolt_dia/2 - bolt_R = bolt_r + 7 + bolt_R = self.boltHeadDia_Calculation(bolt_dia) /2 nut_R = bolt_R - bolt_T = 10.0 # minimum bolt thickness As per Indian Standard - bolt_Ht = 50.0 # minimum bolt length as per Indian Standard IS 3750(1985) - nut_T = 12.0 # minimum nut thickness As per Indian Standard - nut_Ht = 12.2 # + bolt_T = self.boltHeadThick_Calculation(bolt_dia) + bolt_Ht = self.boltLength_Calculation(bolt_dia) + #bolt_Ht = 50.0 # minimum bolt length as per Indian Standard IS 3757(1989) + nut_T = self.nutThick_Calculation(bolt_dia)# bolt_dia = nut_dia + nut_Ht = 12.2 #150 #plate = Plate(L= 300,W =100, T = 10) plate = Plate(L= fillet_length,W =plate_width, T = plate_thick) @@ -890,11 +950,15 @@ class MainController(QtGui.QMainWindow): plate_thick = uiObj['Plate']['Thickness (mm)'] bolt_dia = uiObj["Bolt"]["Diameter (mm)"] bolt_r = bolt_dia/2 - bolt_R = bolt_r + 7 + bolt_R = self.boltHeadDia_Calculation(bolt_dia) /2 + #bolt_R = bolt_r + 7 nut_R = bolt_R - bolt_T = 10.0 # minimum bolt thickness As per Indian Standard - bolt_Ht = 50.0 # minimum bolt length as per Indian Standard - nut_T = 12.0 # minimum nut thickness As per Indian Standard + bolt_T = self.boltHeadThick_Calculation(bolt_dia) + #bolt_T = 10.0 # minimum bolt thickness As per Indian Standard + bolt_Ht = self.boltLength_Calculation(bolt_dia) + # bolt_Ht =100.0 # minimum bolt length as per Indian Standard + nut_T = self.nutThick_Calculation(bolt_dia)# bolt_dia = nut_dia + #nut_T = 12.0 # minimum nut thickness As per Indian Standard nut_Ht = 12.2 # #plate = Plate(L= 300,W =100, T = 10) @@ -965,7 +1029,7 @@ class MainController(QtGui.QMainWindow): self.display3Dmodel("Beam") - def call_3DColumn(self): + def call_3DColumn(self): ''' ''' if self.ui.chkBxCol.isChecked(): @@ -1008,6 +1072,7 @@ class MainController(QtGui.QMainWindow): status = resultObj['Bolt']['status'] self.call_3DModel(status) + self.call2D_Drawing() def create2Dcad(self,connectivity): ''' Returns the fuse model of finplate @@ -1143,8 +1208,7 @@ class MainController(QtGui.QMainWindow): self.fuse_model = self.create2Dcad(self.connectivity) self.display2DModel( self.fuse_model,"Front") - #self.mkAndSaveSvg(self.connectivity) - self.call2D_Drawing() + else: self.display.EraseAll() self.ui.mytabWidget.setCurrentIndex(0) @@ -1152,21 +1216,21 @@ class MainController(QtGui.QMainWindow): self.connectivity = self.create3DColFlangeBeamWeb() if self.fuse_model == None: self.fuse_model = self.create2Dcad(self.connectivity) - self.display2DModel( self.fuse_model,"Left") - - def mkAndSaveSvg(self, connectivity): - conXZ = ColWebBeamWebXZ(connectivity) - conXZDwg = conXZ.mkOSDAGDrawing2D('test.svg') - conXZDwg.saveSvg() + self.display2DModel( self.fuse_model,"Left") + + def call2D_Drawing(self): + ''' This routine saves the 2D SVG image as per the connectivity selected + SVG image created through svgwrite pacage which takes design INPUT and OUTPUT parameters from Finplate GUI. + ''' uiObj = self.getuser_inputs() resultObj = finConn(uiObj) dictbeamdata = self.fetchBeamPara() dictcoldata = self.fetchColumnPara() - fin2DFront = Fin2DCreatorFront(uiObj,resultObj,dictbeamdata,dictcoldata) - fin2DFront.saveToSvg() + finCommonObj = FinCommonData(uiObj,resultObj,dictbeamdata,dictcoldata) + finCommonObj.saveToSvg() def call_Topview(self): @@ -1246,7 +1310,7 @@ def set_osdaglogger(): logger.setLevel(logging.DEBUG) # create the logging file handler - fh = logging.FileHandler("./Connections/Shear/Finplate/fin.log", mode="a") + 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') @@ -1281,43 +1345,9 @@ def launchFinPlateController(osdagMainWindow): window.closed.connect(osdagMainWindow.show) #sys.exit(app.exec_()) - -class ColWebBeamWebXZ(): - def __init__(self, connectivity): - self.A = (0, 0) - self.B = (0, 80) - self.C = (20, 80) - self.D = (20, 0) - self.E = (7, 80) - self.F = (13, 80) - self.G = (13, 0) - self.H = (7, 0) - - def mkOSDAGDrawing2D(self, fileName): - - dwg = OSDAGDrawing2D(fileName) - dwg.line() - dwg.add(dwg.line(self.A, self.B,stroke='blue', stroke_width =2.0, stroke_linecap='square')) - dwg.add(dwg.line(self.B, self.C, stroke='blue', stroke_width =2.0, stroke_linecap='square')) - dwg.add(dwg.line(self.C, self.D, stroke='blue', stroke_width =2.0, stroke_linecap='square')) - #dwg.add(dwg.line(self.D, self.E, stroke=svgwrite.rgb(0, 0, 255, '%'))) - dwg.add(dwg.line(self.D, self.A, stroke='blue', stroke_width =2.0, stroke_linecap='square')) - dwg.add(dwg.line(self.E, self.H, stroke='red', stroke_width =1.2,stroke_linecap ='butt' )) - dwg.add(dwg.line(self.F, self.G, stroke='red', stroke_width =2.0, stroke_linecap='square')) - #dwg.add(dwg.text('Test', insert=(0, 0.2), fill='red')) - return dwg -class OSDAGDrawing2D(svgwrite.Drawing): - - def __init__(self, fileName): - svgwrite.Drawing.__init__(self, fileName, profile = 'tiny') - - def saveSvg(self): - #dwg.add(dwg.line((0, 0), (10, 0), stroke=svgwrite.rgb(10, 10, 16, '%'))) - #dwg.add(dwg.text('Test', insert=(0, 0.2), fill='red')) - self.save() if __name__ == '__main__': #launchFinPlateController(None) |