begin process at 2012 05 28 13:27:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > DESSINER DES POLYGONES AVEC LA SOURIS

DESSINER DES POLYGONES AVEC LA SOURIS


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :dessin, polygone, canvas, souris, main Niveau :Initié Date de création :14/06/2010 Date de mise à jour :14/06/2010 16:28:21 Vu :3 784

Auteur : sebcap26

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Ce code vous permettra de tracer des polygones très simplement avec votre souris.

Je pense l'avoir fait assez simple pour qu'il soit facilement adaptable à vos besoins.

Il est également possible de les sauvegarder avec la fonction save (qu'il faudra adapter à vos besoins, elle ne fait qu'afficher la liste des points).

J'ai également mis un nombre maximum de points car j'en ai besoin pour mon application, mais c'est facilement adaptable.

Source

  • <html>
  • <head>
  • <script type="text/javascript">
  • /*
  • * JavaScript polygon drawing
  • * Sébastien CAPARROS
  • */
  • //radius of click around the first point to close the draw
  • var END_CLICK_RADIUS = 5;
  • //the max number of points of your poygon
  • var MAX_POINTS = 8;
  • var mouseX = 0;
  • var mouseY = 0;
  • var isStarted = false;
  • var points = null;
  • var canvas = null;
  • var ctx = null;
  • window.onload = function() {
  • //initializing canvas and draw color
  • canvas = document.getElementById("canvas");
  • ctx = canvas.getContext("2d");
  • changeColor("red");
  • canvas.addEventListener("click", function(e) {
  • var x = e.clientX-canvas.offsetLeft;
  • var y = e.clientY-canvas.offsetTop;
  • if(isStarted) {
  • //drawing the next line, and closing the polygon if needed
  • if(Math.abs(x - points[0].x) < END_CLICK_RADIUS && Math.abs(y - points[0].y) < END_CLICK_RADIUS) {
  • isStarted = false;
  • } else {
  • points[points.length] = new Point(x, y);
  • if(points.length >= MAX_POINTS) {
  • isStarted = false;
  • }
  • }
  • } else if(points == null) {
  • //opening the polygon
  • points = new Array();
  • points[0] = new Point(x, y);
  • isStarted = true;
  • }
  • }, false);
  • //we just save the location of the mouse
  • canvas.addEventListener("mousemove", function(e) {
  • mouseX = e.clientX - canvas.offsetLeft;
  • mouseY = e.clientY - canvas.offsetTop;
  • }, false);
  • //refresh time
  • setInterval("draw();", 100);
  • }
  • //changes the color of the draw
  • function changeColor(color) {
  • ctx.strokeStyle = color;
  • }
  • //object representing a point
  • function Point(x, y) {
  • this.x = x;
  • this.y = y;
  • }
  • //resets the application
  • function reset() {
  • isStarted = false;
  • points = null;
  • }
  • //alerts the point list
  • function save() {
  • if(points == null) {
  • alert("Rien a sauvegarder !");
  • } else {
  • var s = "";
  • for(var a in points) {
  • //inversing y axis by (canvas.height - points[a].y)
  • s += "(" + points[a].x + "," + (canvas.height - points[a].y) + ")\n";
  • }
  • alert(s);
  • }
  • }
  • //draws the current chape
  • function draw() {
  • ctx.clearRect(0, 0, canvas.width, canvas.height);
  • ctx.beginPath();
  • if(points != null && points.length > 0) {
  • ctx.moveTo(points[0].x, points[0].y);
  • for(i = 1 ; i < points.length ; i++) {
  • ctx.lineTo(points[i].x, points[i].y);
  • }
  • if(isStarted) {
  • ctx.lineTo(mouseX, mouseY);
  • } else {
  • ctx.lineTo(points[0].x, points[0].y);
  • }
  • }
  • ctx.stroke();
  • }
  • </script>
  • </head>
  • <body>
  • <canvas id="canvas" width="300" height="300" style="border: 1px solid black;"></canvas>
  • <br /><br />
  • <input type="button" value="Sauvegarder" onclick="save();" />&nbsp;
  • <input type="button" value="Effacer" onclick="reset(); " />&nbsp;
  • Couleur : <select id="color" onchange="changeColor(this.options[this.selectedIndex].value);">
  • <option value="red" selected="selected">Rouge</option>
  • <option value="blue" selected="selected">Bleu</option>
  • <option value="green" selected="selected">Vert</option>
  • <option value="black" selected="selected">Noir</option>
  • <option value="yellow" selected="selected">Jaune</option>
  • </select>
  • </body>
  • </html>
