#ifndef FILE_SPLINESURFACE #define FILE_SPLINESURFACE namespace netgen { class SplineSurface : public OneSurfacePrimitive { protected: NgArray> geompoints; NgArray>> splines; NgArray bcnames; NgArray maxh; shared_ptr baseprimitive; shared_ptr>> cuts; shared_ptr>> all_cuts; public: SplineSurface(shared_ptr abaseprimitive, shared_ptr>> acuts) : OneSurfacePrimitive(), baseprimitive(abaseprimitive), cuts(acuts) { ; } // default constructor for archive SplineSurface() {} virtual ~SplineSurface() { ; } const auto & GetSplines() const { return splines; } int GetNSplines() const { return splines.Size(); } const NgArray>& GetPoints() const { return geompoints; } string GetSplineType(const int i) const { return splines[i]->GetType(); } SplineSeg<3> & GetSpline(const int i) { return *splines[i]; } const SplineSeg<3> & GetSpline(const int i) const { return *splines[i]; } int GetNP() const { return geompoints.Size(); } const GeomPoint<3> & GetPoint(int i) const { return geompoints[i]; } string GetBCName(int i) const { return bcnames[i]; } string GetBCNameOf(Point<3> p1, Point<3> p2) const; DLL_HEADER void AppendPoint(const Point<3> & p, const double reffac = 1., const bool hpref=false); void AppendSegment(shared_ptr> spline, string & bcname, double amaxh = -1); const shared_ptr>> CreateCuttingSurfaces(); const shared_ptr>> GetCuts() const { return all_cuts; } const shared_ptr GetBase() const { return baseprimitive; } virtual void Project (Point<3> & p3d) const { baseprimitive->Project(p3d); } virtual double CalcFunctionValue (const Point<3> & point) const { return baseprimitive->CalcFunctionValue (point); } virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const { baseprimitive->CalcGradient (point,grad); } virtual double HesseNorm () const { return baseprimitive->HesseNorm(); } virtual Point<3> GetSurfacePoint () const { return baseprimitive->GetSurfacePoint(); } virtual void CalcSpecialPoints(NgArray> & pts) const { baseprimitive->CalcSpecialPoints(pts); } virtual INSOLID_TYPE BoxInSolid(const BoxSphere<3> & box) const { return baseprimitive->BoxInSolid(box); } virtual void DoArchive(Archive& ar) { ar & geompoints & splines & bcnames & maxh & baseprimitive & cuts & all_cuts; } /* virtual void Project (Point<3> & p3d) const; virtual double CalcFunctionValue (const Point<3> & point) const; virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const; virtual double HesseNorm () const; virtual Point<3> GetSurfacePoint () const; virtual void CalcSpecialPoints(NgArray> & pts) const; virtual INSOLID_TYPE BoxInSolid(const BoxSphere<3> & box) const; */ virtual void Print (ostream & str) const; }; } #endif