Merge de7ffc5906e0ce4117ca91f13c1e3a8f858cefd7 into 00d6c94bd9227bbe80f5a7d9e94f36acf2384889

This commit is contained in:
Christopher "Monty" Montgomery 2022-07-06 14:12:13 +02:00 committed by GitHub
commit b28baf0cd7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 54 additions and 34 deletions

View File

@ -1673,7 +1673,8 @@ namespace netgen
public: public:
CSGInit() CSGInit()
{ {
geometryregister.Append (new CSGeometryRegister); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
gra.Append (new CSGeometryRegister);
} }
}; };

View File

@ -570,7 +570,8 @@ using namespace netgen;
int Ng_CSG_Init (Tcl_Interp * interp) int Ng_CSG_Init (Tcl_Interp * interp)
{ {
geometryregister.Append (new CSGeometryVisRegister); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
gra.Append (new CSGeometryVisRegister);
if (interp == NULL) return TCL_OK; if (interp == NULL) return TCL_OK;

View File

@ -50,6 +50,7 @@ extern "C" int Ng_geom2d_Init (Tcl_Interp * interp);
int Ng_geom2d_Init (Tcl_Interp * interp) int Ng_geom2d_Init (Tcl_Interp * interp)
{ {
geometryregister.Append (new SplineGeometryVisRegister); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
gra.Append (new SplineGeometryVisRegister);
return TCL_OK; return TCL_OK;
} }

View File

@ -1100,7 +1100,8 @@ namespace netgen
public: public:
SplineGeoInit() SplineGeoInit()
{ {
geometryregister.Append (new SplineGeometryRegister); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
gra.Append (new SplineGeometryRegister);
} }
}; };

View File

@ -81,9 +81,10 @@ void Ng_LoadGeometry (const char * filename)
return; return;
} }
for (int i = 0; i < geometryregister.Size(); i++) GeometryRegisterArray &gra = FetchGeometryRegisterArray();
for (int i = 0; i < gra.Size(); i++)
{ {
NetgenGeometry * hgeom = geometryregister[i]->Load (filename); NetgenGeometry * hgeom = gra[i]->Load (filename);
if (hgeom) if (hgeom)
{ {
ng_geometry.reset (hgeom); ng_geometry.reset (hgeom);
@ -104,7 +105,8 @@ void Ng_LoadMeshFromStream ( istream & input )
mesh -> Load(input); mesh -> Load(input);
SetGlobalMesh (mesh); SetGlobalMesh (mesh);
ng_geometry = geometryregister.LoadFromMeshFile (input); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
ng_geometry = gra.LoadFromMeshFile (input);
if (!ng_geometry) if (!ng_geometry)
ng_geometry = make_shared<NetgenGeometry>(); ng_geometry = make_shared<NetgenGeometry>();
@ -259,7 +261,8 @@ void Ng_LoadMesh (const char * filename, ngcore::NgMPI_Comm comm)
shared_ptr<NetgenGeometry> geo; shared_ptr<NetgenGeometry> geo;
if(buf.Size()) { // if we had geom-info in the file, take it if(buf.Size()) { // if we had geom-info in the file, take it
istringstream geom_infile(string((const char*)&buf[0], buf.Size())); istringstream geom_infile(string((const char*)&buf[0], buf.Size()));
geo = geometryregister.LoadFromMeshFile(geom_infile); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
geo = gra.LoadFromMeshFile(geom_infile);
} }
if(geo!=nullptr) { if(geo!=nullptr) {
ng_geometry = geo; ng_geometry = geo;

View File

@ -29,9 +29,6 @@ namespace netgen
double GetTolerance() { return tree.GetTolerance(); } double GetTolerance() { return tree.GetTolerance(); }
}; };
DLL_HEADER GeometryRegisterArray geometryregister;
//DLL_HEADER NgArray<GeometryRegister*> geometryregister;
GeometryRegister :: ~GeometryRegister() GeometryRegister :: ~GeometryRegister()
{ ; } { ; }
@ -1167,4 +1164,10 @@ namespace netgen
} }
static RegisterClassForArchive<NetgenGeometry> regnggeo; static RegisterClassForArchive<NetgenGeometry> regnggeo;
GeometryRegisterArray& FetchGeometryRegisterArray (){
static GeometryRegisterArray *geometryregister = new GeometryRegisterArray();
return *geometryregister;
}
} }

