Страница 7 из 10
Re: Python в LinuxCnC
Добавлено: 20 дек 2012, 19:41
nkp
Nick писал(а):А "1" откуда взялась?
да это же внутреннее имя виджета
можно любое(допустимое) написать
Nick писал(а):А что от гремлина хочешь?
ну цвета там поменять , DRO подтесать, и т.д.
Nick писал(а):Си как раз лучше всего за праздничным столом изучать
О!наверно название "си" производное от "сивуха" ???!!!

Re: Python в LinuxCnC
Добавлено: 20 дек 2012, 23:45
Serg
Nick писал(а): UAVpilot писал(а):но его достоинство в том, что он на любой платформе под любой ОС выглядит и работает одинаково
учитывая, что LinuxCNC идет только под Linux

Тот красивый диалог - это стандартный диалог GNOME, однако бывают линуксы и без GNOME.
Например мне, когда на какой-то маленькой железке с линуксом требуется максимально лёгкий GUI, то я достаю старый добрый Motif - в Tk диалоги как раз родом из него.

Re: Python в LinuxCnC
Добавлено: 25 ноя 2013, 23:08
nkp
есть в модуле .../lib/python/rs274/glcanon.py функция
select
она подсвечивает выделеный пользователем участок траектории (а фактически - строку кода):
print конечно это я добавил добавил :
(для просмотра содержимого нажмите на ссылку)Код: Выделить всё
def select(self, x, y):
if self.canon is None: return
pmatrix = glGetDoublev(GL_PROJECTION_MATRIX)
glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
vport = glGetIntegerv(GL_VIEWPORT)
gluPickMatrix(x, vport[3]-y, 5, 5, vport)
glMultMatrixd(pmatrix)
glMatrixMode(GL_MODELVIEW)
while 1:
glSelectBuffer(self.select_buffer_size)
glRenderMode(GL_SELECT)
glInitNames()
glPushName(0)
if self.get_show_rapids():
glCallList(self.dlist('select_rapids', gen=self.make_selection_list))
glCallList(self.dlist('select_norapids', gen=self.make_selection_list))
try:
buffer = list(glRenderMode(GL_RENDER))
except OverflowError:
self.select_buffer_size *= 2
continue
break
if buffer:
min_depth, max_depth, names = min(buffer)
self.set_highlight_line(names[0])
else:
self.set_highlight_line(None)
glMatrixMode(GL_PROJECTION)
glPopMatrix()
glMatrixMode(GL_MODELVIEW)
if buffer:
print 'line' , names[0]
как получить эту names[0] в другом окошке??
ну примерно таком:
(для просмотра содержимого нажмите на ссылку)Код: Выделить всё
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pygtk
import gtk
class Widgets:
def __init__(self, xml):
self._xml = xml
def __getattr__(self, attr):
r = self._xml.get_object(attr)
if r is None: raise AttributeError, "No widget %r" % attr
return r
def __getitem__(self, attr):
r = self._xml.get_object(attr)
if r is None: raise IndexError, "No widget %r" % attr
class Test:
def finish (self, data=None):
gtk.main_quit()
def num_line (self, txt):
self.widgets.num.set_text(txt)
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file("number.ui")
self.builder.connect_signals(self)
self.builder.get_object("window1").show()
self.widgets = Widgets(self.builder)
if __name__ == "__main__":
main = Test()
gtk.main()

- Выделение_013.png (4.49 КБ) 3897 просмотров
то есть - выделяем в Axis участок траектории - получаем в нашей програмке номер строки кода
Re: Python в LinuxCnC
Добавлено: 25 ноя 2013, 23:09
Nick
Пихай его в пин!

