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