Witam.
Potrzebuje napisać skrypt który importuje i rozmieszcza na scenie obiekty zdefiniowane w pliku(custom format .sce(textowy)), a właściwie prymitywnym drzewie hierarchicznym plików.
Budowa pliku(znaczenia znaczników chyba nie muszę tłumaczyć):
plik scena.sce:
geomobj teren2_1_1
file "scena\teren\teren2_1_1.obj" 512 1024
pos -256 -256
child_lod 0 768
dist cheby xz
xref "scena\sceterenu\teren1_1_1.sce"
xref "scena\sceterenu\teren1_1_2.sce"
xref "scena\sceterenu\teren1_2_1.sce"
xref "scena\sceterenu\teren1_2_2.sce"
end
....
plik teren1_1_1.sce:
geomobj teren1_1_1
file "scena\teren\teren1_1_1.obj" 256 512
pos -384 -384
child_lod 0 384
dist cheby xz
xref "scena\rosliny\rosliny1_1_1.sce"
end
.....
plik rosliny1_1_1.sce:
geomobj OB_TRAWA
file "scena\obiekty\trawa.obj" 0.0 50
rot 0 56 0
scl 0 0 0
pos -492 33.8314 -336
dist euclid
end
geomobj OB_DRZWEO
file "scena\obiekty\drzewo.obj" 0.0 150
rot 0 37 0
scl 0 0 0
pos -492 19.4751 -310
dist euclid
end
geomobj OB_KRZEW
file "scena\obiekty\krzew.obj" 0.0 100
rot 0 12 0
scl 0 0 0
pos -488 48.7808 -426
dist euclid
end
.........
itd itp
skrypt (formatowanie kodu się kompletnie sypie jak go wklejam ale może ktoś dojdzie co i jak):
(
fn openSCE fileName yep =
(
f = openfile (fileName)
--f = openfile ("d:\scena\scena\rosliny\rosliny1_1_1.sce")
if f == undefined then
(
MessageBox "nie wczytalem"
)
if f != undefined then
(
MessageBox fileName
while not (eof f) do
(
l = readline f
lf = filterString l " "
lname = ""
if yep=="true" then
(
if lf[1] == "geomobj" then
(
lname = lf[2]
)
if lf[1] == "file" then
(
local plugins = importerPlugin.classes
local pluginName = Wavefront_Object
if findItem plugins ObjImp != 0 then
(pluginName = ObjImp)
--MessageBox "file"
--braclf =filterString lf[2] "\""
s1 =lf[2]
bracss=filterString s1 "\""
importFile (bracss[1]) #noPrompt using:pluginName
for i in selection do i.name = lname --max select none
)
if lf[1] == "pos" then
(
if (lf.count)==4 then
(
X=lf[2]as Float
Y=lf[3]as Float
Z=lf[4]as Float
move $ [Z,-X,Y]
)
else
(
X=lf[3]as Float
Y=lf[2]as Float
move $ [X,-Y,0]
)
)
) ---yep yep yep
if lf[1] =="xref" then
(
s1 =lf[2]
bracss=filterString s1"\""
if matchPattern s1 pattern:"rosliny" then
(
openSCE bracss[1] "true"
)
else
(
openSCE bracss[1] "no"
)
)
)
close f
)
)
--openSCE "scena\\rosliny\\rosliny1_1_1.sce" "true"
--openSCE "scena\rosliny1_1_1.sce" "true"
openSCE "scena\\scena.sce" "true"
)
Skrypt czyta pojedyncze pliki bez problemu. Nie działa jednak już gdy jest wykonany w rekursji-pliki się otwierają ale chyba nic z nich nie jest czytane. Wydaje mi się że maxscrypt poze mieć problemy z czytaniem z wielu plików na raz... Albo po prstu jest coś o czym nie wiem i nie mogę znaleźć. Foldery są zdefiniowane poprawnie otwiera wszystkie pliki ale żadne operacje nie są wykonywane.