На главную страницу
Русский English
 


Поддержка
Форум
Техподдержка
Закрытый разделПерсональная

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

Hits 57605333
1823
Hosts 2237526
551
Visitors 45029688
1316

11


Главная / Поддержка / Форумы / Графика

Форум «Графика»

Версия для печати Версия для печати

Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация

Сообщения 26 - 34 из 34
Начало | Пред. | 1 2 | След. | Конец 

Тема: «Автоматическая отрисовка графической схемы » в форуме: Графика   Просмотров: 50475
 
Андрей Семин
Постоянный посетитель

 
Всего сообщений: 225
Дата регистрации: 09.07.2007
Создано: 12.01.2012 20:11:29
 
 
Рабинович - это программный комплекс КАСКАД-НТ
cascade-nt.ru
Штука неплохая, но весьма и весьма специфическая.
В условиях быстро меняющейся обстановки и постоянно меняющихся режимных задач не могу рекомендовать кому бы то ни было использование кАСКАДа. Для него нужно достаточно долго накатывать колею, чтобы он потом быстро ездил
 
Профиль
Наверх
Евгений Машалов
Администратор

 
Всего сообщений: 990
Дата регистрации: 23.04.2007
Создано: 12.01.2012 21:07:47
 
 
Спасибо
 
Профиль
Наверх
Федор Шарутин
Посетитель
 
Всего сообщений: 22
Дата регистрации: 18.04.2008
Создано: 05.03.2012 12:05:27
 
 
Цитата
Евгений Машалов пишет:
Колоссальный респект !
Наверное имеет смысл нам это в хардкоде реализовать, если Вы не возражаете ?

Нет еще реализации в Растре алгоритма, предложенного Андреем? Я что то не нашел. По результату судя для небольших кусков макрос для меня вполне приемлим в Растре, но честно не хочется залазить в шаблоны для организации новых полей. Может стоит подождать если "прикрутка" в основной модуль Растра не за горами?
 
Профиль
Наверх
Андрей Семин
Постоянный посетитель

 
Всего сообщений: 225
Дата регистрации: 09.07.2007
Создано: 13.03.2012 19:42:56
 
 
Добрый день Федор Валентинович !
Выкладываю макрос с которым не надо копаться в шаблонах.
Еще добавил учет длины линии пропорционально сопротивлению.
Dim grad_x()
Dim grad_y()
Dim LO()
create_graph_cxema


sub create_graph_cxema

' Настроечные парметры. Играясь с ними можно добится разного эффекта
'l0=5 'условная длини линии
G=5 ' коэффициент жесткости линни
kq=50 ' коэффициет характеризующий силу взаимного отталкивания узлов

set node=Rastr.Tables("node")­
set vetv=Rastr.Tables("vetv")­
set gnode=Rastr.Tables("graph­_node")
set gvetv=Rastr.Tables("graph­_vetv")

Redim grad_x(node.count)
Redim grad_y(node.count)
Redim L0(vetv.count)
init l0 ' процедура задания начального приближения координат узлов

for k=1 to 1000 ' Число итераций

CalcGrad l0,G,KQ
norma=0
for i=0 to node.size-1
norma=norma+grad_x(i)*gra­d_x(i)+grad_y(i)*grad_y(i­)
next
norma=sqr(norma)

for i=0 to node.size-1
gnode.Cols("k_x").z(i)=gn­ode.Cols("k_x").z(i)+grad­_x(i)/norma
gnode.Cols("k_y").z(i)=gn­ode.Cols("k_y").z(i)+grad­_y(i)/norma
next
Rastr.PrintP k
next
end sub

sub CalcGrad(l0,g,kq)
set node=Rastr.Tables("node")­
set vetv=Rastr.Tables("vetv")­
set gnode=Rastr.Tables("graph­_node")
set gvetv=Rastr.Tables("graph­_vetv")

NN=node.size
for i1=0 to NN-1
grad_x(i1)=0
grad_y(i1)=0
next


for i1=0 to NN-1
x=gnode.Cols("k_x").z(i1)­
y=gnode.Cols("k_y").z(i1)­
for j1=0 to NN-1
xj=gnode.Cols("k_x").z(j1­)
yj=gnode.Cols("k_y").z(j1­)
if (i1<>j1) then
l=sqr((x-xj)*(x-xj)+(y-yj­)*(y-yj))
if l<>0 then
grad_x(i1)=grad_x(i1)+kq*­kq*(x-xj)/(l*l*l)
grad_y(i1)=grad_y(i1)+kq*­kq*(y-yj)/(l*l*l)
end if
end if
next
next

