Render.ru

Маппинг для полигона

#1
Как можно наложить на скрипте модификатор UVWMap для определенных полигонов
Я делаю

PolyOp.SetFaceSelection Bilding #(1)
MapText=UVWMap()
addModifier Bilding MapText

где Bilding объект к которому применяются данные операции
Я рассчитываю что он выделит фейс 1(так он и делает) потом не выходя из режима подобъектов наложит модификатор UVWMap, но это не происходит.
Он сначала выходит из режима подобъектов а потом накладывает UVWMap(т.е. уже для всего объекта ).

Что мне надо исправить в скрипте?

Заранее большое спасибо
 
#3
Спасибо большое!
Помогло!
У меня тут еще вопрос возник
В UVWMap есть кнопочка Fit. Так вот, как ее вызвать из скрипта ?
Я уже весь референс перерыл но ничего ненашел :(
 
#5
2 Denis:

Подскажи, мил человек, как написать такую функцию. Я так понимаю надо указать конкретные размеры? А если они не известны? И как гизмо выравнять по нормали полигона, на который накладывается марринг?
 
#6
2 Denis:
Извини за беспокойство, Денис, но вопрос остаётся открытым - как команду "fit" реализовать скриптом? Можешь привести пример кода здесь? Заранее благодарю тебя за ответ.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
Наверника такой скрипт уже есть поищи хорошенько, овобожусь гляну если не найдеш, там нужно будет немного повозиться с математекой.
 
#8
Да искал я уже - и на скриптспоте и в скриптовых форумах дискритовских, всю сеть облазил, нет нигде :(
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#9
ок постараюсь глянуть вечером. Сечас со временем напряженно
 
#11
Ух ты! Супер! Огромная тебе благодарность, Денис! Сильно выручил! :)
Ты МЕГА-ЧЕЛ!!! :)))
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#12
Ну ловите

-----------------------------------------
bbpMax = undefined
bbpMin = undefined

fn addBBoxVertex p = (
if bbpMax == undefined then( bbpMin = copy p ; bbpMax = copy p)
if p.x > bbpMax.x then bbpMax.x = p.x
if p.y > bbpMax.y then bbpMax.y = p.y
if p.z > bbpMax.z then bbpMax.z = p.z

if p.x < bbpMin.x then bbpMin.x = p.x
if p.y < bbpMin.y then bbpMin.y = p.y
if p.z < bbpMin.z then bbpMin.z = p.z
)

fn alignUVGizmo theObj theMap theFace =

(

faceNormal = in coordsys theObj (polyOp.getFaceNormal theObj theFace)
worldUpVector = [0,0,1]
rightVector = normalize (cross worldUpVector faceNormal)
upVector = normalize ( cross rightVector faceNormal )
theMatrix = matrix3 rightVector upVector faceNormal [0,0,0]
theMap.gizmo.transform = theMatrix
theMatrix
)

fn FitUVWMapToFace obj theMap theFace =
(
objTM=obj.objecttransform
modTM=getModContextTM obj m
cfp = ( polyOp.getSafeFaceCenter obj theFace)
fTM = theMap.gizmo.transform
facePointList = polyOp.getFaceVerts obj.baseobject theFace
bbpMax = undefined
bbpMin = undefined
for f in facePointList do
(
local fp = polyOp.getVert obj f
addBBoxVertex (fp * (inverse objTM) *(inverse fTM) )
)
avp = (bbpMax - bbpMin)
bbpMiddle = bbpMin + avp / 2
theMap.gizmo.pos = bbpMiddle * fTM * modTM
theMap.length = avp.y
theMap.width = avp.x
theMap.height = avp.z
)

-- alignUVGizmo $ $.uvw_mapping 3
-- FitUVWMapToFace $ $.uvw_mapping 3
-----------------------------------------
 
Сверху