Difference between revisions of "Python Solution to Dimension Tracking"

From OpenCircuits
Jump to navigation Jump to search
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 09: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.