pfa 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6ccdb2fab099b304836b687b9d582de1769019ab82ca15edfc05394fdd6e0d01
4
+ data.tar.gz: 1ada3fac532d0821fe5067347d7f6fc2015e3b515b629cc50acfebb2b9501d21
5
+ SHA512:
6
+ metadata.gz: 7af5538084c56b345e4d317b0041814b1adc11829aed0475584422f21a5ea6624c5f2fcab3633e3d08871126aa83f9f7c1417a223d8b2d9b84b89f900a37c659
7
+ data.tar.gz: eeeae95913d4135f4fe1835c7b5792ce7f53c5780e900b599aa74d13ebb648817a40ffa0b29d5c3806d722c098be8149f1139c2df0e0863c34f899d7576de7ac
data/.DS_Store ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 2.7.3
6
+ before_install: gem install bundler -v 2.1.4
data/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # Change log
2
+
3
+ ## 1.0.1
4
+
5
+ * Première release propulsée
6
+
7
+ ## 1.0.0
8
+
9
+ * Première version opérationnelle.
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in pfa.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "minitest", "~> 5.0"
data/Gemfile.lock ADDED
@@ -0,0 +1,46 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pfa (0.1.0)
5
+ clir
6
+ singleton
7
+ yaml
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ clir (0.22.1)
13
+ json
14
+ tty-prompt
15
+ json (2.6.3)
16
+ minitest (5.19.0)
17
+ minitest-color (0.0.2)
18
+ minitest (~> 5)
19
+ pastel (0.8.0)
20
+ tty-color (~> 0.5)
21
+ rake (12.3.3)
22
+ singleton (0.1.1)
23
+ tty-color (0.6.0)
24
+ tty-cursor (0.7.1)
25
+ tty-prompt (0.23.1)
26
+ pastel (~> 0.8)
27
+ tty-reader (~> 0.8)
28
+ tty-reader (0.9.0)
29
+ tty-cursor (~> 0.7)
30
+ tty-screen (~> 0.8)
31
+ wisper (~> 2.0)
32
+ tty-screen (0.8.1)
33
+ wisper (2.0.1)
34
+ yaml (0.2.1)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ minitest (~> 5.0)
41
+ minitest-color
42
+ pfa!
43
+ rake (~> 12.0)
44
+
45
+ BUNDLED WITH
46
+ 2.1.4
data/README.md ADDED
@@ -0,0 +1,156 @@
1
+ # PFA
2
+
3
+ PFA pour "Paradigme de Field Augmenté". Ce gem permet de le gérer de façon simple.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'pfa'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle install
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install pfa
20
+
21
+ ## Usage
22
+
23
+ On commence toujours par instancier un nouveau paradigme.
24
+
25
+ ~~~ruby
26
+ require 'pfa'
27
+
28
+ pfa = PFA::new
29
+ ~~~
30
+
31
+ > Ou on définit directement toutes les valeurs [cf. ci-dessous](#with-all-data)
32
+
33
+ Ensuite, on le renseigne en lui ajoutant des nœuds :
34
+
35
+ ~~~ruby
36
+ pfa.add :incident_declencheur, {t:"0+12+0", d:"Louis tue Harlan, le violeur de Selma"}
37
+ pdf.add :pivot1, {t:"0,23,15", d:"Louise décide de fuir au Mexique."}
38
+ # etc.
39
+ ~~~
40
+
41
+ Il faut aussi définir le "zéro" absolu du film et son temps de fin.
42
+
43
+ > Ce "zéro" permettra de rectifier tous les temps quelle que soit la vidéo utilisée. Par exemple, ce zéro peut être le timecode de la toute première image du film, ou le timecode de l'apparition du titre.
44
+ > Tous les autres temps seront donnés normalement.
45
+
46
+ ~~~ruby
47
+
48
+ pfa.zero = "0:00:25"
49
+ pfa.end_time = "1:58:56"
50
+
51
+ ~~~
52
+
53
+ <a name="with-all-data"></a>
54
+
55
+ ### Définition en fournissant toutes les données
56
+
57
+ On peut aller très vite en définissant tout :
58
+
59
+ ~~~
60
+ require 'pfa'
61
+
62
+ data_paradigme = {
63
+ zero: 35,
64
+ end_time: 2*60+15,
65
+ incident_declencheur: {t:'0+10+25', d:"LUI rencontre ELLE pour la première fois."},
66
+ pivot1: {t:'0:25;56', d:"<description du premier pivot"},
67
+ developpement_part1: {t: 30*60, d:"<description de la première partie du développement>"}
68
+ # etc. avec toutes les données requises (cf. ci-dessous)
69
+ # ...
70
+ }
71
+
72
+ pfa = PFA.new(data_paradigme)
73
+ pfa.to_img
74
+ # => produit l'image du paradigme
75
+
76
+ # Ou
77
+ pfa.to_img(**{as: :default})
78
+ # => Produit l'image avec d'autres dimension
79
+
80
+ ~~~
81
+
82
+ > Noter les différentes formes que peut prendre le temps : une horloge normale ("0:23:45"), une horloge avec des "+" (attention : ce n'est pas une addition, c'est juste un signe plus facile à écrire), une horloge avec des virgules ("0,3,15" — plus facile à écrire aussi), un nombre de secondes (3752), et même un temps `Time` (Time.at(152)).
83
+
84
+ ### Données minimales
85
+
86
+ Pour pouvoir être construit, un *PFA* doit définir au moins les nœuds suivants. Tous ces nœuds doivent être définis avec la méthode `pfa#add` et les deux arguments requis, la clé symbolique (p.e. `:pivot2`) et une table contenant la clé `t:` (timecode), la clé `d:` (description) et optionnellement la clé `:duree` (nombre de secondes).
87
+
88
+ ~~~bash
89
+ :exposition
90
+ :incident_declencheur
91
+ :pivot1
92
+ :developpement_part1
93
+ :developpement_part2
94
+ :pivot2
95
+ :denouement
96
+ :climax
97
+ ~~~
98
+
99
+ > Si un de ces nœuds n'est pas défini, ou que les propriétés `zero` et `end_time` ne sont pas définies, la construction produira une erreur.
100
+
101
+ La liste complète des clés utilisables et définissables de la même manière est :
102
+
103
+ ~~~bash
104
+ :exposition
105
+ :preambule
106
+ :incident_perturbateur
107
+ :incident_declencheur
108
+ :zone_de_refus
109
+ :pivot1
110
+ :developpement_part1
111
+ :premiere_action
112
+ :premier_tiers
113
+ :cle_de_voute
114
+ :developpement_part2
115
+ :premiere_action_dev2
116
+ :deuxieme_tiers
117
+ :crise
118
+ :pivot2
119
+ :denouement
120
+ :premier_action_denouement
121
+ :climax
122
+ :desinence
123
+ ~~~
124
+
125
+ Une fois les nœuds du paradigme définis, on peut le construire…
126
+
127
+ * sous forme d'image JPEG :
128
+
129
+ ~~~ruby
130
+ pfa.to_img
131
+ ~~~
132
+
133
+ Par défaut, ce sera une image pour un livre (environ A5) d'analyse de film comme ceux produit par la collection « Leçons du cinéma ».
134
+
135
+ * sous forme de fichier HTML (non encore implémenté) :
136
+
137
+ ~~~ruby
138
+ pfa.to_html
139
+ ~~~
140
+
141
+ ### Options de sortie
142
+
143
+ Des options de sortie (premier argument de `#to_img` ou `#to_html`) permettent d'affiner la sortie attendue.
144
+
145
+ \[À développer]
146
+
147
+ ## Development
148
+
149
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
150
+
151
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
152
+
153
+ ## Contributing
154
+
155
+ Bug reports and pull requests are welcome on GitHub at https://github.com/PhilippePerret/pfa.
156
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "pfa"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,155 @@
1
+ # PFA — Manuel pour ImageMagick
2
+
3
+ Ce document permet de comprendre le code utilisé pour la production du Paradigme de Field Augmenté avec Image magick.
4
+
5
+
6
+
7
+ ## Description du code
8
+
9
+ ### Introduction
10
+
11
+ ~~~bash
12
+ convert -size #{width}x#{height} \
13
+ xc:white \
14
+ -units PixelsPerInch -density 300 \
15
+ -background transparent \
16
+ -set colorspace sRGB
17
+
18
+ # convert
19
+ # => Commande pour produire l’image
20
+ # -size widthxheight
21
+ # => Taille de l'image.
22
+ # Pour un livre d'analyse, c’est 5976 px de large et 3882 px de hauteur
23
+ # ATTENTION de bien définir la taille avant le xc:, sinon
24
+ # le canevas ferait 1 px / 1 px
25
+ # xc:white
26
+ # => Définit le canevas. Sans cette indication, l'image ne peut pas être
27
+ # créée
28
+ # -units UNITÉ
29
+ # => Permet de définir l'unité de la résolution [à confirmer]
30
+ # => PixelsPerInch = Nombre de pixels par pouce
31
+ # -density DENSITÉ
32
+ # => Définit la résolution
33
+ # => 300 points par pouce (pixels par pouce ?)
34
+ # -background COULEUR
35
+ # => Définit la nature de couleur du fond
36
+ # => transparent pour le fond de l'image
37
+ # -set colorspace ESPACE_COULEUR
38
+ # => Pour définir l'espace de couleur
39
+ # => sRGB pour un espace RGB (RVB) avec transparence.
40
+ ~~~
41
+
42
+ On dessine le premier **rectangle** pour l’**exposition du paradigme idéal**.
43
+
44
+ ~~~bash
45
+ -stroke gray50 -fill white -strokewidth 3 -draw "rectangle 0,258 1494,1806" \
46
+
47
+ # -stroke COULEUR
48
+ # => Définission de la couleur du trait/de la police
49
+ # => gray50 est un gris 50 %
50
+ # -fill COULEUR
51
+ # => Couleur de remplissage de la police
52
+ # => white, elle sera blanche
53
+ # -strokewidth TAILLE
54
+ # (pas sûr que ce soit nécessaire ici)
55
+ # => Largeur du trait ou de la police
56
+ # => 3 indique une grosseur de 3 pixels. On aura donc un trait
57
+ # avec des caractères délimités en noir (stroke) et du
58
+ # blanc à l'intérieur
59
+ # -draw
60
+ # => Pour dessiner quelque chose dans l'image avec les paramètres
61
+ # qui viennent d'être définis. Note : on peut aussi dessiner du
62
+ # texte avec cette commande, comme on le verra.
63
+ # => "rectangle 0,258 1494,1806" dessinera un rectangle depuis le
64
+ # point 0,258 (left,top) jusqu'au point 1494, 1806 (left, top)
65
+ ~~~
66
+
67
+ On pourrait poursuivre en ajoutant les choses à dessiner de la même manière.
68
+
69
+ ~~~bash
70
+ -draw "text 4,262 EXPOSITION" \
71
+ -draw "rectangle 1494,258 2600,1806" \
72
+ -draw "circle ..." \
73
+ ~~~
74
+
75
+ Le problème, ci-dessus, se pose particulièrement pour les textes, si on veut les aligner aux boites et aux points (qui représentent des évènements du paradigme). Dans ce cas, il faut utiliser le mode composite :
76
+
77
+ ~~~bash
78
+ \( ... définition ... \) -geometry +100-21 -gravity Center -composite
79
+
80
+ # => \(...\) va définir l'élément à écrire, avec les mêmes paramètres que
81
+ # les autres éléments
82
+ # Penser à laisser des espaces à l'intérieur.
83
+ # => -gravity GRAVITÉ
84
+ # Indique l'alignement de la boite par rappart à l'image totale
85
+ # Center indique que la boite va être alignée au centre verticalement
86
+ # et horizontalement. On indique les autres valeurs par North,
87
+ # South, East et West. Par exemple NorthWest pour aligner en haut
88
+ # à gauche.
89
+ # => -geometry GEOMÉTRIE
90
+ # Permet d'ajuster la position de la boite de façon précise par rapport
91
+ # à la gravité choisie.
92
+ # La valeur est un signe et un nombre pour la valeur horizontale et la
93
+ # même chose par rapport à la valeur verticale. Ici, par exemple, on
94
+ # ajoutera 100 points horizontalement et on en enlèvera 21 verticalement.
95
+ # ATTENTION : ces ajouts ne fonctionnement pas de la même manière suivant
96
+ # la gravité. Par exemple, si la gravité est au sud (South) une valeur
97
+ # positive fera REMONTER la boite tandis que si la gravité est au nord
98
+ # (North) une valeur positive fera DESCENDRE la boite
99
+ ~~~
100
+
101
+ On peut trouver entre les `\(...\)` toutes les propriétés qui vont définir l’aspect (`stroke`, `background` etc.).
102
+
103
+ On prend soin de mettre le label au bout de la définition, pour qu’il profite bien des définitions.
104
+
105
+ Les définitions à particulière comprendre sont :
106
+
107
+ ~~~bash
108
+ \( -size <WxH> -extent <WxH>... label:"Mon label" \) -composite \
109
+
110
+ # => -size DIMENSION
111
+ # Permet de définir la taille du label. Plus la taille sera grande
112
+ # et plus le label sera affiché gros.
113
+ # ATTENTION : ça n'est pas la taille de la boite contenant.
114
+ # => -extent DIMENSION
115
+ # Permet de définir la taille véritable de la boite
116
+ # => label:"STRING"
117
+ # Définit le label. Noter qu'il n'y a pas de tiret avant cette
118
+ # propriété.
119
+ ~~~
120
+
121
+ On peut trouver les autres propriétés, dans cette boite :
122
+
123
+ ~~~bash
124
+ \( -extent 1000x1000 -gravity SouthEast label:"Label en bas à droite" \) \
125
+ -geometry +100+100
126
+ -gravity Center \
127
+ -composite \
128
+
129
+ # => -gravity (entre les parenthèses)
130
+ # Définit l'alignement, mais dans la boite de 1000x1000.
131
+ # Alors que la boite elle-même sera située au centre de l'image,
132
+ # décalée de 100 points vers le bas et vers la gauche.
133
+ ~~~
134
+
135
+
136
+
137
+ On va écrire le label « Exposition ».
138
+
139
+ ~~~bash
140
+ \( -background transparent -stroke gray75 -strokewidth 3 -pointsize 36.0 -size 1494x200 \
141
+ -trim -extent 1494x200 -gravity Center label:"EXPOSITION" \) -gravity NorthWest \
142
+ -geometry +0+420 -composite
143
+
144
+ ~~~
145
+
146
+
147
+
148
+ On ajoute le **rectangle** pour la **première partie de développement idéal**.
149
+
150
+ ~~~bash
151
+
152
+
153
+
154
+ ~~~
155
+
@@ -0,0 +1,50 @@
1
+ # PFA — Manuel du développeur
2
+
3
+ ## Difficulté des temps
4
+
5
+ > Note : pour simplifier, on ne ramène plus les temps à 120 minutes comme c'était le cas avant. On ne tient compte que de la durée réelle du film.
6
+
7
+ La difficulté des temps pour les nœuds tient au fait que :
8
+
9
+ * Le nœud possède un temps absolu (défini par le paradigme absolu). Ce temps correspond à la position idéale du nœud dans le paradigme.
10
+ * Le nœud possède un temps relatif (défini par rapport au film). Ce temps correspond à la position relative (au zéro) du nœud dans le film analysé. Il correspond à l'horloge réelle qui est affichée à l'écran, qu'on appelle "timecode".
11
+ * Le nœud possède un *temps relatif exact*. Ce temps correspond à la position réelle du nœud dans le film analysé, *en faisant abstraction du zéro*.
12
+
13
+ Exemple :
14
+
15
+ La clé de voûte se trouve dans l'absolu presque au milieu du film. Elle se trouve à `60 - 2` en temps rapporté à 120 minutes.
16
+
17
+ Imaginons un film qui commence réellement au temps `0:00:23`, qui possède une durée de `90 minutes` et qui possède une clé de voûte à `0:40:00` (à l'écran).
18
+
19
+ Dans ce cas, la position exacte de la clé de voûte sera :
20
+
21
+ ~~~bash
22
+ 0:40:00
23
+ - 0:00:23
24
+ = 0:39:37
25
+ ~~~
26
+
27
+ Plusieurs méthode pratiques permettent de gérer ces temps :
28
+
29
+ ~~~ruby
30
+ Soit cdv, l'instance \PFA::RelativePFA::Node de la clé de voûte.
31
+
32
+ cdv.start_at
33
+ # => \PFA::NTime du temps du nœud tel qu'il a été instancié avec l'horloge du film.
34
+
35
+ cdv.start_at.exact
36
+ # => \PFA::NTime du temps exact du nœud, en tenant compte du zéro
37
+
38
+ cdv.start_at.exact.to_horloge
39
+ # => \String L'horloge exacte, comme si le film commençait à 0:00:00.
40
+
41
+ cdv.start_at.to_horloge
42
+ # => \String L'horloge à l'écran, avec un début de film qui n'est pas à 0:00:00.
43
+
44
+ cdv.start_at.on_120
45
+ # => \Float la minute sur laquelle sera la clé de voûte si le film faisait 120 minutes
46
+ # Noter que cette valeur tient forcément compte de la position du zéro, et prend
47
+ # donc la valeur de la position exacte du nœud.
48
+
49
+
50
+ ~~~