Point.xsp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. %module{Slic3r::XS};
  2. %{
  3. #include <myinit.h>
  4. #include "libslic3r/Point.hpp"
  5. #include "libslic3r/Polygon.hpp"
  6. #include "libslic3r/Polyline.hpp"
  7. %}
  8. %name{Slic3r::Point} class Point {
  9. Point(long _x = 0, long _y = 0);
  10. ~Point();
  11. Clone<Point> clone()
  12. %code{% RETVAL=THIS; %};
  13. void scale(double factor);
  14. void translate(double x, double y);
  15. SV* arrayref()
  16. %code{% RETVAL = THIS->to_SV_pureperl(); %};
  17. SV* pp()
  18. %code{% RETVAL = THIS->to_SV_pureperl(); %};
  19. long x()
  20. %code{% RETVAL = THIS->x; %};
  21. long y()
  22. %code{% RETVAL = THIS->y; %};
  23. int nearest_point_index(Points points);
  24. Point* nearest_point(Points points)
  25. %code{% RETVAL = new Point(); THIS->nearest_point(points, RETVAL); %};
  26. double distance_to(Point* point)
  27. %code{% RETVAL = THIS->distance_to(*point); %};
  28. double distance_to_line(Line* line)
  29. %code{% RETVAL = THIS->distance_to(*line); %};
  30. double ccw(Point* p1, Point* p2)
  31. %code{% RETVAL = THIS->ccw(*p1, *p2); %};
  32. double ccw_angle(Point* p1, Point* p2)
  33. %code{% RETVAL = THIS->ccw_angle(*p1, *p2); %};
  34. Clone<Point> projection_onto_polygon(Polygon* polygon)
  35. %code{% RETVAL = new Point(THIS->projection_onto(*polygon)); %};
  36. Clone<Point> projection_onto_polyline(Polyline* polyline)
  37. %code{% RETVAL = new Point(THIS->projection_onto(*polyline)); %};
  38. Clone<Point> projection_onto_line(Line* line)
  39. %code{% RETVAL = new Point(THIS->projection_onto(*line)); %};
  40. Clone<Point> negative()
  41. %code{% RETVAL = new Point(THIS->negative()); %};
  42. bool coincides_with_epsilon(Point* point)
  43. %code{% RETVAL = THIS->coincides_with_epsilon(*point); %};
  44. %{
  45. void
  46. Point::rotate(angle, center_sv)
  47. double angle;
  48. SV* center_sv;
  49. CODE:
  50. Point center;
  51. center.from_SV_check(center_sv);
  52. THIS->rotate(angle, center);
  53. bool
  54. Point::coincides_with(point_sv)
  55. SV* point_sv;
  56. CODE:
  57. Point point;
  58. point.from_SV_check(point_sv);
  59. RETVAL = THIS->coincides_with(point);
  60. OUTPUT:
  61. RETVAL
  62. %}
  63. };
  64. %name{Slic3r::Point3} class Point3 {
  65. Point3(long _x = 0, long _y = 0, long _z = 0);
  66. ~Point3();
  67. Clone<Point3> clone()
  68. %code{% RETVAL = THIS; %};
  69. long x()
  70. %code{% RETVAL = THIS->x; %};
  71. long y()
  72. %code{% RETVAL = THIS->y; %};
  73. long z()
  74. %code{% RETVAL = THIS->z; %};
  75. };
  76. %name{Slic3r::Pointf} class Pointf {
  77. Pointf(double _x = 0, double _y = 0);
  78. ~Pointf();
  79. Clone<Pointf> clone()
  80. %code{% RETVAL = THIS; %};
  81. SV* arrayref()
  82. %code{% RETVAL = THIS->to_SV_pureperl(); %};
  83. SV* pp()
  84. %code{% RETVAL = THIS->to_SV_pureperl(); %};
  85. double x()
  86. %code{% RETVAL = THIS->x; %};
  87. double y()
  88. %code{% RETVAL = THIS->y; %};
  89. void set_x(double val)
  90. %code{% THIS->x = val; %};
  91. void set_y(double val)
  92. %code{% THIS->y = val; %};
  93. void translate(double x, double y);
  94. void scale(double factor);
  95. void rotate(double angle, Pointf* center)
  96. %code{% THIS->rotate(angle, *center); %};
  97. Clone<Pointf> negative()
  98. %code{% RETVAL = THIS->negative(); %};
  99. Clone<Pointf> vector_to(Pointf* point)
  100. %code{% RETVAL = THIS->vector_to(*point); %};
  101. };
  102. %name{Slic3r::Pointf3} class Pointf3 {
  103. Pointf3(double _x = 0, double _y = 0, double _z = 0);
  104. ~Pointf3();
  105. Clone<Pointf3> clone()
  106. %code{% RETVAL = THIS; %};
  107. double x()
  108. %code{% RETVAL = THIS->x; %};
  109. double y()
  110. %code{% RETVAL = THIS->y; %};
  111. double z()
  112. %code{% RETVAL = THIS->z; %};
  113. void set_x(double val)
  114. %code{% THIS->x = val; %};
  115. void set_y(double val)
  116. %code{% THIS->y = val; %};
  117. void set_z(double val)
  118. %code{% THIS->z = val; %};
  119. void translate(double x, double y, double z);
  120. void scale(double factor);
  121. double distance_to(Pointf3* point)
  122. %code{% RETVAL = THIS->distance_to(*point); %};
  123. Clone<Pointf3> negative()
  124. %code{% RETVAL = THIS->negative(); %};
  125. Clone<Pointf3> vector_to(Pointf3* point)
  126. %code{% RETVAL = THIS->vector_to(*point); %};
  127. };