diff --git a/docs/Duik.animation.html b/docs/Duik.animation.html index b41dcded3..c302c9e44 100644 --- a/docs/Duik.animation.html +++ b/docs/Duik.animation.html @@ -32,7 +32,7 @@

Namespace: animation

- +
@@ -126,7 +126,7 @@

duik-api-doc.jsxinc, - line 1778 + line 1823

@@ -195,7 +195,7 @@

duik-api-doc.jsxinc, - line 1704 + line 1749

@@ -348,7 +348,7 @@

duik-api-doc.jsxinc, - line 1784 + line 1829

@@ -437,7 +437,7 @@

duik-api-doc.jsxinc, - line 1720 + line 1765

@@ -851,7 +851,7 @@

duik-api-doc.jsxinc, - line 1889 + line 1934

@@ -1052,7 +1052,7 @@

duik-api-doc.jsxinc, - line 1814 + line 1859

@@ -1237,7 +1237,7 @@

duik-api-doc.jsxinc, - line 1868 + line 1913

@@ -1326,7 +1326,7 @@

duik-api-doc.jsxinc, - line 1995 + line 2040

@@ -1415,7 +1415,7 @@

duik-api-doc.jsxinc, - line 1926 + line 1971

diff --git a/docs/Duik.automation.html b/docs/Duik.automation.html index fb0c4c854..281f2ea73 100644 --- a/docs/Duik.automation.html +++ b/docs/Duik.automation.html @@ -32,7 +32,7 @@

Namespace: automation

- +
@@ -279,7 +279,7 @@ @@ -519,7 +519,7 @@

duik-api-doc.jsxinc, - line 412 + line 415

@@ -608,7 +608,7 @@

duik-api-doc.jsxinc, - line 349 + line 352

@@ -697,7 +697,7 @@

duik-api-doc.jsxinc, - line 370 + line 373

@@ -875,7 +875,7 @@

duik-api-doc.jsxinc, - line 286 + line 289

@@ -964,7 +964,7 @@

duik-api-doc.jsxinc, - line 393 + line 396

@@ -1053,7 +1053,7 @@

duik-api-doc.jsxinc, - line 328 + line 331

diff --git a/docs/Duik.camera.html b/docs/Duik.camera.html index 38a5fef24..b83b02dbe 100644 --- a/docs/Duik.camera.html +++ b/docs/Duik.camera.html @@ -32,7 +32,7 @@

Namespace: camera

- +
@@ -126,7 +126,7 @@

duik-api-doc.jsxinc, - line 2017 + line 2062

@@ -279,7 +279,7 @@

duik-api-doc.jsxinc, - line 2066 + line 2111

@@ -368,7 +368,7 @@

duik-api-doc.jsxinc, - line 2079 + line 2124

@@ -457,7 +457,7 @@

duik-api-doc.jsxinc, - line 2025 + line 2070

@@ -546,7 +546,7 @@ diff --git a/docs/Duik.constraints.html b/docs/Duik.constraints.html index 790fda2a1..2ca2b997d 100644 --- a/docs/Duik.constraints.html +++ b/docs/Duik.constraints.html @@ -32,7 +32,7 @@

Namespace: constraints

- +
@@ -126,7 +126,7 @@

duik-api-doc.jsxinc, - line 445 + line 448

@@ -279,7 +279,7 @@

duik-api-doc.jsxinc, - line 582 + line 627

@@ -438,7 +438,7 @@

duik-api-doc.jsxinc, - line 454 + line 457

@@ -568,6 +568,95 @@
Parameters:
+ + + + + + + + + + + + + + + + + + + + +
+ +

+ + static bezierIk() + + + + +

+ + + +
+
+ + +
+ Create Bézier IK using selected layers +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + @@ -597,7 +686,7 @@

@@ -795,7 +884,7 @@

@@ -884,7 +973,7 @@

@@ -1014,6 +1103,95 @@
Parameters:
+ + + + + + + + + + +
+ + + + +
+ + + + +
+ +

+ + static ik() + + + + +

+ + + +
+
+ + +
+ Create IK using selected layers +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + @@ -1043,7 +1221,7 @@

@@ -1132,7 +1310,7 @@

@@ -1221,7 +1399,7 @@

@@ -1310,7 +1488,7 @@

@@ -1399,7 +1577,7 @@

@@ -1488,7 +1666,7 @@

@@ -1660,7 +1838,7 @@

@@ -1749,7 +1927,7 @@

@@ -1838,7 +2016,7 @@

@@ -1927,7 +2105,7 @@

@@ -2016,7 +2194,7 @@

diff --git a/docs/Duik.controllers.html b/docs/Duik.controllers.html index 5be8d4ff2..1b3cd66e8 100644 --- a/docs/Duik.controllers.html +++ b/docs/Duik.controllers.html @@ -32,7 +32,7 @@

Namespace: controllers

- +
@@ -126,7 +126,7 @@

@@ -279,7 +279,7 @@

@@ -537,7 +537,7 @@

@@ -696,7 +696,7 @@

@@ -835,7 +835,7 @@

@@ -924,7 +924,7 @@

@@ -1083,7 +1083,7 @@

@@ -1172,7 +1172,7 @@

