mmgpy 0.3.0__cp312-cp312-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.
- bin/Release/mmg2d_O3.exe +0 -0
- bin/Release/mmg3d_O3.exe +0 -0
- bin/Release/mmgs_O3.exe +0 -0
- bin/__init__.py +10 -0
- bin/concrt140.dll +0 -0
- bin/mmg.dll +0 -0
- bin/mmg2d.dll +0 -0
- bin/mmg2d_O3.exe +0 -0
- bin/mmg3d.dll +0 -0
- bin/mmg3d_O3.exe +0 -0
- bin/mmgs.dll +0 -0
- bin/mmgs_O3.exe +0 -0
- bin/msvcp140.dll +0 -0
- bin/msvcp140_1.dll +0 -0
- bin/msvcp140_2.dll +0 -0
- bin/msvcp140_atomic_wait.dll +0 -0
- bin/msvcp140_codecvt_ids.dll +0 -0
- bin/vcruntime140.dll +0 -0
- bin/vcruntime140_1.dll +0 -0
- include/__init__.py +10 -0
- include/mmg/common/libmmgtypes.h +687 -0
- include/mmg/common/libmmgtypesf.h +762 -0
- include/mmg/common/mmg_export.h +47 -0
- include/mmg/common/mmgcmakedefines.h +46 -0
- include/mmg/common/mmgcmakedefinesf.h +29 -0
- include/mmg/common/mmgversion.h +54 -0
- include/mmg/libmmg.h +67 -0
- include/mmg/libmmgf.h +42 -0
- include/mmg/mmg2d/libmmg2d.h +2761 -0
- include/mmg/mmg2d/libmmg2df.h +3263 -0
- include/mmg/mmg2d/mmg2d_export.h +34 -0
- include/mmg/mmg3d/libmmg3d.h +3444 -0
- include/mmg/mmg3d/libmmg3df.h +4041 -0
- include/mmg/mmg3d/mmg3d_export.h +34 -0
- include/mmg/mmgs/libmmgs.h +2560 -0
- include/mmg/mmgs/libmmgsf.h +3028 -0
- include/mmg/mmgs/mmgs_export.h +34 -0
- lib/__init__.py +10 -0
- lib/cmake/mmg/FindElas.cmake +57 -0
- lib/cmake/mmg/FindSCOTCH.cmake +373 -0
- lib/cmake/mmg/MmgTargets-release.cmake +53 -0
- lib/cmake/mmg/MmgTargets.cmake +127 -0
- lib/cmake/mmg/mmgConfig.cmake +43 -0
- lib/mmg.lib +0 -0
- lib/mmg2d.lib +0 -0
- lib/mmg3d.lib +0 -0
- lib/mmgs.lib +0 -0
- mmgpy/__init__.py +888 -0
- mmgpy/_logging.py +86 -0
- mmgpy/_mmgpy.cp312-win_amd64.pyd +0 -0
- mmgpy/_mmgpy.pyi +650 -0
- mmgpy/_options.py +304 -0
- mmgpy/_progress.py +539 -0
- mmgpy/_pyvista.py +423 -0
- mmgpy/_version.py +3 -0
- mmgpy/_version.py.in +3 -0
- mmgpy/lagrangian.py +394 -0
- mmgpy/metrics.py +595 -0
- mmgpy/mmg2d.dll +0 -0
- mmgpy/mmg2d.lib +0 -0
- mmgpy/mmg3d.dll +0 -0
- mmgpy/mmg3d.lib +0 -0
- mmgpy/mmgs.dll +0 -0
- mmgpy/mmgs.lib +0 -0
- mmgpy/progress.py +57 -0
- mmgpy/py.typed +0 -0
- mmgpy/sizing.py +370 -0
- mmgpy-0.3.0.dist-info/DELVEWHEEL +2 -0
- mmgpy-0.3.0.dist-info/METADATA +75 -0
- mmgpy-0.3.0.dist-info/RECORD +132 -0
- mmgpy-0.3.0.dist-info/WHEEL +5 -0
- mmgpy-0.3.0.dist-info/entry_points.txt +6 -0
- mmgpy-0.3.0.dist-info/licenses/LICENSE +38 -0
- mmgpy.libs/vtkCommonColor-9.5-07cd19e9d77559cb8be83e8ac8833cd4.dll +0 -0
- mmgpy.libs/vtkCommonComputationalGeometry-9.5-4aaf997b087c330e171c14a4ba6be7b2.dll +0 -0
- mmgpy.libs/vtkCommonCore-9.5.dll +0 -0
- mmgpy.libs/vtkCommonDataModel-9.5.dll +0 -0
- mmgpy.libs/vtkCommonExecutionModel-9.5-2f7a1bae0a1d4d0e205eea43596a659c.dll +0 -0
- mmgpy.libs/vtkCommonMath-9.5-609b01246386fe29df2677fa5c7ca793.dll +0 -0
- mmgpy.libs/vtkCommonMisc-9.5-4173df33811eddea1529a40bf93266c8.dll +0 -0
- mmgpy.libs/vtkCommonSystem-9.5-e5b15bd84934b99e3b2bbe5d3e064c97.dll +0 -0
- mmgpy.libs/vtkCommonTransforms-9.5-9b76a61640718d893271cc0b5db50d1d.dll +0 -0
- mmgpy.libs/vtkDICOMParser-9.5-203c95a77d21799a8049a576e1b28f2e.dll +0 -0
- mmgpy.libs/vtkFiltersCellGrid-9.5-fa6bda61d2d528369d8b2f3a66d2d6b4.dll +0 -0
- mmgpy.libs/vtkFiltersCore-9.5-935a5f5225a975e99626296b2f3ded70.dll +0 -0
- mmgpy.libs/vtkFiltersExtraction-9.5-dc0a7543ba584f7e8ce9f9184485a228.dll +0 -0
- mmgpy.libs/vtkFiltersGeneral-9.5-709f69dbcca8aba1750582106a97c605.dll +0 -0
- mmgpy.libs/vtkFiltersGeometry-9.5-7abfb655763a62f56d63b45038d6e811.dll +0 -0
- mmgpy.libs/vtkFiltersHybrid-9.5-0721ec98d8a8b7442d900747e1ec59fb.dll +0 -0
- mmgpy.libs/vtkFiltersHyperTree-9.5-f9ee6a4761fdad8956c08a51dae77636.dll +0 -0
- mmgpy.libs/vtkFiltersModeling-9.5-458d9d2c544bb3c37de28c26c05c07bc.dll +0 -0
- mmgpy.libs/vtkFiltersParallel-9.5-1f243ffe308277c3970d8be4172d856f.dll +0 -0
- mmgpy.libs/vtkFiltersReduction-9.5-bf8c4a248bd84fbd6bb1a2ab5f646e56.dll +0 -0
- mmgpy.libs/vtkFiltersSources-9.5-492fa5b1b8562f4b141a347a38ae1ce5.dll +0 -0
- mmgpy.libs/vtkFiltersStatistics-9.5-6e99ef76387303ec5ff8c0fe6101d446.dll +0 -0
- mmgpy.libs/vtkFiltersTexture-9.5-15c23120b41b9a1c4acb01f790aad01f.dll +0 -0
- mmgpy.libs/vtkFiltersVerdict-9.5-332c0402a58129ec5b6af7b7f56cbb62.dll +0 -0
- mmgpy.libs/vtkIOCellGrid-9.5-88e1ec9c5a3554a82aedc0027fe84c6b.dll +0 -0
- mmgpy.libs/vtkIOCore-9.5.dll +0 -0
- mmgpy.libs/vtkIOGeometry-9.5-47c69db15c63c5773efa6851b59ae0a7.dll +0 -0
- mmgpy.libs/vtkIOImage-9.5-74bb92e688da5595ff9ff7645f9a0a13.dll +0 -0
- mmgpy.libs/vtkIOLegacy-9.5.dll +0 -0
- mmgpy.libs/vtkIOParallel-9.5.dll +0 -0
- mmgpy.libs/vtkIOParallelXML-9.5.dll +0 -0
- mmgpy.libs/vtkIOXML-9.5.dll +0 -0
- mmgpy.libs/vtkIOXMLParser-9.5-1893156c41fd4cf7165904675cb5d15d.dll +0 -0
- mmgpy.libs/vtkImagingCore-9.5-145fc0249cffbd27c610d10812e1cbfc.dll +0 -0
- mmgpy.libs/vtkImagingSources-9.5-f0c087a4669caa045584ed61f52502b7.dll +0 -0
- mmgpy.libs/vtkParallelCore-9.5-e91757b6dbd2a5369ab2bd05ff95d79d.dll +0 -0
- mmgpy.libs/vtkParallelDIY-9.5-04dd6b6b5dd8a5eacd43d270999cf09a.dll +0 -0
- mmgpy.libs/vtkRenderingCore-9.5-24a9802d77a083def26449fa681b1af7.dll +0 -0
- mmgpy.libs/vtkdoubleconversion-9.5-5e39712b9f4e44ea8a26e9119e53a7d4.dll +0 -0
- mmgpy.libs/vtkexpat-9.5-3b1dd25e09a2cccbbac723de448cb894.dll +0 -0
- mmgpy.libs/vtkfmt-9.5-50239b66bf315d100ecd306114139e9b.dll +0 -0
- mmgpy.libs/vtkjpeg-9.5-9412ee79f685a9196398b988a59666cd.dll +0 -0
- mmgpy.libs/vtkjsoncpp-9.5-abfad956527e3a4885dbb39f99f9e4d4.dll +0 -0
- mmgpy.libs/vtkkissfft-9.5-464db9175ce63de19addc69be524c4b7.dll +0 -0
- mmgpy.libs/vtkloguru-9.5-ec016ed005b4a79062e329ad8f1c382d.dll +0 -0
- mmgpy.libs/vtklz4-9.5-798b58f4518733b0eee8027eeba022fb.dll +0 -0
- mmgpy.libs/vtklzma-9.5-8f489b5430eb47d578de52c769a4dd5c.dll +0 -0
- mmgpy.libs/vtkmetaio-9.5-8f0a559399d53e4c7fc06272620b2167.dll +0 -0
- mmgpy.libs/vtkpng-9.5-1dbed3116ba7e31f56512a93b942cdf5.dll +0 -0
- mmgpy.libs/vtkpugixml-9.5-23ef37d65494ab52babc6d45b24764b7.dll +0 -0
- mmgpy.libs/vtksys-9.5.dll +0 -0
- mmgpy.libs/vtktiff-9.5-767fd93c8402517d5b2d1befab98c41e.dll +0 -0
- mmgpy.libs/vtktoken-9.5-f4ff567202eeb9a613c0b242aa05dbc9.dll +0 -0
- mmgpy.libs/vtkverdict-9.5-6bb84649d1b0ca1cc5454307fd35083b.dll +0 -0
- mmgpy.libs/vtkzlib-9.5-779937c44671e188e9f96125eb5afb12.dll +0 -0
- share/__init__.py +10 -0
- share/man/man1/mmg2d.1.gz +0 -0
- share/man/man1/mmg3d.1.gz +0 -0
- share/man/man1/mmgs.1.gz +0 -0
mmgpy/sizing.py
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"""Local sizing parameters for per-region mesh control.
|
|
2
|
+
|
|
3
|
+
This module provides convenient APIs for specifying local mesh sizing parameters,
|
|
4
|
+
enabling different mesh densities in different regions without manually constructing
|
|
5
|
+
metric fields.
|
|
6
|
+
|
|
7
|
+
Sizing constraints are stored on mesh objects and combined (minimum size wins)
|
|
8
|
+
to produce per-vertex metric fields before remeshing.
|
|
9
|
+
|
|
10
|
+
Examples
|
|
11
|
+
--------
|
|
12
|
+
Fine mesh in a spherical region:
|
|
13
|
+
|
|
14
|
+
>>> from mmgpy import MmgMesh3D
|
|
15
|
+
>>> mesh = MmgMesh3D.from_file("model.mesh")
|
|
16
|
+
>>> mesh.set_size_sphere(center=[0.5, 0.5, 0.5], radius=0.2, size=0.01)
|
|
17
|
+
>>> mesh.remesh(hmax=0.1, verbose=-1)
|
|
18
|
+
|
|
19
|
+
Multiple sizing constraints (minimum size wins):
|
|
20
|
+
|
|
21
|
+
>>> mesh.set_size_sphere(center=[0, 0, 0], radius=0.3, size=0.01)
|
|
22
|
+
>>> mesh.set_size_sphere(center=[1, 1, 1], radius=0.3, size=0.01)
|
|
23
|
+
>>> mesh.set_size_box(bounds=[[0.4, 0.4, 0.4], [0.6, 0.6, 0.6]], size=0.005)
|
|
24
|
+
>>> mesh.remesh(hmax=0.1, verbose=-1)
|
|
25
|
+
|
|
26
|
+
Distance-based sizing from a point:
|
|
27
|
+
|
|
28
|
+
>>> mesh.set_size_from_point(
|
|
29
|
+
... point=[0.5, 0.5, 0.5],
|
|
30
|
+
... near_size=0.01,
|
|
31
|
+
... far_size=0.1,
|
|
32
|
+
... influence_radius=0.5,
|
|
33
|
+
... )
|
|
34
|
+
>>> mesh.remesh(verbose=-1)
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
from __future__ import annotations
|
|
39
|
+
|
|
40
|
+
from abc import ABC, abstractmethod
|
|
41
|
+
from dataclasses import dataclass
|
|
42
|
+
from typing import TYPE_CHECKING
|
|
43
|
+
|
|
44
|
+
import numpy as np
|
|
45
|
+
|
|
46
|
+
if TYPE_CHECKING:
|
|
47
|
+
from numpy.typing import NDArray
|
|
48
|
+
|
|
49
|
+
from mmgpy import MmgMesh2D, MmgMesh3D, MmgMeshS
|
|
50
|
+
|
|
51
|
+
_BOUNDS_DIM_COUNT = 2
|
|
52
|
+
_ZERO_LENGTH_THRESHOLD = 1e-12
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass
|
|
56
|
+
class SizingConstraint(ABC):
|
|
57
|
+
"""Base class for sizing constraints."""
|
|
58
|
+
|
|
59
|
+
@abstractmethod
|
|
60
|
+
def compute_sizes(
|
|
61
|
+
self,
|
|
62
|
+
vertices: NDArray[np.float64],
|
|
63
|
+
) -> NDArray[np.float64]:
|
|
64
|
+
"""Compute target size at each vertex.
|
|
65
|
+
|
|
66
|
+
Parameters
|
|
67
|
+
----------
|
|
68
|
+
vertices : NDArray[np.float64]
|
|
69
|
+
Vertex coordinates, shape (n_vertices, dim).
|
|
70
|
+
|
|
71
|
+
Returns
|
|
72
|
+
-------
|
|
73
|
+
NDArray[np.float64]
|
|
74
|
+
Target size at each vertex, shape (n_vertices,).
|
|
75
|
+
Use np.inf for vertices where this constraint doesn't apply.
|
|
76
|
+
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@dataclass
|
|
81
|
+
class SphereSize(SizingConstraint):
|
|
82
|
+
"""Uniform size within a spherical region.
|
|
83
|
+
|
|
84
|
+
Parameters
|
|
85
|
+
----------
|
|
86
|
+
center : array_like
|
|
87
|
+
Center of the sphere, shape (dim,).
|
|
88
|
+
radius : float
|
|
89
|
+
Radius of the sphere. Must be positive.
|
|
90
|
+
size : float
|
|
91
|
+
Target edge size within the sphere. Must be positive.
|
|
92
|
+
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
center: NDArray[np.float64]
|
|
96
|
+
radius: float
|
|
97
|
+
size: float
|
|
98
|
+
|
|
99
|
+
def __post_init__(self) -> None: # noqa: D105
|
|
100
|
+
self.center = np.asarray(self.center, dtype=np.float64)
|
|
101
|
+
if self.radius <= 0:
|
|
102
|
+
msg = f"radius must be positive, got {self.radius}"
|
|
103
|
+
raise ValueError(msg)
|
|
104
|
+
if self.size <= 0:
|
|
105
|
+
msg = f"size must be positive, got {self.size}"
|
|
106
|
+
raise ValueError(msg)
|
|
107
|
+
|
|
108
|
+
def compute_sizes( # noqa: D102
|
|
109
|
+
self,
|
|
110
|
+
vertices: NDArray[np.float64],
|
|
111
|
+
) -> NDArray[np.float64]:
|
|
112
|
+
distances = np.linalg.norm(vertices - self.center, axis=1)
|
|
113
|
+
|
|
114
|
+
sizes = np.full(len(vertices), np.inf, dtype=np.float64)
|
|
115
|
+
|
|
116
|
+
inside_mask = distances <= self.radius
|
|
117
|
+
sizes[inside_mask] = self.size
|
|
118
|
+
|
|
119
|
+
return sizes
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
@dataclass
|
|
123
|
+
class BoxSize(SizingConstraint):
|
|
124
|
+
"""Uniform size within a box region.
|
|
125
|
+
|
|
126
|
+
Parameters
|
|
127
|
+
----------
|
|
128
|
+
bounds : array_like
|
|
129
|
+
Box bounds as [[xmin, ymin, zmin], [xmax, ymax, zmax]] for 3D
|
|
130
|
+
or [[xmin, ymin], [xmax, ymax]] for 2D.
|
|
131
|
+
size : float
|
|
132
|
+
Target edge size within the box. Must be positive.
|
|
133
|
+
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
bounds: NDArray[np.float64]
|
|
137
|
+
size: float
|
|
138
|
+
|
|
139
|
+
def __post_init__(self) -> None: # noqa: D105
|
|
140
|
+
self.bounds = np.asarray(self.bounds, dtype=np.float64)
|
|
141
|
+
if self.bounds.shape[0] != _BOUNDS_DIM_COUNT:
|
|
142
|
+
msg = f"bounds must have shape (2, dim), got {self.bounds.shape}"
|
|
143
|
+
raise ValueError(msg)
|
|
144
|
+
if self.size <= 0:
|
|
145
|
+
msg = f"size must be positive, got {self.size}"
|
|
146
|
+
raise ValueError(msg)
|
|
147
|
+
|
|
148
|
+
def compute_sizes( # noqa: D102
|
|
149
|
+
self,
|
|
150
|
+
vertices: NDArray[np.float64],
|
|
151
|
+
) -> NDArray[np.float64]:
|
|
152
|
+
min_corner = self.bounds[0]
|
|
153
|
+
max_corner = self.bounds[1]
|
|
154
|
+
|
|
155
|
+
inside_mask = np.all(
|
|
156
|
+
(vertices >= min_corner) & (vertices <= max_corner),
|
|
157
|
+
axis=1,
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
sizes = np.full(len(vertices), np.inf, dtype=np.float64)
|
|
161
|
+
sizes[inside_mask] = self.size
|
|
162
|
+
|
|
163
|
+
return sizes
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
@dataclass
|
|
167
|
+
class CylinderSize(SizingConstraint):
|
|
168
|
+
"""Uniform size within a cylindrical region.
|
|
169
|
+
|
|
170
|
+
Parameters
|
|
171
|
+
----------
|
|
172
|
+
point1 : array_like
|
|
173
|
+
First endpoint of cylinder axis, shape (3,).
|
|
174
|
+
point2 : array_like
|
|
175
|
+
Second endpoint of cylinder axis, shape (3,).
|
|
176
|
+
radius : float
|
|
177
|
+
Radius of the cylinder. Must be positive.
|
|
178
|
+
size : float
|
|
179
|
+
Target edge size within the cylinder. Must be positive.
|
|
180
|
+
|
|
181
|
+
"""
|
|
182
|
+
|
|
183
|
+
point1: NDArray[np.float64]
|
|
184
|
+
point2: NDArray[np.float64]
|
|
185
|
+
radius: float
|
|
186
|
+
size: float
|
|
187
|
+
|
|
188
|
+
def __post_init__(self) -> None: # noqa: D105
|
|
189
|
+
self.point1 = np.asarray(self.point1, dtype=np.float64)
|
|
190
|
+
self.point2 = np.asarray(self.point2, dtype=np.float64)
|
|
191
|
+
if self.radius <= 0:
|
|
192
|
+
msg = f"radius must be positive, got {self.radius}"
|
|
193
|
+
raise ValueError(msg)
|
|
194
|
+
if self.size <= 0:
|
|
195
|
+
msg = f"size must be positive, got {self.size}"
|
|
196
|
+
raise ValueError(msg)
|
|
197
|
+
|
|
198
|
+
def compute_sizes( # noqa: D102
|
|
199
|
+
self,
|
|
200
|
+
vertices: NDArray[np.float64],
|
|
201
|
+
) -> NDArray[np.float64]:
|
|
202
|
+
axis = self.point2 - self.point1
|
|
203
|
+
axis_length = np.linalg.norm(axis)
|
|
204
|
+
if axis_length < _ZERO_LENGTH_THRESHOLD:
|
|
205
|
+
msg = "Cylinder axis has zero length"
|
|
206
|
+
raise ValueError(msg)
|
|
207
|
+
axis_unit = axis / axis_length
|
|
208
|
+
|
|
209
|
+
v = vertices - self.point1
|
|
210
|
+
proj_length = np.dot(v, axis_unit)
|
|
211
|
+
proj_point = self.point1 + np.outer(proj_length, axis_unit)
|
|
212
|
+
radial_dist = np.linalg.norm(vertices - proj_point, axis=1)
|
|
213
|
+
|
|
214
|
+
in_height = (proj_length >= 0) & (proj_length <= axis_length)
|
|
215
|
+
in_radius = radial_dist <= self.radius
|
|
216
|
+
inside_mask = in_height & in_radius
|
|
217
|
+
|
|
218
|
+
sizes = np.full(len(vertices), np.inf, dtype=np.float64)
|
|
219
|
+
sizes[inside_mask] = self.size
|
|
220
|
+
|
|
221
|
+
return sizes
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
@dataclass
|
|
225
|
+
class PointSize(SizingConstraint):
|
|
226
|
+
"""Distance-based sizing from a point.
|
|
227
|
+
|
|
228
|
+
Size varies linearly from near_size at the point to far_size at
|
|
229
|
+
influence_radius distance.
|
|
230
|
+
|
|
231
|
+
Parameters
|
|
232
|
+
----------
|
|
233
|
+
point : array_like
|
|
234
|
+
Reference point, shape (dim,).
|
|
235
|
+
near_size : float
|
|
236
|
+
Target size at the reference point. Must be positive.
|
|
237
|
+
far_size : float
|
|
238
|
+
Target size at influence_radius distance and beyond. Must be positive.
|
|
239
|
+
influence_radius : float
|
|
240
|
+
Distance over which size transitions from near_size to far_size.
|
|
241
|
+
Must be positive.
|
|
242
|
+
|
|
243
|
+
"""
|
|
244
|
+
|
|
245
|
+
point: NDArray[np.float64]
|
|
246
|
+
near_size: float
|
|
247
|
+
far_size: float
|
|
248
|
+
influence_radius: float
|
|
249
|
+
|
|
250
|
+
def __post_init__(self) -> None: # noqa: D105
|
|
251
|
+
self.point = np.asarray(self.point, dtype=np.float64)
|
|
252
|
+
if self.near_size <= 0:
|
|
253
|
+
msg = f"near_size must be positive, got {self.near_size}"
|
|
254
|
+
raise ValueError(msg)
|
|
255
|
+
if self.far_size <= 0:
|
|
256
|
+
msg = f"far_size must be positive, got {self.far_size}"
|
|
257
|
+
raise ValueError(msg)
|
|
258
|
+
if self.influence_radius <= 0:
|
|
259
|
+
msg = f"influence_radius must be positive, got {self.influence_radius}"
|
|
260
|
+
raise ValueError(msg)
|
|
261
|
+
|
|
262
|
+
def compute_sizes( # noqa: D102
|
|
263
|
+
self,
|
|
264
|
+
vertices: NDArray[np.float64],
|
|
265
|
+
) -> NDArray[np.float64]:
|
|
266
|
+
distances = np.linalg.norm(vertices - self.point, axis=1)
|
|
267
|
+
t = np.clip(distances / self.influence_radius, 0.0, 1.0)
|
|
268
|
+
return self.near_size + t * (self.far_size - self.near_size)
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
def compute_sizes_from_constraints(
|
|
272
|
+
vertices: NDArray[np.float64],
|
|
273
|
+
constraints: list[SizingConstraint],
|
|
274
|
+
) -> NDArray[np.float64]:
|
|
275
|
+
"""Compute combined sizing from multiple constraints.
|
|
276
|
+
|
|
277
|
+
Multiple constraints are combined by taking the minimum size at each vertex
|
|
278
|
+
(finest mesh wins).
|
|
279
|
+
|
|
280
|
+
Parameters
|
|
281
|
+
----------
|
|
282
|
+
vertices : NDArray[np.float64]
|
|
283
|
+
Vertex coordinates, shape (n_vertices, dim).
|
|
284
|
+
constraints : list[SizingConstraint]
|
|
285
|
+
List of sizing constraints.
|
|
286
|
+
|
|
287
|
+
Returns
|
|
288
|
+
-------
|
|
289
|
+
NDArray[np.float64]
|
|
290
|
+
Combined target size at each vertex, shape (n_vertices,).
|
|
291
|
+
|
|
292
|
+
"""
|
|
293
|
+
if not constraints:
|
|
294
|
+
msg = "No sizing constraints provided"
|
|
295
|
+
raise ValueError(msg)
|
|
296
|
+
|
|
297
|
+
n_vertices = len(vertices)
|
|
298
|
+
combined = np.full(n_vertices, np.inf, dtype=np.float64)
|
|
299
|
+
|
|
300
|
+
for constraint in constraints:
|
|
301
|
+
sizes = constraint.compute_sizes(vertices)
|
|
302
|
+
combined = np.minimum(combined, sizes)
|
|
303
|
+
|
|
304
|
+
return combined
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def sizes_to_metric(
|
|
308
|
+
sizes: NDArray[np.float64],
|
|
309
|
+
) -> NDArray[np.float64]:
|
|
310
|
+
"""Convert scalar sizes to metric tensor format.
|
|
311
|
+
|
|
312
|
+
Parameters
|
|
313
|
+
----------
|
|
314
|
+
sizes : NDArray[np.float64]
|
|
315
|
+
Target sizes at each vertex, shape (n_vertices,).
|
|
316
|
+
|
|
317
|
+
Returns
|
|
318
|
+
-------
|
|
319
|
+
NDArray[np.float64]
|
|
320
|
+
Metric field suitable for mesh["metric"], shape (n_vertices, 1).
|
|
321
|
+
|
|
322
|
+
"""
|
|
323
|
+
return sizes.reshape(-1, 1)
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
def apply_sizing_constraints(
|
|
327
|
+
mesh: MmgMesh3D | MmgMesh2D | MmgMeshS,
|
|
328
|
+
constraints: list[SizingConstraint],
|
|
329
|
+
existing_metric: NDArray[np.float64] | None = None,
|
|
330
|
+
) -> None:
|
|
331
|
+
"""Apply sizing constraints to a mesh by setting its metric field.
|
|
332
|
+
|
|
333
|
+
Parameters
|
|
334
|
+
----------
|
|
335
|
+
mesh : MmgMesh3D | MmgMesh2D | MmgMeshS
|
|
336
|
+
Mesh to apply sizing to.
|
|
337
|
+
constraints : list[SizingConstraint]
|
|
338
|
+
List of sizing constraints.
|
|
339
|
+
existing_metric : NDArray[np.float64] | None
|
|
340
|
+
Existing metric field to combine with. If provided, minimum size wins.
|
|
341
|
+
|
|
342
|
+
"""
|
|
343
|
+
if not constraints:
|
|
344
|
+
return
|
|
345
|
+
|
|
346
|
+
vertices = mesh.get_vertices()
|
|
347
|
+
sizes = compute_sizes_from_constraints(vertices, constraints)
|
|
348
|
+
|
|
349
|
+
if existing_metric is not None and existing_metric.shape[1] == 1:
|
|
350
|
+
existing_sizes = existing_metric.ravel()
|
|
351
|
+
sizes = np.minimum(sizes, existing_sizes)
|
|
352
|
+
|
|
353
|
+
finite_mask = np.isfinite(sizes)
|
|
354
|
+
if not np.any(finite_mask):
|
|
355
|
+
# No constraints applied to any vertex (all sizes are inf).
|
|
356
|
+
# This can happen if all region-based constraints are placed outside
|
|
357
|
+
# the mesh bounds. Silently return without modifying the metric field,
|
|
358
|
+
# allowing remeshing to proceed with global parameters only.
|
|
359
|
+
return
|
|
360
|
+
|
|
361
|
+
metric = sizes_to_metric(sizes)
|
|
362
|
+
|
|
363
|
+
inf_mask = ~finite_mask
|
|
364
|
+
if np.any(inf_mask):
|
|
365
|
+
finite_sizes = sizes[finite_mask]
|
|
366
|
+
if len(finite_sizes) > 0:
|
|
367
|
+
max_size = np.max(finite_sizes) * 10
|
|
368
|
+
metric[inf_mask] = max_size
|
|
369
|
+
|
|
370
|
+
mesh["metric"] = metric
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Version: 1.11.2
|
|
2
|
+
Arguments: ['D:\\a\\_temp\\setup-uv-cache\\archive-v0\\Zyd5P78WnNh3Fa7XxkoSi\\Scripts\\delvewheel', 'repair', '-w', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-8u5zzq2y\\cp312-win_amd64\\repaired_wheel', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-8u5zzq2y\\cp312-win_amd64\\built_wheel\\mmgpy-0.3.0-cp312-cp312-win_amd64.whl', '--add-path', 'C:/bin', '--ignore-in-wheel']
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: mmgpy
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Python bindings for the MMG software
|
|
5
|
+
Author-Email: Kevin MArchais <kevinmarchais@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Classifier: Development Status :: 4 - Beta
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Requires-Dist: meshio>=5.3.5
|
|
17
|
+
Requires-Dist: numpy>=2.0.2
|
|
18
|
+
Requires-Dist: patchelf>=0.17.2.4; sys_platform == "linux"
|
|
19
|
+
Requires-Dist: pyvista>=0.46.4
|
|
20
|
+
Requires-Dist: rich>=13.0.0
|
|
21
|
+
Requires-Dist: scipy>=1.11.0
|
|
22
|
+
Requires-Dist: typing-extensions>=4.0.0; python_version < "3.11"
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# mmgpy
|
|
26
|
+
|
|
27
|
+
This is a Python package that provides bindings for the [MMG software](https://www.mmgtools.org) for mesh generation and optimization.
|
|
28
|
+
The goal in the end is to provide a pythonic interface to mmg's capabilities.
|
|
29
|
+
|
|
30
|
+
Example from [`examples/mmgs/mechanical_piece_remeshing.py`](https://github.com/kmarchais/mmgpy/blob/main/examples/mmgs/mechanical_piece_remeshing.py) ([original tutorial](https://www.mmgtools.org/mmg-remesher-try-mmg/mmg-remesher-tutorials/mmg-remesher-mmgs/mmg-remesher-mechanical-piece-remeshing)):
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
Example from [`examples/mmgs/smooth_surface_remeshing.py`](https://github.com/kmarchais/mmgpy/blob/main/examples/mmgs/smooth_surface_remeshing.py) ([original tutorial](https://www.mmgtools.org/mmg-remesher-try-mmg/mmg-remesher-tutorials/mmg-remesher-mmgs/mmg-remesher-smooth-surface-remeshing)):
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
Example from [`examples/mmg3d/mesh_quality_improvement.py`](https://github.com/kmarchais/mmgpy/blob/main/examples/mmg3d/mesh_quality_improvement.py) ([original tutorial](https://www.mmgtools.org/mmg-remesher-try-mmg/mmg-remesher-tutorials/mmg-remesher-mmg3d/mesh-quality-improvement-with-mean-edge-lengths-preservation)):
|
|
37
|
+

|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
|
|
41
|
+
Install from PyPI (Windows, macOS, and Linux):
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install mmgpy
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or with `uv`:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
uv pip install mmgpy
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
To install directly from the repository:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pip install git+https://github.com/kmarchais/mmgpy.git
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Build dependencies
|
|
60
|
+
|
|
61
|
+
- pybind11: Used for Python bindings
|
|
62
|
+
- BSD 3-Clause License
|
|
63
|
+
- Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
|
|
64
|
+
|
|
65
|
+
- CMake (>= 3.0): Build system
|
|
66
|
+
- BSD 3-Clause License
|
|
67
|
+
- Copyright 2000-2024 Kitware, Inc. and Contributors
|
|
68
|
+
|
|
69
|
+
- scikit-build: Python build system integration
|
|
70
|
+
- MIT License
|
|
71
|
+
- Copyright (c) 2014 Mike Sarahan
|
|
72
|
+
|
|
73
|
+
- pytest: Testing framework
|
|
74
|
+
- MIT License
|
|
75
|
+
- Copyright (c) 2004 Holger Krekel and others
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
bin/concrt140.dll,sha256=JAU1XwpYBnslj43zPDJ-Oj1xbqrFo6Wuu3V4Qthb03Y,324208
|
|
2
|
+
bin/mmg.dll,sha256=HU-q6n3S7yNtq-zP_zqSoArcv-ehx4ZlAkfNG7Y0y2o,1226752
|
|
3
|
+
bin/mmg2d.dll,sha256=6-NHaYCSZL0X9ITeeumowZEgccXEBWvjC5Jw043Ilfo,372224
|
|
4
|
+
bin/mmg2d_O3.exe,sha256=MG6T0URrVglS2ogGpzeBPfGE8A2oGG1HcnwdGwUuV60,22016
|
|
5
|
+
bin/mmg3d.dll,sha256=8lVyyoqmTCYEycTaAKch6I-GBhtMdOjsh7pPw-7IRkM,784384
|
|
6
|
+
bin/mmg3d_O3.exe,sha256=C9T28YHRVPKtvPmez5am4zrfV2V8RPsgLXbyfhaoLsA,22016
|
|
7
|
+
bin/mmgs.dll,sha256=AAb3b1wtP1xMMWbA4ajK-5j9ryy3_FUXy6PLh2CIuPg,432640
|
|
8
|
+
bin/mmgs_O3.exe,sha256=s7HiizIQjcyW_RxmdRbMdjVPFt-gob4ca4sCtOMuo90,23040
|
|
9
|
+
bin/msvcp140.dll,sha256=D4hbUJpoXSu_plL-0mtfsx2I-9qwqXjGQdHHuKpGCqk,557728
|
|
10
|
+
bin/msvcp140_1.dll,sha256=v61a70xjpmnjwUBlXN_fOVtsl5tACkR71dy2XtiCbD0,35952
|
|
11
|
+
bin/msvcp140_2.dll,sha256=PqBvDuCYtII8t5WZ3zeA5_I8zlLBmqwx0qDUfv4zpek,280200
|
|
12
|
+
bin/msvcp140_atomic_wait.dll,sha256=ZAsq787UhNA2jupb3Qat3QZYo6cKSSVuVg1pI7QEpHk,50304
|
|
13
|
+
bin/msvcp140_codecvt_ids.dll,sha256=8gaaUogOyIXufwURGGEA63-toEEaK0lI-v6nc1uHihg,31872
|
|
14
|
+
bin/vcruntime140.dll,sha256=1eTZo-g1-meUUBRdan2U42VzpQkxcRGQTZs3EsMNkGY,124544
|
|
15
|
+
bin/vcruntime140_1.dll,sha256=Hy1BxKpdsLwz6_e2bXKUOoF9fObL6IBQKpQDgjYzCT8,49792
|
|
16
|
+
bin/__init__.py,sha256=es9KsDl5hd8r6F1CiYPwtEJbfgrGeY6bOzcS932ykN0,325
|
|
17
|
+
bin/Release/mmg2d_O3.exe,sha256=MG6T0URrVglS2ogGpzeBPfGE8A2oGG1HcnwdGwUuV60,22016
|
|
18
|
+
bin/Release/mmg3d_O3.exe,sha256=C9T28YHRVPKtvPmez5am4zrfV2V8RPsgLXbyfhaoLsA,22016
|
|
19
|
+
bin/Release/mmgs_O3.exe,sha256=s7HiizIQjcyW_RxmdRbMdjVPFt-gob4ca4sCtOMuo90,23040
|
|
20
|
+
include/__init__.py,sha256=es9KsDl5hd8r6F1CiYPwtEJbfgrGeY6bOzcS932ykN0,325
|
|
21
|
+
include/mmg/libmmg.h,sha256=SuiwjHkK5L0z_TIl0YXlpOCjyKKYIlxZys881jhfRI8,2450
|
|
22
|
+
include/mmg/libmmgf.h,sha256=dw9j7Urlcdk4WqUKUhxAk6Lxul1anP2UVPia6fhS9yY,1753
|
|
23
|
+
include/mmg/common/libmmgtypes.h,sha256=Z1cyLqcjsQgDLjWrdEv6nZyIIuEY_7v2Jc9HRfbNNKk,24469
|
|
24
|
+
include/mmg/common/libmmgtypesf.h,sha256=JQOvz2vK_5Ua74mPGZ5Tzgiiarw7dUWlcroniJzbv3M,27094
|
|
25
|
+
include/mmg/common/mmgcmakedefines.h,sha256=hVPltFUorABr3aLl6j35GiG0Yl9fZW2zyDDTg6yCWHk,1771
|
|
26
|
+
include/mmg/common/mmgcmakedefinesf.h,sha256=Eu5uNxkfHxPgB6nHjM1DJUO7pNXk6AKS7KwJFYLWfdY,1316
|
|
27
|
+
include/mmg/common/mmgversion.h,sha256=3nHvWm9WDJiy2_lylllxwzsI9xtUuw7QDJPzW0VvQh0,2150
|
|
28
|
+
include/mmg/common/mmg_export.h,sha256=fJWppzen-Io2DRvOZJ0DrEeYEPaTIYU1ZNmXY-q6ecc,1954
|
|
29
|
+
include/mmg/mmg2d/libmmg2d.h,sha256=OviS5ZpXp3x8hhgwm8DOQRijUpio0mEG_AU-tJsVXXI,109436
|
|
30
|
+
include/mmg/mmg2d/libmmg2df.h,sha256=bA1SQZZazVpDPpITAMHpp3tevPbCU4oD5Z-AFjxZn2Q,113898
|
|
31
|
+
include/mmg/mmg2d/mmg2d_export.h,sha256=b0iLUfupFR-TleFMcEb8SReHkpnXWtILiQI0UkeMn70,1442
|
|
32
|
+
include/mmg/mmg3d/libmmg3d.h,sha256=aS8D5DJBF7hzNsissTJ2Xizo3wZWMLkOFuMGh9XBkBg,138260
|
|
33
|
+
include/mmg/mmg3d/libmmg3df.h,sha256=0kVVKKj8lS_Nkpta9v93H8Ubf8dgtweNAwRa9D98LsM,143632
|
|
34
|
+
include/mmg/mmg3d/mmg3d_export.h,sha256=wSo0kEQyo9chYY6D_LYvCRACJXG8TLELthoAT50IbO8,1442
|
|
35
|
+
include/mmg/mmgs/libmmgs.h,sha256=Hm380P3iNoAoB3vyn-LhZ7zF7YQ8Tj6c_1PgC1VhWCE,100741
|
|
36
|
+
include/mmg/mmgs/libmmgsf.h,sha256=4kwQyw6DwVrMkCKrIny_18H05hYo-CWV9gqDn2knoTo,104955
|
|
37
|
+
include/mmg/mmgs/mmgs_export.h,sha256=f0y6JKDSguWIv4JfoGm6Sif2izR0BvcZQ1izDdvZVZw,1437
|
|
38
|
+
lib/mmg.lib,sha256=kXXxBcrDhThNzymDetSh-b6NC6Q4j0gwRJ7zFTc8Dmc,88692
|
|
39
|
+
lib/mmg2d.lib,sha256=3nrShJnVROEXIUIO3gxiU0TlLDdOtn6wLvrOKIuAhCE,34192
|
|
40
|
+
lib/mmg3d.lib,sha256=lAeWhOEhTsqwKbN8vtneD8RHtMXIgoNMo96y_3XLllk,39728
|
|
41
|
+
lib/mmgs.lib,sha256=UtN7XqaAPts2YzVfCQ0uevHXXc2OljO-lXxUKuMLDt0,31666
|
|
42
|
+
lib/__init__.py,sha256=es9KsDl5hd8r6F1CiYPwtEJbfgrGeY6bOzcS932ykN0,325
|
|
43
|
+
lib/cmake/mmg/FindElas.cmake,sha256=LvQ66sIOO5tRw8GU0sH_lEJgeJhUrkhUAXSOxxfrSZY,2137
|
|
44
|
+
lib/cmake/mmg/FindSCOTCH.cmake,sha256=JnH6usBQmGdfTxwcaj8dspRuOKtx0BqnkVwbDorcxOg,12480
|
|
45
|
+
lib/cmake/mmg/mmgConfig.cmake,sha256=Mhaz7qvtvVI9Y9G7DOj7vtoFBZEodNbKCGUOHMB3SOo,1350
|
|
46
|
+
lib/cmake/mmg/MmgTargets-release.cmake,sha256=D6s0LsBMQwyeX3ztSzVbHhc9N3LB662Xj8FiDBef7V4,3036
|
|
47
|
+
lib/cmake/mmg/MmgTargets.cmake,sha256=CnlWeDFywPi3WSX4CMNi6d6c6UoVilI-MjgXDRWCwwU,4997
|
|
48
|
+
mmgpy/lagrangian.py,sha256=i9_QPlWkw1S6grVeHwcWtfrvKUH1AAbVvkSsLZju9Dw,13261
|
|
49
|
+
mmgpy/metrics.py,sha256=ESqQ10ZjBqYLBb-FjIF7cSxo06qrRwkUBGiyvnYK1Ys,18683
|
|
50
|
+
mmgpy/mmg2d.dll,sha256=6-NHaYCSZL0X9ITeeumowZEgccXEBWvjC5Jw043Ilfo,372224
|
|
51
|
+
mmgpy/mmg2d.lib,sha256=3nrShJnVROEXIUIO3gxiU0TlLDdOtn6wLvrOKIuAhCE,34192
|
|
52
|
+
mmgpy/mmg3d.dll,sha256=8lVyyoqmTCYEycTaAKch6I-GBhtMdOjsh7pPw-7IRkM,784384
|
|
53
|
+
mmgpy/mmg3d.lib,sha256=lAeWhOEhTsqwKbN8vtneD8RHtMXIgoNMo96y_3XLllk,39728
|
|
54
|
+
mmgpy/mmgs.dll,sha256=AAb3b1wtP1xMMWbA4ajK-5j9ryy3_FUXy6PLh2CIuPg,432640
|
|
55
|
+
mmgpy/mmgs.lib,sha256=UtN7XqaAPts2YzVfCQ0uevHXXc2OljO-lXxUKuMLDt0,31666
|
|
56
|
+
mmgpy/progress.py,sha256=9SI3gcsp9pjvBR8kVnuKnswgVVBfrDqDNgOrw6m_OY0,1393
|
|
57
|
+
mmgpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
+
mmgpy/sizing.py,sha256=cHbB_2WEmN4eUwRXDnkefnclxNZVsH9r-VpYqPJvToI,11171
|
|
59
|
+
mmgpy/_logging.py,sha256=O9EYFBEve-A61cln-tUlazaLy9fD1MFOxRAhg4iWTRk,2241
|
|
60
|
+
mmgpy/_mmgpy.cp312-win_amd64.pyd,sha256=vWrrPWzfje2i2Sb02v2u7H-Nrk9N36NYap_2NV1wMNE,416768
|
|
61
|
+
mmgpy/_mmgpy.pyi,sha256=VUZBVV7j-7fDPatDflNjYAxFDJsfFfY0FYV7uhsJukY,21071
|
|
62
|
+
mmgpy/_options.py,sha256=uJdvIv2IyFrf77YNpeVH8jK_rCiDRVIuCnnbILzjb20,8821
|
|
63
|
+
mmgpy/_progress.py,sha256=h6iEmAuwZGIH6ScprJyWjzccPsflEkfjy4McfQZpK3o,15801
|
|
64
|
+
mmgpy/_pyvista.py,sha256=X7YTPBmvD1p9vgAEERHCKMncgQ7ruGy1dUOPvnJ_v-4,13082
|
|
65
|
+
mmgpy/_version.py,sha256=bB09HpF3mbwpAiNM2svmLcqMGBMH42TZJkj1OAJynsM,53
|
|
66
|
+
mmgpy/_version.py.in,sha256=zSyxqlGSpsKY4ONjnNGRwP3vZgho9RwAM5JHjcdU5MI,63
|
|
67
|
+
mmgpy/__init__.py,sha256=Ng5xono-7vwydawAT15nb1O-1AvoYRqxKVQw7npR1yc,29991
|
|
68
|
+
mmgpy-0.3.0.dist-info/DELVEWHEEL,sha256=dxkPLMLTUVbhFAbQXA4WR3jvaixaWN-zAuYtboutU1Q,413
|
|
69
|
+
mmgpy-0.3.0.dist-info/entry_points.txt,sha256=FTs8BO44K4ytneBcUgWDQKtJPKkO-WSPr-ckNkI-f3g,134
|
|
70
|
+
mmgpy-0.3.0.dist-info/METADATA,sha256=L2ZdJ662V3AqkSvmOvWLrhl8h8g8BID0plv4nVwD9nI,2956
|
|
71
|
+
mmgpy-0.3.0.dist-info/RECORD,,
|
|
72
|
+
mmgpy-0.3.0.dist-info/WHEEL,sha256=chqeLhPBtPdrOoreR34YMcofSk3yWDQhkrsDJ2n48LU,106
|
|
73
|
+
mmgpy-0.3.0.dist-info/licenses/LICENSE,sha256=cDeMFhk0f8fEM2w_x3c-PU_vdKi32xumcKeyEsqMEzE,1684
|
|
74
|
+
mmgpy.libs/vtkCommonColor-9.5-07cd19e9d77559cb8be83e8ac8833cd4.dll,sha256=B80Z6dd1WcuL6D6KyIM81IDlv6CwS0HCEbEBOUPRPeE,109568
|
|
75
|
+
mmgpy.libs/vtkCommonComputationalGeometry-9.5-4aaf997b087c330e171c14a4ba6be7b2.dll,sha256=Sq-Zewh8Mw4XHBSkumvnsrVos9lsLfFpcRG-6jUNXzU,169472
|
|
76
|
+
mmgpy.libs/vtkCommonCore-9.5.dll,sha256=cPijWu5PX_irMKSFQd334hF7DJSxf2F4Urlzxuo-E4I,13392384
|
|
77
|
+
mmgpy.libs/vtkCommonDataModel-9.5.dll,sha256=zG6JZwFm6JejgaQDr6ebrmZWv1v_upNA3K8wGwt0RGg,4577280
|
|
78
|
+
mmgpy.libs/vtkCommonExecutionModel-9.5-2f7a1bae0a1d4d0e205eea43596a659c.dll,sha256=DLTmEaoRr46jUO6XS8Jru8X09_3O8-4TgP7jbMH0Vq4,857088
|
|
79
|
+
mmgpy.libs/vtkCommonMath-9.5-609b01246386fe29df2677fa5c7ca793.dll,sha256=DKU9bcLlbJIkRDNGCjKWDb5v4WmLsIUanrZXn7OKz3k,153600
|
|
80
|
+
mmgpy.libs/vtkCommonMisc-9.5-4173df33811eddea1529a40bf93266c8.dll,sha256=QXPfM4Ee3eoVKaQL-TJmyOWuBkI1MnsZpVvCJa4-hE4,3025408
|
|
81
|
+
mmgpy.libs/vtkCommonSystem-9.5-e5b15bd84934b99e3b2bbe5d3e064c97.dll,sha256=5bFb2Ek0uZ47K75dPgZMl1sAhbjJB_HYgBzqOPe7HF8,137728
|
|
82
|
+
mmgpy.libs/vtkCommonTransforms-9.5-9b76a61640718d893271cc0b5db50d1d.dll,sha256=hp8r4TbgA3-5CIxLQC6C-pTJPlEBjAtB2pKtbcpRfh8,214016
|
|
83
|
+
mmgpy.libs/vtkDICOMParser-9.5-203c95a77d21799a8049a576e1b28f2e.dll,sha256=IDyVp30heZqASaV24bKPLshO3TlTmfcaSuNiXzskneE,101376
|
|
84
|
+
mmgpy.libs/vtkdoubleconversion-9.5-5e39712b9f4e44ea8a26e9119e53a7d4.dll,sha256=XjlxK59OROqKJukRnlOn1DRWG-ldfeL3Yp3_DqMgBmg,64512
|
|
85
|
+
mmgpy.libs/vtkexpat-9.5-3b1dd25e09a2cccbbac723de448cb894.dll,sha256=Ox3SXgmizMu6xyPeRIy4lHbkHS3QfkLjL6OTQrw7MF4,158720
|
|
86
|
+
mmgpy.libs/vtkFiltersCellGrid-9.5-fa6bda61d2d528369d8b2f3a66d2d6b4.dll,sha256=zTq5jZ_8rXLpFzIinB9pIYPt7LYctOazaELQ68Rf-hI,1035776
|
|
87
|
+
mmgpy.libs/vtkFiltersCore-9.5-935a5f5225a975e99626296b2f3ded70.dll,sha256=S3P2KOnUwXhjxZDSmVJUaCCcKnvRXNoT7dDGNw5IYtY,6074368
|
|
88
|
+
mmgpy.libs/vtkFiltersExtraction-9.5-dc0a7543ba584f7e8ce9f9184485a228.dll,sha256=msgi3kxrSisXfSsDhm64o__0_bcw4XWWTCghWgpo3qM,779264
|
|
89
|
+
mmgpy.libs/vtkFiltersGeneral-9.5-709f69dbcca8aba1750582106a97c605.dll,sha256=34z446sPZ-Cr2lHokGPRG8Bin-fRc1mu3OfjPUjM_uE,3988480
|
|
90
|
+
mmgpy.libs/vtkFiltersGeometry-9.5-7abfb655763a62f56d63b45038d6e811.dll,sha256=d83OsXVT2iGYmcLlvGwptXqeEuDTWf2C5aLSIUwqMQw,995328
|
|
91
|
+
mmgpy.libs/vtkFiltersHybrid-9.5-0721ec98d8a8b7442d900747e1ec59fb.dll,sha256=Mr77N50IdFPBfYDzg5AouoWsI9VrhTpHnxfG_DylhpE,809984
|
|
92
|
+
mmgpy.libs/vtkFiltersHyperTree-9.5-f9ee6a4761fdad8956c08a51dae77636.dll,sha256=ZaeX8jqfk7knGSCHbDRnzwlhy30X5YxHti5RtNhL2eY,417280
|
|
93
|
+
mmgpy.libs/vtkFiltersModeling-9.5-458d9d2c544bb3c37de28c26c05c07bc.dll,sha256=BpjRnNiTvPK-4-9RLnydLpq3GVhwELTgei1h_PdPfYg,707584
|
|
94
|
+
mmgpy.libs/vtkFiltersParallel-9.5-1f243ffe308277c3970d8be4172d856f.dll,sha256=S3Pj6IDVQH_WLU5PS5RzAYFHTgohuxPuP_4VmglQcKU,913920
|
|
95
|
+
mmgpy.libs/vtkFiltersReduction-9.5-bf8c4a248bd84fbd6bb1a2ab5f646e56.dll,sha256=IFPuJwD1HvcFXmbvAG18qNQWGBDOLAd-CfGxZ1XCGsI,1123840
|
|
96
|
+
mmgpy.libs/vtkFiltersSources-9.5-492fa5b1b8562f4b141a347a38ae1ce5.dll,sha256=0Jzaq0y9y82SLxnNCmcdbwzrbn4sevQsl8jBMY9pCss,674304
|
|
97
|
+
mmgpy.libs/vtkFiltersStatistics-9.5-6e99ef76387303ec5ff8c0fe6101d446.dll,sha256=iPIVa_-NMElJd9FRoRbS-FWUj7a63hGvv4O02by0uKI,785408
|
|
98
|
+
mmgpy.libs/vtkFiltersTexture-9.5-15c23120b41b9a1c4acb01f790aad01f.dll,sha256=g8qfVn2aBN6rtwCSL6WrXKgpIxzQuDaLD6SW_Xz1Sn8,98304
|
|
99
|
+
mmgpy.libs/vtkFiltersVerdict-9.5-332c0402a58129ec5b6af7b7f56cbb62.dll,sha256=BcenG10gfK0VahKq46zhqtNU9yxLNVPeZkjPVZCsc_0,191488
|
|
100
|
+
mmgpy.libs/vtkfmt-9.5-50239b66bf315d100ecd306114139e9b.dll,sha256=UCObZr8xXRAOzTBhFBOem4V9ib7hbnJ-jiFcKy6kvsk,118272
|
|
101
|
+
mmgpy.libs/vtkImagingCore-9.5-145fc0249cffbd27c610d10812e1cbfc.dll,sha256=a_VXRpShHuFbkpvTa8sHF4yz1bRhf4B9bkEl-ShJN_A,1729024
|
|
102
|
+
mmgpy.libs/vtkImagingSources-9.5-f0c087a4669caa045584ed61f52502b7.dll,sha256=NB0akMkhSueS-Pk3SWFyX4LQX1dW0dG6ZfyEPgH13-k,191488
|
|
103
|
+
mmgpy.libs/vtkIOCellGrid-9.5-88e1ec9c5a3554a82aedc0027fe84c6b.dll,sha256=ge0OuCmDLwcagDi-lc5mLmGov5qpLvsJ0hCu1KlwGHc,466432
|
|
104
|
+
mmgpy.libs/vtkIOCore-9.5.dll,sha256=dgPsfWyaocsJEhlVbCy-svYIxatBj04iNXv83_DZSuk,452096
|
|
105
|
+
mmgpy.libs/vtkIOGeometry-9.5-47c69db15c63c5773efa6851b59ae0a7.dll,sha256=So1xVZrJ-4oMZ5rg7JodsofyHPCK0QsVyTQKxM3dNLs,1720832
|
|
106
|
+
mmgpy.libs/vtkIOImage-9.5-74bb92e688da5595ff9ff7645f9a0a13.dll,sha256=jGFpn69qxSoTSqbKNExt7p0gauNRFygXUimXWE8Q6ms,1088512
|
|
107
|
+
mmgpy.libs/vtkIOLegacy-9.5.dll,sha256=Ahils3fbUJXVRvrB-U8yoDurPqfDoXkuSW0CGBaJUE0,708096
|
|
108
|
+
mmgpy.libs/vtkIOParallel-9.5.dll,sha256=roDlywDigCucNnVGC70QD-05xE4f35kwQjaGAzYiMQE,429056
|
|
109
|
+
mmgpy.libs/vtkIOParallelXML-9.5.dll,sha256=4u4sDp31hbheiRtBQejQlB29z8xZdpqIbVZRqq9p748,209408
|
|
110
|
+
mmgpy.libs/vtkIOXML-9.5.dll,sha256=FfeBOeOQUdk2siD5adv2g3GfQ9rGCRUfpZhOjCJ9uvo,921600
|
|
111
|
+
mmgpy.libs/vtkIOXMLParser-9.5-1893156c41fd4cf7165904675cb5d15d.dll,sha256=hn4xGlm69FC5xuHlQ3539AzRVMFHgsMrD1GQDtWoi7A,112128
|
|
112
|
+
mmgpy.libs/vtkjpeg-9.5-9412ee79f685a9196398b988a59666cd.dll,sha256=lBLuefaFqRljmLmIpZZmzWyW5vZ2SKgK_7dLLjndII0,432128
|
|
113
|
+
mmgpy.libs/vtkjsoncpp-9.5-abfad956527e3a4885dbb39f99f9e4d4.dll,sha256=q_rZVlJ-OkiF27Ofmfnk1KxeQOr6XZhj86BxsrWMbaA,222720
|
|
114
|
+
mmgpy.libs/vtkkissfft-9.5-464db9175ce63de19addc69be524c4b7.dll,sha256=Rk25F1zmPeGa3cab5STEt02qYvw7b3GIkl-qTEzdpMw,22016
|
|
115
|
+
mmgpy.libs/vtkloguru-9.5-ec016ed005b4a79062e329ad8f1c382d.dll,sha256=7AFu0AW0p5Bi4ymtjxw4LcG6-FZngI2Av46QuMh17Ko,76288
|
|
116
|
+
mmgpy.libs/vtklz4-9.5-798b58f4518733b0eee8027eeba022fb.dll,sha256=eYtY9FGHM7Du6AJ-66Ai-_bZEHpN9Y8xHurW59Laluk,127488
|
|
117
|
+
mmgpy.libs/vtklzma-9.5-8f489b5430eb47d578de52c769a4dd5c.dll,sha256=j0ibVDDrR9V43lLHaaTdXOWlZ1TooAK7KszI-Hjb-KY,156672
|
|
118
|
+
mmgpy.libs/vtkmetaio-9.5-8f0a559399d53e4c7fc06272620b2167.dll,sha256=qygshTfnLh1ZFjU0fBGkMY_HznoEXrEW6XwT8BEKvZ8,548864
|
|
119
|
+
mmgpy.libs/vtkParallelCore-9.5-e91757b6dbd2a5369ab2bd05ff95d79d.dll,sha256=lwAw0T1G02jysD-Tf0kXFE2MPMjNYEHztFyP8AJEvWc,361984
|
|
120
|
+
mmgpy.libs/vtkParallelDIY-9.5-04dd6b6b5dd8a5eacd43d270999cf09a.dll,sha256=wPNt-C3ZvQV6ymSDEMe_ZnlqfcfBZjuleSr64eZ5y5M,726016
|
|
121
|
+
mmgpy.libs/vtkpng-9.5-1dbed3116ba7e31f56512a93b942cdf5.dll,sha256=vfNiqPogrSf3unCBSD3H-l6Q_WHJWv64U1zvdPHmx9I,199680
|
|
122
|
+
mmgpy.libs/vtkpugixml-9.5-23ef37d65494ab52babc6d45b24764b7.dll,sha256=I-831lSUq1K6vG1Fskdkt0vTqaZoOY4IyXLpJG94k4Q,194560
|
|
123
|
+
mmgpy.libs/vtkRenderingCore-9.5-24a9802d77a083def26449fa681b1af7.dll,sha256=kmiHSZpSWYBDHEXN2qg8B7bbx3Ti0CPufVgj4n6uCno,1933312
|
|
124
|
+
mmgpy.libs/vtksys-9.5.dll,sha256=7Zxhe1CQIwSGn13TIOXVaoioaYSsquIAc3p_2Eg2Jyc,323072
|
|
125
|
+
mmgpy.libs/vtktiff-9.5-767fd93c8402517d5b2d1befab98c41e.dll,sha256=IdxFRdYQfWXLfU_axCAbsTxzsUnx5xgeaSIhmfCqBz8,416768
|
|
126
|
+
mmgpy.libs/vtktoken-9.5-f4ff567202eeb9a613c0b242aa05dbc9.dll,sha256=9P9WcgLuuaYTwLJCqgXbyXxOIIdZu-lz9Iz-GDaCC4M,101376
|
|
127
|
+
mmgpy.libs/vtkverdict-9.5-6bb84649d1b0ca1cc5454307fd35083b.dll,sha256=a7hGSdGwyhzFRUMH_TUIO64q7YnDeLBjhXz3KBVNfaQ,225792
|
|
128
|
+
mmgpy.libs/vtkzlib-9.5-779937c44671e188e9f96125eb5afb12.dll,sha256=d5k3xEZx4Yjp-WEl61r7EtNoQ5r6DE43KNQEpE2SHAg,84480
|
|
129
|
+
share/__init__.py,sha256=es9KsDl5hd8r6F1CiYPwtEJbfgrGeY6bOzcS932ykN0,325
|
|
130
|
+
share/man/man1/mmg2d.1.gz,sha256=YY68CM5Yb39NnO97kGV26FFdfOIyYmvypUVdD5DQyaE,2435
|
|
131
|
+
share/man/man1/mmg3d.1.gz,sha256=dVSyfIoVtimcm841HZocNehWcLaGrcgBIEPmABulMXk,2569
|
|
132
|
+
share/man/man1/mmgs.1.gz,sha256=yJfsZqeuw7ehxLkSm2wNm1hB9TQUjm1tS-L3susx_84,2298
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2025 Kevin Marchais
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
--------------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
THIRD-PARTY LICENSES
|
|
26
|
+
|
|
27
|
+
This project uses the following third-party libraries:
|
|
28
|
+
|
|
29
|
+
MMG (https://www.mmgtools.org/)
|
|
30
|
+
License: GNU Lesser General Public License v3.0 or later (LGPL-3.0+)
|
|
31
|
+
Copyright (c) Bx INP/Inria/UBordeaux/UPMC, 2004-
|
|
32
|
+
|
|
33
|
+
MMG is dynamically linked. The LGPL allows use in software under any license
|
|
34
|
+
provided users can replace the MMG libraries with their own builds.
|
|
35
|
+
|
|
36
|
+
pybind11 (https://github.com/pybind/pybind11)
|
|
37
|
+
License: BSD-3-Clause
|
|
38
|
+
Copyright (c) 2016 Wenzel Jakob
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|