<html>
	<head>
		<script type="text/javascript">
			/*
			 * JavaScript polygon drawing
			 * Sébastien CAPARROS
			 */
		
			//radius of click around the first point to close the draw
			var END_CLICK_RADIUS = 5;
			//the max number of points of your poygon
			var MAX_POINTS = 8;
			
			var mouseX = 0;
			var mouseY = 0;
			var isStarted = false;
			var points = null;
			
			var canvas = null;
			var ctx = null;
			window.onload = function() {
				//initializing canvas and draw color
				canvas = document.getElementById("canvas");
				ctx = canvas.getContext("2d");
				changeColor("red");
				
				canvas.addEventListener("click", function(e) {
					var x = e.clientX-canvas.offsetLeft;
					var y = e.clientY-canvas.offsetTop;
					if(isStarted) {
						//drawing the next line, and closing the polygon if needed
						if(Math.abs(x - points[0].x) < END_CLICK_RADIUS && Math.abs(y - points[0].y) < END_CLICK_RADIUS) {
							isStarted = false;
						} else {
							points[points.length] = new Point(x, y);
							if(points.length >= MAX_POINTS) {
								isStarted = false;
							}
						}
					} else if(points == null) {
						//opening the polygon
						points = new Array();
						points[0] = new Point(x, y);
						isStarted = true;
					}
				}, false);
				
				//we just save the location of the mouse
				canvas.addEventListener("mousemove", function(e) {
					mouseX = e.clientX - canvas.offsetLeft;
					mouseY = e.clientY - canvas.offsetTop;
				}, false);
				
				//refresh time
				setInterval("draw();", 100);
			}
			
			//changes the color of the draw
			function changeColor(color) {
				ctx.strokeStyle = color;
			}
			
			//object representing a point
			function Point(x, y) {
				this.x = x;
				this.y = y;
			}
			
			//resets the application
			function reset() {
				isStarted = false;
				points = null;
			}
			
			//alerts the point list
			function save() {
				if(points == null) {
					alert("Rien a sauvegarder !");
				} else {
					var s = "";
					for(var a in points) {
						//inversing y axis by (canvas.height - points[a].y)
						s += "(" + points[a].x + "," + (canvas.height - points[a].y) + ")\n";
					}
					alert(s);
				}
			}
			
			//draws the current chape
			function draw() {
				ctx.clearRect(0, 0, canvas.width, canvas.height);
			
				ctx.beginPath();

				if(points != null && points.length > 0) {
					ctx.moveTo(points[0].x, points[0].y);
					
					for(i = 1 ; i < points.length ; i++) {
						ctx.lineTo(points[i].x, points[i].y);
					}
					
					if(isStarted) {
						ctx.lineTo(mouseX, mouseY);
					} else {
						ctx.lineTo(points[0].x, points[0].y);
					}
				}
				
				ctx.stroke();
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="300" height="300" style="border: 1px solid black;"></canvas>
		<br /><br />
		<input type="button" value="Sauvegarder" onclick="save();" />&nbsp;
		<input type="button" value="Effacer" onclick="reset(); " />&nbsp;
		Couleur : <select id="color" onchange="changeColor(this.options[this.selectedIndex].value);">
			<option value="red" selected="selected">Rouge</option>
			<option value="blue" selected="selected">Bleu</option>
			<option value="green" selected="selected">Vert</option>
			<option value="black" selected="selected">Noir</option>
			<option value="yellow" selected="selected">Jaune</option>
		</select>
	</body>
</html>

 Conclusion

J'ai cherché un code tout fait pendant pas mal de temps, mais je n'ai rien trouvé. Ce n'est finalement pas bien compliqué d'ailleurs.

Je me suis donc lancé, et voilà le résultat.

Ce code ne fonctionnera sous internet explorer que si vous incluez une librairie du type excanvas.


 Historique

14 juin 2010 16:28:21 :
Ajout d'un select permettant la modification de la couleur.

 Sources du même auteur

Source avec Zip SIMULER UN SERVEUR COMET (EN PUSH) EN PHP ET JS

 Sources de la même categorie

Source avec Zip JDMATH-MINI.JS : GÉNÉRATION D'EXPRESSION MATHÉMATIQUE par jdmcreator
Source avec une capture SPHERE 3D DÉFORMABLE par phm
Source avec Zip Source avec une capture EFFET DE ROTATION A 360° D'IMAGE AVEC ACCELERATION DECELERAT... par kazma
Source avec Zip Source avec une capture PETIT LOGICIEL DE DESSIN, RETOUCHE AVEC CANVAS par kazma
Source avec Zip Source avec une capture CALCULATRICE HEURE par m22001111

 Sources en rapport avec celle ci

Source avec une capture SPHERE 3D DÉFORMABLE par phm
Source avec Zip DOODLE JUMP EN JAVASCRIPT par Toshy62
Source avec Zip Source avec une capture ACTIONJS - FRAMEWORK JAVASCRIPT (HTML5 CANVAS) par Neoziro
COULEUR DE FOND SELON POSITION SOURIS par mailliam
Source avec Zip Source avec une capture CANVAS I3D : 3D SOUS JAVASCRIPT SANS WEGGL par Hakumbaya

Commentaires et avis

Commentaire de mehdi7604 le 15/06/2010 14:45:32

C'est beau .
Pourquoi on ne peut pas dépasser 8 cotés?

Commentaire de sebcap26 le 15/06/2010 15:52:46

Pour mon application, il ne fallait pas que ca dépasse 8 côtés. Mais c'est facilement réglable, il suffit de modifier la ligne 12 :

var MAX_POINTS = 8;


Tu peux aussi enlever le nombre maximum en supprimant les lignes 36 à 38 :

if(points.length >= MAX_POINTS) {
   isStarted = false;
}

Commentaire de jdmcreator le 15/06/2010 19:23:32

Bonjour,

Quand je testes ton script sur cette page : http://espacejavascript.com/exemple.php?id=224 sous Safari 4,

et que je scrolle la page jusqu'en bas et que je tente de dessiner, la ligne ne s'écrie pas sur le curseur.

Donc, un bug à réglé ;)

