2023-03-14 15:59:38 +01:00
//scale_bouton_commencer_contexte = 0.6
2023-03-11 21:20:49 +01:00
num _texte = 0
2023-03-22 09:47:27 +01:00
h _bouton _contexte = 0.1 * window . innerHeight
2023-03-10 11:48:37 +01:00
2023-03-11 21:20:49 +01:00
function affichage _texte _contexte ( texte , font , color , xt , yt , l _max _texte ) {
2023-03-04 17:17:07 +01:00
// Texte
2023-03-11 21:20:49 +01:00
ctx . strokeStyle = color // Pour que le contour soit rouge
ctx . fillStyle = color // Pour que l'intérieur soit bleu
2023-03-06 11:57:43 +01:00
ctx . font = font
2023-03-14 15:59:38 +01:00
print _text ( handle _text ( texte , xt , yt , font , l _max _texte , color = "#FFFFFF" , interligne = 0.045 * window . innerHeight ) , false )
2023-03-11 21:20:49 +01:00
}
2023-03-04 17:17:07 +01:00
2023-03-11 21:20:49 +01:00
////////////////////////////////////////////////////////////////////
///// BOUTON COMMENCER
2023-03-04 17:17:07 +01:00
function action _bouton _commencer _contexte ( ) {
page _contexte = false
2023-03-08 11:03:41 +01:00
page _inscription = true
//page_vues = true
2023-03-29 18:10:51 +02:00
interactions . push ( { "time" : new Date ( ) . getTime ( ) , "type" : get _message ( "fin_contexte" , [ ] ) } )
2023-03-04 17:17:07 +01:00
}
2023-03-10 11:48:37 +01:00
function afficher _bouton _commencer _contexte ( ) {
2023-03-11 22:10:12 +01:00
w _bouton _commencer = w _bouton _suivant
h _bouton _commencer = h _bouton _suivant
x _bouton _commencer = x _bouton _suivant
y _bouton _commencer = y _bouton _suivant
2023-03-10 11:48:37 +01:00
// Bouton commencer
2023-03-11 22:10:12 +01:00
ctx . drawImage ( boutons [ "commencer_inscription" ] , x _bouton _commencer , y _bouton _commencer , w _bouton _commencer , h _bouton _commencer )
2023-03-10 11:48:37 +01:00
// Survol
if ( xyMouseMove . x >= x _bouton _commencer && xyMouseMove . x <= x _bouton _commencer + w _bouton _commencer && xyMouseMove . y > y _bouton _commencer && xyMouseMove . y < y _bouton _commencer + h _bouton _commencer ) {
draw _rectangle ( x _bouton _commencer , y _bouton _commencer , w _bouton _commencer , h _bouton _commencer , "rgb(200, 200, 200)" , 0.6 )
}
}
2023-03-11 21:20:49 +01:00
////////////////////////////////////////////////////////////////////
///// BOUTON Next
function action _bouton _suivant _contexte ( ) {
num _texte = num _texte + 1
2023-03-11 22:07:08 +01:00
if ( num _texte == textes _page _1 . length ) {
texte _a _afficher = [ ] }
if ( num _texte == ( textes _page _1 . length + textes _page _2 . length ) ) {
texte _a _afficher = [ ] }
if ( num _texte == ( textes _page _1 . length + textes _page _2 . length + textes _page _3 . length ) ) {
texte _a _afficher = [ ] }
2023-03-11 21:20:49 +01:00
texte _a _afficher . push ( textes [ "texte" + num _texte ] )
2023-03-11 22:07:08 +01:00
2023-03-11 21:20:49 +01:00
}
function action _bouton _avant _contexte ( ) {
2023-03-22 10:42:08 +01:00
if ( num _texte >= 0 ) {
2023-03-11 22:07:08 +01:00
if ( num _texte == textes _page _1 . length ) {
texte _a _afficher = JSON . parse ( JSON . stringify ( textes _page _1 ) ) }
else if ( num _texte == ( textes _page _1 . length + textes _page _2 . length ) ) {
texte _a _afficher = JSON . parse ( JSON . stringify ( textes _page _2 ) ) }
else if ( num _texte == ( textes _page _1 . length + textes _page _2 . length + textes _page _3 . length ) ) {
texte _a _afficher = JSON . parse ( JSON . stringify ( textes _page _3 ) ) }
else {
texte _a _afficher . pop ( ) }
}
num _texte = num _texte - 1
2023-03-11 21:20:49 +01:00
}
function afficher _bouton _suivant _contexte ( ) {
2023-03-14 15:59:38 +01:00
//w_bouton_suivant = scale_bouton_commencer_contexte*boutons["suivant"].width
//h_bouton_suivant = scale_bouton_commencer_contexte*boutons["suivant"].height
ratio _bouton _contexte = h _bouton _contexte / boutons [ "suivant" ] . height
w _bouton _suivant = ratio _bouton _contexte * boutons [ "suivant" ] . width
h _bouton _suivant = h _bouton _contexte
2023-03-11 21:20:49 +01:00
x _bouton _suivant = ( window . innerWidth / 2 ) + 5
y _bouton _suivant = window . innerHeight - h _bouton _suivant - 20
// Bouton commencer
ctx . drawImage ( boutons [ "suivant" ] , x _bouton _suivant , y _bouton _suivant , w _bouton _suivant , h _bouton _suivant )
// Survol
if ( xyMouseMove . x >= x _bouton _suivant && xyMouseMove . x <= x _bouton _suivant + w _bouton _suivant && xyMouseMove . y > y _bouton _suivant && xyMouseMove . y < y _bouton _suivant + h _bouton _suivant ) {
draw _rectangle ( x _bouton _suivant , y _bouton _suivant , w _bouton _suivant , h _bouton _suivant , "rgb(200, 200, 200)" , 0.6 )
}
}
function afficher _bouton _avant _contexte ( ) {
w _bouton _avant = w _bouton _suivant
h _bouton _avant = h _bouton _suivant
x _bouton _avant = ( window . innerWidth / 2 ) - ( w _bouton _avant ) - 5
y _bouton _avant = y _bouton _suivant
// Bouton commencer
ctx . drawImage ( boutons [ "avant" ] , x _bouton _avant , y _bouton _avant , w _bouton _avant , h _bouton _avant )
// Survol
if ( xyMouseMove . x >= x _bouton _avant && xyMouseMove . x <= x _bouton _avant + w _bouton _avant && xyMouseMove . y > y _bouton _avant && xyMouseMove . y < y _bouton _avant + h _bouton _avant ) {
draw _rectangle ( x _bouton _avant , y _bouton _avant , w _bouton _avant , h _bouton _avant , "rgb(200, 200, 200)" , 0.6 )
}
}
////////////////////////////////////////////////////////////////////
///// MAIN
function traitement _contexte ( ) {
2023-03-14 15:59:38 +01:00
//console.log(num_texte)
2023-03-11 21:20:49 +01:00
ctx . clearRect ( 0 , 0 , canvas . width , canvas . height )
// variable position
2023-03-14 15:59:38 +01:00
x _texte = window . innerWidth * ( 1 / 10 )
w _texte = window . innerWidth * ( 8 / 10 )
2023-03-11 21:20:49 +01:00
font _texte = ( 0.012 * window . innerWidth ) + "pt Courier"
// titre commun à chaque page
2023-03-14 15:59:38 +01:00
affichage _titre ( titre , ( 0.018 * window . innerWidth ) + "pt Courier" , "#EF476F" )
2023-03-11 22:07:08 +01:00
// affichage texte
for ( let p = 0 ; p < texte _a _afficher . length ; p ++ ) {
dict _texte = texte _a _afficher [ p ]
2023-03-14 15:59:38 +01:00
if ( ( num _texte == 7 || num _texte == 6 ) && ( p == ( textes _page _2 . length ) - 1 || p == ( textes _page _2 . length ) - 2 ) ) { w _texte = window . innerWidth * ( 5 / 10 ) }
2023-03-22 09:47:27 +01:00
//if ((num_texte == 10 || num_texte == 11) && (p == (textes_page_3.length)-2)){w_texte = window.innerWidth*(5/10)}
2023-03-11 22:07:08 +01:00
affichage _texte _contexte ( dict _texte . t , font _texte , dict _texte . c , x _texte , dict _texte . y , w _texte )
2023-03-14 15:59:38 +01:00
w _texte = window . innerWidth * ( 8 / 10 )
2023-03-11 22:07:08 +01:00
}
2023-03-14 11:20:00 +01:00
if ( num _texte < ( ( textes _page _1 . length + textes _page _2 . length + textes _page _3 . length + textes _page _4 . length ) ) - 2 ) {
2023-03-11 21:20:49 +01:00
// affichage bouton next
afficher _bouton _suivant _contexte ( )
// si on clique sur next
if ( clicked && click _inside ( xyMouseDown , x _bouton _suivant , y _bouton _suivant , w _bouton _suivant , h _bouton _suivant ) ) {
// on passe aux texte suivant
action _bouton _suivant _contexte ( )
2023-03-22 10:42:08 +01:00
2023-03-11 21:20:49 +01:00
}
2023-03-11 22:07:08 +01:00
} else {
// affichage bouton next
afficher _bouton _commencer _contexte ( )
// si on clique sur next
if ( clicked && click _inside ( xyMouseDown , x _bouton _commencer , y _bouton _commencer , w _bouton _commencer , h _bouton _commencer ) ) {
// on passe aux texte suivant
action _bouton _commencer _contexte ( )
}
}
//affichage bouton previous dès le deuxièeme texte
2023-03-22 10:42:08 +01:00
if ( num _texte >= 0 ) {
2023-03-11 22:07:08 +01:00
// affichage bouton next
afficher _bouton _avant _contexte ( )
2023-03-11 21:20:49 +01:00
//si on clique sur previous
if ( clicked && click _inside ( xyMouseDown , x _bouton _avant , y _bouton _avant , w _bouton _avant , h _bouton _avant ) ) {
2023-03-22 10:42:08 +01:00
if ( num _texte == 0 ) {
action _revenir _page _avant _contexte ( )
}
2023-03-11 21:20:49 +01:00
// on passe aux texte suivant
2023-03-22 10:42:08 +01:00
else { action _bouton _avant _contexte ( ) }
2023-03-11 22:07:08 +01:00
}
2023-03-11 21:20:49 +01:00
}
2023-03-11 22:07:08 +01:00
// affichage image
if ( num _texte == 6 ) {
2023-03-14 15:59:38 +01:00
ctx . drawImage ( imgs [ 'exemple1' ] , x _bouton _suivant + w _bouton _suivant + 100 , ( textes [ "texte6" ] . y + textes [ "texte5" ] . y ) / 2 , window . innerWidth * ( 2 / 8 ) , window . innerWidth * ( 2 / 8 ) )
2023-03-11 22:07:08 +01:00
}
if ( num _texte == 7 ) {
2023-03-14 15:59:38 +01:00
ctx . drawImage ( imgs [ 'exemple2' ] , x _bouton _suivant + w _bouton _suivant + 100 , ( textes [ "texte6" ] . y + textes [ "texte5" ] . y ) / 2 , window . innerWidth * ( 2 / 8 ) , window . innerWidth * ( 2 / 8 ) )
2023-03-14 11:20:00 +01:00
}
if ( num _texte == 10 || num _texte == 11 ) {
2023-03-22 09:47:27 +01:00
//affichage_texte_contexte("Which viewpoint would you choose between both?", font_texte, "rgb(255, 209, 102)", x_texte, (textes["texte10"].y + textes["texte11"].y)/2, window.innerWidth*(4/8))
//ctx.drawImage(imgs['exemple1'], window.innerWidth*(6/10)+20 , textes["texte10"].y - 50, window.innerWidth*(1/8), window.innerWidth*(1/8))
//ctx.drawImage(imgs['exemple2'], window.innerWidth*(6/10) + window.innerWidth*(1/8) + 40, textes["texte10"].y - 50 , window.innerWidth*(1/8), window.innerWidth*(1/8))
w _exemple = window . innerWidth * ( 1 / 8 )
h _exemple = w _exemple
ctx . drawImage ( imgs [ 'exemple1' ] , window . innerWidth / 2 - w _exemple / 2 - 10 , ( textes [ "texte10" ] . y + textes [ "texte11" ] . y ) / 2 - h _exemple / 2 , w _exemple , h _exemple )
ctx . drawImage ( imgs [ 'exemple2' ] , window . innerWidth / 2 + w _exemple / 2 + 10 , ( textes [ "texte10" ] . y + textes [ "texte11" ] . y ) / 2 - h _exemple / 2 , w _exemple , h _exemple )
2023-03-14 11:20:00 +01:00
}
2023-03-11 22:07:08 +01:00
2023-03-11 21:20:49 +01:00
}
2023-03-22 10:42:08 +01:00
function action _revenir _page _avant _contexte ( ) {
page _contexte = false
page _avertissement = true
init _textes _avertissements ( )
avertissements _a _afficher = [ avertissements [ "texte0" ] , avertissements [ "texte1" ] , avertissements [ "texte2" ] ]
num _avertissement = avertissements _a _afficher . length - 1
init _clavier _avertissement ( )
document . removeEventListener ( "keydown" , action _clavier _contexte )
2023-03-29 18:10:51 +02:00
interactions . push ( { "time" : new Date ( ) . getTime ( ) , "type" : get _message ( "retour_avertissement" , [ ] ) } )
2023-03-22 10:42:08 +01:00
}
2023-03-11 21:20:49 +01:00
////////////////////////////////////////////////////////////////////
///// Textes
function init _textes _contexte ( ) {
titre = "User study : Best view selection"
color _blanc = "rgb(255,255,255)"
color _rouge = "rgb(239, 71, 111)"
textes = {
2023-03-14 10:45:18 +01:00
"texte0" : { "t" : "Hello! I am Marie Pelissier, a 3rd year PhD student. I work on computer vision, a subfield of computer science, and you are about to help me with my research." , "y" : window . innerHeight * 0.15 , "c" : color _blanc } ,
"texte1" : { "t" : "First, thank you for participating in my study. Then, I am collecting data in order to evaluate how well a computer does against actual human opinion in the mattter of finding the best viewpoint to look at an object. Unfortunatly, it seems that no one in the scientific community has yet proposed a dataset for this purpouse." , "y" : window . innerHeight * 0.35 , "c" : color _blanc } ,
"texte2" : { "t" : "That’ s where you come into play, I need you to answer a few question in order to build a dataset of human-chosen viewpoints of objects. Let me get into the details..." , "y" : window . innerHeight * 0.65 , "c" : color _blanc } ,
2023-03-11 21:20:49 +01:00
"texte3" : { "t" : "What is a viewpoint? " , "y" : window . innerHeight * 0.15 , "c" : color _rouge } ,
2023-03-14 10:45:18 +01:00
"texte4" : { "t" : "> The viewpoint of an object is the position from which we observe the object." , "y" : window . innerHeight * 0.2 , "c" : color _blanc } ,
2023-03-14 15:59:38 +01:00
"texte5" : { "t" : "A viewpoint will always highlight some parts and obscure other parts of an object." , "y" : window . innerHeight * 0.25 , "c" : color _blanc } ,
2023-03-14 10:45:18 +01:00
"texte6" : { "t" : "For example, this is wolf. This perspective highlights the tail and the hind legs, but obscures the head and face." , "y" : window . innerHeight * 0.45 , "c" : color _blanc } ,
"texte7" : { "t" : "This viewpoint reveal the head, face, and front legs but hides the tail and barely shows the hind legs." , "y" : window . innerHeight * 0.6 , "c" : color _blanc } ,
2023-03-11 21:20:49 +01:00
"texte8" : { "t" : "What is a good viewpoint?" , "y" : window . innerHeight * 0.15 , "c" : color _rouge } ,
2023-03-22 09:47:27 +01:00
"texte9" : { "t" : "> A good viewpoint is one that offers a relevant view of the object. The one that best showcases the object." , "y" : window . innerHeight * 0.2 , "c" : color _blanc } , //A more geometrical definition: a good viewpoint is a position from which most representative characteristics of an object (i.e. the parts that make the object the most identifiable), are visible.", "y": window.innerHeight*0.2, "c": color_blanc},
"texte10" : { "t" : "Let's imagine that you have to create an advertising display to promote the movie Dances with Wolves." , "y" : window . innerHeight * 0.35 , "c" : color _blanc } ,
//"texte11":{"t":"The purpose of this study is to ask you, for a given object, which are for you the best viewpoints and why. The answers will of course be subjective because everyone has their own opinion. This subjective information is what I am interested in.", "y": window.innerHeight*0.7, "c": color_blanc},
"texte11" : { "t" : "Which viewpoint would you choose between both?" , "y" : window . innerHeight * 0.8 , "c" : "rgb(255, 209, 102)" } ,
2023-03-14 11:20:00 +01:00
"texte12" : { "t" : "Now that you are up to speed, here are the instructions of the study:" , "y" : window . innerHeight * 0.15 , "c" : color _blanc } ,
"texte13" : { "t" : "- You will be presented " + nb _mesh + " different objects." , "y" : window . innerHeight * 0.25 , "c" : color _blanc } ,
2023-03-22 09:47:27 +01:00
"texte14" : { "t" : "- For each of them, you will chose a viewpoint you find most representative of the given object. You will have to do this " + nb _choix _demande + " times." , "y" : window . innerHeight * 0.35 , "c" : color _blanc } ,
2023-03-14 11:20:00 +01:00
"texte15" : { "t" : "- Afterward, you will answer a few questions to justify your choices." , "y" : window . innerHeight * 0.5 , "c" : color _blanc } ,
"texte16" : { "t" : "As a mean for you to get familiar with the interface, and make your selection easier, we have set up a quick tutorial." , "y" : window . innerHeight * 0.6 , "c" : color _blanc } ,
"texte17" : { "t" : "But before anything, we need you to register in order to save your answers." , "y" : window . innerHeight * 0.7 , "c" : color _blanc } ,
2023-03-11 21:20:49 +01:00
}
textes _page _1 = [ textes [ "texte0" ] , textes [ "texte1" ] , textes [ "texte2" ] ]
textes _page _2 = [ textes [ "texte3" ] , textes [ "texte4" ] , textes [ "texte5" ] , textes [ "texte6" ] , textes [ "texte7" ] ]
2023-03-14 11:20:00 +01:00
textes _page _3 = [ textes [ "texte8" ] , textes [ "texte9" ] , textes [ "texte10" ] , textes [ "texte11" ] ]
textes _page _4 = [ textes [ "texte12" ] , textes [ "texte13" ] , textes [ "texte14" ] , textes [ "texte15" ] , textes [ "texte16" ] , , textes [ "texte17" ] ]
2023-03-11 21:20:49 +01:00
texte _a _afficher = [ textes [ "texte0" ] ]
}