2013-03-02 5 views
0

blender (무료 3D 프로그램) 용 플러그인을 수행하려고합니다. 플러그인이 Python 플러그인이므로, C++에 데이터를 전달하여 과도한 계산을 수행합니다블렌더의 특정 메모리 위치에서 데이터 읽기 (구조)

파이썬 방법이 같다 :

data.as_pointer() 
#.. method:: as_pointer() 
#Returns the memory address which holds a pointer to blenders internal data 
#:return: int (memory address). 
#:rtype: int 
#.. note:: This is intended only for advanced script writers who need to 
#pass blender data to their own C/Python modules. 

제가

리스트
>>>>data[0].as_pointer() 
152884792 
>>>>data[1].as_pointer() 
152884992 
>>>>data[2].as_pointer() 
152885192 

등 때문에 부품시에 판독 데이터 ZE는 C++ 내부에서이 데이터를 읽을

답변

1

당신은 형식을 알고 있어야하는 방법을 알 수없는 구조

와, 200 바이트입니다. 일단 당신이 struct을 만들고 struct 유형으로이 포인터를 입력하고 그것을 읽을 수 있습니다.

편집 : 블렌더에는이 API가 있습니다.

0

내가 지금까지했던 그것이 잘 작동하는 방법을 몇 가지

는 C++ 코드하는 파이썬과 비교 데이터를 + 내부 데이터

되는 데이터를 결정하기 위해 무엇을 : 여기

unsigned int p = imported_data; /*mypointer address*/ 

float* value_float; 
unsigned int* value_int; 
double* value_double; 
char* value_char; 
bool* value_bool; 

for (int looper = 0;looper <200;looper +=4) 
{ 
    value_float = reinterpret_cast<float *>(p + looper); 
    if(*value_float != 0.0f){ 
     printf("%i value_float = %f\n", looper, *value_float); 
     continue; 
    } 
    value_int = reinterpret_cast<unsigned int *>(p + looper); 
    if(*value_int != 0){ 
     printf("%i value_int = %u\n", looper, *value_int); 
     continue; 
    } 
    value_double = reinterpret_cast<double *>(p + looper); 
    if(*value_double != 0.0){ 
     printf("%i value_double = %f\n", looper, *value_double); 
     continue; 
    } 
    value_char = reinterpret_cast<char *>(p + looper); 
    if(*value_char != NULL){ 
     printf("%i value_char = %c\n", looper, *value_char); 
     continue; 
    } 
    value_bool = reinterpret_cast<bool *>(p + looper); 
    if(*value_bool != 0){ 
     printf("%i value_char = %i\n", looper, *value_bool); 
     continue; 
    } 
} 

및 결과입니다 :

0 value_float = 2.784583 
4 value_float = 2.088116 
8 value_float = -3.057968 
16 value_double = -15656.531250 
20 value_float = -6.455599 
24 value_float = 1.000000 
48 value_double = 134217728.000000 
52 value_float = 20.000000 
56 value_float = 2.784583 
60 value_float = 2.088116 
64 value_float = -2.807592 
72 value_double = -9227.453125 
76 value_float = -6.063199 
80 value_float = 1.000000 
104 value_double = 100663296.000000 
108 value_float = 19.000000 
136 value_double = 0.007813 
140 value_float = 1.000000 
144 value_float = 50.000000 
148 value_float = 51.000000 
152 value_float = 0.000000 
156 value_float = -1.#QNAN0 
160 value_float = 0.713105 
164 value_float = 0.023383 
168 value_float = 0.014281 
172 value_float = 0.249231 
176 value_double = 0.000000 
180 value_float = 0.050000 
192 value_double = 0.000000 
196 value_float = 0.000000 
관련 문제