diff --git a/CHANGELOG.txt b/CHANGELOG.txt index dbe7c542..1ac07d71 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,11 @@ + +0.3.1 +===== +- Fixed issue #17 +- Fixed NPE in DemoBoxStack-'x' +- Added newArray(size) methods to DVector3 and DMatrix3 + + 0.3.0 ===== Migration to 0.13.1 diff --git a/core/src/main/java/org/ode4j/math/DMatrix3.java b/core/src/main/java/org/ode4j/math/DMatrix3.java index 15862404..c047735d 100644 --- a/core/src/main/java/org/ode4j/math/DMatrix3.java +++ b/core/src/main/java/org/ode4j/math/DMatrix3.java @@ -967,4 +967,17 @@ public void getColumn1(DVector3 result) { public void getColumn2(DVector3 result) { result.set(get02(), get12(), get22()); } + + /** + * Create an array of DVector instances. + * @param size + * @return AN array of DVector + */ + public final static DMatrix3[] newArray(int size) { + DMatrix3[] a = new DMatrix3[size]; + for (int i = 0; i < size; i++) { + a[i] = new DMatrix3(); + } + return a; + } } diff --git a/core/src/main/java/org/ode4j/math/DVector3.java b/core/src/main/java/org/ode4j/math/DVector3.java index 57d789a1..2ad4e6c8 100644 --- a/core/src/main/java/org/ode4j/math/DVector3.java +++ b/core/src/main/java/org/ode4j/math/DVector3.java @@ -701,6 +701,19 @@ public final void eqProd(DMatrix3C m, DVector3C v2) { set1( m.get10()*v2.get0()+ m.get11()*v2.get1()+ m.get12()*v2.get2() ); set2( m.get20()*v2.get0()+ m.get21()*v2.get1()+ m.get22()*v2.get2() ); } + + /** + * Create an array of DVector instances. + * @param size + * @return AN array of DVector + */ + public final static DVector3[] newArray(int size) { + DVector3[] a = new DVector3[size]; + for (int i = 0; i < size; i++) { + a[i] = new DVector3(); + } + return a; + } } diff --git a/core/src/main/java/org/ode4j/ode/internal/CollideCylinderBox.java b/core/src/main/java/org/ode4j/ode/internal/CollideCylinderBox.java index 188ae69e..02d8f90e 100644 --- a/core/src/main/java/org/ode4j/ode/internal/CollideCylinderBox.java +++ b/core/src/main/java/org/ode4j/ode/internal/CollideCylinderBox.java @@ -198,11 +198,10 @@ private void _cldInitCylinderBox() // temp index int i = 0; - DVector3[] vTempBoxVertices = new DVector3[8]; + DVector3[] vTempBoxVertices = DVector3.newArray(8); // transform vertices in absolute space for(i=0; i < 8; i++) { - vTempBoxVertices[i] = new DVector3(); dMultiplyMat3Vec3(m_mBoxRot,m_avBoxVertices[i], vTempBoxVertices[i]); dVector3Add(vTempBoxVertices[i], m_vBoxPos, m_avBoxVertices[i]); } @@ -898,24 +897,23 @@ private void _cldClipBoxToCylinder() } // find the vertices of box polygon - DVector3[] avPoints = new DVector3[4]; - DVector3[] avTempArray1 = new DVector3[MAX_CYLBOX_CLIP_POINTS]; - DVector3[] avTempArray2 = new DVector3[MAX_CYLBOX_CLIP_POINTS]; - for (int ii = 0; ii < avPoints.length; ii++) avPoints[ii] = new DVector3(); - - int i=0; - for(i=0; i 0) { - average_lvel_buffer = new DVector3[adis.average_samples]; - for (int i = 0; i < average_lvel_buffer.length; i++) - average_lvel_buffer[i] = new DVector3(); - average_avel_buffer = new DVector3[adis.average_samples]; - for (int i = 0; i < average_avel_buffer.length; i++) - average_avel_buffer[i] = new DVector3(); + average_lvel_buffer = DVector3.newArray(adis.average_samples); + average_avel_buffer = DVector3.newArray(adis.average_samples); } else { diff --git a/core/src/main/java/org/ode4j/ode/internal/joints/DxJointAMotor.java b/core/src/main/java/org/ode4j/ode/internal/joints/DxJointAMotor.java index a6e0ad37..c4570354 100644 --- a/core/src/main/java/org/ode4j/ode/internal/joints/DxJointAMotor.java +++ b/core/src/main/java/org/ode4j/ode/internal/joints/DxJointAMotor.java @@ -537,7 +537,7 @@ AMotorMode dJointGetAMotorMode() void dJointAddAMotorTorques( double torque1, double torque2, double torque3 ) { - DVector3[] axes = new DVector3[3]; + DVector3[] axes = new DVector3[]{new DVector3(), new DVector3(), new DVector3()}; if ( _num == 0 ) return; diff --git a/core/src/main/java/org/ode4j/ode/internal/joints/DxJointLMotor.java b/core/src/main/java/org/ode4j/ode/internal/joints/DxJointLMotor.java index b4c91fd4..de7e3f13 100644 --- a/core/src/main/java/org/ode4j/ode/internal/joints/DxJointLMotor.java +++ b/core/src/main/java/org/ode4j/ode/internal/joints/DxJointLMotor.java @@ -111,10 +111,7 @@ void getSureMaxInfo( SureMaxInfo info ) getInfo2( double worldFPS, double worldERP, DxJoint.Info2Descr info ) { int row = 0; - DVector3[] ax = new DVector3[3]; - for (int i = 0; i<3; i++ ) { - ax[i] = new DVector3(); - } + DVector3[] ax = new DVector3[]{new DVector3(), new DVector3(), new DVector3()}; computeGlobalAxes( ax ); diff --git a/demo/src/main/java/org/ode4j/demo/DemoBoxstack.java b/demo/src/main/java/org/ode4j/demo/DemoBoxstack.java index 24271520..c28c1805 100644 --- a/demo/src/main/java/org/ode4j/demo/DemoBoxstack.java +++ b/demo/src/main/java/org/ode4j/demo/DemoBoxstack.java @@ -344,8 +344,8 @@ public void command (char cmd) DMass m2 = OdeHelper.createMass(); m.setZero(); - DVector3[] dpos = new DVector3[GPB]; // delta-positions for encapsulated geometries - DMatrix3[] drot = new DMatrix3[GPB]; + DVector3[] dpos = DVector3.newArray(GPB); // delta-positions for encapsulated geometries + DMatrix3[] drot = DMatrix3.newArray(GPB); // set random delta positions for (j=0; j