как расставить объекты в точках сплайна по списку

Автор
Сообщение
На сайте c 13.07.2018
Сообщений: 4

Доброе утро всем, столкнулся с такой вот задачей

Есть список объектов()

1 Box 

2 Cylinder 

3 Sphere

4 Tiapot

5 Torus

В списке у них сортировка по имени.

Есть сплайн с последовательностью вертексов 1, 2, 3, 4, 5 (в списке он занимает верхнюю строку)

Собственно вопрос- каким образом можно автоматизировать расстановку объектов по списку в каждую точку сплайна таким образом чтобы точке 1 соответствовал объект 1 в списке, точке 2 соответствовал объект 2 в списке, ну и так далее. Точки сплайна не лежат в одной плоскости, привязка объектов к точкам в идеале относительно  Pivot point

Можно и ручками, но я не верю в то что нет такого скрипта, или инструмента который позволял бы делать это автоматически. 

Заранее спасибо обратившим внимание

На сайте c 03.03.2017
Сообщений: 124
Россия, г.Самара
Перепишите координаты нужных точек вашего сплайна, а затем скопируйте эти координаты для каждого объекта и сохраните результаты.
На сайте c 06.05.2014
Сообщений: 3031
Краснодар
Если вы опишите более подробную задачу на реальном примере а не на схематичной используя инструменты которые не предназначены для таких целей как расстановка объектам к номерам вершин сплайна, существует море способов и без скриптов расставить объекты, например различные скатеры в которых есть и привязка к пути
На сайте c 15.01.2011
Сообщений: 299

можно через MCG сделать.

https://forums.autodesk.com/t5/3ds-max-modeling/spacing-tool-for-multiple-objects/td-p/6420033 

Можно через RailClone (Тут вообще это запросто делается)

Еще такой вариант. Уже чисто максовский

На Сплайн вешаешь модификатор

Spline IK Control. В нем жмешь кнопку Create Helpers - Это создаст во всех вершинах сплайна пустышки с именами Point001, Point002... .

Пустышки можно заменить на модельки. Выделяешь все модельки (Сортировка будет по алфавиту), которые нужно расставить, и запускаешь такой скрипт:

meshes = selection as array

count = meshes.count

fn sortirovka m1 m2 = stricmp m1.name m2.name

qSort meshes sortirovka

i = 0

for m in $Point* do

(

if (i<count) then i else i=0

i=i+1

onemesh  = instance meshes[i]

onemesh.transform = m.transform

)

delete $Point* --Чтобы сразу удалить пустышки

Такой еще вариант. Просто выделить сразу и сплайн(ы) и меши. И запустить скрипт.

objekts= selection as array

meshes=#()

splines=#()

splCoord=#()

for obj in objekts do

(if superClassOf obj == shape

then append splines obj

else append meshes obj )

for h=1 to splines.count do (

maxOps.cloneNodes splines[h] cloneType:#copy newNodes:&newSpline

convertTo newSpline SplineShape

for j = 1 to (numsplines newSpline[1]) do(

for k = 1 to (numknots newSpline[1] j) do (

knotCoord = getKnotPoint newSpline[1] j k

append splCoord knotCoord ))

delete newSpline[1] )

count = meshes.count

fn sortirovka mesh1 mesh2 = stricmp mesh1.name mesh2.name

qSort meshes sortirovka

i = 0

for m in splCoord do (

if (i<count) then i else i=0

i=i+1

onemesh = instance meshes[i]

onemesh.pos = m )

Скрипт тут

https://yadi.sk/d/0N9rVM453ZQMot  

На сайте c 28.08.2017
Сообщений: 1
Милан
Al3XXX, Спасибо, просто шикарный второй скрипт!
На сайте c 24.05.2010
Сообщений: 1160
Москва
В форест паке можно сделать, вообще без каких-либо танцев:

Читают эту тему: