Project

General

Profile

Template plugIT » History » Version 2

arkeon, 06/13/2013 02:58 PM

1 1 arkeon
h1. Template plugIT
2
3
h2. Start a new plugIT (template)
4
5
1 - choose his category (for example "misc")
6
create a new "template" directory in the category path : "Partition_LockedApp\tools\os3dplugins\misc"
7
8
2 - create the plugIT definition file (xml)
9
the xml file MUST have the same name as the plugIT directory here "template.xml"
10
11
the PLUGIN tag :
12
- name : the plugIT name displayed in the OS3D plugIT menu
13
- version : the plugIT version
14
- type : the category name
15
16
the DESCRIPTION tag : 
17
the plugIT description shown in the plugIT editor
18
19
the HELP tag :
20
the text shown as a tooltip on the help button in the plugIT editor, or an internet url pointing to the plugIT documentation
21
22
the RESOURCE tag :
23
it contain FILE tags with a "path" param, for additional files needed by the plugIT
24
25
the EDITOR tag :
26
it contain the scol scripts to load to execute the plugIT editor and the editor params and types to save
27
28
> the SCRIPT tag :
29
> > the "path" param contain the editor file, it can be relative to the plugIT directory with "./"
30
> the PARAM tag :
31
> > the "name" param contain the name of the editor variable to save
32
> > the "type" param contain the type of the param, it can be :
33
> > * "value"
34
> > * "file"
35
> > * "mesh"
36
> > * "material"
37
> > * "node"
38
> > * "light"
39
> > * "anim"
40
> > *  ...
41
42
the CLIENT tag :
43
it contain the client side scol scripts and the default actions/events
44
  
45
> the SCRIPT tag :
46
> > the "path" param contain the editor file, it can be relative to the plugIT directory with "./"
47
  
48
> the EVENT tag :
49
> > it define an event name in the "name" param
50
51
> the ACTION tag :
52
> it define an action name in the "name" param
53
54
<pre>
55
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
56
<PLUGIN name="template" version="1.0" type="misc">
57
  <DESCRIPTION>Template plugIT</DESCRIPTION>
58
  <HELP>Template plugIT help</HELP>
59
  <RESOURCE>
60
    <FILE path="./myres.jpg" />
61
  </RESOURCE>
62
  <EDITOR>
63
    <SCRIPT path="./etemplate.pkg" />
64
    <PARAM name="oninit" type="value" />
65
  </EDITOR>
66
  <CLIENT minstance="true">
67
    <SCRIPT path="./ctemplate.pkg" />
68
    <ACTION name="Go" />
69
    <EVENT name="Done" />
70
  </CLIENT>
71
</PLUGIN>
72
</pre>
73
74
3 - create the editor file
75
here "etemplate.pkg" as defined in the template.xml file in the EDITOR SCRIPT tag
76
77
<pre>
78
// prototype of the cbCloseEdit function in case you don't use params
79
//proto cbCloseEdit = fun [] [[S S] r1];;
80
81
/*! \brief Callback on plugIT instance editor closed
82
  *
83
  *  called on Apply / Ok button, this callback return the parameters to save in the XOS project
84
  *
85
  *  <b>Prototype:</b> fun [] [[S S] r1]
86
  *   
87
  *  \return [[S S] r1] : parameters to save in the instance XML data
88
  **/
89
fun cbCloseEdit(ctrlinit)=
90
  // get the check state and add it to the param list
91
  let itoa getEdCtrlCheckState ctrlinit -> state in
92
    ["oninit" state]::
93
    nil;;
94
95
96
/*! \brief Callback on plugIT instance editor destroyed
97
  *
98
  *  called when the editor window is destroyed, this is useful to destroy added objects or resources
99
  *
100
  *  <b>Prototype:</b> fun [] I
101
  *   
102
  *  \return I : 0
103
  **/
104
fun cbDestroyEdit()=
105
  0;;
106
107
108
/*! \brief Callback on plugIT instance editor opened
109
  *
110
  *  called when a user the plugIT Editor
111
  *
112 2 arkeon
  *  <b>Prototype:</b> fun [EdWindow PInstance V3Dview] [fun [] [[S S] r1] fun [] I]
113 1 arkeon
  *
114
  *  \param EdWindow : editor window structure
115
  *  \param PInstance : plugIT instance
116
  *  \param V3Dview : default 3D view structure
117
  *  
118 2 arkeon
  *  \return [fun [] [[S S] r1] fun [] I] : Callbacks to call on close and destroy
119 1 arkeon
  **/
