Render.ru

Созание модификатора

oguretz

Пользователь сайта
Рейтинг
2
#1
Собственно задача модификатора - выделить полигоны по matID и задать им outline - с помощью polyop.bevelFaces с высотой ноль. Естественно, скрипт не работает никак) Укажите ошибки, пожалуйста.

Код:
plugin modifier selectAndOutline
	name:"SelectAndOutline"
	classID:#(252525,262626)
(
	parameters main rollout:params
	(
		matid type:#integer default:1
		on matid do
		(
			global face_selection = #{}
			local base_obj = $.baseobject
			local num_faces = polyop.getNumFaces base_obj
			for f = 1 to num_faces do
			(
				local mat_id = polyop.getFaceMatID base_obj f
				if mat_id = matid do face_selection[f] = true
			)
		)
		amount type:#float default:0
		on amount do
		(
			polyop.bevelFaces $.baseobject $face_selection 0 $amount
		)
	)
	rollout params "General"
			(
				spinner matid "MatID: " type:#integer range:[1,100,1]
				spinner amount "Amount: " type:#float
			)
	
)
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
В целом это хак, ибо в хелпе черным по белому написано что топологию не меняет.
Но поправил чтоб както работало.
Регировать будет только после введения Ammaunt
Да и и крутить нельзя ибо будут наложение операции, так как меняем базовою геометрию.

Код:
plugin modifier selectAndOutline
name:"SelectAndOutline"
classID:#(0xec38c0a, 0x23db2118)
(

local last_ammaunt = 0.
local last_setID = 1
fn setOutLine =
(		
	local face_selection = #{}
	local base_obj = $.baseobject
	local num_faces = polyop.getNumFaces base_obj
	for f = 1 to num_faces do
	(
	local mat_id = polyop.getFaceMatID base_obj f
	if mat_id == last_ammaunt do face_selection[f] = true
	)
	polyop.bevelFaces ($.baseobject) face_selection 0 (-last_ammaunt)
)
parameters main rollout:params
(
matid type:#integer default:1 animatable:false ui:matid
amount type:#float default:0	animatable:false ui:amount
on matid set val do
(
	last_setID = val
)

on amount set val do
(
	if val != last_ammaunt  do 
	(
	setOutLine()
	last_ammaunt = val
	)
)
)
rollout params "General"
(
spinner matid "MatID: " type:#integer range:[1,100,1]
spinner amount "Amount: " type:#float
)

)
 

oguretz

Пользователь сайта
Рейтинг
2
#3
Хмхмхм... А вообще возможно ли сделать модификатор, не меняющий базовую геометрию и выполняющий все те же самые действия? то есть полноценный и настраиваемый, алгоритм действия-то простой... или обязательно использовать SDK и какой-нибудь C++?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
Таки да, чтобы написать нормальный модификатор потребуется "SDK и какой-нибудь C++". Можно попробовать создавать ниже по стеку например модификатор Edit_Poly который работает с топологией. Но чтобы сбросить топологию тебе придется каждый раз его пере-создавать.
 
Сверху