setting ALIGNTOSPLINETAG_LINK ?

On 11/04/2016 at 12:39, xxxxxxxx wrote:

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

---------
Hi there, after some absence from coding i am struggling setting the ALIGNTOSPLINETAG_LINK of tag.

this is the code (where step is just some other BaseObject created in a loop) :

BaseObject* splineLink = static_cast<BaseObject*>((BaseObject* )bc->GetObjectLink(USERSPLINE, doc)->GetClone(COPYFLAGS_0, NULL));
splineLink->InsertUnder(main);
  
BaseTag* alignToSpline = step->MakeTag(Taligntospline);
alignToSpline -> SetParameter(DescID(ALIGNTOSPLINETAG_LINK),GeData(splineLink),DESCFLAGS_SET_0);
alignToSpline -> SetParameter(DescID(ALIGNTOSPLINETAG_TANGENTIAL),GeData(useTangent),DESCFLAGS_SET_0);
alignToSpline -> SetParameter(DescID(ALIGNTOSPLINETAG_POSITION),GeData((1.0/(max-1))*current),DESCFLAGS_SET_0);

this results in that the tangent rotation is working, but the positioning only works after converting the object to an editable one.

any ideas what i may be missing?

thanks,
Ello

On 12/04/2016 at 02:40, xxxxxxxx wrote:

Hi Ello,
welcome back!

I quickly tried tested your code in a simple Python script and it worked out of the box.
So I guess, your issue must have something to do with wither surrounding code or the place you are using this code in. Can you give us some more details?

A quick note on the first two lines (even if I assume, that you probably shortened the code for posting it here) :
You are directly dereferencing the link you pull out of the BaseContainer. This is quite dangerous, the result may be a nullptr.
Then you clone the referenced object and again dereference it directly in order to insert it into the document. As cloning involves memory allocations, this can fail as well and a nullptr check is needed, too.
Of course this has nothing to do with your actual problem, just wanted to mention it.

On 12/04/2016 at 05:06, xxxxxxxx wrote:

hm, i guess posting the whole code would be a bit too much lines.
i have however tried disabeling fragments whereever the spline was referenced or added to the dependency list, etc. maybe i need to create a fresh object to sort things out step by step. i was trying to change/add something to an existing older plugin.

btw, you are right about the referenced object. it is checked previously.