Re: Python в LinuxCnC
Добавлено: 26 ноя 2013, 11:01
nkp
пока пишу в файл - потом читаю :
Код: Выделить всё
if buffer:
fl = open('/home/nkp/line.txt' , 'w')
fl.write(str(names[0]))
Re: Python в LinuxCnC
Добавлено: 26 ноя 2013, 12:54
Nick
Не, лучше в пин!
там у тебя hal импортируется? Если да, то смело создавай пин и пихай эту информацию туда! Так универсальнее.
Re: Python в LinuxCnC
Добавлено: 05 дек 2013, 00:03
nkp
Nick писал(а):Не, лучше в пин! там у тебя hal импортируется? Если да, то смело создавай пин и пихай эту информацию туда! Так универсальнее.
так и
сделал...
Re: Python в LinuxCnC
Добавлено: 17 дек 2013, 12:10
nkp
вот это работает из командной строки:
Код: Выделить всё
DIR='/home/nkp/linuxcnc/nc_files/ofs/oper/*'
sed -i 's/X-/K/' $DIR
sed -i 's/X/X-/' $DIR
sed -i 's/K/X/' $DIR
sed -i 's/G2/P/' $DIR
sed -i 's/G3/G2/' $DIR
sed -i 's/P/G3/' $DIR
как бы это правильно в питоне использовать ?
чарез import subprocess
subprocess.call(['sed', 's/X-/K/' ,fl], stdout = f_tmp )
Re: Python в LinuxCnC
Добавлено: 17 дек 2013, 17:15
Serg
в питоне-же есть регулярные выражения...
Re: Python в LinuxCnC
Добавлено: 18 дек 2013, 15:56
Nick
import re
import os
а что все это должно делать?
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 11:22
nkp
вопрос по центровке отрисовки в gremlin ...
в Axis функция o.set_centerpoint(x, y, z ) центровки вызывается в двух местах(при загрузке и после загрузки ж-кода):
Код: Выделить всё
def open_file_name(f):
open_file_guts(f)
if str(widgets.view_x['relief']) == "sunken":
commands.set_view_x()
elif str(widgets.view_y['relief']) == "sunken":
commands.set_view_y()
elif str(widgets.view_z['relief']) == "sunken":
commands.set_view_z()
elif str(widgets.view_z2['relief']) == "sunken":
commands.set_view_z2()
else:
commands.set_view_p()
if o.canon is not None:
x = (o.canon.min_extents[0] + o.canon.max_extents[0])/2
y = (o.canon.min_extents[1] + o.canon.max_extents[1])/2
z = (o.canon.min_extents[2] + o.canon.max_extents[2])/2
o.set_centerpoint(x, y, z)
из glnav.py:
Код: Выделить всё
def set_centerpoint(self, x, y, z):
"""Set the new center point for the model.
This is where we are looking."""
self.xcenter = x
self.ycenter = y
self.zcenter = z
print "glnav", x,y,z
self._redraw()
далее это "уходит" наверно(?) в minigl.c с корнями в самой библиотеке GL
если пытаться задать свои координаты центровки(ну вот хоть из кода Axis):
Код: Выделить всё
if o.canon is not None:
x = -20.0
y = (o.canon.min_extents[1] + o.canon.max_extents[1])/2
z = (o.canon.min_extents[2] + o.canon.max_extents[2])/2
o.set_centerpoint(x, y, z)
то заданное значение функция принимает - но отрисовка остается прежней(
такое впечатление ,что моментально перерисовывается из другого места...
но set_centerpoint вызывается только в этих двух файлах:
Код: Выделить всё
$nkp@nkp-desktop:~$ grep -rl 'set_centerpoint' /home/nkp/emc2-dev-80db2a2/
/home/nkp/emc2-dev-80db2a2/bin/axis
/home/nkp/emc2-dev-80db2a2/src/emc/usr_intf/axis/scripts/axis.py
/home/nkp/emc2-dev-80db2a2/lib/python/glnav.py
/home/nkp/emc2-dev-80db2a2/lib/python/glnav.pyc
/home/nkp/emc2-dev-80db2a2/lib/python/rs274/glcanon.py
glcanon.py
========
вроде бы мелочь , но "нарисовав" в Axis линии заготовки , хотелось чтоб центровалось именно по ней ...
сейчас сделано "по центру" загруженной программы (Gcode)
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 12:42
Serg
Это питон тебя дурит.

Мог-бы попробовать внутри set_centerpoint написать какую-нибудь синтаксически неверную галиматью и обнаружить, что всё по прежнему работает без ошибок...
Собственно после изменений .py надо перекомпилить соотв. .pyc/.pyo
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 12:53
nkp
UAVpilot писал(а):Собственно после изменений .py надо перекомпилить соотв. .pyc/.pyo
наверно просто удалить их...
==========
но дело не в .pyc
я же в файле axis (который в bin) задаю аргументы для функции
вот тупо ставлю -20:
Код: Выделить всё
if o.canon is not None:
x = -20.0
y = (o.canon.min_extents[1] + o.canon.max_extents[1])/2
z = (o.canon.min_extents[2] + o.canon.max_extents[2])/2
o.set_centerpoint(x, y, z)
кстати ,неважно какие еденицы на данный момент в емс - по моему эти параметры всегда в дюймах(?)
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 12:56
NightV
UAVpilot писал(а):Это питон тебя дурит.
дожили... раньше юзверь юзвера дурили... теперь еще и ПО пытается его надурить...

Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 13:08
Serg
nkp писал(а):я же в файле axis (который в bin) задаю аргументы для функции
Ну напиши там перед "o.set_centerpoint(x, y, z)" чего-нибудь матерное и убедись, что эта часть кода не исполняется...

Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 13:12
Сергей Саныч
UAVpilot писал(а):Ну напиши там перед "o.set_centerpoint(x, y, z)" чего-нибудь матерное
в этом вашем питоне лишний пробел - уже матерное

Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 13:16
nkp
UAVpilot писал(а):Ну напиши там перед "o.set_centerpoint(x, y, z)" чего-нибудь матерное и убедись, что эта часть кода не исполняется...
написал - хоть и знал что конечно будет ошибка - синтаксическая прежде всего...
=============
эта функция срабатывает при загрузке gcode в емс
(именно загрузке - перезагрузка не срабатывает)
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 13:23
Nick
UAVpilot писал(а):Ну напиши там перед "o.set_centerpoint(x, y, z)" чего-нибудь матерное и убедись, что эта часть кода не исполняется...
у меня такое ощущение, что он может в этом pyc прописывать или исходник, или его последнюю дату модификации и если она больше, то компилим заново...
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 13:54
Serg
Не сразу заметил, что при открытии файла это зовётся.
похоже serf._redraw() вообще не имеет к этому отношения. Везде сделал вот так:
но безрезультатно.
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 14:26
nkp
UAVpilot писал(а):self._redraw()
если я правильно понял - self._redraw - это в OpenGLTk.py:
Код: Выделить всё
def _redraw(self):
print "self._redraw()Ok"
self.tkRedraw()
def tkRedraw(self, *dummy):
"""Cause the opengl widget to redraw itself."""
print "self.tkRedraw()Ok"
if not self.initialised: return
self.activate()
glPushMatrix() # Protect our matrix
self.update_idletasks()
self.activate()
w = self.winfo_width()
h = self.winfo_height()
glViewport(0, 0, w, h)
# Clear the background and depth buffer.
glClearColor(self.r_back, self.g_back, self.b_back, 0.)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glMatrixMode(GL_PROJECTION)
она отрабатывает , а def tkRedraw(self, *dummy) - кажись нет...