Pmaaaax

Random select with maxscript

Jan 27th, 2025
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. -- Функция для создания плоскости и выделения полигонов
  2. fn createPlaneAndSelectFaces lengthsegs widthsegs planeSize densityCurve =
  3. (
  4. -- Создаем плоскость
  5. planeObj = Plane lengthsegs:lengthsegs widthsegs:widthsegs width:planeSize length:planeSize
  6. convertTo planeObj Editable_Poly
  7.  
  8. -- Получаем количество полигонов
  9. numFaces = polyop.getNumFaces planeObj
  10.  
  11. -- Очищаем текущее выделение
  12. polyop.setFaceSelection planeObj #{}
  13.  
  14. -- Функция для случайного выделения полигонов с уменьшением плотности
  15. fn randomSelectFacesWithDensity obj numFaces planeSize densityCurve =
  16. (
  17. -- Создаем пустой набор для выделения
  18. faceSelection = #{}
  19.  
  20. for i = 1 to numFaces do
  21. (
  22. -- Получаем координаты центра полигона
  23. faceCenter = polyop.getFaceCenter obj i
  24. -- Нормализуем Y-координату (от 0 до 1)
  25. normalizedY = (faceCenter.y + (planeSize / 2.0)) / planeSize
  26.  
  27. -- Вероятность выделения уменьшается с увеличением Y
  28. probability = 1.0 - (normalizedY ^ densityCurve)
  29.  
  30. -- Случайное число от 0 до 1
  31. randVal = random 0.0 1.0
  32.  
  33. -- Если случайное число меньше вероятности, добавляем полигон в выделение
  34. if randVal < probability then
  35. (
  36. faceSelection[i] = true
  37. )
  38. )
  39.  
  40. -- Применяем выделение к объекту
  41. polyop.setFaceSelection obj faceSelection
  42. )
  43.  
  44. -- Вызываем функцию для выделения полигонов
  45. randomSelectFacesWithDensity planeObj numFaces planeSize densityCurve
  46.  
  47. -- Обновляем вид
  48. max tool zoomextents all
  49. )
  50.  
  51. -- Создаем пользовательский интерфейс
  52. rollout PlaneSelectorRollout "Plane Polygon Selector"
  53. (
  54. -- Элементы управления
  55. spinner spnLengthSegs "Length Segments:" range:[1, 200, 60] type:#integer
  56. spinner spnWidthSegs "Width Segments:" range:[1, 200, 120] type:#integer
  57. spinner spnPlaneSize "Plane Size:" range:[10, 1000, 100] type:#float
  58. spinner spnDensityCurve "Density Curve:" range:[0.1, 10.0, 1.0] type:#float
  59. button btnCreate "Create Plane and Select Faces"
  60.  
  61.  
  62. -- Обработчик нажатия кнопки
  63. on btnCreate pressed do
  64. (
  65. -- Получаем значения из интерфейса
  66. lengthsegs = spnLengthSegs.value
  67. widthsegs = spnWidthSegs.value
  68. planeSize = spnPlaneSize.value
  69. densityCurve = spnDensityCurve.value
  70.  
  71. -- Вызываем функцию для создания плоскости и выделения полигонов
  72. createPlaneAndSelectFaces lengthsegs widthsegs planeSize densityCurve
  73. )
  74. )
  75.  
  76. -- Создаем диалоговое окно
  77. createDialog PlaneSelectorRollout width:300
Advertisement
Add Comment
Please, Sign In to add comment