Can't find Texture Tags using Hierarchy

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:

User Information:
Cinema 4D Version:   8.500 
Platform:      
Language(s) :     C++  ;

---------
Hi!

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?

Timm

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

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.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/10/2004 at 08:42, xxxxxxxx wrote:

Hi Mikael!

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...

Timm

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

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)   
            return FALSE;
    
    
    
    
        GeData tempGeData;
    
    
    
    
        if (!tag->GetParameter(DescID(DescLevel(TEXTURETAG_RESTRICTION)), tempGeData, 0))  
            return FALSE;
    
    
    
    
        return tempGeData.GetString().Content();  
    }
    
    
    
    
    // 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);
    
    
    
    
                    if (tmp->GetMaterial())  
                    {  
                        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());  
        else  
            GePrint("No material was found for this object.");
    
    
    
    
        return TRUE;  
    }