ngcgui

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

ngcgui

Сообщение nkp »

NGCGUI - установка, настройка, описание, примеры.
Примеры
Файлы подпрограмм

NGCGUI это утилита для использования в EMC2 подпрограмм,т.н. мастеров.
Ссылки
http://www.youtube.com/watch?v=Bn8T5Fw0ISs
http://www.linuxcnc.org/docs/2.5/html/g ... ha:O-Codes - О-коды
Установка
Для установки в EMC2 версии 2.4 нужны 4 файла:
ngcgui.rar
(38.12 КБ) 1440 скачиваний
Положить файлы в папку с конфигурацией станка.
Более удобным будет поместить в отдельную папку,тогда можно их использовать для разных кофигураций.
Прописать в ini файле в секции [DISPLAY] пути к этим файлам:
(пример из моего ini файла)
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

[attachment=10]Screenshot-7.png[/attachment][DISPLAY]

USER_COMMAND_FILE = /home/nkp/emc2/ngcgui/ngcgui_tst/tkapp.py
NGCGUI = /home/nkp/emc2/ngcgui/ngcgui_tst/ngcgui.tcl
TKAPP   = /home/nkp/emc2/ngcgui/ngcgui_tst/ngcgui_app.tcl
TKAPP   = /home/nkp/emc2/ngcgui/ngcgui_tst/ngcgui_ttt.tcl
Обратите внимание: : ngcgui_app.tcl должен предшествовать ngcgui_ttt.tcl
Теперь создаем нашу первую вкладку следующей строкой - пока без названия: Запускаем,проверяем: Настройка
Теперь создаем сам файл подпрограммы для нашей вкладки.
Он должен быть такого вида: имя- имя подпрограммы,имя файла и название нашей вкладки.
тело подпрогр- g-код, который мы напишем.
Назовем файл lathe (пример будет из токарной обработки): Окончание файлов должно быть .ngc
Помещаем наш файл lathe.ngc в папку прописанную в ini [DISPLAY]PROGRAM_PREFIX и прописываем путь к ней там же: Проверяем: Кстати,загружаемый по умолчанию EMC файл можно изменить в ini [DISPLAY]
если прописать так
не загр. ничего.(как на скриншоте выше.)
Напишем тело нашей подпрограммы.
Его надо начинать с набора инструкций, которые определяют параметры :
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

o<lathe> sub
   #<Material_Dia> =  #1 (=16 Диаметр заготовки)
   #<Final_Dia> =  #2 (=10 Диаметр детали)
   #<Depth_Cut> =  #3 (=2 глуб  прохода)
   #<Final_Cut> =  #4 (=0.00 глуб чист прох)
   #<SurfaceSpeed> =  #5 (=100 Поверхностная скорость)
   #<FeedRate> =  #6 (=40 Подача)
   #<Max_RPM> =  #7 (=1500 обороты)
   #<Z_EndOfCut> =  #8 (=2 финиш )
   #<Z_StartOfCut> =  #9 (=46 L заготовки)
   #<RToolNumber> = #10 (=1 Черновой инстр)
   #<FToolNumber> = #11 (=1 Чистовой инстр)
   #<Coolant> = #12 (=8 Охл вкл=8, Выкл=9)
o<lathe> endsub
Смотрим: Каждая строка появилась во вкладке с возможностью редактировать данные.
Теперь мы в нашей подпрограмме (в g-коде) можем (и будем) использовать переменные.
Например,вмето T1M6 пишем T#<RToolNumber> M6
После набора инструкций (их может быть до 30) непосредственно сам G-код:
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

