Макрос: Вывод на графику сечения

Программа Владимира Неуймина RastrWin и ее клоны: ActOpus, Барс. Статическая устойчивость.

Макрос: Вывод на графику сечения

Сообщениеgena » 06 сен 2006, 08:30

Вот озаботился написанием макроса, который будет просто выводить на графику нужное мне сечение. Просто иногда необходимо соединять чужие схемы, а на графике само собой делать это удобнее.Решил заполнить табличку "graph_node", но видимо этого недостаточно.Пока, за вчера, написал вот эти наброски.Может кто-то уже занимался подобным и сможет помочь?
k=1'k=Rastr.SendCommandMain(8,"Номер сечения:","",0)rastr.printp "Выводим на графику сечение № " & kset gr=rastr.tables("graph_node")set grx=gr.cols("k_x")set gry=gr.cols("k_y")set grn=gr.cols("ny")set grl=rastr.tables("grline")grl.SetSel "ns=" & krastr.printp "Всего линий " & grl.countset cip=grl.cols("ip")set ciq=grl.cols("iq")set vt=rastr.tables("vetv")set vtip=vt.cols("ip")set vtiq=vt.cols("iq")j=grl.FindNextSel(-1)' устанавливаем начальные координаты и смещенияx=1y=1dx=10dy=10while j<> -1  ' перебираем линии в сечении vt.SetSel "ip=" & cip.z(j) & "&iq=" & ciq.z(j) if vt.count=0 then vt.SetSel "ip=" & ciq.z(j) & "&iq=" & cip.z(j)  rastr.printp "ip=" & cip.z(j) & "&iq=" & ciq.z(j) & " параллельных " & vt.count m=vt.FindNextSel(-1) while m<>-1 ' если есть параллельные ветки, то перебираем их все  rastr.printp vtip.z(m) & " " & vtiq.z(m)' выводим узел начала линии  i = gr.size ' текущий максимальный номер в таблице "graph_node"  gr.InsRow i ' вставляем новую строку' заполняем новую строчку  grn.z(i) = vtip.z(m) ' номер узла  grx.z(i)=x   gry.z(i)=y' какие-то признаки положения, типа, стиля узла. ставил наугад по образу и подобию.  gr.cols("npri").z(i)=-2  gr.cols("viz").z(i)=33  gr.cols("wid").z(i)=1  gr.cols("ind_text").z(i)=i*13  gr.cols("ind_fig").z(i)=i*3' выводим узел конца линии  i = gr.size  gr.InsRow i  grn.z(i) = vtiq.z(m)  grx.z(i)=x + dx  gry.z(i)=y  gr.cols("npri").z(i)=-2  gr.cols("viz").z(i)=33  gr.cols("wid").z(i)=1  gr.cols("ind_text").z(i)=i*13  gr.cols("ind_fig").z(i)=i*3   y=y+dy  m=vt.FindNextSel(m) wend j=grl.FindNextSel(j)wend' печатаем всю табличку "graph_node"for i=0 to gr.size-1  rastr.printp i & " ny=" & gr.cols("ny").z(i) & " x=" & grx.z(i) & " y=" & gry.z(i) & " npri" & gr.cols("npri").z(i) & " viz=" & gr.cols("viz").z(i) & " wid=" & gr.cols("wid").z(i) & " styl=" & gr.cols("styl").z(i) & " ind_text=" & gr.cols("ind_text").z(i) & " ind_fig=" & gr.cols("ind_fig").z(i)next'Rastr.SendChangeData  HINTR_CHANGE_TABL,"graph_node",0,0
gena
Администратор
 
Сообщения: 29
Зарегистрирован: 07 июл 2015, 23:37

Re: Макрос: Вывод на графику сечения

СообщениеRomanov » 06 сен 2006, 08:45

А комментарии в набросках Пушкин будет писать? &nbsp;;)Ну или хотя бы в двух предложениях можно прояснить суть алгоритма?
Romanov
 
Сообщения: 0
Зарегистрирован: 25 июн 2006, 23:00

Re: Макрос: Вывод на графику сечения

СообщениеRomanov » 06 сен 2006, 08:47

А вообще в растре бы не помешал режим записи макроса, так как это сделано в Excele &nbsp; :roll:
Romanov
 
Сообщения: 0
Зарегистрирован: 25 июн 2006, 23:00

Re: Макрос: Вывод на графику сечения

Сообщениеgena » 06 сен 2006, 09:30

Цитата:

А комментарии в набросках Пушкин будет писать?  ;)Ну или хотя бы в двух предложениях можно прояснить суть алгоритма?
Я не пушкин, но дорисовал пару комментариев. Суть я уже обьяснил в 2х словах - вывожу узлы начала и конца линий, входящих в сечение в талицу "graph_node". Но при этом видимо нужно править еще какую-то таблицу, т.к. Растр при обновлении графики ругается.
gena
Администратор
 
Сообщения: 29
Зарегистрирован: 07 июл 2015, 23:37

Re: Макрос: Вывод на графику сечения

СообщениеRomanov » 06 сен 2006, 09:46

Тема интересная. Займусь этим вопросом на досуге.
Romanov
 
Сообщения: 0
Зарегистрирован: 25 июн 2006, 23:00

Re: Макрос: Вывод на графику сечения

СообщениеRomanov » 07 сен 2006, 07:22

