ciao.
Ho un grafo in cui posso agganciare elementi node e drawablenode.
node deriva da spatial, e drawablenode da node.
e' uno scenegraph che mi serve per renderizzare una scena , appunto composta da questi elementi.
Esaminiamo il caso in cui tutti gli elementi sono Drawablenode.
Dentro una classe in cui faccio il rendering attraverso il grafo.
parte che non funziona:
getparent è una funzione di spatial , da cui deriva node e da node drawablenode.codice:if (iTop == -1) { if(((Geometry*)akVisible[i].Object)->GetParent()) ((DrawableNode*)akVisible[i].Object->GetParent())->DrawNode(this,((Geometry*)akVisible[i].Object)); }
mentre in drawablenode, drawnode è virtuale:codice:inline Spatial* Spatial::GetParent () { return m_pkParent; }
infine da drawablenode deriva decorator che implementa questa funzione:codice:virtual void DrawNode(Renderer* pRenderer, Geometry* pGeometry);
il problema è che quando ho una classe decorator non riesco ad innescare il polimorfismo sulla classe decorator,e lanciare la funzione DrawNode di decorator.codice:void DrawNode(Renderer* pRenderer, Geometry* pGeometry);
ho 2 dubbi:
1)è giusto il cast a drawablenode* o trasforma tutto quello che ho in un drawablenode?compresi i decorator
((DrawableNode*)akVisible[i].Object->GetParent())->DrawNode(this,((Geometry*)akVisible[i].Object));
2)la fuzione che ritorna, o dovrebbe ritornare decorator non lo fa :
inline Spatial* Spatial::GetParent ()
{
return m_pkParent;
}
guardando nel debug la classe è sempre drawablenode.
perchè?
grazie

Rispondi quotando