PyObject* GeometrySurfacePy::value(PyObject *args) { Handle_Geom_Geometry g = getGeometryPtr()->handle(); Handle_Geom_Surface s = Handle_Geom_Surface::DownCast(g); try { if (!s.IsNull()) { double u,v; if (!PyArg_ParseTuple(args, "dd", &u,&v)) return 0; gp_Pnt p = s->Value(u,v); return new Base::VectorPy(Base::Vector3d(p.X(),p.Y(),p.Z())); } } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PartExceptionOCCError, e->GetMessageString()); return 0; } PyErr_SetString(PartExceptionOCCError, "Geometry is not a surface"); return 0; }
// constructor method int PlateSurfacePy::PyInit(PyObject* args, PyObject* kwds) { static char* kwds_Parameter[] = {"Surface","Points","Curves","Degree", "NbPtsOnCur","NbIter","Tol2d","Tol3d","TolAng","TolCurv","Anisotropie",NULL}; PyObject* surface = 0; PyObject* points = 0; PyObject* curves = 0; int Degree = 3; int NbPtsOnCur = 10; int NbIter = 3; double Tol2d = 0.00001; double Tol3d = 0.0001; double TolAng = 0.01; double TolCurv = 0.1; PyObject* Anisotropie = Py_False; if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O!OOiiiddddO!", kwds_Parameter, &(GeometryPy::Type), &surface, &points, &curves, &Degree, &NbPtsOnCur, &NbIter, &Tol2d, &Tol3d, &TolAng, &TolCurv, &PyBool_Type,&Anisotropie)) return -1; if (!surface && !points && !curves) { PyErr_SetString(PyExc_ValueError, "set points or curves as constraints"); return -1; } Handle_Geom_Surface surf; if (surface) { GeometryPy* pcGeo = static_cast<GeometryPy*>(surface); surf = Handle_Geom_Surface::DownCast (pcGeo->getGeometryPtr()->handle()); if (surf.IsNull()) { PyErr_SetString(PyExc_TypeError, "geometry is not a surface"); return -1; } } try { GeomPlate_BuildPlateSurface buildPlate(Degree, NbPtsOnCur, NbIter, Tol2d, Tol3d, TolAng, TolCurv, PyObject_IsTrue(Anisotropie) ? Standard_True : Standard_False); if (!surf.IsNull()) { buildPlate.LoadInitSurface(surf); if (!points && !curves) { Standard_Real U1,U2,V1,V2; surf->Bounds(U1,U2,V1,V2); buildPlate.Add(new GeomPlate_PointConstraint(surf->Value(U1,V1),0)); buildPlate.Add(new GeomPlate_PointConstraint(surf->Value(U1,V2),0)); buildPlate.Add(new GeomPlate_PointConstraint(surf->Value(U2,V1),0)); buildPlate.Add(new GeomPlate_PointConstraint(surf->Value(U2,V2),0)); } } if (points) { Py::Sequence list(points); for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { Base::Vector3d vec = Py::Vector(*it).toVector(); Handle(GeomPlate_PointConstraint) PCont = new GeomPlate_PointConstraint(gp_Pnt(vec.x,vec.y,vec.z),0); buildPlate.Add(PCont); } } if (curves) { Py::Sequence list(curves); for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { //TODO } } buildPlate.Perform(); getGeomPlateSurfacePtr()->setHandle(buildPlate.Surface()); return 0; } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PartExceptionOCCError, e->GetMessageString()); return -1; } }