for i2=0 to NN-1
vetv.setsel("ip="&node.Co­ls("ny").zs(i2)&"|iq="&no­de.Cols("ny").zs(i2))
kk=vetv.findnextsel(-1)
xx=gnode.Cols("k_x").z(i2­)
yy=gnode.Cols("k_y").z(i2­)
while kk<>(-1)
if (vetv.Cols("ip").z(kk)=no­de.Cols("ny").z(i2)) then
node.setsel("ny="&vetv.Co­ls("iq").z(kk))
xkk=gnode.cols("k_x").z(n­ode.findnextsel(-1))
ykk=gnode.cols("k_y").z(n­ode.findnextsel(-1))
end if
if (vetv.Cols("iq").z(kk)=no­de.Cols("ny").z(i2)) then
node.setsel("ny="&vetv.Co­ls("ip").z(kk))
xkk=gnode.cols("k_x").z(n­ode.findnextsel(-1))
ykk=gnode.cols("k_y").z(n­ode.findnextsel(-1))
end if
l=(xkk-xx)*(xkk-xx)+(ykk-­yy)*(ykk-yy)
l=sqr(l)
grad_x(i2)=grad_x(i2)+(xk­k-xx)*g*(l-l0(kk))/l
grad_y(i2)=grad_y(i2)+(yk­k-yy)*g*(l-l0(kk))/l
kk=vetv.findnextsel(kk)
wend
next

end sub

sub init(l0)
set node=Rastr.Tables("node")­
set vetv=Rastr.Tables("vetv")­
set gnode=Rastr.Tables("graph­_node")
set gvetv=Rastr.Tables("graph­_vetv")
gnode.cols("k_x").Prop(1)­= 1
gnode.cols("k_y").Prop(1)­= 1
gnode.DelRows
for i=0 to node.count-1
gnode.AddRow
gnode.Cols("ny").z(gnode.­size-1)=node.cols("ny").z­(i)
gnode.Cols("k_x").z(gnode­.size-1)=100*rnd
gnode.Cols("k_y").z(gnode­.size-1)=100*rnd
gnode.Cols("viz").z(gnode­.size-1)=1
next


gvetv.DelRows
for i=0 to vetv.count-1
gvetv.AddRow
gvetv.Cols("ip").z(gvetv.­size-1)=vetv.Cols("ip").z­(i)
gvetv.Cols("iq").z(gvetv.­size-1)=vetv.Cols("iq").z­(i)
l0(i)=vetv.Cols("x").z(i)­/5
next
end sub

 
Профиль
Наверх
Александр Александров
Администратор
 
Всего сообщений: 597
Дата регистрации: 31.05.2008
Создано: 05.04.2012 16:38:33
 
 
Выложил свои наработки по вопросу создания графа сети из режимной информации. Скрипт использует
сободное программное обеспечение Graphviz. Максимальная переработанная схема содержала более 3000 узлов.

Ссылка
 
Профиль
Наверх
Андрей Семин
Постоянный посетитель

 
Всего сообщений: 225
Дата регистрации: 09.07.2007
Создано: 07.04.2012 16:01:05
 
 
В принципе штука весьма достойная. Но не совсем понял как эту схему затащить в Rastr ?
 
Профиль
Наверх
Александр Александров
Администратор
 
Всего сообщений: 597
Дата регистрации: 31.05.2008
Создано: 07.04.2012 23:30:34
 
 
Скрипт работает следующим образом:
1) Пробегаем список узлов и ветвей загруженных в Растр и пишем текстовый файл с их описанием для Graphviz.
2) Запускаем один из многочисленных модулей построения графа Graphviz. На выходе он пишет текстовый файл с описанием изображения графа.
3) Читаем полученное изображения графа в Растр.

Так что схема затаскивается сама С улыбкой
 
Профиль
Наверх
Федор Шарутин
Посетитель
 
Всего сообщений: 22
Дата регистрации: 18.04.2008
Создано: 31.10.2013 13:11:47
 
 
Цитата
Скрипт работает следующим образом:
1) Пробегаем список узлов и ветвей загруженных в Растр и пишем текстовый файл с их описанием для Graphviz.
2) Запускаем один из многочисленных модулей построения графа Graphviz. На выходе он пишет текстовый файл с описанием изображения графа.
3) Читаем полученное изображения графа в Растр.

Так что схема затаскивается сама

То есть, если полученный текстовый файл соответсвет по внутреннему представлению файлу гарфики растра с расширением "grf"?
И достаточно подменить расшиерение "txt" на "grf" изатащить полученную макросом графику в Растр через его интерфейс "загрузить"?
 
Профиль
Наверх
Александр Александров
Администратор
 
Всего сообщений: 597
Дата регистрации: 31.05.2008
Создано: 31.10.2013 13:49:27
 
 
Цитата
?То есть, если созданный макросом текстовый файл соответствует по внутреннему представлению файлу графики Растра с расширением "grf"??


- нет, только расположение узлов, не передаются изломы, оринтация шин и тд.
Более продвинутый макрос работы с графикой Растр
http://www.rastrwin.ru/ma­cro/grf2svg.php

Цитата
?И достаточно подменить расширение "txt" на "grf" и затащить полученную макросом графику в Растр через его интерфейс "загрузить"??

- расположение узлов получится загрузить.
 
Профиль
Наверх


Сообщения 26 - 34 из 34
Начало | Пред. | 1 2 | След. | Конец 

Читают тему
гостей: 1, пользователей: 0, из них скрытых: 0


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация







Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019