It is posible to save and load *.uvw file without opening save and load dialog?
I mean somethig similar to import-exportFile function with #noPrompt option.
Save and Load UVs
You can use DialogMonitorOPS here is an example:
http://area.autodesk.com/forum/autodesk-3ds-max/maxscript/transfering-uvw-data-via-maxscript/
Depending on your needs “channelInfo.CopyChannel” might work for you.
Yep. I saw that thread on area. Anubis is show nice trick using swap function.
Copy paste UVs from one object to another
Swap function for transfering UVs is very good solution that i implemented in this script
http://www.scriptspot.com/3ds-max/scripts/quadrifyall
here’s a little snippet from my “scripts I wrote and then said, hmm done that, I’ll never use that again” drive
It will copy various channels, including UVW.
/*
***************************************************************************
***************************************************************************
***************************************************************************
Channel Hopper
by LoneRobot
pete@lonerobot.com
*/
if ChannelHopperRo != undefined and classof ChannelHopperRo == RolloutClass and ChannelHopperRo.open then destroydialog ChannelHopperRo
rollout ChannelHopperRo "" width:157 height:380
(
local UICkb
fn CreateLogo =
(
imgstr = "iVBORw0KGgoAAAANSUhEUgAAACUAAAAnCAYAAACIVoEIAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACHDwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZEsRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTsAIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQdli7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtFehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGXwzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNFhImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH554SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJVgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyCqbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiEj6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhGfDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFpB+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJyeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJCYVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQlnyfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48vvacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0CvpvfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15LWytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AAbWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0zllmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHWztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5sxybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPwYyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmRXVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNmWS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wlxqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33zaEb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2vTqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqbPhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h/HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavrXTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxSfNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEgAACxIB0t1+/AAABnJJREFUWEfNl3lM22UYx6Gs5ShQoC2UQlvKVaAtbaEtZ2EwmTsYG2zZ2BjHGDDubQ53RZeoi4kzMTEmRuOVGKP/eB/TTbN5O495O+8Zo06zqFHjn5qvz/MyurL+fqU7iPzxhLbk976f3/N8n+/zvjHetduw0CJmoQExT1RQBVUtyDAVIsfuR2X7wLxndk6oguoWlHboMPyhF0tuzofWUvz/Q+nzyzB4ohK3ogUH0YxcfwY8bVvmFWzOTJlctaidMuHAP41Y/5gdyTr9vAJFransUg/SrAmIT1WhfHnXwoBieveqPiSkpKO0uWPhQDFYij4HmQX2hQVlsLmRrM1aWFAWTwCJqRnRQXUMUcl74Vi6AbaGNrC1mN11yC6pgC6vBJosE1SJauRVNIatN2f3hTo+Q7GuKtsHYW9Zj+JAK6w+sglnNQzFLmjNxUjNzEGiRis2jFUoEBMTI0KVEgeNJQEGVzKsS2iNoWxklatJEsaLgyojUWsMZqQbrUJPygS12GBms9i4GCRoFiEtjzZzJ8OyOA0la3Rw9xnQcJ0Fy+8oQsdDpeg6XI7+1zwY/siLHd9VY+pMDQ6R7zXdmEeZT784qIzcAiQbVCht18HRmQnfqBH1+8xouSUfrXcXY+3DZeh6zom+V9wYeLsCo5/4MPqpD+Nf+LHn93rs/q0O1/xUgx2nqzHxlR+jn/nFZNj2vhd7/6gXEyJOqQoz44jl49Q6u7Kw76+AWHTiS17Yh5GPfbRwJQZOVGDLqx70HnOj5yUXuo+UY9OzTvS/TlmhzYfeq5SNqV9qseoem8h8+YrZ3hcRilPL2Zn42o/NtOHmF6SDYRiq67AT3UfLMUJlGv6AoN6Vh9r5Qw02PO4QUCWL18wqoSwUd44ibhEC+80Y/5ygZIA4M1vf8GCMMtj3shuDVMbdv1LZfqwR2Rx8Rxps+7dVIsPKJIXozNCGkoUqu2qdeIvWu4qFBuSghk5WYvENeVCqFbj6tgJMnq6C0ZeCwuUZVGavKLVUGcdO+USJNeYEcFdHBcX0ixIVWP+oHQNvVchCjZ3yw9WTJV6gfq9ZZIw/K5PiRNZY9FJQXOJJylamUw025aigTOU1otW5JH3H3UEo0W302xZqcdZQ7zGXOD20HMoXv3FZ2u6zof3BEoxR2eXEzprjzmTP0lls0UHpraWiDFyenhddQSj+zNljGO7Ezicc6CdN7fuzXnzf+qYHUz/XCk2xTciKndZl23BuzBTuHlWmNAaTMEJ+29DO4++efoMo0er7bdjxPZkhQbA/DZ2kjiP9jZBfTVLHbqONByN0IHuVf5wmwAUGKiv0eHUqvMNGjJM3hYqcdbL6gRLEqaZHSOGyDGx8xikMkr2HY/KbKvHMVtIid6BcCdlcm7hJaFJUdgwGsyUJ5W7tEXbQfNAqMhAKxRbAv2182gF1pjI425J0Shi9KWKeMWySXikyxY0gB3Xt2TqsvLMIsbGxsw6PklClTe3TdkCjRMoOGEyMCxIrd1yqKT4Ix8/x0G271yY6L1KmWOjrHikTz4YeHiWh+ErFU73zyWkRS3lU51MOMsYK7P87gO1ULhY4xyh5E2tl15laYQmRXJ0tgSeBkqynqG5F5PLl2H1IpzP5hXYQCsfWwBCcyWEySM7KBMW04ElHEQQ+U06eFPxZnaWaZaCSmWI7MNVqxPzqPnreDoJQz0/PQM4EQ0UavJH+x6cKBtPbk2As80bOVIo+W1xAeRRIlY7PRzx4eUMW86VC8QvtYgNtSgPfL2e8SjJT8cka+CdyREkkoah0rAUh4suA4md5eHMCQg00DMq1crNo0eabrGKOSUFtIqje4wTFx5MIZ6Zo/reHvMo7YoQ6/fwlNwxqxg54fvGiclDcBFcCiju14XoLnemTgwYaBsUXgfhzdsDdJQlFPsUnzrlOl9Fkisu37PZCqo4CrpXdQldhUGwH2qJEcaTloTvfUDy4154zUL4hSUJpzUUwB8gOyLEl7YCsgDV1pcrHtxt+8VhFbNBAwzLFdmDfkCnbebwAG+cV6T7SLF9GeHDz7LR6m6QzxZfI6p25YtLz2Ukquo+4RGnZXEcoo/z3UmOcBjbvpS9LQq6jShqKhyNffabO1k57kETwzOOL5U7Sgwi6mVxq7KKz2IF/G5HPJ1C6zktqim+/Bk8aLAEdcqu0smGq1sLSQBG4zKA1CpbqxaWXTZuh/gN9vGvYbq+ckAAAAABJRU5ErkJggg=="
bytearr = (dotnetclass "system.convert").FromBase64String imgstr
memstream = dotnetobject "System.IO.MemoryStream" bytearr
DecodedImg = (dotnetclass "System.drawing.image").fromstream memstream
memstream.close()
DecodedImg
)
fn StyleDotNetHeader label text =
(
label.text = text
label.backcolor = label.backcolor.fromARGB 52 83 103
label.forecolor = label.forecolor.ghostwhite
label.font = dotNetObject "System.Drawing.Font" "Verdana" 8 (dotNetClass "System.Drawing.FontStyle").bold
label.image = if lrlogo == undefined then (CreateLogo()) else lrLogo
label.imagealign =label.imagealign.Middleright
label.textalign = label.textalign.Middleleft
label.padding = dotnetobject "padding" 10 0 0 0
)
fn copyPasteChannel source channelType channelID =
(
/*
*/
if isvalidnode source then
(
if selection.count > 0 then
(
ObjsArr = for i in selection collect i
if keyboard.shiftpressed then
(
for o in ObjsArr do ChannelInfo.ClearChannel o channelID
)
else
(
if channelType == 2 then
(
ChannelInfo.CopySubChannel source channelType channelID 0
for o in ObjsArr do ChannelInfo.PasteSubChannel o channelType channelID 0
)
else
(
ChannelInfo.CopyChannel source channelType channelID
for o in ObjsArr do ChannelInfo.PasteChannel o channelType channelID
)
)
)
else messagebox "Please select a destination object to paste the channel onto." title:"Channel Hopper" beep:false
)
)
dotNetControl lblvc "Label" pos:[0,-1] width:157 height:40
checkbutton btnID01 "1" pos:[70,259] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID02 "2" pos:[90,259] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID03 "3" pos:[110,259] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID04 "4" pos:[130,259] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID05 "5" pos:[70,278] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID06 "6" pos:[90,278] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID07 "7" pos:[110,278] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID08 "8" pos:[130,278] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
button btnApply "Paste Channels To Selection" pos:[2,322] width:153 height:40 enabled:false
label lblClear "Hold <Shift> to Clear Channels" pos:[3,364] width:150 height:30
checkbutton btnID09 "9" pos:[70,297] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID10 "10" pos:[90,297] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID11 "11" pos:[110,297] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
checkbutton btnID12 "12" pos:[130,297] width:20 height:18 highlightColor:(color 88 199 255) enabled:false
pickbutton btnPickSource "Source Object" pos:[3,42] width:151 height:28 autodisplay:true
checkbutton ckbGeo "Geometry" pos:[6,89] width:145 height:21 highlightColor:(color 36 36 136)
checkbutton ckbVsel "Vertex Selection" pos:[6,114] width:145 height:21 highlightColor:(color 65 177 65)
checkbutton ckbVAlpha "Vertex Alpha" pos:[6,140] width:145 height:21 highlightColor:(color 135 22 22)
checkbutton ckbVIllum "Vertex Illumination" pos:[6,165] width:145 height:21 highlightColor:(color 114 37 136)
checkbutton ckbVC "Vertex Color" pos:[6,191] width:145 height:21 highlightColor:(color 185 155 37)
checkbutton ckbUVW "UVW Mapping Channels" pos:[6,216] width:145 height:21 highlightColor:(color 225 88 199)
spinner spnFrom "" pos:[12,276] width:50 height:16 range:[1,100,1] type:#integer
spinner spnTo "" pos:[12,294] width:50 height:16 enabled:true range:[1,100,1] type:#integer
radiobuttons rdoUVtype "" pos:[6,239] width:159 height:16 labels:#("Range ", "Specific") columns:2 enabled:false
GroupBox grpFT "" pos:[8,252] width:59 height:63 enabled:false
label lblFT "From/To" pos:[16,259] width:43 height:12 enabled:false
groupBox grpmargin "" pos:[8,252] width:59 height:21 enabled:false
groupBox grpSCC "Set Channels To Copy" pos:[2,72] width:153 height:247
local RangeUI = #(grpFT,spnFrom,spnTo,lblFT)
local SpecUI = #(btnID01,btnID02,btnID03,btnID04,btnID05,btnID06,btnID07,btnID08,btnID09,btnID10,btnID11,btnID12)
on ckbUVW changed state do
(
if rdoUVtype.state == 1 then
for r in rangeUI do r.enabled = state
else
for s in specUI do s.enabled = state
rdoUVtype.enabled = state
)
on btnPickSource picked obj do
(
if isvalidobj obj then
btnApply.enabled = true
)
on rdoUVtype changed val do
(
if ckbUVW.checked then
(
if val == 1 then
(
for s in specUI do s.enabled = false
for r in rangeUI do r.enabled = true
)
else
(
for s in specUI do s.enabled = true
for r in rangeUI do r.enabled = false
)
)
)
on ChannelHopperRo open do
(
StyleDotNetHeader Lblvc "Channel Hopper"
for s in specUI do s.enabled = false
for r in rangeUI do r.enabled = false
if selection.count == 1 then (btnPickSource.object = selection[1];btnPickSource.picked selection[1];btnPickSource.text = selection[1].name)
)
on btnApply pressed do
(
if ckbGeo.checked then
(
if isvalidnode btnPickSource.object then copyPasteChannel btnPickSource.object 1 1
)
if ckbVsel.checked then
(
if isvalidnode btnPickSource.object then copyPasteChannel btnPickSource.object 2 0
)
if ckbVAlpha.checked then
(
if isvalidnode btnPickSource.object then copyPasteChannel btnPickSource.object 3 -2
)
if ckbVIllum.checked then
(
if isvalidnode btnPickSource.object then copyPasteChannel btnPickSource.object 3 -1
)
if ckbVC.checked then
(
if isvalidnode btnPickSource.object then copyPasteChannel btnPickSource.object 3 0
)
if ckbUVW.checked then
(
local UVWRange = #()
if rdoUVtype.state == 1 then
UVWRange = for i = spnFrom.value to spnTo.value collect i
else UVWRange = for u = 1 to SpecUI.count where SpecUI[u].checked collect u
if isvalidnode btnPickSource.object then for uvChan in UVWRange do copyPasteChannel btnPickSource.object 3 uvChan
)
)
)
createdialog ChannelHopperRo style:#(#style_toolwindow,#style_sysmenu)
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.