From: <arj...@us...> - 2008-08-18 20:05:34
|
Revision: 8669 http://plplot.svn.sourceforge.net/plplot/?rev=8669&view=rev Author: arjenmarkus Date: 2008-08-18 20:05:35 +0000 (Mon, 18 Aug 2008) Log Message: ----------- First implementation of example 26 in Tcl - not quite identical to the C version yet (flushing of the second page? Also: significant differences in PostScript, seems related to the "special" characters) Added Paths: ----------- trunk/examples/tcl/x26 trunk/examples/tcl/x26.tcl Added: trunk/examples/tcl/x26 =================================================================== --- trunk/examples/tcl/x26 (rev 0) +++ trunk/examples/tcl/x26 2008-08-18 20:05:35 UTC (rev 8669) @@ -0,0 +1,19 @@ +#!/bin/sh +#--------------------------------*- Tcl -*------------------------------------# +# $Id$ +# +# Arjen Markus +# 08/18/08 +# +# A front-end to x26.tcl for running directly from the command line, locating +# pltcl via PATH. +# Handles all usual plplot command arguments. See "pltcl -h" for info. +#-----------------------------------------------------------------------------# +#\ +exec pltcl -f "$0" ${1+"$@"} + +source x26.tcl + +plinit +x10 +plend Property changes on: trunk/examples/tcl/x26 ___________________________________________________________________ Added: svn:executable + * Added: trunk/examples/tcl/x26.tcl =================================================================== --- trunk/examples/tcl/x26.tcl (rev 0) +++ trunk/examples/tcl/x26.tcl 2008-08-18 20:05:35 UTC (rev 8669) @@ -0,0 +1,182 @@ +# -*- coding: utf-8; -*- +# +# $Id$ +# +# Multi-lingual version of the first page of example 4. +# +# Copyright (C) 2006 Alan Irwin +# Copyright (C) 2006,2008 Andrew Ross +# Copyright (C) 2008 Arjen Markus +# +# Thanks to the following for providing translated strings for this example: +# Valery Pipin (Russian) +# +# This file is part of PLplot. +# +# PLplot is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Library Public License as published +# by the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PLplot is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public License +# along with PLplot; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# + +# +# This example designed just for devices (e.g., psttfc and the +# cairo-related devices) that utilise the pango and fontconfig libraries. The +# best choice of glyph is selected by fontconfig and automatically rendered +# by pango in way that is sensitive to complex text layout (CTL) language +# issues for each unicode character in this example. Of course, you must +# have the appropriate TrueType fonts installed to have access to all the +# required glyphs. +# +# Translation instructions: The strings to be translated are given by +# x_label, y_label, alty_label, title_label, and line_label below. The +# encoding used must be UTF-8. +# +# The following strings to be translated involve some scientific/mathematical +# jargon which is now discussed further to help translators. +# +# (1) dB is a decibel unit, see http://en.wikipedia.org/wiki/Decibel . +# (2) degrees is an angular measure, see +# http://en.wikipedia.org/wiki/Degree_(angle) . +# (3) low-pass filter is one that transmits (passes) low frequencies. +# (4) pole is in the mathematical sense, see +# http://en.wikipedia.org/wiki/Pole_(complex_analysis) . "Single Pole" +# means a particular mathematical transformation of the filter function has +# a single pole, see +# http://ccrma.stanford.edu/~jos/filters/Pole_Zero_Analysis_I.html . +# Furthermore, a single-pole filter must have an inverse square decline +# (or -20 db/decade). Since the filter plotted here does have that +# characteristic, it must by definition be a single-pole filter, see also +# http://www-k.ext.ti.com/SRVS/Data/ti/KnowledgeBases/analog/document/faqs/1p.htm +# (5) decade represents a factor of 10, see +# http://en.wikipedia.org/wiki/Decade_(log_scale) . +# +# +# + +# -------------------------------------------------------------------------- +# main +# +# Illustration of logarithmic axes, and redefinition of window. +# -------------------------------------------------------------------------- + +proc x26 {{w loopback}} { + + set x_label { + "Frequency" + "Частота" + } + + set y_label { + "Amplitude (dB)" + "Амплитуда (dB)" + } + + set alty_label { + "Phase shift (degrees)" + "Фазовый сдвиг (градусы)" + } + + set title_label { + "Single Pole Low-Pass Filter" + "Однополюсный Низко-Частотный Фильт\xD1" + } + + set line_label { + "-20 dB/decade" + "-20 dB/десяток" + } + + # Parse and process command line arguments + + # AM: TODO + # plparseopts? + + # Initialize plplot + + $w cmd plfont 2 + + # Make log plots using two different styles. + + foreach xl $x_label yl $y_label altyl $alty_label title $title_label linel $line_label { + plot1 $w 0 $xl $yl $altyl $title $linel + } + $w cmd plend + +} + +# -------------------------------------------------------------------------- +# plot1 +# +# Log-linear plot. +# -------------------------------------------------------------------------- + +proc plot1 { w type x_label y_label alty_label title_label line_label } { + + set PI [expr {4.0*atan(1.0)}] + + matrix freql f 101 + matrix ampl f 101 + matrix phase f 101 + + $w cmd pladv 0 + + # Set up data for log plot + + set f0 1.0 + for {set i 0} {$i < 101} {incr i} { + freql $i = [expr {-2.0 + ($i-1) / 20.0}] + set freq [expr {pow(10.0,[freql $i])}] + ampl $i = [expr {20.0 * log10(1.0 / sqrt(1.0 + pow($freq/$f0,2)))}] + phase $i = [expr {-(180.0 / $PI) * atan($freq / $f0)}] + } + $w cmd plvpor 0.15 0.85 0.1 0.9 + $w cmd plwind -2.0 3.0 -80.0 0.0 + + # Try different axis and labelling styles. + + $w cmd plcol0 1 + if { $type == 0 } { + $w cmd plbox "bclnst" 0.0 0 "bnstv" 0.0 0 + } + if { $type == 1 } { + $w cmd plbox "bcfghlnst" 0.0 0 "bcghnstv" 0.0 0 + } + + # Plot ampl vs freq + + $w cmd plcol0 2 + $w cmd plline 101 freql ampl + $w cmd plcol0 1 + $w cmd plptex 1.6 -30.0 1.0 -20.0 0.5 $line_label + + # Put labels on + + $w cmd plcol0 1 + $w cmd plmtex "b" 3.2 0.5 0.5 $x_label + $w cmd plmtex "t" 2.0 0.5 0.5 $title_label + $w cmd plcol0 2 + $w cmd plmtex "l" 5.0 0.5 0.5 $y_label + + # For the gridless case, put phase vs freq on same plot + + if {$type == 0} { + $w cmd plcol0 1 + $w cmd plwind -2.0 3.0 -100.0 0.0 + $w cmd plbox "" 0.0 0 "cmstv" 30.0 3 + $w cmd plcol0 3 + $w cmd plline 101 freql phase + $w cmd plcol0 3 + $w cmd plmtex "r" 5.0 0.5 0.5 $alty_label + } +} Property changes on: trunk/examples/tcl/x26.tcl ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |