Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/changelog.d/1222.miscellaneous.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feat add reordering of face connectivity
33 changes: 33 additions & 0 deletions examples/misc/trial_midside_nodes_projection.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import os
import tempfile
import numpy as np
import ansys.meshing.prime as prime
from ansys.meshing.prime.graphics.plotter import PrimePlotter
import pyvista as pv

prime_client = prime.launch_prime()
model = prime_client.model
mesh_util = prime.lucid.Mesh(model=model)

mesh_util.read(file_name=prime.examples.download_block_model_fmd())

print(model)

mesh_util.surface_mesh(min_size=8.0)

part = model.parts[0]

mesh_util.volume_mesh(quadratic=True, volume_fill_type=prime.VolumeFillType.TET)

prime.SurfaceUtilities(model).project_topo_faces_on_geometry(
part.get_topo_faces(),
prime.ProjectOnGeometryParams(
model, project_on_facets_if_cadnot_found=True, project_only_mid_nodes=False
),
)

display = PrimePlotter()
display.plot(model, update=True)
display.show()

prime_client.exit()
30 changes: 24 additions & 6 deletions src/ansys/meshing/prime/core/mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,19 @@ class ColorByType(enum.IntEnum):
]
)

def _process_connectivity(connectivity: np.ndarray, dimensions: np.ndarray) -> np.ndarray:
connectivity = np.asarray(connectivity)
starts = dimensions + np.arange(len(dimensions))
starts = starts[:-1]
block_lengths = connectivity[starts] + 1
group_id = np.repeat(np.arange(len(block_lengths)), block_lengths)
block_starts = np.repeat(np.cumsum(block_lengths) - block_lengths, block_lengths)
pos_in_block = np.arange(len(connectivity)) - block_starts
mask = pos_in_block != 0
new_pos = mask * (block_lengths[group_id] - pos_in_block)
new_indices = block_starts + new_pos
return connectivity[new_indices]


class DisplayMeshType(enum.IntEnum):
"""Contains the mesh types to display."""
Expand Down Expand Up @@ -515,14 +528,19 @@ def update_pd(self, part_ids) -> Dict[int, Dict[str, list[(pv.PolyData, Part)]]]
part = self._model.get_part(part_id)
splines = part.get_splines()
part_polydata = {}
face_polydata_list = [
self.get_face_polydata(
part_id, facet_result.face_connectivity_result_per_part[i], j
)
for j in range(

face_polydata_list = []
for j in range(
0, len(facet_result.face_connectivity_result_per_part[i].face_zonelet_ids)
):
face_polydata = self.get_face_polydata(
part_id, facet_result.face_connectivity_result_per_part[i], j
)
]

faces = _process_connectivity(face_polydata[0].mesh.faces, face_polydata[0].mesh._offset_array)
face_polydata[0].mesh.faces = faces
face_polydata[0].mesh.compute_normals(consistent_normals=True, auto_orient_normals=False, inplace=True)
face_polydata_list.append(face_polydata)

edge_polydata_list = [
self.get_edge_polydata(
Expand Down
Loading