I Mobili

I mobili in Mobilia sono rappresentatati per un albero di sotto elementi, che rispecchiano abbastanza fedelmente la struttura di un mobile nella realtà

 


Gli Elementi

 

Per comprendere appieno come è memorizzato un elemento in Mobilia, ricorreremo ad un semplice esempio, realizzando un tavolo estremamente sobrio, composto solamente da cinque parallelepipedi: il piano d'appoggio e le quattro gambe, come nelle immagini sottostanti.

 

In linea di principio basterebbe descrivere matematicamente i cinque parallelepipedi, con le specifiche dimensioni e posizioni espresse sugli assi XYZ di uno spazio tridimensionale, per mettere un programma di grafica 3D nelle condizioni di disegnare il tavolo:

 
 dimensioni
 posizioni
x
y
z
x
y
z
 piano
 2000
20
1200
 0
800
0
 prima gamba
 30
800
30
 20
0
20
 seconda gamba
 30
800
30
 1800
0
20
 terza gamba
 30
800
30
 20
0
1000
 quarta gamba
 30
800
30
 1800
0
1000

 Nota: tra le molte convenzioni in uso per designare i tre assi, Mobilia utilizza la seguente:

X - da sinistra a destra,
Y - dal basso verso l'alto,
Z - da dietro verso davanti

Ogni elemento 'vive' nel suo sistema di coordinate locale, con tutti i suoi sottoelementi relativi allo (0,0,0) locale, questo sistema locale é poi riposizionato nel sistema di coordinate globali (quello della stanza).

Queste informazioni vengono fornite al programma CAD in vari modi, dipendenti dal programma in uso, con il mouse, la tastiera, una combinazione di entrambe, come superfici, o come solidi ecc, vedremo più avanti il metodo scelto da Mobilia per fornire queste informazioni.

Cosa accade, tuttavia, se vogliamo cambiare le dimensioni di questo semplice elemento? Accade che, con le informazioni di cui disponiamo, non siamo in grado di compiere questa basilare operazione in maniera automatica: dovremo modificare i dati relativi a ciascun parallelepipedo per ridimensionarlo e riposizionarlo in base alle nuove misure; invece quindi di dare un semplice comando del tipo "allunga il tavolo di venti centimetri", dovremo aggiornare la dimensione del piano e la posizione della seconda e della quarta gamba:

 
 dimensioni
 posizioni
x
y
z
x
y
z
 piano
 2200
20
1200
0
800
0
 prima gamba
 30
800
30
20
0
20
 seconda gamba
 30
800
30
2000
0
20
 terza gamba
 30
800
30
20
0
1000
 quarta gamba
 30
800
30
2000
0
1000

 

Questo è esattamente il tipo di problema che assilla chi opera nel campo dell'arredamento utilizzando i tradizionali programmi di CAD: una banale modifica ad un singolo elemento può comportare la necessità di dover correggere le informazioni di un numero spropositato di oggetti più o meno direttamente collegati.

Peggio ancora, se il mobile e' stato inserito nel programma come "simbolo", il suo ridimensionamento comporterà il ridimensionamento proporzionale di tutti gli elementi del mobile e delle loro posizioni relative. Nel nostro esempio, le gambe diventerebbero con una sezione di 20x22...


Peraltro, esistono ulteriori operazioni che un utente vorrebbe poter compiere senza tante complicazioni. Tra queste, l'attribuzione dei colori a specifiche componenti di un mobile. Qualora volessimo ad esempio colorare il piano del nostro tavolo in un normale CAD, dovremmo agire su ciascuna delle sei superfici rettangolari che formano la geometria del piano, o peggio ancora, spostandoli da un layer ad un latro, mentre sarebbe più semplice ed immediato impartire un comando del tipo "colora di blu il piano dell'elemento".

Altri problemi non direttamente risolvibili con normali CAD si trovano nelle varie informazioni codificate per ognuno degli sottoelementi, categorie, varianti, distinte, generazione di codici e prezzatura


Vediamo ora come Mobilia risolve questi problemi.

 

L'ingombro

Mobilia ragiona in termini di ingombro: un ideale parallelepipedo che avvolge l'intero elemento. Il tavolo del nostro esempio avrà un ingombro sugli assi XYZ pari rispettivamente a 2000 per 820 per 1200 millimetri.

L'ingombro assolve anche alla funzione di mantenere le informazioni che identificano l'elemento all'interno del catalogo e che hanno senso per l'elemento nella sua globalità: codice, descrizione, serie di appartenenza. Le varie parti che compongono un elemento (il piano ed ognuna delle quattro gambe, nel caso del nostro tavolo), sono sottoelementi contenuti all'interno dell'ingombro.


