Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2013, 11:56
Новичок на форуме
Отправить личное сообщение для sektor-sumy Посмотреть профиль Найти все сообщения от sektor-sumy
 
Регистрация: 01.05.2012
Сообщений: 6

Подскажите технологию для реализации.
Доброго дня всем. Прошу подсказать технологию для реализации. Ситуация вот в чем. Стоит задача реализовать схему теплосети с помощью JS. Я попытался сделать на Canvas. Схему отрисовать получилось но последующее задачи выполнить не могу.
1. Необходимо по клике на отрезок выводить информацию о нём (диаметр, длина и т.д.
2. Привязать к определённым отрезкам инпуты.
На данном этапе пока всё. Может кто то сталкивался с данной проблемой либо может подсказать в какую сторону копать.
Привожу ниже код. Если необходимо приложу бд.
<body>

  <canvas id="cnv" width="5000" height="5000" style="border:solid 2px;">Ставь нормальный браузер</canvas>
                        <script type="text/javascript" src='canvas.js'></script>  
</body>

$.ajax({//делаем ajax запрос
	url: "canvas.php",//указываем адрес
	success: function(data) { //в случае удачного запроса выполняем действия
		arr = data.split(',');//разбиваем полученную строку на массив
		k=0;//обьявляем переменную для определение елемента начальных или коннечных координат
		t=0;//обьявляем переменную для определения стартовой точки отрисовки коорлинат
		var ctx = document.getElementById('cnv').getContext('2d');//обьявляем переменную для отрисовки схему в canvas
		ctx.beginPath();//говорим бразуеру о том что сейчас будем рисовать линии
		ctx.translate(0,ctx.canvas.height);
		ctx.scale(1,-1);//переворачиваем изображение
		ctx.translate(-1000,1800);//смещеие чертежа на указанное кол-во пикселей
		for(var i=0; i<arr.length; i++) {//запускаем цикл
			sum=i%2;//определяем чётное или нечётное число

			if (k == 1 || k == 0){
				if (sum==0){//если чётное значить это координата х
					x=parseInt(arr[i]);//присваем переменно х значение элемента массива i при это преобразовуя в целые числа
				}
				else{
					y=parseInt(arr[i]); 
					ctx.moveTo(x,y);//ставим начальную точку от которой будем рисовать линиию
				}
			}
			ctx.lineWidth=5;
			if (k == 2 || k == 3){
				if (sum==0){
					x=parseInt(arr[i]);
				}
				else{
					y=parseInt(arr[i]);
					ctx.lineTo(x,y);//ставим конечную точку 
					t=1;
				}
			}
			k++;
			if (k>3)k=0;
		}
		ctx.stroke();//говорим о том что закончили отрисовывать схему
	}
});

код который у меня есть в данный момент.
$i=0;//счётчик для цикла
	$db = mysql_connect("localhost","root","");//подключаемся
	$a=mysql_select_db("csv_db",$db);//выбираем базу
	$result = mysql_query ("SELECT * FROM `table 8`",$db);//делаем запрос
		while($row = mysql_fetch_assoc($result)) {//цикл выбора необходимых данных
			$result2 = mysql_query ("SELECT * FROM `table 9` where `id`=".$row['NODE1']."",$db);//делаем запрос
			$row2 = mysql_fetch_assoc($result2);
			$result3 = mysql_query ("SELECT * FROM `table 9` where `id`=".$row['NODE2']."",$db);//делаем запрос
			$row3 = mysql_fetch_assoc($result3);
			$start[]=$row2['X'];//добавляем значение х в массив
			$start[]=$row2['Y'];//добавляем значение у в массив
			$start[]=$row3['X'];//добавляем значение х в массив
			$start[]=$row3['Y'];//добавляем значение у в массив
			$i++;
		}
	$comma_separated = implode(",", $start);//преобразуем массив в строку с розделителем ","
	echo $comma_separated;//выводим данные для отправки по ajax

Заранее огромное спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 10.04.2013, 23:43
Новичок на форуме
Посмотреть профиль Найти все сообщения от Skvor
 
Регистрация: 07.04.2013
Сообщений: 8

До канвы не дошёл, да и врядли буду разбираться. Но графика всегда штука муторная. И если это реальный проект, то думаю HTML/JS не то, что надо вообще.

Если чертёж большой, то для мышинной работы с элементами, которые уже отрисованы, необходимо вести массив пространства, в элементах которого регистрируются списки ссылок на элементы проходящие через область. При клике по координате, производится поиск области в массиве и так определяются элементы по которым произведён клик. Для очень сложных чертежей, следует использовать 2-3 разреженных массива с разным разрешением и производить поиск начиная с мелкого масштаба.

Если чертёж небольшой, то каждый элемент д.б. объектом с функцией проверки принадлежности координаты тому пространству, которое занимает элемент. И каждый клик "прогоняется" по всему списку элементов.

Последний раз редактировалось Skvor, 10.04.2013 в 23:47.
Ответить с цитированием
  #3 (permalink)  
Старый 10.04.2013, 23:45
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Выбросить всё что написано, как одному так и второму, и воспользоваться SVG
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2013, 23:49
Новичок на форуме
Отправить личное сообщение для sektor-sumy Посмотреть профиль Найти все сообщения от sektor-sumy
 
Регистрация: 01.05.2012
Сообщений: 6

я тоже уже склонился к SVG но вот. может вы подтолкнёте как на SVG можно такое реализовать. или может какими библиотеками стоит воспользоваться
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите логику ololosh Общие вопросы Javascript 2 07.08.2012 18:10
подскажите RegExp для замены пустых строк в тексте. mitiya Общие вопросы Javascript 21 07.08.2012 14:02
Подскажите как передать по ссылке команду для js Alexanderos jQuery 8 30.10.2010 04:31
Написал часики для обратного отсчета. Подскажите где слажал t0xas Общие вопросы Javascript 14 26.09.2010 18:22
Подскажите плагин или способ реализации bobri4 jQuery 4 27.11.2009 12:49