/// <summary> /// Prendo la foto pulita e applico tutte le correzioni. /// Serve per il fotoritocco. /// Faccio tutto in un unico colpo per essere più efficiente. /// </summary> /// <param name="fotografia"></param> /// <param name="cosaRicalcolo"></param> public IImmagine applicaCorrezioni(IImmagine partenza, CorrezioniList correzioni, IdrataTarget cosaRicalcolo) { IImmagine modificata = partenza; // Ci sono alcune correzioni che sono più "complicate" e non posso trattarle in modo singolo, // ma devo gestire nell'insieme in modo efficiente. // In questo caso devo cambiare strategia. bool complicato = false; if (correzioni.SingleOrDefault(c => c is Imaging.Correzioni.Mascheratura) != null || correzioni.SingleOrDefault(c => c is Imaging.Correzioni.MascheraturaOrientabile) != null || correzioni.SingleOrDefault(c => c is Ruota && ((Ruota)c).isAngoloRetto == false) != null || correzioni.SingleOrDefault(c => c is Trasla) != null || correzioni.SingleOrDefault(c => c is Zoom) != null) { complicato = true; } if (complicato) { modificata = rigeneraImmagineConCorrezioniComplicate(partenza, correzioni, cosaRicalcolo); } else { // le correzioni sono tutte applicabili singolarmente. Non necessito di ricalcolo foreach (Correzione correzione in correzioni) { modificata = applicaCorrezione(modificata, correzione); } } return(modificata); }
public static bool determinaSeComposizione(string correzioniXml) { bool composizione = false; CorrezioniList correzioniList = null; MascheraturaOrientabile mascheraturaOrientabile = null; // Controllo che l'azione corrente contenga una mascheratura orientabile correzioniList = SerializzaUtil.stringToObject <CorrezioniList>(correzioniXml); if (correzioniList != null && correzioniList.Count > 0) { mascheraturaOrientabile = (MascheraturaOrientabile)correzioniList.SingleOrDefault(mo => mo is MascheraturaOrientabile); composizione = (mascheraturaOrientabile != null); } return(composizione); }
/// <summary> /// Se una azione automatica contiene una mascheratura orientabile (quindi doppia) /// posso disassociarla e creare una nuova azione /// </summary> void disassociareMascheratura() { CorrezioniList correzioniList = null; AzioneAuto azioneAuto = azioneAutomaticaSelezionata; MascheraturaOrientabile mascheraturaOrientabile = null; // Controllo che l'azione corrente contenga una mascheratura orientabile if (azioneAuto.correzioniXml != null) { correzioniList = SerializzaUtil.stringToObject <CorrezioniList>(azioneAuto.correzioniXml); if (correzioniList != null && correzioniList.Count > 0) { mascheraturaOrientabile = (MascheraturaOrientabile)correzioniList.SingleOrDefault(mo => mo is MascheraturaOrientabile); } } if (mascheraturaOrientabile == null) { dialogProvider.ShowError("L'azione selezionata non contiene una <MascheraturaOrientabile>.\nSolo queste si possono separare!", "Azione non separabile", null); return; } // ok procedo a separare le cornici // Sostituisco la correzione nella lista, cercando di mettere quella nuova nella stessa posizione Mascheratura masH = mascheraturaOrientabile.mascheraturaH; Mascheratura masV = mascheraturaOrientabile.mascheraturaV; // Elimino la mascheratura doppia ... correzioniList.Remove(mascheraturaOrientabile); // aggiungo solo la mascheratura Orizzontale correzioniList.Insert(0, masV); // Aggiorno l'entità sul db OrmUtil.forseAttacca <AzioneAuto>(ref azioneAuto); azioneAuto.correzioniXml = SerializzaUtil.objectToString(correzioniList); // Ora creo l'altra azione CorrezioniList correzioniList2 = new CorrezioniList(); correzioniList2.Add(masH); AzioneAuto azioneV = new AzioneAuto { id = Guid.NewGuid(), attivo = true, nome = "Separata", correzioniXml = SerializzaUtil.objectToString(correzioniList2) }; UnitOfWorkScope.currentDbContext.AzioniAutomatiche.Add(azioneV); // Ora aggiungo anche alla collezione visiva azioniAutomatiche.Add(azioneV); deselezionareTutto(); // Purtroppo non si aggiornano le icone di overlay. devo ricaricare. App.Current.Dispatcher.BeginInvoke(new Action(() => { rileggereAzioniAutomaticheCommand.Execute(null); } )); }