From 56b8f76cfb608c8146f35cedd2ae44b9b020ad02 Mon Sep 17 00:00:00 2001 From: Roy-043 Date: Sat, 9 Dec 2023 19:14:48 +0100 Subject: [PATCH] Draft: Introduce DefaultAnnoScaleMultiplier parameter This parameter replaces DraftAnnotationScale. The parameter can be changed in the preferences and with the Draft_SetStyle command. --- .../Draft/Resources/ui/TaskPanel_SetStyle.ui | 15 +++++ .../Resources/ui/preferences-drafttexts.ui | 55 ++++++++++++++----- src/Mod/Draft/draftguitools/gui_setstyle.py | 6 ++ .../Draft/draftutils/init_draft_statusbar.py | 13 +++-- src/Mod/Draft/draftutils/params.py | 48 ++++++++++------ src/Mod/Draft/draftutils/utils.py | 6 +- .../view_draft_annotation.py | 6 +- 7 files changed, 104 insertions(+), 45 deletions(-) diff --git a/src/Mod/Draft/Resources/ui/TaskPanel_SetStyle.ui b/src/Mod/Draft/Resources/ui/TaskPanel_SetStyle.ui index 8cd8416281..a85f6582c4 100644 --- a/src/Mod/Draft/Resources/ui/TaskPanel_SetStyle.ui +++ b/src/Mod/Draft/Resources/ui/TaskPanel_SetStyle.ui @@ -273,6 +273,21 @@ + + + + Scale multiplier + + + + + + + The annotation scale multiplier is the inverse of the scale set in the +Annotation scale widget. If the scale is 1:100 the multiplier is 100. + + + diff --git a/src/Mod/Draft/Resources/ui/preferences-drafttexts.ui b/src/Mod/Draft/Resources/ui/preferences-drafttexts.ui index e881b72a99..01546d7eca 100644 --- a/src/Mod/Draft/Resources/ui/preferences-drafttexts.ui +++ b/src/Mod/Draft/Resources/ui/preferences-drafttexts.ui @@ -329,7 +329,41 @@ as "Arial", a style such as "sans", "serif" or &qu Units - + + + + Scale multiplier + + + + + + + The default annotation scale multiplier. This is the inverse of the scale set +in the Annotation scale widget. If the scale is 1:100 the multiplier is 100. + + + 0 + + + 1.0 + + + DefaultAnnoScaleMultiplier + + + Mod/Draft + + + + + + + Qt::Horizontal + + + + If checked, a unit symbol is added to dimension texts by default @@ -348,14 +382,14 @@ as "Arial", a style such as "sans", "serif" or &qu - + Unit override - + @@ -375,21 +409,14 @@ or cm, leave blank to use the current unit defined in FreeCAD. - - - - Qt::Horizontal - - - - + Number of decimals - + The default number of decimal places for dimension texts @@ -411,14 +438,14 @@ or cm, leave blank to use the current unit defined in FreeCAD. - + Feet separator - + diff --git a/src/Mod/Draft/draftguitools/gui_setstyle.py b/src/Mod/Draft/draftguitools/gui_setstyle.py index 2f59b8a8d6..e223a928ad 100644 --- a/src/Mod/Draft/draftguitools/gui_setstyle.py +++ b/src/Mod/Draft/draftguitools/gui_setstyle.py @@ -97,6 +97,7 @@ class Draft_SetStyle_TaskPanel: self.form.TextFont.setCurrentFont(QtGui.QFont(param_draft.GetString("textfont", "Sans"))) self.form.TextSize.setText(U.Quantity(param_draft.GetFloat("textheight", 3.5), U.Length).UserString) self.form.LineSpacing.setValue(param_draft.GetFloat("LineSpacing", 1)) + self.form.ScaleMultiplier.setValue(param_draft.GetFloat("DefaultAnnoScaleMultiplier", 1)) self.form.AnnoLineColor.setProperty("color", self.getColor(param_draft.GetUnsigned("DefaultAnnoLineColor", 255))) self.form.AnnoLineWidth.setValue(param_draft.GetInt("DefaultAnnoLineWidth", 2)) self.form.ArrowStyle.setCurrentIndex(param_draft.GetInt("dimsymbol", 0)) @@ -148,6 +149,7 @@ class Draft_SetStyle_TaskPanel: preset["TextFont"] = self.form.TextFont.currentFont().family() preset["TextSize"] = U.Quantity(self.form.TextSize.text()).Value preset["LineSpacing"] = self.form.LineSpacing.value() + preset["ScaleMultiplier"] = self.form.ScaleMultiplier.value() preset["AnnoLineColor"] = utils.argb_to_rgba(self.form.AnnoLineColor.property("color").rgba()) preset["AnnoLineWidth"] = self.form.AnnoLineWidth.value() preset["ArrowStyle"] = self.form.ArrowStyle.currentIndex() @@ -181,6 +183,7 @@ class Draft_SetStyle_TaskPanel: self.form.TextFont.setCurrentFont(QtGui.QFont(preset.get("TextFont", "Sans"))) self.form.TextSize.setText(U.Quantity(preset.get("TextSize", 3.5),U.Length).UserString) self.form.LineSpacing.setValue(preset.get("LineSpacing", 1)) + self.form.ScaleMultiplier.setValue(preset.get("ScaleMultiplier", 1)) self.form.AnnoLineColor.setProperty("color", self.getColor(preset.get("AnnoLineColor", preset.get("LineColor", 255)))) self.form.AnnoLineWidth.setValue(preset.get("AnnoLineWidth", preset.get("LineWidth", 2))) self.form.ArrowStyle.setCurrentIndex(preset.get("ArrowStyle", 0)) @@ -213,6 +216,7 @@ class Draft_SetStyle_TaskPanel: param_draft.SetString("textfont", self.form.TextFont.currentFont().family()) param_draft.SetFloat("textheight", U.Quantity(self.form.TextSize.text()).Value) param_draft.SetFloat("LineSpacing", self.form.LineSpacing.value()) + param_draft.SetFloat("DefaultAnnoScaleMultiplier", self.form.ScaleMultiplier.value()) param_draft.SetUnsigned("DefaultAnnoLineColor", utils.argb_to_rgba(self.form.AnnoLineColor.property("color").rgba())) param_draft.SetInt("DefaultAnnoLineWidth", self.form.AnnoLineWidth.value()) param_draft.SetInt("dimsymbol", self.form.ArrowStyle.currentIndex()) @@ -275,6 +279,8 @@ class Draft_SetStyle_TaskPanel: vobj.FontSize = U.Quantity(self.form.TextSize.text()).Value if "LineSpacing" in properties: vobj.LineSpacing = self.form.LineSpacing.value() + if "ScaleMultiplier" in properties: + vobj.ScaleMultiplier = self.form.ScaleMultiplier.value() if "LineColor" in properties: vobj.LineColor = self.form.AnnoLineColor.property("color").getRgbF()[:3] if "LineWidth" in properties: diff --git a/src/Mod/Draft/draftutils/init_draft_statusbar.py b/src/Mod/Draft/draftutils/init_draft_statusbar.py index 6e97ba3e80..adc3758210 100644 --- a/src/Mod/Draft/draftutils/init_draft_statusbar.py +++ b/src/Mod/Draft/draftutils/init_draft_statusbar.py @@ -126,7 +126,7 @@ def label_to_scale(label): elif "=" in label: f = label.split("=") else: - return + return None if len(f) == 2: try: num = App.Units.Quantity(f[0]).Value @@ -161,14 +161,16 @@ def _set_scale(action): scale = label_to_scale(custom_scale[0]) if scale is None: return - param.SetFloat("DraftAnnotationScale", scale) + if scale <= 0: + return + param.SetFloat("DefaultAnnoScaleMultiplier", 1 / scale) cs = scale_to_label(scale) scale_widget.scaleLabel.setText(cs) else: text_scale = action.text() scale_widget.scaleLabel.setText(text_scale) scale = label_to_scale(text_scale) - param.SetFloat("DraftAnnotationScale", scale) + param.SetFloat("DefaultAnnoScaleMultiplier", 1 / scale) #---------------------------------------------------------------------------- # MAIN DRAFT STATUSBAR FUNCTIONS @@ -190,7 +192,8 @@ def init_draft_statusbar_scale(): draft_scales = get_scales() # get draft annotation scale - draft_annotation_scale = param.GetFloat("DraftAnnotationScale", 1.0) + scale_multiplier = param.GetFloat("DefaultAnnoScaleMultiplier", 1) + annotation_scale = 1 / scale_multiplier if scale_multiplier > 0 else 1 # initializes scale widget scale_widget.draft_scales = draft_scales @@ -205,7 +208,7 @@ def init_draft_statusbar_scale(): menu.addAction(a) scaleLabel.setMenu(menu) gUnits.triggered.connect(_set_scale) - scale_label = scale_to_label(draft_annotation_scale) + scale_label = scale_to_label(annotation_scale) scaleLabel.setText(scale_label) scaleLabel.setToolTip(translate("draft", "Set the scale used by draft annotation tools")) diff --git a/src/Mod/Draft/draftutils/params.py b/src/Mod/Draft/draftutils/params.py index 8404119a5d..a8427953ed 100644 --- a/src/Mod/Draft/draftutils/params.py +++ b/src/Mod/Draft/draftutils/params.py @@ -35,38 +35,41 @@ from draftviewproviders import view_base class ParamObserverDraft: - def slotParamChanged(self, param, tp, name, value): - if name == "textheight": + def slotParamChanged(self, param_grp, typ, entry, value): + if entry == "textheight": _param_observer_callback_tray() return - if name in ("gridBorder", "gridShowHuman", "coloredGridAxes", "gridEvery", + if entry in ("gridBorder", "gridShowHuman", "coloredGridAxes", "gridEvery", "gridSpacing", "gridSize", "gridTransparency", "gridColor"): _param_observer_callback_grid() return - if name == "SnapBarShowOnlyDuringCommands": + if entry == "DefaultAnnoScaleMultiplier": + _param_observer_callback_scalemultiplier(value) + return + if entry == "SnapBarShowOnlyDuringCommands": _param_observer_callback_snapbar(value) return - if name == "DisplayStatusbarSnapWidget": + if entry == "DisplayStatusbarSnapWidget": _param_observer_callback_snapwidget() return - if name == "DisplayStatusbarScaleWidget": + if entry == "DisplayStatusbarScaleWidget": _param_observer_callback_scalewidget() return - if name == "snapStyle": + if entry == "snapStyle": _param_observer_callback_snapstyle() return - if name == "snapcolor": + if entry == "snapcolor": _param_observer_callback_snapcolor() return - if name == "patternFile": + if entry == "patternFile": _param_observer_callback_svg_pattern() return class ParamObserverView: - def slotParamChanged(self, param, tp, name, value): - if name in ("DefaultShapeColor", "DefaultShapeLineColor", "DefaultShapeLineWidth"): + def slotParamChanged(self, param_grp, typ, entry, value): + if entry in ("DefaultShapeColor", "DefaultShapeLineColor", "DefaultShapeLineWidth"): _param_observer_callback_tray() return @@ -80,6 +83,18 @@ def _param_observer_callback_tray(): Gui.draftToolBar.setStyleButton() +def _param_observer_callback_scalemultiplier(value): + value = float(value) # value is a string + if value <= 0: + return + mw = Gui.getMainWindow() + sb = mw.statusBar() + scale_widget = sb.findChild(QtGui.QToolBar,"draft_scale_widget") + if scale_widget is not None: + scale_label = init_draft_statusbar.scale_to_label(1 / value) + scale_widget.scaleLabel.setText(scale_label) + + def _param_observer_callback_grid(): if hasattr(App, "draft_working_planes") and hasattr(Gui, "Snapper"): try: @@ -98,13 +113,12 @@ def _param_observer_callback_grid(): def _param_observer_callback_snapbar(value): - # value is a string: "0" or "1" if Gui.activeWorkbench().name() not in ("DraftWorkbench", "ArchWorkbench", "BIMWorkbench"): return if hasattr(Gui, "Snapper"): toolbar = Gui.Snapper.get_snap_toolbar() if toolbar is not None: - toolbar.setVisible(value == "0") + toolbar.setVisible(value == "0") # value is a string: "0" or "1" def _param_observer_callback_snapwidget(): @@ -183,9 +197,9 @@ def _param_observer_start(): _param_observer_start_view() -def _param_observer_start_draft(param = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")): - param.AttachManager(ParamObserverDraft()) +def _param_observer_start_draft(param_grp = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")): + param_grp.AttachManager(ParamObserverDraft()) -def _param_observer_start_view(param = App.ParamGet("User parameter:BaseApp/Preferences/View")): - param.AttachManager(ParamObserverView()) +def _param_observer_start_view(param_grp = App.ParamGet("User parameter:BaseApp/Preferences/View")): + param_grp.AttachManager(ParamObserverView()) diff --git a/src/Mod/Draft/draftutils/utils.py b/src/Mod/Draft/draftutils/utils.py index 34fc4a0872..4358c731e1 100644 --- a/src/Mod/Draft/draftutils/utils.py +++ b/src/Mod/Draft/draftutils/utils.py @@ -62,8 +62,6 @@ arrowtypes = ARROW_TYPES def get_default_annotation_style(): param = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft") - anno_scale = param.GetFloat("DraftAnnotationScale", 1) - scale_mult = 1 / anno_scale if anno_scale > 0 else 1 arrow_type_index = param.GetInt("dimsymbol", 0) return { "ArrowSize": ("float", param.GetFloat("arrowsize", 1)), @@ -77,7 +75,7 @@ def get_default_annotation_style(): "LineColor": ("color", param.GetUnsigned("DefaultAnnoLineColor", 255)), "LineSpacing": ("float", param.GetFloat("LineSpacing", 1)), "LineWidth": ("int", param.GetInt("DefaultAnnoLineWidth", 2)), - "ScaleMultiplier": ("float", scale_mult), + "ScaleMultiplier": ("float", param.GetFloat("DefaultAnnoScaleMultiplier", 1)), "ShowLine": ("bool", param.GetBool("DimShowLine", True)), "ShowUnit": ("bool", param.GetBool("showUnit", True)), "TextColor": ("color", param.GetUnsigned("DefaultTextColor", 255)), @@ -205,7 +203,7 @@ def get_param_type(param): return "string" elif param in ("textheight", "arrowsize", "extlines", "dimspacing", "dimovershoot", "extovershoot", "HatchPatternSize", - "LineSpacing"): + "LineSpacing", "DefaultAnnoScaleMultiplier"): return "float" elif param in ("selectBaseObjects", "alwaysSnap", "grid", "fillmode", "DimShowLine", diff --git a/src/Mod/Draft/draftviewproviders/view_draft_annotation.py b/src/Mod/Draft/draftviewproviders/view_draft_annotation.py index 886e1aa895..433574f1ad 100644 --- a/src/Mod/Draft/draftviewproviders/view_draft_annotation.py +++ b/src/Mod/Draft/draftviewproviders/view_draft_annotation.py @@ -54,9 +54,6 @@ from draftutils.messages import _msg from draftutils.translate import translate -param = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft") - - class ViewProviderDraftAnnotation(object): """The base class for Draft Annotation viewproviders. @@ -90,8 +87,7 @@ class ViewProviderDraftAnnotation(object): "ScaleMultiplier", "Annotation", _tip) - anno_scale = param.GetFloat("DraftAnnotationScale", 1) - vobj.ScaleMultiplier = 1 / anno_scale if anno_scale > 0 else 1 + vobj.ScaleMultiplier = utils.get_param("DefaultAnnoScaleMultiplier", 1) if "AnnotationStyle" not in properties: _tip = QT_TRANSLATE_NOOP("App::Property",