def main():

    print("Reading and analyzing file...")
    spectrum, freqs = ReadAndAnalyze(inPath)

    print(len(freqs))
    print(len(spectrum[0]))

    print("Scaling logarithmically (kinda)...")
    for i, s in enumerate(spectrum):
        spectrum[i] = list(map(loggish, s))

    print("Generating linear scale...")
    scale = scales.linear(domain=[spectrum.min(),
                                  spectrum.max()],
                          codomain=[1, 10])

    print("Normalizing spectrum data...")
    datapoints = list(map(lambda x: list(map(scale, x)), spectrum))

    print("Trimming spectrum data post-normalization...")
    for i, x in enumerate(datapoints):
        for j, v in enumerate(x):
            if v > 9:
                datapoints[i][j] = 9

    print("Generating bars...")
    bars = BarsND(datapoints, bar_width=1, bar_depth=1)

    print("Rendering...")
    code = bars.render(backend=OpenScadBackend)

    print("Saving to file...")
    with open(outPath, "w") as f:
        f.write(code)
예제 #2
0
def main():
    print "Reading and analyzing file..."
    spectrum, freqs = ReadAndAnalyze(inPath)

    print "Scaling logarithmically (kinda)..."
    for i, s in enumerate(spectrum):
      spectrum[i] = map(loggish, s)

    print "Generating linear scale..."
    scale = scales.linear(domain=[spectrum.min(), spectrum.max()],
                          codomain=[0, 20000])

    print "Generating ring-shaped pieces..."
    rIndexes = range(len(freqs)-1)
    unitAngle = 360.0/len(spectrum[0]) # depends on total time & sample rate
    angles = numpy.arange(0, 360, unitAngle)

    print len(spectrum[0])
    print len(angles)
    print len(freqs)

    rings = []

    for rIndex in rIndexes:
        rInner = freqs[rIndex] + 8000
        rOuter = freqs[rIndex+1] + 8000

        print "Generating ring for region: %s Hz - %s Hz" % (rInner, rOuter)

        print "-- Normalizing spectrum data with linear scale..."
        data = map(scale, spectrum[:][rIndex])

        ringSectors = []
        for angleIndex, angle in enumerate(angles):
            sector = ast.CircleSector(rOuter, unitAngle)
            if rInner:
                killer = ast.CircleSector(rInner, unitAngle)
                sector = ast.Difference([sector, killer])
            sector = ast.Rotate(unitAngle*angleIndex, (0,0,1), sector)
            sector = ast.LinearExtrusion(data[angleIndex], sector)
            ringSectors.append(sector)

        ring = ast.Union(ringSectors)

        rings.append(ring)

    print "Generating unified geometry..."
    union = ast.Union(rings)

    print "Rendering..."
    with open(outPath, "w") as f:
        code = OpenScadBackend(union).generate()
        f.write(code)
예제 #3
0
def main():

  print "Reading and analyzing file..."
  spectrum, freqs = ReadAndAnalyze(inPath)

  print len(freqs)
  print len(spectrum[0])


  print "Scaling logarithmically (kinda)..."
  for i, s in enumerate(spectrum):
    spectrum[i] = map(loggish, s)

  print "Generating linear scale..."
  scale = scales.linear(domain=[spectrum.min(), spectrum.max()],
                        codomain=[1, 10])

  print "Normalizing spectrum data..."
  datapoints = map(lambda x: map(scale, x), spectrum)

  print "Trimming spectrum data post-normalization..."
  for i, x in enumerate(datapoints):
    for j, v in enumerate(x):
        if v > 9:
          datapoints[i][j] = 9

  print "Generating bars..."
  bars = BarsND(datapoints,
                bar_width=1,
                bar_depth=1)

  print "Rendering..."
  code = bars.render(backend=OpenScadBackend)

  print "Saving to file..."
  with open(outPath, "w") as f:
      f.write(code)
예제 #4
0
def test_linear_inverted_codomain(param, clamp, expected):
    """Test the linear scale with inverted codomain."""
    domain = (1, 3)
    codomain = (20, 10)
    scale = scales.linear(domain, codomain, clamp)
    assert scale(param) == expected
예제 #5
0
def test_linear(param, clamp, expected):
    """Test the linear scale."""
    domain = (2, 4)
    codomain = (10, 20)
    scale = scales.linear(domain, codomain, clamp)
    assert scale(param) == expected
예제 #6
0
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

import csv

from tangible import scales
from tangible.shapes.vertical import SquareTower1D
from tangible.backends.openscad import OpenScadBackend


# Read data into list
datapoints = []
with open('analytics-sep-13.csv', 'r') as datafile:
    reader = csv.DictReader(datafile)
    for row in reader:
        visits = int(row['Visits'])
        datapoints.append(visits)


# Normalize data
scale = scales.linear([min(datapoints), max(datapoints)], [10, 50])
datapoints = [scale(p) for p in datapoints]


# Create shape
tower = SquareTower1D(datapoints, layer_height=10)

code = tower.render(backend=OpenScadBackend)
print(code)
예제 #7
0
파일: bars_1d.py 프로젝트: wware/tangible
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

import csv

from tangible import scales
from tangible.shapes.bars import Bars1D
from tangible.backends.openscad import OpenScadBackend

# Read data into list
datapoints = []
with open('analytics-sep-13.csv', 'r') as datafile:
    reader = csv.DictReader(datafile)
    for row in reader:
        visits = int(row['Visits'])
        datapoints.append(visits)

# Normalize data
scale = scales.linear([min(datapoints), max(datapoints)], [10, 80])
datapoints = map(scale, datapoints)

# Create shape
bars1d = Bars1D(datapoints, bar_width=10, bar_depth=10)

code = bars1d.render(backend=OpenScadBackend)
print(code)
예제 #8
0
파일: barsnd.py 프로젝트: wware/tangible
import csv
from itertools import chain

from tangible import scales
from tangible.shapes.bars import BarsND
from tangible.backends.openscad import OpenScadBackend


# Read data into list
datapoints = [list() for i in xrange(9)]
with open('analytics-full-13.csv', 'r') as datafile:
    reader = csv.DictReader(datafile)
    for row in reader:
        date = row['Day']
        month = int(date.split('/', 1)[0])
        visits = int(row['Visits'])
        datapoints[month - 1].append(visits)


# Normalize data
all_datapoints = list(chain.from_iterable(datapoints))
scale = scales.linear([min(all_datapoints), max(all_datapoints)], [10, 150])
datapoints = map(lambda x: map(scale, x), datapoints)


# Create shape
bars = BarsND(datapoints, bar_width=7, bar_depth=7, center_layers=False)

code = bars.render(backend=OpenScadBackend)
print(code)
예제 #9
0
def test_linear_inverted_codomain(param, clamp, expected):
    """Test the linear scale with inverted codomain."""
    domain = (1, 3)
    codomain = (20, 10)
    scale = scales.linear(domain, codomain, clamp)
    assert scale(param) == expected
예제 #10
0
def test_linear(param, clamp, expected):
    """Test the linear scale."""
    domain = (2, 4)
    codomain = (10, 20)
    scale = scales.linear(domain, codomain, clamp)
    assert scale(param) == expected