View File

@ -339,15 +339,12 @@ namespace netgen
public: public:
virtual ~GeometryRegisterArray() virtual ~GeometryRegisterArray()
{ {
for (int i = 0; i < Size(); i++) DeleteAll();
delete (*this)[i];
} }
virtual shared_ptr<NetgenGeometry> LoadFromMeshFile (istream & ist) const; virtual shared_ptr<NetgenGeometry> LoadFromMeshFile (istream & ist) const;
}; };
// extern DLL_HEADER NgArray<GeometryRegister*> geometryregister; DLL_HEADER GeometryRegisterArray& FetchGeometryRegisterArray ();
extern DLL_HEADER GeometryRegisterArray geometryregister;
} }

View File

@ -1660,7 +1660,8 @@ namespace netgen
clusters -> Update(); clusters -> Update();
} }
auto geo = geometryregister.LoadFromMeshFile (infile); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
auto geo = gra.LoadFromMeshFile (infile);
if(geo) if(geo)
geometry = geo; geometry = geo;

View File

@ -838,7 +838,8 @@ DLL_HEADER void ExportNetgenMeshing(py::module &m)
shared_ptr<NetgenGeometry> geo; shared_ptr<NetgenGeometry> geo;
if(buf.Size()) { // if we had geom-info in the file, take it if(buf.Size()) { // if we had geom-info in the file, take it
istringstream geom_infile(string((const char*)buf.Data(), buf.Size())); istringstream geom_infile(string((const char*)buf.Data(), buf.Size()));
geo = geometryregister.LoadFromMeshFile(geom_infile); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
geo = gra.LoadFromMeshFile(geom_infile);
} }
if(geo!=nullptr) mesh->SetGeometry(geo); if(geo!=nullptr) mesh->SetGeometry(geo);
else if(ng_geometry!=nullptr) mesh->SetGeometry(ng_geometry); else if(ng_geometry!=nullptr) mesh->SetGeometry(ng_geometry);

View File

