engeom 0.2.8__cp38-abi3-win_amd64.whl → 0.2.9__cp38-abi3-win_amd64.whl

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.
@@ -1,10 +1,13 @@
1
1
  from typing import List, Iterable, Tuple, Union
2
2
  import numpy
3
+
3
4
  from .common import LabelPlace
4
5
  from engeom.geom2 import Curve2, Circle2, Aabb2, Point2, Vector2, SurfacePoint2
6
+ from engeom.geom3 import Vector3, Mesh, Point3
5
7
  from engeom.metrology import Distance2
6
8
 
7
9
  PlotCoords = Union[Point2, Vector2, Iterable[float]]
10
+ PointLike = Union[Point2, Tuple[float, float], Point3]
8
11
 
9
12
  try:
10
13
  from matplotlib.pyplot import Axes, Circle
@@ -273,3 +276,50 @@ def _tuplefy(item: PlotCoords) -> Tuple[float, float]:
273
276
  else:
274
277
  x, y, *_ = item
275
278
  return x, y
279
+
280
+
281
+ class TraceBuilder:
282
+ def __init__(self):
283
+ self.xs = []
284
+ self.ys = []
285
+ self.c = []
286
+
287
+ def bounds(self) -> Aabb2:
288
+ xs = [x for x in self.xs if x is not None]
289
+ ys = [y for y in self.ys if y is not None]
290
+ return Aabb2(
291
+ x_min=min(xs),
292
+ x_max=max(xs),
293
+ y_min=min(ys),
294
+ y_max=max(ys),
295
+ )
296
+
297
+ def add_segment(self, *points: PointLike):
298
+ self.add_points(*points)
299
+ self.add_blank()
300
+
301
+ def add_blank(self):
302
+ self.xs.append(None)
303
+ self.ys.append(None)
304
+ self.c.append(None)
305
+
306
+ def add_points(self, *points: PointLike):
307
+ for x, y, *_ in points:
308
+ self.xs.append(x)
309
+ self.ys.append(y)
310
+
311
+ def add_point_and_color(self, point: PointLike, color: float):
312
+ self.xs.append(point[0])
313
+ self.ys.append(point[1])
314
+ self.c.append(color)
315
+
316
+ def invert_y(self):
317
+ self.ys = [-y if y is not None else None for y in self.ys]
318
+
319
+ @property
320
+ def kwargs(self):
321
+ return dict(x=self.xs, y=self.ys)
322
+
323
+ @property
324
+ def xy(self):
325
+ return self.xs, self.ys
engeom/engeom.pyd CHANGED
Binary file
engeom/geom3.pyi CHANGED
@@ -745,6 +745,25 @@ class Mesh:
745
745
  """
746
746
  ...
747
747
 
748
+ @property
749
+ def face_normals(self) -> NDArray[float]:
750
+ """
751
+ Will return an immutable view of the face normals of the mesh as a numpy array of shape (m, 3), where m is the
752
+ number of triangles in the mesh.
753
+ :return: a numpy array of shape (m, 3) containing the normals of the triangles of the mesh.
754
+ """
755
+ ...
756
+
757
+ @property
758
+ def vertex_normals(self) -> NDArray[float]:
759
+ """
760
+ Will return an immutable view of the vertex normals of the mesh as a numpy array of shape (n, 3), where n is the
761
+ number of vertices in the mesh. If a vertex has no faces, the normal will be (0, 0, 0), otherwise the normal
762
+ will have been averaged from the normals of the faces that share the vertex.
763
+ :return: a numpy array of shape (n, 3) containing the normals of the vertices of the mesh.
764
+ """
765
+ ...
766
+
748
767
  @property
749
768
  def faces(self) -> NDArray[numpy.uint32]:
750
769
  """
engeom/plot.py CHANGED
@@ -21,6 +21,6 @@ except ImportError:
21
21
  pass
22
22
 
23
23
  try:
24
- from ._plot.matplotlib import GOM_CMAP, GomColorMap, MatplotlibAxesHelper
24
+ from ._plot.matplotlib import GOM_CMAP, GomColorMap, MatplotlibAxesHelper, TraceBuilder
25
25
  except ImportError:
26
26
  pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: engeom
