Pmaaaax

Spline from points

Jun 10th, 2025
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. fn createSplineFromVerticesByDistance = (
  2. -- Проверяем, есть ли выделенные вершины
  3. if selection.count == 0 or classOf selection[1] != Editable_Poly then (
  4. messageBox "Пожалуйста, выделите Editable Poly объект с выделенными вершинами."
  5. return false
  6. )
  7.  
  8. obj = selection[1]
  9. vertSelection = polyOp.getVertSelection obj as array
  10.  
  11. if vertSelection.count < 2 then (
  12. messageBox "Необходимо выделить как минимум 2 вершины."
  13. return false
  14. )
  15.  
  16. -- Получаем позиции вершин
  17. vertPositions = for v in vertSelection collect (polyOp.getVert obj v)
  18.  
  19.  
  20.  
  21. -- Сортируем вершины по расстоянию (алгоритм ближайшего соседа)
  22. sortedVertices = #(vertPositions[1])
  23. deleteItem vertPositions 1
  24. remainingVerts = vertPositions
  25.  
  26.  
  27. while remainingVerts.count > 0 do (
  28. lastVert = sortedVertices[sortedVertices.count]
  29. closestDist = 1e9
  30. closestIndex = 0
  31.  
  32. -- Находим ближайшую вершину к последней в отсортированном списке
  33. for i = 1 to remainingVerts.count do (
  34. dist = distance lastVert remainingVerts[i]
  35. if dist < closestDist then (
  36. closestDist = dist
  37. closestIndex = i
  38. )
  39. )
  40.  
  41. -- Добавляем ближайшую вершину в список и удаляем из оставшихся
  42. append sortedVertices remainingVerts[closestIndex]
  43. deleteItem remainingVerts closestIndex
  44. )
  45.  
  46. -- Создаем новый сплайн
  47. newSpline = splineShape()
  48. newSpline.name = uniqueName (obj.name + "_Spline")
  49.  
  50. -- Добавляем вершины в сплайн
  51. addNewSpline newSpline
  52. for pos in sortedVertices do (
  53. addKnot newSpline 1 #corner #line pos
  54. )
  55.  
  56. -- Обновляем сплайн
  57. updateShape newSpline
  58.  
  59. -- Возвращаем созданный сплайн
  60. select newSpline
  61. newSpline
  62. )
  63.  
  64.  
  65. createSplineFromVerticesByDistance()
Tags: MaxScript
Advertisement
Add Comment
Please, Sign In to add comment