Ridimensionare un elemento in Mobilia significa semplicemente modificarne le dimensioni dell'ingombro ­ i vari sottoelementi si disporranno e si dimensioneranno di conseguenza in maniera automatica: il che corrisponde esattamente al modo di vedere le cose di chi deve disporre degli elementi di arredo in un ambiente.
Perché tutto funzioni correttamente, è necessario che ciascun sottoelemento sappia come reagire alle modifiche apportate alle dimensioni dell'ingombro.
Se, ad esempio, aumentiamo l'altezza dell'ingombro del tavolo, il piano non deve modificare le proprie dimensioni, ma deve invece apportare degli aggiustamenti alla propria posizione sull'asse delle Y; al contrario, ciascuna gamba non deve modificare la propria posizione, mentre è necessario piuttosto che cresca in altezza dello stesso numero di centimetri di cui è cresciuto l'ingombro.

Questo meccanismo é esteso ad altri livelli dell'albero dei sotto elementi (la modifiche delle dimensioni dell'ingombro provoca la modifiche delle dimensioni delle ante, che provoca la modifica degli elementi che compongono le cornici di queste e così via)
altre informazioni sui riposizionamenti possono essere trovate in Ridimensionamenti

Le informazioni su quale comportamento assumere quando l'ingombro cambia sono associate a ciascun sottoelemento -insieme agli altri dati utili come la geometria, le dimensioni, la posizione- nel momento in cui esso è creato.

 

Struttura degli elementi

Un elemento, come detto, è un insieme strutturato di più sottoelementi legati all'ingombro. Vediamo ora in dettaglio cosa implica questa affermazione.
Il tavolo del nostro esempio è visto da chi utilizza Mobilia come un singolo oggetto: esso viene inserito in una composizione, spostato, ridimensionato come un tutto unico. Tuttavia, esso si compone di un insieme di entità (sottoelementi) ben distinte: l'ingombro, il piano, le quattro gambe

.

 

L'ingombro svolge un ruolo particolare nella struttura di un mobile: esso è un sottoelemento al pari degli altri, e dunque è caratterizzato, come vedremo meglio in seguito, dagli stessi attributi dei sottoelementi; ma al tempo stesso, nella sua particolare posizione di superelemento, si fa carico anche di quegli attributi che caratterizzano il mobile nella sua interezza, ed è l'oggetto con cui l'utente generalmente interagisce.

 

 

I Sottoelementi

Non tutti i sottoelementi hanno lo stesso ruolo in Mobilia, ci sono con funzione grafica, con funzione produttiva, di appoggio, marcatori di qualche caratteristica del mobile ecc.

Le diverse funzioni dei sottoelementi sono determinate dai valori e assunti dalle varie proprietà del oggetto. Vedremo più avanti in dettaglio ciascuna di queste, qui accenneremo soltanto le più significative.

Categoria

E' la prima e la più importante delle suddivisioni degli sottoelementi, le varie categorie sono tra le altre

ed altre legate non al tipo di elemento ma bensì alla funzione svolta

Tipo di Grafica

Determina l'aspetto geometrico del elemento. Non tutti gli elementi hanno una rappresentazione geometrica, sia per scelte proggetuali (c'è un elemento cerniera per farlo comparire in Distinta Base, ma non c'è bisogno di disegnarlo) sia per la funzione svolta dall'elemento.

I tipi di geometria che un sottoelemento di Mobilia può avere si possono dividere in tre gruppi:

Ridimensionamento e Riposizionamento

Sono informazioni che controllano il comportamento di un sottoelemento in risposta a un cambiamento nelle dimensioni del loro superelemento.
La posizione di un sottoelemento é sempre relativa alla posizione del proprio superelemento: se il superelemento si sposta, si sposteranno in ugual misura tutti i suoi sottoelementi, in quanto cambia l'origine del sistema di coordinate degli sottoelementi.

Altri attributi

Ci sono altri attributi, molto specializzati, che controllano diversi aspetti del comportamento dei sottoelementi, per esempio: se sono colorabili o meno, se compaiono in distinta base, se formano una voce indipendente in ordine o preventivo, se appare nelle viste 3D o 2D ecc. molti di questi sono li' per risolvere situazioni molto particolari e' sono poco usati.


Snaps

Una delle caratteristiche che contribuiscono alla facilità d'uso di mobilia e' la semplicità con cui e' possibile comporre i diversi elementi di arredo.
Parte del merito di questa funzionalità e' dovuta a gli elementi snap o calamita.

Gli snap sono quelle freccette blu che appaiono nelle viste 2D di Mobilia e sono i punti di aggancio dei mobili.

Ci sono due tipi di snap, li chiameremo attivi e passivi; ogni elemento può avere uno o più snaps attivi e, nella versione attuale di Mobilia, un unico snap passivo. Gli snaps passivi non sono visibili in Mobilia

Gli snap sono concettualmente dei versori - elementi matematici con un origine e una direzione (vettori senza dimensione)- e il loro funzionamento consiste nel sovrapporre uno snap attivo ad uno passivo, in questa sovrapposizione é lo snap passivo a spostarsi, determinando la posizione finale del mobile a cui appartiene detto snap.

Questa posizione iniziale del mobile può essere poi modificata.

Non c'é bisogno che gli snaps siano definiti esplicitamente nell'elemento, se non ci sono Mobilia crea quelli di default:

 


Varianti

Come si é detto, i mobili in Mobilia sono rappresentati da una struttura ad albero.

Ci sono però certi nodi del albero che hanno delle caratteristiche particolari, sono le "Classi di Varianti" e le "Varianti".

