/// <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);
        }
Exemple #3
0
        /// <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);
            }
                                                          ));
        }