120
fun dynamicedit(winstr, inst, viewstr) =
121
  // size of the window
122
  let [400 90] -> [iw ih] in
123
  (
124
    // resize the editor window
125
    setEdWindowSize winstr iw ih;
126
127
    // retrieve the current param value
128
    let atoi (getPluginInstanceParam inst "oninit") -> state in
129
    
130
    // create the check box control on the editor window
131
    let crEdCtrlCheck winstr 10 10 280 20 "Run on init" EDWIN_RESIZE_MW -> ctrlinit in
132
    (
133
      // set the current check state
134
      setEdCtrlCheckState ctrlinit state;
135
136
      [(mkfun1 @cbCloseEdit ctrlinit) @cbDestroyEdit];
137
    );
138
  );;
139
</pre>
140
141
4 - create the client file
142
here "ctemplate.pkg" as defined in the template.xml file in the CLIENT SCRIPT tag
143
144
<pre>
145
/*! \brief Callback on instance destruction
146
  * Callback called when a plugIT instance is destroyed
147
  *
148
  *  <b>Prototype:</b> fun [PInstance u0] I
149
  *
150
  *  \param PInstance : destroyed plugIT instance
151
  *  \param u0 : user parameter, the type is not defined here because it is not used in this template
152
  *   
153
  *  \return I : 0
154
  **/
155
fun deleteOb(inst, uparam)=
156
  0;;
157
158
159
// plugIT doing something
160
fun doSomething(value)=
161
  // test the value to define a default one
162
  let if value == nil then "none" else value -> value in
163
  (
164
    // create a dialog box with the value as text
165
      _DLGMessageBox _channel DMSwin "Template Plugit !!" value 0;
166
   
167
    // send the Done event
168
    _DMSevent this (getPluginInstanceEvent inst "Done") nil nil;
169
  );
170
  0;;
171
172
173
/*! \brief Callback on "Go" dms action
174
  *
175
  *  Call the program function to display a dialog box
176
  *
177
  *  <b>Prototype:</b> fun [PInstance DMI S S I u0] I
178
  *
179
  *  \param PInstance : plugIT instance
180
  *  \param DMI : DMS module who call the action (not used)
181
  *  \param S : name of the launched action
182
  *  \param S : data posted in DMS action link
183
  *  \param I : reply flag (not used)
184
  *  \param u0 : user parameter, the type is not defined here because it is not used in this template
185
  * 
186
  *  \return I : 0
187
  **/
188
fun cbGo(inst, from, action, param, rep, uparam)=
189
  // call the dialog box and set the link parameter as text
190
  doSomething param;
191
  0;;
192
193
194
/*! \brief Callback on new plugIT instance
195
  *
196
  *  Read the parameters from editor values and initialise the plugIT
197
  *
198
  *  <b>Prototype:</b> fun [PInstance] I
199
  *
200
  *  \param PInstance : plugIT instance
201
  *   
202
  *  \return I : 0
203
  **/
204
fun newOb(inst)=
205
  // retrieve the oninit param value
206
  let atoi (getPluginInstanceParam inst "oninit") -> state in
207
  (
208
    // define the function to call when we receive the Go action
209
    PluginRegisterAction inst "Go" mkfun6 @cbGo nil;
210
  
211
    // test the oninit param to know if we have to start the plugIT functionalities here
212
    if !state then nil else
213
      doSomething nil;
214
    
215
    // define the function to call when the plugIT instance is destroyed
216
    setPluginInstanceCbDel inst mkfun2 @deleteOb nil;
217
  );
218
  0;;
219
220
221
/*! \brief Global plugIT function to initialize the plugIT callbacks
222
  *
223
  * called on plugIT load, here define the functions to use for a new instance and the editor
224
  *
225
  *  <b>Prototype:</b> fun [s] I
226
  *
227
  *  \param S : plugIT file path
228
  *  
229
  *  \return I : 0
230
  **/
231
fun IniPlug(file)=
232
  PlugRegister @newOb nil;
233
  setPluginEditor @dynamicedit;
234
  0;;
235
</pre>
236
237
Now reload the plugITs in the OS3D Editor (hit F5 after a focus in the plugITs window, or right click > "reload")
238
239
If the plugIT don't appear in the plugITs menu :
240
- look at the error in the OS3D Editor log window (at the bottom of the main interface)