You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

wavefrontobj.cpp 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "wavefrontobj.h"
  2. #include <QFile>
  3. #include <QDebug>
  4. #include "lexer-wavefront-obj.h"
  5. #include "parser-wavefront-obj.h"
  6. WaveFrontObj::WaveFrontObj(QObject *parent) :
  7. QObject(parent)
  8. {
  9. }
  10. QList<QList<int> > WaveFrontObj::getFaces() const
  11. {
  12. return _faces;
  13. }
  14. QList<Vector3D> WaveFrontObj::getVertexes() const
  15. {
  16. return _vertexes;
  17. }
  18. bool WaveFrontObj::openFile(const QString &filename)
  19. {
  20. QFile f(filename);
  21. if (f.open(QIODevice::ReadOnly)) {
  22. bool res = load(f);
  23. f.close();
  24. return res;
  25. }
  26. _error = "Failed to open file: " + f.errorString();
  27. return false;
  28. }
  29. bool WaveFrontObj::load(QIODevice &device)
  30. {
  31. _error.clear();
  32. QString file = device.readAll();
  33. YY_BUFFER_STATE bufferState = wavefront_obj_scan_string(file.toUtf8().constData());
  34. int res = wavefront_objparse(this);
  35. wavefront_obj_delete_buffer(bufferState);
  36. if (res) {
  37. qDebug() << _error;
  38. }
  39. else {
  40. qDebug() << "faces:" << _faces.size() << "vertexes" << _vertexes.size();
  41. }
  42. return res == 0;
  43. }
  44. void WaveFrontObj::addFace(QList<int> face)
  45. {
  46. _faces.append(face);
  47. }
  48. void WaveFrontObj::addVertex(const Vector3D &vertex)
  49. {
  50. _vertexes.append(vertex);
  51. }
  52. void WaveFrontObj::setError(const QString &error)
  53. {
  54. _error = error;
  55. }