class PutWavefrontOBJ { protected: virtual ~PutWavefrontOBJ(); public: virtual void putVertex ( double x, double y, double z ) = 0; virtual void putNormal ( double x, double y, double z ) = 0; virtual void putFacet ( nat nv, const nat * vert, const nat * norm ) = 0; }; bool loadOBJ ( class IReadFile & file, PutWavefrontOBJ & obj );А также класс GetWavefrontOBJ и функция saveOBJ для записи в файл: class GetWavefrontOBJ { protected: virtual ~GetWavefrontOBJ(); public: virtual void start ( nat & nv, nat & nn, nat & nf ) const = 0; virtual bool getVertex ( nat i, double & x, double & y, double & z ) const = 0; virtual bool getNormal ( nat i, double & x, double & y, double & z ) const = 0; virtual bool getFacet ( nat i, nat & nv, const nat * & vert, const nat * & norm ) const = 0; }; bool saveOBJ ( class IWriteFile & file, const GetWavefrontOBJ & obj, nat prec ); Для того, чтобы записать данные объекта типа Polyhedron в файл и обратно предназначены следующие классы: class PutWavefrontOBJ_Polyhedron : public PutWavefrontOBJ { struct IndexArray { nat nv; DynArray<nat> index; }; nat vsize, vcount; Vector3d * vert; nat fsize, fcount; IndexArray * face; bool err; public: PutWavefrontOBJ_Polyhedron (); void putVertex ( double x, double y, double z ); void putNormal ( double x, double y, double z ); void putFacet ( nat nv, const nat * vert, const nat * norm ); bool give_to ( Shev::Polyhedron & poly ); }; class GetWavefrontOBJ_Polyhedron : public GetWavefrontOBJ { mutable nat nbuf; mutable nat * vbuf; const Shev::Polyhedron & poly; public: GetWavefrontOBJ_Polyhedron ( const Shev::Polyhedron & p ) : poly(p), nbuf(0), vbuf(0) {} ~GetWavefrontOBJ_Polyhedron (); void start ( nat & nv, nat & nn, nat & nf ) const; bool getVertex ( nat i, double & x, double & y, double & z ) const; bool getNormal ( nat i, double & x, double & y, double & z ) const; bool getFacet ( nat i, nat & nv, const nat * & vert, const nat * & norm ) const; }; В приложении DEMO ( начиная с версии 4 ) показано, как применять эти классы. Исходники этих функций находятся в файлах fileOBJ.cpp и fileOBJplh.cpp. О классах IReadFile и IWriteFile смотрите здесь. Коллекция OBJ-файлов. Наверх |