From f58875228dbf94bdfdbe1ed4fc34d117728036fb Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Fri, 15 May 2026 08:09:01 -0500 Subject: [PATCH] Closes #7775: have a BBIM_Dimension.SuppressZeroFeet like there is a BBIM_Dimension.SuppressZeroInches Generated with the assistance of an AI coding tool. --- src/bonsai/bonsai/bim/data/pset/Psets_BBIM_Annotation.ifc | 3 ++- src/bonsai/bonsai/bim/module/drawing/data.py | 2 ++ src/bonsai/bonsai/bim/module/drawing/decoration.py | 6 ++++-- src/bonsai/bonsai/bim/module/drawing/helper.py | 5 +++-- src/bonsai/bonsai/bim/module/drawing/svgwriter.py | 5 +++++ 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/data/pset/Psets_BBIM_Annotation.ifc b/src/bonsai/bonsai/bim/data/pset/Psets_BBIM_Annotation.ifc index e526cfdd1e..ee149d83c6 100644 --- a/src/bonsai/bonsai/bim/data/pset/Psets_BBIM_Annotation.ifc +++ b/src/bonsai/bonsai/bim/data/pset/Psets_BBIM_Annotation.ifc @@ -28,7 +28,7 @@ DATA; #21=IFCSIMPLEPROPERTYTEMPLATE('1UDakJ5_f7kBhggNSW4$h5',$,'SymbolsPath','Default symbols SVG',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); #22=IFCSIMPLEPROPERTYTEMPLATE('0d53LEtgLDQxnv__NfgH7i',$,'PatternsPath','Default patterns SVG',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); #23=IFCSIMPLEPROPERTYTEMPLATE('26qFNMv7nCHgU6Jd7Anga5',$,'ShadingStylesPath','Default shading styles',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); -#24=IFCPROPERTYSETTEMPLATE('0I9merLinF5Ap$aZwaclgm',$,'BBIM_Dimension','',.PSET_TYPEDRIVENOVERRIDE.,'IfcAnnotation/DIMENSION,IfcAnnotation/RADIUS,IfcAnnotation/DIAMETER,IfcTypeProduct',(#25,#26,#27,#28,#30,#34)); +#24=IFCPROPERTYSETTEMPLATE('0I9merLinF5Ap$aZwaclgm',$,'BBIM_Dimension','',.PSET_TYPEDRIVENOVERRIDE.,'IfcAnnotation/DIMENSION,IfcAnnotation/RADIUS,IfcAnnotation/DIAMETER,IfcTypeProduct',(#25,#26,#35,#27,#28,#30,#34)); #25=IFCSIMPLEPROPERTYTEMPLATE('1rL2AbQsXD8RbpoWH5pYOV',$,'ShowDescriptionOnly','Hide the measurement values and show only annotation description',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.); #26=IFCSIMPLEPROPERTYTEMPLATE('0SVyOfB0rC2xNfdRYf3XvY',$,'SuppressZeroInches','Suppress 0 inch values in dimension annotation text (for example: 12'' - 0" -> 12'')',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.); #27=IFCSIMPLEPROPERTYTEMPLATE('2bUmj458PBqPAtUoI3MXsb',$,'TextPrefix','Text to add before annotation measurement value',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); @@ -38,6 +38,7 @@ DATA; #31=IFCPROPERTYENUMERATION('CustomUnit',(IFCTEXT('Feet and Inches - Fractional'),IFCTEXT('Feet - Decimal'),IFCTEXT('Inches - Fractional'),IFCTEXT('Inches - Decimal'),IFCTEXT('Meters'),IFCTEXT('Decimeters'),IFCTEXT('Centimeters'),IFCTEXT('Millimeters')),$); #32=IFCSIMPLEPROPERTYTEMPLATE('0gjJzDYBX8P85qn1xcAOOo',$,'Reverse_List','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.); #34=IFCSIMPLEPROPERTYTEMPLATE('1Kx4Pm9nR8vBwZqTs2uYeL',$,'Separator','Characters placed between multiple dimension values when CustomUnit has more than one unit selected (default: '' / '')',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); +#35=IFCSIMPLEPROPERTYTEMPLATE('3Nf6Qs1mT0pWxBuCvDyEzA',$,'SuppressZeroFeet','Suppress 0 feet in dimension annotation text (for example: 0'' - 3 1/2" -> 3 1/2")',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.); #33=IFCSIMPLEPROPERTYTEMPLATE('22TrcxF8jFNB4buSmzjGEF',$,'List_Separator','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.); ENDSEC; END-ISO-10303-21; diff --git a/src/bonsai/bonsai/bim/module/drawing/data.py b/src/bonsai/bonsai/bim/module/drawing/data.py index 4341fa3883..d32adafe94 100644 --- a/src/bonsai/bonsai/bim/module/drawing/data.py +++ b/src/bonsai/bonsai/bim/module/drawing/data.py @@ -799,6 +799,7 @@ class DecoratorData: pset_data = ifcopenshell.util.element.get_pset(element, "BBIM_Dimension") or {} show_description_only = pset_data.get("ShowDescriptionOnly", False) suppress_zero_inches = pset_data.get("SuppressZeroInches", False) + suppress_zero_feet = pset_data.get("SuppressZeroFeet", False) text_prefix = pset_data.get("TextPrefix", None) or "" text_suffix = pset_data.get("TextSuffix", None) or "" custom_units = list(pset_data.get("CustomUnit", None) or []) @@ -808,6 +809,7 @@ class DecoratorData: "dimension_style": dimension_style, "show_description_only": show_description_only, "suppress_zero_inches": suppress_zero_inches, + "suppress_zero_feet": suppress_zero_feet, "text_prefix": text_prefix, "text_suffix": text_suffix, "fill_bg": fill_bg, diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 913f74c58f..779735537f 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -490,7 +490,7 @@ class BaseDecorator: self.draw_label(context, text=text, line_no=line_number_start, multiline=True, **draw_label_kwargs) @cache - def format_value(self, context, value, suppress_zero_inches=False, custom_unit=None, in_unit_length=False): + def format_value(self, context, value, suppress_zero_inches=False, suppress_zero_feet=False, custom_unit=None, in_unit_length=False): drawing_pset_data = DrawingsData.data["active_drawing_pset_data"] precision = drawing_pset_data.get("MetricPrecision", None) if not precision: @@ -502,6 +502,7 @@ class BaseDecorator: precision=precision, decimal_places=decimal_places, suppress_zero_inches=suppress_zero_inches, + suppress_zero_feet=suppress_zero_feet, custom_unit=custom_unit, in_unit_length=in_unit_length, ) @@ -751,6 +752,7 @@ class DimensionDecorator(BaseDecorator): context, length, suppress_zero_inches=dimension_data["suppress_zero_inches"], + suppress_zero_feet=dimension_data["suppress_zero_feet"], custom_unit=unit, ) for unit in units_to_format @@ -971,7 +973,7 @@ class RadiusDecorator(BaseDecorator): def get_text(): length = (spline_points[-1] - spline_points[-2]).length units_to_format = dimension_data["custom_units"] if dimension_data["custom_units"] else [None] - parts = [self.format_value(context, length, custom_unit=unit) for unit in units_to_format] + parts = [self.format_value(context, length, suppress_zero_feet=dimension_data["suppress_zero_feet"], custom_unit=unit) for unit in units_to_format] return "R" + dimension_data["separator"].join(str(p) for p in parts) self.draw_dimension_text( diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index ef72207914..694b392319 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -170,6 +170,7 @@ def format_distance( precision=None, decimal_places=None, suppress_zero_inches=False, + suppress_zero_feet=False, in_unit_length=False, custom_unit=None, ): @@ -310,10 +311,10 @@ def format_distance( tx_dist = "" if feet: tx_dist += str(feet) + "'" - if not feet and not add_inches: + if not feet and not add_inches and not suppress_zero_feet: tx_dist += str(feet) + "'" - if not feet and add_inches and unit_length != "INCHES": + if not feet and add_inches and unit_length != "INCHES" and not suppress_zero_feet: if value < 0: tx_dist += "-0' - " else: diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index 3c5234574d..2175acdcb9 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -1377,6 +1377,7 @@ class SvgWriter: radius, precision=self.precision, decimal_places=self.decimal_places, + suppress_zero_feet=dimension_data["suppress_zero_feet"], custom_unit=unit, ) for unit in units_to_format @@ -1506,6 +1507,7 @@ class SvgWriter: text_format=lambda x: "D" + x, show_description_only=dimension_data["show_description_only"], suppress_zero_inches=dimension_data["suppress_zero_inches"], + suppress_zero_feet=dimension_data["suppress_zero_feet"], text_prefix=dimension_data["text_prefix"], text_suffix=dimension_data["text_suffix"], fill_bg=dimension_data["fill_bg"], @@ -1533,6 +1535,7 @@ class SvgWriter: dimension_text=dimension_text, show_description_only=dimension_data["show_description_only"], suppress_zero_inches=dimension_data["suppress_zero_inches"], + suppress_zero_feet=dimension_data["suppress_zero_feet"], text_prefix=dimension_data["text_prefix"], text_suffix=dimension_data["text_suffix"], fill_bg=dimension_data["fill_bg"], @@ -1561,6 +1564,7 @@ class SvgWriter: text_format=lambda x: x, show_description_only=False, suppress_zero_inches=False, + suppress_zero_feet=False, text_prefix="", text_suffix="", fill_bg=False, @@ -1601,6 +1605,7 @@ class SvgWriter: precision=self.precision, decimal_places=self.decimal_places, suppress_zero_inches=suppress_zero_inches, + suppress_zero_feet=suppress_zero_feet, custom_unit=unit, ) for unit in units_to_format