gmshRegion::gmshRegion(GModel *m, ::Volume *volume) : GRegion(m, volume->Num), v(volume) { for(int i = 0; i < List_Nbr(v->Surfaces); i++){ Surface *s; List_Read(v->Surfaces, i, &s); int ori; List_Read(v->SurfacesOrientations, i, &ori); GFace *f = m->getFaceByTag(abs(s->Num)); if(f){ l_faces.push_back(f); l_dirs.push_back(ori); f->addRegion(this); } else Msg::Error("Unknown surface %d", s->Num); } for(int i = 0; i < List_Nbr(v->SurfacesByTag); i++){ int is; List_Read(v->SurfacesByTag, i, &is); GFace *f = m->getFaceByTag(abs(is)); if(f){ l_faces.push_back(f); l_dirs.push_back(sign(is)); f->addRegion(this); } else Msg::Error("Unknown surface %d", is); } if(v->EmbeddedSurfaces){ for(int i = 0; i < List_Nbr(v->EmbeddedSurfaces); i++){ Surface *s; List_Read(v->EmbeddedSurfaces, i, &s); GFace *gf = m->getFaceByTag(abs(s->Num)); if(gf) addEmbeddedFace(gf); else Msg::Error("Unknown surface %d", s->Num); } } resetMeshAttributes(); }
void OCCRegion::setup() { l_faces.clear(); TopExp_Explorer exp2, exp3; for(exp2.Init(s, TopAbs_SHELL); exp2.More(); exp2.Next()){ TopoDS_Shape shell = exp2.Current(); Msg::Debug("OCC Region %d - New Shell",tag()); for(exp3.Init(shell, TopAbs_FACE); exp3.More(); exp3.Next()){ TopoDS_Face face = TopoDS::Face(exp3.Current()); GFace *f = model()->getOCCInternals()->getOCCFaceByNativePtr(model(),face); if(f){ l_faces.push_back(f); f->addRegion(this); } else Msg::Error("Unknown face in region %d", tag()); } } Msg::Debug("OCC Region %d with %d faces", tag(), l_faces.size()); }