1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.example.android.rs.vr.engine;
17
18import java.text.*;
19import java.util.Arrays;
20
21public class Cube extends TriData {
22
23    private float[] mTrim = {0, 0, 0, 0, 0, 0 };
24
25    public Cube(Volume v, float delta) {
26        this(v, delta, new float[]{0, 0, 0, 0, 0, 0});
27    }
28
29    public Cube(Volume v, float delta, float[] trim) {
30        this();
31        this.mTrim = trim;
32        float minx = delta + trim[0] * (v.mDimx - delta);
33        float miny = delta + trim[1] * (v.mDimy - delta);
34        float minz = delta + trim[2] * (v.mDimz - delta);
35        float maxx = v.mDimx - delta - trim[3] * (v.mDimx - delta);
36        float maxy = v.mDimy - delta - trim[4] * (v.mDimy - delta);
37        float maxz = v.mDimz - delta - trim[5] * (v.mDimz - delta);
38        mVert = new float[]{
39                minx, miny, minz,
40                maxx, miny, minz,
41                maxx, maxy, minz,
42                minx, maxy, minz,
43                minx, miny, maxz,
44                maxx, miny, maxz,
45                maxx, maxy, maxz,
46                minx, maxy, maxz,
47        };
48    }
49
50    public void clone(Cube src) {
51        System.arraycopy(src.mTrim, 0, mTrim, 0, mTrim.length);
52        mVert = Arrays.copyOf(src.mVert, src.mVert.length);
53        mIndex = Arrays.copyOf(src.mIndex, src.mIndex.length);
54    }
55
56    public float[] getTrim() {
57        return mTrim;
58    }
59
60    @Override
61    public String toString() {
62        return "CUBE[" + fs(mVert, 0, 3) + "][" + fs(mVert, 18, 3) + "]";
63    }
64
65    private static String fs(float[] f, int off, int n) {
66        DecimalFormat df = new DecimalFormat("##0.000");
67        String ret = "";
68        for (int i = off; i < off + n; i++) {
69            String s = "       " + df.format(f[i]);
70
71            if (i != off) {
72                ret += ",";
73            }
74            ret += s.substring(s.length() - 8);
75
76        }
77        return ret;
78    }
79
80    public Cube() {
81        mVert = new float[]{
82                -1.f, -1.f, -1.f,
83                1.f, -1.f, -1.f,
84                1.f, 1.f, -1.f,
85                -1.f, 1.f, -1.f,
86                -1.f, -1.f, 1.f,
87                1.f, -1.f, 1.f,
88                1.f, 1.f, 1.f,
89                -1.f, 1.f, 1.f,
90        };
91
92        mIndex = new int[]{
93                2, 1, 0,
94                0, 3, 2,
95                7, 4, 5,
96                5, 6, 7,
97                1, 2, 6,
98                6, 5, 1,
99                4, 7, 3,
100                3, 0, 4,
101                2, 3, 7,
102                7, 6, 2,
103                0, 1, 5,
104                5, 4, 0
105        };
106        for (int i = 0; i < mIndex.length; i++) {
107            mIndex[i] *= 3;
108        }
109    }
110}
111