Template plugIT¶
Start a new plugIT (template)¶
1 - choose his category (for example "misc")
create a new "template" directory in the category path : "Partition_LockedApp\tools\os3dplugins\misc"
2 - create the plugIT definition file (xml)
the xml file MUST have the same name as the plugIT directory here "template.xml"
the PLUGIN tag :
- name : the plugIT name displayed in the OS3D plugIT menu
- version : the plugIT version
- type : the category name
the DESCRIPTION tag :
the plugIT description shown in the plugIT editor
the HELP tag :
the text shown as a tooltip on the help button in the plugIT editor, or an internet url pointing to the plugIT documentation
the RESOURCE tag :
it contain FILE tags with a "path" param, for additional files needed by the plugIT
the EDITOR tag :
it contain the scol scripts to load to execute the plugIT editor and the editor params and types to save
the SCRIPT tag :
the "path" param contain the editor file, it can be relative to the plugIT directory with "./"
the PARAM tag :
the "name" param contain the name of the editor variable to save
the "type" param contain the type of the param, it can be :
- "value"
- "file"
- "mesh"
- "material"
- "node"
- "light"
- "anim"
- ...
the CLIENT tag :
it contain the client side scol scripts and the default actions/events
the SCRIPT tag :
the "path" param contain the editor file, it can be relative to the plugIT directory with "./"
the EVENT tag :
it define an event name in the "name" param
the ACTION tag :
it define an action name in the "name" param
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <PLUGIN name="template" version="1.0" type="misc"> <DESCRIPTION>Template plugIT</DESCRIPTION> <HELP>Template plugIT help</HELP> <RESOURCE> <FILE path="./myres.jpg" /> </RESOURCE> <EDITOR> <SCRIPT path="./etemplate.pkg" /> <PARAM name="oninit" type="value" /> </EDITOR> <CLIENT minstance="true"> <SCRIPT path="./ctemplate.pkg" /> <ACTION name="Go" /> <EVENT name="Done" /> </CLIENT> </PLUGIN>
3 - create the editor file
here "etemplate.pkg" as defined in the template.xml file in the EDITOR SCRIPT tag
// prototype of the cbCloseEdit function in case you don't use params //proto cbCloseEdit = fun [] [[S S] r1];; /*! \brief Callback on plugIT instance editor closed * * called on Apply / Ok button, this callback return the parameters to save in the XOS project * * <b>Prototype:</b> fun [] [[S S] r1] * * \return [[S S] r1] : parameters to save in the instance XML data **/ fun cbCloseEdit(ctrlinit)= // get the check state and add it to the param list let itoa getEdCtrlCheckState ctrlinit -> state in ["oninit" state]:: nil;; /*! \brief Callback on plugIT instance editor destroyed * * called when the editor window is destroyed, this is useful to destroy added objects or resources * * <b>Prototype:</b> fun [] I * * \return I : 0 **/ fun cbDestroyEdit()= 0;; /*! \brief Callback on plugIT instance editor opened * * called when a user the plugIT Editor * * <b>Prototype:</b> fun [EdWindow PInstance V3Dview] [fun [] [[S S] r1] fun [] I] * * \param EdWindow : editor window structure * \param PInstance : plugIT instance * \param V3Dview : default 3D view structure * * \return [fun [] [[S S] r1] fun [] I] : Callbacks to call on close and destroy **/ fun dynamicedit(winstr, inst, viewstr) = // size of the window let [400 90] -> [iw ih] in ( // resize the editor window setEdWindowSize winstr iw ih; // retrieve the current param value let atoi (getPluginInstanceParam inst "oninit") -> state in // create the check box control on the editor window let crEdCtrlCheck winstr 10 10 280 20 "Run on init" EDWIN_RESIZE_MW -> ctrlinit in ( // set the current check state setEdCtrlCheckState ctrlinit state; [(mkfun1 @cbCloseEdit ctrlinit) @cbDestroyEdit]; ); );;
4 - create the client file
here "ctemplate.pkg" as defined in the template.xml file in the CLIENT SCRIPT tag
/*! \brief Callback on instance destruction * Callback called when a plugIT instance is destroyed * * <b>Prototype:</b> fun [PInstance u0] I * * \param PInstance : destroyed plugIT instance * \param u0 : user parameter, the type is not defined here because it is not used in this template * * \return I : 0 **/ fun deleteOb(inst, uparam)= 0;; // plugIT doing something fun doSomething(value)= // test the value to define a default one let if value == nil then "none" else value -> value in ( // create a dialog box with the value as text _DLGMessageBox _channel DMSwin "Template Plugit !!" value 0; // send the Done event _DMSevent this (getPluginInstanceEvent inst "Done") nil nil; ); 0;; /*! \brief Callback on "Go" dms action * * Call the program function to display a dialog box * * <b>Prototype:</b> fun [PInstance DMI S S I u0] I * * \param PInstance : plugIT instance * \param DMI : DMS module who call the action (not used) * \param S : name of the launched action * \param S : data posted in DMS action link * \param I : reply flag (not used) * \param u0 : user parameter, the type is not defined here because it is not used in this template * * \return I : 0 **/ fun cbGo(inst, from, action, param, rep, uparam)= // call the dialog box and set the link parameter as text doSomething param; 0;; /*! \brief Callback on new plugIT instance * * Read the parameters from editor values and initialise the plugIT * * <b>Prototype:</b> fun [PInstance] I * * \param PInstance : plugIT instance * * \return I : 0 **/ fun newOb(inst)= // retrieve the oninit param value let atoi (getPluginInstanceParam inst "oninit") -> state in ( // define the function to call when we receive the Go action PluginRegisterAction inst "Go" mkfun6 @cbGo nil; // test the oninit param to know if we have to start the plugIT functionalities here if !state then nil else doSomething nil; // define the function to call when the plugIT instance is destroyed setPluginInstanceCbDel inst mkfun2 @deleteOb nil; ); 0;; /*! \brief Global plugIT function to initialize the plugIT callbacks * * called on plugIT load, here define the functions to use for a new instance and the editor * * <b>Prototype:</b> fun [s] I * * \param S : plugIT file path * * \return I : 0 **/ fun IniPlug(file)= PlugRegister @newOb nil; setPluginEditor @dynamicedit; 0;;
Now reload the plugITs in the OS3D Editor (hit F5 after a focus in the plugITs window, or right click > "reload")
If the plugIT don't appear in the plugITs menu :
- look at the error in the OS3D Editor log window (at the bottom of the main interface)
Updated by arkeon over 11 years ago ยท 2 revisions