{"id":6117,"date":"2016-05-11T12:48:19","date_gmt":"2016-05-11T10:48:19","guid":{"rendered":"http:\/\/www.netkingz.com\/en\/2019\/08\/16\/team-sviluppo-ruoli-copy\/"},"modified":"2020-05-01T13:10:48","modified_gmt":"2020-05-01T11:10:48","slug":"3dsmax-script-introduzione","status":"publish","type":"post","link":"http:\/\/www.netkingz.com\/en\/2016\/05\/11\/3dsmax-script-introduzione\/","title":{"rendered":"3Ds Max Script: Intriduzione"},"content":{"rendered":"Il presente tutorial riporter\u00e0 scrits base per realizzare tools utili su 3Ds Max. Il linguaggio utilizzato \u00e8 3DS Max Script. Richieste conoscenze base di programmazione.\n\nIniziamo con lo spiegare come alcune differenze base fra quello che si desidera ottenere.\n\nEsistono due \"tipologie\" di tool ottenubili, quello che li differenzia \u00e8 essenzialmente la UI (User Interface) ottenuta, oltre a piccole variazioni a livello di codice. MS (MaxScript) creer\u00e0 una finestra \"esterna\" al programma 3DS Max , MCR (MacroScript) creer\u00e0 un pannello integrabile con la UI del programma. A livello di codice se inseriremo l'intestazione qui sotto citata in un file con una delle due estensioni otterremo sempre un pannello integrato nel programma.\n<blockquote>\n<pre class=\"maxscript geshifilter-maxscript\"><em>macroscript myMacro\ncategory:\"my category\"\ntooltip:\"tooltip text\" buttonText:\"button text\" <\/em>\n<em>(<\/em>\n<em>)<\/em><\/pre>\n<\/blockquote>\n<strong>N.B.:&nbsp;<\/strong>Cliccando da tastier asu F11 torna utile il MAXScript Listener che altro non \u00e8 che una finestra dove vengono riportati tutti i \"risultati di debug\" con annessi avvisi e comandi utili a comprendere cosa sta succedendo mentre noi stiamo agendo all'interno del programma. Se si ha un minimo di dimestichezza con 3Ds Max o con i software di modellazione invito chiunque a provare ad aprire tale finestra e poi realizzare un semplice cubo. Una volta fatto ci\u00f2 si potr\u00e0 notare come nella parte in alto della finestra di Listener appaia il codice utile a realizzare quello specifcio comando. Il consiglio \u00e8 di tenere sempre aperta tale finestra di MAXScripst Listerner mentre si realizza il codice.\n\n<strong>REALIZZIAMO UNO SCRIPT MS (.ms)<\/strong>\n\nPer realializzare un MS (MaxScript) consiglio di cliccare sul menu, solitamente posto in alto nel software, alla voce MAXScript , per poi cliccare su New Script.\n\nFatto ci\u00f2 si potr\u00e0 notare come si aprir\u00e0 un sistema di scrittura adibita all'inserimento del nostro codice.\n\nAnalizziamo il seguente codice:\n<blockquote><em>try ( closeRolloutFloater RolloutFloterTemplate) catch()<\/em>\n\n<em>rollout RolloutTemplate \"View\"<\/em>\n<em>(<\/em>\n\n<em>&nbsp; &nbsp; &nbsp; &nbsp; button viewportFrontButton \"Front\" width:50 height:30 pos:[0,0]<\/em>\n<em>&nbsp; &nbsp; &nbsp; &nbsp;on viewportFrontButton pressed do<\/em>\n<em>&nbsp; &nbsp; &nbsp; &nbsp;(<\/em>\n<em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;actionMan.executeAction 0 \"40060\"&nbsp;<\/em>\n<em>&nbsp; &nbsp; &nbsp; &nbsp; )<\/em>\n\n<em>)<\/em>\n\n<em>RolloutFloterTemplate = newrolloutfloater \"Function\" 175 600<\/em>\n<em>addrollout RolloutTemplate RolloutFloterTemplate<\/em><\/blockquote>\nQuesto qui sopra \u00e8 lo script generale , qui di seguito analizzer\u00f2 riga per riga del codice.\n<blockquote><em>try ( closeRolloutFloater RolloutFloterTemplate) catch()<\/em><\/blockquote>\nLa parte di codice qui sopra riportata non fa altro che: nel caso in cui la finestra del tool sia gia aperta , fai in modo che si chiuda e ne venga aperta un altra. Senza questa parte del codice il software ogni volta che si lancia l'applicazione, intesa come il nostro codice, creer\u00e0 una nuova istanza del codice. Se l'obiettivo \u00e8 lanciare in continuazione varie finestre contenente il risultato visivo del nostro codice basta eliminare questa parte qui sopra di codice. Ovviamente il consiglio \u00e8 di mantenere tale parte del codice.\n\nContinuando l'analisi del codice qui sopra ed entrando nello specifico con il comando closeRolloutFloater si impone al software di chiudere la finestra della nostra applicazione , applicazione che viene indicata con il nome RolloutFloterTemplate.\n\n<strong>N.B.:<\/strong>&nbsp;Facendo un piccolo salto in avanti nel codice , serve far notare come RolloutFloterTemplate sia il nome della nostra finestra che contiene il risultato visivo del presente codice. Da notare in oltre che il nome della finestra dell'applicazione riceva le specifiche di dimensioni e creazione della finestra stessa alla fine del codice.\n\nLa successiva parte del codice:\n<blockquote><em>rollout RolloutTemplate \"View\"<\/em><\/blockquote>\nNon \u00e8 altro che un \"riquadro\/indice\" visivo presente nella finestra dell'applicazione. Tale rollout sar\u00e0 il contenitore del nostro pulsante che il restante codice crea. Entrando nello specifico la parola rollout \u00e8 il metodo&nbsp;del sistema utile a realizzare appunto tale \"indice\" , RolloutTemplate \u00e8 il nome assegnalo a tale metodo mentre \"View\" (scritto fra doppi apici) \u00e8 il nome che visualizzeremo a video.\n\nIl codice successivo:\n<blockquote><em>button viewportFrontButton \"Front\" width:50 height:30 pos:[0,0]<\/em><\/blockquote>\nNon fa altro che realizzare un pulsante con annessi dati di personalizzazione. Analizzando nello specifico il codice : button \u00e8 il \"comando\" utile per realizzare il pulsante , viewportFrontButton \u00e8 il nome del button (utile successivamente per essere richiamato nella parte successiva del codice) , \"Front\" (fra doppi apici) nonn \u00e8 altro che il testo che vedremo all'interno del pulsante , width: - height: rappresentano le dimensioni del pulsante , mentre la pos: indica la posizione del pulsante all'interno dell'applicazione. Lasciando [0,0] all'interno dei dati il pulsante verr\u00e0 posto in alto a sinistra nella finestra della nostra applicazione , se scrivessimo [50,0] il pulsante si sposterebbe verso destra di 50px ma come altezza di posizionamento rimarrebbe uguale, se invece scrivessimo [0,50] il pulsante tornerebbe in alto a sinistra ma abbassato di 50px rispetto alla posizione precedente.\n\nIl codice :\n<blockquote><em>on viewportFrontButton pressed do<\/em>\n<em>(<\/em><\/blockquote>\nEssenzialmente dichiara che : se il pulsante viewportFrontButton (come specifico del pulsante sopra creato) viene cliccato (pressed) il software deve eseguire (do) il codice che segue:\n<blockquote><em>actionMan.executeAction 0 \"40060\"<\/em><\/blockquote>\nQuesto \u00e8 il comando reperito semplicemente sfruttando il comandod a tastiera F11 che apre il MAXScript Listerner.\n\nPer ogni sopecifico comando consiglio di leggersi la documentazione di riferimento dell'<a title=\"Autodesk 3Ds Max Script\" href=\"http:\/\/docs.autodesk.com\/3DSMAX\/14\/ENU\/MAXScript%20Help%202012\/\" target=\"_blank\" rel=\"noopener noreferrer\">Autodesk 3Ds MAX Script<\/a>&nbsp;o prendere il codice utile direttalmente dalla finestra&nbsp;MAXScript Listerner.\n\nIn fine rimangono le ultime due righe di codice da analizzare:\n<blockquote><em>RolloutFloterTemplate = newrolloutfloater \"Function\" 175 600<\/em><\/blockquote>\nCome gia scritto in precedenza RolloutFloterTemplate \u00e8 la variabile di riferimento che serve a realizzare la finestra della nostra applicazione. Si pu\u00f2 notare come il metodo&nbsp;newrolloutfloater serve appunto per realizzare il nostro contenitore visivo , \"Function\" \u00e8 il nome generale della finestra mentre i dai 175 e 600 si riferiscono rispettivamente a laghezza (width) e altezza (height) della finestra.\n\nL'ultima parte del codice :\n<blockquote><em>addrollout RolloutTemplate RolloutFloterTemplate<\/em><\/blockquote>\nNon fa altro che aggiungere al RolloutFloterTemplate l'\"indice\" RolloutTemplate mediante il metodo addrollout , associando cosi alla finestra del nostro tool l'indice che contiene il pulsante.\n\nQui di seguito si pu\u00f2 vedere il risultato visivo:\n\n<a href=\"http:\/\/www.netkingz.com\/en\/wp-content\/uploads\/2019\/08\/2w34avn.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6119\" src=\"http:\/\/www.netkingz.com\/en\/wp-content\/uploads\/2019\/08\/2w34avn.jpg\" alt=\"\" width=\"209\" height=\"156\"><\/a>\n\nUna volta terminato il codice si consigli adi salvarlo in<em>&nbsp;C:\\Program Files\\Autodesk\\3ds Max 2015\\scripts<\/em>\n\ncosi che andando a cliccare sulla voce Run Script ... nel menu MAXScript posto solitamente in alto , si possa direttamente lanciare ed eseguire il nostro codice.\n\n<strong>N.B.:<\/strong>&nbsp;Cliccando da tastier Ctrl + E si eseguir\u00e0 in modo rapido il codice realizzato.\n\n<strong>REALIZZIAMO UNO SCRIPT MCR (.mcr)<\/strong>\n\nCome ho scritto all'inizio di questo articolo vedremo qui di seguito come realizzare uno script integrato nel software.\n<blockquote><em>macroScript netkingZ3DsViewFront<\/em>\n<em>category:\"Custom\"<\/em>\n<em>buttontext:\"F\"<\/em>\n<em>toolTip:\"\"<\/em>\n<em>(<\/em>\n<em>&nbsp; &nbsp; on execute do<\/em>\n<em>&nbsp; &nbsp; (<\/em>\n<em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; actionMan.executeAction 0 \"40060\"&nbsp;<\/em>\n<em>&nbsp; &nbsp; &nbsp;)<\/em>\n<em>)<\/em><\/blockquote>\nCome fatto per il precedente codice analizzer\u00f2 anche questo riga per riga , ricordando che per realizzare questo codice servir\u00e0 sempre andare su New Script nel menu MAXScript.\n\nAnalizziamo la prima parte del codice:\n<blockquote><em>macroScript netkingZ3DsViewFront<\/em><\/blockquote>\nmediante il metodo macroScript si realizzer\u00e0 la \"finestra di contenimento\" del nostro tool , mentre in questo specifico caso il nome della nostra applicazione sar\u00e0&nbsp;netkingZ3DsViewFront.\n\n<strong>N.B.:<\/strong>&nbsp;Mi pare scontato dire che il nome assegnato pu\u00f2 essere cambiato come meglio si crede.\n\nContinuando l'analisi:\n<blockquote><em>category:\"Custom\"<\/em><\/blockquote>\nAltro non \u00e8 che la specifica della categoria dove il codice deve essere \"inserito\" e dove \u00e8 possibile ritrovarlo.\n\nQui devo aprire una doverosa parentesi. Andando nel menu in alto Customize e pi\u00f9 precisamente alla voce Customize User Interface... potremo notare come si aprir\u00e0 una finestra dedicata alla personalizzazione dell'interfaccia del software 3Ds Max. In alto nella finestra si potr\u00e0 notare la voce ToolBar con un successivo elenco di categorie. Queste categorie saranno appunto le voce in relazione al codice qui sopra riportato.\n\nPer comodit\u00e0 ho deciso di utilizzare la categoria Custom.\n\n<strong>N.B.:<\/strong>&nbsp;Da notare che la dicitura Custom \u00e8 diverso dallo scrivere custom (con la \"c\" minuscola) , quindi il consiglio che do \u00e8 quello di scrivere in modo corretto i nomi delle categorie.\n\nIl codice successivo:\n<blockquote><em>buttontext:\"F\"<\/em><\/blockquote>\nNon fa altro che assegnare un testo al nostro pulsante , mentre il toolTip:\"\" sar\u00e0 un riempitivo di informazioni extra al passaggio del mouse sul pulsante senza che esso sia stato cliccato.\n\non execute do\n(\n\nNon fa altro che imporre al software di eseguire il codice contenuto al suo interno una volta cliccato sul pulsante.\n\nCodice che \u00e8 identico a quello che ho ripreso dal MAXScript Listener e che ho citato gia in precedenza nel paragrafo riguardante il tool realizzato in estensione MS:\n<blockquote><em>actionMan.executeAction 0 \"40060\"<\/em><\/blockquote>\nL'ultima azione da compiere \u00e8 quella di realizzare \"fisicamente\" la finestra dove allocare il nostro tool.\n\nPrima di fare questo ricordo sempre di salvare il file in questo percorso:\n\n<em>C:\\Users\\**NOMEUTENTE**\\AppData\\Local\\Autodesk\\3dsMax\\2015 - 64bit\\ENU\\usermacros<\/em>\n\ncon estenzione del file .mcr .\n\nCome scritto poco sopra consiglio di seguire questo procedimento per realizzare la finestra di contenimento del vostro tool:\n<ol>\n \t<li><em>Cliccare su Customize User Interface nel menu in alto alla voce Customize<\/em><\/li>\n \t<li><em>Nella nuova finestra nel menu in alto cliccare su ToolBars&nbsp;<\/em><\/li>\n \t<li><em>All'interno di questa sezione cercare alla voce Category la nostra categoria dove abbiamo \"allocato\" il tool (nel nostro esempio la categoria \u00e8: Custom)<\/em><\/li>\n \t<li><em>All'interno della categoria selezionata , se avrete salvato correttamente il file e senza errori di scrittura e compilazione, dovreste ritrovare il nome del macroscrip , cio\u00e8 nel nostro esempio&nbsp;netkingZ3DsViewFront<\/em><\/li>\n<\/ol>\nUna volta compreso dove si trova il nostro tool sar\u00e0 necessario creare il nostro pannello:\n<ol>\n \t<li><em>Sempre rimanendo nella finestra ToolBars sulla destra della finestra possiamo notare il pulsante New ... che serve per creare appunto un nuovo pannello<\/em><\/li>\n \t<li><em>Cliccliamo sul pulsante New ... e diamo un nome al nostro pannello.<\/em><\/li>\n \t<li><em>Noteremo che ci verr\u00e0 creata una finestra che se spostata pu\u00f2 essere ancorata a vari punti della UI del software<\/em><\/li>\n \t<li><em>Adesso baster\u00e0 selezionare e trascinare il nostro tool all'interno di quella finestra per associarci il tool da noi realizzato.<\/em><\/li>\n<\/ol>\nLa speranza \u00e8 quella che questo piccolo tutorial scritto possa aiutare qualcuno ad intraprendere qualche script e comprendere il funzionamento di 3Ds Max Script .","protected":false},"excerpt":{"rendered":"<p>Il presente tutorial riporter\u00e0 scrits base per realizzare tools utili su 3Ds Max. Il linguaggio utilizzato \u00e8 3DS Max Script. Richieste conoscenze base di programmazione. Iniziamo con lo spiegare come alcune differenze base fra quello che si desidera ottenere. Esistono due &#8220;tipologie&#8221; di tool ottenubili, quello che li differenzia \u00e8 essenzialmente la UI (User Interface) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6122,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[52],"tags":[],"class_list":["post-6117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-3d"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"http:\/\/www.netkingz.com\/en\/wp-content\/uploads\/2016\/05\/28ibz21.jpg","post_mailing_queue_ids":[],"_links":{"self":[{"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/posts\/6117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/comments?post=6117"}],"version-history":[{"count":2,"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/posts\/6117\/revisions"}],"predecessor-version":[{"id":6475,"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/posts\/6117\/revisions\/6475"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/media\/6122"}],"wp:attachment":[{"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/media?parent=6117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/categories?post=6117"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.netkingz.com\/en\/wp-json\/wp\/v2\/tags?post=6117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}