Commentaire de gselles le 21/06/2010 11:12:06

Bonjour,
Sous IE8 malgré l'insertion du script excanvas.js je récupère l'erreur suivante:
Cet objet ne gère pas cette propriété ou cette méthode
sur la ligne
canvas.addEventListener("click", function(e) {

Que faut-il en penser?
Amicalement.

Commentaire de jdmcreator le 21/06/2010 16:11:24

addEventListener n'existe pas sous IE 8 et - (il sera présent dans IE9) . Il faut plutôt utiliser attachEvent.

Commentaire de gselles le 21/06/2010 20:54:48

Merci, ça marche  avec attachEvent.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

dessin d'un polygone, prog javascript [ par bichonade ] slt...bienvenue &#224; toute la communaur&#233;..je cherche &#224; faire une application qui me parraissait simple.. Sur ma page HTML est dsipos&#233; probleme de clic [ par missceline33 ] Bonjour, j'ai un petit probl&#232;me de compatibilit&#233; de mon site avec les diff&#233;rents navigateurs. J'avais d'ailleurs poster un message &#22 cherche code pour appeler chapitre concerné dans une Main Frame face au bouton déclecheur situé dans la Left Frame [ par fireworks ] cherche code pour appeler chapitre concern&#233; dans une Main F face au bouton d&#233;clecheur situ&#233; dans la Left FrameMerci si l'on peut m'aide detection couleur [ par dockblue ] bonjour voila mon probleme dans une page web j'insere des graphiques ( des courbes mathematiques) au format jpg, est il possible en passant la souris innerhtml dans une autre page [ par jimmy28 ] Bonjour,Voil&#224;, j'ai 2 pages : "main" et "search"dans la page "main", j'ai :&lt;p id="parag"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test&lt;/p&gt; probleme d'impression [ par goth ] bonjour, voila le pb : j'ai deux frame : menu et main. dans la frame menu il y a un bouton appelant une fonction d'impression dans main : parent.main. Une frame un peu vieille [ par Caryl ] J'ai un souci avec une frame, je m'explique. Mon site d&#233;bute avec la page index.php qui cr&#233;e deux frames haut et main (qui recoivent chacune Son au passage de la souris [ par hugo37 ] Bonjour &#224; toutes et &#224; tous! Je construit un site&nbsp;avec beaucoup de dhtml et de java et j'ai un petit soucis parceque je n'arrive pas &#2 Position de la souris [ par SDK_akira ] Bonjour ^^ Je cherche un moyen de recuperer la position de la souris en javascript, c'est possible ? (j'ai cherch&#233; mais je n'ai rien trouv&#233; click souris => y mais scrollbar [ par lili_jazzy ] bonjour,je vais essayer d'etre claire!!!j'ai une page avec une scrollbar pour descendre dans la page.je souhaite recup&#232;rer le y ou j'ia cliqu&#23


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,003 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales