15b539461dcc159bd89297443780d635ccc5e3564John Hoford/*
25b539461dcc159bd89297443780d635ccc5e3564John Hoford * Copyright (C) 2015 The Android Open Source Project
35b539461dcc159bd89297443780d635ccc5e3564John Hoford *
45b539461dcc159bd89297443780d635ccc5e3564John Hoford * Licensed under the Apache License, Version 2.0 (the "License");
55b539461dcc159bd89297443780d635ccc5e3564John Hoford * you may not use this file except in compliance with the License.
65b539461dcc159bd89297443780d635ccc5e3564John Hoford * You may obtain a copy of the License at
75b539461dcc159bd89297443780d635ccc5e3564John Hoford *
85b539461dcc159bd89297443780d635ccc5e3564John Hoford *      http://www.apache.org/licenses/LICENSE-2.0
95b539461dcc159bd89297443780d635ccc5e3564John Hoford *
105b539461dcc159bd89297443780d635ccc5e3564John Hoford * Unless required by applicable law or agreed to in writing, software
115b539461dcc159bd89297443780d635ccc5e3564John Hoford * distributed under the License is distributed on an "AS IS" BASIS,
125b539461dcc159bd89297443780d635ccc5e3564John Hoford * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135b539461dcc159bd89297443780d635ccc5e3564John Hoford * See the License for the specific language governing permissions and
145b539461dcc159bd89297443780d635ccc5e3564John Hoford * limitations under the License.
155b539461dcc159bd89297443780d635ccc5e3564John Hoford */
165b539461dcc159bd89297443780d635ccc5e3564John Hofordpackage com.example.android.rs.vr.engine;
175b539461dcc159bd89297443780d635ccc5e3564John Hoford
185b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.text.*;
195b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.util.Arrays;
205b539461dcc159bd89297443780d635ccc5e3564John Hoford
215b539461dcc159bd89297443780d635ccc5e3564John Hofordpublic class Cube extends TriData {
225b539461dcc159bd89297443780d635ccc5e3564John Hoford
235b539461dcc159bd89297443780d635ccc5e3564John Hoford    private float[] mTrim = {0, 0, 0, 0, 0, 0 };
245b539461dcc159bd89297443780d635ccc5e3564John Hoford
255b539461dcc159bd89297443780d635ccc5e3564John Hoford    public Cube(Volume v, float delta) {
265b539461dcc159bd89297443780d635ccc5e3564John Hoford        this(v, delta, new float[]{0, 0, 0, 0, 0, 0});
275b539461dcc159bd89297443780d635ccc5e3564John Hoford    }
285b539461dcc159bd89297443780d635ccc5e3564John Hoford
295b539461dcc159bd89297443780d635ccc5e3564John Hoford    public Cube(Volume v, float delta, float[] trim) {
305b539461dcc159bd89297443780d635ccc5e3564John Hoford        this();
315b539461dcc159bd89297443780d635ccc5e3564John Hoford        this.mTrim = trim;
325b539461dcc159bd89297443780d635ccc5e3564John Hoford        float minx = delta + trim[0] * (v.mDimx - delta);
335b539461dcc159bd89297443780d635ccc5e3564John Hoford        float miny = delta + trim[1] * (v.mDimy - delta);
345b539461dcc159bd89297443780d635ccc5e3564John Hoford        float minz = delta + trim[2] * (v.mDimz - delta);
355b539461dcc159bd89297443780d635ccc5e3564John Hoford        float maxx = v.mDimx - delta - trim[3] * (v.mDimx - delta);
365b539461dcc159bd89297443780d635ccc5e3564John Hoford        float maxy = v.mDimy - delta - trim[4] * (v.mDimy - delta);
375b539461dcc159bd89297443780d635ccc5e3564John Hoford        float maxz = v.mDimz - delta - trim[5] * (v.mDimz - delta);
385b539461dcc159bd89297443780d635ccc5e3564John Hoford        mVert = new float[]{
395b539461dcc159bd89297443780d635ccc5e3564John Hoford                minx, miny, minz,
405b539461dcc159bd89297443780d635ccc5e3564John Hoford                maxx, miny, minz,
415b539461dcc159bd89297443780d635ccc5e3564John Hoford                maxx, maxy, minz,
425b539461dcc159bd89297443780d635ccc5e3564John Hoford                minx, maxy, minz,
435b539461dcc159bd89297443780d635ccc5e3564John Hoford                minx, miny, maxz,
445b539461dcc159bd89297443780d635ccc5e3564John Hoford                maxx, miny, maxz,
455b539461dcc159bd89297443780d635ccc5e3564John Hoford                maxx, maxy, maxz,
465b539461dcc159bd89297443780d635ccc5e3564John Hoford                minx, maxy, maxz,
475b539461dcc159bd89297443780d635ccc5e3564John Hoford        };
485b539461dcc159bd89297443780d635ccc5e3564John Hoford    }
495b539461dcc159bd89297443780d635ccc5e3564John Hoford
505b539461dcc159bd89297443780d635ccc5e3564John Hoford    public void clone(Cube src) {
515b539461dcc159bd89297443780d635ccc5e3564John Hoford        System.arraycopy(src.mTrim, 0, mTrim, 0, mTrim.length);
525b539461dcc159bd89297443780d635ccc5e3564John Hoford        mVert = Arrays.copyOf(src.mVert, src.mVert.length);
535b539461dcc159bd89297443780d635ccc5e3564John Hoford        mIndex = Arrays.copyOf(src.mIndex, src.mIndex.length);
545b539461dcc159bd89297443780d635ccc5e3564John Hoford    }
555b539461dcc159bd89297443780d635ccc5e3564John Hoford
565b539461dcc159bd89297443780d635ccc5e3564John Hoford    public float[] getTrim() {
575b539461dcc159bd89297443780d635ccc5e3564John Hoford        return mTrim;
585b539461dcc159bd89297443780d635ccc5e3564John Hoford    }
595b539461dcc159bd89297443780d635ccc5e3564John Hoford
605b539461dcc159bd89297443780d635ccc5e3564John Hoford    @Override
615b539461dcc159bd89297443780d635ccc5e3564John Hoford    public String toString() {
625b539461dcc159bd89297443780d635ccc5e3564John Hoford        return "CUBE[" + fs(mVert, 0, 3) + "][" + fs(mVert, 18, 3) + "]";
635b539461dcc159bd89297443780d635ccc5e3564John Hoford    }
645b539461dcc159bd89297443780d635ccc5e3564John Hoford
655b539461dcc159bd89297443780d635ccc5e3564John Hoford    private static String fs(float[] f, int off, int n) {
665b539461dcc159bd89297443780d635ccc5e3564John Hoford        DecimalFormat df = new DecimalFormat("##0.000");
675b539461dcc159bd89297443780d635ccc5e3564John Hoford        String ret = "";
685b539461dcc159bd89297443780d635ccc5e3564John Hoford        for (int i = off; i < off + n; i++) {
695b539461dcc159bd89297443780d635ccc5e3564John Hoford            String s = "       " + df.format(f[i]);
705b539461dcc159bd89297443780d635ccc5e3564John Hoford
715b539461dcc159bd89297443780d635ccc5e3564John Hoford            if (i != off) {
725b539461dcc159bd89297443780d635ccc5e3564John Hoford                ret += ",";
735b539461dcc159bd89297443780d635ccc5e3564John Hoford            }
745b539461dcc159bd89297443780d635ccc5e3564John Hoford            ret += s.substring(s.length() - 8);
755b539461dcc159bd89297443780d635ccc5e3564John Hoford
765b539461dcc159bd89297443780d635ccc5e3564John Hoford        }
775b539461dcc159bd89297443780d635ccc5e3564John Hoford        return ret;
785b539461dcc159bd89297443780d635ccc5e3564John Hoford    }
795b539461dcc159bd89297443780d635ccc5e3564John Hoford
805b539461dcc159bd89297443780d635ccc5e3564John Hoford    public Cube() {
815b539461dcc159bd89297443780d635ccc5e3564John Hoford        mVert = new float[]{
825b539461dcc159bd89297443780d635ccc5e3564John Hoford                -1.f, -1.f, -1.f,
835b539461dcc159bd89297443780d635ccc5e3564John Hoford                1.f, -1.f, -1.f,
845b539461dcc159bd89297443780d635ccc5e3564John Hoford                1.f, 1.f, -1.f,
855b539461dcc159bd89297443780d635ccc5e3564John Hoford                -1.f, 1.f, -1.f,
865b539461dcc159bd89297443780d635ccc5e3564John Hoford                -1.f, -1.f, 1.f,
875b539461dcc159bd89297443780d635ccc5e3564John Hoford                1.f, -1.f, 1.f,
885b539461dcc159bd89297443780d635ccc5e3564John Hoford                1.f, 1.f, 1.f,
895b539461dcc159bd89297443780d635ccc5e3564John Hoford                -1.f, 1.f, 1.f,
905b539461dcc159bd89297443780d635ccc5e3564John Hoford        };
915b539461dcc159bd89297443780d635ccc5e3564John Hoford
925b539461dcc159bd89297443780d635ccc5e3564John Hoford        mIndex = new int[]{
935b539461dcc159bd89297443780d635ccc5e3564John Hoford                2, 1, 0,
945b539461dcc159bd89297443780d635ccc5e3564John Hoford                0, 3, 2,
955b539461dcc159bd89297443780d635ccc5e3564John Hoford                7, 4, 5,
965b539461dcc159bd89297443780d635ccc5e3564John Hoford                5, 6, 7,
975b539461dcc159bd89297443780d635ccc5e3564John Hoford                1, 2, 6,
985b539461dcc159bd89297443780d635ccc5e3564John Hoford                6, 5, 1,
995b539461dcc159bd89297443780d635ccc5e3564John Hoford                4, 7, 3,
1005b539461dcc159bd89297443780d635ccc5e3564John Hoford                3, 0, 4,
1015b539461dcc159bd89297443780d635ccc5e3564John Hoford                2, 3, 7,
1025b539461dcc159bd89297443780d635ccc5e3564John Hoford                7, 6, 2,
1035b539461dcc159bd89297443780d635ccc5e3564John Hoford                0, 1, 5,
1045b539461dcc159bd89297443780d635ccc5e3564John Hoford                5, 4, 0
1055b539461dcc159bd89297443780d635ccc5e3564John Hoford        };
1065b539461dcc159bd89297443780d635ccc5e3564John Hoford        for (int i = 0; i < mIndex.length; i++) {
1075b539461dcc159bd89297443780d635ccc5e3564John Hoford            mIndex[i] *= 3;
1085b539461dcc159bd89297443780d635ccc5e3564John Hoford        }
1095b539461dcc159bd89297443780d635ccc5e3564John Hoford    }
1105b539461dcc159bd89297443780d635ccc5e3564John Hoford}
111