среда, 25 мая 2016 г.

Выравнивание вершин сплайнов по плоскостям.





-------------------------------
(
arrSpline = for i in selection where classOf i == SplineShape collect i

-- get all knots
global arKnots = #(), mX = 0, mY = 0, mZ = 0
for i in arrSpline do(
       
        for s = 1 to numSplines i do(
            nk = numKnots i s
            for k = 1 to nk do append arKnots #(i, s, k, getKnotPoint i s k)
          )--end s loop
    )
----------------
   
-- get mi value
arCount = arKnots.count
for i=1 to arCount do (
    mX+= arKnots[i][4].x
    mY+= arKnots[i][4].y
    mZ+= arKnots[i][4].z
    )
mX = mX/arCount   
mY = mY/arCount
mZ = mZ/arCount
------------------   

--set all knots   
for i = 1 to arCount do(
    knt = getKnotPoint arKnots[i][1] arKnots[i][2] arKnots[i][3]

--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   
    --knt.x = mX
    --knt.y = mY  
    knt.z = mZ
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   
    setKnotPoint arKnots[i][1] arKnots[i][2] arKnots[i][3] knt
    updateshape arKnots[i][1]
    )   
   
  )
----------------------------------
Управлять плоскостями можно этими строками:
    --knt.x = mX
    --knt.y = mY  
    knt.z = mZ

 Удобен скрипт тем, что выравнивает вершины всех выделенных сплайнов в одной плоскости.

понедельник, 23 мая 2016 г.

Работа со строковыми переменными.


Есть текстуры с, примерно, такими именами:

"vm_v3_019_wood_chestnut.jpg"
....................................................
"vm_v3_###_wood_chestnut.jpg"

Все текстуры одинаковые, но с разными именами, что перегружает сцену. 
Надо убрать значения "###_" во всех похожих текстурах:

"vm_v3_wood_chestnut.jpg"


Вот скрипт, который это делает с небольшой инструкцией:

--------------------------------------------------------------
(
 --disableSceneRedraw()

albm = getclassinstances bitmapTexture
  
progressstart "Changing fileNames..."
local num = 1, numAll = albm.count
  
with redraw off (
        for n in albm do (
                 progressupdate (num*100.0/numAll)
                 if n.filename != undefined do(
                  a = filenameFromPath n.filename -- get "vm_v3_019_wood_chestnut.jpg"
                  b = filterString  a "_" -- get #("vm", "v3", "019", "wood", "chestnut.jpg")
                      
                  nb = b.count
        
                    try(if b[1] == "vm" and (classOf (execute b[3])) == integer do(
                            ns = b[1]
                            for i = 2 to nb do if i != 3 do ns = ns + "_" + b[i]
                            np = (getFilenamePath n.filename) + ns
                            n.filename = np
                        ))catch()
                  )
                 num+=1
                 )
    )  

progressend () 
--enableSceneRedraw()
)--------------------------------------------------------------

Полезные ссылки:
File Name Parsing
String Values


пятница, 20 мая 2016 г.

Создание Pin Art стены.




-----------------------------------------------------
p=pickobject prompt:"Pick surface to move to."

ar = selection as array

for i in ar do(
    theRay=ray i.pos i.dir
    isr =(intersectray p theRay)
    if isr != undefined do i.pos = isr.pos - i.dir*i.height
    )
-----------------------------------------------------

В данном случае, стержни - это цилиндры длиной 100см, радиусом - 0.5 см, с шагом 3 см.
Чтобы корректно определились перечения луча с поверхностью, заготовке (справа на картинке) надо вывернуть нормали.












четверг, 12 мая 2016 г.

Возможности Boolean в 3ds Max 2017.


Похоже булевы операции в 2017 максе стали работать гораздо лучше, чем в предыдущих версиях.
Появилась возможность изменять параметры исходных объектов, менять тип операций и многое другое.

Скачать сцену можно по этой ссылке.