├── .gitignore ├── LICENSE ├── README.md ├── about_box ├── about.py ├── about.ui ├── readme.md └── ui_about.py ├── combine_bits ├── CCPL.txt ├── README.md ├── combine_allin1_folder │ ├── CCPL.txt │ ├── combine_allin1.py │ ├── qrc_combine2.py │ ├── qrc_combine3.py │ └── readme_combine_allin1.txt ├── combine_alter_folder │ ├── CCPL.txt │ ├── combine_alter.py │ ├── qrc_combine2.py │ ├── qrc_combine3.py │ ├── readme_combine_alter.txt │ └── ui_combine.py ├── combine_folder │ ├── CCPL.txt │ ├── combine-STAGE1.py │ ├── combine.py │ ├── qrc_combine2.py │ ├── qrc_combine3.py │ ├── readme_combine.md │ └── ui_combine.py ├── designer │ ├── combine.ui │ ├── readme.md │ └── ui_combine.py ├── icons │ ├── __init__.py │ ├── combine.qrc │ ├── qrc_combine2.py │ ├── qrc_combine3.py │ ├── readme.md │ └── select_tango │ │ └── 32x32 │ │ ├── actions │ │ ├── document-new.png │ │ ├── document-open.png │ │ ├── document-print.png │ │ ├── document-save-as.png │ │ ├── document-save.png │ │ ├── edit-find-replace.png │ │ ├── go-home.png │ │ ├── go-jump.png │ │ ├── process-stop.png │ │ ├── system-log-out.png │ │ └── view-refresh.png │ │ ├── apps │ │ ├── help-browser.png │ │ └── preferences-system-session.png │ │ └── devices │ │ └── media-floppy.png └── trash │ └── ui_combine.py ├── quit_prog ├── quitter.py ├── quitter.ui ├── quitter_alt.py ├── readme.md └── ui_quitter.py ├── show_licence ├── CCPL.txt ├── licence.py ├── licence.ui ├── readme.md └── ui_licence.py ├── truss ├── CCPL.txt ├── COPYING.txt ├── README.html ├── README.md ├── dat │ ├── sdtruss0.dat │ ├── sdtruss0.out │ ├── sdtruss1.dat │ ├── sdtruss2.dat │ ├── sdtruss3.dat │ └── sdtruss4.dat ├── ncrunch.py ├── out │ ├── sdtruss0.out │ ├── sdtruss1.out │ ├── sdtruss2.out │ ├── sdtruss3.out │ └── sdtruss4.out ├── qrc_truss.py ├── tango4truss │ ├── 32x32 │ │ ├── actions │ │ │ ├── address-book-new.png │ │ │ ├── document-new.png │ │ │ ├── document-open.png │ │ │ ├── document-print.png │ │ │ ├── document-save-as.png │ │ │ ├── document-save.png │ │ │ ├── edit-find-replace.png │ │ │ ├── go-home.png │ │ │ ├── go-jump.png │ │ │ ├── process-stop.png │ │ │ ├── system-log-out.png │ │ │ └── view-refresh.png │ │ ├── apps │ │ │ ├── help-browser.png │ │ │ └── preferences-system-session.png │ │ └── devices │ │ │ └── media-floppy.png │ ├── AUTHORS │ ├── COPYING │ └── README ├── truss.py └── truss.qrc ├── truss3 ├── CCPL.txt ├── README.md ├── dat │ ├── sdtruss0.dat │ ├── sdtruss0.out │ ├── sdtruss1.dat │ ├── sdtruss2.dat │ ├── sdtruss3.dat │ └── sdtruss4.dat ├── ncrunch.py ├── out │ ├── sdtruss0.out │ ├── sdtruss1.out │ ├── sdtruss2.out │ ├── sdtruss3.out │ └── sdtruss4.out ├── qrc_truss.py ├── tango4truss │ ├── 32x32 │ │ ├── actions │ │ │ ├── address-book-new.png │ │ │ ├── document-new.png │ │ │ ├── document-open.png │ │ │ ├── document-print.png │ │ │ ├── document-save-as.png │ │ │ ├── document-save.png │ │ │ ├── edit-find-replace.png │ │ │ ├── go-home.png │ │ │ ├── go-jump.png │ │ │ ├── process-stop.png │ │ │ ├── system-log-out.png │ │ │ └── view-refresh.png │ │ ├── apps │ │ │ ├── help-browser.png │ │ │ └── preferences-system-session.png │ │ └── devices │ │ │ └── media-floppy.png │ ├── AUTHORS │ ├── COPYING │ └── README ├── truss.py ├── truss.qrc └── try.out └── wiki-src └── PySideSimplicissimus └── simplicissimus /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | 3 | # C extensions 4 | *.so 5 | 6 | # Packages 7 | *.egg 8 | *.egg-info 9 | dist 10 | build 11 | eggs 12 | parts 13 | bin 14 | var 15 | sdist 16 | develop-eggs 17 | .installed.cfg 18 | lib 19 | lib64 20 | __pycache__ 21 | 22 | # Installer logs 23 | pip-log.txt 24 | 25 | # Unit test / coverage reports 26 | .coverage 27 | .tox 28 | nosetests.xml 29 | 30 | # Translations 31 | *.mo 32 | 33 | # Mr Developer 34 | .mr.developer.cfg 35 | .project 36 | .pydevproject 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Tuts for PySide 2 | =============== 3 | 4 | ### Thank You! 5 | 6 | Thanks to all the developers of PySide, who shared their work and expertise 7 | in the PySide system and examples. Particularly thank you for your forbearance 8 | and patience when sharing your expertise with the less experienced PySide users. 9 | 10 | I am particularly grateful to **Aaron Richiger**, who made many valuable suggestions 11 | and introduced me to github. Learning is easy when expert help is at hand! 12 | 13 | ###PySide Newbie Tutorials 14 | 15 | The following are small examples for real newbies: 16 | 17 | 1. about box - shows about box with os information. 18 | 2. show licence - reads and displays licence information. 19 | 3. quit prog - provides additional button to close program. 20 | 4. combine bits - combines all of the above into a coherent small program 21 | 5. truss - solves statically determinate truss, almost real problem. 22 | 23 | The last item of the list develops Python code separately from its GUI. 24 | 25 | Al. Kabaila 2014-01-09, Canberra, Australia 26 | 27 | -------------------------------------------------------------------------------- /about_box/about.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2010-2011, 2013 by Algis Kabaila. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # about.py - display about box with info on platform etc. 9 | 10 | import sys 11 | import platform 12 | 13 | import PySide 14 | from PySide.QtGui import (QApplication, QMainWindow, QMessageBox) 15 | 16 | from ui_about import Ui_MainWindow 17 | 18 | __version__ = '3.1.0' 19 | 20 | class MainWindow(QMainWindow, Ui_MainWindow): 21 | def __init__(self, parent=None): 22 | super(MainWindow, self).__init__(parent) 23 | self.setupUi(self) 24 | self.resize(600, 250) 25 | self.aboutButton.clicked.connect(self.about) 26 | 27 | def about(self): 28 | '''Popup a box with about message.''' 29 | QMessageBox.about(self, "About PySide, Platform and version.", 30 | """ about.py version %s 31 |

Copyright © 2013 by Algis Kabaila. 32 | This work is made available under the terms of 33 | Creative Commons Attribution-ShareAlike 3.0 license, 34 | http://creativecommons.org/licenses/by-sa/3.0/. 35 |

This application is useful for displaying 36 | Qt version and other details. 37 |

Python %s - PySide version %s - Qt version %s on %s""" % 38 | (__version__, platform.python_version(), PySide.__version__, 39 | PySide.QtCore.__version__, platform.system())) 40 | 41 | if __name__ == '__main__': 42 | app = QApplication(sys.argv) 43 | frame = MainWindow() 44 | frame.show() 45 | sys.exit(app.exec_()) 46 | 47 | -------------------------------------------------------------------------------- /about_box/about.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 654 10 | 467 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | &About 22 | 23 | 24 | 25 | 26 | 27 | 28 | Qt::Horizontal 29 | 30 | 31 | 32 | 548 33 | 26 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | Qt::Vertical 42 | 43 | 44 | 45 | 20 46 | 355 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 0 57 | 0 58 | 654 59 | 29 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /about_box/readme.md: -------------------------------------------------------------------------------- 1 | This readme is for *about_box* 2 | ============================== 3 | 4 | To run this program, enter 5 | 6 | * **python about.py** 7 | 8 | where python is either python 3.x or python 2.x 9 | -------------------------------------------------------------------------------- /about_box/ui_about.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'about.ui' 4 | # 5 | # Created: Fri Sep 16 13:21:15 2011 6 | # by: pyside-uic 0.2.8 running on PySide 1.0.1 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(654, 467) 16 | self.centralwidget = QtGui.QWidget(MainWindow) 17 | self.centralwidget.setObjectName("centralwidget") 18 | self.gridLayout = QtGui.QGridLayout(self.centralwidget) 19 | self.gridLayout.setObjectName("gridLayout") 20 | self.aboutButton = QtGui.QPushButton(self.centralwidget) 21 | self.aboutButton.setObjectName("aboutButton") 22 | self.gridLayout.addWidget(self.aboutButton, 0, 0, 1, 1) 23 | spacerItem = QtGui.QSpacerItem(548, 26, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) 24 | self.gridLayout.addItem(spacerItem, 0, 1, 1, 1) 25 | spacerItem1 = QtGui.QSpacerItem(20, 355, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) 26 | self.gridLayout.addItem(spacerItem1, 1, 0, 1, 1) 27 | MainWindow.setCentralWidget(self.centralwidget) 28 | self.menubar = QtGui.QMenuBar(MainWindow) 29 | self.menubar.setGeometry(QtCore.QRect(0, 0, 654, 29)) 30 | self.menubar.setObjectName("menubar") 31 | MainWindow.setMenuBar(self.menubar) 32 | self.statusbar = QtGui.QStatusBar(MainWindow) 33 | self.statusbar.setObjectName("statusbar") 34 | MainWindow.setStatusBar(self.statusbar) 35 | 36 | self.retranslateUi(MainWindow) 37 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 38 | 39 | def retranslateUi(self, MainWindow): 40 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 41 | self.aboutButton.setText(QtGui.QApplication.translate("MainWindow", "&About", None, QtGui.QApplication.UnicodeUTF8)) 42 | 43 | -------------------------------------------------------------------------------- /combine_bits/README.md: -------------------------------------------------------------------------------- 1 | 2 | README.md for *combine_bits* section 3 | ===================================== 4 | 5 | ### Introduction 6 | 7 | Returning to this work after an interruption of several months, I thought this section looked like a proverbial **dog's breakfast**, so I shall re-organise it. 8 | 9 | ### Thank you 10 | 11 | My sincere gratitude to **Aaron Richiger**, a guru of PySide who made some valuable suggestions, without ever discouraging. The errors and inadequacies are all mine and mine alone. 12 | 13 | ### Sequence 14 | 15 | 1. combine-STAGE1.py 16 | 2. combine.py 17 | 3. combine_allin1.py 18 | 4. combine_alter.py 19 | 20 | ### Separation into subdirectories 21 | 22 | The information shared by each of the methods of combining the three parts of the program (**about_box, quit_prog and show_licence**) are in two directories: **designer** and **icons**. The combine.py, combine_alter.py and the combine_allin1.py will require the data from **designer** and **icons** directories. The readme.md in each of these two directories briefly describe what is to be done in each of these. 23 | 24 | So the directoy structure of **combine_bits** has the following subdirectories: 25 | 26 | * icons 27 | * designer 28 | * combine_folder 29 | * combine_alter_folder 30 | * combine_allin1_folder 31 | 32 | ### *combine_folder* directory. 33 | 34 | In this directory are the following main programs: 35 | 36 | * **combine-STAGE1.py** 37 | * **combine.py** 38 | 39 | **STAGE1** is a fully functional program, but it lacks icons and some other "trimmings"; **combine.py** has icons etc. 40 | It is the 'finished product', as far as this tutorial is concerned. If you wish to skip the rest of this tutorial, this may be the right place for it. 41 | 42 | Other versions of this program are there two show different ways to achieve the same objectives. 43 | 44 | ### *combine_alter_folder* directory 45 | 46 | Another popular way of proceeding, which avoids the use of double inheritance. 47 | 48 | ### *combine_allin1_folder* directory 49 | 50 | A program that avoids qt-designer created files. For the fearless. I cheated by copying parts of the qt-designer made files. 51 | 52 | Al Kabaila, 2014-01-09 53 | 54 | -------------------------------------------------------------------------------- /combine_bits/combine_allin1_folder/combine_allin1.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2010-2011, 2013 Algis Kabaila. All rights reserved. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # combine.py - combination of ShowGPL, About, Close scripts 9 | # The purpose of this version of program is to show implementation 10 | # of most code in one file - all_in_1!. The Ui_MainWindow is eliminated 11 | # and does not appear in the program. 12 | 13 | import sys 14 | import platform 15 | 16 | import PySide 17 | 18 | from PySide.QtCore import QRect 19 | from PySide.QtGui import (QApplication, QMainWindow, QMessageBox, 20 | QIcon, QAction, QWidget, QGridLayout, 21 | QTextEdit, QMenuBar, QMenu, QStatusBar) 22 | 23 | __version__ = '3.1.5' 24 | 25 | if int(platform.python_version()[0]) < 3: 26 | import qrc_combine2 27 | else: 28 | import qrc_combine3 29 | 30 | class MainWindow(QMainWindow): 31 | def __init__(self, parent=None): 32 | super(MainWindow, self).__init__(parent) 33 | self.resize(730, 475) 34 | self.setWindowTitle('Combine Code Blocks.') 35 | centralwidget = QWidget(self) 36 | gridLayout = QGridLayout(centralwidget) 37 | # textEdit needs to be a class variable. 38 | self.textEdit = QTextEdit(centralwidget) 39 | gridLayout.addWidget(self.textEdit, 0, 0, 1, 1) 40 | self.setCentralWidget(centralwidget) 41 | menubar = QMenuBar(self) 42 | menubar.setGeometry(QRect(0, 0, 731, 29)) 43 | menu_File = QMenu(menubar) 44 | self.setMenuBar(menubar) 45 | statusbar = QStatusBar(self) 46 | self.setStatusBar(statusbar) 47 | actionShow_CCPL = QAction(self) 48 | actionShow_CCPL.triggered.connect(self.showCCPL) 49 | action_About = QAction(self) 50 | action_About.triggered.connect(self.about) 51 | iconToolBar = self.addToolBar("iconBar.png") 52 | #------------------------------------------------------ 53 | # Add icons to appear in tool bar - step 1 54 | actionShow_CCPL.setIcon(QIcon(":/showgpl.png")) 55 | action_About.setIcon(QIcon(":/about.png")) 56 | action_Close = QAction(self) 57 | action_Close.setCheckable(False) 58 | action_Close.setObjectName("action_Close") 59 | action_Close.setIcon(QIcon(":/quit.png")) 60 | #------------------------------------------------------ 61 | # Show a tip on the Status Bar - step 2 62 | actionShow_CCPL.setStatusTip("Show CC Licence") 63 | action_About.setStatusTip("Pop up the About dialog.") 64 | action_Close.setStatusTip("Close the program.") 65 | #------------------------------------------------------ 66 | menu_File.addAction(actionShow_CCPL) 67 | menu_File.addAction(action_About) 68 | menu_File.addAction(action_Close) 69 | menubar.addAction(menu_File.menuAction()) 70 | 71 | iconToolBar.addAction(actionShow_CCPL) 72 | iconToolBar.addAction(action_About) 73 | iconToolBar.addAction(action_Close) 74 | action_Close.triggered.connect(self.close) 75 | 76 | def showCCPL(self): 77 | 'Read and display CCPL licence.' 78 | with open('CCPL.txt') as fi: 79 | self.textEdit.setText(fi.read()) 80 | 81 | 82 | 83 | def about(self): 84 | '''Popup a box with about message.''' 85 | QMessageBox.about(self, "About PySide, Platform and version.", 86 | """ about.py version %s 87 |

Copyright © 2013 by Algis Kabaila. 88 | This work is made available under the terms of 89 | Creative Commons Attribution-ShareAlike 3.0 license, 90 | http://creativecommons.org/licenses/by-sa/3.0/. 91 |

This application is useful for displaying 92 | Qt version and other details. 93 |

Python %s - PySide version %s - Qt version %s on %s""" % 94 | (__version__, platform.python_version(), PySide.__version__, 95 | PySide.QtCore.__version__, platform.system())) 96 | 97 | if __name__ == '__main__': 98 | app = QApplication(sys.argv) 99 | frame = MainWindow() 100 | frame.show() 101 | sys.exit(app.exec_()) 102 | -------------------------------------------------------------------------------- /combine_bits/combine_allin1_folder/readme_combine_allin1.txt: -------------------------------------------------------------------------------- 1 | 2 | To run combine_allin1.py enter 3 | python combine_allin1.py 4 | where python is either version 3.x or 2.x 5 | 6 | -------------------------------------------------------------------------------- /combine_bits/combine_alter_folder/combine_alter.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2010-2011, 2013 Algis Kabaila. All rights reserved. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # combine_alter.py - combination of ShowCCPL, About, Close scripts 9 | # The purpose of this version of program is to show alternative 10 | # implementation, without the use of dual inheritance. 11 | 12 | import sys 13 | import platform 14 | 15 | import PySide 16 | from PySide.QtGui import (QApplication, QMainWindow, QMessageBox, QIcon) 17 | 18 | __version__ = '3.1.5' 19 | from ui_combine import Ui_MainWindow as Ui 20 | 21 | # qrc_combinex furnishes information about the visual properties of icons. 22 | 23 | if int(platform.python_version()[0]) < 3: 24 | import qrc_combine2 25 | else: 26 | import qrc_combine3 27 | 28 | class MainWindow(QMainWindow): 29 | def __init__(self, parent=None): 30 | super(MainWindow, self).__init__(parent) 31 | # Store Ui() as class variable self.ui 32 | self.ui = Ui() 33 | self.ui.setupUi(self) 34 | self.setWindowTitle('Combine Code Blocks.') 35 | self.ui.actionShow_CCPL.triggered.connect(self.showCCPL) 36 | self.ui.action_About.triggered.connect(self.about) 37 | iconToolBar = self.addToolBar("iconBar.png") 38 | #------------------------------------------------------ 39 | # Add icons to appear in tool bar - step 1 40 | self.ui.actionShow_CCPL.setIcon(QIcon(":/showgpl.png")) 41 | self.ui.action_About.setIcon(QIcon(":/about.png")) 42 | self.ui.action_Close.setIcon(QIcon(":/quit.png")) 43 | #------------------------------------------------------ 44 | # Show a tip on the Status Bar - step 2 45 | self.ui.actionShow_CCPL.setStatusTip("Show CC Licence") 46 | self.ui.action_About.setStatusTip("Pop up the About dialog.") 47 | self.ui.action_Close.setStatusTip("Close the program.") 48 | #------------------------------------------------------ 49 | iconToolBar.addAction(self.ui.actionShow_CCPL) 50 | iconToolBar.addAction(self.ui.action_About) 51 | iconToolBar.addAction(self.ui.action_Close) 52 | 53 | def showCCPL(self): 54 | 'Read and display CCPL licence.' 55 | with open('CCPL.txt') as fi: 56 | self.ui.textEdit.setText(fi.read()) 57 | 58 | # def showGPL(self): 59 | # '''Read and display CC licence.''' 60 | # with open('CCPL.txt') as nonamefile: 61 | # self.ui.textEdit.setText(nonamefile.read()) 62 | # 63 | def about(self): 64 | '''Popup a box with about message.''' 65 | QMessageBox.about(self, "About PySide, Platform and the like", 66 | """ about.py version %s 67 |

Copyright © 2013 by Algis Kabaila. 68 | This work is made available under the terms of 69 | Creative Commons Attribution-ShareAlike 3.0 license, 70 | http://creativecommons.org/licenses/by-sa/3.0/. 71 |

This application is useful for displaying 72 | Qt version and other details. 73 |

Python %s - PySide version %s - Qt version %s on %s""" % 74 | (__version__, platform.python_version(), PySide.__version__, 75 | PySide.QtCore.__version__, platform.system())) 76 | 77 | if __name__ == '__main__': 78 | app = QApplication(sys.argv) 79 | frame = MainWindow() 80 | frame.show() 81 | sys.exit(app.exec_()) 82 | 83 | -------------------------------------------------------------------------------- /combine_bits/combine_alter_folder/readme_combine_alter.txt: -------------------------------------------------------------------------------- 1 | 2 | To run combine_alter.py enter 3 | python combine_alter.py 4 | where python is either version 3.x or 2.x 5 | 6 | -------------------------------------------------------------------------------- /combine_bits/combine_alter_folder/ui_combine.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'combine.ui' 4 | # 5 | # Created: Sun Jan 5 23:17:33 2014 6 | # by: pyside-uic 0.2.14 running on PySide 1.1.2 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(731, 475) 16 | self.centralwidget = QtGui.QWidget(MainWindow) 17 | self.centralwidget.setObjectName("centralwidget") 18 | self.gridLayout = QtGui.QGridLayout(self.centralwidget) 19 | self.gridLayout.setObjectName("gridLayout") 20 | self.textEdit = QtGui.QTextEdit(self.centralwidget) 21 | self.textEdit.setObjectName("textEdit") 22 | self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 1) 23 | MainWindow.setCentralWidget(self.centralwidget) 24 | self.menubar = QtGui.QMenuBar(MainWindow) 25 | self.menubar.setGeometry(QtCore.QRect(0, 0, 731, 21)) 26 | self.menubar.setObjectName("menubar") 27 | self.menu_File = QtGui.QMenu(self.menubar) 28 | self.menu_File.setObjectName("menu_File") 29 | MainWindow.setMenuBar(self.menubar) 30 | self.statusbar = QtGui.QStatusBar(MainWindow) 31 | self.statusbar.setObjectName("statusbar") 32 | MainWindow.setStatusBar(self.statusbar) 33 | self.actionShow_CCPL = QtGui.QAction(MainWindow) 34 | self.actionShow_CCPL.setObjectName("actionShow_CCPL") 35 | self.action_About = QtGui.QAction(MainWindow) 36 | self.action_About.setObjectName("action_About") 37 | self.action_Close = QtGui.QAction(MainWindow) 38 | self.action_Close.setCheckable(False) 39 | self.action_Close.setObjectName("action_Close") 40 | self.menu_File.addAction(self.actionShow_CCPL) 41 | self.menu_File.addAction(self.action_About) 42 | self.menu_File.addAction(self.action_Close) 43 | self.menubar.addAction(self.menu_File.menuAction()) 44 | 45 | self.retranslateUi(MainWindow) 46 | QtCore.QObject.connect(self.action_Close, QtCore.SIGNAL("triggered()"), MainWindow.close) 47 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 48 | 49 | def retranslateUi(self, MainWindow): 50 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 51 | self.menu_File.setTitle(QtGui.QApplication.translate("MainWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) 52 | self.actionShow_CCPL.setText(QtGui.QApplication.translate("MainWindow", "Show &CCPL", None, QtGui.QApplication.UnicodeUTF8)) 53 | self.action_About.setText(QtGui.QApplication.translate("MainWindow", "&About", None, QtGui.QApplication.UnicodeUTF8)) 54 | self.action_Close.setText(QtGui.QApplication.translate("MainWindow", "Close &X", None, QtGui.QApplication.UnicodeUTF8)) 55 | 56 | -------------------------------------------------------------------------------- /combine_bits/combine_folder/combine-STAGE1.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2010-2011, 2013 Algis Kabaila. All rights reserved. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # combine.py - combination of ShowCCPL, About, Close partly made scripts 9 | 10 | import sys 11 | import platform 12 | 13 | import PySide 14 | from PySide.QtGui import QApplication, QMainWindow, QMessageBox 15 | 16 | __version__ = '3.0.3' 17 | from ui_combine import Ui_MainWindow 18 | 19 | class MainWindow(QMainWindow, Ui_MainWindow): 20 | def __init__(self, parent=None): 21 | super(MainWindow, self).__init__(parent) 22 | self.setupUi(self) 23 | self.actionShow_CCPL.triggered.connect(self.showCCPL) 24 | self.action_About.triggered.connect(self.about) 25 | 26 | def showCCPL(self): 27 | '''Read and display CCPL licence.''' 28 | with open('CCPL.txt') as fi: 29 | self.textEdit.setText(fi.read()) 30 | 31 | def about(self): 32 | '''Popup a box with about message.''' 33 | QMessageBox.about(self, "About PySide, Platform and version.", 34 | """ about.py version %s 35 |

Copyright © 2013 by Algis Kabaila. 36 | This work is made available under the terms of 37 | Creative Commons Attribution-ShareAlike 3.0 license, 38 | http://creativecommons.org/licenses/by-sa/3.0/. 39 |

This application is useful for displaying 40 | Qt version and other details. 41 |

Python %s - PySide version %s - Qt version %s on %s""" % (__version__, 42 | platform.python_version(), PySide.__version__, PySide.QtCore.__version__, 43 | platform.system())) 44 | 45 | 46 | if __name__ == '__main__': 47 | app = QApplication(sys.argv) 48 | frame = MainWindow() 49 | frame.show() 50 | sys.exit(app.exec_()) 51 | -------------------------------------------------------------------------------- /combine_bits/combine_folder/combine.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2010-2011, 2013 by Algis Kabaila. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # combine.py - combination of ShowGPL, About, Close scripts 9 | 10 | import sys 11 | import platform 12 | 13 | import PySide 14 | 15 | from PySide.QtGui import (QApplication, QMainWindow, QMessageBox, QIcon) 16 | 17 | __version__ = '3.1.5' 18 | 19 | from ui_combine import Ui_MainWindow 20 | 21 | if int(platform.python_version()[0]) < 3: 22 | import qrc_combine2 23 | else: 24 | import qrc_combine3 25 | 26 | 27 | class MainWindow(QMainWindow, Ui_MainWindow): 28 | def __init__(self, parent=None): 29 | super(MainWindow, self).__init__(parent) 30 | self.setupUi(self) 31 | self.setWindowTitle('Combine Code Blocks.') 32 | self.actionShow_CCPL.triggered.connect(self.showCCPL) 33 | self.action_About.triggered.connect(self.about) 34 | iconToolBar = self.addToolBar('') 35 | #------------------------------------------------------ 36 | # Add icons to appear in tool bar - step 1 37 | self.actionShow_CCPL.setIcon(QIcon(":/showgpl.png")) 38 | self.action_About.setIcon(QIcon(":/about.png")) 39 | self.action_Close.setIcon(QIcon(":/quit.png")) 40 | #------------------------------------------------------ 41 | # Show a tip on the Status Bar - step 2 42 | self.actionShow_CCPL.setStatusTip("Show CCP Licence") 43 | self.action_About.setStatusTip("Pop up the About dialog.") 44 | self.action_Close.setStatusTip("Close the program.") 45 | #------------------------------------------------------ 46 | iconToolBar.addAction(self.actionShow_CCPL) 47 | iconToolBar.addAction(self.action_About) 48 | iconToolBar.addAction(self.action_Close) 49 | 50 | def showCCPL(self): 51 | 'Read and display CCPL licence.' 52 | with open('CCPL.txt') as fi: 53 | self.textEdit.setText(fi.read()) 54 | 55 | def about(self): 56 | '''Popup a box with about message.''' 57 | QMessageBox.about(self, "About PySide, Platform and version.", 58 | """ about.py version %s 59 |

Copyright © 2013 by Algis Kabaila. 60 | This work is made available under the terms of 61 | Creative Commons Attribution-ShareAlike 3.0 license, 62 | http://creativecommons.org/licenses/by-sa/3.0/. 63 |

This application is useful for displaying 64 | Qt version and other details. 65 |

