What is RubyShapes?
RubyShapes is a Ruby library that defines Shape objects analogous to geometric cross-sections. These Shape objects “have” the same geometric properties that their real world counterparts do. The long term goal is to use RubyShape objects as building blocks for a larger structural and mechanical calculation software library.
Geometric cross sections?
These are cross sections of 3D objects (square rods, circular rods, rectangular tubing, etc.) Each shapes’ cross section has properties that are that are used in structural and mechanical calculations.
Current version?
The current version of RubyShapes is v0.2.9.1. It has been tested on Ruby 1.8 & later.
License
RubyShapes is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. RubyShapes is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. For license specifics, see
Where is the source code?
The source can be found at the github RubyShapes repository.
Properties for each shape class
- x = x dimension (in.) (equiv. to outer diameter for round shapes)
- y = y dimension (in.) (equiv. to outer diameter for round shapes)
- a = square area (in^2)
- ix = second moment of area for xx (in^4)
- iy = second moment of area for yy (in^4)
- sx = section modulus for xx (in^3)
- sy = section modulus for yy (in^3)
- rx = radius of gyration for xx (in)
- ry = radius of gyration for yy (in)
- w = weight of shape per linear foot (lbs/ft) - right now assumes all shapes are steel
RubyShapes Structure:
- RubyShapes.rb - the main file, contains the definitions & calculations for each shape class. There is a testing area at the bottom of the file. Most of the shared code for RubyShapes is divided into several modules, each module lives as a file in the /lib/ folder.
- DiagUtils Module - Diagnostic messages.
- OutputUtils Module - Defines the methods that return values from the shape values.
- ShapeUtils Module - Defines property calculations that are common to multiple.
List of Classes
- Bar(x/y dimension) - Square bar shapes
- Plate(x dimension, y dimension) - Rectangular bar shapes
- Square_tube(x/y dimension, gauge/thickness) - Mild Steel As-Welded Mechanical Tubing
- Rec_tube(x dimension, y dimension, gauge/thickness) - Mild Steel As-Welded Mechanical Tubing
- Round_tube(outside diameter, thickness) Rod(outside diameter) - Round rod shapes
Output Methods
These methods are used to retrieve the calculated properties from the shape objects.
- .props Returns a human-readable list of the shape object’s properties (as floats, rounded to 4 places). Optional: include a (“variable”) parameter to the method to return that specific parameter’s value.
- .bigprops Returns a human-readable list of the shape object’s properties (as BigDecimals). Optional: include a (“variable”) parameter to the method to return that specific parameter’s value.
- .hash Returns the hash of Object properties (as floats, rounded to 4 places).
- .bighash Returns the hash of Object properties (as BigDecimals).
- .columns_header Prints a pretty, human-readable header for the columns method. Spacing is not currently ideal.
- .columns Returns the Object properties in a column format (as floats, rounded to 4 places).
ShapeUtilites Methods
These methods are invoked by the shape classes during object initialization. They are not very useful to the end user.
- Float::to_d
- .corner_radius Calculates corner radius for calculations. This method is not implemented yet.
- .gauge_converter Converts from steel gauge thicknesses to decimal thickness.
- .calc_weight Calculates weight values - currently assumes all shapes are mild steel.
- .build_hash Builds a hash of the shape object’s properties. Result is stored in the shape object’s hash variable.
Diagnostics Methods
These methods mostly only run when DIAGNOSTICS = on.
- .diag_section(“message”) Outputs a diagnostic section(header) line to the screen. — message —
- .diag_line(arg) Outputs a diagnostic line to the screen
- .diag_class Outputs which class is currently initializing. Prints the following: ==== Now initiating a Rec_tube class ====
- .test_output Prints Output Module Methods all at once for the receiver object. Good for batch testing the Output Module methods
- .var_classes Prints the classes for a predefined list of instance variables in the receiver object. DIAGNOSTIC flag independent.
- .var_values Prints the values for a predefined list of instance variable in the receiver object. DIAGNOSTIC flag independent.
- .diag_all Not implemented yet. It will be a comprehensive diagnostic inspection for any object. DIAGNOSTIC flag independent.