Render.ru
Поддержать

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

  • Автор темы Гость
  • Дата создания

Гость

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

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

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

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

Заранее большое спасибо

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
subobjectLevel = 4
PolyOp.SetFaceSelection $ #(2)
modPanel.addModToSelection (UVWMap())

Гость

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

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Нет такой функции.Сам делаеш.

Гость

2 Denis:

Подскажи, мил человек, как написать такую функцию. Я так понимаю надо указать конкретные размеры? А если они не известны? И как гизмо выравнять по нормали полигона, на который накладывается марринг?

Гость

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

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Наверника такой скрипт уже есть поищи хорошенько, овобожусь гляну если не найдеш, там нужно будет немного повозиться с математекой.

Гость

Да искал я уже - и на скриптспоте и в скриптовых форумах дискритовских, всю сеть облазил, нет нигде 🙁

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
ок постараюсь глянуть вечером. Сечас со временем напряженно

Гость

Спасибо огромное!!! Очень поможете мне.

Гость

Ух ты! Супер! Огромная тебе благодарность, Денис! Сильно выручил! 🙂
Ты МЕГА-ЧЕЛ!!! 🙂))

Savin Denis

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

-----------------------------------------
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
-----------------------------------------