chiark / gitweb /
Fix typo
[cura.git] / Cura / util / util3d.py
1 from __future__ import absolute_import
2 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
3
4 import math
5
6 class Vector3(object):
7         def __init__(self, x=0.0, y=0.0, z=0.0):
8                 self.x = x
9                 self.y = y
10                 self.z = z
11
12         def __copy__(self):
13                 return Vector3(self.x, self.y, self.z)
14
15         def copy(self):
16                 return Vector3(self.x, self.y, self.z)
17
18         def __repr__(self):
19                 return 'V[%s, %s, %s]' % ( self.x, self.y, self.z )
20
21         def __add__(self, v):
22                 return Vector3( self.x + v.x, self.y + v.y, self.z + v.z )
23
24         def __sub__(self, v):
25                 return Vector3( self.x - v.x, self.y - v.y, self.z - v.z )
26
27         def __mul__(self, v):
28                 return Vector3( self.x * v, self.y * v, self.z * v )
29
30         def __div__(self, v):
31                 return Vector3( self.x / v, self.y / v, self.z / v )
32         __truediv__ = __div__
33
34         def __neg__(self):
35                 return Vector3( - self.x, - self.y, - self.z )
36
37         def __iadd__(self, v):
38                 self.x += v.x
39                 self.y += v.y
40                 self.z += v.z
41                 return self
42
43         def __isub__(self, v):
44                 self.x += v.x
45                 self.y += v.y
46                 self.z += v.z
47                 return self
48
49         def __imul__(self, v):
50                 self.x *= v
51                 self.y *= v
52                 self.z *= v
53                 return self
54
55         def __idiv__(self, v):
56                 self.x /= v
57                 self.y /= v
58                 self.z /= v
59                 return self
60
61         def almostEqual(self, v):
62                 return (abs(self.x - v.x) + abs(self.y - v.y) + abs(self.z - v.z)) < 0.00001
63         
64         def cross(self, v):
65                 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)
66
67         def vsize(self):
68                 return math.sqrt( self.x * self.x + self.y * self.y + self.z * self.z )
69
70         def normalize(self):
71                 f = self.vsize()
72                 if f != 0.0:
73                         self.x /= f
74                         self.y /= f
75                         self.z /= f
76
77         def min(self, v):
78                 return Vector3(min(self.x, v.x), min(self.y, v.y), min(self.z, v.z))
79
80         def max(self, v):
81                 return Vector3(max(self.x, v.x), max(self.y, v.y), max(self.z, v.z))
82