1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Нужен скрипт или содействие в его создании

Тема в разделе "MAXScript", создана пользователем $[]uL aka2man, 29 май 2013.

Модераторы: Savin Denis
  1. $[]uL aka2man

    $[]uL aka2man Пользователь сайта

    С нами с:
    31.07.2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    2
    В общем ситуация такая, есть огромное количество замкнутых сплайнов, некоторые из них могут содержать вложенные сплайны (сплайн (контур), а внутри него еще один приатаченный сплайн).
    Задача следующая:
    1. Все контуры которые имеют площадь меньше, чем заданное мной пороговое значение S1 - выдавливаются на высоту h1
    2. Все остальные выдавливаются пропорционально. Т.е. есть два высотных значения h2 и h3. Чем больше площадь контура, тем наиболее она приближена к высоте h3. Ну и соответсвенно, чем меньше, тем наиболее она становится приближенной к h2. Но при этом контуры с площадью S1 уже игнорируются.

    Огромное спасибо за любую предоставленную помощь!!! )))
     
  2. Black Sphinx

    Black Sphinx Знаток

    С нами с:
    05.09.2003
    Сообщения:
    234
    Симпатии:
    1
    Баллы:
    29
    Примерно так, если в арифметике не ошибся:
    Код:
    --
    -- smartExtruder by Black Sphinx
    --
    
    rollout smartExtruderRollout "smartExtruder" width:160 height:208
    (
    	checkbox chkSelOnly "Selected only" pos:[8,8] width:144 height:16 checked:false
    	groupBox grp1 "Low Area Params" pos:[8,32] width:144 height:64
    	spinner spnLATresh "Treshold " pos:[24,48] width:120 height:16 range:[0,1000,0]
    	spinner spnLAExtr "Extrude   " pos:[24,72] width:120 height:16 range:[0,1000,1] type: #worldunits
    	groupBox grp2 "Order Area Params" pos:[8,104] width:144 height:64
    	spinner spnExtrL "Extrude low   " pos:[23,120] width:121 height:16 range:[0,1000,1] type: #worldunits
    	spinner spnExtrH "Extrude high  " pos:[24,144] width:120 height:16 range:[0,10000,1] type: #worldunits
    	button btnOk "Banzai" pos:[8,176] width:144 height:16
    		
    	/*
    	Calculation of shape area.
    	*/
    	fn shapeArea sh = (
    		-- copy shape and convert it to mesh
    		obj = copy sh
    		convertToMesh obj 
    
    		local total_area = 0
    		
    		-- calculate area as sum of all faces of mesh
    		for f = 1 to obj.numfaces do (
    			total_area = total_area + meshop.getFaceArea obj #{f}
    		)
    
    		delete obj  -- delete temporary object
    		total_area
    	)
    
    	struct ShapeParam (o, ar)
    	-- o - refernce to object (shape)
    	-- ar - shape area
    
    	on btnOk pressed  do (
    		local objSet
    		if chkSelOnly.checked then
    			objSet = selection
    		else
    			objSet = shapes
    		
    		local shapesArr = #()
    		local max_area = -1
    		local min_area = 10.0^38
    		
    		-- precomputation pass:
    		-- for all shapes calculate area and stored with object reference in array
    		-- find min and max shape areas
    		for obj in objSet where isShapeObject obj do (
    			sp = ShapeParam o:obj ar:(shapeArea obj)
    			append shapesArr sp
    			if max_area < sp.ar do
    				max_area = sp.ar
    			if min_area > sp.ar and sp.ar >= spnLATresh.value do
    				min_area = sp.ar
    		)
    		
    		-- precomputation scale factor
    		local rate = (spnExtrH.value - spnExtrL.value) / (max_area - min_area)
    		format "h2 = %\th1 = %\tmin = %\tmax = %\trate = %\n" spnExtrH.value spnExtrL.value min_area max_area rate
    		
    		-- create Extrude modifier for shapes that area is less then specified treshold
    		-- this modifier will apply to shapes as inctance
    		local modExtrLA = Extrude amount:spnLAExtr.value
    		
    		local amount
    		
    		undo "smartExtrude" on (
    			for sp in shapesArr do (
    				if sp.ar < spnLATresh.value then
    					-- for small areas
    					addModifier sp.o modExtrLA  -- add Extrude modifier as instance
    				else (
    					-- for large areas
    					amount = (sp.ar - min_area) * rate + spnExtrL.value -- calculate amount for Extrude
    					format "ar = %\tamount = %\n" sp.ar amount
    					addModifier sp.o (Extrude amount:amount)  -- add unique Extrude to shape
    				)
    			)
    		) -- undo
    	)
    )
    
    CreateDialog smartExtruderRollout
    
     
  3. Black Sphinx

    Black Sphinx Знаток

    С нами с:
    05.09.2003
    Сообщения:
    234
    Симпатии:
    1
    Баллы:
    29
    Упс... ((
    Нормально отформатированная версия здесь. Будут храниться минимум до 4 июня 2013 года.
     
Модераторы: Savin Denis

Поделиться этой страницей