From f37ead2438b9d97f776a0fe8c78c2daefc3a1d74 Mon Sep 17 00:00:00 2001 From: Nova deViator Date: Fri, 11 Sep 2015 14:56:09 +0200 Subject: [PATCH] getLinesData function in P5 in construction. xrns osc/midi communicaton --- pde/IF3Si/IF3Si.pde | 46 ++++++------- pde/IF3Si/getLinesData.pde | 55 ++++++++++++++++ pde/IF3Si/silicon_lines.txt | 124 ++++++++++++++++++++++++++++++++++++ rnx/IF3Si.xrns | Bin 6072 -> 6079 bytes 4 files changed, 203 insertions(+), 22 deletions(-) create mode 100644 pde/IF3Si/getLinesData.pde create mode 100644 pde/IF3Si/silicon_lines.txt diff --git a/pde/IF3Si/IF3Si.pde b/pde/IF3Si/IF3Si.pde index 1b4b727..304e827 100644 --- a/pde/IF3Si/IF3Si.pde +++ b/pde/IF3Si/IF3Si.pde @@ -1,11 +1,21 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - Interface Fractures III - SILICON - (c) nova@deviator.si +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - IF3Si.pde + This file is part of "Interface Fractures III - Silicon". + Copyright (c) 2015 Luka Prinčič, All rights reserved. + This program is free software distributed under + GNU General Public Licence. See COPYING for more info. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Interface Fractures III - Silicon + + (c) Luka Prinčič / Nova deViator + nova@deviator.si + + IF3Si.pde */ + // undecorate window (remove window borders etc) - - - - - - - - - - - - - - - public void init() { frame.removeNotify(); frame.setUndecorated(true); frame.addNotify(); super.init(); } @@ -65,7 +75,7 @@ PFont fpsFont; boolean testPatternToggle = false; // siLines -String[] siLinesData; +ArrayList siLinesData; /////////////////////////////////////////////////////////////////////////////// void setup() { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -95,26 +105,18 @@ void setup() { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - println("\n\n~~~ loading textures into image pool ...\n"); imgPool = getImages("/images/"); - siLinesData = loadStrings(dataPath(sketchPath + "/silicon_lines.txt")); - printArray(siLinesData); - for (String lineData : siLinesData ) { - String[] datatemp = split(lineData, " "); - String data_x[]; - for (String item : datatemp) { - for (int i = 0; i < datatemp.length && item != ""; i++) { - //if (item != "") { - data_x[i] = item; } - //} - //data-x.add - } - //datatemp = sort(datatemp); - //datatemp = reverse(datatemp); - printArray(datatemp); - printArray(data_x); - } + // ---------------------------------------------------------------------- + println("~~~ getting and processing lines data ..."); + //siLinesData = new ArrayList(); + siLinesData = getLinesData(); // function, returns an ArrayList + + + + // ---------------------------------------------------------------------- + // create an array of random value between -50 and 50 for (int i=0; i < 500; i++) { rands[i] = i-250; } diff --git a/pde/IF3Si/getLinesData.pde b/pde/IF3Si/getLinesData.pde new file mode 100644 index 0000000..f6ae0ed --- /dev/null +++ b/pde/IF3Si/getLinesData.pde @@ -0,0 +1,55 @@ +/* + This file is part of "Interface Fractures III - Silicon". + Copyright (c) 2015 Luka Prinčič, All rights reserved. + This program is free software distributed under + GNU General Public Licence. See COPYING for more info. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Interface Fractures III - Silicon + + (c) Luka Prinčič / Nova deViator + nova@deviator.si + + getLinesData.pde - process spectral lines + +*/ + + + +ArrayList getLinesData() { + + + String[] siLinesData; + siLinesData = loadStrings(dataPath(sketchPath + "/silicon_lines.txt")); + + ArrayList siLinesList = new ArrayList(); + + for (String lineData : siLinesData ) { + String[] datatemp = split(lineData, " "); + + FloatList data_x; + data_x = new FloatList(); + + for (int i = 0; i < datatemp.length; i++) { + if (!datatemp[i].equals("")) { // if not empty (spaces): + data_x.append(float(datatemp[i])); + } + } + printArray(data_x); + siLinesList.add(data_x); + + } + + for(int i = 0; i < siLinesList.size(); i ++) { + println(siLinesList.get(i).get(0)); + } + + //printArray(siLinesList); + + + + + + return siLinesList; + +} diff --git a/pde/IF3Si/silicon_lines.txt b/pde/IF3Si/silicon_lines.txt new file mode 100644 index 0000000..3cd8838 --- /dev/null +++ b/pde/IF3Si/silicon_lines.txt @@ -0,0 +1,124 @@ +3905.52 300 +3955.74 10 +3977.46 10 +3991.77 15 +3998.01 10 +4075.45 20 +4076.78 15 +4102.94 70 +4128.07 300 +4130.89 500 +4183.35 10 +4190.72 100 +4198.13 50 +4621.42 100 +4621.72 150 +4782.99 50 +4792.21 35 +4792.32 80 +4883.20 15 +4906.99 20 +4932.80 20 +4947.61 30 +5006.06 40 +5041.03 1000 +5055.98 1000 +5181.90 100 +5185.25 100 +5192.86 200 +5202.41 500 +5295.19 30 +5405.34 100 +5417.24 15 +5428.92 15 +5432.89 15 +5438.62 100 +5447.26 20 +5454.49 15 +5456.45 100 +5466.43 500 +5466.87 500 +5469.21 100 +5493.23 40 +5496.45 200 +5517.54 35 +5540.74 100 +5576.66 150 +5622.22 30 +5632.97 100 +5639.48 200 +5645.61 90 +5660.66 150 +5665.55 80 +5669.56 1000 +5681.44 30 +5684.48 120 +5688.81 300 +5690.43 100 +5701.11 90 +5701.37 200 +5706.37 100 +5708.40 160 +5747.67 45 +5753.63 45 +5754.22 45 +5762.98 45 +5772.15 70 +5780.38 70 +5785.73 30 +5793.07 90 +5794.90 30 +5797.86 100 +5800.47 150 +5806.74 200 +5827.80 30 +5846.13 50 +5867.48 10 +5868.40 300 +5873.76 40 +5915.22 150 +5948.55 200 +5957.56 500 +5978.93 500 +6067.45 10 +6080.06 20 +6086.67 10 +6125.02 90 +6131.57 85 +6131.85 90 +6142.49 100 +6145.02 100 +6155.13 160 +6237.32 160 +6238.29 40 +6243.81 125 +6244.47 125 +6254.19 180 +6331.95 45 +6347.10 1000 +6371.36 1000 +6526.61 45 +6527.20 45 +6555.46 45 +6660.52 50 +6665.00 15 +6671.88 100 +6699.38 20 +6717.04 50 +6721.85 100 +6741.64 30 +6750.28 20 +6818.45 30 +6829.82 50 +6848.57 30 +6976.52 80 +7003.57 180 +7005.88 180 +7017.28 30 +7017.65 90 +7034.90 250 +7164.69 70 +7165.55 200 +7184.89 70 +7193.58 65 +7193.90 30 diff --git a/rnx/IF3Si.xrns b/rnx/IF3Si.xrns index 5511809e90b907a24de96ac98b999592f8cee864..a8c68d467ae3df86b2371c19bfd6c2b79edc307a 100644 GIT binary patch literal 6079 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 a5Ip#QZjhcPImO=$2_c|_QS$2F*?$4*Ozn99