C помощью нехитрого макроса
for i = 0 to rastr.tables.count-1set gr=rastr.tables.Item(i)rastr.printp "-----"rastr.printp gr.Name & " " & gr.Description rastr.printp gr.Sizenext
удалосьвыяснить что добавление элементов графики затрагивает следующие таблицы:graph_node Графика - узлыgraph_vetv Графика - ветвьgraph_text Графика-текстgraph_figur Анализируя результаты таблицы представленной во вложенном файле можно сказать, что вывод 1 узла на графическую схему приводит к добавлению:1 записи в таблице graph_node7 записям в таблице graph_text3 записям в таблице graph_figurВывод ветви на графическую схему приводит к добавлению1 записи в таблице graph_vetv6 записям в таблице graph_textДалее нужно уточнять допустимые значение полей добавляемых записей, но на это нет времени.Рискну предположить что могут существовать недокументированные возможности вывода узла на графическую схему с помощью команды SendCommandMain, но это еще нужно проверить. Или проще спросить у разработчиков.
Romanov
 
Сообщения: 0
Зарегистрирован: 25 июн 2006, 23:00

Re: Макрос: Вывод на графику сечения

Сообщениеgena » 07 сен 2006, 07:55

Спасибо за анализ. Буду копать дальше (как только появится свободная минутка).Результат обязательно покажу.
gena
Администратор
 
Сообщения: 29
Зарегистрирован: 07 июл 2015, 23:37

Re: Макрос: Вывод на графику сечения

Сообщениеgena » 13 окт 2006, 09:32

Резюме:Толком ничего не получилось. Слишком много параметров нужно задавать, а описания никакого Sad Все что мне удалось - это выставить 2 узла начала и конца линии, но сама линия автоматом не нарисовалась а посему смысл копать дпльше пропал.
k=Rastr.SendCommandMain(8,"Номер сечения:","",0)rastr.printp "Выводим на графику сечение № " & kset gr=rastr.tables("graph_node")set grx=gr.cols("k_x")set gry=gr.cols("k_y")set grn=gr.cols("ny")set grl=rastr.tables("grline")grl.SetSel "ns=" & krastr.printp "Всего линий " & grl.countset cip=grl.cols("ip")set ciq=grl.cols("iq")set vt=rastr.tables("vetv") set vtip=vt.cols("ip") set vtiq=vt.cols("iq")j=grl.FindNextSel(-1)x=1y=1dx=10dy=10while j<> -1 vt.SetSel "ip=" & cip.z(j) & "&iq=" & ciq.z(j) if vt.count=0 then vt.SetSel "ip=" & ciq.z(j) & "&iq=" & cip.z(j) rastr.printp "ip=" & cip.z(j) & "&iq=" & ciq.z(j) & " параллельных " & vt.count m=vt.FindNextSel(-1) while m<>-1 &nbsp;rastr.printp vtip.z(m) & " " & vtiq.z(m) &nbsp;i = gr.size &nbsp;gr.InsRow i &nbsp;grn.z(i) = vtip.z(m) &nbsp;grx.z(i)=x &nbsp;gry.z(i)=y &nbsp;gr.cols("npri").z(i)=-2 &nbsp;gr.cols("viz").z(i)=33 &nbsp;gr.cols("wid").z(i)=1 &nbsp; gr.cols("ind_text").z(i)=i*13 &nbsp; gr.cols("ind_fig").z(i)=i*3 &nbsp;i = gr.size &nbsp;gr.InsRow i &nbsp;grn.z(i) = vtiq.z(m) &nbsp;grx.z(i)=x + dx &nbsp;gry.z(i)=y &nbsp;gr.cols("npri").z(i)=-2 &nbsp;gr.cols("viz").z(i)=33 &nbsp;gr.cols("wid").z(i)=1 &nbsp;gr.cols("ind_text").z(i)=i*13 &nbsp;gr.cols("ind_fig").z(i)=i*3set g=rastr.tables("graph_vetv") &nbsp;i = g.size &nbsp;g.InsRow i &nbsp;g.cols.item(0).z(i)=vtip.z(m) &nbsp;g.cols.item(1).z(i)=vtiq.z(m) &nbsp;for h=2 to g.cols.count-1 &nbsp; g.cols.item(h).z(i)=1 &nbsp;nextset g=rastr.tables("graph_text") for k=1 to 20 &nbsp;i = g.size &nbsp;g.InsRow i &nbsp;for h=0 to g.cols.count-1 &nbsp; g.cols.item(h).z(i)=0 &nbsp;next next set g=rastr.tables("graph_figur") for k=1 to 3 &nbsp;i = g.size &nbsp;g.InsRow i &nbsp;for h=0 to g.cols.count-1 &nbsp; g.cols.item(h).z(i)=0 &nbsp;next next &nbsp;y=y+dy &nbsp;m=vt.FindNextSel(m) wend j=grl.FindNextSel(j)wend
gena
Администратор
 
Сообщения: 29
Зарегистрирован: 07 июл 2015, 23:37

Re: Макрос: Вывод на графику сечения

СообщениеRomanov » 13 окт 2006, 09:44

Занимаясь этим вопросом посмотрел какие возможности имеются по управлению ядром растра из внешних приложений. Чесно говоря увиденное меня разочаровало. Не увидел как можно реализовать полноценное управление из внешнего приложения.
Romanov
 
Сообщения: 0
Зарегистрирован: 25 июн 2006, 23:00


Вернуться в Rastr