Python %s - PySide version %s - Qt version %s on %s""" % 66 | (__version__, platform.python_version(), PySide.__version__, 67 | PySide.QtCore.__version__, platform.system())) 68 | 69 | if __name__ == '__main__': 70 | app = QApplication(sys.argv) 71 | frame = MainWindow() 72 | frame.show() 73 | sys.exit(app.exec_()) 74 | -------------------------------------------------------------------------------- /combine_bits/combine_folder/readme_combine.md: -------------------------------------------------------------------------------- 1 | readme_combine.md 2 | ================= 3 | 4 | ### First step 5 | 6 | Compile resources to a python readable format in the two 7 | directories: 8 | 9 | * designer 10 | * icons 11 | 12 | Copy back the two python readable files: 13 | 14 | * from *designer*, copy ui_combine.py 15 | * from *icons*, qrc_combine2.py and qrc_combine3.py 16 | 17 | ### Second step 18 | 19 | To run **combine-STAGE1.py** enter 20 | 21 | * python combine-STAGE1.py 22 | 23 | where python is version 2.x or 3.x 24 | 25 | ### Third step 26 | 27 | Continue editing and developing combine-STAGE1.py 28 | towards combine.py. Then to run **combine.py** enter 29 | 30 | * python combine.py 31 | 32 | where python is version 2.x or 3.x. It is good fun, is it not? 33 | 34 | -------------------------------------------------------------------------------- /combine_bits/combine_folder/ui_combine.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'combine.ui' 4 | # 5 | # Created: Sun Jan 5 23:17:33 2014 6 | # by: pyside-uic 0.2.14 running on PySide 1.1.2 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(731, 475) 16 | self.centralwidget = QtGui.QWidget(MainWindow) 17 | self.centralwidget.setObjectName("centralwidget") 18 | self.gridLayout = QtGui.QGridLayout(self.centralwidget) 19 | self.gridLayout.setObjectName("gridLayout") 20 | self.textEdit = QtGui.QTextEdit(self.centralwidget) 21 | self.textEdit.setObjectName("textEdit") 22 | self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 1) 23 | MainWindow.setCentralWidget(self.centralwidget) 24 | self.menubar = QtGui.QMenuBar(MainWindow) 25 | self.menubar.setGeometry(QtCore.QRect(0, 0, 731, 21)) 26 | self.menubar.setObjectName("menubar") 27 | self.menu_File = QtGui.QMenu(self.menubar) 28 | self.menu_File.setObjectName("menu_File") 29 | MainWindow.setMenuBar(self.menubar) 30 | self.statusbar = QtGui.QStatusBar(MainWindow) 31 | self.statusbar.setObjectName("statusbar") 32 | MainWindow.setStatusBar(self.statusbar) 33 | self.actionShow_CCPL = QtGui.QAction(MainWindow) 34 | self.actionShow_CCPL.setObjectName("actionShow_CCPL") 35 | self.action_About = QtGui.QAction(MainWindow) 36 | self.action_About.setObjectName("action_About") 37 | self.action_Close = QtGui.QAction(MainWindow) 38 | self.action_Close.setCheckable(False) 39 | self.action_Close.setObjectName("action_Close") 40 | self.menu_File.addAction(self.actionShow_CCPL) 41 | self.menu_File.addAction(self.action_About) 42 | self.menu_File.addAction(self.action_Close) 43 | self.menubar.addAction(self.menu_File.menuAction()) 44 | 45 | self.retranslateUi(MainWindow) 46 | QtCore.QObject.connect(self.action_Close, QtCore.SIGNAL("triggered()"), MainWindow.close) 47 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 48 | 49 | def retranslateUi(self, MainWindow): 50 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 51 | self.menu_File.setTitle(QtGui.QApplication.translate("MainWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) 52 | self.actionShow_CCPL.setText(QtGui.QApplication.translate("MainWindow", "Show &CCPL", None, QtGui.QApplication.UnicodeUTF8)) 53 | self.action_About.setText(QtGui.QApplication.translate("MainWindow", "&About", None, QtGui.QApplication.UnicodeUTF8)) 54 | self.action_Close.setText(QtGui.QApplication.translate("MainWindow", "Close &X", None, QtGui.QApplication.UnicodeUTF8)) 55 | 56 | -------------------------------------------------------------------------------- /combine_bits/designer/combine.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 731 10 | 475 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 0 27 | 0 28 | 731 29 | 21 30 | 31 | 32 | 33 | 34 | &File 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | Show &CCPL 46 | 47 | 48 | 49 | 50 | &About 51 | 52 | 53 | 54 | 55 | false 56 | 57 | 58 | Close &X 59 | 60 | 61 | 62 | 63 | 64 | 65 | action_Close 66 | triggered() 67 | MainWindow 68 | close() 69 | 70 | 71 | -1 72 | -1 73 | 74 | 75 | 365 76 | 237 77 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /combine_bits/designer/readme.md: -------------------------------------------------------------------------------- 1 | readme.md for *designer* 2 | ======================== 3 | 4 | The **combine.ui** is the file generated by the **qt-designer**. To see how it was generated, open combine.ui with the qt-designer. It needs to be converted to a python readable file with the pyside tool **pyside-uic**: 5 | We choose a name for the output file which indicates that it is 6 | 7 | * a python file, so it has an extension py 8 | * a user interface data file, so it has a prefix ui_ 9 | 10 | Thus, the command is 11 | 12 | * **pyside-uic combine.ui -o ui_combine.py** 13 | 14 | **ui_combine.py** should then be copied to other directories as required. 15 | -------------------------------------------------------------------------------- /combine_bits/designer/ui_combine.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'combine.ui' 4 | # 5 | # Created: Sun Jan 5 23:17:33 2014 6 | # by: pyside-uic 0.2.14 running on PySide 1.1.2 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(731, 475) 16 | self.centralwidget = QtGui.QWidget(MainWindow) 17 | self.centralwidget.setObjectName("centralwidget") 18 | self.gridLayout = QtGui.QGridLayout(self.centralwidget) 19 | self.gridLayout.setObjectName("gridLayout") 20 | self.textEdit = QtGui.QTextEdit(self.centralwidget) 21 | self.textEdit.setObjectName("textEdit") 22 | self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 1) 23 | MainWindow.setCentralWidget(self.centralwidget) 24 | self.menubar = QtGui.QMenuBar(MainWindow) 25 | self.menubar.setGeometry(QtCore.QRect(0, 0, 731, 21)) 26 | self.menubar.setObjectName("menubar") 27 | self.menu_File = QtGui.QMenu(self.menubar) 28 | self.menu_File.setObjectName("menu_File") 29 | MainWindow.setMenuBar(self.menubar) 30 | self.statusbar = QtGui.QStatusBar(MainWindow) 31 | self.statusbar.setObjectName("statusbar") 32 | MainWindow.setStatusBar(self.statusbar) 33 | self.actionShow_CCPL = QtGui.QAction(MainWindow) 34 | self.actionShow_CCPL.setObjectName("actionShow_CCPL") 35 | self.action_About = QtGui.QAction(MainWindow) 36 | self.action_About.setObjectName("action_About") 37 | self.action_Close = QtGui.QAction(MainWindow) 38 | self.action_Close.setCheckable(False) 39 | self.action_Close.setObjectName("action_Close") 40 | self.menu_File.addAction(self.actionShow_CCPL) 41 | self.menu_File.addAction(self.action_About) 42 | self.menu_File.addAction(self.action_Close) 43 | self.menubar.addAction(self.menu_File.menuAction()) 44 | 45 | self.retranslateUi(MainWindow) 46 | QtCore.QObject.connect(self.action_Close, QtCore.SIGNAL("triggered()"), MainWindow.close) 47 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 48 | 49 | def retranslateUi(self, MainWindow): 50 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 51 | self.menu_File.setTitle(QtGui.QApplication.translate("MainWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) 52 | self.actionShow_CCPL.setText(QtGui.QApplication.translate("MainWindow", "Show &CCPL", None, QtGui.QApplication.UnicodeUTF8)) 53 | self.action_About.setText(QtGui.QApplication.translate("MainWindow", "&About", None, QtGui.QApplication.UnicodeUTF8)) 54 | self.action_Close.setText(QtGui.QApplication.translate("MainWindow", "Close &X", None, QtGui.QApplication.UnicodeUTF8)) 55 | 56 | -------------------------------------------------------------------------------- /combine_bits/icons/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/__init__.py -------------------------------------------------------------------------------- /combine_bits/icons/combine.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | select_tango/32x32/actions/system-log-out.png 4 | select_tango/32x32/apps/preferences-system-session.png 5 | select_tango/32x32/apps/help-browser.png 6 | 7 | 8 | -------------------------------------------------------------------------------- /combine_bits/icons/qrc_combine2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Resource object code 4 | # 5 | # Created: Sun Jan 19 19:26:37 2014 6 | # by: The Resource Compiler for PySide (Qt v4.8.4) 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore 11 | 12 | qt_resource_data = "\x00\x00\x06\x0d\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x05\xc4IDATX\x85\xb5\x97mlTU\x1a\xc7\x7f\xe7\x9c;\xf7\xce\x0bt\xa63#X\x05\xbbU\xa4\x15\x8a\x8a\x88\x15\x091~\xb0\x1f\xd8(\x91\x05\x85\x98]M\x13\x13\x93\xddu\xd5DT\x08\x1b7\xbeG\xfd\xe4KL\xd4\xfaR\x8bE\xa0\x84\xad\xa8@DQ\x17HX\x0dE\x0d\x85.\x985\xb4E:E\xc4y\xe9\xcc\xdc{\x8f\x1f\xa63t\xect:\xd6\xf8$7\xb9\xe7\xdcs\xcf\xf9\x9d\xff\xf3?\xe7\xdc+\x00\x22\x8b\xee\xbe\xd0\x12lv\x5cg!Z+~\x8f\x10\xc2QR\x1dHkV\x0c\xed{\xb9/_m\x00\x98R\xbc\xfd\xe4\x83-M\xcd\x0bg\x0a\xad\xdd\xc2;\xa1P\x88d2I&\x93\x01\xc0\xe7\xf3\x11\x0a\x85&5\xbe\xe3\xb8\xaa\xfd\xfd/\x9b\x1ez\xba\xf5m\xe0\x86\x22\x00\xd7\xb1\x97\xacl\xbeBtm\xdbZ\x18\x0c`\xfe\xfc\xf9\xf4\xf6\xf6\x12\x8f\xc7\x01\x986m\x1a\xcd\xcd\xcd\x93\x02PJ\xb2\xb2\xf9\x0a\xb1\xe6\x09{\xc9\xe8z\x03\x00\xadU\xe7\x8e\xfd,\xbf\xe9f\x94\x92\xe7\x1e\x1a\x06\xf5\xf5\xf5\xb8nN\x15)%\x93\x0d\xdbv\xe8\xdc\xb1\x9f_\xa6\xd8\xc8\xdfl\xd8\xf9\x0d\x8f\xbc\xb0\x15\x8d\x9e\xf4 \xe5B \x98={\xf6\x98\xfa\x02@\xb8\xe6\x0fD\x9c\xc9\xe5\xb7\xd2\x08\xd7\x84\x80/J\x03H)QJ\x92\x89\xff\xc8\xe9\xd8\x10\xee\x04BH\x01\xe1h\x04sJ\xb0b\x80R),\x00()PR24t\x9a\x9e\xad\x0f`z\xca\xaf\xc6L\xd6\xa1a\xf9\xb3\xcc\xa8\xaa\xae\x18@I1>@^\x01\xedjL\x8fb\xf6\xb2g\xc8\xdaN\xc9\x8e<\x86\xe2\xe8\xb6\x07\xd0\xae.2\xedDQ^\x01%\x0b\x9d9\x8e\xc3\xe1\xce\xfb\xcbv\xe68N\xe1\xbdJ\xa3T\xdbs\x0a\x88\x5c\x0a\x00\xb2\xd9l\xc5\x9d\x1e;\xdcST\x96B0\xbdf\x1aS\xab#c\xdaJQ&\x05\xa3\x15\xf85\x00\xdfn\x7f\xa8\xa8<\x9c\xb1\x99\xbb\xe29B\xd1\xf3\xc6\xb4-\xaf\x80<\x07`\xdbv\xc5\x00u\x7f|\xaap\x9f\xf7\x86\xeb\x94\xf6FY\x0fH%\x90\x93P\xe0X\xd7\x9a\xa2ra\xd7,\x05\xa0\xca\xad\x02!'\xe5\x81\xf1\xd4R%f+E\x05\xab@ \x18\x1e\xce\xa0J\xd0\x8e\x0e\xc7\xd1H!\xc6\x85-\x95\x82\x09< PJ2\xf3\xa2\xf3\xb9\xf1\x9ew'<\x13\xa4\x10\xdc\xd6\xdcXP\xa0\xfbP7]\xef\xfd\x9b\x81\x81\x01\x16U;\xd0s\x10)%\x96ea\xdb6\xa9T\x8a\xfe\xffM\xa5f\x8a\xcb\xf7%\x01F\x14\x98QW\xcb\x8c\xba\xda1\x03\xee\xdd\xb3\x9f\xff\xbeu\xd7\x98z\xdb\xb69~\xfc8[:7\xb3~\xdd?\x09\x85B\x08!P*\xb7\x93\xbe\xff\xc1vv\xed\xda\xc5\xd4\x8b\xaapl\x1b\xed|G\xc3\xaa\x95wvtlz\xa3\x08@\x8d\xda\x07\xc6\x8bl6\xcb\xde}\xff\xa1c\xe3;\x04\x02\x01jkk\x11\x08R\xc3)\x1e\xfd\xd7c\x04\x02\x81\xc2\x06%\xa5d\xe3\xa6\x0e:;\xb7\x10\x89D\x01M_\x7f\x1f\x01\x7f\x80\x94\xad\x9foii\xd9\xd2\xda\xda\xfa\xd3\x18\x05\xca\x85m\xdb\x5c\xb3\xb0\x09\xaf\xe5\xa5\xad\xfd-\xfe\xb4|%\xf3\x1a\xe7\x019\xf7\x9f={\x16\x00\xcb\xb20M\x93U\xb7\xaef\xd5\xad\xab\x19\x18\x18\xe0\xa5\x97_D\x08\xc1\xc5u\x970\x18\x1b\xe4\xd4\xe0\xc9\x15\xc0\xeb\xa3\x0e\xa3\xf2\x00R\x09\x12\xa94\x96G1g\xce\x5c\x1e~p-\xed\xedm\x5c\xbd`!\xb7\xdc\xb2\x9cx;\x19;\xca=\xf7\xdf\xcb\xfa\xb5\xeb8\xd1\xd7G[\xfb\x06\xd2\xa1F\xbc\x97\xdfA\xf6\x8bWPJ\xe2\xf5zq\x1c\x07)%>\x9f\x0fG\xbb\xe1\x22\x80J<0^\xf8\xa67`WMg\xed#\x8f\xe3\xad\x99\x8bw\xcej\x02\xca\xccM\xcc\xf4\x03\x02\xbf\xdfW\xd83\xaa\xaa\xaa\xd0\xae\xeb\xcb\x03\x84\x90\xc2Ak\xe51\x14\xae\xae\xfc\x9bP;6v\x22\x96\x9b\x00\x10l\x5c\x96\xab\x1f>\x83\x06\x844 \x9b!\x18\xacB\x08\x89R\x0a!\x04RJ\x0c\xa5\xe2y\x00\xbf)\xc5\x97\xdd\x07\xbb\x17\x5c\xb5\xe0J)U\xe5\xff%\xa9\xb3\x83\x1c\xda\xddJ\xd3\xa2\xc5c\x9f%\x92|\xf5U7\xca\xe3!\x1c\x8e\x90L&1\x0c\x03\xa5\x14Zk\xa4RCy\x00{\xf0\xd8\xde5\x9fk\xfd\xc2\xc7\x1f}r\x19ZW\x9c\x07Cj\xae\xbf\xd4\xcb?\xfe\xfawl\xdb.\x1cD\x90\xfb\xa4\xbf\xa3\xe5NL\xd3G \x10 \x9b\xcd\xe2\xf1x0M\x93\xfe\x81~\x04\xa2;\x0f\xf0\xc3\xf0\xc9\xaf\x0f\x9f8\xf9\xf52\xc0\x07x*\x96\x000\xeao\x7f/\x16\x8b]`\x9af\xd1OM0\x18$\xe0\xf7f/o\x9c\xa7\x85\x10\xa6\xd7\xeb\x05\xc0\xef\xf7\xd3\xdb{\xe4\xa7T:\xdd\x9e\x07\xc8\x02\xdf\x031@\xfdZ\x80Db\xf8\xc9\xd7^\x7f\xf5\xa9?\xdf\xfe\x97@2\x99,\x18-\x91H\xd0t\xcd\xb5\x9e\xfc\x96lY\x16\x86a\x90\xce\xa4\xe9\xe9\xe9I\x84\x83\xe1.F\x06\xcc\x87\x06\x9c\x11\xa0J/\xfa\xfb\xfa\x8f\x84\xaa\x83K\x8f\x1c=\x12\xf6\x18\x86\x11\x8f\xc79s\xe6\x0c\xa7N\x9dB\xbb\x9a\x9d\xbb>$\x14\xaa&\x12\x8d\x10O\xc4ik{3\xd9w\xe2\xc4\xdf::\xde\xed\x05\xb2\xe5\xcf\xdc\x89\xc3\x07\x04\xa2\xd1h\xe4\xba\xc5\xd7\xae\xf7\xfb\xfd7it\xd5\xe8\x06\xa3}a\x9a\xe6\xff\x07\xfa\xfa\x9f\xde\xbd{\xcf6\xe0G \xf1[\x01\x00\x04`\x02\xd6\x08\x90E.\x8d&\xe7T\xcd\x00\xc3@\x0aH\x8f\x945\xc0\xcf\xfd\x89+6E\xdf\xcd\xa5\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00\x06\xbd\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01B(\x9bx\x00\x00\x00\x19tEXtSoftware\x00www.inkscape.org\x9b\xee<\x1a\x00\x00\x06:IDATX\x85\x9d\x97Mh\x5c\xd7\x15\xc7\x7f\xf7}\xce\xb7\xad\xb1\x0c\xb2\xc6\xb6\xc6\x91\xd2T\x89\x8d0&\x08'Q\xb30\xa9V\xc1`\x12h\x88M[\xb2\xc8\xa6\xc5\xdb\xe0U7M\x13'\x85f\x95M\x0aI?\xe8\xbetQhC\xb2H\xc6\xa6\xf5\x22\x18\x22\xac\x22\xa9\xb8nb\xeb\xdb\x96Fo\xde\xd7\xbd\xb7\x8b\x99\xf7\xfcf43\x0a=p\x997\xef\xcd\xbb\xe7\xf7?\xe7\xcc\xbd\xe7\x0a\xad5\xff\x87\x09\xc0\x04\x1c\xc0\xea\x5c'\xa6\x01\x09D\x9d\xa1:\xf7\xfa\x9a\x05\xf0\xfa\x95\xd7~\x19E\xd1\xb5\xef\xe4Y\x08\x0c\xc3\xc0u]\xf2\xf9\x02\xb9\x5c\x0e\xc7\xb61\x0c\x03\x8dFJE\x18\x86\xb8\xae\xfb\xc1\xf5w\xde\xbb\x06\x04\x1d\xa0\xc1\x00Q\x14]\xfb\xf1\x95\x9f\xb2\xb8\xb8H\xab\xd5\x22\x8a\x22\x82 \x0cC\xa2(JG\x1c\xc7H)\xb1,\x8bb\xa1\xc0\xd5\xabW\x19\x1f?\x86\x10\xa2\x13\x14\xd0Z\xe3y\x1e\xef\xfd\xfa\xfaU\xe0\xed\x8e\xf3\x81Q\xb0\xd2\x0b\xcb\xc24M,\xcbBJ\x99^+\xa5PJ\x91\xa4\xca0\x0c\x1c\xc7\xa1\x5c\xae\x90\xcf\xe70M\x0b!D\x07\xa2\x0dP*\x95\x18\x19\xa9\x02\x94\x80f\x87n8\x80\xe38X\x96\x85m\xdbH)\xd1Zw\x8d\xc4\xb4\xd68\x8eC\xb1X\xc4\xb2\xda\xa17\x0c#\x13\x01\x05@\xa9T\x02\xc8\xd1]\x1f\x83\x01\x5c\xd7\xc5q\x1c\xa4\x94\xd8\xb6\x0d\x90*\xd7Z\xa7*\xb5\xd6\xd8\xb6\x8d\xe38\x18\x86\x91Q/:3\x19\x80\xc6i\xcfaf\x1e\x0c\x07p\x1c'\x05H\x14'\x8e\x81\xd4Y\x02`w\x0a/1! \x09T\x9bG$4C-\xfd\x81\x10\x02\xd34q\x1c\x07\xd7uS'\xb6m\xe3\xban\x9a\x1e\xcb\xb2\xd2zI\xe0\xfa\x89\x14\x8f\xef\x89\xbf<\xfdt\xe1\x8fB\x9c\x1b\x1a\x81$\x94\x86a`\x9a&\xae\xeb\xa6\xf7\x12\xe5B\x08\x94R\x19\x80\xc1\x02\x13\xb6\x85\xf7\xdf/6\xef\xdc\xf9\xb3\x80i\xa084\x02\xd9\x9c&\xdf\x13\xc5Y\xf5\x8f\x01\x06\x87\x16`\xfd\x8b/J\xb7\xdfz\xeb\xafS\xaf\xbc2\x93?v\xaco1v\x01d\x1d\xf7\x02%\xd5n\x9af\xa6\xf2aP\x8d\x09\xcf\xe3\xb3\xf9\xf9O\xbe\xf7\xea\xab\xd3\x93W\xaeX\x83h\xad\xae\x972\x10\xbd@\xae\xeb255\xc5\xde\xde\x1e\xdb\xdb\xdb\x99\xfc\xef\xb7pk\x8b\xfc\xaf\xae\xf3\xe4\xcb/\xd7O\xbc\xf4\x92\xa9vwA)\xe3OB<\xea\xf9\xe97\xfb\x00\xfa\xa9Oro\xdb6G\x8f\x1e\xe5\xc8\x91#4\x9b\xc9\xfa\x92}\x1f\xfc\xf5\x0d>\x9b\xfb\x01\xd3ss\x8c\x9f?oz7oR8w\x8e\xb9w\xdf\xb51\x0c\x1b\xadAkt\x1c\xf3\xb77\xde(\x1e\x18\x81\xec\xdf\xef\xc6\x8d\x1bT*\x15fggq]w\x9fr\x7fm\x8dO\x9f\x7f\x81\xe333\x1c;}\x1a\xaf\xd1@K\xc9\xce\xe7\x9f#\xccv\x09h\xa5 \x8e)_\xb808\x05\xbd\xea\x93q\xf8\xf0aFGG\xc9\xe5r\xdc\xbd{\xb7\xcby\xeb\xfe}>}a\x8e\xda\xf44GO\x9d\xa2\xd9h\x80\x94`Ym\xe7I\xcd(\x85\x96\x12\xe5y\xfb\x01z\xa3\xd0\x9b\x8eJ\xa5\xc2\xd9\xb3gYYY\xe9\xd4AG\xf9\xea*\x7f?\xff\x1c\xb5\xc9I\x8e\x8c\x8d\xb1\xf7\xe5\x97\xa0\x14\xc2\xb6\xc14\x11\xa6\x89\x8e\x22\xb4R\x18\xae;\x1c`\x90z\xdb\xb6\x99\x99\x99ass\x93\x85\x85\x05j\xb5\xdac\xf5\x0f\x1e\x10nm\xe1NL\x10,-\x11\xad\xae\x22,\x0b\x1d\x04(\xcfC6\x9b\xe8 h\x0b\xb4,\x8cB\x81\xfc\xe9\xd3m\x7f\x83\x22\xd0\xab~zz\x9a8\x8ei4\x1a\xe9j\x99\xd8\xc8\xcc\x0c\xb3\xbf\xfb\x84\xc5\xaf\xbe\xa2\xf5\xe8\x11f\xb9L\xb0\xb2Bx\xef\x1e\xf1\xe6f\xea\x1c@\xc71rg\x87xc\xa3?@o\x1a\x84\x10\x94J%\x84\x10\xdc\xbau\x0b\xcb\xb2\xc8\xe5r\xe9:\x90\xa4\xa1v\xf1\x22g?\xfe\x98\x7f-/\xe3G\x11\xf93g\xd2\xc2\xc30\xf6\x0d\x1dE\xfdS\x90MC\xf2\xe9y\x1e\x0b\x0b\x0bh\xad\xc9\xe7\xf3X\x96\x95>K\xcc\xf7}\x0e\xbd\xf8\x22O}\xf8!w\xde|\x93\xc9\xb11\x8ag\xce\xd0\xfa\xfak\x8a\xcf>\x8bp\x1c0\x0cD\x07@\xf9>z\x10\xc0\xa0\xbfb\xd2\xa0$\xf7\x83 \xc0\xcd\xe5\x10(\xe2X\x12\xc7\x11\xa5\xe7\x9f\xe3\xf8\x07\xbfa\xf1g?g*\x0c\xa9<\xf3\x0cRJn7\x1a\x91\x0cC\xbb\xc7\xd5\xc3\x81\x00\xfd\x8a1\x0bb\x9a&KK\xcb\xd4\xebu\xaa\xd5j'\x15\xed=\xb0<;\xcb\xbd\xd7~\x84\xf8\xfd\x1f\xfc'\xa2(W\x9a\x98@i\x1d^\x86\xf3\x80\x0f\xb4\x921p;\xebu\x9a\xb4hI3\xa2\x94\xc2ky\xec\xee\xee\x10\xc7Q{\x93\xb2\x93\xe7.\xc1\xe4)\xd6\xe7\xe6~\xb1\xbc\xbe\xeem--%\xcd\xc2.\xb0\xd7\x81\x08\x80\xbd\xa1\x00\xd9\x0d(\xe9\x0b\x1c\xc7!\x0cC\x84\x80b\xa1@\xa9TJ\xbb\xa6\xb4S\xce\xe70M\x93\xe2\xe5\xcb\x8d\xff\xd4j?\xf9\xef\xf6\xb6G\x1ck\xe0\x11\xb0\x03l\x01\xdbZ\xeb\xa8o\x0a\xb2\x00\x89r!\x04\x0f\x1fn\xa3\xd0\xd4'\xea\xd4\xeb\x13T\xabU\x5c\xd7%\x96q\xdax\x0b\x03\xf2\xf9\x1c\x86\x10\x5c\xbat\xe9\xc1?O\x9c\xb8\xfd\xcd\xc5\x8b\x17\xdc \xf8!\xb0\xa6{\x0e\x22C\x8b\xd00\x0c\xf2\xf9\xd5j\xd5\x9f\x9f\x9f\x0f\xf1\xfd\x7f\x007_\xef\xe3+\x03\xa0\xbb\x94\x97\xcbe\xd6\xd6V\xf9\xf6\xfe\x06\xf5\xfa\x04\xe3\xb5q\x0a\x85\x02\xb6\xed \x0cA\x14G\xc42\xda7\xa1\xd2\x1a)%\xad\x96\x0f\xed<\x1f|2\x82v\x8d\x98\xa6\xc9\xa1C\x87h6wY\xf9\xf72\xb5\xe3c<15A\xce\xcda\xd96Zi\xa2($\x8a\xb2\x1d_\xf7\xf4Zk\xa4\x92\xf8\xad\x16@H;9\x07\x03\x00\x8c\x8c\x1c\xe6\xfe\xea\xb7\x94\xcb%\x9e\xfa\xfe\x938\xae\x83aZ\xc4R\x12+\xd5v\xdaY|\xb2\x9d@\xd7\xecZ\xa3\x94\xa2\xe5\xa7\x00C\x0f\x9f)\xc0\xfa\xc6*J\xc7\x8c\x8eV;E\x07q\x14!\xe3\xb8\xed\xf0\xa0\x06\xf0\xb1\x7f\x94R\x04\xed\xf5?9\x9c\x0e\x07\xb0m\xfb\xed\x8f~\xfb\xd1\xb5~\xbb\xe0A\xce\x93f\xa5\x1bBc\xdb\xf6;\x1c\x10~\x00\xd1\xe7x\xde\xdb\xec\x7f7\xe9\xdd\xa63c\xa8\xfd\x0f\x86\xcb\x8d\xe7c\x5c\x85\x97\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00\x08\xb7\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x08nIDATX\x85\xc5\x97{pU\xd5\x15\xc6\x7f{\x9fsnnn\xde\xb9\x97 \x84G^\x04\x12\x02\x11\x05\x05\x22\x05D\x0a\xa2(\xd6\xe2L\xa7u\xa8v\xac\xa33:cg\xb4\xd3\x87m\x1c+}M\xffh\xcb\xd8V\x1d)v\xaaE\xc6\xe7\x0c\xa1\xa9\xa0\x11Z\x01\x8dA\x1e\x01\xcc\x83$JBBr\xf3\xbc\xaf\xdc\xdc\xb3w\xff8\xe7\xde$\xd5\x19i\xa73\xee\x995\xe7\xdc9w\xaf\xf5\x9do}k\xad\xb3\xe1K^\xe2J\xff\xb8n]\xad\xd9\x91a\xad\x11\x88\xed\x02\xb1FC\x00\xc8q\x1f\x8f\x08\x18\x10\xe8#6z_qx\xe2HCCm\xe2\xff\x02\xa0h[m\xae\x18O\xfb1\x82\xfb\xca\xe6\xcd\xe0\xc6\x15\xa5Y+\xaa\xe6\x8a\xab\x02Y\xf8\xb3\xd3\x01\x18\x1c\x8d\xd2\x1b\x1c\xa3\xb1\xf9\xa2>\xf4A\xfbXk\xe7e\xd0<\xab\xd3\xc6\x7f\xd6\xf9z\xed\xf0\xff\x0c\xa0h\xf3\xce\x87\xa5!\x9e\xdc\x5c\xb3(\xfd\xfe\xaf\xaf\xb4\xca\xe7\x05\xae\x88\xb3\xb6O\x83<\xf3\xca\xf1\x89\xfd\x87\xcfF\x95\x96\x8fw\xd6}\xffw\xff\x15\x80\xa2u\xb5^\xed\xf3\xfeuq\xe9\xccMO>\xf8\xd5\x8c\xca\xe2\x02\x10\x8e\xe3\x7f\x9d\xfc\x84\x13\x1f_\x228\x1aap$\x86\x10\x10\xc8M\xc7\x9f\x93\xc1\xb2\xf2Y\xac^:\x97\x929\xf9\x00|\xdc\xd9\xcf\xe3O\xbf\x15>\xdd\xd6[O8\xfa\xcd\xce\x86\xda\xd8\x17\x02X\xbc\xbd\xd6\x13\x0e\xa7\xbd\xbfm}U\xc5O\xee\xdf\xe0I\xf7X\xb4~\x1a\xe4\xb97\x1ai<\xdb\x8d4$\x86\x94\x08!\x90R \x10)/Zk\xb4\xd6,\xaf(d\xc7-WS:'\x9fX<\xc1S\xcf\xbe\x1d\x7f\xe5\xd0\xe9s>_\xec\xba\xe6}\xb5\xf1\xa9\xf1\x8c\xe9\xe1\xb5\xc8,>\xf6\xea\xb6\x1b\xabV\xee|hS\x9ae\x1a\xbc\xdep\x96'\x9e{\x9bK\x03!L\xd3\xc0\x9ab\xa6a`\x9a\x06\x86)1\x0c\x89i\x18HCr)\x18\xe2\xad\xe3\xedd\xf9\xd2\xa8,\x9e\xc1\x8d+J\x8d\xbe\xa1p\xde\xc9\x96\x81k\x86[\x0e\xee\x85'>\x1f@\xf1\x16\xef\xa3\xab\xae.\xba\xf77\x8f\xdc\x92n\x18\x92\xdf\xef=\xca\x9e\xfd\x1fa\x18\x06\xa6ibYnp\xcb\xf9m\x9a\xc6\xa4I\x03\xc3e\xc70$\x00\x8d\xe7{\x08E\xe2\x5c[1\x9b5\xcb\x8a\xcd3\xed}sC\xd9\xfb\xe3C-\x07\xdf\xfbL\x0a\x0a\xef\xd8\xe9\xcf\xd4V\xcb\x9b\xbf\xfdv\xfe\xbc\x99\xb9\xbcT\x7f\x92\xe7\xde\xf8\x10\xd32\xa7\xbc\xaddi\xd9\x0c\x96\x94\x14PQ\x14\xa0 \xcfGnV:\xe3\xf1\x04}\x83a\x9aZ\xfa\xa8?\xdeA(\x1a\xc7V\x0a\xdbV$l\xc5\xdd\x9b\x97r\xe7\xfa\x0a.^\x1ee\xeb\xc3\xbb\x07G\x89\x97w\xbf\xf6\xc3\xe04\x06\xfc\xa57\xed\xba\xe7\xf6\xe5\xd7\xdf\xbcz\xa1\xaf\x07\xc3\x90\xa4yL\xf2\xb2\xbc,\x9a\x9f\xcf\xaa\xaa\xd9\x9cj\xef'\x16\xb7\x1d\x9d\x00\xa7\xda\xfb\xa8.\x9bIIa\x1e\x13\xb6\xf2\x9c8\xdd]0\xd4r\xf0M\x00\x09\xb0x]m\xa6e\xca\xbb\xee\xb9m\x85\xa1\xd1<\xbd\xef8R\xc8i\x14;@L\x84\x10\x08\xe1\x10\x17O(\xe2\x09\x85\x94\x12\xe9\x0a3?\xcb\xcb\xf6\xf5\x0b\xb1,\x13\x8febY&\x864\xd8\xbd\xff#4p\xf7\x96k\x0c\xd34\xeeZ\xbc\xae6\x13\xc0\x04\x88\xf8\xbc[\xd6^],\xf3\xb3\xd39\xd5\xd6K\xcb'A<\x1es\x8a\xe8\xdc4\x98\x06\x09[q\xfc|?\xef5\xf7\xd2;\x14\xc1\x10\x82\x0d\xcb\xe7s{Mi\x0a\x5c\xe5|?\x1e\xcb$!m\x5c\xactt\x0fs\xaes\x80\xca\xa2\x00k\xaf-\x91\x07\x8f\xb6n\x01^\x96\x8e\xf6\xf5\x8e\x9b\xae[\xe0C\xc0\x91\x8f\xba\x1c1\x19N\xde\x0d7\xf7I0\xbfx\xe9\x04\xaf\xfd\xf3\x02\x03\xa3\xe3\xa4y,,\x8f\xc5\xd9\xaeA\xb4\xd6)1KI\x8a\xb1\xa9,\xbe\xdf\xdc\x0d\xc0\xc6\x95\xe5>!\xc5\x8e\x14\x03h\x96U\x95\xcd\x04\xa0\xf5\x93\xe045\x9b\xc6d*,\xd3$4ncY\xa6\x0bN\x22\xa5`\xcd\x92\xc2T\x0f\xd0Zs\xb1?\x8ce\x19\xaek\x8d\xd6\xa0\x94\xe6\xc2\xa5!\x00*K\x0a\xd0Z/\x9b\x04 \xf0\x17\xe4g\x02N_\x97n\xf0\xa9\xe6\x00\x91\x93=\xc0\xb5\x9a\xc5W\xb1\xaarf*\xb8\xad\x14\xef\x9e\xee\xc32\x0d\xd0NsRJc\x18\x92\x91\xd08\x08\xc1\x8c\xdc\x0c4\xda?\x95\x01\xf2\xdc\xc12\x16\x89\xbb\xa2\x12\x93@\xa4\x93\x12\xc3m<\xc9\xd2\x5c\xbbt\x16k\x16O\x09n\xdb\x1ch\xec\xa6g0\x8ai\x18N`%1l\xc7O$\xe6\x0c\xc8\x9c\xcc\xb4T\xfd\xcbd7\x18\x1a\x8d\xba\x0f\xbdH!\xa6\x9b\x94\x18RLc\xa3\xba8\x9f\xd5\x8b\x02(\xa5PJa\xdb6u\x1f^\xe2\xe3\xee1\xb7;NoLR\x0a\xb23\xbd\x00\x8c\x84\xc7S-H\x02\x08M\xb0\x7f(\x0c@ \xcf\x87\x108\x8a\x96\x8eI)\x10.+I\x87\xd7/\xf4\xa7\x82+\xa58\xd62DW\x7f\xd4e\xca\x01\x9cdR\xb8/\x92\x9f\xed\x00\x08\x0eG\x10\x10\x9c\x04 \xe4\x89\xe6\x0b\x97\x01X8/\xe0\xd4\xb9\x10\x08@ \xdc\xf2\x22UfR\x08\xb2\xd3\x8d\x14\xf5J)\xda\xfa\x22)\x86\xa4\x10\x08\x91\xbc:{\x11\x82\x92\xd9y\x00\x9c\xeb\xecGHy\x22\xa5\x01\xad\xf5\x9eC\xc7\xdb\xd6\xdd\xb1\xbe\xd2W\xb3t.\x07\x8e\xb6M\xf6h\x91\xbcL\x19\x9cB\xf0\x87\xfa\x0e\xd2<\x16\x1e\x8f\x85\xc7c\xa24\xa9\x06\xe5\xe2\x9f\xb2\x9c\xdd\xcb\x17\xcd\x02\xe0\xadc\xad\x11e\xab=)\x00\xbeH\xac\xeeH\xd3\x055<\x16\xa3\xb2\xa4\x80\x05\xf3\xfct\xf5\x8e\x90\x14h\xf2M\xd1\xc9\xb2\xd2\xecX;'5\x92\x01^>\xd6\x8fR\xcaa$\xb9\x07\x8dv\x9d\x14\xcd\xcaa\xc1\x9c|FC\xe3\xbc\xf3~\xab\xf2Ebu\xa9\x1447\xd4\x86\x12\x09\xb5\xf7/uM\xb6\x00\xee\xbdu\x19B\x08\xd7\x99S\xc7\xc9{\xa54\xcaVX\x06X\x06\x98\xd2\xb1\xf8D\x82\x89\x84M\xc2V([9\xffS\x1a\xad\x1c\xe0w\xad\xaf\x00\x01\x7f\xfb\xc7I\xdb\xb6\xd5\xde\xe6\x86\xda\xd0d\x15\x00\xf1\x84\xf5\xd8\xee\xd7>\x18\xee\xee\x1fc\xd1|?\xdf\xd8X\xe5\x04WN\x8e\xed\xe4\xd5\x9dpS\x05\xa8\x94\x22>1\xc1\xc4\x84M\x22a\x93\xb0ml\xdbN=\xdbZSFia.}\xc1\x10\x7f\xdawl8\x16\xb7\x1eK\xc6MM\xc3\xd1\xf6\xfahN\xd9\x06\xdd\xd13\x5c\xb3\xb9\xa6\xdc\xaa,\x0a\x10\x8eM\xd0\xde=\xe4(ZH\xa7\x22\x84\x93\xd1kJs\xb1\xb5&a;\xa0>h\x1b&a+\x07\x80\xcb\xc4D\xc2\xe6\x86%\x85l]]J\xc2V\xfc`W}\xa4\xad\xab\xff\xa9\xae\x03\x8f\x1e\xfa\x0f\x89%\x97\x16\xa5\xb7\xfe\xea\xf5\xed\x9b\xaa7\xfd\xf4\xbb\x1b\xd2\x84\x10\x1cj\xec`\xef\xa1sH)\xdd\xe9\x96\xfc\x18q\x9b\x93[fZ\x83\xd2\x0e\xfd\x097\x05\xb7\xad.\xe1\x86%\x85h`\xe7\xf3\x0d\xe3/\xd65\xd5\xb7\xbd\xf9\xe86\x10\xfa3\x0c8\xeb\x09fW\xdf\xf0\xea\xc9\xf3\x03[\x07F\xa2\x81UK\xe7\x19\x0b\xe6\xfa\xa9.+ 8\x1a\xa5o(\xe2@v\xb7'\xf3<\xf5\xe3#a\xdb,(\xcc\xe5[\x1b+\xa8*\x0e0>a\xf3\xcb\x17\x0e\xc7_\xack:\x93\x96\x16\xd9\xdc\x7fv\xbd=\xbd>>g\xcdY\xf5H\xba\x95\x1fx\xa9\xba|\xce\xc6\xa7\x1e\xba\xd9W\xea~\xe5^\xbc<\xca\xa9\xf6~Z\xbb\x87\x18\x0bO0\x16\x8b#\x85 '\xd3K\x8e/\x8d\xb2\xc2\x5c\xaa\x8a\xfd\xcc\x0e8s\xa5\xe3\xd20?\xda\xf5\xf7hS\xf3\x85w{\x8f\xbdp_t\xb0-\x08D\xbf\x10\x00\xe0\x03\xb2\x0b\xd7~\xefAov\xe0\x91;7,\xf3~\xe7k+\xcc\xf9W\xe5^\xd1Q\xea\xd3\xcb\xa3<\xffFc\xe2\xe5\x03\x1f\x8eG\x83]\xcft\x1f\xfd\xe3n`\xcc\xb5!@}\x11\x804 \x0b\xc8J/(\x9d\xed\xaf\xdc\xf6\x80\x95\xe1\xdfVU:Kl^S\x99~mE\xa1\x98\x91\xe7#'\xc3\x0b\x02FC\xe3\x0c\x8cDh:\xdf\xa3\xeb\x0e7\xc7\xce\xb4\xf6\xe8\xd8XO}\xf0\xd4\xab\x7f\x1e\x1f\xee\xe9u\x03\x87\x80A |%\x0c\x80S\xa2\x19@6\x90aY\xbe\xac\xec\xf2\x8d+}\x05\x0b6Z\xe9\xd9\xd5`\xe4h!}\x8e\x13\x15E\xdb\xa3\xf1\xf0\xd0\x99H\xdf\xf9wF\xdb\xdeiJ$b!\x1c\xbaC\xc0\xb0\x0b\xe23\xe7\xc5+=\x9c\x1a\x80\x05x]v\xbc8]\xd4r\x81*\xc0\x06\xe2\xae\xc5\x80q\xf7\xfe\x8a\x0e\xa9_\xda\xfa7=\x87\xb9\xea\xf9\xa4\xbb\x03\x00\x00\x00\x00IEND\xaeB`\x82" 13 | qt_resource_name = "\x00\x09\x06\xc7\x98g\x00a\x00b\x00o\x00u\x00t\x00.\x00p\x00n\x00g\x00\x08\x0c\x07XG\x00q\x00u\x00i\x00t\x00.\x00p\x00n\x00g\x00\x0b\x0e\x9c\xba\xe7\x00s\x00h\x00o\x00w\x00g\x00p\x00l\x00.\x00p\x00n\x00g" 14 | qt_resource_struct = "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x06\x11\x00\x00\x00.\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xd2" 15 | def qInitResources(): 16 | QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) 17 | 18 | def qCleanupResources(): 19 | QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) 20 | 21 | qInitResources() 22 | -------------------------------------------------------------------------------- /combine_bits/icons/qrc_combine3.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Resource object code 4 | # 5 | # Created: Sun Jan 19 19:27:11 2014 6 | # by: The Resource Compiler for PySide (Qt v4.8.4) 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore 11 | 12 | qt_resource_data = b"\x00\x00\x06\x0d\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x05\xc4IDATX\x85\xb5\x97mlTU\x1a\xc7\x7f\xe7\x9c;\xf7\xce\x0bt\xa63#X\x05\xbbU\xa4\x15\x8a\x8a\x88\x15\x091~\xb0\x1f\xd8(\x91\x05\x85\x98]M\x13\x13\x93\xddu\xd5DT\x08\x1b7\xbeG\xfd\xe4KL\xd4\xfaR\x8bE\xa0\x84\xad\xa8@DQ\x17HX\x0dE\x0d\x85.\x985\xb4E:E\xc4y\xe9\xcc\xdc{\x8f\x1f\xa63t\xect:\xd6\xf8$7\xb9\xe7\xdcs\xcf\xf9\x9d\xff\xf3?\xe7\xdc+\x00\x22\x8b\xee\xbe\xd0\x12lv\x5cg!Z+~\x8f\x10\xc2QR\x1dHkV\x0c\xed{\xb9/_m\x00\x98R\xbc\xfd\xe4\x83-M\xcd\x0bg\x0a\xad\xdd\xc2;\xa1P\x88d2I&\x93\x01\xc0\xe7\xf3\x11\x0a\x85&5\xbe\xe3\xb8\xaa\xfd\xfd/\x9b\x1ez\xba\xf5m\xe0\x86\x22\x00\xd7\xb1\x97\xacl\xbeBtm\xdbZ\x18\x0c`\xfe\xfc\xf9\xf4\xf6\xf6\x12\x8f\xc7\x01\x986m\x1a\xcd\xcd\xcd\x93\x02PJ\xb2\xb2\xf9\x0a\xb1\xe6\x09{\xc9\xe8z\x03\x00\xadU\xe7\x8e\xfd,\xbf\xe9f\x94\x92\xe7\x1e\x1a\x06\xf5\xf5\xf5\xb8nN\x15)%\x93\x0d\xdbv\xe8\xdc\xb1\x9f_\xa6\xd8\xc8\xdfl\xd8\xf9\x0d\x8f\xbc\xb0\x15\x8d\x9e\xf4 \xe5B \x98={\xf6\x98\xfa\x02@\xb8\xe6\x0fD\x9c\xc9\xe5\xb7\xd2\x08\xd7\x84\x80/J\x03H)QJ\x92\x89\xff\xc8\xe9\xd8\x10\xee\x04BH\x01\xe1h\x04sJ\xb0b\x80R),\x00()PR24t\x9a\x9e\xad\x0f`z\xca\xaf\xc6L\xd6\xa1a\xf9\xb3\xcc\xa8\xaa\xae\x18@I1>@^\x01\xedjL\x8fb\xf6\xb2g\xc8\xdaN\xc9\x8e<\x86\xe2\xe8\xb6\x07\xd0\xae.2\xedDQ^\x01%\x0b\x9d9\x8e\xc3\xe1\xce\xfb\xcbv\xe68N\xe1\xbdJ\xa3T\xdbs\x0a\x88\x5c\x0a\x00\xb2\xd9l\xc5\x9d\x1e;\xdcST\x96B0\xbdf\x1aS\xab#c\xdaJQ&\x05\xa3\x15\xf85\x00\xdfn\x7f\xa8\xa8<\x9c\xb1\x99\xbb\xe29B\xd1\xf3\xc6\xb4-\xaf\x80<\x07`\xdbv\xc5\x00u\x7f|\xaap\x9f\xf7\x86\xeb\x94\xf6FY\x0fH%\x90\x93P\xe0X\xd7\x9a\xa2ra\xd7,\x05\xa0\xca\xad\x02!'\xe5\x81\xf1\xd4R%f+E\x05\xab@ \x18\x1e\xce\xa0J\xd0\x8e\x0e\xc7\xd1H!\xc6\x85-\x95\x82\x09< PJ2\xf3\xa2\xf3\xb9\xf1\x9ew'<\x13\xa4\x10\xdc\xd6\xdcXP\xa0\xfbP7]\xef\xfd\x9b\x81\x81\x01\x16U;\xd0s\x10)%\x96ea\xdb6\xa9T\x8a\xfe\xffM\xa5f\x8a\xcb\xf7%\x01F\x14\x98QW\xcb\x8c\xba\xda1\x03\xee\xdd\xb3\x9f\xff\xbeu\xd7\x98z\xdb\xb69~\xfc8[:7\xb3~\xdd?\x09\x85B\x08!P*\xb7\x93\xbe\xff\xc1vv\xed\xda\xc5\xd4\x8b\xaapl\x1b\xed|G\xc3\xaa\x95wvtlz\xa3\x08@\x8d\xda\x07\xc6\x8bl6\xcb\xde}\xff\xa1c\xe3;\x04\x02\x01jkk\x11\x08R\xc3)\x1e\xfd\xd7c\x04\x02\x81\xc2\x06%\xa5d\xe3\xa6\x0e:;\xb7\x10\x89D\x01M_\x7f\x1f\x01\x7f\x80\x94\xad\x9foii\xd9\xd2\xda\xda\xfa\xd3\x18\x05\xca\x85m\xdb\x5c\xb3\xb0\x09\xaf\xe5\xa5\xad\xfd-\xfe\xb4|%\xf3\x1a\xe7\x019\xf7\x9f={\x16\x00\xcb\xb20M\x93U\xb7\xaef\xd5\xad\xab\x19\x18\x18\xe0\xa5\x97_D\x08\xc1\xc5u\x970\x18\x1b\xe4\xd4\xe0\xc9\x15\xc0\xeb\xa3\x0e\xa3\xf2\x00R\x09\x12\xa94\x96G1g\xce\x5c\x1e~p-\xed\xedm\x5c\xbd`!\xb7\xdc\xb2\x9cx;\x19;\xca=\xf7\xdf\xcb\xfa\xb5\xeb8\xd1\xd7G[\xfb\x06\xd2\xa1F\xbc\x97\xdfA\xf6\x8bWPJ\xe2\xf5zq\x1c\x07)%>\x9f\x0fG\xbb\xe1\x22\x80J<0^\xf8\xa67`WMg\xed#\x8f\xe3\xad\x99\x8bw\xcej\x02\xca\xccM\xcc\xf4\x03\x02\xbf\xdfW\xd83\xaa\xaa\xaa\xd0\xae\xeb\xcb\x03\x84\x90\xc2Ak\xe51\x14\xae\xae\xfc\x9bP;6v\x22\x96\x9b\x00\x10l\x5c\x96\xab\x1f>\x83\x06\x844 \x9b!\x18\xacB\x08\x89R\x0a!\x04RJ\x0c\xa5\xe2y\x00\xbf)\xc5\x97\xdd\x07\xbb\x17\x5c\xb5\xe0J)U\xe5\xff%\xa9\xb3\x83\x1c\xda\xddJ\xd3\xa2\xc5c\x9f%\x92|\xf5U7\xca\xe3!\x1c\x8e\x90L&1\x0c\x03\xa5\x14Zk\xa4RCy\x00{\xf0\xd8\xde5\x9fk\xfd\xc2\xc7\x1f}r\x19ZW\x9c\x07Cj\xae\xbf\xd4\xcb?\xfe\xfawl\xdb.\x1cD\x90\xfb\xa4\xbf\xa3\xe5NL\xd3G \x10 \x9b\xcd\xe2\xf1x0M\x93\xfe\x81~\x04\xa2;\x0f\xf0\xc3\xf0\xc9\xaf\x0f\x9f8\xf9\xf52\xc0\x07x*\x96\x000\xeao\x7f/\x16\x8b]`\x9af\xd1OM0\x18$\xe0\xf7f/o\x9c\xa7\x85\x10\xa6\xd7\xeb\x05\xc0\xef\xf7\xd3\xdb{\xe4\xa7T:\xdd\x9e\x07\xc8\x02\xdf\x031@\xfdZ\x80Db\xf8\xc9\xd7^\x7f\xf5\xa9?\xdf\xfe\x97@2\x99,\x18-\x91H\xd0t\xcd\xb5\x9e\xfc\x96lY\x16\x86a\x90\xce\xa4\xe9\xe9\xe9I\x84\x83\xe1.F\x06\xcc\x87\x06\x9c\x11\xa0J/\xfa\xfb\xfa\x8f\x84\xaa\x83K\x8f\x1c=\x12\xf6\x18\x86\x11\x8f\xc79s\xe6\x0c\xa7N\x9dB\xbb\x9a\x9d\xbb>$\x14\xaa&\x12\x8d\x10O\xc4ik{3\xd9w\xe2\xc4\xdf::\xde\xed\x05\xb2\xe5\xcf\xdc\x89\xc3\x07\x04\xa2\xd1h\xe4\xba\xc5\xd7\xae\xf7\xfb\xfd7it\xd5\xe8\x06\xa3}a\x9a\xe6\xff\x07\xfa\xfa\x9f\xde\xbd{\xcf6\xe0G \xf1[\x01\x00\x04`\x02\xd6\x08\x90E.\x8d&\xe7T\xcd\x00\xc3@\x0aH\x8f\x945\xc0\xcf\xfd\x89+6E\xdf\xcd\xa5\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00\x06\xbd\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01B(\x9bx\x00\x00\x00\x19tEXtSoftware\x00www.inkscape.org\x9b\xee<\x1a\x00\x00\x06:IDATX\x85\x9d\x97Mh\x5c\xd7\x15\xc7\x7f\xf7}\xce\xb7\xad\xb1\x0c\xb2\xc6\xb6\xc6\x91\xd2T\x89\x8d0&\x08'Q\xb30\xa9V\xc1`\x12h\x88M[\xb2\xc8\xa6\xc5\xdb\xe0U7M\x13'\x85f\x95M\x0aI?\xe8\xbetQhC\xb2H\xc6\xa6\xf5\x22\x18\x22\xac\x22\xa9\xb8nb\xeb\xdb\x96Fo\xde\xd7\xbd\xb7\x8b\x99\xf7\xfcf43\x0a=p\x997\xef\xcd\xbb\xe7\xf7?\xe7\xcc\xbd\xe7\x0a\xad5\xff\x87\x09\xc0\x04\x1c\xc0\xea\x5c'\xa6\x01\x09D\x9d\xa1:\xf7\xfa\x9a\x05\xf0\xfa\x95\xd7~\x19E\xd1\xb5\xef\xe4Y\x08\x0c\xc3\xc0u]\xf2\xf9\x02\xb9\x5c\x0e\xc7\xb61\x0c\x03\x8dFJE\x18\x86\xb8\xae\xfb\xc1\xf5w\xde\xbb\x06\x04\x1d\xa0\xc1\x00Q\x14]\xfb\xf1\x95\x9f\xb2\xb8\xb8H\xab\xd5\x22\x8a\x22\x82 \x0cC\xa2(JG\x1c\xc7H)\xb1,\x8bb\xa1\xc0\xd5\xabW\x19\x1f?\x86\x10\xa2\x13\x14\xd0Z\xe3y\x1e\xef\xfd\xfa\xfaU\xe0\xed\x8e\xf3\x81Q\xb0\xd2\x0b\xcb\xc24M,\xcbBJ\x99^+\xa5PJ\x91\xa4\xca0\x0c\x1c\xc7\xa1\x5c\xae\x90\xcf\xe70M\x0b!D\x07\xa2\x0dP*\x95\x18\x19\xa9\x02\x94\x80f\x87n8\x80\xe38X\x96\x85m\xdbH)\xd1Zw\x8d\xc4\xb4\xd68\x8eC\xb1X\xc4\xb2\xda\xa17\x0c#\x13\x01\x05@\xa9T\x02\xc8\xd1]\x1f\x83\x01\x5c\xd7\xc5q\x1c\xa4\x94\xd8\xb6\x0d\x90*\xd7Z\xa7*\xb5\xd6\xd8\xb6\x8d\xe38\x18\x86\x91Q/:3\x19\x80\xc6i\xcfaf\x1e\x0c\x07p\x1c'\x05H\x14'\x8e\x81\xd4Y\x02`w\x0a/1! \x09T\x9bG$4C-\xfd\x81\x10\x02\xd34q\x1c\x07\xd7uS'\xb6m\xe3\xban\x9a\x1e\xcb\xb2\xd2zI\xe0\xfa\x89\x14\x8f\xef\x89\xbf<\xfdt\xe1\x8fB\x9c\x1b\x1a\x81$\x94\x86a`\x9a&\xae\xeb\xa6\xf7\x12\xe5B\x08\x94R\x19\x80\xc1\x02\x13\xb6\x85\xf7\xdf/6\xef\xdc\xf9\xb3\x80i\xa084\x02\xd9\x9c&\xdf\x13\xc5Y\xf5\x8f\x01\x06\x87\x16`\xfd\x8b/J\xb7\xdfz\xeb\xafS\xaf\xbc2\x93?v\xaco1v\x01d\x1d\xf7\x02%\xd5n\x9af\xa6\xf2aP\x8d\x09\xcf\xe3\xb3\xf9\xf9O\xbe\xf7\xea\xab\xd3\x93W\xaeX\x83h\xad\xae\x972\x10\xbd@\xae\xeb255\xc5\xde\xde\x1e\xdb\xdb\xdb\x99\xfc\xef\xb7pk\x8b\xfc\xaf\xae\xf3\xe4\xcb/\xd7O\xbc\xf4\x92\xa9vwA)\xe3OB<\xea\xf9\xe97\xfb\x00\xfa\xa9Oro\xdb6G\x8f\x1e\xe5\xc8\x91#4\x9b\xc9\xfa\x92}\x1f\xfc\xf5\x0d>\x9b\xfb\x01\xd3ss\x8c\x9f?oz7oR8w\x8e\xb9w\xdf\xb51\x0c\x1b\xadAkt\x1c\xf3\xb77\xde(\x1e\x18\x81\xec\xdf\xef\xc6\x8d\x1bT*\x15fggq]w\x9fr\x7fm\x8dO\x9f\x7f\x81\xe333\x1c;}\x1a\xaf\xd1@K\xc9\xce\xe7\x9f#\xccv\x09h\xa5 \x8e)_\xb808\x05\xbd\xea\x93q\xf8\xf0aFGG\xc9\xe5r\xdc\xbd{\xb7\xcby\xeb\xfe}>}a\x8e\xda\xf44GO\x9d\xa2\xd9h\x80\x94`Ym\xe7I\xcd(\x85\x96\x12\xe5y\xfb\x01z\xa3\xd0\x9b\x8eJ\xa5\xc2\xd9\xb3gYYY\xe9\xd4AG\xf9\xea*\x7f?\xff\x1c\xb5\xc9I\x8e\x8c\x8d\xb1\xf7\xe5\x97\xa0\x14\xc2\xb6\xc14\x11\xa6\x89\x8e\x22\xb4R\x18\xae;\x1c`\x90z\xdb\xb6\x99\x99\x99ass\x93\x85\x85\x05j\xb5\xdac\xf5\x0f\x1e\x10nm\xe1NL\x10,-\x11\xad\xae\x22,\x0b\x1d\x04(\xcfC6\x9b\xe8 h\x0b\xb4,\x8cB\x81\xfc\xe9\xd3m\x7f\x83\x22\xd0\xab~zz\x9a8\x8ei4\x1a\xe9j\x99\xd8\xc8\xcc\x0c\xb3\xbf\xfb\x84\xc5\xaf\xbe\xa2\xf5\xe8\x11f\xb9L\xb0\xb2Bx\xef\x1e\xf1\xe6f\xea\x1c@\xc71rg\x87xc\xa3?@o\x1a\x84\x10\x94J%\x84\x10\xdc\xbau\x0b\xcb\xb2\xc8\xe5r\xe9:\x90\xa4\xa1v\xf1\x22g?\xfe\x98\x7f-/\xe3G\x11\xf93g\xd2\xc2\xc30\xf6\x0d\x1dE\xfdS\x90MC\xf2\xe9y\x1e\x0b\x0b\x0bh\xad\xc9\xe7\xf3X\x96\x95>K\xcc\xf7}\x0e\xbd\xf8\x22O}\xf8!w\xde|\x93\xc9\xb11\x8ag\xce\xd0\xfa\xfak\x8a\xcf>\x8bp\x1c0\x0cD\x07@\xf9>z\x10\xc0\xa0\xbfb\xd2\xa0$\xf7\x83 \xc0\xcd\xe5\x10(\xe2X\x12\xc7\x11\xa5\xe7\x9f\xe3\xf8\x07\xbfa\xf1g?g*\x0c\xa9<\xf3\x0cRJn7\x1a\x91\x0cC\xbb\xc7\xd5\xc3\x81\x00\xfd\x8a1\x0bb\x9a&KK\xcb\xd4\xebu\xaa\xd5j'\x15\xed=\xb0<;\xcb\xbd\xd7~\x84\xf8\xfd\x1f\xfc'\xa2(W\x9a\x98@i\x1d^\x86\xf3\x80\x0f\xb4\x921p;\xebu\x9a\xb4hI3\xa2\x94\xc2ky\xec\xee\xee\x10\xc7Q{\x93\xb2\x93\xe7.\xc1\xe4)\xd6\xe7\xe6~\xb1\xbc\xbe\xeem--%\xcd\xc2.\xb0\xd7\x81\x08\x80\xbd\xa1\x00\xd9\x0d(\xe9\x0b\x1c\xc7!\x0cC\x84\x80b\xa1@\xa9TJ\xbb\xa6\xb4S\xce\xe70M\x93\xe2\xe5\xcb\x8d\xff\xd4j?\xf9\xef\xf6\xb6G\x1ck\xe0\x11\xb0\x03l\x01\xdbZ\xeb\xa8o\x0a\xb2\x00\x89r!\x04\x0f\x1fn\xa3\xd0\xd4'\xea\xd4\xeb\x13T\xabU\x5c\xd7%\x96q\xdax\x0b\x03\xf2\xf9\x1c\x86\x10\x5c\xbat\xe9\xc1?O\x9c\xb8\xfd\xcd\xc5\x8b\x17\xdc \xf8!\xb0\xa6{\x0e\x22C\x8b\xd00\x0c\xf2\xf9\xd5j\xd5\x9f\x9f\x9f\x0f\xf1\xfd\x7f\x007_\xef\xe3+\x03\xa0\xbb\x94\x97\xcbe\xd6\xd6V\xf9\xf6\xfe\x06\xf5\xfa\x04\xe3\xb5q\x0a\x85\x02\xb6\xed \x0cA\x14G\xc42\xda7\xa1\xd2\x1a)%\xad\x96\x0f\xed<\x1f|2\x82v\x8d\x98\xa6\xc9\xa1C\x87h6wY\xf9\xf72\xb5\xe3c<15A\xce\xcda\xd96Zi\xa2($\x8a\xb2\x1d_\xf7\xf4Zk\xa4\x92\xf8\xad\x16@H;9\x07\x03\x00\x8c\x8c\x1c\xe6\xfe\xea\xb7\x94\xcb%\x9e\xfa\xfe\x938\xae\x83aZ\xc4R\x12+\xd5v\xdaY|\xb2\x9d@\xd7\xecZ\xa3\x94\xa2\xe5\xa7\x00C\x0f\x9f)\xc0\xfa\xc6*J\xc7\x8c\x8eV;E\x07q\x14!\xe3\xb8\xed\xf0\xa0\x06\xf0\xb1\x7f\x94R\x04\xed\xf5?9\x9c\x0e\x07\xb0m\xfb\xed\x8f~\xfb\xd1\xb5~\xbb\xe0A\xce\x93f\xa5\x1bBc\xdb\xf6;\x1c\x10~\x00\xd1\xe7x\xde\xdb\xec\x7f7\xe9\xdd\xa63c\xa8\xfd\x0f\x86\xcb\x8d\xe7c\x5c\x85\x97\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00\x08\xb7\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x08nIDATX\x85\xc5\x97{pU\xd5\x15\xc6\x7f{\x9fsnnn\xde\xb9\x97 \x84G^\x04\x12\x02\x11\x05\x05\x22\x05D\x0a\xa2(\xd6\xe2L\xa7u\xa8v\xac\xa33:cg\xb4\xd3\x87m\x1c+}M\xffh\xcb\xd8V\x1d)v\xaaE\xc6\xe7\x0c\xa1\xa9\xa0\x11Z\x01\x8dA\x1e\x01\xcc\x83$JBBr\xf3\xbc\xaf\xdc\xdc\xb3w\xff8\xe7\xde$\xd5\x19i\xa73\xee\x995\xe7\xdc9w\xaf\xf5\x9do}k\xad\xb3\xe1K^\xe2J\xff\xb8n]\xad\xd9\x91a\xad\x11\x88\xed\x02\xb1FC\x00\xc8q\x1f\x8f\x08\x18\x10\xe8#6z_qx\xe2HCCm\xe2\xff\x02\xa0h[m\xae\x18O\xfb1\x82\xfb\xca\xe6\xcd\xe0\xc6\x15\xa5Y+\xaa\xe6\x8a\xab\x02Y\xf8\xb3\xd3\x01\x18\x1c\x8d\xd2\x1b\x1c\xa3\xb1\xf9\xa2>\xf4A\xfbXk\xe7e\xd0<\xab\xd3\xc6\x7f\xd6\xf9z\xed\xf0\xff\x0c\xa0h\xf3\xce\x87\xa5!\x9e\xdc\x5c\xb3(\xfd\xfe\xaf\xaf\xb4\xca\xe7\x05\xae\x88\xb3\xb6O\x83<\xf3\xca\xf1\x89\xfd\x87\xcfF\x95\x96\x8fw\xd6}\xffw\xff\x15\x80\xa2u\xb5^\xed\xf3\xfeuq\xe9\xccMO>\xf8\xd5\x8c\xca\xe2\x02\x10\x8e\xe3\x7f\x9d\xfc\x84\x13\x1f_\x228\x1aap$\x86\x10\x10\xc8M\xc7\x9f\x93\xc1\xb2\xf2Y\xac^:\x97\x929\xf9\x00|\xdc\xd9\xcf\xe3O\xbf\x15>\xdd\xd6[O8\xfa\xcd\xce\x86\xda\xd8\x17\x02X\xbc\xbd\xd6\x13\x0e\xa7\xbd\xbfm}U\xc5O\xee\xdf\xe0I\xf7X\xb4~\x1a\xe4\xb97\x1ai<\xdb\x8d4$\x86\x94\x08!\x90R \x10)/Zk\xb4\xd6,\xaf(d\xc7-WS:'\x9fX<\xc1S\xcf\xbe\x1d\x7f\xe5\xd0\xe9s>_\xec\xba\xe6}\xb5\xf1\xa9\xf1\x8c\xe9\xe1\xb5\xc8,>\xf6\xea\xb6\x1b\xabV\xee|hS\x9ae\x1a\xbc\xdep\x96'\x9e{\x9bK\x03!L\xd3\xc0\x9ab\xa6a`\x9a\x06\x86)1\x0c\x89i\x18HCr)\x18\xe2\xad\xe3\xedd\xf9\xd2\xa8,\x9e\xc1\x8d+J\x8d\xbe\xa1p\xde\xc9\x96\x81k\x86[\x0e\xee\x85'>\x1f@\xf1\x16\xef\xa3\xab\xae.\xba\xf77\x8f\xdc\x92n\x18\x92\xdf\xef=\xca\x9e\xfd\x1fa\x18\x06\xa6ibYnp\xcb\xf9m\x9a\xc6\xa4I\x03\xc3e\xc70$\x00\x8d\xe7{\x08E\xe2\x5c[1\x9b5\xcb\x8a\xcd3\xed}sC\xd9\xfb\xe3C-\x07\xdf\xfbL\x0a\x0a\xef\xd8\xe9\xcf\xd4V\xcb\x9b\xbf\xfdv\xfe\xbc\x99\xb9\xbcT\x7f\x92\xe7\xde\xf8\x10\xd32\xa7\xbc\xaddi\xd9\x0c\x96\x94\x14PQ\x14\xa0 \xcfGnV:\xe3\xf1\x04}\x83a\x9aZ\xfa\xa8?\xdeA(\x1a\xc7V\x0a\xdbV$l\xc5\xdd\x9b\x97r\xe7\xfa\x0a.^\x1ee\xeb\xc3\xbb\x07G\x89\x97w\xbf\xf6\xc3\xe04\x06\xfc\xa57\xed\xba\xe7\xf6\xe5\xd7\xdf\xbcz\xa1\xaf\x07\xc3\x90\xa4yL\xf2\xb2\xbc,\x9a\x9f\xcf\xaa\xaa\xd9\x9cj\xef'\x16\xb7\x1d\x9d\x00\xa7\xda\xfb\xa8.\x9bIIa\x1e\x13\xb6\xf2\x9c8\xdd]0\xd4r\xf0M\x00\x09\xb0x]m\xa6e\xca\xbb\xee\xb9m\x85\xa1\xd1<\xbd\xef8R\xc8i\x14;@L\x84\x10\x08\xe1\x10\x17O(\xe2\x09\x85\x94\x12\xe9\x0a3?\xcb\xcb\xf6\xf5\x0b\xb1,\x13\x8febY&\x864\xd8\xbd\xff#4p\xf7\x96k\x0c\xd34\xeeZ\xbc\xae6\x13\xc0\x04\x88\xf8\xbc[\xd6^],\xf3\xb3\xd39\xd5\xd6K\xcb'A<\x1es\x8a\xe8\xdc4\x98\x06\x09[q\xfc|?\xef5\xf7\xd2;\x14\xc1\x10\x82\x0d\xcb\xe7s{Mi\x0a\x5c\xe5|?\x1e\xcb$!m\x5c\xactt\x0fs\xaes\x80\xca\xa2\x00k\xaf-\x91\x07\x8f\xb6n\x01^\x96\x8e\xf6\xf5\x8e\x9b\xae[\xe0C\xc0\x91\x8f\xba\x1c1\x19N\xde\x0d7\xf7I0\xbfx\xe9\x04\xaf\xfd\xf3\x02\x03\xa3\xe3\xa4y,,\x8f\xc5\xd9\xaeA\xb4\xd6)1KI\x8a\xb1\xa9,\xbe\xdf\xdc\x0d\xc0\xc6\x95\xe5>!\xc5\x8e\x14\x03h\x96U\x95\xcd\x04\xa0\xf5\x93\xe045\x9b\xc6d*,\xd3$4ncY\xa6\x0bN\x22\xa5`\xcd\x92\xc2T\x0f\xd0Zs\xb1?\x8ce\x19\xaek\x8d\xd6\xa0\x94\xe6\xc2\xa5!\x00*K\x0a\xd0Z/\x9b\x04 \xf0\x17\xe4g\x02N_\x97n\xf0\xa9\xe6\x00\x91\x93=\xc0\xb5\x9a\xc5W\xb1\xaarf*\xb8\xad\x14\xef\x9e\xee\xc32\x0d\xd0NsRJc\x18\x92\x91\xd08\x08\xc1\x8c\xdc\x0c4\xda?\x95\x01\xf2\xdc\xc12\x16\x89\xbb\xa2\x12\x93@\xa4\x93\x12\xc3m<\xc9\xd2\x5c\xbbt\x16k\x16O\x09n\xdb\x1ch\xec\xa6g0\x8ai\x18N`%1l\xc7O$\xe6\x0c\xc8\x9c\xcc\xb4T\xfd\xcbd7\x18\x1a\x8d\xba\x0f\xbdH!\xa6\x9b\x94\x18RLc\xa3\xba8\x9f\xd5\x8b\x02(\xa5PJa\xdb6u\x1f^\xe2\xe3\xee1\xb7;NoLR\x0a\xb23\xbd\x00\x8c\x84\xc7S-H\x02\x08M\xb0\x7f(\x0c@ \xcf\x87\x108\x8a\x96\x8eI)\x10.+I\x87\xd7/\xf4\xa7\x82+\xa58\xd62DW\x7f\xd4e\xca\x01\x9cdR\xb8/\x92\x9f\xed\x00\x08\x0eG\x10\x10\x9c\x04 \xe4\x89\xe6\x0b\x97\x01X8/\xe0\xd4\xb9\x10\x08@ \xdc\xf2\x22UfR\x08\xb2\xd3\x8d\x14\xf5J)\xda\xfa\x22)\x86\xa4\x10\x08\x91\xbc:{\x11\x82\x92\xd9y\x00\x9c\xeb\xecGHy\x22\xa5\x01\xad\xf5\x9eC\xc7\xdb\xd6\xdd\xb1\xbe\xd2W\xb3t.\x07\x8e\xb6M\xf6h\x91\xbcL\x19\x9cB\xf0\x87\xfa\x0e\xd2<\x16\x1e\x8f\x85\xc7c\xa24\xa9\x06\xe5\xe2\x9f\xb2\x9c\xdd\xcb\x17\xcd\x02\xe0\xadc\xad\x11e\xab=)\x00\xbeH\xac\xeeH\xd3\x055<\x16\xa3\xb2\xa4\x80\x05\xf3\xfct\xf5\x8e\x90\x14h\xf2M\xd1\xc9\xb2\xd2\xecX;'5\x92\x01^>\xd6\x8fR\xcaa$\xb9\x07\x8dv\x9d\x14\xcd\xcaa\xc1\x9c|FC\xe3\xbc\xf3~\xab\xf2Ebu\xa9\x1447\xd4\x86\x12\x09\xb5\xf7/uM\xb6\x00\xee\xbdu\x19B\x08\xd7\x99S\xc7\xc9{\xa54\xcaVX\x06X\x06\x98\xd2\xb1\xf8D\x82\x89\x84M\xc2V([9\xffS\x1a\xad\x1c\xe0w\xad\xaf\x00\x01\x7f\xfb\xc7I\xdb\xb6\xd5\xde\xe6\x86\xda\xd0d\x15\x00\xf1\x84\xf5\xd8\xee\xd7>\x18\xee\xee\x1fc\xd1|?\xdf\xd8X\xe5\x04WN\x8e\xed\xe4\xd5\x9dpS\x05\xa8\x94\x22>1\xc1\xc4\x84M\x22a\x93\xb0ml\xdbN=\xdbZSFia.}\xc1\x10\x7f\xdawl8\x16\xb7\x1eK\xc6MM\xc3\xd1\xf6\xfahN\xd9\x06\xdd\xd13\x5c\xb3\xb9\xa6\xdc\xaa,\x0a\x10\x8eM\xd0\xde=\xe4(ZH\xa7\x22\x84\x93\xd1kJs\xb1\xb5&a;\xa0>h\x1b&a+\x07\x80\xcb\xc4D\xc2\xe6\x86%\x85l]]J\xc2V\xfc`W}\xa4\xad\xab\xff\xa9\xae\x03\x8f\x1e\xfa\x0f\x89%\x97\x16\xa5\xb7\xfe\xea\xf5\xed\x9b\xaa7\xfd\xf4\xbb\x1b\xd2\x84\x10\x1cj\xec`\xef\xa1sH)\xdd\xe9\x96\xfc\x18q\x9b\x93[fZ\x83\xd2\x0e\xfd\x097\x05\xb7\xad.\xe1\x86%\x85h`\xe7\xf3\x0d\xe3/\xd65\xd5\xb7\xbd\xf9\xe86\x10\xfa3\x0c8\xeb\x09fW\xdf\xf0\xea\xc9\xf3\x03[\x07F\xa2\x81UK\xe7\x19\x0b\xe6\xfa\xa9.+ 8\x1a\xa5o(\xe2@v\xb7'\xf3<\xf5\xe3#a\xdb,(\xcc\xe5[\x1b+\xa8*\x0e0>a\xf3\xcb\x17\x0e\xc7_\xack:\x93\x96\x16\xd9\xdc\x7fv\xbd=\xbd>>g\xcdY\xf5H\xba\x95\x1fx\xa9\xba|\xce\xc6\xa7\x1e\xba\xd9W\xea~\xe5^\xbc<\xca\xa9\xf6~Z\xbb\x87\x18\x0bO0\x16\x8b#\x85 '\xd3K\x8e/\x8d\xb2\xc2\x5c\xaa\x8a\xfd\xcc\x0e8s\xa5\xe3\xd20?\xda\xf5\xf7hS\xf3\x85w{\x8f\xbdp_t\xb0-\x08D\xbf\x10\x00\xe0\x03\xb2\x0b\xd7~\xefAov\xe0\x91;7,\xf3~\xe7k+\xcc\xf9W\xe5^\xd1Q\xea\xd3\xcb\xa3<\xffFc\xe2\xe5\x03\x1f\x8eG\x83]\xcft\x1f\xfd\xe3n`\xcc\xb5!@}\x11\x804 \x0b\xc8J/(\x9d\xed\xaf\xdc\xf6\x80\x95\xe1\xdfVU:Kl^S\x99~mE\xa1\x98\x91\xe7#'\xc3\x0b\x02FC\xe3\x0c\x8cDh:\xdf\xa3\xeb\x0e7\xc7\xce\xb4\xf6\xe8\xd8XO}\xf0\xd4\xab\x7f\x1e\x1f\xee\xe9u\x03\x87\x80A |%\x0c\x80S\xa2\x19@6\x90aY\xbe\xac\xec\xf2\x8d+}\x05\x0b6Z\xe9\xd9\xd5`\xe4h!}\x8e\x13\x15E\xdb\xa3\xf1\xf0\xd0\x99H\xdf\xf9wF\xdb\xdeiJ$b!\x1c\xbaC\xc0\xb0\x0b\xe23\xe7\xc5+=\x9c\x1a\x80\x05x]v\xbc8]\xd4r\x81*\xc0\x06\xe2\xae\xc5\x80q\xf7\xfe\x8a\x0e\xa9_\xda\xfa7=\x87\xb9\xea\xf9\xa4\xbb\x03\x00\x00\x00\x00IEND\xaeB`\x82" 13 | qt_resource_name = b"\x00\x09\x06\xc7\x98g\x00a\x00b\x00o\x00u\x00t\x00.\x00p\x00n\x00g\x00\x08\x0c\x07XG\x00q\x00u\x00i\x00t\x00.\x00p\x00n\x00g\x00\x0b\x0e\x9c\xba\xe7\x00s\x00h\x00o\x00w\x00g\x00p\x00l\x00.\x00p\x00n\x00g" 14 | qt_resource_struct = b"\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x06\x11\x00\x00\x00.\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xd2" 15 | def qInitResources(): 16 | QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) 17 | 18 | def qCleanupResources(): 19 | QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) 20 | 21 | qInitResources() 22 | -------------------------------------------------------------------------------- /combine_bits/icons/readme.md: -------------------------------------------------------------------------------- 1 | readme.md for **icons** 2 | ========================== 3 | 4 | The **combine.qrc** is prepared with a plain text editor, such as **kate** or **vim** (not a word processor, such as libre office writer or MS Word). It is a XML file which is easily written following the extant pattern. 5 | 6 | Inspection of the file reveals the replacement of the path to the icon by a much simpler token. Applications refer to icons by that token. For the format, find the token name in the code. 7 | 8 | In a similar way to the file in **qt-designer**, the XML file needs to be converted to a python readable file, with a pyside compiler **pyside-rcc**: 9 | 10 | * **pyside-rcc [options] combine.qrc -o ** 11 | 12 | One of the options is to produce the for python3; the default is python2. 13 | The switch for python3 is **-py3**, so that the above command for 14 | python3 becomes: 15 | 16 | * **pyside-rcc -py3 combine.qrc -o ** 17 | 18 | We choose a name for the output file which indicates that it is 19 | 20 | * a python file, so it has an extension py 21 | * a user interface data file, so it has a prefix qrc_ 22 | * main part of the name is **combine**, which identifies the project. 23 | * indication of python version - 2 for python 2.x, 3 for python 3.x 24 | * Thus, the command for python2.x is **pyside-rcc combine.qrc -o qrc_combine2.py** 25 | * For pyhthon3.x the command is **pyside-rcc -py3 combine.qrc -o qrc_combine3.py**. 26 | 27 | **qrc_combinex.py** should then be copied to other directories as required. 28 | 29 | 30 | -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/document-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/document-new.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/document-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/document-open.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/document-print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/document-print.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/document-save-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/document-save-as.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/document-save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/document-save.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/edit-find-replace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/edit-find-replace.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/go-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/go-home.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/go-jump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/go-jump.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/process-stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/process-stop.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/system-log-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/system-log-out.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/actions/view-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/actions/view-refresh.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/apps/help-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/apps/help-browser.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/apps/preferences-system-session.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/apps/preferences-system-session.png -------------------------------------------------------------------------------- /combine_bits/icons/select_tango/32x32/devices/media-floppy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/combine_bits/icons/select_tango/32x32/devices/media-floppy.png -------------------------------------------------------------------------------- /combine_bits/trash/ui_combine.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'combine.ui' 4 | # 5 | # Created: Fri Apr 26 17:04:28 2013 6 | # by: pyside-uic 0.2.13 running on PySide 1.1.0 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(731, 475) 16 | self.centralwidget = QtGui.QWidget(MainWindow) 17 | self.centralwidget.setObjectName("centralwidget") 18 | self.gridLayout = QtGui.QGridLayout(self.centralwidget) 19 | self.gridLayout.setObjectName("gridLayout") 20 | self.textEdit = QtGui.QTextEdit(self.centralwidget) 21 | self.textEdit.setObjectName("textEdit") 22 | self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 1) 23 | MainWindow.setCentralWidget(self.centralwidget) 24 | self.menubar = QtGui.QMenuBar(MainWindow) 25 | self.menubar.setGeometry(QtCore.QRect(0, 0, 731, 21)) 26 | self.menubar.setObjectName("menubar") 27 | self.menu_File = QtGui.QMenu(self.menubar) 28 | self.menu_File.setObjectName("menu_File") 29 | MainWindow.setMenuBar(self.menubar) 30 | self.statusbar = QtGui.QStatusBar(MainWindow) 31 | self.statusbar.setObjectName("statusbar") 32 | MainWindow.setStatusBar(self.statusbar) 33 | self.actionShow_CCPL = QtGui.QAction(MainWindow) 34 | self.actionShow_CCPL.setObjectName("actionShow_CCPL") 35 | self.action_About = QtGui.QAction(MainWindow) 36 | self.action_About.setObjectName("action_About") 37 | self.action_Close = QtGui.QAction(MainWindow) 38 | self.action_Close.setCheckable(False) 39 | self.action_Close.setObjectName("action_Close") 40 | self.menu_File.addAction(self.actionShow_CCPL) 41 | self.menu_File.addAction(self.action_About) 42 | self.menu_File.addAction(self.action_Close) 43 | self.menubar.addAction(self.menu_File.menuAction()) 44 | 45 | self.retranslateUi(MainWindow) 46 | QtCore.QObject.connect(self.action_Close, QtCore.SIGNAL("triggered()"), MainWindow.close) 47 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 48 | 49 | def retranslateUi(self, MainWindow): 50 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 51 | self.menu_File.setTitle(QtGui.QApplication.translate("MainWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) 52 | self.actionShow_CCPL.setText(QtGui.QApplication.translate("MainWindow", "Show &CCPL", None, QtGui.QApplication.UnicodeUTF8)) 53 | self.action_About.setText(QtGui.QApplication.translate("MainWindow", "&About", None, QtGui.QApplication.UnicodeUTF8)) 54 | self.action_Close.setText(QtGui.QApplication.translate("MainWindow", "Close &X", None, QtGui.QApplication.UnicodeUTF8)) 55 | 56 | -------------------------------------------------------------------------------- /quit_prog/quitter.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2010-2011, 2013 by Algis Kabaila. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # quitter.py - provide a button to quit this "program" 9 | 10 | import sys 11 | 12 | from PySide.QtGui import QMainWindow, QPushButton, QApplication 13 | 14 | from ui_quitter import Ui_MainWindow 15 | 16 | class MainWindow(QMainWindow, Ui_MainWindow): 17 | def __init__(self, parent=None): 18 | super(MainWindow, self).__init__(parent) 19 | self.setupUi(self) 20 | 21 | if __name__ == '__main__': 22 | app = QApplication(sys.argv) 23 | frame = MainWindow() 24 | frame.show() 25 | sys.exit( app.exec_() ) 26 | 27 | 28 | -------------------------------------------------------------------------------- /quit_prog/quitter.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 348 10 | 255 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | Qt::Horizontal 22 | 23 | 24 | 25 | 282 26 | 20 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | Quit 35 | 36 | 37 | 38 | 39 | 40 | 41 | Qt::Vertical 42 | 43 | 44 | 45 | 20 46 | 175 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 0 57 | 0 58 | 348 59 | 21 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | pushButton 69 | clicked() 70 | MainWindow 71 | close() 72 | 73 | 74 | 318 75 | 36 76 | 77 | 78 | 173 79 | 127 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /quit_prog/quitter_alt.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2013 by Algis Kabaila. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # quitter_alt.py - provides a button to quit this "program" 9 | # alternative formulation avoids multiple inheritance. 10 | 11 | import sys 12 | 13 | from PySide.QtGui import QMainWindow, QPushButton, QApplication 14 | 15 | from ui_quitter import Ui_MainWindow 16 | 17 | class MainWindow(QMainWindow): 18 | def __init__(self, parent=None): 19 | super(MainWindow, self).__init__(parent) 20 | self.ui = Ui_MainWindow 21 | self.ui.setupUi(Ui_MainWindow(),self) 22 | 23 | if __name__ == '__main__': 24 | app = QApplication(sys.argv) 25 | frame = MainWindow() 26 | frame.show() 27 | sys.exit(app.exec_() ) 28 | 29 | -------------------------------------------------------------------------------- /quit_prog/readme.md: -------------------------------------------------------------------------------- 1 | readme.md for quitter.py 2 | ======================== 3 | 4 | To run this program enter 5 | 6 | * **python quitter.py** 7 | 8 | followed by [CR], where python is either version 3.x or version 2.x 9 | 10 | -------------------------------------------------------------------------------- /quit_prog/ui_quitter.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'quitter.ui' 4 | # 5 | # Created: Sun Mar 17 15:45:12 2013 6 | # by: pyside-uic 0.2.13 running on PySide 1.1.0 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(348, 255) 16 | self.centralwidget = QtGui.QWidget(MainWindow) 17 | self.centralwidget.setObjectName("centralwidget") 18 | self.gridLayout = QtGui.QGridLayout(self.centralwidget) 19 | self.gridLayout.setObjectName("gridLayout") 20 | spacerItem = QtGui.QSpacerItem(282, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) 21 | self.gridLayout.addItem(spacerItem, 0, 0, 1, 1) 22 | self.pushButton = QtGui.QPushButton(self.centralwidget) 23 | self.pushButton.setObjectName("pushButton") 24 | self.gridLayout.addWidget(self.pushButton, 0, 1, 1, 1) 25 | spacerItem1 = QtGui.QSpacerItem(20, 175, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) 26 | self.gridLayout.addItem(spacerItem1, 1, 1, 1, 1) 27 | MainWindow.setCentralWidget(self.centralwidget) 28 | self.menubar = QtGui.QMenuBar(MainWindow) 29 | self.menubar.setGeometry(QtCore.QRect(0, 0, 348, 21)) 30 | self.menubar.setObjectName("menubar") 31 | MainWindow.setMenuBar(self.menubar) 32 | self.statusbar = QtGui.QStatusBar(MainWindow) 33 | self.statusbar.setObjectName("statusbar") 34 | MainWindow.setStatusBar(self.statusbar) 35 | 36 | self.retranslateUi(MainWindow) 37 | QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), MainWindow.close) 38 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 39 | 40 | def retranslateUi(self, MainWindow): 41 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 42 | self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Quit", None, QtGui.QApplication.UnicodeUTF8)) 43 | 44 | -------------------------------------------------------------------------------- /show_licence/licence.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2010-2011, 2013 Algis Kabaila. All rights reserved. 4 | # This work is made available under the terms of the 5 | # Creative Commons Attribution-ShareAlike 3.0 license, 6 | # http://creativecommons.org/licenses/by-sa/3.0/. 7 | 8 | # licence.py - this small program reads and displays licence details. 9 | 10 | import sys 11 | 12 | from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton 13 | 14 | from ui_licence import Ui_MainWindow 15 | 16 | __version__ = '3.3.0' 17 | 18 | class MainWindow(QMainWindow, Ui_MainWindow): 19 | def __init__(self, parent=None): 20 | '''Mandatory initialisation of a class.''' 21 | super(MainWindow, self).__init__(parent) 22 | self.setupUi(self) 23 | self.showButton.clicked.connect(self.fileRead) 24 | 25 | def fileRead(self): 26 | '''Read and display licence.''' 27 | with open('CCPL.txt') as nonamefile: 28 | self.textEdit.setText(nonamefile.read()) 29 | # self.textEdit.setText(open('CCAtributionLicence.txt').read()) 30 | 31 | if __name__ == '__main__': 32 | app = QApplication(sys.argv) 33 | frame = MainWindow() 34 | frame.show() 35 | app.exec_() 36 | 37 | -------------------------------------------------------------------------------- /show_licence/licence.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 654 10 | 467 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | &Show Lincence 22 | 23 | 24 | 25 | 26 | 27 | 28 | Qt::Horizontal 29 | 30 | 31 | 32 | 507 33 | 26 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 0 47 | 0 48 | 654 49 | 29 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /show_licence/readme.md: -------------------------------------------------------------------------------- 1 | readme.md for *show_licence* section 2 | ==================================== 3 | 4 | To start the program enter 5 | 6 | * **python licence.py** 7 | 8 | where python is version 3.x or 2.x 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /show_licence/ui_licence.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'licence.ui' 4 | # 5 | # Created: Thu Dec 9 14:28:57 2010 6 | # by: PySide uic UI code generator 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(654, 467) 16 | self.centralwidget = QtGui.QWidget(MainWindow) 17 | self.centralwidget.setObjectName("centralwidget") 18 | self.gridLayout = QtGui.QGridLayout(self.centralwidget) 19 | self.gridLayout.setObjectName("gridLayout") 20 | self.showButton = QtGui.QPushButton(self.centralwidget) 21 | self.showButton.setObjectName("showButton") 22 | self.gridLayout.addWidget(self.showButton, 0, 0, 1, 1) 23 | spacerItem = QtGui.QSpacerItem(507, 26, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) 24 | self.gridLayout.addItem(spacerItem, 0, 1, 1, 1) 25 | self.textEdit = QtGui.QTextEdit(self.centralwidget) 26 | self.textEdit.setObjectName("textEdit") 27 | self.gridLayout.addWidget(self.textEdit, 1, 0, 1, 2) 28 | MainWindow.setCentralWidget(self.centralwidget) 29 | self.menubar = QtGui.QMenuBar(MainWindow) 30 | self.menubar.setGeometry(QtCore.QRect(0, 0, 654, 29)) 31 | self.menubar.setObjectName("menubar") 32 | MainWindow.setMenuBar(self.menubar) 33 | self.statusbar = QtGui.QStatusBar(MainWindow) 34 | self.statusbar.setObjectName("statusbar") 35 | MainWindow.setStatusBar(self.statusbar) 36 | 37 | self.retranslateUi(MainWindow) 38 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 39 | 40 | def retranslateUi(self, MainWindow): 41 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 42 | self.showButton.setText(QtGui.QApplication.translate("MainWindow", "&Show Lincence", None, QtGui.QApplication.UnicodeUTF8)) 43 | 44 | -------------------------------------------------------------------------------- /truss/README.html: -------------------------------------------------------------------------------- 1 |

README.md for section called truss.

2 |

Warning

3 |

The truss section has not been checked yet and is issued "as is". It is hoped to check it RSN. 2014-01-05

4 |

Operating Truss programs

5 |

The truss program can be run as a CLI program without a gui as follows:

6 | 9 |

For example, to check out sdtruss2, we can find the data for that truss in 10 | dat/sdtruss2.dat. So to get the output in the current directory, do the following:

11 | 14 |

To run the program with GUI, enter the following line of code

15 | 18 |

or for file manager, such as Dolphin, double click the truss.py file.

19 |

Basic Help

20 |

The data is created in the Data Page. Alternatively it can be read from a file into the Data Page. When required it is modified, but only in the Data Page. It is advisable to save the Data Page before beginning any analysis.

21 |

The analysis results are stored by the program in the Solution Page. Some errors in data may cause the program to fail without necessarily displaying any information on the Solution Page.

22 |

The Solution Page is read only, though it can be saved into a file - with the SaveAs option.

23 |

Unlike command line programs, there are no restrictions where the data is stored, nor any restrictions where the results are stored. It is recommended to use .dat format for the data files and the .out format for output files. For consistency, all data files are stored in the ./dat subdirectory and all output files are stored in ./out subdirectory.

24 |

It is advisable to be systematic wrt to the above aspect. All the examples should be stored always in the same directory and all the answers of the standard examples will be stored in another directory which should remain the same relative to the main program.

25 |

These notes are simply a part of the program, as much as the data for standard examples. You are free and encouraged to change this help and extend this help page,

26 |

ak 2011-01-14

-------------------------------------------------------------------------------- /truss/README.md: -------------------------------------------------------------------------------- 1 | ##README.md for section called **truss**. 2 | 3 | ### Warning 4 | 5 | The **truss** section has not been checked yet and is issued "as is". It is hoped to check it RSN. 2014-01-05 6 | 7 | ### Operating Truss programs 8 | 9 | The truss program can be run as a CLI program without a gui as follows: 10 | 11 | * python ncrunch.py [input file name from dat directory] > [output file name] 12 | 13 | For example, to check out sdtruss2, we can find the data for that truss in 14 | dat/sdtruss2.dat. So to get the output in the current directory, do the following: 15 | 16 | * python ncrunch.py sdtruss2.dat > sdtruss2.out 17 | 18 | To run the program with GUI, enter the following line of code 19 | 20 | * python truss.py 21 | 22 | or for file manager, such as Dolphin, double click the truss.py file. 23 | 24 | ### Basic Help 25 | 26 | The data is created in the Data Page. Alternatively it can be read from a file 27 | into the Data Page. When required it is modified, but only in the Data Page. It 28 | is advisable to save the Data Page before beginning any analysis. 29 | 30 | The analysis results are stored by the program in the Solution Page. Some errors 31 | in data may cause the program to fail without necessarily displaying any 32 | information on the Solution Page. 33 | 34 | The Solution Page is read only, though it can be saved into a file - with the 35 | SaveAs option. 36 | 37 | Unlike command line programs, there are no restrictions where the data is stored, nor any restrictions where the results are stored. It is recommended to use *.dat format* for the data files and the *.out format* for output files. For consistency, all data files are stored in the ./dat subdirectory and all output files are stored in ./out subdirectory. 38 | 39 | It is advisable to be systematic wrt to the above aspect. All the examples 40 | should be stored always in the same directory and all the answers of the 41 | standard examples will be stored in another directory which should remain the same relative to the main program. 42 | 43 | These notes are simply a part of the program, as much as the data for standard 44 | examples. You are free and encouraged to change this help and extend this help 45 | page, 46 | 47 | ak 2011-01-14 48 | -------------------------------------------------------------------------------- /truss/dat/sdtruss0.dat: -------------------------------------------------------------------------------- 1 | #sdtruss0.dat 2 | # Simplest statically determined truss. By changing the x dimension 3 | # of node 6, it can be made unstable. Analyse it for vertical force, 4 | # or horizontal force at node 1. 5 | general 6 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 7 | g 4 5 3 1 8 | # no of line in load entry 9 | g 1 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 2 4 14 | t 2 0 2 15 | t 3 2 2 16 | t 4 4 2 17 | # auxiliaries 18 | t 5 0 0 19 | t 6 3.5 0 20 | t 7 4 0 21 | members 22 | t 1 2 1 23 | t 2 2 3 24 | t 3 3 1 25 | t 4 1 4 26 | t 5 3 4 27 | # Reactions or Auxiliary members. 28 | t 6 2 5 29 | t 7 3 6 30 | t 8 4 7 31 | loads 32 | # node X load, Y load 33 | 1 0 2 34 | end 35 | -------------------------------------------------------------------------------- /truss/dat/sdtruss0.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/dat/sdtruss0.out -------------------------------------------------------------------------------- /truss/dat/sdtruss1.dat: -------------------------------------------------------------------------------- 1 | # sdtruss1.dat - Statically Determinate Truss #1 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p49 Fig. 4.6 5 | # Flags - decoration for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 4 5 3 9 | g 4 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 4 3 15 | t 3 4 0 16 | t 4 8 0 17 | t 5 3 3 18 | t 6 10 0 19 | t 7 8 3 20 | members 21 | t 1 1 2 22 | t 2 2 4 23 | t 3 3 2 24 | t 4 1 3 25 | t 5 3 4 26 | t 6 1 5 27 | t 7 4 6 28 | t 8 4 7 29 | loads 30 | # node X load, Y load 31 | 1 0 -6 32 | 2 0 -14 33 | 3 0 -12 34 | 4 0 -8 35 | end 36 | 37 | -------------------------------------------------------------------------------- /truss/dat/sdtruss2.dat: -------------------------------------------------------------------------------- 1 | # sdtruss2.dat - Statically Determinate Complex Truss #2 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p46 Fig. 4.5 5 | # Flags - decoration for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 6 9 3 9 | g 3 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 12 0 15 | t 3 0 9 16 | t 4 3 2 17 | t 5 5.5 2 18 | t 6 3 4 19 | t 7 4 0 20 | t 8 0 5 21 | t 9 12 5 22 | members 23 | t 1 1 3 24 | t 2 1 2 25 | t 3 3 2 26 | t 4 4 6 27 | t 5 4 5 28 | t 6 6 5 29 | t 7 3 4 30 | t 8 1 5 31 | t 9 6 2 32 | # Auxiliary members next 33 | t 10 1 7 34 | t 11 1 8 35 | t 12 2 9 36 | loads 37 | # node X load, Y load 38 | 3 10 0 39 | 4 0 -19 40 | 5 17 -20 41 | end 42 | 43 | -------------------------------------------------------------------------------- /truss/dat/sdtruss3.dat: -------------------------------------------------------------------------------- 1 | # sdtruss3.dat - Statically Determinate Complex Truss #3 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p61 Fig. 4.6 5 | # Flags - whim for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 8 13 3 9 | g 3 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 5 5 15 | t 3 10 5 16 | t 4 15 5 17 | t 5 20 0 18 | t 6 5 0 19 | t 7 10 2.5 20 | t 8 15 0 21 | #auxiliaries 22 | t 9 0 5 23 | t 10 4 0 24 | t 11 20 5 25 | members 26 | t 1 1 2 27 | t 2 1 6 28 | t 3 1 5 29 | t 4 6 2 30 | t 5 2 3 31 | t 6 6 7 32 | t 7 7 3 33 | t 8 3 4 34 | t 9 3 5 35 | t 10 7 8 36 | t 11 8 4 37 | t 12 4 5 38 | t 13 8 5 39 | # Auxiliary members next 40 | t 14 1 10 41 | t 15 1 9 42 | t 16 5 11 43 | loads 44 | # node X load, Y load 45 | 2 10 4 46 | 3 0 6 47 | 4 0 -13 48 | end 49 | 50 | -------------------------------------------------------------------------------- /truss/dat/sdtruss4.dat: -------------------------------------------------------------------------------- 1 | # sdtruss4.dat - Statically Determinate Complex Truss #4 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p61 Fig. 4.7 5 | # Flags - decoration for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 6 9 3 9 | g 3 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 0 6 15 | t 3 5 11 16 | t 4 13 11 17 | t 5 18 6 18 | t 6 18 0 19 | #auxiliaries 20 | t 7 0 4 21 | t 8 22 0 22 | t 9 18 4 23 | members 24 | t 1 1 2 25 | t 2 2 3 26 | t 3 3 4 27 | t 4 4 5 28 | t 5 6 5 29 | t 6 1 4 30 | t 7 1 5 31 | t 8 2 6 32 | t 9 3 6 33 | # Auxiliary members next 34 | t 10 1 7 35 | t 11 6 8 36 | t 12 6 9 37 | loads 38 | # node X load, Y load 39 | 2 4 0 40 | 3 0 -7 41 | 4 11 0 42 | end 43 | 44 | -------------------------------------------------------------------------------- /truss/ncrunch.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # ncrunch.py revised number cruncher module 3 | 4 | # Copyright (c) 2010-2011, 2013 Algis Kabaila. All rights reserved. 5 | # This work is made available under the terms of the 6 | # Creative Commons Attribution-ShareAlike 3.0 license, 7 | # http://creativecommons.org/licenses/by-sa/3.0/. 8 | 9 | import sys 10 | 11 | import io 12 | import math 13 | 14 | import numpy as np 15 | from numpy import linalg as la 16 | 17 | # Global functions 18 | 19 | def printerm(printline, a, LineLen=5): 20 | ''' Output (Matrix a, [Line length]) -> Output matrix a of size (m x n) 21 | according to function printline. Line length can be specified as 3-rd parameter.''' 22 | m, n = len(a), len(a[0]) 23 | printline('Matrix of dimensions' + ' (%s x %s)' % (m, n)) 24 | for i in range(m): 25 | line = '' 26 | for j in range(n): 27 | line += (' %12.5E ' % a[i, j]) 28 | if ( (j + 1) % LineLen) == 0: 29 | printline(line) # New line 30 | line = '' 31 | printline(line) 32 | # blank line between rows if len(row) > 5 33 | if (j == (n - 1)) and ((j + 1) > LineLen) : 34 | printline(' ') 35 | return 36 | 37 | 38 | def printdict(printline, a): 39 | '''Print dictionary "a" in almost decent format.''' 40 | keys = a.keys() 41 | keys.sort() 42 | for i in keys: 43 | printline(str(i) + ' ' + a[i].__str__()) 44 | 45 | class Cruncher(): 46 | def __init__(self, name, printline, dataBall): 47 | '''Receive arguments and store as class variables.''' 48 | self.name = name 49 | self.printline = printline 50 | # self.dataBall = dataBall 51 | self.fin = io.StringIO(dataBall) # Open for reading 52 | 53 | def lineread(self): 54 | '''Read and echo a line. Only return line without "#" character,''' 55 | while True: 56 | # read line - loop for ever 57 | line = self.fin.readline() 58 | # echo line 59 | self.printline(line) 60 | if not ('#' in line): 61 | break 62 | return line 63 | 64 | def prolog(self): 65 | fin = self.fin 66 | lineread = self.lineread 67 | printline = self.printline 68 | for line in fin: 69 | printline(line.strip()) 70 | fin.seek(0, 0) # rewind file 71 | printline('*** Data Echo Finished ***') 72 | printline('echo of "general" flag.') 73 | lineread() 74 | lst = lineread().split() 75 | assert lst[0] == "g", 'First Charactero should be == "g"' 76 | noNodes = int(lst[1]) 77 | noMembers = int(lst[2]) 78 | noAuxiliaries = int(lst[3]) 79 | noLoadCases = 1 80 | lst = lineread().split() 81 | assert lst[0] == "g", 'First Charactero should be == "g"' 82 | noLoadLines = int(lst[1]) # do it for one Load Case only. 83 | printline("noLoadLines = " + str(noLoadLines)) 84 | return lineread, noNodes, noMembers, noAuxiliaries,\ 85 | noLoadCases, noLoadLines 86 | 87 | def doNodes(self, lineread, noNodes, noAuxiliaries): 88 | flag = lineread() 89 | assert flag.strip() == 'nodes', '"nodes" signals that nodal data follows' 90 | nodes = {} 91 | for i in range(noNodes + noAuxiliaries): 92 | lst = lineread().split() 93 | assert lst[0] == 't', 'Data for ordinary nodes starts with "t".' 94 | nodeNo = int(lst[1]) 95 | x_coord = float(lst[2]) 96 | y_coord = float(lst[3]) 97 | freedom_x = (nodeNo - 1) * 2 + 1 98 | freedom_y = freedom_x + 1 99 | nodes[nodeNo] = (nodeNo, x_coord, y_coord, freedom_x, freedom_y) 100 | self.printline('Node freedoms %s %s ' % (str(freedom_x), str(freedom_y))) 101 | return nodes 102 | 103 | def doMembers(self, lineread, noMembers, noAuxiliaries): 104 | flag = lineread() 105 | assert flag.strip() == 'members', '"members" flag start of member data' 106 | members = {} 107 | for i in range(noMembers + noAuxiliaries): 108 | lst = lineread().split() 109 | assert lst[0] == 't', 'Truss member data starts with "t"' 110 | no = int(lst[1]) 111 | end1 = int(lst[2]) 112 | end2 = int(lst[3]) 113 | members[no] = (no, end1, end2) 114 | return members 115 | 116 | def doMemprops(self, noMembers, noAuxiliaries,\ 117 | members, nodes): 118 | '''Calculate and store directory of 119 | Member Properties.''' 120 | printline = self.printline 121 | memprops = {} 122 | for i in range(noMembers + noAuxiliaries): 123 | member = members[i+1] 124 | printline(member.__str__()) 125 | # end1, end2 = end node nos 126 | end1 = member[1] 127 | end2 = member[2] 128 | locvec = [nodes[end1][3], nodes[end1][4], nodes[end2][3],\ 129 | nodes[end2][4]] 130 | dx = nodes[end2][1] - nodes[end1][1] 131 | dy = nodes[end2][2] - nodes[end1][2] 132 | memlen = math.sqrt(dx * dx + dy * dy) 133 | cosx = dx / memlen 134 | cosy = dy / memlen 135 | dircos = [cosx, cosy] 136 | memprops[i + 1] = locvec + dircos 137 | z = locvec 138 | printline('member_no, locvec = %s %s %s %s %s ' %\ 139 | (str(i + 1), str(z[0]), str(z[1]), str(z[2]), str(z[3]))) 140 | printline('direction cosines = %s %s ' % (str(cosx), str(cosy))) 141 | return memprops 142 | 143 | def crunch(self): 144 | '''Mainline to number crunch the calculation of 145 | member foreces.''' 146 | # echo data: 147 | printline = self.printline 148 | lineread, noNodes, noMembers, noAuxiliaries,\ 149 | noLoadCases, noLoadLines = self.prolog() 150 | nodes = self.doNodes(lineread, noNodes, noAuxiliaries) 151 | printline("nodes = ") 152 | printdict(printline, nodes) 153 | members = self.doMembers(lineread, noMembers, noAuxiliaries) 154 | printline('members = ') 155 | printdict(printline, members) 156 | memprops = self.doMemprops( noMembers, noAuxiliaries, members, nodes) 157 | printline('memprops =') 158 | printdict(self.printline, memprops) 159 | ndim = noNodes * 2 160 | printline('Dimension of connection mat ndim =' + str(ndim)) 161 | connection = np.zeros((ndim, ndim), dtype = "float") 162 | for i in range(noMembers + noAuxiliaries): 163 | member = memprops[i + 1] 164 | connection[member[0] - 1, i] += member[4] 165 | connection[member[1] - 1, i] += member[5] 166 | if i < noMembers: 167 | connection[member[2] - 1, i] += -member[4] 168 | connection[member[3] - 1, i] += -member[5] 169 | printline(' ') 170 | printline('Connection matrix') 171 | printerm(printline, connection) 172 | try: 173 | conditionnumber = la.cond(connection) 174 | inv = la.inv(connection) 175 | except la.LinAlgError, e: 176 | printline( '%s %s' % (type(e).__name__, e)) 177 | else: 178 | i = np.dot(inv, connection) 179 | loads = np.zeros((ndim, 1), dtype = "float") 180 | line = lineread() 181 | assert line.strip() == 'loads', 'Flag for loads is loads' 182 | for i in range(noLoadLines): 183 | lst = lineread().split() 184 | nodeNo = int(lst[0]) 185 | node = nodes[nodeNo] 186 | loads[node[3] - 1] = -float(lst[1]) 187 | loads[node[4] - 1] = -float(lst[2]) 188 | printline('') 189 | printline('Load matrix = ') 190 | printerm(printline, loads) 191 | memberActions = np.dot(inv, loads) 192 | printline(' ') 193 | printline("Member Actions, [Ni | Ri] matrix.") 194 | printerm(printline, memberActions) 195 | printline(' ') 196 | printline('matrix condition number = ' + str(conditionnumber)) 197 | printline(' ') 198 | 199 | def main(printline, name, dataBall): 200 | cruncher = Cruncher(name, printline, dataBall) 201 | cruncher.crunch() 202 | 203 | if __name__ == '__main__': 204 | 205 | def printline(line): 206 | print line 207 | print 'Usage: Give a name for data in the "dat" subdirectory' 208 | print 'as program parameter. Default is "sdtruss1.dat"' 209 | if len(sys.argv) > 1: 210 | name = sys.argv[1] 211 | else: 212 | name = 'sdtruss1.dat' 213 | try: 214 | with open('dat/' + name, 'r') as finput: 215 | dataBall = unicode(finput.read()) 216 | except IOError: 217 | print 'Failed to open given file name.' 218 | sys.exit(1) 219 | main(printline, name, dataBall) 220 | 221 | -------------------------------------------------------------------------------- /truss/out/sdtruss0.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss0.dat 3 | ================================ 4 | #sdtruss0.dat 5 | # Simplest statically determined truss. By changing the x dimension 6 | # of node 6, it can be made unstable. Analyse it for vertical force, 7 | # or horizontal force at node 1. 8 | general 9 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 10 | g 4 5 3 1 11 | # no of line in load entry 12 | g 1 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 2 4 17 | t 2 0 2 18 | t 3 2 2 19 | t 4 4 2 20 | # auxiliaries 21 | t 5 0 0 22 | t 6 3.5 0 23 | t 7 4 0 24 | members 25 | t 1 2 1 26 | t 2 2 3 27 | t 3 3 1 28 | t 4 1 4 29 | t 5 3 4 30 | # Reactions or Auxiliary members. 31 | t 6 2 5 32 | t 7 3 6 33 | t 8 4 7 34 | loads 35 | # node X load, Y load 36 | 1 0 2 37 | end 38 | *** Data Echo Finished *** 39 | echo of "general" flag. 40 | #sdtruss0.dat 41 | # Simplest statically determined truss. By changing the x dimension 42 | # of node 6, it can be made unstable. Analyse it for vertical force, 43 | # or horizontal force at node 1. 44 | general 45 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 46 | g 4 5 3 1 47 | # no of line in load entry 48 | g 1 49 | noLoadLines = 1 50 | nodes 51 | # Nodal list 52 | # t no x y 53 | t 1 2 4 54 | Node freedoms 1 2 55 | t 2 0 2 56 | Node freedoms 3 4 57 | t 3 2 2 58 | Node freedoms 5 6 59 | t 4 4 2 60 | Node freedoms 7 8 61 | # auxiliaries 62 | t 5 0 0 63 | Node freedoms 9 10 64 | t 6 3.5 0 65 | Node freedoms 11 12 66 | t 7 4 0 67 | Node freedoms 13 14 68 | nodes = 69 | 1 (1, 2.0, 4.0, 1, 2) 70 | 2 (2, 0.0, 2.0, 3, 4) 71 | 3 (3, 2.0, 2.0, 5, 6) 72 | 4 (4, 4.0, 2.0, 7, 8) 73 | 5 (5, 0.0, 0.0, 9, 10) 74 | 6 (6, 3.5, 0.0, 11, 12) 75 | 7 (7, 4.0, 0.0, 13, 14) 76 | members 77 | t 1 2 1 78 | t 2 2 3 79 | t 3 3 1 80 | t 4 1 4 81 | t 5 3 4 82 | # Reactions or Auxiliary members. 83 | t 6 2 5 84 | t 7 3 6 85 | t 8 4 7 86 | members = 87 | 1 (1, 2, 1) 88 | 2 (2, 2, 3) 89 | 3 (3, 3, 1) 90 | 4 (4, 1, 4) 91 | 5 (5, 3, 4) 92 | 6 (6, 2, 5) 93 | 7 (7, 3, 6) 94 | 8 (8, 4, 7) 95 | (1, 2, 1) 96 | member_no, locvec = 1 3 4 1 2 97 | direction cosines = 0.707106781187 0.707106781187 98 | (2, 2, 3) 99 | member_no, locvec = 2 3 4 5 6 100 | direction cosines = 1.0 0.0 101 | (3, 3, 1) 102 | member_no, locvec = 3 5 6 1 2 103 | direction cosines = 0.0 1.0 104 | (4, 1, 4) 105 | member_no, locvec = 4 1 2 7 8 106 | direction cosines = 0.707106781187 -0.707106781187 107 | (5, 3, 4) 108 | member_no, locvec = 5 5 6 7 8 109 | direction cosines = 1.0 0.0 110 | (6, 2, 5) 111 | member_no, locvec = 6 3 4 9 10 112 | direction cosines = 0.0 -1.0 113 | (7, 3, 6) 114 | member_no, locvec = 7 5 6 11 12 115 | direction cosines = 0.6 -0.8 116 | (8, 4, 7) 117 | member_no, locvec = 8 7 8 13 14 118 | direction cosines = 0.0 -1.0 119 | memprops = 120 | 1 [3, 4, 1, 2, 0.70710678118654746, 0.70710678118654746] 121 | 2 [3, 4, 5, 6, 1.0, 0.0] 122 | 3 [5, 6, 1, 2, 0.0, 1.0] 123 | 4 [1, 2, 7, 8, 0.70710678118654746, -0.70710678118654746] 124 | 5 [5, 6, 7, 8, 1.0, 0.0] 125 | 6 [3, 4, 9, 10, 0.0, -1.0] 126 | 7 [5, 6, 11, 12, 0.59999999999999998, -0.80000000000000004] 127 | 8 [7, 8, 13, 14, 0.0, -1.0] 128 | Dimension of connection mat ndim =8 129 | 130 | Connection matrix 131 | Matrix of dimensions (8 x 8) 132 | -7.07107E-01 0.00000E+00 0.00000E+00 7.07107E-01 0.00000E+00 133 | 0.00000E+00 0.00000E+00 0.00000E+00 134 | 135 | -7.07107E-01 0.00000E+00 -1.00000E+00 -7.07107E-01 0.00000E+00 136 | 0.00000E+00 0.00000E+00 0.00000E+00 137 | 138 | 7.07107E-01 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 139 | 0.00000E+00 0.00000E+00 0.00000E+00 140 | 141 | 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 142 | -1.00000E+00 0.00000E+00 0.00000E+00 143 | 144 | 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 145 | 0.00000E+00 6.00000E-01 0.00000E+00 146 | 147 | 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 148 | 0.00000E+00 -8.00000E-01 0.00000E+00 149 | 150 | 0.00000E+00 0.00000E+00 0.00000E+00 -7.07107E-01 -1.00000E+00 151 | 0.00000E+00 0.00000E+00 0.00000E+00 152 | 153 | 0.00000E+00 0.00000E+00 0.00000E+00 7.07107E-01 0.00000E+00 154 | 0.00000E+00 0.00000E+00 -1.00000E+00 155 | 156 | loads 157 | # node X load, Y load 158 | 1 0 2 159 | 160 | Load matrix = 161 | Matrix of dimensions (8 x 1) 162 | -0.00000E+00 163 | -2.00000E+00 164 | 0.00000E+00 165 | 0.00000E+00 166 | 0.00000E+00 167 | 0.00000E+00 168 | 0.00000E+00 169 | 0.00000E+00 170 | 171 | Member Actions, [Ni | Ri] matrix. 172 | Matrix of dimensions (8 x 1) 173 | 1.41421E+00 174 | -1.00000E+00 175 | 4.05492E-17 176 | 1.41421E+00 177 | -1.00000E+00 178 | 1.00000E+00 179 | 0.00000E+00 180 | 1.00000E+00 181 | 182 | matrix condition number = 11.6995513319 183 | -------------------------------------------------------------------------------- /truss/out/sdtruss1.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss1.dat 3 | ================================ 4 | # sdtruss1.dat - Statically Determinate Truss #1 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p49 Fig. 4.6 8 | # Flags - decoration for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 4 5 3 12 | g 4 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 4 3 18 | t 3 4 0 19 | t 4 8 0 20 | t 5 3 3 21 | t 6 10 0 22 | t 7 8 3 23 | members 24 | t 1 1 2 25 | t 2 2 4 26 | t 3 3 2 27 | t 4 1 3 28 | t 5 3 4 29 | t 6 1 5 30 | t 7 4 6 31 | t 8 4 7 32 | loads 33 | # node X load, Y load 34 | 1 0 -6 35 | 2 0 -14 36 | 3 0 -12 37 | 4 0 -8 38 | end 39 | 40 | *** Data Echo Finished *** 41 | echo of "general" flag. 42 | # sdtruss1.dat - Statically Determinate Truss #1 43 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 44 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 45 | # Ref. "Basic Concepts" p49 Fig. 4.6 46 | # Flags - decoration for this program 47 | general 48 | # noNodes, noMembers, noAuxiliaries 49 | g 4 5 3 50 | g 4 51 | noLoadLines = 4 52 | nodes 53 | # Nodal list 54 | # t no x y 55 | t 1 0 0 56 | Node freedoms 1 2 57 | t 2 4 3 58 | Node freedoms 3 4 59 | t 3 4 0 60 | Node freedoms 5 6 61 | t 4 8 0 62 | Node freedoms 7 8 63 | t 5 3 3 64 | Node freedoms 9 10 65 | t 6 10 0 66 | Node freedoms 11 12 67 | t 7 8 3 68 | Node freedoms 13 14 69 | nodes = 70 | 1 (1, 0.0, 0.0, 1, 2) 71 | 2 (2, 4.0, 3.0, 3, 4) 72 | 3 (3, 4.0, 0.0, 5, 6) 73 | 4 (4, 8.0, 0.0, 7, 8) 74 | 5 (5, 3.0, 3.0, 9, 10) 75 | 6 (6, 10.0, 0.0, 11, 12) 76 | 7 (7, 8.0, 3.0, 13, 14) 77 | members 78 | t 1 1 2 79 | t 2 2 4 80 | t 3 3 2 81 | t 4 1 3 82 | t 5 3 4 83 | t 6 1 5 84 | t 7 4 6 85 | t 8 4 7 86 | members = 87 | 1 (1, 1, 2) 88 | 2 (2, 2, 4) 89 | 3 (3, 3, 2) 90 | 4 (4, 1, 3) 91 | 5 (5, 3, 4) 92 | 6 (6, 1, 5) 93 | 7 (7, 4, 6) 94 | 8 (8, 4, 7) 95 | (1, 1, 2) 96 | member_no, locvec = 1 1 2 3 4 97 | direction cosines = 0.8 0.6 98 | (2, 2, 4) 99 | member_no, locvec = 2 3 4 7 8 100 | direction cosines = 0.8 -0.6 101 | (3, 3, 2) 102 | member_no, locvec = 3 5 6 3 4 103 | direction cosines = 0.0 1.0 104 | (4, 1, 3) 105 | member_no, locvec = 4 1 2 5 6 106 | direction cosines = 1.0 0.0 107 | (5, 3, 4) 108 | member_no, locvec = 5 5 6 7 8 109 | direction cosines = 1.0 0.0 110 | (6, 1, 5) 111 | member_no, locvec = 6 1 2 9 10 112 | direction cosines = 0.707106781187 0.707106781187 113 | (7, 4, 6) 114 | member_no, locvec = 7 7 8 11 12 115 | direction cosines = 1.0 0.0 116 | (8, 4, 7) 117 | member_no, locvec = 8 7 8 13 14 118 | direction cosines = 0.0 1.0 119 | memprops = 120 | 1 [1, 2, 3, 4, 0.80000000000000004, 0.59999999999999998] 121 | 2 [3, 4, 7, 8, 0.80000000000000004, -0.59999999999999998] 122 | 3 [5, 6, 3, 4, 0.0, 1.0] 123 | 4 [1, 2, 5, 6, 1.0, 0.0] 124 | 5 [5, 6, 7, 8, 1.0, 0.0] 125 | 6 [1, 2, 9, 10, 0.70710678118654757, 0.70710678118654757] 126 | 7 [7, 8, 11, 12, 1.0, 0.0] 127 | 8 [7, 8, 13, 14, 0.0, 1.0] 128 | Dimension of connection mat ndim =8 129 | 130 | Connection matrix 131 | Matrix of dimensions (8 x 8) 132 | 8.00000E-01 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 133 | 7.07107E-01 0.00000E+00 0.00000E+00 134 | 135 | 6.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 136 | 7.07107E-01 0.00000E+00 0.00000E+00 137 | 138 | -8.00000E-01 8.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 139 | 0.00000E+00 0.00000E+00 0.00000E+00 140 | 141 | -6.00000E-01 -6.00000E-01 -1.00000E+00 0.00000E+00 0.00000E+00 142 | 0.00000E+00 0.00000E+00 0.00000E+00 143 | 144 | 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 1.00000E+00 145 | 0.00000E+00 0.00000E+00 0.00000E+00 146 | 147 | 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 148 | 0.00000E+00 0.00000E+00 0.00000E+00 149 | 150 | 0.00000E+00 -8.00000E-01 0.00000E+00 0.00000E+00 -1.00000E+00 151 | 0.00000E+00 1.00000E+00 0.00000E+00 152 | 153 | 0.00000E+00 6.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 154 | 0.00000E+00 0.00000E+00 1.00000E+00 155 | 156 | loads 157 | # node X load, Y load 158 | 1 0 -6 159 | 2 0 -14 160 | 3 0 -12 161 | 4 0 -8 162 | 163 | Load matrix = 164 | Matrix of dimensions (8 x 1) 165 | -0.00000E+00 166 | 6.00000E+00 167 | -0.00000E+00 168 | 1.40000E+01 169 | -0.00000E+00 170 | 1.20000E+01 171 | -0.00000E+00 172 | 8.00000E+00 173 | 174 | Member Actions, [Ni | Ri] matrix. 175 | Matrix of dimensions (8 x 1) 176 | -2.16667E+01 177 | -2.16667E+01 178 | 1.20000E+01 179 | -1.66667E+00 180 | -1.66667E+00 181 | 2.68701E+01 182 | -1.90000E+01 183 | 2.10000E+01 184 | 185 | matrix condition number = 6.20450567822 186 | -------------------------------------------------------------------------------- /truss/out/sdtruss2.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss2.dat 3 | ================================ 4 | # sdtruss2.dat - Statically Determinate Complex Truss #2 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p46 Fig. 4.5 8 | # Flags - decoration for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 6 9 3 12 | g 3 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 12 0 18 | t 3 0 9 19 | t 4 3 2 20 | t 5 5.5 2 21 | t 6 3 4 22 | t 7 4 0 23 | t 8 0 5 24 | t 9 12 5 25 | members 26 | t 1 1 3 27 | t 2 1 2 28 | t 3 3 2 29 | t 4 4 6 30 | t 5 4 5 31 | t 6 6 5 32 | t 7 3 4 33 | t 8 1 5 34 | t 9 6 2 35 | # Auxiliary members next 36 | t 10 1 7 37 | t 11 1 8 38 | t 12 2 9 39 | loads 40 | # node X load, Y load 41 | 3 10 0 42 | 4 0 -19 43 | 5 17 -20 44 | end 45 | 46 | *** Data Echo Finished *** 47 | echo of "general" flag. 48 | # sdtruss2.dat - Statically Determinate Complex Truss #2 49 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 50 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 51 | # Ref. "Basic Concepts" p46 Fig. 4.5 52 | # Flags - decoration for this program 53 | general 54 | # noNodes, noMembers, noAuxiliaries 55 | g 6 9 3 56 | g 3 57 | noLoadLines = 3 58 | nodes 59 | # Nodal list 60 | # t no x y 61 | t 1 0 0 62 | Node freedoms 1 2 63 | t 2 12 0 64 | Node freedoms 3 4 65 | t 3 0 9 66 | Node freedoms 5 6 67 | t 4 3 2 68 | Node freedoms 7 8 69 | t 5 5.5 2 70 | Node freedoms 9 10 71 | t 6 3 4 72 | Node freedoms 11 12 73 | t 7 4 0 74 | Node freedoms 13 14 75 | t 8 0 5 76 | Node freedoms 15 16 77 | t 9 12 5 78 | Node freedoms 17 18 79 | nodes = 80 | 1 (1, 0.0, 0.0, 1, 2) 81 | 2 (2, 12.0, 0.0, 3, 4) 82 | 3 (3, 0.0, 9.0, 5, 6) 83 | 4 (4, 3.0, 2.0, 7, 8) 84 | 5 (5, 5.5, 2.0, 9, 10) 85 | 6 (6, 3.0, 4.0, 11, 12) 86 | 7 (7, 4.0, 0.0, 13, 14) 87 | 8 (8, 0.0, 5.0, 15, 16) 88 | 9 (9, 12.0, 5.0, 17, 18) 89 | members 90 | t 1 1 3 91 | t 2 1 2 92 | t 3 3 2 93 | t 4 4 6 94 | t 5 4 5 95 | t 6 6 5 96 | t 7 3 4 97 | t 8 1 5 98 | t 9 6 2 99 | # Auxiliary members next 100 | t 10 1 7 101 | t 11 1 8 102 | t 12 2 9 103 | members = 104 | 1 (1, 1, 3) 105 | 2 (2, 1, 2) 106 | 3 (3, 3, 2) 107 | 4 (4, 4, 6) 108 | 5 (5, 4, 5) 109 | 6 (6, 6, 5) 110 | 7 (7, 3, 4) 111 | 8 (8, 1, 5) 112 | 9 (9, 6, 2) 113 | 10 (10, 1, 7) 114 | 11 (11, 1, 8) 115 | 12 (12, 2, 9) 116 | (1, 1, 3) 117 | member_no, locvec = 1 1 2 5 6 118 | direction cosines = 0.0 1.0 119 | (2, 1, 2) 120 | member_no, locvec = 2 1 2 3 4 121 | direction cosines = 1.0 0.0 122 | (3, 3, 2) 123 | member_no, locvec = 3 5 6 3 4 124 | direction cosines = 0.8 -0.6 125 | (4, 4, 6) 126 | member_no, locvec = 4 7 8 11 12 127 | direction cosines = 0.0 1.0 128 | (5, 4, 5) 129 | member_no, locvec = 5 7 8 9 10 130 | direction cosines = 1.0 0.0 131 | (6, 6, 5) 132 | member_no, locvec = 6 11 12 9 10 133 | direction cosines = 0.780868809443 -0.624695047554 134 | (7, 3, 4) 135 | member_no, locvec = 7 5 6 7 8 136 | direction cosines = 0.393919298579 -0.919145030018 137 | (8, 1, 5) 138 | member_no, locvec = 8 1 2 9 10 139 | direction cosines = 0.939793423488 0.341743063087 140 | (9, 6, 2) 141 | member_no, locvec = 9 11 12 3 4 142 | direction cosines = 0.91381154862 -0.406138466053 143 | (10, 1, 7) 144 | member_no, locvec = 10 1 2 13 14 145 | direction cosines = 1.0 0.0 146 | (11, 1, 8) 147 | member_no, locvec = 11 1 2 15 16 148 | direction cosines = 0.0 1.0 149 | (12, 2, 9) 150 | member_no, locvec = 12 3 4 17 18 151 | direction cosines = 0.0 1.0 152 | memprops = 153 | 1 [1, 2, 5, 6, 0.0, 1.0] 154 | 2 [1, 2, 3, 4, 1.0, 0.0] 155 | 3 [5, 6, 3, 4, 0.80000000000000004, -0.59999999999999998] 156 | 4 [7, 8, 11, 12, 0.0, 1.0] 157 | 5 [7, 8, 9, 10, 1.0, 0.0] 158 | 6 [11, 12, 9, 10, 0.78086880944303039, -0.62469504755442429] 159 | 7 [5, 6, 7, 8, 0.39391929857916763, -0.91914503001805781] 160 | 8 [1, 2, 9, 10, 0.93979342348843697, 0.34174306308670438] 161 | 9 [11, 12, 3, 4, 0.91381154862025726, -0.40613846605344767] 162 | 10 [1, 2, 13, 14, 1.0, 0.0] 163 | 11 [1, 2, 15, 16, 0.0, 1.0] 164 | 12 [3, 4, 17, 18, 0.0, 1.0] 165 | Dimension of connection mat ndim =12 166 | 167 | Connection matrix 168 | Matrix of dimensions (12 x 12) 169 | 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 170 | 0.00000E+00 0.00000E+00 9.39793E-01 0.00000E+00 1.00000E+00 171 | 0.00000E+00 0.00000E+00 172 | 173 | 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 174 | 0.00000E+00 0.00000E+00 3.41743E-01 0.00000E+00 0.00000E+00 175 | 1.00000E+00 0.00000E+00 176 | 177 | 0.00000E+00 -1.00000E+00 -8.00000E-01 0.00000E+00 0.00000E+00 178 | 0.00000E+00 0.00000E+00 0.00000E+00 -9.13812E-01 0.00000E+00 179 | 0.00000E+00 0.00000E+00 180 | 181 | 0.00000E+00 0.00000E+00 6.00000E-01 0.00000E+00 0.00000E+00 182 | 0.00000E+00 0.00000E+00 0.00000E+00 4.06138E-01 0.00000E+00 183 | 0.00000E+00 1.00000E+00 184 | 185 | 0.00000E+00 0.00000E+00 8.00000E-01 0.00000E+00 0.00000E+00 186 | 0.00000E+00 3.93919E-01 0.00000E+00 0.00000E+00 0.00000E+00 187 | 0.00000E+00 0.00000E+00 188 | 189 | -1.00000E+00 0.00000E+00 -6.00000E-01 0.00000E+00 0.00000E+00 190 | 0.00000E+00 -9.19145E-01 0.00000E+00 0.00000E+00 0.00000E+00 191 | 0.00000E+00 0.00000E+00 192 | 193 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 194 | 0.00000E+00 -3.93919E-01 0.00000E+00 0.00000E+00 0.00000E+00 195 | 0.00000E+00 0.00000E+00 196 | 197 | 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 198 | 0.00000E+00 9.19145E-01 0.00000E+00 0.00000E+00 0.00000E+00 199 | 0.00000E+00 0.00000E+00 200 | 201 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 202 | -7.80869E-01 0.00000E+00 -9.39793E-01 0.00000E+00 0.00000E+00 203 | 0.00000E+00 0.00000E+00 204 | 205 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 206 | 6.24695E-01 0.00000E+00 -3.41743E-01 0.00000E+00 0.00000E+00 207 | 0.00000E+00 0.00000E+00 208 | 209 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 210 | 7.80869E-01 0.00000E+00 0.00000E+00 9.13812E-01 0.00000E+00 211 | 0.00000E+00 0.00000E+00 212 | 213 | 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 214 | -6.24695E-01 0.00000E+00 0.00000E+00 -4.06138E-01 0.00000E+00 215 | 0.00000E+00 0.00000E+00 216 | 217 | loads 218 | # node X load, Y load 219 | 3 10 0 220 | 4 0 -19 221 | 5 17 -20 222 | 223 | Load matrix = 224 | Matrix of dimensions (12 x 1) 225 | 0.00000E+00 226 | 0.00000E+00 227 | 0.00000E+00 228 | 0.00000E+00 229 | -1.00000E+01 230 | -0.00000E+00 231 | -0.00000E+00 232 | 1.90000E+01 233 | -1.70000E+01 234 | 2.00000E+01 235 | 0.00000E+00 236 | 0.00000E+00 237 | 238 | Member Actions, [Ni | Ri] matrix. 239 | Matrix of dimensions (12 x 1) 240 | -9.98864E+00 241 | 4.00938E+01 242 | -2.63068E+01 243 | -6.77273E+00 244 | 1.10455E+01 245 | 2.43937E+01 246 | 2.80399E+01 247 | -1.39326E+01 248 | -2.08449E+01 249 | -2.70000E+01 250 | 1.47500E+01 251 | 2.42500E+01 252 | 253 | matrix condition number = 7.5990495049 254 | -------------------------------------------------------------------------------- /truss/out/sdtruss3.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss3.dat 3 | ================================ 4 | # sdtruss3.dat - Statically Determinate Complex Truss #3 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p61 Fig. 4.6 8 | # Flags - whim for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 8 13 3 12 | g 3 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 5 5 18 | t 3 10 5 19 | t 4 15 5 20 | t 5 20 0 21 | t 6 5 0 22 | t 7 10 2.5 23 | t 8 15 0 24 | #auxiliaries 25 | t 9 0 5 26 | t 10 4 0 27 | t 11 20 5 28 | members 29 | t 1 1 2 30 | t 2 1 6 31 | t 3 1 5 32 | t 4 6 2 33 | t 5 2 3 34 | t 6 6 7 35 | t 7 7 3 36 | t 8 3 4 37 | t 9 3 5 38 | t 10 7 8 39 | t 11 8 4 40 | t 12 4 5 41 | t 13 8 5 42 | # Auxiliary members next 43 | t 14 1 10 44 | t 15 1 9 45 | t 16 5 11 46 | loads 47 | # node X load, Y load 48 | 2 10 4 49 | 3 0 6 50 | 4 0 -13 51 | end 52 | 53 | *** Data Echo Finished *** 54 | echo of "general" flag. 55 | # sdtruss3.dat - Statically Determinate Complex Truss #3 56 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 57 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 58 | # Ref. "Basic Concepts" p61 Fig. 4.6 59 | # Flags - whim for this program 60 | general 61 | # noNodes, noMembers, noAuxiliaries 62 | g 8 13 3 63 | g 3 64 | noLoadLines = 3 65 | nodes 66 | # Nodal list 67 | # t no x y 68 | t 1 0 0 69 | Node freedoms 1 2 70 | t 2 5 5 71 | Node freedoms 3 4 72 | t 3 10 5 73 | Node freedoms 5 6 74 | t 4 15 5 75 | Node freedoms 7 8 76 | t 5 20 0 77 | Node freedoms 9 10 78 | t 6 5 0 79 | Node freedoms 11 12 80 | t 7 10 2.5 81 | Node freedoms 13 14 82 | t 8 15 0 83 | Node freedoms 15 16 84 | #auxiliaries 85 | t 9 0 5 86 | Node freedoms 17 18 87 | t 10 4 0 88 | Node freedoms 19 20 89 | t 11 20 5 90 | Node freedoms 21 22 91 | nodes = 92 | 1 (1, 0.0, 0.0, 1, 2) 93 | 2 (2, 5.0, 5.0, 3, 4) 94 | 3 (3, 10.0, 5.0, 5, 6) 95 | 4 (4, 15.0, 5.0, 7, 8) 96 | 5 (5, 20.0, 0.0, 9, 10) 97 | 6 (6, 5.0, 0.0, 11, 12) 98 | 7 (7, 10.0, 2.5, 13, 14) 99 | 8 (8, 15.0, 0.0, 15, 16) 100 | 9 (9, 0.0, 5.0, 17, 18) 101 | 10 (10, 4.0, 0.0, 19, 20) 102 | 11 (11, 20.0, 5.0, 21, 22) 103 | members 104 | t 1 1 2 105 | t 2 1 6 106 | t 3 1 5 107 | t 4 6 2 108 | t 5 2 3 109 | t 6 6 7 110 | t 7 7 3 111 | t 8 3 4 112 | t 9 3 5 113 | t 10 7 8 114 | t 11 8 4 115 | t 12 4 5 116 | t 13 8 5 117 | # Auxiliary members next 118 | t 14 1 10 119 | t 15 1 9 120 | t 16 5 11 121 | members = 122 | 1 (1, 1, 2) 123 | 2 (2, 1, 6) 124 | 3 (3, 1, 5) 125 | 4 (4, 6, 2) 126 | 5 (5, 2, 3) 127 | 6 (6, 6, 7) 128 | 7 (7, 7, 3) 129 | 8 (8, 3, 4) 130 | 9 (9, 3, 5) 131 | 10 (10, 7, 8) 132 | 11 (11, 8, 4) 133 | 12 (12, 4, 5) 134 | 13 (13, 8, 5) 135 | 14 (14, 1, 10) 136 | 15 (15, 1, 9) 137 | 16 (16, 5, 11) 138 | (1, 1, 2) 139 | member_no, locvec = 1 1 2 3 4 140 | direction cosines = 0.707106781187 0.707106781187 141 | (2, 1, 6) 142 | member_no, locvec = 2 1 2 11 12 143 | direction cosines = 1.0 0.0 144 | (3, 1, 5) 145 | member_no, locvec = 3 1 2 9 10 146 | direction cosines = 1.0 0.0 147 | (4, 6, 2) 148 | member_no, locvec = 4 11 12 3 4 149 | direction cosines = 0.0 1.0 150 | (5, 2, 3) 151 | member_no, locvec = 5 3 4 5 6 152 | direction cosines = 1.0 0.0 153 | (6, 6, 7) 154 | member_no, locvec = 6 11 12 13 14 155 | direction cosines = 0.894427191 0.4472135955 156 | (7, 7, 3) 157 | member_no, locvec = 7 13 14 5 6 158 | direction cosines = 0.0 1.0 159 | (8, 3, 4) 160 | member_no, locvec = 8 5 6 7 8 161 | direction cosines = 1.0 0.0 162 | (9, 3, 5) 163 | member_no, locvec = 9 5 6 9 10 164 | direction cosines = 0.894427191 -0.4472135955 165 | (10, 7, 8) 166 | member_no, locvec = 10 13 14 15 16 167 | direction cosines = 0.894427191 -0.4472135955 168 | (11, 8, 4) 169 | member_no, locvec = 11 15 16 7 8 170 | direction cosines = 0.0 1.0 171 | (12, 4, 5) 172 | member_no, locvec = 12 7 8 9 10 173 | direction cosines = 0.707106781187 -0.707106781187 174 | (13, 8, 5) 175 | member_no, locvec = 13 15 16 9 10 176 | direction cosines = 1.0 0.0 177 | (14, 1, 10) 178 | member_no, locvec = 14 1 2 19 20 179 | direction cosines = 1.0 0.0 180 | (15, 1, 9) 181 | member_no, locvec = 15 1 2 17 18 182 | direction cosines = 0.0 1.0 183 | (16, 5, 11) 184 | member_no, locvec = 16 9 10 21 22 185 | direction cosines = 0.0 1.0 186 | memprops = 187 | 1 [1, 2, 3, 4, 0.70710678118654746, 0.70710678118654746] 188 | 2 [1, 2, 11, 12, 1.0, 0.0] 189 | 3 [1, 2, 9, 10, 1.0, 0.0] 190 | 4 [11, 12, 3, 4, 0.0, 1.0] 191 | 5 [3, 4, 5, 6, 1.0, 0.0] 192 | 6 [11, 12, 13, 14, 0.89442719099991586, 0.44721359549995793] 193 | 7 [13, 14, 5, 6, 0.0, 1.0] 194 | 8 [5, 6, 7, 8, 1.0, 0.0] 195 | 9 [5, 6, 9, 10, 0.89442719099991586, -0.44721359549995793] 196 | 10 [13, 14, 15, 16, 0.89442719099991586, -0.44721359549995793] 197 | 11 [15, 16, 7, 8, 0.0, 1.0] 198 | 12 [7, 8, 9, 10, 0.70710678118654746, -0.70710678118654746] 199 | 13 [15, 16, 9, 10, 1.0, 0.0] 200 | 14 [1, 2, 19, 20, 1.0, 0.0] 201 | 15 [1, 2, 17, 18, 0.0, 1.0] 202 | 16 [9, 10, 21, 22, 0.0, 1.0] 203 | Dimension of connection mat ndim =16 204 | 205 | Connection matrix 206 | Matrix of dimensions (16 x 16) 207 | 7.07107E-01 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 208 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 209 | 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 210 | 0.00000E+00 211 | 212 | 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 213 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 214 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 215 | 0.00000E+00 216 | 217 | -7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 218 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 219 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 220 | 0.00000E+00 221 | 222 | -7.07107E-01 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 223 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 224 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 225 | 0.00000E+00 226 | 227 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 228 | 0.00000E+00 0.00000E+00 1.00000E+00 8.94427E-01 0.00000E+00 229 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 230 | 0.00000E+00 231 | 232 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 233 | 0.00000E+00 -1.00000E+00 0.00000E+00 -4.47214E-01 0.00000E+00 234 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 235 | 0.00000E+00 236 | 237 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 238 | 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 239 | 0.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 240 | 0.00000E+00 241 | 242 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 243 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 244 | -1.00000E+00 -7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 245 | 0.00000E+00 246 | 247 | 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 248 | 0.00000E+00 0.00000E+00 0.00000E+00 -8.94427E-01 0.00000E+00 249 | 0.00000E+00 -7.07107E-01 -1.00000E+00 0.00000E+00 0.00000E+00 250 | 0.00000E+00 251 | 252 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 253 | 0.00000E+00 0.00000E+00 0.00000E+00 4.47214E-01 0.00000E+00 254 | 0.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 255 | 1.00000E+00 256 | 257 | 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 258 | 8.94427E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 259 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 260 | 0.00000E+00 261 | 262 | 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 263 | 4.47214E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 264 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 265 | 0.00000E+00 266 | 267 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 268 | -8.94427E-01 0.00000E+00 0.00000E+00 0.00000E+00 8.94427E-01 269 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 270 | 0.00000E+00 271 | 272 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 273 | -4.47214E-01 1.00000E+00 0.00000E+00 0.00000E+00 -4.47214E-01 274 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 275 | 0.00000E+00 276 | 277 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 278 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -8.94427E-01 279 | 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 280 | 0.00000E+00 281 | 282 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 283 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 4.47214E-01 284 | 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 285 | 0.00000E+00 286 | 287 | loads 288 | # node X load, Y load 289 | 2 10 4 290 | 3 0 6 291 | 4 0 -13 292 | 293 | Load matrix = 294 | Matrix of dimensions (16 x 1) 295 | 0.00000E+00 296 | 0.00000E+00 297 | -1.00000E+01 298 | -4.00000E+00 299 | -0.00000E+00 300 | -6.00000E+00 301 | -0.00000E+00 302 | 1.30000E+01 303 | 0.00000E+00 304 | 0.00000E+00 305 | 0.00000E+00 306 | 0.00000E+00 307 | 0.00000E+00 308 | 0.00000E+00 309 | 0.00000E+00 310 | 0.00000E+00 311 | 312 | Member Actions, [Ni | Ri] matrix. 313 | Matrix of dimensions (16 x 1) 314 | 7.42462E+00 315 | 2.50000E+00 316 | 2.25000E+00 317 | -1.25000E+00 318 | -4.75000E+00 319 | 2.79508E+00 320 | 2.50000E+00 321 | -1.17500E+01 322 | 7.82624E+00 323 | 2.79508E+00 324 | -1.25000E+00 325 | -1.66170E+01 326 | 2.50000E+00 327 | -1.00000E+01 328 | -5.25000E+00 329 | 8.25000E+00 330 | 331 | matrix condition number = 14.9856951066 332 | -------------------------------------------------------------------------------- /truss/out/sdtruss4.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss4.dat 3 | ================================ 4 | # sdtruss4.dat - Statically Determinate Complex Truss #4 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p61 Fig. 4.7 8 | # Flags - decoration for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 6 9 3 12 | g 3 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 0 6 18 | t 3 5 11 19 | t 4 13 11 20 | t 5 18 6 21 | t 6 18 0 22 | #auxiliaries 23 | t 7 0 4 24 | t 8 22 0 25 | t 9 18 4 26 | members 27 | t 1 1 2 28 | t 2 2 3 29 | t 3 3 4 30 | t 4 4 5 31 | t 5 6 5 32 | t 6 1 4 33 | t 7 1 5 34 | t 8 2 6 35 | t 9 3 6 36 | # Auxiliary members next 37 | t 10 1 7 38 | t 11 6 8 39 | t 12 6 9 40 | loads 41 | # node X load, Y load 42 | 2 4 0 43 | 3 0 -7 44 | 4 11 0 45 | end 46 | 47 | *** Data Echo Finished *** 48 | echo of "general" flag. 49 | # sdtruss4.dat - Statically Determinate Complex Truss #4 50 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 51 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 52 | # Ref. "Basic Concepts" p61 Fig. 4.7 53 | # Flags - decoration for this program 54 | general 55 | # noNodes, noMembers, noAuxiliaries 56 | g 6 9 3 57 | g 3 58 | noLoadLines = 3 59 | nodes 60 | # Nodal list 61 | # t no x y 62 | t 1 0 0 63 | Node freedoms 1 2 64 | t 2 0 6 65 | Node freedoms 3 4 66 | t 3 5 11 67 | Node freedoms 5 6 68 | t 4 13 11 69 | Node freedoms 7 8 70 | t 5 18 6 71 | Node freedoms 9 10 72 | t 6 18 0 73 | Node freedoms 11 12 74 | #auxiliaries 75 | t 7 0 4 76 | Node freedoms 13 14 77 | t 8 22 0 78 | Node freedoms 15 16 79 | t 9 18 4 80 | Node freedoms 17 18 81 | nodes = 82 | 1 (1, 0.0, 0.0, 1, 2) 83 | 2 (2, 0.0, 6.0, 3, 4) 84 | 3 (3, 5.0, 11.0, 5, 6) 85 | 4 (4, 13.0, 11.0, 7, 8) 86 | 5 (5, 18.0, 6.0, 9, 10) 87 | 6 (6, 18.0, 0.0, 11, 12) 88 | 7 (7, 0.0, 4.0, 13, 14) 89 | 8 (8, 22.0, 0.0, 15, 16) 90 | 9 (9, 18.0, 4.0, 17, 18) 91 | members 92 | t 1 1 2 93 | t 2 2 3 94 | t 3 3 4 95 | t 4 4 5 96 | t 5 6 5 97 | t 6 1 4 98 | t 7 1 5 99 | t 8 2 6 100 | t 9 3 6 101 | # Auxiliary members next 102 | t 10 1 7 103 | t 11 6 8 104 | t 12 6 9 105 | members = 106 | 1 (1, 1, 2) 107 | 2 (2, 2, 3) 108 | 3 (3, 3, 4) 109 | 4 (4, 4, 5) 110 | 5 (5, 6, 5) 111 | 6 (6, 1, 4) 112 | 7 (7, 1, 5) 113 | 8 (8, 2, 6) 114 | 9 (9, 3, 6) 115 | 10 (10, 1, 7) 116 | 11 (11, 6, 8) 117 | 12 (12, 6, 9) 118 | (1, 1, 2) 119 | member_no, locvec = 1 1 2 3 4 120 | direction cosines = 0.0 1.0 121 | (2, 2, 3) 122 | member_no, locvec = 2 3 4 5 6 123 | direction cosines = 0.707106781187 0.707106781187 124 | (3, 3, 4) 125 | member_no, locvec = 3 5 6 7 8 126 | direction cosines = 1.0 0.0 127 | (4, 4, 5) 128 | member_no, locvec = 4 7 8 9 10 129 | direction cosines = 0.707106781187 -0.707106781187 130 | (5, 6, 5) 131 | member_no, locvec = 5 11 12 9 10 132 | direction cosines = 0.0 1.0 133 | (6, 1, 4) 134 | member_no, locvec = 6 1 2 7 8 135 | direction cosines = 0.763386285369 0.645942241466 136 | (7, 1, 5) 137 | member_no, locvec = 7 1 2 9 10 138 | direction cosines = 0.948683298051 0.316227766017 139 | (8, 2, 6) 140 | member_no, locvec = 8 3 4 11 12 141 | direction cosines = 0.948683298051 -0.316227766017 142 | (9, 3, 6) 143 | member_no, locvec = 9 5 6 11 12 144 | direction cosines = 0.763386285369 -0.645942241466 145 | (10, 1, 7) 146 | member_no, locvec = 10 1 2 13 14 147 | direction cosines = 0.0 1.0 148 | (11, 6, 8) 149 | member_no, locvec = 11 11 12 15 16 150 | direction cosines = 1.0 0.0 151 | (12, 6, 9) 152 | member_no, locvec = 12 11 12 17 18 153 | direction cosines = 0.0 1.0 154 | memprops = 155 | 1 [1, 2, 3, 4, 0.0, 1.0] 156 | 2 [3, 4, 5, 6, 0.70710678118654746, 0.70710678118654746] 157 | 3 [5, 6, 7, 8, 1.0, 0.0] 158 | 4 [7, 8, 9, 10, 0.70710678118654746, -0.70710678118654746] 159 | 5 [11, 12, 9, 10, 0.0, 1.0] 160 | 6 [1, 2, 7, 8, 0.76338628536911446, 0.64594224146617374] 161 | 7 [1, 2, 9, 10, 0.94868329805051377, 0.31622776601683794] 162 | 8 [3, 4, 11, 12, 0.94868329805051377, -0.31622776601683794] 163 | 9 [5, 6, 11, 12, 0.76338628536911446, -0.64594224146617374] 164 | 10 [1, 2, 13, 14, 0.0, 1.0] 165 | 11 [11, 12, 15, 16, 1.0, 0.0] 166 | 12 [11, 12, 17, 18, 0.0, 1.0] 167 | Dimension of connection mat ndim =12 168 | 169 | Connection matrix 170 | Matrix of dimensions (12 x 12) 171 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 172 | 7.63386E-01 9.48683E-01 0.00000E+00 0.00000E+00 0.00000E+00 173 | 0.00000E+00 0.00000E+00 174 | 175 | 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 176 | 6.45942E-01 3.16228E-01 0.00000E+00 0.00000E+00 1.00000E+00 177 | 0.00000E+00 0.00000E+00 178 | 179 | 0.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 180 | 0.00000E+00 0.00000E+00 9.48683E-01 0.00000E+00 0.00000E+00 181 | 0.00000E+00 0.00000E+00 182 | 183 | -1.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 184 | 0.00000E+00 0.00000E+00 -3.16228E-01 0.00000E+00 0.00000E+00 185 | 0.00000E+00 0.00000E+00 186 | 187 | 0.00000E+00 -7.07107E-01 1.00000E+00 0.00000E+00 0.00000E+00 188 | 0.00000E+00 0.00000E+00 0.00000E+00 7.63386E-01 0.00000E+00 189 | 0.00000E+00 0.00000E+00 190 | 191 | 0.00000E+00 -7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 192 | 0.00000E+00 0.00000E+00 0.00000E+00 -6.45942E-01 0.00000E+00 193 | 0.00000E+00 0.00000E+00 194 | 195 | 0.00000E+00 0.00000E+00 -1.00000E+00 7.07107E-01 0.00000E+00 196 | -7.63386E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 197 | 0.00000E+00 0.00000E+00 198 | 199 | 0.00000E+00 0.00000E+00 0.00000E+00 -7.07107E-01 0.00000E+00 200 | -6.45942E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 201 | 0.00000E+00 0.00000E+00 202 | 203 | 0.00000E+00 0.00000E+00 0.00000E+00 -7.07107E-01 0.00000E+00 204 | 0.00000E+00 -9.48683E-01 0.00000E+00 0.00000E+00 0.00000E+00 205 | 0.00000E+00 0.00000E+00 206 | 207 | 0.00000E+00 0.00000E+00 0.00000E+00 7.07107E-01 -1.00000E+00 208 | 0.00000E+00 -3.16228E-01 0.00000E+00 0.00000E+00 0.00000E+00 209 | 0.00000E+00 0.00000E+00 210 | 211 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 212 | 0.00000E+00 0.00000E+00 -9.48683E-01 -7.63386E-01 0.00000E+00 213 | 1.00000E+00 0.00000E+00 214 | 215 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 216 | 0.00000E+00 0.00000E+00 3.16228E-01 6.45942E-01 0.00000E+00 217 | 0.00000E+00 1.00000E+00 218 | 219 | loads 220 | # node X load, Y load 221 | 2 4 0 222 | 3 0 -7 223 | 4 11 0 224 | 225 | Load matrix = 226 | Matrix of dimensions (12 x 1) 227 | 0.00000E+00 228 | 0.00000E+00 229 | -4.00000E+00 230 | -0.00000E+00 231 | -0.00000E+00 232 | 7.00000E+00 233 | -1.10000E+01 234 | -0.00000E+00 235 | 0.00000E+00 236 | 0.00000E+00 237 | 0.00000E+00 238 | 0.00000E+00 239 | 240 | Member Actions, [Ni | Ri] matrix. 241 | Matrix of dimensions (12 x 1) 242 | 3.00000E+00 243 | 1.76777E+00 244 | 1.10000E+01 245 | 8.32629E-16 246 | 7.95886E-16 247 | -9.11471E-16 248 | -6.54996E-16 249 | -5.53399E+00 250 | -1.27720E+01 251 | -3.00000E+00 252 | -1.50000E+01 253 | 1.00000E+01 254 | 255 | matrix condition number = 8.63664027024 256 | -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/address-book-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/address-book-new.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/document-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/document-new.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/document-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/document-open.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/document-print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/document-print.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/document-save-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/document-save-as.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/document-save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/document-save.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/edit-find-replace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/edit-find-replace.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/go-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/go-home.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/go-jump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/go-jump.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/process-stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/process-stop.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/system-log-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/system-log-out.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/actions/view-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/actions/view-refresh.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/apps/help-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/apps/help-browser.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/apps/preferences-system-session.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/apps/preferences-system-session.png -------------------------------------------------------------------------------- /truss/tango4truss/32x32/devices/media-floppy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss/tango4truss/32x32/devices/media-floppy.png -------------------------------------------------------------------------------- /truss/tango4truss/AUTHORS: -------------------------------------------------------------------------------- 1 | Ulisse Perusin 2 | Steven Garrity 3 | Lapo Calamandrei 4 | Ryan Collier 5 | Rodney Dawes 6 | Andreas Nilsson 7 | Tuomas Kuosmanen 8 | Garrett LeSage 9 | Jakub Steiner 10 | -------------------------------------------------------------------------------- /truss/tango4truss/COPYING: -------------------------------------------------------------------------------- 1 | The icons in this repository are herefore released into the Public Domain. 2 | -------------------------------------------------------------------------------- /truss/tango4truss/README: -------------------------------------------------------------------------------- 1 | Tango Icon Theme 2 | ---------------- 3 | 4 | This is an icon theme that follows the Tango visual guidelines [1]. Currently 5 | it depends on Imagemagick for creation of 24x24 bitmaps by adding a 1px padding 6 | around the 22x22px version. For GNOME and KDE you will also need 7 | icon-naming-utils that allow the theme to work in these environments before 8 | they follow the new naming scheme [2]. 9 | 10 | 11 | [1] http://tango-project.org/Tango_Icon_Theme_Guidelines 12 | [2] http://tango-project.org/Standard_Icon_Naming_Specification 13 | -------------------------------------------------------------------------------- /truss/truss.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | tango4truss/32x32/actions/document-new.png 4 | tango4truss/32x32/actions/document-open.png 5 | tango4truss/32x32/devices/media-floppy.png 6 | tango4truss/32x32/actions/document-save-as.png 7 | tango4truss/32x32/actions/edit-find-replace.png 8 | tango4truss/32x32/actions/system-log-out.png 9 | tango4truss/32x32/actions/address-book-new.png 10 | tango4truss/32x32/apps/preferences-system-session.png 11 | tango4truss/32x32/apps/help-browser.png 12 | 13 | 14 | -------------------------------------------------------------------------------- /truss3/README.md: -------------------------------------------------------------------------------- 1 | ##README.md for section called **truss3** 2 | 3 | ### truss3 directory 4 | 5 | This directory is a copy of truss directory, modified for Python3. 6 | It aims to be the same as the program in the truss directory, but to run 7 | under python 3.x. It is assumed that **python3** points to the currently 8 | installed Python 3.x program. At the time of writing Python 3.x is Python 3.2. 9 | Please notice that truss.py and ncrunch.py are somewhat different in truss 10 | directory and in truss3 directory. In other words, they are not interchangeable. 11 | 12 | ### Operating Truss programs 13 | 14 | The truss program can be run as a CLI program without a gui as follows: 15 | 16 | * python3 ncrunch.py [input file name from dat directory] > [output file name] 17 | 18 | For example, to check out sdtruss2, we can find the data for that truss in 19 | dat/sdtruss2.dat. So to get the output in the current directory, do the following: 20 | 21 | * python3 ncrunch.py sdtruss2.dat > sdtruss2.out 22 | 23 | To run the program with GUI, enter the following line of code 24 | 25 | * python3 truss.py 26 | 27 | or for file manager, such as Dolphin, double click the truss.py file. 28 | 29 | If there is an IO error, such as trying to open a non-existing file, the 30 | program terminates with an obscure failure message, viz "dah..." 31 | 32 | ### Basic Help 33 | 34 | The data is created in the Data Page. Alternatively it can be read from a file 35 | into the Data Page. When required it is modified, but only in the Data Page. It 36 | is advisable to save the Data Page before beginning any analysis. 37 | 38 | The analysis results are stored by the program in the Solution Page. Some errors 39 | in data may cause the program to fail without necessarily displaying any 40 | information on the Solution Page. 41 | 42 | The Solution Page is read only, though it can be saved into a file - with the 43 | SaveAs option. 44 | 45 | Unlike command line programs, there are no restrictions where the data is stored, nor any restrictions where the results are stored. It is recommended to use *.dat format* for the data files and the *.out format* for output files. For consistency, all data files are stored in the ./dat subdirectory and all output files are stored in ./out subdirectory. 46 | 47 | It is advisable to be systematic wrt to the above aspect. All the examples 48 | should be stored always in the same directory and all the answers of the 49 | standard examples will be stored in another directory which should remain the same relative to the main program. 50 | 51 | These notes are simply a part of the program, as much as the data for standard 52 | examples. You are free and encouraged to change this help and extend this help 53 | page, 54 | 55 | ak 2011-01-14 56 | -------------------------------------------------------------------------------- /truss3/dat/sdtruss0.dat: -------------------------------------------------------------------------------- 1 | #sdtruss0.dat 2 | # Simplest statically determined truss. By changing the x dimension 3 | # of node 6, it can be made unstable. Analyse it for vertical force, 4 | # or horizontal force at node 1. 5 | general 6 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 7 | g 4 5 3 1 8 | # no of line in load entry 9 | g 1 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 2 4 14 | t 2 0 2 15 | t 3 2 2 16 | t 4 4 2 17 | # auxiliaries 18 | t 5 0 0 19 | t 6 3.5 0 20 | t 7 4 0 21 | members 22 | t 1 2 1 23 | t 2 2 3 24 | t 3 3 1 25 | t 4 1 4 26 | t 5 3 4 27 | # Reactions or Auxiliary members. 28 | t 6 2 5 29 | t 7 3 6 30 | t 8 4 7 31 | loads 32 | # node X load, Y load 33 | 1 0 2 34 | end 35 | -------------------------------------------------------------------------------- /truss3/dat/sdtruss0.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/dat/sdtruss0.out -------------------------------------------------------------------------------- /truss3/dat/sdtruss1.dat: -------------------------------------------------------------------------------- 1 | # sdtruss1.dat - Statically Determinate Truss #1 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p49 Fig. 4.6 5 | # Flags - decoration for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 4 5 3 9 | g 4 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 4 3 15 | t 3 4 0 16 | t 4 8 0 17 | t 5 3 3 18 | t 6 10 0 19 | t 7 8 3 20 | members 21 | t 1 1 2 22 | t 2 2 4 23 | t 3 3 2 24 | t 4 1 3 25 | t 5 3 4 26 | t 6 1 5 27 | t 7 4 6 28 | t 8 4 7 29 | loads 30 | # node X load, Y load 31 | 1 0 -6 32 | 2 0 -14 33 | 3 0 -12 34 | 4 0 -8 35 | end 36 | 37 | -------------------------------------------------------------------------------- /truss3/dat/sdtruss2.dat: -------------------------------------------------------------------------------- 1 | # sdtruss2.dat - Statically Determinate Complex Truss #2 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p46 Fig. 4.5 5 | # Flags - decoration for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 6 9 3 9 | g 3 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 12 0 15 | t 3 0 9 16 | t 4 3 2 17 | t 5 5.5 2 18 | t 6 3 4 19 | t 7 4 0 20 | t 8 0 5 21 | t 9 12 5 22 | members 23 | t 1 1 3 24 | t 2 1 2 25 | t 3 3 2 26 | t 4 4 6 27 | t 5 4 5 28 | t 6 6 5 29 | t 7 3 4 30 | t 8 1 5 31 | t 9 6 2 32 | # Auxiliary members next 33 | t 10 1 7 34 | t 11 1 8 35 | t 12 2 9 36 | loads 37 | # node X load, Y load 38 | 3 10 0 39 | 4 0 -19 40 | 5 17 -20 41 | end 42 | 43 | -------------------------------------------------------------------------------- /truss3/dat/sdtruss3.dat: -------------------------------------------------------------------------------- 1 | # sdtruss3.dat - Statically Determinate Complex Truss #3 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p61 Fig. 4.6 5 | # Flags - whim for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 8 13 3 9 | g 3 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 5 5 15 | t 3 10 5 16 | t 4 15 5 17 | t 5 20 0 18 | t 6 5 0 19 | t 7 10 2.5 20 | t 8 15 0 21 | #auxiliaries 22 | t 9 0 5 23 | t 10 4 0 24 | t 11 20 5 25 | members 26 | t 1 1 2 27 | t 2 1 6 28 | t 3 1 5 29 | t 4 6 2 30 | t 5 2 3 31 | t 6 6 7 32 | t 7 7 3 33 | t 8 3 4 34 | t 9 3 5 35 | t 10 7 8 36 | t 11 8 4 37 | t 12 4 5 38 | t 13 8 5 39 | # Auxiliary members next 40 | t 14 1 10 41 | t 15 1 9 42 | t 16 5 11 43 | loads 44 | # node X load, Y load 45 | 2 10 4 46 | 3 0 6 47 | 4 0 -13 48 | end 49 | 50 | -------------------------------------------------------------------------------- /truss3/dat/sdtruss4.dat: -------------------------------------------------------------------------------- 1 | # sdtruss4.dat - Statically Determinate Complex Truss #4 2 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 3 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 4 | # Ref. "Basic Concepts" p61 Fig. 4.7 5 | # Flags - decoration for this program 6 | general 7 | # noNodes, noMembers, noAuxiliaries 8 | g 6 9 3 9 | g 3 10 | nodes 11 | # Nodal list 12 | # t no x y 13 | t 1 0 0 14 | t 2 0 6 15 | t 3 5 11 16 | t 4 13 11 17 | t 5 18 6 18 | t 6 18 0 19 | #auxiliaries 20 | t 7 0 4 21 | t 8 22 0 22 | t 9 18 4 23 | members 24 | t 1 1 2 25 | t 2 2 3 26 | t 3 3 4 27 | t 4 4 5 28 | t 5 6 5 29 | t 6 1 4 30 | t 7 1 5 31 | t 8 2 6 32 | t 9 3 6 33 | # Auxiliary members next 34 | t 10 1 7 35 | t 11 6 8 36 | t 12 6 9 37 | loads 38 | # node X load, Y load 39 | 2 4 0 40 | 3 0 -7 41 | 4 11 0 42 | end 43 | 44 | -------------------------------------------------------------------------------- /truss3/ncrunch.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # ncrunch.py revised number cruncher module 3 | 4 | # Copyright (c) 2010-2011, 2013 Algis Kabaila. All rights reserved. 5 | # This work is made available under the terms of the 6 | # Creative Commons Attribution-ShareAlike 3.0 license, 7 | # http://creativecommons.org/licenses/by-sa/3.0/. 8 | 9 | import sys 10 | 11 | import io 12 | import math 13 | 14 | import numpy as np 15 | from numpy import linalg as la 16 | 17 | # Global functions 18 | 19 | 20 | 21 | 22 | def printerm(printline, a, LineLen=5): 23 | ''' Output (Matrix a, [Line length]) -> Output matrix a of size (m x n) 24 | according to function printline. Line length can be specified as 3-rd parameter.''' 25 | m, n = len(a), len(a[0]) 26 | printline('Matrix of dimensions' + ' (%s x %s)' % (m, n)) 27 | for i in range(m): 28 | line = '' 29 | for j in range(n): 30 | line += (' %12.5E ' % a[i, j]) 31 | if ( (j + 1) % LineLen) == 0: 32 | printline(line) # New line 33 | line = '' 34 | printline(line) 35 | # blank line between rows if len(row) > 5 36 | if (j == (n - 1)) and ((j + 1) > LineLen) : 37 | printline(' ') 38 | return 39 | 40 | 41 | def printdict(printline, a): 42 | '''Print dictionary "a" in almost decent format.''' 43 | keys = list(a.keys()) 44 | keys.sort() 45 | for i in keys: 46 | printline(str(i) + ' ' + a[i].__str__()) 47 | 48 | class Cruncher(): 49 | def __init__(self, name, printline, dataBall): 50 | '''Receive arguments and store as class variables.''' 51 | self.name = name 52 | self.printline = printline 53 | # self.dataBall = dataBall 54 | self.fin = io.StringIO(dataBall) # Open for reading 55 | 56 | def lineread(self): 57 | '''Read and echo a line. Only return line without "#" character,''' 58 | while True: 59 | # read line - loop for ever 60 | line = self.fin.readline() 61 | # echo line 62 | self.printline(line) 63 | if not ('#' in line): 64 | break 65 | return line 66 | 67 | def prolog(self): 68 | fin = self.fin 69 | lineread = self.lineread 70 | printline = self.printline 71 | for line in fin: 72 | printline(line.strip()) 73 | fin.seek(0, 0) # rewind file 74 | printline('*** Data Echo Finished ***') 75 | printline('echo of "general" flag.') 76 | lineread() 77 | lst = lineread().split() 78 | assert lst[0] == "g", 'First Charactero should be == "g"' 79 | noNodes = int(lst[1]) 80 | noMembers = int(lst[2]) 81 | noAuxiliaries = int(lst[3]) 82 | noLoadCases = 1 83 | lst = lineread().split() 84 | assert lst[0] == "g", 'First Charactero should be == "g"' 85 | noLoadLines = int(lst[1]) # do it for one Load Case only. 86 | printline("noLoadLines = " + str(noLoadLines)) 87 | return lineread, noNodes, noMembers, noAuxiliaries,\ 88 | noLoadCases, noLoadLines 89 | 90 | def doNodes(self, lineread, noNodes, noAuxiliaries): 91 | flag = lineread() 92 | assert flag.strip() == 'nodes', '"nodes" signals that nodal data follows' 93 | nodes = {} 94 | for i in range(noNodes + noAuxiliaries): 95 | lst = lineread().split() 96 | assert lst[0] == 't', 'Data for ordinary nodes starts with "t".' 97 | nodeNo = int(lst[1]) 98 | x_coord = float(lst[2]) 99 | y_coord = float(lst[3]) 100 | freedom_x = (nodeNo - 1) * 2 + 1 101 | freedom_y = freedom_x + 1 102 | nodes[nodeNo] = (nodeNo, x_coord, y_coord, freedom_x, freedom_y) 103 | self.printline('Node freedoms %s %s ' % (str(freedom_x), str(freedom_y))) 104 | return nodes 105 | 106 | def doMembers(self, lineread, noMembers, noAuxiliaries): 107 | flag = lineread() 108 | assert flag.strip() == 'members', '"members" flag start of member data' 109 | members = {} 110 | for i in range(noMembers + noAuxiliaries): 111 | lst = lineread().split() 112 | assert lst[0] == 't', 'Truss member data starts with "t"' 113 | no = int(lst[1]) 114 | end1 = int(lst[2]) 115 | end2 = int(lst[3]) 116 | members[no] = (no, end1, end2) 117 | return members 118 | 119 | def doMemprops(self, noMembers, noAuxiliaries,\ 120 | members, nodes): 121 | '''Calculate and store directory of 122 | Member Properties.''' 123 | printline = self.printline 124 | memprops = {} 125 | for i in range(noMembers + noAuxiliaries): 126 | member = members[i+1] 127 | printline(member.__str__()) 128 | # end1, end2 = end node nos 129 | end1 = member[1] 130 | end2 = member[2] 131 | locvec = [nodes[end1][3], nodes[end1][4], nodes[end2][3],\ 132 | nodes[end2][4]] 133 | dx = nodes[end2][1] - nodes[end1][1] 134 | dy = nodes[end2][2] - nodes[end1][2] 135 | memlen = math.sqrt(dx * dx + dy * dy) 136 | cosx = dx / memlen 137 | cosy = dy / memlen 138 | dircos = [cosx, cosy] 139 | memprops[i + 1] = locvec + dircos 140 | z = locvec 141 | printline('member_no, locvec = %s %s %s %s %s ' %\ 142 | (str(i + 1), str(z[0]), str(z[1]), str(z[2]), str(z[3]))) 143 | printline('direction cosines = %s %s ' % (str(cosx), str(cosy))) 144 | return memprops 145 | 146 | def crunch(self): 147 | '''Mainline to number crunch the calculation of 148 | member foreces.''' 149 | # echo data: 150 | printline = self.printline 151 | lineread, noNodes, noMembers, noAuxiliaries,\ 152 | noLoadCases, noLoadLines = self.prolog() 153 | nodes = self.doNodes(lineread, noNodes, noAuxiliaries) 154 | printline("nodes = ") 155 | printdict(printline, nodes) 156 | members = self.doMembers(lineread, noMembers, noAuxiliaries) 157 | printline('members = ') 158 | printdict(printline, members) 159 | memprops = self.doMemprops( noMembers, noAuxiliaries, members, nodes) 160 | printline('memprops =') 161 | printdict(self.printline, memprops) 162 | ndim = noNodes * 2 163 | printline('Dimension of connection mat ndim =' + str(ndim)) 164 | connection = np.zeros((ndim, ndim), dtype = "float") 165 | for i in range(noMembers + noAuxiliaries): 166 | member = memprops[i + 1] 167 | connection[member[0] - 1, i] += member[4] 168 | connection[member[1] - 1, i] += member[5] 169 | if i < noMembers: 170 | connection[member[2] - 1, i] += -member[4] 171 | connection[member[3] - 1, i] += -member[5] 172 | printline(' ') 173 | printline('Connection matrix') 174 | printerm(printline, connection) 175 | try: 176 | conditionnumber = la.cond(connection) 177 | inv = la.inv(connection) 178 | except la.LinAlgError as e: 179 | printline( '%s %s' % (type(e).__name__, e)) 180 | else: 181 | i = np.dot(inv, connection) 182 | loads = np.zeros((ndim, 1), dtype = "float") 183 | line = lineread() 184 | assert line.strip() == 'loads', 'Flag for loads is loads' 185 | for i in range(noLoadLines): 186 | lst = lineread().split() 187 | nodeNo = int(lst[0]) 188 | node = nodes[nodeNo] 189 | loads[node[3] - 1] = -float(lst[1]) 190 | loads[node[4] - 1] = -float(lst[2]) 191 | printline('') 192 | printline('Load matrix = ') 193 | printerm(printline, loads) 194 | memberActions = np.dot(inv, loads) 195 | printline(' ') 196 | printline("Member Actions, [Ni | Ri] matrix.") 197 | printerm(printline, memberActions) 198 | printline(' ') 199 | printline('matrix condition number = ' + str(conditionnumber)) 200 | printline(' ') 201 | 202 | def main(printline, filename, dataBall): 203 | cruncher = Cruncher(filename, printline, dataBall) 204 | cruncher.crunch() 205 | return 206 | 207 | def cli(printline): 208 | print('Usage: Give a name for data in the "dat" subdirectory') 209 | print('as program parameter. Default is "sdtruss1.dat"') 210 | if len(sys.argv) > 1: 211 | filename = sys.argv[1] 212 | else: 213 | filename = 'sdtruss1.dat' 214 | try: 215 | with open('dat/' + filename, 'r') as finput: 216 | dataBall = str(finput.read()) 217 | except IOError: 218 | print('\n\n\nFailed to open given file name. The program stops here.\n\n\n') 219 | raise SystemExit('Failed to open file. Dah...') 220 | main(printline, filename, dataBall) 221 | 222 | if __name__ == '__main__': 223 | 224 | def printline(line): 225 | print(line) 226 | 227 | cli(printline) 228 | 229 | -------------------------------------------------------------------------------- /truss3/out/sdtruss0.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss0.dat 3 | ================================ 4 | #sdtruss0.dat 5 | # Simplest statically determined truss. By changing the x dimension 6 | # of node 6, it can be made unstable. Analyse it for vertical force, 7 | # or horizontal force at node 1. 8 | general 9 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 10 | g 4 5 3 1 11 | # no of line in load entry 12 | g 1 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 2 4 17 | t 2 0 2 18 | t 3 2 2 19 | t 4 4 2 20 | # auxiliaries 21 | t 5 0 0 22 | t 6 3.5 0 23 | t 7 4 0 24 | members 25 | t 1 2 1 26 | t 2 2 3 27 | t 3 3 1 28 | t 4 1 4 29 | t 5 3 4 30 | # Reactions or Auxiliary members. 31 | t 6 2 5 32 | t 7 3 6 33 | t 8 4 7 34 | loads 35 | # node X load, Y load 36 | 1 0 2 37 | end 38 | *** Data Echo Finished *** 39 | echo of "general" flag. 40 | #sdtruss0.dat 41 | # Simplest statically determined truss. By changing the x dimension 42 | # of node 6, it can be made unstable. Analyse it for vertical force, 43 | # or horizontal force at node 1. 44 | general 45 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 46 | g 4 5 3 1 47 | # no of line in load entry 48 | g 1 49 | noLoadLines = 1 50 | nodes 51 | # Nodal list 52 | # t no x y 53 | t 1 2 4 54 | Node freedoms 1 2 55 | t 2 0 2 56 | Node freedoms 3 4 57 | t 3 2 2 58 | Node freedoms 5 6 59 | t 4 4 2 60 | Node freedoms 7 8 61 | # auxiliaries 62 | t 5 0 0 63 | Node freedoms 9 10 64 | t 6 3.5 0 65 | Node freedoms 11 12 66 | t 7 4 0 67 | Node freedoms 13 14 68 | nodes = 69 | 1 (1, 2.0, 4.0, 1, 2) 70 | 2 (2, 0.0, 2.0, 3, 4) 71 | 3 (3, 2.0, 2.0, 5, 6) 72 | 4 (4, 4.0, 2.0, 7, 8) 73 | 5 (5, 0.0, 0.0, 9, 10) 74 | 6 (6, 3.5, 0.0, 11, 12) 75 | 7 (7, 4.0, 0.0, 13, 14) 76 | members 77 | t 1 2 1 78 | t 2 2 3 79 | t 3 3 1 80 | t 4 1 4 81 | t 5 3 4 82 | # Reactions or Auxiliary members. 83 | t 6 2 5 84 | t 7 3 6 85 | t 8 4 7 86 | members = 87 | 1 (1, 2, 1) 88 | 2 (2, 2, 3) 89 | 3 (3, 3, 1) 90 | 4 (4, 1, 4) 91 | 5 (5, 3, 4) 92 | 6 (6, 2, 5) 93 | 7 (7, 3, 6) 94 | 8 (8, 4, 7) 95 | (1, 2, 1) 96 | member_no, locvec = 1 3 4 1 2 97 | direction cosines = 0.707106781187 0.707106781187 98 | (2, 2, 3) 99 | member_no, locvec = 2 3 4 5 6 100 | direction cosines = 1.0 0.0 101 | (3, 3, 1) 102 | member_no, locvec = 3 5 6 1 2 103 | direction cosines = 0.0 1.0 104 | (4, 1, 4) 105 | member_no, locvec = 4 1 2 7 8 106 | direction cosines = 0.707106781187 -0.707106781187 107 | (5, 3, 4) 108 | member_no, locvec = 5 5 6 7 8 109 | direction cosines = 1.0 0.0 110 | (6, 2, 5) 111 | member_no, locvec = 6 3 4 9 10 112 | direction cosines = 0.0 -1.0 113 | (7, 3, 6) 114 | member_no, locvec = 7 5 6 11 12 115 | direction cosines = 0.6 -0.8 116 | (8, 4, 7) 117 | member_no, locvec = 8 7 8 13 14 118 | direction cosines = 0.0 -1.0 119 | memprops = 120 | 1 [3, 4, 1, 2, 0.70710678118654746, 0.70710678118654746] 121 | 2 [3, 4, 5, 6, 1.0, 0.0] 122 | 3 [5, 6, 1, 2, 0.0, 1.0] 123 | 4 [1, 2, 7, 8, 0.70710678118654746, -0.70710678118654746] 124 | 5 [5, 6, 7, 8, 1.0, 0.0] 125 | 6 [3, 4, 9, 10, 0.0, -1.0] 126 | 7 [5, 6, 11, 12, 0.59999999999999998, -0.80000000000000004] 127 | 8 [7, 8, 13, 14, 0.0, -1.0] 128 | Dimension of connection mat ndim =8 129 | 130 | Connection matrix 131 | Matrix of dimensions (8 x 8) 132 | -7.07107E-01 0.00000E+00 0.00000E+00 7.07107E-01 0.00000E+00 133 | 0.00000E+00 0.00000E+00 0.00000E+00 134 | 135 | -7.07107E-01 0.00000E+00 -1.00000E+00 -7.07107E-01 0.00000E+00 136 | 0.00000E+00 0.00000E+00 0.00000E+00 137 | 138 | 7.07107E-01 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 139 | 0.00000E+00 0.00000E+00 0.00000E+00 140 | 141 | 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 142 | -1.00000E+00 0.00000E+00 0.00000E+00 143 | 144 | 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 145 | 0.00000E+00 6.00000E-01 0.00000E+00 146 | 147 | 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 148 | 0.00000E+00 -8.00000E-01 0.00000E+00 149 | 150 | 0.00000E+00 0.00000E+00 0.00000E+00 -7.07107E-01 -1.00000E+00 151 | 0.00000E+00 0.00000E+00 0.00000E+00 152 | 153 | 0.00000E+00 0.00000E+00 0.00000E+00 7.07107E-01 0.00000E+00 154 | 0.00000E+00 0.00000E+00 -1.00000E+00 155 | 156 | loads 157 | # node X load, Y load 158 | 1 0 2 159 | 160 | Load matrix = 161 | Matrix of dimensions (8 x 1) 162 | -0.00000E+00 163 | -2.00000E+00 164 | 0.00000E+00 165 | 0.00000E+00 166 | 0.00000E+00 167 | 0.00000E+00 168 | 0.00000E+00 169 | 0.00000E+00 170 | 171 | Member Actions, [Ni | Ri] matrix. 172 | Matrix of dimensions (8 x 1) 173 | 1.41421E+00 174 | -1.00000E+00 175 | 4.05492E-17 176 | 1.41421E+00 177 | -1.00000E+00 178 | 1.00000E+00 179 | 0.00000E+00 180 | 1.00000E+00 181 | 182 | matrix condition number = 11.6995513319 183 | -------------------------------------------------------------------------------- /truss3/out/sdtruss1.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss1.dat 3 | ================================ 4 | # sdtruss1.dat - Statically Determinate Truss #1 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p49 Fig. 4.6 8 | # Flags - decoration for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 4 5 3 12 | g 4 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 4 3 18 | t 3 4 0 19 | t 4 8 0 20 | t 5 3 3 21 | t 6 10 0 22 | t 7 8 3 23 | members 24 | t 1 1 2 25 | t 2 2 4 26 | t 3 3 2 27 | t 4 1 3 28 | t 5 3 4 29 | t 6 1 5 30 | t 7 4 6 31 | t 8 4 7 32 | loads 33 | # node X load, Y load 34 | 1 0 -6 35 | 2 0 -14 36 | 3 0 -12 37 | 4 0 -8 38 | end 39 | 40 | *** Data Echo Finished *** 41 | echo of "general" flag. 42 | # sdtruss1.dat - Statically Determinate Truss #1 43 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 44 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 45 | # Ref. "Basic Concepts" p49 Fig. 4.6 46 | # Flags - decoration for this program 47 | general 48 | # noNodes, noMembers, noAuxiliaries 49 | g 4 5 3 50 | g 4 51 | noLoadLines = 4 52 | nodes 53 | # Nodal list 54 | # t no x y 55 | t 1 0 0 56 | Node freedoms 1 2 57 | t 2 4 3 58 | Node freedoms 3 4 59 | t 3 4 0 60 | Node freedoms 5 6 61 | t 4 8 0 62 | Node freedoms 7 8 63 | t 5 3 3 64 | Node freedoms 9 10 65 | t 6 10 0 66 | Node freedoms 11 12 67 | t 7 8 3 68 | Node freedoms 13 14 69 | nodes = 70 | 1 (1, 0.0, 0.0, 1, 2) 71 | 2 (2, 4.0, 3.0, 3, 4) 72 | 3 (3, 4.0, 0.0, 5, 6) 73 | 4 (4, 8.0, 0.0, 7, 8) 74 | 5 (5, 3.0, 3.0, 9, 10) 75 | 6 (6, 10.0, 0.0, 11, 12) 76 | 7 (7, 8.0, 3.0, 13, 14) 77 | members 78 | t 1 1 2 79 | t 2 2 4 80 | t 3 3 2 81 | t 4 1 3 82 | t 5 3 4 83 | t 6 1 5 84 | t 7 4 6 85 | t 8 4 7 86 | members = 87 | 1 (1, 1, 2) 88 | 2 (2, 2, 4) 89 | 3 (3, 3, 2) 90 | 4 (4, 1, 3) 91 | 5 (5, 3, 4) 92 | 6 (6, 1, 5) 93 | 7 (7, 4, 6) 94 | 8 (8, 4, 7) 95 | (1, 1, 2) 96 | member_no, locvec = 1 1 2 3 4 97 | direction cosines = 0.8 0.6 98 | (2, 2, 4) 99 | member_no, locvec = 2 3 4 7 8 100 | direction cosines = 0.8 -0.6 101 | (3, 3, 2) 102 | member_no, locvec = 3 5 6 3 4 103 | direction cosines = 0.0 1.0 104 | (4, 1, 3) 105 | member_no, locvec = 4 1 2 5 6 106 | direction cosines = 1.0 0.0 107 | (5, 3, 4) 108 | member_no, locvec = 5 5 6 7 8 109 | direction cosines = 1.0 0.0 110 | (6, 1, 5) 111 | member_no, locvec = 6 1 2 9 10 112 | direction cosines = 0.707106781187 0.707106781187 113 | (7, 4, 6) 114 | member_no, locvec = 7 7 8 11 12 115 | direction cosines = 1.0 0.0 116 | (8, 4, 7) 117 | member_no, locvec = 8 7 8 13 14 118 | direction cosines = 0.0 1.0 119 | memprops = 120 | 1 [1, 2, 3, 4, 0.80000000000000004, 0.59999999999999998] 121 | 2 [3, 4, 7, 8, 0.80000000000000004, -0.59999999999999998] 122 | 3 [5, 6, 3, 4, 0.0, 1.0] 123 | 4 [1, 2, 5, 6, 1.0, 0.0] 124 | 5 [5, 6, 7, 8, 1.0, 0.0] 125 | 6 [1, 2, 9, 10, 0.70710678118654757, 0.70710678118654757] 126 | 7 [7, 8, 11, 12, 1.0, 0.0] 127 | 8 [7, 8, 13, 14, 0.0, 1.0] 128 | Dimension of connection mat ndim =8 129 | 130 | Connection matrix 131 | Matrix of dimensions (8 x 8) 132 | 8.00000E-01 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 133 | 7.07107E-01 0.00000E+00 0.00000E+00 134 | 135 | 6.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 136 | 7.07107E-01 0.00000E+00 0.00000E+00 137 | 138 | -8.00000E-01 8.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 139 | 0.00000E+00 0.00000E+00 0.00000E+00 140 | 141 | -6.00000E-01 -6.00000E-01 -1.00000E+00 0.00000E+00 0.00000E+00 142 | 0.00000E+00 0.00000E+00 0.00000E+00 143 | 144 | 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 1.00000E+00 145 | 0.00000E+00 0.00000E+00 0.00000E+00 146 | 147 | 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 148 | 0.00000E+00 0.00000E+00 0.00000E+00 149 | 150 | 0.00000E+00 -8.00000E-01 0.00000E+00 0.00000E+00 -1.00000E+00 151 | 0.00000E+00 1.00000E+00 0.00000E+00 152 | 153 | 0.00000E+00 6.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 154 | 0.00000E+00 0.00000E+00 1.00000E+00 155 | 156 | loads 157 | # node X load, Y load 158 | 1 0 -6 159 | 2 0 -14 160 | 3 0 -12 161 | 4 0 -8 162 | 163 | Load matrix = 164 | Matrix of dimensions (8 x 1) 165 | -0.00000E+00 166 | 6.00000E+00 167 | -0.00000E+00 168 | 1.40000E+01 169 | -0.00000E+00 170 | 1.20000E+01 171 | -0.00000E+00 172 | 8.00000E+00 173 | 174 | Member Actions, [Ni | Ri] matrix. 175 | Matrix of dimensions (8 x 1) 176 | -2.16667E+01 177 | -2.16667E+01 178 | 1.20000E+01 179 | -1.66667E+00 180 | -1.66667E+00 181 | 2.68701E+01 182 | -1.90000E+01 183 | 2.10000E+01 184 | 185 | matrix condition number = 6.20450567822 186 | -------------------------------------------------------------------------------- /truss3/out/sdtruss2.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss2.dat 3 | ================================ 4 | # sdtruss2.dat - Statically Determinate Complex Truss #2 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p46 Fig. 4.5 8 | # Flags - decoration for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 6 9 3 12 | g 3 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 12 0 18 | t 3 0 9 19 | t 4 3 2 20 | t 5 5.5 2 21 | t 6 3 4 22 | t 7 4 0 23 | t 8 0 5 24 | t 9 12 5 25 | members 26 | t 1 1 3 27 | t 2 1 2 28 | t 3 3 2 29 | t 4 4 6 30 | t 5 4 5 31 | t 6 6 5 32 | t 7 3 4 33 | t 8 1 5 34 | t 9 6 2 35 | # Auxiliary members next 36 | t 10 1 7 37 | t 11 1 8 38 | t 12 2 9 39 | loads 40 | # node X load, Y load 41 | 3 10 0 42 | 4 0 -19 43 | 5 17 -20 44 | end 45 | 46 | *** Data Echo Finished *** 47 | echo of "general" flag. 48 | # sdtruss2.dat - Statically Determinate Complex Truss #2 49 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 50 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 51 | # Ref. "Basic Concepts" p46 Fig. 4.5 52 | # Flags - decoration for this program 53 | general 54 | # noNodes, noMembers, noAuxiliaries 55 | g 6 9 3 56 | g 3 57 | noLoadLines = 3 58 | nodes 59 | # Nodal list 60 | # t no x y 61 | t 1 0 0 62 | Node freedoms 1 2 63 | t 2 12 0 64 | Node freedoms 3 4 65 | t 3 0 9 66 | Node freedoms 5 6 67 | t 4 3 2 68 | Node freedoms 7 8 69 | t 5 5.5 2 70 | Node freedoms 9 10 71 | t 6 3 4 72 | Node freedoms 11 12 73 | t 7 4 0 74 | Node freedoms 13 14 75 | t 8 0 5 76 | Node freedoms 15 16 77 | t 9 12 5 78 | Node freedoms 17 18 79 | nodes = 80 | 1 (1, 0.0, 0.0, 1, 2) 81 | 2 (2, 12.0, 0.0, 3, 4) 82 | 3 (3, 0.0, 9.0, 5, 6) 83 | 4 (4, 3.0, 2.0, 7, 8) 84 | 5 (5, 5.5, 2.0, 9, 10) 85 | 6 (6, 3.0, 4.0, 11, 12) 86 | 7 (7, 4.0, 0.0, 13, 14) 87 | 8 (8, 0.0, 5.0, 15, 16) 88 | 9 (9, 12.0, 5.0, 17, 18) 89 | members 90 | t 1 1 3 91 | t 2 1 2 92 | t 3 3 2 93 | t 4 4 6 94 | t 5 4 5 95 | t 6 6 5 96 | t 7 3 4 97 | t 8 1 5 98 | t 9 6 2 99 | # Auxiliary members next 100 | t 10 1 7 101 | t 11 1 8 102 | t 12 2 9 103 | members = 104 | 1 (1, 1, 3) 105 | 2 (2, 1, 2) 106 | 3 (3, 3, 2) 107 | 4 (4, 4, 6) 108 | 5 (5, 4, 5) 109 | 6 (6, 6, 5) 110 | 7 (7, 3, 4) 111 | 8 (8, 1, 5) 112 | 9 (9, 6, 2) 113 | 10 (10, 1, 7) 114 | 11 (11, 1, 8) 115 | 12 (12, 2, 9) 116 | (1, 1, 3) 117 | member_no, locvec = 1 1 2 5 6 118 | direction cosines = 0.0 1.0 119 | (2, 1, 2) 120 | member_no, locvec = 2 1 2 3 4 121 | direction cosines = 1.0 0.0 122 | (3, 3, 2) 123 | member_no, locvec = 3 5 6 3 4 124 | direction cosines = 0.8 -0.6 125 | (4, 4, 6) 126 | member_no, locvec = 4 7 8 11 12 127 | direction cosines = 0.0 1.0 128 | (5, 4, 5) 129 | member_no, locvec = 5 7 8 9 10 130 | direction cosines = 1.0 0.0 131 | (6, 6, 5) 132 | member_no, locvec = 6 11 12 9 10 133 | direction cosines = 0.780868809443 -0.624695047554 134 | (7, 3, 4) 135 | member_no, locvec = 7 5 6 7 8 136 | direction cosines = 0.393919298579 -0.919145030018 137 | (8, 1, 5) 138 | member_no, locvec = 8 1 2 9 10 139 | direction cosines = 0.939793423488 0.341743063087 140 | (9, 6, 2) 141 | member_no, locvec = 9 11 12 3 4 142 | direction cosines = 0.91381154862 -0.406138466053 143 | (10, 1, 7) 144 | member_no, locvec = 10 1 2 13 14 145 | direction cosines = 1.0 0.0 146 | (11, 1, 8) 147 | member_no, locvec = 11 1 2 15 16 148 | direction cosines = 0.0 1.0 149 | (12, 2, 9) 150 | member_no, locvec = 12 3 4 17 18 151 | direction cosines = 0.0 1.0 152 | memprops = 153 | 1 [1, 2, 5, 6, 0.0, 1.0] 154 | 2 [1, 2, 3, 4, 1.0, 0.0] 155 | 3 [5, 6, 3, 4, 0.80000000000000004, -0.59999999999999998] 156 | 4 [7, 8, 11, 12, 0.0, 1.0] 157 | 5 [7, 8, 9, 10, 1.0, 0.0] 158 | 6 [11, 12, 9, 10, 0.78086880944303039, -0.62469504755442429] 159 | 7 [5, 6, 7, 8, 0.39391929857916763, -0.91914503001805781] 160 | 8 [1, 2, 9, 10, 0.93979342348843697, 0.34174306308670438] 161 | 9 [11, 12, 3, 4, 0.91381154862025726, -0.40613846605344767] 162 | 10 [1, 2, 13, 14, 1.0, 0.0] 163 | 11 [1, 2, 15, 16, 0.0, 1.0] 164 | 12 [3, 4, 17, 18, 0.0, 1.0] 165 | Dimension of connection mat ndim =12 166 | 167 | Connection matrix 168 | Matrix of dimensions (12 x 12) 169 | 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 170 | 0.00000E+00 0.00000E+00 9.39793E-01 0.00000E+00 1.00000E+00 171 | 0.00000E+00 0.00000E+00 172 | 173 | 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 174 | 0.00000E+00 0.00000E+00 3.41743E-01 0.00000E+00 0.00000E+00 175 | 1.00000E+00 0.00000E+00 176 | 177 | 0.00000E+00 -1.00000E+00 -8.00000E-01 0.00000E+00 0.00000E+00 178 | 0.00000E+00 0.00000E+00 0.00000E+00 -9.13812E-01 0.00000E+00 179 | 0.00000E+00 0.00000E+00 180 | 181 | 0.00000E+00 0.00000E+00 6.00000E-01 0.00000E+00 0.00000E+00 182 | 0.00000E+00 0.00000E+00 0.00000E+00 4.06138E-01 0.00000E+00 183 | 0.00000E+00 1.00000E+00 184 | 185 | 0.00000E+00 0.00000E+00 8.00000E-01 0.00000E+00 0.00000E+00 186 | 0.00000E+00 3.93919E-01 0.00000E+00 0.00000E+00 0.00000E+00 187 | 0.00000E+00 0.00000E+00 188 | 189 | -1.00000E+00 0.00000E+00 -6.00000E-01 0.00000E+00 0.00000E+00 190 | 0.00000E+00 -9.19145E-01 0.00000E+00 0.00000E+00 0.00000E+00 191 | 0.00000E+00 0.00000E+00 192 | 193 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 194 | 0.00000E+00 -3.93919E-01 0.00000E+00 0.00000E+00 0.00000E+00 195 | 0.00000E+00 0.00000E+00 196 | 197 | 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 198 | 0.00000E+00 9.19145E-01 0.00000E+00 0.00000E+00 0.00000E+00 199 | 0.00000E+00 0.00000E+00 200 | 201 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 202 | -7.80869E-01 0.00000E+00 -9.39793E-01 0.00000E+00 0.00000E+00 203 | 0.00000E+00 0.00000E+00 204 | 205 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 206 | 6.24695E-01 0.00000E+00 -3.41743E-01 0.00000E+00 0.00000E+00 207 | 0.00000E+00 0.00000E+00 208 | 209 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 210 | 7.80869E-01 0.00000E+00 0.00000E+00 9.13812E-01 0.00000E+00 211 | 0.00000E+00 0.00000E+00 212 | 213 | 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 214 | -6.24695E-01 0.00000E+00 0.00000E+00 -4.06138E-01 0.00000E+00 215 | 0.00000E+00 0.00000E+00 216 | 217 | loads 218 | # node X load, Y load 219 | 3 10 0 220 | 4 0 -19 221 | 5 17 -20 222 | 223 | Load matrix = 224 | Matrix of dimensions (12 x 1) 225 | 0.00000E+00 226 | 0.00000E+00 227 | 0.00000E+00 228 | 0.00000E+00 229 | -1.00000E+01 230 | -0.00000E+00 231 | -0.00000E+00 232 | 1.90000E+01 233 | -1.70000E+01 234 | 2.00000E+01 235 | 0.00000E+00 236 | 0.00000E+00 237 | 238 | Member Actions, [Ni | Ri] matrix. 239 | Matrix of dimensions (12 x 1) 240 | -9.98864E+00 241 | 4.00938E+01 242 | -2.63068E+01 243 | -6.77273E+00 244 | 1.10455E+01 245 | 2.43937E+01 246 | 2.80399E+01 247 | -1.39326E+01 248 | -2.08449E+01 249 | -2.70000E+01 250 | 1.47500E+01 251 | 2.42500E+01 252 | 253 | matrix condition number = 7.5990495049 254 | -------------------------------------------------------------------------------- /truss3/out/sdtruss3.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss3.dat 3 | ================================ 4 | # sdtruss3.dat - Statically Determinate Complex Truss #3 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p61 Fig. 4.6 8 | # Flags - whim for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 8 13 3 12 | g 3 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 5 5 18 | t 3 10 5 19 | t 4 15 5 20 | t 5 20 0 21 | t 6 5 0 22 | t 7 10 2.5 23 | t 8 15 0 24 | #auxiliaries 25 | t 9 0 5 26 | t 10 4 0 27 | t 11 20 5 28 | members 29 | t 1 1 2 30 | t 2 1 6 31 | t 3 1 5 32 | t 4 6 2 33 | t 5 2 3 34 | t 6 6 7 35 | t 7 7 3 36 | t 8 3 4 37 | t 9 3 5 38 | t 10 7 8 39 | t 11 8 4 40 | t 12 4 5 41 | t 13 8 5 42 | # Auxiliary members next 43 | t 14 1 10 44 | t 15 1 9 45 | t 16 5 11 46 | loads 47 | # node X load, Y load 48 | 2 10 4 49 | 3 0 6 50 | 4 0 -13 51 | end 52 | 53 | *** Data Echo Finished *** 54 | echo of "general" flag. 55 | # sdtruss3.dat - Statically Determinate Complex Truss #3 56 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 57 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 58 | # Ref. "Basic Concepts" p61 Fig. 4.6 59 | # Flags - whim for this program 60 | general 61 | # noNodes, noMembers, noAuxiliaries 62 | g 8 13 3 63 | g 3 64 | noLoadLines = 3 65 | nodes 66 | # Nodal list 67 | # t no x y 68 | t 1 0 0 69 | Node freedoms 1 2 70 | t 2 5 5 71 | Node freedoms 3 4 72 | t 3 10 5 73 | Node freedoms 5 6 74 | t 4 15 5 75 | Node freedoms 7 8 76 | t 5 20 0 77 | Node freedoms 9 10 78 | t 6 5 0 79 | Node freedoms 11 12 80 | t 7 10 2.5 81 | Node freedoms 13 14 82 | t 8 15 0 83 | Node freedoms 15 16 84 | #auxiliaries 85 | t 9 0 5 86 | Node freedoms 17 18 87 | t 10 4 0 88 | Node freedoms 19 20 89 | t 11 20 5 90 | Node freedoms 21 22 91 | nodes = 92 | 1 (1, 0.0, 0.0, 1, 2) 93 | 2 (2, 5.0, 5.0, 3, 4) 94 | 3 (3, 10.0, 5.0, 5, 6) 95 | 4 (4, 15.0, 5.0, 7, 8) 96 | 5 (5, 20.0, 0.0, 9, 10) 97 | 6 (6, 5.0, 0.0, 11, 12) 98 | 7 (7, 10.0, 2.5, 13, 14) 99 | 8 (8, 15.0, 0.0, 15, 16) 100 | 9 (9, 0.0, 5.0, 17, 18) 101 | 10 (10, 4.0, 0.0, 19, 20) 102 | 11 (11, 20.0, 5.0, 21, 22) 103 | members 104 | t 1 1 2 105 | t 2 1 6 106 | t 3 1 5 107 | t 4 6 2 108 | t 5 2 3 109 | t 6 6 7 110 | t 7 7 3 111 | t 8 3 4 112 | t 9 3 5 113 | t 10 7 8 114 | t 11 8 4 115 | t 12 4 5 116 | t 13 8 5 117 | # Auxiliary members next 118 | t 14 1 10 119 | t 15 1 9 120 | t 16 5 11 121 | members = 122 | 1 (1, 1, 2) 123 | 2 (2, 1, 6) 124 | 3 (3, 1, 5) 125 | 4 (4, 6, 2) 126 | 5 (5, 2, 3) 127 | 6 (6, 6, 7) 128 | 7 (7, 7, 3) 129 | 8 (8, 3, 4) 130 | 9 (9, 3, 5) 131 | 10 (10, 7, 8) 132 | 11 (11, 8, 4) 133 | 12 (12, 4, 5) 134 | 13 (13, 8, 5) 135 | 14 (14, 1, 10) 136 | 15 (15, 1, 9) 137 | 16 (16, 5, 11) 138 | (1, 1, 2) 139 | member_no, locvec = 1 1 2 3 4 140 | direction cosines = 0.707106781187 0.707106781187 141 | (2, 1, 6) 142 | member_no, locvec = 2 1 2 11 12 143 | direction cosines = 1.0 0.0 144 | (3, 1, 5) 145 | member_no, locvec = 3 1 2 9 10 146 | direction cosines = 1.0 0.0 147 | (4, 6, 2) 148 | member_no, locvec = 4 11 12 3 4 149 | direction cosines = 0.0 1.0 150 | (5, 2, 3) 151 | member_no, locvec = 5 3 4 5 6 152 | direction cosines = 1.0 0.0 153 | (6, 6, 7) 154 | member_no, locvec = 6 11 12 13 14 155 | direction cosines = 0.894427191 0.4472135955 156 | (7, 7, 3) 157 | member_no, locvec = 7 13 14 5 6 158 | direction cosines = 0.0 1.0 159 | (8, 3, 4) 160 | member_no, locvec = 8 5 6 7 8 161 | direction cosines = 1.0 0.0 162 | (9, 3, 5) 163 | member_no, locvec = 9 5 6 9 10 164 | direction cosines = 0.894427191 -0.4472135955 165 | (10, 7, 8) 166 | member_no, locvec = 10 13 14 15 16 167 | direction cosines = 0.894427191 -0.4472135955 168 | (11, 8, 4) 169 | member_no, locvec = 11 15 16 7 8 170 | direction cosines = 0.0 1.0 171 | (12, 4, 5) 172 | member_no, locvec = 12 7 8 9 10 173 | direction cosines = 0.707106781187 -0.707106781187 174 | (13, 8, 5) 175 | member_no, locvec = 13 15 16 9 10 176 | direction cosines = 1.0 0.0 177 | (14, 1, 10) 178 | member_no, locvec = 14 1 2 19 20 179 | direction cosines = 1.0 0.0 180 | (15, 1, 9) 181 | member_no, locvec = 15 1 2 17 18 182 | direction cosines = 0.0 1.0 183 | (16, 5, 11) 184 | member_no, locvec = 16 9 10 21 22 185 | direction cosines = 0.0 1.0 186 | memprops = 187 | 1 [1, 2, 3, 4, 0.70710678118654746, 0.70710678118654746] 188 | 2 [1, 2, 11, 12, 1.0, 0.0] 189 | 3 [1, 2, 9, 10, 1.0, 0.0] 190 | 4 [11, 12, 3, 4, 0.0, 1.0] 191 | 5 [3, 4, 5, 6, 1.0, 0.0] 192 | 6 [11, 12, 13, 14, 0.89442719099991586, 0.44721359549995793] 193 | 7 [13, 14, 5, 6, 0.0, 1.0] 194 | 8 [5, 6, 7, 8, 1.0, 0.0] 195 | 9 [5, 6, 9, 10, 0.89442719099991586, -0.44721359549995793] 196 | 10 [13, 14, 15, 16, 0.89442719099991586, -0.44721359549995793] 197 | 11 [15, 16, 7, 8, 0.0, 1.0] 198 | 12 [7, 8, 9, 10, 0.70710678118654746, -0.70710678118654746] 199 | 13 [15, 16, 9, 10, 1.0, 0.0] 200 | 14 [1, 2, 19, 20, 1.0, 0.0] 201 | 15 [1, 2, 17, 18, 0.0, 1.0] 202 | 16 [9, 10, 21, 22, 0.0, 1.0] 203 | Dimension of connection mat ndim =16 204 | 205 | Connection matrix 206 | Matrix of dimensions (16 x 16) 207 | 7.07107E-01 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 208 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 209 | 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 210 | 0.00000E+00 211 | 212 | 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 213 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 214 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 215 | 0.00000E+00 216 | 217 | -7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 218 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 219 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 220 | 0.00000E+00 221 | 222 | -7.07107E-01 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 223 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 224 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 225 | 0.00000E+00 226 | 227 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 228 | 0.00000E+00 0.00000E+00 1.00000E+00 8.94427E-01 0.00000E+00 229 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 230 | 0.00000E+00 231 | 232 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 233 | 0.00000E+00 -1.00000E+00 0.00000E+00 -4.47214E-01 0.00000E+00 234 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 235 | 0.00000E+00 236 | 237 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 238 | 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 239 | 0.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 240 | 0.00000E+00 241 | 242 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 243 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 244 | -1.00000E+00 -7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 245 | 0.00000E+00 246 | 247 | 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 248 | 0.00000E+00 0.00000E+00 0.00000E+00 -8.94427E-01 0.00000E+00 249 | 0.00000E+00 -7.07107E-01 -1.00000E+00 0.00000E+00 0.00000E+00 250 | 0.00000E+00 251 | 252 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 253 | 0.00000E+00 0.00000E+00 0.00000E+00 4.47214E-01 0.00000E+00 254 | 0.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 255 | 1.00000E+00 256 | 257 | 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 258 | 8.94427E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 259 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 260 | 0.00000E+00 261 | 262 | 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 263 | 4.47214E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 264 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 265 | 0.00000E+00 266 | 267 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 268 | -8.94427E-01 0.00000E+00 0.00000E+00 0.00000E+00 8.94427E-01 269 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 270 | 0.00000E+00 271 | 272 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 273 | -4.47214E-01 1.00000E+00 0.00000E+00 0.00000E+00 -4.47214E-01 274 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 275 | 0.00000E+00 276 | 277 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 278 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -8.94427E-01 279 | 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 280 | 0.00000E+00 281 | 282 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 283 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 4.47214E-01 284 | 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 285 | 0.00000E+00 286 | 287 | loads 288 | # node X load, Y load 289 | 2 10 4 290 | 3 0 6 291 | 4 0 -13 292 | 293 | Load matrix = 294 | Matrix of dimensions (16 x 1) 295 | 0.00000E+00 296 | 0.00000E+00 297 | -1.00000E+01 298 | -4.00000E+00 299 | -0.00000E+00 300 | -6.00000E+00 301 | -0.00000E+00 302 | 1.30000E+01 303 | 0.00000E+00 304 | 0.00000E+00 305 | 0.00000E+00 306 | 0.00000E+00 307 | 0.00000E+00 308 | 0.00000E+00 309 | 0.00000E+00 310 | 0.00000E+00 311 | 312 | Member Actions, [Ni | Ri] matrix. 313 | Matrix of dimensions (16 x 1) 314 | 7.42462E+00 315 | 2.50000E+00 316 | 2.25000E+00 317 | -1.25000E+00 318 | -4.75000E+00 319 | 2.79508E+00 320 | 2.50000E+00 321 | -1.17500E+01 322 | 7.82624E+00 323 | 2.79508E+00 324 | -1.25000E+00 325 | -1.66170E+01 326 | 2.50000E+00 327 | -1.00000E+01 328 | -5.25000E+00 329 | 8.25000E+00 330 | 331 | matrix condition number = 14.9856951066 332 | -------------------------------------------------------------------------------- /truss3/out/sdtruss4.out: -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss4.dat 3 | ================================ 4 | # sdtruss4.dat - Statically Determinate Complex Truss #4 5 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 6 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 7 | # Ref. "Basic Concepts" p61 Fig. 4.7 8 | # Flags - decoration for this program 9 | general 10 | # noNodes, noMembers, noAuxiliaries 11 | g 6 9 3 12 | g 3 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 0 0 17 | t 2 0 6 18 | t 3 5 11 19 | t 4 13 11 20 | t 5 18 6 21 | t 6 18 0 22 | #auxiliaries 23 | t 7 0 4 24 | t 8 22 0 25 | t 9 18 4 26 | members 27 | t 1 1 2 28 | t 2 2 3 29 | t 3 3 4 30 | t 4 4 5 31 | t 5 6 5 32 | t 6 1 4 33 | t 7 1 5 34 | t 8 2 6 35 | t 9 3 6 36 | # Auxiliary members next 37 | t 10 1 7 38 | t 11 6 8 39 | t 12 6 9 40 | loads 41 | # node X load, Y load 42 | 2 4 0 43 | 3 0 -7 44 | 4 11 0 45 | end 46 | 47 | *** Data Echo Finished *** 48 | echo of "general" flag. 49 | # sdtruss4.dat - Statically Determinate Complex Truss #4 50 | # "Basic Concepts of Structural Analysis" AS Hall and AP Kabaila, 51 | # Pitman Pub. (c) A Hall and AP Kabaila 1977 - aka "Basic Concepts". 52 | # Ref. "Basic Concepts" p61 Fig. 4.7 53 | # Flags - decoration for this program 54 | general 55 | # noNodes, noMembers, noAuxiliaries 56 | g 6 9 3 57 | g 3 58 | noLoadLines = 3 59 | nodes 60 | # Nodal list 61 | # t no x y 62 | t 1 0 0 63 | Node freedoms 1 2 64 | t 2 0 6 65 | Node freedoms 3 4 66 | t 3 5 11 67 | Node freedoms 5 6 68 | t 4 13 11 69 | Node freedoms 7 8 70 | t 5 18 6 71 | Node freedoms 9 10 72 | t 6 18 0 73 | Node freedoms 11 12 74 | #auxiliaries 75 | t 7 0 4 76 | Node freedoms 13 14 77 | t 8 22 0 78 | Node freedoms 15 16 79 | t 9 18 4 80 | Node freedoms 17 18 81 | nodes = 82 | 1 (1, 0.0, 0.0, 1, 2) 83 | 2 (2, 0.0, 6.0, 3, 4) 84 | 3 (3, 5.0, 11.0, 5, 6) 85 | 4 (4, 13.0, 11.0, 7, 8) 86 | 5 (5, 18.0, 6.0, 9, 10) 87 | 6 (6, 18.0, 0.0, 11, 12) 88 | 7 (7, 0.0, 4.0, 13, 14) 89 | 8 (8, 22.0, 0.0, 15, 16) 90 | 9 (9, 18.0, 4.0, 17, 18) 91 | members 92 | t 1 1 2 93 | t 2 2 3 94 | t 3 3 4 95 | t 4 4 5 96 | t 5 6 5 97 | t 6 1 4 98 | t 7 1 5 99 | t 8 2 6 100 | t 9 3 6 101 | # Auxiliary members next 102 | t 10 1 7 103 | t 11 6 8 104 | t 12 6 9 105 | members = 106 | 1 (1, 1, 2) 107 | 2 (2, 2, 3) 108 | 3 (3, 3, 4) 109 | 4 (4, 4, 5) 110 | 5 (5, 6, 5) 111 | 6 (6, 1, 4) 112 | 7 (7, 1, 5) 113 | 8 (8, 2, 6) 114 | 9 (9, 3, 6) 115 | 10 (10, 1, 7) 116 | 11 (11, 6, 8) 117 | 12 (12, 6, 9) 118 | (1, 1, 2) 119 | member_no, locvec = 1 1 2 3 4 120 | direction cosines = 0.0 1.0 121 | (2, 2, 3) 122 | member_no, locvec = 2 3 4 5 6 123 | direction cosines = 0.707106781187 0.707106781187 124 | (3, 3, 4) 125 | member_no, locvec = 3 5 6 7 8 126 | direction cosines = 1.0 0.0 127 | (4, 4, 5) 128 | member_no, locvec = 4 7 8 9 10 129 | direction cosines = 0.707106781187 -0.707106781187 130 | (5, 6, 5) 131 | member_no, locvec = 5 11 12 9 10 132 | direction cosines = 0.0 1.0 133 | (6, 1, 4) 134 | member_no, locvec = 6 1 2 7 8 135 | direction cosines = 0.763386285369 0.645942241466 136 | (7, 1, 5) 137 | member_no, locvec = 7 1 2 9 10 138 | direction cosines = 0.948683298051 0.316227766017 139 | (8, 2, 6) 140 | member_no, locvec = 8 3 4 11 12 141 | direction cosines = 0.948683298051 -0.316227766017 142 | (9, 3, 6) 143 | member_no, locvec = 9 5 6 11 12 144 | direction cosines = 0.763386285369 -0.645942241466 145 | (10, 1, 7) 146 | member_no, locvec = 10 1 2 13 14 147 | direction cosines = 0.0 1.0 148 | (11, 6, 8) 149 | member_no, locvec = 11 11 12 15 16 150 | direction cosines = 1.0 0.0 151 | (12, 6, 9) 152 | member_no, locvec = 12 11 12 17 18 153 | direction cosines = 0.0 1.0 154 | memprops = 155 | 1 [1, 2, 3, 4, 0.0, 1.0] 156 | 2 [3, 4, 5, 6, 0.70710678118654746, 0.70710678118654746] 157 | 3 [5, 6, 7, 8, 1.0, 0.0] 158 | 4 [7, 8, 9, 10, 0.70710678118654746, -0.70710678118654746] 159 | 5 [11, 12, 9, 10, 0.0, 1.0] 160 | 6 [1, 2, 7, 8, 0.76338628536911446, 0.64594224146617374] 161 | 7 [1, 2, 9, 10, 0.94868329805051377, 0.31622776601683794] 162 | 8 [3, 4, 11, 12, 0.94868329805051377, -0.31622776601683794] 163 | 9 [5, 6, 11, 12, 0.76338628536911446, -0.64594224146617374] 164 | 10 [1, 2, 13, 14, 0.0, 1.0] 165 | 11 [11, 12, 15, 16, 1.0, 0.0] 166 | 12 [11, 12, 17, 18, 0.0, 1.0] 167 | Dimension of connection mat ndim =12 168 | 169 | Connection matrix 170 | Matrix of dimensions (12 x 12) 171 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 172 | 7.63386E-01 9.48683E-01 0.00000E+00 0.00000E+00 0.00000E+00 173 | 0.00000E+00 0.00000E+00 174 | 175 | 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 176 | 6.45942E-01 3.16228E-01 0.00000E+00 0.00000E+00 1.00000E+00 177 | 0.00000E+00 0.00000E+00 178 | 179 | 0.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 180 | 0.00000E+00 0.00000E+00 9.48683E-01 0.00000E+00 0.00000E+00 181 | 0.00000E+00 0.00000E+00 182 | 183 | -1.00000E+00 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 184 | 0.00000E+00 0.00000E+00 -3.16228E-01 0.00000E+00 0.00000E+00 185 | 0.00000E+00 0.00000E+00 186 | 187 | 0.00000E+00 -7.07107E-01 1.00000E+00 0.00000E+00 0.00000E+00 188 | 0.00000E+00 0.00000E+00 0.00000E+00 7.63386E-01 0.00000E+00 189 | 0.00000E+00 0.00000E+00 190 | 191 | 0.00000E+00 -7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 192 | 0.00000E+00 0.00000E+00 0.00000E+00 -6.45942E-01 0.00000E+00 193 | 0.00000E+00 0.00000E+00 194 | 195 | 0.00000E+00 0.00000E+00 -1.00000E+00 7.07107E-01 0.00000E+00 196 | -7.63386E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 197 | 0.00000E+00 0.00000E+00 198 | 199 | 0.00000E+00 0.00000E+00 0.00000E+00 -7.07107E-01 0.00000E+00 200 | -6.45942E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 201 | 0.00000E+00 0.00000E+00 202 | 203 | 0.00000E+00 0.00000E+00 0.00000E+00 -7.07107E-01 0.00000E+00 204 | 0.00000E+00 -9.48683E-01 0.00000E+00 0.00000E+00 0.00000E+00 205 | 0.00000E+00 0.00000E+00 206 | 207 | 0.00000E+00 0.00000E+00 0.00000E+00 7.07107E-01 -1.00000E+00 208 | 0.00000E+00 -3.16228E-01 0.00000E+00 0.00000E+00 0.00000E+00 209 | 0.00000E+00 0.00000E+00 210 | 211 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 212 | 0.00000E+00 0.00000E+00 -9.48683E-01 -7.63386E-01 0.00000E+00 213 | 1.00000E+00 0.00000E+00 214 | 215 | 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 216 | 0.00000E+00 0.00000E+00 3.16228E-01 6.45942E-01 0.00000E+00 217 | 0.00000E+00 1.00000E+00 218 | 219 | loads 220 | # node X load, Y load 221 | 2 4 0 222 | 3 0 -7 223 | 4 11 0 224 | 225 | Load matrix = 226 | Matrix of dimensions (12 x 1) 227 | 0.00000E+00 228 | 0.00000E+00 229 | -4.00000E+00 230 | -0.00000E+00 231 | -0.00000E+00 232 | 7.00000E+00 233 | -1.10000E+01 234 | -0.00000E+00 235 | 0.00000E+00 236 | 0.00000E+00 237 | 0.00000E+00 238 | 0.00000E+00 239 | 240 | Member Actions, [Ni | Ri] matrix. 241 | Matrix of dimensions (12 x 1) 242 | 3.00000E+00 243 | 1.76777E+00 244 | 1.10000E+01 245 | 8.32629E-16 246 | 7.95886E-16 247 | -9.11471E-16 248 | -6.54996E-16 249 | -5.53399E+00 250 | -1.27720E+01 251 | -3.00000E+00 252 | -1.50000E+01 253 | 1.00000E+01 254 | 255 | matrix condition number = 8.63664027024 256 | -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/address-book-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/address-book-new.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/document-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/document-new.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/document-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/document-open.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/document-print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/document-print.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/document-save-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/document-save-as.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/document-save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/document-save.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/edit-find-replace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/edit-find-replace.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/go-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/go-home.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/go-jump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/go-jump.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/process-stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/process-stop.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/system-log-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/system-log-out.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/actions/view-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/actions/view-refresh.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/apps/help-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/apps/help-browser.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/apps/preferences-system-session.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/apps/preferences-system-session.png -------------------------------------------------------------------------------- /truss3/tango4truss/32x32/devices/media-floppy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OldAl/tuts4pyside/aba682aee43b5e72569750f7907f6a94a6e02bdd/truss3/tango4truss/32x32/devices/media-floppy.png -------------------------------------------------------------------------------- /truss3/tango4truss/AUTHORS: -------------------------------------------------------------------------------- 1 | Ulisse Perusin 2 | Steven Garrity 3 | Lapo Calamandrei 4 | Ryan Collier 5 | Rodney Dawes 6 | Andreas Nilsson 7 | Tuomas Kuosmanen 8 | Garrett LeSage 9 | Jakub Steiner 10 | -------------------------------------------------------------------------------- /truss3/tango4truss/COPYING: -------------------------------------------------------------------------------- 1 | The icons in this repository are herefore released into the Public Domain. 2 | -------------------------------------------------------------------------------- /truss3/tango4truss/README: -------------------------------------------------------------------------------- 1 | Tango Icon Theme 2 | ---------------- 3 | 4 | This is an icon theme that follows the Tango visual guidelines [1]. Currently 5 | it depends on Imagemagick for creation of 24x24 bitmaps by adding a 1px padding 6 | around the 22x22px version. For GNOME and KDE you will also need 7 | icon-naming-utils that allow the theme to work in these environments before 8 | they follow the new naming scheme [2]. 9 | 10 | 11 | [1] http://tango-project.org/Tango_Icon_Theme_Guidelines 12 | [2] http://tango-project.org/Standard_Icon_Naming_Specification 13 | -------------------------------------------------------------------------------- /truss3/truss.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | tango4truss/32x32/actions/document-new.png 4 | tango4truss/32x32/actions/document-open.png 5 | tango4truss/32x32/devices/media-floppy.png 6 | tango4truss/32x32/actions/document-save-as.png 7 | tango4truss/32x32/actions/edit-find-replace.png 8 | tango4truss/32x32/actions/system-log-out.png 9 | tango4truss/32x32/actions/address-book-new.png 10 | tango4truss/32x32/apps/preferences-system-session.png 11 | tango4truss/32x32/apps/help-browser.png 12 | 13 | 14 | -------------------------------------------------------------------------------- /truss3/try.out : -------------------------------------------------------------------------------- 1 | ================================ 2 | SOLUTION FOR sdtruss0.dat 3 | ================================ 4 | #sdtruss0.dat 5 | # Simplest statically determined truss. By changing the x dimension 6 | # of node 6, it can be made unstable. Analyse it for vertical force, 7 | # or horizontal force at node 1. 8 | general 9 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 10 | g 4 5 3 1 11 | # no of line in load entry 12 | g 1 13 | nodes 14 | # Nodal list 15 | # t no x y 16 | t 1 2 4 17 | t 2 0 2 18 | t 3 2 2 19 | t 4 4 2 20 | # auxiliaries 21 | t 5 0 0 22 | t 6 3.5 0 23 | t 7 4 0 24 | members 25 | t 1 2 1 26 | t 2 2 3 27 | t 3 3 1 28 | t 4 1 4 29 | t 5 3 4 30 | # Reactions or Auxiliary members. 31 | t 6 2 5 32 | t 7 3 6 33 | t 8 4 7 34 | loads 35 | # node X load, Y load 36 | 1 0 2 37 | end 38 | *** Data Echo Finished *** 39 | echo of "general" flag. 40 | #sdtruss0.dat 41 | # Simplest statically determined truss. By changing the x dimension 42 | # of node 6, it can be made unstable. Analyse it for vertical force, 43 | # or horizontal force at node 1. 44 | general 45 | # noNodes, noMembers, noAuxiliaries, noLoadCases (always 1) 46 | g 4 5 3 1 47 | # no of line in load entry 48 | g 1 49 | noLoadLines = 1 50 | nodes 51 | # Nodal list 52 | # t no x y 53 | t 1 2 4 54 | Node freedoms 1 2 55 | t 2 0 2 56 | Node freedoms 3 4 57 | t 3 2 2 58 | Node freedoms 5 6 59 | t 4 4 2 60 | Node freedoms 7 8 61 | # auxiliaries 62 | t 5 0 0 63 | Node freedoms 9 10 64 | t 6 3.5 0 65 | Node freedoms 11 12 66 | t 7 4 0 67 | Node freedoms 13 14 68 | nodes = 69 | 1 (1, 2.0, 4.0, 1, 2) 70 | 2 (2, 0.0, 2.0, 3, 4) 71 | 3 (3, 2.0, 2.0, 5, 6) 72 | 4 (4, 4.0, 2.0, 7, 8) 73 | 5 (5, 0.0, 0.0, 9, 10) 74 | 6 (6, 3.5, 0.0, 11, 12) 75 | 7 (7, 4.0, 0.0, 13, 14) 76 | members 77 | t 1 2 1 78 | t 2 2 3 79 | t 3 3 1 80 | t 4 1 4 81 | t 5 3 4 82 | # Reactions or Auxiliary members. 83 | t 6 2 5 84 | t 7 3 6 85 | t 8 4 7 86 | members = 87 | 1 (1, 2, 1) 88 | 2 (2, 2, 3) 89 | 3 (3, 3, 1) 90 | 4 (4, 1, 4) 91 | 5 (5, 3, 4) 92 | 6 (6, 2, 5) 93 | 7 (7, 3, 6) 94 | 8 (8, 4, 7) 95 | (1, 2, 1) 96 | member_no, locvec = 1 3 4 1 2 97 | direction cosines = 0.707106781187 0.707106781187 98 | (2, 2, 3) 99 | member_no, locvec = 2 3 4 5 6 100 | direction cosines = 1.0 0.0 101 | (3, 3, 1) 102 | member_no, locvec = 3 5 6 1 2 103 | direction cosines = 0.0 1.0 104 | (4, 1, 4) 105 | member_no, locvec = 4 1 2 7 8 106 | direction cosines = 0.707106781187 -0.707106781187 107 | (5, 3, 4) 108 | member_no, locvec = 5 5 6 7 8 109 | direction cosines = 1.0 0.0 110 | (6, 2, 5) 111 | member_no, locvec = 6 3 4 9 10 112 | direction cosines = 0.0 -1.0 113 | (7, 3, 6) 114 | member_no, locvec = 7 5 6 11 12 115 | direction cosines = 0.6 -0.8 116 | (8, 4, 7) 117 | member_no, locvec = 8 7 8 13 14 118 | direction cosines = 0.0 -1.0 119 | memprops = 120 | 1 [3, 4, 1, 2, 0.7071067811865475, 0.7071067811865475] 121 | 2 [3, 4, 5, 6, 1.0, 0.0] 122 | 3 [5, 6, 1, 2, 0.0, 1.0] 123 | 4 [1, 2, 7, 8, 0.7071067811865475, -0.7071067811865475] 124 | 5 [5, 6, 7, 8, 1.0, 0.0] 125 | 6 [3, 4, 9, 10, 0.0, -1.0] 126 | 7 [5, 6, 11, 12, 0.6, -0.8] 127 | 8 [7, 8, 13, 14, 0.0, -1.0] 128 | Dimension of connection mat ndim =8 129 | 130 | Connection matrix 131 | Matrix of dimensions (8 x 8) 132 | -7.07107E-01 0.00000E+00 0.00000E+00 7.07107E-01 0.00000E+00 133 | 0.00000E+00 0.00000E+00 0.00000E+00 134 | 135 | -7.07107E-01 0.00000E+00 -1.00000E+00 -7.07107E-01 0.00000E+00 136 | 0.00000E+00 0.00000E+00 0.00000E+00 137 | 138 | 7.07107E-01 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 139 | 0.00000E+00 0.00000E+00 0.00000E+00 140 | 141 | 7.07107E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 142 | -1.00000E+00 0.00000E+00 0.00000E+00 143 | 144 | 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 145 | 0.00000E+00 6.00000E-01 0.00000E+00 146 | 147 | 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 148 | 0.00000E+00 -8.00000E-01 0.00000E+00 149 | 150 | 0.00000E+00 0.00000E+00 0.00000E+00 -7.07107E-01 -1.00000E+00 151 | 0.00000E+00 0.00000E+00 0.00000E+00 152 | 153 | 0.00000E+00 0.00000E+00 0.00000E+00 7.07107E-01 0.00000E+00 154 | 0.00000E+00 0.00000E+00 -1.00000E+00 155 | 156 | loads 157 | # node X load, Y load 158 | 1 0 2 159 | 160 | Load matrix = 161 | Matrix of dimensions (8 x 1) 162 | -0.00000E+00 163 | -2.00000E+00 164 | 0.00000E+00 165 | 0.00000E+00 166 | 0.00000E+00 167 | 0.00000E+00 168 | 0.00000E+00 169 | 0.00000E+00 170 | 171 | Member Actions, [Ni | Ri] matrix. 172 | Matrix of dimensions (8 x 1) 173 | 1.41421E+00 174 | -1.00000E+00 175 | 0.00000E+00 176 | 1.41421E+00 177 | -1.00000E+00 178 | 1.00000E+00 179 | 0.00000E+00 180 | 1.00000E+00 181 | 182 | matrix condition number = 11.6995513319 183 | -------------------------------------------------------------------------------- /wiki-src/PySideSimplicissimus/simplicissimus: -------------------------------------------------------------------------------- 1 | [[Category:LanguageBindings]] 2 | [[Category:LanguageBindings::PySide]] 3 | [[Category:LanguageBindings::PySide::Newbie Tutorials]] 4 | 5 | *English* ["French":http://qt-devnet.developpez.com/tutoriels/pyside/simplissimus/#LII] [[PySide-Newbie-Tutorials-Japanese|日本語]] 6 | 7 | h1. PySideSimplicissimus : 10 min newbie to newbie Tutorials 8 | 9 | Before one can start programming, there always are prerequisites. In the Prerequisites for your convenience provided are a few extant links to it as well as the Hello World example. 10 | * [[PySideSimplicissimus_Module_1_Prerequisites | Prerequisites]] 11 | In the following presented are several small examples. Unless otherwise noted, they should take about 10 mins. to complete, but it may take longer depending on various factors, including familiarity with PySide. 12 | * [[PySideSimplicissimus_Module_2_CloseButton | Close ]] 13 | Every main PySide program window can be resized, moved around and it can be closed by clicking the [x] symbol. Many programmers, however, prefer to also have a *button that closes* the program. The following code snippet shows how such close button can be implemented. 14 | * [[PySideSimplicissimus_Module_3_AboutBox | About]] 15 | The example of shows an *about box* with version of Qt, PySide, Python and type of platform. Useful for any program, large or small. 16 | * [[PySideSimplicissimus_Module_4_ShowLicence | Show Licence ]] 17 | It is obligatory for programs licenced under *GPL* (General Public Licence) to enable users to display and read *GPL.* This *GPL* requirement is often overlooked. The following snippet shows how to implement it simply. 18 | * [[PySideSimplicissimus_Module_5_Combine | Combine]] 19 | Next presented is the combination of the *CloseButton*, *AboutBox* and *Licence*, all in one program. The program is almost useful - for instance, I use it to check about box to see what version of Python, Qt and PySide I am using. For a newbie, the program may take a little longer than 10 minutes. 20 | * [[PySideSimplicissimus_Module_6_AlternativeCombine | Alternative Combine]] 21 | There are more ways to skin a cat than one - many examples of PySide and PyQt do not use the dual inheritance structure for their programs. This little tutorial gives an alternative method to structure the "Combine" program and avoid multiple inheritance. Good to know about it. It will probably take little less than 10 minutes. 22 | * [[PySideSimplicissimus_Module_7_CombineAllIn1 | Combine All in One]] 23 | This is the last variation of combine.py program, a version which merges ui_combine.py and combine.py into one program. It's merit is that the number of files is smaller and files with a warning not to alter them are no longer used. Next newbie to newbie tutorial will be a little more realistic - an engineering application 24 | * [[PySide_Engineering_Application | Practical (Almost) Engineering Application]] 25 | The promises have to be kept (I could never be a politician) - so here is an *almost practical* application to analysis of engineering structures, a familiar field of Civil and Aeronautical Engineering. It is a short and straight forward program, though it will take a longer than 10 minutes :) 26 | 27 | *Enjoy!* 28 | --------------------------------------------------------------------------------