Paint coursework

Материал из Department of Theoretical and Applied Mechanics
Версия от 23:40, 28 апреля 2021; Arelakes (обсуждение | вклад) (top)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Работу выполнили студентки гр. 3630103/00003 Алексеева Мария, Арбузова Елизавета, Москвина Ксения.

Код программы

Код программы на языке JavaScript:
  1 Описание кода JavaScript:
  2 
  3 window.addEventListener('load', main, false);
  4 var color = "#000000";
  5 function main() {
  6 var ctx = canvas_example.getContext('2d')
  7 var w = canvas_example.width
  8 var h = canvas_example.height
  9 var r = 10
 10 var x = 0
 11 var y = 0
 12 var colorPicker = document.getElementById('colorpick')
 13 var getcolor = document.getElementById('getcolor')
 14 var cos = Math.cos(Math.PI/6)
 15 var sin = Math.sin(Math.PI/6)
 16 var bool = false;
 17 var draw = false;
 18 ctx.fillStyle = '#ffffff';
 19 ctx.fillRect(0,0,w,h);
 20 colorPicker.addEventListener("input", function() {
 21     document.getElementById('c8').style.backgroundColor = colorPicker.value //пример считывания, передавать через value
 22   });
 23 	При нажатии на кнопку все фигуры на холсте будут отображены с заливкой.
 24 	b7.onclick = function() {
 25 		bool = !bool;
 26 	}		
 27 
 28 
 29 При запуске функции нажатием на кнопку пользователь может нарисовать мышкой кривую, которая будет отображаться на холсте по мере продвижения мышки.
 30     b4.onclick = function() {
 31 		ctx.lineWidth = document.getElementById('size').value;
 32 		ctx.strokeStyle = colorPicker.value;
 33 			canvas_example.onmousedown = function(event){
 34 				var x = event.offsetX;
 35 				var y = event.offsetY;
 36                 draw = true;
 37                 ctx.beginPath();
 38                 ctx.moveTo(x, y);
 39             }
 40 			canvas_example.onmousemove = function(event){
 41 				if(draw==true){
 42 					var x = event.offsetX;
 43                     var y = event.offsetY;
 44                     ctx.lineTo(x, y);
 45                     ctx.stroke();
 46                 }
 47             }
 48             canvas_example.onmouseup = function(event){
 49 				var x = event.offsetX;
 50                 var y = event.offsetY;
 51                 ctx.lineTo(x, y);
 52                 ctx.stroke();
 53                 ctx.closePath();
 54                 draw = false;
 55             }		
 56 	}			
 57 При запуске функции нажатием на кнопку пользователь стирает рисунок по месту проведения мышки.
 58 	b8.onclick = function() {
 59 		ctx.lineWidth = document.getElementById('size').value;
 60 		ctx.strokeStyle = 'white';
 61 			canvas_example.onmousedown = function(event){
 62 				var x = event.offsetX;
 63 				var y = event.offsetY;
 64                 draw = true;
 65                 ctx.beginPath();
 66                 ctx.moveTo(x, y);
 67             }
 68 			canvas_example.onmousemove = function(event){
 69 				if(draw==true){
 70 					var x = event.offsetX;
 71                     var y = event.offsetY;
 72                     ctx.lineTo(x, y);
 73                     ctx.stroke();
 74                 }
 75             }
 76             canvas_example.onmouseup = function(event){
 77 				var x = event.offsetX;
 78                 var y = event.offsetY;
 79                 ctx.lineTo(x, y);
 80                 ctx.stroke();
 81                 ctx.closePath();
 82                 draw = false;
 83             }		
 84 	}	
 85 	
 86 	b3.onclick = function() {
 87 		canvas_example.onmousedown = function(event){
 88 			var x = event.offsetX;
 89 			var y = event.offsetY;
 90 			var imageData = ctx.getImageData(0, 0, w, h);
 91 			canvas_example.onmousemove = function(event){
 92 					ctx.lineCap = "round";
 93 					ctx.putImageData(imageData, 0, 0);
 94 					var x1 = event.offsetX;
 95 					var y1 = event.offsetY;
 96 					ctx.beginPath();
 97 					ctx.lineWidth = document.getElementById('size').value;
 98 					ctx.strokeStyle = colorPicker.value;
 99 					ctx.fillStyle = colorPicker.value;
100 					var r = Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))
101 					ctx.arc(x, y, r, 0, 2*Math.PI);
102 					if (bool) {
103 						ctx.fill();
104 				} else {
105 					ctx.stroke();
106 				}
107 				canvas_example.onmouseup = function(event) {
108 					canvas_example.onmousemove = function() {}
109 				}
110 				}
111 			}
112 		}
113 		b2.onclick = function() {
114 		canvas_example.onmousedown = function(event){
115 			var x = event.offsetX;
116 			var y = event.offsetY;
117 			var imageData = ctx.getImageData(0, 0, w, h);
118 			canvas_example.onmousemove = function(event){
119 					ctx.lineCap = "round";
120 					ctx.putImageData(imageData, 0, 0);
121 					var x1 = event.offsetX;
122 					var y1 = event.offsetY;
123 					ctx.beginPath();
124 					ctx.lineWidth = document.getElementById('size').value;
125 ctx.strokeStyle = colorPicker.value;
126 					ctx.fillStyle = colorPicker.value;
127 					var r = Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))
128 					ctx.moveTo(x, y);
129 					ctx.lineTo(x, y1); // линия вправо
130 					ctx.lineTo(x1, y1); // линия вниз
131 					ctx.lineTo(x1, y); // линия влево
132 					ctx.closePath(); // смыкание начала и конца рисунка
133 					if (bool) {
134 						ctx.fill();
135 				} else {
136 					ctx.stroke();
137 				}
138 				canvas_example.onmouseup = function(event) {
139 					canvas_example.onmousemove = function() {}
140 				}	
141 			}
142 		}
143 	}	
144 	
145 	b5.onclick = function() {
146 		canvas_example.onmousedown = function(event){
147 			var x0 = event.offsetX;
148 			var y0 = event.offsetY;
149 			var imageData = ctx.getImageData(0, 0, w, h);
150 			canvas_example.onmousemove = function(event){
151 				ctx.putImageData(imageData, 0, 0);
152 				ctx.lineCap = "round";
153 				var x1 = event.offsetX;
154 				var y1 = event.offsetY;
155 				ctx.beginPath();
156 				ctx.lineWidth = 
157 document.getElementById('size').value;
158 				ctx.strokeStyle = colorPicker.value;
159 				ctx.fillStyle = colorPicker.value;
160 				ctx.moveTo(x0, y0);
161 				ctx.lineTo(x1, y0);
162 				ctx.lineTo((x0+x1)/2, y1);
163 				ctx.lineTo(x0, y0);
164 				if (bool) {
165 					ctx.fill();
166 				} else {
167 					ctx.stroke();
168 				}
169 				canvas_example.onmouseup = function(event) {
170 					canvas_example.onmousemove = function() {}
171 				}
172 			}
173 		}
174 	}
175 		b1.onclick = function() {
176 		canvas_example.onmousedown = function(event){
177 			var x = event.offsetX;
178 			var y = event.offsetY;
179 			var imageData = ctx.getImageData(0, 0, w, h);
180 			canvas_example.onmousemove = function(event){
181 					ctx.putImageData(imageData, 0, 0);
182 					ctx.lineCap = "round";
183 					var x1 = event.offsetX;
184 					var y1 = event.offsetY;
185 					ctx.beginPath();
186 					ctx.lineWidth = 
187 
188 document.getElementById('size').value;
189 					ctx.strokeStyle = colorPicker.value;
190 					ctx.moveTo(x, y);
191 					ctx.lineTo(x1, y1);
192 					ctx.stroke();
193 					canvas_example.onmouseup = function(event) {
194 					canvas_example.onmousemove = function() {}
195 				}
196 			}
197 		}	
198 	}
199 		b6.onclick = function() {
200 		canvas_example.onmousedown = function(event){
201 			var x = event.offsetX;
202 			var y = event.offsetY;
203 			var imageData = ctx.getImageData(0, 0, w, h);
204 			canvas_example.onmousemove = function(event){
205 					ctx.putImageData(imageData, 0, 0);
206 					ctx.lineCap = "round";
207 					var x1 = event.offsetX;
208 					var y1 = event.offsetY;
209 					ctx.beginPath();
210 					ctx.lineWidth = 
211 document.getElementById('size').value;
212 					ctx.strokeStyle = colorPicker.value;
213 					ctx.fillStyle = colorPicker.value;
214 					var r = Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))
215 					ctx.ellipse(x, y, r, r/2,0, 0, 2*Math.PI);
216 					if (bool) {
217 						ctx.fill();
218 				} else {
219 					ctx.stroke();
220 				}
221 				canvas_example.onmouseup = function(event) {
222 					canvas_example.onmousemove = function() {}
223 				}
224 				}
225 			}
226 		}
227 	
228 	b9.onclick = function() {
229 		ctx.clearRect(0, 0, w, h);
230 	}
231 }
232 Функции b1, b2, b3, b5, b6 работают аналогично выше описанным и отображают на холсте различные фигуры, размеры и цвет которых пользователь может задать самостоятельно, исключение составляет b9,  которая удаляет материал со всего холста.