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,18 @@
1
+ #include "common.h"
2
+
3
+ void siren_ary_to_xyz(VALUE ary, Standard_Real& x, Standard_Real& y, Standard_Real& z)
4
+ {
5
+ x = 0.0; y = 0.0; z = 0.0;
6
+
7
+ int len = RARRAY_LEN(ary);
8
+ if (len > 0) {
9
+ x = NUM2DBL(RARRAY_AREF(ary, 0));
10
+ }
11
+ if (len > 1) {
12
+ y = NUM2DBL(RARRAY_AREF(ary, 1));
13
+ }
14
+ if (len > 2) {
15
+ z = NUM2DBL(RARRAY_AREF(ary, 2));
16
+ }
17
+ return;
18
+ }
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Document-class: Curve
3
+ *
4
+ */
5
+
6
+ #include "curve.h"
7
+
8
+ VALUE sr_cCurve;
9
+
10
+ VALUE siren_curve_allocate(VALUE klass)
11
+ {
12
+ void* p = ruby_xmalloc(sizeof(handle<Geom_Curve>));
13
+ new(p) handle<Geom_Curve>();
14
+ return Data_Wrap_Struct(klass, NULL, siren_curve_final, p);
15
+ }
16
+
17
+ handle<Geom_Curve>* siren_curve_get(VALUE obj)
18
+ {
19
+ handle<Geom_Curve>* m;
20
+ Data_Get_Struct(obj, handle<Geom_Curve>, m);
21
+ return m;
22
+ }
23
+
24
+ VALUE siren_curve_new(handle<Geom_Curve> curve)
25
+ {
26
+ VALUE klass;
27
+ GeomAbs_CurveType type = siren_curve_geomtype_native(curve);
28
+ switch (type) {
29
+ case GeomAbs_Line: klass = sr_cLine; break;
30
+ case GeomAbs_Circle: klass = sr_cCircle; break;
31
+ case GeomAbs_Ellipse: klass = sr_cEllipse; break;
32
+ case GeomAbs_Hyperbola: klass = sr_cHyperbola; break;
33
+ case GeomAbs_Parabola: klass = sr_cParabola; break;
34
+ case GeomAbs_BezierCurve: klass = sr_cBzCurve; break;
35
+ case GeomAbs_BSplineCurve: klass = sr_cBSCurve; break;
36
+ case GeomAbs_OffsetCurve: klass = sr_cOffsetCurve; break;
37
+ default: rb_raise(Qnil, "Failed to make Curve object."); break;
38
+ }
39
+ auto val = siren_curve_allocate(klass);
40
+ auto pc = siren_curve_get(val);
41
+ *pc = curve;
42
+ return val;
43
+ }
44
+
45
+ bool siren_curve_install()
46
+ {
47
+ sr_cCurve = rb_define_class_under(sr_mSiren, "Curve", rb_cObject);
48
+ rb_define_alloc_func(sr_cCurve, siren_curve_allocate);
49
+ rb_define_method(sr_cCurve, "initialize", RUBY_METHOD_FUNC(siren_curve_init), -1);
50
+ siren_line_install();
51
+ siren_circle_install();
52
+ siren_ellipse_install();
53
+ siren_hyperbola_install();
54
+ siren_parabola_install();
55
+ siren_bzcurve_install();
56
+ siren_bscurve_install();
57
+ siren_offsetcurve_install();
58
+ return true;
59
+ }
60
+
61
+ VALUE siren_curve_init(int argc, VALUE* argv, VALUE self)
62
+ {
63
+ rb_raise(Qnil, "private method `new' called for Curve:Class");
64
+ return Qnil;
65
+ }
66
+
67
+ void siren_curve_final(void* p)
68
+ {
69
+ handle<Geom_Curve>* hgcurve = static_cast<handle<Geom_Curve>*>(p);
70
+ if (!(*hgcurve).IsNull()) {
71
+ (*hgcurve).Nullify();
72
+ }
73
+ ruby_xfree(p);
74
+ }
75
+
@@ -0,0 +1,118 @@
1
+ /**
2
+ * bscurve.cpp
3
+ */
4
+
5
+ #include "curve.h"
6
+
7
+ VALUE sr_cBSCurve;
8
+
9
+ SR_CURVE_GET(BSplineCurve, bscurve)
10
+
11
+ bool siren_bscurve_install()
12
+ {
13
+ SR_CURVE_INIT(BSCurve)
14
+ rb_define_method(sr_cBSCurve, "initialize", RUBY_METHOD_FUNC(siren_bscurve_init), -1);
15
+ rb_define_method(sr_cBSCurve, "degree", RUBY_METHOD_FUNC(siren_bscurve_degree), -1);
16
+ rb_define_method(sr_cBSCurve, "knots", RUBY_METHOD_FUNC(siren_bscurve_knots), -1);
17
+ rb_define_method(sr_cBSCurve, "mults", RUBY_METHOD_FUNC(siren_bscurve_mults), -1);
18
+ rb_define_method(sr_cBSCurve, "poles", RUBY_METHOD_FUNC(siren_bscurve_poles), -1);
19
+ rb_define_method(sr_cBSCurve, "weights", RUBY_METHOD_FUNC(siren_bscurve_weights), -1);
20
+ return true;
21
+ }
22
+
23
+ VALUE siren_bscurve_init(int argc, VALUE* argv, VALUE self)
24
+ {
25
+ VALUE d;
26
+ VALUE ks, ms, ps, ws;
27
+ rb_scan_args(argc, argv, "41", &d, &ks, &ms, &ps, &ws);
28
+
29
+ int plen = RARRAY_LEN(ps);
30
+
31
+ TColgp_Array1OfPnt poles(0, plen - 1);
32
+ TColStd_Array1OfReal weights(0, plen - 1);
33
+ for (int i=0; i < plen; i++) {
34
+ poles.SetValue(i, siren_ary_to_pnt(RARRAY_AREF(ps, i)));
35
+ if (argc >= 5) {
36
+ VALUE w = RARRAY_AREF(ws, i);
37
+ weights.SetValue(i, VALUE(w));
38
+ }
39
+ else {
40
+ weights.SetValue(i, 1.0);
41
+ }
42
+ }
43
+
44
+ int klen = RARRAY_LEN(ks);
45
+ TColStd_Array1OfReal knots(0, klen - 1);
46
+ TColStd_Array1OfInteger mults(0, klen - 1);
47
+
48
+ for (int i=0; i < klen; i++) {
49
+ VALUE knot = RARRAY_AREF(ks, i);
50
+ knots.SetValue(i, VALUE(knot));
51
+ VALUE mult = RARRAY_AREF(ms, i);
52
+ mults.SetValue(i, (Standard_Integer)DBL2NUM(mult));
53
+ }
54
+
55
+ handle<Geom_Curve> curve
56
+ = new Geom_BSplineCurve(poles, weights, knots, mults, d, Standard_False);
57
+
58
+ // initialize において self は既に rb_instance_alloc されているので、
59
+ // DATA_PTR と DATA_TYPE のみを設定する
60
+ void* p = ruby_xmalloc(sizeof(handle<Geom_Curve>));
61
+ handle<Geom_Curve>* hgcurve = new(p) handle<Geom_Curve>();
62
+ *hgcurve = curve;
63
+ DATA_PTR(self) = hgcurve;
64
+ #if 0
65
+ DATA_TYPE(self) = &siren_bscurve_type;
66
+ #endif
67
+ return self;
68
+ }
69
+
70
+ VALUE siren_bscurve_degree(int argc, VALUE* argv, VALUE self)
71
+ {
72
+ handle<Geom_BSplineCurve> curve = siren_bscurve_get(self);
73
+ return INT2FIX((int)curve->Degree());
74
+ }
75
+
76
+ VALUE siren_bscurve_knots(int argc, VALUE* argv, VALUE self)
77
+ {
78
+ handle<Geom_BSplineCurve> curve = siren_bscurve_get(self);
79
+ VALUE knots = rb_ary_new();
80
+ for (int i = 1; i <= curve->NbKnots(); i++) {
81
+ rb_ary_push(knots, (curve->Knot(i)));
82
+ }
83
+ return knots;
84
+ }
85
+
86
+ VALUE siren_bscurve_mults(int argc, VALUE* argv, VALUE self)
87
+ {
88
+ handle<Geom_BSplineCurve> curve = siren_bscurve_get(self);
89
+ VALUE mults = rb_ary_new();
90
+ for (int i = 1; i <= curve->NbKnots(); i++) {
91
+ rb_ary_push(mults, INT2FIX(curve->Multiplicity(i)));
92
+ }
93
+ return mults;
94
+ }
95
+
96
+ VALUE siren_bscurve_poles(int argc, VALUE* argv, VALUE self)
97
+ {
98
+ handle<Geom_BSplineCurve> curve = siren_bscurve_get(self);
99
+ VALUE poles = rb_ary_new();
100
+ for (int i = 1; i <= curve->NbPoles(); i++) {
101
+ VALUE item = rb_ary_new();
102
+ rb_ary_push(item, (curve->Pole(i).X()));
103
+ rb_ary_push(item, (curve->Pole(i).Y()));
104
+ rb_ary_push(item, (curve->Pole(i).Z()));
105
+ rb_ary_push(poles, item);
106
+ }
107
+ return poles;
108
+ }
109
+
110
+ VALUE siren_bscurve_weights(int argc, VALUE* argv, VALUE self)
111
+ {
112
+ handle<Geom_BSplineCurve> curve = siren_bscurve_get(self);
113
+ VALUE weights = rb_ary_new();
114
+ for (int i = 1; i <= curve->NbPoles(); i++) {
115
+ rb_ary_push(weights, (curve->Weight(i)));
116
+ }
117
+ return weights;
118
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * bzcurve.cpp
3
+ */
4
+
5
+ #include "curve.h"
6
+
7
+ VALUE sr_cBzCurve;
8
+
9
+ SR_CURVE_GET(BezierCurve, bzcurve)
10
+
11
+ bool siren_bzcurve_install()
12
+ {
13
+ SR_CURVE_INIT(BzCurve)
14
+ rb_define_method(sr_cBzCurve, "initialize", RUBY_METHOD_FUNC(siren_bzcurve_init), -1);
15
+ return true;
16
+ }
17
+
18
+ VALUE siren_bzcurve_init(int argc, VALUE* argv, VALUE self)
19
+ {
20
+ VALUE ps, ws;
21
+ rb_scan_args(argc, argv, "11", &ps, &ws);
22
+ bool has_weight = argc == 2;
23
+ int plen = RARRAY_LEN(ps);
24
+ TColgp_Array1OfPnt poles(1, plen);
25
+ TColStd_Array1OfReal weights(1, plen);
26
+ // Start index of weights must be 1. Crash construction of Geom_BezierCurve
27
+ // if another index specified.
28
+ for (int i = 0; i < plen; i++) {
29
+ poles.SetValue(i + 1, siren_ary_to_pnt(RARRAY_AREF(ps, i)));
30
+ if (has_weight) {
31
+ VALUE w = RARRAY_AREF(ws, i);
32
+ weights.SetValue(i + 1, VALUE(w));
33
+ }
34
+ }
35
+ handle<Geom_Curve> curve = nullptr;
36
+ try {
37
+ if (has_weight) {
38
+ curve = new Geom_BezierCurve(poles, weights);
39
+ }
40
+ else {
41
+ curve = new Geom_BezierCurve(poles);
42
+ }
43
+ }
44
+ catch (...) {
45
+ rb_raise(Qnil, "Failed to make a BzCurve.");
46
+ }
47
+ void* p = ruby_xmalloc(sizeof(handle<Geom_Curve>));
48
+ handle<Geom_Curve>* hgcurve = new(p) handle<Geom_Curve>();
49
+ *hgcurve = curve;
50
+ DATA_PTR(self) = hgcurve;
51
+ #if 0
52
+ DATA_TYPE(self) = &siren_bzcurve_type;
53
+ #endif
54
+ return self;
55
+ }
@@ -0,0 +1,146 @@
1
+ #include "curve.h"
2
+
3
+ VALUE sr_cCircle;
4
+
5
+ SR_CURVE_GET(Circle, circle)
6
+
7
+ bool siren_circle_install()
8
+ {
9
+ SR_CURVE_INIT(Circle)
10
+ rb_define_method(sr_cCircle, "initialize", RUBY_METHOD_FUNC(siren_curve_init), -1);
11
+ rb_define_method(sr_cCircle, "radius", RUBY_METHOD_FUNC(siren_circle_radius), -1);
12
+ rb_define_method(sr_cCircle, "radius=", RUBY_METHOD_FUNC(siren_circle_radius_set), -1);
13
+ rb_define_method(sr_cCircle, "center", RUBY_METHOD_FUNC(siren_circle_center), -1);
14
+ rb_define_method(sr_cCircle, "center=", RUBY_METHOD_FUNC(siren_circle_center_set), -1);
15
+ rb_define_method(sr_cCircle, "area", RUBY_METHOD_FUNC(siren_circle_area), -1);
16
+ rb_define_method(sr_cCircle, "length", RUBY_METHOD_FUNC(siren_circle_length), -1);
17
+ rb_define_method(sr_cCircle, "normal", RUBY_METHOD_FUNC(siren_circle_normal), -1);
18
+ rb_define_method(sr_cCircle, "normal=", RUBY_METHOD_FUNC(siren_circle_normal_set), -1);
19
+ rb_define_method(sr_cCircle, "dir", RUBY_METHOD_FUNC(siren_circle_dir), -1);
20
+ rb_define_method(sr_cCircle, "dir=", RUBY_METHOD_FUNC(siren_circle_dir_set), -1);
21
+ rb_define_method(sr_cCircle, "dist", RUBY_METHOD_FUNC(siren_circle_dist), -1);
22
+ rb_define_method(sr_cCircle, "distdist", RUBY_METHOD_FUNC(siren_circle_distdist), -1);
23
+ rb_define_method(sr_cCircle, "contain", RUBY_METHOD_FUNC(siren_circle_contain), -1);
24
+ return true;
25
+ }
26
+
27
+ VALUE siren_circle_radius(int argc, VALUE* argv, VALUE self)
28
+ {
29
+ Standard_Real r = siren_circle_get(self)->Radius();
30
+ return (r);
31
+ }
32
+
33
+ VALUE siren_circle_radius_set(int argc, VALUE* argv, VALUE self)
34
+ {
35
+ VALUE r;
36
+ rb_scan_args(argc, argv, "1", &r);
37
+ siren_circle_get(self)->SetRadius(r);
38
+ return Qnil;
39
+ }
40
+
41
+ VALUE siren_circle_center(int argc, VALUE* argv, VALUE self)
42
+ {
43
+ gp_Pnt center = siren_circle_get(self)->Circ().Location();
44
+ return siren_pnt_to_ary(center);
45
+ }
46
+
47
+ VALUE siren_circle_center_set(int argc, VALUE* argv, VALUE self)
48
+ {
49
+ VALUE pos;
50
+ rb_scan_args(argc, argv, "1", &pos);
51
+ gp_Pnt p = siren_ary_to_pnt(pos);
52
+ handle<Geom_Circle> circle = siren_circle_get(self);
53
+ gp_Circ circ = circle->Circ();
54
+ circ.SetLocation(p);
55
+ circle->SetCirc(circ);
56
+ return pos;
57
+ }
58
+
59
+ VALUE siren_circle_area(int argc, VALUE* argv, VALUE self)
60
+ {
61
+ handle<Geom_Circle> circle = siren_circle_get(self);
62
+ return (circle->Circ().Area());
63
+ }
64
+
65
+ VALUE siren_circle_length(int argc, VALUE* argv, VALUE self)
66
+ {
67
+ handle<Geom_Circle> circle = siren_circle_get(self);
68
+ return (circle->Circ().Length());
69
+ }
70
+
71
+ VALUE siren_circle_normal(int argc, VALUE* argv, VALUE self)
72
+ {
73
+ handle<Geom_Circle> circle = siren_circle_get(self);
74
+ // Returns the main axis of the circle.
75
+ // It is the axis perpendicular to the plane of the circle,
76
+ // passing through the "Location" point (center) of the circle.
77
+ gp_Ax1 axis = circle->Circ().Axis();
78
+ return siren_dir_to_ary(axis.Direction());
79
+ }
80
+
81
+ VALUE siren_circle_normal_set(int argc, VALUE* argv, VALUE self)
82
+ {
83
+ VALUE norm;
84
+ rb_scan_args(argc, argv, "1", &norm);
85
+ gp_Dir dir = siren_ary_to_dir(norm);
86
+ handle<Geom_Circle> circle = siren_circle_get(self);
87
+ gp_Circ circ = circle->Circ();
88
+ gp_Ax1 axis = circ.Axis();
89
+ axis.SetDirection(dir);
90
+ circ.SetAxis(axis);
91
+ circle->SetCirc(circ);
92
+ return norm;
93
+ }
94
+
95
+ VALUE siren_circle_dir(int argc, VALUE* argv, VALUE self)
96
+ {
97
+ handle<Geom_Circle> circle = siren_circle_get(self);
98
+ gp_Ax1 axis = circle->Circ().XAxis();
99
+ return siren_dir_to_ary(axis.Direction());
100
+ }
101
+
102
+ VALUE siren_circle_dir_set(int argc, VALUE* argv, VALUE self)
103
+ {
104
+ VALUE val;
105
+ rb_scan_args(argc, argv, "1", &val);
106
+ gp_Dir dir = siren_ary_to_dir(val);
107
+ handle<Geom_Circle> circle = siren_circle_get(self);
108
+ gp_Circ circ = circle->Circ();
109
+ gp_Ax2 axis;
110
+ axis.SetAxis(circ.Axis());
111
+ axis.SetXDirection(dir);
112
+ circ.SetPosition(axis);
113
+ circle->SetCirc(circ);
114
+ return val;
115
+ }
116
+
117
+ VALUE siren_circle_dist(int argc, VALUE* argv, VALUE self)
118
+ {
119
+ VALUE pos;
120
+ rb_scan_args(argc, argv, "1", &pos);
121
+ gp_Pnt p = siren_ary_to_pnt(pos);
122
+ handle<Geom_Circle> circle = siren_circle_get(self);
123
+ gp_Circ circ = circle->Circ();
124
+ return (circ.Distance(p));
125
+ }
126
+
127
+ VALUE siren_circle_distdist(int argc, VALUE* argv, VALUE self)
128
+ {
129
+ VALUE pos;
130
+ rb_scan_args(argc, argv, "1", &pos);
131
+ gp_Pnt p = siren_ary_to_pnt(pos);
132
+ handle<Geom_Circle> circle = siren_circle_get(self);
133
+ gp_Circ circ = circle->Circ();
134
+ return (circ.SquareDistance(p));
135
+ }
136
+
137
+ VALUE siren_circle_contain(int argc, VALUE* argv, VALUE self)
138
+ {
139
+ VALUE pos;
140
+ VALUE lintol = 1.0e-7;
141
+ rb_scan_args(argc, argv, "11", &pos, &lintol);
142
+ gp_Pnt p = siren_ary_to_pnt(pos);
143
+ handle<Geom_Circle> circle = siren_circle_get(self);
144
+ gp_Circ circ = circle->Circ();
145
+ return circ.Contains(p, lintol) ? Qtrue : Qfalse;
146
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ellipse.cpp
3
+ * Implementation of singleton methods for ELLIPSE
4
+ */
5
+
6
+ #include "curve.h"
7
+
8
+ VALUE sr_cEllipse;
9
+
10
+ SR_CURVE_GET(Ellipse, ellipse)
11
+
12
+ bool siren_ellipse_install()
13
+ {
14
+ SR_CURVE_INIT(Ellipse)
15
+ rb_define_method(sr_cEllipse, "initialize", RUBY_METHOD_FUNC(siren_curve_init), -1);
16
+ return true;
17
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * hyperbola.cpp
3
+ * Implementation of singleton methods for HYPERBOLA
4
+ */
5
+
6
+ #include "curve.h"
7
+
8
+ VALUE sr_cHyperbola;
9
+
10
+ SR_CURVE_GET(Hyperbola, hyperbola)
11
+
12
+ bool siren_hyperbola_install()
13
+ {
14
+ SR_CURVE_INIT(Hyperbola)
15
+ rb_define_method(sr_cHyperbola, "initialize", RUBY_METHOD_FUNC(siren_curve_init), -1);
16
+ return true;
17
+ }