1
/***************************************************************************
2
* Copyright (c) 2008 Werner Mayer <wmayer@users.sourceforge.net> *
4
* This file is part of the FreeCAD CAx development system. *
6
* This library is free software; you can redistribute it and/or *
7
* modify it under the terms of the GNU Library General Public *
8
* License as published by the Free Software Foundation; either *
9
* version 2 of the License, or (at your option) any later version. *
11
* This library is distributed in the hope that it will be useful, *
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
* GNU Library General Public License for more details. *
16
* You should have received a copy of the GNU Library General Public *
17
* License along with this library; see the file COPYING.LIB. If not, *
18
* write to the Free Software Foundation, Inc., 59 Temple Place, *
19
* Suite 330, Boston, MA 02111-1307, USA *
21
***************************************************************************/
24
#include "PreCompiled.h"
26
# include <Geom_BezierCurve.hxx>
27
# include <gp_Pnt.hxx>
28
# include <TColStd_Array1OfReal.hxx>
29
# include <TColgp_Array1OfPnt.hxx>
32
#include <Base/VectorPy.h>
33
#include <Base/GeometryPyCXX.h>
36
#include "BezierCurvePy.h"
37
#include "BezierCurvePy.cpp"
41
// returns a string which represents the object e.g. when printed in python
42
const char *BezierCurvePy::representation(void) const
44
return "<BezierCurve object>";
47
PyObject *BezierCurvePy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper
49
// create a new instance of BezierCurvePy and the Twin object
50
return new BezierCurvePy(new GeomBezierCurve);
54
int BezierCurvePy::PyInit(PyObject* /*args*/, PyObject* /*kwd*/)
59
PyObject* BezierCurvePy::isRational(PyObject *args)
61
if (!PyArg_ParseTuple(args, ""))
63
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
64
(getGeometryPtr()->handle());
65
Standard_Boolean val = curve->IsRational();
76
PyObject* BezierCurvePy::isPeriodic(PyObject *args)
78
if (!PyArg_ParseTuple(args, ""))
80
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
81
(getGeometryPtr()->handle());
82
Standard_Boolean val = curve->IsPeriodic();
93
PyObject* BezierCurvePy::isClosed(PyObject *args)
95
if (!PyArg_ParseTuple(args, ""))
97
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
98
(getGeometryPtr()->handle());
99
Standard_Boolean val = curve->IsClosed();
110
PyObject* BezierCurvePy::increase(PyObject * args)
113
if (!PyArg_ParseTuple(args, "i", °ree))
115
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
116
(getGeometryPtr()->handle());
117
curve->Increase(degree);
121
PyObject* BezierCurvePy::insertPoleAfter(PyObject * args)
126
if (!PyArg_ParseTuple(args, "iO!|d", &index, &(Base::VectorPy::Type), &p, &weight))
128
Base::Vector3d vec = static_cast<Base::VectorPy*>(p)->value();
129
gp_Pnt pnt(vec.x, vec.y, vec.z);
131
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
132
(getGeometryPtr()->handle());
133
curve->InsertPoleAfter(index,pnt,weight);
136
catch (Standard_Failure) {
137
Handle_Standard_Failure e = Standard_Failure::Caught();
138
PyErr_SetString(PyExc_Exception, e->GetMessageString());
143
PyObject* BezierCurvePy::insertPoleBefore(PyObject * args)
148
if (!PyArg_ParseTuple(args, "iO!|d", &index, &(Base::VectorPy::Type), &p, &weight))
150
Base::Vector3d vec = static_cast<Base::VectorPy*>(p)->value();
151
gp_Pnt pnt(vec.x, vec.y, vec.z);
153
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
154
(getGeometryPtr()->handle());
155
curve->InsertPoleBefore(index,pnt,weight);
158
catch (Standard_Failure) {
159
Handle_Standard_Failure e = Standard_Failure::Caught();
160
PyErr_SetString(PyExc_Exception, e->GetMessageString());
165
PyObject* BezierCurvePy::removePole(PyObject * args)
168
if (!PyArg_ParseTuple(args, "i", &index))
171
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
172
(getGeometryPtr()->handle());
173
curve->RemovePole(index);
176
catch (Standard_Failure) {
177
Handle_Standard_Failure e = Standard_Failure::Caught();
178
PyErr_SetString(PyExc_Exception, e->GetMessageString());
183
PyObject* BezierCurvePy::segment(PyObject * args)
186
if (!PyArg_ParseTuple(args, "dd", &u1,&u2))
189
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
190
(getGeometryPtr()->handle());
191
curve->Segment(u1,u2);
194
catch (Standard_Failure) {
195
Handle_Standard_Failure e = Standard_Failure::Caught();
196
PyErr_SetString(PyExc_Exception, e->GetMessageString());
201
PyObject* BezierCurvePy::setPole(PyObject * args)
206
if (!PyArg_ParseTuple(args, "iO!|d", &index, &(Base::VectorPy::Type), &p, &weight))
208
Base::Vector3d vec = static_cast<Base::VectorPy*>(p)->value();
209
gp_Pnt pnt(vec.x, vec.y, vec.z);
211
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
212
(getGeometryPtr()->handle());
214
curve->SetPole(index,pnt);
216
curve->SetPole(index,pnt,weight);
219
catch (Standard_Failure) {
220
Handle_Standard_Failure e = Standard_Failure::Caught();
221
PyErr_SetString(PyExc_Exception, e->GetMessageString());
226
PyObject* BezierCurvePy::getPole(PyObject * args)
229
if (!PyArg_ParseTuple(args, "i", &index))
232
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
233
(getGeometryPtr()->handle());
234
gp_Pnt pnt = curve->Pole(index);
235
Base::VectorPy* vec = new Base::VectorPy(Base::Vector3d(
236
pnt.X(), pnt.Y(), pnt.Z()));
239
catch (Standard_Failure) {
240
Handle_Standard_Failure e = Standard_Failure::Caught();
241
PyErr_SetString(PyExc_Exception, e->GetMessageString());
246
PyObject* BezierCurvePy::getPoles(PyObject * args)
248
if (!PyArg_ParseTuple(args, ""))
251
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
252
(getGeometryPtr()->handle());
253
TColgp_Array1OfPnt p(1,curve->NbPoles());
256
for (Standard_Integer i=p.Lower(); i<=p.Upper(); i++) {
258
Base::VectorPy* vec = new Base::VectorPy(Base::Vector3d(
259
pnt.X(), pnt.Y(), pnt.Z()));
260
poles.append(Py::Object(vec));
262
return Py::new_reference_to(poles);
264
catch (Standard_Failure) {
265
Handle_Standard_Failure e = Standard_Failure::Caught();
266
PyErr_SetString(PyExc_Exception, e->GetMessageString());
271
PyObject* BezierCurvePy::setWeight(PyObject * args)
275
if (!PyArg_ParseTuple(args, "id", &index,&weight))
278
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
279
(getGeometryPtr()->handle());
280
curve->SetWeight(index,weight);
283
catch (Standard_Failure) {
284
Handle_Standard_Failure e = Standard_Failure::Caught();
285
PyErr_SetString(PyExc_Exception, e->GetMessageString());
290
PyObject* BezierCurvePy::getWeight(PyObject * args)
293
if (!PyArg_ParseTuple(args, "i", &index))
296
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
297
(getGeometryPtr()->handle());
298
double weight = curve->Weight(index);
299
return Py_BuildValue("d", weight);
301
catch (Standard_Failure) {
302
Handle_Standard_Failure e = Standard_Failure::Caught();
303
PyErr_SetString(PyExc_Exception, e->GetMessageString());
308
PyObject* BezierCurvePy::getWeights(PyObject * args)
310
if (!PyArg_ParseTuple(args, ""))
313
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
314
(getGeometryPtr()->handle());
315
TColStd_Array1OfReal w(1,curve->NbPoles());
318
for (Standard_Integer i=w.Lower(); i<=w.Upper(); i++) {
319
weights.append(Py::Float(w(i)));
321
return Py::new_reference_to(weights);
323
catch (Standard_Failure) {
324
Handle_Standard_Failure e = Standard_Failure::Caught();
325
PyErr_SetString(PyExc_Exception, e->GetMessageString());
330
PyObject* BezierCurvePy::getResolution(PyObject* args)
333
if (!PyArg_ParseTuple(args, "d", &tol))
336
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
337
(getGeometryPtr()->handle());
339
curve->Resolution(tol,utol);
340
return Py_BuildValue("d",utol);
342
catch (Standard_Failure) {
343
Handle_Standard_Failure e = Standard_Failure::Caught();
344
PyErr_SetString(PyExc_Exception, e->GetMessageString());
349
Py::Int BezierCurvePy::getDegree(void) const
351
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
352
(getGeometryPtr()->handle());
353
return Py::Int(curve->Degree());
356
Py::Int BezierCurvePy::getMaxDegree(void) const
358
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
359
(getGeometryPtr()->handle());
360
return Py::Int(curve->MaxDegree());
363
Py::Int BezierCurvePy::getNbPoles(void) const
365
Handle_Geom_BezierCurve curve = Handle_Geom_BezierCurve::DownCast
366
(getGeometryPtr()->handle());
367
return Py::Int(curve->NbPoles());
370
Py::Object BezierCurvePy::getStartPoint(void) const
372
Handle_Geom_BezierCurve c = Handle_Geom_BezierCurve::DownCast
373
(getGeometryPtr()->handle());
374
gp_Pnt pnt = c->StartPoint();
375
return Py::Vector(Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z()));
378
Py::Object BezierCurvePy::getEndPoint(void) const
380
Handle_Geom_BezierCurve c = Handle_Geom_BezierCurve::DownCast
381
(getGeometryPtr()->handle());
382
gp_Pnt pnt = c->EndPoint();
383
return Py::Vector(Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z()));
386
PyObject *BezierCurvePy::getCustomAttributes(const char* /*attr*/) const
391
int BezierCurvePy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/)