File: 99-wifi-parabola.t

package info (click to toggle)
libpdf-create-perl 1.46-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 652 kB
  • sloc: perl: 3,352; makefile: 8
file content (139 lines) | stat: -rw-r--r-- 4,947 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/perl
#
# PDF::Create - Test Script
#
# Copyright 2010-     Markus Baertschi <markus@markus.org>
#
# Please see the CHANGES and Changes file for the detailed change log
#
# As example we draw a parabola which can be used to focus wifi signals
#
# This has not much to do with testing, but I like it, so it remains :-).
#

use strict; use warnings;
use PDF::Create;
use Test::More tests => 1;

my $pdfname = $0;
$pdfname =~ s/\.t/\.pdf/;

my $pdf = PDF::Create->new( 'filename' => "$pdfname",
						   'Version'  => 1.2,
						   'PageMode' => 'UseOutlines',
						   'Author'   => 'Markus Baertschi',
						   'Title'    => 'Parabolic WiFi Antenna'
						 );

my $root = $pdf->new_page( 'MediaBox' => $pdf->get_page_size('A4') );

# Prepare 2 fonts
my $f1 = $pdf->font( 'Subtype'  => 'Type1',
					 'Encoding' => 'WinAnsiEncoding',
					 'BaseFont' => 'Helvetica'
				   );
my $f2 = $pdf->font( 'Subtype'  => 'Type1',
					 'Encoding' => 'WinAnsiEncoding',
					 'BaseFont' => 'Helvetica-Bold'
				   );

# Add a page which inherits its attributes from $root
my $page = $root->new_page;

# Write the title
$page->stringc( $f2, 25, 300, 770, 'Parabolic WiFi Reflector Template' );
$page->stringc( $f1, 12, 300, 740, 'Markus Baertschi (markus@markus.org)' );

# General parameters
my $dy = 310;    # y offset from page origin
my $ay = 280;    # y amplitude
my $dx = 100;    # x offset from page origin
my $p  = 100;    # distance from back to focal point

$page->stringl( $f2, 10, 100, 710, 'Introduction' );
$page->stringl( $f1, 10, 100, 700,
				'This template allows you to build a simple, but effective WiFi range extender. The reflector described' );
$page->stringl( $f1, 10, 100, 690,
				'here will concentrate the signal of your access point in one direction. THe range in this direction will' );
$page->stringl( $f1, 10, 100, 680, 'be much better at the expense of the range in all other directions.' );

# Write instructions
$page->stringl( $f2, 10, 100, 660, 'Instructions:' );
$page->stringl( $f1, 10, 100, 650, '- Make square or rectangular reflector from metallic material (Tin foil, etc)' );
$page->stringl( $f1, 10, 100, 640, '- Bend reflector to parabolic shape' );
$page->stringl( $f1, 10, 100, 630, '- Fix reflector with the antenna at the focal point' );

# Write the labels
$page->stringl( $f1, 12, $dx + $p + 10, 460,      'Parabola (The reflector must be shaped like this)' );
$page->stringl( $f1, 10, $dx + $p + 30, $ay - 10, 'Focal Point (Antenna goes here)' );

# Draw the focal point
my $l = 30;    # Length of cross
$page->line( $dx + $p - $l, $dy,      $dx + $p + $l, $dy );
$page->line( $dx + $p,      $dy - $l, $dx + $p,      $dy + $l );
$page->newpath;
$page->set_width(0.5);
$page->setrgbcolorstroke( 0, 0, 0 );
$page->moveto( $dx + $p - $l / 2, $dy );
$page->curveto( $dx + $p - $l / 2, $dy + $l / 2 * 0.55, $dx + $p - $l / 2 * 0.55, $dy + $l / 2, $dx + $p, $dy + $l / 2 );
$page->curveto( $dx + $p + $l / 2 * 0.55, $dy + $l / 2, $dx + $p + $l / 2, $dy + $l / 2 * 0.55, $dx + $p + $l / 2, $dy );
$page->curveto( $dx + $p + $l / 2, $dy - $l / 2 * 0.55, $dx + $p + $l / 2 * 0.55, $dy - $l / 2, $dx + $p, $dy - $l / 2 );
$page->curveto( $dx + $p - $l / 2 * 0.55, $dy - $l / 2, $dx + $p - $l / 2, $dy - $l / 2 * 0.55, $dx + $p - $l / 2, $dy );
$page->stroke;

$ay = 50;     # y amplitude
$dy = 100;    # y offset from page origin
$dx = 300;    # x offset from page origin
$p  = 10;     # distance from back to focal point

$page->newpath;
$page->set_width(2);
$page->setrgbcolorstroke( 0.1, 0.2, 1 );
$page->moveto( $ay * $ay / ( 4 * $p ), -$ay );
for ( my $y = -$ay ; $y <= $ay ; $y = $y + 2 ) {
	my $x = $y * $y / ( 4 * $p );
	$page->lineto( $x + $dx, $y + $dy );
}
$page->stroke;

my $i = 0;
$page->newpath;
$page->set_width(1);
$page->setrgbcolorstroke( 0.1, 0.2, 1 );
$page->moveto( $ay * $ay / ( 4 * $p ), -$ay );
for ( my $y = -$ay ; $y <= $ay ; $y = $y + 2 ) {
	my $x = $y * $y / ( 4 * $p );
	$page->lineto( $x + $dx + $i, $y + $dy );
	$i++;
	$i++;
}
$page->stroke;
$page->newpath;
$i = 0;
$page->moveto( $ay * $ay / ( 4 * $p ), -$ay );
for ( my $y = -$ay ; $y <= $ay ; $y = $y + 2 ) {
	my $x = $y * $y / ( 4 * $p );
	$page->lineto( $x + $dx + $i, $y + $dy + $ay * 2 );
	$i++;
	$i++;
}
$page->stroke;
$page->line( $dx + $ay + 12,     $dy - $ay,      $dx + $ay + 12,     $dy + $ay );
$page->line( $dx + $ay - 10,     $dy - $ay + 30, $dx + $ay - 10,     $dy + $ay + 30 );
$page->line( $dx + $ay * 3 + 12, $dy + $ay,      $dx + $ay * 3 + 12, $dy + $ay * 3 );
$page->set_width(3);
$page->line( $dx + $ay * 2, $dy, $dx + $ay * 2, $dy + $ay * 2 );

# Wrap up the PDF and close the file
$pdf->close;


################################################################
#
# Check the resulting pdf for errors with pdftotext
#
SKIP: {
	skip '/usr/bin/pdftotext not installed', 1 if (! -x '/usr/bin/pdftotext');
    my $out = `/usr/bin/pdftotext $pdfname /dev/null 2>&1`;
    ok( $out eq "", "pdftotext $out");
}