La particolarità di questi nodi è che soltanto una variante all'interno di una classe di variante può essere attiva in un dato momento, Mobilia crea poi l'infrastruttura per poter cambiare quale delle varie varianti di una classe di variante é attiva.

Un mobile può avere un numero indeterminato di varianti, e queste a loro volta possono averne altre, creando in questo modo delle intere famiglie di mobili, magari quelle che condividono la stessa scocca ma si differenziano nella disposizione o modello di anta e cassetti (non c'e nessun legame o costrizione in questo).

L'immagine mostra la relazione tra l'albero del mobile e la sua rappresentazione in Mobilia

 

 

 


Colori e Materiali


Codici

Come già indicato, i mobili in mobilia hanno una struttura ad albero, composta da nodi. Ogni nodo ha , tra le altre cose, un codice e una descrizione.

Il codice e descrizione del nodo radice, (indicato in geppetto dal comando %HeadElement) sono il codice e la descrizione del mobile in Mobilia.

Abbiamo detto anche, che I mobili in Mobilia sono rappresentati da un albero di varianti, che rappresenta una famiglia di mobili, anta dx o sx, piuttosto che anta o cassetti... in generale queste varianti di un elemento hanno codici diversi, ma in mobilia, se come hanno un elemento radice comune, hanno il codice del elemento radice.

Per risolvere questo problema, e riuscire a codificare ogni elemento con un codice univoco, Mobilia usa un dizionario, dove la chiave di ricerca è il 'codice lungo delle varianti'. Il codice lungo delle varianti è la rappresentazione del percorso nel albero delle varianti del mobile che porta al mobile desiderato:
esempio:


codevars.png

in questo caso abbiamo 5 percorsi, ognuno dei quali porta ad un codice diverso, questi percorsi sono:

a questi percorsi possiamo abbinare i relativi codici, descrizioni e serie:

Percorso Codice Descrizione Serie
B32:Tre Cassetti B3C32 Base 3 Cassetti Basi
B32:Anta:Dx:Piena BAD32 Base Anta Dx Basi
B32:Anta:Dx:Vetro BVD32 Base Anta Vetro Dx Basi
B32:Anta:Sx:Piena BAS32 Base Anta Sx Basi
B32:Anta:Sx:Vetro BVS32 Base Anta Vetro Sx Basi


Questi dati saranno memorizzati, separati da tabulatori,  in un file che chiameremmo 'CodiciMobilia.csv'.

Mobilia mi da due strumenti per semplificare la gestione di questo file:
Nel menu Builder troviamo:

All'inserimento di un mobile, Mobilia calcola il percorso nell'albero corrispondente, lo cerca nella prima colonna e assegna al mobile il codice e descrizione presenti nelle colonne corrispondenti.

Se l'inserimento avviene digitando un codice, Mobilia fa il percorso inverso, cerca il codice nella seconda colonna e crea un mobile il cui percorso corrisponda a la prima colonna.

Usando quest'ultimo meccanismo, possiamo fare in modo che un elemento possa essere richiamato con piu codici (per esempio vogliamo poter richiamare l'elemento 'B3C32' battendo codice  'BC'), per fare questo basterebbe la aggiunta di una riga:

B32:Tre Cassetti BC Base 3 Cassetti Basi


cosi che quando scrivo 'BC' mobilia crea l'elemento desiderato, C'e però il problema che così facendo, l'elemento con percorso B32:Tre Cassetti adesso ha due codici possibili e non si sà quale sia quello giusto...

il trucco consiste nell aggiungere al percorso corrispondente al codice 'di comodo' un marcatore ':#'

(notare che nessuna variante puo chiamarsi '#' perché '#' è l'indicatore di commento in geppetto, quindi un commando del tipo
&descrizione:#
crea una descrizione vuota in quanto # viene considerato commento e non descrizione)

quindi la nostra riga aggiuntiva resterà in questa forma:


B32:Tre Cassetti:# BC Base 3 Cassetti Basi


Nell inserire 'BC' mobilia creerà un elemento B32:Tre Cassetti (ignorando ':#') che codificherà come  B3C32 usando il percorso nell'albero creato.

Tops

di default (&calcoloPrezzo:0)
i top cercano nel elenco dei codici un codice cosi composto:
#T.S90235
#T. prefisso costante
S &serie: del top
90 Larghezza del top in cm
2 Spesore del top in cm
35 Profondità del top in cm

quindi il file codici corrispondente  dovra essere:
codice lungo codice descrizione
#T.S90235 ABC Top 90 sp 2cm prof 35 
#T.S105235 CDE Top 105 sp 2cm prof 35
... ... ...

-------------------------------------------------


Listino

codice: ABC
colorClass del colore del top: 2
Codice del listino del top: ABC2
quindi il listino corrispondente dovra essere:
codice listino codice prezzo
ABC1 ABC 123,45
ABC2 ABC 234,56
... ... ...


Creazione di Nuovi Mobili

I mobili in Mobilia sono basati sul lunguaggio Geppetto; per saperne di più leggete "I mobili in geppetto".