Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Функция для создания плоскости и выделения полигонов
- fn createPlaneAndSelectFaces lengthsegs widthsegs planeSize densityCurve =
- (
- -- Создаем плоскость
- planeObj = Plane lengthsegs:lengthsegs widthsegs:widthsegs width:planeSize length:planeSize
- convertTo planeObj Editable_Poly
- -- Получаем количество полигонов
- numFaces = polyop.getNumFaces planeObj
- -- Очищаем текущее выделение
- polyop.setFaceSelection planeObj #{}
- -- Функция для случайного выделения полигонов с уменьшением плотности
- fn randomSelectFacesWithDensity obj numFaces planeSize densityCurve =
- (
- -- Создаем пустой набор для выделения
- faceSelection = #{}
- for i = 1 to numFaces do
- (
- -- Получаем координаты центра полигона
- faceCenter = polyop.getFaceCenter obj i
- -- Нормализуем Y-координату (от 0 до 1)
- normalizedY = (faceCenter.y + (planeSize / 2.0)) / planeSize
- -- Вероятность выделения уменьшается с увеличением Y
- probability = 1.0 - (normalizedY ^ densityCurve)
- -- Случайное число от 0 до 1
- randVal = random 0.0 1.0
- -- Если случайное число меньше вероятности, добавляем полигон в выделение
- if randVal < probability then
- (
- faceSelection[i] = true
- )
- )
- -- Применяем выделение к объекту
- polyop.setFaceSelection obj faceSelection
- )
- -- Вызываем функцию для выделения полигонов
- randomSelectFacesWithDensity planeObj numFaces planeSize densityCurve
- -- Обновляем вид
- max tool zoomextents all
- )
- -- Создаем пользовательский интерфейс
- rollout PlaneSelectorRollout "Plane Polygon Selector"
- (
- -- Элементы управления
- spinner spnLengthSegs "Length Segments:" range:[1, 200, 60] type:#integer
- spinner spnWidthSegs "Width Segments:" range:[1, 200, 120] type:#integer
- spinner spnPlaneSize "Plane Size:" range:[10, 1000, 100] type:#float
- spinner spnDensityCurve "Density Curve:" range:[0.1, 10.0, 1.0] type:#float
- button btnCreate "Create Plane and Select Faces"
- -- Обработчик нажатия кнопки
- on btnCreate pressed do
- (
- -- Получаем значения из интерфейса
- lengthsegs = spnLengthSegs.value
- widthsegs = spnWidthSegs.value
- planeSize = spnPlaneSize.value
- densityCurve = spnDensityCurve.value
- -- Вызываем функцию для создания плоскости и выделения полигонов
- createPlaneAndSelectFaces lengthsegs widthsegs planeSize densityCurve
- )
- )
- -- Создаем диалоговое окно
- createDialog PlaneSelectorRollout width:300
Advertisement
Add Comment
Please, Sign In to add comment