/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.rs.vr.engine; import android.renderscript.Allocation; import android.util.Log; import java.util.Arrays; import java.util.HashMap; /** * Defines a simple volume to be used in the volume renderer */ public class Volume { private static final String LOGTAG = "Volume"; public short[][] mData; public Allocation mVolumeAllocation; // one big volume public int mDimz = -1; public int mDimy = -1; public int mDimx = -1; public float[] mVoxelDim = new float[]{1f, 1f, 1f}; private HashMap mLooks = new HashMap(); @Override public String toString() { String ret = "Volume[" + mDimx + "," + mDimy + "," + mDimz + "]"; ret += "(" + mVoxelDim[0] + ", " + mVoxelDim[1] + ", " + mVoxelDim[2] + ")"; return ret; } public String[] getLookNames() { return mLooks.keySet().toArray(new String[mLooks.size()]); } public int[][] getLookColor(String name) { return mLooks.get(name).mColor; } public int[][] getLookOpactiy(String name) { return mLooks.get(name).mOpacity; } public void addLook(String name, int[][] color, int[][] opacity) { mLooks.put(name, new Look(name, color, opacity)); } public void addLook(String name, String color_string, String opacity_string) { mLooks.put(name, new Look(name, color_string, opacity_string)); Look l = mLooks.get(name); Log.v(LOGTAG, " ========================== " + name + " ============================="); Log.v(LOGTAG, "mColor "+l.dblArrayToString(l.mColor)); Log.v(LOGTAG, "mOpacity "+l.dblArrayToString(l.mOpacity)); } class Look { int[][] mColor; int[][] mOpacity; String mName; public Look(String name, String color_string, String opacity_string) { mName = name; String[] colorSplit = color_string.split("\\}\\s*\\,\\s*\\{"); String[] opacitySplit = opacity_string.split("\\}\\s*\\,\\s*\\{"); mColor = new int[colorSplit.length][]; for (int i = 0; i < colorSplit.length; i++) { mColor[i] = readNumbers(colorSplit[i]); } mOpacity = new int[opacitySplit.length][]; for (int i = 0; i < opacitySplit.length; i++) { mOpacity[i] = readNumbers(opacitySplit[i]); } } public Look(String name, int[][] color, int[][] opacity) { mColor = color; mOpacity = opacity; mName =name; } private int[] readNumbers(String numList) { numList = numList.replace('{', ' '); numList = numList.replace('}', ' '); numList = numList.replace(';', ' '); String[] split = numList.split(","); int[] ret = new int[split.length]; for (int i = 0; i < ret.length; i++) { ret[i] = Integer.decode(split[i].trim()); } return ret; } private String dblArrayToString(int[][] v) { String s = ""; for (int i = 0; i < v.length; i++) { if (i > 0) { s += ","; } s += Arrays.toString(v[i]); } return s; } public String toString() { return "mColor=" + dblArrayToString(mColor) + "\nmOpacity=" + dblArrayToString(mOpacity); } } }