| Панда как инструмент научной графики? | 
|  | 
| 
| math-beginer | Дата: Понедельник, 18.04.2011, 13:23 | Сообщение # 1 |  | Рядовой Группа: Пользователи Сообщений: 2 Награды: 0 Репутация: 0 Статус: Offline | Ищу инструмент обладающий следующими возможностями:  1. отображает трехмерные замкнутые поверхности, которые заданы численно (т.е. координаты вершин четырех-угольных и трех-угольных площадок храняться в обычном текстовом файле)
  2. позволяет построить сечение сцены (несколько трехмерных поверхностей)   3. позволяет статические картинки сохранять в файл   Подходит ли Панда? И нет ли примеров отображения поверхности, заданной как в п.1 (пример, в котором Панда идет по лесу я посмотрел :-)) ?   P.S. "Не движки", например http://code.enthought.com/projects/mayavi/docs/development/html/mayavi/mlab.html не устраивают тем, что в них в "базовые рисователи " расчитаны на функции z=f(x,y) которых у меня нет (у меня числа в файле, которые соответствуют маленьким площадкам) 
 
 Сообщение отредактировал math-beginer - Понедельник, 18.04.2011, 13:27 |  |  |  |  | 
| 
| dis_node | Дата: Понедельник, 18.04.2011, 21:18 | Сообщение # 2 |  | Лейтенант Группа: Пользователи Сообщений: 56 Награды: 0 Репутация: 2 Статус: Offline | В формате EGG модель хранится в виде списков полигонов (в текстовом виде), в разделе файлы есть описание формата, конвертер написать не сложно. Есть прямой доступ к вершинам, но встроенных аналитических функций я не видел.
 Срез визуально сделать можно (простое отсечение бесконечной плоскостью), но возможно сечется только перпендикулярно экрану.
 Вообще Панда не ориентирована на математическое моделирование.
 |  |  |  |  | 
| 
| ninth | Дата: Вторник, 19.04.2011, 00:51 | Сообщение # 3 |  |  Admin Группа: Администраторы Сообщений: 1582 Награды: 5 Репутация: 46 Статус: Offline | С сечениями думаю можно извернуться, зная математическую часть, но в общем могу лишь добавить к предыдущему посту, что в твоём случае самый простой вариант написать небольшой конвертер в какой-нить общераспространённый формат, например *.OBJ и дальше работать в специализированном софте - например CAD системах, которые по определению должны уметь делать сечения. Ну или в программе 3D моделирования многие из которых тоже это умеют. Если информация в твоём файле уже структурирована, т.е. есть инфа о том какие вершины каким полигонам ("площадкам") принадлежат, то написать конвертер не сильно сложно.
 |  |  |  |  | 
| 
| BlackCat | Дата: Вторник, 19.04.2011, 05:16 | Сообщение # 4 |  | Подполковник Группа: Проверенные Сообщений: 144 Награды: 0 Репутация: 1 Статус: Offline | Хм, а что, SolidWorks не подходит для твоих целей? 
 http://alphahole.do.am - версия 0.015 вышла 22.02.10
 |  |  |  |  | 
| 
| math-beginer | Дата: Вторник, 19.04.2011, 20:07 | Сообщение # 5 |  | Рядовой Группа: Пользователи Сообщений: 2 Награды: 0 Репутация: 0 Статус: Offline | Quote (BlackCat) Хм, а что, SolidWorks не подходит для твоих целей?  мне бы свободный софт и под линукс Добавлено (19.04.2011, 20:07)---------------------------------------------
 
 Quote (ninth) например *.OBJ А вы не могли бы дать ссылочку на подробное описание формата.   достаточно ли просто поставить v перед моими вершинами, т. е . так :    Code  v -0.0191470260 0.0002018149 0.9398515351
 v 0.1722740070 0.0639799463 0.9416690758
 v 0.1594417556 0.0938763691 0.9407592382
 v -0.0191470260 0.0002018149 0.9398515351
 
 v -0.0191470260 0.0002018149 0.9398515351
 v 0.1594417556 0.0938763691 0.9407592382
 v 0.1433816565 0.1227894883 0.9434250944
 v -0.0191470260 0.0002018149 0.9398515351
 
 ...
 
 здесь первые четыре строчки координаты углов (вершин) первой площадки (сегмента), далее следующие четыре строчки описывают вторую плошадку, и так далее |  |  |  |  | 
