Собственно задача модификатора - выделить полигоны по 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
)
)
В целом это хак, ибо в хелпе черным по белому написано что топологию не меняет.
Но поправил чтоб както работало.
Регировать будет только после введения 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
)
)
Хмхмхм... А вообще возможно ли сделать модификатор, не меняющий базовую геометрию и выполняющий все те же самые действия? то есть полноценный и настраиваемый, алгоритм действия-то простой... или обязательно использовать SDK и какой-нибудь C++?
Таки да, чтобы написать нормальный модификатор потребуется "SDK и какой-нибудь C++". Можно попробовать создавать ниже по стеку например модификатор Edit_Poly который работает с топологией. Но чтобы сбросить топологию тебе придется каждый раз его пере-создавать.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
oguretz
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
Но поправил чтоб както работало.
Регировать будет только после введения 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
Savin Denis