siren2 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +21 -0
  6. data/README.md +36 -0
  7. data/Rakefile +18 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/ext/siren2/extconf.rb +66 -0
  11. data/ext/siren2/inc/bndbox.h +51 -0
  12. data/ext/siren2/inc/bo.h +20 -0
  13. data/ext/siren2/inc/brep.h +17 -0
  14. data/ext/siren2/inc/common.h +98 -0
  15. data/ext/siren2/inc/curve.h +65 -0
  16. data/ext/siren2/inc/curve/bscurve.h +22 -0
  17. data/ext/siren2/inc/curve/bzcurve.h +17 -0
  18. data/ext/siren2/inc/curve/circle.h +29 -0
  19. data/ext/siren2/inc/curve/ellipse.h +15 -0
  20. data/ext/siren2/inc/curve/hyperbola.h +15 -0
  21. data/ext/siren2/inc/curve/line.h +17 -0
  22. data/ext/siren2/inc/curve/offsetcurve.h +15 -0
  23. data/ext/siren2/inc/curve/parabola.h +15 -0
  24. data/ext/siren2/inc/filler.h +26 -0
  25. data/ext/siren2/inc/heal.h +19 -0
  26. data/ext/siren2/inc/io/iges.h +19 -0
  27. data/ext/siren2/inc/io/step.h +18 -0
  28. data/ext/siren2/inc/io/stl.h +13 -0
  29. data/ext/siren2/inc/offset.h +35 -0
  30. data/ext/siren2/inc/shape.h +140 -0
  31. data/ext/siren2/inc/shape/chunk.h +26 -0
  32. data/ext/siren2/inc/shape/compound.h +22 -0
  33. data/ext/siren2/inc/shape/edge.h +50 -0
  34. data/ext/siren2/inc/shape/face.h +67 -0
  35. data/ext/siren2/inc/shape/shell.h +21 -0
  36. data/ext/siren2/inc/shape/solid.h +41 -0
  37. data/ext/siren2/inc/shape/vertex.h +23 -0
  38. data/ext/siren2/inc/shape/wire.h +31 -0
  39. data/ext/siren2/inc/siren.h +39 -0
  40. data/ext/siren2/inc/surface/dummy +0 -0
  41. data/ext/siren2/inc/topalgo.h +52 -0
  42. data/ext/siren2/inc/trans.h +48 -0
  43. data/ext/siren2/inc/vec.h +65 -0
  44. data/ext/siren2/src/bndbox.cpp +343 -0
  45. data/ext/siren2/src/bo.cpp +66 -0
  46. data/ext/siren2/src/brep.cpp +69 -0
  47. data/ext/siren2/src/common.cpp +18 -0
  48. data/ext/siren2/src/curve.cpp +75 -0
  49. data/ext/siren2/src/curve/bscurve.cpp +118 -0
  50. data/ext/siren2/src/curve/bzcurve.cpp +55 -0
  51. data/ext/siren2/src/curve/circle.cpp +146 -0
  52. data/ext/siren2/src/curve/ellipse.cpp +17 -0
  53. data/ext/siren2/src/curve/hyperbola.cpp +17 -0
  54. data/ext/siren2/src/curve/line.cpp +24 -0
  55. data/ext/siren2/src/curve/offsetcurve.cpp +17 -0
  56. data/ext/siren2/src/curve/parabola.cpp +17 -0
  57. data/ext/siren2/src/filler.cpp +191 -0
  58. data/ext/siren2/src/heal.cpp +92 -0
  59. data/ext/siren2/src/io/iges.cpp +85 -0
  60. data/ext/siren2/src/io/step.cpp +47 -0
  61. data/ext/siren2/src/io/stl.cpp +22 -0
  62. data/ext/siren2/src/offset.cpp +256 -0
  63. data/ext/siren2/src/shape.cpp +617 -0
  64. data/ext/siren2/src/shape/chunk.cpp +65 -0
  65. data/ext/siren2/src/shape/compound.cpp +96 -0
  66. data/ext/siren2/src/shape/edge.cpp +254 -0
  67. data/ext/siren2/src/shape/face.cpp +366 -0
  68. data/ext/siren2/src/shape/shell.cpp +41 -0
  69. data/ext/siren2/src/shape/solid.cpp +256 -0
  70. data/ext/siren2/src/shape/vertex.cpp +68 -0
  71. data/ext/siren2/src/shape/wire.cpp +100 -0
  72. data/ext/siren2/src/siren.cpp +80 -0
  73. data/ext/siren2/src/surface/dummy +0 -0
  74. data/ext/siren2/src/topalgo.cpp +246 -0
  75. data/ext/siren2/src/trans.cpp +330 -0
  76. data/ext/siren2/src/vec.cpp +454 -0
  77. data/lib/io/dxf.rb +68 -0
  78. data/lib/io/plot.rb +38 -0
  79. data/lib/io/ply.rb +57 -0
  80. data/lib/io/stl.rb +35 -0
  81. data/lib/io/svg.rb +44 -0
  82. data/lib/kernel/array.rb +133 -0
  83. data/lib/kernel/float.rb +15 -0
  84. data/lib/shape.rb +157 -0
  85. data/lib/shape/compound.rb +11 -0
  86. data/lib/shape/edge.rb +15 -0
  87. data/lib/shape/face.rb +7 -0
  88. data/lib/shape/shell.rb +21 -0
  89. data/lib/shape/solid.rb +10 -0
  90. data/lib/shape/vertex.rb +7 -0
  91. data/lib/shape/wire.rb +14 -0
  92. data/lib/shapes.rb +52 -0
  93. data/lib/siren.rb +166 -0
  94. data/lib/siren2/version.rb +3 -0
  95. data/lib/vec.rb +81 -0
  96. data/siren2.gemspec +28 -0
  97. metadata +195 -0
