// Generated by Haxe 4.1.4
#ifndef INCLUDED_verb_geom_NurbsSurface
#define INCLUDED_verb_geom_NurbsSurface

#ifndef HXCPP_H
#include <hxcpp.h>
#endif

#ifndef INCLUDED_verb_core_SerializableBase
#include <verb/core/SerializableBase.h>
#endif
#ifndef INCLUDED_verb_geom_ISurface
#include <verb/geom/ISurface.h>
#endif
HX_DECLARE_CLASS2(verb,core,ISerializable)
HX_DECLARE_CLASS2(verb,core,Interval)
HX_DECLARE_CLASS2(verb,core,MeshData)
HX_DECLARE_CLASS2(verb,core,NurbsSurfaceData)
HX_DECLARE_CLASS2(verb,core,SerializableBase)
HX_DECLARE_CLASS2(verb,eval,AdaptiveRefinementOptions)
HX_DECLARE_CLASS2(verb,geom,ICurve)
HX_DECLARE_CLASS2(verb,geom,ISurface)
HX_DECLARE_CLASS2(verb,geom,NurbsCurve)
HX_DECLARE_CLASS2(verb,geom,NurbsSurface)

namespace verb{
namespace geom{


class HXCPP_CLASS_ATTRIBUTES NurbsSurface_obj : public  ::verb::core::SerializableBase_obj
{
	public:
		typedef  ::verb::core::SerializableBase_obj super;
		typedef NurbsSurface_obj OBJ_;
		NurbsSurface_obj();

	public:
		enum { _hx_ClassId = 0x0a621450 };

		void __construct( ::verb::core::NurbsSurfaceData data);
		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="verb.geom.NurbsSurface")
			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
		inline void *operator new(size_t inSize, int extra)
			{ return ::hx::Object::operator new(inSize+extra,true,"verb.geom.NurbsSurface"); }
		static ::hx::ObjectPtr< NurbsSurface_obj > __new( ::verb::core::NurbsSurfaceData data);
		static ::hx::ObjectPtr< NurbsSurface_obj > __alloc(::hx::Ctx *_hx_ctx, ::verb::core::NurbsSurfaceData data);
		static void * _hx_vtable;
		static Dynamic __CreateEmpty();
		static Dynamic __Create(::hx::DynamicArray inArgs);
		//~NurbsSurface_obj();

		HX_DO_RTTI_ALL;
		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
		void __GetFields(Array< ::String> &outFields);
		static void __register();
		void __Mark(HX_MARK_PARAMS);
		void __Visit(HX_VISIT_PARAMS);
		bool _hx_isInstanceOf(int inClassId);
		void *_hx_getInterface(int inHash);
		::String __ToString() const { return HX_("NurbsSurface",d1,d0,d1,2b); }

		static  ::verb::geom::NurbsSurface byKnotsControlPointsWeights(int degreeU,int degreeV,::Array< Float > knotsU,::Array< Float > knotsV,::Array< ::Dynamic> controlPoints,::Array< ::Dynamic> weights);
		static ::Dynamic byKnotsControlPointsWeights_dyn();

		static  ::verb::geom::NurbsSurface byCorners(::Array< Float > point0,::Array< Float > point1,::Array< Float > point2,::Array< Float > point3);
		static ::Dynamic byCorners_dyn();

		static  ::verb::geom::NurbsSurface byLoftingCurves(::Array< ::Dynamic> curves, ::Dynamic degreeV);
		static ::Dynamic byLoftingCurves_dyn();

		 ::verb::core::NurbsSurfaceData _data;
		int degreeU();
		::Dynamic degreeU_dyn();

		int degreeV();
		::Dynamic degreeV_dyn();

		::Array< Float > knotsU();
		::Dynamic knotsU_dyn();

		::Array< Float > knotsV();
		::Dynamic knotsV_dyn();

		::Array< ::Dynamic> controlPoints();
		::Dynamic controlPoints_dyn();

		::Array< ::Dynamic> weights();
		::Dynamic weights_dyn();

		 ::verb::core::NurbsSurfaceData asNurbs();
		::Dynamic asNurbs_dyn();

		 ::verb::geom::NurbsSurface clone();
		::Dynamic clone_dyn();

		 ::verb::core::Interval domainU();
		::Dynamic domainU_dyn();

		 ::verb::core::Interval domainV();
		::Dynamic domainV_dyn();

		::Array< Float > point(Float u,Float v);
		::Dynamic point_dyn();

		::Array< Float > normal(Float u,Float v);
		::Dynamic normal_dyn();

		::Array< ::Dynamic> derivatives(Float u,Float v,::hx::Null< int >  numDerivs);
		::Dynamic derivatives_dyn();

		::Array< Float > closestParam(::Array< Float > pt);
		::Dynamic closestParam_dyn();

		::Array< Float > closestPoint(::Array< Float > pt);
		::Dynamic closestPoint_dyn();

		::Array< ::Dynamic> split(Float u,::hx::Null< bool >  useV);
		::Dynamic split_dyn();

		 ::verb::geom::NurbsSurface reverse(::hx::Null< bool >  useV);
		::Dynamic reverse_dyn();

		 ::verb::geom::NurbsCurve isocurve(Float u,::hx::Null< bool >  useV);
		::Dynamic isocurve_dyn();

		::Array< ::Dynamic> boundaries( ::verb::eval::AdaptiveRefinementOptions options);
		::Dynamic boundaries_dyn();

		 ::verb::core::MeshData tessellate( ::verb::eval::AdaptiveRefinementOptions options);
		::Dynamic tessellate_dyn();

		 ::verb::geom::NurbsSurface transform(::Array< ::Dynamic> mat);
		::Dynamic transform_dyn();

};

} // end namespace verb
} // end namespace geom

#endif /* INCLUDED_verb_geom_NurbsSurface */ 
