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