36 : m_geom(
geom), m_trace_mng(traceMng) { }
43#define SAVE_PROPERTY(property,type,item,group,expr) \
44 if (m_group_property->hasProperty((property))) \
46 ItemGroupGeometryProperty::StorageInfo & storage = m_group_property->storages[property]; \
47 if (ContainerAccessorT<type>::getVarContainer(storage)) \
49 IGeometryMng::type##Variable & mMap = *ContainerAccessorT<type>::getVarContainer(storage); \
50 ENUMERATE_ITEMWITHNODES((item), (group)) { \
51 mMap[*(item)] = (expr); \
56 template<
typename ComputeLineFunctor>
64 ENUMERATE_ITEMWITHNODES(item, group) {
65 functor.computeOrientedMeasureAndCenter(*item,
orientations[item.index()],
centers[item.index()]);
70 SAVE_PROPERTY(IGeometryProperty::PArea,
Real,item,group,0);
71 SAVE_PROPERTY(IGeometryProperty::PVolume,
Real,item,group,0);
72 SAVE_PROPERTY(IGeometryProperty::PCenter,
Real3,item,group,
centers[item.index()]);
73 SAVE_PROPERTY(IGeometryProperty::PNormal,
Real3,item,group,
orientations[item.index()]);
74 SAVE_PROPERTY(IGeometryProperty::PVolumeSurfaceRatio,
Real,item,group,0);
77 template<
typename ComputeSurfaceFunctor>
85 ENUMERATE_ITEMWITHNODES(item, group) {
86 functor.computeOrientedMeasureAndCenter(*item,
normals[item.index()],
centers[item.index()]);
90 SAVE_PROPERTY(IGeometryProperty::PLength,
Real,item,group,0);
92 SAVE_PROPERTY(IGeometryProperty::PVolume,
Real,item,group,0);
93 SAVE_PROPERTY(IGeometryProperty::PCenter,
Real3,item,group,
centers[item.index()]);
94 SAVE_PROPERTY(IGeometryProperty::PNormal,
Real3,item,group,
normals[item.index()]);
95 SAVE_PROPERTY(IGeometryProperty::PVolumeSurfaceRatio,
Real,item,group,0);
98 template<
typename ComputeVolumeFunctor>
106 ENUMERATE_ITEMWITHNODES(item, group) {
107 functor.computeOrientedMeasureAndCenter(*item,
volumes[item.index()],
centers[item.index()]);
110 SAVE_PROPERTY(IGeometryProperty::PMeasure,
Real,item,group,
volumes[item.index()]);
111 SAVE_PROPERTY(IGeometryProperty::PLength,
Real,item,group,0);
112 SAVE_PROPERTY(IGeometryProperty::PArea,
Real,item,group,0);
113 SAVE_PROPERTY(IGeometryProperty::PVolume,
Real,item,group,
volumes[item.index()]);
114 SAVE_PROPERTY(IGeometryProperty::PCenter,
Real3,item,group,
centers[item.index()]);
115 SAVE_PROPERTY(IGeometryProperty::PNormal,
Real3,item,group,0);
117 if (m_group_property->hasProperty((IGeometryProperty::PVolumeSurfaceRatio)))
120 ENUMERATE_ITEMWITHNODES(item, group) {
121 functor.computeVolumeArea(*item,
areas[item.index()]);
123 SAVE_PROPERTY(IGeometryProperty::PVolumeSurfaceRatio,
Real,item,group,
volumes[item.index()]/
areas[item.index()]);
198 void applyDualNode(
ItemVectorView group) { ARCANE_UNUSED(group); }
199 void applyDualEdge(
ItemVectorView group) { ARCANE_UNUSED(group); }
200 void applyDualFace(
ItemVectorView group) { ARCANE_UNUSED(group); }
201 void applyDualCell(
ItemVectorView group) { ARCANE_UNUSED(group); }