Difference between revisions of "Python Solution to Dimension Tracking"
Russ hensel (talk | contribs) |
Russ hensel (talk | contribs) |
||
Line 17: | Line 17: | ||
This class holds a single dimension. Of course you can just go: a_dimention = 22. What is wrong with that? This dimension has a name and a value. What it does not have is units or a type that may help distinguish between pure numbers ( teethe on a gear ), angles, and linear dimensions. Also I have upgraded the class so that it does easy unit conversions and is easy to print. | This class holds a single dimension. Of course you can just go: a_dimention = 22. What is wrong with that? This dimension has a name and a value. What it does not have is units or a type that may help distinguish between pure numbers ( teethe on a gear ), angles, and linear dimensions. Also I have upgraded the class so that it does easy unit conversions and is easy to print. | ||
− | Here is what you might get when you print a PartDimension | + | Here is what you might get when you print a PartDimension: |
<pre> | <pre> | ||
Line 27: | Line 27: | ||
bolt_sep ( mm ) = 25.0 | bolt_sep ( mm ) = 25.0 | ||
</pre> | </pre> | ||
+ | |||
+ | And here is what you get with a fairly fancy getter method: | ||
+ | |||
+ | <pre> | ||
+ | |||
+ | In: | ||
+ | a_dimention = PartDimension( "part name two", dim_type = "linear", radial = False, value = 27.3, units = "in") | ||
+ | print( a_dimention ) | ||
+ | |||
+ | print( a_dimention.get_value( units = "ft" ) ) | ||
+ | |||
+ | Out: | ||
+ | part name two ( mm ) = 693.42 | ||
+ | 2.275 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | A couple of implementation details. | ||
+ | |||
+ | * Dimensions are always stored in some base units, linear in mm, angles in radians, the getter methods convert to the desired units. | ||
=== === | === === |
Revision as of 08:46, 17 February 2017
The Problem
To make FreeCad work you often need to enter values of various dimensions. There does not seem to be a method internal to FreeCad ( and probably there should not be ). These dimensions come from various sources:
- Spec. sheets.
- Measurements
- Calculations
- Design decisions.
You more or less need some notes to keep track of this stuff. Some of this may be paper sketches, paper notes, and digital documents ( many may choose spreadsheets ). I find spreadsheets to be very error prone so I looked for a python solution. The very simple version of this is shown in: FreeCad Gear Box This has now evolved, and this document will describe the solution. For the actual code contact: User:Russ_hensel
A Python Solution
My Python solution consists of a set of interacting classes:
PartDimension
This class holds a single dimension. Of course you can just go: a_dimention = 22. What is wrong with that? This dimension has a name and a value. What it does not have is units or a type that may help distinguish between pure numbers ( teethe on a gear ), angles, and linear dimensions. Also I have upgraded the class so that it does easy unit conversions and is easy to print.
Here is what you might get when you print a PartDimension:
print a_dimension output: bolt_sep ( mm ) = 25.0
And here is what you get with a fairly fancy getter method:
In: a_dimention = PartDimension( "part name two", dim_type = "linear", radial = False, value = 27.3, units = "in") print( a_dimention ) print( a_dimention.get_value( units = "ft" ) ) Out: part name two ( mm ) = 693.42 2.275
A couple of implementation details.
- Dimensions are always stored in some base units, linear in mm, angles in radians, the getter methods convert to the desired units.