ArchiRADAR Forum
ArchiRADAR Forum =>
GDL => Topic aperto da: ilovedoom - 25 Gennaio 2010, 16:40
-
salve a tutti!
sono in una fase critica nella programmazione con gdl per poter fare un bell'oggettino che permetterebbe di avere delle scatole di quantità variabile, da inserire, disposte su un'area definita in larghezza e lunghezza.
di per sè mi sembrava semplice applicando il for_next loop ma come risultato non mi dava il numero esatto di scatole ma solo un completamento della questione con l'errore di farne sino a completamento di riga.
a riflettere mi sembra interessante il fatto che si possano fare righe ma una volta andando a capo il risultato sembra che possa essere moltiplicarle solo completate. come è possibile???
al momento saltando di forum in forum sono arrivato a questo punto
obj_width = 3
obj_lenght = 2
obj_height = 0.5
obj_total_number = 8
area_width = 10
area_length = 15
area_thickness = 0.1
x_objcts_on_area = int (area_width/obj_width)
y_objects_rows_on_area = int (obj_total_number/x_objcts_on_area)
for k = 0 to y_objects_rows_on_area step 1
for j = 1 to x_objcts_on_area step 1
block obj_width,obj_lenght,obj_height
addx obj_width
next j
del j-1
addy obj_lenght
next k
del top
mulz -1
block area_width,area_length,area_thickness
questo è quello che mi hanno suggerito ma non è propriamente l'idea iniziale.
suggerimenti a riguardo? :bandierabianca:
-
obj_width = 3
obj_lenght = 2
obj_height = 0.5
obj_total_number = 8
area_width = 10
area_length = 15
area_thickness = 0.1
x = int (area_width/obj_width)
print x
y = int (obj_total_number/x)
print y
for k = 0 to y
for j=1 to x
brick 3,2,0.5
addx obj_width
next j
del j-1
addy obj_lenght
next k
del top
mulz -1
block area_width,area_length,area_thickness
-
scusami ilovedoom... e benvenuto
la risposta precedente è dovuta a bizze di cpu che a volte mi fanno essere troppo stringato
in sostanza non ho capito bene cosa vorresti ed allora ho copiato ed incollato il tuo listato e l'ho fatto funzionare perchè conteneva alcune incompatibilità almeno sulla versione di archicad che uso
magari dacci un cenno
ciao,
claster
-
Anche io, come altri, non sono sicuro di aver capito esattamente il risultato che vuoi ottenere, ma immagino che si aquesto: dato un numero n di elementi, e uno spazio in cui sistemarli, mettere tutti quelli che ci entrano in una fila, poi passarea alla fila successiva, e così via, fino a terminare gli elementi. Secondo i casi, l'ultima fila può essere completa, oppure no.
Prova a sostituire l'intero ciclo FOR...NEXT del tuo script con questo qui:
FOR k=1 TO obj_total_number
BLOCK obj_width, obj_lenght, obj_height
ADDx obj_width
IF k MOD x_objcts_on_area <.001 THEN
DEL x_objcts_on_area
ADDy obj_width
ENDIF
NEXT k
-
:bowing: mi inchino a tale aiuto!
certe parti del linguaggio gdl mi sfuggono tra le pagine della reference guide e dei vari cookbook che sto studiando!
ora funziona! :shoked02:
-
[...]
FOR k=1 TO obj_total_number
BLOCK obj_width, obj_lenght, obj_height
ADDx obj_width
IF k MOD x_objcts_on_area <.001 THEN
DEL x_objcts_on_area
ADDy obj_width
ENDIF
NEXT k
volevo capire il MOD utilizzato. sulla guida non compare e neanche sul cookbook. a cosa si riferisce? :blink:
oggi leggo degli altri libri e incrocio i dati che non ho con me.
-
MOD è la funzione matematica MODULO, che restituisce il resto di una divisione.
Per esempio, il risultato di (44 MOD 6) è 2, perchè, come dice la canzone:
44 gatti, in fila per sei, col resto di DUE... :laughing:
Si potevano usare metodi più semplici, magari con una variabile da usare come contatore, ma questo mi è sembrato il metodo più pulito.
Per essere rigorosi, bisognerebbe cambiare riga quando il resto è zero. Ma per evitare problemi dovuti agli arrotondamenti (anche se non dovrebbero esserci) di solito si fa il confronto con un numero abbastanza piccolo, ma diverso da zero (.001)
-
stavo quasi ignorando la matematica....
mi leggerò meglio i capitoli oggi.
comunque ora anche se non sembra pulito a parer tuo è molto rapido nella creazione dell'oggetto. prima ci riflettava tanto.
-
[....]
ADDy obj_width
[...]
riguardando il modello mi era venuto il dubbio....si erano invertiti i dati :2funny:
ADDy obj_obj_lenght
così si distanziano esattamente della loro lunghezza e non di larghezza...sennò sarebbero stati a base quadrata :wondering:
-
giusto. :D
ADDy obj_obj_lenght
-
ora ne ho uno più critico di problema ma con un altro script..... :specchio:
appena riesco a semplificarlo ci riprovo!