@ -944,7 +944,8 @@ using namespace netgen;
int Ng_occ_Init (Tcl_Interp * interp) int Ng_occ_Init (Tcl_Interp * interp)
{ {
geometryregister.Append (new OCCGeometryRegister); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
gra.Append (new OCCGeometryRegister);
Tcl_CreateCommand (interp, "Ng_SetOCCVisParameters", Tcl_CreateCommand (interp, "Ng_SetOCCVisParameters",

View File

@ -3748,7 +3748,8 @@ void STLGeometry :: WriteChartToFile( ChartId chartnumber, filesystem::path file
public: public:
STLInit() STLInit()
{ {
geometryregister.Append (new STLGeometryRegister); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
gra.Append (new STLGeometryRegister);
} }
}; };

View File

@ -521,8 +521,9 @@ namespace netgen
Tcl_Interp * interp, Tcl_Interp * interp,
int argc, tcl_const char *argv[]) int argc, tcl_const char *argv[])
{ {
for (int i = 0; i < geometryregister.Size(); i++) GeometryRegisterArray& gra = FetchGeometryRegisterArray();
geometryregister[i] -> SetParameters (interp); for (int i = 0; i < gra.Size(); i++)
gra[i]->SetParameters (interp);
Ng_SetMeshingParameters (clientData, interp, argc, argv); Ng_SetMeshingParameters (clientData, interp, argc, argv);
@ -564,7 +565,8 @@ using namespace netgen;
extern "C" int Ng_stl_Init (Tcl_Interp * interp); extern "C" int Ng_stl_Init (Tcl_Interp * interp);
int Ng_stl_Init (Tcl_Interp * interp) int Ng_stl_Init (Tcl_Interp * interp)
{ {
geometryregister.Append (new STLGeometryVisRegister); GeometryRegisterArray& gra = FetchGeometryRegisterArray();
gra.Append (new STLGeometryVisRegister);
Tcl_CreateCommand (interp, "Ng_SetSTLParameters", Ng_SetSTLParameters, Tcl_CreateCommand (interp, "Ng_SetSTLParameters", Ng_SetSTLParameters,
(ClientData)NULL, (ClientData)NULL,

View File

@ -33,8 +33,10 @@ VisualSceneSTLMeshing :: VisualSceneSTLMeshing ()
{ {
selecttrig = 0; selecttrig = 0;
nodeofseltrig = 1; nodeofseltrig = 1;
stlgeometry->SetSelectTrig(selecttrig); if(stlgeometry){ // don't let the default initializer crash init
stlgeometry->SetNodeOfSelTrig(nodeofseltrig); stlgeometry->SetSelectTrig(selecttrig);
stlgeometry->SetNodeOfSelTrig(nodeofseltrig);
}
} }
VisualSceneSTLMeshing :: ~VisualSceneSTLMeshing () VisualSceneSTLMeshing :: ~VisualSceneSTLMeshing ()

View File

@ -33,8 +33,10 @@ VisualSceneSTLMeshing :: VisualSceneSTLMeshing ()
{ {
selecttrig = 0; selecttrig = 0;
nodeofseltrig = 1; nodeofseltrig = 1;
stlgeometry->SetSelectTrig(selecttrig); if(stlgeometry){ // don't let the default initializer crash init
stlgeometry->SetNodeOfSelTrig(nodeofseltrig); stlgeometry->SetSelectTrig(selecttrig);
stlgeometry->SetNodeOfSelTrig(nodeofseltrig);
}
} }
VisualSceneSTLMeshing :: ~VisualSceneSTLMeshing () VisualSceneSTLMeshing :: ~VisualSceneSTLMeshing ()

View File

@ -465,15 +465,16 @@ namespace netgen
try try
{ {
for (int i = 0; i < geometryregister.Size(); i++) GeometryRegisterArray& gra = FetchGeometryRegisterArray();
for (int i = 0; i < gra.Size(); i++)
{ {
NetgenGeometry * hgeom = geometryregister[i]->Load (lgfilename); NetgenGeometry * hgeom = gra[i]->Load (lgfilename);
if (hgeom) if (hgeom)
{ {
// delete ng_geometry; // delete ng_geometry;
// ng_geometry = hgeom; // ng_geometry = hgeom;
ng_geometry = shared_ptr<NetgenGeometry> (hgeom); ng_geometry = shared_ptr<NetgenGeometry> (hgeom);
geometryregister[i]->SetParameters(interp); gra[i]->SetParameters(interp);
mesh.reset(); mesh.reset();
return TCL_OK; return TCL_OK;
@ -1473,8 +1474,9 @@ namespace netgen
extern void Render(bool blocking); extern void Render(bool blocking);
mparam.render_function = &Render; mparam.render_function = &Render;
for (int i = 0; i < geometryregister.Size(); i++) GeometryRegisterArray& gra = FetchGeometryRegisterArray();
geometryregister[i] -> SetParameters (interp); for (int i = 0; i < gra.Size(); i++)
gra[i]->SetParameters (interp);
Ng_SetMeshingParameters (clientData, interp, 0, argv); Ng_SetMeshingParameters (clientData, interp, 0, argv);
@ -1924,9 +1926,10 @@ namespace netgen
{ {
if (strcmp (vismode, "geometry") == 0) if (strcmp (vismode, "geometry") == 0)
{ {
for (int i = 0; i < geometryregister.Size(); i++) GeometryRegisterArray& gra = FetchGeometryRegisterArray();
for (int i = 0; i < gra.Size(); i++)
{ {
VisualScene * hvs = geometryregister[i]->GetVisualScene (ng_geometry.get()); VisualScene * hvs = gra[i]->GetVisualScene (ng_geometry.get());
if (hvs) if (hvs)
{ {
vs = hvs; vs = hvs;