@@ -0,0 +1,22 @@
1
+ #ifndef _CURVE_BSPLINECURVE_H_
2
+ #define _CURVE_BSPLINECURVE_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_BSplineCurve.hxx>
7
+
8
+ extern VALUE sr_cBSCurve;
9
+
10
+ static rb_data_type_t siren_bscurve_type = { "BSCurve", siren_curve_final };
11
+ bool siren_bscurve_install();
12
+ handle<Geom_BSplineCurve> siren_bscurve_get(VALUE self);
13
+ VALUE siren_bscurve_new( const handle<Geom_Curve>* curve);
14
+
15
+ VALUE siren_bscurve_init(int, VALUE*, VALUE);
16
+ VALUE siren_bscurve_degree(int, VALUE*, VALUE);
17
+ VALUE siren_bscurve_knots(int, VALUE*, VALUE);
18
+ VALUE siren_bscurve_mults(int, VALUE*, VALUE);
19
+ VALUE siren_bscurve_poles(int, VALUE*, VALUE);
20
+ VALUE siren_bscurve_weights(int, VALUE*, VALUE);
21
+
22
+ #endif
@@ -0,0 +1,17 @@
1
+ #ifndef _CURVE_BEZIERCURVE_H_
2
+ #define _CURVE_BEZIERCURVE_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_BezierCurve.hxx>
7
+
8
+ extern VALUE sr_cBzCurve;
9
+
10
+ static rb_data_type_t siren_bzcurve_type = { "BzCurve", siren_curve_final };
11
+ bool siren_bzcurve_install();
12
+ handle<Geom_BezierCurve> siren_bzcurve_get(VALUE self);
13
+ VALUE siren_bzcurve_new( const handle<Geom_Curve>* curve);
14
+
15
+ VALUE siren_bzcurve_init(int, VALUE*, VALUE);
16
+
17
+ #endif
@@ -0,0 +1,29 @@
1
+ #ifndef _CURVE_CIRCLE_H_
2
+ #define _CURVE_CIRCLE_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_Circle.hxx>
7
+
8
+ extern VALUE sr_cCircle;
9
+
10
+ static rb_data_type_t siren_circle_type = { "Circle", siren_curve_final };
11
+ bool siren_circle_install();
12
+ handle<Geom_Circle> siren_circle_get(VALUE);
13
+ VALUE siren_circle_new( const handle<Geom_Curve>* curve);
14
+
15
+ VALUE siren_circle_radius(int, VALUE*, VALUE);
16
+ VALUE siren_circle_radius_set(int, VALUE*, VALUE);
17
+ VALUE siren_circle_center(int, VALUE*, VALUE);
18
+ VALUE siren_circle_center_set(int, VALUE*, VALUE);
19
+ VALUE siren_circle_area(int, VALUE*, VALUE);
20
+ VALUE siren_circle_length(int, VALUE*, VALUE);
21
+ VALUE siren_circle_normal(int, VALUE*, VALUE);
22
+ VALUE siren_circle_normal_set(int, VALUE*, VALUE);
23
+ VALUE siren_circle_dir(int, VALUE*, VALUE);
24
+ VALUE siren_circle_dir_set(int, VALUE*, VALUE);
25
+ VALUE siren_circle_dist(int, VALUE*, VALUE);
26
+ VALUE siren_circle_distdist(int, VALUE*, VALUE);
27
+ VALUE siren_circle_contain(int, VALUE*, VALUE);
28
+
29
+ #endif
@@ -0,0 +1,15 @@
1
+ #ifndef _CURVE_ELLIPSE_H_
2
+ #define _CURVE_ELLIPSE_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_Ellipse.hxx>
7
+
8
+ extern VALUE sr_cEllipse;
9
+
10
+ static rb_data_type_t siren_ellipse_type = { "Ellipse", siren_curve_final };
11
+ bool siren_ellipse_install();
12
+ handle<Geom_Ellipse> siren_ellipse_get(VALUE self);
13
+ VALUE siren_ellipse_new( const handle<Geom_Curve>* curve);
14
+
15
+ #endif
@@ -0,0 +1,15 @@
1
+ #ifndef _CURVE_HYPERBOLA_H_
2
+ #define _CURVE_HYPERBOLA_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_Hyperbola.hxx>
7
+
8
+ extern VALUE sr_cHyperbola;
9
+
10
+ static rb_data_type_t siren_hyperbola_type = { "Hyperbola", siren_curve_final };
11
+ bool siren_hyperbola_install();
12
+ handle<Geom_Hyperbola> siren_hyperbola_get(VALUE self);
13
+ VALUE siren_hyperbola_new( const handle<Geom_Curve>* curve);
14
+
15
+ #endif
@@ -0,0 +1,17 @@
1
+ #ifndef _CURVE_LINE_H_
2
+ #define _CURVE_LINE_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_Line.hxx>
7
+
8
+ extern VALUE sr_cLine;
9
+
10
+ static rb_data_type_t siren_line_type = { "Line", siren_curve_final };
11
+ bool siren_line_install();
12
+ handle<Geom_Line> siren_line_get(VALUE self);
13
+ VALUE siren_line_new(const handle<Geom_Curve>* curve);
14
+
15
+ VALUE siren_line_dir(int, VALUE*, VALUE);
16
+
17
+ #endif
@@ -0,0 +1,15 @@
1
+ #ifndef _CURVE_OFFSETCURVE_H_
2
+ #define _CURVE_OFFSETCURVE_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_OffsetCurve.hxx>
7
+
8
+ extern VALUE sr_cOffsetCurve;
9
+
10
+ static rb_data_type_t siren_offsetcurve_type = { "OffsetCurve", siren_curve_final };
11
+ bool siren_offsetcurve_install();
12
+ handle<Geom_OffsetCurve> siren_offsetcurve_get(VALUE self);
13
+ VALUE siren_offsetcurve_new( const handle<Geom_Curve>* curve);
14
+
15
+ #endif
@@ -0,0 +1,15 @@
1
+ #ifndef _CURVE_PARABOLA_H_
2
+ #define _CURVE_PARABOLA_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <Geom_Parabola.hxx>
7
+
8
+ extern VALUE sr_cParabola;
9
+
10
+ static rb_data_type_t siren_parabola_type = { "Palabora", siren_curve_final };
11
+ bool siren_parabola_install();
12
+ handle<Geom_Parabola> siren_parabola_get(VALUE self);
13
+ VALUE siren_parabola_new( const handle<Geom_Curve>* curve);
14
+
15
+ #endif
@@ -0,0 +1,26 @@
1
+ #ifndef _FILLER_H_
2
+ #define _FILLER_H_
3
+
4
+ #include "siren.h"
5
+
6
+ #include <BRepFill_Filling.hxx>
7
+
8
+ extern VALUE sr_cFiller;
9
+
10
+ bool siren_filler_install();
11
+ void siren_filler_final(void* p);
12
+ static rb_data_type_t siren_filler_type = { "Filler", siren_filler_final };
13
+
14
+ BRepFill_Filling* siren_filler_get(VALUE obj);
15
+
16
+ VALUE siren_filler_init(int, VALUE*, VALUE);
17
+ VALUE siren_filler_add_bound(int, VALUE*, VALUE);
18
+ VALUE siren_filler_add(int, VALUE*, VALUE);
19
+ VALUE siren_filler_build(int, VALUE*, VALUE);
20
+ VALUE siren_filler_is_done(int, VALUE*, VALUE);
21
+ VALUE siren_filler_face(int, VALUE*, VALUE);
22
+ VALUE siren_filler_g0error(int, VALUE*, VALUE);
23
+ VALUE siren_filler_g1error(int, VALUE*, VALUE);
24
+ VALUE siren_filler_g2error(int, VALUE*, VALUE);
25
+
26
+ #endif
@@ -0,0 +1,19 @@
1
+ #ifndef _HEAL_H_
2
+ #define _HEAL_H_
3
+
4
+ #include "siren.h"
5
+ #include "shape.h"
6
+
7
+ #include <TopoDS.hxx>
8
+ #include <TopoDS_Wire.hxx>
9
+ #include <TopoDS_Face.hxx>
10
+
11
+ #include <ShapeFix_Shape.hxx>
12
+
13
+ #include <ShapeAnalysis.hxx>
14
+ #include <ShapeAnalysis_FreeBounds.hxx>
15
+
16
+ VALUE siren_heal_outerwire( VALUE self);
17
+ VALUE siren_heal_fix( VALUE self);
18
+
19
+ #endif
@@ -0,0 +1,19 @@
1
+ #ifndef _IGES_H_
2
+ #define _IGES_H_
3
+
4
+ #include "siren.h"
5
+ #include "vec.h"
6
+ #include "shape.h"
7
+
8
+ #include <IGESControl_Controller.hxx>
9
+ #include <IGESControl_Reader.hxx>
10
+ #include <IGESControl_Writer.hxx>
11
+ #include <Interface_Static.hxx>
12
+ //#include <IFSelect_ReturnStatus.hxx>
13
+
14
+ bool siren_iges_install();
15
+
16
+ VALUE siren_iges_save(int, VALUE*, VALUE);
17
+ VALUE siren_iges_load(int, VALUE*, VALUE);
18
+
19
+ #endif
@@ -0,0 +1,18 @@
1
+ #ifndef _STEP_H_
2
+ #define _STEP_H_
3
+
4
+ #include "siren.h"
5
+ #include "vec.h"
6
+ #include "shape.h"
7
+
8
+ #include <STEPControl_Controller.hxx>
9
+ #include <STEPControl_Reader.hxx>
10
+ #include <STEPControl_Writer.hxx>
11
+ #include <Interface_Static.hxx>
12
+
13
+ bool siren_step_install();
14
+
15
+ VALUE siren_step_save(int, VALUE*, VALUE);
16
+ VALUE siren_step_load(int, VALUE*, VALUE);
17
+
18
+ #endif
@@ -0,0 +1,13 @@
1
+ #ifndef _STL_H_
2
+ #define _STL_H_
3
+
4
+ #include "siren.h"
5
+ #include "vec.h"
6
+ #include "shape.h"
7
+
8
+ #include <StlAPI.hxx>
9
+
10
+ bool siren_stl_install();
11
+ VALUE siren_stl_load(int, VALUE*, VALUE);
12
+
13
+ #endif
@@ -0,0 +1,35 @@
1
+ #ifndef _OFFSET_H_
2
+ #define _OFFSET_H_
3
+
4
+ #include "siren.h"
5
+ #include "shape.h"
6
+ #include "topalgo.h"
7
+
8
+ // sweep_vec
9
+ #include <BRepOffsetAPI_MakePipe.hxx>
10
+
11
+ // sweep_path
12
+ #include <BRepOffsetAPI_MakePipeShell.hxx>
13
+ #include <BRepAdaptor_CompCurve.hxx>
14
+ #include <TopExp.hxx>
15
+ #include <Law_S.hxx>
16
+
17
+ // loft
18
+ #include <BRepOffsetAPI_ThruSections.hxx>
19
+
20
+ // offset
21
+ #include <Geom_OffsetSurface.hxx>
22
+ #include <BRepOffset_MakeOffset.hxx>
23
+ #include <BRepOffsetAPI_MakeOffsetShape.hxx>
24
+
25
+ bool siren_offset_install();
26
+
27
+ VALUE siren_offset_sweep_vec(int, VALUE*, VALUE);
28
+ VALUE siren_offset_sweep_path(int, VALUE*, VALUE);
29
+ VALUE siren_offset_loft(int, VALUE*, VALUE);
30
+ VALUE siren_offset_offset_geomsurf(int, VALUE*, VALUE);
31
+ VALUE siren_offset_offset(int, VALUE*, VALUE);
32
+ VALUE siren_offset_offset_shape(int, VALUE*, VALUE);
33
+ VALUE siren_offset_pipe(int, VALUE*, VALUE);
34
+
35
+ #endif
@@ -0,0 +1,140 @@
1
+ #ifndef _SHAPE_H_
2
+ #define _SHAPE_H_
3
+
4
+ #include "siren.h"
5
+ #include "vec.h"
6
+ #include "bndbox.h"
7
+ #include "trans.h"
8
+
9
+ #ifdef SR_ENABLE_SHHEALING
10
+ #include "heal.h"
11
+ #endif
12
+
13
+ extern VALUE sr_cShape;
14
+
15
+ VALUE siren_shape_allocate(VALUE);
16
+ void siren_shape_final(void* p);
17
+ static rb_data_type_t siren_shape_type = { "Shape", siren_shape_final };
18
+
19
+ #include "shape/vertex.h"
20
+ #include "shape/edge.h"
21
+ #include "shape/wire.h"
22
+ #include "shape/face.h"
23
+ #include "shape/shell.h"
24
+ #include "shape/solid.h"
25
+ #include "shape/chunk.h"
26
+ #include "shape/compound.h"
27
+
28
+ #include <gp_Ax1.hxx>
29
+ #include <gp_Ax2.hxx>
30
+
31
+ #include <TopoDS.hxx>
32
+ #include <TopoDS_Shape.hxx>
33
+
34
+ #include <TopExp_Explorer.hxx>
35
+
36
+ #include <TopLoc_Datum3D.hxx>
37
+
38
+ #include <BRepAlgoAPI_Section.hxx>
39
+
40
+ bool siren_shape_install();
41
+ TopoDS_Shape* siren_shape_get( VALUE obj);
42
+ VALUE siren_shape_new( const TopoDS_Shape& shape);
43
+ struct RClass* siren_shape_rclass();
44
+ #define siren_is_shape(obj) (DATA_TYPE(obj) == &siren_shape_type)
45
+
46
+ bool siren_shape_p(const VALUE&);
47
+ void siren_shape_check(const VALUE&);
48
+
49
+ VALUE siren_shape_init(int, VALUE*, VALUE);
50
+ VALUE siren_shape_is_null(int, VALUE*, VALUE);
51
+ VALUE siren_shape_pos(int, VALUE*, VALUE);
52
+ VALUE siren_shape_trans(int, VALUE*, VALUE);
53
+ VALUE siren_shape_set_trans(int, VALUE*, VALUE);
54
+
55
+ VALUE siren_shape_bndbox(int, VALUE*, VALUE);
56
+
57
+ VALUE siren_shape_translate_bang(int, VALUE*, VALUE);
58
+ VALUE siren_shape_rotate_bang(int, VALUE*, VALUE);
59
+ VALUE siren_shape_scale_bang(int, VALUE*, VALUE);
60
+ VALUE siren_shape_mirror_bang(int, VALUE*, VALUE);
61
+ VALUE siren_shape_move_bang(int, VALUE*, VALUE);
62
+ VALUE siren_shape_translate(int, VALUE*, VALUE);
63
+ VALUE siren_shape_rotate(int, VALUE*, VALUE);
64
+ VALUE siren_shape_scale(int, VALUE*, VALUE);
65
+ VALUE siren_shape_mirror(int, VALUE*, VALUE);
66
+ VALUE siren_shape_move(int, VALUE*, VALUE);
67
+
68
+ VALUE siren_shape_hashcode(int, VALUE*, VALUE);
69
+
70
+ VALUE siren_shape_is_partner(int, VALUE*, VALUE);
71
+ VALUE siren_shape_is_same(int, VALUE*, VALUE);
72
+ VALUE siren_shape_is_equal(int, VALUE*, VALUE);
73
+
74
+ VALUE siren_shape_explore(int, VALUE*, VALUE);
75
+ VALUE siren_shape_subshapes(int, VALUE*, VALUE);
76
+
77
+ VALUE siren_shape_section(int, VALUE*, VALUE);
78
+
79
+ VALUE siren_shape_reverse(int, VALUE*, VALUE);
80
+ VALUE siren_shape_reverse_bang(int, VALUE*, VALUE);
81
+
82
+ /* from BRepTools */
83
+ VALUE siren_shape_update_bang(int, VALUE*, VALUE);
84
+ VALUE siren_shape_clean_bang(int, VALUE*, VALUE);
85
+
86
+ /* flag accesors */
87
+ VALUE siren_shape_is_lock(int, VALUE*, VALUE);
88
+ VALUE siren_shape_set_lock(int, VALUE*, VALUE);
89
+ VALUE siren_shape_is_modify(int, VALUE*, VALUE);
90
+ VALUE siren_shape_set_modify(int, VALUE*, VALUE);
91
+ VALUE siren_shape_is_check(int, VALUE*, VALUE);
92
+ VALUE siren_shape_set_check(int, VALUE*, VALUE);
93
+ VALUE siren_shape_is_orientable(int, VALUE*, VALUE);
94
+ VALUE siren_shape_set_orientable(int, VALUE*, VALUE);
95
+ VALUE siren_shape_is_close(int, VALUE*, VALUE);
96
+ VALUE siren_shape_set_close(int, VALUE*, VALUE);
97
+ VALUE siren_shape_is_infinite(int, VALUE*, VALUE);
98
+ VALUE siren_shape_set_infinite(int, VALUE*, VALUE);
99
+ VALUE siren_shape_is_convex(int, VALUE*, VALUE);
100
+ VALUE siren_shape_set_convex(int, VALUE*, VALUE);
101
+
102
+ VALUE siren_shape_next_trans(int, VALUE*, VALUE);
103
+ VALUE siren_shape_first_datum(int, VALUE*, VALUE);
104
+
105
+ // VALUE siren_shape_complement(int, VALUE*, VALUE);
106
+ // VALUE siren_shape_complement_bang(int, VALUE*, VALUE);
107
+ // VALUE siren_shape_compose(int, VALUE*, VALUE);
108
+ // VALUE siren_shape_compose_bang(int, VALUE*, VALUE);
109
+
110
+ #define SR_SHAPE_GET(OCCT,SRT) \
111
+ TopoDS_##OCCT siren_##SRT##_get(VALUE self) \
112
+ { \
113
+ TopoDS_Shape* shape = siren_shape_get(self); \
114
+ TopoDS_##OCCT res = TopoDS::OCCT(*shape); \
115
+ if (res.IsNull()) { \
116
+ rb_raise(Qnil, "The geometry type is not " #SRT "."); \
117
+ } \
118
+ return res; \
119
+ }
120
+
121
+ #define SR_SHAPE_INIT(CLASS) \
122
+ sr_c##CLASS = rb_define_class_under(sr_mSiren, #CLASS, sr_cShape); \
123
+ rb_define_alloc_func(sr_c##CLASS, siren_shape_allocate);
124
+
125
+ #define SR_SHAPE_CHECK(CLASSU, CLASSL) bool siren_##CLASSL##_p(const VALUE& target) \
126
+ { \
127
+ return rb_funcall(target, rb_intern("is_a?"), 1, sr_c##CLASSU) == Qtrue; \
128
+ } \
129
+ void siren_##CLASSL##_check(const VALUE& target) \
130
+ { \
131
+ if (!siren_##CLASSL##_p(target)) { \
132
+ VALUE type = rb_funcall(target, rb_intern("class"), 0); \
133
+ VALUE type_str = rb_funcall(type, rb_intern("to_s"), 0); \
134
+ VALUE etype_str = rb_funcall(sr_c##CLASSU, rb_intern("to_s"), 0); \
135
+ rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)", \
136
+ RSTRING_PTR(type_str), RSTRING_PTR(etype_str)); \
137
+ } \
138
+ }
139
+
140
+ #endif
@@ -0,0 +1,26 @@
1
+ #ifndef _SHAPE_CHUNK_H_
2
+ #define _SHAPE_CHUNK_H_
3
+
4
+ #ifdef SR_ENABLE_CHUNK
5
+
6
+ #include "siren.h"
7
+
8
+ #include <TopoDS.hxx>
9
+ #include <TopoDS_CompSolid.hxx>
10
+
11
+ extern VALUE sr_cChunk;
12
+
13
+ static rb_data_type_t siren_chunk_type = { "Chunk", siren_shape_final };
14
+ bool siren_chunk_install();
15
+ TopoDS_CompSolid siren_chunk_get(VALUE self);
16
+ bool siren_chunk_p(const VALUE&);
17
+ void siren_chunk_check(const VALUE&);
18
+
19
+ VALUE siren_chunk_new( const TopoDS_Shape* src);
20
+
21
+ VALUE siren_chunk_init(int, VALUE*, VALUE);
22
+ VALUE siren_chunk_to_solid(int, VALUE*, VALUE);
23
+
24
+ #endif
25
+
26
+ #endif