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  */
16 
17 package com.example.android.rs.vr.engine;
18 
19 import android.renderscript.Allocation;
20 import android.util.Log;
21 
22 import java.util.Arrays;
23 import java.util.HashMap;
24 
25 /**
26  * Defines a simple volume to be used in the volume renderer
27  */
28 public class Volume {
29     private static final String LOGTAG = "Volume";
30     public short[][] mData;
31     public Allocation mVolumeAllocation; // one big volume
32     public int mDimz = -1;
33     public int mDimy = -1;
34     public int mDimx = -1;
35     public float[] mVoxelDim = new float[]{1f, 1f, 1f};
36     private HashMap<String, Look> mLooks = new HashMap<String, Look>();
37 
38     @Override
toString()39     public String toString() {
40         String ret = "Volume[" + mDimx + "," + mDimy + "," + mDimz + "]";
41         ret += "(" + mVoxelDim[0] + ", " + mVoxelDim[1] + ", " + mVoxelDim[2] + ")";
42 
43         return ret;
44     }
45 
getLookNames()46     public String[] getLookNames() {
47         return mLooks.keySet().toArray(new String[mLooks.size()]);
48     }
49 
getLookColor(String name)50     public int[][] getLookColor(String name) {
51         return mLooks.get(name).mColor;
52     }
53 
getLookOpactiy(String name)54     public int[][] getLookOpactiy(String name) {
55         return mLooks.get(name).mOpacity;
56     }
57 
addLook(String name, int[][] color, int[][] opacity)58     public void addLook(String name, int[][] color,  int[][] opacity) {
59         mLooks.put(name, new Look(name, color, opacity));
60     }
61 
addLook(String name, String color_string, String opacity_string)62     public void addLook(String name, String color_string, String opacity_string) {
63         mLooks.put(name, new Look(name, color_string, opacity_string));
64         Look l = mLooks.get(name);
65         Log.v(LOGTAG, " ========================== " + name + " =============================");
66         Log.v(LOGTAG, "mColor "+l.dblArrayToString(l.mColor));
67         Log.v(LOGTAG, "mOpacity "+l.dblArrayToString(l.mOpacity));
68     }
69 
70     class Look {
71         int[][] mColor;
72         int[][] mOpacity;
73         String mName;
74 
Look(String name, String color_string, String opacity_string)75         public Look(String name, String color_string, String opacity_string) {
76             mName = name;
77             String[] colorSplit = color_string.split("\\}\\s*\\,\\s*\\{");
78             String[] opacitySplit = opacity_string.split("\\}\\s*\\,\\s*\\{");
79             mColor = new int[colorSplit.length][];
80             for (int i = 0; i < colorSplit.length; i++) {
81 
82                 mColor[i] = readNumbers(colorSplit[i]);
83             }
84             mOpacity = new int[opacitySplit.length][];
85             for (int i = 0; i < opacitySplit.length; i++) {
86 
87                 mOpacity[i] = readNumbers(opacitySplit[i]);
88             }
89         }
90 
Look(String name, int[][] color, int[][] opacity)91         public Look(String name, int[][] color, int[][] opacity) {
92             mColor = color;
93             mOpacity = opacity;
94             mName =name;
95         }
96 
readNumbers(String numList)97         private int[] readNumbers(String numList) {
98             numList = numList.replace('{', ' ');
99             numList = numList.replace('}', ' ');
100             numList = numList.replace(';', ' ');
101             String[] split = numList.split(",");
102             int[] ret = new int[split.length];
103             for (int i = 0; i < ret.length; i++) {
104                 ret[i] = Integer.decode(split[i].trim());
105             }
106             return ret;
107         }
108 
dblArrayToString(int[][] v)109         private String dblArrayToString(int[][] v) {
110             String s = "";
111             for (int i = 0; i < v.length; i++) {
112                 if (i > 0) {
113                     s += ",";
114                 }
115                 s += Arrays.toString(v[i]);
116             }
117             return s;
118         }
119 
toString()120         public String toString() {
121             return "mColor=" + dblArrayToString(mColor) + "\nmOpacity=" + dblArrayToString(mOpacity);
122         }
123     }
124 }
125