diff --git a/docs/Duik.html b/docs/Duik.html index 683cc1dbe..f29cf7112 100644 --- a/docs/Duik.html +++ b/docs/Duik.html @@ -32,7 +32,7 @@

Namespace: Duik

- +
@@ -66,7 +66,7 @@

Duik

Version:
-
  • 16.2.18
+
  • 16.2.19
diff --git a/docs/Duik.structures.html b/docs/Duik.structures.html index bb6b5bbf8..1d83a8226 100644 --- a/docs/Duik.structures.html +++ b/docs/Duik.structures.html @@ -32,7 +32,7 @@

Namespace: structures

- +
@@ -126,7 +126,7 @@

@@ -279,7 +279,7 @@

@@ -672,7 +672,7 @@

@@ -948,7 +948,7 @@

@@ -1037,7 +1037,7 @@

@@ -1126,7 +1126,7 @@

@@ -1480,7 +1480,7 @@

@@ -2128,7 +2128,7 @@

@@ -2217,7 +2217,7 @@

@@ -2376,7 +2376,7 @@

@@ -2652,7 +2652,7 @@

diff --git a/docs/Duik.tools.html b/docs/Duik.tools.html index 499169c6e..6c31dd001 100644 --- a/docs/Duik.tools.html +++ b/docs/Duik.tools.html @@ -32,7 +32,7 @@

Namespace: tools

- +
@@ -126,7 +126,7 @@

@@ -195,7 +195,7 @@

@@ -348,7 +348,7 @@

@@ -624,7 +624,7 @@

@@ -734,7 +734,7 @@

@@ -823,7 +823,7 @@

@@ -974,7 +974,7 @@

@@ -1211,7 +1211,7 @@

@@ -1370,7 +1370,7 @@

diff --git a/docs/duik-api-doc.jsxinc.html b/docs/duik-api-doc.jsxinc.html index fcb1b43c2..8c318e236 100644 --- a/docs/duik-api-doc.jsxinc.html +++ b/docs/duik-api-doc.jsxinc.html @@ -34,7 +34,7 @@

Source: duik-api-doc.jsxinc

- +
@@ -118,7 +118,7 @@

Source: duik-api-doc.jsxinc

* })(this); * @author Nicolas Dufresne and contributors * @copyright 2017 - 2020 Nicolas Dufresne, Rainbox Productions - * @version 16.2.18 + * @version 16.2.19 * @license GPL-3.0 <br /> * Duik is free software: you can redistribute it and/or modify<br /> * it under the terms of the GNU General Public License as published by<br /> @@ -324,6 +324,9 @@

Source: duik-api-doc.jsxinc

effect(DuAEF.Duik.PseudoEffects.KLEANER.index['Anticipation_Checkbox']).setValue(0); effect(DuAEF.Duik.PseudoEffects.KLEANER.index['Smart Interpolation_Checkbox']).setValue(0); effect(DuAEF.Duik.PseudoEffects.KLEANER.index['Spatial Options_Mode_Popup']).setValue(1); + effect( DuAEF.Duik.PseudoEffects.KLEANER.index['Follow Through_Elasticity random_Slider'] ).setValue(0); + effect( DuAEF.Duik.PseudoEffects.KLEANER.index['Follow Through_Damping random_Slider'] ).setValue(0); + effect( DuAEF.Duik.PseudoEffects.KLEANER.index['Overlap (simulation)_Overlap random_Slider'] ).setValue(0); } } @@ -533,6 +536,48 @@

Source: duik-api-doc.jsxinc

