mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-24 21:10:33 +05:00
add normals to webgui occ data
This commit is contained in:
parent
97c4fa724b
commit
ab3801314c
@ -117,10 +117,13 @@ void ExtractEdgeData( const TopoDS_Edge & edge, int index, std::vector<double> *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExtractFaceData( const TopoDS_Face & face, int index, std::vector<double> * p, Box<3> & box )
|
void ExtractFaceData( const TopoDS_Face & face, int index, std::vector<double> * p, std::vector<double> * n, Box<3> & box )
|
||||||
{
|
{
|
||||||
TopLoc_Location loc;
|
TopLoc_Location loc;
|
||||||
Handle(Poly_Triangulation) triangulation = BRep_Tool::Triangulation (face, loc);
|
Handle(Poly_Triangulation) triangulation = BRep_Tool::Triangulation (face, loc);
|
||||||
|
Handle(Geom_Surface) surf = BRep_Tool::Surface (face);
|
||||||
|
BRepAdaptor_Surface sf(face, Standard_False);
|
||||||
|
BRepLProp_SLProps prop(sf, 1, 1e-5);
|
||||||
|
|
||||||
bool flip = TopAbs_REVERSED == face.Orientation();
|
bool flip = TopAbs_REVERSED == face.Orientation();
|
||||||
|
|
||||||
@ -135,17 +138,37 @@ void ExtractFaceData( const TopoDS_Face & face, int index, std::vector<double> *
|
|||||||
{
|
{
|
||||||
Poly_Triangle triangle = (triangulation -> Triangles())(j);
|
Poly_Triangle triangle = (triangulation -> Triangles())(j);
|
||||||
std::array<Point<3>,3> pts;
|
std::array<Point<3>,3> pts;
|
||||||
|
std::array<Vec<3>,3> normals;
|
||||||
for (int k = 0; k < 3; k++)
|
for (int k = 0; k < 3; k++)
|
||||||
pts[k] = occ2ng( (triangulation -> Nodes())(triangle(k+1)).Transformed(loc) );
|
pts[k] = occ2ng( (triangulation -> Nodes())(triangle(k+1)).Transformed(loc) );
|
||||||
|
|
||||||
|
for (int k = 0; k < 3; k++)
|
||||||
|
{
|
||||||
|
auto uv = (triangulation -> UVNodes())(triangle(k+1));
|
||||||
|
prop.SetParameters (uv.X(), uv.Y());
|
||||||
|
if (!prop.IsNormalDefined())
|
||||||
|
throw Exception("No normal defined on face");
|
||||||
|
auto normal = prop.Normal();
|
||||||
|
normals[k] = { normal.X(), normal.Y(), normal.Z() };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if(flip)
|
if(flip)
|
||||||
|
{
|
||||||
Swap(pts[1], pts[2]);
|
Swap(pts[1], pts[2]);
|
||||||
|
Swap(normals[1], normals[2]);
|
||||||
|
for (int k = 0; k < 3; k++)
|
||||||
|
normals[k] = -normals[k];
|
||||||
|
}
|
||||||
|
|
||||||
for (int k = 0; k < 3; k++)
|
for (int k = 0; k < 3; k++)
|
||||||
{
|
{
|
||||||
box.Add(pts[k]);
|
box.Add(pts[k]);
|
||||||
for (int d = 0; d < 3; d++)
|
for (int d = 0; d < 3; d++)
|
||||||
|
{
|
||||||
p[k].push_back( pts[k][d] );
|
p[k].push_back( pts[k][d] );
|
||||||
|
n[k].push_back( normals[k][d] );
|
||||||
|
}
|
||||||
p[k].push_back( index );
|
p[k].push_back( index );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -960,6 +983,7 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
|
|||||||
// triangulation = BRep_Tool::Triangulation (face, loc);
|
// triangulation = BRep_Tool::Triangulation (face, loc);
|
||||||
|
|
||||||
std::vector<double> p[3];
|
std::vector<double> p[3];
|
||||||
|
std::vector<double> n[3];
|
||||||
py::list names, colors;
|
py::list names, colors;
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@ -969,7 +993,7 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
|
|||||||
{
|
{
|
||||||
TopoDS_Face face = TopoDS::Face(e.Current());
|
TopoDS_Face face = TopoDS::Face(e.Current());
|
||||||
// Handle(TopoDS_Face) face = e.Current();
|
// Handle(TopoDS_Face) face = e.Current();
|
||||||
ExtractFaceData(face, index, p, box);
|
ExtractFaceData(face, index, p, n, box);
|
||||||
auto & props = OCCGeometry::global_shape_properties[face.TShape()];
|
auto & props = OCCGeometry::global_shape_properties[face.TShape()];
|
||||||
if(props.col)
|
if(props.col)
|
||||||
{
|
{
|
||||||
@ -1028,6 +1052,7 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
|
|||||||
data["draw_vol"] = false;
|
data["draw_vol"] = false;
|
||||||
data["draw_surf"] = true;
|
data["draw_surf"] = true;
|
||||||
data["funcdim"] = 0;
|
data["funcdim"] = 0;
|
||||||
|
data["have_normals"] = true;
|
||||||
data["show_wireframe"] = true;
|
data["show_wireframe"] = true;
|
||||||
data["show_mesh"] = true;
|
data["show_mesh"] = true;
|
||||||
data["Bezier_points"] = py::list{};
|
data["Bezier_points"] = py::list{};
|
||||||
@ -1035,6 +1060,9 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
|
|||||||
points.append(p[0]);
|
points.append(p[0]);
|
||||||
points.append(p[1]);
|
points.append(p[1]);
|
||||||
points.append(p[2]);
|
points.append(p[2]);
|
||||||
|
points.append(n[0]);
|
||||||
|
points.append(n[1]);
|
||||||
|
points.append(n[2]);
|
||||||
data["Bezier_trig_points"] = points;
|
data["Bezier_trig_points"] = points;
|
||||||
data["funcmin"] = 0;
|
data["funcmin"] = 0;
|
||||||
data["funcmax"] = 1;
|
data["funcmax"] = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user