3
- Version: 0.2.8
3
+ Version: 0.2.9
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -1,5 +1,5 @@
1
- engeom-0.2.8.dist-info/METADATA,sha256=gnuhFBwOVNWh60IM06NWjmdmYXdVDqj3_4uIlblmlBs,497
2
- engeom-0.2.8.dist-info/WHEEL,sha256=hKPP3BCTWtTwj6SFaSI--T5aOGqh_llYfbZ_BsqivwA,94
1
+ engeom-0.2.9.dist-info/METADATA,sha256=ySmYFygY2YZDxjNhkPBFDEvrC-IkmqFjysrpHSdaq3E,497
2
+ engeom-0.2.9.dist-info/WHEEL,sha256=hKPP3BCTWtTwj6SFaSI--T5aOGqh_llYfbZ_BsqivwA,94
3
3
  engeom/airfoil/__init__.py,sha256=gpS9pVepUu90XJ-ePndNupbUMKI0RGxNXPxD9x0iVHY,274
4
4
  engeom/airfoil.pyi,sha256=VTeJBoS9Iij7p-92R7jCqzPasHmvAUocyzc6BSx7mvM,23557
5
5
  engeom/align/__init__.py,sha256=SEeMqeqLKqJC73Mg8GwPwd9NwWnl-dcCqJ4rPdh8yyc,196
@@ -8,16 +8,16 @@ engeom/engeom.pyi,sha256=J0L_D-Sc2laJHL36nUAvIP3eN9BDryAxd_6aMQarlZc,1561
8
8
  engeom/geom2/__init__.py,sha256=JFpiLyROUh6vyakG-7JDSlCMCn4QB2MQ8bz3uVCaAIk,373
9
9
  engeom/geom2.pyi,sha256=508YJVNAJcZxEIZcWi4upcGtiZKoRnGtAW7TfTU3b3A,42922
10
10
  engeom/geom3/__init__.py,sha256=l8B0iDhJ4YiRbslJLN791XWai2DWrpmZptnzIETMS9g,370
11
- engeom/geom3.pyi,sha256=fcWaBcwVp76enp9aZrpnmVhIDpWxgay8eBauLR9T1Lk,56105
11
+ engeom/geom3.pyi,sha256=EFVmO1VaR5EHQeGR0FZCR-XqXQA9_XUP9kky7o3kovI,57003
12
12
  engeom/metrology/__init__.py,sha256=XvEhG8uDm1olWwZHDDrQv9LFP5zXhbsGx27PqRq8WE0,304
13
13
  engeom/metrology.pyi,sha256=9I5un86VB_2gmQBrVYhX8JzILTUADMLB9Em8ttJxrWg,4044
14
- engeom/plot.py,sha256=2b81-dW7aKKC1TjoDtRmppFKpzQOia7w6c4T2pExN0E,1065
14
+ engeom/plot.py,sha256=LTqqO-h1EJL6wanM0hB79s9ohWwaCIijMOHVplY3vmc,1079
15
15
  engeom/raster3/__init__.py,sha256=iaayLrvco-ZMZPyeK47ox7rYne_51DNb2T2Q0iNNeKE,289
16
16
  engeom/raster3.pyi,sha256=sBXXYXcDBiDU_OFDQiwa7Q3GcwSiUc4CLy6nJ1MwFqM,790
17
17
  engeom/_plot/common.py,sha256=Py78ufN3yi59hPwv21SoGcqyZUJS-_PmK8tlAKgSG7Q,517
18
- engeom/_plot/matplotlib.py,sha256=tTk4Fu6hDVxP1655koeT9B0JxkoURTr30ZyBV_jzTi8,11643
18
+ engeom/_plot/matplotlib.py,sha256=eqZsm-Lhq2svFSusW6_09T4UuxW9F0hBEbmMj6ZMywI,12934
19
19
  engeom/_plot/pyvista.py,sha256=COVgiw4XlcbGjiLYE-eJjK_TJgONMGdW54pFsLczFm4,11879
20
20
  engeom/_plot/__init__.py,sha256=F_KviZtxzZGwfEjjn8Ep46N4UVl8VpFJWBzbBUE_J7A,30
21
21
  engeom/__init__.py,sha256=kYgFq3jq1quDfV013wEYQMlUBz4QNSpP6u8lFiuTHvc,115
22
- engeom/engeom.pyd,sha256=-mT6YAX2RgPIon81973XUgOiDIhL4sH0iIWSYsZadh4,2402816
23
- engeom-0.2.8.dist-info/RECORD,,
22
+ engeom/engeom.pyd,sha256=D3LeWbFwwYzrdW54HjVUeYtyz_pmpypaWXTo3b-z2lQ,2446848
23
+ engeom-0.2.9.dist-info/RECORD,,
File without changes