Gomez Napisano 10 Luty 2009 Napisano 10 Luty 2009 Licze na to ze znajdzie sie jakis cwaniak ktory wie ;) Jak w js odczytac nazwe zaznaczonego obiektu i zadeklarowac ja jako zmienna?
streaker Napisano 10 Luty 2009 Napisano 10 Luty 2009 Przecież mamy całą klase selection - a tam wystarczy: var nazwa = selection.item(0).name selection.item(0) zwraca zaznaczony obiekt (X3DObject), a jednym z jego właściwości jest Name (albo FullName) 1
Gomez Napisano 11 Luty 2009 Autor Napisano 11 Luty 2009 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.
streaker Napisano 11 Luty 2009 Napisano 11 Luty 2009 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
Rekomendowane odpowiedzi
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ę