| 
| dis_node | Дата: Вторник, 19.04.2011, 20:42 | Сообщение # 6 |  | Лейтенант Группа: Пользователи Сообщений: 56 Награды: 0 Репутация: 2 Статус: Offline | http://panda3d.org.ru/load/egg_spravka_v_chm/3-1-0-26 Недостаточно, придется компоновать данные по другому. Не теряй время, скриптуй в спецсофте. Видел кстати бесплатный CAD на Питоне (если это рулит), гугл те в помощь ).
 |  |  |  |  | 
| 
| BlackCat | Дата: Среда, 20.04.2011, 05:39 | Сообщение # 7 |  | Подполковник Группа: Проверенные Сообщений: 144 Награды: 0 Репутация: 1 Статус: Offline | Quote (math-beginer) мне бы свободный софт и под линуксА в сторону VRML не смотрели? Там всё описывается примитивами. По идее может подойти.
 http://ru.wikipedia.org/wiki/VRML
 http://ru.wikipedia.org/wiki/X3D
 http://ru.wikipedia.org/wiki/WebGL
 http://ru.wikipedia.org/wiki/3DMLW
 
 http://alphahole.do.am - версия 0.015 вышла 22.02.10
 |  |  |  |  | 
| 
| ninth | Дата: Четверг, 21.04.2011, 01:43 | Сообщение # 8 |  |  Admin Группа: Администраторы Сообщений: 1582 Награды: 5 Репутация: 46 Статус: Offline | BlackCat, я думаю тут не важно через какой формат obj или vrml - кому что удобнее ) dis_node, хм, подкинь инфу по CAD на питоне )) Я когда-то искал но не нашёл ничего подходящего - самое близкое это фреймворк, ориентированный на CAD.
  math-beginer, если под линукс, то пока самая вменяемая альтернатива - Blender - сечения можно построить с помощю булевых операций, ну а по части визуализации вопросов возникнуть не должно. По формату - в obj немного другое строение - отдельно описываются вершины, отдельно - связи между вершинами. Т.е. нужно прочитать все вершины в список. Сделать ещё один список, удалить из него дубли вершин, проиндексировать и на основе этих двух построить связи. В коде выглядеть будет проще чем описал ) Строк 20 потребуется.
 Вопрос только с твоим форматом: насколько я понимаю, у тебя просто список координат, отделяются они пробелом, тройки и четвёрки вершин отделяются пустой строкой? Неплохо было бы кинуть сюда пример файла.
 |  |  |  |  | 
| 
| ninth | Дата: Четверг, 21.04.2011, 02:22 | Сообщение # 9 |  |  Admin Группа: Администраторы Сообщений: 1582 Награды: 5 Репутация: 46 Статус: Offline | Если моё предположение верно, то у меня получилась такая штука из того что ты привёл как пример, толькоя убирал 'v ' 
    Листинг полученного OBJ: 
 Code v 0.1594417556 0.0938763691 0.9407592382 v 0.1722740070 0.0639799463 0.9416690758
 v -0.0191470260 0.0002018149 0.9398515351
 v 0.1433816565 0.1227894883 0.9434250944
 
 f 1 2 3 1
 f 1 3 4 1
Один момент - в фэйсах у тебя первая и последняя вершина совпадают - это излишне, поэтому для нормального отображения поверхности я удалял лишние ссылки на вершины перед импортом в блендер, т.е. получал
 В конвертере я это удаление не предусматривал т.к. не знаю фишка это твоего формата или баг приведённой геометрии )
  Код конвертера (питон, естесно): 
 Code lines = open('testvert.txt', 'r').readlines() vtx = {}
 idx = 1
 for line in lines:
 if line != '\n':
 x, y, z = line.split(' ')
 if not (x, y, z) in vtx.keys():
 vtx[(x, y, z)] = idx
 idx += 1
 fcs,fc = [], []
 for line in lines:
 if line == '\n':
 fcs.append(fc)
 fc = []
 else:
 x, y, z = line.split(' ')
 fc.append(str(vtx[(x, y, z)]))
 f = open('out.obj', 'w')
 for v in vtx:
 f.write('v ' + ' '.join(v))
 f.write('\n')
 for fc in fcs:
 f.write('f ' + ' '.join(fc) + '\n')
 f.close()
 |  |  |  |  |