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:
codice:
if (iTop == -1)
{
if(((Geometry*)akVisible[i].Object)->GetParent())
((DrawableNode*)akVisible[i].Object->GetParent())->DrawNode(this,((Geometry*)akVisible[i].Object));
}
getparent è una funzione di spatial , da cui deriva node e da node drawablenode.
codice:
inline Spatial* Spatial::GetParent ()
{
return m_pkParent;
}
mentre in drawablenode, drawnode è virtuale:
codice:
virtual void DrawNode(Renderer* pRenderer, Geometry* pGeometry);
infine da drawablenode deriva decorator che implementa questa funzione:
codice:
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.
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