- Thank you received: 0
Geometry manipulation in C++
3 years 8 months ago - 3 years 8 months ago #3590
by JBalis
Geometry manipulation in C++ was created by JBalis
Hello,
I am working on a C++ shape optimization project with a HDG solver which interfaces Netgen. I am exclusively working with spline geometries from the SplineGeometry2D class.
For this project, I would like to modify the coordinates of the geometry points (one at a time) in the normal direction. To do that, I have access to a shared pointer <MeshAccess>, from which I access the Netgen geometry through:
Up to that, everything works fine. But I would like to use the routines of SplineGeometry2d (such as GetSpline()) so I tried to cast my NetgenGeometry shared_ptr to a SplineGeometry2d shared_ptr (knowing SplineGeometry2d is a derived class of NetgenGeometry) with:
but I get that :
SplineGeometry2d is well-defined inside the netgen namespace so I am not sure what I forget here. Could you hint me on what I am missing?
I attach the function which causes this error.
Thank you very much,
Joachim
I am working on a C++ shape optimization project with a HDG solver which interfaces Netgen. I am exclusively working with spline geometries from the SplineGeometry2D class.
For this project, I would like to modify the coordinates of the geometry points (one at a time) in the normal direction. To do that, I have access to a shared pointer <MeshAccess>, from which I access the Netgen geometry through:
Code:
shared_ptr<MeshAccess> ma;
shared_ptr<netgen::Mesh> ngmesh = ma->GetNetgenMesh();
shared_ptr<netgen::NetgenGeometry> nggeom = ngmesh->GetGeometry();
Up to that, everything works fine. But I would like to use the routines of SplineGeometry2d (such as GetSpline()) so I tried to cast my NetgenGeometry shared_ptr to a SplineGeometry2d shared_ptr (knowing SplineGeometry2d is a derived class of NetgenGeometry) with:
Code:
shared_ptr<netgen::SplineGeometry2d> splinegeom = dynamic_pointer_cast<netgen::SplineGeometry2d>(nggeom);
but I get that :
anderror: ‘SplineGeometry2d’ is not a member of ‘netgen’
error: ‘template argument 1 is invalid’
SplineGeometry2d is well-defined inside the netgen namespace so I am not sure what I forget here. Could you hint me on what I am missing?
I attach the function which causes this error.
Thank you very much,
Joachim
Attachments:
Last edit: 3 years 8 months ago by JBalis.
3 years 8 months ago #3591
by cwinters
Replied by cwinters on topic Geometry manipulation in C++
Hi Joachim,
you have to include the appropriate header files. In your case "#include <geometry2d.hpp>" should do the job.
Another hint: Changing the points of the splines won't change your mesh directly. You would have to generate a new mesh after changing the points.
Best,
Christoph
you have to include the appropriate header files. In your case "#include <geometry2d.hpp>" should do the job.
Another hint: Changing the points of the splines won't change your mesh directly. You would have to generate a new mesh after changing the points.
Best,
Christoph
3 years 8 months ago - 3 years 8 months ago #3592
by JBalis
Replied by JBalis on topic Geometry manipulation in C++
Hello Christoph,
Thank you very much for your reply! I followed your advice but whenever I add #include <geometry2d.hpp> (even if the rest of the function is empty), I have new error messages:
I tried to sort out the issue, and I thought that it could come from the fact that the compiler does not know SplineSeg and SplineGeometry at the time geometry2d.hpp is defined. So I tried to include these with:
before the #include "geometry2d.hpp" but that does not change anything to the errors.
I am a bit out of ideas because #include <gprim.hpp> and #include <meshing.hpp> do not trigger any errors, it is only the #include <geometry2d.hpp> which causes my troubles.
[EDIT: problem solved]
I put #include <geometry2d.hpp> at the top of my main file and everything runs smoothly now.
Thank you again for your kind help,
Joachim
Thank you very much for your reply! I followed your advice but whenever I add #include <geometry2d.hpp> (even if the rest of the function is empty), I have new error messages:
Code:
In file included from /home/joachim/Documents/ResearchProject/ngsuite/ngsolve-install/bin/../include/include/geometry2d.hpp:1:0,
from ShapeOptimization/deformgeometry.h:1,
from main.cpp:406:
/home/joachim/Documents/ResearchProject/ngsuite/ngsolve-install/bin/../include/include/../geom2d/geometry2d.hpp:21:40: error: expected template-name before ‘<’ token
class SplineSegExt : public SplineSeg<2>
^
/home/joachim/Documents/ResearchProject/ngsuite/ngsolve-install/bin/../include/include/../geom2d/geometry2d.hpp:21:40: error: expected ‘{’ before ‘<’ token
/home/joachim/Documents/ResearchProject/ngsuite/ngsolve-install/bin/../include/include/../geom2d/geometry2d.hpp:21:40: error: expected unqualified-id before ‘<’ token
/home/joachim/Documents/ResearchProject/ngsuite/ngsolve-install/bin/../include/include/../geom2d/geometry2d.hpp:131:49: error: expected template-name before ‘<’ token
class SplineGeometry2d : public SplineGeometry<2>, public NetgenGeometry
^
/home/joachim/Documents/ResearchProject/ngsuite/ngsolve-install/bin/../include/include/../geom2d/geometry2d.hpp:131:49: error: expected ‘{’ before ‘<’ token
/home/joachim/Documents/ResearchProject/ngsuite/ngsolve-install/bin/../include/include/../geom2d/geometry2d.hpp:131:49: error: expected unqualified-id before ‘<’ token
I tried to sort out the issue, and I thought that it could come from the fact that the compiler does not know SplineSeg and SplineGeometry at the time geometry2d.hpp is defined. So I tried to include these with:
Code:
#include "../gprim/spline.hpp"
#include "../gprim/splinegeometry.hpp"
before the #include "geometry2d.hpp" but that does not change anything to the errors.
I am a bit out of ideas because #include <gprim.hpp> and #include <meshing.hpp> do not trigger any errors, it is only the #include <geometry2d.hpp> which causes my troubles.
[EDIT: problem solved]
I put #include <geometry2d.hpp> at the top of my main file and everything runs smoothly now.
Thank you again for your kind help,
Joachim
Last edit: 3 years 8 months ago by JBalis. Reason: Problem solved
Time to create page: 0.099 seconds