|
23 | 23 | #include "arcane/utils/StringBuilder.h"
|
24 | 24 | #include "arcane/utils/CheckedConvert.h"
|
25 | 25 | #include "arcane/utils/PlatformUtils.h"
|
26 |
| - |
| 26 | +#include "arcane/utils/SmallArray.h" |
27 | 27 | #include "arcane/utils/NotImplementedException.h"
|
28 | 28 |
|
29 | 29 | #include "arcane/IMesh.h"
|
@@ -833,11 +833,57 @@ computeAndSetOwnersForFaces()
|
833 | 833 | owner_builder.computeFacesOwner();
|
834 | 834 | }
|
835 | 835 |
|
| 836 | + |
836 | 837 | /*---------------------------------------------------------------------------*/
|
837 | 838 | /*---------------------------------------------------------------------------*/
|
| 839 | +namespace |
| 840 | +{ |
| 841 | + void _recomputeUniqueIds(IItemFamily* family) |
| 842 | + { |
| 843 | + ITraceMng* tm = family->traceMng(); |
| 844 | + eItemKind ik = family->itemKind(); |
| 845 | + SmallArray<Int64> unique_ids; |
| 846 | + ENUMERATE_ (ItemWithNodes, iitem, family->allItems()) { |
| 847 | + ItemWithNodes item = *iitem; |
| 848 | + Int32 index = 0; |
| 849 | + unique_ids.resize(item.nbNode()); |
| 850 | + for (Node node : item.nodes()) { |
| 851 | + unique_ids[index] = node.uniqueId(); |
| 852 | + ++index; |
| 853 | + } |
| 854 | + Int64 new_uid = MeshUtils::generateHashUniqueId(unique_ids); |
| 855 | + //if (ik==IK_Face) |
| 856 | + //tm->info() << "Face uid=" << item.uniqueId() << " nb_node=" << item.nbNode() |
| 857 | + // << " node0=" << item.node(0).uniqueId() << " node1=" << item.node(1).uniqueId(); |
| 858 | + item.mutableItemBase().setUniqueId(new_uid); |
| 859 | + } |
| 860 | + family->notifyItemsUniqueIdChanged(); |
| 861 | + } |
| 862 | +} // namespace |
838 | 863 |
|
839 |
| -} // End namespace Arcane |
| 864 | +/*---------------------------------------------------------------------------*/ |
| 865 | +/*---------------------------------------------------------------------------*/ |
| 866 | + |
| 867 | +void UnstructuredMeshUtilities:: |
| 868 | +recomputeItemsUniqueIdFromNodesUniqueId() |
| 869 | +{ |
| 870 | + IMesh* mesh = m_mesh; |
| 871 | + ARCANE_CHECK_POINTER(mesh); |
| 872 | + ITraceMng* tm = mesh->traceMng(); |
| 873 | + |
| 874 | + tm->info() << "Calling RecomputeItemsUniqueIdFromNodesUniqueId()"; |
| 875 | + // D'abord indiquer que les noeuds ont changés pour éventuellement |
| 876 | + // remettre à jour l'orientation des faces. |
| 877 | + mesh->nodeFamily()->notifyItemsUniqueIdChanged(); |
| 878 | + _recomputeUniqueIds(mesh->edgeFamily()); |
| 879 | + _recomputeUniqueIds(mesh->faceFamily()); |
| 880 | + _recomputeUniqueIds(mesh->cellFamily()); |
| 881 | +} |
840 | 882 |
|
841 | 883 | /*---------------------------------------------------------------------------*/
|
842 | 884 | /*---------------------------------------------------------------------------*/
|
843 | 885 |
|
| 886 | +} // End namespace Arcane |
| 887 | + |
| 888 | +/*---------------------------------------------------------------------------*/ |
| 889 | +/*---------------------------------------------------------------------------*/ |
0 commit comments