parse_rhs.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifdef MEX
  2. #include "parse_rhs.h"
  3. #include <algorithm>
  4. #include <functional>
  5. void parse_rhs(
  6. const int nrhs,
  7. const mxArray *prhs[],
  8. Eigen::MatrixXd & V,
  9. Eigen::MatrixXi & F,
  10. Eigen::MatrixXd & P,
  11. Eigen::MatrixXd & N,
  12. int & num_samples)
  13. {
  14. using namespace std;
  15. if(nrhs < 5)
  16. {
  17. mexErrMsgTxt("nrhs < 5");
  18. }
  19. const int dim = mxGetN(prhs[0]);
  20. if(dim != 3)
  21. {
  22. mexErrMsgTxt("Mesh vertex list must be #V by 3 list of vertex positions");
  23. }
  24. if(dim != (int)mxGetN(prhs[1]))
  25. {
  26. mexErrMsgTxt("Mesh facet size must be 3");
  27. }
  28. if(mxGetN(prhs[2]) != dim)
  29. {
  30. mexErrMsgTxt("Point list must be #P by 3 list of origin locations");
  31. }
  32. if(mxGetN(prhs[3]) != dim)
  33. {
  34. mexErrMsgTxt("Normal list must be #P by 3 list of origin normals");
  35. }
  36. if(mxGetN(prhs[4]) != 1 || mxGetM(prhs[4]) != 1)
  37. {
  38. mexErrMsgTxt("Number of samples must be scalar.");
  39. }
  40. V.resize(mxGetM(prhs[0]),mxGetN(prhs[0]));
  41. copy(mxGetPr(prhs[0]),mxGetPr(prhs[0])+V.size(),V.data());
  42. F.resize(mxGetM(prhs[1]),mxGetN(prhs[1]));
  43. copy(mxGetPr(prhs[1]),mxGetPr(prhs[1])+F.size(),F.data());
  44. F.array() -= 1;
  45. P.resize(mxGetM(prhs[2]),mxGetN(prhs[2]));
  46. copy(mxGetPr(prhs[2]),mxGetPr(prhs[2])+P.size(),P.data());
  47. N.resize(mxGetM(prhs[3]),mxGetN(prhs[3]));
  48. copy(mxGetPr(prhs[3]),mxGetPr(prhs[3])+N.size(),N.data());
  49. if(*mxGetPr(prhs[4]) != (int)*mxGetPr(prhs[4]))
  50. {
  51. mexErrMsgTxt("Number of samples should be non negative integer.");
  52. }
  53. num_samples = (int) *mxGetPr(prhs[4]);
  54. }
  55. #endif