UrhoToolbar.mcr 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. -- ogreToolbar.mcr
  2. --
  3. -- cin - 2013
  4. --
  5. -- Macroscript for the Urho Toolbar 1.0
  6. --
  7. -- Thanks to John Martin and Etienne Mallard for the work they did in the previous versions
  8. --
  9. -- library functions
  10. include "ogre/lib/ogreSkeletonLib.ms"
  11. include "ogre/lib/ogreMaterialLib.ms"
  12. include "ogre/lib/ogreMaterialPlugin.ms"
  13. macroScript showOgreExportTools
  14. category:"Urho Tools"
  15. internalCategory:"Urho Tools"
  16. buttonText:"Urho Exporter"
  17. tooltip:"Urho Exporter"
  18. Icon:#("Maintoolbar",49)
  19. (
  20. -- create a floater
  21. OgreExportFloater = newRolloutFloater "Urho Ogre Exporter - 1.00" 280 800 ;
  22. rollout OgreExportOptions "Options" width:270 height:140 rolledUp:true
  23. (
  24. button openScript "open OgreScript.ini" pos:[7,8] width:116 height:26 toolTip:"open the script to edit your settings"
  25. checkbox CBconvertXML "convert XML file after export" pos:[8,42] width:255 height:22 checked:true
  26. label lbl01 "OgreImporter.exe path" pos:[8,64] width:256 height:18
  27. editText editXMLconverter "" pos:[7,80] width:253 height:23
  28. button browseXMLconverter "Browse" pos:[188,106] width:72 height:25 toolTip:"choose your OgreImporter.exe"
  29. groupBox grp1 "Conversion settings" pos:[8,132] width:254 height:125
  30. checkbox CBgenerateedges "Generate Edges List (for stencil shadows)" pos:[12,145] width:245 height:20 checked:true
  31. checkbox CBgeneratetangents "Generate Tangent Vectors (for normal mapping)" pos:[12,163] width:245 height:20 checked:false
  32. checkbox CBgenerateLOD "Generate LOD" pos:[12,181] width:245 height:20 checked:false
  33. label lbl02 "LOD levels" pos:[30,200] width:156 height:18
  34. label lbl03 "LOD distance" pos:[30,218] width:156 height:18
  35. label lbl04 "LOD reduction (%)" pos:[30,236] width:156 height:18
  36. spinner SPlodlevels "" pos:[120,200] width:114 height:16 range:[1,20,1] type:#integer scale:1 enabled:false
  37. spinner SPloddistance "" pos:[120,218] width:114 height:16 range:[0.0,100000.0,10.0] type:#float scale:1.0 enabled:false
  38. spinner SPlodreduction "" pos:[120,236] width:114 height:16 range:[0.0,100.0,20.0] type:#float scale:5.0 enabled:false
  39. on CBgenerateLOD changed state do
  40. (
  41. SPlodlevels.enabled = state;
  42. SPloddistance.enabled = state;
  43. SPlodreduction.enabled = state;
  44. )
  45. on openScript pressed do
  46. (
  47. shellLaunch ((getDir #scripts) + "\\ogre\\ogreScript.ini") "" ;
  48. )
  49. on CBconvertXML changed state do
  50. (
  51. if (state and (editXMLconverter.text!="")) then
  52. (
  53. if (not (doesFileExist editXMLconverter.text)) then
  54. (
  55. editXMLconverter.text = "The file/directory specified in the .ini for the OgreImporter.exe does not exist !";
  56. CBconvertXML.checked = false;
  57. )
  58. )
  59. )
  60. on browseXMLconverter pressed do
  61. (
  62. filename = getOpenFileName types:"Executables(*.exe)|*.exe|" ;
  63. if (filename != undefined) then
  64. (
  65. editXMLconverter.text = filename ;
  66. CBconvertXML.checked = true;
  67. if (not (doesFileExist editXMLconverter.text)) then
  68. (
  69. editXMLconverter.text = "The file/directory specified in the .ini for the XML converter does not exist !";
  70. CBconvertXML.checked = false;
  71. )
  72. else
  73. (
  74. xmlConvPath = getFilenamePath editXMLconverter.text;
  75. xmlexe = getFilenameFile editXMLconverter.text;
  76. setINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Directories" "XMLConverterPath" xmlConvPath;
  77. setINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Exe" "XMLConverterExe" xmlexe;
  78. )
  79. )
  80. )
  81. on OgreExportOptions open do
  82. (
  83. runXMLConverter = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Tools" "runXMLConverter"
  84. if (runXMLConverter=="yes") then
  85. (
  86. CBconvertXML.enabled = true;
  87. CBconvertXML.checked = true;
  88. )
  89. else
  90. (
  91. CBconvertXML.enabled = false;
  92. )
  93. xmlConvPath = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Directories" "XMLConverterPath"
  94. xmlexe = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Exe" "XMLConverterExe"
  95. ext = substring xmlexe (xmlexe.count-4) 4;
  96. if ( (ext[2]!="e" and ext[2]!="E") or (ext[3]!="x" and ext[3]!="X") or (ext[4]!="e" and ext[4]!="E") ) then
  97. editXMLconverter.text = xmlConvPath + "\\" + xmlexe + ".exe";
  98. else
  99. editXMLconverter.text = xmlConvPath + "\\" + xmlexe;
  100. print editXMLconverter.text;
  101. if (not (doesFileExist editXMLconverter.text)) then
  102. (
  103. editXMLconverter.text = "The file/directory specified in the .ini for the OgreImporter.exe does not exist !";
  104. CBconvertXML.checked = false;
  105. )
  106. else
  107. (
  108. CBconvertXML.checked = true;
  109. )
  110. )
  111. on OgreExportOptions close do
  112. (
  113. )
  114. )
  115. rollout OgreExportObject "Object" width:270 height:259
  116. (
  117. label lbl01 "Selected Object :" pos:[6,35] width:260 height:17
  118. editText editObject "" pos:[0,51] width:263 height:20
  119. button selectMesh "Select a mesh..." pos:[115,2] width:152 height:28 toolTip:"select the mesh you want to export"
  120. spinner SPscale "Scale" pos:[149,75] width:114 height:16 range:[0.0,1000.0,1.0] type:#float scale:0.1
  121. checkbox CBFlipYZ "Flip Y/Z" pos:[203,96] width:60 height:19 checked:true
  122. groupBox grp1 "Output" pos:[8,112] width:254 height:75
  123. label lbl03 "File name" pos:[17,125] width:238 height:17
  124. editText editFilename "" pos:[11,140] width:242 height:22
  125. button chooseFilename "Browse" pos:[170,164] width:82 height:20 toolTip:"chooose the name of your output files"
  126. button export "Export !" pos:[29,191] width:214 height:40 toolTip:"export your mesh, skeleton ......"
  127. progressBar exportProgress pos:[9,235] width:250 height:10
  128. on OgreExportObject open do
  129. (
  130. if (maxOps.productAppID == #max) then
  131. g_MAX = false;
  132. else
  133. g_MAX = true;
  134. lastFile = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastFile"
  135. lastAnimName = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastAnimName"
  136. lastfirstFrame = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastFrameStart"
  137. lastlastFrame = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastFrameEnd"
  138. lastAnimLength = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastAnimLength"
  139. lastScale = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastScale"
  140. editFilename.text = lastFile ;
  141. OgreExportMesh.CBexportUV.checked = true ;
  142. CBFlipYZ.checked = true ;
  143. SPscale.value = lastScale as Float;
  144. if (SPscale.value == 0.0) then
  145. SPscale.value = 1.0;
  146. select = getCurrentSelection() ;
  147. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  148. (
  149. editObject.text = select[1].name ;
  150. OgreExportMesh.CBexportMesh.enabled = true;
  151. OgreExportMesh.CBexportMesh.checked = true;
  152. OgreExportMesh.CBflipnormals.enabled = true ;
  153. OgreExportMesh.CBexportColor.enabled = true ;
  154. OgreExportMesh.CBexportUV.enabled = true ;
  155. OgreExportMesh.CBexportUV.checked = true ;
  156. OgreExportMesh.SPchannels.enabled = true ;
  157. OgreExportAnimation.CBexportSkeleton.enabled = (getSkin(select[1]) != undefined) or (getPhysique(select[1]) != undefined) ;
  158. )
  159. )
  160. on OgreExportObject close do
  161. (
  162. )
  163. on selectMesh pressed do
  164. (
  165. max tool hlist ;
  166. select = getCurrentSelection() ;
  167. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  168. (
  169. editObject.text = select[1].name ;
  170. -- options accessible ou non
  171. OgreExportMesh.CBexportMesh.enabled = true;
  172. OgreExportMesh.CBexportMesh.checked = true;
  173. OgreExportMesh.CBflipnormals.enabled = true ;
  174. OgreExportMesh.CBexportColor.enabled = true ;
  175. OgreExportMesh.CBexportUV.enabled = true ;
  176. OgreExportMesh.CBexportUV.checked = true ;
  177. OgreExportMesh.SPchannels.enabled = true ;
  178. OgreExportAnimation.CBexportSkeleton.enabled = (getSkin(select[1]) != undefined) or (getPhysique(select[1]) != undefined) ;
  179. )
  180. )
  181. on chooseFilename pressed do
  182. (
  183. filename = getSaveFileName types:"All Files(*.*)|*.*|" ;
  184. if (filename != undefined) then
  185. (
  186. editFilename.text = filename ;
  187. )
  188. )
  189. -------------------------------------
  190. -- EXPORT ---------------------------
  191. -------------------------------------
  192. on export pressed do
  193. (
  194. sliderTime = 0 ;
  195. m = getNodeByName editObject.text ;
  196. if (editFilename.text == "" or m == undefined ) then
  197. (
  198. messageBox "You have to choose a filename and a valid object." ;
  199. )
  200. else
  201. (
  202. clearlistener() ;
  203. if (SPscale.value == 0.0) then
  204. SPscale.value = 1.0;
  205. Options = exportOptions scale:SPscale.value flipYZ:false flipNormal:false exportColours:false exportUV:false ;
  206. exportingMeshDone = false ;
  207. exportingSkelDone = false ;
  208. -- sets options
  209. ---------------
  210. if (CBFlipYZ.checked) then
  211. Options.flipYZ= true ;
  212. if (OgreExportMesh.CBflipnormals.checked and OgreExportMesh.CBflipnormals.enabled) then
  213. Options.flipNormal = true ;
  214. if (OgreExportMesh.CBexportColor.checked and OgreExportMesh.CBexportColor.enabled) then
  215. Options.exportColours = true ;
  216. if (OgreExportMesh.CBexportUV.checked and OgreExportMesh.CBexportUV.enabled) then
  217. (
  218. Options.exportUV = true ;
  219. Options.UVchannels = OgreExportMesh.SPchannels.value;
  220. )
  221. Options.exportHelpers = (OgreExportAnimation.CBexporthelpers.enabled and OgreExportAnimation.CBexporthelpers.checked);
  222. if (not g_MAX) then
  223. setINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastScale" (SPscale.value as string)
  224. -- exports mesh
  225. ---------------
  226. if (OgreExportMesh.CBexportMesh.enabled and OgreExportMesh.CBexportMesh.checked) then
  227. (
  228. if (not g_MAX) then
  229. setINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Settings" "lastFile" editFilename.text
  230. --progressStart "Mesh Export" ;
  231. exportingMeshDone = writeMesh m Options (editFilename.text) ;
  232. --progressStop ;
  233. )
  234. -- exports skeleton
  235. -------------------
  236. if (OgreExportAnimation.CBexportSkeleton.enabled and OgreExportAnimation.CBexportSkeleton.checked) then
  237. (
  238. Options.sampleRate = OgreExportAnimation.SPsamplerate.value ;
  239. Options.ikSampleRate = OgreExportAnimation.SPiksamplerate.value ;
  240. exportingSkelDone = writeSkeleton m Options Anims editFilename.text ;
  241. )
  242. -- exports material
  243. if (OgreExportMaterial.CBexportmaterial.enabled and OgreExportMaterial.CBexportmaterial.checked) then
  244. (
  245. select = getCurrentSelection() ;
  246. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  247. (
  248. mat = select[1].material
  249. if (exportSomeMaterial!=undefined) then -- export with Octopus functions
  250. (
  251. local outFile ;
  252. if (not g_MAX) then
  253. (
  254. outFile = createfile (editFilename.text + ".material");
  255. )
  256. else
  257. (
  258. ClearListener();
  259. if (g_MAX_use_listener) then
  260. format("<ogrestartfile>%</ogrestartfile><ogrestartdata>\n") (editFilename.text + ".material");
  261. outFile = listener;
  262. )
  263. exportSomeMaterial mat "" outFile;
  264. if (not g_MAX) then
  265. (
  266. close outFile ;
  267. )
  268. else
  269. (
  270. if (g_MAX_use_listener) then
  271. format("</ogrestartdata>\n") to: outFile;
  272. )
  273. )
  274. else
  275. (
  276. exportMaterial mat (editFilename.text);
  277. )
  278. )
  279. )
  280. -- post traitement
  281. ------------------
  282. if (exportingMeshDone or exportingSkelDone) then
  283. (
  284. if (OgreExportOptions.CBconvertXML.checked) then
  285. (
  286. if (not g_MAX) then
  287. (
  288. OptionConv = "";
  289. mediaPath = getINISetting ((getDir #scripts) + "\\ogre\\ogreScript.ini") "Directories" "MediaPath"
  290. if (exportingMeshDone) then
  291. (
  292. --if (OgreExportOptions.CBgenerateedges.enabled==false or OgreExportOptions.CBgenerateedges.checked==false) then
  293. -- OptionConv = OptionConv + " -e";
  294. --if (OgreExportOptions.CBgeneratetangents.enabled and OgreExportOptions.CBgeneratetangents.checked) then
  295. --(
  296. --if (OgreExportMesh.CBexportUV.enabled and OgreExportMesh.CBexportUV.checked and (OgreExportMesh.SPchannels.value>0)) then
  297. -- OptionConv = OptionConv + " -t";
  298. --else
  299. -- messageBox "Tangent vectors cannot be generated without UV sets. Generation will be deactivated." ;
  300. --)
  301. --if (OgreExportOptions.CBgeneratelod.enabled and OgreExportOptions.CBgeneratelod.checked) then
  302. -- OptionConv = OptionConv + " -l " + (OgreExportOptions.SPlodlevels.value as string) + " -d " + (OgreExportOptions.SPloddistance.value as string) + " -p " + (OgreExportOptions.SPlodreduction.value as string);
  303. print (OgreExportOptions.editXMLconverter.text + " \"" + editFilename.text + ".mesh.xml\" \"" + editFilename.text + ".mdl\"") ;
  304. DOSCommand (OgreExportOptions.editXMLconverter.text + " \"" + editFilename.text + ".mesh.xml\" \"" + editFilename.text + ".mdl\"") ;
  305. --DOSCommand ("copy \"" + editFilename.text + ".mesh\" \"" + mediaPath + "\"") ;
  306. )
  307. --if (exportingSkelDone) then
  308. --(
  309. --DOSCommand (OgreExportOptions.editXMLconverter.text + " \"" + editFilename.text + ".skeleton.xml\" \"" + editFilename.text + ".skeleton\"") ;
  310. --DOSCommand ("copy \"" + editFilename.text + ".skeleton\" \"" + mediaPath + "\"") ;
  311. --)
  312. --messageBox "OgreXMLConverter has been run and files copied to the media directory."
  313. )
  314. )
  315. )
  316. )
  317. )
  318. )
  319. rollout OgreExportMesh "Mesh" width:270 height:120
  320. (
  321. checkbox CBexportMesh "Export Mesh" pos:[5,5] width:150 height:17
  322. groupBox grp2 "Export settings" pos:[4,25] width:262 height:102
  323. checkbox CBflipnormals "Flip normals" pos:[14,42] width:140 height:19
  324. checkbox CBexportUV "Export UV sets" pos:[14,64] width:140 height:20
  325. spinner SPchannels "# UV channels" pos:[36,85] width:173 height:16 range:[1,8,1] type:#integer scale:1
  326. checkbox CBexportColor "Export Vertex Color" pos:[13,105] width:140 height:19
  327. on OgreExportMesh open do
  328. (
  329. OgreExportMesh.CBexportMesh.enabled = false;
  330. OgreExportMesh.CBexportMesh.checked = true;
  331. OgreExportMesh.CBflipnormals.enabled = false ;
  332. OgreExportMesh.CBexportColor.enabled = false ;
  333. OgreExportMesh.CBexportUV.enabled = false ;
  334. OgreExportMesh.CBexportUV.checked = true ;
  335. OgreExportMesh.SPchannels.enabled = false ;
  336. select = getCurrentSelection() ;
  337. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  338. (
  339. OgreExportMesh.CBexportMesh.enabled = true;
  340. OgreExportMesh.CBexportMesh.checked = true;
  341. OgreExportMesh.CBflipnormals.enabled = true ;
  342. OgreExportMesh.CBexportColor.enabled = true ;
  343. OgreExportMesh.CBexportUV.enabled = true ;
  344. if (classof select[1] == Editable_Mesh) then
  345. (
  346. if (getNumTVerts select[1] == 0) then
  347. OgreExportMesh.CBexportUV.checked = false ;
  348. else
  349. OgreExportMesh.CBexportUV.checked = true ;
  350. )
  351. else
  352. (
  353. OgreExportMesh.CBexportUV.checked = false ;
  354. )
  355. OgreExportMesh.SPchannels.enabled = true ;
  356. )
  357. )
  358. on OgreExportMesh close do
  359. (
  360. )
  361. on CBexportMesh changed state do
  362. (
  363. OgreExportMesh.CBflipnormals.enabled = state ;
  364. OgreExportMesh.CBexportColor.enabled = state ;
  365. OgreExportMesh.CBexportUV.enabled = state ;
  366. OgreExportMesh.SPchannels.enabled = state ;
  367. )
  368. on CBexportUV changed state do
  369. (
  370. SPchannels.enabled = state ;
  371. )
  372. on SPchannels changed state do
  373. (
  374. name = OgreExportObject.editObject.text;
  375. replaceSpaces name;
  376. d = getNodeByName name ;
  377. num_channels = (meshOp.getNumMaps d) - 1;
  378. if (state > num_channels) then
  379. SPchannels.value = num_channels;
  380. )
  381. )
  382. rollout OgreExportAnimation "Animation" width:270 height:347 rolledUp:true
  383. (
  384. checkbox CBexportSkeleton "Export Skeleton" pos:[5,4] width:150 height:19 enabled:false
  385. groupBox grp3 "Export settings" pos:[4,26] width:262 height:76
  386. --checkbox CBbiped "Biped Export" pos:[13,44] width:246 height:19 enabled:false
  387. spinner SPsamplerate "Sample Rate" pos:[11,45] width:186 height:16 enabled:false range:[0.0,10000,0.0] type:#float scale:0.5
  388. spinner SPiksamplerate "IK Sample Rate" pos:[17,63] width:180 height:16 enabled:false range:[0.0,10000,5.0] type:#float scale:0.5
  389. checkbox CBexporthelpers "Export non-bones objects (must be in the modifier)" pos:[11,81] width:254 height:16 enabled:false checked:false
  390. groupBox grp4 "Animation settings" pos:[4,106] width:261 height:252
  391. button getFromModifier "<-" pos:[14,124] width:61 height:21 enabled:false toolTip:"retrieve information from OctopusExport Modifier"
  392. label lbl4 "Get settings from Octopus modifier" pos:[86,128] width:167 height:14 enabled:true
  393. groupBox grp5 "Animations" pos:[8,149] width:253 height:203
  394. button addAnimation "Add" pos:[16,164] width:80 height:22 enabled:false toolTip:"add an animation to the list"
  395. button deleteAnimation "Delete" pos:[172,165] width:80 height:22 enabled:false toolTip:"remove an animation from the list"
  396. comboBox ListAnimations "" pos:[17,191] width:235 height:6 enabled:false
  397. label lbl5 "Frames" pos:[17,290] width:236 height:16
  398. spinner SPframestart "from" pos:[25,307] width:106 height:16 enabled:false range:[0,10000,0] type:#integer scale:1
  399. spinner SPframeend "to" pos:[154,307] width:96 height:16 enabled:false range:[0,10000,100] type:#integer scale:1
  400. label lbl6 "Length (in seconds)" pos:[18,330] width:115 height:16
  401. spinner SPanimlength "" pos:[120,329] width:130 height:16 range:[0,10000,10] type:#float scale:0.1
  402. on OgreExportAnimation open do
  403. (
  404. OgreExportAnimation.CBexportSkeleton.enabled = false;
  405. --OgreExportAnimation.CBbiped.enabled = false;
  406. --OgreExportAnimation.CBbiped.checked = false;
  407. OgreExportAnimation.getFromModifier.enabled = false;
  408. OgreExportAnimation.SPsamplerate.enabled = false;
  409. OgreExportAnimation.SPiksamplerate.enabled = false;
  410. OgreExportAnimation.CBexporthelpers.enabled = false;
  411. OgreExportAnimation.addAnimation.enabled = false;
  412. OgreExportAnimation.deleteAnimation.enabled = false;
  413. OgreExportAnimation.ListAnimations.enabled = false;
  414. OgreExportAnimation.SPframestart.enabled = false;
  415. OgreExportAnimation.SPframeend.enabled = false;
  416. OgreExportAnimation.SPanimlength.enabled = false;
  417. select = getCurrentSelection() ;
  418. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  419. (
  420. OgreExportAnimation.CBexportSkeleton.enabled = (getSkin(select[1]) != undefined) or (getPhysique(select[1]) != undefined) ;
  421. if (OgreExportAnimation.CBexportSkeleton.enabled and OgreExportAnimation.CBexportSkeleton.checked) then
  422. (
  423. --OgreExportAnimation.CBbiped.enabled = true;
  424. --OgreExportAnimation.CBbiped.checked = (getPhysique(select[1]) != undefined);
  425. OgreExportAnimation.getFromModifier.enabled = true;
  426. OgreExportAnimation.SPsamplerate.enabled = true;
  427. OgreExportAnimation.SPiksamplerate.enabled = true;
  428. OgreExportAnimation.CBexporthelpers.enabled = true;
  429. OgreExportAnimation.addAnimation.enabled = true;
  430. OgreExportAnimation.deleteAnimation.enabled = true;
  431. OgreExportAnimation.ListAnimations.enabled = true;
  432. OgreExportAnimation.SPframestart.enabled = true;
  433. OgreExportAnimation.SPframeend.enabled = true;
  434. OgreExportAnimation.SPanimlength.enabled = true;
  435. )
  436. )
  437. Anims = exportAnims names:#() startframes:#() endframes:#() lengths:#();
  438. )
  439. --on CBbiped changed state do
  440. --(
  441. --)
  442. on CBexportSkeleton changed state do
  443. (
  444. select = getCurrentSelection() ;
  445. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  446. (
  447. --OgreExportAnimation.CBbiped.enabled = state;
  448. --OgreExportAnimation.CBbiped.checked = (getPhysique(select[1]) != undefined);
  449. OgreExportAnimation.getFromModifier.enabled = state;
  450. OgreExportAnimation.SPsamplerate.enabled = state;
  451. OgreExportAnimation.SPiksamplerate.enabled = state;
  452. OgreExportAnimation.CBexporthelpers.enabled = state;
  453. OgreExportAnimation.addAnimation.enabled = state;
  454. OgreExportAnimation.deleteAnimation.enabled = state;
  455. OgreExportAnimation.ListAnimations.enabled = state;
  456. OgreExportAnimation.SPframestart.enabled = state;
  457. OgreExportAnimation.SPframeend.enabled = state;
  458. OgreExportAnimation.SPanimlength.enabled = state;
  459. )
  460. )
  461. on OgreExportAnimation close do
  462. (
  463. )
  464. on getFromModifier pressed do
  465. (
  466. select = getCurrentSelection()
  467. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  468. (
  469. max modify mode ;
  470. --if (select[1].modifiers["OctopusExport"]!=undefined) then
  471. -- modPanel.setCurrentObject select[1].modifiers["OctopusExport"] ;
  472. octexp = getOctopusExport select[1];
  473. if (octexp!=undefined) then
  474. (
  475. local array=#();
  476. for n in octexp.anames do
  477. append array n;
  478. ListAnimations.items = array;
  479. ListAnimations.selection = 1;
  480. Anims.names = array;
  481. array=#();
  482. for n in octexp.afframes do
  483. append Anims.startframes n;
  484. array=#();
  485. for n in octexp.alframes do
  486. append Anims.endframes n;
  487. array=#();
  488. for n in octexp.artimes do
  489. append Anims.lengths n;
  490. if (ListAnimations.items.count!=0) then
  491. (
  492. SPframestart.value = Anims.startframes[1]
  493. SPframeend.value = Anims.endframes[1]
  494. SPanimlength.value = Anims.lengths[1]
  495. )
  496. )
  497. )
  498. )
  499. on addAnimation pressed do
  500. (
  501. if (ListAnimations.text != "") then
  502. (
  503. local array=#();
  504. for n in ListAnimations.items do
  505. append array n;
  506. append array ListAnimations.text;
  507. ListAnimations.items = array;
  508. append Anims.names ListAnimations.items[ListAnimations.items.count];
  509. append Anims.startframes SPframestart.value;
  510. append Anims.endframes SPframeend.value;
  511. append Anims.lengths SPanimlength.value;
  512. ListAnimations.selection = 0;
  513. )
  514. )
  515. on deleteAnimation pressed do
  516. (
  517. if ((ListAnimations.items.count > 0) and (ListAnimations.selection > 0)) then
  518. (
  519. local array=#();
  520. ind = ListAnimations.selection
  521. deleteItem Anims.names ind
  522. deleteItem Anims.startframes ind
  523. deleteItem Anims.endframes ind
  524. deleteItem Anims.lengths ind
  525. for n in Anims.names do
  526. append array n;
  527. ListAnimations.items = array;
  528. ListAnimations.selection = 1;
  529. )
  530. )
  531. on ListAnimations selected num do
  532. (
  533. if (ListAnimations.items.count >= num) then
  534. (
  535. SPframestart.value = Anims.startframes[num]
  536. SPframeend.value = Anims.endframes[num]
  537. SPanimlength.value = Anims.lengths[num]
  538. )
  539. )
  540. on SPframestart changed val do
  541. (
  542. if ((ListAnimations.items.count > 0) and (ListAnimations.selection > 0)) then
  543. (
  544. if (ListAnimations.text == Anims.names[ListAnimations.selection]) then
  545. Anims.startframes[ListAnimations.selection] = SPframestart.value;
  546. )
  547. )
  548. on SPframeend changed val do
  549. (
  550. if ((ListAnimations.items.count > 0) and (ListAnimations.selection > 0)) then
  551. (
  552. if (ListAnimations.text == Anims.names[ListAnimations.selection]) then
  553. Anims.endframes[ListAnimations.selection] = SPframeend.value;
  554. )
  555. )
  556. on SPanimlength changed val do
  557. (
  558. if ((ListAnimations.items.count > 0) and (ListAnimations.selection > 0)) then
  559. (
  560. if (ListAnimations.text == Anims.names[ListAnimations.selection]) then
  561. Anims.lengths[ListAnimations.selection] = SPanimlength.value;
  562. )
  563. )
  564. )
  565. rollout OgreExportMaterial "Material" width:270 height:33
  566. (
  567. checkbox CBexportmaterial "Export Material" pos:[5,7] width:260 height:17 enabled:false checked:true
  568. on OgreExportMaterial open do
  569. (
  570. CBexportmaterial.enabled = false;
  571. select = getCurrentSelection() ;
  572. if ((select[1]!=undefined) and (iskindof select[1] GeometryClass)) then
  573. (
  574. CBexportmaterial.enabled = true;
  575. )
  576. )
  577. on OgreExportMaterial close do
  578. (
  579. )
  580. )
  581. rollout OgreExportAbout "About" rolledUp:true
  582. (
  583. label label11 "For use with the Urho graphics engine." align:#center;
  584. label label12 "See website for details: http://code.google.com/p/urho3d/" align:#center;
  585. label label13 "This software is distributed under the terms of the LGPL." align:#center ;
  586. label label16 "Based on the exporter realised by" align:#center ;
  587. label label14 "EarthquakeProof - [email protected] 2003 and Banania - 2004" align:#center ;
  588. label label15 "cin - March 2013" align:#center ;
  589. )
  590. -- add the rollout, which contains the dialog
  591. addRollout OgreExportOptions OgreExportFloater ;
  592. addRollout OgreExportObject OgreExportFloater ;
  593. addRollout OgreExportMesh OgreExportFloater ;
  594. addRollout OgreExportAnimation OgreExportFloater ;
  595. addRollout OgreExportMaterial OgreExportFloater ;
  596. addRollout OgreExportAbout OgreExportFloater ;
  597. )