Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Библиотека Raphaël (https://javascript.ru/forum/library-toolkit-framework/23222-biblioteka-rapha%C3%ABl.html)

Isaac 16.11.2011 19:38

Библиотека Raphaël
 
Здравсвуйте.
Очень нужна помощь, подскажите пожалуйста.
Впервые начал использовать библиотеку Raphaël, задача в следующем:
нужно нарисовать фигуру, например в виде буквы А и сделать ее красным цветом. Если не ошибаюсь, то мне нужна ф-я
var c = paper.path("M0 10L 360 200");

которая рисует прямую и с помощью это прямой мне нужно проложить путь в виде координат указанных в ф-ии path и тем самым рисовать А.
Вопрос: пожалуйста подскажите, как это сделать, я не могу расшифровать цифры, которые находятся в скобках ("M0 10L 360 200"), что они значат и какие нужно добавить для того, чтобы покрасить фигуру А в красный?
Если вы знаете другой лучше вариант, как можно нарисавать А с помощью это библиотеки, то пожалуйста подскажиье... :(

Pavel M. 16.11.2011 21:59

если по англ. понимаете то можно посмотреть здесь и ниже http://www.w3.org/TR/SVG/paths.html#...ralInformation

M0 10 - moveto переместиться на координаты 0 10
L 360 200 lineto - рисуем линию до этих координат

Isaac 16.11.2011 22:45

Цитата:

Сообщение от Pavel M. (Сообщение 136990)
если по англ. понимаете то можно посмотреть здесь и ниже http://www.w3.org/TR/SVG/paths.html#...ralInformation

M0 10 - moveto переместиться на координаты 0 10
L 360 200 lineto - рисуем линию до этих координат

Спасибо с этим разобрался, подскажите пожалуйста, как мне покрасить внутреннею область фигуры в данном случае?

Pavel M. 17.11.2011 12:25

можно так
не забывайте в конце Z чтобы замкнуть контур фигуры

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>demo</title>
  
  <script type='text/javascript' src='https://raw.github.com/DmitryBaranovskiy/raphael/master/raphael.js'></script>


	<script>
		window.onload=function(){

			var paper = Raphael(0, 0, 150, 150);

			var box = paper.path('M 10 10 L 100 10 L 100 100 L 10 100 Z');

			box.attr("fill", "#f00");
		}
	</script>
  
</body>
</html>

Isaac 17.11.2011 13:35

Цитата:

Сообщение от Pavel M. (Сообщение 137127)
можно так
не забывайте в конце Z чтобы замкнуть контур фигуры[/html]

Спасибо большое, у меня еще один вопрос: как получить на этой фигуре произвольные точки с координатами?

Pavel M. 17.11.2011 13:39

Цитата:

Сообщение от Isaac
как получить на этой фигуре произвольные точки с координатами?

что значит получить, нарисовать точки ?

Isaac 17.11.2011 13:42

Цитата:

Сообщение от Pavel M. (Сообщение 137139)
что значит получить, нарисовать точки ?

Например имея фигуру любой формы, я хочу получить несколько точек(допустим 2 или 3), которые находятся на этой фигуре и в свою очередь являются центрами окружностей

Pavel M. 17.11.2011 14:01

Цитата:

Сообщение от Isaac
я хочу получить несколько точек

это же SVG - векторная графика,
можно изобразить точки маленькими окружностями, квадратами или отрезками линий, типа paper.path('M 10 10 L 10 11');

Isaac 17.11.2011 14:06

Цитата:

Сообщение от Pavel M. (Сообщение 137148)
это же SVG - векторная графика,
можно изобразить точки маленькими окружностями, квадратами или отрезками линий, типа paper.path('M 10 10 L 10 11');

Да, но они должны быть именно на фигуре, которыю я создал, например
var paper = Raphael(0, 0, 150, 150);
        var box = paper.path('M 10 10 L 100 10 L 100 100 L 10 100 Z');
        box.attr("fill", "#f00");
        var c = box.circle(150, 150, 40);

Но нак не получается :( и точки должны быть обязательно центрами окружностей

Pavel M. 17.11.2011 14:52

точку выше квадрата показал
надо рисовать на paper

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>demo</title>
  
  <script type='text/javascript' src='https://raw.github.com/DmitryBaranovskiy/raphael/master/raphael.js'></script>


	<script>
		window.onload=function(){

			var paper = Raphael(0, 0, 150, 150);

			var box = paper.path('M 10 10 L 100 10 L 100 100 L 10 100 Z');

			box.attr("fill", "#f00");
                      
			paper.path('M20 20 L20 21');
		}
	</script>
  
</body>
</html>

Isaac 17.11.2011 15:01

Цитата:

Сообщение от Pavel M. (Сообщение 137164)
точку выше квадрата показал
надо рисовать на paper

Это я понял, но если точка появляется на холсте динамически и мы заранее не знаем в каких координатах она появится, а нам нужно, чтоб она обязятельно не выходила за пределы квадрата, а была в нем...
Как вы считаете, может подойти ф-я ?
Raphael.getPointAtLength(path, length)

Pavel M. 17.11.2011 15:18

Цитата:

Сообщение от Isaac
чтоб она обязятельно не выходила за пределы квадрата, а была в нем...

просто рисуйте ее внутри этого квадрата

Isaac 17.11.2011 15:21

Цитата:

Сообщение от Pavel M. (Сообщение 137178)
просто рисуйте ее внутри этого квадрата

как же я узнаю, что точки рисуются именно внутри квадрата, ведь они создаются на холсте и могут появлятся где угодно?

Pavel M. 17.11.2011 15:53

Цитата:

Сообщение от Isaac
как же я узнаю, что точки рисуются именно внутри квадрата

а когда рисуете квадрат тоже не знаете его координаты :) ?

Isaac 17.11.2011 16:03

Цитата:

Сообщение от Pavel M. (Сообщение 137198)
а когда рисуете квадрат тоже не знаете его координаты :) ?

Знаю, я задаю ему координаты любые, какие захочу...

Pavel M. 17.11.2011 16:47

ну так значит если точка должна быть внутри квадрата, то ее координаты должны быть больше чем левый верхний угол и меньше чем правый нижний

это можно посчитать ?

Isaac 17.11.2011 17:00

Цитата:

Сообщение от Pavel M. (Сообщение 137219)
ну так значит если точка должна быть внутри квадрата, то ее координаты должны быть больше чем левый верхний угол и меньше чем правый нижний

это можно посчитать ?

Можно, но как я писал в начале: у меня не квадрат , а фигура в форме буквы А
Я думаю, что в библиотеке должно быть подобное свойство или метод, но не могу его найти :(

Pavel M. 17.11.2011 17:04

лучше приведите здесь код, как вы рисуете эту букву A, и что такое будет для этой фигуры значить слово внутри

Isaac 17.11.2011 23:22

Цитата:

Сообщение от Pavel M. (Сообщение 137225)
лучше приведите здесь код, как вы рисуете эту букву A, и что такое будет для этой фигуры значить слово внутри

Вот
var paper = Raphael(ph, 600, 600);	
var shapeA = paper.path("M 300 10 L 400 10 L 600 500 L 500 500 L 400 300 L 350 300 L 250 500 L 150 500 Z").attr("fill", "grey");		
// Могу получить длину всей фигуры
var lengthShapeA = shapeA.getTotalLength();
// Могу получить координаты всех точек на КОНТУРЕ фигуры
for(var i = 0; i <= lengthShapeA; i ++)
{
    var allPoints = shapeA .getPointAtLength(i, lengthShapeA);
}

А как мне получить КООРДИНАТЫ ЛЮБЫХ 5 точек находящиесу ВНУТРИ фигуры shapeA ?

Pavel M. 18.11.2011 11:45

не знаю может быть это имели в виду http://jsfiddle.net/me9mW/
выводит все точки фигуры
только фигуру я уменьшил, чтобы циклы не подвисали

Isaac 18.11.2011 12:42

Цитата:

Сообщение от Pavel M. (Сообщение 137378)
не знаю может быть это имели в виду http://jsfiddle.net/me9mW/
выводит все точки фигуры
только фигуру я уменьшил, чтобы циклы не подвисали

Вроде так, спасибо огромное, а если мне нужно из этого цикла созранить любые 5 точек с координатами Х и У, то мне достаотчно в if написать
if (paper.getElementByPoint(x, y) === shapeA)
			{
				var posX = x;
				var posY = y;				
				console.log('внутри', x, y); // точки внутри фигуры			
			}

Или в этой библиотеке есть специальное свойство для подобной задачи?


Часовой пояс GMT +3, время: 05:28.