chiark / gitweb /
Look for CuraEngine in ..../CuraEngine/build/CuraEngine[.exe]
[cura.git] / Cura / util / util3d.py
1 """
2 The util3d module a vector class to work with 3D points. All the basic math operators have been overloaded to work on this object.
3 This module is deprecated and only used by the SplitModels function.
4
5 Use numpy arrays instead to work with vectors.
6 """
7 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
8
9 import math
10
11 class Vector3(object):
12         """ 3D vector object. """
13         def __init__(self, x=0.0, y=0.0, z=0.0):
14                 """Create a new 3D vector"""
15                 self.x = x
16                 self.y = y
17                 self.z = z
18
19         def __copy__(self):
20                 return Vector3(self.x, self.y, self.z)
21
22         def copy(self):
23                 return Vector3(self.x, self.y, self.z)
24
25         def __repr__(self):
26                 return 'V[%s, %s, %s]' % ( self.x, self.y, self.z )
27
28         def __add__(self, v):
29                 return Vector3( self.x + v.x, self.y + v.y, self.z + v.z )
30
31         def __sub__(self, v):
32                 return Vector3( self.x - v.x, self.y - v.y, self.z - v.z )
33
34         def __mul__(self, v):
35                 return Vector3( self.x * v, self.y * v, self.z * v )
36
37         def __div__(self, v):
38                 return Vector3( self.x / v, self.y / v, self.z / v )
39         __truediv__ = __div__
40
41         def __neg__(self):
42                 return Vector3( - self.x, - self.y, - self.z )
43
44         def __iadd__(self, v):
45                 self.x += v.x
46                 self.y += v.y
47                 self.z += v.z
48                 return self
49
50         def __isub__(self, v):
51                 self.x += v.x
52                 self.y += v.y
53                 self.z += v.z
54                 return self
55
56         def __imul__(self, v):
57                 self.x *= v
58                 self.y *= v
59                 self.z *= v
60                 return self
61
62         def __idiv__(self, v):
63                 self.x /= v
64                 self.y /= v
65                 self.z /= v
66                 return self
67
68         def almostEqual(self, v):
69                 return (abs(self.x - v.x) + abs(self.y - v.y) + abs(self.z - v.z)) < 0.00001
70         
71         def cross(self, v):
72                 return Vector3(self.y * v.z - self.z * v.y, -self.x * v.z + self.z * v.x, self.x * v.y - self.y * v.x)
73
74         def vsize(self):
75                 return math.sqrt( self.x * self.x + self.y * self.y + self.z * self.z )
76
77         def normalize(self):
78                 f = self.vsize()
79                 if f != 0.0:
80                         self.x /= f
81                         self.y /= f
82                         self.z /= f
83
84         def min(self, v):
85                 return Vector3(min(self.x, v.x), min(self.y, v.y), min(self.z, v.z))
86
87         def max(self, v):
88                 return Vector3(max(self.x, v.x), max(self.y, v.y), max(self.z, v.z))
89