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 Hoford 175b539461dcc159bd89297443780d635ccc5e3564John Hofordpackage com.example.android.rs.vr.engine; 185b539461dcc159bd89297443780d635ccc5e3564John Hoford 195b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.renderscript.Allocation; 205b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.util.Log; 215b539461dcc159bd89297443780d635ccc5e3564John Hoford 225b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.util.Arrays; 235b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.util.HashMap; 245b539461dcc159bd89297443780d635ccc5e3564John Hoford 255b539461dcc159bd89297443780d635ccc5e3564John Hoford/** 265b539461dcc159bd89297443780d635ccc5e3564John Hoford * Defines a simple volume to be used in the volume renderer 275b539461dcc159bd89297443780d635ccc5e3564John Hoford */ 285b539461dcc159bd89297443780d635ccc5e3564John Hofordpublic class Volume { 295b539461dcc159bd89297443780d635ccc5e3564John Hoford private static final String LOGTAG = "Volume"; 305b539461dcc159bd89297443780d635ccc5e3564John Hoford public short[][] mData; 315b539461dcc159bd89297443780d635ccc5e3564John Hoford public Allocation mVolumeAllocation; // one big volume 325b539461dcc159bd89297443780d635ccc5e3564John Hoford public int mDimz = -1; 335b539461dcc159bd89297443780d635ccc5e3564John Hoford public int mDimy = -1; 345b539461dcc159bd89297443780d635ccc5e3564John Hoford public int mDimx = -1; 355b539461dcc159bd89297443780d635ccc5e3564John Hoford public float[] mVoxelDim = new float[]{1f, 1f, 1f}; 365b539461dcc159bd89297443780d635ccc5e3564John Hoford private HashMap<String, Look> mLooks = new HashMap<String, Look>(); 375b539461dcc159bd89297443780d635ccc5e3564John Hoford 385b539461dcc159bd89297443780d635ccc5e3564John Hoford @Override 395b539461dcc159bd89297443780d635ccc5e3564John Hoford public String toString() { 405b539461dcc159bd89297443780d635ccc5e3564John Hoford String ret = "Volume[" + mDimx + "," + mDimy + "," + mDimz + "]"; 415b539461dcc159bd89297443780d635ccc5e3564John Hoford ret += "(" + mVoxelDim[0] + ", " + mVoxelDim[1] + ", " + mVoxelDim[2] + ")"; 425b539461dcc159bd89297443780d635ccc5e3564John Hoford 435b539461dcc159bd89297443780d635ccc5e3564John Hoford return ret; 445b539461dcc159bd89297443780d635ccc5e3564John Hoford } 455b539461dcc159bd89297443780d635ccc5e3564John Hoford 465b539461dcc159bd89297443780d635ccc5e3564John Hoford public String[] getLookNames() { 475b539461dcc159bd89297443780d635ccc5e3564John Hoford return mLooks.keySet().toArray(new String[mLooks.size()]); 485b539461dcc159bd89297443780d635ccc5e3564John Hoford } 495b539461dcc159bd89297443780d635ccc5e3564John Hoford 505b539461dcc159bd89297443780d635ccc5e3564John Hoford public int[][] getLookColor(String name) { 515b539461dcc159bd89297443780d635ccc5e3564John Hoford return mLooks.get(name).mColor; 525b539461dcc159bd89297443780d635ccc5e3564John Hoford } 535b539461dcc159bd89297443780d635ccc5e3564John Hoford 545b539461dcc159bd89297443780d635ccc5e3564John Hoford public int[][] getLookOpactiy(String name) { 555b539461dcc159bd89297443780d635ccc5e3564John Hoford return mLooks.get(name).mOpacity; 565b539461dcc159bd89297443780d635ccc5e3564John Hoford } 575b539461dcc159bd89297443780d635ccc5e3564John Hoford 585b539461dcc159bd89297443780d635ccc5e3564John Hoford public void addLook(String name, int[][] color, int[][] opacity) { 595b539461dcc159bd89297443780d635ccc5e3564John Hoford mLooks.put(name, new Look(name, color, opacity)); 605b539461dcc159bd89297443780d635ccc5e3564John Hoford } 615b539461dcc159bd89297443780d635ccc5e3564John Hoford 625b539461dcc159bd89297443780d635ccc5e3564John Hoford public void addLook(String name, String color_string, String opacity_string) { 635b539461dcc159bd89297443780d635ccc5e3564John Hoford mLooks.put(name, new Look(name, color_string, opacity_string)); 645b539461dcc159bd89297443780d635ccc5e3564John Hoford Look l = mLooks.get(name); 655b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, " ========================== " + name + " ============================="); 665b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, "mColor "+l.dblArrayToString(l.mColor)); 675b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, "mOpacity "+l.dblArrayToString(l.mOpacity)); 685b539461dcc159bd89297443780d635ccc5e3564John Hoford } 695b539461dcc159bd89297443780d635ccc5e3564John Hoford 705b539461dcc159bd89297443780d635ccc5e3564John Hoford class Look { 715b539461dcc159bd89297443780d635ccc5e3564John Hoford int[][] mColor; 725b539461dcc159bd89297443780d635ccc5e3564John Hoford int[][] mOpacity; 735b539461dcc159bd89297443780d635ccc5e3564John Hoford String mName; 745b539461dcc159bd89297443780d635ccc5e3564John Hoford 755b539461dcc159bd89297443780d635ccc5e3564John Hoford public Look(String name, String color_string, String opacity_string) { 765b539461dcc159bd89297443780d635ccc5e3564John Hoford mName = name; 775b539461dcc159bd89297443780d635ccc5e3564John Hoford String[] colorSplit = color_string.split("\\}\\s*\\,\\s*\\{"); 785b539461dcc159bd89297443780d635ccc5e3564John Hoford String[] opacitySplit = opacity_string.split("\\}\\s*\\,\\s*\\{"); 795b539461dcc159bd89297443780d635ccc5e3564John Hoford mColor = new int[colorSplit.length][]; 805b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < colorSplit.length; i++) { 815b539461dcc159bd89297443780d635ccc5e3564John Hoford 825b539461dcc159bd89297443780d635ccc5e3564John Hoford mColor[i] = readNumbers(colorSplit[i]); 835b539461dcc159bd89297443780d635ccc5e3564John Hoford } 845b539461dcc159bd89297443780d635ccc5e3564John Hoford mOpacity = new int[opacitySplit.length][]; 855b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < opacitySplit.length; i++) { 865b539461dcc159bd89297443780d635ccc5e3564John Hoford 875b539461dcc159bd89297443780d635ccc5e3564John Hoford mOpacity[i] = readNumbers(opacitySplit[i]); 885b539461dcc159bd89297443780d635ccc5e3564John Hoford } 895b539461dcc159bd89297443780d635ccc5e3564John Hoford } 905b539461dcc159bd89297443780d635ccc5e3564John Hoford 915b539461dcc159bd89297443780d635ccc5e3564John Hoford public Look(String name, int[][] color, int[][] opacity) { 925b539461dcc159bd89297443780d635ccc5e3564John Hoford mColor = color; 935b539461dcc159bd89297443780d635ccc5e3564John Hoford mOpacity = opacity; 945b539461dcc159bd89297443780d635ccc5e3564John Hoford mName =name; 955b539461dcc159bd89297443780d635ccc5e3564John Hoford } 965b539461dcc159bd89297443780d635ccc5e3564John Hoford 975b539461dcc159bd89297443780d635ccc5e3564John Hoford private int[] readNumbers(String numList) { 985b539461dcc159bd89297443780d635ccc5e3564John Hoford numList = numList.replace('{', ' '); 995b539461dcc159bd89297443780d635ccc5e3564John Hoford numList = numList.replace('}', ' '); 1005b539461dcc159bd89297443780d635ccc5e3564John Hoford numList = numList.replace(';', ' '); 1015b539461dcc159bd89297443780d635ccc5e3564John Hoford String[] split = numList.split(","); 1025b539461dcc159bd89297443780d635ccc5e3564John Hoford int[] ret = new int[split.length]; 1035b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < ret.length; i++) { 1045b539461dcc159bd89297443780d635ccc5e3564John Hoford ret[i] = Integer.decode(split[i].trim()); 1055b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1065b539461dcc159bd89297443780d635ccc5e3564John Hoford return ret; 1075b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1085b539461dcc159bd89297443780d635ccc5e3564John Hoford 1095b539461dcc159bd89297443780d635ccc5e3564John Hoford private String dblArrayToString(int[][] v) { 1105b539461dcc159bd89297443780d635ccc5e3564John Hoford String s = ""; 1115b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < v.length; i++) { 1125b539461dcc159bd89297443780d635ccc5e3564John Hoford if (i > 0) { 1135b539461dcc159bd89297443780d635ccc5e3564John Hoford s += ","; 1145b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1155b539461dcc159bd89297443780d635ccc5e3564John Hoford s += Arrays.toString(v[i]); 1165b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1175b539461dcc159bd89297443780d635ccc5e3564John Hoford return s; 1185b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1195b539461dcc159bd89297443780d635ccc5e3564John Hoford 1205b539461dcc159bd89297443780d635ccc5e3564John Hoford public String toString() { 1215b539461dcc159bd89297443780d635ccc5e3564John Hoford return "mColor=" + dblArrayToString(mColor) + "\nmOpacity=" + dblArrayToString(mOpacity); 1225b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1235b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1245b539461dcc159bd89297443780d635ccc5e3564John Hoford} 125