14#include "arcane/impl/internal/MeshFactoryMng.h"
16#include "arcane/impl/internal/MeshMng.h"
18#include "arcane/utils/FatalErrorException.h"
20#include "arcane/MeshHandle.h"
21#include "arcane/IPrimaryMesh.h"
22#include "arcane/ServiceBuilder.h"
23#include "arcane/IMeshFactory.h"
24#include "arcane/ItemGroup.h"
25#include "arcane/MeshBuildInfo.h"
39 String factory_name = mbi.factoryName();
44 service_builder.getServicesNames(valid_names);
45 String valid_str = String::join(
", ",valid_names);
46 ARCANE_FATAL(
"No mesh factory named '{0}' found for creating mesh '{1}'."
47 " Valid values are {2}",
48 factory_name,mbi.name(),valid_str);
82 ARCANE_FATAL(
"Can not create mesh with null factoryName()");
91 _checkValidBuildInfo(build_info);
93 if (parent_group.
null())
94 return _createMesh(build_info);
95 return _createSubMesh(build_info);
105 ARCANE_FATAL(
"Can not create mesh with null parallelMngRef()");
109 if (old_mesh_handle){
114 ARCANE_FATAL(
"A mesh with same name already exists and is not a primary mesh");
119 Ref<IMeshFactory> mesh_factory(_getMeshFactory(m_application,build_info));
129 IPrimaryMesh* mesh = mesh_factory->createMesh(m_mesh_mng,build_info);
130 m_mesh_mng->addMesh(mesh);
138IPrimaryMesh* MeshFactoryMng::
139_createSubMesh(
const MeshBuildInfo& orig_build_info)
141 ItemGroup group = orig_build_info.parentGroup();
142 IMesh* mesh = group.
mesh();
145 if (mesh->meshMng() != m_mesh_mng)
146 ARCANE_FATAL(
"This mesh has not been created by this factory");
147 if (group.isAllItems())
148 ARCANE_FATAL(
"Cannot create sub-mesh from all-items group");
150 MeshBuildInfo build_info(orig_build_info);
151 String name = build_info.
name();
156 Ref<IMeshFactory> mesh_factory(_getMeshFactory(m_application,build_info));
161 m_mesh_mng->createMeshHandle(name);
162 IPrimaryMesh* sub_mesh = mesh_factory->createMesh(m_mesh_mng,build_info);
163 m_mesh_mng->addMesh(sub_mesh);
165 sub_mesh->defineParentForBuild(mesh,group);
167 mesh->addChildMesh(sub_mesh);
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Interface de l'application.
Interface du gestionnaire des maillages.
virtual MeshHandle createMeshHandle(const String &name)=0
Créé et retourne un handle pour un maillage de nom name.
virtual MeshHandle * findMeshHandle(const String &name, bool throw_exception)=0
Recherche le maillage de nom name.
Groupe d'entités de maillage.
bool null() const
true is le groupe est le groupe nul
Paramètres nécessaires à la construction d'un maillage.
const String & name() const
Nom du nouveau maillage.
const ItemGroup & parentGroup() const
Groupe parent dans le cas d'un sous-maillage, null sinon.
MeshBuildInfo & addParallelMng(Ref< IParallelMng > pm)
Positionne le gestionnaire de parallélisme pour créér la maillage.
Ref< IParallelMng > parallelMngRef() const
Gestionnaire de parallélisme dans le cas d'un nouveau maillage.
const String & factoryName() const
Nom de la fabrique pour créer le maillage (via IMeshFactory)
IMesh * mesh() const
Maillage associé.
IMesh * _internalMeshOrNull() const
Référence à une instance.
Classe utilitaire pour instantier un service d'une interface donnée.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
@ SB_AllowNull
Autorise l'absence du service.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
UniqueArray< String > StringUniqueArray
Tableau dynamique à une dimension de chaînes de caractères.