User config callback functions
A customization script that includes a user config callback function (which is one of many system callback functions), will display a configuration dialog icon, in the scene hierarchy:
[Configuration dialog icon]
When double-cliked, the user config callback function is triggered. This can be used as a convenient way of displaying a custom user interface to the user, that is specific to the object/model the customization script is attached to. User data can be read and written to objects with sim.readCustomDataBlock/sim.writeCustomDataBlock for instance:
[Custom configuration dialog]
function sysCall_init()
modelHandle=sim.getObject('.')
end
function sysCall_userConfig()
local xml =[[<ui title="Robot" closeable="true" modal="true" layout="form" on-close="customUiClosed">
<label text="Max. velocity:" />
<edit id="1" value="-" on-editing-finished="velocityChanged"/>
<label text="Max. acceleration:" />
<edit id="2" value="-" on-editing-finished="accelerationChanged"/>
</ui>]]
local ui=simUI.create(xml)
local data=readData()
simUI.setEditValue(ui,1,tostring(data.maxVel))
simUI.setEditValue(ui,2,tostring(data.maxAccel))
end
function customUiClosed(ui)
simUI.destroy(ui)
end
function velocityChanged(ui,id,val)
local data=readData()
val=tonumber(val)
if val then
if val<0.1 then
val=0.1
end
if val>0.5 then
val=0.5
end
data.maxVel=val
end
simUI.setEditValue(ui,id,tostring(data.maxVel))
writeData(data)
end
function accelerationChanged(ui,id,val)
local data=readData()
val=tonumber(val)
if val then
if val<0.01 then
val=0.01
end
if val>0.2 then
val=0.2
end
data.maxAccel=val
end
simUI.setEditValue(ui,id,tostring(data.maxAccel))
writeData(data)
end
function readData()
local data=sim.readCustomDataBlock(modelHandle,'RobotParams')
if data then
data=sim.unpackTable(data)
else
data={}
data.maxVel=0.2
data.maxAccel=0.05
end
return data
end
function writeData(data)
sim.writeCustomDataBlock(modelHandle,'RobotParams',sim.packTable(data))
end
You may also use the configUI module for quicker set-up of custom configuration dialog, that will also automatically write data to custom data blocks:
[Custom configuration dialog based on configUI module]
require 'configUi'
function sysCall_init()
local schema={
floatInput={
default=0.1,
maximum=4,
minimum=0.05,
name="float input",
type="float",
ui={
control="spinbox",
tab="Tab 1",order=1,col=1
},
},
intInput={
default=1,
maximum=10,
minimum=0,
name="int input",
type="int",
ui={
control="spinbox",
tab="Tab 1",order=2,col=2
},
},
checkbox1={
type='bool',
name='checkbox1',
default=true,
ui={tab="Tab 1",order=3,col=1},
},
checkbox2={
type='bool',
name='checkbox2',
default=false,
ui={tab="Tab 1",order=4,col=2},
},
colorselect={
type='color',
name='color select',
default={1,0,1},
ui={tab="Tab 2",order=5,col=1,},
},
stringInput={
default="Hello",
name="string input",
type="string",
ui={
tab="Tab 2",order=6,col=2
},
},
floatSlider={
default=0.5,
maximum=1,
minimum=0,
name="float slider",
type="float",
ui={
control="slider",
tab="Tab 2",order=7,col=1
},
},
intSlider={
default=1,
maximum=10,
minimum=0,
name="int slider",
type="int",
ui={
control="slider",
tab="Tab 2",order=8,col=2
},
},
choices1={
default=2,
choices={"option 1","option 2","option 3"},
name="combo choices",
type="choices",
ui={
control="combo",
tab="Tab 3",order=9,col=1
},
},
choices2={
default=1,
choices={"option 1","option 2","option 3"},
name="radio choices",
type="choices",
ui={
control="radio",
tab="Tab 3",order=10,col=1
},
},
}
sim.writeCustomDataBlock(sim.getObject('.'),'__schema__',sim.packTable(schema))
configUi=ConfigUI('myModelType',nil,modificationCallback)
end
function modificationCallback(config)
local objectHandle=sim.getObject('.')
local txt="Object '"..sim.getObjectAlias(objectHandle,5).."' just changed.\nNew parameters are:"
print(txt)
print(config)
end
|