From 2cc1f73487b3c0965172fb13fb77e62bf5eaa0aa Mon Sep 17 00:00:00 2001 From: benfry Date: Mon, 29 Sep 2008 22:25:23 +0000 Subject: [PATCH] cleaning up the rest of the matrix api and implementations --- core/src/processing/core/PMatrix2D.java | 46 ++++++++--- core/src/processing/core/PMatrix3D.java | 103 ++++++++++++++++-------- 2 files changed, 103 insertions(+), 46 deletions(-) diff --git a/core/src/processing/core/PMatrix2D.java b/core/src/processing/core/PMatrix2D.java index 6a16a670c..5af27e2b7 100644 --- a/core/src/processing/core/PMatrix2D.java +++ b/core/src/processing/core/PMatrix2D.java @@ -81,12 +81,16 @@ public final class PMatrix2D implements PMatrix { } - public void set(PMatrix matrix) { - PMatrix2D src = (PMatrix2D) matrix; - + public void set(PMatrix2D src) { set(src.m00, src.m01, src.m02, src.m10, src.m11, src.m12); } + + + public void set(PMatrix3D src) { + //PGraphics.showError("Cannot use set(PMatrix3D) on a PMatrix2D."); + throw new IllegalArgumentException("Cannot use set(PMatrix3D) on a PMatrix2D."); + } public void set(float[] source) { @@ -119,6 +123,11 @@ public final class PMatrix2D implements PMatrix { m02 = tx*m00 + ty*m01 + m02; m12 = tx*m10 + ty*m11 + m12; } + + + public void translate(float x, float y, float z) { + throw new IllegalArgumentException("Cannot use translate(x, y, z) on a PMatrix2D."); + } // Implementation roughly based on AffineTransform. @@ -171,14 +180,14 @@ public final class PMatrix2D implements PMatrix { /** * Multiply this matrix by another. */ - public void apply(PMatrix m) { - if (m instanceof PMatrix2D) { - PMatrix2D source = (PMatrix2D) m; - apply(source.m00, source.m01, source.m02, - source.m10, source.m11, source.m12); - } else if (m instanceof PMatrix3D) { - PGraphics.showError("Cannot use apply(PMatrix3D) on a PMatrix2D."); - } + public void apply(PMatrix2D source) { + apply(source.m00, source.m01, source.m02, + source.m10, source.m11, source.m12); + } + + + public void apply(PMatrix3D source) { + throw new IllegalArgumentException("Cannot use apply(PMatrix3D) on a PMatrix2D."); } @@ -202,7 +211,7 @@ public final class PMatrix2D implements PMatrix { float n10, float n11, float n12, float n13, float n20, float n21, float n22, float n23, float n30, float n31, float n32, float n33) { - + throw new IllegalArgumentException("Cannot use this version of apply() on a PMatrix2D."); } @@ -213,6 +222,11 @@ public final class PMatrix2D implements PMatrix { preApply(left.m00, left.m01, left.m02, left.m10, left.m11, left.m12); } + + + public void preApply(PMatrix3D left) { + throw new IllegalArgumentException("Cannot use preApply(PMatrix3D) on a PMatrix2D."); + } public void preApply(float n00, float n01, float n02, @@ -237,6 +251,14 @@ public final class PMatrix2D implements PMatrix { } + public void preApply(float n00, float n01, float n02, float n03, + float n10, float n11, float n12, float n13, + float n20, float n21, float n22, float n23, + float n30, float n31, float n32, float n33) { + throw new IllegalArgumentException("Cannot use this version of preApply() on a PMatrix2D."); + } + + ////////////////////////////////////////////////////////////// diff --git a/core/src/processing/core/PMatrix3D.java b/core/src/processing/core/PMatrix3D.java index 0ab4bfe87..909c2418e 100644 --- a/core/src/processing/core/PMatrix3D.java +++ b/core/src/processing/core/PMatrix3D.java @@ -114,6 +114,14 @@ public final class PMatrix3D implements PMatrix /*, PConstants*/ { } + public void set(PMatrix2D src) { + set(src.m00, src.m01, 0, src.m02, + src.m10, src.m11, 0, src.m12, + 0, 0, 1, 0, + 0, 0, 0, 1); + } + + public void set(PMatrix3D src) { set(src.m00, src.m01, src.m02, src.m03, src.m10, src.m11, src.m12, src.m13, @@ -123,28 +131,43 @@ public final class PMatrix3D implements PMatrix /*, PConstants*/ { public void set(float[] source) { - m00 = source[0]; - m01 = source[1]; - m02 = source[2]; - m03 = source[3]; + if (source.length == 6) { + set(source[0], source[1], source[2], + source[3], source[4], source[5]); - m10 = source[4]; - m11 = source[5]; - m12 = source[6]; - m13 = source[7]; + } else if (source.length == 16) { + m00 = source[0]; + m01 = source[1]; + m02 = source[2]; + m03 = source[3]; - m20 = source[8]; - m21 = source[9]; - m22 = source[10]; - m23 = source[11]; + m10 = source[4]; + m11 = source[5]; + m12 = source[6]; + m13 = source[7]; - m30 = source[12]; - m31 = source[13]; - m32 = source[14]; - m33 = source[15]; + m20 = source[8]; + m21 = source[9]; + m22 = source[10]; + m23 = source[11]; + + m30 = source[12]; + m31 = source[13]; + m32 = source[14]; + m33 = source[15]; + } } + + public void set(float m00, float m01, float m02, + float m10, float m11, float m12) { + set(m00, m01, 0, m02, + m10, m11, 0, m12, + 0, 0, 1, 0, + 0, 0, 0, 1); + } + public void set(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23, @@ -234,24 +257,19 @@ public final class PMatrix3D implements PMatrix /*, PConstants*/ { } - /** - * Multiply this matrix by another. - */ - public void apply(PMatrix matrix) { - if (matrix instanceof PMatrix2D) { - PMatrix2D source = (PMatrix2D) matrix; - apply(source.m00, source.m01, 0, source.m02, - source.m10, source.m11, 0, source.m12, - 0, 0, 1, 0, - 0, 0, 0, 1); - - } else if (matrix instanceof PMatrix3D) { - PMatrix3D source = (PMatrix3D) matrix; - apply(source.m00, source.m01, source.m02, source.m03, - source.m10, source.m11, source.m12, source.m13, - source.m20, source.m21, source.m22, source.m23, - source.m30, source.m31, source.m32, source.m33); - } + public void apply(PMatrix2D source) { + apply(source.m00, source.m01, 0, source.m02, + source.m10, source.m11, 0, source.m12, + 0, 0, 1, 0, + 0, 0, 0, 1); + } + + + public void apply(PMatrix3D source) { + apply(source.m00, source.m01, source.m02, source.m03, + source.m10, source.m11, source.m12, source.m13, + source.m20, source.m21, source.m22, source.m23, + source.m30, source.m31, source.m32, source.m33); } @@ -296,6 +314,14 @@ public final class PMatrix3D implements PMatrix /*, PConstants*/ { } + public void preApply(PMatrix2D left) { + preApply(left.m00, left.m01, 0, left.m02, + left.m10, left.m11, 0, left.m12, + 0, 0, 1, 0, + 0, 0, 0, 1); + } + + /** * Apply another matrix to the left of this one. */ @@ -306,7 +332,16 @@ public final class PMatrix3D implements PMatrix /*, PConstants*/ { left.m30, left.m31, left.m32, left.m33); } + + public void preApply(float n00, float n01, float n02, + float n10, float n11, float n12) { + preApply(n00, n01, 0, n02, + n10, n11, 0, n12, + 0, 0, 1, 0, + 0, 0, 0, 1); + } + public void preApply(float n00, float n01, float n02, float n03, float n10, float n11, float n12, float n13, float n20, float n21, float n22, float n23,