DuAEF.DuAE.App.endUndoGroup(); } +Duik.constraints.functions.push( { name:"IK", fn:"Duik.constraints.ik()" } ); +/** + * Create IK using selected layers + */ +Duik.constraints.ik = function ( ) +{ + var layers = DuAEF.DuAE.Comp.unselectLayers(); + if (layers.length == 0) return; + DuAEF.DuAE.App.beginUndoGroup( "IK" ); + + DuAEF.DuAE.Project.setProgressMode(true); + + var ctrl = DuAEF.Duik.Rigging.ik(layers,null,false,!settings.data.ik3Layer); + if(ctrl.length > 1) ctrl = ctrl[1]; + else ctrl = ctrl[0]; + ctrl.layer.selected = true; + + DuAEF.DuAE.Project.setProgressMode(false); + + DuAEF.DuAE.App.endUndoGroup(); +} + +Duik.constraints.functions.push( { name:"Bézier IK", fn:"Duik.constraints.bezierIk()" } ); +/** + * Create Bézier IK using selected layers + */ +Duik.constraints.bezierIk = function ( ) +{ + var layers = DuAEF.DuAE.Comp.unselectLayers(); + if (layers.length == 0) return; + DuAEF.DuAE.App.beginUndoGroup( "Bézier IK" ); + + DuAEF.DuAE.Project.setProgressMode(true); + + var ctrl = DuAEF.Duik.Rigging.ik(layers,undefined,true); + ctrl[1].layer.selected = true; + + DuAEF.DuAE.Project.setProgressMode(false); + + app.endUndoGroup(); +} + Duik.constraints.functions.push( { name:"Connector", fn:"Duik.constraints.quickConnector()" } ); /** * Quick Connector diff --git a/docs/index.html b/docs/index.html index 683cc1dbe..f29cf7112 100644 --- a/docs/index.html +++ b/docs/index.html @@ -32,7 +32,7 @@

Namespace: Duik

- +
@@ -66,7 +66,7 @@

Duik

Version:
-
  • 16.2.18
+
  • 16.2.19
diff --git a/src/Duik Animation.jsx b/src/Duik Animation.jsx index 1f98c776a..8c136ff16 100644 --- a/src/Duik Animation.jsx +++ b/src/Duik Animation.jsx @@ -2,8 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_animation.jsxinc" -ui_palette.alignChildren = ['fill','fill']; -ui_buildAnimation( ui_palette ); +ui_buildAnimation( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/Duik Automations.jsx b/src/Duik Automations.jsx index 727f1419c..7c36f576e 100644 --- a/src/Duik Automations.jsx +++ b/src/Duik Automations.jsx @@ -2,8 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_automations.jsxinc" -ui_palette.alignChildren = ['fill','fill']; -ui_buildAutomations( ui_palette ); +ui_buildAutomations( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/Duik Camera.jsx b/src/Duik Camera.jsx index 444a793c7..9b097cb2b 100644 --- a/src/Duik Camera.jsx +++ b/src/Duik Camera.jsx @@ -2,8 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_camera.jsxinc" -ui_palette.alignChildren = ['fill','fill']; -ui_buildCamera( ui_palette ); +ui_buildCamera( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/Duik Cmd.jsx b/src/Duik Cmd.jsx index 30a169b68..e08911c3e 100644 --- a/src/Duik Cmd.jsx +++ b/src/Duik Cmd.jsx @@ -1,7 +1,6 @@ #include "duik_required/Duik16_header.jsxinc"; var standAlone = true; -var noSettings = true; #include "duik_required/Duik16_cmd.jsxinc"; diff --git a/src/Duik Constraints.jsx b/src/Duik Constraints.jsx index 6000261a5..5599356ff 100644 --- a/src/Duik Constraints.jsx +++ b/src/Duik Constraints.jsx @@ -2,8 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_constraints.jsxinc" -ui_palette.alignChildren = ['fill','fill']; -ui_buildConstraints( ui_palette ); +ui_buildConstraints( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/Duik Controllers.jsx b/src/Duik Controllers.jsx index 407614add..c484a8b60 100644 --- a/src/Duik Controllers.jsx +++ b/src/Duik Controllers.jsx @@ -2,8 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_controllers.jsxinc" -ui_palette.alignChildren = ['fill','fill']; -ui_buildControllers( ui_palette ); +ui_buildControllers( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/Duik Notes.jsx b/src/Duik Notes.jsx index f6b6657a6..9a9a8417f 100644 --- a/src/Duik Notes.jsx +++ b/src/Duik Notes.jsx @@ -1,6 +1,6 @@ #include "duik_required/Duik16_header.jsxinc" -var notes_ui_palette = ui_palette; +var notes_ui_palette = ui_palette.mainGroup; var standAlone = true; #include "duik_required/Duik16_notes.jsxinc" diff --git a/src/Duik Rigging.jsx b/src/Duik Rigging.jsx index c5d62ce2e..f2464d47d 100644 --- a/src/Duik Rigging.jsx +++ b/src/Duik Rigging.jsx @@ -2,7 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_rigging.jsxinc" -ui_buildRigging( ui_palette ); +ui_buildRigging( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/Duik Structures.jsx b/src/Duik Structures.jsx index 704b198bd..6978e7cea 100644 --- a/src/Duik Structures.jsx +++ b/src/Duik Structures.jsx @@ -2,8 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_structures.jsxinc" -ui_palette.alignChildren = ['fill','fill']; -ui_buildStructures( ui_palette ); +ui_buildStructures( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/Duik Tools.jsx b/src/Duik Tools.jsx index dd483943c..dd3a3c60d 100644 --- a/src/Duik Tools.jsx +++ b/src/Duik Tools.jsx @@ -2,8 +2,7 @@ var standAlone = true; #include "duik_required/Duik16_tools.jsxinc" -ui_palette.alignChildren = ['fill','fill']; -ui_buildTools( ui_palette ); +ui_buildTools( ui_palette.mainGroup ); #include "duik_required/Duik16_footer.jsxinc" diff --git a/src/duik_required/Duik16_cmd.jsxinc b/src/duik_required/Duik16_cmd.jsxinc index 8547b8109..25d46bffa 100644 --- a/src/duik_required/Duik16_cmd.jsxinc +++ b/src/duik_required/Duik16_cmd.jsxinc @@ -150,17 +150,6 @@ function isNamespace(item) } // EVENTS -function showList (e) -{ - if(!ui_listWindow.visible) - { - var x = e.screenX - e.clientX; - var y = e.screenY - e.clientY; - ui_listWindow.location = [ x-210, y ]; - DuAEF.DuScriptUI.showUI(ui_listWindow); - } - else ui_listWindow.hide(); -} function showSourceTab() { @@ -274,9 +263,9 @@ function processCmd () // List Window -var ui_listWindow = DuAEF.DuScriptUI.createUI(null, "Duik Cmd List", ['fill','fill']); -ui_listWindow.minimumSize.height = 300; -ui_listWindow.minimumSize.width = 200; +var ui_listWindow = DuAEF.DuScriptUI.createPopup("Duik Cmd List"); +ui_listWindow.pin(true); +ui_listWindow.contents.alignment = ['fill','fill']; // a stacked group for the list or source var ui_listStack = DuAEF.DuScriptUI.addGroup( ui_listWindow.contents,'stack'); ui_listStack.alignment = ['fill','fill']; @@ -289,6 +278,7 @@ var ui_listClearButton = DuAEF.DuScriptUI.addButton(ui_listNavButtonsGroup, 'Cle var ui_listPreviousButton = DuAEF.DuScriptUI.addButton(ui_listNavButtonsGroup, 'Previous', DuAEF.DuBinary.toFile(w14_previousframe_m), 'Get back', DuAEF.DuBinary.toFile(w14_previousframe_l)); var ui_list = ui_listGroup.add('listbox'); ui_list.alignment = ['fill','fill']; +ui_list.minimumSize = [0, 300]; var ui_listButtonsGroup = DuAEF.DuScriptUI.addGroup(ui_listGroup); ui_listButtonsGroup.alignment = ['fill','bottom']; var ui_listSourceButton = DuAEF.DuScriptUI.addButton(ui_listButtonsGroup, 'View Source', DuAEF.DuBinary.toFile(w14_js_l), 'View source code', DuAEF.DuBinary.toFile(w14_js_r)); @@ -302,14 +292,11 @@ ui_source.alignment = ['fill','fill']; var ui_sourceBackButton = DuAEF.DuScriptUI.addButton(ui_sourceGroup, 'Back', DuAEF.DuBinary.toFile(w14_back_l), 'Back to the list', DuAEF.DuBinary.toFile(w14_back_r)); ui_sourceBackButton.alignment = ['fill','bottom']; ui_sourceGroup.visible = false; -//close button -var ui_listCloseButton = DuAEF.DuScriptUI.addButton(ui_listWindow.contents, 'Close', DuAEF.DuBinary.toFile(w14_cancel_m), 'Select item', DuAEF.DuBinary.toFile(w14_cancel_l)); -ui_listCloseButton.alignment = ['fill', 'bottom']; // UI -ui_palette.alignChildren = [ 'fill', 'top' ]; +ui_palette.mainGroup.alignChildren = [ 'fill', 'top' ]; -var ui_cmdGroup = DuAEF.DuScriptUI.addGroup(ui_palette, 'row'); +var ui_cmdGroup = DuAEF.DuScriptUI.addGroup(ui_palette.mainGroup, 'row'); var ui_clearButton = DuAEF.DuScriptUI.addButton(ui_cmdGroup, '', DuAEF.DuBinary.toFile(w14_cancel_m), 'Clear command', DuAEF.DuBinary.toFile(w14_cancel_l)); ui_clearButton.alignment = ['left','center']; var ui_backButton = DuAEF.DuScriptUI.addButton(ui_cmdGroup, '', DuAEF.DuBinary.toFile(w14_previousframe_m), 'Get back', DuAEF.DuBinary.toFile(w14_previousframe_l)); @@ -319,7 +306,7 @@ ui_cmdEdit.alignment = ['fill','fill']; var ui_cmdButton = DuAEF.DuScriptUI.addButton(ui_cmdGroup, '', DuAEF.DuBinary.toFile(w18_play_l), 'Run command', DuAEF.DuBinary.toFile(w18_play_r)); ui_cmdButton.alignment = ['right','center']; -var ui_infoGroup = DuAEF.DuScriptUI.addGroup(ui_palette, 'row'); +var ui_infoGroup = DuAEF.DuScriptUI.addGroup(ui_palette.mainGroup, 'row'); var ui_infoButton = DuAEF.DuScriptUI.addButton(ui_infoGroup, '', DuAEF.DuBinary.toFile(w18_list_l), 'Show all commands...', DuAEF.DuBinary.toFile(w18_list_r)); ui_infoButton.alignment = ['left','center']; var ui_infoText = ui_infoGroup.add( 'statictext', undefined, 'Start typing a command...' ); @@ -330,8 +317,7 @@ populateList( namespaces ); var process = false; -ui_infoButton.addEventListener( "click", showList, true ); -ui_listCloseButton.onClick = showList; +ui_listWindow.tieTo(ui_infoButton); ui_listSourceButton.onClick = showSourceTab; ui_sourceBackButton.onClick = showListTab; ui_list.onChange = loadItem; diff --git a/src/duik_required/Duik16_constraints.jsxinc b/src/duik_required/Duik16_constraints.jsxinc index 31f4b354f..2bc5fba75 100644 --- a/src/duik_required/Duik16_constraints.jsxinc +++ b/src/duik_required/Duik16_constraints.jsxinc @@ -1399,11 +1399,11 @@ function ui_buildConstraints ( ui_constraintsGroup ) if ( settings.data.uiMode > 0 ) { - ui_IKOptionsValidButton.onClick = ui_IKButton.onClick = shared.createIK; + ui_IKOptionsValidButton.onClick = ui_IKButton.onClick = Duik.constraints.ik; ui_IKOptionsWindow.tieTo(ui_IKOptionsButton); ui_ikOptionsSelector.onChange = ui_ikOptionsSelector_changed; - if ( settings.data.uiMode > 0 ) ui_bezierIKButton.onClick = shared.createBezierIK; + if ( settings.data.uiMode > 0 ) ui_bezierIKButton.onClick = Duik.constraints.bezierIk; ui_fkButton.onClick = ui_fkButton_clicked; } diff --git a/src/duik_required/Duik16_footer.jsxinc b/src/duik_required/Duik16_footer.jsxinc index 30201effa..53414c990 100644 --- a/src/duik_required/Duik16_footer.jsxinc +++ b/src/duik_required/Duik16_footer.jsxinc @@ -1,75 +1,16 @@ debugLog.checkTimer("Building Bottom line UI."); -//=== BOTTOM === - -//the bottom line -var ui_bottomGroup = DuAEF.DuScriptUI.addGroup( ui_palette ); -ui_bottomGroup.alignment = [ 'fill', 'bottom' ]; - -//=== BOTTOM LEFT BUTTONS === - -var ui_rxButton = DuAEF.DuScriptUI.addVersionButton( ui_bottomGroup, DuAEF.DuBinary.toFile( w18_rx_l ), DuAEF.DuBinary.toFile( w18_rx_r ) ); -ui_rxButton.alignment = [ 'left', 'bottom' ]; - //=== BOTTOM RIGHT BUTTONS === //SETTINGS -if (typeof noSettings === 'undefined' || !noSettings) -{ - //settings - #include 'Duik16_settings.jsxinc' - - var ui_settingsButton = DuAEF.DuScriptUI.addButton( ui_bottomGroup, '', DuAEF.DuBinary.toFile( w18_settings_l ), "Settings", DuAEF.DuBinary.toFile( w18_settings_r ) ); - ui_settingsButton.alignment = [ 'right', 'bottom' ]; - ui_settingsButton.setHelp( 'Settings', settingsHelp, settingsLink ); - - var ui_settingsGroup = DuAEF.DuScriptUI.addGroup( ui_mainPalette.contents, 'column' ); - ui_buildSettings( ui_settingsGroup ); - ui_settingsGroup.visible = false; - ui_settingsGroup.built = false; -} -//HELP -var ui_bugreportButton = DuAEF.DuScriptUI.addBugButton( ui_bottomGroup ); -ui_bugreportButton.alignment = [ 'right', 'bottom' ]; -var ui_featurerequestButton = DuAEF.DuScriptUI.addFeatureRequestButton( ui_bottomGroup ); -ui_featurerequestButton.alignment = [ 'right', 'bottom' ]; -var ui_helpButton = DuAEF.DuScriptUI.addButton( ui_bottomGroup, '', DuAEF.DuBinary.toFile( w18_help_l ), "Help | About", DuAEF.DuBinary.toFile( w18_help_r ) ); -ui_helpButton.alignment = [ 'right', 'bottom' ]; - -//REFRESH -if ( settings.data.debug ) -{ - var refreshButton = ui_bottomGroup.add( 'button', undefined, 'R' ); - refreshButton.alignment = [ 'right', 'bottom' ]; - refreshButton.maximumSize = [ 20, 20 ]; - refreshButton.onClick = function() - { - ui_mainPalette.refreshUI( thisScriptFile ); - }; -} - -// === EVENTS === - -ui_helpButton.onClick = function() -{ - DuAEF.DuScriptUI.showAbout(); -}; - -if (typeof noSettings === 'undefined' || !noSettings) -{ - ui_settingsButton.onClick = function() - { - //if (!ui_settingsGroup.built) ui_buildSettings(ui_settingsGroup); - ui_settingsGroup.built = true; - ui_palette.visible = false; - ui_settingsGroup.visible = true; - } -} +//settings +#include 'Duik16_settings.jsxinc' +ui_buildSettings( ui_palette.settingsGroup ); //finish debugLog.checkTimer( "Showing UI" ); -DuAEF.DuScriptUI.showUI( ui_mainPalette ); +DuAEF.DuScriptUI.showUI( ui_palette, true ); debugLog.stopTimer( "Duik successfully loaded." ); } diff --git a/src/duik_required/Duik16_header.jsxinc b/src/duik_required/Duik16_header.jsxinc index 664bc972a..16364362c 100644 --- a/src/duik_required/Duik16_header.jsxinc +++ b/src/duik_required/Duik16_header.jsxinc @@ -7,6 +7,7 @@ if (typeof DuAEF_DUIK === 'undefined') DuAEF_DUIK.debugLog = null; }; +//the main function (function(obj) { //THE DUIK API @@ -17,7 +18,7 @@ if (typeof DuAEF_DUIK === 'undefined') #include 'Duik16_helpStrings.jsxinc' //=========================== - var version = '16.2.18'; + var version = '16.2.19'; var scriptName = 'Duik Bassel.2'; DuAEF.init( scriptName, version); DuAEF.forumURL = 'https://forum.rainboxlab.org'; @@ -29,18 +30,10 @@ if (typeof DuAEF_DUIK === 'undefined') DuAEF.newsArgs = 'wp/?call_custom_simple_rss=1&csrp_show_meta=0&csrp_cat=20'; DuAEF.newsUserAgentVersion = 'DUIK/' + version; - - var thisScriptFile = new File($.fileName); //=========================== - //=== HELP PANEL === - DuAEF.DuScriptUI.helpPanel.text = DuAEF.scriptName + " help"; - - #include "Duik16_shared.jsxinc" - //============= INIT ============== - //INIT #include "Duik16_init.jsxinc" @@ -57,11 +50,11 @@ if (typeof DuAEF_DUIK === 'undefined') #include 'Duik16_illustrations.jsxinc' debugLog.log("Icons loaded."); + DuAEF.scriptIcon = DuAEF.DuBinary.toFile(w18_rx_l); + DuAEF.scriptIconOver = DuAEF.DuBinary.toFile(w18_rx_r); + //main palette - var ui_palette = ui_mainPalette.contents.add('group'); - ui_palette.alignment = ['fill','fill']; - ui_palette.orientation = 'column'; - ui_palette.spacing = 2; - ui_palette.margins = 0; + var ui_palette = DuAEF.DuScriptUI.createMainPanel(obj, true, true, true, true, thisScriptFile); + + #include 'api/Duik16_api-functions.jsxinc' - #include 'api/Duik16_api-functions.jsxinc' \ No newline at end of file diff --git a/src/duik_required/Duik16_init.jsxinc b/src/duik_required/Duik16_init.jsxinc index 687cf62d8..3d7d5fc25 100644 --- a/src/duik_required/Duik16_init.jsxinc +++ b/src/duik_required/Duik16_init.jsxinc @@ -1,19 +1,14 @@ -//=========== PALETTE ====================== - -//create main palette -var ui_mainPalette = DuAEF.DuScriptUI.createUI(obj, scriptName, ['fill','fill']); -ui_mainPalette.contents.orientation = 'stack'; - -//=========== GLOBAL VARIABLES ============= -var settingsFile, settings, settingsPath, debugLog; -var showNews = true; +//=========== REINIT FUNCTION =================== +#include "Duik16_reinit.jsxinc" -//=========== FILE AND NETWORK ACCESS =========== +var thisScriptFile = new File($.fileName); -DuAEF.DuScriptUI.askFilesAndNetworkAccess( ui_mainPalette, loadSettings, scriptName, !DuAEF.scriptFirstRun, wipeDuik ); +//===== NEED FILE AND NETWORK ACCESS ===== +//Let's create a temp group we can hide later +obj.orientation = 'stack'; +obj.alignChildren = ['fill', 'fill']; +DuAEF.DuScriptUI.askFilesAndNetworkAccess( obj, loadSettings, scriptName, !DuAEF.scriptFirstRun, wipeDuik ); -//=========== REINIT FUNCTION =================== -#include "Duik16_reinit.jsxinc" //=========== SETTINGS =========== function loadSettings () @@ -33,7 +28,7 @@ function loadSettings () //load settings //general - if (typeof settings.data.scriptFile === 'undefined') settings.data.scriptFile = thisScriptFile.absoluteURI; + if (typeof settings.data.uiMode === 'undefined') settings.data.uiMode = 0; if (typeof settings.data.debug === 'undefined') settings.data.debug = false; if (typeof settings.data.checkUpdatesAtStartup === 'undefined') settings.data.checkUpdatesAtStartup = true; @@ -41,6 +36,10 @@ function loadSettings () if (typeof settings.data.updateCheckDate === 'undefined') settings.data.updateCheckDate = new Date(2018,6,9).getTime(); //this is the public release date of Duik Bassel July, 9th 2018 if (typeof settings.data.showWelcomeScreen === 'undefined') settings.data.showWelcomeScreen = true; DuAEF.debug = settings.data.debug; + + //Let's store this script File + if ( DuAEF.debug ) thisScriptFile = new File( thisScriptFile.parent.parent.absoluteURI + "/" + DuAEF.scriptName + ".jsx" ); + if (typeof settings.data.scriptFile === 'undefined') settings.data.scriptFile = thisScriptFile.absoluteURI; //rigging if (typeof settings.data.currentRiggingPanel === 'undefined') settings.data.currentRiggingPanel = 0; @@ -140,7 +139,7 @@ function loadSettings () //if language has never been set if (typeof settings.data.language === 'undefined') { - var ui_languageSetGroup = DuAEF.DuScriptUI.addGroup(ui_mainPalette.contents,'column'); + var ui_languageSetGroup = DuAEF.DuScriptUI.addGroup(obj, 'column'); ui_languageSetGroup.add('statictext', undefined, "Choose a language among these available languages to launch Duik Bassel.",{multiline:true}); ui_languageSetGroup.add('statictext', undefined, "You can also change the language at any time in the settings tab of Duik",{multiline:true}); @@ -170,7 +169,7 @@ function loadSettings () checkUpdates(); } - DuAEF.DuScriptUI.showUI(ui_mainPalette, false); + DuAEF.DuScriptUI.showUI(obj, false); return; } else @@ -180,8 +179,6 @@ function loadSettings () } } -//================== UPDATES =================== - function checkUpdates() { debugLog.log("Checking for Duik updates."); @@ -234,7 +231,7 @@ function checkUpdates() debugLog.log("New version available: " + newVersion); debugLog.log("Current version is: " + version); - var ui_newVersionGroup = DuAEF.DuScriptUI.addGroup(ui_mainPalette.contents,'column'); + var ui_newVersionGroup = DuAEF.DuScriptUI.addGroup(obj, 'column'); ui_newVersionGroup.alignment = ['fill','fill']; ui_newVersionGroup.alignChildren = ['fill','top']; DuAEF.DuScriptUI.addSeparator(ui_newVersionGroup, "A new version of Duik is available!"); @@ -278,6 +275,5 @@ function checkUpdates() createUI(); } - DuAEF.DuScriptUI.showUI(ui_mainPalette, false); - + DuAEF.DuScriptUI.showUI(obj, false); } diff --git a/src/duik_required/Duik16_mainUI.jsxinc b/src/duik_required/Duik16_mainUI.jsxinc index 5d9c0c546..98ce2fd49 100644 --- a/src/duik_required/Duik16_mainUI.jsxinc +++ b/src/duik_required/Duik16_mainUI.jsxinc @@ -23,7 +23,7 @@ debugLog.checkTimer("Building UI"); //the main TabPanel - var ui_mainTabPanel = DuAEF.DuScriptUI.addTabPanel(ui_palette, settings.data.uiMode < 2); + var ui_mainTabPanel = DuAEF.DuScriptUI.addTabPanel(ui_palette.mainGroup, settings.data.uiMode < 2); DuAEF.DuScriptUI.setBackgroundColor(ui_mainTabPanel.buttonsGroup, DuAEF.DuJS.Color.Colors.ABYSS_GREY); ui_mainTabPanel.buttonsGroup.alignChildren = ['right', 'fill']; diff --git a/src/duik_required/Duik16_reinit.jsxinc b/src/duik_required/Duik16_reinit.jsxinc index 52c41489c..e99089f57 100644 --- a/src/duik_required/Duik16_reinit.jsxinc +++ b/src/duik_required/Duik16_reinit.jsxinc @@ -7,7 +7,7 @@ function wipeDuik () { var settingsFolder = new Folder(folderPath); if (!settingsFolder.exists) return; - var settingsFiles = settingsFolder.getFiles("Duik*.json"); + var settingsFiles = settingsFolder.getFiles("*.json"); var it = new Iterator(settingsFiles); it.do(function (file) { diff --git a/src/duik_required/Duik16_settings.jsxinc b/src/duik_required/Duik16_settings.jsxinc index 1c1079df2..4887089e3 100644 --- a/src/duik_required/Duik16_settings.jsxinc +++ b/src/duik_required/Duik16_settings.jsxinc @@ -106,11 +106,7 @@ function ui_buildSettings(ui_settingsGroup) if (settings.data.uiMode < 2) DuAEF.DuScriptUI.addSeparator(ui_settingsGroup); - var ui_settingsApplyGroup = DuAEF.DuScriptUI.addGroup(ui_settingsGroup, 'row'); - var ui_settingsBackButton = DuAEF.DuScriptUI.addButton(ui_settingsApplyGroup,"Back",DuAEF.DuBinary.toFile(w25_back_m),"Gets back to Duik.",DuAEF.DuBinary.toFile(w25_back_r)); - ui_settingsBackButton.onClick = function () { ui_settingsGroup.visible = false; ui_palette.visible = true; }; - var ui_settingsApplyButton = DuAEF.DuScriptUI.addButton(ui_settingsApplyGroup,"Apply changes",DuAEF.DuBinary.toFile(w25_check_g),"Reloads Duik to apply settings changes.",DuAEF.DuBinary.toFile(w25_check_r)); - ui_settingsApplyButton.onClick = function () { ui_mainPalette.refreshUI( thisScriptFile ); }; + var ui_settingsApplyButton = DuAEF.DuScriptUI.addButton(ui_settingsGroup,"Apply changes",DuAEF.DuBinary.toFile(w25_check_g),"Reloads Duik to apply settings changes.",DuAEF.DuBinary.toFile(w25_check_r)); //========== INIT ============== ui_expertModeSelector.setCurrentIndex(settings.data.uiMode); @@ -138,6 +134,7 @@ function ui_buildSettings(ui_settingsGroup) ui_settingsFileButton.onClick = ui_settingsFileButton_clicked; ui_expertModeSelector.onChange = ui_expertModeSelector_changed; ui_devModeSelector.onChange = ui_devModeSelector_changed; + ui_settingsApplyButton.onClick = function () { ui_palette.refreshUI( thisScriptFile ); }; if (settings.data.uiMode > 0) { diff --git a/src/duik_required/Duik16_shared.jsxinc b/src/duik_required/Duik16_shared.jsxinc index f418ef4f1..07fd82995 100644 --- a/src/duik_required/Duik16_shared.jsxinc +++ b/src/duik_required/Duik16_shared.jsxinc @@ -1,39 +1,5 @@ var shared = {}; -shared.createIK = function () -{ - var layers = DuAEF.DuAE.Comp.unselectLayers(); - if (layers.length == 0) return; - app.beginUndoGroup('Duik | ' + "IK"); - - DuAEF.DuAE.Project.setProgressMode(true); - - var ctrl = DuAEF.Duik.Rigging.ik(layers,null,false,!settings.data.ik3Layer); - if(ctrl.length > 1) ctrl = ctrl[1]; - else ctrl = ctrl[0]; - ctrl.layer.selected = true; - - DuAEF.DuAE.Project.setProgressMode(false); - - app.endUndoGroup(); -} - -shared.createBezierIK = function () -{ - var layers = DuAEF.DuAE.Comp.unselectLayers(); - if (layers.length == 0) return; - app.beginUndoGroup('Duik | ' + "IK"); - - DuAEF.DuAE.Project.setProgressMode(true); - - var ctrl = DuAEF.Duik.Rigging.ik(layers,undefined,true); - ctrl[1].layer.selected = true; - - DuAEF.DuAE.Project.setProgressMode(false); - - app.endUndoGroup(); -} - shared.checkForUpdate = function (showAlert) { if (!DuAEF.DuAE.App.hasFilesAndNetworkAccess) return null; diff --git a/src/duik_required/api/Duik16_api-header.jsxinc b/src/duik_required/api/Duik16_api-header.jsxinc index c00fa87ef..2f6c7601c 100644 --- a/src/duik_required/api/Duik16_api-header.jsxinc +++ b/src/duik_required/api/Duik16_api-header.jsxinc @@ -62,7 +62,7 @@ * })(this); * @author Nicolas Dufresne and contributors * @copyright 2017 - 2020 Nicolas Dufresne, Rainbox Productions - * @version 16.2.18 + * @version 16.2.19 * @license GPL-3.0
* Duik is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/duik_required/api/Duik16_automation_functions.jsxinc b/src/duik_required/api/Duik16_automation_functions.jsxinc index e99539818..9399d72b0 100644 --- a/src/duik_required/api/Duik16_automation_functions.jsxinc +++ b/src/duik_required/api/Duik16_automation_functions.jsxinc @@ -97,6 +97,9 @@ Duik.automation.spring = function ( ) effect(DuAEF.Duik.PseudoEffects.KLEANER.index['Anticipation_Checkbox']).setValue(0); effect(DuAEF.Duik.PseudoEffects.KLEANER.index['Smart Interpolation_Checkbox']).setValue(0); effect(DuAEF.Duik.PseudoEffects.KLEANER.index['Spatial Options_Mode_Popup']).setValue(1); + effect( DuAEF.Duik.PseudoEffects.KLEANER.index['Follow Through_Elasticity random_Slider'] ).setValue(0); + effect( DuAEF.Duik.PseudoEffects.KLEANER.index['Follow Through_Damping random_Slider'] ).setValue(0); + effect( DuAEF.Duik.PseudoEffects.KLEANER.index['Overlap (simulation)_Overlap random_Slider'] ).setValue(0); } } diff --git a/src/duik_required/api/Duik16_constraints_functions.jsxinc b/src/duik_required/api/Duik16_constraints_functions.jsxinc index 162b06d99..8af379c5c 100644 --- a/src/duik_required/api/Duik16_constraints_functions.jsxinc +++ b/src/duik_required/api/Duik16_constraints_functions.jsxinc @@ -54,6 +54,48 @@ Duik.constraints.autorig = function ( bakeStructures ) DuAEF.DuAE.App.endUndoGroup(); } +Duik.constraints.functions.push( { name:"IK", fn:"Duik.constraints.ik()" } ); +/** + * Create IK using selected layers + */ +Duik.constraints.ik = function ( ) +{ + var layers = DuAEF.DuAE.Comp.unselectLayers(); + if (layers.length == 0) return; + DuAEF.DuAE.App.beginUndoGroup( "IK" ); + + DuAEF.DuAE.Project.setProgressMode(true); + + var ctrl = DuAEF.Duik.Rigging.ik(layers,null,false,!settings.data.ik3Layer); + if(ctrl.length > 1) ctrl = ctrl[1]; + else ctrl = ctrl[0]; + ctrl.layer.selected = true; + + DuAEF.DuAE.Project.setProgressMode(false); + + DuAEF.DuAE.App.endUndoGroup(); +} + +Duik.constraints.functions.push( { name:"Bézier IK", fn:"Duik.constraints.bezierIk()" } ); +/** + * Create Bézier IK using selected layers + */ +Duik.constraints.bezierIk = function ( ) +{ + var layers = DuAEF.DuAE.Comp.unselectLayers(); + if (layers.length == 0) return; + DuAEF.DuAE.App.beginUndoGroup( "Bézier IK" ); + + DuAEF.DuAE.Project.setProgressMode(true); + + var ctrl = DuAEF.Duik.Rigging.ik(layers,undefined,true); + ctrl[1].layer.selected = true; + + DuAEF.DuAE.Project.setProgressMode(false); + + app.endUndoGroup(); +} + Duik.constraints.functions.push( { name:"Connector", fn:"Duik.constraints.quickConnector()" } ); /** * Quick Connector