T#<RToolNumber> M6
G43 G7 G96 D#<Max_RPM> S#<SurfaceSpeed>
M3 M#<Coolant>
G0 X#<Material_Dia> Z#<Z_StartOfCut>
#<Current_Dia>=#<Material_Dia>
o100 while [#<Current_Dia> gt #<Final_Dia>]
O101   if [#<Current_Dia>-#<Depth_Cut> gt #<Final_Dia>]
         #<Current_Dia>=[#<Current_Dia>-#<Depth_Cut>]
O101   else
         #<Current_Dia>=#<Final_Dia>
O101   endif
       X#<Current_Dia>
       G1 Z#<Z_EndOfCut> F#<FeedRate>
       G0 X[#<Current_Dia>+0.025]
       Z#<Z_StartOfCut>
o100 endwhile
G0 X[#<Current_Dia>+0.025]
M5 M9               
Z#<Z_StartOfCut>
G49                
G53 G0 X0 Z0       
o<lathe> endsub
Сам файл:
lathe.ngc
(1.28 КБ) 1791 скачивание
Запускаем,на вкладке нажимаем "Create feature" ,потом "Finalize"
Получаем запрограммированную траекторию: Описание
Примеры
Как объеденить несколько подпрограмм
В программу могут быть объеденены несколько копий как одной подпрограммы, так и разные подпрограммы.
Как это выглядит на практике:
у нас есть 6 вкладок с подпрограммами для фрезерной обработки: Объеденим их все в одну программу. Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
Этим мы передали наши параметры в создаваемый ngcgui файл auto.ngc. Изменим некоторые параметры(например координаты начала обработки) Нажмем еще раз "CreateFeature".В файл auto.ngc передались также и новые параметры.Нажимаем "Finalize"-загружаем готовый файл с двумя подпрограммами: Чтобы объеденить подпрограммы с разных вкладок :
1.Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
2.Переходим на нужную вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
3.Повторяем,если необходимо.
4.Нажимаем "Finalize".
5. Соглашаемся создать из всех вкладок. Удобней объеденять несколько одинаковых контуров так:
1.создаем из требуемой вкладки копию нажатием кнопки "new"
2.нажимаем "Subfile" ,открываем файл(в нашем случае тот же,что и на первой вкладке)
3.повторяем необходимое число раз
4.корректируем параметры для каждой копии
5.объеденяем все,соблюдая нужную нам последовательность обработки. 5. Соглашаемся создать из всех вкладок. Файлы подпрoграмм
для токарной обработки
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

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

#<start-value> = 15    ;нач значение
#<decrement>   = 1    ;декремент -еденичн. уменшение
#<end-value>   =10    ;конеч значение
#<end>=3  ; значен X
o100 do
;------------------------------------------------------------
G0 X#<end>   ;любые действия
;-----------------------------------------------------------
  G4 P1.0 (маленькая пауза)

  ; алгоритм
  o110 if [[#<start-value> - #<decrement>] GT #<end-value>]
    ; убедиться, что [начальное значение минус декремент] не будет выходить за рамки конечного значения
    #<start-value> = [#<start-value> - #<decrement>]
  o110 else
   
    #<start-value> = #<end-value> 
  o110 endif
;---------------------------------------
 #<end>=[#<end>+2]
;---------------------------------------
o100 while [#<start-value> GT #<end-value>]



M2
шаблон цикла
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

(info: сфера ) 
 o<sfer> sub 
 #<promien_walca> =     #1 (=30 радиус заготовки) 
 #<promien_na_plasko> =  #2 (=20 Радиус части без скругл.) 
 #<promien_kulki> =     #3 (=10 Радиус  скругления) 
 #<przybranie> =     #4 (=1 снятие за прох) 
 #<przesuniecie_z> =     #5 (=0 Начало по Z) 
  #<Coolant>    =        #6 (=8 охлажд вкл=8 выкл=9) 
 #<predkosc> = #7 (=400 скорость резания) 
 #<promien> = #<promien_walca> 
 M3 M#<Coolant> 
 #<walec> = 0 
 #<promien_walca> = [#<promien_walca>-#<promien_na_plasko>] 
 g18 (g7)  G64
 M3 S1000 
 g0 z[#<przesuniecie_z>+1] x[[#<promien>]+1] 
 o100 while [#<walec> lt [#<promien_walca>]] 
 #<walec>=[[#<walec>]+[#<przybranie>]] 
o110 if [[[#<promien_walca>]-[#<walec>]+[#<promien_na_plasko>]]GT [ #<promien_na_plasko>]]
 x[[#<promien_walca>]-[#<walec>]+[#<promien_na_plasko>]]
z[#<przesuniecie_z>] 
 g3 x[[#<promien>]] z-[[#<walec>]-[#<przesuniecie_z>]] r[#<promien_kulki>]  f[#<predkosc>]   
  o110 else  
    G61
 x[[#<promien_walca>]-[#<walec>]+[#<promien_na_plasko>]]
z[#<przesuniecie_z>] 
 g3 x[[#<promien>]] z-[[#<walec>]-[#<przesuniecie_z>]] r[#<promien_kulki>]  f[#<predkosc>] 
  o110 endif
 g0 
 x [[#<promien>]+1] 
 z[#<przesuniecie_z>+1] 
 o100 endwhile 
 o<sfer> endsub
M2
сфера
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

(info: внешний конус) 
 o<stozek> sub 
 #<MaxRPM>          = #1 (= 3000 макс обороты) 
 #<SurfaceUnitsMin> = #2 (= 40 поверхностная скорость) 
 #<Przybranie>        = #3 (= 2 за 1 проход) 
 #<Z-Start>         = #4 (= 0.000 старт по Z) 
 #<kat>           = #5 (= 45 угол конуса) 
 #<dlugosc_stozka> =  #6 (=30 длинна конуса) 
 #<srednica_walka> = #7 (=30 начальный диаметр) 
 #<Coolant>         = #8 (=8 охлаж вкл=8 выкл=9) 
#<FeedRate>        = #9 (=40 подача)
 #<zebrane_max> = [tan[#<kat>]*[#<dlugosc_stozka>]] 
 #<ilosc_przybran> = [[#<zebrane_max>]/[#<przybranie>]] 
 #<zejscie_dlugosci> = [[#<dlugosc_stozka>]/[#<ilosc_przybran>]] 
 #2 = #<zejscie_dlugosci> 
 #1 = 0 
G96 D#<MaxRPM> S#<SurfaceUnitsMin> 
M3
 o100 while [#<ilosc_przybran> gt 0] 
 #1=[[#1]+[#<przybranie>]] 
 g0 z1 
 x[[#<srednica_walka>/2]-[#1]] 
 z0 
 g1 f[#<FeedRate>] z-[#<zejscie_dlugosci>] x[#<srednica_walka>/2] 
 g0 x[[#<srednica_walka>/2]+1] 
 #<ilosc_przybran> = [[#<ilosc_przybran>] - [#<przybranie>]] 
 #<zejscie_dlugosci> = [[#<zejscie_dlugosci>]+[#2]] 
 o100 endwhile  
 g0 z1 
 o<stozek> endsub
конус по его длине
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

(info: проточка наружной поверхности)
o<od> sub
#<Material_Dia> =  #1 (=16 Диаметр заготовки)
   #<Final_Dia> =  #2 (=10 Диаметр детали)
   #<Depth_Cut> =  #3 (=2 глуб  прохода)
   #<Final_Cut> =  #4 (=0.00 глуб чист прох)
#<SurfaceSpeed> =  #5 (=100 Поверхностная скорость)
    #<FeedRate> =  #6 (=40 Подача)
     #<Max_RPM> =  #7 (=3000 обороты)
  #<Z_EndOfCut> =  #8 (=2 финиш )
#<Z_StartOfCut> =  #9 (=46 L заготовки)
 #<RToolNumber> = #10 (=2 Черновой инстр)
 #<FToolNumber> = #11 (=1 Чистовой инстр)
     #<Coolant> = #12 (=8 Охл вкл=8, Выкл=9)

T#<RToolNumber> M6

G43 G7 G96 D#<Max_RPM> S#<SurfaceSpeed>

M3 M#<Coolant> 
G0 X#<Material_Dia> Z#<Z_StartOfCut>
#<Current_Dia>=#<Material_Dia>

o100 while [#<Current_Dia> gt #<Final_Dia>]

O101   if [#<Current_Dia>-#<Depth_Cut> gt #<Final_Dia>]
         #<Current_Dia>=[#<Current_Dia>-#<Depth_Cut>]
O101   else
         #<Current_Dia>=#<Final_Dia>
O101   endif

       X#<Current_Dia>
       G1 Z#<Z_EndOfCut> F#<FeedRate>
       G0 X[#<Current_Dia>+0.025]
       Z#<Z_StartOfCut>
o100 endwhile

G0 X[#<Current_Dia>+0.025]
M5 M9             
Z#<Z_StartOfCut>
G49             
G53 G0 X0 Z0    
o<od> endsub
обработка наружной цилиндрической поверхности
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

(info: расточка)
o<id>sub
      #<Hole_Dia> =  #1 (=16  нач диаметр отверстия)
     #<Final_Dia> =  #2 (=20  кон диаметр отверстия)
     #<Depth_Cut> =  #3 (=1 расточ за 1 проход)
   #<Spring_Cuts> =  #4 (=0 Spring Cuts)
  #<Z_StartOfCut> =  #5 (=46 Z начало обработки)
    #<Z_EndOfCut> =  #6 (=-0.600 Z конец обработки)
  #<SurfaceSpeed> =  #7 (=80 поверхн скорость)
      #<FeedRate> =  #8 (=50 подача)
#<MaxSpindle_RPM> =  #9 (=3000 макс обороты)
    #<ToolNumber> = #10 (=1 № инстр)
       #<Coolant> = #11 (=8 охлажд вкл= 8 выкл=9)

T#<ToolNumber> M6
G43 G7 G96 D#<MaxSpindle_RPM> S#<SurfaceSpeed>
M3 M#<Coolant> 
G0 X#<Hole_Dia> Z#<Z_StartOfCut> 
#<Current-Diameter> = #<Hole_Dia>
o100 while [#<Current-Diameter> lt #<Final_Dia>]
O101   if [#<Current-Diameter> + #<Depth_Cut> lt #<Final_Dia>]
         #<Current-Diameter> = [#<Current-Diameter> + #<Depth_Cut>]
O101   else
         #<Current-Diameter> = #<Final_Dia>
O101   endif
       X#<Current-Diameter>
       G1 Z#<Z_EndOfCut> F#<FeedRate>
       G0 X[#<Current-Diameter>-0.010]
       Z#<Z_StartOfCut>
o100 endwhile
o102 while [#<Spring_Cuts> gt 0]
       G1 X#<Final_Dia>
       Z#<Z_EndOfCut>
       X[#<Final_Dia>-0.010]
       G0 Z#<Z_StartOfCut>
       #<Spring_Cuts> = [#<Spring_Cuts> -1]
o102 endwhile
G0 X[#<Current-Diameter>-0.010]
M5 M9          
Z#<Z_StartOfCut>
G49             
G53 G0 X0 Z0   
o<id>endsub
расточка
taper-od.ngc
(1021 байт) 2034 скачивания
face.ngc
(894 байт) 2029 скачиваний
для фрезерной обработки
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

 (info: цилиндрический карман)
O<deepcylindricalpocket> sub
  #<xc>     = #1 (= 0 X центр)
  #<yc>     = #2 (= 0 Y центр)
  #<safez>  = #3 (= 8 безоп высота)
  #<depth>  = #4 (= 2 глубина фрезерования)
  #<radius> = #5 (= 5 радиус)
  #<milld>  = #6 (= 6 диаметр фрезы)
  #<frate>  = #7 (= 120 подача)
  #<zstep>  = #8 (= 0.5 z за 1 об)
  #<rstep>  = #9 (= 1 r за 1 об)

  O<if> if [ #<frate> NE 0 ]
    F#<frate>
  O<if> endif
  O<if> if [ #<zstep> EQ 0 ]
    #<zstep> = [#<milld>/2]
  O<if> endif
  O<if> if [ #<rstep> EQ 0 ]
    #<rstep> = [#<milld>/2]
  O<if> endif
  #<z> = #<safez>
  #<r> = [#<radius> - #<milld>/2]
  G0 Z#<safez>
  G4 P0
  G0 X[#<xc> + #<r>] Y#<yc>
  O<loop> while [ 1 ]
    O<if> if [ #<z> - #<zstep> LT #<depth>]
      #<zstep> = [#<z> - #<depth>]
    O<if> endif   
    G40
    G2 X[#<xc> - #<r>] Y#<yc> Z[#<z> - #<zstep>/2] R#<r>
    G2 X[#<xc> + #<r>] Y#<yc> Z[#<z> - #<zstep>] R#<r>   
    #<r1> = #<r>
    O<loop_r> while [ 1 ]
      G2 X[#<xc> - #<r1>] Y#<yc> R#<r1>
      G2 X[#<xc> + #<r1>] Y#<yc> R#<r1>
      #<r1> = [#<r1> - #<rstep>]
      O<if> if [ #<r1> GT 0 ] 
        G1 X[#<xc>+#<r1>]
      O<if> else
        O<loop_r> break
      O<if> endif      
    O<loop_r> endwhile
    G1 X[#<xc> + #<r>]
    #<z> = [#<z> - #<zstep>]
    O<if> if [ #<z> LE #<depth> ]
      O<loop> break
    O<if> endif
  O<loop> endwhile
  G0 Z#<safez>
O<deepcylindricalpocket> endsub
3.png (54505 просмотров) <a class='original' href='./download/file.php?id=4064&sid=d3389290c564988c4fc16b60c112996c&mode=view' target=_blank>Загрузить оригинал (75.05 КБ)</a>
цилиндрический карман
Последний раз редактировалось nkp 20 июл 2012, 06:57, всего редактировалось 45 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

Nick писал(а):spiral.ngc у тебя не правильный
файл из стандартной сборки :)
-----------------------
Упс,ошибочка -заменил :)
freeform
Кандидат
Сообщения: 83
Зарегистрирован: 30 июн 2011, 00:02
Репутация: 7
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение freeform »

Имейте в виду, что эти циклы надо тщательно проверять. Я вот давеча налетел. Привинтил наконец вкладки ngcgui, поправил код (надо было простенький фланец расточить), запустил, стою и умиляюсь :) . Но в конце расточки резец отходит, шпиндель останавливается, сож выключается, и вдруг суппорт весело едет в патрон :wtf: . Поймать я естественно ничего не смог, хорошо он хоть разогнаться до полной скорости не успел. Бум! Станок встает по сервоошибке, я в шоке. Оказалось, что я проглядел в конце цикла диверсантскую строчку - G53 G0 X0 Z0 (ну нафига такое лепить было?) . На отрисовке она не отображается, но она есть :) .
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

эта тема была открыта дабы сообща разобраться что за "зверь" такой -ngcgui .
Код выкладывался именно как пример составления подпрограмм.
Мое упущение (признаю) - надо было однозначно их (примеры) определить именно как примеры,а не как непосредственно 100% готовые к "употреблению" программы :)
freeform
Кандидат
Сообщения: 83
Зарегистрирован: 30 июн 2011, 00:02
Репутация: 7
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение freeform »

nkp писал(а):эта тема была открыта дабы сообща разобраться что за "зверь" такой -ngcgui .
Код выкладывался именно как пример составления подпрограмм.
Мое упущение (признаю) - надо было однозначно их (примеры) определить именно как примеры,а не как непосредственно 100% готовые к "употреблению" программы :)
Нене, я без претензий ,ни в коем случае. Просто призыв к внимательности :) . Коды я вообще откуда-то с linuxcnc качал.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ngcgui

Сообщение Nick »

freeform писал(а):G53 G0 X0 Z0 (ну нафига такое лепить было?) . На отрисовке она не отображается, но она есть .
Может у тебя стоит опция не показывать холостой пробег?
Обычно все G0 тоже отображаются...
freeform
Кандидат
Сообщения: 83
Зарегистрирован: 30 июн 2011, 00:02
Репутация: 7
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение freeform »

Nick писал(а):Обычно все G0 тоже отображаются...
Отобразились все G0 кроме последнего, видимо из-за смены системы координат.
В общем, явно вредительская строчка :) .
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

вопрос по tcl:
может кто знает tcl и поможет . Задача такая :
есть в окне кнопка (или несколько кнопок)
при нажатии в этом же окне открывается граф файл (jpg, png)
каждой кнопке соответствующий файл
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

Идея такая:
структурировать мастера по вкладкам
на вкладке кнопки с картинками "в тему" мастера
каждая кнопка через соответствующий М-файл открывает нужное окно ngcgui
и вот тут и хотелось бы кнопочками открывать на форме разные рисунки (чертежи,схемы)
ngc.tar
запускать М111
(2.02 МБ) 491 скачивание
у меня пока работает только первая кнопочка img1
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение Serg »

А как эти картинки далее используются? Ну например, что будет, если изображение подменить "без ведома программы"? (Всю прогу лень изучать :beer_blow: )
Если это чисто декоративная картинка, то задуманное можно осуществить: в проге картинка "загружается" при старте программы и прописывается в глобальных переменных (вот это и настораживает), поэтому нужно либо при старте сразу загружать все картинки с соотв. добавлением/изменением переменных, либо можно грузить непосредственно при нажатии на кнопки. Если это декорация, то возможны оба варианта, иначе только первый.

P.S. В принципе сами картинки можно поместить в текст программы в base64, чтоб они в виде отдельных файлов не валялись.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

UAVpilot писал(а):А как эти картинки далее используются
Да-это просто декорация.Файлы png,jpg,gif.
UAVpilot писал(а):либо можно грузить непосредственно при нажатии на кнопки
этого как раз и добиваемся
сегодня малость поковырял код
вот в этой процедуре:

Код: Выделить всё

proc ::ngcgui::new_image {hdl ngcfilename } {
  set idx [string first .ngc $ngcfilename]
  if {$idx < 0} {return -code error "new_image <$ngcfilename>"}  
  set filestart [string range $ngcfilename 0 4]
  foreach suffix {png gif jpg pgm} {
    set f $filestart$suffix 
 
    if [file readable $f] {
      set ifilename $f
      break

    }
  }
  if ![info exists ifilename] {
     catch {unset ::ngc($hdl,img,filename)}
     catch {pack forget $::ngc($hdl,img,widget)} ;# standalone
     catch {wm withdraw $::ngc($hdl,img,top)} ;# needed for standalone
     return ;# silently continue
  }

  set doimage 0
  if ![info exists ::ngc($hdl,img,filename)] {
    set ::ngc($hdl,img,status) first
    set doimage 1
  } else {
    if {"$::ngc($hdl,img,filename)" != "$ifilename"} {
      set ::ngc($hdl,img,position) [position $::ngc($hdl,img,top)]
      set ::ngc($hdl,img,status) new
      set doimage 1
    }

  }

  if {$doimage} {
 
    # first time for this file for this hdl
    set ::ngc($hdl,img,filename) $ifilename
    pack forget $::ngc($hdl,img,widget)
     set  ifilename    $ni
    puts $ifilename
    set tmpimage [image create photo -file $ifilename] 
    set ct 0
    set sw [expr [image width  $tmpimage] / $::ngc(any,img,width,max)  + 1]
    set sh [expr [image height $tmpimage] / $::ngc(any,img,height,max) + 1]
    set subsample $sw
   
    if  {$sh > $sw} {set subsample $sh}
    set ::ngc($hdl,img,image) [image create photo]
    $::ngc($hdl,img,image) copy $tmpimage -subsample $subsample -shrink
    
    set width  [image  width  $::ngc($hdl,img,image)]
    set height [image  height $::ngc($hdl,img,image)]
    # convenience only:
    set ::ngc($hdl,img,orig,size)  [image width $tmpimage]x[image height $tmpimage]
    set ::ngc($hdl,img,sampled,size)  ${width}x${height}

    $::ngc($hdl,img,canvas) delete all
    $::ngc($hdl,img,canvas) configure -width $width -height $height
    
    $::ngc($hdl,img,canvas) create image [expr $width/2] [expr $height/2]\
                      -anchor center \
                      -image $::ngc($hdl,img,image)
    recursive_bind_controlkeys $hdl $::ngc($hdl,img,top)
    pack $::ngc($hdl,img,widget)

  }
добавил вот эту строку

Код: Выделить всё

 set  ifilename    $ni
а теперь бы к кнопкам в -comand привязать что то наподобие

Код: Выделить всё

set  ni  nameX.png
начальный уровень в тикле пока не дал результата :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение Serg »

А как изначально появляется эта картинка?
Я правильно понимаю, что там открывается некий диалог, в котором указывается некий subfile, и имя картинки берётся такое-же?
В процессе работы проги можно снова вызвать этот диалог и указать другой subfile?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

Да,там можно из диалога вызывать любую ngc подпрограмму.
Вместе с ней по умолчанию открывается графический файл с таким же названием.
Но в авторском исполнении рисунок мал: перенес вправо на все свободное место
как бы и этого достаточно-но для удобства хотелось бы для одного мастера иметь возможность открывать несколько чертежей(схем ,рисунков,эскизов,видов)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение Serg »

Собственно идея следующая: на кнопки повесить то, что запускается после выбора файла из диалога. Как-бы предопределённый выбор подпрограммы.
Сегодня уже спать пойду, а завтра, если сам не победишь, то думаю вместе сделаем. Только опиши куда надо жать, чтоб диалог позвать, ну и пара скриншотиков процесса не помешает, а то лениво прогу запускать и пробовать. :hehehe:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение Serg »

Попробуй вот так:

Код: Выделить всё

--- ngcgui.orig	2012-07-23 17:16:25.738953246 +0400
+++ ngcgui	2012-07-23 17:24:44.017753990 +0400
@@ -1134,36 +1134,19 @@
      set w [frame $wimg.[qid]]
       pack $w -fill x -expand 1
 
-  set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
-               -pady 0 -text "Img1" \
-               -command [list ::ngcgui::openimg $hdl]]
-        pack $b -side left -fill none -expand 0
-
-  set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
-               -pady 0 -text "Img2" \
-               ]
-        pack $b -side left -fill none -expand 0
-
-  set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
-               -pady 0 -text "Img3" \
-               ]
-        pack $b -side left -fill none -expand 0
-  set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
-               -pady 0 -text "Img4" \
-               ]
-        pack $b -side left -fill none -expand 0
-  set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
-               -pady 0 -text "Img5" \
-               ]
-        pack $b -side left -fill none -expand 0
+      if {![catch {glob -directory $::ngc($hdl,dir) *.ngc} files]} {
+	      foreach fl $files {
+		      regsub {\.ngc$} [file tail $fl] {} $nm
+		      pack [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
+		       		-pady 0 -text $nm \
+		       		-command "set ::ngc($hdl,fname,subfile) $fl; ::ngcgui::gui $hdl readsubfile"] \
+		       	-side left -fill none -expand 0
+	      }
+      }
 
   set ::ngc($hdl,img,canvas) [canvas $wimg.canvas -bg darkgray ] ;# картинка на фрейм
-  #pack $::ngc($hdl,img,canvas) -side left -expand 1 -fill both
+  pack $::ngc($hdl,img,canvas) -side left -expand 1 -fill both
  
-proc ::ngcgui::openimg {hdl} {
-pack $::ngc($hdl,img,canvas) -side left -expand 1 -fill both
-} 
-
 
 
 #---------------------------------------------------------------------------------------------
предполагается, что при запуске будет сканировать каталог, заданный параметром -D и все найденные там *.ngc отобразит в виде соотв. кнопок, при нажатии которых будет грузится соотв. .ngc и картинка. Проверок на количество файлов/кнопок и на их длину не делал.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

Эх...
Мысль свою я не донес до конца! :)
Чтоб совсем коротко - задача -
при одной открытой подпрограмме иметь возможность кнопками открывать разные картинки
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение Serg »

Тогда затраты на переделки превысят затраты на написание заново. Там придётся переделывать организацию всех переменных и виджетов. :freak_in_action:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: ngcgui

Сообщение nkp »

UAVpilot писал(а):затраты на переделки превысят затраты на написание заново
я списался с Dewey Garrett (автор программы).
он ответил

Код: Выделить всё

but it is a fair amount of work
probably need to modify this procedure:
proc ::ngcgui::new_image {hdl ngcfilename}
перепишем(для начала процедуру) -заодно поштудируем тикль :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ngcgui

Сообщение Serg »

Это была моя первая мысль, потом я копнул глубже... :)

По идее там надо делать не кнопки а табы, причем не только на картинку, но и на все параметры, относящиеся к ней. Начинать с того, что все переменные вида ::ngc($hdl,....) переделывать в ::ngc($hdl,$sub,...), где $sub - идентификатор каждой страницы/подпрограммы.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ngcgui

Сообщение Nick »

О чем говорят все эти люди :)

А нельзя оттуда хендлер на кнопку или на вкладку таба и запаковать туда картинку. Кстати да, табы там более логичны :).
Ответить

Вернуться в «LinuxCNC»