[Timidouveg’s Museum] Déplacer les points créés et normale

Il y a quelques jours j’ai ajouté la possibilité de déplacer les points créés dans un secteur, au cas où l’utilisateurice se trompe ou simplement pour modeler son secteur à sa convenance. Je n’ai pas encore ajouté de boutons pour changer de mode, ni pour témoigner du mode dans lequel vous êtes. Il y a maintenant deux modes dans l’éditeur. Le mode création de secteurs que vous pouvez activer en appuyant sur la touche C du clavier, et le mode déplacement de points, en appuyant à nouveau sur C. Lors que vous arrivez sur l’éditeur, le mode actif est le déplacement de points. Vous ne pouvez donc pas créer de secteurs avant d’avoir appuyé une fois sur C. Attention à ne pas oublier d’appuyer sur C pour déplacer les points mal placés, autrement vous risquez de créer de nouveaux points en cliquant que un d’entre eux. Ce n’est pas pratique, et ce sera changé à l’avenir. Aussi un message indiquant le numéro du point apparaît en bas à gauche lorsqu’il est en cours de déplacement.

TimidouvegMuseum_2017-07-26Petit détail qui va évoluer aussi pour des raisons pratiques, en mode déplacement de points, chaque point survolé par le curseur de la souris est orange. Dés que vous cliquez sur le point, il devient jaune et si vous bougez avec le bouton de la souris enfoncée, le point et les lignes du dessin suivent la souris. La sélection orange utilise une simple condition d’égalité entre la position du point et la souris. Ce n’est pas pratique parce qu’il faut se mettre vraiment dessus et non un peu à coté pour attraper le point. C’était pour la première étape des tests à ce sujet, mais je changerais de méthode pour un cercle de détection autour du point et un système de choix du point le plus proche de la souris 🙂

Dans cette nouvelle version de l’éditeur, j’ai fais apparaître un fond blanc transparent qui permet de distinguer l’intérieur d’un secteur de l’extérieur (le vide). J’ai aussi ajouté des petits traits oranges au milieu des segments. Ces traits sont les normales des segments qui permettent de visualiser le sens des segments dont j’ai parlé dans l’article Calculer le sens d’un segment. J’explique dans l’article Calculer la norme, la normale et le milieu d’un segment, comment j’ai conçu ce petit système.

Rappel du lien vers l’application : Timidouveg’s Museum. Vous pouvez aussi cliquer sur l’image que pour y accéder 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

recaptcha/recaptchalib.php at 1.0.0 · google/recaptcha · GitHub
Skip to content
Permalink
Switch branches/tags
Find file
8a45f9d Dec 1, 2014
141 lines (129 sloc) 4.47 KB
<?php
/**
* This is a PHP library that handles calling reCAPTCHA.
* - Documentation and latest version
* https://developers.google.com/recaptcha/docs/php
* - Get a reCAPTCHA API Key
* https://www.google.com/recaptcha/admin/create
* - Discussion group
* http://groups.google.com/group/recaptcha
*
* @copyright Copyright (c) 2014, Google Inc.
* @link http://www.google.com/recaptcha
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* A ReCaptchaResponse is returned from checkAnswer().
*/
class ReCaptchaResponse
{
public $success;
public $errorCodes;
}
class ReCaptcha
{
private static $_signupUrl = "https://www.google.com/recaptcha/admin";
private static $_siteVerifyUrl =
"https://www.google.com/recaptcha/api/siteverify?";
private $_secret;
private static $_version = "php_1.0";
/**
* Constructor.
*
* @param string $secret shared secret between site and ReCAPTCHA server.
*/
function ReCaptcha($secret)
{
if ($secret == null || $secret == "") {
die("To use reCAPTCHA you must get an API key from <a href='"
. self::$_signupUrl . "'>" . self::$_signupUrl . "</a>");
}
$this->_secret=$secret;
}
/**
* Encodes the given data into a query string format.
*
* @param array $data array of string elements to be encoded.
*
* @return string - encoded request.
*/
private function _encodeQS($data)
{
$req = "";
foreach ($data as $key => $value) {
$req .= $key . '=' . urlencode(stripslashes($value)) . '&';
}
// Cut the last '&'
$req=substr($req, 0, strlen($req)-1);
return $req;
}
/**
* Submits an HTTP GET to a reCAPTCHA server.
*
* @param string $path url path to recaptcha server.
* @param array $data array of parameters to be sent.
*
* @return array response
*/
private function _submitHTTPGet($path, $data)
{
$req = $this->_encodeQS($data);
$response = file_get_contents($path . $req);
return $response;
}
/**
* Calls the reCAPTCHA siteverify API to verify whether the user passes
* CAPTCHA test.
*
* @param string $remoteIp IP address of end user.
* @param string $response response string from recaptcha verification.
*
* @return ReCaptchaResponse
*/
public function verifyResponse($remoteIp, $response)
{
// Discard empty solution submissions
if ($response == null || strlen($response) == 0) {
$recaptchaResponse = new ReCaptchaResponse();
$recaptchaResponse->success = false;
$recaptchaResponse->errorCodes = 'missing-input';
return $recaptchaResponse;
}
$getResponse = $this->_submitHttpGet(
self::$_siteVerifyUrl,
array (
'secret' => $this->_secret,
'remoteip' => $remoteIp,
'v' => self::$_version,
'response' => $response
)
);
$answers = json_decode($getResponse, true);
$recaptchaResponse = new ReCaptchaResponse();
if (trim($answers ['success']) == true) {
$recaptchaResponse->success = true;
} else {
$recaptchaResponse->success = false;
$recaptchaResponse->errorCodes = $answers [error-codes];
}
return $recaptchaResponse;
}
}
?>
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Fatal error: Class 'ReCaptcha' not found in /homepages/39/d436294224/htdocs/clickandbuilds/TheeDonistMonk/index.php on line 29