SplineControl GUI
-
On 27/02/2013 at 12:46, xxxxxxxx wrote:
I have following code, defining the custom SplineControl GUI.
It shows everything, but how to define and draw the spline?self.spline_gui.MakeLinearSplineLinear(3) is not working?
import c4d
import os
import time
from c4d import gui, plugins, bitmaps, utilsPLUGIN_ID = 10281842 #test ID!
MY_HELPBUTTON = 11002
MY_SPLINE = 11003class SettingsDialog(gui.SubDialog) :
def CreateLayout(self) :
self.AddButton (MY_HELPBUTTON, c4d.BFH_SCALEFIT, 0, 0, 'Help')
bc = c4d.BaseContainer()
bc[c4d.SPLINECONTROL_GRID_H] = True
bc[c4d.SPLINECONTROL_GRID_V] = True
bc[c4d.SPLINECONTROL_VALUE_EDIT_H] = True
bc[c4d.SPLINECONTROL_VALUE_EDIT_V] = True
bc[c4d.SPLINECONTROL_VALUE_LABELS_H] = True
bc[c4d.SPLINECONTROL_VALUE_LABELS_V] = Trueself.spline_gui = self.AddCustomGui(
MY_SPLINE, c4d.CUSTOMGUI_SPLINE, "Spline",
c4d.BFH_SCALEFIT|c4d.BFV_SCALEFIT, 0, 0, bc)
return True
def InitValues(self) :
return Truedef Command(self, id, msg) :
if (id == MY_HELPBUTTON) :
gui.MessageDialog("Help")
return -1return True
class ASSP(plugins.ToolData) :
def __init__(self) :
self.data = dict() #containerdef AllocSubDialog(self, bc) :
return SettingsDialog(self.data) #always return new instance(self.data)if __name__ == "__main__":
bmp = bitmaps.BaseBitmap()
dir, file = os.path.split(__file__)
fn = os.path.join(dir, "res", "Icon.tif")
bmp.InitWith(fn)
okyn = plugins.RegisterToolPlugin(id=PLUGIN_ID, str="Tab test",info=0, icon=bmp, help="Statusbar Text",dat=ASSP())
if (okyn) :
print "Tab Test Plugin V01 initialized." -
On 27/02/2013 at 17:17, xxxxxxxx wrote:
Try this:
def InitValues(self) : self.sd = c4d.SplineData() self.sd.MakeLinearSplineLinear(3) self.sd.MakeRootSpline(3) self.sd.SetRound(1.0) self.sd.SetRange(xmin=0, xmax=100, xsteps=1, ymin=0, ymax=100, ysteps=1) #Set the spline's range in memory only self.sd.SetKnot(index=0, vPos= c4d.Vector(0,80.0, 0)) #Set the first knot's position in memory only self.sd.SetKnot(index=1, vPos= c4d.Vector(50,50.0, 0)) #Set the second knot's position in memory only self.sd.SetKnot(index=2, vPos= c4d.Vector(100,100.0, 0)) #Set the third knot's position in memory only self.spline_gui.SetSpline(self.sd) #Apply the changes made to the spline from memory data = self.spline_gui.GetSplineData() #Gets the information about the spline if needed c4d.EventAdd return True
-ScottA
-
On 27/02/2013 at 23:54, xxxxxxxx wrote:
That should rather work, yes.
Remember that the Spline GUI itself only provides access to the SplineData inside. The actual manipulation of the spline must be done in the SplineData.
-
On 28/02/2013 at 01:54, xxxxxxxx wrote:
Thanks, I'll try and report back.
-
On 28/02/2013 at 11:20, xxxxxxxx wrote:
Originally posted by xxxxxxxx
Try this:
def InitValues(self) : self.sd = c4d.SplineData() self.sd.MakeLinearSplineLinear(3) self.sd.MakeRootSpline(3) self.sd.SetRound(1.0) self.sd.SetRange(xmin=0, xmax=100, xsteps=1, ymin=0, ymax=100, ysteps=1) #Set the spline's range in memory only self.sd.SetKnot(index=0, vPos= c4d.Vector(0,80.0, 0)) #Set the first knot's position in memory only self.sd.SetKnot(index=1, vPos= c4d.Vector(50,50.0, 0)) #Set the second knot's position in memory only self.sd.SetKnot(index=2, vPos= c4d.Vector(100,100.0, 0)) #Set the third knot's position in memory only self.spline_gui.SetSpline(self.sd) #Apply the changes made to the spline from memory data = self.spline_gui.GetSplineData() #Gets the information about the spline if needed c4d.EventAdd return True
-ScottA
After adding ScottA codes and some additional init lines, it works. Thanks!
Additional init lines:
bc[c4d.SPLINECONTROL_X_MIN] = 0
bc[c4d.SPLINECONTROL_X_MAX] = 100
bc[c4d.SPLINECONTROL_X_STEPS] = 10
bc[c4d.SPLINECONTROL_Y_MIN] = 0
bc[c4d.SPLINECONTROL_Y_MAX] = 100
bc[c4d.SPLINECONTROL_Y_STEPS] = 10
bc[c4d.SPLINECONTROL_PRESET_BTN] = True
bc[c4d.SPLINECONTROL_ROUND_SLIDER] = TrueI'll make a tutorial about what I learned.
-
On 28/02/2013 at 12:41, xxxxxxxx wrote:
FYI.
There's a difference between SetKnot() and InsertKnot() worth mentioning.
SetKnot() will insert knots that are sort of constrained by default. And InsertKnot() will insert knots that let the user freely drag them around in X&Y by default.You might want to play around with that too for a while to get the feel for it.
-ScottA
-
On 28/02/2013 at 12:59, xxxxxxxx wrote:
Yes, I noticed some of it already.
In the example you give, you cannot change the horizontal position of the knots.
However when you add: lFlagsSettings=0, you can change them.
But I guess InsertKnot is better.self.sd.SetKnot(index=0, vPos= c4d.Vector(0,80.0, 0), lFlagsSettings=0)
Adding it to one point makes all points possible to change horizontal.
Another question:
I now get the grid, the spline, etc., but I cannot / see not edit X or Y .
Although I added
bc[c4d.SPLINECONTROL_VALUE_EDIT_H] = True
bc[c4d.SPLINECONTROL_VALUE_EDIT_V] = TrueIn your Tag example (with a res file) there is a little triangle which you can click in order to added values.
-
On 28/02/2013 at 13:13, xxxxxxxx wrote:
I have the same question.
This is the first time I've tried using a splineGUI in a tool plugin. And I'm also wondering why the attributes don't show up in the AM?I've written a GeDialog plugin with a splineGUI in C++. Which is a little bit similar to this.
But I used the .res file to layout the splineGUI instead of the AddCustomGui() gizmo method. And there is an attribute called OPEN that makes the splineGUI's attributes show up.I couldn't find any option like that for the AddCustomGui() gizmo method you're using.
-ScottA
-
On 28/02/2013 at 14:18, xxxxxxxx wrote:
So it seems that
bc[c4d.SPLINECONTROL_VALUE_EDIT_H] = True
bc[c4d.SPLINECONTROL_VALUE_EDIT_V] = Trueare not working?
Back to the res file.