- 15/06/2009 11:13
Hola amigos. Estoy haciendo un script en 3ds Max que elija un poliedro de un grupo, y lo combine con otros a partir de un array bidimensional que contiene las coordenadas para esto. No cualquier poliedro de los que tengo en la escena se combina con el resto, y cuando establezco las condiciones de if then do me arroja un error:
- Syntax error: at if, expected while.
In line: if (.
El código es el siguiente (para ser ejecutado requiere de un archivo csv y un archivo max sobre el cual se corre el script, pero no creo que sean necesarios para entender el problema. Si fueran necesarios, avísenme y los subo a rapidshare.
Nota: el error ocurre en la línea 81, que es la que resalto en dentro del código.
Codigo:
[spoiler].
[code]- Parámetros variables.
Repeticiones = 10 - Cantidad de objetos que copiara el script en total.
Fin parámetros variables.
Archivo_abierto = openfile c:/matriz posiciones lista.csv - Abre archivo con coordenadas como string.
Objetos = $ as array - Crea el array objetos con los elementos seleccionados.
Array_coordenadas = #() - Crea array vacío en donde meter coordenadas de objetos como point3.
Array_provisorio = #() - Crea array vacío en donde meter coordenadas de objetos como string.
Array_subcoordenadas = #().
Fn copia_poliedro poliedro posición = t(copy poliedro tpoliedro, pues = posición tappend objetos_nuevos poliedro t).
Función para copiar y mover a coordenadas correctas un nuevo poliedro.
While (not eof archivo_abierto) do t(t f = readline archivo_abierto array_archivo = filterstring f, for i in array_archivo do (t = filterstring i * append array_provisorio ) t).
Le el archivo csv con coordenadas, y genera array bidimensional con coordenadas como string.
For x = 1 todo array_provisorio, count do t(t for i in array_provisorio[x] do (t = array_provisorio[x][1] que = array_provisorio[x][2] = execute n = execute k array_subcoordenadas = #(m, n) ) appendifunique array_coordenadas array_subcoordenadas t).
Crea array bidimensional con coordenadas como point3.
Objetos_nuevos = #() - Crea array vacío en donde meter los objetos nuevos.
For I in objetos [random 1 objetos, count] do t(t copia_objeto = copy i append objetos_nuevos copia_objeto - Se mete el nuevo objeto a un array para obtener sus coordenadas posteriormente copia_objeto, pues = [0,0,0] - Mueve el objeto nuevo a coordenadas 0,0,0 txt = copia_objeto, name - Crea string para identificar el nombre del objeto t).
Loop para copiar el primer poliedro al azar y situarlo en las coordenadas 0,0,0 t.
For = 1 todo repeticiones do - Loop que realizara la acción de copiar un poliedro la cantidad de repeticiones que se dese t(t objeto_base = objetos_nuevos [random 1 objetos_nuevos, count] - Elige un objeto base del array de objetos_nuevos (para el primer loop será el objeto copiado anteriormente) txta = objeto_base, name - Le asigna a la variable txta el nombre del objeto seleccionado for i in objetos [random 1 objetos, count] do - Selecciona un objeto random del array de objetos para copiar y mover junto al objeto seleccionado anteriormente (t txtb =, name - Asigna a la variable txtb el nombre del objeto seleccionado posición_referencia =, Pos if (substring 1 1 txta == a) then do - Si el primer objeto seleccionado contiene en su nombre la letra a (o sea si es el dodecaedro) hacer lo siguiente (t if (substring 1 1 txtb == a) then continúe - Si el segundo objeto seleccionado contiene la letra a en su nombre, continuar pues no se combinan if (substring 1 1 txtb == b) then continúe - Lo mismo si contiene la letra b if (substring 1 1 txtb == c) then do - Si contiene la letra c, hacer lo siguiente (t copia_poliedro i (posición_referencia + array_coordenadas [3][random 1 2]) - Llama a la función copia_poliedro, declarada anteriormente append objetos_nuevos copia_poliedro - Mete el objeto en el array objetos_nuevos, para que después pueda ser seleccionado como objeto_base ) if (substring 1 1 txtb == d) then do ( copia_poliedro i (posición_referencia + array_coordenadas [4][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == f) then do (t copia_poliedro i (posición_referencia + array_coordenadas [5][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == g) then do (t copia_poliedro i (posición_referencia + array_coordenadas [6][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == h) then do (t copia_poliedro i (posición_referencia + array_coordenadas [7][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == i) then do (t copia_poliedro i (posición_referencia + array_coordenadas [8][random 1 2]) append objetos_nuevos copia_poliedro ) ) if (substring 1 1 txta == b) then do (t if (substring 1 1 txtb == b) then continue if (substring 1 1 txtb == a) then do (t copia_poliedro i (posición_referencia + array_coordenadas [9][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == c) then do (t copia_poliedro i (posición_referencia + array_coordenadas [11][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == d) then do (t copia_poliedro i (posición_referencia + array_coordenadas [12][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == e) then do (t copia_poliedro i (posición_referencia + array_coordenadas [13][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == f) then do (t copia_poliedro i (posición_referencia + array_coordenadas [14][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == g) then do (t copia_poliedro i (posición_referencia + array_coordenadas [15][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == h) then do (t copia_poliedro i (posición_referencia + array_coordenadas [16][random 1 2]) append objetos_nuevos copia_poliedro ) ) if (substring 1 1 txta == c) then do (t if (substring 1 1 txtb == c) then continue if (substring 1 1 txtb == a) then do (t copia_poliedro i (posición_referencia + array_coordenadas [17][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == b) then do (t copia_poliedro i (posición_referencia + array_coordenadas [18][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == d) then do (t copia_poliedro i (posición_referencia + array_coordenadas [20][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == e) then do (t copia_poliedro i (posición_referencia + array_coordenadas [21][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == f) then do (t copia_poliedro i (posición_referencia + array_coordenadas [22][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == g) then do (t copia_poliedro i (posición_referencia + array_coordenadas [23][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == h) then do (t copia_poliedro i (posición_referencia + array_coordenadas [24][random 1 2]) append objetos_nuevos copia_poliedro ) ) ) t) t[/code]
[/spoiler]. Saludos, y muchas gracias de antemano.
- Syntax error: at if, expected while.
In line: if (.
El código es el siguiente (para ser ejecutado requiere de un archivo csv y un archivo max sobre el cual se corre el script, pero no creo que sean necesarios para entender el problema. Si fueran necesarios, avísenme y los subo a rapidshare.
Nota: el error ocurre en la línea 81, que es la que resalto en dentro del código.
Codigo:
[spoiler].
[code]- Parámetros variables.
Repeticiones = 10 - Cantidad de objetos que copiara el script en total.
Fin parámetros variables.
Archivo_abierto = openfile c:/matriz posiciones lista.csv - Abre archivo con coordenadas como string.
Objetos = $ as array - Crea el array objetos con los elementos seleccionados.
Array_coordenadas = #() - Crea array vacío en donde meter coordenadas de objetos como point3.
Array_provisorio = #() - Crea array vacío en donde meter coordenadas de objetos como string.
Array_subcoordenadas = #().
Fn copia_poliedro poliedro posición = t(copy poliedro tpoliedro, pues = posición tappend objetos_nuevos poliedro t).
Función para copiar y mover a coordenadas correctas un nuevo poliedro.
While (not eof archivo_abierto) do t(t f = readline archivo_abierto array_archivo = filterstring f, for i in array_archivo do (t = filterstring i * append array_provisorio ) t).
Le el archivo csv con coordenadas, y genera array bidimensional con coordenadas como string.
For x = 1 todo array_provisorio, count do t(t for i in array_provisorio[x] do (t = array_provisorio[x][1] que = array_provisorio[x][2] = execute n = execute k array_subcoordenadas = #(m, n) ) appendifunique array_coordenadas array_subcoordenadas t).
Crea array bidimensional con coordenadas como point3.
Objetos_nuevos = #() - Crea array vacío en donde meter los objetos nuevos.
For I in objetos [random 1 objetos, count] do t(t copia_objeto = copy i append objetos_nuevos copia_objeto - Se mete el nuevo objeto a un array para obtener sus coordenadas posteriormente copia_objeto, pues = [0,0,0] - Mueve el objeto nuevo a coordenadas 0,0,0 txt = copia_objeto, name - Crea string para identificar el nombre del objeto t).
Loop para copiar el primer poliedro al azar y situarlo en las coordenadas 0,0,0 t.
For = 1 todo repeticiones do - Loop que realizara la acción de copiar un poliedro la cantidad de repeticiones que se dese t(t objeto_base = objetos_nuevos [random 1 objetos_nuevos, count] - Elige un objeto base del array de objetos_nuevos (para el primer loop será el objeto copiado anteriormente) txta = objeto_base, name - Le asigna a la variable txta el nombre del objeto seleccionado for i in objetos [random 1 objetos, count] do - Selecciona un objeto random del array de objetos para copiar y mover junto al objeto seleccionado anteriormente (t txtb =, name - Asigna a la variable txtb el nombre del objeto seleccionado posición_referencia =, Pos if (substring 1 1 txta == a) then do - Si el primer objeto seleccionado contiene en su nombre la letra a (o sea si es el dodecaedro) hacer lo siguiente (t if (substring 1 1 txtb == a) then continúe - Si el segundo objeto seleccionado contiene la letra a en su nombre, continuar pues no se combinan if (substring 1 1 txtb == b) then continúe - Lo mismo si contiene la letra b if (substring 1 1 txtb == c) then do - Si contiene la letra c, hacer lo siguiente (t copia_poliedro i (posición_referencia + array_coordenadas [3][random 1 2]) - Llama a la función copia_poliedro, declarada anteriormente append objetos_nuevos copia_poliedro - Mete el objeto en el array objetos_nuevos, para que después pueda ser seleccionado como objeto_base ) if (substring 1 1 txtb == d) then do ( copia_poliedro i (posición_referencia + array_coordenadas [4][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == f) then do (t copia_poliedro i (posición_referencia + array_coordenadas [5][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == g) then do (t copia_poliedro i (posición_referencia + array_coordenadas [6][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == h) then do (t copia_poliedro i (posición_referencia + array_coordenadas [7][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == i) then do (t copia_poliedro i (posición_referencia + array_coordenadas [8][random 1 2]) append objetos_nuevos copia_poliedro ) ) if (substring 1 1 txta == b) then do (t if (substring 1 1 txtb == b) then continue if (substring 1 1 txtb == a) then do (t copia_poliedro i (posición_referencia + array_coordenadas [9][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == c) then do (t copia_poliedro i (posición_referencia + array_coordenadas [11][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == d) then do (t copia_poliedro i (posición_referencia + array_coordenadas [12][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == e) then do (t copia_poliedro i (posición_referencia + array_coordenadas [13][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == f) then do (t copia_poliedro i (posición_referencia + array_coordenadas [14][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == g) then do (t copia_poliedro i (posición_referencia + array_coordenadas [15][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == h) then do (t copia_poliedro i (posición_referencia + array_coordenadas [16][random 1 2]) append objetos_nuevos copia_poliedro ) ) if (substring 1 1 txta == c) then do (t if (substring 1 1 txtb == c) then continue if (substring 1 1 txtb == a) then do (t copia_poliedro i (posición_referencia + array_coordenadas [17][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == b) then do (t copia_poliedro i (posición_referencia + array_coordenadas [18][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == d) then do (t copia_poliedro i (posición_referencia + array_coordenadas [20][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == e) then do (t copia_poliedro i (posición_referencia + array_coordenadas [21][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == f) then do (t copia_poliedro i (posición_referencia + array_coordenadas [22][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == g) then do (t copia_poliedro i (posición_referencia + array_coordenadas [23][random 1 2]) append objetos_nuevos copia_poliedro ) if (substring 1 1 txtb == h) then do (t copia_poliedro i (posición_referencia + array_coordenadas [24][random 1 2]) append objetos_nuevos copia_poliedro ) ) ) t) t[/code]
[/spoiler]. Saludos, y muchas gracias de antemano.