RESEARCH INTO THE USABILITY OF SOFTWARE PRODUCED IN A UTILITY FOR THE UTILITY AND CONSULTANTS.Gareth Stanford A research report submitted to the faculty of Engineering and the Built Environment, of the University of the Witwatersrand, in partial fulfilment of the requirements for the degree of Master of Science in Engineering Johannesburg 2007 DECLARATION I declare that this research report is my own unaided work. It is being submitted to the Degree of Masters of Science in Engineering at the University of Witwatersrand, Johannesburg. It has not been submitted before for any other degree or examination at any other university. ……………………………………………………………………………………………… (Signature of Candidate) ……………………….. day of ………………………….. year …………………………... 2 ABSTRACT RSAT (Reticulation Sag And Tension) software is a tool available for use as part of the medium voltage Eskom Distribution standard. This software is scrutinised for its usability and for errors such that it can be revised to improve the usability of the tool. The type of software being studied is used to ensure optimum design performance and reduce the probability of a conductor failure on distribution lines. The algorithms for calculating tension, sag and clearance values take into account research into optimum design tensions. This ensures low bending forces due to conductor vibration. An algorithm for creep is designed based on common life expectancy of line conductors. The design methodology and algorithms were then put into software form as RSAT. Review and alterations include the changing of compiler, user interface, data storage mechanisms and the inclusion of options allowing the addition of new data. 3 Acknowledgements I would like to thank the Eskom Industry Association Resource Centre management team for allowing me this opportunity to complete this research with their help and resources. The Eskom Distribution lines committee for their input to the research throughout the research. To my supervisor, Professor Barry Dwolatzky for your guidance and support in refining ideas and methodologies employed during the course of the research. Lastly I would like to thank the users of RSAT for your support and feedback into this research. 4 TABLE OF CONTENTS DECLARATION............................................................................................................... 2 ABSTRACT....................................................................................................................... 3 ACKNOWLEDGEMENTS ............................................................................................. 4 TABLE OF CONTENTS ................................................................................................. 5 1. 2. 3. 4. 5. FORWARD ............................................................................................................... 7 INTRODUCTION..................................................................................................... 8 BACKGROUND ..................................................................................................... 10 M.Sc. PAPER – G. STANFORD ........................................................................... 12 CONCLUSION ....................................................................................................... 26 APPENDIX A: LITERATURE SURVEY.................................................................... 30 APPENDIX B: DESIGN SPECIFICATION................................................................ 54 APPENDIX C: IMPLEMENTATION ......................................................................... 86 APPENDIX D: TEST RESULTS .................................................................................. 90 APPENDIX E: COMPLETE SOURCE CODE......................................................... 100 TABLE OF FIGURES Figure 1: RSAT limiting criteria page .............................................................................. 38 Figure 2: Sag and tension chart......................................................................................... 43 Figure 3: Stringing Chart .................................................................................................. 44 Figure 4: Clearance chart .................................................................................................. 45 Figure 5: Uplift verses Catenary ....................................................................................... 47 Figure 6: RSAT critical span graph .................................................................................. 47 Figure 8: RSAT's old interface ......................................................................................... 70 Figure 9: Old conductor form ........................................................................................... 71 Figure 10: Old conductor data form.................................................................................. 71 5 ............... 73 Figure 13: New interface with a conductor selected... 74 Figure 14: New result form for selecting sag and tension algorithm.........................Figure 11: Old result form for sag and tension algorithm ................... 72 Figure 12: RSAT's new interface.............................................................. 75 6 .................................................................................................... The intention is that the paper be presented at a conference or in a technical journal subsequent to its completion. The completing of the research involved applying the philosophies and methodologies into designing and producing a new version of the RSAT software. FORWARD The intention of any research is that it be presented to peers and an educational institution with the idea of continuing knowledge in the industry. This dissertation will therefore not follow the conventional format for a dissertation. More detail concerning the research. The main body of the document is written as a conference paper of the research completed. specific algorithms and software design can be found in the appendixes of the document. 7 .1. The paper details the philosophies and methodologies used in producing usable software. Contact incidents of this type present the electrical utility with a high risk.2. The exercise is often completed with the team leader (clerk of works) checking the tension. overstressed or un-optimised selection of line equipment. The conductor tension is thus checked by the approximate proportion of sag in the conductor. The catenary shape is similar to a parabola and does not change much from span to span or between different conductors. ultimately causing damage to the conductor and line equipment. Failure of the line presents the utility with a high cost in terms of replacement. overstressed or un-optimised selection of towers. cost of un-served energy and possibly consequential damage. 8 . The worst case scenario would be where the consequential damage is in the form of a person coming into contact with low hanging conductor or a broken conductor. The problems above may lead to premature line failure. - possible conductor clearance not within statutory limits. has led to many a conductor being tensioned incorrectly as the “experienced eye” is not an accurate method of tensioning conductors. Low hanging conductors often do not hang low enough to touch the ground. Incorrectly tensioned lines present the following possible problems: - overstressed or un-optimised selection of line conductor. The tension of the conductor is a parameter that is defined by its characteristic catenary (parabolic like) shape. possible vibration of conductor. being common practice. Hence the terminology commonly used is "sagging in the line". Since there is no earth fault for the protection to clear the conductor remains live. Hence experienced field staff or contractors use their “experienced eye” to tell when the conductor is at this characteristic catenary. INTRODUCTION Stringing of conductor for distribution lines is done by contractors or utility field staff. This. 9 . Because the equations for conductor tension. In house software is not necessarily produced by software engineers but by engineering staff with more background in line design. Therefore user friendliness is of utmost importance. software is used to complete the algorithms quickly and accurately. Advantages of software being produced in-house allow specific user requirements to be met with a relatively low cost of development. Due to these high risks electrical utilities must ensure designs are done such that conductors are strung correctly. Standards aim to reduce risk and promote cost saving. If underestimated. even though the probability of such an incident occurring is low. Stretch in the conductor is referred to as the “creep” of the conductor. temperature variance and creep are complex. the conductor creep could lead to a conductor sagging below safe limits and cause a low hanging conductor as described above. Therefore research into the usability of the RSAT software. Sag and tension software is commercially available but it is expensive and not freely available to Eskom designers and contractors. Another factor presenting a possible design flaw is the factor that conductor stretches when under normal loading and abnormal loading. The software can therefore be made available to Eskom designers and contractors freely. which forms part of the Eskom standard. else the standard may not gain wide acceptance and adoption.These types of incidents should be avoided at all costs. This may lead to an accurate piece of software but it can rate low on the usability scales. Hence the importance of having accurate and easily available information with respect to line tension when designing or maintaining a line is of great importance. is deemed to be a high priority. The disadvantage of the in-house software is that it is not viable for bigger full line design packages. Sag And Tension (SAT) software packages are commercially available to design a power line from the structure to each small component that comprises the modern power line. The power line is basically made up of supporting structures. It is the job of line designers to select structures. A tool is required to account for all the above conditions such that a mechanical withstand required to overcome the conditions can be found. The selection is made based on the design values for power transmission capability required. A software package was needed to produce the information simply. Design packages available are large elaborate design packages that require great volumes of data. line hardware and conductors. SAT packages are available but are costly and do not fit the user requirements in all respects. insulators. Conductors used for power lines range in size and material depending on the application. while calculating tensions and sags of distribution lines. BACKGROUND Power lines have been used to transport electrical energy since the late 1800’s. wood or concrete and typically range from 4 metres to 28 metres in the distribution of electricity. This is a calculator capable of setting up design conditions and criteria to be met. annual prevailing weather conditions and the statutory requirements for the voltage rating. clamp and suspend the conductor with respect to the structure. This kind of resource is not needed and is not cost effective for use with small and medium power lines.3. Insulators are used to insulate the conductor from the structure. Structures can be made of materials such as steel. to a specific Eskom define user requirement and cost effectively. 10 . This design tool is known as the “Sag and Tension Calculator”. hardware and conductor suitable for each application. insulators. Generally these packages cater for full design lines which are engineered with great precision by engineers with a wealth of experience and data. Line hardware is used to damp. training and experience to create a simple conductor tension plan for small and medium power lines. physical terrain needed to be covered. the software will be upgraded as part of the exercise. The development of algorithms and a usable program within these parameters is the challenge taken up in this research. RSAT has evolved from MS dos based software.RSAT was developed to fulfil this requirement. Standard techniques for determining usability will be explored and new techniques will be suggested where traditional techniques could not be used. In staying with this modus operandi. However this upgrade will include the recommendations of the usability study since usability has always been RSAT’s Achilles heel. 11 . to Windows based software with each revision upgrading the software to the latest operating system. Sc. M. STANFORD 12 . PAPER – G.4. Clearance. User Interface. Stringing charts. Reticulation. the software is not programmed with the users needs or preferences in mind (the designers assume the needs of the user are the same as his perceived user requirement). Tension. Software running the algorithms quickly and accurately allows the designer to do the job with relative ease. Possible reasons for this are: the designers of the software are often engineers in the field of the target software (not software engineers). Installation. This paper presents a usability study done to resolve this situation with the RSAT software produced in the Electrical Utility Eskom. These are constructed using varied sizes of conductors. Stanford School of Electrical and Information Engineering University of the Witwatersrand Abstract . Producing software in-house can be problematic in that the product is not produced by a software engineering team. The software needs to be compact and include all the requirements of the utility for the calculations. 13 . Sag. The commercially available packages do not fulfil this requirement and so the software is produced in-house to fulfil all the utility requirements. In early revisions of the software the emphasis was clearly in the accuracy of algorithms and solution output. and Usability. Designers of power lines take into account material characteristics. Conductor Design. clamps. RSAT (Reticulation Sag and Tension software) is produced by a single electrical engineer with limited experience in the production of software. The process involves the use of algorithms that require iterative techniques and decision making. power transfer capability. the focus of the software is a numerical solution and no thought of how to get to the solution may have been given priority.Power lines have been used to transport electrical energy since the late 1800’s. Software Development. It did not focus on user interaction making it cumbersome to use. Keywords: Power Line Design. INTRODUCTION Software intended for the engineering environment is not always the most user friendly software. 1. statutory requirements and prevailing weather conditions to ensure optimum design of lines. insulators and held above the ground by structures made from various materials. the software tends to assume a certain level of understanding of the domain.Utilising a Usability Study to Review Sag and Tension Software G. Calculating sag and tension of a span is a complex process. project engineers and line consultants. some purchasers are now insisting that a usability study be completed. understand context of use.[4] The obvious advantage of completing a usability study is that the best suited software can be chosen for the business. to the ease of the modern compiler which completed the more mundane tasks for the designer. efficiency and satisfaction in a specified context use” [2]. This user centred design process is summarised in the following diagram: expenditure on such software is counterproductive. Level 1 provides the information on context of use. Coupled with this. However new operating systems and compilers with improved usability do not ensure that the software being used on the operating systems has been improved in usability at the same rate. Software Usability requirement Usability is: “the extent to which a product can be used by specified users to achieve specified goals with effectiveness. training for the software has never been considered. One only has to view the progression from no graphical operating interfaces like Microsoft DOS to the multitasking graphical user interfaces of the modern operating systems to see the effect and benefits of software usability. Level 2 is to define performance measures. propose a design and evaluate the design. Improved usability of the software used in business will help to increase accuracy and efficiency of how business is done. Level 3 is the final procedure for testing the requirement. It outlines the methodologies required to plan. Common industry specification A common industry specification for usability [2] has been developed for the standardisation of specifying usability of software.The frustration of poor software usability is a RSAT (Eskom’s in-house “Reticulation Sag and Tension” software) users are made of field technicians. Training would be more in the use of the software and less in the field of how to apply results. There are three levels of compliance. an interface that “behaves exactly how the user thought it would”[1] common factor for many packages used in business. It has become of such great importance that before software packages are purchased. satisfaction measures and criteria for specific scenarios of use. However the support required by users on the current version of RSAT would suggest that training is required. specify requirements. 14 . Even the methods of developing software have moved from the complexity of machine code. This affects business productivity which in turn affects the profits of the business. Considering the broad scope of users and the perceived simplicity of the software (engineering calculator). To avoid this type of training a more intuitive user interface is required. if the study is done during development. should changes be required. If not the 2. the software can be revised before implementation into a business. 3. The issue of usability of software has existed since the first software was developed. Over time an email list of users has been put together. and the physical and social environments in which a product is used. equipment (hardware. project engineers and design consultants. in a foreign environment. A common way to elicit information concerning user requirements for usability studies has been to setup a computer laboratory and observe the use of the software. stringing charts and clearance calculations. Level 2a . 15 . Recently this has been replaced with the use of field testing to gain the information. The user would be asked to complete the task causing the problem and describe each step of the task. Problems that were evident were the following: 1. software and materials). This way the user’s thought process and expectations of how things should work was logged.Context of use Context of use is defined as the users. was in a working group of users. Physical and social environments in which a product is used: the software is generally used in a medium and low voltage line design office. The software is downloaded from a website where the designers contact details are 4. This allowed the developer establish contact with the users and scrutinise each use case. The context of use of RSAT can be defined as follows: Users: Eskom designers. on a foreign machine. listed. User elicitation ranged form the odd error in the software to full length installation and usage guidance. tasks. The working group was held where specific issues could be raised with respect to the software interface and general design. 2. Tasks: to get data on sag and tension. Most communication comes via telephone or by e-mail. With RSAT a standard path of communication The redesign of the RSAT software was done taking these steps into account. Another way of communicating with the users 5.This had the disadvantage that it forced the user to use foreign software. The installation process was too complex The methodology of selecting a conductor did not allow for comparison of conductors. Level 1 . Field testing puts the user in a normal atmosphere on the users own PC and therefore gives a realistic view of issues with the software. This form of direct feedback and support has given the designer good feedback on the software and its usability. has always been used to communicate with the users.Performance and Satisfaction Measures Performance and satisfaction are to be defined by the users. Equipment: consists of standard PC’s linked to internet. Stringing charts could not be corrected for the first section once the next section was selected. as well an update in the calculation. (Selection of a new conductor meant going through the whole process again. The sequential nature of selection of conductor. 6. Conductor data display needed to be more easily accessed.3. No allowance was given for the addition of new conductors thus limiting the user’s capability with the software. In this research the criteria for good usable sag and tension programs were not available and so had to be drawn up at the beginning of the process. The criteria are as follows: 1. The user interface gave no indication of the critical span. [5] This simple grading system would present the designer with a quick means to see if the software achieved the goals set upfront. Full editing of spans in any section should be allowed at any time. Although the laboratory technique of eliciting usability has its flaws it was used on a small scale during beta testing and prior to final release of the software. Mistaken input. Many of the criteria had already been discovered through the telephonic and e-mail elicitation. Selected examples would cause the software to “hang” for no apparent reason. Limiting criteria could not be varied in line with prevailing conditions for the area. The installation process 9.Criteria for specific scenarios of use In design and testing it always a good practice to set goals and desirable outcomes for the process being undergone. Finally a Beta test copy of the software was released for field test and results from this testing were logged. The criteria for a number of specific scenarios were setup. It was used to confirm results gained from other methods of elicitation. Level 2b . 4. A warning should be given as to the input errors. planned case and best case. would cause the software to crash. 8. 16 . 7. 5. The scoring system used to grade each criteria had three possible results: a worst case. conductor data and the selection of algorithm to be run took too long.) 6. required on one file. Worst case: no change to the installation file. Best Case: The installation program must for all intensive purposes run itself with one possible installation file and one execution 10. such as inserting characters where an integer should be. Planned case: a more intuitive installation process with directions given to all possible scenarios of outcome. or new types to be added 3. 7. 5. Planned case: Conductor selected should be displayed at all times. Worst case: no change. as well as new conductors. Planned case: Comparison of two conductors can be made for one particular algorithm. Best Case: A process which allows conductors to be added to a type. Planned case: A customised conductor function. (For example C-Value can be changed to a percentage of ultimate tensile strength or to a tension. conductor data and the selection of algorithm is too long. The sequential process of selection of conductor.2.) 17 . Planned case: a new conductor selection process that is non-sequential not involving different forms per task. Conductor data display needs to be more easily accessed. Planned case: the software does not crash when incorrect input is inserted. Worst case: no change. algorithm etc. Best Case: One touch conductor selection form on screen selection without having to choose type. No allowance was given for addition of new conductors thus limiting the user’s capability with the software. Limiting criteria could not be varied in line with prevailing conditions for the area. Best Case: Conductor selected and its respective data should remain on screen at all times. conductor or structure technology. Worst case: no change. Best Case: the software does not crash when incorrect input is inserted and informs the user of the error with possible remedies. Planned case: a facility must be added which allows the user to change the limiting criteria. Incorrect input (such as characters where an integer is expected) should not cause the software to crash. Best Case: A number of conductors can be compared for any algorithm in the same view. 6. The methodology of selecting a conductor did not allow for comparison of conductors. 4. diagrams of conductor configuration and creep constant. data. Worst case: no change. Best Case: The facility allows limits to be changed per task and allows the criteria unit to be altered. Worst case: no change. Worst case: no change. The times need to compare Pine and 35 for a clearance chart with a 12 metre pole.125 metre and . 9. Best Case: the reason for these problems is established. 17. set the temperature limits to 0 to 30 with an increment of 5 degrees and the span length to 45 to 160 with an increment of 10 metre.Section 2 with spans 230. 150. 150. 14. Best Case: the critical span is calculated and a graph of everyday tension verses span length shows the critical span where the graph shows the conductor to have maximum tension. 11. Sum the distance required for the mouse to move to complete task 11. Compare the results of task 11 with that for the Hare with the same criteria. a test object placed half way down the 200 metre equivalent span of height 5 metre and at a temperature of 50 degrees. run a sat chart. a 13 metre pole. 18 . Count the number of mouse clicks to get from start to finish. Planned case: the software is resolved for these examples. Worst case: no change. Worst case: no change. Selected examples would cause the software to “hang” for no apparent reason. Stringing charts could not be corrected for the first section once the next section was selected. 15. 12. Planned case: allow the user to reset the software back a section to correct errors. Best Case: allow correction of errors without resetting any sections and allow the calculation to be redone for all sections at once. laboratory testing and comments on subsequent prototypes produced: clearance charts.Section 1 with spans 100. This would test the speed of use and of the computation of the algorithms. general functionality speed needed to be checked between the new and old software. Worst case: no change. 45 and 190 metre. The user interface has no indication of the critical span (the optimum span where tension is not required to be reduced in order to fulfil the limiting conditions). The following test cases were added to ten tasks above to indicate the speeds of operation: 7. 16. 13. The time needed to compare Squirrel and 10. The speed in completing tasks by a user would indicate if the usability had improved. Select a Mink conductor. The speeds of accessing the help for Once all the upgrades were made. Detail of changes The changes below were attained through user forums. Planned case: a critical span value for the conductor selected is given. old revision feedback. Acacia conductors for a string chart having: .8. - The default limits and ranges for the software have upgraded and can now be customised from a limits page. 8. Testing Testing took place in a controlled and uncontrolled exercise. - An option is provided whereby conductor data files can be updated with new conductor types. The conductor selected and respective conductor data being visible at all times. the tab algorithm for the respective tab was run and the tab updated before displaying the tab. The conductor selection is done by means of two list boxes – one for the type of conductor and one for the specific conductor per type. - Stringing charts : added the ability to edit old section data and recalculate the whole lines stringing tensions. In initial Beta test version all algorithms were updated on all tabs such that if a tab was selected the updated results would be reflected. These boxes remain visible on the main form at all times such that the conductor can be changed at any time and the algorithm results can be compared. To see if the changes improved the software. 8. 19 .1 Controlled testing The controlled testing was done with the design criteria above being checked between new and old software. - A graphical critical span indication was added such that conductor selection can be optimized. - The user interface was a simplified interface. - The default “Every Day Tension” limit was moved to “Final Stringing Tension” and is at a C value of 1425 for ACSR and AAAC so as to avoid the unnecessary use of vibration dampers. On the selection of a new tab. conductor data and conductor names. The results are as follows: - The use of setup password protection was removed from the installation program. - Clearance calculator: included the tension at the structures with horizontal and vertical components included. - Selection of a new conductor was upgraded to allow selection without clearing old limits or criteria setup for the previously selected conductor. Therefore this was changed to only complete the algorithm for the tab being viewed. it needed to be tested in line with the criteria setup earlier.- The installation program was simplified with a more intuitive interface. This allows the user to change between algorithms. conductor diagrams. The changes resulting from the process were good and process times were a fraction of previous versions. limits and graphs without reselecting a conductor. In line with the changes as set out above the forms based user interface was traded for a tab style user interface. help. This proved to slow the software down since this meant completing calculations for all algorithms every time a conductor was selected. Sequential selection process. These were done in a controlled environment. The speed test tasks were done by candidates of a high level of competence as well as candidates of first time user competence. Conductor selecting.Net framework will be required for the software to run. Best Case: the software was upgraded such that it does not crash when characters are inserted instead of numbers. 7. It also recalculates the “all” section each time "calculate" is pressed. percentage of ultimate tensile strength or a tension.1. Limiting criteria. Planned Case was achieved as a number of conductors can be compared for any algorithm. 20 . Selected examples hang. Best case: one operation is required to select a conductor without opening new windows sequentially. The installation process 6. 2. 4. The conductor selection windows are also close to the tab selection area and so that very little mouse movement is required to change the conductor and algorithm. The software uses an error message system to inform the user of the possible error and possible recourse. Best Case: The facility allows limits to be changed per task and the defaults limits to be revised. Best Case: the new process allows conductors to be added to an existing type or a new type can be added. The type of conductor need not be selected first. The Planned case was achieved in that the installation of the . Best Case: A critical span graph was added with “Every Day Tension” verses span length showing the critical span. 8. It also allows the user to define the units for tension from C-value. String chart correction. Addition of new conductors. Incorrect input causing software to crash. The user interface gave no indication of the critical span. 3. Conductor data display. Best Case: Conductor data remains on screen at all times. Best Case: the software upgrade allows correction of errors in previous sections without resetting any sections. 10. This was incorporated into the software but the installation needed to run again to install RSAT. 9. 5. Planned case: the software resolved all known examples that coursed previous versions of the software to hang. Therefore a print out or a good memory would be required. The results are as follows: The time improvement is 63 % for a competent user but again no change for a new user.2 5 Competence Higher 8 seconds 3 seconds Lower 8 seconds 8 seconds 21 . Number of mouse clicks required to complete the task of producing sag and tension An average improvement in time to complete was recorded as 7 %. Therefore. Result: RSAT Version 4.2 the data was removed such that 11. the object of the research was to rule out this factor.2 5 Competence Higher 43 seconds 37 seconds Lower 65 seconds 65 seconds 13. Viewing the users helped with ideas on how to make the software more intuitive. the shortest distance for the mouse to travel is given as the result. since measuring the distance travelled of the first time user’s mouse pointer could not be done. Hence the results will be judged on this time to complete. 12. However. and of the designers misunderstanding of what the user expects the procedure is for completing a task. For RSAT 4. This is indicative of the general misunderstanding of software. then a conductor data sheet is displayed and then only is the sag and tension data displayed. Viewing of the less competent user provided good feedback on how to improve the intuitiveness of the software. For a new user of lower competence there was no improvement. with Hare Result: RSAT Version 4. More importantly it is easier to do a comparison with RSAT 5 since the sag and tension data for Mink was only removed to replace with Hare.2 5 Competence Higher 10 clicks 5 clicks Lower 18 clicks 11 clicks conductor selection could take place. Production of a Mink conductor SAT chart with certain limits. it can be seen that there is still room for improvement on the usability and self explanatory aspects of the software. charts: Result: RSAT Version 4. engineering principles. In task 14.A controlled environment allowed for the observation of the user and his natural expectation of how the software should operate. Compare the sag and tension results of Mink The results for both high and low competent users will be reported below except for task 14. It is assumed that a more usable piece of software should render times that converge since the difference between users should only be engineering competence and not software knowledge. These improvements reflect an improvement in mechanical efficiency.2 5 Competence Higher/Lower 750 mm 130 mm . . This test showed a problem with the interface in that when a new conductor is selected the results were not updated until an 15.at a temperature of 50 degrees. Sum the distance for the mouse to move to complete case 1 for both versions of software. 5 The resulting improvements in time were 40 % and 24 % for higher and lower competencies respectively. (on screen assuming short cuts and tab keys are used where possible) Result: RSAT Version 4.the object placed 100 metres from pole A. 22 .The number of clicks required to produce a sag and tension chart improved by 50 % for the competent user. . Times for comparing Stringing charts Result: RSAT Version 4. needs to be restarted as the stringing chart does not reset. To inexperienced users this may not be obvious and the time taken substantially increased.2.2 Competence Higher 50 seconds 30 seconds Lower 114 seconds 86 seconds Improvement = 83 %.2 5 Competence Higher 90 seconds 50 seconds Lower 230 seconds 97 seconds attribute was updated for the clearance calculator other than the conductor.a 200 metre equivalent span and .a 13 metre pole. RSAT 4. First time users showed an improvement of only 39 %. This problem was resolved and further improved times by up to ten seconds. However a general comment would be that for lower competence user’s movements of the mouse would be further than that of a higher competence user. . The improvements for high and low competency are 45 % and 57 % respectively. The results were taken for the first time the input was correctly input.a 5 metre test object. 16. However if looked at in terms of actual numbers the improvement for lower competence users was 7 clicks while for higher competence users it was only 5 clicks. In order to get results for a second conductor.a 12 metre pole. for a clearance chart with: 14. Result: RSAT Version 4. . Competence is irrelevant since the distance between controls is a constant. Compare the times needed to produce results for Pine conductor and 35 conductor. There were two major feedback items related to usability of the software. The suggestion given was to guide the user away from making mistakes when inserting data. Then important function buttons. A “Suggested Action” help window to guide users to next possible action was added. Further prompting lead to the software being upgraded to resize based on different resolution settings of the users’ screens.2 5 Competence Higher 5 seconds 4 seconds 9 9 Lower The algorithms were updated to do calculations automatically after input was completed. The comment was that graphics were too small. 8. The only improvement that may have been gained in time would be due to the improved access to the help function selection. It was found that some inputs. The Beta test version was available for eight months with user feedback coming telephonically and via e-mail. The results from the Beta testing Overall the improvement for competent users was better than for first time users in laboratory testing. Not allowing the user to reset a calculation tab. by having a message facility that gave possible corrective actions required at the point of error. conductor boxes. a span of 100300 metre.17. This occurred at high resolutions. if completed incorrectly. menus. The second comment related to the size of the forms. This window prompted the user as to possible steps to take. Speeds of accessing help Result: RSAT Version 4. would mean when new data or a new chart wanted to be entered. The laboratory did prove useful in exposing errors in assumptions as to what the changes needed to be in ordered to improve the first time user’s experience of the software. 23 . The first was that the error/ exception handling could be improved. Hence the same type of help system is run on both pieces of software. showed the new software had achieved the goal of becoming more user-friendly. the software would need to be restarted. The software was improved in areas allowing users to reset calculation tabs.2 Uncontrolled testing The uncontrolled test was completed in the form of a Beta release being made available to users via the Distribution Technology website. fonts and tabs were increased in size to improve their visibility to users. An example of this is editing a span length from 300 metre to 100 metre but Improvement = 10 % inserting the 100 metre before deleting the 300 metre may lead to the software calculating up to This result shows that there were very few changes made to the help system as it has never been the cause for comment or concern. Fonts and selection options had all been increased in size after the user feedback in the laboratory testing. could send the software into an extremely long calculation that was not required. chart windows and all the items presented for the user to see. 76154. References [1] Joel Spolsky. http://www.html. Users were observed in the final testing to see the usability issues that were not perceived in the initial working group. Compaq Computer Corporation. Software Engineering. [3] Michael Good. However these results show that interaction with users via a working group and representatives. 18 March 2006.ncsl. Software Usability Engineering.nist. Digital Technical Journal No 6 February 1988. Common Industry Specification for Usability Requirements. thus making for a much more usable piece of software. 10.gov/iusr/index.10801. The software now allows for recovery after an error in the input is made. [4] Patrick Thibodeau.html. 1988. [2] Nigel Bevan. telephone task analysis and e-mail does serve as a good addition to a regular usability study.com/software topics/software/story/0. The research on usability recommended direct interaction with users in the form of a user laboratory or direct interviews.00. http://zing. Increase the visibility February 1988.125-133. Wiley. What the testing did not emphasise is the way comparison tasks have become easier to complete without restarting the software to complete the same task with another conductor. Bibliography [1] Hans Van Vliet. Draft Version 0. Improvements are still being made to software based on user feedback of the published revision of the software. Second edition 2000 [2] Dr. six criteria were met with best case results while the remaining four met the planned result.2. The end product from the process used is deemed to be a worthy upgrade and successor to RSAT 4. Compaq Computer Corporation. last accessed on 27 November 2006 9.The software was revised to resize the software’s desk top to the size of the main application form. Last accessed 24 November 06 Principles and Practice.computerworld.125-133. In the speed testing an overall improvement of 42 % on the old software was recorded. telephone and e-mail communications. 1988. 11. The results can be attributed to redesign criteria being user-based and to the prototype loop employed to setup design requirements. Users begin to demand software usability tests.com/uibook/fog0000 000249. Conclusions Results from the testing showed that of the ten design criteria set. of software usability. All other comments were related to small errors in the software that were overlooked when designing the Beta test version. Last accessed 24 November 06 [5] Michael Good. Digital Technical Journal No 6 24 . Software Usability Engineering.joelonsoftware.html. Sharon Laskowski.2001. UI for Programmers.85. http://www. joelsoftware. http://www. May 2004 [6] CIGRÉ. Overhead power lines for conditions prevailing in South Africa. Elektron. [9] Jacques Hamian and Yair Berenstein. 2001 [5 Ian Stevenson. 7 August 2005. IEEE TP&C Tutorial. [4] SANS 0280 Edition 1. Usability Test with Morae. December 2001.[3] Joel Spolsky.html. 2005 25 . The common Industry Format for Usability Test Reports. 2005 [8] ANSI/INCITS 354-2001. CIGRÉ Work Group B2. Sag-Tension Calculation Methods for Overhead Lines Draft 9 Revision 3.1. Last accessed 14 November 06.com/articles/UsabilityT estingwithMorae. .Net core architecture.12. SagTension Calculations: Refinements and Enhancements Made by Pondera. [7] Dale Douglass. Sag-Tension Calculations. since this was seen as a possible user preference issue. quicker to install and run. The design and feedback process have suggested possible ways to improve this and these steps have been employed in the new software. The results show the criteria setup for the redesign were user centred and that the prototype methodology used to refine the software did improve the software. The implementation of error messages guides the user to the error and the correct type of input for the field being specified. In speed testing an overall improvement of 45 % on the old software was recorded. The testing criteria did not cover the “ease of use”. The new software was written in Microsoft . 26 .Net C# for greater compatibility with platforms such as operating systems used on hand held devices. Results from the testing showed that of the ten design criteria set. However. CONCLUSION The RSAT software has been redesigned with the aim of producing an application that is user friendly. The remaining three criteria met the planned result expected before redesigning the software. with a more intuitive interface than the previous version of RSAT. were that tasks have become easier to complete without restarting and the software stability has improved. has made for a much more usable piece of software. seven criteria were met with results that were of a level that was predicted to be the best outcome possible. However continued research into this area is required.5. An area of concern to be reviewed is the improvement of the software usage to be more intuitive to a first time user. The software will become available for hand held type of devices in subsequent versions. the comments that were received on the software. The ability of the software to allow recovery after an error input. The overall result with respect to specific criteria setup before redesigning the software shows the software upgrade has achieved in each criteria. Different forms of user interaction may be needed based on the domain the software is in and the type of user being targeted. Broadening the scope for feedback allows the designer to interact with users at a variety of competence levels and with respect to many aspects of the software which may otherwise not be covered in simulated laboratory type testing. whether direct or indirect. the scope of testing and sources of information must be as wide as possible. However. telephone task analysis and e-mail was vital in the initial stages of design.The research on usability recommended direct interaction with users in the form of a user laboratory or direct interviews. because of perceived knowledge of the domain. the results gained from interaction with users via a working group and representatives. Improvement of the usability software is not a finite process. 27 . It requires the designer to listen carefully to the user. continual improvement of software should always be a goal of the software designer. It also requires the designer to be creative in dealing with the user in terms of setting up testing laboratories. However. gives the designer a different perspective on the requirement for algorithms. The iterative process of reviewing the user’s needs also proved to refine the user requirement. To improve the usability continually. means using an iterative technique of sourcing user feedback. This type of interaction was completed and was found to be useful. the research has shown that in order to complete a usability study on software. The software still requires further revision to become a more usable tool. With this in mind. feedback forums and help communication channels. User interaction. User interaction is vital and should not be overlooked because of the lack of time and facilities or. Software is never complete – it is on a journey towards the ideal of perfection. The redesign of RSAT has improved the software significantly but more importantly it has set in place lines of communication and a culture of testing and feedback forums. interfaces and functional aspects of a software design package. 2001. Sag and Tension Calculations (pg. Sharon Laskowski. Haigh.00. A GIS electrification planning tool that considers terrain information. Last accessed 24 November 06 28 . South Africa.gov/iusr/index. 2002 [8] Hans Van Vliet. http://zing.R. Round wire concentric lay overhead electrical stranded conductors. Safe design Tension with respect to aeolian vibrations.ncsl. [2] John Berry and Patrick Wainwright. Microsoft Visual C#. A dissertation submitted to the School of Electrical and Information Engineering. 2005 [7] Mickey Williams. 400).10801.com/software topics/software/story/0. Principles and Practice. Users begin to demand software usability tests.REFERENCES [1] CIGRÉ.nist. 2002 [10] Patrick Thibodeau. Second edition 2000 [9] A Luchmaya. University of the Witwatersrand. Last accessed 24 November 06 [11] Dr. [5] IEC 61089.computerworld. (publishers) Ltd. August 1997. single unprotected conductors. http://www. Macmillan 1991 [3] John McCombe and F. [4] Linesoft USA technical manual. CIGRÉ Study Committee 22 Work Group 11 Task force 4 Conductor tension design guide: final report 2nd draft. 1966 Macdonald & Co. Sag-Tension Calculations: Refinements and Enhancements Made by Pondera. Increase the visibility of software usability. Software Engineering.76154.html. Foundation Mathematics For Engineers. 224). Johannesburg. Wiley. Microsoft Press. The Newton-Raphson iterative formula (Pg. PLSCADD – version 5.html. [6] Jacques Hamian and Yair Berenstein. Overhead Line Practice. last accessed on 27 November 2006 [19] Dale Douglass. Common Industry Specification for Usability Requirements.12. IEEE TP&C Tutorial. Sag-Tension Calculation Methods for Overhead Lines Draft 9 Revision 3. [21] Occupation Heath and Safety Act. http://www. CIGRÉ Work Group B2. Eskom Medium Voltage Distribution Standard. Digital Technical Journal No 6 February 1988. Sag-Tension Calculations.85. 2005 [20] ANSI/INCITS 354-2001. Usability Test with Morae. [13] Joel Spolsky. 2001 [16] Ian Stevenson.1.html. Overhead power lines for conditions prevailing in South Africa.125-133. Draft Version 0. Last accessed 14 November 06. 1988.com/articles/UsabilityTestingwithMorae. 7 August 2005.joelonsoftware. 2001. May 2004 [17] CIGRÉ. Compaq Computer Corporation. 18 March 2006.joelsoftware. [15] SANS 0280 Edition 1. [14] Nigel Bevan. Software Usability Engineering. The common Industry Format for Usability Test Reports. UI for Programmers.Net core architecture. [18] Joel Spolsky.[12] Michael Good.html.com/uibook/fog0000000249. Act 85. 1993 [22] D R Theron. 2001 29 . December 2001. . SCSASABE7 General information and requirements for overhead lines up to 33 kV with conductors up to Hare/Oak. Elektron. http://www. definitions and standard practices in the field. These resources were explored concerning latest knowledge on algorithms for sag and tension software. The designer. Critical span: the optimum span where tension is not required to be reduced in order to fulfil the limiting conditions. in particular.APPENDIX A LITERATURE SURVEY To launch a research project. Every Day Tensions (EDT): The average daily tension that a conductor will experience over the conductor lifetime. 30 . Before getting into the detail of the survey. geographic information and caters for all possible options and customisations. LV: Low Voltage Line design software: large elaborate software used to design complete lines including line gradient. Therefore. other libraries and the internet were a good source of information for this section of the literature survey. a literature survey needs to be undertaken to establish the current knowledge in the research area . Eskom holds a great wealth of expertise on line design within its engineering staff as well as in a well equipped and up to date library. some definitions need to be clarified in order to make the task possible. having designed the Distribution sag and tension software for a decade was already well averse with terms. within the resources available in Eskom and its library. Definitions C value: Catenary value which is a constant defined per conductor Creep: the time-dependent increase in strain between two points under a constant stress. Usability of software was not as easy to find information on. Still a large volume of information was reviewed with respect to line design and. sags and tension of electrical medium voltage lines. obstructions. clearance calculations and stringing charts with the emphasis on simplicity. SAT software: small compact software specifically designed to give the user sag and tension data. with suspension poles in between. Software usability: the ease with which end users can be trained on and operate the software product. the name of the software being used at Eskom to resolve the values for sag and tension of distribution conductors.MV: Medium Voltage RSAT: Reticulation Sag and Tension. UTS: Ultimate Tensile Strength – usually refers to the strength of the conductor. Tension section: a section of line between two strain poles or dead ends. 31 . insulator or conductor damage. 32 . Failure of any of the components can put the public in danger of fire hazards and/or electrocution. hardware. Research was focused on documentation that contained specific detail on the sag and tension of the transmission and distribution lines. are the utility’s adopted philosophies and the statutory requirements of the Occupation Heath and Safety Act [21]. hardware. This would not take into account long term fatigue. the result can be structure.SAG AND TENSION Design of transmission and distribution lines is a well established topic with extensive literary resources available. The mechanical performance of overhead power lines is dependent on the correct installation of conductor. If the conditions are severe enough the damage may lead to failure of the respective component. conductor vibration or clearance values. tension can not be chosen based on short term mechanical criteria only. Inter-strand friction increases at lower tensions improving the self damping characteristic of the conductor. the conductor diameter and the conductor weight. Maximum allowable conductor tension is limited by the strengths of structures. Conductor vibration occurs when wind blows across the conductor exciting natural harmonics. These consequences present a high risk to a utility and come with the high cost of consequential damages. However. The natural harmonic of the conductor is determined by the span length. Added to this. insulators and the conductor. conductor stranding. Optimum design takes these aspects into account. Vital to the installation of the conductor is clamping the conductor at the correct line tension. Should all mechanical design criteria not be adhere to for allowable conductor tensions. To combat conductor vibration the conductor tension can be reduced such that the natural harmonics of the conductor are not excited or are damped by the interstrand friction. vibration dampers can enhance the natural harmonic frequency and cause more damage than if they were not applied. These decisions can be made by running sag and tension software such that the two scenarios can be designed and respective quantities for span lengths can be calculated. This is usually a good estimate because at optimum span length on flat land. Over time conductors under line tension permanently elongate or creep as a consequence of the long term mechanical stress. ice loading) and winds during the conductor’s life. the conductor weight increases the vertical tension substantially at structure. 33 . However. the vertical component of tension adds little to the tension at the structure. Therefore the tower tension is a necessity for good design of lines. a necessary upgrade to the current for of RSAT is to give the tension at the structure (including horizontal and vertical components of tension). The vibration damper type and placement is also dependent on the maximum tension in the conductor. Predictions of creep are required to ensure that the sag of the conductor is not increased to a point where critical clearances of the conductor to ground or objects under the line are compromised. A disadvantage of applying vibration dampers is that. The cost of applying vibration dampers needs to be offset against the saving from getting longer spans with higher tensions and hence less structures. for long or angled spans (over or down a valley). where optimum span length can not be used. The option of not using vibration dampers may not be available in certain circumstances. Since the correct way to check tensions is at the structure with a dynamometer. An example is when a line needs to cross an obstacle at a particular clearance and has a fixed span length requirement. if incorrectly applied. insulators and hardware. RSAT currently gives the horizontal component (at middle span) of tension of the conductor as the tension on the clearance calculator.Another method of combating conductor vibration is to apply vibration dampers to the line. SAT packages can help to optimise such spans and ensure safe designs. Hence. extreme conditions (such as short circuits. it is important to know what the total tension (horizontal plus vertical components of tension) are at the structure. The creep of a conductor is affected by the average ambient temperature of the conductor. However the results from PLSCADD are a good representation of reality. It is not intended to produce sag and tension data for small projects. Methodologies for predicting creep (conductor elongation) are prevalent in the mechanical engineering environment. CIGRÉ Work Group B2. in turn produces a change in conductor tension. from temperature. Therefore the temperature the conductor is strung at must be catered for such that when the temperature changes the conductor is at the correct tension. A change in conductor length. 34 . However. PLSCADD is a large line design package used by Eskom for complete line designs. the stringing tension can increased to compensate for the creep elongation.Strain testing completed on South African manufactured conductors at CSIR to IEC 61089 [5]. Cigré Sc 22 WG 11 TF4 August 1997 [1]. Conductor length also varies with respect to temperature change.If the creep can be predicted accurately. non-homogeneous material. Critical clearances (below which the conductor must not sag) are stipulated in the Occupation Health and Safety Act [21] and in the Eskom Distribution Medium Voltage Standard [22]. Research sources for creep were PLS-CADD [4]. Of the many sources of mechanical fatigue information that were studied. The temperature elongation algorithm being used at present is the standard algorithm used in texts for predicting line sag and tensions. McCombe and Haigh 1966 [3] and Stress. Hence the necessity to align RSAT results with PLSCADD. is not common. These algorithms and conductor criteria have been scrutinised to ensure that all results give accurate results when compared with line design packages such as PLSCADD. Producing sag and tension charts in PLSCADD is cumbersome and can not be done without extensive training and a PLS-CADD license. This again requires an algorithm to ensure this change is catered for. such as ACSR (Aluminium Conductor Steel Reinforced). only a few dealt with the specific creep found in conductor.12 [17]. the study of creep in a multi-stranded. For spans typical of reticulation lines (a span with a ratio of span to sag of greater than 20:1. This presents a high risk to the utility and therefore producing the software at no cost to users with no boundaries to use is of utmost importance.5%. Use of the software promotes the current standard options of the utility and the use of standard design practices.RSAT is a simple software package that: produces sag and tension charts easily. with flat underlying land. without extensive training and without a license since the package is written in-house by Eskom Distribution Technology. The shape of a freely hanging conductor is a catenary shape which is very similar to the shape defined by parabolic equations. The two main equations ((1) and (2)) are used for sag and tension values respectively: 35 . The intension for the software is to make it easy to use without any boundaries to use. Creating boundaries to use may mean lines will be designed to other standards or no standard at all. and homogenous conductor) the parabolic formulae are accurate to about 0. The equations required to produce sag and tension data are commonly referred to as the catenary equations. SAG AND TENSION EQUATIONS RSAT produces sag and tension information for reticulation lines. Since this application is intended to be a simple reference for the reticulation designer the parabolic equations are used for Rsat calculations. D= WL2 8T (1) T 2 + T 2 AE 3 2 [ ( W12 L2 24 T12 + α (θ2 − θ1 ) − T1 − ) ] AEW22 L2 =0 24 (2) D = Sag (Meters) T = Tension (Newton) A = Area of the conductor cross-section (Square Meters) E = Young’s modulus (Pascal) ∝ =Temperature coefficient-efficient of linear expansion (Per Degree Celsius) θ = Temperature (Degrees) W = weight of conductor (Newton per Meter) L = Span length (Meters) As can be seen above there are conductor attributes which are required to calculate the equations. The types of conductors are loaded onto type selection box on initialisation of the program. 36 . These conductor attributes are loaded into RSAT from a conductor data file when a conductor is chosen. 37 . vibration criteria and a comparison point for all limit calculations. The starting point for all algorithms is the every day conditions and statutory limiting criteria (as listed in the occupation health and safety act) for South Africa.The attributes stored in the data file are as follows: Conductor type Conductor name C value Area Temperature coefficient Initial modulus Final modulus Mass Ultimate Tensile strength Diameter Creep constant Path for bitmap When selecting a conductor in the program these characteristics are downloaded into the data area of the page. The default everyday tension point(for most tensioning software) is set on final tensions at 15 degrees and will be kept as such for RSAT. A path to bitmaps allows the program the access to a bitmap of the conductor stranding which is viewed when a conductor is selected. An every day average temperature for South Africa is 15 degrees Celsius. The everyday tension point is set-up by using the tension calculated for the C value. This is the average temperature used for average calculations for creep. The other “worst case” limiting conditions that are used for calculations are: 2. The constant holds for the full range of ACSR and AAAC conductors. [1] This C value then sets up the first limiting condition at everyday tension. the span limits and temperature limits for the sag and tension charts. Figure 1: RSAT limiting criteria page The limits page of RSAT presents the three tension limits.The C value is the catenary constant and is defined to be the every day tension divided by the conductor weight. on final at -5 degrees with a 700 Pascal wind tension must be limited to less than 40 % of the UTS of the conductor. on initial at -5 degrees with a 700 Pascal wind tension must be limited to less than 50 % of the UTS of the conductor 3. 38 . The C value for ACSR and AAAC of 1425 was taken from a CIGRÉ work group report on Aeolian vibrations. Since the polynomial is of the form AT32 + BT22 + C = 0. To find out which condition is the ruling limiting condition all limits must be brought to a common base. Newton-Raphson [2] iterative formula is used to get a solution. Limiting condition 2 can be converted to 15 degrees with no wind initial as shown above for limiting condition 3. The formula is as follows: X n +1 = X n − f (Xn) f '( X n ) (3) The extrapolation is done and then it can be discovered which of the two final conditions 1 & 3 the ruling condition could be. it is not possible to compare the initial limiting condition 2 with these final conditions without a creep equation to convert the initial tension to a final tension. If one of the conditions converts to 15 °C with a lower tension than that given by the C value. Limiting conditions 2 and 3 are converted to this everyday tension point. The conversion from initial to final to compare on the same base is discussed below. This requires an iterative method that converges to the solution. 39 . For the iterations. Converting the final worst case scenario 3 to 15 °C is done using equation (2). Conversion involves taking the limiting tensions and accounting for the conductor length variations from the temperature and creep to get to the everyday tension point. it can not be solved by regular methods. However. the ruling limiting condition must be determined. The common base used is the everyday tension point: 15 degrees with no wind and at final tension.Before starting to calculate tensions. If the known worst case initial conditions are placed in to the constants with subscripts of one and all known every day constants into that with a subscript of two then all that is left is a polynomial in T2. The equation has two subscripts (1& 2). then this condition is the limiting condition for the calculation. Alternatively the designer can choose to tension the conductor to higher tensions that result in conductor sag above the critical clearance. are loosely packed when they arrive on site to be strung.CONDUCTOR CREEP Creep is defined as the time-dependent increase in strain between two points under a constant stress. Another risk presented by the elongation of the conductors is that elongation can be to such an extent that the conductors sag down onto or too close to an object. pulling the conductor to higher tensions is only acceptable if these tensions meet the limiting criteria. this is a labour intensive costly solution to countering conductor creep. This is a common feature of materials under constant force and is a long term process. The limits and creep work against each other. The creep used to work out final sag is calculated to match that produced by the commonly used PLSCADD line design package. This form of creep elongation is quick and will be pulled out of the conductor in a short period after stringing. due to their twisted construction. The designer needs initial and final value for sag. The constant load the conductor is placed under when it is then strung gradually pulls the conductor tight. However. These elongations to the conductor over time cause the conductor to sag below the initial clearance the conductor was sagged to. This can cause tremendous damage to lines if conductors in the subsequent phases also elongated swing in the wind and clash with each other. For this reason a sag including the creep is calculated in sag and tension charts and is called final sag. This is the main focus of the designer and determines if a conductor is suitable for certain spans. The conductor materials that are used elongate over time under the constant force. This loosening is due to the transport and handling vibrations and movement. Conductors. The margin required needs to calculated by calculating the conductor creep under the conditions the conductor is subjected and converting this into a sag value. 40 . However. A remedy may be re-tension the lines regularly. In other words it is the elongation of a material which is under constant load. Then the critical sagged conductor length can be converted back into some initial conductor length for a time span and conductor relaxation. Then when conductor elongation does occur the clearance will not be compromised. The creep was derived because equations given in published literature do not give the values for permanent elongation that are produced by PLSCADD.8 ΔS c = 200 ⎛ T2 ⎜ ⎜T ⎝ 20 ⎞ ⎟ ⎟ ⎠ 2 (4) Sc = Conductor length k = Creep Constant L = Span Length T2 = Final Tension T20 = Tension at 20°C (Creep constant was for a 20°C tension) The equation for the length of the conductor required in the span is: S = L + W TL2 24 2 3 (5) S = True Conductor Length L = Span Length W = Weight per unit length of conductor T = Tension of conductor 41 . The creep equation derived to match PLSCADD is: kL1. The change in length of conductor is: ΔS c = S 2 − S1 S1 = Length of conductor at stringing tension S2 = Length of conductor after creep with reduced tension (6) Making the relevant substitutions of equations (4) and (5) into equation (6) an equation in T1 and T 2 is derived. The capability of converting to final values (including elongation) for twenty years allows the program to impose a limiting condition of 50 % of UTS on worst case initial tension conditions. Once again the Newton-Raphson method (equation (3)) is used to resolve this equation from final tension to initial tension or from initial tension to final tension. Conversion of this limit to final allows the overall ruling condition to be discovered. For this instance RSAT can produce stringing charts that use equivalent span as a ruling factor for producing sags. This equation has powers of 2 and 4 and therefore can not be solved with regular techniques. Based on the final limit being found the table of initial and final values for tension from -5°C with wind to 60°C can be calculated using equations (2). (3) and (6). 42 . The relating sags can then be calculated from these tensions using equation (1). Sag and tension charts are not ideal when considering the distribution line is commonly comprised of section lengths under constant tension that is not dependent on the specific length of the span but on an equivalent span. Designs generally have spans of variable length due to various obstacles or due to servitude rights. A section of line is made of tension sections which are suspension spans with termination structures each side of the section. this is hardly ever the scenario that a designer is able to use. However. The sagging in of lines is done between the two strain poles with rollers placed on each suspension pole (between the strain poles) in order to equal out the tension in all spans. Stringing charts are aimed at producing tables with the type of information to design line between strainer sections. Terminal structures are more costly than suspension structures and so the designer uses suspension towers as often as possible. The tension in any span within this section is related to that of all the other spans within a tension section. The nature of design and cost also means that pulling each span to an individual tension with termination structures each side of the span is not possible.Figure 2: Sag and tension chart STRINGING CHARTS A disadvantage of using sag and tension charts is that the sag and tension information is only related to a single span length or many spans of exactly the same length. 43 . Figure 3: Stringing Chart The tension through out the strainer section is constant and calculated using an equivalent span. The equation to find this equivalent span length is: le = ∑l ∑l 3 i i (8) 44 . Equivalent span is approximately a span length that if multiplied by the number of spans will equal the total length between strainers or in other words it is an average span length: nle ≈ ∑ li i =1 n (7) n = Number of spans le = Equivalent span length Li = individual span lengths The difference is that the equivalent span compensates for extremes in span length as these are the spans where the equivalent span will be most noticeably the incorrect tension. over a road. The characteristics of the span needed to get the required clearances are: the attachment heights. over a building. The constant section tension is calculated at different temperatures. etc). THE CLEARANCE CALCULATOR Figure 4: Clearance chart A clearance calculator is a useful tool for finding the clearance of the conductor to a object. It must be noted that. The sags for each individual span length are calculated from the tension and checked against the clearance requirements per span.Thus with this equation an equivalent span can be calculated and the ruling limiting condition for the equivalent span can be found. spans in a section should not have a great range of span lengths. the ground levels. for higher accuracy. It is also used to find the clearance and tension at the structure for unusual spans (long spans over a valley. and the detail of the object (to which clearance is calculated). It is good design practice to keep span length differences within 25 % range of each other if possible. down a hill. 45 . The calculator is used the string unusual spans which can have significant vertical components of tension. The horizontal component is the component generated in the normal sag and tension equations. This tension will determine the strength requirement of the clamping. If horizontal tension is used the designer may overlook this requirement. This tool gives the designer flexibility in terms of real life situation design in particular where clearance or uplift can present a challenge to the designer. Calculating the attachment tension is done by summing the horizontal tension and vertical tension vector components for the conductor. This means that the structure falls below the natural catenary profile.The tension quoted in SAT and stringing charts is the horizontal tension at the lowest point of the conductor catenary. This increased tension may indicate to the designer that vibration dampers are required for the particular span. The uplift case is where the lower of two structures is significantly lower than the higher structure that the conductor pulls the bottom structure up. hardware and towers. For the clearance calculator it is needed to give the tensions at the attachment points and at the horizontal tension at the lowest point of the conductor catenary. land levels and object heights. The vertical component is worked from the conductor weight of the conductor from the attachment point to the lowest point of the catenary. 46 . Another reason attachment tension is required is that the tension at the attachment point is the tension measured by the dynamometer when clamping in the line. The clearance calculator is setup to allow the designer to consider different attachment heights. Conductor Catenary Land Figure 5: Uplift verses Catenary Critical span graph Critical spans Figure 6: RSAT critical span graph 47 . The resultant weight of the conductor increases with span until the maximum allowable tension is reached in one of the statutory requirements. Both short and long span length limitations of tension present the designer with an inefficient tension. Then this limit will reduce the every day tension. In the case given above spans below 25 meters require the tension be reduced considerably. 48 . the designer may need to reduce the number of spans by increasing the tension in the conductor. In order to optimise line design. Hence the everyday tension is limited by the low temperature statutory limits and does not allow for optimum tension of the conductor. This relation gives the designer the range of spans for which the conductor will and will not be optimised. In particular the reduction total length of conductor due to temperature presents a significant value. The longer the span length the greater the effect of the winds force on the span. The upper critical span (above 250 meters in the example above) marks the point beyond which the limiting criteria change from the C-value to the high wind limit.The critical span graph is a presentation of the tension (in percentage of ultimate tensile strength) against the span length. This reduction is caused by the low ratio of conductor length to percentage of elongation due to creep and temperature change. This may require that the designer choose another conductor if the span lengths need to be reduced to satisfy the limits. not allowing for the optimum tensioning of the conductor. A common problem with engineering software is that the usability is not prioritised as an outcome of the development team. The modus operandi was to produce a small accurate calculator of sag and tension. The development was rapid and focused on the calculated solutions. This is because the software is not programmed with the user’s needs or preferences in mind. This feedback on the interface proved there was a need to redesign the software. The amount of time to complete a task should be perceived to be short and the software should motivate the user to use the software. The redesign needed to take into account the user’s perspective. The designers of the software may no be the users or may not be competent in software design (usually from the field expertise that the application is going to employed in). 49 . There was no research completed into what compiler to use or the best development practice. This means the software may be correct but not usable. operates with ease and presents the path of least resistance as a design tool. The design of the software must seek to ensure that the interface makes sense.SOFTWARE USABILITY Usable software “behaves exactly how the user thought it would” [18]. The user requirement is replaced with the designers introspective answers to design questions and preferences. usability and aim to remove possible boundaries that would cause users not to use the software. The software is deemed to be intuitive by the developer but never really checked to ascertain the usability of the software. RSAT was initially developed in order to replace an old obsolete (in terms of operating system support) SAT application. The time given to develop the software was short. The priorities of the development team are therefore accuracy and functionality. The result was an accurate but “difficult to use” program. new operating systems with improved usability do not ensure that software being used on the operating systems have being improved at the same rate. With this wide scope of users the need for training on software is not only difficult but would serve as a boundary to its acceptance and use. However. This means having an intuitive user interface. If the concepts were not grasped the user would contact the designer for assistance with respect to usage. The result that users that persisted grasped the concepts required to use the software. The problem has persisted since the first software was produced in non-graphical operating interfaces like Microsoft DOS. these can be completed before implementation into a business. The advent of new more usable operating system and complier interfaces shows the strides that have been taken to improve the situation. In the past no training was been available for RSAT. 50 . Support of the software was the starting point for the usability research. However. Research into new tools offered guided the developer to more usable functions. Designing the interface in a similar manor as the operating systems interface means that the user is already familiar with the interface. The advantage of completing a usability study are that the best suited software can be chosen for the business and if there are revisions required. a purchaser can now insist that a usability study must be completed on the software before the software is purchased. usability is not only the ease of use of the software but the amount of time to complete a task and the fact that it motivates the user to use the software (characteristics desirable for the RSAT software). Feedback on the software was high and hours guiding users with concepts of design has lead to much of the changes presented in this dissertation. A key to improving usability of an application is to note how these new operating systems have gone about improving usability. Hence a desirable property of the software is that the users need not be educated. Software usability has become of such great importance that before software packages are purchased. The literature survey revealed that the issue of usability of software is not new. project engineers and line consultants.The users of the RSAT software are field technicians. graphics and interfaces options. Under normal conditions the user has his/her own computer. An industry standard format for reporting on usability has been established and is called the Common Industry Format (CIF). in a laboratory. Usability specifications suggested setting up a user laboratory where users can be observed using the software. 51 . This may cast doubt over the validity of the results for usability which is based on intuitively of the software and is supposed to be independent of other environmental factors. The standard usability test centres spared no expense with video cameras setup to record the user actions and responses to the software. Other interest groups looking into the question of software usability are the Association for Computing Machinery’s Special Interest Group on Computer-Human Interaction (ACM SIGCHI) and the Computer Systems Group of the Human Factors Society. The disadvantage of using this methodology is that it does not clearly depict the software being used under normal conditions and is expensive. the environment and equipment being used is unfamiliar to the testing user. With business software and licensing costs increasing the demand for such groups and related specifications is increasing. compare them on a consistent test and reporting criteria? To this end a specification for testing criteria based on the fundamentals was setup by software customers internationally. Thus. Some new concepts will be added and reviewed. A pertinent question at this point is: How can a study be done such that it can be repeated for various different packages.The uniqueness of this usability study is that it is done by the developer on who is also the owner of the software. The group has drafted a Common Industry Specification for Usability Requirements. with his/her own system set-up and in his/her own office. The standards are still crude and adoption is not universal at this point. The common Industry Format for usability Test Reports became a standard in December 2001 in ANSI/INCITS 354-2001. The concepts embodied in these standards will tested further in this study. The result can be found in ISO TC159/SC4JTC1/SC7/JWG1 – a joint working group on common industry format that was formed to develop the standards for usability requirements. A number of interviews were taken as a means of user requirement feedback. The software design process then took on an evolutionary or a prototyping type of process. the redundant sections of software. Direct feedback was gained by visiting the user and watching the user in his daily work using the software. redundant actions and suggestions on how to make tasks easier while not sacrificing on achieving the goal of the software. The earlier the feedback is acquired the better as the feedback can direct the future efforts and point out short comings. This technique allows for various forms of feedback. Interviews need to concentrate on: what the user naturally does to complete tasks. Note that this is not always an ideal solution since the number of iterations and numbers of interviews per iteration may be limited by the budget afforded a development team. The specification focused more on the user interface. A less direct method of using webcams/video conferencing could have been used as an alternative but this required an elaborate system of web cams and microphones. This type of equipment was not available to the average user of RSAT. 52 . Then the feedback loop process was completed until the amount of users feedback showed the software to be at an acceptable level. speed of use and the ability of the software to naturally point the user in the right direction. A user specification was then initiated. the bottle necks that slow user progress. making the only variable the software. Lastly the user was interviewed with respect to their experience of the software in a field test.The first testing completed on RSAT was done through field testing. The emphasis was on getting direct feedback on the system. This allowed the user to use the software on his or her personal machine in a familiar natural environment. Even a poor usability specification is better than none at all. (a range of results which do not meet the specification) planned level (a range of results which meet the specification) best case level. the ease with which a new user can use the software. (how the attribute is expressed as a measurable quantity) worst case level. 53 . This was done through a workshop of the requirements.(interview. These are usually set around the time to complete tasks. (a range of results which exceed the specification) The risk in setting up a usability specification is that the broad scope of usability can be traded for the user specifications narrow definition of usability. questionnaire. etc) metric. questionnaires. Measuring usability is not something that one can perceive or see without some sort of scoring system. suggests that each attribute consist of five items: the measuring technique. It was important that the team could speak openly about this requirement with as little as possible left to the each team member’s perception of the requirement. of the Compaq Computer Corporation. Michael Good [12]. error recovery and the user’s opinion of the software. comments and ultimately the usability requirement was put together by the lines working group. Therefore it is important in the usability specification to set usability criteria.The interpretation of the user interviews. but this may mean that resources are invested in the wrong direction or in only a small section of the whole problem. This is an acceptable trade off if the specification is setup correctly and defines the usability well. be downloadable from the Eskom internet site in less than 5 minutes. have a graphics driven interface that resizes depending on the monitor resolution. The standard flow of information can be seen in figure 1 one below. User Elicitation Specification Validation Problem domain Figure 7: Information flow to acquire technical specification 54 . B2 ACQUIRING THE USER REQUIREMENT The user requirement techniques need to be defined for the software with the users specific needs in mind. be easily installed on current imaged Eskom PC’s and by Eskom contractors.APPENDIX B DESIGN SPECIFICATION B1 SYSTEM REQUIREMENTS The program must: run in conjunction with Microsoft Windows XP. have a programming language and compiler that allow for transfer to other platforms as the need arises and suit the application requirements. 2.3. The requirements were thoroughly discussed and filtered down to a concise list. THE DELPHI TECHNIQUE The Delphi technique is a technique where the development team get the users to write requirements and ideas for the software down. The requirements obtained through the Delphi technique as well as newly proposed ideas were discussed at a study committee meeting with the developer putting ideas up on a projector. Each member represented a region of the power system. DOMAIN ANALYSES The domain analysis is a study of the domain and not the actual system to become conversant with norms and terminology. Each member of the Eskom Distribution Lines study committee was requested to give a set of minimum requirements for the sag and tension software package.Each technique used to facilitate the flow of information to form a user requirement is now discussed. 55 . B2. BRAIN STORMING TECHNIQUE The brain storming technique is best described a group discussion of ideas with a scribe writing them up on a board. Terminology and norms for the domain are discussed later. B2.1. B2. The domain for the software is familiar to the developer as the developer is employed in the domain – the electrical utility. Thus requirements were received from all regions customers resided in. limitation changes. Flow process and results were correlated to the user expectations. stringing charts. 56 . gained in the Delphi and Brain storming techniques. USE CASE ANALYSIS Use case analysis involves specific instances of the system at work. Specific instances of sag and tension. Sag10. SYNTHESES FROM EXISTING SYSTEMS This involves the study of other software packages available for methodologies of meeting requirements. B2. help files and critical graphs were drawn up to ensure all pertinent issues are captured.6. were then reviewed and broken down into a group of tasks expected to be performed by the software. TASK ANALYSIS The task analysis seeks to define tasks that the system is expected to perform. clearance calculators.5.B2. Vsat and a number of papers written on the topic of sag and tension were scrutinised for possible methodologies of meeting the user requirements.4. Examples should be run through to note the system flow process and results required. PLSCADD. B2. The list of requirements from the study committee. - Clearance calculator: with worst case clearance and specific case clearance to an object. section number. the ability to print more than one section per print out and the ability to edit old section data.B2. charts and calculators. - Print outs of the relevant data. The option should be available for clearance calculation with initial or final tension. 57 . Comments and improvements were user to update the user requirement. Once accepted a beta version was programmed and released for users to start using.7. customized pole numbers. In going through certain steps in the process it was necessary to revisit previous steps to refine the results. PROTOTYPING Prototyping involves creating a model of what you are going to do rapidly. The user requirement was transferred rapidly into preliminary design software with limited functionality. Stringing charts: with a project name. The ranges of span and temperature should be editable by the user. The user requirement below is the final outcome of a number of iterations through each step. comments. errors and possible improvements to the software. Users were given means of feeding back issues. It presents the customer with a broad view of the concepts and checking mechanism to see interpretation of the requirements. B3 USER REQUIREMENTS The user requirements are as follows: - Sag and Tension charts: with a default temperature range and span range. Then present the model to users to see if the concept is a favourable solution to customer. in the process of refining the user specification this requirement was removed. Conductor data files must be created for all Eskom Distribution standard conductors. The reasoning was that the use of standardised software by Eskom and contractor personnel is more important than the financial gain from sale of the software. - The default final tension statutory limit must be set-up as 40 % of ultimate tensile strength of the conductor at -5 degrees with a 700 Pa wind on the conductor. - The option to change the limiting criteria should be made available to the user. - The option to change the default C-value should be made available to the user. - A critical span indication is required such that conductor selection can be optimized. 58 . An option must be provided whereby conductor data files can be updated with new conductors - A save file option must be provided that results can be stored. The default initial tension statutory limit must be set-up as 50 % of ultimate tensile strength of the conductor at -5 degrees with a 700 Pa wind on the conductor. - The use of setup password protection of software as a means to protect the financial interests of the code owner was initially part of the user requirement. Tensions at the structure must be produced for the clearance calculator. However.- The user interface should be a simple interface with a conductor selection and data being available and editable at all times without having to restart input of data from when changing conductor. The default Every Day Tension limit must be a final stringing tension and be at a C value of 1425 for 6/1 strand ACSR and 7 strand AAAC so as to avoid the unnecessary use of vibration dampers. Conductor elongation due to creep and temperature variation should be correlated to PLSCADD. B4 DOMAIN MODEL The domain model of terminology extracts from the user requirement as follows: Sag Print Data files C value ACSR Vibration Structure Calculator Algorithm Creep Tension Conductor Save Limits AAAC 1425 Clamping tension Damper ABC Equivalent span Span Chart Clearance Simple interface Everyday tension Print Preview Selection 700 Pa wind Increment Standard conductor Critical span graph Input Structure tension PLSCADD Graphics 40% UTS Wind pressure Aluminium Service cable Default Pole User 50% UTS Temperature Galvanised Steel wire Data Ultimate Tensile Strength B4.1 SIFTING THE LIST Synonyms Structure = Pole Algorithm = Calculator Vibration = Damper Conductor = Standard conductor Wind pressure = 700 Pa wind Structure tension = Clamping tension 59 . Redundant Simple interface User Selection Structure Vibration C value Data files. Outside scope PLSCADD Final sifted list Sag Print Default AAAC 1425 Temperature Conductor Tension Span Chart Save Print Preview Creep Wind pressure Service cable Clearance Structure tension ACSR Ultimate Tensile Strength Data preview Galvanised Steel wire Critical span graph Input Everyday tension Graphics 40% UTS Increment Algorithm Limits ABC 50% UTS Aluminium Equivalent span 60 . Diameter.T. Aluminium.D. Steel.S.B4. Conductor: Types: ACSR. Coefficient. Area. Final Modulus. Initial Modulus. Every Day Tension. ABC. AAAC. Creep Dampers ACSR AAAC CONCENTRIC ABC GSW 61 .T. Service cable. Creep and Dampers Conductor Area Coefficient Initial Modulus Final Modulus Mass U.2 GROUPING Terms were then grouped and with additional terms (in bold) required to complete the picture in terms of required relationships. Ultimate Tensile Strength. Diameter E. Mass. User defined. Wind pressure. 50 % UTS. Default. Initial Tension and Final Tension Limits Default User Defined Initial tension 50% UTS + 700PA wind at -5 deg Final tension Every day tension c = 1425 40% UTS + 700PA wing at -5 deg 62 . 40 % UTS.Limits: 1425. Everyday tension. Pole B. Object ground level and Object distance from Pole A. Initial. Object height. Start Pole. Pole A. Limits. Section. Final. Pole B Attachment. Stringing. Pole A ground level.Charts: Sag and Tension. Project. Object. Every Day Tension. Pole Prefix. Final Pole. Critical span. Critical span graph. Graphics. Clearance. Equivalent span. Pole A Attachment. Span Length. Pole B ground level. Chart Limits Sag and tension Initial Final Clearance calculator Pole A Pole B Object Stringing Project Section Pole Prefix Start Pole Critical Span Graph Every day tension Span length Attributes Equivalent span A attachment B attachment O height A ground level B ground level O ground level O distance Final Pole 63 . Structure tension. Creep. Tension. Increment. Equivalent span. Sag. Constant and Object Algorithm Equivalent span Tension Sag Spans Creep Constant Temperature Clearance Structure tension Object Temperature Increment 64 . Clearance.Algorithm: Temperature. Spans. Limit. Print. Input.Simple user interface: Graphics. Conductor Data. About and Graph. Data preview. Save. Interface Save Text file Conductor data Print Preview Print Data preview Limit data Stringing data Conductor data Help file data About data Input Stringing data Conductor data Clearance data Graphics Span graph Clearance diagram 65 . Conductor. Text File. Stringing. Print preview. Net” presented the development team with these characteristics. There is no assurance that the software will maintained by the same development team from one version to the next. The software ran slowly and was cumbersome to use. Hence the compiler chosen in .NET represents a compiler that allows compilation of code to different type of application for different platforms.B5 SOFTWARE DESIGN B5. 66 . The old compiler – Borland C++ Builder is no longer supported on the XP operating system used by Eskom power Utility RSAT is designed for. “. The software required an overhaul from compiler to the basic code for the software. The ability of the compiler to compile code in different languages for add on components and have a universal tool set would be the best compiler for the project. The modernisation of the field staff equipment may mean that in future the field staff have hand held devices that can run small applications such as sag and tension or clearance calculators. The RSAT software is an in-house developed application distributed freely to project engineers and consultants. Eskom runs an imaged set of standard software.1 Compiler The old software design of RSAT needed to be reviewed entirely. For this reason it may be necessary at a later stage to have a web based calculator as opposed to a stand alone application. The software needs to flexible in terms of platform installed on. A compiler needed to chosen that suited the dynamic nature of the software. A = cond area. convert at temp = t2. Wc = cond weight. this setback was seen as minor compared to the boundaries that will be faced in producing the software for handheld devices. double L12. Initial prototypes used classes for conductors. double Wc. c1 = tension 1.double Coef. L12 = L1. Fmod = Final Modulus. Imod = initial modulus. The methods used are as follows (extracted directly from the source code): 1.Since it was deemed that the software would be upgraded. Diam = conductor diameter. in future. 3. public void DefaultLimits() // Resets the limits on the limit page to the default values default values are stored in the limits XML file. Coef = cond temp coef. w1 = wind 1.double w1.double t1.double c1. There is no necessity for the software store more than one conductor at any given time.double Imod. double Fmod. public void ResetStringing() //Resets the string chart if a new project is to be strung. 67 . T20 = 20 % of UTS tension. This made the access of this information easy and hence the need for class use was not great and only the conductor class was retained. double Diam. The user feedback was that the more information must be displayed continuously. the language of choice was changed from C++ to C#. C # presented the developer with a challenge initially in terms of the new syntax and methodologies of completing simple operations. However. 2. for use on handheld devices. double T20.double A.2 Source Code The code design was written around the group terminology given in section B4 above. Simple methods were used for the algorithms required for the software. double k) //Convert to initial at convert temp. t1 = temp 1. //Arguments: L = span length. The code was written quickly and prototypes were produced and tested. algorithms and charts. B5.double t2. public double ToInitial(double L.2(required for calculations) and k = creep constant. double w1. double k ) //Determine which of the limits is the ruling limit producing the lowest tension at the every day conditions. double Wc. 5. c1 = tension 1. t1 = temp 1.double A. double T20.2(required for calculations) and k = creep constant. //Arguments:L = span length. convert at temp = t2.double Coef. IF = initial or final calc. public double TempConvert(double L. 6. w2 = wind 2. Imod = initial modulus. double Fmod. double L12. L12 = L1. T1 = tension 1. T20 = 20 % of UTS tension. Arguments: L = span length. Diam = conductor diameter.2(required for calculations) and k = creep constant.double t2. double T20.double T1. t1 = temp 1. public double ToFinal(double L.double t2. Coef = cond temp coef. double k) //Convert to final at convert temp.double Imod.double A. Imod = initial modulus. double L12.2(required for calculations) and k = creep constant. double Diam.double c1. double Wc. double Fmod.double w2. //Arguments: L = span length. A = cond area.double A. Fmod = Final Modulus. L12 = L1. double k ) //Converts the tension for any change in temperature. A = cond area. double Diam. Wc = cond weight. public int findlimit(double L. double T20. Coef = cond temp coef. w1 = wind 1. t2 = temp 2. L12 = L1. Imod = initial modulus.double Coef. 7.double Coef. double Wc. Fmod = Final Modulus. Wc = cond weight.double t1. Fmod = Final Modulus.string IF. T20 = 20 % of UTS tension. double L12.double t1. public void graphupdate() // Updates the graph when the conductor is changed 68 .double Imod. public void equivspan() // Algorithm to determine the stringing charts output 8. 9. Diam = conductor diameter. A = cond area. Wc = cond weight. T20 = 20 % of UTS tension.double w1. public void stringupdate() // Update sag and tension chart when changes to any project input is made for the current section is made. double Fmod. Coef = cond temp coef. Diam = conductor diameter.4. w1 = wind 1.double Imod. double Diam. 12. columnWidth = column width 14. 11. General functionality menus and buttons Changing conductors and new conductor parameters Changing string chart parameters Changing clearance chart parameter The complete code is given in Annex D. public void tabupdate(object sender. public void satupdate() // Updates the sag and tension chart when changes to any variable is made. public void screensize() // Updates size of the form based on screen resolution. private void ExportToText (string fileName. bool hasColumnHeaders. hasColumnHeaders = has the data got column headers. 69 . The rest of the code produced consists of code and methods produced by the compiler split into the following sections: - The conductor class Windows form designer generated code and the application run command.EventArgs e) //update tab based on selection.10. The use of the above methods reduced the source code required considerably and made coding easier to read and produce. public void clpicture() // Updates the graphic on the clearance page 13. double columnWidth) // Copies displayed data to a file // Arguments: filename = the file name to be saved to. System. // Arguments: capture the selected tab 15. public void clearance() // Updates the clearance calculator page when changes to any variable is made. a new model conductor form is opened. 70 . This is not a desirable first operation. Figure 8: RSAT's old interface By selecting Help the new user can find out how to proceed.B5. The first operation required is to select the conductor menu option. This presents the user with a drop down of the types of conductor that can be selected. A possible improvement on this was to insert guiding messages but even this did not work if the user does not recognise the message box as an indication of what needs to be done. Once a selection is made. The old interface The old interface presented at start-up is not an intuitive first operation. in order to achieve the goals of producing a more usable application.3 The user interface The user interface is the area that was are an area of focus. the respective conductor data form is displayed.Figure 9: Old conductor form This form is intuitive with the conductor to be selected from the drop down. The C-value is displayed and then the “OK” or “Cancel” selection can be made. If a conductor and “Ok” are selected. Figure 10: Old conductor data form 71 . To change the conductor the whole process is stated from the beginning.Finally the type of algorithm can be selected at the base of the form. 72 . This brings up the result display on the original form. Figure 11: Old result form for sag and tension algorithm To select an alternative algorithm the quick buttons or menus can be used and the algorithm will be shown for the selected conductor. Once selected the conductor list box fills with possible conductors to select. Figure 12: RSAT's new interface The new interface has the conductor types displayed in the top left list box. is intuitive as to the first operation required.The new interface The new interface. A suggestion window also prompts the user to select a type of conductor. 73 . presented at start-up. Note: for quick access a conductor can be selected directly from the conductor box without selecting the type filter. The suggestion then prompts the user to select a conductor. On selection of a conductor the displayed graph displays the corresponding critical span graph and all the conductor data to the right of all the conductor list box. 74 . The suggestion prompts the user at this point to select a tab on screen.Figure 13: New interface with a conductor selected To select an algorithms simply select the tab of the algorithm that is required. observe the use of the software and then question the user on there general satisfaction. must be defined by the users. The common way to elicit information concerning user satisfaction in usability studies is to setup a computer laboratory.Figure 14: New result form for selecting sag and tension algorithm To select an alternative algorithm an alternative tab can be selected. B6 AREAS OF CONCERN B6. with respect to its general usability. 75 .1 Usability Satisfaction with the performance of the software. User interaction showed that reset and default buttons were needed for certain algorithms. These little but vital error had not been picked up in initial testing done since these methods of input were not the norm. because the default was not deleted before inputting new data. This list of RSAT users was encouraged to test the Beta version of RSAT. The laboratory also showed that a suggestion window would guide the user in decision making with respect to usage. e-mail and visits allowed the developer establish contact with the users. Telephone. This proved useful in finding the issues with usability and general satisfaction. Another error revealed was that if an algorithm was updated prematurely. For example when a high figure was inserted in a field. The field testing liberated user preferences due to the fact that it allows the user a normal atmosphere on the users own PC were custom requirements become more important to the user. it could cause system instability.The users of RSAT were observed using the old and new revisions of RSAT. In each problem case the user would be requested to complete the task causing problem and describe each step of the task. User feedback ranged from the odd error in the software to full length installation and usage guidance. Field testing of a Beta version also proved useful as errors and oversights were reported to the developer. This way standard thought process and users expectations of how things should work was noted. Another advantage is that the process was simplified as far as possible through a installer messaging system that guides the user through each step. This process also proved the installation process was acceptable as the there was no feedback with respect to installation problems. the application would complete a great number of tasks before the error could be resolved. The laboratory also revealed overlooked errors in functionality such as algorithms not updating when a new conductor was selected. the installation process and software was improved in linen with the new compilers setup facility. Over time an e-mail list of users has been put together. 76 . However. The Beta software was downloaded from a website and installed. 3. Selection of a new conductor meant going through the whole process again. conductor data and the selection of algorithm to be run took too long. 10.Finally the software was presented to a working group of users. Incorrect input such as characters where an integer should be would case the software to crash. No allowance was given for addition of new conductors limited the user’s capability with the software. The user interface gave no indication of the critical span. Stringing charts could not be corrected for the first section once the next section was selected. Limiting criteria could not be varied in line with prevailing conditions for the area. B6 USABILITY IMPROVEMENT CRITERIA The usability criteria are taken directly from comments from the working group. The methodology of selecting conductors did not allow for comparison of conductors. The working group was held where specific issues could be raised with respect to the old software interface and general design. The sequential nature of selection of conductor. Conductor data display needs to be more easily accessed. planned case and best case were then defined for the particular criteria. 9. 5. Problems that were evident were the following: 1. 4. 77 . Selected examples would hang the software for no apparent reason. The password installation process needed further simplification 2. The three possible results: a worst case. 7. 6. 8. 2. A single operation or dual view would present a better solution. It is planned to have a more intuitive installation process that has an intuitive process and explanations of all actions to be taken and guidance all the way through the process. 78 . The installation process The installation process of an application is the first impression a user gets of the application. The methodology of selecting conductors did not allow for comparison of conductors. Criteria results The Worst case result of testing for this criterion would be for there to be no change to the installation process. By the same token there are users of the software that are conversant with software installation and prefer to customise PC memory and application installation. The best result would be to have an installation program that is intuitive in all aspects with one installation file and one execution required on one file. Comparison of conductor results is a requirement that comes from the more competent users of RSAT. The installation should seek to satisfy both types of user.1. If too cumbersome or difficult to understand the user may not install the software at all. It sets the tone for the user’s experience of the application and is vital in terms of keeping the users interest in the software. The function will allow the designer the ability to optimise the selection of conductor easily. Currently the user needs to repeat a full set of operations to get subsequent conductor results. Therefore the aim of the process should be to almost install itself without any user intervention. The planned result would be to have the selected conductor displayed on the screen at all times.Criteria results Again the Worst case result is for there to be no change to the process of getting a new conductor displayed. The best outcome for comparing conductors would be to have a dual view arrangement where two or more conductors can be viewed at the same time. The planned result would be the ability to select a new conductor for an algorithm with a single action. If the software is used extensively and in particular in comparing conductors the need to see the current selected conductor is something the old version of RSAT omitted. 79 . Criteria results The Worst case would be to have no change made to the software. An indication of the conductor being used and possibly it related data may be useful. Conductor data display needs to be more easily accessed. The best outcome would be for the conductor and conductor data to be displayed on the screen at all times. 3. The necessity for users to be able to add conductors become a requirement. conductor data and the selection of algorithm is too long. data. An allowance needs to be given for the addition of new conductors. 5. 80 . Currently the standard set of conductors limits the user’s capability with the software. The sequential process of selection of conductor. The standard sets of conductors were only available in the first versions of RSAT.a process of conductor selection is required that is simple and quick. However. it has been found that maintenance of lines requires a wider variety of conductors. This will instil confidence in the software and ensure speedy and accurate use of the software. Since the selection of the conductor is the first operation the user is expected to do each time the software is used .4. The philosophy employed was that users should be forced to use the standard conductors for new projects. Criteria results The Worst case is for there to be no change made to the sequential selection process. Criteria results The Worst case is for no change to be made to the software. algorithm etc. The Planned result is a new conductor selection process that is non-sequential and that does not involving different forms to be traversed in order to complete one task. The best result that can be expected is a process where only one operation is required to select a conductor without having to choose type. this only takes into account the average prevailing conditions for South Africa. 81 . The limiting criteria setup for the application algorithms are sourced from the occupation health and safety act and the everyday C-value tension is from the most recently published papers on the subject. 6. Criteria results The Worst case scenario would be to make no changes to the software. The Planned change is to include a facility that allows the user to change one limiting criteria. However.The planned result would be to a customised conductor function which allows the user to store conductor data into a customised file. Limiting criteria can not be varied in line with prevailing conditions for the area. In addition new types of conductors should also be catered for. The best outcome would be to have a process which allows conductors to be added to the current data files for specific conductor types. Extreme conditions such as high winds may be common in some areas. The current software does not cater for these and should be revised to allow for at least one condition change. The best outcome would be for a new facility allowing all limits to be changed per task and the defaults limits to be restored or revised. 82 . This fact could be very frustrating if a number of spans were input into the third section of a line and then having to restart input because there is no error correction mechanism to correct an error made in the first section. The first section of stringing charts could not be corrected once the next section was selected. Proper exception handling should be coupled to all inputs for the application.g.the user would not mistakes in a early section of stringing charts before moving onto the next section. inserting characters where an integer should be inserted) would case the software to crash. This will improve stability and reduce the frustration the users have with the application. The best outcome of the software would be to program proper exception handling with error messages directing the user to correct input values. Criteria results The Worst case would be to leave the software as is. Criteria results The Worst case for the software would be to no change this oversight.7. An oversight of previous versions of the software was that . Incorrect input (e. 8. The Planned outcome would be to improve the software by not accepting the incorrect input. the conductor used is critical in terms of the span lengths required and the allowable clearance. The planned outcome would be for the software is resolved for these examples. 10. Indication of the critical span will allow the designer. Criteria results The Worst case outcome would be for the special cases to give the same results. Longer span lengths mean less structure and hardware and so this may be a necessary requirement of the designer up front. The best outcome would be for the reasons for these problems to be found and be part of resolving the issues. 83 . to determine what the limitations of the selected conductor are. These need to be checked against improved algorithms. In line design. Selected examples would hang the software for no apparent reason. 9. The user interface gave no indication of the critical span. Best Case: allow correction of errors without resetting any sections and recalculating all sections simultaneously.The Planned changes will allow the user to reset the software back a section to correct errors and recalculate the section separately without deleting spans already input. On occasion feedback will reveal special cases where the software hangs or gives incorrect solutions. up front. Do this task directly after the first task in order that the resulting time of changing to another conductor can be seen.Criteria results The Worst case result would be for there to be no changes made to the current software and have no critical span indication. A number of use cases were put together in order to fully compare the two packages. Set the temperature limits to 0 to 30 with an increment of 5 degrees and the span length to 45 to 160 with an increment of 10 metre. 84 . 2. This will be the case when two results are to be compared. The use case is a typical simple function that the application will have to perform repetitively. The test cases are as follows: 1. Run a sat chart. Ideally this task should be quick such that the results from the first task are not forgotten before seeing the results of the second task. The best outcome would be for the critical span to be viewed in a graph of everyday tension verses span length. The planned result would be to have at least a critical span value for the conductor selected. The speed in completing tasks by a user will indicate if the usability has in actual fact improved. With this task completed repeat the process but for Hare conductor. This will test the speed of use and the speed of the computation of the algorithms. The use cases were tested by competent and beginner users in a testing laboratory. Select a Mink conductor. B7 USE CASE ANALYSIS The use case analysis of the new and old software needed to be tested in order to determine if there are improvements in speed and general intuitiveness of the new interface. 4. The final algorithm which gives the clearances to an object is the last of the algorithm speed tests. The test was to compare the speeds of accessing the help for clearance charts. The span consists of: Pole A = 12 metre pole. 7. Pole B = 13 metre pole. Object distance from A = 100 metres Object height = 5 metres Equivalent span = 200 metres Temperature = 50 degrees. The last test that could be completed on functionality that is common to both versions of software was the test of the help systems. Count the number of mouse clicks to get from start to finish with both versions of software for case 1. 45 and 190 metres. Another mechanical stress imposed on the user is the distance the mouse needs to travel to complete the task.3. This is done by compare the times need to complete the clearance charts for Pine conductor and 35 conductor. With the first algorithm tested the next algorithm is put to the test. 150 and125 metres. A Comparison of the times needed to complete stringing charts for both Squirrel and Acacia conductors. Sum the distance required for the mouse to move to complete case 1 for both versions of software. 150. Section 2 Spans: 230. This stress is in the form of the number of clicks the user needs to make to complete functions. 5. The project data is as follows: Section 1 Spans: 100. 6. The next test is intended to determine the mechanical stress imposed on the user. 85 . The conductor selection is done by means of two list boxes – one for the type of conductor and one for the specific conductor per type.APPENDIX C IMPLEMENTATION C1 THE USER INTERFACE As can be seen in the software design section B5. The conductor list is extensive though and the filter will make the conductor list shorter and easier to traverse. The most popular conductors were listed at the top of the conductor listing such that filtering will not be necessary for common conductors. Therefore this was changed to only calculate the algorithm for the tab that is visible to the user. This proved to slow the software down with all the calculation algorithms needing to be completed. This means that the user can select a conductor immediately without filtering for type.3 the interface moved from a form based user interface to a tab style user interface. Both boxes are populated with conductor types and conductors respectively. limits and graphs without reselecting a conductor or going though a number of forms. help. The changes resulting from the process improved the software stability and time to complete updates of the visible algorithm. The advantage is that the user can change between algorithms. C2 THE ALGORITHMS In the Beta test version of RSAT. This change was made such that if an algorithm tab was selected the updated results would already be reflected on the tab. The selection boxes remain visible on the main form at all times such that the conductor can be changed at any time and algorithm results can be compared quickly. On the selection of a new tab the algorithm for the respective tab was done and the tab updated before displaying the tab. all algorithms were updated when a conductor or a limit was changed. 86 . three standard limiting criteria with tension. stringing charts and clearance calculator were derived based on the literature survey and past versions of RSAT. maximum and increment for span ranges. The algorithms were then compared with the results given for PLSCADD (the large line design package used by Eskom). Therefore it was decided that the limits and ranges should be stored in a data file. It was decided to accomplish this by including a tab for the limits. wind values and whether the attributes relate to the initial or final results and the C value. The only evidence that these limits were being used was on sag and tension sheets were the limit results were given for each span. C3 DATA FILES RSAT requires data for conductors and the help file.) 87 . In beta testing it was also suggested that a default button. maximum and increment for temperature ranges. Based on the comparison the algorithms were tweaked and adjusted to give results that correlate closely with PLSCADD.The initial algorithms used to calculate the sag and tension charts. In the old version of RSAT the limits were not listed in particular. In order to do this the limits could not be stored inside the source code but had to be called from a source that the user can see and update. would be useful. the minimum. This was then implemented into the software. This limits tab includes: the minimum. The feedback form users was that the limits should be available to view and change for special environments with special conditions. While redesigning the software it was discovered that two extra data sources were required for the default limits and the default ranges. that recalls defaults after changes have been made. temperature. In final testing a user requested that the defaults be changeable. (C values are already stored as part of the conductor data files. The data files RSAT utilises are: Conductors.xml C4 THE SET-UP PROGRAM The previous compiler chosen to write RSAT (Borland C++ Builder) did not provide a set-up file programming facility. The system renewed the password every time the setup program was run. Thus when the user ran the RSAT executable file.xml and Ranges. XML files are specifically designed to store data and can be viewed as tables if the format is correct. Further confusing the user is the fact that explorer was also upgraded to hide the file extensions. The software and supporting files for RSAT 4. Therefore the XML file system proved to be a far better method store the data for RSAT.xml.2 were kept in a zip file. For this reason the conductor data was split into different type files to reduce this complexity. Therefore this feature had to be programmed in C++. The set-up program was designed such that illegal copying of the program could be prevented. an error message would appear saying that the conductor data file could not be found. The files were still not ideal and so when the new version was researched it was decided to change the file format to XML standard file format to store the data.In the previous version of RSAT the data files were simple text files that were loaded into the software by an algorithm in the source code. In order to accomplish this. Limits. without extracting the files through the setup facility. a password facility was included. 88 . The zip file was not easily recognised by users by the fact that the windows operating system file manager explorer was upgraded to view inside zip files as though they are normal folders.xml. Help. This hid the fact that the executable file and its supporting data files were still compressed. User feedback on the setup showed the setup to be cumbersome and not very usable. This method of storing the data proved cumbersome when the amount of data increased. in that sight conditions are not known at time of printout. This is to ensure standardization of the designs being employed in the field. The standard setup interface is the same as used by most other software available. This included the removal of the password protection and sale of the RSAT software. the cost saving in getting good. will save far more than could be charged for the software. For this reason it was suggested that software be made available for hand held devices. The design and supply philosophy for the RSAT software has changed since the RSAT 4. 89 . This allowed the files to be compressed and decompressed easily in the background while a standard installation “front-end” guides the user. The new compiler (Microsoft.2.Net) chosen to write RSAT incorporated a setup file writer making the design and programming easier. Hence the setup file was not intuitive and needed to be upgraded. the working group driving the project decided to remove all boundaries from use of the software. This presents a problem. CROSS PLATFORM A factor that could lead to inaccuracies and possible omission of sag and tension data is the fact that tension charts needed to be printed out before going to sight. The philosophy being supported by the Eskom business is to line up with the standardisation drive of the utility. To achieve this. This made for a more intuitive process. Although this was not in the scope of this research it had to factored into the choice in the compiler and language that were chosen for the software. The philosophy is that if the software is used.The conductor data file is the first file to be loaded into the desktop interface of the software and it was still zipped if this message appeared. well designed lines. To see if the implementation of the changes improves the software it is needed to be tested in line the criteria setup earlier. interpretation of instructions and errors that could be resolved by improving the software. Comments and suggestions were collected for possible updates to the software.APPENDIX D TEST RESULTS Testing took place in controlled and uncontrolled environments.Net framework will be required for the software to run. Experienced and beginner users were asked to test the software to determine if the software had improved. Then the performance was checked between new and old software. The installation of the . If only one file needed to be run and all else was completed without the users intervention then the setup process would have be to the best possible outcome. they were observed for natural tendencies. The setup process The planned case: was achieved. The controlled test was done in a laboratory type test with the set out test plan. D. 90 . While the users were doing testing on the software. The results are as follows: 1.1 CONTROLLED TESTING The controlled testing was done with the design criteria given in B6. mouse movements. This meant that testing needed to be completed on both the new and old software so the comparison on the same tasks could be completed. After the testing the user was questioned with respect to the software and its ease of use. However. First some simple requirements needed to be met in the new software that were not met in the old software. This was incorporated into the software but the setup needed to run twice to the install the framework and RSAT. the guidance on the setup interface does explain all that the user is required to do in terms of the framework and the installation of the software. 4. The software has been upgraded to display conductor select boxes on screen at all times. Conductor selection. Limiting criteria The new software includes a facility that allows limits to be changed per task and the defaults limits to be revised or restored. The process was made quick such that the user would remember the results from the last conductor or the conductors could be switched back and forth to compare. Else the two conductors could be printed and compared. 5. Therefore the planned result was achieved. The best result would have to have had a dual view with two conduct results displayed. 91 . This constitutes the best case result. 3. This was not possible with the size requirements for the user to see result effectively. The best case result required that the selected conductor and its respective data remains on screen at all times. Sequential selection process. The upgrade was even fine tuned after feedback to allow one touch selection without selecting the conductor type first. This outcome represents the best case result. 6. A conductor addition facility was added to the software that lets the user update the conductor data files with new conductors of a type already saved or the user can define a new type. Conductor data display. It was decided instead to design an interface where a number of conductors can be compared for any algorithm consecutively. This outcome represents the best case result. This allows for selection without opening new windows sequentially. This was achieved in the new software. Addition of new conductors.2. 2. Incorrect input causing software to crash. Selected examples hang. 10. This outcome represents the best case result. This outcome represents the best case result. Therefore this result represents only a planned case result. In addition an error messaging system was added to inform the user of the error and possible remedies. 9. The software upgrade allows correction of errors in previous sections without resetting any sections and recalculates the all section each time "calculate" is pressed.7. the reasons for the problems on the old software were not discovered. The user interface gave no indication of the critical span. The software resolved all known examples that hung RSAT 4. This outcome represents the best case result. Now the results of speed test tasks comparing old and new software are listed: 92 . This was used to avoid having the software crash when incorrect input was fed into the software. A critical span graph was added with everyday tension verses span length that shows the critical spans. String chart correction. However. 8. An exception handling function of C# was discovered in the reprogramming. 12.2 5 Competence Higher 43 seconds 37 seconds Lower 65 seconds 65 seconds An average improvement in time to complete the task of getting a Mink conductor sag and tension chart was recorded as 7 %. It should be noted though that this function of RSAT is the simplest.11.2 5 Competence Higher 8 seconds 3 seconds Lower 8 seconds 8 seconds The time improvement is 63 % for a competent user but again there was no change for a beginner type user. engineering principles and of the designers misunderstanding of what the user expects to the procedure for completing a task. It is easier to do the actual comparison with RSAT 5 since the sag and tension data for Mink was only removed to replace with Hare. The production of a sat chart for a Mink conductor with particular limits. The next test was to compare the sag and tension results of Mink conductor (completed in the first test) with the results for Hare conductor. This meant that the 93 . Small changes to improve the software did improve the time of the competent users and therefore usability was improved even if it was only for a section of the users. The result for the two applications is: RSAT Version 4. This is not a vast improvement and in particular new users of lower competence had no improvement. This is indicative of the general misunderstanding of software. The results are as follows: RSAT Version 4. For RSAT 4. 13. The results reflect this clearly: RSAT Version 4. Therefore the minimum on screen distance was measured and short cuts and tab keys are used where possible to reduce the need to move the mouse.2 5 Competence Higher 10 clicks 5 clicks Lower 18 clicks 11 clicks The number of clicks required to produce a sag and tension chart improved by 50 % for the competent user. The results for minimum distance between the two versions of RSAT are: 94 . However. After selection a conductor data sheet is displayed and then only is the sag and tension data displayed. These improvements reflect an improvement in mechanical efficiency and in turn the usability of the software. Therefore a printout or a good memory would be required to compare the result of the two conductors. The test will be completed for both versions of software by noting the minimum distances possible. The number of mouse clicks required to complete the sag and tension charts for Mink by the different competence users will be different as the beginner user may get to a solution via a longer route due to misunderstanding of simplest methods to get to the solution.results could be viewed back and forth quickly without needing a good memory or a printout of the results. First time users showed an improvement of only 39 %. The results will not be taken for the two different competencies as the laboratory did not have facilities the tracked distance on screen. 14.2 the data is removed for the view such that the conductor selection form can be displayed. Another means to test the mechanical efficiency of the software is to compare the sum of the distances the mouse is required to move to complete a simple task such as producing a sag ad tension chart for Mink. The figures show a greater numerical improvement form the beginner users. if looked at in terms of actual numbers the improvement for lower competence users was 7 clicks while for higher competence users it was only 5 clicks. This shows the improvement in the software is substantial.2 5 Competence Higher/Lower 750 mm 130 mm An improvement of 83 % on the original distance is recorded. It requires more input from the user. was to restart the program to get the second conductors results.2. However. This still represents a good improvement over the old software. This algorithm is more complex than that of the sag and tension charts.2 Competence Higher 90 seconds Lower 230 seconds 5 50 seconds 97 seconds The suspicions were realised in the results as the beginner user results reflect the complexity of the algorithm in the 230 seconds required to complete the task in the old version of the software. 95 . a general comment would be that for lower competence users movements of the mouse would be further than that for a higher competence user. This result is probably an inflated result and a result in 70’s would probably be more realistic. The improvements for high and low competency are 45 % and 57 % respectively. 16.RSAT Version 4. Therefore the result are expected to be improved for the beginner users: RSAT Version 4. The results were taken when the input was correctly input as there were many attempts which had to be restarted by the lower competency users. as the stringing chart did not reset. to compare the results of the first conductor with that of the second. The process required for RSAT 4. The next algorithm to be tested was the times to complete stringing charts. To inexperienced users this may not be obvious and the time taken increased due to this misunderstanding. Being a complex algorithm it is expected the results between new and old versions of the software should liberate difference in completion times. This made the final improvements 60 % and 33 % for high and low competencies respectively.2 Competence Higher 50 seconds Lower 114 seconds 5 30 seconds 86 seconds Again the improvements in performance between the versions are evident. The reset button added to the new revision proved invaluable in making the software more usable. This did not make for easy comparison of results between conductors. When a new conductor was selected the results were not updated until an attribute on the clearance chart was changed. The results are as follows: RSAT Version 4. 96 . The importance of this test was not only the times but the test showed a problem with the interface. This meant that the user had to change the conductor and a clearance attribute even if the same clearance case was required. 16. The resulting improvements in time were 40 % and 24 % for higher and lower competencies respectively. The problem was resolved and further improved times by ten seconds. The last of the algorithms still needed to be tested by comparing the times need to calculate the clearance charts for Pine and 35 conductors for a particular span. This was done after it was noticed that the size was not legible to all users completing the testing. The only improvement that may have been gained in time would be due to the improved access to the help function selection. The laboratory did prove useful in exposing errors in assumptions as to what the changes needed to be in ordered to improve the first time users’ experience of the software. The results were: RSAT Version 4. The test involved accessing the same help function within the two different versions of software. Not allowing the user to reset this calculation would mean when new data or a new chart wanted to be entered the software would need to be restarted. The speed of accessing the help may prove the software capable of holding the users interest in using the product or not. 97 . Hence the same type of help system is run on both pieces of software. The software has improved in areas allowing users to reset stringing calculation tab. Then function buttons. fonts and tabs titles were increased in size to improve their visibility to users.17.2 5 Competence Higher 5 seconds 4 seconds 9 9 Lower Improvement = 10 % This result was shows that there very few changes made to the help system as it has never been the cause for comment or concern. In hind sight this test may have been omitted had the changes been known before the tests were set-up. Overall the improvement for competent users was better than for first time users in laboratory testing. It was found that lower competency users in general needed guidance through the process until the basics of the software were learnt. This window prompts the user as to possible next steps to take until the user become familiar with the software. However. Inputting the 100 metres before deleting the 300 metres may lead to the software calculating up to a span of 100300 metres. it could cause instability of the software. 98 . it was also noticed that if automatic update occurred before the input was completed. For example some input. If the increment for calculation is 20 metres and the starting span 20 metres then the number spans is 5015. If the temperature range is -5 to 60 degrees with an increment of 5 degrees. Since the software is basic and can be learnt fairly easily a “Suggested action” help window to guide users to next possible action was added. This could be seen when editing a maximum span length from 300 metres to 100 metres. Then the number of temperature calculations (including the worst calculation) is 15. if completed incorrectly. could send the software into an extremely long calculation that was not required. Now the number of calculations is the number of temperatures times the spans which gives 75225 calculations. Not to mention that to get to each result involved a number of iterations of its own. The event capture functions were updated to do calculations automatically for the algorithm visible. The second comment related to the size of the form and the size menus. This meant that any user of the website could down load the software and use it freely. The Beta test version was available for eight months with user feedback coming via e-mail and telephonically. There were 2 major feedback items related to usability of the software. This was a repeat of the feedback from the laboratory testing. The results from the Beta testing showed the new software had achieved the goal of becoming more user-friendly. The software was revised to resize the software’s desk top to the size of the main form. chart windows and all the items presented for the user to see. conductor boxes.D2 UNCONTROLLED TESTING The testing is uncontrolled because it was not completed in a laboratory. A question and comments return e-mail and contact number for the developer was left on the website for feedback. The test was completed in form of a Beta release being made available to users via the Distribution Technology website. 99 . Other comments were related to small errors in the software that were overlooked when designing the Beta test version. Further prompting during the Beta testing was that graphics were too small at high resolutions. The resolution to this comment has already been discussed and was accepted by users. The rest of the comments confirmed that the users were happy with the new software. Fonts and selection option had all been increased in size after the user feedback in the laboratory testing. The first was that the error/ exception handling could be improved to guide the user away from making mistakes when inserting data. APPENDIX E COMPLETE SOURCE CODE 100 . Xml.Shared. /// 20 Dec Added update SAT Chart to"private void CLB_SelectedIndexChanged(object sender.Schema.Collections.using System.EventArgs e)" /// 3 Jan Added method for Sat calcs to conductor class.Data. using System.Xml.Forms. using System. using System. using System.Windows. using System. . Started XML data file comms and conductor class usage.XPath. using System.ComponentModel. /// </summary> public class MainView : System.Drawing.IO.Windows.Xml. /// Rev B Complete downloading type and conductor into two list boxes /// Rev C Replaced data lists with text boxes such that input will be easier when adding conductors. /// Rev B 7 Dec start work on down loading conductors data. /*using CrystalDecisions. using System.Xsl. /// Rev A 6 Dec 2005 got the xml to first drop down correct.Form { int line = 0. using System. System. using System.Load data into text boxes. int page = 1.*/ namespace RsatDraft0 { /// <summary> /// 1 Dec 2005 met with Prof Dwol.Xml.Forms. using System. Windows.MenuItem menuItem9.Forms.DataGrid dataGrid1.Forms.Windows.Windows.Forms.MenuItem menuItem11.Label label2.Windows. private System.Forms.Windows.Windows.Windows.ToolBar toolBar1.MenuItem menuItem18.Forms.Forms.Windows.Forms. private System. private System.Forms.Windows. private System.TabPage tabPage4.Windows.TabPage tabPage2.Forms.Windows.Windows.Forms.MenuItem menuItem3. private System. private System.MenuItem menuItem14.Forms.Forms.Forms.MainMenu mainMenu1.Forms.MenuItem menuItem21.ImageList imageList1. private System. private System. private System.ToolBarButton toolBarButton6. private System. private System.Forms. private System. private System.Windows.Windows. private System. private System. private System.Windows.Forms.Windows.Forms.Windows.Forms.ToolBarButton toolBarButton4.ToolBarButton toolBarButton8. 102 . private System.Forms. private System.Windows.ToolBarButton toolBarButton3.Forms. private System. private System. private System.Forms.Forms.Windows.MenuItem menuItem10.Forms.Windows. private System.Windows. private System.Windows.Windows.Windows.Windows.Forms.MenuItem menuItem29.Forms.MenuItem menuItem1.ToolBarButton toolBarButton7. private System.Forms. private System.Label label6.Forms. private System.TabPage tabPage1.Label label3.Windows.Windows.private System. private System.Windows.Label label1.TabPage tabPage3.StatusBar statusBar1.Forms.Windows.TabControl tabControl1.MenuItem menuItem4.Forms.Windows.MenuItem menuItem15. private System.Forms. private System.Forms.ToolBarButton toolBarButton2. private System.Windows. Forms.TextBox EDT.DataColumn dataColumn2.Label label15.Windows.Forms.TextBox Diameter. private System. private System.DataColumn dataColumn4. private System.Label label8.Forms.Windows.TextBox FMod.Label label7. private System.Label label14.Forms. private System. private System.Data. private System.Label label19.Windows. private System.Forms. private System. private System. private System.Forms. private System.TextBox Area. private System.Forms.Label label10.Forms.Windows.Label label28. private System.Windows. private System.Windows. private System.Windows.ListBox CTLB.Windows.Data.Data. private System.Windows. private System. private System. private System.Forms.DataColumn dataColumn3.Forms.Forms.Windows. private System.Data.Forms.Forms.Forms.TextBox IMod.Windows.Windows.Data. private System.Forms. 103 .DataColumn dataColumn5.DataColumn dataColumn6.Forms.Windows.Windows.Label label20.TextBox Mass.Windows.Windows.DataView dataView1.Label label16.DataTable dataTable1.Windows.DataColumn dataColumn1. internal System.Forms. private System.Forms.Data.Label label11. private System. private System.private System.PictureBox Pict.Forms.Forms.Forms.ListBox CLB.Windows.Forms.Windows. private System.Data.Data.Windows.Label label9. private System.Windows.DataSet SagAndTension.TextBox UTS. private System.Data. private System.Windows.TabPage tabPage5. private System.Windows.Forms.Label label44.Windows.Windows.Windows.Forms.Label label32.Forms. private System.Windows.Windows.Forms. 104 .TextBox linc. private System.Forms.Label label51.Windows.Windows.Label label56. private System.Forms.Forms.Windows.Label label46.Windows.Windows. private System. private System. private System.Label label33.Windows.Label label41. private System.Forms. private System.Windows.Label label29.Label label42.Label label47.Label label43.Forms.Forms.Windows.Forms.Forms. private System.Forms.Forms.Label label35. private System.Windows. private System.Label label30. private System.Windows. private System. private System.Windows. private System.Label label55.Forms.Label label54.Forms.Windows. private System.TextBox Coefficient.Forms. private System.TabPage tabPage6. private System. private System.Forms.TextBox tinc.Label label48.Windows. private System.Windows.Forms.Forms.Label label53.Label label40.TextBox lmax.Label label50.Windows.Windows.Forms.Windows. private System. private System.Forms.Forms.Windows.Label label49.Label label52.private System. private System.Label label45.Label label39.Windows.Windows. private System.Windows. private System.Windows.Label label34.Forms.Forms. private System.Forms.Windows.Forms.Forms. private System.Forms.TextBox tmin.Forms.Forms. private System.TextBox lmin. private System.Windows.Windows. Windows. private System.Windows.Forms.Label label63. private System. private System.Label label64. 105 . private System.Windows.Windows.Windows.Label label73.TextBox image. private System.Forms.Label label62.Label label65.Windows.Label label78.Windows.Forms.Forms. private System.PictureBox picture.Windows.Forms. private System. private System.Forms. private System.Forms. private System.Forms.private System.Forms.Windows. private System.Forms.Forms.TextBox ncond. private System.Forms.SaveFileDialog saveFileDialog1.Forms.Windows.Forms.Forms.Label label5.TextBox Creep.TextBox ncreep. private System.Label label61.Label label60.Windows.Forms.Label label77. private System.Windows.Button Save.Label label74.Label label75.Windows. private System.Forms.Windows.Windows.Forms. private System. private System.Forms. private System.Forms.Forms. private System. private System.Button Cancel.Windows. private System. private System. private System.Windows.Windows.Label label76. private System.Forms.Forms.Forms.Forms.Windows.Windows. private System.Windows.Forms. private System. private System.Forms.Windows.Forms.Windows. private System.Label label79.Label label81.Windows.Windows.Forms. private System.Label label80.Label label59.Windows.Windows.TextBox tmax.OpenFileDialog openFileDialog1.Forms.Windows.Windows.TextBox ntype.Label Clabel.Forms.Label label57. private System.Windows.Windows.Label label58. Forms.Windows.DataColumn dataColumn8.Forms.Forms.Windows.Windows. 106 .TextBox Wt2.Forms.Windows.Windows.Windows. private System.Data.Windows.private System. private System.TextBox Wc2.Forms.Windows. private System. private System.Forms.Label label84. private System.Windows. private System.TextBox Wt1.Forms.Windows.Windows.Label label86.Forms.Windows.Windows.Windows.DataGrid dataGrid2.DataColumn dataColumn7.Data.ComboBox CT1.Forms.Windows. private System.Forms.Label label85.TabPage tabPage7.Forms.Data. private System.Label label83.Data. private System. private System.Data.Windows.Forms.TextBox Ww2. private System. private System.TextBox Wc3. private System.ComboBox CT2. private System.Label label82. private System.Forms.TextBox Wc1.Forms. private System.TextBox Ww3. private System.TextBox Ww1.DataTable dataTable2.DataColumn dataColumn10.Forms.Forms.Data.Forms.Forms. private System. private System.PictureBox pictureBox1.Windows.Windows.MenuItem menuItem16. private System.TextBox CValue. private System.DataColumn dataColumn11.ComboBox Ini3.Windows. private System.DataColumn dataColumn12.ComboBox Ini2.Windows. private System.Forms.TextBox Wt3.Forms.ComboBox Ini1.Forms.Windows. private System.Windows.Forms.Forms. private System. private System. private System.Forms.Windows.Windows. private System.Data. private System. private System.DataColumn dataColumn9. Forms.Label label99.DataColumn dataColumn13.Windows. private System.Windows.Windows.TextBox GroundA. private System.Label label87.Windows.Windows. private System.Button calculate.Forms.Windows. private System. private System.TextBox polef.TextBox section. private System.Forms.TextBox ESpan. private System.ComboBox IF. private System.TextBox DWorst. private System.Windows.TextBox AttachB. private System. private System.Forms. 107 .Forms.Forms. private System.TextBox Tension. private System.Forms. private System.Windows. private System. private System.Forms.DataColumn dataColumn14.Forms.Forms.Label label13.TextBox AttachA.Windows.Data.Windows.Windows.Windows.Windows. private System.Windows.Windows.PictureBox pictureBox2.Windows.Windows.Forms.TextBox nclearance.TextBox Worst.DataColumn dataColumn16. private System.Forms.TextBox GroundO.Forms.Windows. private System.Forms. private System.Windows.Windows.TextBox poles.TextBox project.Windows.Button nsection. private System.TextBox GroundB.Windows.Windows.TextBox GroundDist.Forms.TextBox polep.Data.Forms. private System. private System.Forms.Data.TextBox HeightO. private System.Forms. private System.Forms.PictureBox pictureBox3.Forms. private System.Windows.Windows. private System. private System.private System.Windows.Windows.Label label17.Forms.Forms. private System. private System.Forms.Forms.Forms.TextBox condtemp.Data.DataColumn dataColumn15.Forms.Forms. Forms.Windows.Windows.Label label4.Forms. private System.Label label18.Forms.Windows.Windows. private System.Windows.Label TWorst. private System. private System.Forms. private System.Forms.Forms.Label label104.Windows.Windows.Windows.Windows.Forms.Windows.Windows.Label label24.Windows. private System.Label label105. private System. private System. private System.Label label27. private System.Windows.Windows. private System.Forms.Label label91. private System. private System.Label label89. private System.Windows.Label label96.Forms.Label label88. private System.Windows.Forms.Forms. private System.Label label108. private System.Windows.Forms.Windows. private System.Forms.ComboBox CT3.Forms.Forms.Forms. private System.Label label95.Forms.Label label98.RichTextBox Helptext.Label label22. private System.Label label106.Forms.Label label92. private System.Windows.Label label107.private System.Forms.Forms.Forms.ListBox helpindex.Forms.Windows.Windows.Forms.Windows.Label label21. private System.Forms.Windows.Windows. private System.Windows.Label label93.Windows.Label label12.Label label109.Windows.Label label102. private System.Windows.Windows.Forms. private System.Forms.Label label94. 108 .Forms. private System. private System.Forms.Forms.Label label90.Windows.Label label23.Windows.Label label25. private System.Forms. private System.Label label97.Forms. private System. Windows. private System.Forms.Windows.Label label37. private System.Forms.Windows.Button button1. private System.*/ //private System.Forms.Forms.Label label36. private System.Forms.Windows.Label suggest.Printing.Forms.Label Error.private System. private System. private System.Label LimError.Forms.Windows.PrintPreviewDialog printPreviewDialog1.Windows.Windows.IContainer components.Windows.Windows.Windows. private System. private System. private System. private System.PrintDocument printDocument1.RichTextBox clipboard.MenuItem PrintPreview.ComponentModel.Windows.Forms. private System. private System.Engine.Windows.RichTextBox richTextBox1.Forms.Windows.Windows.Forms. private System.Forms. private System.Forms.Forms.Button Defaults.TextBox TensionA.Label label66.Windows.Forms.Forms. private System.Panel panel1.Forms. private System.Windows.Forms. private System.ReportDocument Report.Windows.Forms.MenuItem Print.Forms.Windows.Label label31.Label label67.Label label26.Windows. private System.RichTextBox clipboard. private System.TextBox TensionB. /* private CrystalDecisions.Label emsg.Drawing. private System.Forms.Windows.Label label68. private System. private System.Windows.Forms.Forms. public MainView() { // 109 .CrystalReports.Windows. Read()) { // Moves the reader to the 1st node. // Load conductors cr..WhitespaceHandling = WhitespaceHandling.Read().// move to the type names while(CTLB.Read().Read()) { // Load types if(cr. cr.CTLB.FindString(cr. //string to type while(cr.// White space handling if (cr.// move to the names 110 .Value!="") this.xml").// Required for Windows Form Designer support // InitializeComponent(). cr.Value).Name == "Type")// loop to the types specified until the end of the file { cr.Read().None. // Moves the reader to the next node.Add(cr.cr.MoveToContent().Read().Value)==-1 && cr.MoveToContent(). // // TODO: Add any constructor code after InitializeComponent call // Open the Conductor Xml file and reader the conductor types in the type box XmlTextReader cr = new XmlTextReader(@"Conductors.//Open a reader cr.cr.Items. Close(). hr.None.//Open a reader hr.Items. hr.Value!="") this.Read()) { // Load types if(hr. //string to type while(hr.Add(cr.Name == "L0")// loop to the types specified until the end of the file { hr.Read().FindString(hr. } } cr.Value)==-1 && hr.Items.Value).// White space handling if (hr.WhitespaceHandling = WhitespaceHandling.// move to the type names while(helpindex.Read()) { // Moves the reader to the 1st node.Value).xml").//Load conductors this. } 111 .MoveToContent().helpindex. } // Open the Help Xml file and reader the Help index in the helpindex box XmlTextReader hr = new XmlTextReader(@"Help.CLB..Add(hr. // Moves the reader to the next node.MoveToContent(). "------------------------------------------------".} dataTable2. int Poles = Convert. while (count<(Polef-Poles)) { 112 ."------------------------------------------------". int Polef = Convert.Close().Count-1).Text).ToString()!="------------------------------------------------") {dataTable2.RemoveAt(dataTable2.Count-1).Count-1]["5 degrees"]."-----------------------------------------------".Rows.Rows."------------------------------------------------".Rows.Rows."-----------------------------------------------"."------------------------------------------------"}).Text). } int count = 0. if(Polef>Poles) { dataTable2."------------------------------------------------". if(dataTable2.RemoveAt(dataTable2.Rows[dataTable2.Clear().ToInt16(poles.} hr.Rows.Rows. } ResetStringing().Count>0) { while(dataTable2. } public void ResetStringing()//resets the string chart if a new project is to be strung { try { Error.Rows.Text=""."------------------------------------------------".Add(new Object[] {"------------------------------------------------". dataTable2.Rows.ToInt16(polef."-----------------------------------------------". "". "".Add(new Object[] {"".1).".""."".Add(new Object[] {project. "Length = "."-----------------------------------------------"."".Add(new Object[] {polep. "Input span".Text = "Input error.Text."". count++.Add(new Object[] {"".""."". } } dataTable2."Spans = ".""."". dataTable2. ""."------------------------------------------------"."------------------------------------------------"."".Rows.Rows.""}).""}).count ."". } catch { Error."------------------------------------------------". while (count<(Poles-Polef)) { dataTable2.". } } else { dataTable2. section. ""."".""})."".Rows.Text+(count + Poles)+"-"+(count + Poles+1).""."------------------------------------------------"."-----------------------------------------------". } 113 .Rows."Tension"."". "". "".Polef-Poles.Add(new Object[] {"------------------------------------------------"."".Add(new Object[] {polep. count++."". ""."".""."".""}). "Input span".""}).Text.Text+(Poles . dataTable2.""."".count)+"-"+(Poles .""."".Rows."Equiv span = "." Section ."------------------------------------------------"})."". "". dataTable2."-----------------------------------------------".""}).""."------------------------------------------------".Rows."". ""."".dataTable2.Rows."". ""."".Add(new Object[] {"Section". Read(). Ini1. lt.Read().// White space handling if (lt.Value.Text=lt.lt. lt.xml").WhitespaceHandling = WhitespaceHandling. lt.default values are stored in the limits XML file.Read().lt.lt.lt.} public void DefaultLimits()// Resets the limits on the limit page to the efault values .Text=lt.lt. CT2. lt. lt.Read(). // Load data Wt2.lt.Read().Read().Value.lt.Read()) { // Moves the reader to the 1st node.Read().Read(). CT1.Read().MoveToContent().Read().Value.lt.Value.lt.lt. Ww1.Read().Read().Read().lt.Read().Read().Value.lt. Wc1. lt. { //Read default limit data from Limits XML file XmlTextReader lt = new XmlTextReader(@"Limits.Read().lt.lt. lt.lt. 114 .Value.Read().Text=lt.lt.lt.MoveToContent().None.Read().lt.Read().Text=lt. lt.Read().Read().Read().lt.Read().Text=lt.lt. // Moves the reader to the next node.Read().Read(). // Moves the reader to the next node.Text=lt.lt.Read().Read().Value.//Open a reader lt.Read().lt. // Load data Wt1.Read().Text=lt.lt. Read(). rg. // Moves the reader to the next node.Read(). lt.lt.Value.lt.Read(). Wc2.Read().Read().lt.Value.Read().rg.Read().Text=lt.Value.Read().Read().Read().Read().lt.lt.lt.Read().rg. Ini3.lt.Text=lt.Value. } //Read default range data from Ranges XML file XmlTextReader rg = new XmlTextReader(@"Ranges.Read(). // Load data Wt3.Read().Read(). Ww3. lt.Read().Text=lt.Value.Read(). lt.Text=lt.Read().Read().lt.Read(). lt.Read(). lt. lt.Read().Read().Value.Read().Read().rg.lt.Text=lt.lt.lt.rg.Read(). // Load data 115 .Read().lt.Read()) { // Moves the reader to the 1st node.lt.Read().WhitespaceHandling = WhitespaceHandling.lt.lt.Read().None.lt.// White space handling if (rg. CT3.rg. lt.lt.Read().lt.rg.lt. Wc3. rg.Read().Read().Read().lt.lt.Read().MoveToContent().MoveToContent().Text=lt. Ini2.Read(). Ww2.Value.lt.Text=lt. lt.//Open a reader rg.Close().Text=lt.Value.xml"). //t1 = temp 1.Read().rg.k).Text=rg.Read().Ti<-0.Read(). w1 = wind 1. rg. } } public double ToInitial(double L.Value.L12.Text=rg.Read().Read(). rg.Read().rg.Read().tmin.Coef.double Imod.c1. double k)//Convert to initial at convert temp. int count = 0.Value. // Creep convertion find initial at ref temp double Ti = T20.rg.t2.Diam.Imod.rg.Read(). double Diam.Text=rg.Text=rg. tmax. rg.rg. double Wc.Text=rg. rg.rg.Value.rg.Read().T20.rg."Final".rg.Read().0.1||Tin .Read().double t1. lmax.rg. double Fmod.Read().Read().Value.double w1. rg.A.Fmod.Value.// initial guess double Tin = 0.double A. // Moves the reader to the next node.double c1.double Coef.Read(). convert at temp t2 { // convert final values to ref temp without wind double T1 = TempConvert(L. linc.rg.t1. 116 .Ti>0.Value.Text=rg.1) { Tin = Ti. tinc.Read(). c1 = tension 1.rg.Read().Read().double t2. double T20. // Load data lmin.Read(). rg.w1. while(Tin .rg.Read().Read().rg.Wc.rg. double L12.Close(). double k) //Convert to final at convert temp. if (Ti<0) Ti = -0.k).Diam.t2. double Fmod.Ti = (25/3*Wc*Wc*L12*T20*T20/k*Tin*TinMath.Tfw>1||Tnw . convert at temp t2 { // convert initial values to 15 deg without wind double T = TempConvert(L.double w1. double Wc.double Coef.Pow(T1.Pow(Tnw. //t1 = temp 1.4)*T*T-25/3*Wc*Wc*L12*T20*T20/k*T*T)/(50/3*Wc*Wc*L12*T20*T20/k*Tnw-4*Math.t1.4)*Tin*Tin+25/3*Wc*Wc*L12*T20*T20/k*T1*T1)/(50/3*Wc*Wc*L12*T20*T20/k*Tin-2*Math.Coef. } 117 .//initial tension as worked double Tfw = T20.Wc.Imod.0.double c1. count++. while(Tnw . } public double ToFinal(double L. w1 = wind 1.double Imod.//initial geuss double Tnw = 0. double T20.L12.double t2.5*Ti. // Creep convertion to final EDT at convert temp (def 15) //double Ti = Tfw."Initial". c1 = tension 1.Fmod. Tfw = (-25/3*Wc*Wc*L12*T20*T20/k*Tnw*Tnw-3*Math.double A.Pow(Tnw.Pow(T1.3)*T*T).Tfw<-1) { Tnw = Tfw.double t1.w1.A. double Diam. double L12. } return (Ti).c1.4)*Tin).T20. if (count == 10000) break. Coef = cond temp coef.Pow(W2. w1 = wind 1.2)*Math. } public double TempConvert(double L.2)*Math. double W1 = Math. Imod = initial modulus.Pow(w1. double W2 = Math.2))/24. w = Math. // without wind } double Tnw = 100. L12 = L1.2))+Coef*(t2 -t1))-T1.2)*Math.Pow(T1.double A. T20 = 20 % of UTS tension. A = cond area.Pow(Wc.//with wind c = (Imod*A*Math.// initial geuss while((Tnw-Tfw)>0. double T20.Pow(Wc.2)+Math.1) { 118 .2).Pow(L. T1 = tension 1.Text)*0.Pow(L.double Imod.ToDouble(UTS. t2 = temp 2.Pow(w2.//with wind c = (Fmod*A*Math.2))+Coef*(t2 -t1))-T1. Wc = cond weight.2))/(24*Math.2))/(24*Math.Pow(W2.string IF. t1 = temp 1.2))/24. // without wind } if(IF=="Final") { b = Fmod*A*((Math.double T1. //Arguments:L = span length. double Tfw = Convert.double t1.1||(Tnw-Tfw)<-0.double Coef. double Fmod.2(required for calculations) and k = creep constant.return (Tfw).double t2.double w1. IF = initial or final calc.double w2.2)*Math. Fmod = Final Modulus. double Diam. double L12. if(IF=="Initial") { b = Imod*A*((Math.2)+Math. double k ) //Converts tension with change in temp.Pow(W1.Pow(T1. double Wc.2).Sqrt(w). double b=0.4. double c=0. { double w = Math.Pow(L.Sqrt(w). Daim = conductor diameter.Pow(L.Pow(W1. w2 = wind 2. ToDouble(Ww1.Text).Text=="Tension") wc1 = Convert. double k ) //Determine which of the limits is the ruling limit producing the lowest tension at the every day conditions //Arguments:L = span length. double T20. Tfw= Tnw .Text)*0. if (Ini1. } return(Tfw).ToDouble(Wc1.ToDouble(Wt1.//weather weight 1 double wc1=0. L12 = L1.ToDouble(Wc1. double Diam. Daim = conductor diameter.double Coef. double Wc. Coef = cond temp coef.//conversion temp // Limits Default EDT C @ 15 deg Final // Limit 1.Pow(Tnw.//weather c 1 // get limits to common base 15 deg 0 Pa final double L1=0. Wc = cond weight. if(CT1.Text).Text)*Wc. //convert weather c 1 from c or % uts to tension if(CT1.2(required for calculations) and k = creep constant.Text=="% UTS") wc1 = Convert.//weather temp 1 double ww1 = Convert. T20 = 20 % of UTS tension.2)+2*Tnw*b)).Pow(Tnw.Tnw = Tfw.((Math.// setup counter to hold worst case number int ct = 15. { int worst = 0. } public int findlimit(double L.double Imod. double L12. double Fmod.double A. Imod = initial modulus.ToDouble(UTS.Text == "Initial")// Convert limit to final 15 deg 0 wind 119 . A = cond area. if(CT1.Text=="C Value") wc1 = Convert.3) + (Math.Pow(Tnw.2)*b)-c)/(3*Math. Fmod = Final Modulus.Text)*Convert.ToDouble(Wc1.Text)/100. double wt1 = Convert.6*Diam. else L1 = TempConvert(L.Wc.0.ToDouble(Wc2.Diam."Final". if (Ini2.Text)/100.ww2.Text=="% UTS") wc2 = Convert.15.ct.Text)*Wc.Text == "Initial")// Convert limit to final 15 deg 0 wind L2 = ToFinal(L."Initial".Text)*0.A.15.wc1.ToDouble(Ww2.Text).//weather c 1 // get limits to common base 15 deg 0 Pa final double L2=0.ToDouble(Wc2.wc2.wc1.T20.Imod.wt2.//weather weight 3 double wc3=0. // Limit 3.Diam. // Limit 2.ToDouble(Ww3.Diam.ToDouble(Wt3.//weather temp 2 double ww2 = Convert.Text=="Tension") wc2 = Convert.Imod.6*Diam.Text). if(CT2.Fmod. //convert weather c 3 from c or % uts to tension 120 .Fmod.wc2.Diam.//weather temp 3 double ww3 = Convert.ToDouble(UTS.Text=="C Value") wc2 = Convert.Wc.Fmod.Imod.Wc. else L2 = TempConvert(L.Wc.L12. Default: Final 40 % -5 700 pa double wt2 = Convert.wt1.wt1.// convert to final at convert temp ct default 15'C and zero wind etc.0.A.T20.Text).L12.ToDouble(Wt2.A.k).Coef.A.Fmod.Coef. if(CT2.L1 = ToFinal(L.Coef.6*Diam.Text)*Convert.L12.k). Default: Initial 40 % -5 700 pa double wt3 = Convert.Text)*0.ww2. //convert weather c 2 from c or % uts to tension if(CT2.ww1.ww1.//weather weight 2 double wc2=0.ct.ToDouble(Wc2.T20.T20.L12.// convert to final at convert temp ct default 15'C and zero wind etc.Coef.k).Imod.k). // Extapolate limit to 15 deg with no wind final.wt2. 0)).A.wc3.T20. if(CT3.wt3. else L3 = TempConvert(L."Final".Coef.Text = L1.ToDouble(Wc3.ww3.Text = L3.Text)*Convert.EDT.if(CT3. } public void equivspan()// Algorithm to determine the stringing charts output { try 121 .ToDouble(Wc3.Imod.Fmod.Wc.// convert to final at convert temp ct default 15'C and zero wind etc.Text).Imod.Text="EDT at " + L + " m".ToDouble(Wc3.} if (L3<L2&&L3<L1) {worst = 3.wc3.Text)/100. if (Ini3.Wc.Text = Convert.Text == "Initial")// Convert limit to final 15 deg 0 wind L3 = ToFinal(L.ww3. //Convert EDT to integer // Compare all limits at 15 final with no wind L1.k).wt3.L12. if(CT3.EDT.Text).Text=="Tension") wc3 = Convert.Text=="% UTS") wc3 = Convert.ToDouble(EDT.k).T20.0.A. //Convert EDT to integer EDT.} label28. L2 & L3 if (L1<L2&&L1<L3) {worst = 1.Text = L2.ToDouble(UTS.Text=="C Value") wc3 = Convert. return(worst).ToString().ToString().EDT.} if (L2<L1&&L2<L3) {worst = 2.Coef.Text)*Wc.ToString().Diam.ct.ToString(Math.Diam.//weather c 1 // get limits to common base 15 deg 0 Pa final double L3=0.15.Round(Convert.L12.Fmod. // Extapolate limit to 15 deg with no wind final. // double Wc = (Convert.Rows[count]["Span Lengths"].Text)*9. //convert to m/N double Diam = (Convert. Polef= Convert.Text="".ToDouble(Area.Pow(10. int rcount = 1.ToInt16(polef.ToInt16(poles.Text)*Math.//convert into sq meters double Coef = (Convert. double k = Convert.6)).ToString()!="Section"&&dataTable2.ToDouble(FMod.Text)*Math. bool flag = true.ToDouble(Coefficient.ToString()!="") { if (dataTable2.ToDouble(UTS.ToDouble(Creep.Pow(10.Text)/1000000.Text). // double Imod = Convert.Text)/1000).Text)/1000000. int sa=0.Rows. Poles= Convert.ToString()!="Input span") 122 .Pow(10.ToDouble(Diameter.Text).-6)). //convert to meters double T20 = 0.80665/1000). while(dataTable2. double sb=0. int Polef. // Convert Conductor data for easy use double A = Convert. double L = 0.ToDouble(IMod.6).ToDouble(Mass.Rows[count+1]["Poles"].Rows[count]["Span Lengths"].{ Error. // double Fmod = (Convert. int count =1. // Creep double L12 = 0.Count-1) { count=rcount.//setup flag on input spans // Check all spans are in and flag if not while (rcount<dataTable2. int Poles.Text).Text)*Math.2*Convert. Rows[count]["Span Lengths"]).ToInt16(dataTable2.1).ToInt16(dataTable2. } } count = rcount. // output sags count = rcount.Wc.Coef.T20. sb = sb + Math.count++.3).k ).Diam.ToString()!="Section") 123 .T20.1.k).Rows[count+1]["Poles"].Round(Math.A.Rows[count]["Span Lengths"]).A.Imod.ToString()!="Section"&&dataTable2. count++.Sqrt(sb/sa).Diam.L12.Imod. while(dataTable2.ToDouble(EDT. // the edt for equivalent span findlimit(L.Coef.sb = 0. else { flag = false. } L = Math.Text). while(dataTable2.Pow(Convert.Rows[count+1]["Poles"].Fmod.Pow(L. count++.Fmod. // get total section length and equivalent span if(flag == true) { sa = 0.0.L12.Convert.Rows[count]["Span Lengths"].15.Wc.ToString()!="") { sa = sa + Convert. // convert to initial double iedt = ToInitial(L.2).15.//equiv span L12 = Math. 0.0.iedt.Rows[count]["Span Lengths"]).L12.Ceiling(Wc*Math.L12.Diam.15.Fmod.5.15.Fmod.Coef.15.Coef.Diam.Imod.A.Fmod.Pow(Convert. dataTable2.Pow(Convert.A.Rows[count]["35 degrees"]= Math.ToDouble(dataTable2.Rows[count]["Span Lengths"]).Rows[count]["Span Lengths"]).L12.Imod.Wc.Rows[count]["5 degrees"]= Math.Rows[count]["Span Lengths"]).T20.Fmod.Ceiling(Wc*Math.iedt.Rows[count]["20 degrees"]= Math.Diam.2)/(8*TempConvert(L.A."Initial".Ceiling(Wc*Math.0. dataTable2.0.Imod.Ceiling(TempConvert(L.0.iedt.ToDouble(dataTable2.Pow(Convert.0. dataTable2.Fmod.ToDouble(dataTable2.Wc."Initial".iedt.30.L12.Rows[count + 1]["15 degrees"]= Math.0.Ceiling(Wc*Math.Coef."Initial".Pow(Convert.Wc.k))*100)/100 . count++.0.10.Pow(Convert. dataTable2.0.iedt.Wc.k))*100)/100 .0.20.L12. dataTable2.2)/(8*TempConvert(L.2)/(8*iedt)*100)/100.Coef.0.Rows[count + 1]["10 degrees"]= Math.Imod.Coef.Rows[count]["Span Lengths"])."Initial".Wc.Coef.Diam.Imod.T20.k))*100)/100.2)/(8*TempConvert(L.Pow(Convert.Imod.Fmod.k))*100)/100 .35.5.Rows[count]["15 degrees"]= Math.15.T20. dataTable2.Rows[count]["30 degrees"]= Math.Rows[count]["25 degrees"]= Math.{ dataTable2.iedt.Ceiling(iedt*100)/100.T20. dataTable2.Imod.Rows[count + 1]["5 degrees"]= Math.Coef.T20.2)/(8*TempConvert(L.Diam.ToDouble(dataTable2.Wc.Wc.Fmod. dataTable2.A.ToDouble(dataTable2.Ceiling(Wc*Math.0.15.Rows[count]["Span Lengths"]).Ceiling(Wc*Math.0.15.Coef.L12.A.Imod.L12.iedt.k))*100)/100.T20.Fmod.ToDouble(dataTable2.Rows[count]["10 degrees"]= Math.L12.ToDouble(dataTable2.k)*100)/100.15.10.Wc.Ceiling(TempConvert(L.0."Initial"."Initial".0.Rows[count]["Span Lengths"]).2)/(8*TempConvert(L.Diam.Diam.Diam.25.A.T20.k)*100)/100.15.A.T20.Pow(Convert."Initial".A. } // output tensions dataTable2.2)/(8*TempConvert(L. 124 .Ceiling(Wc*Math.k))*100)/100 .iedt.0."Initial". Rows[count + 1]["35 degrees"]= Math.Rows[count + 3]["5 degrees"]= "Spans = ".iedt.Fmod. rcount = 0.k)*100)/100 . } } 125 ."Initial". // // OUTPUT SECTION DETAIL dataTable2.25.T20.Wc.Wc.k)*100)/100 .iedt.Ceiling(TempConvert(L.15. dataTable2.30.Diam.0. dataTable2.rcount = count.Wc.Diam. dataTable2.Rows[count + 3]["30 degrees"]= sa .Diam."Initial".Coef.iedt.Text.Fmod.15.T20.0.Imod.T20.Diam.Coef.Rows[count + 3]["15 degrees"]= "Equiv span = ".15.Rows[count + 3]["10 degrees"]= Polef-Poles.A. } catch { Error. dataTable2.iedt.Coef.0. dataTable2. dataTable2.L12.A."Initial".Rows[count + 1]["25 degrees"]= Math.0. dataTable2."Initial".Wc.A.35.Count.Rows[count + 1]["20 degrees"]= Math.Ceiling(TempConvert(L.0.Rows[count + 3]["25 degrees"]= "Length = ".A.0.L12.20.Rows[count + 3]["20 degrees"]= " " + L.Rows. }count= count +5.Ceiling(TempConvert(L.Fmod.0.0.Coef. dataTable2.".15.Ceiling(TempConvert(L.".Rows[count + 1]["30 degrees"]= Math.dataTable2.Text = "Input error.L12.Imod.Fmod. } count = dataTable2.L12.T20.Imod. dataTable2.Imod.k)*100)/100 .Rows[count + 3]["Poles"]= project.Rows[count + 3]["Span lengths"]= " Section .k)*100)/100 . dataTable2. Rows."------------------------------------------------". count++.Rows.Rows. "".Text)."------------------------------------------------".Count-1). { try { Error."-----------------------------------------------".ToInt16(poles."-----------------------------------------------".""."".RemoveAt(dataTable2.Count-1]["5 degrees"].Rows.Rows.Text). "Input span". "".""}). while (count<(Polef-Poles)) { dataTable2.Text="".public void stringupdate() //update sag and tension chart when changes to any project input is made for the current section is made.ToInt16(polef.Text)."------------------------------------------------".Rows.ToString()!="-----------------------------------------------") {dataTable2.Rows."------------------------------------------------". 126 .} dataTable2."------------------------------------------------"}).Text+(count + Poles)+"-"+(count + Poles+1)."".Add(new Object[] {"------------------------------------------------".Text). "". } int Poles= Convert. if(dataTable2.Count-1).Rows[dataTable2."------------------------------------------------". int Polef= Convert.RemoveAt(dataTable2.Count>0) { while(dataTable2.ToInt16(polef.Add(new Object[] {polep. Convert. if(Polef>Poles) { dataTable2. int count = 0. Convert. ""."-----------------------------------------------".Rows.ToInt16(poles. Add(new Object[] {"Section".Text+(Poles .Add(new Object[] {polep."-----------------------------------------------"."".""."".1).Rows."".Rows."". count++.""}). section."Spans = "."------------------------------------------------"}).""."Equiv span = ". } } dataTable2."".Add(new Object[] {"".Rows.Text." Section .} } else { dataTable2.Add(new Object[] {"". "". dataTable2. "Length = ".""."".Text.""."-----------------------------------------------". "". "".""}). "".""."".""."". while (count<(Poles-Polef)) { dataTable2.Rows."".""."".""."".""."-----------------------------------------------"."------------------------------------------------".Add(new Object[] {project.".count)+"-"+(Poles .""."------------------------------------------------".Add(new Object[] {"------------------------------------------------". } catch { Error."".Rows."". dataTable2.count .""})."".""}). "". } } public void graphupdate()// Updates the graph when the condutor is changed { 127 ."------------------------------------------------".Text = "Input error."------------------------------------------------". dataTable2.Rows."".Polef-Poles."Tension"."------------------------------------------------"."".""}).". "Input span"."". 6). 500m = 1600 int y0 = maxy.ToDouble(Area. int H40 = 0.Top = H20.// 1 m int maxs = 1000.-6)). //x 100 . 200m = 700.maxy*0. 350m = 1150.//convert into sq meters double Coef = (Convert.Color. 50m = 250.CreateGraphics(). 100m = 400.Text). double k = Convert.Text)/1000000.// max span lengths 128 . 150m = 550. // Convert Conductor data for easy use double A = Convert.ToDouble(UTS.Pow(10.ToDouble(FMod.5).ToDouble(Diameter.Text)*Math.ToDouble(Mass. //convert to m/N double Diam = (Convert.ToDouble(IMod.Pow(10.//0% int x = 0. 250m = 850.Drawing.Text)*Math.ToDouble(Creep.ToDouble(Coefficient.6)).2*Convert. // setup labels int H20 = Convert.Text)*9. label10. 450m = 1450.//0% int y1 = 0.60.80665/1000). 400m = 1300.Text)/1000). // double Imod = Convert. 300m = 1000. // Creep //y max .Text)*Math.Pow(10.try { Graphics g = pictureBox2. 20 % = 310 int maxy = pictureBox2. // double Wc = (Convert. label9.White).900 0m = 100.Clear(System.Top = H40. // double Fmod = (Convert.Height + 60.Text)/1000000.ToInt32(maxy . g. //convert to meters double T20 = 0. if (CLB.A. pointArray3).Diam. } catch { emsg.Red.k).Math.new Point(2*(x-1+incr).T20. y1 = Convert.Drawing.2). } g.int incr = 1.Imod.Ceiling(maxy .k).incr = 10. maxs= 200.DrawCurve(System. { if(CLB.Wc.2).y1)}. findlimit(x.Pens. } } public void satupdate() //update sag and tension chart when changes to any variable is made.Pow(x. Point []pointArray3 = {new Point(2*(x-1).2*Convert. g. x = 200.Diam. x = x + incr.T20.y0).5/0.ToInt32(EDT.Fmod.Imod.Math.Text = "Select a conductor.SelectedIndex!=-1) // check to see if a cable is selected { 129 .Text)/Convert.Text=="35 ABC") {x = 0.Text=="LV Bundle")// LV Bundle does not work with same accuracy and does not get strung so far.Text))).ToInt32(UTS.A. // increment if (CTLB.1.Coef.Dispose().".Wc.Fmod.ToInt32(Math. y0 =y1.} else {x = 0.} while(x < maxs) { findlimit(x.incr = 10.Coef.Pow(x. maxs= 200.maxy*0.1. LimError.Text = ""; try { // put selected conductor into cond // Conductor cond = new Conductor(); // cond.Name(CLB.SelectedItem.ToString());//Load the name // get SAT Chart variables for selected conductor (defaults of 20 to 300 m (20 m) -5 to 60 deg (5 deg)) dataTable1.Clear(); double tmini = Convert.ToDouble(tmin.Text); double tmaxi = Convert.ToDouble(tmax.Text); double tinci = Convert.ToDouble(tinc.Text); double lmini = Convert.ToDouble(lmin.Text); double lmaxi = Convert.ToDouble(lmax.Text); double linci = Convert.ToDouble(linc.Text); double iten = 0; double ften = 0; int worst = 0; double edt = 0; double IEDT = 0; //initial conditions double L = lmini; double t2 = Convert.ToDouble(tmin.Text) ; //int ct =15;// set temperature at which creep conversions are done at 15 deg. // Convert Conductor data for easy use double A = Convert.ToDouble(Area.Text)/1000000;//convert into sq meters double Coef = (Convert.ToDouble(Coefficient.Text)*Math.Pow(10,-6)); // double Imod = Convert.ToDouble(IMod.Text)*Math.Pow(10,6); // 130 double Fmod = (Convert.ToDouble(FMod.Text)*Math.Pow(10,6)); // double Wc = (Convert.ToDouble(Mass.Text)*9.80665/1000); //convert to m/N double Diam = (Convert.ToDouble(Diameter.Text)/1000); //convert to meters double T20 = 0.2*Convert.ToDouble(UTS.Text); double k = Convert.ToDouble(Creep.Text)/1000000; // Creep double L12 = 0; // // // while (L<=lmaxi) { L12 = Math.Pow(L,1.2); worst = 0; worst = findlimit(L,A,Coef,Imod,Fmod,Wc,Diam,T20,L12,k ); //Convert EDT into IEDT IEDT = ToInitial(L,15,0,Convert.ToDouble(EDT.Text),15,A,Coef,Imod,Fmod,Wc,Diam,T20,L12,k); edt = Convert.ToDouble(EDT.Text); dataTable1.Rows.Add(new Object[] {"EDT = ",edt," "," "," ", " "}); // // // //If you want add a column use e.g for comments column: dataTable1.Columns.Add("Comments", typeof(double));//to add an optional column for say %uts etc //Output Limiting weather cases //wind ften =TempConvert(L,15,0,edt,Convert.ToDouble(Wt2.Text),(Convert.ToDouble(Ww2.Text)*0.6*Diam),"Final",A,Coef,Imod,Fmod,Wc,Dia m,T20,L12,k); 131 iten =TempConvert(L,15,0,IEDT,Convert.ToDouble(Wt3.Text),(Convert.ToDouble(Ww3.Text)*0.6*Diam),"Initial",A,Coef,Imod,Fmod,Wc, Diam,T20,L12,k); if (worst == 1) dataTable1.Rows.Add(new Object[] {"Limit = 1 ","I = "+Wt2.Text+" F = "+Wt3.Text,Math.Ceiling(iten*100)/100+" (" + Ww2.Text +" PA)",Math.Ceiling(Wc*Math.Pow(L,2)/(8*iten)*100)/100,Math.Ceiling(ften*100)/100 +" ("+ Ww3.Text +" PA)", Math.Ceiling(Wc*Math.Pow(L,2)/(8*ften)*100)/100}); if (worst == 2) dataTable1.Rows.Add(new Object[] {"Limit = 2","I = "+Wt2.Text+" F = "+Wt3.Text,"* " + Math.Ceiling(iten*100)/100+" (" + Ww2.Text +" PA)",Math.Ceiling(Wc*Math.Pow(L,2)/(8*iten)*100)/100,Math.Ceiling(ften*100)/100+" (" + Ww3.Text +" PA)", Math.Ceiling(Wc*Math.Pow(L,2)/(8*ften)*100)/100}); if (worst == 3) dataTable1.Rows.Add(new Object[] {"Limit = 3","I = "+Wt2.Text+" F = "+Wt3.Text,Math.Ceiling(iten*100)/100+" (" + Ww2.Text +" PA)", Math.Ceiling(Wc*Math.Pow(L,2)/(8*iten)*100)/100,"* " + Math.Ceiling(ften*100)/100+" (" + Ww3.Text +" PA)",Math.Ceiling(Wc*Math.Pow(L,2)/(8*ften)*100)/100}); dataTable1.Rows.Add(new Object[] {"","","","","",""}); t2 = tmini; while(t2<=tmaxi) { ften =TempConvert(L,15,0,Convert.ToDouble(EDT.Text),t2,0,"Final",A,Coef,Imod,Fmod,Wc,Diam,T20,L12,k); iten =TempConvert(L,15,0,IEDT,t2,0,"Initial",A,Coef,Imod,Fmod,Wc,Diam,T20,L12,k); if(t2.ToString() == Wt1.Text&&worst ==1&&Ini1.Text=="Final") dataTable1.Rows.Add(new Object[] {L,t2, Math.Ceiling(iten*100)/100,Math.Ceiling(Wc*Math.Pow(L,2)/(8*iten)*100)/100,"*"+Math.Ceiling(ften*100)/100 , Math.Ceiling(Wc*Math.Pow(L,2)/(8*ften)*100)/100}); 132 else if(t2.ToString() == Wt1.Text&&worst ==1&&Ini1.Text=="Initial") dataTable1.Rows.Add(new Object[] {L,t2, "*"+ Math.Ceiling(iten*100)/100,Math.Ceiling(Wc*Math.Pow(L,2)/(8*iten)*100)/100,Math.Ceiling(ften*100)/100 , Math.Ceiling(Wc*Math.Pow(L,2)/(8*ften)*100)/100}); else dataTable1.Rows.Add(new Object[] {L,t2, Math.Ceiling(iten*100)/100,Math.Ceiling(Wc*Math.Pow(L,2)/(8*iten)*100)/100,Math.Ceiling(ften*100)/100 , Math.Ceiling(Wc*Math.Pow(L,2)/(8*ften)*100)/100}); t2 = t2 + tinci; } dataTable1.Rows.Add(new Object[] {"","", "", "", "", ""}); L=L+linci; } } catch {LimError.Text = "Input error";} } } public void clearance()// Updates the clearance calculator page when changes to any variable is made. { try { // Convert Conductor data for easy use double area = Convert.ToDouble(Area.Text)/1000000;//convert into sq meters double Coef = (Convert.ToDouble(Coefficient.Text)*Math.Pow(10,-6)); // double Imod = Convert.ToDouble(IMod.Text)*Math.Pow(10,6); // double Fmod = (Convert.ToDouble(FMod.Text)*Math.Pow(10,6)); // double Diam = (Convert.ToDouble(Diameter.Text)/1000); //convert to meters 133 double T20 = 0.2*Convert.ToDouble(UTS.Text); double k = Convert.ToDouble(Creep.Text)/1000000; // Creep double L = Convert.ToDouble(ESpan.Text); double HA = Convert.ToDouble(AttachA.Text); double A = Convert.ToDouble(GroundA.Text); double O = Convert.ToDouble(GroundO.Text); double x = Convert.ToDouble(GroundDist.Text); double HO = Convert.ToDouble(HeightO.Text); double HB = Convert.ToDouble(AttachB.Text); double B = Convert.ToDouble(GroundB.Text); double Wc = Convert.ToDouble(Mass.Text)*9.80665/1000; // double x1; double tens; double HT; double L12 = Math.Pow(L,1.2); TWorst.Text = ""; findlimit(L,area,Coef,Imod,Fmod,Wc,Diam,T20,Math.Pow(L,1.2),k); if (IF.Text=="Final") tens= Convert.ToDouble(EDT.Text); else tens= ToInitial(L,15,0,Convert.ToDouble(EDT.Text),15,area,Coef,Imod,Fmod,Wc,Diam,T20,L12,k); double T = Convert.ToDouble(Math.Round(TempConvert(L,15,0,tens,Convert.ToDouble(condtemp.Text),0,IF.Text,area,Coef,Imod,Fmod,Wc,Diam, T20,L12,k ),2));//tension at higher support double D = Wc*L*L/(8*T); bool flag = false; // Swop a and b if b higher than a if((HB+B)>(HA+A)) { flag = true; 134 if((1-(H/(4*D)))<0) { nclearance. x = L-x. 135 . } if( Math. } else { x1 = (L/2)+(T*H/(Wc*L)). D1 =HT/Wc*(Math.Round((HA+A-D1-HO-O).3)>=0) Worst. Worst.Abs((HA+A) .Pow(Wc*x1.Math.//Sag check to see if accurate base max tension to horizontal double x11 = L/2+HT*H/(Wc*L).Round((HA+A-D1-HO-O). while(Math.//Sag check to see if accurate base max tension to horizontal x11 = L/2+HT*H/(Wc*L).double H1 = HA.Text = "Uplift case" . TWorst.Cosh(Wc*x1/HT)-1).Abs(x11-x1)/L>0.//converting to horizontal tension double D1 =HT/Wc*(Math.Text = "Uplift case" .1)//1 % of length accuracy { //check x1 x1 = x11.3)).ToString(Math. B = G1. A = B.2)/(2*T).. } double H = Math.Text ="0". //worst distance from Pole A HT = T . double G1 = A .(HB+B)).Cosh(Wc*x1/HT)-1). HB = H1.Text = Convert. HA = HB. 3)).ToString(Math. if (x==L) { if(flag) nclearance. Worst.Text=Convert.Text = Convert.3)).ToString(Math.Text = Convert. 136 .ToString(Math.Round((HA+A-(HO+O)).ToString(Math. nclearance.Round(HT*Math.Round(10*Math. else nclearance.Round((HB+B-(HO+O)).Text = "Worst case clearance Violation".Cosh(Wc*(x11)/HT))).Cosh(Wc*(L-x11)/HT))).3)).Round((L-x11).Text = Convert.Abs(x11-x).Round(x11. TensionA.ToString(Math.ToString(Math.Round(HT*Math.Text=Convert. } // Now work out difference between this sag and that of object double Xsag= Math.Round((HA+A-D1-HO-O).Round(10*Math. //get distance from object to low point of catenary double Dsag= HT/Wc*(Math. TensionB.Round(HT)).Text = Convert.Text=Convert.3))/10).ToString(Math.ToString(Math.Text)+Dsag))/100). } if(flag)//B is higher than A { DWorst.ToString(Math.Cosh(Wc*(L-x11)/HT))).ToDouble(Worst.else { TWorst. } else { DWorst.Round(HT*Math. TensionA.3))/10).Cosh(Wc*(x11)/HT))). TensionB.Text = Convert.Text = Convert.ToString(Math.Cosh(Wc*Xsag/HT)-1).Text = Convert.Round(HT*Math.ToString(Math. Tension.Text = Convert.Round(100*(Convert. Text!=""&&GroundA.Text = "Are inputs correct?".Text!=""&&AttachA.Text!=""&&HeightO. 137 .Text)<0) { TWorst.Text!=""&&GroundB.Clear(System.Text!=""&&AttachB.Text!=""&&GroundDist.Text)))).Text!=""&&GroundO.CreateGraphics().Text!=""&&GroundB. } } } catch { TWorst.Round(Convert.} if (Convert.Color.ToDouble((Math.Text!="-") { // update picture on clearance page Graphics g = pictureBox3.Text!=""&&GroundO.Text!=""&&GroundA. } } public void clpicture()// Updates the graphic on the clearance page { if(ESpan. double L = Convert.Text!=""&&GroundB.Text!=""&&CLB.Text = "Object clearance Violation".Drawing.ToDouble(nclearance. g.Text!="-"&&GroundO.ToDouble(ESpan.White). 9*xmax).DrawLine(System.//Object foot int Ox = Ax + (Convert.Brown.Width.Round(Convert.Round(Convert. //x 0 . max pole height = 80(ymax/6) leaving 400 for ground diffs int xmax = pictureBox3.Text))*ymax/32+10). 138 .ToDouble(GroundO.Convert.// Pole A x = 200 m 10 % xmax int Bx = Convert.Text))*ymax/32+10).PAa).ToInt32(0.ToInt32(Math. //Pole A attach Point POg = new Point(Ox.//Pole foot co ord y = 0 % int By = ymax .// Pole att height 10 = 60 int Bh = Convert. depends on pole lengths and ground levels.DrawLine(System.1600(xmax).8))).Round(Convert.DrawLine(System.Round(Convert.int ymax = pictureBox3.ToDouble(GroundDist. L = 1400 (xmax*0.ToDouble(AttachA.Oy).Pens.// Object height 10 = 60 Point PAg = new Point(Ax. //Pole B g. //Pole A ground Point PAa = new Point(Ax.Round(Convert.Text)/L*xmax*0.Pens.ToInt32(Math.Drawing.Text))*ymax/32+10).Text)))*ymax/32+10.Red. //Object ground Point PBa = new Point(Bx.Drawing.ToDouble(GroundA.POa).ToInt32(Math.Ay-Ah).ToDouble(GroundB.// Pole B x = 200 m 90 % xmax // Declare varaibles int Ay = ymax .ToInt32(Math.Ay). //y 480(ymax) .Text)*ymax/32)+10).ToInt32(Math.Text)*ymax/32)+10).PBa). //Object attach Point PBg = new Point(Bx.Pens.ToInt32(Math.ToInt32(0.Oy-Oh).Round(Convert. //Object g.ToInt32(Math.Round(Convert.//Pole foot co ordy = 0 % int Oy = ymax .PBg.ToDouble(AttachB.1*xmax).By-Bh).POg.// Pole att height 10 = 60 int Oh = Convert.By). //Object attach //Pole A g.Convert.Height.Brown.Drawing.// Object distance int Ah = Convert.PAg.ToDouble(HeightO. //Object ground Point POa = new Point(Ox.Convert.8) // Graph dimensions // constants int Ax = Convert.0. Text!="Clearance Violation"||DWorst.// Object height 10 = 60 } PSh = new Point(Wx .ToInt32(Math.// Object distance Wy = Oy . double columnWidth)// Copies displayed data to a file 139 .ToDouble(Tension.Text)*9.Pens.POg.Text!=""||DWorst.ToDouble(Mass.Oh.Convert. double T = Convert.Text!="Clearance Violation"||Worst.Gray.DrawCurve(System.Dispose().Green.Text)*ymax/32)). pointArray3).PSh. int Wy = Oy .PBg}. int Wx = Ax+ xmax/2. g.Round(Convert.Text!="Uplift Case"||Worst.Pens. g.// conductor Point PSh. if (Worst. } } private void ExportToText (string fileName.ToDouble(DWorst.Round(Convert. bool hasColumnHeaders. // Ground Point []pointArray3 = {PAg.ToDouble(Worst.pointArray2).80665/1000.Drawing.Text)/L*xmax*0.Text).PBa}.Wy).8))).Drawing. Point []pointArray2 = {PAa. // Draw Conductor g. //sag at 2 x worst dist get sag for normal span double Wc = Convert.Oh .DrawCurve(System.ToInt32(Math.Text!="Uplift Case"||DWorst.Text!="") { Wx = Ax + (Convert. Text+" data"). "+ CT3. "+ CT2. clipboard.AppendText(" __________________________________________________________________________________").Text +". Wind "+Ww3. Wind "+Ww1.Text + Wc2. //Print graph int pline = 0.AppendText("Temp Coeff: "+Coefficient. clipboard. hasColumnHeaders = has the data got column headers. clipboard.AppendText("C Value: "+CValue. clipboard.Text+" kg/km "). on " + Ini3.AppendText(CLB.Clear(). clipboard.Text+" "). "+ CT1.Text+" N/mm^2 ").Text+"'Cx10^-6 "). on " + Ini2. columnWidth = column width { clipboard.Text+ ". clipboard. clipboard.Text +".AppendText("RSAT 5.AppendText(" __________________________________________________________________________________"). 140 . clipboard.Text + Wc1. clipboard. clipboard.AppendText("Diameter: "+Diameter. clipboard.Text+" PA. clipboard.AppendText("Limit 2: Temperature = " + Wt2.AppendText("Limits ").Text+" PA. on " + Ini1.Text+" mm ").AppendText("Limit 1: Temperature = " + Wt1.AppendText("Final mod: "+FMod.Text+" N/mm^2 ").Text+" ").Now+" "). clipboard.Text +".Text+" mm^2 ").Text+ ".Text+ ". clipboard. clipboard.1 "+DateTime.AppendText("Mass: "+Mass.Text+" PA.// Arguments: filename = the file name to be saved to.Text+" ").Text). // Page set-up for all print functions clipboard.AppendText(" __________________________________________________________________________________"). clipboard.AppendText("Limit 3: Temperature = " + Wt3.AppendText("Area: "+Area.Text + Wc3.AppendText("Initial mod: "+IMod. Wind "+Ww2.Text+" N ").AppendText("UTS: "+UTS. ToString()+" ("). clipboard.AppendText("Temp ").ToString()+" ").AppendText(" __________________________________________________________________________________").Rows.AppendText("Span ").ToString()=="EDT = ") { clipboard.AppendText(dataTable1. clipboard. clipboard. int max = dataTable1.AppendText(dataTable1.Rows[line]["Stringing tension (N)"].AppendText(dataTable1.ToString()+" "). clipboard.AppendText(dataTable1.Rows[line]["Final tension (N)"].AppendText("Final tension ").SelectedIndex==6) { clipboard.AppendText(dataTable1. clipboard.AppendText("Final sag"). clipboard.Rows[line]["Final sag (m)"]. clipboard. clipboard.Rows[line]["Span (m)"].//print page setting for sag and tension charts if(tabControl1.ToString()+" "). clipboard.Rows[line]["Span (m)"].SelectedIndex==5||tabC ontrol1. line++.SelectedIndex==0||tabControl1.Rows[line]["Temperature ('C)"]. clipboard. while (line<max) { // format EDT and limit lines if (dataTable1.ToString()+" ").AppendText(dataTable1. clipboard.AppendText("Stringing tension ").pline++.AppendText(dataTable1.Rows[line]["Temperature ('C)"].AppendText("Stringing sag ").ToString()+") "). } // format blank line 141 .ToString()+" ").Count.AppendText(dataTable1. clipboard.SelectedIndex==4||tabControl1.Rows[line]["Span (m)"]. clipboard.Rows[line]["Stringing sag (m)"].ToString()+" ").SelectedIndex==1||tabControl1. 142 .ToString()+" ").AppendText("Poles clipboard. ").AppendText("15 degs clipboard.Rows[line]["Span (m)"]. "). ").ToString()+" ").AppendText("Sag at clipboard.AppendText(dataTable1.AppendText(dataTable1.Rows[line]["Span (m)"]. "). clipboard.Rows[line]["Temperature ('C)"].ToString()=="") clipboard. ").else { if (dataTable1.ToString()+" ").pline++.AppendText(dataTable1.Rows[line]["Final tension (N)"]. clipboard.Rows[line]["Stringing tension (N)"].SelectedIndex==2) { clipboard.AppendText("5 degs clipboard.AppendText(dataTable1. clipboard. } } if(tabControl1.AppendText("20 degs clipboard. } } line++. clipboard.Rows[line]["Stringing sag (m)"].AppendText("10 degs clipboard.Rows[line]["Final sag (m)"]. "). clipboard.AppendText("Spans clipboard.ToString()+" ").AppendText(dataTable1.AppendText(" ").ToString()+" ").AppendText(dataTable1. else { clipboard.AppendText("25 degs ").ToString()+" "). "). pline++. clipboard.Rows[line]["20 degrees"].Rows[line]["5 degrees"].Rows[line]["Poles"].Rows[line]["10 degrees"].ToString()=="------------------------------------------------") { clipboard.AppendText(dataTable2.Rows[line]["Span lengths"]. } clipboard. } } if(tabControl1.AppendText(dataTable2. clipboard.ToString()+" ").SelectedIndex==3) { 143 .AppendText(dataTable2. line++. clipboard.AppendText(dataTable2.AppendText(dataTable2.AppendText(" __________________________________________________________________________________").Rows[line]["25 degrees"]. clipboard.Rows[line]["Poles"].AppendText(dataTable2.Count.ToString()+" ").AppendText(dataTable2.Rows[line]["30 degrees"]. clipboard.AppendText(dataTable2.ToString()+" ").Rows[line]["15 degrees"].Rows[line]["Sag at"]. clipboard.Rows[line]["35 degrees"].ToString()+" ").ToString()+" ").ToString()+" "). while (line<max) { if(dataTable2. clipboard. line++.AppendText("30 degs "). clipboard.AppendText(dataTable2.ToString()+" ").AppendText(dataTable2.AppendText("35 degs "). clipboard.ToString()+" "). clipboard.clipboard. int max = dataTable2.ToString()+" ").ToString()+" ").Rows. // Data line 1 clipboard. clipboard. clipboard. clipboard.Text+" m "). clipboard. clipboard.Text+" m ").Text+" 'C ").AppendText("Worst = "+Worst.AppendText("Tension = "+TensionA.AppendText("Tension = "+TensionB. clipboard.AppendText(" __________________________________________________________________________________").Text+" m "). clipboard.AppendText("Pole A "). clipboard.AppendText(" __________________________________________________________________________________").AppendText(" __________________________________________________________________________________").AppendText("Object = "+nclearance.AppendText("Clearance ").AppendText("Worst distance = "+DWorst. clipboard. clipboard.AppendText("Ground = "+GroundO.AppendText("Attachement = "+AttachA. clipboard. clipboard.Text+" m "). 144 .Text+" N ").Text+" m "). clipboard.AppendText(" __________________________________________________________________________________").Text+" m ").Text+" m "). clipboard. clipboard.AppendText("Distance from A = "+GroundDist. clipboard. clipboard.AppendText("Ground = "+GroundA.AppendText("Object ").Text+" m ").AppendText("Attachement = "+AttachB.Text+" m ").AppendText("Span = " +ESpan.AppendText("General "). clipboard. clipboard. clipboard.Text+" N ").AppendText("Temperature = " +condtemp.Text+" m ").AppendText(" __________________________________________________________________________________").AppendText("Height = "+HeightO.AppendText("Pole B "). clipboard.AppendText("Centre Tension = " +Tension. clipboard.Text+" m ").Text+" N "). clipboard.AppendText("Ground = "+GroundB. clipboard. 145 .Text="try again".} } clipboard. { int bot = tabControl1. if(tabControl1. Error.SelectedIndex==1) satupdate(). //update picture } } public void screensize() //update size of the form based on screen resolution.SelectedIndex==0) { try {graphupdate().} } if(tabControl1.EventArgs e) //update tab based on selection. 2.Select conductor.} catch {Error. // Arguments: capture the selected tab { if(tabControl1. public void tabupdate(object sender.SelectedIndex==3) { clearance().Bottom.SelectedIndex==2) { equivspan().Input project data.SaveFile(fileName).".Replace 'Input span' with span lengths. 3. clpicture().Text = "1. } if(tabControl1. System. Width + label76. //EDT.//64*rit/factor.Width+ 12.Left = label35.Width =label80.Width = IMod. label78.Left = FMod.Width + label73.Width + label73.Width + label73.Width + EDT.Left = offset + label28.Width = Area.Width = 78*rit/factor.Left = label6. } /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { 146 .Text = rit.Left =label76.Width = label29.Width + label73.Width + label6.Left =label80. label79. EDT.Width.Width + EDT.Width = label31.Width = FMod.Width + picture.Width = label39.Width = 80*rit/factor.Left = Area.Left =label73.Width + label73.Width = label35.Left = Diameter.Width =label77.Left =label77.Width =label76. Mass.Width + EDT.Width = CValue.Width + FMod.Left = IMod. //label78.Width = 70.Width + FMod.Left = label39.Width + label76.Left = Coefficient. label28.Width.Width + label6. int offset =300.Width + EDT.Width + 5. //UTS.Left =label75.Width + FMod. image.Width + label6.Width = label6. Mass. image.Width.Left =label74.Left =label81.Left = offset + label28.Width.Left = offset + label28.Width =label74.Width = Coefficient. int factor = 450.int rit = tabControl1.Width + label6. EDT.Width + EDT.Width = offset + label28.Width.Left = offset + label28.ToString().Text = bot.Width = UTS.Width = label34.ToString().Width = 58*rit/factor.Left = label34.Right.Width =label73. //label79.Width = label30.Width =label75.Width = 75*rit/factor.Left = CValue.Left = UTS.Left = offset + label28.Width = 70.Width + EDT.Width = Diameter.Width = label32.Width =label81. panel1. picture.Left = offset + label28. menuItem11 = new System.Windows.menuItem4 = new System. this.MenuItem().Container().menuItem14 = new System.ComponentModel.Label().Windows.label1 = new System. this. /// </summary> private void InitializeComponent() { this. 147 .Forms.menuItem15 = new System.Resources.Configuration.MenuItem().MenuItem().Forms.Forms.Dispose( disposing ).Forms.menuItem29 = new System.MenuItem().Windows.Windows.Forms. } } base. this.do not modify /// the contents of this method with the code editor.Forms.Windows.Forms.menuItem18 = new System.Windows.Forms.menuItem21 = new System. this.Configuration.Windows.Forms.components. } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support . this.ResourceManager resources = new System. System.Print = new System.Forms. this.PrintPreview = new System.MenuItem().Dispose().menuItem9 = new System. this.menuItem10 = new System.Windows.Resources.Windows.mainMenu1 = new System. this.MenuItem().Windows.Windows.AppSettingsReader().Windows. this.menuItem1 = new System.Windows.MenuItem().components = new System. this.Forms.MenuItem().Windows. this.Windows.menuItem3 = new System.Forms.MenuItem().Forms.ResourceManager(typeof(MainView)).MenuItem(). this.MenuItem(). System. this.Forms.Forms. this.MenuItem().MenuItem().AppSettingsReader configurationAppSettings = new System. this.MainMenu(). Label(). this.ImageList(this. 148 .tabPage1 = new System.Forms.Forms. this.Label().CTLB = new System.Label().Windows.TabPage().Forms.label7 = new System. this.label2 = new System.Forms.label11 = new System. this.Windows.toolBarButton2 = new System.Windows. this.toolBarButton6 = new System.Forms. this. this.label88 = new System.Windows.Forms.ToolBarButton().Windows.label17 = new System. this.Windows.Windows.Forms.Windows.Windows.Forms.Windows.Label().ToolBarButton(). this. this.Forms.Label().label15 = new System.Label().this. this.toolBar1 = new System. this.Windows.Forms. this.Label().Windows.Forms. this. this. this.Windows.Label().imageList1 = new System.Forms.Forms.toolBarButton8 = new System.ToolBarButton().ListBox().Windows.Label().StatusBar().Label().Forms.Windows.MenuItem().TabControl().Windows. this.Windows.pictureBox2 = new System.Forms.ToolBar().Label(). this. this.statusBar1 = new System.Forms.Label().Windows.Windows.label16 = new System.Forms. this. this. this.emsg = new System.Windows.Forms.Windows.Forms.Forms.components).label14 = new System.Label().label24 = new System. this.label13 = new System.Windows. this. this.Forms.Windows.toolBarButton4 = new System.Windows.Forms.label3 = new System.ListBox().menuItem16 = new System.CLB = new System.Forms.Forms.ToolBarButton().Forms.label87 = new System.Forms.toolBarButton3 = new System.Forms.Windows.Forms.tabControl1 = new System.Forms.ToolBarButton().PictureBox(). this.Windows.label6 = new System.label8 = new System.Windows.Forms.Windows. this.Windows.Windows. this. this.toolBarButton7 = new System.ToolBarButton().Label().Windows.Forms.Label().Label(). this.label25 = new System. Forms.Windows. this.DataColumn().DataColumn(). this.DataColumn(). this. this.DataColumn().dataColumn3 = new System.Forms.Forms.Data. this.RichTextBox(). this.Button().Label().dataGrid2 = new System.Data. this. 149 . this.Forms.label10 = new System.dataTable2 = new System.DataColumn().tabPage3 = new System.dataColumn12 = new System.DataTable().DataColumn().Forms.label9 = new System.DataColumn().Data.calculate = new System.Forms. this. this.DataTable().dataColumn10 = new System.DataGrid().DataColumn().Label().Windows.Forms.Data.dataColumn9 = new System. this.Windows.Data. this.DataColumn().dataColumn4 = new System.Forms. this.dataGrid1 = new System.dataColumn11 = new System.Data. this. this.Label().Data.DataColumn().label99 = new System.Data.dataColumn8 = new System. this. this. this.Button().dataColumn5 = new System. this.clipboard = new System.button1 = new System. this. this.Label().dataColumn1 = new System.DataGrid().Windows.tabPage2 = new System.Data. this. this.Windows.dataColumn15 = new System.Windows.Data.Windows.Data.Label().Forms.dataColumn2 = new System.Error = new System.DataColumn().dataColumn13 = new System.Forms.dataColumn16 = new System.Windows.Data.Data.Data. this.DataColumn().Data.dataTable1 = new System.DataColumn(). this.Data.Windows.Windows.DataColumn().Forms. this.label86 = new System.TabPage(). this.TabPage().dataColumn7 = new System. this.Windows.Button().nsection = new System.Windows.Forms.dataColumn6 = new System.Data.Data.Windows. this.DataColumn(). this.DataColumn().dataColumn14 = new System.this.Forms. Windows.Label().Forms.Windows.TextBox().Windows.Forms.Windows.Forms.Forms.TextBox().label107 = new System.label4 = new System.Forms.Windows.Label().label105 = new System.Windows. this.Windows.TextBox().Label().Forms. this.label67 = new System.Forms.Windows.Windows.Label(). this.Label().Windows.this.condtemp = new System.label97 = new System.label109 = new System.Windows.polef = new System.label83 = new System. this.Label().Forms.section = new System.Forms.Windows.TextBox().Windows. this.GroundB = new System.Tension = new System. this.Forms.Forms.label37 = new System.TextBox(). this.Forms.Windows.nclearance = new System.Forms. this.Label(). this.TextBox().Label().TextBox(). this.Windows.Forms.label82 = new System. this.Forms.Forms.Windows. this.label85 = new System. this. this. this.TensionB = new System.TensionA = new System. this.Windows.Windows.Forms.Windows. this. this.Label().label66 = new System.Forms.TextBox(). this.Forms.tabPage4 = new System.Forms.project = new System.Label(). this.label104 = new System.Windows.label106 = new System.Windows. this.Forms.Forms.Windows.Worst = new System. this.Windows.Label().label26 = new System.Windows.Label().label108 = new System.TextBox().Label().poles = new System.Forms.Forms.TextBox(). this.Label().TextBox().Label().Forms.Forms.TextBox().Forms.TextBox().Forms. this. this. this.label36 = new System.Windows.TabPage(). this. this.Windows.Windows.Forms.Forms.Windows.Windows. this.polep = new System. this.Label(). 150 .Forms.AttachB = new System.Windows.Windows.label84 = new System.Label(). Windows.Forms.Label().Forms.Forms.Windows.TextBox().Windows.label12 = new System.Forms.Windows.Forms.Label().label89 = new System.Windows.Forms. this.label98 = new System.Windows.Label().AttachA = new System. this. this. this.Windows.Forms.Forms. this.TextBox().Forms.label21 = new System.Windows.Windows.Forms.Label().Label().Label().tmax = new System. this.label94 = new System.Windows. this. this.Windows.Forms.label90 = new System.Forms.TWorst = new System.label20 = new System.Label().DWorst = new System.Windows. this.label19 = new System.Windows. this.Windows. this.GroundA = new System.tabPage6 = new System.HeightO = new System. 151 .Forms.Forms.Windows. this.Forms.Label().Label().Forms.Forms.label22 = new System.pictureBox3 = new System.Label(). this.Label().Windows.Label(). this. this.label27 = new System.Windows.TextBox(). this. this.Windows.Windows.Label(). this.Windows.Forms.Label().label91 = new System.label23 = new System.Forms.TextBox().label93 = new System.Windows.label96 = new System.TextBox().label102 = new System.ComboBox().Label().Label().TextBox(). this.Label().IF = new System.lmin = new System.TextBox().Forms.PictureBox().Forms. this.GroundO = new System. this.TextBox().label95 = new System. this. this. this. this.Windows.Windows.Windows. this.Windows. this.Label().Forms.Windows.Forms.Windows. this.Forms.Label(). this.Forms.Forms.Forms. this.Forms.label92 = new System.ESpan = new System.TextBox().TabPage().Windows.Windows.Forms.label18 = new System.GroundDist = new System.Windows.Forms.Forms.this.Windows. Windows.label65 = new System. this.Forms.label63 = new System.Label().Forms.Ww3 = new System.label60 = new System.Windows.TextBox().Windows.Label().ComboBox().Label().Ww2 = new System.Windows.label56 = new System.Label(). this. this.Forms.Windows.Forms. this.ComboBox().Label().Label().Windows.Forms.Windows. this.Forms.Forms.Windows.Forms.Ini3 = new System. this. this.Label().label52 = new System. this.Label().Windows. this. this.Wt3 = new System. this. this.Forms.Forms.lmax = new System.Windows.Button().Windows.Windows.TextBox().Ini1 = new System.TextBox(). this.Forms.label49 = new System.Forms.Forms.Windows.label64 = new System.Label().Forms.Windows.Windows.ComboBox(). this. this.Windows. this. this.CT3 = new System.Windows.Windows. this.Label().Windows.Forms.label53 = new System.Ini2 = new System.Defaults = new System.ComboBox().label61 = new System.Creep = new System.TextBox().Label().Label().Forms.Forms. this. 152 .label62 = new System.Label().label55 = new System. this.Forms.Label(). this. this.Windows.Windows.label59 = new System.Windows.Windows.Forms.Windows.TextBox().Wc3 = new System. this.label58 = new System.Windows.Forms.Forms.Windows.Windows.Label().CT2 = new System. this.label5 = new System.label54 = new System.Windows.ComboBox().this.Forms. this.Forms.Label().label51 = new System. this.Forms.Forms.Label().label57 = new System.Forms.Forms.TextBox().Label().Forms.Forms. this.Forms. this.Wc2 = new System. this.Windows. this.LimError = new System.Forms.Windows.Windows.TextBox(). Forms.RichTextBox(). this.linc = new System.Label().Data.TabPage().tmin = new System. this.Windows. this.label41 = new System. this.Forms.Wc1 = new System.tinc = new System.FMod = new System.dataView1 = new System.Windows. this.Label().Forms.label42 = new System.Windows. this. this.Windows.TextBox().Ww1 = new System.Windows.label48 = new System.TextBox().TextBox(). this.Windows.Forms.Label(). this.Windows.CT1 = new System.Label().Forms.label40 = new System.label44 = new System.label43 = new System.Windows.Forms.Windows. this.Forms.Windows.Windows.Data.Forms. this.Mass = new System.Windows.Windows.Label().Windows.TextBox().Windows.Wt1 = new System.Forms. this. this.Forms.Windows. this. this.Forms. this.Forms.Forms. this.Label().TextBox().Windows.tabPage7 = new System.Label().Label().Windows.Forms.Windows. this.Forms.TextBox(). this.Forms.Forms. this.ListBox().TextBox().TextBox().Forms.Windows.pictureBox1 = new System.RichTextBox(). this.Forms. this.Forms.Area = new System.Windows.tabPage5 = new System.label47 = new System. this.Forms. this.helpindex = new System.TextBox(). 153 .label50 = new System.IMod = new System. this.Forms.Windows. this.Forms. this.Label().richTextBox1 = new System.TextBox().Windows.Forms.Windows.TabPage().Forms.label45 = new System.Wt2 = new System.Windows.Windows.TextBox().Forms. this.Forms.Windows.Forms.Windows. this.Windows.Label().label46 = new System.label33 = new System.ComboBox().Label().DataSet().SagAndTension = new System.this.Helptext = new System.PictureBox().Forms.DataView(). this. Forms.Windows.Windows.CValue = new System.Forms. this.Forms.Windows.Windows.TextBox().Windows.saveFileDialog1 = new System.openFileDialog1 = new System.label31 = new System. this.Diameter = new System.Windows.Clabel = new System. this.Forms.Windows.Windows. this.Label().Windows. this.Windows. this.TextBox().Label(). this. this.Forms.Forms. this.Forms.label74 = new System.Windows.label78 = new System.Windows. this. this.Windows.Windows.label73 = new System.Windows.Windows.TextBox().picture = new System.Label().ncreep = new System.OpenFileDialog().Forms. this. this.Label().Cancel = new System.Windows.TextBox().this.Forms.Windows. this. this.TextBox(). 154 .label30 = new System. this.label79 = new System.Windows.Label().label75 = new System.Forms.image = new System.label32 = new System. this.Forms.Coefficient = new System.Label(). this. this. this.Label().Windows.Windows.Label().EDT = new System.Forms.Button().Windows.Save = new System.Windows. this.Forms.ncond = new System.Windows.Label().TextBox(). this.Forms.Forms.Label().Label().Forms. this.Label().Forms.Forms.Label(). this.Windows.SaveFileDialog().label34 = new System.Windows.Windows.Windows.label35 = new System.Forms.PictureBox(). this.TextBox().Label().Forms.UTS = new System.Forms.Forms.Label().Label().Forms.label80 = new System. this.label28 = new System. this.Windows.label76 = new System.Label(). this.Forms. this.TextBox().Windows.Forms.ntype = new System.Windows.Forms.Forms.label29 = new System.label77 = new System.Button(). this.Forms.Forms.Forms.label39 = new System.Forms.TextBox(). SuspendLayout().Forms. System.Font("Monotype Corsiva". ((System.BackColor = System.dataGrid1)).BeginInit().ISupportInitialize)(this.Point(-10.Location = new System.dataTable2)).ISupportInitialize)(this.dataGrid2)).panel1 = new System. this. // // label1 // this.Drawing.label81 = new System.Drawing.Forms.tabControl1. ((System.ComponentModel.dataView1)). this.SystemColors.GraphicsUnit.Windows.tabPage2.Windows.label68 = new System.SuspendLayout().Label().BeginInit(). this.Size(2400.SuspendLayout().BeginInit().Drawing. this.FontStyle.tabPage5.BeginInit().Point. ((System.dataTable1)). this.PrintDocument(). this.SuspendLayout().SuspendLayout().Italic.label1.Label().Printing.tabPage1.SuspendLayout().ISupportInitialize)(this.ISupportInitialize)(this.Forms.ComponentModel. 15F.SagAndTension)).Panel().Drawing.ForeColor = System. this.Drawing.ComponentModel.Name = "label1".SuspendLayout().Transparent.label1.label1. this.PrintPreviewDialog().Forms. this.ISupportInitialize)(this.BeginInit().tabPage7.Label().HotTrack.Forms.Drawing.tabPage3.suggest = new System. ((System.label1.tabPage4. ((System. 1154). 155 . System. ((System. this.Windows.ISupportInitialize)(this. this. ((System.printDocument1 = new System. this. -37).Font = new System.Byte)(0))). this. this. this.Windows. this.tabPage6.label1.Windows.Drawing.Size = new System.SuspendLayout(). this.label1.Drawing.printPreviewDialog1 = new System. this.ComponentModel.this.SuspendLayout(). this.ComponentModel.ComponentModel.Color.BeginInit(). label1.TabIndex = 0.Text = "RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + 156 .this. this.label1. "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + 157 . "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + 158 . this.menuItem1. this.menuItem18. this.Forms.PrintPreview. this.Text = "&File".MenuItem[] { this.MenuItems.Enabled = false.AddRange(new System.Text = "&Save".menuItem1. // // menuItem1 // this. this. this.AddRange(new System.MenuItems.menuItem9.menuItem21. this.menuItem10}).Windows.Index = 0. this.menuItem3. this. this.menuItem3.Windows. 159 . this.menuItem16}). // // menuItem3 // this.Index = 0. this.menuItem3.Forms.menuItem4. this.menuItem11.MenuItem[] { this.menuItem1.Print.menuItem1. this. // // mainMenu1 // this."SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "SAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT RSAT R" + "".menuItem14.menuItem3.mainMenu1. menuItem10_Click).EventHandler(this.this.Print.PrintPreview.Click += new System.Print.Click += new System.menuItem9.PrintPreview.Text = "E&xit".menuItem10.Index = 5.Click += new System. this.Index = 1.Text = "&Print".menuItem10.menuItem3_Click). // // menuItem9 // this.Text = "-".Print. this.Index = 2.menuItem4. // // menuItem11 160 .EventHandler(this. this.Index = 4.EventHandler(this. // // menuItem4 // this.Index = 3.Text = "Print Pre&view".menuItem9. this.EventHandler(this. // // Print // this.menuItem10. this. this.Click += new System.PrintPreview. this.menuItem4.menuItem3. // // PrintPreview // this. // // menuItem10 // this.Text = "-".PrintPreview_Click). this.Print_Click). // this. this.MenuItems.Index = 1.Text = "&Edit".Click += new System. this. // // menuItem21 // this. // // menuItem15 // this.Index = 3.Text = "&Project".menuItem14. // // menuItem14 // this.menuItem29.menuItem29.MenuItems.menuItem11. this. this.Click += new System.menuItem21.AddRange(new System.menuItem14. this.menuItem29_Click).MenuItem[] { this.EventHandler(this. // // menuItem29 // this.menuItem11.EventHandler(this.Windows. this.menuItem15.MenuItem[] { this.menuItem15_Click).AddRange(new System.menuItem21.Forms.Index = 0.menuItem14_Click). this.menuItem15.menuItem11. this.Windows.Text = "&New".Text = "&Spans/Temperatures/Limit".menuItem29.menuItem21. this. // 161 .menuItem15.Index = 0.EventHandler(this.Forms.Text = "&Conductor".menuItem29}). this.Click += new System.Index = 2.menuItem14.menuItem15}). // menuItem18 // this.Size = new System.InactiveCaptionText.menuItem16.CTLB. this.Index = 5. this. this.Text = "About".TypeBox_SelectedIndexChanged).SelectedIndexChanged += new System.ItemHeight = 25.Byte)(0))). System.Drawing.TabIndex = 0.Click += new System.SystemColors. // // CTLB // this.menuItem18.Drawing.Point.Font("Microsoft Sans Serif".GraphicsUnit.menuItem16.WindowText.menuItem16_Click). this.GraphicsUnit.menuItem18.EventHandler(this. this. 62).Click += new System. 12. 162 .Font = new System.menuItem18_Click).Drawing.CTLB.CTLB.Point(1.Drawing.ControlText. this.SystemColors.CTLB.CTLB. this.Regular. System.Name = "CTLB".Point.label2.75F.Drawing. ((System.Text = "&Help".75F.CTLB.CTLB.Byte)(0))).CTLB.Point(1.Location = new System. this.EventHandler(this.Size(168. System.Location = new System. 12.CTLB.Bold.EventHandler(this. 35).FontStyle.Drawing.BackColor = System.label2. this. this.Drawing.Drawing. ((System. System.menuItem16.label2. 129).Drawing.ForeColor = System.SystemColors. this.ForeColor = System. // // label2 // this.Drawing.Drawing.Font("Microsoft Sans Serif".FontStyle. this. this.Drawing. // // menuItem16 // this.menuItem18. this.Index = 4.Font = new System. SystemColors. this.InactiveCaptionText. this.Size(210. // // label3 // this.Drawing.CLB.ControlText.label3.Drawing. this.Drawing.75F.SelectedIndexChanged += new System. this.Drawing.label3.Location = new System.SystemColors.Text = "Conductor".this.CLB.ForeColor = System.Name = "label2".Location = new System. ((System.Drawing.Point. this.ForeColor = System.SystemColors.Point(169. 129). // // label6 // 163 .CLB.CLB.TabIndex = 2. System.Font = new System. this.Drawing. System.Byte)(0))). this.label3.CLB.Size(638.CLB.TabIndex = 1.Font("Microsoft Sans Serif". 27).label2.Drawing.Size(192.label2.CLB. System.Drawing. this.WindowText.BackColor = System.Drawing.Font("Microsoft Sans Serif". this.FontStyle.Text = "Type". ((System.Drawing.Point(182.Drawing.Name = "CLB".75F. this.Font = new System.FontStyle.Point.Byte)(0))). this.Size = new System. this.Drawing. 35).label3.label2.Regular.Size = new System. this. this. 12.TabIndex = 3.Drawing. this. this.Drawing.label2. 27).GraphicsUnit.Bold.ItemHeight = 25.Name = "label3". this. 12. 62).CLB.label3. System.CLB.GraphicsUnit.CLB_SelectedIndexChanged).Size = new System.label3.label3.EventHandler(this. // // CLB // this. this. // // statusBar1 // this.statusBar1.No. this.Forms. 432). this.Drawing.TabIndex = 13.Byte)(0))). this. System. 36). // // toolBar1 // this. this. System.Regular.Drawing.Drawing.Location = new System.AddRange(new System.Font("Microsoft Sans Serif".2F.Drawing.Size = new System. 164 .Drawing.Size(104.BorderStyle = System. System.TabIndex = 14.GraphicsUnit.statusBar1. this.toolBar1.Windows.Forms. 26). 27).Font = new System. this. this.Drawing.Fixed3D.Windows.Size = new System.Text = "Mass".Font("Microsoft Sans Serif".toolBarButton8}).BorderStyle.Drawing.label6.label6. this. System.this. ((System.Name = "statusBar1".Drawing.Point(578.ControlText.ForeColor = System.Size(944.Point. this. 10. this.label6.FontStyle.label6.label6.toolBarButton3.Location = new System.Point. ((System.GraphicsUnit. this. 12.RightToLeft.Fixed3D.Font = new System.toolBarButton7.BorderStyle.RightToLeft = System.SystemColors.label6.toolBar1.Drawing.Buttons.Drawing.FontStyle.label6.DropDownArrows = true. this.toolBarButton6.75F.Windows.Byte)(0))). this. this.Forms.statusBar1.toolBarButton4.label6.Windows.statusBar1.BorderStyle = System.Drawing.label6. this.ToolBarButton[] { this. this.Name = "label6". this.toolBar1.Forms.statusBar1. this.Point(0.toolBarButton2.Bold. toolBarButton6.ButtonClick += new System.Drawing.TabIndex = 15.Enabled = false. // // toolBarButton6 // this.GetValue("toolBarButton4.Location = new System. this. // // toolBarButton4 // this.Forms.toolBarButton2. this. this. this.toolBar1.toolBar1.ImageIndex = 8. this.this. this.Point(0.Size = new System.Name = "toolBar1". this.toolBarButton6.toolBar1_ButtonClick). 30). typeof(bool)))).Size(944.Pushed". this.toolBar1. 0).ToolTipText = "Print Preview".toolBarButton4.toolBar1.Windows. this. // // toolBarButton3 // this.ImageIndex = 7.imageList1.toolBar1.ToolBarButtonClickEventHandler(this.toolBarButton3.ToolTipText = "Print".ToolTipText = "Save". this.Drawing.toolBarButton2.toolBar1. this.ToolTipText = "Limits". // // toolBarButton2 // this.toolBarButton2.ShowToolTips = true.toolBarButton3. this.toolBar1.toolBarButton4. // // toolBarButton7 165 .ImageList = this.ImageIndex = 10.Pushed = ((bool)(configurationAppSettings.toolBarButton4.ImageIndex = 15. // this.toolBarButton7.ImageIndex = 21; this.toolBarButton7.Pushed = ((bool)(configurationAppSettings.GetValue("toolBarButton7.Pushed", typeof(bool)))); this.toolBarButton7.ToolTipText = "Create conductor "; // // toolBarButton8 // this.toolBarButton8.ImageIndex = 0; this.toolBarButton8.ToolTipText = "Help"; // // imageList1 // this.imageList1.ImageSize = new System.Drawing.Size(16, 16); this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); this.imageList1.TransparentColor = System.Drawing.Color.Transparent; // // tabControl1 // this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tabControl1.Controls.Add(this.tabPage1); this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage3); this.tabControl1.Controls.Add(this.tabPage4); this.tabControl1.Controls.Add(this.tabPage6); this.tabControl1.Controls.Add(this.tabPage5); this.tabControl1.Controls.Add(this.tabPage7); 166 this.tabControl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.tabControl1.Location = new System.Drawing.Point(8, 185); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; this.tabControl1.Size = new System.Drawing.Size(916, 231); this.tabControl1.TabIndex = 2; this.tabControl1.Click += new System.EventHandler(this.tabupdate); // // tabPage1 // this.tabPage1.Controls.Add(this.emsg); this.tabPage1.Controls.Add(this.label7); this.tabPage1.Controls.Add(this.label88); this.tabPage1.Controls.Add(this.label25); this.tabPage1.Controls.Add(this.label24); this.tabPage1.Controls.Add(this.label87); this.tabPage1.Controls.Add(this.pictureBox2); this.tabPage1.Controls.Add(this.label17); this.tabPage1.Controls.Add(this.label16); this.tabPage1.Controls.Add(this.label15); this.tabPage1.Controls.Add(this.label14); this.tabPage1.Controls.Add(this.label13); this.tabPage1.Controls.Add(this.label11); this.tabPage1.Controls.Add(this.label8); this.tabPage1.Controls.Add(this.label9); this.tabPage1.Controls.Add(this.label10); this.tabPage1.Controls.Add(this.label99); this.tabPage1.Controls.Add(this.clipboard); this.tabPage1.Location = new System.Drawing.Point(4, 34); this.tabPage1.Name = "tabPage1"; 167 this.tabPage1.Size = new System.Drawing.Size(908, 193); this.tabPage1.TabIndex = 0; this.tabPage1.Text = "Graph"; this.tabPage1.Paint += new System.Windows.Forms.PaintEventHandler(this.Form_Paint); // // emsg // this.emsg.BackColor = System.Drawing.SystemColors.ControlLightLight; this.emsg.Font = new System.Drawing.Font("Microsoft Sans Serif", 19.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.emsg.ForeColor = System.Drawing.SystemColors.HotTrack; this.emsg.Location = new System.Drawing.Point(106, 48); this.emsg.Name = "emsg"; this.emsg.Size = new System.Drawing.Size(656, 56); this.emsg.TabIndex = 21; // // label7 // this.label7.BackColor = System.Drawing.SystemColors.ControlLightLight; this.label7.Font = new System.Drawing.Font("Arial", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label7.Location = new System.Drawing.Point(96, 9); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(758, 33); this.label7.TabIndex = 0; this.label7.Text = "% of Ultimate Tensile Strength verses span length"; // // label88 // this.label88.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 168 this.label88.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label88.Location = new System.Drawing.Point(1000, 135); this.label88.Name = "label88"; this.label88.Size = new System.Drawing.Size(66, 28); this.label88.TabIndex = 20; this.label88.Text = "450 m"; // // label25 // this.label25.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label25.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label25.Location = new System.Drawing.Point(900, 135); this.label25.Name = "label25"; this.label25.Size = new System.Drawing.Size(66, 28); this.label25.TabIndex = 19; this.label25.Text = "400 m"; // // label24 // this.label24.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label24.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label24.Location = new System.Drawing.Point(800, 135); this.label24.Name = "label24"; this.label24.Size = new System.Drawing.Size(66, 28); this.label24.TabIndex = 18; this.label24.Text = "350 m"; 169 // // label87 // this.label87.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label87.BackColor = System.Drawing.SystemColors.Window; this.label87.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label87.ForeColor = System.Drawing.Color.Red; this.label87.Location = new System.Drawing.Point(768, 48); this.label87.Name = "label87"; this.label87.Size = new System.Drawing.Size(182, 56); this.label87.TabIndex = 13; this.label87.Text = "Not accurate above 300 m"; // // pictureBox2 // this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.pictureBox2.BackColor = System.Drawing.SystemColors.Window; this.pictureBox2.Location = new System.Drawing.Point(96, 8); this.pictureBox2.Name = "pictureBox2"; this.pictureBox2.Size = new System.Drawing.Size(1373, 112); this.pictureBox2.TabIndex = 12; this.pictureBox2.TabStop = false; this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click); // // label17 // 170 this.label17.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label17.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label17.Location = new System.Drawing.Point(600, 135); this.label17.Name = "label17"; this.label17.Size = new System.Drawing.Size(66, 28); this.label17.TabIndex = 10; this.label17.Text = "250 m"; // // label16 // this.label16.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label16.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label16.Location = new System.Drawing.Point(500, 135); this.label16.Name = "label16"; this.label16.Size = new System.Drawing.Size(66, 28); this.label16.TabIndex = 9; this.label16.Text = "200 m"; // // label15 // this.label15.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label15.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label15.Location = new System.Drawing.Point(300, 135); this.label15.Name = "label15"; this.label15.Size = new System.Drawing.Size(66, 28); 171 this.Text = "100 m".Location = new System. 28). this.Font = new System.Forms.Windows.Font("Arial".Left))).Windows.label13.Forms.Windows.Drawing.AnchorStyles.Drawing.Point.Bold.AnchorStyles)((System.Forms.label11.Left))).Size = new System.label15.Bold.AnchorStyles)((System. 172 . this.Drawing.Bottom | System.Windows.Byte)(0))).AnchorStyles.AnchorStyles.Anchor = ((System.Point(200.Forms.Size = new System. // // label14 // this.Drawing.FontStyle.label13.Forms. this. 135).label15.Forms.Bottom | System.label13.AnchorStyles.Point.AnchorStyles)((System. // // label11 // this. 135). System.label14.Font = new System.Name = "label13".Location = new System.Drawing.Anchor = ((System.Point(400.label14.label14.Windows.Forms.Windows. ((System.Forms. ((System.Anchor = ((System.Size(54.Text = "50 m". 12F.label13.TabIndex = 6.label14. System.AnchorStyles. this. this.Font("Arial". this.GraphicsUnit.Text = "150 m".FontStyle. System.Forms.Windows.Size(66.AnchorStyles.TabIndex = 8. this.label14.label13.Drawing.GraphicsUnit. this. this. // // label13 // this. 28).label13.label14.Byte)(0))).TabIndex = 7.this.Drawing.Name = "label14".Drawing. this. System.Drawing.Windows.Windows. this. this.Bottom | System.label14.Drawing.Left))).label13. 12F. GraphicsUnit.Font("Arial".Drawing.label8.label8.Bold.Drawing.this.Text = "0 m ".Windows.Size = new System. this. System. this.Size = new System.Drawing. this.label9.Point(100.Size(170.AnchorStyles. // // label8 // this.Text = "Span Length (m)". this.label8.label11.TabIndex = 4.label11. // // label9 // this.FontStyle. 28).label9. System.Drawing.label8. 135).TabIndex = 2.Drawing. System.Font("Arial".Forms. System. ((System. 214).Bottom | System.Forms.Drawing.Font = new System.Anchor = ((System.Point(40.Drawing.Size(48.GraphicsUnit.Forms.GraphicsUnit.Point.Bold.AnchorStyles)((System.Byte)(0))). 12F.Font = new System. this.Point(352.Location = new System.Font("Arial".Text = "40 %".Windows.label11.Name = "label9".Drawing. this. System. ((System. // // label10 173 .Drawing. this. 12F.Name = "label11". 26).label11.label8.FontStyle.Size = new System.label9.label8. ((System.label9.Drawing. 28).Left))). this.TabIndex = 1. System. this.Drawing.Size(56.label11. this.label9.label11.Point.Windows.label8.Drawing. this.Byte)(0))).Drawing.Name = "label8".Location = new System. 8). 12F.Byte)(0))).Point.AnchorStyles.FontStyle.Location = new System.Drawing. this. this.label9.Bold. this.Drawing. this.Font = new System. this. this.label10.Drawing.Bold.label10. this.label10.Bold. // // clipboard // this. this.Byte)(0))). 12F.Drawing. this.Bottom | System. this.Drawing.Drawing.Left))).label99.Font("Arial". System.Text = "".clipboard.label99.FontStyle.Size = new System.Forms. this.Forms. 120).Point(700.Point.Font = new System.GraphicsUnit. this. 12F.Drawing.TabIndex = 5.75F. this.AnchorStyles)((System.Drawing.Point(0. System.Size = new System.label99.Name = "clipboard".TabIndex = 3. ((System. this.Name = "label99". 72).FontStyle.Windows. this.Name = "label10". System.Visible = false. this. System.Forms.Size(66.Location = new System. 9.Text = "300 m". // // label99 // this.Size(1296. System.GraphicsUnit.Drawing.Drawing.label99.label10.Font("Microsoft Sans Serif". 135).clipboard.clipboard. this.Byte)(0))).Size(56. System.Drawing.Byte)(0))). this.Anchor = ((System.clipboard.Font = new System.FontStyle.Font("Arial". 28).Location = new System.clipboard. 160).clipboard.label99.Drawing. this. ((System.Point.Point. this.Bold. 28).Drawing.Font = new System.Text = "20 %".Drawing.AnchorStyles.Drawing.// this. this.Drawing.clipboard.Point(40.Drawing.Windows. ((System.GraphicsUnit.label99.Size = new System.label99.label10.Location = new System. 174 .AnchorStyles.label10.Windows.TabIndex = 22. this. AllowSorting = false.TabIndex = 1.dataGrid1.Drawing.Controls. this. this. this. 0).SystemColors.Add(this.Drawing. this. System. ((System.Drawing.tabPage2. 175 .Forms.tabPage2.CaptionText = "Sag and Tension Chart". 12F.SystemColors. 34).Point. 193).dataGrid1.Location = new System.dataGrid1.Windows. this.dataTable1.AnchorStyles. this.PreferredColumnWidth = 160.Forms.Size = new System. this.Windows.Drawing.GraphicsUnit. this. System.Forms.Drawing.SystemColors.HeaderForeColor = System. this.Byte)(0))). this.Drawing.Anchor = ((System. this.Point(4. this.DataSource = this.AnchorStyles)((((System. this.Font = new System.dataGrid1.dataGrid1.BackgroundColor = System. this.tabPage2.dataGrid1.dataGrid1.dataGrid1.GridLineColor = System.dataGrid1.tabPage2.AnchorStyles.ReadOnly = true.Bold.Left) | System.dataGrid1.Name = "tabPage2". this.Drawing.Text = "Sag and tension". this.Windows.FontStyle. // // dataGrid1 // this.Right))).RowHeaderWidth = 15.// // tabPage2 // this.Drawing.ControlText.dataGrid1.DataMember = "".dataGrid1).ControlDarkDark. this.dataGrid1.Location = new System. this.Size(908. this.dataGrid1.dataGrid1.tabPage2.tabPage2.AnchorStyles.dataGrid1.Control.Drawing.Top | System.Forms.Windows.Name = "dataGrid1".Windows.Font("Microsoft Sans Serif".Bottom) | System.Point(0.AnchorStyles.Forms.AllowDrop = true. Caption = "Stringing tension (N)". this.ColumnName = "Temperature (\'C)". this.dataColumn1.TabIndex = 0. // // dataColumn2 // this.dataColumn4.dataColumn5.ColumnName = "Span (m)".Columns. this.Caption = "Span (m)".dataColumn1.dataTable1.dataColumn1.dataGrid1.dataColumn3. this.dataColumn1. // // dataColumn1 // this. this.Caption = "Temperature (\'C)". this.AddRange(new System. this.dataColumn2.TableName = "Table1". this. this.dataColumn1.Drawing.dataTable1. this.ReadOnly = true. this.Size = new System.MaxLength = 20.Data.ReadOnly = true. // // dataTable1 // this. 176 .dataColumn2.dataGrid1.dataColumn2.dataColumn3. this. this.Size(899. // // dataColumn3 // this.DataColumn[] { this.dataColumn6}).dataColumn2.MaxLength = 20.this. 188).dataColumn2. poles). this.tabPage3.Controls.calculate).dataColumn4.Controls. this. this.dataColumn5. // // dataColumn5 // this.Controls.Caption = "Final Tension (N)". this.Add(this.tabPage3.dataColumn6. this.ColumnName = "Stringing sag (m)". this.Controls.ReadOnly = true.tabPage3.dataColumn4.Caption = "Stringing sag (m)". this.Add(this.this.ReadOnly = true. this. // // dataColumn6 // this.Add(this. 177 .label86).dataColumn3.nsection).Add(this.tabPage3.dataColumn3. this.Caption = "Final Sag (m)".ColumnName = "Stringing tension (N)". this.Add(this.button1).Controls.dataColumn6. this.ReadOnly = true.tabPage3.tabPage3.dataColumn4.ReadOnly = true.dataColumn5.Controls.Controls. this.ColumnName = "Final tension (N)".ColumnName = "Final sag (m)".dataGrid2).dataColumn6.Add(this. this.Error).Controls. this.polef).tabPage3.Add(this.tabPage3.Add(this. // // tabPage3 // this.dataColumn5. // // dataColumn4 // this. this.nsection.tabPage3. // // button1 // this.Point(547.Controls.Click += new System.this. this.Name = "tabPage3".Add(this.project).tabPage3.Controls.TabIndex = 12. 31).button1. this.TabIndex = 14.Size = new System.Drawing. 63).button1.polep).tabPage3.button1_Click). 32).Location = new System.Click += new System. this. 32).nsection.Text = "Stringing chart". this.EventHandler(this. this.Location = new System.Add(this. this.Drawing. 193).nsection.nsection. this.label84). this.Controls.Controls.Text = "Next section". this. 34).Add(this.Point(4.label83).tabPage3.Add(this. this.Size(908.EventHandler(this. // 178 .Name = "nsection".tabPage3.Drawing.label85).tabPage3.Size = new System.Add(this.Controls.Controls.Text = "Reset".Add(this. // // nsection // this.Drawing.Drawing.TabIndex = 2. this.tabPage3.Point(547.tabPage3.Size = new System.Name = "button1". this.Add(this.Location = new System.nsection. this.Controls.section). this.nsection.nsection_Click). this.Drawing.tabPage3.button1. this.tabPage3.tabPage3.tabPage3. this. this. this.label82).button1. this.Size(144.button1.button1.Size(144. 63).BorderStyle = System.Error.Anchor = ((System.label86.Font = new System.Point.Drawing.Text = "Pole prefix".Drawing.Forms.Drawing.Size = new System. this.Point.calculate. this.Forms.Error.FontStyle. this.Error.// Error // this.ForeColor = System. this.Color.GraphicsUnit.Forms. this.calculate. System.Error.Byte)(0))). 12F.Font("Microsoft Sans Serif".Drawing. System.Error. this.AnchorStyles)(((System. ((System.Location = new System. System.Name = "calculate". ((System. 179 .Size = new System. this.Windows.Drawing.TabIndex = 4.Windows.Size(114.Error.Drawing.Fixed3D.Size(210.Font = new System.Red.Size = new System.Font("Microsoft Sans Serif".label86. this. this. 92). this.Size(144.Drawing.Windows.Error.label86. this.Drawing.Windows.Drawing.Bold.Right))).Error. 24).Text = "Replace \"Input span\" with span lengths". this.label86.AnchorStyles.Drawing. // // calculate // this.Drawing.Point(547.Forms.Byte)(0))).TabIndex = 13.Drawing. 12F.Error. 0).BackColor = System. // // label86 // this.FontStyle. 32).Drawing.calculate.Name = "Error".BorderStyle.Windows.Top | System.Point(692. this.ControlLightLight.Location = new System.AnchorStyles.Drawing.label86.SystemColors. System.Location = new System.Point(6.Error. this.GraphicsUnit.Name = "label86". this.AnchorStyles.Left) | System.label86. 0). this.Forms.Bold. Size(891. this.dataColumn8.dataTable2.dataGrid2.dataGrid2. this. this. this.Anchor = ((System. 180 .AllowSorting = false.PreferredColumnWidth = 105.dataGrid2. this.Text = "Calculate".AllowDrop = true.dataColumn9.dataColumn7.AnchorStyles)((((System.dataGrid2.Top | System.calculate. this.SystemColors. this.Drawing.Forms.Location = new System.HeaderForeColor = System.DataColumn[] { this.dataGrid2.Click += new System. // // dataTable2 // this.Windows.dataGrid2.CaptionText = "Stringing Chart".calculate.dataGrid2. this.DataMember = "".DataSource = this.Left) | System.Drawing. this.dataColumn12. this.TabIndex = 10.Point(8.Windows.dataGrid2.dataGrid2.Bottom) | System.Forms. this.AddRange(new System.calculate_Click).TabIndex = 11.Drawing.Data.AnchorStyles.EventHandler(this.this.Name = "dataGrid2".Forms.dataColumn11.dataTable2.AnchorStyles.Columns.AnchorStyles. // // dataGrid2 // this. this.Windows.AnchorStyles.dataGrid2. 96). this.Size = new System.dataGrid2.Forms. this.Forms. this.Windows. this. this.dataGrid2.Windows. 94).calculate.ControlText.Right))). this.dataColumn10. ColumnName = "Poles". this.dataColumn10.dataColumn10. this.MinimumCapacity = 75.Caption = "10 degrees". // 181 . // // dataColumn10 // this.dataColumn13. this. this.ColumnName = "Sag at".Caption = "Sag at". // // dataColumn8 // this. this.Caption = "Span lengths".ColumnName = "10 degrees".dataColumn9.Caption = "5 degrees".ColumnName = "Span lengths".dataColumn16}).dataColumn8.dataColumn11. // // dataColumn7 // this. this.dataTable2.ColumnName = "5 degrees".dataColumn15.dataColumn8. // // dataColumn11 // this.dataColumn9. this.this.dataTable2.dataColumn7.dataColumn14. this.dataColumn11.TableName = "Table2". this. // // dataColumn9 // this. System.Drawing.dataColumn16.Drawing.Font("Microsoft Sans Serif". // // dataColumn13 // this.Regular.Drawing.dataColumn14. this.dataColumn13.Point.Caption = "35 degrees".// dataColumn12 // this.Caption = "15 degrees".ColumnName = "30 degrees".Byte)(0))). this.2F.dataColumn14. // // dataColumn15 // this.polef.dataColumn12.dataColumn13. // // dataColumn14 // this. System. 182 . 10.ColumnName = "15 degrees".dataColumn15.Name = "polef".ColumnName = "25 degrees". ((System.dataColumn15. // // polef // this. this.FontStyle.ColumnName = "20 degrees".Drawing.Point(442. // // dataColumn16 // this.Font = new System.ColumnName = "35 degrees". this.Caption = "30 degrees". this.Caption = "25 degrees".Caption = "20 degrees".polef.GraphicsUnit.dataColumn16. 32).Location = new System.dataColumn12. this.polef. this. 10.Text = "3".Drawing.poles_TextChanged).TextChanged += new System.TextChanged += new System.Drawing.Drawing.poles.EventHandler(this.Location = new System.polep.Point(162. this. this. 63).Drawing. this. this.Drawing. this.Drawing.this.EventHandler(this.2F.Font("Microsoft Sans Serif".Font("Microsoft Sans Serif". System.Byte)(0))).polep.Point.Point.Regular.2F.Size(99. // // section // this.Drawing.poles.poles. this.poles. // // poles // this.section.EventHandler(this.TabIndex = 9.Point(162.Name = "poles". System.polef. System.FontStyle. // // polep // this.polef. ((System.Location = new System.Size = new System. 27).Font = new System.polep. 10. this.poles.polep.Font = new System.polef_TextChanged).Drawing.Drawing.TabIndex = 7.Drawing.GraphicsUnit.Drawing. 27).FontStyle. System. System. this. 32).Name = "polep".FontStyle. this.polep.Regular. 8).Font("Microsoft Sans Serif".Drawing.Size(99.Location = new System. this.Point. System.polef.poles.2F.Text = "1".polep.polef. 183 . 10.Font = new System.TextChanged += new System. this.Drawing.Byte)(0))).poles.TabIndex = 8.GraphicsUnit.Regular. this.section.Drawing. this. ((System.Point(442.polep_TextChanged).Size = new System. ((System.Text = "ESK".GraphicsUnit. this. this.Byte)(0))). FontStyle.Bold.project. this.Font("Microsoft Sans Serif".GraphicsUnit.TabIndex = 5.project.GraphicsUnit.Point.Point(162.label85.Drawing.Point.Location = new System. // // label85 // this.TextChanged += new System.Font("Microsoft Sans Serif".Font("Microsoft Sans Serif". this. 8).Drawing.section.TabIndex = 6. 8).2F.FontStyle. // // label84 // this. this.Drawing.FontStyle.section.Location = new System. 184 .project.TabIndex = 3. this.Drawing.Font = new System. 12F. System.project_TextChanged).label85. this.Font = new System. 10.Byte)(0))). this.Point(265. 23).Drawing.Drawing. this.label84.Location = new System. this.Drawing.Size = new System. this.Drawing.Bold. this.Name = "label85".Point.Byte)(0))).label84.Text = "1".Point(265.Size(167.Regular.Drawing.Drawing.project. 12F.Drawing. this.EventHandler(this.Name = "project". ((System. ((System.Drawing.Name = "section". // // project // this. System.TextChanged += new System. this. System.label85.project.Text = "Last pole number". ((System.Font = new System. System.Byte)(0))). System. this.project.Text = "Project 1". this.section. this.section_TextChanged).Name = "label84".label84.label85.EventHandler(this. 32).this.Drawing.GraphicsUnit. System.label85.label85.section. System.Font = new System.FontStyle.label83. this.Controls.TabIndex = 2.Text = "Project title".GraphicsUnit. 32).Drawing.Controls.Drawing.this.label84.Size = new System.condtemp).tabPage4.Drawing.TabIndex = 1.tabPage4.Name = "label83". 23).label82.Point.Bold. 8). System.tabPage4. this. this.Drawing. this. 23). System. this.nclearance). this.Size(167.label82. 24).Point(6. // // label83 // this.Point.Controls.label82. ((System.Tension). // // tabPage4 // this.Drawing.label82.TabIndex = 0. this.label83.Font("Microsoft Sans Serif". this.GraphicsUnit.Byte)(0))).Size(130.label37).label82.tabPage4. 12F. 185 .label84.Add(this.FontStyle.Size = new System.tabPage4.Add(this.Location = new System.Controls. System. ((System.Text = "Section number".Controls.Name = "label82". this. 12F.Size(168.Drawing. this.Point(6.label84.Size = new System.label82. this.label83.Drawing.label83.Drawing. this. this.Bold. this.Worst). this.Font("Microsoft Sans Serif".Add(this.Drawing.Drawing. this. // // label82 // this.Add(this.Byte)(0))).label83.Add(this.Drawing.Font = new System.Text = "First pole number".label83.Location = new System. this.Add(this. this. this. this. this.label23).Controls. this. this.Controls.Add(this.Add(this.Add(this.label96).tabPage4. this.tabPage4. this.tabPage4. this.tabPage4. this.label107).Controls.label104).Controls.Controls.tabPage4.Controls.label21). this.Controls.label102).label4). this. this. this.Controls.Controls.Controls.TWorst).Add(this.label93).Add(this.Add(this.AttachB).Controls.label92).label94).Controls.tabPage4.label67).Add(this.Add(this.Add(this.label108).Add(this.tabPage4. this.tabPage4.tabPage4.tabPage4. this.Add(this.Controls.tabPage4.Controls.label36).Add(this.Controls.label18).Add(this.label26).label105).Controls.Add(this.tabPage4.TensionA).label98). this. this.label97).tabPage4.tabPage4.label95).tabPage4.Add(this.Controls.label106).Add(this.Add(this. this. this.tabPage4.this.tabPage4.Controls.tabPage4.Add(this. this.label109).Add(this.tabPage4.label12).Controls.Add(this.label90).Controls.Controls.tabPage4. this.label66). 186 .tabPage4.TensionB).Add(this.tabPage4. this. this. this.tabPage4.tabPage4.Controls. this.Add(this. this.Controls.Add(this. this.tabPage4.label89).tabPage4.Add(this.Controls. this.Add(this.GroundB).tabPage4.Add(this.Add(this.Controls.Add(this.Add(this.Controls.Controls.tabPage4.label22).tabPage4.Controls.Controls.tabPage4.Add(this.tabPage4.Controls.Controls. label91).Add(this.Controls. // // Worst 187 .Forms. this.tabPage4.tabPage4. System.Controls.Add(this.label37. this.tabPage4.Text = "N".tabPage4. 27). this.Size(908.Controls.Add(this.label27). this.Add(this. ((System.Location = new System.tabPage4.tabPage4.tabPage4.IF).HeightO).GraphicsUnit.Drawing.Drawing.Size = new System.label37.Font("Microsoft Sans Serif".Add(this.tabPage4.tabPage4. this. 193).tabPage4.label37.Drawing.label37.tabPage4.Controls. this.Controls.Windows. 73).Drawing. this. this.Controls.Point.Add(this.tabPage4.tabPage4.AttachA). this.Font = new System.Controls.tabPage4.Controls.ESpan).Form_Paint2).Point(634.tabPage4.Drawing. this.Size(31.Controls.Add(this.TabIndex = 3.tabPage4.Add(this.GroundO).Controls.Add(this. this.Add(this.Name = "tabPage4". 34).pictureBox3). System. this.GroundDist).Add(this.Add(this.Controls. this. 12F.label37. this.this.tabPage4.Point(4.Name = "label37".Text = "Clearance calculator".tabPage4.Controls. this. this.label19).GroundA). this.Paint += new System. this.Drawing.tabPage4.label20).TabIndex = 68. this. this.Controls.Add(this.Drawing.FontStyle. this.DWorst).PaintEventHandler(this.Bold. this. // // label37 // this.Size = new System.Location = new System. this.label37.Byte)(0))). // // nclearance // this.Location = new System. this.Drawing. System.Tension.Regular. this. this.Regular.Drawing.Worst.TabIndex = 28.Point. this. this.Drawing.Worst.Size = new System.Tension.nclearance.Size(65.Size(65.Font = new System.Point(557.Drawing. ((System. 10. // // Tension // this.2F.Name = "Tension".Worst.GraphicsUnit.Text = "".Location = new System.Tension. 27).Byte)(0))).Worst.Drawing.Worst.Location = new System.Font("Microsoft Sans Serif".nclearance.Worst.Drawing. this.2F. 27).Enabled = false.Point(557. ((System.Font("Microsoft Sans Serif". this.Font = new System.Byte)(0))).nclearance. 10.Drawing.nclearance.Drawing. this. 121). this. System.Size = new System.FontStyle.Point. System.Enabled = false.Text = "".Regular. 10. this.Drawing.Tension.Drawing.FontStyle. this.TabIndex = 29. this.Tension. 97).Text = "".Name = "nclearance". System.Drawing.FontStyle.Tension.Drawing. 27).Tension. 73). System.2F.Drawing. this.Drawing.GraphicsUnit.nclearance. System.// this.GraphicsUnit. this. this.Font = new System.Point(557.Drawing.nclearance.Name = "Worst". ((System.Enabled = false. this.Size(65.Byte)(0))).Font("Microsoft Sans Serif". 188 .Worst. this.TabIndex = 30.nclearance. this.Point.Size = new System. // // AttachB // this. 27).Byte)(0))).TextChanged += new System.2F. this. 27).FontStyle. System. this.Location = new System.Drawing. ((System.GroundB.EventHandler(this. System.AttachB.Point(557.GroundB.// // condtemp // this.EventHandler(this. this. System.Drawing.Drawing.AttachB. this. ((System.GroundB. 1).TabIndex = 25.Text = "".Size(65.GraphicsUnit.FontStyle. this.TabIndex = 27.Drawing. this.Font("Microsoft Sans Serif".Drawing.Byte)(0))). 10.Name = "AttachB".FontStyle. this.Size(65.Regular.GraphicsUnit. System. 27).condtemp.AttachB.GraphicsUnit. this.Text = "".Drawing.Drawing.AttachB.condtemp.Size = new System.Point(557.Point.Name = "condtemp".Font("Microsoft Sans Serif". // // GroundB // this.Drawing.Font = new System.Size = new System.Name = "GroundB". this. this.condtemp.Regular.Point(557. this.Location = new System.Drawing.Drawing.condtemp_TextChanged).GroundB.TextChanged += new System.condtemp.Drawing.Font("Microsoft Sans Serif".condtemp.Font = new System.Drawing.Drawing.Font = new System.Point.Drawing.Drawing.2F. this. 189 . 48).Regular.GroundB. this. this.AttachB.TabIndex = 26.GroundB.GroundB. System. this. this. 10. 10.condtemp.Byte)(0))). 27).2F.Size(65.Location = new System.condtemp. System.Point. ((System.Size = new System.condtemp_TextChanged). this. this.Size = new System.Regular.condtemp_TextChanged).Name = "label67". // // label67 // this.GraphicsUnit.Font = new System.Drawing.label67.TensionB.Size(32.FontStyle.FontStyle. this.Point.Font("Microsoft Sans Serif". 190 .Drawing.Drawing.Name = "label66". // // TensionB // this.TensionB.Location = new System.Drawing.label66. this.Enabled = false.Drawing.Font = new System. this.Size(32.Font = new System.label67.EventHandler(this.Font("Microsoft Sans Serif".TensionB. System.Name = "TensionB".label67. 72).Byte)(0))).Location = new System.AttachB. this. this.Text = "". ((System. System.FontStyle. 28).TextChanged += new System. System. ((System.Size(63.Drawing.Text = "N".Font("Microsoft Sans Serif".Point(845. this.Drawing.GraphicsUnit.Drawing.TensionB. this. System. 73).Bold.Point(778.2F.Drawing.TensionB. ((System. this.Drawing.label67.Drawing.AttachB.Drawing.Point(845. 48). 12F. this. 10.label66.label67. this.this.TensionB.GraphicsUnit.Location = new System. System.Size = new System.label67.Byte)(0))). this. this. 12F. // // label66 // this.TensionB.label66.Point.Drawing.Bold.Text = "". 28).Point.Drawing. 27).Byte)(0))). this.TabIndex = 66.Drawing.label66.Size = new System.TabIndex = 67. System. this.Point(778.Location = new System. // // TensionA // this. this. System.Drawing.FontStyle. System.TabIndex = 64.Point(672.GraphicsUnit.this.label36.Drawing.Bold. System.Location = new System.GraphicsUnit. 48). 46). this.Font("Microsoft Sans Serif". System. ((System.label36. 12F.Font = new System.GraphicsUnit. this.label26.TensionA.Text = "Tension A". 27).Name = "TensionA".Byte)(0))).Text = "".TensionA.TensionA.label26.label66. this.Drawing.Font("Microsoft Sans Serif".Drawing.Drawing.Drawing.FontStyle.TensionA. ((System.Size = new System. 10. this. this.TabIndex = 65. System.label66.Bold.Location = new System.Drawing.TabIndex = 62. 74). 191 .label36.Text = "Tension B".Drawing. this.Drawing.Font = new System. System. 12F.Point. // // label36 // this.label36.Font = new System.Enabled = false.label26. this.Text = "N".FontStyle. this.Drawing.Drawing.Font("Microsoft Sans Serif".Byte)(0))).Byte)(0))). this.Point. ((System.Name = "label26". this. this.Size(63. this.Drawing.label36.Drawing.TensionA.TabIndex = 63.Regular. this.label26.Point.TensionA.label26.Point(672.2F.TensionA. // // label26 // this.Name = "label36". this.Font("Microsoft Sans Serif".Font = new System.Drawing.label97.Drawing.label104.Font("Microsoft Sans Serif". 102).// // label97 // this.Drawing.Drawing.TabIndex = 61.Size = new System.Point. 24).Drawing. System. this. // // label105 // this. this.label105.Font("Microsoft Sans Serif". 12F. 192 .GraphicsUnit.Drawing.label104. this.Byte)(0))).label104.label97. this. 12F. this.Drawing. 12F.Byte)(0))).Location = new System. this.Drawing.Bold. System.Location = new System.Font = new System. this.FontStyle. System.Drawing.Location = new System.Size(163.Drawing.Point. this. this. this. 126). this.TextAlign = System.label104.label104.FontStyle.label97.Font = new System.label97. ((System.label105.Bold.Name = "label105".Name = "label97". this.label105.label105.Point(634. this.Drawing.label97.Size(38. ((System.Point(336.Size(192.Drawing. System. System.Bold.Point.Size = new System.Size = new System. 24).Text = "Worst clearance". // // label104 // this.Text = "Object clearance".label105.MiddleLeft.Drawing.label105.label105.Byte)(0))).Text = "\'C".Name = "label104". 46).Drawing. System.label104.Drawing. this.Drawing.ContentAlignment. 28). ((System.label97.Point(336.GraphicsUnit.TabIndex = 60.TabIndex = 44.GraphicsUnit.FontStyle. this. // 193 .Font("Microsoft Sans Serif".Point(336. 50).Location = new System. this.FontStyle.label106.TabIndex = 58.Drawing.Point. this.Font("Microsoft Sans Serif". this.label107.Name = "label107". System.Font = new System. this. this. this. this. 12F.label106.Drawing.label4.label106.label107. System.GraphicsUnit.FontStyle.Drawing. this. ((System.Drawing.Drawing. this.Drawing.Font = new System. System. 25). System.Name = "label106". // // label4 // this.Text = "Equivalent Span".Point(336.Location = new System.GraphicsUnit.FontStyle. ((System. System.Bold.TabIndex = 37. 77). 12F.Font("Microsoft Sans Serif". 25). this.Drawing.label106. ((System. 12F.Drawing.Size(192.Font = new System.label107.Size(182.Text = "Conductor Temp".Bold. this.Point(0.Bold.Point.GraphicsUnit. this.Drawing. System.label106.Byte)(0))).label107.Size = new System. 2).Location = new System. // // label107 // this. 27).Byte)(0))).Size(173.Byte)(0))).Size = new System.TabIndex = 59.label4.// // label106 // this. this.Drawing.Drawing.Text = "Section tension".Drawing.label4.Point. this.label106.Drawing.label4. this.label4.label107.Drawing.label107.Size = new System.label4.Name = "label4".Drawing. Drawing.Point.label108.// label108 // this.TabIndex = 56. this.label23. 27).Point(634. this.label108.Font("Microsoft Sans Serif".Name = "label23".Name = "label108".Text = "B: attachment height".GraphicsUnit.label109.Drawing.Drawing.Size = new System.GraphicsUnit. System. this. 24).TabIndex = 55.Byte)(0))).Bold.FontStyle.Font = new System. 12F.Bold. this.Drawing. this. System.Drawing. System.Size = new System. this. this.Font("Microsoft Sans Serif".label23.Drawing.label108.Point. this.Text = "m".Drawing.Location = new System.Drawing.Byte)(0))). this.label23. ((System.GraphicsUnit.label23. System. 24). this. this.Font = new System. 23).Drawing.Size(19. ((System. ((System. 12F.label108.Byte)(0))).Drawing. // // label98 194 .label109.label109.label108.Bold.Text = "B: ground level". this.Drawing.Font("Microsoft Sans Serif". // // label109 // this.Font = new System.Point(336.Drawing. System. 12F.Drawing. 98).label109. this. // // label23 // this.Point. System.FontStyle.Drawing.FontStyle.label108.label23.Point(336.Size(192.Location = new System.Location = new System.Size(221.label109. this.Drawing. this.TabIndex = 57.label23.label109.Size = new System. 3).Name = "label109". // // label102 // this.Drawing.Drawing.Size = new System. ((System.Name = "label98".Drawing.label94. // // label92 // 195 .Location = new System. this.Name = "label102". this. System.label94.Drawing.Point. this. this.Size = new System. this. System.label94.Point. 25). this. 122).Size = new System.Drawing.TabIndex = 49.Byte)(0))).Font = new System.Drawing.label98.Point(298.Drawing.Size(33.label98. 24). 12F.Drawing. ((System.FontStyle.Drawing.Point(298.TabIndex = 54.label98.Text = "m".label98.Name = "label94".Font = new System.label102.GraphicsUnit.Drawing.GraphicsUnit.Point(634. this.Size(26.// this. // // label94 // this. 12F. 25). this.Bold.Bold.label102. this.Bold.Drawing.Text = "m". this.Text = "m".Drawing. ((System. System.label102.Location = new System. this. System.label102.Drawing.label102. this. 23). System.Font("Microsoft Sans Serif". 2).Byte)(0))).Byte)(0))).Font("Microsoft Sans Serif".FontStyle. 12F.Location = new System.Size(27.Font("Microsoft Sans Serif".label98.label94.label98.label94.GraphicsUnit.Font = new System. System.Drawing.Drawing. this.TabIndex = 51. this.label102.Point.FontStyle.label94. this. Drawing. this.Drawing.Font("Microsoft Sans Serif". 24). 12F.this.Byte)(0))).Point(298. this.Drawing.label22.FontStyle.Drawing.Drawing.Bold.Byte)(0))). this. this. this.label92.label95.label22.Location = new System. this. System.Text = "m". ((System.Size = new System.label95. this.Font("Microsoft Sans Serif".Point.Drawing.label95.Location = new System.Font = new System. this.Point(298. 24).Font = new System.Text = "m". ((System. 12F.label95.Drawing.Point.TabIndex = 47. 74).Point.Bold.label92.Drawing.GraphicsUnit.GraphicsUnit.label92.label92.Name = "label22". // // label96 // 196 .Text = "m".Drawing.Drawing. this.Size = new System. // // label22 // this.Size(26.Font = new System. 12F.Bold. ((System.label92.FontStyle.label95. this.Drawing. this.FontStyle.Drawing.Byte)(0))). 50). this.TabIndex = 46. System. // // label95 // this.Point(298.TabIndex = 48. 24).label95.Drawing.Drawing. System. this.Drawing.label92. this.label22.Size(26. System. 98).Name = "label92".Size(26.label22. System.Font("Microsoft Sans Serif".label22. this.Size = new System.Location = new System.label22. System.GraphicsUnit.Name = "label95". GraphicsUnit.TabIndex = 43.GraphicsUnit.Name = "label96".TabIndex = 45.Point(298. System. this. 74). this.Font("Microsoft Sans Serif".Drawing.Font = new System.label96. 12F.FontStyle.Point(0. 98). System. this.Font("Microsoft Sans Serif".label96.Size(144.Bold. this.FontStyle. System.Size = new System. this.Name = "label90".FontStyle. this.label93.Drawing.Size(33. // // label90 // this.label93.label93.Byte)(0))).Size = new System.Font("Microsoft Sans Serif". 23).Drawing. System.TabIndex = 40.Size(163. 24).label90.Location = new System.label90.label90. this.label96.Byte)(0))). ((System. this. System.Text = "O: height".Bold.label90.label90.Byte)(0))). this.label93.Text = "m".Bold.Font = new System. 12F.Size = new System.Font = new System.Drawing. this.Location = new System.Point.Drawing.GraphicsUnit.Name = "label93". ((System.Drawing.label96. this. this.Drawing.Drawing.Point. 24).label96.label93.label90. 12F.Text = "O: ground level".Drawing. this.Drawing.Drawing. this.Drawing. this.this.Drawing.Location = new System.Point(0. 24). ((System. // // label93 // this.label93.Point.Drawing. System.Drawing. // // label89 // 197 .label96. ((System. this.Drawing. System. this. ((System. this.Drawing. // // TWorst // this.Red.Location = new System.8F.Point.Bold.Drawing. 12F.label89. this.TWorst.Font = new System.TWorst. System. this.Point. 48). 12F.TabIndex = 39.Font("Microsoft Sans Serif".Drawing.Font("Microsoft Sans Serif".TWorst.Drawing.SystemColors.GraphicsUnit. System.label89.TWorst.GraphicsUnit.Size(211. this.Name = "TWorst".label12.label12.FontStyle.label12.Font = new System.Window.Point(173.TWorst. 27). this.BackColor = System.Point.TWorst.label89.ForeColor = System.Drawing. this.Name = "label89".Drawing.label89.Location = new System.Bold.Bold. ((System.label12.Color.Byte)(0))). 24).Drawing. this.Point(0.Name = "label12". // // label12 // this. this. System.Drawing.Size = new System. System.Drawing. this. // // label21 // 198 . 13. 157).Drawing.Text = "A: ground level".Drawing.Size(659.Font("Microsoft Sans Serif".Drawing.Size = new System.GraphicsUnit.Point(0.label89.label12.TabIndex = 36.Size = new System.Location = new System.label89. this.label12.Byte)(0))).Drawing.Size(173.TabIndex = 38. System. 50).TWorst. this.Drawing.Drawing. this.Font = new System. 21).this. this.FontStyle.Byte)(0))).Drawing.Text = "A: attachment height". this.FontStyle. GraphicsUnit. 21). System.Drawing.Drawing.Drawing. 10.TabIndex = 32.Enabled = false.DWorst.Drawing.Point(739.FontStyle.Font("Microsoft Sans Serif". 121).Point. // // label18 // this.Point.Drawing.TabIndex = 34.Size(34.label18.GraphicsUnit. ((System. this.Name = "label21".label21. 123). System.Drawing. this.Point.DWorst.Drawing. 12F. this.Bold.Size(24.Name = "DWorst". this.Drawing.TabIndex = 35. this. this.Name = "label18".label21.Byte)(0))).Byte)(0))).Drawing.Drawing.Location = new System. System.Location = new System. // // IF // 199 .Text = "at".Location = new System.label21. this. this.DWorst. System.Drawing.label18.this. this.Size = new System.Text = "".Font = new System.label21. this. System. this.label21.label18.Byte)(0))).label18.DWorst.Text = "m". this.2F. 126). ((System. 12F. ((System.Drawing.DWorst.Size = new System. this.FontStyle.Regular.Size(55.FontStyle.Size = new System.label18.Point(634.Font = new System. // // DWorst // this.label18.Point(672.GraphicsUnit. System. 27).Drawing.Font("Microsoft Sans Serif".label21.Bold.Font = new System.Drawing. 17). this.Font("Microsoft Sans Serif". this. this.DWorst.DWorst.Drawing. Point(672.Font = new System.Regular. 27).TextChanged += new System. 30). this.condtemp_TextChanged).GroundDist.SelectedIndexChanged += new System. this. this.Font("Microsoft Sans Serif".EventHandler(this. System. 10.IF. this. this. System. // // GroundDist // this.condtemp_TextChanged).IF.GroundO.Drawing. this.Items. this.GroundDist. this.Byte)(0))). this.Location = new System.EventHandler(this. this.Size(100.IF.Drawing.GroundDist.this. ((System.Size = new System. 27). this.Drawing.IF.Regular.Point.GroundDist. this. this.Size = new System.GroundDist. this.TextChanged += new System.TabIndex = 23. "Initial"}).Location = new System.AddRange(new object[] { "Final".condtemp_TextChanged).TabIndex = 24.Name = "GroundDist".Text = "Final". this. 6). this.Drawing.GroundDist. System.Text = "".GraphicsUnit. 121).Drawing.Point. this.Location = new System.Name = "GroundO". // // GroundO // this.Drawing.Point(221.IF.Drawing.GroundO.IF. 10.Byte)(0))).Drawing.EventHandler(this.Text = "".Drawing.GroundO.Size = new System.Size(63.IF.Drawing.Point(221.GroundO.GroundO.Font = new System.Size(63.Name = "IF".Drawing.Drawing.GroundO.GraphicsUnit. System.GroundO. 97).GroundDist.2F. this. ((System.FontStyle.Font("Microsoft Sans Serif".FontStyle. 200 .2F.TabIndex = 31. GroundA.Point.TabIndex = 21.TabIndex = 22.2F.Drawing.GraphicsUnit.Name = "GroundA".Size(63.HeightO.Regular.HeightO. ((System. System.HeightO.EventHandler(this.Byte)(0))). // // AttachA // this.Font = new System. ((System. 27).Font("Microsoft Sans Serif".Byte)(0))).Byte)(0))).TabIndex = 20. 10. this.Location = new System. this.Drawing. this.GraphicsUnit. this. this.Location = new System.condtemp_TextChanged). this.GroundA.Drawing.Font("Microsoft Sans Serif".HeightO.Font = new System.HeightO. this.Point.GroundA. this.Regular.Drawing.2F.Drawing.Size = new System.Point(221.Drawing. 10. this.Location = new System. System.Drawing.TextChanged += new System. this. System.AttachA.Drawing.Size = new System.AttachA.Font("Microsoft Sans Serif".FontStyle.Point(221.EventHandler(this.GraphicsUnit. 48). 27). this.Regular. 27). System. System.Drawing.Size(63.Text = "". // // GroundA // this. this.Drawing.AttachA.Size(63.condtemp_TextChanged). 10.Text = "". this.Name = "HeightO".GroundA.Name = "AttachA".TextChanged += new System.HeightO. ((System. this. 73).HeightO.AttachA.Size = new System. System. this.FontStyle.AttachA.Point(221. 201 .FontStyle.GroundA.2F.Point.Drawing. this.Font = new System.Drawing.Drawing.GroundA.// // HeightO // this.Drawing. 27).GroundA.Drawing. Drawing.label20.Color. this.Window. this.Point(8.label19. 202 .Drawing.Drawing.TopCenter. System. this. this.label20. this. this.Drawing.Font = new System. 157).Location = new System.Windows.label19.SystemColors.AnchorStyles. ((System.label19.Drawing.Drawing.Point(819. // // label20 // this.Text = "PoleA".Drawing.condtemp_TextChanged). this.Forms.TabIndex = 1. this.Windows. System.EventHandler(this.Location = new System.ForeColor = System. this.Drawing.Bold.Point.Size(56.FontStyle. System.label19.Forms.Byte)(0))).Font("Arial".label19.Window.label19.this.Drawing.SystemColors. this.TabIndex = 0.Text = "PoleB".Text = "". this. this.GraphicsUnit. this.Top | System.Drawing.Forms.Anchor = ((System.Drawing. this.TextChanged += new System. // // label19 // this. this. 165).AttachA.BackColor = System.BackColor = System. this.Drawing.Name = "label19". System.Point. 0).label20. this.label19.AnchorStyles)(((System.Drawing.Drawing. ((System.Font("Arial".Black.ContentAlignment.Name = "label20".ContentAlignment.label20.Windows.Bottom) | System. 12F.AnchorStyles.Black.TextAlign = System.Size = new System.ForeColor = System. 50).label20.Byte)(0))).label19.Forms.label20.TextAlign = System.AttachA. 12F.FontStyle.Size = new System.label20.Font = new System.GraphicsUnit.label20.AnchorStyles.label19.Right))).label20.label20.Color.Bold.TopCenter.Size(57.Drawing.Drawing.Windows. this. Windows.ESpan.Right))).GraphicsUnit.Size(24.ESpan.FontStyle.FontStyle.Name = "ESpan".label27.Drawing.pictureBox3. this.Drawing.pictureBox3.Window.Windows. this.TabIndex = 33.Windows.Point(221.Byte)(0))). 1). System.AnchorStyles. this.Font("Microsoft Sans Serif". System. this.Drawing.Font("Microsoft Sans Serif". this. this.AnchorStyles.Name = "label27".TabStop = false. 1).Left) | System. this.Regular.Drawing. // // ESpan // this.Name = "pictureBox3".Size(879.Size(63. 27).label27.label27.pictureBox3.Size = new System.AnchorStyles)((((System.Forms.Drawing. this.Drawing.ESpan.Drawing.AnchorStyles.Drawing.Windows. 31).pictureBox3.label27.Drawing.Top | System.Anchor = ((System.Windows. 12F.Text = "m". ((System. // // label27 // this. 27).Drawing.TabIndex = 50. System.Bottom) | System. this. this.Size = new System.Size = new System.pictureBox3.Location = new System. System.Drawing.Forms.Point.Bold.// // pictureBox3 // this. this.label27.label27. 10. this. this.Byte)(0))).Point(8.BackColor = System.Point(634. this.Drawing. 203 .Font = new System.ESpan. ((System.Forms.AnchorStyles.SystemColors.Font = new System.Drawing.Location = new System.Forms.Location = new System. 150).pictureBox3.GraphicsUnit.2F.pictureBox3.Forms.Point. Controls. // // label91 // this.Controls.Add(this.Controls. this.FontStyle.tabPage6.condtemp_TextChanged). this.EventHandler(this.tabPage6.MiddleLeft. this.Size = new System. System.tmax). 12F.label5).ContentAlignment.tabPage6.Add(this.tabPage6.Font("Microsoft Sans Serif".Controls. this. System.Add(this. this.Drawing.Point. ((System.Add(this.Location = new System.label60).Creep).Add(this.TextAlign = System. 204 . this.label91.lmin).tabPage6.Add(this.Add(this.Ini2).Controls.Drawing.Add(this.label91.label91.Name = "label91".Controls.Defaults).LimError).Controls.this. this.TextChanged += new System.Byte)(0))).Controls.label91. // // tabPage6 // this.Add(this. this.Text = "".Size(192. this.Controls.Controls.Drawing.Controls.label91.Bold.ESpan.tabPage6.tabPage6.ESpan.Drawing.lmax). this.tabPage6. 25).label91.label91.Ini1). this. this.GraphicsUnit.label63).Add(this.tabPage6.Text = "O: distance from A". this. 122). this.tabPage6.Controls. this. this.TabIndex = 19.Drawing. this.Add(this.Drawing.label64).Add(this.Point(0. this. this. this.Ini3).Controls.Font = new System.TabIndex = 41.Add(this.tabPage6.tabPage6.tabPage6.Add(this.ESpan. this.Controls.label65).tabPage6. Controls.Add(this.Controls.Controls.Controls.label59).Add(this.Controls.Controls.tabPage6.Controls.Controls.Add(this.Controls.tabPage6.Add(this. this.label43). this. this. this.tabPage6.label56).tabPage6.Controls.label61).label57).Add(this.tabPage6. this.Add(this. this.Add(this.Add(this. this. this.tabPage6.tabPage6. this. this. this.tabPage6.label47).tabPage6.Add(this. this. this.tabPage6. this.tabPage6.Add(this.Controls.tabPage6.Ww3).Controls.Controls.Controls.Wc1).tabPage6.tabPage6.linc).label58). this. 205 .Add(this. this. this.tabPage6.tabPage6.Add(this.label55). this.tabPage6.Controls.tabPage6. this.Controls.Controls.label50).Add(this.Add(this. this. this.tabPage6.Controls.tabPage6.Add(this.CT1).Controls.Controls.Wc2).tabPage6.tabPage6.this.label48).tabPage6.Add(this.Controls.Add(this.Add(this.label51).Add(this.Add(this.tabPage6.tabPage6.label53).Wt3).CT2). this.tabPage6.Add(this.label52).Add(this.Add(this.label44).Controls.tabPage6.Controls.Add(this.Controls.Controls.tabPage6.Add(this. this.Controls. this.tabPage6.Ww2).Wt2). this.tabPage6. this. this.label49).Ww1).Add(this.Add(this.label54).Wc3).Controls.Controls.Wt1).label62).CT3).label45). this.tabPage6.Add(this.Add(this. this.Add(this.Controls.Add(this.Controls. this.Controls. TabIndex = 1.Controls. 129).EventHandler(this.TextAlign = System.Drawing.label40). this.tmax.HorizontalAlignment. this.Drawing.tabPage6.label42).label41).tmax.lmin. this. 55).lmin.Drawing.tinc).tabPage6.tabPage6.Forms.lmin.lmin.tmax.tabPage6. this.tabPage6.Text = "60". 30).tabPage6.Text = "Limits". 193). this.Controls. this. this.Controls.tabPage6.TextAlign = System.label33).Location = new System.Name = "tmax".lmin_TextChanged).Size = new System.Size = new System.tabPage6.Name = "tabPage6".Text = "20".tabPage6.Add(this.Size(48. this.Location = new System. this.Name = "lmin".Drawing.Controls.Windows. // // tmax // this. // // lmin // this.TextChanged += new System.Size = new System.lmin.Forms.Add(this.HorizontalAlignment.Add(this.TabIndex = 5.tabPage6. 206 . this.Controls.Add(this.Windows.Drawing.this.tmax.Add(this. this.Drawing.label46).Add(this. this. this.Controls.tabPage6. this. 30).Size(40.tmax.tabPage6.Point(230.Add(this.Location = new System. this.TabIndex = 3. this. this. this.lmin.Point(4.Point(542.Right.Right. this.lmin.tmin). this.Controls.Size(908. this.tmax. 34). this. EventHandler(this.Size = new System.LimError.lmax.TabIndex = 60.lmax.LimError. 129).Point(534.EventHandler(this. 240).GraphicsUnit. // // Defaults // this.ForeColor = System.TextChanged += new System. System.Location = new System.Defaults.Name = "Defaults".Drawing.lmax.Color.Drawing. this.lmax.Point(278.TextChanged += new System.Defaults.Drawing.Font("Microsoft Sans Serif". this.this.Location = new System.LimError. this.Drawing. this.Size = new System.LimError.Defaults.lmax_TextChanged).tmax.Drawing.TabIndex = 4.Drawing. 9). 30). this.Bold. 12F.Point. this. this.Windows. this.Location = new System.Drawing.FontStyle.Right. this. this.Size(192.Drawing.Font = new System.Text = "300".lmax. System. // // lmax // this.TabIndex = 59.Defaults.Byte)(0))). ((System. this.Size = new System.HorizontalAlignment.Click += new System.TextAlign = System. 46). this.Text = "Reset Defaults".lmax. this.tmax_TextChanged).Size(48. // 207 .Name = "LimError". // // LimError // this.Name = "lmax".Defaults_Click). this.lmax.LimError.Point(710.Drawing. this.LimError.Red.EventHandler(this.Size(615.Defaults.Forms.Defaults. this.Drawing. 37). // Creep // this.Creep.Location = new System.Drawing.Point(173, 342); this.Creep.Name = "Creep"; this.Creep.Size = new System.Drawing.Size(67, 30); this.Creep.TabIndex = 57; this.Creep.Text = "370"; this.Creep.TextChanged += new System.EventHandler(this.Creep_TextChanged); // // label5 // this.label5.Location = new System.Drawing.Point(10, 342); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(159, 23); this.label5.TabIndex = 58; this.label5.Text = "Creep Constant"; // // Ini3 // this.Ini3.AllowDrop = true; this.Ini3.Enabled = false; this.Ini3.Items.AddRange(new object[] { "Initial", "Final"}); this.Ini3.Location = new System.Drawing.Point(605, 295); this.Ini3.Name = "Ini3"; this.Ini3.Size = new System.Drawing.Size(96, 30); this.Ini3.TabIndex = 52; this.Ini3.Text = "Final"; // // Ini2 208 // this.Ini2.AllowDrop = true; this.Ini2.Enabled = false; this.Ini2.Items.AddRange(new object[] { "Initial", "Final"}); this.Ini2.Location = new System.Drawing.Point(605, 249); this.Ini2.Name = "Ini2"; this.Ini2.Size = new System.Drawing.Size(96, 30); this.Ini2.TabIndex = 51; this.Ini2.Text = "Initial"; // // Ini1 // this.Ini1.AllowDrop = true; this.Ini1.Items.AddRange(new object[] { "Initial", "Final"}); this.Ini1.Location = new System.Drawing.Point(605, 203); this.Ini1.Name = "Ini1"; this.Ini1.Size = new System.Drawing.Size(96, 30); this.Ini1.TabIndex = 50; this.Ini1.Text = "Final"; // // label63 // this.label63.Location = new System.Drawing.Point(883, 129); this.label63.Name = "label63"; this.label63.Size = new System.Drawing.Size(55, 22); this.label63.TabIndex = 49; this.label63.Text = "m"; 209 // // label64 // this.label64.Location = new System.Drawing.Point(581, 129); this.label64.Name = "label64"; this.label64.Size = new System.Drawing.Size(21, 22); this.label64.TabIndex = 48; this.label64.Text = "m"; // // label65 // this.label65.Location = new System.Drawing.Point(278, 129); this.label65.Name = "label65"; this.label65.Size = new System.Drawing.Size(28, 22); this.label65.TabIndex = 47; this.label65.Text = "m"; // // label60 // this.label60.Location = new System.Drawing.Point(883, 55); this.label60.Name = "label60"; this.label60.Size = new System.Drawing.Size(41, 23); this.label60.TabIndex = 44; this.label60.Text = "\'C"; // // label61 // this.label61.Location = new System.Drawing.Point(581, 55); this.label61.Name = "label61"; this.label61.Size = new System.Drawing.Size(33, 23); this.label61.TabIndex = 43; 210 this.label61.Text = "\'C"; // // label62 // this.label62.Location = new System.Drawing.Point(278, 55); this.label62.Name = "label62"; this.label62.Size = new System.Drawing.Size(29, 23); this.label62.TabIndex = 42; this.label62.Text = "\'C"; // // label57 // this.label57.Location = new System.Drawing.Point(221, 295); this.label57.Name = "label57"; this.label57.Size = new System.Drawing.Size(29, 23); this.label57.TabIndex = 39; this.label57.Text = "\'C"; // // label58 // this.label58.Location = new System.Drawing.Point(221, 249); this.label58.Name = "label58"; this.label58.Size = new System.Drawing.Size(32, 23); this.label58.TabIndex = 38; this.label58.Text = "\'C"; // // label59 // this.label59.Location = new System.Drawing.Point(221, 203); this.label59.Name = "label59"; this.label59.Size = new System.Drawing.Size(32, 23); 211 this.label59.TabIndex = 37; this.label59.Text = "\'C"; // // label56 // this.label56.Location = new System.Drawing.Point(566, 295); this.label56.Name = "label56"; this.label56.Size = new System.Drawing.Size(33, 23); this.label56.TabIndex = 36; this.label56.Text = "Pa"; // // label55 // this.label55.Location = new System.Drawing.Point(566, 249); this.label55.Name = "label55"; this.label55.Size = new System.Drawing.Size(33, 23); this.label55.TabIndex = 35; this.label55.Text = "Pa"; // // label54 // this.label54.Location = new System.Drawing.Point(566, 203); this.label54.Name = "label54"; this.label54.Size = new System.Drawing.Size(33, 23); this.label54.TabIndex = 34; this.label54.Text = "Pa"; // // CT3 // this.CT3.AllowDrop = true; this.CT3.ItemHeight = 25; 212 this.Size(153.Size = new System. 23).AddRange(new object[] { "C Value".Ww3.CT3.TabIndex = 32. this. 213 .Drawing.label53.Point(442.Size = new System.Point(259. this. 30).Drawing.label53. this.Name = "Ww3".Text = "Wind".label53.Drawing.Point(510.Size = new System.Ww3.CT3.Ww3. this. 295).TabIndex = 33.CT3.label52. // // label53 // this.Drawing.Location = new System.Drawing. 23). this. 30).label52.Drawing. this. "% UTS". this.Size(67.CT3.Size(52.Point(10. this. this.Size(115.Location = new System.Text = "% UTS". this. 295). this. // // Ww3 // this. this.Name = "label53".Location = new System.Items.Drawing.Name = "CT3".TabIndex = 30.Name = "label52". 295). this.label52. "Tension"}).Size = new System.CT3. this.Location = new System.label52. this. // // label52 // this.CT3.Text = "700".label52.Ww3. 295).Drawing.Ww3. this.CT2. 214 . this.Wt3.CT2. // // CT2 // this.Text = "-5".Wc3. 295).Wc3. this.Wt3. 30). this.Size(114.Text = "% UTS". 30).AddRange(new object[] { "C Value".Drawing.Wc3. this.label53. "Tension"}).Name = "CT2".Size(58.Wc3.AllowDrop = true.Drawing.TabIndex = 31. this. 249).TabIndex = 28.Drawing. this.Wc3.label53.Wt3. this.Text = "3 : Temperature". this.Location = new System.this.CT2.Point(259.CT2.Name = "Wc3".Wt3. this.Items. // // Wc3 // this. // // Wt3 // this. this.Size(38. this.CT2.TabIndex = 29. this.CT2.Location = new System.TabIndex = 27.Wt3.CT2.Drawing.Point(173.Name = "Wt3".Size = new System. 295). 30).Size = new System. this.Location = new System. "% UTS".Text = "40".Drawing. this.Point(376.Size = new System.Drawing. Size = new System.TabIndex = 24. // // label49 // this.Size = new System. 249).TabIndex = 23.Ww2.Size = new System.Location = new System.Name = "label49". 249). this.Text = "Wind ". // // Wc2 // this.Wc2.label51.Location = new System.Drawing.Drawing.Text = "700". this.Text = "2 : Temperature". this. this.Size(52.Size(66. 249).label49.Drawing.Size(153.Ww2.Size = new System. 30). this.Wc2. 215 .label49. 30).Wc2.Point(510.Ww2.label49.Point(442. this.Name = "label51". 249). this.label49.Location = new System.Drawing. 23). this.Location = new System.Size(58.label51.Point(376.Drawing.label51.label51.Name = "Ww2". this.TabIndex = 25.Point(10.Ww2. this.Drawing. this.// // Ww2 // this.Ww2.Drawing.Drawing. this.Wc2.label49. this. 23).TabIndex = 26.Name = "Wc2". this.label51. this. // // label51 // this. TabIndex = 22.Point(259.Text = "50". // // CT1 // this. this.GraphicsUnit. this.Wt2.Wt2.Items. this.EventHandler(this.TabIndex = 21.Bold | System. this.75F.Drawing. // // label47 // this. this.Size = new System.Byte)(0))).CT1.Text = "C Value".Point(10.Drawing.Drawing.CT1. 30). 15.Drawing.Wt2.SelectedIndexChanged += new System.Wt2. ((System.Location = new System. 216 .Size(114.Drawing. 203).CT1.CT1.Name = "CT1".Font("Microsoft Sans Serif".CT1. this.Font = new System.Drawing.label47.CT1.Drawing.CT1_SelectedIndexChanged).SystemColors.Underline))).FontStyle. this.FontStyle)((System.Location = new System. // // Wt2 // this.Drawing. this.label47. System.ControlText.Point.AddRange(new object[] { "C Value".Wc2. 30).Wt2.Name = "Wt2".Size(43.CT1. 249).Drawing.label47.AllowDrop = true.Location = new System.Point(173.Drawing. ((System.FontStyle.ForeColor = System. 166). this.this. this.Size = new System.Drawing. "% UTS".Text = "-5". this.CT1. this. this. "Tension"}). Ww1.Ww1. // // label50 // this.Ww1.this.Text = "0".label50.Drawing. 30).Location = new System. this.label48.Drawing.label47.Size(52.Point(510. this.TabIndex = 19.Size(153. 203).label47. // // label48 // this.label50. this.label50.Size = new System.Point(10. this.Point(442.Size(66.Location = new System.label48.label50. 23). this. this.label48. 203).Drawing. this. 23). this.TabIndex = 17. this. 32).Ww1.label47. this.Location = new System.Name = "label50".label48.Size = new System.TabIndex = 16.Text = "Wind ".Name = "label47".Name = "Ww1". this.Name = "label48". this. // // Ww1 // this.Drawing.Size(499.Size = new System.Text = "1: Temperature ".Drawing.Drawing. 203).label48.Ww1.label47.Size = new System. this.Text = "Conductor Tension Criteria". // // Wc1 // 217 . this.Drawing.TabIndex = 20.label50. this. Location = new System.label43. this. this.TextChanged += new System.Size(58.Wt1. System.FontStyle. this.Wc1.TabIndex = 14.Drawing.linc. this. ((System. this. // // Wt1 // this. 129).75F.Drawing. this.Name = "label43". 218 .Point(376. this.TabIndex = 13.Location = new System.Wt1.GraphicsUnit.Size = new System.Name = "linc".Font = new System.Wt1.label43.linc.label43.this.label43.Wc1.Point. this.Wc1.FontStyle)((System. // // linc // this.Wt1.label43.Name = "Wc1". this.Size(43.SystemColors.Text = "Span length Range".Wc1. this. this.Wt1.Drawing.Name = "Wt1".Drawing.Drawing.Drawing. ((System. this.Drawing.EventHandler(this.label43.Byte)(0))).Drawing.Text = "1800".Drawing.ForeColor = System.Size = new System. this. 33). 92).Size(364.Point(173.Wc1.ControlText. 203). 203).Location = new System. this.Font("Microsoft Sans Serif". this. 30).Drawing.label43.Location = new System. 15.Text = "15".TabIndex = 15.Wc1_TextChanged). this.Point(10.Wc1.Underline))).Drawing.Drawing.FontStyle.Size = new System.Drawing. // // label43 // this.Point(846.Bold | System. 30). 129). this.this. this.linc. 30).Location = new System.Windows. this. this. this. 129).label45.label45.linc.Size(223.label44.Point(307.Size(36.Name = "label45".Drawing.label44. this. this. this.Size = new System.label46.Point(10.linc_TextChanged).Location = new System.TextChanged += new System. this. this.label45.Drawing.Drawing.label44. 129). this. this.label44.label46. 22).label45. 22).linc. // // label45 // this. // // label44 // this.label45. this.EventHandler(this.Size = new System.Text = "20".label46.Text = "Minimum span length". // // label46 // this.Drawing.TextAlign = System.Drawing.Size = new System.Drawing.label46.Name = "label44".linc.linc.TabIndex = 11.HorizontalAlignment.label44.Size = new System. this.Point(614. this.Name = "label46".TabIndex = 10. // // label42 219 .label46.Size(221.Forms.Right.TabIndex = 9. 22).TabIndex = 5.Location = new System.Text = "Maximum span length".Drawing.Size(222. this.Text = "Span length Increment". Drawing. this.TextChanged += new System. // // label40 // 220 .tinc.Point(10.HorizontalAlignment.Right. 55).tinc.label41.Name = "tinc". 55). this.Font("Microsoft Sans Serif".Drawing.TabIndex = 2.tinc.label41.Bold | System.Underline))).FontStyle.Point.ControlText.Size(36.Size(364.Size(221.EventHandler(this.Name = "label41". this.Drawing.FontStyle)((System. this.SystemColors. this.Drawing.Size = new System.Drawing. this. this. // // label41 // this.Drawing.Point(614. 33).75F. this.label41.label42.Drawing.Drawing.Text = "Temperature Range".tinc.// this.label42.Drawing.Point(846.TabIndex = 6.FontStyle.label42.Name = "label42".tinc_TextChanged).label41.tinc.label42. // // tinc // this.tinc.Byte)(0))).label42. this.TextAlign = System. this. 23).Text = "Temperature Increment". this. 30).Drawing.TabIndex = 4.Windows.Drawing. this.Location = new System.tinc. this.Size = new System. this. ((System. this.label42.Text = "5". 15. 9).Location = new System.GraphicsUnit.label42.Drawing. ((System. this.label41.Forms.ForeColor = System. System.Size = new System.Font = new System.Location = new System. Drawing. // // label33 // this. this.Size(40.label33.tmin.Drawing. this.Location = new System. this.TabIndex = 0.Location = new System. this.tabPage5. this.tmin.label40.Right.TextChanged += new System.Name = "tabPage5".Add(this.label40. 23).Add(this.label40.Drawing.Drawing.Name = "label33". 34).tabPage5.Point(4. this. 23).Helptext). this.Size = new System.EventHandler(this.tmin. // // tabPage5 // this.Windows. this.Drawing. this.tmin.Location = new System. this.Location = new System. 55).Forms. 30). // // tmin // this.Drawing.Size = new System.Size = new System.tabPage5.label40.tmin.Text = "Maximum Temperature". this. this. this.Size(229.TextAlign = System.tabPage5. 193).label33.Name = "label40".label33.Text = "Minimum Temperature".helpindex). this. 221 . this. this. this.Drawing. 55).Size(908.Text = "-5".Size(222.Controls. this.label33.TabIndex = 3.Drawing.tmin_TextChanged).tmin.tmin. 55).HorizontalAlignment.Name = "tmin".tabPage5.TabIndex = 2.Controls.Size = new System.label40.this.label33.Point(238.Point(10.Point(307. Drawing.Size(482.Anchor = ((System.AnchorStyles.Drawing.Forms. this.FontStyle.Windows. this.helpindex. this.Helptext. 8).Font = new System.Drawing.Left) | System.ReadOnly = true. this.Drawing.Windows. this.AnchorStyles.Point(264.Byte)(0))). this.this.Location = new System.GraphicsUnit.Windows.Forms.AnchorStyles.Drawing.AnchorStyles. this.helpindex.Forms.Font = new System. System.Drawing.Size = new System.ItemHeight = 26.Windows.helpindex.Name = "helpindex".AnchorStyles)(((System.Helptext. 8).Point(8.Helptext.Windows.Byte)(0))).Size = new System.SelectedIndexChanged += new System.Forms.Helptext. 13.Top | System.8F. this. this.Helptext.AnchorStyles.helpindex. this. 151).Point.Anchor = ((System.Windows.Size(248.Drawing.AnchorStyles.Forms. // // helpindex // this.Name = "Helptext".helpindex.Regular.EventHandler(this.Top | System.Forms.Point. this.helpindex_SelectedIndexChanged).Forms.Drawing.Bottom) | System. ((System.TabIndex = 4.Drawing. ((System.Drawing.Windows. 13.Left))).Text = "".Windows.Font("Arial". this.Font("Arial".Forms. System.FontStyle. System.Forms.TabIndex = 1.tabPage5.helpindex.Windows.8F. this. this. 222 .Regular.Text = "Help". 104).AnchorStyles)((((System. // // Helptext // this.helpindex.Helptext. this.Helptext.Bottom) | System.Right))).GraphicsUnit.TabIndex = 0.tabPage5.AnchorStyles.helpindex. System.Helptext.Location = new System. tabPage7.Italic.tabPage7. Rather RSAT serves as a simple checking tool for large designs.Location = new System.Size = new System.Windows.tabPage7.za.tabPage7.Windows.Location = new System.Drawing. // // richTextBox1 // this.AnchorStyles.Text = "About". System. System. ((System. RSAT is not intended to replace design packages such as PLSCADD which are recommended for the design of high voltage lines.Point(4.Anchor = ((System. this. this.FontStyle. // // pictureBox1 223 .Drawing.Forms.AnchorStyles.Forms.Forms.ReadOnly = true.TabIndex = 1. this. this.TabIndex = 6. RSAT was developed by the Industry Association Resource Centre. this.Font("Microsoft Sans Serif"
[email protected]) | System. this. this.Point(168.Controls. 34).tabPage7.Forms.Size = new System.Windows. this.richTextBox1.Drawing. this.tabPage7.Size(578. Stanford email: gareth.AnchorStyles.Top | System.Point.Add(this.AnchorStyles.richTextBox1.Drawing.75F.richTextBox1.Add(this. 181). this.pictureBox1).tabPage7.Name = "richTextBox1".Right))).Forms.Left) | System.Drawing.Text = @"RSAT is a design tool for the production of sag and tension data.richTextBox1).// // tabPage7 // this. 15.richTextBox1.co.Windows. Tel: +27 11 871 2431". 8). Technical Queries can be forwarded to G.richTextBox1.Controls.richTextBox1.Drawing.richTextBox1.Font = new System.GraphicsUnit. this.Drawing. this. RSAT is recommended for smaller flat line designs.AnchorStyles)((((System. this.Size(908.Byte)(0))).Name = "tabPage7". 193).Windows.richTextBox1. Area.FontStyle.dataTable1.Name = "pictureBox1".pictureBox1.Area.Locale = new System.Tables.Point(463.DataSetName = "SagAndTension".dataTable2}).Drawing. ((System. this.Image)(resources.Point.Area.Right.Drawing.TextAlign = System. this.Table = this. 8).Area.Drawing. this.pictureBox1.Byte)(0))).CultureInfo("en-ZA").Drawing.Area. System.Image"))).Regular. 12F. this.Size(149.Data. // // dataView1 // this. // // SagAndTension // this. this.Drawing.Globalization. this.Drawing.Area.Font = new System.Drawing.AddRange(new System. this.Image = ((System.pictureBox1.Size = new System.dataTable1.Area.DataTable[] { this. this. System.Size(64. 30).Forms.HorizontalAlignment.ReadOnly = true. this.pictureBox1.pictureBox1. // // Area // this.Windows.Size = new System.Location = new System. 334).// this.GraphicsUnit.Drawing. this. this.GetObject("pictureBox1.TabIndex = 0. this. this. this. this.pictureBox1.Point(24.Area. 224 .Name = "Area".Font("Microsoft Sans Serif".dataView1.SagAndTension. 125).TabIndex = 6.Location = new System.SagAndTension.SagAndTension.Text = "Area".TabStop = false. IMod.FMod. System. this.ReadOnly = true.HorizontalAlignment. this.FMod.Size(59.this. this.TextChanged += new System. this.Text = "IMod".FMod.Font("Microsoft Sans Serif".TextAlign = System.Name = "FMod".GraphicsUnit.Size = new System.TextAlign = System.Byte)(0))).Area_TextChanged).Drawing.Windows. System. 12F. 125).Forms.Size(59.IMod.Drawing. this.TabIndex = 10.Regular.Location = new System.GraphicsUnit. ((System.Windows.IMod.IMod.Regular.FMod_TextChanged).Right.Font = new System.Drawing.IMod. this.TextChanged += new System. // // IMod // this. this.FMod.FMod.IMod. this. ((System.Drawing.IMod.Drawing.Drawing. this. System.Area.ReadOnly = true. 30).TabIndex = 11.FMod. this.Point(684.Point.Point.HorizontalAlignment.Right. this.TextChanged += new System.FMod.Forms.Drawing.FMod.FontStyle.Point(684. this. this. // // Mass // 225 .Font("Microsoft Sans Serif". 30).Name = "IMod".IMod_TextChanged).Drawing.Drawing.Byte)(0))).Drawing. this.Text = "FMod".IMod.FontStyle. // // FMod // this. this.Size = new System.Location = new System.FMod.EventHandler(this.EventHandler(this. System.EventHandler(this. 12F. this. 95).Font = new System.IMod. Font = new System.Point.UTS.Regular. this.Drawing.Drawing. this.Drawing.UTS.UTS. ((System.Point(684.Mass.Point(463.Byte)(0))). 12F.Diameter.Drawing. this.Regular. this.Drawing.Name = "UTS".Mass. this.UTS.Windows. this.Font("Microsoft Sans Serif". this.Font("Microsoft Sans Serif".Name = "Diameter". 12F.Windows.Text = "Mass".Diameter.Right.EventHandler(this. 35). this.ReadOnly = true.Mass_TextChanged).Point(463. 30).Right.UTS. 12F.S". this. this. this. ((System.GraphicsUnit.Regular. this.TabIndex = 4.Forms.Mass.UTS.HorizontalAlignment.FontStyle.Drawing.Text = "U.TabIndex = 8.EventHandler(this.Font = new System. System. this.Diameter.Size(64.UTS_TextChanged).TextAlign = System.Drawing. this.Font("Microsoft Sans Serif". this. this.Mass.Size(59.TextChanged += new System.Drawing.Mass.Mass. 30).Mass.this. System.Font = new System. System. System. // // UTS // this.Byte)(0))).Mass. System.HorizontalAlignment.TextChanged += new System.ReadOnly = true.Forms. ((System.FontStyle. this.Location = new System. 65).Location = new System. System.ReadOnly = true. this.UTS.Size = new System.TextAlign = System.Drawing. // // Diameter // this.T.Drawing.FontStyle.Drawing.GraphicsUnit.Location = new System.Drawing.Mass.GraphicsUnit. 226 . 155).Point.Name = "Mass".Drawing.Diameter.Drawing.Point.UTS. this.Byte)(0))).UTS.Size = new System. Drawing.ForeColor = System. System.Drawing. this.Point.Diameter.HorizontalAlignment. this.Size(64. this.Windows.Drawing.Drawing.Size = new System.label28.this.FontStyle.label28. System.Drawing.Diameter.Point(463. this. this. 30). 12F.Size = new System.EDT. // // label29 227 . this.Drawing.BorderStyle = System.Text = "Every Day Tension".Drawing.BorderStyle.Size = new System. this.Name = "label28".FontStyle.EDT.Drawing. this.Windows. this.label28. this.TabIndex = 7.TextChanged += new System. 36).Font = new System.label28.TabIndex = 27.SystemColors.EDT.Drawing. 27).Location = new System.ControlText. 30).TextAlign = System. System. 12. ((System.EDT.label28.Size(101. this.Drawing.EDT.Font = new System.Bold. this.Forms.Forms.Diameter_TextChanged).Byte)(0))). System.Text = "Diameter".label28.label28.GraphicsUnit.Name = "EDT".Regular.Point. this.Diameter.Point(362.EDT.Right.GraphicsUnit.EDT. 35).Font("Microsoft Sans Serif".Diameter.HorizontalAlignment.Drawing.75F.Size(64.EDT.EventHandler(this.TextAlign = System.label28.Text = "EDT".ReadOnly = true. this. // // EDT // this. this.Right. this.TabIndex = 45.Location = new System.Byte)(0))).Diameter.Forms. this. // // label28 // this.Fixed3D.Drawing. this.Windows.Font("Microsoft Sans Serif". ((System. Font = new System.Font = new System. this. ((System.Point(463.label30. this.label30.GraphicsUnit.Size = new System.75F. System.CValue. this.75F. // // label30 // this. 26).Byte)(0))). this.Size = new System.ForeColor = System. 228 .label30. ((System.CValue.label29. this.ControlText.label29.label29. this.Windows.Name = "CValue".Drawing.Drawing. // // CValue // this.GraphicsUnit.Text = "Catenary Value".CValue.Location = new System. ((System.// this.Drawing.BorderStyle. 30).label30.Size(101.BorderStyle = System.Drawing.SystemColors. System.label30.Text = "Tensile Strength".Drawing. System. 27).Drawing.FontStyle.Drawing.Fixed3D. this.label30.Drawing.Font("Microsoft Sans Serif".label29.Font("Microsoft Sans Serif".label30.Point(362.label29.Name = "label30". System.Drawing.Drawing.label30.Regular. this.CValue. this.Bold. this.Byte)(0))).Font("Microsoft Sans Serif".Size(64. this.SystemColors.Drawing. this. System.TabIndex = 29.label29. 12. 66). this.Drawing.BorderStyle.Forms.Drawing.Location = new System.Byte)(0))).TabIndex = 28. this.Fixed3D.Drawing.Bold.Drawing.ForeColor = System.ControlText.BorderStyle = System.Forms. System.Point.CValue.FontStyle.Size(101.Font = new System.Name = "label29". this.Size = new System.Location = new System.Windows.GraphicsUnit. this.label29.ReadOnly = true. this. 97).FontStyle.Point.Drawing.Drawing.label29.Point. 95).Point(362. 12. this. 12F. BorderStyle.TextChanged += new System.BorderStyle.label31. // // label31 // this. 27).Fixed3D.BorderStyle = System.Size = new System.label31.HorizontalAlignment.FontStyle.GraphicsUnit.Drawing.SystemColors.Drawing. 12. this.Text = "Diameter". this.label32. this.75F. 12.Font = new System.label31.Font("Microsoft Sans Serif". // // label32 // this.FontStyle.Point.label32.Drawing.Drawing. System. System. this.CValue.label31. this.label32. this.Drawing.Right.CValue.Drawing.75F.Point(362. // // label34 // 229 . this.SystemColors.Windows.Byte)(0))).Forms.EventHandler(this.Size(101.label32.Point.Name = "label31".label32.Location = new System.Windows.label31.Drawing.Bold.CValue_TextChanged).Size = new System.TabIndex = 5. this. System.Windows.label32.Name = "label32".TabIndex = 32. this. 127).CValue.Forms.Text = "C Value". this.Drawing. ((System. this.label32.TabIndex = 31. this.ControlText.label31.label31. this. ((System. this.label32.Fixed3D.ForeColor = System.Font("Microsoft Sans Serif".ControlText. this.Bold.CValue.Text = "Area".Location = new System.Drawing.Byte)(0))).Forms.Drawing.Point(362.Drawing. 156).Drawing.label31. 26).ForeColor = System.GraphicsUnit.TextAlign = System. this.BorderStyle = System.Size(101.Font = new System.this. System. this. label35. ((System.Point.SystemColors.Drawing. this.Text = "Final Modulus".label34.label39.Point(578. System.ControlText.Drawing. this.label34.Windows.label39.label35.Forms.Point(578. System. 26).label34.label39.Font("Microsoft Sans Serif". this.Fixed3D.Drawing. // // label39 // this.Size(104.Drawing.75F.Text = "Initial Modulus".Forms.No.label35.label35.Drawing.Drawing.75F. this.SystemColors.Forms.Bold.ControlText. this.label39.BorderStyle.label34.Byte)(0))).Windows.FontStyle.BorderStyle. this.Drawing. this. this.Fixed3D.TabIndex = 36.Drawing.GraphicsUnit.Drawing.Point.BorderStyle = System.Point(578.BorderStyle = System.Drawing. // // label35 // this.label35.RightToLeft.Drawing. 97).this.Location = new System.Drawing.label34.SystemColors.Font("Microsoft Sans Serif". 12.TabIndex = 35.Bold.RightToLeft = System. 66).RightToLeft = System.Byte)(0))).label35. 26).Size(104.Drawing.Windows. this.ForeColor = System.Font = new System.Bold.label35. System. this.Forms.GraphicsUnit. this.Size = new System. this.Size = new System.Font = new System.Drawing. 127). this.Name = "label35".FontStyle.Location = new System.Drawing.GraphicsUnit.Byte)(0))). this.Drawing.Font("Microsoft Sans Serif". 12. this.ForeColor = System.label34.75F. System. this.label34. ((System.Location = new System.label35.Forms.FontStyle.ControlText.Windows.Name = "label34".BorderStyle = System.Windows.ForeColor = System.Drawing.Point.Font = new System.label35. 12.BorderStyle.label34. this. 230 .Fixed3D. ((System.RightToLeft.label34. this. System. this.No. System. this.label39.TabIndex = 38.GraphicsUnit. 139).BorderStyle.Coefficient.Image)(resources.RightToLeft = System. this. this.Size(243.Size = new System.pictureBox1_Click).Size(59.AnchorStyles. 27).Coefficient. this. this.Windows.Coefficient.picture.Text = "Temperature Coefficient".Windows.Regular. // // Coefficient // this. this.Coefficient_TextChanged).Size = new System.TextChanged += new System.label39. this. this.GetObject("picture.ReadOnly = true.Forms.Drawing.label39.Top | System.BorderStyle = System.Windows.label39.No.Coefficient.Forms.Size = new System.RightToLeft. // // picture // this.Point(444. System.Drawing.picture.TabStop = false. this. this.Location = new System.picture. System.Right))). 30).Windows. this. this.Font("Microsoft Sans Serif".Windows.Text = "Coefficient". this.Coefficient. this.HorizontalAlignment.Coefficient.Point(684. this. ((System.Click += new System.Font = new System.EventHandler(this.Size(192. this.Forms.Anchor = ((System.FixedSingle.Coefficient.AnchorStyles.Drawing.picture.picture.Right. 39).picture.Coefficient.Location = new System.Drawing.Drawing. 231 .picture. this. 65).TabIndex = 39.Point.Windows.Image = ((System. this.Drawing. 12F.Forms.AnchorStyles)((System.Name = "picture".EventHandler(this.Name = "Coefficient".Drawing.picture.Drawing. this.picture.Byte)(0))).Name = "label39".this.TextAlign = System.Forms.TabIndex = 9. this.Coefficient.label39.Forms.Image"))).FontStyle.Drawing. Size(192.Drawing. 12.Byte)(0))). this.Drawing. 12.Drawing. // // ncond // this. this.Font("Microsoft Sans Serif". 62).Point(240. 32).EventHandler(this.TextChanged += new System.Name = "ntype".75F.Enabled = false. System.Drawing.ntype.Font = new System. // // Save // this.Drawing.ntype. 12.Location = new System.Drawing.ncond.Font("Arial". 232 .ncond.Drawing.TextChanged += new System.ntype.Save.// // ntype // this.Drawing.ncond.Bold.GraphicsUnit.Font = new System.Bold.Drawing.Text = "".FontStyle. this.Visible = false.Point.Drawing.ntype_TextChanged).Font("Arial". 32).Font = new System.Size = new System. this. this. ((System.Bold. this.ntype.Visible = false.Save. this. ((System. System.Byte)(0))).Point.ntype.ntype.Save.Drawing. this.ncond.Drawing.Drawing.Size = new System.ntype.Location = new System. 62).Drawing. System.FontStyle. this.ntype. this.FontStyle.Location = new System. this. System. 99).ncond.Name = "ncond". this. this.Point(1.75F.Text = "".Size(168. System. this.Point. System.ncond.ncond.TabIndex = 0.Point(168.Byte)(0))).EventHandler(this.ncond_TextChanged).GraphicsUnit.ncond. ((System. this.TabIndex = 3.GraphicsUnit.75F. this. Drawing.Click += new System. this. this. this. 27). System.Drawing.GraphicsUnit.Name = "Save".GraphicsUnit.TabIndex = 12. this.image.Cancel.Cancel.2F. this.image.Visible = false. // // ncreep 233 . this. System.Cancel.Text = "".Drawing.Cancel_Click).Point(581. // // Cancel // this. this. System.Visible = false.FontStyle.Font = new System.Size = new System.Save.Save. this.Drawing.Byte)(0))). ((System.TabIndex = 13. this. System. 145).Drawing.Size(230.Click += new System.Point.Save_Click).Name = "image".TabIndex = 45.Cancel.Byte)(0))).Save.image.image.FontStyle.Save.Text = "Cancel".EventHandler(this.Font = new System.Drawing.Size(92.Location = new System. this.Visible = false.Point(240. 157).75F.Font("Microsoft Sans Serif".Regular.image.Cancel.Size = new System. this. this. this.EventHandler(this.image. // // image // this. this.Drawing.Size(92. ((System.this.Point.Drawing.Font("Microsoft Sans Serif". 26).Drawing.Save.Cancel. this. 10. this.Name = "Cancel".Drawing.Size = new System.Drawing. this. this.image. 12.Bold. 27).Location = new System.Text = "Save".Cancel.Save.Cancel. label73. this.Drawing.Text = "Creep .75F.Size(135.75F. 44).Point. this.Clabel.Clabel. AAAC = 465".Visible = false.Font = new System.Forms. // // label73 // this. 12. 97).Font = new System. System.SystemColors.ForeColor = System.Point(29. System. this. 12.Byte)(0))). this. 12.BorderStyle.label73.FontStyle. System.Clabel.label73.Name = "ncreep".ncreep. this.TextChanged += new System.Drawing.ncreep. 92).ncreep. this.Size = new System.GraphicsUnit.Fixed3D.75F. System.Size(178. this.// this.FontStyle.Clabel.ncreep.Clabel.Drawing.ControlText.Bold. this.Clabel.ControlText.ncreep_TextChanged).SystemColors. ((System.Drawing.EventHandler(this.Point.Windows. System.Bold. System.Drawing.Size = new System.Drawing.Name = "label73". this. this.ncreep. this.GraphicsUnit.TabIndex = 46.ForeColor = System.Drawing.ncreep.ncreep.Drawing. this.Visible = false.Font("Microsoft Sans Serif".Byte)(0))).Location = new System.Text = "".Name = "Clabel".Clabel.Drawing. 32). this.Font = new System. ((System.FontStyle. this.GraphicsUnit. this. this. // // Clabel // this.Location = new System.Point(4.TabIndex = 1.Drawing. 234 .Location = new System.Drawing.Drawing. this.Drawing.Byte)(0))). ((System.label73. this.ACSR = 370.Font("Arial".ncreep.Point.Drawing.Drawing.label73.Clabel.Drawing.Font("Microsoft Sans Serif".Bold.Point(521.BorderStyle = System. 136). 66).TabIndex = 48.Drawing.Size(59.label75. this.label76.ForeColor = System.label75.Size = new System.Point(521.BorderStyle. ((System. this.BorderStyle = System.Forms.this. this.Fixed3D. System.75F. this.label74.Size = new System.SystemColors.GraphicsUnit.label74.ControlText.Drawing.Forms.label74. this. 12.label74.TabIndex = 49.label74. this. System.FontStyle.Location = new System. this.Drawing.BorderStyle.TabIndex = 47.Byte)(0))).label73.BorderStyle = System.label75.label75. // // label75 // this.label74. 235 .Drawing.label74.label74. 26).Font = new System. this. this.Windows.Font("Microsoft Sans Serif".Windows.Drawing.Bold.Drawing.Point. 12.Drawing. // // label74 // this.label75.Name = "label74".label75.Drawing.Fixed3D.Drawing.label73.label75. this.Name = "label75".BorderStyle = System. this.FontStyle.Byte)(0))).Font("Microsoft Sans Serif".BorderStyle. this.Drawing.Drawing.GraphicsUnit. this.Forms.Drawing. // // label76 // this. System.Size(59.label75. this. 27).Drawing.ControlText. ((System.ForeColor = System.Text = "N". 27).Fixed3D.75F.Location = new System.Text = "N". 36).Font = new System.Size(59.Point(521. this.SystemColors.Size = new System.Bold.Point.Windows. System. this.SystemColors.Point(521.label77.Windows.Bold. ((System.Location = new System.BorderStyle.Drawing. // // label78 // this.Drawing.BorderStyle = System.BorderStyle = System. 156).label76.label77.75F.75F.ControlText. this.Name = "label78".Point.label78.label76. this.ControlText.GraphicsUnit. ((System.Font("Microsoft Sans Serif".Location = new System.Size(59. System.Byte)(0))). this.Font = new System.Windows.Size = new System.Drawing.label77.Fixed3D.Forms.label76.this.Drawing.GraphicsUnit.Drawing.label76.75F.Font = new System. this. 26).Fixed3D.Drawing. System.Bold. 12. this.label76.Forms.label76. 27).Drawing.label78.Drawing.Point.TabIndex = 52.Location = new System. 36).FontStyle.ForeColor = System. 12.ForeColor = System.Name = "label76". this.ControlText. this.Font("Microsoft Sans Serif". System.label78.Size(59.label77.Drawing. ((System. this.label78.label77. this.Point(521.label77.Drawing.label76.label78.label78.Size = new System. this.SystemColors.Size = new System.Text = "kg/km". System.Drawing.Byte)(0))).label77.Drawing.FontStyle.Font("Microsoft Sans Serif". this. this.Font = new System.Point(742.Size(78. 236 . 127).Drawing.Drawing. 27).label77. this.Drawing. // // label77 // this.Text = "mm". this.Name = "label77". System.FontStyle. this. this.TabIndex = 51.ForeColor = System.label78.SystemColors.Point.Bold. System. 12. this.Byte)(0))).BorderStyle. this.Drawing.Drawing.Drawing.GraphicsUnit.TabIndex = 50. Font = new System.Point(742.BorderStyle. 12. // // label81 // this.label79. 26).Drawing.Byte)(0))). // // label80 // this.label79.Drawing.Drawing. this. this. ((System.label81. this.Fixed3D. 127).Forms. System.TabIndex = 55.BorderStyle = System. this.label80.Drawing.Point(742.Bold.Drawing.Name = "label79".SystemColors.BorderStyle = System. System.ControlText.Name = "label80".ControlText.FontStyle. this.ForeColor = System.GraphicsUnit.Forms.label80.BorderStyle = System.Drawing.Drawing. this.Windows. System.label81.label79.Drawing.Drawing. 12. this.Point.label79.Drawing.Size(78.Byte)(0))). this.label80. this. this.FontStyle.GraphicsUnit.this.Drawing.label80.Font("Microsoft Sans Serif".BorderStyle.ForeColor = System. this.Bold.Location = new System.Text = "N/mm^2". this. 237 .TabIndex = 54. // // label79 // this.SystemColors.Byte)(0))).Drawing.75F.GraphicsUnit.Drawing. this. this.Text = "mm^2".75F.Fixed3D.label80. System.Font = new System.label79.Drawing. ((System.Fixed3D. System.label80. 97).Text = "N/mm^2".label80.Point.label78.Bold. ((System.Size = new System.Forms.Windows.Font = new System.Point. System.label79.label80. 26).Font("Microsoft Sans Serif".Windows.Font("Microsoft Sans Serif".BorderStyle.Size = new System.label79.Drawing.Location = new System.label79. 12.75F.FontStyle.Size(78. this. Location = new System. 157).Icon"))).printDocument1.panel1.printPreviewDialog1. this. this.printPreviewDialog1.printPreviewDialog1. 300).Drawing. this.Drawing.label81.label81.MinimumSize = new System.AutoScrollMinSize = new System.Size(0.printPreviewDialog1.printPreviewDialog1. this. this.printPreviewDialog1.panel1.Icon)(resources. 28). this.Drawing.printPreviewDialog1. 27).Point(-1.Drawing. this.Drawing. this. this.Color. // // printPreviewDialog1 // this.TabIndex = 53.GetObject("printPreviewDialog1.printPreviewDialog1.Text = "C\'x10^-6". 159).Enabled = true. 0).Drawing.Icon = ((System.label81.Size(78.AutoScrollMargin = new System.Point(126.Drawing.Location = new System.printPreviewDialog1.Name = "panel1".label81.Point(742. this. this.Name = "printPreviewDialog1".Drawing.ForeColor = System. 250).Document = this.Empty.this.TransparencyKey = System. this. 66).Size = new System.Size(375.Size = new System. // // suggest // 238 .TabIndex = 56.ClientSize = new System.label81.Size(400. this. this.panel1.Location = new System. this.Drawing.Size(0. this.printPreviewDialog1. this. 0).printPreviewDialog1.Drawing.ControlText. this.Drawing.Visible = false.label81. // // panel1 // this.SystemColors.panel1.Size(1038.Drawing.Name = "label81". label68. 3).Text = "Select a type of conductor in the left box below". 458).Bold. System.Size(125.suggest.RoyalBlue.Image)(resources. this.Drawing.Byte)(0))).Size(6.FontStyle.Location = new System.Bold.label68.TabIndex = 57. this.GraphicsUnit.ControlLightLight.Point(182. this. this.BackColor = System.Location = new System.Drawing.Drawing. 12F.Point(308.suggest.ControlLightLight.suggest.suggest.label68). 25).Drawing.Drawing. this. this.Right))).Forms. this. 12F.Font("Microsoft Sans Serif".suggest.Add(this.Drawing.label68. this.ClientSize = new System.Drawing. this.Drawing.BackColor = System.Size(944.Drawing.SystemColors.Font = new System.label68.Drawing. this.Forms.AnchorStyles. System.Windows.label68.Size = new System.ForeColor = System.Drawing. this. // // MainView // this.AnchorStyles.Forms.Windows. 3).Drawing. 239 .Color.Drawing. this.label68. 15).SystemColors. this. ((System. System.Controls.Drawing.Color.AutoScaleBaseSize = new System.BackgroundImage = ((System.Anchor = ((System.Byte)(0))).Forms.RoyalBlue.Font("Microsoft Sans Serif". this.Windows.Text = "Suggestion:". ((System.AnchorStyles)(((System.Name = "suggest".Windows. System.Drawing.Name = "label68".label68. 25).suggest. this.suggest. this. this.Drawing.ForeColor = System.Point.TabIndex = 58.Drawing.GetObject("$this.Size(605.GraphicsUnit. this.suggest.suggest.Left) | System. // // label68 // this.Font = new System.FontStyle.BackgroundImage"))).this.AnchorStyles.label68.Size = new System.Top | System.Point. label76).Controls.UTS).label34).Controls. this.Clabel). this. this.Add(this.Add(this.Add(this.Add(this.Add(this.label77).Controls.Add(this.Controls.Add(this.Controls.Add(this. this. this.Add(this.Controls.Diameter). this.Controls.Mass). this. this.Add(this.FMod).Add(this.Controls.Add(this.Controls.Controls.Controls.Controls.Controls.this.Add(this. this.CValue).label32). this. this. this.Controls.Save). this. this. this.Add(this.Add(this.Coefficient).ncreep).Add(this.label80).Add(this.Controls.Add(this.Controls. this. this. this.Add(this.Add(this. 240 . this.Controls.Add(this.Controls.Controls.label78).IMod).label39).Add(this.Add(this.Controls.Cancel).toolBar1).Add(this.Add(this.Add(this.label74). this. this.label81).Controls.Add(this.label79).Controls.Add(this.Controls.Area). this.Controls. this.label75).EDT).Controls.Add(this. this.ntype).ncond).Controls.Controls.Add(this. this.Controls.Controls. this. this.suggest).image).Add(this. this.label35).Controls. this.label73).Controls. this. Add(this.Add(this.Controls.this.Add(this.HelpButton = true.Rev 5.Icon"))).Icon)(resources. this. this.label31). this.ResumeLayout(false). this.ComponentModel.tabPage2.SizeChanged += new System.Add(this.Controls. 241 .FormWindowState.Maximized.GetObject("$this.Icon = ((System. this.Add(this.WindowState = System.Add(this.ResumeLayout(false). this.statusBar1). this.ResumeLayout(false). this. this.Add(this. this.panel1).label28). this. this.Drawing.Add(this. this.EndInit().tabPage1. this.ComponentModel.ResumeLayout(false).Controls.ResumeLayout(false).MainView_SizeChanged).dataGrid2)).Name = "MainView".tabPage6.Controls. this.ComponentModel.Controls. ((System. this.label30).Add(this.ISupportInitialize)(this.Controls.Add(this.Controls.ISupportInitialize)(this.tabControl1).Controls.Add(this.tabPage4. ((System.label1).ISupportInitialize)(this. this.Controls.tabControl1.label2).Controls. ((System.EndInit().ISupportInitialize)(this.Controls.dataTable2)). this. this.Add(this.label29).Controls. this.Text = "R.Forms.tabPage3.ComponentModel. this.T .EventHandler(this.EndInit().dataGrid1)).ResumeLayout(false).Add(this.CTLB). this.CLB). this.EndInit().Controls.label6). this.1".label3). ((System. this.S.Menu = this.Controls.dataTable1)).Add(this.picture).A. this.mainMenu1.Windows. ((System.PaintEventArgs e) { } #endregion /// <summary> /// The main entry point for the application. ((System. this.ResumeLayout(false).Forms.System.ComponentModel.this.Forms.ResumeLayout(false). /// </summary> [STAThread] static void Main() { Application.ISupportInitialize)(this.EndInit().PaintEventArgs e) { } //Graphics for the Clearance Calculator private void Form_Paint2(object sender.Run(new MainView()).SagAndTension)).ISupportInitialize)(this.Windows. } //Graphics for the Graphs private void Form_Paint(object sender.System.ResumeLayout(false). } // General functionality menus and buttons 242 .tabPage7.dataView1)).tabPage5.Windows.ComponentModel.EndInit(). this. Landscape = false.DialogResult.Windows.SelectedIndex==3) printDocument1.Windows. System. else printDocument1. saveFileDialog1.DefaultPageSettings. 30).PrintPage += new System.Print(). // Determine if the user selected a file name from the saveFileDialog.Landscape = true. true.DefaultPageSettings.Button)) { case 0: // Initialize the SaveFileDialog to specify the RTF extension for the file.IndexOf(e. printDocument1.OK && saveFileDialog1. saveFileDialog1. if(saveFileDialog1.Buttons. } break. case 1: page = 1.DocumentName = "Rsat".ShowDialog() == System. line = 0.Printing.printDocument1_PrintPage).PrintPageEventHandler(this.doc".Forms. this.Filter = "Word File|*.SelectedIndex==2||tabControl1. 243 .private void toolBar1_ButtonClick(object sender.Length > 0) { ExportToText (saveFileDialog1. switch(toolBar1.Drawing.FileName.//XmlDocument myDoc = new XmlDocument().doc".ToolBarButtonClickEventArgs e) { // Evaluate the Button property to determine which button was clicked.printDocument1.DefaultExt = "*. printDocument1.Forms.FileName. if(tabControl1. printDocument1.Text = Creep. // Add a new type to conductor type list box CTLB CTLB. printDocument1.Text = IMod.DocumentName = "Rsat". ncond. //Clear Conductor data CValue.CTLB. break. page = 1.Text = Coefficient. else printDocument1.Image = Image.Dispose(). line = 0.jpg").Text = EDT.SelectedIndex=4.FromFile("intro image.DefaultPageSettings.SelectedIndex==3) printDocument1.Items.Text = Mass. printPreviewDialog1.printDocument1_PrintPage). printPreviewDialog1.PrintPageEventHandler(this.Text = "".DefaultPageSettings. if(tabControl1.Drawing.Printing.Dispose().Visible = true.Text = Diameter."New Type").printDocument1. this. 244 .Text = CValue.Landscape = false.Text = FMod.Text = UTS.Document = printDocument1. printDocument1.Visible = Cancel. case 2: // Printpreview the file.Text = Area.Landscape = true.SelectedIndex==2||tabControl1. case 4: // change status of visibilty of buttons Save. case 3: tabControl1. picture.ClearSelected(). break.Insert(0.Visible = true.ShowDialog().PrintPage += new System. break. Text = CValue. //Clear Conductor data CValue.Enabled=false.Visible = Cancel.SelectedIndex=4.Enabled= false.Text = FMod.CTLB. System.Text = UTS.Text = Coefficient. ncond.Text = Area.EventArgs e) { tabControl1. // Insert code to open the file.Text = Creep. case 5: tabControl1. picture. 245 . // Add a new type to conductor type list box CTLB CTLB.Enabled = menuItem29.SelectedIndex=5."New Type").ClearSelected().Visible = false.Visible = false.Insert(0.FromFile("intro image.Image = Image. CLB.Text = Diameter. break.Text = EDT.jpg").EventArgs e) { // change status of visibilty of buttons Save.Text = "".Text = Mass.Text = IMod. // Insert code to open the file.Visible = true. System. } private void menuItem29_Click(object sender.CLB. // Insert code to open the file.Items. break. toolBar1.Visible = true.Enabled = menuItem29. toolBar1. } } private void menuItem15_Click(object sender. // Insert code to save the file. System. } private void menuItem5_Click(object sender.ShowDialog(). } private void menuItem19_Click(object sender.EventArgs e) 246 . System.EventArgs e) { saveFileDialog1.EventArgs e) { tabControl1. System. System. System.SelectedIndex=5.EventArgs e) { tabControl1.ShowDialog(). } private void menuItem14_Click(object sender. } private void menuItem18_Click(object sender.EventArgs e) { saveFileDialog1.SelectedIndex=2.} private void menuItem17_Click(object sender.SelectedIndex=2.EventArgs e) { tabControl1. } private void menuItem6_Click(object sender. // Insert code to save the file. System. Visible==false) {//Clear Conductor List Box suggest.Text = "". System. Area.Text = "".SelectedIndex=5.Clear().Items. this. FMod. Coefficient.Text = "".Text="Select a conductor in the conductor box below".Text = "". UTS. IMod.Text = "". CValue.EventArgs e) { tabControl1.SelectedIndex=6.CLB. } // Changing conductors and new conductor parameters private void TypeBox_SelectedIndexChanged(object sender. Mass. } private void menuItem10_Click(object sender.EventArgs e) { Close().{ tabControl1. 247 .Text = "". System.EventArgs e) { if(Save. } private void menuItem16_Click(object sender.Text = "". System. Creep.Items. cr.Image = Image.Value). picture.Text = "".Text = "".Add(cr. // Open the Conductor Xml file and reader cr XmlTextReader cr = new XmlTextReader(@"Conductors.Diameter.Read()) { // Load conductors if(cr. cr. } } 248 .CLB.Read().ToString()). cr.SelectedItem.Text = "".Value== cond.Read(). while(cr.cr.xml").FromFile("intro image. //string selected = CTLB.WhitespaceHandling = WhitespaceHandling.MoveToContent(). EDT.Read()) { // Moves the reader to the 1st node. // Moves the reader to the next node.SelectedItem.// if (cr. Conductor cond = new Conductor().Read().// move to the conductor names this.None. cond.Type())// loop to the type specified until the end of the file { cr.cr.MoveToContent().jpg").Type(CTLB. Visible=Clabel.SelectedIndex!=-1) { ntype.Visible=true.ReadOnly = CValue.Visible=false.ReadOnly = UTS.Visible=false. } } } private void CLB_SelectedIndexChanged(object sender.ReadOnly = IMod. ntype.ReadOnly = Creep. CTLB. System.ReadOnly = Coefficient. //Make Readonly false CValue.ReadOnly = Diameter.ReadOnly = false.Text = CTLB.ReadOnly = Mass. CTLB.Visible=ncreep.ReadOnly = Mass.Text.ReadOnly = IMod.Close(). } } else { if(CTLB.ReadOnly = CValue.Visible=true.ReadOnly = Creep.ReadOnly = Coefficient.SelectedIndex==0) { ntype.EventArgs e) { try { 249 .ReadOnly = FMod.Visible=ncreep.ReadOnly = Area.Visible=Clabel.ReadOnly = UTS.ReadOnly = Diameter.cr.ReadOnly = FMod. //Make Readonly false CValue.ReadOnly = false. } if(CTLB.ReadOnly = Area. Name())// Find the conductor { cr. Creep.FromFile("intro image. Coefficient. // Open the Conductor Xml file and reader cr XmlTextReader cr = new XmlTextReader(@"Conductors. cond.Text="". EDT. Conductor cond = new Conductor().Text = "".// Moves the reader to the next node.Text = "".//Load the name cr.Text = "".None. Sag and Tension. cr. picture.Read().Text = "". Help or About". Area.cr. Diameter.Read(). cr.Text = "".//Clear Conductor data emsg.MoveToContent().WhitespaceHandling = WhitespaceHandling. Stringing. Limits.jpg"). FMod.// move to the 1st c value // Load data while(cr.ToString()).Text = "".Image = Image.Read().Text = "".xml").Text = "".Value!= cond.Text = "". UTS.Text = "". cr. suggest.Name(CLB. Mass.SelectedItem.cr. CValue.MoveToContent(). CValue.Read().Read(). // Moves the reader to the 1st node.Read(). } 250 .cr.Text="Select a tab below from Graph. Clearance.Text = "". IMod.cr. Text = cr.Read(). cr. cr.Read().cr.Read().Read(). 251 .Text = cr.Text = cr.Value.// Load data cr.FromFile("intro image.cr.cr.Read().Read().Read(). FMod.Read().Value.cr.Read(). // update sat chart and EDT Wc1. if(cr.Value.cr.cr.Read().cr.jpg").cr.cr. Mass.cr.cr. cr.Text = cr. cr.Text = cr.Read().Read(). else picture.Value.Read().Read().Read().cr.Text = cr.Value.Value=="") picture.e). CValue.Value.FromFile(cr. cr. cr.cr.Read().Read().Read().Image = Image.Value. cr.Read().Read().Read().//UPDATE TABLE IN FOCUS graphupdate().cr.Text.Read().Image = Image.Value.Read().Text=CValue. UTS.Value.Read().cr.Read().Read().cr. cr. Area.Text = cr.cr. IMod. cr.cr.Read(). Coefficient.Read().Read().Value). cr.Close().cr.Text = cr.cr. Diameter. Creep.Read(). tabupdate(sender.Text = cr. Text!=""&&FMod. else Save.Text!=""&&Diameter.Text!=""&&Coefficient.Text! =""&&Mass. System. } private void Mass_TextChanged(object sender.EventArgs e) 252 .Text!=""&&UTS.Text!=""&&Coefficient. else Save. System.Text!=""&&Area.EventArgs e) { if(ntype.Text="Try again".Enabled = false.Text!=""&&CValue. menuItem3.Text!=""&&ncond.Text!="") Save. } } private void CValue_TextChanged(object sender. } private void pictureBox1_Click(object sender.Text!=""&&ncreep.Text!="") Save.Enabled=true.Text!=""&&Diameter.Enabled = true.Text!=""&&IMod.Text!=""&&IMod.Enabled = true.Text!=""&&Area.Text!=""&&UTS. System.Enabled = false.EventArgs e) { if(ntype.Text!=""&&ncond.Text! =""&&Mass.// enable save buttons toolBarButton2.Text!=""&&ncreep.Text!=""&&CValue.Text!=""&&FMod.Enabled = true. } catch { emsg. Text = openFileDialog1.Image =Image.FromFile("intro image.Text = Area.ReadOnly = EDT. } 253 .{ if(Save.Text = Mass.ReadOnly = Coefficient.ReadOnly = Creep.Visible==true) if(openFileDialog1.Visible = true.Text = FMod.OK) { System. ncond.ShowDialog() == DialogResult.Text = Diameter. image.Image = Image.Text = EDT.FileName). picture.FileName).jpg"). System.ReadOnly = UTS.ReadOnly = Area.IO.Text = UTS. image.Items.Text = Creep.Text = IMod."New Type").ReadOnly = Mass. CLB. //Clear Conductor data CValue.ReadOnly = false.Close().ReadOnly = CValue. //Make Readonly false CValue.FromFile(openFileDialog1.Insert(0. } } private void create_Click(object sender. picture.Visible = false.Visible = true. sr.ReadOnly = Diameter.Text = CValue.ReadOnly = FMod.IO.StreamReader sr = new System.ReadOnly==true) CTLB.StreamReader(openFileDialog1.Text = Coefficient.ReadOnly = IMod.FileName.Text = "".EventArgs e) { // Add a new type to conductor type list box CTLB if(Area. picture.Text = FMod.ReadOnly = FMod.Clear().Items.EventArgs e) { //enable toolbar and disable save Save. // Remove edit windows and replace boxs CTLB.Text = EDT.Text= CValue.Text = UTS.Visible = ntype.FromFile("intro image.Visible = true.Text = Mass.Visible = false.Text=ncreep. //Open file XmlDocument myDoc = new XmlDocument().Enabled = false.DocumentElement. //Clear Conductor List Box.Visible = CLB.jpg").ReadOnly = UTS.jpg").xml").Text="".Enabled = false.Text= CValue. data and image this.Text = Creep.FromFile("intro image.Enabled= true. picture.Visible = Cancel.Text = Diameter. System. toolBar1.ReadOnly = Diameter.ReadOnly = Creep.private void Cancel_Click(object sender. XmlNode root = myDoc.Image = Image.ReadOnly = Mass.Enabled= true.CTLB.ncond. myDoc.Image = Image.Text = Coefficient. //Create a new conductor 254 .ReadOnly = IMod. // change status of visibilty of buttons Save. //Make Readonly false CValue.Enabled = menuItem29.Text=ntype. CValue.Load("Conductors.ReadOnly = Area.ReadOnly = CValue.Items.ReadOnly = Coefficient.Visible=false.Enabled = menuItem29.CLB.ReadOnly = EDT.Text = IMod.Remove("New Type").Text = ncond. } private void Save_Click(object sender.Visible = ncreep.ReadOnly = true. System.Visible = Clabel.Visible = image.Text = Area.EventArgs e) { //enable toolbar and disable save Save. toolBar1. cond. XmlElement type = myDoc.InnerText=Diameter.CreateElement("Mass").Visible == true) ntype.InnerText = ntype. conductor. conductor.imod.XmlElement conductor = myDoc. XmlElement coeff = myDoc.CreateElement("FMod").coeff. XmlElement creep = myDoc.PrependChild(imod). XmlElement imod = myDoc.CreateElement("Coefficient").Text.pict.uts. conductor.CreateElement("Diameter").ToString().Text. 255 .area. XmlElement mass = myDoc.CreateElement("Area").InnerText=Mass.Text. conductor. conductor.Text.PrependChild(fmod).Text.Text = CTLB. conductor. conductor. XmlElement area = myDoc. XmlElement cond = myDoc.CreateElement("Creep").PrependChild(pict).mass.CreateElement("C").diam. XmlElement uts = myDoc.PrependChild(type).PrependChild(diam).PrependChild(cond).c.creep.CreateElement("IMod"). XmlElement c = myDoc.Text.InnerText=UTS.Text.Text.InnerText=FMod.PrependChild(uts). // Add new nodes if(CTLB. XmlElement fmod = myDoc.InnerText=CValue.InnerText=Area. conductor.Text.CreateElement("Conductor").PrependChild(c).fmod.InnerText=Coefficient.InnerText=ncreep.CreateElement("Type"). XmlElement diam = myDoc.PrependChild(coeff).SelectedItem.InnerText= ncond.Text.PrependChild(mass). conductor.Text. conductor.Text. //Add the node to the document. XmlElement pict = myDoc.CreateElement("Name").InnerText=IMod.CreateElement("Image").CreateElement("UTS"). conductor.InnerText=image.PrependChild(area).type. conductor.PrependChild(creep). data and image this.ReadOnly = FMod.Remove("New Type"). myDoc.ReadOnly = UTS.Text= CValue. // Open the Conductor Xml file and reader the conductor types in the type box XmlTextReader cr = new XmlTextReader(@"Conductors.Items.Text = Creep.Text = Mass.None.ReadOnly = IMod. picture.CLB.//Open a reader cr.Text= CValue.MoveToContent().xml"). // Moves the reader to the next node. //Make Readonly false CValue.ReadOnly = Coefficient.Text = Area.ReadOnly = EDT.ReadOnly = Creep.Visible = Cancel.Items.root.Visible = image.Text = ncond.WhitespaceHandling = WhitespaceHandling. // change status of visibilty of buttons Save. picture.ncond.CTLB.Visible = Clabel.// White space handling if (cr.Text=ntype.ReadOnly = Mass. //Clear Conductor List Box.Visible=false.FromFile("intro image.Text = Coefficient.Visible = ncreep.jpg").Image = Image.Clear(). cr.Text=ncreep.Visible = true.Save("Conductors. cr.xml").Text = EDT.Text = IMod.LastChild).root. CValue.Text = Diameter.Read()) { // Moves the reader to the 1st node.Text = FMod.Visible = CLB.Image = Image.Text="".jpg").InsertAfter(conductor. // Remove edit windows and replace boxs CTLB.ReadOnly = CValue.Text = UTS.MoveToContent().FromFile("intro image.Visible = false.Visible = ntype.ReadOnly = true. //string to type 256 .ReadOnly = Area.ReadOnly = Diameter. Text!=""&&Area.Read()) { // Load types if(cr.Close(). } private void ncreep_TextChanged(object sender.// move to the type names while(CTLB.Text!=""&&ncreep.Text!=""&&UTS. System.Value!="") this. else Save.Text!=""&&Diameter.Text!="") Save. } } private void ntype_TextChanged(object sender.Text!=""&&FMod.FindString(cr. } } cr.Enabled = false.EventArgs e) { if(ntype.Enabled = true.while(cr.Text!=""&&CValue.Value)==-1 && cr.EventArgs e) { 257 .Text!=""&&Coefficient.Value).Items..Read().CTLB.Text! =""&&Mass.Name == "Type")// loop to the types specified until the end of the file { cr.Text!=""&&IMod. System.Add(cr.Text!=""&&ncond. Text!=""&&Area.Enabled = true.Text!=""&&IMod. else Save. else Save.Text! =""&&Mass. } private void ncond_TextChanged(object sender.Text!=""&&Area.Text!=""&&Diameter.Text!=""&&ncond.Enabled = false.Text!=""&&ncreep.Text!=""&&FMod.Enabled = true. } private void Area_TextChanged(object sender.Text!=""&&FMod.Text!="") Save.Text! =""&&Mass. } private void UTS_TextChanged(object sender.Text!=""&&ncreep.Text!=""&&Coefficient.Enabled = true. System.Text!=""&&Coefficient.Enabled = false. System.EventArgs e) { if(ntype.Text!=""&&Diameter. else Save.EventArgs e) { 258 .Text!="") Save.Text!=""&&IMod.Text!=""&&UTS.Text! =""&&Mass.if(ntype.Text!=""&&FMod.Text!=""&&ncreep.Text!=""&&CValue.Text!=""&&ncond.Text!=""&&Area.Text!=""&&UTS.Text!=""&&Coefficient.Text!=""&&Diameter. System.Text!=""&&ncond.EventArgs e) { if(ntype.Text!=""&&UTS.Text!="") Save.Text!=""&&CValue.Text!=""&&CValue.Text!=""&&IMod.Enabled = false. Text!=""&&IMod.Text!="") Save.Text!=""&&ncreep.Text!=""&&FMod. System.Text!=""&&FMod.if(ntype.Text!=""&&UTS.Text!=""&&ncond. } private void Diameter_TextChanged(object sender.Text!=""&&UTS.Text!=""&&Area.Enabled = false.EventArgs e) { if(ntype.Enabled = true.Text! =""&&Mass. System. } private void IMod_TextChanged(object sender.Text!=""&&ncond.Text!=""&&Diameter.Enabled = false.Text!=""&&Diameter.Text!=""&&Coefficient.Text!=""&&UTS.Text!=""&&FMod.Text!=""&&IMod.Text!=""&&CValue. } private void Coefficient_TextChanged(object sender.Enabled = false. else Save.Text! =""&&Mass.Text!=""&&Coefficient.Text!=""&&IMod.Enabled = true. System.Text!="") Save. else Save.Enabled = true.EventArgs e) { 259 .Text!=""&&Coefficient.Text!="") Save.Text!=""&&Area. else Save.Text!=""&&Diameter.Text! =""&&Mass.Text!=""&&ncreep.Text!=""&&CValue.Text!=""&&ncond.Text!=""&&Area.Text!=""&&ncreep.EventArgs e) { if(ntype.Text!=""&&CValue. Enabled = false.Text!=""&&ncond.Text="Check minimum temperature".Text!=""&&Area.Text!=""&&UTS.Text!=""&&IMod. System.} } 260 .Text!=""&&FMod.Enabled = true.Text!=""&&CValue.Text! =""&&Mass. } // Changing limit parameters private void tmin_TextChanged(object sender. else Save.Text!=""&&Area.Text!=""&&ncond.Text!=""&&ncreep.if(ntype.ToDouble(tmin.Text).Text!=""&&Coefficient.Enabled = false. } private void FMod_TextChanged(object sender.Text!="") Save.Text="".Text!=""&&FMod. Convert.Enabled = true.Text!="") Save.Text!=""&&Diameter.Text!=""&&Diameter.EventArgs e) { try { LimError.Text!=""&&ncreep.Text!=""&&UTS.EventArgs e) { if(ntype.Text! =""&&Mass.Text!=""&&CValue.Text!=""&&IMod. else Save. System. } catch {LimError.Text!=""&&Coefficient. Text="".Text="Check maximum temperature". System. System.Text).ToDouble(tinc.} } private void tinc_TextChanged(object sender.private void tmax_TextChanged(object sender.Text="". } catch {LimError. } } catch{ LimError. Convert.} } private void lmin_TextChanged(object sender. if(Convert.EventArgs e) { try { LimError.ToDouble(tmax. System.Text="".Text="Temperature increament must be a positive number".Text="Temperature increament must be a positive number".EventArgs e) { try { LimError.EventArgs e) { try { LimError.Text)<0) { LimError. 261 . tinc.Text="". System.ToDouble(lmax.Text).Text="". if(Convert.} } 262 . LimError. System.Text="Check minimum length". Convert.} } private void linc_TextChanged(object sender.EventArgs e) { try { LimError.Convert.ToDouble(lmin.Text = "". } } catch{ LimError.Text).Text)<0) { linc.} } private void lmax_TextChanged(object sender.Text="Length increament must be a positive number".Text="".ToDouble(linc.EventArgs e) { try { LimError.Text="Check maximum length". } catch {LimError.Text="Length increament must be a positive number". } catch {LimError. } // Changing string chart parameters private void project_TextChanged(object sender. } private void Wc1_TextChanged(object sender.Text = CT1. } catch { Error.Text=Wc1.".EventArgs e) { dataTable2.Text).EventArgs e) { try { Error. dataTable2. System.Rows.ToDouble(section.Text!="") CValue.Rows[dataTable2.Count-1]["Poles"]= project.Rows[dataTable2. } private void section_TextChanged(object sender.Text.private void CT1_SelectedIndexChanged(object sender.Count-1]["Sag at"]= section. System. } } 263 .EventArgs e) { label30. System.Text. System. No text.Text = "".EventArgs e) { if(Wc1.Text.Rows.Text = "The Section must be a number only. Convert.Text. EventArgs e) { stringupdate(). System. } } else { while (count<(Poles-Polef)) { dataTable2. if(Polef>Poles) { while (count<(Polef-Poles)) { dataTable2.private void polep_TextChanged(object sender.Rows[dataTable2.Text+(Poles .Text). } } } private void poles_TextChanged(object sender. int Polef= Convert.Count-4-(Polef-Poles)+count]["Poles"] = polep.Rows.Text).Count-4-(Poles-Polef)+count]["Poles"] = (polep. count++. System.Rows[dataTable2. } 264 .ToInt16(polef.count-1)).Rows.Text+(Poles + count)+"-"+(Poles + count +1).ToInt16(poles. count++. int count = 0.EventArgs e) { int Poles= Convert.count)+"-"+(Poles . Text!=""&§ion. } // Changing clearance chart parameter private void condtemp_TextChanged(object sender. System.ToDouble(polef.T."-----------------------------------------------". double spole = (Convert.ToString(Convert.Text!=""&&poles. stringupdate(). } private void nsection_Click(object sender.EventArgs e) { equivspan().Add(new Object[] {"------------------------------------------------". } private void calculate_Click(object sender. polef. poles.Text))-spole+1)."------------------------------------------------"."------------------------------------------------".Text!=""&&UTS.".Text= Convert."------------------------------------------------".Text)+1).ToString(Convert. dataTable2.EventArgs e) 265 . section. System. else Error.Rows.Text!="U. System."------------------------------------------------"."-----------------------------------------------".Text)).Text!=""&&polef.EventArgs e) { stringupdate().Text)+1).Text="Check all fields are completed.ToDouble(polef. System.Text!=""&&project."------------------------------------------------"}).ToString(2*(Convert."------------------------------------------------".ToDouble(poles.Text = Convert.S") equivspan().EventArgs e) { if(polep.Text= Convert.private void polef_TextChanged(object sender."-----------------------------------------------".ToDouble(section. ToDouble(AttachA.Xml file and reader cr XmlTextReader cr = new XmlTextReader(@"Help.Convert.Clear().All.ToDouble(ESpan.Convert.ToString() == cr. clearance().Convert. cr. while(cr. //Check for numbers Convert.Text).xml").Read()) { // Load help text if(helpindex.Convert.ToDouble(Height O.SelectedItem.ToDouble(AttachB.Helptext.ToDouble(GroundO.Convert. // Open the Help. } } private void helpindex_SelectedIndexChanged(object sender.WhitespaceHandling = WhitespaceHandling.Convert.ToDouble(condtemp.Text).Text="Are all inputs filled in and are entries all numbers?".EventArgs e) { {//Clear Conductor List Box this.Text). System.Convert.Value)// loop to the type specified until the end of the file 266 .ToDouble(GroundB.Text).{ try { TWorst.Text="".Text).Convert.T ext). //update picture } catch { TWorst.Text).ToDouble(GroundDist.ToDouble(GroundA.Text).Text).clpicture(). // move to the conductor names } } //cr. printDocument1.PrintPageEventHandler(this. } } private void pictureBox2_Click(object sender.Drawing.AppendText(cr.printDocument1_PrintPage).SelectedIndex==3) 267 .PrintPage += new System.Read(). cr.Printing. if(tabControl1.SelectedIndex==2||tabControl1. System.Read().Value!= "end") { Helptext. line = 0. printPreviewDialog1.DocumentName = "Rsat". System. this.EventArgs e) { page = 1.Value).printDocument1. } private void PrintPreview_Click(object sender.{ while(cr.Close(). } cr.Document = printDocument1.EventArgs e) { graphupdate(). Landscape = true. new Font("Arial".Graphics. e. new Font("Arial". new Font("Arial". e. 10.Graphics.Regular). 10. FontStyle.Graphics.Text+"'Cx10^-6 ".Regular). FontStyle.Maroon. 10).1 " .Maroon. 10.DrawString("Temp Coeff:"+Coefficient.Maroon. new Font("Arial". Brushes.Text+" data " + "Page "+page. new Font("Arial". e.Maroon.Text+" mm^2".DrawString("C Value:"+CValue.Clear(Color.Maroon. e.Text+" mm".Text+" kg/km". Wind "+Ww1. e.White). 10.Text+" PA.Regular).DrawString(" RSAT 5. e.Regular).Text+" N/mm^2".DrawString("Area:"+Area. 70). 10.Text+" ".1200.DrawString(CLB.Now. 10.Text+" ". 110).10. Brushes.Graphics.Text+" N/mm^2".printDocument1. 268 .DefaultPageSettings.DefaultPageSettings. on " + Ini1.DrawString("UTS:"+UTS.Graphics. FontStyle.Graphics. Brushes.BlueViolet.Graphics. 10. FontStyle. 10. printPreviewDialog1.DrawLine(Pens. 70). e. FontStyle. Brushes. e. e.Landscape = false. // Page set-up for all print functions e.Text+ ".Graphics. 580. 40). FontStyle. 70).Maroon.Regular).110.Maroon. 90). } private void printDocument1_PrintPage(object sender.110). 90). 10. FontStyle. e. 10.Maroon. 14. Brushes.Graphics. 90). 580. 380.DrawString("Limit 1: Temperature = " + Wt1.Regular). 160.DrawString("Limits ". 10. // printDocument1.DrawString("Final mod:"+FMod.DrawString("Initial mod:"+IMod. 90).Text +". e.ShowDialog(). e.System. new Font("Arial".Graphics. 10. Brushes.Maroon.Graphics. 10. new Font("Arial". new Font("Arial". Brushes. new Font("Arial".Maroon. Brushes.Text + " " + Wc1. "+ CT1. 14. 70). else printDocument1.Regular).Regular). Brushes. 10. 160. FontStyle. 10.DrawString("Mass:"+Mass.Printing.DrawString("Diameter:"+Diameter. FontStyle.Underline).Graphics.Regular). FontStyle.Graphics.ToString()+" Printed: "+DateTime. 130). FontStyle. new Font("Arial". 380.Dispose().Drawing.Regular).Text+" N". new Font("Arial".Blue. Brushes. 20. Brushes.BlueViolet. FontStyle.Graphics.PrintPageEventArgs e) { e. Brushes. new Font("Arial".Regular). Black. Wind "+Ww2.190).Regular).Rows.Graphics. 140. on " + Ini3. 10. Wind "+Ww3. FontStyle. Brushes. Brushes.Text +".BlueViolet. Brushes. FontStyle. e.Text + " " + Wc2. FontStyle. 200.SelectedIndex==5||tabC ontrol1. //Print graph int pline = 0. Brushes. 520. Brushes. Brushes. pline*20+230). e.DrawString("Limit 3: Temperature = " + Wt3.Graphics.Black.Graphics. 200).Graphics. 10.10.Regular). Brushes. 240. e.DrawString(dataTable1.DrawLine(Pens. 20.DrawString("Stringing tension". e. 200).Bold).Bold).Count.DrawString("Stringing sag".Graphics. //print page setting for sag and tension charts if(tabControl1. while (line < e. pline*20+230). e. 10.Rows[line]["Stringing tension (N)"]. e. 200). int max = dataTable1. Brushes.Black.Graphics.Text+ ". "+ CT3. Brushes. 10. 10. Brushes. FontStyle.DrawString("Temp".Graphics. 269 .Graphics. e. new Font("Arial".Bold).Black.Graphics.Text + " " + Wc3. new Font("Arial".Text+" PA.SelectedIndex==1||tabControl1.Graphics.10.Graphics.1200.Black. 20.Text+" ".DrawLine(Pens. FontStyle.Black.Black. e. 10.SelectedIndex==4||tabControl1.DrawString(dataTable1. 10.Text+" PA. 10.Bold).Text+ ". new Font("Arial".1200. FontStyle. 10. new Font("Arial". 10.MarginBounds. pline*20+230). 200).ToString().Black. 650.DrawString("Limit 2: Temperature = " + Wt2. e.Bold).Graphics.DrawString("Span". 10.Black. 160.190.SelectedIndex==0||tabControl1.Height*page/22&&line<max) { e.BlueViolet.DrawString("Final sag". e. new Font("Arial". new Font("Arial". Brushes.Bold).ToString(). on " + Ini2. new Font("Arial". FontStyle. FontStyle.BlueViolet. FontStyle.Black.Graphics. 200). 200).220). 170).ToString(). new Font("Arial".Bold).220.Rows[line]["Span (m)"]. 10. FontStyle.Rows[line]["Temperature ('C)"].DrawString("Final tension".Bold).DrawString(dataTable1.SelectedIndex==6) { e.Text +". new Font("Arial". FontStyle.Bold).Text+" ". 370.e. new Font("Arial". 150). 10. "+ CT2. new Font("Arial". Graphics. 200). 200). 10. e. 10.ToString(). 600. new Font("Arial". 10.Bold).e. new Font("Arial". Brushes. FontStyle. int max = dataTable2.Black. FontStyle.Graphics. 400. new Font("Arial". FontStyle. 520.} } if(tabControl1. 200).Bold).HasMorePages = true.page++. e.pline++.DrawString("Sag at". pline*20+230).DrawString("Poles ". new Font("Arial".Bold). e.DrawString("15 degs". 300.ToString().DrawString("Spans". 10.DrawString("25 degs". e. e. Brushes. 10. FontStyle.Black.Bold).Rows[line]["Final sag (m)"]. 200). pline*20+230).Rows. 200).Black.Bold). e. FontStyle.Bold).Bold).DrawString("30 degs".Black. e.Black. 700.page = 1.DrawString("10 degs".Graphics. new Font("Arial". 10. 10.220. new Font("Arial". 500. new Font("Arial". Brushes.Graphics. 10. e. 10.ToString(). FontStyle. Brushes. 900.Count.SelectedIndex==2) { e. FontStyle. 100.Graphics. 270 .Black.Black. 200).Black. 10.DrawString(dataTable1. line =0. FontStyle. Brushes.Graphics.Bold).Bold). 800.Bold). 200). new Font("Arial".DrawString("20 degs". 390.Graphics.DrawString("5 degs". 200.220). e. 10.DrawLine(Pens.10. new Font("Arial". Brushes. 10. 200). FontStyle.200).HasMorePages = false. FontStyle.DrawString("35 degs".Bold). Brushes. line++. Brushes.Black. Brushes. e.Graphics. Brushes.Black. Brushes.Graphics. new Font("Arial". e. 680.Graphics.Graphics.Rows[line]["Stringing sag (m)"].Black. e.Rows[line]["Final tension (N)"].DrawString(dataTable1.DrawString(dataTable1.Black. new Font("Arial".Black. FontStyle. 10. FontStyle.Graphics.1200. new Font("Arial".Graphics. Brushes. } if(line < max) { e. pline*20+230). new Font("Arial".Bold).Black.Graphics. Brushes. 10.} else { e.Bold). 200). FontStyle. ToString(). 10.} 271 . 300.Bold).Black.while (line < e. FontStyle.Graphics.ToString().Bold). pline*20+220). pline*20+220). 10. FontStyle.Rows[line]["30 degrees"].MarginBounds. e. new Font("Arial". 800.Rows[line]["25 degrees"].ToString(). } if(line < max) { e. pline*20+220). Brushes. Brushes.Graphics. new Font("Arial".HasMorePages = true.page = 1.Bold).DrawString(dataTable2. 10. 700.DrawString(dataTable2.Bold). 400.DrawString(dataTable2.ToString(). new Font("Arial".page++.Black.Rows[line]["15 degrees"].Bold).Rows[line]["Sag at"]. 10. new Font("Arial". Brushes. pline*20+220). FontStyle. Brushes. FontStyle. new Font("Arial".Graphics. e. e. 10. pline*20+220). new Font("Arial".HasMorePages = false. Brushes. e. 10. pline*20+220).DrawString(dataTable2. Brushes. 500. Brushes. 200.DrawString(dataTable2.ToString(). 10.Black.Bold).Black. e. FontStyle. 100.Rows[line]["10 degrees"].Graphics. line++.ToString(). e. FontStyle.Graphics. e.Graphics.Bold).Black. 10.Black.pline++.DrawString(dataTable2.Black.DrawString(dataTable2.Rows[line]["20 degrees"]. pline*20+220).Bold). FontStyle. 10. Brushes.DrawString(dataTable2.Rows[line]["Poles"]. pline*20+220).Graphics. pline*20+220).Graphics. line =0.Bold). new Font("Arial". new Font("Arial".ToString().Graphics.DrawString(dataTable2. 10.Rows[line]["Span lengths"]. FontStyle. 10.Height*page/22&&line<max) { e. Brushes. new Font("Arial".Graphics.Black.ToString(). e.ToString(). Brushes.Black.ToString(). 900. FontStyle.Bold).Rows[line]["35 degrees"].DrawString(dataTable2. pline*20+220). 600.Rows[line]["5 degrees"].Black. new Font("Arial". FontStyle.} else { e. e. 10.Black.Bold).1200. e.230. new Font("Arial".210).Black.DrawString("Ground = "+GroundO.240). e. Brushes.Black. new Font("Arial". 10. 10.DrawString("Ground = "+GroundB. FontStyle.DrawString("Ground = "+GroundA. 10. Brushes.DrawString("Attachement = "+AttachB.Graphics.260).DrawString("Pole B". 10. new Font("Arial".240).Maroon. 220. new Font("Arial".Text+" 'C".Graphics. new Font("Arial". 10.Graphics.Black. FontStyle.Graphics.Graphics. FontStyle.Text+" m". e. 10. Brushes. 640.Bold). 260).Graphics. FontStyle.210).Graphics. 220. FontStyle. 10.240).260).DrawString("Clearance".Black. Brushes. Brushes. 10. e. 10.Bold).200).Graphics. 10. // Data line 2 e. FontStyle. Brushes.Text+" m".Graphics.DrawString("Pole A". e.Black. 10.240).Black.Bold).Text+" m".Black. new Font("Arial".Bold). 220. 10.Black. 272 .230). Brushes.210).10.Graphics. Brushes.DrawString("Temperature = " +condtemp. e.Bold).DrawString("Attachement = "+AttachA. Brushes. 640. 430. 240).Text+" m". e.260).SelectedIndex==3) { e.Bold). new Font("Arial". FontStyle.Black.DrawString("Object = "+nclearance.Bold).200. e.Black. FontStyle. e.10. e.Graphics.DrawString("General". 430. new Font("Arial".Graphics. FontStyle. 850. FontStyle. 430. e.Black. 10. 10. 640. 10.Bold). FontStyle. // Data line 3 e.Text+" m". new Font("Arial". new Font("Arial".Bold).Graphics. Brushes.Graphics.Bold).Black. 850. 10.DrawString("Object". Brushes. // Data line 1 e.1200.Text+" m".Bold).Graphics. Brushes.210). FontStyle. new Font("Arial". new Font("Arial". Brushes. new Font("Arial".Bold).Text+" m".210).Graphics. FontStyle. Brushes.} if(tabControl1. FontStyle.Black.DrawString("Span = " +ESpan.DrawLine(Pens.DrawLine(Pens.DrawString("Height = "+HeightO.Bold). new Font("Arial".Black. e.Text+" m". Graphics.DrawLine(Pens. max pole height = 80(ymax/6) leaving 400 for ground diffs int xmax = 1000.300. e. 10.ToDouble(GroundO. 10.// Pole B x = 200 m 90 % xmax // Declare varaibles int Ay = ymax .DrawString("Tension = "+TensionA. FontStyle. double L = Convert.300).Black.280).ToInt32(0.DrawString("Centre Tension = " +Tension.10.8))). e.//Pole foot co ord y = 0 % int By = ymax .DrawString("Worst distance = "+DWorst.1*xmax).// Pole A x = 200 m 10 % xmax int Bx = Convert.Bold). Brushes.Bold). 640.Graphics.Round(Convert. 850.280).ToInt32(Math.Black. FontStyle.Text))*ymax/32+10).Text+" m". FontStyle.Text+" N".ToDouble(GroundA.Graphics. new Font("Arial". 10.ToInt32(0.DrawString("Worst = "+Worst.Convert.Graphics.Black. Brushes.Black. new Font("Arial". e.ToInt32(Math.280). int ymax = 800. new Font("Arial". 850.Round(Convert.260).9*xmax).Graphics. new Font("Arial". new Font("Arial".Round(Convert.Black. Brushes.Graphics.Bold).ToDouble(ESpan.Text))*ymax/32+10).Graphics.Text+" m". 10.//Pole foot co ordy = 0 % int Oy = ymax .0.e. 10. 220.Round(Convert.DrawString("Distance from A = "+GroundDist.ToDouble(GroundDist.DrawString("Tension = "+TensionB. L = 1400 (xmax*0.Bold). 10.ToInt32(Math.Text)))).Text+" N".Text+" m". 430. e. //x 0 .Round(Convert.Text))*ymax/32+10). Brushes.Convert. Brushes.Bold).Black.//Object foot int Ox = Ax + (Convert. e.ToDouble(GroundB.Black. depends on pole lengths and ground levels. 280). new Font("Arial".ToInt32(Math.Text)/L*xmax*0.8) // Graph dimensions // constants int Ax = Convert.Text+" N".280).1200. 10. FontStyle. FontStyle. FontStyle.ToDouble((Math. // Data line 4 e.1000(xmax). Brushes. //y 800(ymax) .Bold).// Object distance 273 .Convert. ToDouble(HeightO.PAa).POa).Text!="") { Wx = Ax + (Convert. //Object ground Point POa = new Point(Ox. int Wy = Oy .Round(Convert.By).Text)*ymax/32)+10).By-Bh).PBa).Drawing.Text!="Clearance Violation"||Worst.ToDouble(DWorst.ToInt32(Math.Text)/L*xmax*0. double T = Convert.Ay). //sag at 2 x worst dist get sag for normal span double Wc = Convert.Text)))*ymax/32+10.DrawLine(System.ToInt32(Math.ToDouble(Mass.Graphics.ToInt32(Math.PBg.Oy).Drawing.Text!=""||DWorst.80665/1000. //Pole B e. int Wx = Ax+ xmax/2. // conductor Point PSh.Pens.Drawing.Text!="Uplift Case"||Worst.Round(Convert. //Pole A ground Point PAa = new Point(Ax.DrawLine(System.Text!="Uplift Case"||DWorst.Oh. //Object ground Point PBa = new Point(Bx.ToDouble(AttachA.8))).ToDouble(Tension.Ay-Ah). //Object attach Point PBg = new Point(Bx.Text)*9.Graphics.// Pole att height 10 = 60 int Bh = Convert.POg.Brown.ToInt32(Math.Pens.// Pole att height 10 = 60 int Oh = Convert.Text). if (Worst.Red.Text)*ymax/32)+10).Brown. //Object e.PAg. //Object attach //Pole A e.int Ah = Convert.ToDouble(AttachB.Round(Convert.Text!="Clearance Violation"||DWorst.Oy-Oh).Round(Convert.Graphics.Pens.// Object height 10 = 60 Point PAg = new Point(Ax.DrawLine(System. //Pole A attach Point POg = new Point(Ox.// Object distance 274 . // Ground Point []pointArray3 = {PAg.SelectedIndex==3) printDocument1.EventArgs e) { page = 1.pointArray2).SelectedIndex==2||tabControl1.Green.PSh.printDocument1. printDocument1.DocumentName = "Rsat". else printDocument1. System.Round(Convert.Wy).// Object height 10 = 60 } PSh = new Point(Wx . Point []pointArray2 = {PAa.Convert.Landscape = false. if(tabControl1.Wy = Oy .DefaultPageSettings.Text)*ymax/32)).Print().EventArgs e) { 275 .Graphics. printDocument1.ToInt32(Math.Dispose().PrintPageEventHandler(this.Graphics.ToDouble(Worst. } } private void Print_Click(object sender. } private void Creep_TextChanged(object sender. // Draw Conductor e.printDocument1_PrintPage).PrintPage += new System.Gray. line = 0.PBg}. this.Drawing.DrawCurve(System. e.Oh . printDocument1. pointArray3).PBa}.Drawing.Landscape = true.Pens. System.DrawCurve(System.Printing.Drawing.Pens.POg.DefaultPageSettings. if(Creep.doc".ShowDialog() == System. System.equivspan(). } } private void MainView_SizeChanged(object sender.DialogResult.EventArgs e) { // Initialize the SaveFileDialog to specify the RTF extension for the file. System. System.} } private void menuItem3_Click(object sender.EventArgs e) { screensize(). true.doc". if(saveFileDialog1.DefaultExt = "*.OK && saveFileDialog1.FileName. saveFileDialog1. // Determine if the user selected a file name from the saveFileDialog.FileName. saveFileDialog1.Windows.//XmlDocument myDoc = new XmlDocument().Filter = "Word File|*. 30).Text!="") {satupdate(). } private void Defaults_Click(object sender.EventArgs e) { DefaultLimits().Length > 0) { ExportToText (saveFileDialog1.Forms. } 276 . RemoveAt(dataTable2."------------------------------------------------".Rows."-----------------------------------------------". } } else 277 .Rows.EventArgs e) { ResetStringing().Text). "".Clear().Text). System. } int count = 0. count++. int Polef = Convert. if(Polef>Poles) { dataTable2."".Text+(count + Poles)+"-"+(count + Poles+1). dataTable2.Count-1).Text="".} dataTable2. "".Count>0) { while(dataTable2.Rows."".Add(new Object[] {"------------------------------------------------".""}). "Input span".RemoveAt(dataTable2.ToInt16(polef."------------------------------------------------".Rows. while (count<(Polef-Poles)) { dataTable2."------------------------------------------------".Rows.ToString()!="-----------------------------------------------") {dataTable2. "". if(dataTable2."". int Poles = Convert.Add(new Object[] {polep.Count-1]["5 degrees"]."------------------------------------------------".try { Error. "".private void button1_Click(object sender."------------------------------------------------"}).Rows.Rows[dataTable2.Count-1)."-----------------------------------------------".Rows."-----------------------------------------------"."------------------------------------------------".Rows.Rows.ToInt16(poles. ""})."."".""."".""."Tension". "Length = "."".Text."-----------------------------------------------"."-----------------------------------------------".""."Spans = ".""."------------------------------------------------".""."".count . "". "Input span"."". dataTable2."------------------------------------------------".Text = "Input error."------------------------------------------------".""}).""."------------------------------------------------". count++. "".Rows.count)+"-"+(Poles ."".1).Text.""."". ""."".Rows. "".Add(new Object[] {"".""."".Add(new Object[] {polep.""}). } catch { Error. } } } } 278 .Text+(Poles ."------------------------------------------------"}).""."". while (count<(Poles-Polef)) { dataTable2. } } dataTable2.Add(new Object[] {project.Rows."". dataTable2."".Rows.Rows."". dataTable2."".""}).".Add(new Object[] {"".Polef-Poles."------------------------------------------------"."". section.""."". "".Add(new Object[] {"Section".Rows."-----------------------------------------------".""." Section .""})."Equiv span = ".Add(new Object[] {"------------------------------------------------".{ dataTable2.