Path: blob/devel/ElmerGUI/netgen/libsrc/csg/meshsurf.cpp
3206 views
#include <mystdlib.h>12#include <csg.hpp>3#include <meshing.hpp>4567namespace netgen8{9/*10Meshing2Surfaces :: Meshing2Surfaces (const Surface & asurface)11: surface(asurface)12{13;14}15*/16Meshing2Surfaces :: Meshing2Surfaces (const Surface & asurf,17const Box<3> & abb)18: Meshing2(abb), surface(asurf)19{20;21}222324void Meshing2Surfaces :: DefineTransformation (const Point3d & p1, const Point3d & p2,25const PointGeomInfo * geominfo1,26const PointGeomInfo * geominfo2)27{28((Surface&)surface).DefineTangentialPlane (p1, p2);29}3031void Meshing2Surfaces :: TransformToPlain (const Point3d & locpoint,32const MultiPointGeomInfo & geominfo,33Point2d & planepoint,34double h, int & zone)35{36Point<2> hp;37surface.ToPlane (locpoint, hp, h, zone);38planepoint.X() = hp(0);39planepoint.Y() = hp(1);40}4142int Meshing2Surfaces :: TransformFromPlain (Point2d & planepoint,43Point3d & locpoint,44PointGeomInfo & gi,45double h)46{47Point<3> hp;48Point<2> hp2 (planepoint.X(), planepoint.Y());49surface.FromPlane (hp2, hp, h);50locpoint = hp;51gi.trignum = 1;52return 0;53}54555657double Meshing2Surfaces :: CalcLocalH (const Point3d & p, double gh) const58{59return surface.LocH (p, 3, 1, gh);60/*61double loch = mesh.lochfunc->GetH(p);62if (gh < loch) loch = gh;63return loch;64*/65}66676869707172MeshOptimize2dSurfaces :: MeshOptimize2dSurfaces (const CSGeometry & ageometry)73: MeshOptimize2d(), geometry(ageometry)74{75;76}777879void MeshOptimize2dSurfaces :: ProjectPoint (INDEX surfind, Point<3> & p) const80{81Point<3> hp = p;82geometry.GetSurface(surfind)->Project (hp);83p = hp;84}8586void MeshOptimize2dSurfaces :: ProjectPoint2 (INDEX surfind, INDEX surfind2,87Point<3> & p) const88{89Point<3> hp = p;90ProjectToEdge ( geometry.GetSurface(surfind),91geometry.GetSurface(surfind2), hp);92p = hp;93}949596void MeshOptimize2dSurfaces ::97GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const98{99Vec<3> hn = n;100geometry.GetSurface(surfind)->CalcGradient (p, hn);101hn.Normalize();102n = hn;103104/*105if (geometry.GetSurface(surfind)->Inverse())106n *= -1;107*/108}109110111112113114115116RefinementSurfaces :: RefinementSurfaces (const CSGeometry & ageometry)117: Refinement(), geometry(ageometry)118{119if(geometry.GetNSurf() == 0)120cerr << endl121<< "WARNING: Intializing 2D refinement with 0-surface geometry" << endl122<< "==========================================================" << endl123<< endl << endl;124}125126RefinementSurfaces :: ~RefinementSurfaces ()127{128;129}130131void RefinementSurfaces ::132PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint,133int surfi,134const PointGeomInfo & gi1,135const PointGeomInfo & gi2,136Point<3> & newp, PointGeomInfo & newgi)137{138Point<3> hnewp;139hnewp = p1+secpoint*(p2-p1);140if (surfi != -1)141{142geometry.GetSurface (surfi) -> Project (hnewp);143newgi.trignum = 1;144}145146newp = hnewp;147}148149void RefinementSurfaces ::150PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint,151int surfi1, int surfi2,152const EdgePointGeomInfo & ap1,153const EdgePointGeomInfo & ap2,154Point<3> & newp, EdgePointGeomInfo & newgi)155{156Point<3> hnewp = p1+secpoint*(p2-p1);157//(*testout) << "hnewp " << hnewp << " s1 " << surfi1 << " s2 " << surfi2 << endl;158if (surfi1 != -1 && surfi2 != -1 && surfi1 != surfi2)159{160netgen::ProjectToEdge (geometry.GetSurface(surfi1),161geometry.GetSurface(surfi2),162hnewp);163// (*testout) << "Pointbetween, newp = " << hnewp << endl164// << ", err = " << sqrt (sqr (hnewp(0))+ sqr(hnewp(1)) + sqr (hnewp(2))) - 1 << endl;165newgi.edgenr = 1;166//(*testout) << "hnewp (a1) " << hnewp << endl;167}168else if (surfi1 != -1)169{170geometry.GetSurface (surfi1) -> Project (hnewp);171//(*testout) << "hnewp (a2) " << hnewp << endl;172}173174newp = hnewp;175};176177Vec<3> RefinementSurfaces :: GetTangent (const Point<3> & p, int surfi1, int surfi2,178const EdgePointGeomInfo & ap1) const179{180Vec<3> n1 = geometry.GetSurface (surfi1)->GetNormalVector (p);181Vec<3> n2 = geometry.GetSurface (surfi2)->GetNormalVector (p);182Vec<3> tau = Cross (n1, n2).Normalize();183return tau;184}185186Vec<3> RefinementSurfaces :: GetNormal (const Point<3> & p, int surfi1,187const PointGeomInfo & gi) const188{189return geometry.GetSurface (surfi1)->GetNormalVector (p);190}191192193194void RefinementSurfaces :: ProjectToSurface (Point<3> & p, int surfi)195{196if (surfi != -1)197geometry.GetSurface (surfi) -> Project (p);198};199200void RefinementSurfaces :: ProjectToEdge (Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & egi) const201{202netgen::ProjectToEdge (geometry.GetSurface(surfi1),203geometry.GetSurface(surfi2),204p);205206}207208209}210211212