2013-10-14 14 views
18

私は、pythonOCCでスプラインを使う方法について2つの質問をしています。pythonOCCでスプラインを使用するにはどうすればよいですか?

まず、私は

array = [] 
array.append(gp_Pnt2d (0,0)) 
array.append(gp_Pnt2d (1,2)) 
array.append(gp_Pnt2d (2,3)) 
array.append(gp_Pnt2d (4,3)) 
array.append(gp_Pnt2d (5,5)) 

pt2d_list = point2d_list_to_TColgp_Array1OfPnt2d(array) 
SPL1  = Geom2dAPI_PointsToBSpline(pt2d_list).Curve() 
display.DisplayShape(make_edge2d(SPL1) , update=True) 

にスプラインを作成することができることを知っていると私はBスプラインが

BSPL1  = Geom2dAPI_PointsToBSpline(pt2d_list) 

で算出することができることを期待しかし、どのように私が入手できます:

  1. bsplineの派生物?
  2. bsplineのノット?
  3. 結び目はpt2d_listですか?
  4. bsplineの制御ポイントは?
  5. スプラインの係数は?

そして、どのように私は、削除またはBスプラインにノットを追加するには?第二に

、このようなpythonOCCで.stpファイルCAD図面のロード:私は結び目、Bスプライン、および係数のような形状からデータを取得するにはどうすればよい

from OCC import TopoDS, StlAPI 
shape = TopoDS.TopoDS_Shape() 
stl_reader = StlAPI.StlAPI_Reader() 
stl_reader.Read(shape,str(filename)) 
display.DisplayShape(shape) 

を。

+0

答えはどこか他にありますか?あなたは私たちとそれらを共有してくださいすることができます:Dを? – Jiloc

+0

絶望的に古い................. –

答えて

0

私はscipy documentationを見てみると、適用しようとしている機能のためにそこに検索します。

+0

これはコメントしていない答えなければなりません。 – Daniel

0

私はこれを達成するためにpython-boostを使用しました。この機能をチェックしてください :http://letslearncomputing.blogspot.com/2013/04/c-program-for-cubic-spline-interpolation.html あなたはここにご希望の5つの値の一部を取得することができます。

from Spline.Spline import * 
operation = Spline() 
value, error_ = operation.spline(np.array(your_x_array), np.array(your_y_array), 0.01) 

CPPクラス:

#define NUMBER_OF_SAMPLES 14 
class Spline 
{ 
public: 
    boost::python::list spline(numeric::array& x_val, numeric::array& y_val, double look_up_val); 
}; 

を次に

あなただけC++(ないC

BOOST_PYTHON_MODULE(Spline) 
{ 
    import_array(); 
    boost::python::numeric::array::set_module_and_type("numpy", "ndarray"); 
    class_<Spline, Spline*>("Spline", init<>()) 
     .def("spline", &Spline::spline) 
     ; 
} 

だからPythonで使用できるようにコードを変更する必要があります boost::python::list Spline::spline(numeric::array& x_val, numeric::array& y_val, double p)の機能であなたは得る:

PyArrayObject* x_pyArr = (PyArrayObject*)PyArray_FROM_O(x_val.ptr()); 

PyArrayObject* y_pyArr = (PyArrayObject*)PyArray_FROM_O(y_val.ptr()); 
int size = *(x_pyArr->dimensions), i , j;  
double* data_x = (double*)x_pyArr->data; 
double* data_y = (double*)y_pyArr->data; 
double h[NUMBER_OF_SAMPLES], a, b, c, d, s[NUMBER_OF_SAMPLES] = { 0 }, F[NUMBER_OF_SAMPLES], f[NUMBER_OF_SAMPLES], x[NUMBER_OF_SAMPLES], m[NUMBER_OF_SAMPLES][NUMBER_OF_SAMPLES] = { 0 }, temp; 

for (int i = 0; i < size; i++) 
{ 
    x[i] = *(data_x + i); 
    f[i] = *(data_y + i); 
} 

などのコードに従ってリンクされています。私はSpline::spline関数のpythonリストを返す:

boost::python::list return_val; 
// .... 
return_val.append(sum); 
return_val.append(result); 
return return_val; 
関連する問題