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 @@
-
+
@@ -126,7 +126,7 @@
@@ -195,7 +195,7 @@
@@ -348,7 +348,7 @@
@@ -437,7 +437,7 @@
@@ -851,7 +851,7 @@
@@ -1052,7 +1052,7 @@
@@ -1237,7 +1237,7 @@
@@ -1326,7 +1326,7 @@
@@ -1415,7 +1415,7 @@
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 @@
-
+
@@ -279,7 +279,7 @@
@@ -519,7 +519,7 @@
@@ -608,7 +608,7 @@
@@ -697,7 +697,7 @@
@@ -875,7 +875,7 @@
@@ -964,7 +964,7 @@
@@ -1053,7 +1053,7 @@
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 @@
-
+
@@ -126,7 +126,7 @@
@@ -279,7 +279,7 @@
@@ -368,7 +368,7 @@
@@ -457,7 +457,7 @@
@@ -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 @@
-
+
@@ -126,7 +126,7 @@
@@ -279,7 +279,7 @@
@@ -438,7 +438,7 @@
@@ -568,6 +568,95 @@ Parameters:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create Bézier IK using selected layers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -597,7 +686,7 @@
@@ -795,7 +884,7 @@
@@ -884,7 +973,7 @@
@@ -1014,6 +1103,95 @@ Parameters:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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 @@
-
+
@@ -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 @@
-
+
@@ -66,7 +66,7 @@ Duik
- Version:
-
+
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 @@
-
+
@@ -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 @@
-
+
@@ -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 @@
-
+
@@ -118,7 +118,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 <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 @@
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 @@
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 @@
-
+
@@ -66,7 +66,7 @@ Duik
- Version:
-
+
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