Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn createSplineFromVerticesByDistance = (
- -- Проверяем, есть ли выделенные вершины
- if selection.count == 0 or classOf selection[1] != Editable_Poly then (
- messageBox "Пожалуйста, выделите Editable Poly объект с выделенными вершинами."
- return false
- )
- obj = selection[1]
- vertSelection = polyOp.getVertSelection obj as array
- if vertSelection.count < 2 then (
- messageBox "Необходимо выделить как минимум 2 вершины."
- return false
- )
- -- Получаем позиции вершин
- vertPositions = for v in vertSelection collect (polyOp.getVert obj v)
- -- Сортируем вершины по расстоянию (алгоритм ближайшего соседа)
- sortedVertices = #(vertPositions[1])
- deleteItem vertPositions 1
- remainingVerts = vertPositions
- while remainingVerts.count > 0 do (
- lastVert = sortedVertices[sortedVertices.count]
- closestDist = 1e9
- closestIndex = 0
- -- Находим ближайшую вершину к последней в отсортированном списке
- for i = 1 to remainingVerts.count do (
- dist = distance lastVert remainingVerts[i]
- if dist < closestDist then (
- closestDist = dist
- closestIndex = i
- )
- )
- -- Добавляем ближайшую вершину в список и удаляем из оставшихся
- append sortedVertices remainingVerts[closestIndex]
- deleteItem remainingVerts closestIndex
- )
- -- Создаем новый сплайн
- newSpline = splineShape()
- newSpline.name = uniqueName (obj.name + "_Spline")
- -- Добавляем вершины в сплайн
- addNewSpline newSpline
- for pos in sortedVertices do (
- addKnot newSpline 1 #corner #line pos
- )
- -- Обновляем сплайн
- updateShape newSpline
- -- Возвращаем созданный сплайн
- select newSpline
- newSpline
- )
- createSplineFromVerticesByDistance()
Advertisement
Add Comment
Please, Sign In to add comment