THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 20/10/2004 at 03:39, xxxxxxxx wrote:
Cinema 4D Version: 8.500
Language(s) : C++ ;
I am using the Hierarchy Class to walk through the Scene Hierarchy. I am trying to Export an object that has a Texture Tag applied, but when I iterate through the Tags, there is no Texture Tag. UVW and Phong Tags as well as two hidden Tags (Tpoint & Tpolygon) are there, but no Texture Tag.
Yes, the Material is applied to exactly the object I am looking at in the editor (it also shows up on that object when I call "Current State To Object" in the editor). Does the Hierarchy Class perhaps store Hierarchical Tags somewhere else?
On 22/10/2004 at 01:54, xxxxxxxx wrote:
Confirmed. I'm investigating why this is and if there's a workaround. I guess one possibility is to use SendModelingCommand() with CSTO and do the hierarchy traversal yourself.
On 22/10/2004 at 08:42, xxxxxxxx wrote:
Thanks for the prompt reply. The problem is, that I need both, the original hierarchy and the hierarchy with the virtual objects at the same time and (more importantly) know in which relation they are standing (via, GetCacheParent()), so I can pick objects from both hiararchies. As far as I remember this doesn't work with SendModelingCommand, because the connections are gone, but I might be wrong here...
On 16/11/2008 at 22:35, xxxxxxxx wrote:
An old thread, back from the dead...
// helper method, since the main material won't have selections
Bool hasSelection(BaseTag* tag)
if (!tag->GetParameter(DescID(DescLevel(TEXTURETAG_RESTRICTION)), tempGeData, 0))
// the Hierarchy::Do method
virtual Bool Do(void *data, BaseObject *op, const Matrix &mg, Bool controlobject)
ExampleStruct *d = (ExampleStruct* ) data;
LONG mode = op->GetRenderMode();
if (mode != MODE_UNDEF)
d->parent_state = mode;
if (controlobject) return TRUE;
if (op->GetType() != Opolygon) return TRUE;
TextureTag* textag = 0;
BaseMaterial* material = 0;
BaseObject* source = 0;
for (BaseObject* up = op; up && !textag && !material && !source;
(up->GetUp()) ? up = up->GetUp() : up = up->GetCacheParent())
for (BaseTag* bt = up->GetFirstTag(); bt; bt = bt->GetNext())
if (bt->GetType() == Ttexture && !hasSelection(bt))
TextureTag* tmp = static_cast<TextureTag*>(bt);
textag = tmp;
material = tmp->GetMaterial();
source = up;
if (textag && material && source)
GePrint(String("Found material ") + material->GetName() +
String(" on TextureTag ") + textag->GetName() +
String(" on object ") + source->GetName());
GePrint("No material was found for this object.");