-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathviewscale.py
More file actions
73 lines (60 loc) · 2.8 KB
/
viewscale.py
File metadata and controls
73 lines (60 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Handles conversion between mm and view level
# Based on scale, but applied to screen and fixed size
# For zoom in / zoom out then use QGraphicsView scale
class ViewScale():
mm_to_pixel_factor = 3.8
# Zoom factor is number representing how much to scale by
def __init__ (self, scale_factor=50):
self.scale_factor = scale_factor
# Perform conversion from mm to scale mm
# Normally do before convert to pixels
def scale_convert(self, mm_value):
return (mm_value / self.scale_factor)
# Does the opposite of scale convert - use when you need to keep
# exact size (eg. material thickness) - apply this then when it's
# scaled normally then it's back to normal - some losses due to rounding
# Still apply the mm_to_pixel separately
def reverse_scale_convert(self, mm_value):
return (mm_value * self.scale_factor)
# Normally use after converting to scale mm to convert to pixel size for SVG file
# Preferable than using mm in svg due to problems with translation with some apps
def mm_to_pixel(self, mm_value):
return mm_value * self.mm_to_pixel_factor
def pixel_to_mm(self, pixel_value):
return pixel_value / self.mm_to_pixel_factor
# Plural of mm_to_pixel - convert all entries in tuple or list
def mms_to_pixels(self, mm_values):
return_list = []
for value in mm_values:
return_list.append(self.mm_to_pixel(value))
return return_list
# Convert does full conversion from mm to pixel values
# Can handle list of values or single value
def convert(self, mm_values):
# if a single value
if (isinstance(mm_values, int) or isinstance(mm_values, float)):
scale_mm = self.scale_convert(mm_values)
pixel_value = self.mm_to_pixel(scale_mm)
return pixel_value
# Otherwise multiple values
return_list = []
for mm_value in mm_values:
scale_mm = self.scale_convert(mm_value)
pixel_value = self.mm_to_pixel(scale_mm)
return_list.append(pixel_value)
return return_list
# Convert does full conversion from pixel values to mm
# Can handle list of values or single value
def reverse_convert(self, pixel_values):
# if a single value
if (isinstance(pixel_values, int) or isinstance(pixel_values, float)):
scale_mm = self.reverse_scale_convert(pixel_values)
mm_value = self.pixel_to_mm(scale_mm)
return mm_value
# Otherwise multiple values
return_list = []
for pixel_value in pixel_values:
scale_mm = self.reverse_scale_convert(pixel_value)
mm_value = self.pixel_to_mm(scale_mm)
return_list.append(mm_value)
return return_list