From ebdb42dd8f01b9c6484a517ac616087123aeea67 Mon Sep 17 00:00:00 2001 From: Steve Newell Date: Thu, 22 Apr 2021 09:17:34 -0600 Subject: [PATCH] Add function that will convert a fractional string to a float, by parsing the string, converting the pieces and converting the pieces to a float. Shout out to @sowings13 and @loganhnry for the diagnosis and reporting it in https://github.com/macmanpb/CSV-BOM/issues/2 This will resolve https://github.com/macmanpb/CSV-BOM/issues/2 --- CSV-BOM.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/CSV-BOM.py b/CSV-BOM.py index 0cc4886..8b6b4d1 100644 --- a/CSV-BOM.py +++ b/CSV-BOM.py @@ -169,6 +169,19 @@ def replacePointDelimterOnPref(self, pref, value): return str(value).replace(".", ",") return str(value) + def convertToFloat(self, fraction_string): + try: + return float(fraction_string) + except ValueError: + num, denom = fraction_string.split('/') + try: + leading, num = num.split(' ') + whole = float(leading) + except ValueError: + whole = 0 + frac = float(num) / float(denom) + return whole - frac if whole < 0 else whole + frac + def collectData(self, design, bom, prefs): csvStr = '' defaultUnit = design.fusionUnitsManager.defaultLengthUnits @@ -208,9 +221,9 @@ def collectData(self, design, bom, prefs): for k in item["boundingBox"]: dim += item["boundingBox"][k] if dim > 0: - dimX = float(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["x"], defaultUnit, False)) - dimY = float(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["y"], defaultUnit, False)) - dimZ = float(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["z"], defaultUnit, False)) + dimX = self.convertToFloat(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["x"], defaultUnit, False)) + dimY = self.convertToFloat(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["y"], defaultUnit, False)) + dimZ = self.convertToFloat(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["z"], defaultUnit, False)) if prefs["sortDims"]: dimSorted = sorted([dimX, dimY, dimZ]) bbZ = "{0:.3f}".format(dimSorted[0]) @@ -272,9 +285,9 @@ def collectCutList(self, design, bom, prefs): for k in item["boundingBox"]: dim += item["boundingBox"][k] if dim > 0: - dimX = float(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["x"], defaultUnit, False)) - dimY = float(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["y"], defaultUnit, False)) - dimZ = float(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["z"], defaultUnit, False)) + dimX = self.convertToFloat(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["x"], defaultUnit, False)) + dimY = self.convertToFloat(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["y"], defaultUnit, False)) + dimZ = self.convertToFloat(design.fusionUnitsManager.formatInternalValue(item["boundingBox"]["z"], defaultUnit, False)) if prefs["sortDims"]: dims = sorted([dimX, dimY, dimZ])