public Trave(Nodo n1, Nodo n2, int numeroTrave, string nomeTrave) : base(numeroTrave, nomeTrave) { nodi = new Nodo[2]; selezionato = false; nodi[0] = n1; nodi[1] = n2; tipo = TipoOggetto.Trave; n1.AggiungiCollegamento(); n2.AggiungiCollegamento(); sezione = new Sezione(); sezione.AggiungiCollegamento(); materiale = new Materiale(); materiale.AggiungiCollegamento(); rifTrave = null; }
public Trave(Nodo n1, Nodo n2) : base() { nodi = new Nodo[NumeroNodi]; selezionato = false; nodi[0] = n1; nodi[1] = n2; tipo = TipoOggetto.Trave; n1.AggiungiCollegamento(); n2.AggiungiCollegamento(); sezione = new Sezione(); sezione.AggiungiCollegamento(); materiale = new Materiale(); materiale.AggiungiCollegamento(); rifTrave = null; }
// Dissocia da un tipo di oggetto public override bool Dissocia(TipoOggetto tipogg) { bool ok = false; switch (tipogg) { case TipoOggetto.Materiale: { if (this.materiale != null) // Se l'oggetto era gia` associato ad un materiale... (this.materiale).RimuoviCollegamento(); // decrementa i link del vecchio materiale Materiale = (Materiale)null; // Cancella il riferimento al materiale ok = true; break; } case TipoOggetto.Sezione: { if (this.sezione != null) // Se l'oggetto era gia` associato ad una sezione... (this.sezione).RimuoviCollegamento(); // decrementa i link della vecchia sezione Sezione = (Sezione)null; // Cancella il riferimento alla sezione ok = true; break; } } return ok; }
// Sostituisce gli indici con i riferimenti public bool SostituisciIndici(ArchivioStruttura arch) { bool fatto = false; if(rifTrave != null) { fatto = true; // Mette a true; se errore qulunque: false if(rifTrave.nodi[0] != Oggetto.NonValido) // Controlla se indice inizializzato. Se no... { // Prosegue senza errori Nodo n = (Nodo)arch.Trova(TipoOggetto.Nodo, rifTrave.nodi[0]); if(n != null) { nodi[0] = n; nodi[0].AggiungiCollegamento(); } else fatto = false; } if (rifTrave.nodi[1] != Oggetto.NonValido) { Nodo n = (Nodo)arch.Trova(TipoOggetto.Nodo, rifTrave.nodi[1]); if (n != null) { nodi[1] = n; nodi[1].AggiungiCollegamento(); } else fatto = false; } if (rifTrave.sezione != Oggetto.NonValido) { Sezione s = (Sezione)arch.Trova(TipoOggetto.Sezione, rifTrave.sezione); if (s != null) { sezione = s; sezione.AggiungiCollegamento(); } else fatto = false; } if (rifTrave.materiale != Oggetto.NonValido) { Materiale m = (Materiale)arch.Trova(TipoOggetto.Materiale, rifTrave.materiale); if (m != null) { materiale = m; materiale.AggiungiCollegamento(); } else fatto = false; } } if(fatto) // Se operazione completata, cancella il riferimento al_ rifTrave = null; // l'oggetto con gli indici (eliminato poi dal gc) return fatto; }
// Associa ad un oggetto (materiale o sezione) public override bool Associa(Oggetto ogg) { bool ok = false; switch(ogg.Tipo) { case TipoOggetto.Materiale: { if(this.materiale != null) // Se l'oggetto era gia` associato ad un materiale... (this.materiale).RimuoviCollegamento(); // decrementa i link del vecchio materiale Materiale = (Materiale) ogg; // Imposta il riferimento al nuovo materiale ogg.AggiungiCollegamento(); // incrementa i link del nuovo materiale ok = true; break; } case TipoOggetto.Sezione: { if (this.sezione != null) // Se l'oggetto era gia` associato ad una sezione... (this.sezione).RimuoviCollegamento(); // decrementa i link della vecchia sezione Sezione = (Sezione)ogg; // Imposta il riferimento alla nuova sezione ogg.AggiungiCollegamento(); // incrementa i link del nuovo materiale ok = true; break; } } return ok; }