Regrese de una función de espacio de nombres llamada desde una clase qt a la clase

Tengo un CadThread clase que se supone que debe hacer mi geometría. Esta clase tiene un espacio público void MakeMesh(cadData aCadData) que llama a una de las funciones de espacio de nombres según el tipo de modelo (de aCadData) (definido en MakeMeshStructure.hh):

namespace MeshStructure1 {
void MakeMeshStructure  (//parameters... );
}
namespace MeshStructure2 {
void MakeMeshStructure  (//parameters... );
}
namespace MeshStructure3 {
void MakeMeshStructure  (//parameters...

Estas funciones están generando formas dentro, por ejemplo, MakeMeshStructure3.cc. Me gustaría devolver estas formas a la clase CadThread que las llamó en una ranura como:

void Add_Shape(TopoDS_Shape& shape, Quantity_NameOfColor colorName);

entonces puedo emitir la forma desde esta ranura (o tal vez solo la función miembro) de regreso al hilo principal cuando MakeMeshStructure3 produce una forma (una ejecución de MakeMeshStructure3 produce varias formas).

¿Alguien puede darme un ejemplo de cómo se hace esto bien?

preguntado el 01 de julio de 12 a las 15:07

2 Respuestas

No entiendo completamente su código (un ejemplo menos abstracto podría haber sido útil), pero me parece un buen lugar para usar polimorfismo en lugar de espacios de nombres. crear una base MeshStructure clase, y hacer que todas las demás estructuras la subclasifiquen. Haga las formas polimórficas también, de modo que cada estructura de malla produzca una forma diferente, pero todas podrían ser tratadas por un Shape puntero o referencia.

Respondido 01 Jul 12, 15:07

Si el código en MakeMeshStructure#.cc está usando Qt, entonces no veo cuál es su problema: simplemente emita una señal allí, incluso desde un QObject temporal, y termine con eso.

Si el código del fabricante de mallas es no usando Qt, o si desea mantener las dependencias de Qt al mínimo, simplemente haga que el código genere la malla en el montón y pásela a una función invocada por un puntero de función. Esa función puede ser externa al creador de mallas y emitirá una señal en una instancia de QObject que conozca, o publicará un evento en el subproceso de CAD.

Respondido 01 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.