Vismach
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Vismach
Понял.
Меня тоже интересует визуализация процесса обработки с использованием OpenGL.
Хочется найти оптимальный вариант средства для реализации, чтобы любой мог настроить под свои представления о дизайне.
Но пока дальше С++ не двинулся. Использую движки от игр. Но это далеко от простого пользователя.
Меня тоже интересует визуализация процесса обработки с использованием OpenGL.
Хочется найти оптимальный вариант средства для реализации, чтобы любой мог настроить под свои представления о дизайне.
Но пока дальше С++ не двинулся. Использую движки от игр. Но это далеко от простого пользователя.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Vismach
А как делают визуализацию различные пакеты? Я имею в виду не только токарку, но и фрезеровку.
Есть какая-то информация как рассчитывается геометрия обработки? Большим булем?
Есть какая-то информация как рассчитывается геометрия обработки? Большим булем?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
широкого инструментария все равно пользователю не дашь - ну там цвета изменять и маштаб - больше ничего не получиться...Impartial писал(а):и, чтобы любой мог настроить под свои представления о дизайне.
цвета "родные" в Axis (в gremlin) и так можно изменять (где то мы обсуждали это)
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
некоторые говорят - Opengl не поддерживает напрямую булевы операцииNick писал(а):А как делают визуализацию различные пакеты?
3dmax наверно на чем то другом работает...
все это проштудировать нужно...
ps вот этопосмотреть нужно
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Vismach
Лучший способ - отдать расчет векторному процессору видеосистемы. Для этого задается каркас из треугольников, правила перемещения и рендеринга.Nick писал(а):Есть какая-то информация как рассчитывается геометрия обработки? Большим булем?
В OpenGL это стандартизировано.
А если дать возможность пользователю самому рисовать объекты, как это делается при создании игровых сценариев. Там ведь не программисты это делают а дизайнеры. А системой, аналогичной игровому движку, это все проигрывать. Станок из чертежей перевести в каркас не большая проблема.nkp писал(а):широкого инструментария все равно пользователю не дашь - ну там цвета изменять и маштаб - больше ничего не получиться...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
из соседней темы :
начал с вкл-выкл в меню этого конуса
.menu.view add checkbutton \
-variable show_tool \
-command toggle_show_tool
setup_menu_accel .menu.view end [_ "Show too_l"]
идем в axis.py:
def toggle_show_tool(*event):
ap.putpref("show_tool", vars.show_tool.get())
o.tkRedraw()
и сразу тупик:
команда вызывает две функции:
ap.putpref("show_tool", vars.show_tool.get()) - запоминает настройки для повторного запуска
o.tkRedraw() - присутствует в каждой команде меню касательно графики: можно еще подсказку??
попытался тоже поискать :Starik писал(а):В гремлине рисовать довольно легко , поищи как они конус инструмента рисуют.
начал с вкл-выкл в меню этого конуса
.menu.view add checkbutton \
-variable show_tool \
-command toggle_show_tool
setup_menu_accel .menu.view end [_ "Show too_l"]
идем в axis.py:
def toggle_show_tool(*event):
ap.putpref("show_tool", vars.show_tool.get())
o.tkRedraw()
и сразу тупик:
команда вызывает две функции:
ap.putpref("show_tool", vars.show_tool.get()) - запоминает настройки для повторного запуска
o.tkRedraw() - присутствует в каждой команде меню касательно графики: можно еще подсказку??
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Vismach
У blender есть свой движок, чтобы игры делать, можно его использоватьImpartial писал(а):А если дать возможность пользователю самому рисовать объекты, как это делается при создании игровых сценариев. Там ведь не программисты это делают а дизайнеры. А системой, аналогичной игровому движку, это все проигрывать. Станок из чертежей перевести в каркас не большая проблема.
Так OpenGL вроде как и не должен это делать. Буль - не такая простая операция - частенько после него возникают глюки в геометрии. А нам тут еще и анимировать надо, чтобы можно было отследить процесс обработки... в общем хитрая штуковина получается... даже не знаю, с какого места ее решать...nkp писал(а):некоторые говорят - Opengl не поддерживает напрямую булевы операции
3dmax наверно на чем то другом работает...
а кто такой это ap?ap.putpref("show_tool", vars.show_tool.get()) - запоминает настройки для повторного запуска
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
ap = AxisPreferences()Nick писал(а):а кто такой это ap?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
ага - вроде бы нашел...
/lib/python/rs274/glcanon.py
кстати - вот они изменения в axis для foam
все это действительно находится в def redraw(self):[/i]
и она проверяя состояние пользовательских настроек отрисовывает gremlin
/lib/python/rs274/glcanon.py
Код: Выделить всё
if self.get_show_tool():
pos = self.lp.last(self.get_show_live_plot())
if pos is None: pos = [0] * 6
rx, ry, rz = pos[3:6]
pos = self.to_internal_units(pos[:3])
if self.is_foam():
glEnable(GL_COLOR_MATERIAL)
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
glPushMatrix()
glTranslatef(pos[0], pos[1], self.get_foam_z())
glRotatef(180, 1, 0, 0)
cone = self.dlist("cone", gen=self.make_cone)
glColor3f(*self.colors['cone_xy'])
glCallList(cone)
glPopMatrix()
u = self.to_internal_linear_unit(rx)
v = self.to_internal_linear_unit(ry)
glPushMatrix()
glTranslatef(u, v, self.get_foam_w())
glColor3f(*self.colors['cone_uv'])
glCallList(cone)
glPopMatrix()
else:
glPushMatrix()
glTranslatef(*pos)
sign = 1
for ch in self.get_geometry():
if ch == '-':
sign = -1
elif ch == 'A':
glRotatef(rx*sign, 1, 0, 0)
sign = 1
elif ch == 'B':
glRotatef(ry*sign, 0, 1, 0)
sign = 1
elif ch == 'C':
glRotatef(rz*sign, 0, 0, 1)
sign = 1
glEnable(GL_BLEND)
glEnable(GL_CULL_FACE)
glBlendFunc(GL_ONE, GL_CONSTANT_ALPHA)
current_tool = self.get_current_tool()
if current_tool is None or current_tool.diameter == 0:
if self.canon:
g = self.canon
x,y,z = 0,1,2
cone_scale = max(g.max_extents[x] - g.min_extents[x],
g.max_extents[y] - g.min_extents[y],
g.max_extents[z] - g.min_extents[z],
2 ) * .5
else:
cone_scale = 1
if self.is_lathe():
glRotatef(90, 0, 1, 0)
cone = self.dlist("cone", gen=self.make_cone)
glScalef(cone_scale, cone_scale, cone_scale)
glColor3f(*self.colors['cone'])
glCallList(cone)
else:
if current_tool != self.cached_tool:
self.cache_tool(current_tool)
glColor3f(*self.colors['cone'])
glCallList(self.dlist('tool'))
glPopMatrix()
glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
ypos = self.winfo_height()
glOrtho(0.0, self.winfo_width(), 0.0, ypos, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glPushMatrix()
glLoadIdentity()
limit, homed, posstrs, droposstrs = self.posstrs()
charwidth, linespace, base = self.get_font_info()
maxlen = max([len(p) for p in posstrs])
pixel_width = charwidth * max(len(p) for p in posstrs)
glDepthFunc(GL_ALWAYS)
glDepthMask(GL_FALSE)
glEnable(GL_BLEND)
glBlendFunc(GL_ONE, GL_CONSTANT_ALPHA)
glColor3f(*self.colors['overlay_background'])
glBlendColor(0,0,0,1-self.colors['overlay_alpha'])
glBegin(GL_QUADS)
glVertex3f(0, ypos, 1)
glVertex3f(0, ypos - 8 - linespace*len(posstrs), 1)
glVertex3f(pixel_width+42, ypos - 8 - linespace*len(posstrs), 1)
glVertex3f(pixel_width+42, ypos, 1)
glEnd()
glDisable(GL_BLEND)
maxlen = 0
ypos -= linespace+5
i=0
glColor3f(*self.colors['overlay_foreground'])
if not self.get_show_offsets():
for string in posstrs:
maxlen = max(maxlen, len(string))
glRasterPos2i(5, ypos)
for char in string:
glCallList(base + ord(char))
if i < len(homed) and homed[i]:
glRasterPos2i(pixel_width + 8, ypos)
glBitmap(13, 16, 0, 3, 17, 0, homeicon)
if i < len(homed) and limit[i]:
glBitmap(13, 16, 0, 1, 17, 0, limiticon)
ypos -= linespace
i = i + 1
if self.get_show_offsets():
if self.is_lathe():
homed.insert(0,homed[0])
i=0
for string in droposstrs:
maxlen = max(maxlen, len(string))
glRasterPos2i(5, ypos)
for char in string:
glCallList(base + ord(char))
if i < len(homed) and homed[i]:
glRasterPos2i(charwidth *3, ypos)
glBitmap(13, 16, 0, 3, 17, 0, homeicon)
ypos -= linespace
i = i + 1
glDepthFunc(GL_LESS)
glDepthMask(GL_TRUE)
glPopMatrix()
glMatrixMode(GL_PROJECTION)
glPopMatrix()
glMatrixMode(GL_MODELVIEW)
все это действительно находится в def redraw(self):[/i]
и она проверяя состояние пользовательских настроек отрисовывает gremlin
Последний раз редактировалось nkp 04 июл 2013, 13:38, всего редактировалось 3 раза.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Vismach
На что стандарт?Impartial писал(а):А этот интерпритатор имеет какой то стандарт?
Интерпретатор Tcl просто очень удобно построен - он весь выполнен в виде одной библиотеки размером 1.2MB, а сам бинарник - 7kB, в нём только разбор командной строки. Причём сюда входит довольно обширный набор средств, в том числе и работа с сетью и т.д. Tk - это ещё одна библиотека размером 1.3MB и там внутри довольно приличный набор виджетов и прочего для построения интерфейса.
Вот поэтому всякие питоны, перлы и т.п. пользуют его, а не изобретают своё. Ну и для встроенных применений Tcl/Tk самое оно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Vismach
Если я возьму этот скрипт и попытаюсь его запустить в квартусе, запустится? Или под анроидом?UAVpilot писал(а):На что стандарт?
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Vismach
Запустится. Я на Tcl/Tk пишу много прог, которые без изменений работают и в Linux и в винде и на маках.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
думаю разобрать для начала отрисовку осей:
здесь рисуется линия по двум точкам:
glVertex3f(1.0,0.0,0.0)
glVertex3f(0.0,0.0,0.0)
причем это обернуто в :
glBegin(GL_LINES)
glVertex3f(1.0,0.0,0.0)
glVertex3f(0.0,0.0,0.0)
glEnd()
ну с цветом ясно:
glColor3f(*self.colors['axis_x'])(можно его прямо задавать)
вот этот код рисует букву (X,Y,или Z):
Код: Выделить всё
def draw_axes(self, n, letters="XYZ"):
glNewList(n, GL_COMPILE)
x,y,z,p = 0,1,2,3
s = self.stat
view = self.get_view()
glColor3f(*self.colors['axis_x'])
glBegin(GL_LINES)
glVertex3f(1.0,0.0,0.0)
glVertex3f(0.0,0.0,0.0)
glEnd()
if view != x:
glPushMatrix()
if self.is_lathe():
glTranslatef(1.3, -0.1, 0)
glTranslatef(0, 0, -0.1)
glRotatef(-90, 0, 1, 0)
glRotatef(90, 1, 0, 0)
glTranslatef(0.1, 0, 0)
else:
glTranslatef(1.2, -0.1, 0)
if view == y:
glTranslatef(0, 0, -0.1)
glRotatef(90, 1, 0, 0)
glScalef(0.2, 0.2, 0.2)
self.hershey.plot_string(letters[0], 0.5)
glPopMatrix()
glColor3f(*self.colors['axis_y'])
glBegin(GL_LINES)
glVertex3f(0.0,0.0,0.0)
glVertex3f(0.0,1.0,0.0)
glEnd()
glVertex3f(1.0,0.0,0.0)
glVertex3f(0.0,0.0,0.0)
причем это обернуто в :
glBegin(GL_LINES)
glVertex3f(1.0,0.0,0.0)
glVertex3f(0.0,0.0,0.0)
glEnd()
ну с цветом ясно:
glColor3f(*self.colors['axis_x'])(можно его прямо задавать)
вот этот код рисует букву (X,Y,или Z):
Код: Выделить всё
if view != y:
glPushMatrix()
glTranslatef(0, 1.2, 0)
if view == x:
glTranslatef(0, 0, -0.1)
glRotatef(90, 0, 1, 0)
glRotatef(90, 0, 0, 1)
glScalef(0.2, 0.2, 0.2)
self.hershey.plot_string(letters[1], 0.5)
glPopMatrix()
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
вот в таком виде функция рисует толькотри линии:
вот такой код рисует квадрат:
Код: Выделить всё
def draw_axes(self, n, letters="XYZ"):
glNewList(n, GL_COMPILE)
x,y,z,p = 0,1,2,3
s = self.stat
view = self.get_view()
glColor3f(*self.colors['axis_x'])
glBegin(GL_LINES)
glVertex3f(0.0,0.0,0.0)
glVertex3f(0.0,1.0,0.0)
glEnd()
glColor3f(*self.colors['axis_y'])
glBegin(GL_LINES)
glVertex3f(1.0,0.0,0.0)
glVertex3f(0.0,0.0,0.0)
glEnd()
glColor3f(*self.colors['axis_z'])
glBegin(GL_LINES)
glVertex3f(0.0,0.0,0.0)
glVertex3f(0.0,0.0,1.0)
glEnd()
glEndList()
Код: Выделить всё
def draw_axes(self, n, letters="XYZ"):
glNewList(n, GL_COMPILE)
x,y,z,p = 0,1,2,3
s = self.stat
view = self.get_view()
glColor3f(*self.colors['axis_x'])
glBegin(GL_LINES)
glVertex3f(0.0,0.0,0.0)
glVertex3f(0.0,2.0,0.0)
glEnd()
glColor3f(*self.colors['axis_x'])
glBegin(GL_LINES)
glVertex3f(0.0,2.0,0.0)
glVertex3f(0.0,2.0,2.0)
glEnd()
glColor3f(*self.colors['axis_x'])
glBegin(GL_LINES)
glVertex3f(0.0,2.0,2.0)
glVertex3f(0.0,0.0,2.0)
glEnd()
glColor3f(*self.colors['axis_x'])
glBegin(GL_LINES)
glVertex3f(0.0,0.0,2.0)
glVertex3f(0.0,0.0,0.0)
glEnd()
glEndList()
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Vismach
А прозрачность можно настроить?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
прозрачность задается рядом с цветом:Nick писал(а):А прозрачность можно настроить?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
"привязка" vismach к выполнению жкода
https://www.youtube.com/watch?v=h5qvN5K2az0
https://www.youtube.com/watch?v=h5qvN5K2az0
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Vismach
Круто! А в 3D можно это показывать?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
так это же и есть 3d)
просто подключить непрерывный поворот сцены (медленно) и эффект будет виден...
просто подключить непрерывный поворот сцены (медленно) и эффект будет виден...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Vismach
но только сразу хочу написать про "обман" :
это не чисто в Axis,это просто поверх растянул окошко Vismach ))
но буду "вставлять" это в "родной" gremlin...
это не чисто в Axis,это просто поверх растянул окошко Vismach ))
но буду "вставлять" это в "родной" gremlin...