How to follow a Ttargetexpression



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

    On 22/03/2011 at 17:19, xxxxxxxx wrote:

    [USERFORM][p]User Information:[/p]Cinema 4D Version:   R12 
    Platform:   Windows  ;   
    Language(s) :     C++  ;   
    [p]---------[/p][/USERFORM] Hi!
     
    I try to follow a link from a TargetExpression, but can't figure out how to do that ...
    I need to know on which linked object the target-camera looks
     
    op is the camera-object of type Ocamera
     
    BaseTag* tag = op- >GetTag(Ttargetexpression);
    **GeData p;
    bool ok = tag->GetParameter(1001, p, DESCFLAGS_GET_0);  // ok == true
    LONG type = p.GetType();                                // type == 133 ALIASLINK
    BaseLink* bl = p.GetBaseLink();                         // bl != null    
    **
    BaseObject* target = (BaseObject * )bl;
    but this cast fails, you can't call target->GetName() : you get an ESP error
    and get wrong result for:
    Vector position = target- >GetAbsPos();
    position is it I'm intrested in.
     
    I also tested: bl->GetLink, bl->ForceGetLink, but no luck as well
     
    Could you post a working code snippet please?
     
    Thanks a lot for assistance.



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

    On 22/03/2011 at 21:19, xxxxxxxx wrote:

    Well, a BaseLink is not a BaseObject derivative.  It is a class which stores a link to a BaseObject or other type derived from BaseList2D.  You need to call target = static_cast<BaseObject*>(bl->GetLink(doc));.  Then it will work if the link is set.



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

    On 23/03/2011 at 06:24, xxxxxxxx wrote:

    Howdy,

    I'd do it something like this:

    BaseDocument *doc = GetActiveDocument(); // needed if doc isn't passed to function
      
    BaseTag *tag = op->GetTag(Ttargetexpression);
    if(tag)
    {
    	BaseContainer *tData = tag->GetDataInstance();
    	if(tData)
    	{
    		BaseObject *target = tData->GetObjectLink(1001,doc);
    		if(target)
    		{
    			String tName = target->GetName();
    			Vector position = target->GetAbsPos();
    			
    			// ...the rest of your code for the target object
    		}
    	}
    }
    

    Adios,
    Cactus Dan



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

    On 23/03/2011 at 14:44, xxxxxxxx wrote:

    Hi all!
     
    Thanks a lot for your suggestions!
     
    I tried your both methods and they won't work for me.
     
    Is there a difference if I execute this from an export-filter plugin.
    My intetion is to develop an special export-filter.
    Compilation is done with C++ and VisulaStudio 2010.
    Traversion of the object tree and write transformed data to output-file is no problem.
    Only getting the information for the linked object is the problem.
     
    I have written some lines of COFFEE to achieve this and it is no problem to get the desired data.
     
    Have I missed some preconditions?
     
    Many thanks in advance.



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

    On 24/03/2011 at 07:48, xxxxxxxx wrote:

    Howdy,

    You'll probably need to post some example code of what you're trying to do, to get better suggestions.

    If you add print statements to the code I posted in "else" statements like this:

    BaseTag *tag = op->GetTag(Ttargetexpression);
    if(tag)
    {
        // ..... rest of code
    }
    else GePrint("tag pointer is NULL");
    

    ... then you can see if the pointers are NULL, which could be one reason the code isn't working for you.

    Adios,
    Cactus Dan



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

    On 24/03/2011 at 15:01, xxxxxxxx wrote:

    Howdy,
     
    ok, I have tracked the problem down to:
    doc- >Polygonize();
    If I omit **doc- >Polygonize(); **than it works like expected! Thanks for your example!
    A search in the forum resulted in:
    **Topic: Instances dropped on Document::Polygonize
    **https://plugincafe.maxon.net/topic/3495/2913_instances-dropped-on-documentpolygonize
     
    So I think it is the same cause of my problems.
    I will try the suggested solution and polygonize on an individual basis.
     
    Thanks a lot for your assistance!
     
    Bye!
    framer


Log in to reply