Skocz do zawartości

skrypty js w XSI, kilka pytan


Gomez

Rekomendowane odpowiedzi

  • Odpowiedzi 3
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

Dzięki wielkie :) Mam jeszcze kilka problemów z tym skryptem.

 

Skrypt wygląda tak

*/ 
ActorXSetValue("outputfolder", "c:\\temp");
ActorXSetValue("meshfilename", "mySphere");
ActorXSaveMesh();
*/


var ObjName = selection.item(0).name;  // Przypisuje wyselekcjonowany obiekt do zmiennej ObjName


FreezeObj(null, null, siUnspecified);
ResetTransform(null, siCtr, siSRT, siXYZ);	

// Exportuje obiekt do .OBJ

ObjExport("C:\\export\\" + ObjName + ".obj", null, null, null, null, null, null, null, null, null, 0, false, null, null, false);

// Wybiera ponownie obiekt + kolizje o tej samej nazwie co obiekt, z prefixem UCX_

SelectObj(ObjName, null, true);
AddToSelection("UCX_" + ObjName, null, true);


// Ustawia parametry ActorX

// ActorX(); to chyba niepotrzebne, otwiera okno ActorX
ActorXSetValue("obeyhardedges");
ActorXSetValue("nopopups");
ActorXSetValue("selectedonly");
ActorXSetValue("geometrynameasfilename");
ActorXSetValue("meshfilename", ObjName);
ActorXSetValue("outputfolder", "C:\\export");
ActorXSetValue("defaultpath", "C:\\export\\" + ObjName + ".ase");
ActorXExportStaticMesh();


// Otwiera nowa scene zeby uniknac problemow przy wypalaniu AO
NewScene(null, null);


// Importuje wyeksportowany wczesniej obiekt

SetValue("preferences.scripting.cmdlog", false, null);
ObjImport("C:\\export\\" + ObjName + ".obj", 1, 0, true, true, false, true);

SelectObj("ObjName", null, true);


// Przypisuje do obiektu shader Constant i podpina AO

ApplyShader("$XSI_DSPRESETS\\Shaders\\Material\\Constant.Preset", null, null, siUnspecified, siLetLocalMaterialsOverlap);
CreateShaderFromPreset("$XSI_DSPRESETS\\Shaders\\Material\\XSIAmbientOcclusion.Preset", "Sources.Materials.DefaultLib.Material", null);
SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Material.XSIAmbientOcclusion", "Sources.Materials.DefaultLib.Material.Constant.color", false);


// Dodaje Rendermape i ustawia domyslne parametry

AddProp("RenderMap", null, siDefaultPropagation, null, null);
SetValue("ObjName.RenderMap.resolutionx", "512", null);
SetValue("ObjName.RenderMap.supersampling", 3, null);
SetValue("ObjName.RenderMap.imagefilepath", "C:\\export\\tx_export_test_ao", null);
SetValue("ObjName.RenderMap.imageformat", "bmp", null);
SetValue("ObjName.RenderMap.attribute", 3, null);
RegenerateMaps("ObjName.RenderMap", null);

// Otwiera poprzednio otwarta scene z obiektami (do zrobienia: przypisac nazwe otwartej sceny do zmiennej)

OpenScene("C:\\Softimage\\projekty\\kopalnia\\Scenes\\export_test.scn", null, null);

 

Wszystko działa ale...

1. Przed wyeksportowaniem do .ase pyta pod jaką nazwą zapisać plik chociaż powinien zapisać pod nazwą którą zwraca zmienna ObjName.

 

2. Druga sprawa jest poważniejsza. Chcę żeby po uruchomieniu skryptu wyświetliło się okno gdzie można zmienić różne parametry.

Na razie udało mi sie zrobić coś takiego

// Ustawia parametry exportu OBJ w oknie wlasciwosci do zmiennych

var oPSet = Application.ActiveSceneRoot.AddProperty("CustomProperty", false, "ExportMaster");

oPSet.AddParameter3("ExportMat", siBool );
oPSet.Addparameter3("ExportUV", siBool );
oPSet.AddParameter("Filename", siString);

// Ustawia PPGitems na layoucie okna wlasciwosci

var oPPGLayout = oPSet.PPGLayout;
var oParamBoo = oPPGLayout.AddItem("Exportmat", "ExportMat", siControlBoolean);
var oParamBoo = oPPGLayout.AddItem("ExportUV", "ExportUV", siControlBoolean);
var oParamStr = oPPGLayout.AddItem("Filename", "Filename", siControlString);

// zmniejsza szerkosc dla checkboxa 

oParamBoo.SetAttribute(siUIWidthPercentage, "50");


// Ustawia filtr dla wyboru plików (Filename)

oParamStr.SetAttribute(siUIFileFilter, "Wavefront OBJ Files (*.obj)");

 

Nie wiem czy działa bo nie mam pojęcia co zrobić z tym kodem, jak wywołać okno Custom Property Page przy uruchomieniu skryptu. To tyle co znalazłem w dokumentacji. Kumam podstawowe koncepcje programowania ale programowaniem się nie zajmuje. Chciałem to trochę ogarnąć żeby samemu móc pisać proste skrypty. To jest pierwsza próba i, mimo że ogólnie działa, to jednak wychodzi na to że porwałem się z motyką na słońce.

Odnośnik do komentarza
Udostępnij na innych stronach

Ok, no to tak:

przy eksporcie do .ase (jak wywołujesz funkcje ActorXExportStaticMesh()) - to w niej samej może być otwarcie okna zapisu (nie wiem, tak przypuszczam), sprawa druga - ja to robie w ten sposób, że ten drugi kod zapisuje jako funkcję i w odpowiednim momencie ją wywołuję, a pobrane wyniki zwracam jako tablice do głównej funkcji (metoda z treningu 3dtutorial.com Getting Started with Scripting), jak to wygląda możesz zobaczyć np. tutaj: http://max3d.pl/forum/showthread.php?t=55976

 

A tak ogólnie to polecam to: http://www.redi-vivus.com/ i ściągnąć wspomniany trening jeśli jeszcze go nie masz (sam jestem w środku i jak tylko będę miał trochę więcej czasu to wracam żeby dokończyć, bo materiał pierwszorzędny), jeśli jakimś cudem nie wiesz o co chodzi, to tu masz wytłumaczone: http://community.softimage.com/showthread.php?t=3042

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności