diff --git a/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties b/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties
index 0cdd08bdc..45a79e487 100644
--- a/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties
+++ b/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties
@@ -1,4 +1,4 @@
-currentVersion=OpenSim 4.4
+currentVersion=OpenSim 4.5
SPLASH_HEIGHT=472
SPLASH_WIDTH=380
SplashProgressBarBounds=0,466,380,6
@@ -6,5 +6,5 @@ SplashProgressBarColor=0xD1E27F
SplashRunningTextBounds=8,455,163,8
SplashRunningTextColor=0xFFFFFF
SplashRunningTextFontSize=15
-LBL_splash_window_title=Starting OpenSim 4.4
+LBL_splash_window_title=Starting OpenSim 4.5
SplashShowProgressBar=true
diff --git a/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/splash.gif b/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/splash.gif
index 84487f583..e280f63a8 100644
Binary files a/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/splash.gif and b/Gui/opensim/branding/core/core.jar/org/netbeans/core/startup/splash.gif differ
diff --git a/Gui/opensim/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties b/Gui/opensim/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties
index 86ce1852d..34691af98 100644
--- a/Gui/opensim/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties
+++ b/Gui/opensim/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties
@@ -1,3 +1,3 @@
-CTL_MainWindow_Title=OpenSim 4.4
-CTL_MainWindow_Title_No_Project=OpenSim 4.4
+CTL_MainWindow_Title=OpenSim 4.5
+CTL_MainWindow_Title_No_Project=OpenSim 4.5
diff --git a/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/OpenDoxygenAction.java b/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/OpenDoxygenAction.java
index 6f7d469d9..b3757ae4e 100644
--- a/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/OpenDoxygenAction.java
+++ b/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/OpenDoxygenAction.java
@@ -47,7 +47,7 @@ public final class OpenDoxygenAction extends CallableSystemAction {
public void performAction() {
try {
String basePath = TheApp.getCrossPlatformInstallDir();
- String doxygenPath = BrowserLauncher.isConnected() ? "https://simtk.org/api_docs/opensim/api_docs44/" :
+ String doxygenPath = BrowserLauncher.isConnected() ? "https://simtk.org/api_docs/opensim/api_docs45/" :
new File(basePath + "/sdk/doc/OpenSimAPI.html").toURI().toURL().toString();
BrowserLauncher.openURL(doxygenPath);
diff --git a/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/images/splash.gif b/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/images/splash.gif
index 741f423d1..e280f63a8 100644
Binary files a/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/images/splash.gif and b/Gui/opensim/helpUtils/src/org/opensim/helputils/helpmenu/images/splash.gif differ
diff --git a/Gui/opensim/modeling/src/org/opensim/modeling/MocoTrajectory.java b/Gui/opensim/modeling/src/org/opensim/modeling/MocoTrajectory.java
index 5d1f62e3b..79edea599 100644
--- a/Gui/opensim/modeling/src/org/opensim/modeling/MocoTrajectory.java
+++ b/Gui/opensim/modeling/src/org/opensim/modeling/MocoTrajectory.java
@@ -623,6 +623,14 @@ public int getNumSpeeds() {
return opensimMocoJNI.MocoTrajectory_getNumSpeeds(swigCPtr, this);
}
+ public int getNumMultibodyStates() {
+ return opensimMocoJNI.MocoTrajectory_getNumMultibodyStates(swigCPtr, this);
+ }
+
+ public int getNumAuxiliaryStates() {
+ return opensimMocoJNI.MocoTrajectory_getNumAuxiliaryStates(swigCPtr, this);
+ }
+
public int getNumAccelerations() {
return opensimMocoJNI.MocoTrajectory_getNumAccelerations(swigCPtr, this);
}
@@ -659,6 +667,14 @@ public StdVectorString getSpeedNames() {
return new StdVectorString(opensimMocoJNI.MocoTrajectory_getSpeedNames(swigCPtr, this), true);
}
+ public StdVectorString getMultibodyStateNames() {
+ return new StdVectorString(opensimMocoJNI.MocoTrajectory_getMultibodyStateNames(swigCPtr, this), true);
+ }
+
+ public StdVectorString getAuxiliaryStateNames() {
+ return new StdVectorString(opensimMocoJNI.MocoTrajectory_getAuxiliaryStateNames(swigCPtr, this), true);
+ }
+
public StdVectorString getAccelerationNames() {
return new StdVectorString(opensimMocoJNI.MocoTrajectory_getAccelerationNames(swigCPtr, this), true);
}
@@ -715,6 +731,14 @@ public Matrix getSpeedsTrajectory() {
return new Matrix(opensimMocoJNI.MocoTrajectory_getSpeedsTrajectory(swigCPtr, this), true);
}
+ public Matrix getMultibodyStatesTrajectory() {
+ return new Matrix(opensimMocoJNI.MocoTrajectory_getMultibodyStatesTrajectory(swigCPtr, this), true);
+ }
+
+ public Matrix getAuxiliaryStatesTrajectory() {
+ return new Matrix(opensimMocoJNI.MocoTrajectory_getAuxiliaryStatesTrajectory(swigCPtr, this), true);
+ }
+
public Matrix getAccelerationsTrajectory() {
return new Matrix(opensimMocoJNI.MocoTrajectory_getAccelerationsTrajectory(swigCPtr, this), true);
}
diff --git a/Gui/opensim/modeling/src/org/opensim/modeling/Model.java b/Gui/opensim/modeling/src/org/opensim/modeling/Model.java
index b87c0e312..cc229de35 100644
--- a/Gui/opensim/modeling/src/org/opensim/modeling/Model.java
+++ b/Gui/opensim/modeling/src/org/opensim/modeling/Model.java
@@ -1217,6 +1217,27 @@ public SWIGTYPE_p_SimTK__GeneralForceSubsystem updForceSubsystem() {
return new SWIGTYPE_p_SimTK__GeneralForceSubsystem(opensimSimulationJNI.Model_updForceSubsystem(swigCPtr, this), false);
}
+ /**
+ * (Advanced) Get read only access to internal Simbody RigidBodyForces at Dynamics stage *
+ */
+ public VectorOfSpatialVec getRigidBodyForces(State state) {
+ return new VectorOfSpatialVec(opensimSimulationJNI.Model_getRigidBodyForces(swigCPtr, this, State.getCPtr(state), state), false);
+ }
+
+ /**
+ * (Advanced) Get read only access to internal Simbody Mobility Forces at Dynamics stage *
+ */
+ public Vector getMobilityForces(State state) {
+ return new Vector(opensimSimulationJNI.Model_getMobilityForces(swigCPtr, this, State.getCPtr(state), state), false);
+ }
+
+ /**
+ * (Advanced) Get read only access to internal Simbody Body Forces due to Gravity *
+ */
+ public VectorOfSpatialVec getGravityBodyForces(State state) {
+ return new VectorOfSpatialVec(opensimSimulationJNI.Model_getGravityBodyForces(swigCPtr, this, State.getCPtr(state), state), false);
+ }
+
/**
* ** Perform computations that depend only on time and earlier stages. *
*/
diff --git a/Gui/opensim/modeling/src/org/opensim/modeling/PolynomialPathFitter.java b/Gui/opensim/modeling/src/org/opensim/modeling/PolynomialPathFitter.java
index 85d024a06..b4c8d21d2 100644
--- a/Gui/opensim/modeling/src/org/opensim/modeling/PolynomialPathFitter.java
+++ b/Gui/opensim/modeling/src/org/opensim/modeling/PolynomialPathFitter.java
@@ -197,11 +197,12 @@ public PolynomialPathFitter(PolynomialPathFitter arg0) {
* polynomial-based path objects will be fitted.
*
* The model should be provided using a `ModelProcessor` object. We expect
- * the model to contain at least one path object derived from `AbstractGeometryPath`
- * and does not already contain any `FunctionBasedPath` objects. The bounds
- * for clamped coordinates are obeyed during the fitting process. Locked
- * coordinates are unlocked if data is provided for them, or replaced with
- * WeldJoints if no data is provided for them.
+ * the model to contain at least one path object derived from
+ * `AbstractGeometryPath` and does not already contain any
+ * `FunctionBasedPath` objects. The bounds for clamped coordinates are
+ * obeyed during the fitting process. Locked coordinates are unlocked if
+ * data is provided for them, or replaced with WeldJoints if no data is
+ * provided for them.
*/
public void setModel(ModelProcessor model) {
opensimActuatorsAnalysesToolsJNI.PolynomialPathFitter_setModel(swigCPtr, this, ModelProcessor.getCPtr(model), model);
diff --git a/Gui/opensim/modeling/src/org/opensim/modeling/SmoothSegmentedFunction.java b/Gui/opensim/modeling/src/org/opensim/modeling/SmoothSegmentedFunction.java
index 15407868c..8a9b223f6 100644
--- a/Gui/opensim/modeling/src/org/opensim/modeling/SmoothSegmentedFunction.java
+++ b/Gui/opensim/modeling/src/org/opensim/modeling/SmoothSegmentedFunction.java
@@ -142,6 +142,75 @@ public double calcDerivative(double x, int order) {
return opensimCommonJNI.SmoothSegmentedFunction_calcDerivative(swigCPtr, this, x, order);
}
+ static public class ValueAndDerivative {
+ private transient long swigCPtr;
+ protected transient boolean swigCMemOwn;
+
+ public ValueAndDerivative(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+ public static long getCPtr(ValueAndDerivative obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+ public static long swigRelease(ValueAndDerivative obj) {
+ long ptr = 0;
+ if (obj != null) {
+ if (!obj.swigCMemOwn)
+ throw new RuntimeException("Cannot release ownership as memory is not owned");
+ ptr = obj.swigCPtr;
+ obj.swigCMemOwn = false;
+ obj.delete();
+ }
+ return ptr;
+ }
+
+ @SuppressWarnings("deprecation")
+ protected void finalize() {
+ delete();
+ }
+
+ public synchronized void delete() {
+ if (swigCPtr != 0) {
+ if (swigCMemOwn) {
+ swigCMemOwn = false;
+ opensimCommonJNI.delete_SmoothSegmentedFunction_ValueAndDerivative(swigCPtr);
+ }
+ swigCPtr = 0;
+ }
+ }
+
+ public void setValue(double value) {
+ opensimCommonJNI.SmoothSegmentedFunction_ValueAndDerivative_value_set(swigCPtr, this, value);
+ }
+
+ public double getValue() {
+ return opensimCommonJNI.SmoothSegmentedFunction_ValueAndDerivative_value_get(swigCPtr, this);
+ }
+
+ public void setDerivative(double value) {
+ opensimCommonJNI.SmoothSegmentedFunction_ValueAndDerivative_derivative_set(swigCPtr, this, value);
+ }
+
+ public double getDerivative() {
+ return opensimCommonJNI.SmoothSegmentedFunction_ValueAndDerivative_derivative_get(swigCPtr, this);
+ }
+
+ public ValueAndDerivative() {
+ this(opensimCommonJNI.new_SmoothSegmentedFunction_ValueAndDerivative(), true);
+ }
+
+ }
+
+ /**
+ * Returns the same as calcValue(x) and calcDerivative(x, 1), but more
+ */
+ public SmoothSegmentedFunction.ValueAndDerivative calcValueAndFirstDerivative(double x) {
+ return new SmoothSegmentedFunction.ValueAndDerivative(opensimCommonJNI.SmoothSegmentedFunction_calcValueAndFirstDerivative(swigCPtr, this, x), true);
+ }
+
/**
* This will return the value of the integral of this objects curve
* evaluated at x.
diff --git a/Gui/opensim/modeling/src/org/opensim/modeling/opensimCommonJNI.java b/Gui/opensim/modeling/src/org/opensim/modeling/opensimCommonJNI.java
index 0cf52edf7..26a4cd751 100644
--- a/Gui/opensim/modeling/src/org/opensim/modeling/opensimCommonJNI.java
+++ b/Gui/opensim/modeling/src/org/opensim/modeling/opensimCommonJNI.java
@@ -1078,6 +1078,13 @@ public class opensimCommonJNI {
public final static native void delete_SmoothSegmentedFunction(long jarg1);
public final static native double SmoothSegmentedFunction_calcValue(long jarg1, SmoothSegmentedFunction jarg1_, double jarg2);
public final static native double SmoothSegmentedFunction_calcDerivative(long jarg1, SmoothSegmentedFunction jarg1_, double jarg2, int jarg3);
+ public final static native void SmoothSegmentedFunction_ValueAndDerivative_value_set(long jarg1, SmoothSegmentedFunction.ValueAndDerivative jarg1_, double jarg2);
+ public final static native double SmoothSegmentedFunction_ValueAndDerivative_value_get(long jarg1, SmoothSegmentedFunction.ValueAndDerivative jarg1_);
+ public final static native void SmoothSegmentedFunction_ValueAndDerivative_derivative_set(long jarg1, SmoothSegmentedFunction.ValueAndDerivative jarg1_, double jarg2);
+ public final static native double SmoothSegmentedFunction_ValueAndDerivative_derivative_get(long jarg1, SmoothSegmentedFunction.ValueAndDerivative jarg1_);
+ public final static native long new_SmoothSegmentedFunction_ValueAndDerivative();
+ public final static native void delete_SmoothSegmentedFunction_ValueAndDerivative(long jarg1);
+ public final static native long SmoothSegmentedFunction_calcValueAndFirstDerivative(long jarg1, SmoothSegmentedFunction jarg1_, double jarg2);
public final static native double SmoothSegmentedFunction_calcIntegral(long jarg1, SmoothSegmentedFunction jarg1_, double jarg2);
public final static native boolean SmoothSegmentedFunction_isIntegralAvailable(long jarg1, SmoothSegmentedFunction jarg1_);
public final static native boolean SmoothSegmentedFunction_isIntegralComputedLeftToRight(long jarg1, SmoothSegmentedFunction jarg1_);
diff --git a/Gui/opensim/modeling/src/org/opensim/modeling/opensimMocoJNI.java b/Gui/opensim/modeling/src/org/opensim/modeling/opensimMocoJNI.java
index 9bdd97a94..10409998a 100644
--- a/Gui/opensim/modeling/src/org/opensim/modeling/opensimMocoJNI.java
+++ b/Gui/opensim/modeling/src/org/opensim/modeling/opensimMocoJNI.java
@@ -1134,6 +1134,8 @@ public class opensimMocoJNI {
public final static native int MocoTrajectory_getNumDerivatives(long jarg1, MocoTrajectory jarg1_);
public final static native int MocoTrajectory_getNumValues(long jarg1, MocoTrajectory jarg1_);
public final static native int MocoTrajectory_getNumSpeeds(long jarg1, MocoTrajectory jarg1_);
+ public final static native int MocoTrajectory_getNumMultibodyStates(long jarg1, MocoTrajectory jarg1_);
+ public final static native int MocoTrajectory_getNumAuxiliaryStates(long jarg1, MocoTrajectory jarg1_);
public final static native int MocoTrajectory_getNumAccelerations(long jarg1, MocoTrajectory jarg1_);
public final static native int MocoTrajectory_getNumDerivativesWithoutAccelerations(long jarg1, MocoTrajectory jarg1_);
public final static native int MocoTrajectory_getNumParameters(long jarg1, MocoTrajectory jarg1_);
@@ -1143,6 +1145,8 @@ public class opensimMocoJNI {
public final static native long MocoTrajectory_getDerivativeNames(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getValueNames(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getSpeedNames(long jarg1, MocoTrajectory jarg1_);
+ public final static native long MocoTrajectory_getMultibodyStateNames(long jarg1, MocoTrajectory jarg1_);
+ public final static native long MocoTrajectory_getAuxiliaryStateNames(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getAccelerationNames(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getDerivativeNamesWithoutAccelerations(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getParameterNames(long jarg1, MocoTrajectory jarg1_);
@@ -1157,6 +1161,8 @@ public class opensimMocoJNI {
public final static native long MocoTrajectory_getDerivativesTrajectory(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getValuesTrajectory(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getSpeedsTrajectory(long jarg1, MocoTrajectory jarg1_);
+ public final static native long MocoTrajectory_getMultibodyStatesTrajectory(long jarg1, MocoTrajectory jarg1_);
+ public final static native long MocoTrajectory_getAuxiliaryStatesTrajectory(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getAccelerationsTrajectory(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getDerivativesWithoutAccelerationsTrajectory(long jarg1, MocoTrajectory jarg1_);
public final static native long MocoTrajectory_getParameters(long jarg1, MocoTrajectory jarg1_);
diff --git a/Gui/opensim/modeling/src/org/opensim/modeling/opensimSimulationJNI.java b/Gui/opensim/modeling/src/org/opensim/modeling/opensimSimulationJNI.java
index 66107d9ee..ab9b2cd74 100644
--- a/Gui/opensim/modeling/src/org/opensim/modeling/opensimSimulationJNI.java
+++ b/Gui/opensim/modeling/src/org/opensim/modeling/opensimSimulationJNI.java
@@ -5343,6 +5343,9 @@ public class opensimSimulationJNI {
public final static native long Model_updGravityForce(long jarg1, Model jarg1_);
public final static native long Model_getForceSubsystem(long jarg1, Model jarg1_);
public final static native long Model_updForceSubsystem(long jarg1, Model jarg1_);
+ public final static native long Model_getRigidBodyForces(long jarg1, Model jarg1_, long jarg2, State jarg2_);
+ public final static native long Model_getMobilityForces(long jarg1, Model jarg1_, long jarg2, State jarg2_);
+ public final static native long Model_getGravityBodyForces(long jarg1, Model jarg1_, long jarg2, State jarg2_);
public final static native void Model_realizeTime(long jarg1, Model jarg1_, long jarg2, State jarg2_);
public final static native void Model_realizePosition(long jarg1, Model jarg1_, long jarg2, State jarg2_);
public final static native void Model_realizeVelocity(long jarg1, Model jarg1_, long jarg2, State jarg2_);
diff --git a/opensim-visualizer b/opensim-visualizer
index f2648aa0a..7d784527a 160000
--- a/opensim-visualizer
+++ b/opensim-visualizer
@@ -1 +1 @@
-Subproject commit f2648aa0a815d0a4f4afc1621ca620b13602f8f4
+Subproject commit 7d784527a25c48b71417608f280de40639119d23