From 7e8872efcdbb847a099e2c279a3f44b58140f95a Mon Sep 17 00:00:00 2001 From: Mario Voigt Date: Sun, 25 Sep 2022 18:53:36 +0200 Subject: [PATCH] added some more options to knob_scale and fixed some 0 division error in vertical scale --- .../fablabchemnitz/knob_scale/knob_scale.inx | 4 +++- .../fablabchemnitz/knob_scale/knob_scale.py | 23 ++++++++++++------- .../vertical_horizontal_scale.py | 4 ++++ 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/extensions/fablabchemnitz/knob_scale/knob_scale.inx b/extensions/fablabchemnitz/knob_scale/knob_scale.inx index aacdb3f..adce6b9 100644 --- a/extensions/fablabchemnitz/knob_scale/knob_scale.inx +++ b/extensions/fablabchemnitz/knob_scale/knob_scale.inx @@ -7,11 +7,13 @@ 0 0 100 - 300 + 300 + 300 1 true false false + false diff --git a/extensions/fablabchemnitz/knob_scale/knob_scale.py b/extensions/fablabchemnitz/knob_scale/knob_scale.py index 7157dd5..81f6aad 100644 --- a/extensions/fablabchemnitz/knob_scale/knob_scale.py +++ b/extensions/fablabchemnitz/knob_scale/knob_scale.py @@ -32,9 +32,11 @@ class KnobScale(inkex.EffectExtension): pars.add_argument("--radius", type=float, default=100.0, help="Knob radius") pars.add_argument("--linewidth", type=float, default=1) pars.add_argument("--angle", type=float, default=260.0, help="Angle of the knob scale in degrees") + pars.add_argument("--angle_shifting", type=float, default=0.0, help="Angle shifting") pars.add_argument("--draw_arc", type=inkex.Boolean, default='True') pars.add_argument("--draw_centering_circle", type=inkex.Boolean, default='False') pars.add_argument("--logarithmic_scale", type=inkex.Boolean, default='False', help="") + pars.add_argument("--invert", type=inkex.Boolean, default='False', help="") pars.add_argument("-u", "--units", default="px", help="units to measure size of knob") # Tick settings @@ -74,10 +76,10 @@ class KnobScale(inkex.EffectExtension): text.set('style', str(inkex.Style(style))) parent.append(text) - def draw_knob_arc(self, radius, parent, angle, transform='' ): + def draw_knob_arc(self, radius, parent, angle, angle_shifting, transform='' ): - start_point_angle = (angle - pi)/2.0 - end_point_angle = pi - start_point_angle + start_point_angle = angle_shifting + (angle - pi)/2.0 + end_point_angle = pi - start_point_angle + angle_shifting*2 style = { 'stroke' : '#000000', 'stroke-width' : str(self.options.linewidth), @@ -161,6 +163,7 @@ class KnobScale(inkex.EffectExtension): self.x_offset = self.svg.unittouu(str(self.options.x) + self.options.units) self.y_offset = self.svg.unittouu(str(self.options.y) + self.options.units) angle = self.options.angle*pi/180.0 + angle_shifting = self.options.angle_shifting*pi/180.0 n_ticks = self.options.n_ticks n_subticks = self.options.n_subticks is_outer = True @@ -173,8 +176,12 @@ class KnobScale(inkex.EffectExtension): # Labeling settings - start_num = self.options.start_value - end_num = self.options.stop_value + if self.options.invert is True: + end_num = self.options.start_value + start_num = self.options.stop_value + else: + start_num = self.options.start_value + end_num = self.options.stop_value text_spacing = self.svg.unittouu(str(self.options.text_offset) + self.options.units) text_size = self.svg.unittouu(str(self.options.text_size) + self.options.units) @@ -186,13 +193,13 @@ class KnobScale(inkex.EffectExtension): arc_radius = radius if self.options.draw_arc: - self.draw_knob_arc(arc_radius, parent, angle) + self.draw_knob_arc(arc_radius, parent, angle, angle_shifting) if self.options.draw_centering_circle: self.draw_centering_circle(arc_radius + tick_length + text_size + text_spacing, parent) if self.options.logarithmic_scale: - start_ticks_angle = 1.5*pi - 0.5*angle + start_ticks_angle = 1.5*pi - 0.5*angle + angle_shifting for tick in range(n_ticks): self.draw_tick(radius, start_ticks_angle + angle*log(tick+1)/log(n_ticks), tick_length, parent) @@ -218,7 +225,7 @@ class KnobScale(inkex.EffectExtension): subtick_length, parent) else: ticks_delta = angle / (n_ticks - 1) - start_ticks_angle = 1.5*pi - 0.5*angle + start_ticks_angle = 1.5*pi - 0.5*angle + angle_shifting for tick in range(n_ticks): self.draw_tick(radius, start_ticks_angle + ticks_delta*tick, diff --git a/extensions/fablabchemnitz/vertical_horizontal_scale/vertical_horizontal_scale.py b/extensions/fablabchemnitz/vertical_horizontal_scale/vertical_horizontal_scale.py index c7d1365..62f5961 100644 --- a/extensions/fablabchemnitz/vertical_horizontal_scale/vertical_horizontal_scale.py +++ b/extensions/fablabchemnitz/vertical_horizontal_scale/vertical_horizontal_scale.py @@ -441,6 +441,10 @@ class VerticalHorizontalScale(inkex.EffectExtension): def effect(self): scalefrom = self.options.scalefrom scaleto = self.options.scaleto + + if scalefrom - scaleto == 0: + inkex.utils.debug("Offset between number labels needs to be at least 1") + exit() scaleGroup = self.svg.get_current_layer().add(inkex.Group()) groups = [None, None, None, None]