From d45ed749863efb7aeb20621fb6136e6f0d02e8f7 Mon Sep 17 00:00:00 2001 From: Thomas Axelsson Date: Sat, 29 Jan 2022 10:01:56 +0100 Subject: [PATCH] .inchfrac member for formatting inch values as mixed fractional --- ParametricText.py | 4 ++++ README.md | 6 +++++ paramformatter.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++ paramparser.py | 23 ++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 paramformatter.py diff --git a/ParametricText.py b/ParametricText.py index 16f368d..1979342 100644 --- a/ParametricText.py +++ b/ParametricText.py @@ -59,6 +59,7 @@ importlib.reload(thomasa88lib.settings) from . import paramparser +from . import paramformatter MAP_CMD_ID = 'thomasa88_ParametricText_Map' MIGRATE_CMD_ID = 'thomasa88_ParametricText_Migrate' @@ -831,6 +832,7 @@ def sub_func(subst_match): member_sep = '' member = '' + # Strings can be sliced string_value = False if var_name == '_': @@ -918,6 +920,8 @@ def sub_func(subst_match): value = param.expression elif member == 'unit': value = param.unit + elif member == 'inchfrac': + value = paramformatter.mixed_frac_inch(param, design) else: return f'' diff --git a/README.md b/README.md index 321836e..2d137dc 100644 --- a/README.md +++ b/README.md @@ -20,3 +20,9 @@ https://parametrictext.readthedocs.io/en/stable/ [My Fusion 360™ app store page](https://apps.autodesk.com/en/Publisher/PublisherHomepage?ID=JLH9M8296BET) [All my add-ins on Github](https://github.com/topics/fusion-360?q=user%3Athomasa88) + +## Development + +### Running tests + +Currently, each unit test file is self-contained. Just execute each file with Python. diff --git a/paramformatter.py b/paramformatter.py new file mode 100644 index 0000000..54cb714 --- /dev/null +++ b/paramformatter.py @@ -0,0 +1,61 @@ +# This file is part of Parametric Text, a Fusion 360 add-in for creating text +# parameters. +# +# Copyright (c) 2020 Thomas Axelsson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Helper functions for formatting parameter values + +import math +import fractions + +def mixed_frac_inch(param, design): + if param.unit == '': + # Unit-less + inch_value = param.value + else: + inch_value = design.fusionUnitsManager.convert(param.value, 'internalUnits', 'in') + + sign_char = '' + if math.copysign(1, inch_value) < 0: + sign_char = '-' + + # Convert the number to a fractional number ("1.75" to "1 3/4") + frac = abs(fractions.Fraction(inch_value).limit_denominator()) + + # Get the integer part ("1" from "1 3/4"), if it's not 0. + int_part = int(frac) + + # Get the fractional part ("3/4" from "1 3/4"), if it's not 0. + fractional_part = frac % 1 + + value = sign_char + if int_part == 0 and fractional_part == 0: + value += '0' + elif int_part == 0: + value += str(fractional_part) + elif fractional_part == 0: + value += str(int_part) + else: + value += f'{int_part} {fractional_part}' + value += '"' + + # Build the mixed fraction ("(-)1 3/4") + return value diff --git a/paramparser.py b/paramparser.py index 3b7a683..c61caf1 100644 --- a/paramparser.py +++ b/paramparser.py @@ -1,3 +1,26 @@ +# This file is part of Parametric Text, a Fusion 360 add-in for creating text +# parameters. +# +# Copyright (c) 2020 Thomas Axelsson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + import re # [.][][:]