ncca-ngl 0.3.4__tar.gz → 0.3.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/PKG-INFO +1 -1
  2. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/pyproject.toml +1 -1
  3. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/util.py +9 -0
  4. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/vec2.py +10 -1
  5. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/vec3.py +10 -1
  6. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/vec4.py +10 -0
  7. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/LICENSE.txt +0 -0
  8. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/.ruff_cache/.gitignore +0 -0
  9. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/.ruff_cache/0.13.0/10564494386971134025 +0 -0
  10. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/.ruff_cache/0.13.0/7783445477288392980 +0 -0
  11. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/.ruff_cache/CACHEDIR.TAG +0 -0
  12. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/NGLDebug.log +0 -0
  13. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/Primitives.npz +0 -0
  14. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/buddah.npy +0 -0
  15. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/bunny.npy +0 -0
  16. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/cube.npy +0 -0
  17. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/dodecahedron.npy +0 -0
  18. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/dragon.npy +0 -0
  19. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/football.npy +0 -0
  20. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/icosahedron.npy +0 -0
  21. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/octahedron.npy +0 -0
  22. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/pack_arrays.py +0 -0
  23. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/teapot.npy +0 -0
  24. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/tetrahedron.npy +0 -0
  25. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/PrimData/troll.npy +0 -0
  26. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/__init__.py +0 -0
  27. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/abstract_vao.py +0 -0
  28. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/base_mesh.py +0 -0
  29. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/base_mesh.pyi +0 -0
  30. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/bbox.py +0 -0
  31. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/bezier_curve.py +0 -0
  32. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/first_person_camera.py +0 -0
  33. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/image.py +0 -0
  34. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/log.py +0 -0
  35. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/mat2.py +0 -0
  36. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/mat3.py +0 -0
  37. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/mat4.py +0 -0
  38. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/multi_buffer_vao.py +0 -0
  39. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/obj.py +0 -0
  40. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/plane.py +0 -0
  41. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/prim_data.py +0 -0
  42. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/primitives.py +0 -0
  43. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/pyside_event_handling_mixin.py +0 -0
  44. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/quaternion.py +0 -0
  45. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/random.py +0 -0
  46. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shader.py +0 -0
  47. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shader_lib.py +0 -0
  48. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shader_program.py +0 -0
  49. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/checker_fragment.glsl +0 -0
  50. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/checker_vertex.glsl +0 -0
  51. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/colour_fragment.glsl +0 -0
  52. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/colour_vertex.glsl +0 -0
  53. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/diffuse_fragment.glsl +0 -0
  54. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/diffuse_vertex.glsl +0 -0
  55. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/text_fragment.glsl +0 -0
  56. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/text_geometry.glsl +0 -0
  57. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/shaders/text_vertex.glsl +0 -0
  58. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/simple_index_vao.py +0 -0
  59. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/simple_vao.py +0 -0
  60. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/text.py +0 -0
  61. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/texture.py +0 -0
  62. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/transform.py +0 -0
  63. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/vao_factory.py +0 -0
  64. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/vec2_array.py +0 -0
  65. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/vec3_array.py +0 -0
  66. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/vec4_array.py +0 -0
  67. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/NGLDebug.log +0 -0
  68. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/__init__.py +0 -0
  69. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/__main__.py +0 -0
  70. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/glsl/phong.frag +0 -0
  71. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/glsl/phong.vert +0 -0
  72. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/glsl/picking.frag +0 -0
  73. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/glsl/picking.vert +0 -0
  74. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/lookatwidget.py +0 -0
  75. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/mat4widget.py +0 -0
  76. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/rgbacolourwidget.py +0 -0
  77. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/rgbcolourwidget.py +0 -0
  78. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/transformation_widget.py +0 -0
  79. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/transformwidget.py +0 -0
  80. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/vec2widget.py +0 -0
  81. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/vec3widget.py +0 -0
  82. {ncca_ngl-0.3.4 → ncca_ngl-0.3.5}/src/ncca/ngl/widgets/vec4widget.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ncca-ngl
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: A Python version of the NGL graphics library.
5
5
  Author: Jon Macey
6
6
  Author-email: Jon Macey <jmacey@bournemouth.ac.uk>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ncca-ngl"
3
- version = "0.3.4"
3
+ version = "0.3.5"
4
4
  description = "A Python version of the NGL graphics library."
5
5
  authors = [{ name = "Jon Macey", email = "jmacey@bournemouth.ac.uk" }]
6
6
  requires-python = ">=3.13"
@@ -154,3 +154,12 @@ def calc_normal(p1, p2, p3):
154
154
  normal.normalize()
155
155
 
156
156
  return normal
157
+
158
+
159
+ def hash_combine(seed, h):
160
+ # emulate the NGL C++ combine: seed ^= h + 0x9e3779b9 + (seed<<6) + (seed>>2)
161
+ seed = (seed + 0x9E3779B9 + ((seed << 6) & 0xFFFFFFFFFFFFFFFF) + (seed >> 2)) & 0xFFFFFFFFFFFFFFFF
162
+ seed ^= h
163
+ return seed
164
+
165
+
@@ -7,7 +7,7 @@ import math
7
7
 
8
8
  import numpy as np
9
9
 
10
- from .util import clamp
10
+ from .util import clamp, hash_combine
11
11
 
12
12
 
13
13
  class Vec2:
@@ -44,6 +44,15 @@ class Vec2:
44
44
  yield self.x
45
45
  yield self.y
46
46
 
47
+ def __hash__(self):
48
+ # Use 32-bit float element hashes, then combine
49
+ seed = 0
50
+ for v in (self.x, self.y):
51
+ # ensure 32-bit float semantics
52
+ h = hash(float(np.float32(v)))
53
+ seed = hash_combine(seed, h)
54
+ return seed
55
+
47
56
  def copy(self) -> "Vec2":
48
57
  """
49
58
  Create a copy of the vector.
@@ -7,7 +7,7 @@ import math
7
7
 
8
8
  import numpy as np
9
9
 
10
- from .util import clamp
10
+ from .util import clamp, hash_combine
11
11
 
12
12
 
13
13
  class Vec3:
@@ -39,6 +39,15 @@ class Vec3:
39
39
  def sizeof(cls):
40
40
  return 3 * ctypes.sizeof(ctypes.c_float)
41
41
 
42
+ def __hash__(self):
43
+ # Use 32-bit float element hashes, then combine
44
+ seed = 0
45
+ for v in (self.x, self.y, self.z):
46
+ # ensure 32-bit float semantics
47
+ h = hash(float(np.float32(v)))
48
+ seed = hash_combine(seed, h)
49
+ return seed
50
+
42
51
  def __iter__(self):
43
52
  """
44
53
  Make the Vec3 class iterable.
@@ -8,6 +8,7 @@ import math
8
8
  import numpy as np
9
9
 
10
10
  from .log import logger
11
+ from .util import hash_combine
11
12
 
12
13
 
13
14
  class Vec4:
@@ -73,6 +74,15 @@ class Vec4:
73
74
  """
74
75
  return Vec4(self.x, self.y, self.z, self.w)
75
76
 
77
+ def __hash__(self):
78
+ # Use 32-bit float element hashes, then combine
79
+ seed = 0
80
+ for v in (self.x, self.y, self.z, self.w):
81
+ # ensure 32-bit float semantics
82
+ h = hash(float(np.float32(v)))
83
+ seed = hash_combine(seed, h)
84
+ return seed
85
+
76
86
  def __add__(self, rhs):
77
87
  "return a+b vector addition"
78
88
  r = Vec4()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes