Страница 7 из 10

Re: Python в LinuxCnC

Добавлено: 20 дек 2012, 19:41
nkp
Nick писал(а):А "1" откуда взялась?
да это же внутреннее имя виджета
можно любое(допустимое) написать
Выделение(003).jpg (4088 просмотров) <a class='original' href='./download/file.php?id=10327&mode=view' target=_blank>Загрузить оригинал (53.2 КБ)</a>
Nick писал(а):А что от гремлина хочешь?
ну цвета там поменять , DRO подтесать, и т.д.
Nick писал(а):Си как раз лучше всего за праздничным столом изучать
О!наверно название "си" производное от "сивуха" ???!!! :hehehe:

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
она подсвечивает выделеный пользователем участок траектории (а фактически - строку кода):
Выделение_012.png (3897 просмотров) <a class='original' href='./download/file.php?id=21571&mode=view' target=_blank>Загрузить оригинал (108 КБ)</a>
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
Выделение_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 писал(а):Это питон тебя дурит.
дожили... раньше юзверь юзвера дурили... теперь еще и ПО пытается его надурить... :hehehe:

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)" чего-нибудь матерное
в этом вашем питоне лишний пробел - уже матерное :idiot:

Re: Python в LinuxCnC

Добавлено: 10 окт 2014, 13:16
nkp
UAVpilot писал(а):Ну напиши там перед "o.set_centerpoint(x, y, z)" чего-нибудь матерное и убедись, что эта часть кода не исполняется...
написал - хоть и знал что конечно будет ошибка - синтаксическая прежде всего...
Выделение_014.png (3394 просмотра) <a class='original' href='./download/file.php?id=34736&mode=view' target=_blank>Загрузить оригинал (202.11 КБ)</a>
=============
эта функция срабатывает при загрузке 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() вообще не имеет к этому отношения. Везде сделал вот так:

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

self.xcenter = -10
self._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) - кажись нет...