2013-10-14 2 views
18

pythonOCC에서 스플라인을 사용하는 방법에 관한 두 부분으로 된 질문이 있습니다.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. 스플라인 계수는?

그리고 bspline에 매듭을 제거하거나 어떻게 추가합니까?

둘째,이 같은 pythonOCC에서 CAD 드로잉 .stp 파일을로드 할 때 : 나는 매듭, 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

저는 이것을 달성하기 위해 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) 
     ; 
} 

그래서 파이썬에서 사용할 수있는 것으로 코드를 수정해야 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 함수에있는 파이썬 목록을 반환합니다 :

boost::python::list return_val; 
// .... 
return_val.append(sum); 
return_val.append(result); 
return return_val; 
관련 문제