Сообщение MaxScript Callback script exception.
У меня возникла такая проблема! Отрендерилась сцена в высоком разрешении 2600х3000, я нажимаю на значок сейв, и выскакивает сообщение MaxScript Callback script exception. Unknown system exception. Выключить его не получается, и оно не дает мне сохранить картинку. Что делать? ((((
На сайте c 08.05.2008
Сообщений: 1593
страна Грёз
скорее всего эта тема уже возникала, используйте поиск. и не только на этом сайте. google много чего знает.
На сайте c 11.09.2007
Сообщений: 4294
Кишинев
Что-за привычка постоянно поучать поиском? Я лично много чего.что обсуждалось по поиску не находил! Если нет достойного ответа,то лучше промолчать. .
На сайте c 08.05.2008
Сообщений: 1593
страна Грёз
Я лично много чего.что обсуждалось по поиску не находил
учись пользовться поиском, у гугла есть все ответы. Лично я 90% инфы нахожу через поисковики. это ещё и быстее чем ждать с моря погоды
На сайте c 11.09.2007
Сообщений: 4294
Кишинев
Legion-236
Молодец. Но если тебе нравится молоко,это не значит,что оно и мне должно нравится.
Я лично хочу услышать опыт людей именно с этого сайта. Что в этом предосудительного?
И поисковиком я умею пользоваться. КЭП
На сайте c 08.05.2008
Сообщений: 1593
страна Грёз
тогда не слушай меня и не флуди. говори по делу а не высказывай мне претензий ok?
На сайте c 04.09.2008
Сообщений: 13221
Уфа
а ну цыц
зафлудили всйо
такой ошибки не помню кстати
кстати да многие поиск не юзают или не умеют
kovtun.mariya
система у вас какая?
На сайте c 11.09.2007
Сообщений: 4294
Кишинев
Nightt
Прошу прощения.
Legion-236
Флудить начал ты. и именно ты вообще ничего по делу не высказал. «Поучайте лучше ваших поучат!»(с)
Здесь этот вопрос не поднимался!
Засим откланяюсь. Считаю бесполезным вести диалог.
По сабжу: Соглашусь с Nightt . тоже не встречал такой ошибки.
На сайте c 24.03.2008
Сообщений: 2
А я когда пользуюсь поиском в гугле или на конкретных сайтах, нахожу по нужной теме такие вот посты, где автора ругают что тема уже была — тогда спрашивается КАКОГО ЧЕРТА ЭТИ ПОСТЫ НЕ УДАЛЯЮТСЯ .
На сайте c 04.09.2008
Сообщений: 13221
Уфа
RAM
по мере возможности удаляются, иногда не все успеваю увидеть
На сайте c 08.05.2008
Сообщений: 1593
страна Грёз
Nightt
тоже не встречал такой ошибки.
Если не знаешь тогда и не влазь. И не учи други что им делать что бы не узнать куда тебе пойти.
Сперва нужно спросить у поиска. яндекс гугл или ещё что именно эут строчку с названием ошибки. И почитать чё эт тако вообще. Судя по надписи оно ругается потому как не может выполнить действия скрипта. вторая ошибка после чего закрывается макс говорит о недостаточности ресурсов. поэтому night и спросила про систему. Может получиться так что комп рендерит картинку а на сохранения её тупо не хватает ресурсов. Если пользуетесь сторонним скриптом, то возможно дело в нём.
На сайте c 19.04.2010
Сообщений: 9
Москва
Компьютер слабый. Я пытаюсь отрендерить большой фасад, который в реале распечатаестя в размерах около 3-х метров на 60 см. Я рендерю по частям с разрешением 2000х2600. Одна часть рендерится около 30 минут. Но это сообщение не дает сохранить ее. Скорее всего это связано с нехваткой оперативной памяти, хотя странно. Не такое уж и большое разрешение, и раньше я работала с подобными форматами. Сейчас поставила рендер на автосохранение. Посмотрю что будет, может сохранится)) Пишу с ноута, не могу посмотреть данные о системе компа, поскольку он занят рендером. Я вообще не особо в этом разбираюсь. (((
В интернете и на сайте ничего не нашла про это. В гугле есть что-то про это сообщение на англ. языке, но не связанное с сохранением картинки после рендера. ((
- Chaos Corona Forum
- Chaos Corona for 3ds Max
- [Max] I need help!
- MAXScript Auto-load Script Error
Pages: [1]
Author Topic: MAXScript Auto-load Script Error (Read 5755 times)
Pages: [1]
- Chaos Corona Forum
- Chaos Corona for 3ds Max
- [Max] I need help!
- MAXScript Auto-load Script Error
Maxscript Function Orders
Hey guys. I’m a beginner when it comes to maxscript and scripting in general. I’ve been doing some small tool scripts as a learning exercise, but I’m still having trouble understanding the order in which things are initialized and called. For example, this is my current test script:
( objCollection = $* objArray = objCollection as array objList = #() txtNull = "" local nameSearchBox function updateList x= ( objCollection = $* objArray = objCollection as array objList = #() print(x) for i = 1 to objArray.count do ( if findString objArray[i].name x == 1 do ( appendIfUnique objList objArray[i].name ) ) print(objList) nameSearchBox.objectList.items = objList nameSearchBox.objectSearch.text = x ) function selUpdate = ( print("Selection Changed") ) rollout nameSearchBox "Name and Search" ( edittext objectSearch listbox objectList on objectSearch changed txt do updateList txt on nameSearchBox open do( callbacks.addScript #selectionSetChanged "selUpdate()" id:#Selection_Update ) on nameSearchBox close do( callbacks.removeScripts id:#Selection_Update ) ) createdialog nameSearchBox 150 200 )
When I run the code I get the error «— selUpdate: undefined
>> MAXScript Callback script Exception: — Type error: Call needs function or class, got: undefined
This I believe means that the function the callback is looking to run is not yet defined. However, what I’ve learned, or at least think I understand, is that if the function is placed before the rollout in the script, it should be defined right? So I thought this was written with the right order, but now I’m not so sure. Or is there something else I’m missing here? Thanks for the help!
Replies
haiddasalami polycounter lvl 14
Looks like a scope issue. Try this:
( objArray = selection as array objList = #() txtNull = "" global nameSearchBox rollout nameSearchBox "Name and Search" ( edittext objectSearch listbox objectList function updateList x= ( objArray = selection as array objList = #() for i = 1 to objArray.count do ( if findString objArray[i].name x == 1 do ( appendIfUnique objList objArray[i].name ) ) print(objList) nameSearchBox.objectList.items = objList nameSearchBox.objectSearch.text = x ) function selUpdate = ( print("Selection Changed") ) on objectSearch changed txt do ( updateList txt ) on nameSearchBox open do ( callbacks.addScript #selectionSetChanged "nameSearchBox.selUpdate()" id:#Selection_Update ) on nameSearchBox close do ( callbacks.removeScripts id:#Selection_Update ) ) createdialog nameSearchBox 150 200 )
Weird to explain but basically its not in the global scope. So you can make the rollout global and then the function is accessible. (Callbacks are finicky or at least in my opinion. Would like to hear if there is a better way) Also I removed that crazyness $*. You can just use selection as Array where you can do whatever you want.
monster polycounter
haiddasalami is right. Also I would move the code above the rollout into the Open block. That way if you open the rollout from another place in your code you don’t have to repeat that code.
But also you don’t need to declare the rollout global. Rollouts are all global once created.
( rollout nameSearchBox "Name and Search" ( edittext objectSearch listbox objectList function updateList x= ( objArray = selection as array objList = #() for i = 1 to objArray.count do ( if findString objArray[i].name x == 1 do ( appendIfUnique objList objArray[i].name ) ) print(objList) nameSearchBox.objectList.items = objList nameSearchBox.objectSearch.text = x ) function selUpdate = ( print("Selection Changed") ) on objectSearch changed txt do ( updateList txt ) on nameSearchBox open do ( objArray = selection as array objList = #() txtNull = "" callbacks.addScript #selectionSetChanged "nameSearchBox.selUpdate()" id:#Selection_Update ) on nameSearchBox close do ( callbacks.removeScripts id:#Selection_Update ) ) createdialog nameSearchBox 150 200 )
M-Cubed polycounter lvl 6
Hey thanks for the answers guys. I tried the updated code you provided and it does work as intended, but I’m still not quite sure I understand. Let me try and talk it out and you guys tell me if I’m wrong.
So the way I had it written the functions were not in global scope? If so, why was that? I thought functions would always be global. Ugh, yeah I’m still having trouble wrapping my brain around this. Damn artist brain. If anyone could explain this to me, or point me to a tutorial that would be great.
Noors greentooth
I think the rollout creates a new global scope, thus making your functions unaccessible when recalled from callbacks.
Pathologist polycounter lvl 4
Since we are asking questions anyway, something I have been wondering for a while is:
What is the use of using «(» at the start and «)» at the end of a maxscript file? Does it have a purpose? :icon_question:
I would make the code like so:
try(destroyDialog nameSearchBox)catch() objArray = selection as array objList = #() txtNull = "" function updateList x= ( objArray = selection as array objList = #() for i = 1 to objArray.count do ( if findString objArray[i].name x == 1 do ( appendIfUnique objList objArray[i].name ) ) print(objList) nameSearchBox.objectList.items = objList nameSearchBox.objectSearch.text = x ) function selUpdate = ( print("Selection Changed") ) rollout nameSearchBox "Name and Search" ( edittext objectSearch listbox objectList on objectSearch changed txt do ( updateList txt ) on nameSearchBox open do ( callbacks.addScript #selectionSetChanged "selUpdate()" id:#Selection_Update ) on nameSearchBox close do ( callbacks.removeScripts id:#Selection_Update ) ) createDialog nameSearchBox 150 200 clearListener()
haiddasalami polycounter lvl 14
@monster: Hmm tried that code and get the same scope issue unless i make the rollout global. From my understanding on the scope, anything inside the macroscript definition is considered a local or separate scope from global.
In regards to scope, heres some good reading from the documentation. Generally if you just google function and variable scope you should find bunch of articles. I can write some examples later if that will help you.
http://docs.autodesk.com/3DSMAX/15/ENU/MAXScript-Help/index.html?url=files/GUID-382E7583-DD2A-4DF5-B568-71502DF95ED9.htm,topicNumber=d30e137332,hash=WS3ED54CBA79FF2E3D1E593B6612B78359E8F-7668
@Pathologist: The () basically makes it into a macroscript that can be called on later or from my shitty understanding of maxscript. Not a fan of the language 😛
monster polycounter
@monster: Hmm tried that code and get the same scope issue unless i make the rollout global. From my understanding on the scope, anything inside the macroscript definition is considered a local or separate scope from global.
My bad, I think I encased the code in () after testing. Normally I have a bunch of rollout definitions script in a plugin directory, and my macroscripts consist only of createDialogs calls.
Pathologist polycounter lvl 4
Whatever you put inside the brackets is in local scope and doesn’t survive end bracket.
That’s what I suspected, just wasn’t certain about it, I recall having situations where it did survive. That could have been another script conflicting though, we use a major library with over 400 functions defined on launch and kept in memory like that, I am no fan of it myself the previous co-worker who maintained and made our tools was though, as it allowed for easy control over the functions and you could call them at any time.
Thanks for answering
McGreed polycounter lvl 15
@Pathologist
I don’t know if you know about WHILE in FOR, but you can compact your FOR loop below to something like this:
==from== for i = 1 to objArray.count do ( if findString objArray[i].name x == 1 do ( appendIfUnique objList objArray[i].name ) ) ==to== for i in objArray where findString i.name x == 1 do appendIfUnique objList i.name
haiddasalami polycounter lvl 14
That’s what I suspected, just wasn’t certain about it, I recall having situations where it did survive. That could have been another script conflicting though, we use a major library with over 400 functions defined on launch and kept in memory like that, I am no fan of it myself the previous co-worker who maintained and made our tools was though, as it allowed for easy control over the functions and you could call them at any time.
Thanks for answering
This is one of the things that frustrate me well regarding the fact that you gotta launch the program with you’re library unless you fileIn every script at the start to import a library. Though hopefully with the implementation of python this might be better
EMJAY1970 polycounter lvl 3
I am trying to add a custom attribute to an object in Max, but do not want it to show in the UI, just on a track. This is because I want to be able to locate an object by its custom attributes (which I also need to know), just in case (which is the case) the object gets renamed by someone else (even though they have been told not to change anything). I can script an attribute, but it shows in the UI
nodeMasterID = attributes obj_Identifier
(
parameters mainP rollout:mainR
(
nodeID type:#node animatable:false
)
rollout mainR «Node Identifier:»
(
checkbox nodeIDcBx enabled: false
)
)
custAttributes.add masterPH nodeMasterID
The Maxscript help is very conveluted and difficult to navigate, having to jump between pages for info is awful. Maya help is so much more helpful
monster polycounter
Hi EMJAY1970, feel free to create a new post when you ask a question not related to the original topic.
To answer your question directly, remove the rollout from your Custom Attribute and it won’t show in the UI.
nodeMasterID = attributes obj_Identifier ( parameters mainP ( nodeID type:#node animatable:false ) ) custAttributes.add masterPH nodeMasterID
However, a better solution is to remove then name dependency by using a Weak Reference instead of storing the node.
( --CREATE A BOX AND SPHERE myBox = box() mySphere = sphere() --CREATE CUSTOM ATTRIBUTE, NOTE THE TYPE IS #MAXOBJECT nodeMasterID = attributes obj_Identifier ( parameters mainP ( nodeID type:#maxObject ) ) --ADD CUSTOM ATTRIBUTE TO BOX custAttributes.add myBox nodeMasterID --ADD WEAK REFERENCE TO THE BOX OF THE SPHERE myBox.nodeID = nodeTransformMonitor node:mySphere forwardTransformChangeMsgs:false --RENAME THE SPHERE mySphere.name = "Globe" --GET THE NEW NAME OF THE SPHERE FROM THE BOX'S CUSTOM ATTRIBUTE print myBox.nodeID.node.name )
Сохранение топологии при экспорте или как в
Из за своей глупости и маниакального желания использовать только последние версии программ я сделал дом в 13-м максе, но рендерить сцену мне нужно в 12-м) а сохранить сцену в 13-м максе (в режиме совместимости с 12-м естественно) и потом открыть ее в 12-м у меня не получается, 12-й выдает :
MAXscript Callback script Exception
—Unknown system exception
А при ее сохранении макс крашится(
поэтому мне приходиться экспортировать в 3ds или fbx и импортировать в 12-й макс. Но и здесь не все так просто, при экспорте слетает вся топология, и в 12м максе я получаю кашу из треугольников , слетевшие id и приступ гнева.
поэтому прошу вашей помощи в решении проблемы,
как открыть сцену с 13-го макса в 12-м или как сделать правильную триангуляцию сложной модели ?
зараннее спасибо за ответ!