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.loaders; 185b539461dcc159bd89297443780d635ccc5e3564John Hoford 195b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.renderscript.RenderScript; 205b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.util.Log; 215b539461dcc159bd89297443780d635ccc5e3564John Hoford 225b539461dcc159bd89297443780d635ccc5e3564John Hofordimport com.example.android.rs.vr.engine.Volume; 235b539461dcc159bd89297443780d635ccc5e3564John Hoford 245b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.io.File; 255b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.io.FileReader; 265b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.io.FilenameFilter; 275b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.util.Arrays; 285b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.util.HashMap; 295b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.util.Properties; 305b539461dcc159bd89297443780d635ccc5e3564John Hoford 315b539461dcc159bd89297443780d635ccc5e3564John Hofordpublic class VolumeLoader { 325b539461dcc159bd89297443780d635ccc5e3564John Hoford private static final String LOGTAG = "VolumeLoader"; 335b539461dcc159bd89297443780d635ccc5e3564John Hoford HashMap<String, Properties> map = new HashMap<String, Properties>(); 345b539461dcc159bd89297443780d635ccc5e3564John Hoford File baseDir; 355b539461dcc159bd89297443780d635ccc5e3564John Hoford ProgressListener mListener; 365b539461dcc159bd89297443780d635ccc5e3564John Hoford 375b539461dcc159bd89297443780d635ccc5e3564John Hoford public VolumeLoader(String dir) { 385b539461dcc159bd89297443780d635ccc5e3564John Hoford map.put(Mandelbulb.NAME,null); 395ee349cd7a75079b6bac1d8ace66455ecd1afb17John Hoford map.put(Droid.NAME,null); 405b539461dcc159bd89297443780d635ccc5e3564John Hoford baseDir = new File(dir); 415b539461dcc159bd89297443780d635ccc5e3564John Hoford if (!baseDir.exists()) { 425b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.e(LOGTAG, "Directory: \""+dir+"\" does not exist "); 435b539461dcc159bd89297443780d635ccc5e3564John Hoford return; 445b539461dcc159bd89297443780d635ccc5e3564John Hoford } 455b539461dcc159bd89297443780d635ccc5e3564John Hoford Properties[] prop = getPropertyFiles(baseDir); 465b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < prop.length; i++) { 475b539461dcc159bd89297443780d635ccc5e3564John Hoford map.put(prop[i].getProperty("name"), prop[i]); 485b539461dcc159bd89297443780d635ccc5e3564John Hoford } 495b539461dcc159bd89297443780d635ccc5e3564John Hoford 505b539461dcc159bd89297443780d635ccc5e3564John Hoford } 515b539461dcc159bd89297443780d635ccc5e3564John Hoford 525b539461dcc159bd89297443780d635ccc5e3564John Hoford public String[] getNames() { 535b539461dcc159bd89297443780d635ccc5e3564John Hoford String [] ret = map.keySet().toArray(new String[map.size()]); 545b539461dcc159bd89297443780d635ccc5e3564John Hoford Arrays.sort(ret); 555b539461dcc159bd89297443780d635ccc5e3564John Hoford return ret; 565b539461dcc159bd89297443780d635ccc5e3564John Hoford } 575b539461dcc159bd89297443780d635ccc5e3564John Hoford 585b539461dcc159bd89297443780d635ccc5e3564John Hoford public Volume getVolume(RenderScript rs, String name) { 595b539461dcc159bd89297443780d635ccc5e3564John Hoford if (name.equals(Mandelbulb.NAME)) { 605b539461dcc159bd89297443780d635ccc5e3564John Hoford return Mandelbulb.buildRSVolume(rs,mListener); 615b539461dcc159bd89297443780d635ccc5e3564John Hoford } 625ee349cd7a75079b6bac1d8ace66455ecd1afb17John Hoford if (name.equals(Droid.NAME)) { 635ee349cd7a75079b6bac1d8ace66455ecd1afb17John Hoford return Droid.buildRSVolume(rs,mListener); 645ee349cd7a75079b6bac1d8ace66455ecd1afb17John Hoford } 655b539461dcc159bd89297443780d635ccc5e3564John Hoford Properties p = map.get(name); 665b539461dcc159bd89297443780d635ccc5e3564John Hoford if (p == null) { 675b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG,"Could not find "+name); 685b539461dcc159bd89297443780d635ccc5e3564John Hoford return null; 695b539461dcc159bd89297443780d635ccc5e3564John Hoford } 705b539461dcc159bd89297443780d635ccc5e3564John Hoford String dir = p.getProperty("dir"); 715b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG,"dir ="+dir); 725b539461dcc159bd89297443780d635ccc5e3564John Hoford 735b539461dcc159bd89297443780d635ccc5e3564John Hoford if ("dicom".equalsIgnoreCase(p.getProperty("format"))) { 745b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG,"processing dicom"); 755b539461dcc159bd89297443780d635ccc5e3564John Hoford Volume v = LoaderDicom.buildRSVolume(rs, new File(baseDir, dir), mListener); 765b539461dcc159bd89297443780d635ccc5e3564John Hoford String [] looks = p.getProperty("looks").split(","); 775b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int j = 0; j < looks.length; j++) { 785b539461dcc159bd89297443780d635ccc5e3564John Hoford String look_color = p.getProperty(looks[j]+".color"); 795b539461dcc159bd89297443780d635ccc5e3564John Hoford String look_opacity = p.getProperty(looks[j]+".opacity"); 805b539461dcc159bd89297443780d635ccc5e3564John Hoford v.addLook(looks[j],look_color,look_opacity); 815b539461dcc159bd89297443780d635ccc5e3564John Hoford } 825b539461dcc159bd89297443780d635ccc5e3564John Hoford return v; 835b539461dcc159bd89297443780d635ccc5e3564John Hoford } else if ("raw".equalsIgnoreCase(p.getProperty("format"))) { 845b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG,"processing dicom"); 855b539461dcc159bd89297443780d635ccc5e3564John Hoford Volume v = LoaderRaw.buildRSVolume(rs, new File(baseDir, dir), p, mListener); 865b539461dcc159bd89297443780d635ccc5e3564John Hoford String [] looks = p.getProperty("looks").split(","); 875b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int j = 0; j < looks.length; j++) { 885b539461dcc159bd89297443780d635ccc5e3564John Hoford String look_color = p.getProperty(looks[j]+".color"); 895b539461dcc159bd89297443780d635ccc5e3564John Hoford String look_opacity = p.getProperty(looks[j]+".opacity"); 905b539461dcc159bd89297443780d635ccc5e3564John Hoford v.addLook(looks[j],look_color,look_opacity); 915b539461dcc159bd89297443780d635ccc5e3564John Hoford } 925b539461dcc159bd89297443780d635ccc5e3564John Hoford return v; 935b539461dcc159bd89297443780d635ccc5e3564John Hoford } 945b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG,"could recognize format"); 955b539461dcc159bd89297443780d635ccc5e3564John Hoford return null; 965b539461dcc159bd89297443780d635ccc5e3564John Hoford } 975b539461dcc159bd89297443780d635ccc5e3564John Hoford 985b539461dcc159bd89297443780d635ccc5e3564John Hoford static Properties[] getPropertyFiles(File dir) { 995b539461dcc159bd89297443780d635ccc5e3564John Hoford 1005b539461dcc159bd89297443780d635ccc5e3564John Hoford File[] f = dir.listFiles(new FilenameFilter() { 1015b539461dcc159bd89297443780d635ccc5e3564John Hoford 1025b539461dcc159bd89297443780d635ccc5e3564John Hoford @Override 1035b539461dcc159bd89297443780d635ccc5e3564John Hoford public boolean accept(File dir, String name) { 1045b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, name); 1055b539461dcc159bd89297443780d635ccc5e3564John Hoford return name.endsWith(".prop"); 1065b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1075b539461dcc159bd89297443780d635ccc5e3564John Hoford }); 1085b539461dcc159bd89297443780d635ccc5e3564John Hoford Properties[]ret = new Properties[f.length]; 1095b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < f.length; i++) { 1105b539461dcc159bd89297443780d635ccc5e3564John Hoford Properties prop = new Properties(); 1115b539461dcc159bd89297443780d635ccc5e3564John Hoford ret[i] = prop; 1125b539461dcc159bd89297443780d635ccc5e3564John Hoford try { 1135b539461dcc159bd89297443780d635ccc5e3564John Hoford prop.load(new FileReader(f[i])); 1145b539461dcc159bd89297443780d635ccc5e3564John Hoford 1155b539461dcc159bd89297443780d635ccc5e3564John Hoford } catch (Exception e) { 1165b539461dcc159bd89297443780d635ccc5e3564John Hoford e.printStackTrace(); 1175b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1185b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1195b539461dcc159bd89297443780d635ccc5e3564John Hoford return ret; 1205b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1215b539461dcc159bd89297443780d635ccc5e3564John Hoford 1225b539461dcc159bd89297443780d635ccc5e3564John Hoford public void setProgressListener(ProgressListener listener){ 1235b539461dcc159bd89297443780d635ccc5e3564John Hoford mListener = listener; 1245b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1255b539461dcc159bd89297443780d635ccc5e3564John Hoford 1265b539461dcc159bd89297443780d635ccc5e3564John Hoford public static interface ProgressListener { 1275b539461dcc159bd89297443780d635ccc5e3564John Hoford public void progress(int n, int total); 1285b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1295b539461dcc159bd89297443780d635ccc5e3564John Hoford} 130