Код Fortran, вызывающий openCASCADE, не работает, черт возьми?

Прошу прощения за смутное название. Этот вопрос является продолжением предыдущего вопроса
Вот: Использование объекта класса C ++ в Фортран 77 что мне нужно сделать, это повторно использовать объекты, созданные из C ++ в Fortran.

Код, с которым я имею дело, является очень простым кодом на Фортране:

C23456
program main
C Pointers to C++ classes. Never use them!
C Just pass them to the C++ functions.
integer*4 shapeToMesh
integer*4 faceMap
integer*4 edgeMap
integer*4 vertexMap
C We have to append //CHAR(0) to the string since it must be
C Null terminated
call readstep('cube.stp'//CHAR(0),isuccess,shapeToMesh)
call createfacemap(shapeToMesh,faceMap)
end

Где shapeToMesh является объектом класса, который содержит геометрию, которая анализируется из
входной файл шага. faceMap edgeMap vertexMap являются объектами, которые присваивают уникальное целое число каждому ребру грани и вершине соответственно

Теперь readstep или же readstep_ (обратите внимание, что это C ++) функция работает хорошо, и вот код:

//SuccessInt contains information about successful loading
//of file. 1 for success, 0 for failure
void readstep_(char* inputFile,int* successInt, TopoDS_Shape** shape){

//Print out the filename received from fortan for debug reasons
int len = strlen(inputFile);
std::cout << "Input file ";
for(int i=0; i<len; i++)
std::cout << inputFile[i];
std::cout << std::endl<< std::endl;

//This has a private contructor. So I must first declare
//and then call the constructor.
STEPControl_Reader reader;
reader = STEPControl_Reader();

int succeed = reader.ReadFile(inputFile);

if(!succeed){
std::cout << "There was an error with the input file" << std::endl;
(*successInt) = succeed;
return;
}
reader.NbRootsForTransfer();
reader.TransferRoots();

//Assign memory, then opject
*shape = new TopoDS_Shape();
**shape = reader.OneShape();

(*successInt) = succeed;
return;
}

Как вы, возможно, уже видели из моего фрагмента Фортрана, следующее, что я хочу сделать, — создать список моих лиц, присутствующих в форме. Для этого я называю createfacemap или же createfacemap_ функция, код которой показан ниже:

void createfacemap_(TopoDS_Shape** shape, TopTools_IndexedMapOfShape** map){

TopoDS_Shape ashape = TopoDS_Shape();
ashape = (**shape);

if(ashape.IsNull())
std::cout << "Shape is null";

*map  = new TopTools_IndexedMapOfShape();
TopExp::MapShapes(ashape,TopAbs_FACE,(**map));
std::cout << "Faces: " << (**map).Extent() << std::endl;
return;
}

Но вместо 6 лиц я получаю результат 0 лиц. Чтобы исследовать дальше, я отладил
программа с использованием точки. И результаты можно увидеть на скриншотах
Скриншот отладки 1
Скриншот отладки 2
Скриншот отладки 3

Можно видеть, что переменная карты инициализирована, и некоторая обработка продолжается, так как
NbBuckets изменяются, однако размер не изменяется вообще, что означает, что нет сохраненных объектов. Я использую библиотеку openCASCADE. Вот соответствующие ссылки:

http://dev.opencascade.org/doc/refman/html/class_topo_d_s___shape.html
http://dev.opencascade.org/doc/refman/html/class_top_exp.html
http://dev.opencascade.org/doc/refman/html/class_top_tools___indexed_map_of_shape.html

Любая помощь могла бы быть полезна!

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]