Dialog spline
-
On 27/06/2013 at 10:39, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R14
Platform: Windows ;
Language(s) : C++ ;---------
Hi Folks,I've got myself a dialog spline gui, but I'm a bit lost as to where to put/add the data for it. Is this done in the GetDDescription()? And can the data be added or dynamically changed from elsewhere (another function)?
EDIT: this is what I tried inside the GetDDesctipion() :
SplineData* sData; sData->Alloc(); sData->InsertKnot(0,0,0); sData->InsertKnot(1,1,0); MySpline->SetSpline(sData); // MySpline is the customgui element MySpline->Redraw(); sData = NULL; GeFree(sData);
WP.
-
On 27/06/2013 at 12:07, xxxxxxxx wrote:
You initialise the spline in your plugin's Init routine. Here's the complete initialisation function from one of the X-Particles' modifiers:
// this is called from ObjectData::Init() void XModSpeed::InitSpline(BaseContainer *data) { SplineData *spd = NULL; CustomSplineKnot *knot; GeData d(CUSTOMDATATYPE_SPLINE, DEFAULTVALUE); spd = (SplineData* )d.GetCustomDataType(CUSTOMDATATYPE_SPLINE); if(spd) { spd->SetRange(0.0, 1.0, 0.01, 0.0, 300.0, 1.0); spd->MakeLinearSplineBezier(2); // 2 knots knot = spd->GetKnot(0); knot->vPos = Vector(0.0, 150.0, 0.0); knot->lFlagsSettings |= FLAG_KNOT_LOCK_X|ADD_KNOT_ADAPT_TANGENTS; knot->vTangentRight = Vector(0.1, 0.0, 0.0); knot = spd->GetKnot(1); knot->vPos = Vector(1.0, 150.0, 0.0); knot->lFlagsSettings |= FLAG_KNOT_LOCK_X|ADD_KNOT_ADAPT_TANGENTS; knot->vTangentLeft = Vector(-0.1, 0.0, 0.0); data->SetData(XMSP_SPEED_SPLINE, d); // replace the ID with your resource element } }
The flag settings for the knots you can find in the SDK.
-
On 27/06/2013 at 13:41, xxxxxxxx wrote:
This brings up something that trips me up a lot with GeDialogs.
When you want to change a gizmo using a BaseContainer for a node based plugin. You simply grab the node. Then assign the BaseContainer to it like this:BaseTag *tag = (BaseTag* )node; BaseContainer *data = tag->GetDataInstance();
Then when you want to change the gizmo (Like adding spline knots to it). You simply change the BaseContainer then updated those changes using SetData().
But when you're using a GeDialog to host the gizmo. There's no node to use. So you can't use the BaseContainer the same way as you use it on a node based plugin like tags and objects.
So even though I can add the SplineGUI gizmo itself to my GeDialog. I can't do anything to it like add any points to it. Because I don't know the dialog equivalent version of this code: BaseContainer *data = tag->GetDataInstance();This trips me up all the time when using GeDialogs.
-ScottA
#Edit- Never mind. I've figured out how to get it working.