Skip to content

Commit a3ec816

Browse files
committed
Reduce dependencencies Geom --> Group
1 parent 2ddc1ae commit a3ec816

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+484
-1133
lines changed

src/Core/Geom/CommandEditGeom.cpp

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -208,52 +208,10 @@ saveMementos(std::map<GeomEntity*,Services::Memento> & candidates)
208208
/*----------------------------------------------------------------------------*/
209209
void CommandEditGeom::copyGroups(GeomEntity* ge1, GeomEntity* ge2)
210210
{
211-
if (ge1->getDim() == 3 && ge2->getDim() == 3){
212-
std::vector<Group::GroupEntity*> grp;
213-
ge1->getGroups(grp);
214-
Volume* res = dynamic_cast<Volume*>(ge2);
215-
for (std::vector<Group::GroupEntity*>::iterator iter = grp.begin();
216-
iter != grp.end(); ++iter){
217-
Group::Group3D* grp = dynamic_cast<Group::Group3D*>(*iter);
218-
if (res && grp && !res->find(grp)){
219-
m_group_helper.addToGroup(grp->getName(), res);
220-
}
221-
}
222-
}
223-
else if (ge1->getDim() == 2 && ge2->getDim() == 2){
224-
std::vector<Group::GroupEntity*> grp;
225-
ge1->getGroups(grp);
226-
Surface* res = dynamic_cast<Surface*>(ge2);
227-
for (std::vector<Group::GroupEntity*>::iterator iter = grp.begin();
228-
iter != grp.end(); ++iter){
229-
Group::Group2D* grp = dynamic_cast<Group::Group2D*>(*iter);
230-
if (res && grp && !res->find(grp)){
231-
m_group_helper.addToGroup(grp->getName(), res);
232-
}
233-
}
234-
}
235-
else if (ge1->getDim() == 1 && ge2->getDim() == 1){
236-
std::vector<Group::GroupEntity*> grp;
237-
ge1->getGroups(grp);
238-
Curve* res = dynamic_cast<Curve*>(ge2);
239-
for (std::vector<Group::GroupEntity*>::iterator iter = grp.begin();
240-
iter != grp.end(); ++iter){
241-
Group::Group1D* grp = dynamic_cast<Group::Group1D*>(*iter);
242-
if (res && grp && !res->find(grp)){
243-
m_group_helper.addToGroup(grp->getName(), res);
244-
}
245-
}
246-
}
247-
else if (ge1->getDim() == 0 && ge2->getDim() == 0){
248-
Vertex* res = dynamic_cast<Vertex*>(ge2);
249-
for (Group::Group0D* grp : res->getGroups()) {
250-
if (res && grp && !res->find(grp)){
251-
m_group_helper.addToGroup(grp->getName(), res);
252-
}
253-
}
254-
}
255-
else {
256-
throw TkUtil::Exception(TkUtil::UTF8String ("Copie des groupes pour une dimension non prévue", TkUtil::Charset::UTF_8));
211+
Group::GroupManager& gm = getContext().getGroupManager();
212+
for (Group::GroupEntity* grp : gm.getGroupsFor(ge1)) {
213+
if (!gm.hasGroupFor(ge2, grp))
214+
m_group_helper.addToGroup(grp->getName(), ge2);
257215
}
258216
}
259217
/*----------------------------------------------------------------------------*/

src/Core/Geom/CommandExtrusion.cpp

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -151,54 +151,48 @@ groups2DTo3D()
151151
// Les nouveaux objets ont été mis "hors groupe" à la création
152152
// On se sert de la correspondance entre les entités initiales et finales
153153
// pour transmetre les groupes de la dimension N à la dimension N+1
154+
Group::GroupManager& gm = getContext().getGroupManager();
154155

155-
for (std::map<Geom::Surface*,Geom::Volume*>::iterator iter = m_s2v.begin();
156+
for (std::map<Geom::Surface*, Geom::Volume*>::iterator iter = m_s2v.begin();
156157
iter != m_s2v.end(); ++iter){
157158
Geom::Surface* surf = iter->first;
158159
Geom::Volume* vol = iter->second;
159160
if (vol){
160-
std::vector<Group::GroupEntity*> grp;
161-
surf->getGroups(grp);
162-
163-
for (uint i=0; i<grp.size(); i++){
164-
std::string nom = grp[i]->getName();
165-
if (nom != getContext().getGroupManager().getDefaultName(2)) {
166-
Group::Group3D* new_grp = m_group_helper.addToGroup<Group::Group3D>(nom, vol);
167-
new_grp->setLevel(grp[i]->getLevel());
161+
for (Group::GroupEntity* grp : gm.getGroupsFor(surf)) {
162+
std::string nom = grp->getName();
163+
if (nom != gm.getDefaultName(2)) {
164+
Group::GroupEntity* new_grp = m_group_helper.addToGroup(nom, vol);
165+
new_grp->setLevel(grp->getLevel());
168166
}
169167
}
170168
}
171169
}
172170

173-
for (std::map<Geom::Curve* ,Geom::Surface*>::iterator iter = m_c2s.begin();
171+
for (std::map<Geom::Curve*, Geom::Surface*>::iterator iter = m_c2s.begin();
174172
iter != m_c2s.end(); ++iter){
175173
Geom::Curve* curve = iter->first;
176174
Geom::Surface* surf = iter->second;
177175
if (surf){
178-
std::vector<Group::GroupEntity*> grp;
179-
curve->getGroups(grp);
180-
for (uint i=0; i<grp.size(); i++){
181-
std::string nom = grp[i]->getName();
182-
if (nom != getContext().getGroupManager().getDefaultName(1)) {
183-
Group::Group2D* new_grp = m_group_helper.addToGroup<Group::Group2D>(nom, surf);
184-
new_grp->setLevel(grp[i]->getLevel());
176+
for (Group::GroupEntity* grp : gm.getGroupsFor(curve)) {
177+
std::string nom = grp->getName();
178+
if (nom != gm.getDefaultName(1)) {
179+
Group::GroupEntity* new_grp = m_group_helper.addToGroup(nom, surf);
180+
new_grp->setLevel(grp->getLevel());
185181
}
186182
}
187183
}
188184
}
189185

190-
for (std::map<Geom::Vertex* ,Geom::Curve*>::iterator iter = m_v2c.begin();
186+
for (std::map<Geom::Vertex*, Geom::Curve*>::iterator iter = m_v2c.begin();
191187
iter != m_v2c.end(); ++iter){
192188
Geom::Vertex* vtx = iter->first;
193189
Geom::Curve* curve = iter->second;
194190
if (curve){
195-
std::vector<Group::GroupEntity*> grp;
196-
vtx->getGroups(grp);
197-
for (uint i=0; i<grp.size(); i++){
198-
std::string nom = grp[i]->getName();
199-
if (nom != getContext().getGroupManager().getDefaultName(0)) {
200-
Group::Group1D* new_grp = m_group_helper.addToGroup<Group::Group1D>(nom, curve);
201-
new_grp->setLevel(grp[i]->getLevel());
191+
for (Group::GroupEntity* grp : gm.getGroupsFor(vtx)) {
192+
std::string nom = grp->getName();
193+
if (nom != gm.getDefaultName(0)) {
194+
Group::GroupEntity* new_grp = m_group_helper.addToGroup(nom, curve);
195+
new_grp->setLevel(grp->getLevel());
202196
}
203197
}
204198
}
@@ -210,17 +204,17 @@ void CommandExtrusion::prefixGroupsName(const std::string& pre,
210204
std::map<Geom::Curve* ,Geom::Curve*>& c2c,
211205
std::map<Geom::Surface*,Geom::Surface*>& s2s)
212206
{
207+
Group::GroupManager& gm = getContext().getGroupManager();
208+
213209
// le groupe commun pour toutes les surfaces
214210
for (std::map<Geom::Surface*,Geom::Surface*>::iterator iter = s2s.begin();
215211
iter != s2s.end(); ++iter){
216212
Geom::Surface* surf1 = iter->first;
217213
Geom::Surface* surf2 = iter->second;
218214

219215
if (surf2){
220-
std::vector<std::string> gn;
221-
surf1->getGroupsName(gn);
222-
for (uint i=0; i<gn.size(); i++){
223-
std::string& nom = gn[i];
216+
for (Group::GroupEntity* grp : gm.getGroupsFor(surf1)) {
217+
std::string nom = grp->getName();
224218
m_group_helper.addToGroup(pre + "_" + nom, surf2);
225219
}
226220

@@ -235,10 +229,8 @@ void CommandExtrusion::prefixGroupsName(const std::string& pre,
235229
Geom::Curve* crv2 = iter->second;
236230

237231
if (crv2){
238-
std::vector<std::string> gn;
239-
crv1->getGroupsName(gn);
240-
for (uint i=0; i<gn.size(); i++){
241-
std::string& nom = gn[i];
232+
for (Group::GroupEntity* grp : gm.getGroupsFor(crv1)) {
233+
std::string nom = grp->getName();
242234
m_group_helper.addToGroup(pre + "_" + nom, crv2);
243235
}
244236
}
@@ -250,10 +242,8 @@ void CommandExtrusion::prefixGroupsName(const std::string& pre,
250242
Geom::Vertex* vtx2 = iter->second;
251243

252244
if (vtx2){
253-
std::vector<std::string> gn;
254-
vtx1->getGroupsName(gn);
255-
for (uint i=0; i<gn.size(); i++){
256-
std::string& nom = gn[i];
245+
for (Group::GroupEntity* grp : gm.getGroupsFor(vtx1)) {
246+
std::string nom = grp->getName();
257247
m_group_helper.addToGroup(pre + "_" + nom, vtx2);
258248
}
259249
}

src/Core/Geom/CommandJoinCurves.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,9 @@ internalSpecificExecute()
142142
m_newEntities.push_back(newCurve);
143143

144144
// reprise des groupes de la première courbe
145-
std::vector<Group::GroupEntity*> grp;
146-
m_entities[0]->getGroups(grp);
147-
for (uint i=0; i<grp.size(); i++){
148-
m_group_helper.addToGroup(grp[i]->getName(), newCurve);
145+
Group::GroupManager& gm = getContext().getGroupManager();
146+
for (Group::GroupEntity* grp : gm.getGroupsFor(m_entities[0])) {
147+
m_group_helper.addToGroup(grp->getName(), newCurve);
149148
}
150149

151150
// destruction des anciennes courbes

src/Core/Geom/CommandJoinSurfaces.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,9 @@ void CommandJoinSurfaces::internalSpecificExecute()
107107
m_newEntities.push_back(newSurface);
108108

109109
// reprise des groupes de la première surface
110-
std::vector<Group::GroupEntity*> grp;
111-
m_entities[0]->getGroups(grp);
112-
for (uint i=0; i<grp.size(); i++){
113-
m_group_helper.addToGroup(grp[i]->getName(), newSurface);
110+
Group::GroupManager& gm = getContext().getGroupManager();
111+
for (Group::GroupEntity* grp : gm.getGroupsFor(m_entities[0])) {
112+
m_group_helper.addToGroup(grp->getName(), newSurface);
114113
}
115114

116115
// destruction des anciennes surfaces

src/Core/Geom/Curve.cpp

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -635,67 +635,6 @@ bool Curve::isA(const std::string& name)
635635
return (name.compare(0,getTinyName().size(),getTinyName()) == 0);
636636
}
637637
/*----------------------------------------------------------------------------*/
638-
void Curve::add(Group::Group1D* grp)
639-
{
640-
//std::cout<<"Curve::add("<<grp->getName()<<") à "<<getName()<<std::endl;
641-
m_groups.push_back(grp);
642-
}
643-
/*----------------------------------------------------------------------------*/
644-
void Curve::remove(Group::Group1D* grp)
645-
{
646-
uint i = 0;
647-
for (; i<m_groups.size() && grp != m_groups[i]; ++i)
648-
;
649-
650-
if (i!=m_groups.size())
651-
m_groups.erase(m_groups.begin()+i);
652-
else
653-
throw TkUtil::Exception(TkUtil::UTF8String ("Erreur interne (pas de groupe), avec Curve::remove", TkUtil::Charset::UTF_8));
654-
}
655-
/*----------------------------------------------------------------------------*/
656-
bool Curve::find(Group::Group1D* grp)
657-
{
658-
uint i = 0;
659-
for (; i<m_groups.size() && grp != m_groups[i]; ++i)
660-
;
661-
662-
return (i!=m_groups.size());
663-
}
664-
/*----------------------------------------------------------------------------*/
665-
void Curve::getGroupsName (std::vector<std::string>& gn) const
666-
{
667-
gn.clear();
668-
for (uint i = 0; i<m_groups.size(); ++i)
669-
gn.push_back(m_groups[i]->getName());
670-
}
671-
/*----------------------------------------------------------------------------*/
672-
void Curve::getGroups(std::vector<Group::GroupEntity*>& grp) const
673-
{
674-
grp.insert(grp.end(), m_groups.begin(), m_groups.end());
675-
}
676-
/*----------------------------------------------------------------------------*/
677-
int Curve::getNbGroups() const
678-
{
679-
return m_groups.size();
680-
}
681-
/*----------------------------------------------------------------------------*/
682-
void Curve::setDestroyed(bool b)
683-
{
684-
if (isDestroyed() == b)
685-
return;
686-
687-
// supprime la relation du groupe vers la courbe en cas de destruction
688-
if (b)
689-
for (uint i = 0; i<m_groups.size(); ++i)
690-
m_groups[i]->remove(this);
691-
else
692-
// et inversement en cas de ressurection
693-
for (uint i = 0; i<m_groups.size(); ++i)
694-
m_groups[i]->add(this);
695-
696-
Entity::setDestroyed(b);
697-
}
698-
/*----------------------------------------------------------------------------*/
699638
bool Curve::isLinear() const
700639
{
701640
if (m_occ_edges.size() == 1)

src/Core/Geom/GeomEntity.cpp

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/*----------------------------------------------------------------------------*/
2+
#include "Internal/Context.h"
23
#include "Geom/GeomEntity.h"
34
#include "Geom/Volume.h"
45
#include "Geom/Curve.h"
@@ -9,11 +10,10 @@
910
#include "Geom/OCCDisplayRepresentationBuilder.h"
1011
#include "Geom/OCCFacetedRepresentationBuilder.h"
1112
#include "Geom/IncidentGeomEntitiesVisitor.h"
13+
#include "Group/GroupManager.h"
1214
/*----------------------------------------------------------------------------*/
1315
#include "Services/DescriptionService.h"
1416
/*----------------------------------------------------------------------------*/
15-
#include "Group/GroupEntity.h"
16-
/*----------------------------------------------------------------------------*/
1717
#include <TkUtil/Exception.h>
1818
#include <TkUtil/InternalError.h>
1919
#include <TkUtil/MemoryError.h>
@@ -33,6 +33,9 @@ GeomEntity::GeomEntity(Internal::Context& ctx, Utils::Property* prop, Utils::Dis
3333
/*----------------------------------------------------------------------------*/
3434
GeomEntity::~GeomEntity()
3535
{
36+
Group::GroupManager& gm = getContext().getGroupManager();
37+
gm.removeAllGroupsFor(this);
38+
3639
if(m_geomProp!=0)
3740
delete m_geomProp;
3841
}
@@ -100,22 +103,6 @@ GeomProperty::type GeomEntity::getGeomType ( ) const
100103
return getGeomProperty ( )->getType ( );
101104
} // GeomEntity::getGeomType
102105
/*----------------------------------------------------------------------------*/
103-
void GeomEntity::getGroupsName (std::vector<std::string>& gn) const
104-
{
105-
MGX_FORBIDDEN("getGroupsName est à redéfinir dans les classes dérivées");
106-
}
107-
/*----------------------------------------------------------------------------*/
108-
void GeomEntity::getGroups(std::vector<Group::GroupEntity*>& grp) const
109-
{
110-
MGX_FORBIDDEN("getGroups est à redéfinir dans les classes dérivées");
111-
}
112-
/*----------------------------------------------------------------------------*/
113-
int GeomEntity::getNbGroups() const
114-
{
115-
MGX_FORBIDDEN("getNbGroups est à redéfinir dans les classes dérivées");
116-
return 0;
117-
}
118-
/*----------------------------------------------------------------------------*/
119106
double GeomEntity::getArea() const
120107
{
121108
//std::cout<<"GeomEntity::getArea() pour "<<getName()<<std::endl;
@@ -128,6 +115,24 @@ double GeomEntity::getArea() const
128115
return m_computedArea;
129116
}
130117
/*----------------------------------------------------------------------------*/
118+
void GeomEntity::setDestroyed(bool b)
119+
{
120+
if (isDestroyed() == b)
121+
return;
122+
123+
// supprime la relation du groupe vers le sommet en cas de destruction
124+
Group::GroupManager& gm = getContext().getGroupManager();
125+
if (b)
126+
for (Group::GroupEntity* g : gm.getGroupsFor(this))
127+
g->remove(this);
128+
else
129+
// et inversement en cas de ressurection
130+
for (Group::GroupEntity* g : gm.getGroupsFor(this))
131+
g->add(this);
132+
133+
Entity::setDestroyed(b);
134+
}
135+
/*----------------------------------------------------------------------------*/
131136
} // end namespace Geom
132137
/*----------------------------------------------------------------------------*/
133138
} // end namespace Mgx3D

0 commit comments

Comments
 (0)