airfoilPoster.frink

Download or view airfoilPoster.frink in plain text format


/** This plots a poster or chart of various airfoils.

    All of the airfoils can be downloaded from:
    https://m-selig.ae.illinois.edu/ads/archives/coord_seligFmt.zip

    Usage:
       frink airfoilPoster.frink [filenames]

    This program is most easily run from the directory where the airfoils are
    extracted.  If no filenames are specified, this will render all .dat files
    in the current directory:

       frink airfoilPoster.frink

    If airfoil filenames are specified, this will render the specified airfoils
    which can be in a different directory.  Most generally, the command-line
    below will render the airfoils n*.dat.  MAKE SURE TO ADJUST ALL PATHS TO
    MATCH YOUR SYSTEM!

    /path/to/frink /path/to/airfoilPoster.frink /path/to/airfoils/n*.dat
*/


use airfoil.frink

// The width indicates how many airfoils per column.
//width = floor[sqrt[length[ARGS]]]  // This gives a square poster
width = 8                            // Good for SVG chart
scale = 100

if length[ARGS] == 0
{
   println["No filenames specified.  Will render all .dat files in the current directory."]
   filenames = new array
   for f = select[files["."], {|file| file.getName[] =~ %r/\.dat$/i}]
      filenames.push[f.getName[]]
} else
   filenames = deepCopy[ARGS]

lexicalSort[filenames]

poster = new graphics
cell = 0

for filename = filenames
{
   url = filenameToURL[filename]
   println[url]
   airfoil = Airfoil.loadSelig[url]
   poly = airfoil.toFilledPolygon[scale, scale]

   caption = new graphics
   caption.font["SansSerif", 5]
   name = airfoil.name
   name =~ %s/\s+airfoil\b//i               // Remove word "AIRFOIL"
   name =~ %s/(.{7,}?)\s\(/$1\n\(/i         // Split before first parentheses
   name =~ %s/(.{12,}?)\s/$1\n/g            // Split lines
   caption.text[name, scale/2, .3 scale]
   poster.addCenter[poly, cell mod width, cell div width, .9, .9]
   poster.addCenter[caption, cell mod width, (cell div width) + .3, .9, .9]
   cell = cell + 1
}

println["$cell airfoils processed."]
//poster.show[]
poster.write["airfoils.svg", 1000, undef, .995]
println["airfoils.svg written."]
poster.write["airfoils.html", 1000, undef, .995]
println["airfoils.html written."]


Download or view airfoilPoster.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19972 days, 5 hours, 21 minutes ago.