Пожелания:

  1. исходные файлы деталей: функция на языке программирования вида box(10,20,40), т.е. "параметрические детали" либо .stl файл (он же .3ds и т.п. - это неважно, хоть .123th) - уже кем-то подготовленный файл.
  2. сборка включает в себя другие сборки, внешние меши и параметрические детали
  3. файл групп для придания движения и т.п. операций
  4. возможность легко изменить что-то у станка, к примеру его размеры (т.е. должны поменяться базовые деталей, например - длины швеллеров)
  5. результирующий файл должен получиться в кросс-программном формате (я вижу .ply/.stl как самый удачный)

Мне кажется, что надо делить на 3 таблицы

  1. geom: в первой колонке - id
  2. scene: в первой колонке id, во второй geom.id, далее положение (xyz, 2 поворота) и цвет При этом масштабирование в scene НЕ ДЕЛАТЬ, для этого ДРУГУЮ деталь добавлять в geom, ибо в итоговой смете будет иначе ошибка!!
  3. game: в первой колонке id группы, во второй - диапазон из scene.id
geom:
id      func
shv01   shveller(50,120,5,2000)
bea01   bearing(20,40,15)
box01   box(120,250,65)
cyl01   cylinder(10,400) 
table01 convert('123th',file(table.123th))

scene:
id            geomid      x      y      z      rotx       roty     rotz
table         table01     -300  -300   -800    0          0        0
left_frame01  box01       0      0      0      -90        0        0
left_frame02  box01       0      0      65     -90        0        0
right_frame01 box01       300    0      0      -90        0        0
right_frame01 box01       300    0      65     -90        0        0
shampur01     cyl01       350    50     70.5   -90        0        -90
shampur02     cyl01       350    150    70.5   -90        0        -90
shampur03     cyl01       350    200    70.5   -90        0        -90
shampur04     cyl01       350    230    70.5   -90        0        -90


groups:
id            sceneid
rot1          shampur01
rot2          shampur02
rot3          shampur03
rot3          shampur04

OFF file format

Example OFF file from there:

OFF
#
#  cube.off
#  A cube.
#  There is extra RGBA color information specified for the faces.
#
8 6 12                               # 8 points, 6 faces, 12 edges
  1.632993   0.000000   1.154701     # X Y Z 
  0.000000   1.632993   1.154701
 -1.632993   0.000000   1.154701
  0.000000  -1.632993   1.154701
  1.632993   0.000000  -1.154701
  0.000000   1.632993  -1.154701
 -1.632993   0.000000  -1.154701
  0.000000  -1.632993  -1.154701
  4  0 1 2 3  1.000 0.000 0.000 0.75 # 4 points NN 0,1,2,3, RGBA color = RED, 75% opacity
  4  7 4 0 3  0.300 0.400 0.000 0.75
  4  4 5 1 0  0.200 0.500 0.100 0.75
  4  5 6 2 1  0.100 0.600 0.200 0.75
  4  3 2 6 7  0.000 0.700 0.300 0.75
  4  6 5 4 7  0.000 1.000 0.000 0.75

Off files: abstr.off; br2.off; cam.off; cone.off; cube.off, a cube; dodec.off, a dodecahedron; dodec2.off, another dodecahedron; facecube.off, a cube with face colors; hdodec.off; hypercube.4d.off, a hypercube in four dimenensions; icosa.off, an icosahedron; mctet.off, a tetrahedral mesh generated by MC; mctri.off, a triangular mesh generated by MC; mushroom.off; octa.off, an octahedron; tetra.off, a tetrahedron; trapezoid.4d.off, a trapezoid in 4D; tref.off; unitcube.off, the unit cube; vertcube.off, a cube with vertex colors;

После этого в game engine назначаем вращение на rot1,rot2,rot3 - получается что два шапура и пара для толстого мяса.

Альтернативный подход

Делать только XYZ файла (отличная страничка). Формат простейший, через него делать марширующие кубы или Meshlab:

X Y Z