Tu sei qui

CaptureAndSend

public class CaptureAndSendClass:IExternalCommand

    {

        UIApplication _revit = null;

        Document _doc;

        string _path = @"C:\Windows\Temp\";

        string _NomeStudente;

        string _OggettoMail = "nessun oggetto";

        string _TestoMail = "";

        string _Sign = "Tecniche Parametriche di Progettazione";

        Bitmap _screenshot;

        public string GetOggettoMail

        {

            get { return _OggettoMail; }

            set { _OggettoMail = value; }

        }

        public string GetTestoMail

        {

            get { return _TestoMail; }

            set { _TestoMail = value; }

        }

         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

         {

             _revit = commandData.Application;

             UIDocument uiDoc = _revit.ActiveUIDocument;

             _doc = uiDoc.Document;

             if (_doc.IsFamilyDocument)

             {

                 MessageBox.Show("Questo strumento funziona solo con il template fornito dal corso",_Sign);

                 return Result.Cancelled;

             }

             System.Drawing.Rectangle bounds = new System.Drawing.Rectangle(300, 0, 950, 800);             

             Graphics graph;

             _screenshot = new Bitmap(bounds.Width, bounds.Height);

             graph = Graphics.FromImage(_screenshot);

             graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy);            

             CaptureAndSendForm displayForm = new CaptureAndSendForm(this);

             displayForm.ShowDialog();

             return Result.Succeeded;

         }

         public void CaptureAndSendMethod()

         {           

             ProjectInfo info = _doc.ProjectInformation;

             Parameter param1 = info.get_Parameter("Email");

             Parameter param2 = info.get_Parameter("Password");

            // leggo le informazioni di progetto indispensabili per l'invio 

             string indirizzo = param1.AsString();

             string password = param2.AsString();            

             _NomeStudente = info.Author;

             // controllo che i campi necessari all'invio siano stati riempiti.

            // In caso contrario il codice s'interrompe mostrando un avviso

            if ("" == indirizzo || "" == password || "" == _NomeStudente)

             {

                 MessageBox.Show("I campi nelle informazioni di progetto non sono completi", _Sign);

             }

             else

             {

                 //Se i campi sono riempiti inizia la creazione degli allegati.

                 //La funzione EsportaInDXFMethod controlla la presenza della vista stabilita e, 

                 //in caso positivo, ne crea un dxf, lo salva e ne restituisce il percorso.

                 //Nell'eventualità di problemi, il codice s'interrompe mostrando un 

                 //messaggio di avviso


                EsportaInDXFClass creaDXF = new EsportaInDXFClass();

                 string pathDXF = creaDXF.EsportaInDXFMethod(_doc, _NomeStudente,_path);   
 
          
                 //In caso di successo il codice può procedere

                 //Salvo, dunque, il capture screen precedentemente "scattato"

                 _path += _NomeStudente + "_01.jpg";                 

                 _screenshot.Save(_path);

                 //creo una nuova istanza dell'oggetto MailMessage

                MailMessage oMsg = new MailMessage();

                 //imposto il mittente con la proprietà From               

                 oMsg.From = new MailAddress(indirizzo, _NomeStudente);

                 //imposto uno o più destinatari                            

                 oMsg.To.Add(new MailAddress("cloud.revit@gmail.com", "BlogTPdP"));                

                 //imposto l'oggetto della mail

                oMsg.Subject = _OggettoMail;               

                 //imposto il testo della mail specificandone alcune caratteristiche

                 oMsg.Body = _TestoMail;

                 oMsg.IsBodyHtml = true;

                 //Ho terminato la creazione dei due(in futuro tre) oggetti da allegare

                 //Passo alla procedura di aggancio alla mail in partenza

                 //Allego lo screenshot in formato jpg

                 string file = _path;                 

                 Attachment data = new Attachment(file);                 

                 ContentDisposition disposition = data.ContentDisposition;

                 disposition.CreationDate = System.IO.File.GetCreationTime(file);

                 disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);

                 disposition.ReadDate = System.IO.File.GetLastAccessTime(file);                 

                 oMsg.Attachments.Add(data);

                 //Allego il DXF

                Attachment dataDXF = new Attachment(pathDXF);                 

                 ContentDisposition dispositionDXF = dataDXF.ContentDisposition;

                 dispositionDXF.CreationDate = System.IO.File.GetCreationTime(pathDXF);

                 dispositionDXF.ModificationDate = System.IO.File.GetLastWriteTime(pathDXF);

                 dispositionDXF.ReadDate = System.IO.File.GetLastAccessTime(pathDXF);                 

                 oMsg.Attachments.Add(dataDXF);

                   //Imposto il Server Smtp

        //L'Smtp è un protocollo di invio che spesso varia, nei suoi parametri d'istanziazione,

                   // per servizi di posta differenti 

        //Qui utilizzo l'Smtp di gmail

                 SmtpClient oSmtp = new SmtpClient("smtp.gmail.com", 587);

                 oSmtp.DeliveryMethod = SmtpDeliveryMethod.Network;

                 //definisco le credenziali di accesso 

                 NetworkCredential oCredential = new NetworkCredential(indirizzo, password);

                 //la riga seguente conferma quanto accennato in precedenza: 

                 //l'Smtp di yahoo, ad esempio, non necessita di questa specifica

                 oSmtp.EnableSsl = true;

                 oSmtp.UseDefaultCredentials = false;

                 oSmtp.Credentials = oCredential;

                 //la mail(post) è pronta per l'invio 

                 oSmtp.Send(oMsg);
             
             }

         }

    }

 





class EsportaInDXFClass

    {

        Document _doc;

        string _NomeStudente;

        string _folder;

        public string EsportaInDXFMethod(Document Doc, string NomeStudente, string pathOfSaving)

        {

            _doc = Doc;

            _NomeStudente = NomeStudente;

            _folder = pathOfSaving;

       

            _NomeStudente += "_PianoTipo";

            ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(ViewPlan));

            ParameterValueProvider pvp = new ParameterValueProvider(new ElementId(BuiltInParameter.VIEW_NAME));

            FilterStringRuleEvaluator evaluator = new FilterStringEquals();

            FilterRule fRule = new FilterStringRule(pvp, evaluator, "Piano Tipo", false);

            ElementParameterFilter nomeVista = new ElementParameterFilter(fRule);

            LogicalAndFilter doorInstancesFilter = new LogicalAndFilter(familyInstanceFilter, nomeVista);

            FilteredElementCollector collector = new FilteredElementCollector(_doc);

            ICollection<ElementId> collection = collector.WherePasses(doorInstancesFilter).ToElementIds();

            if (0 == collection.Count)

            {

                throw new Exception("Impossibile creare il dxf perché la vista Piano Tipo non esiste");

            }

            else

            {

                DXFExportOptions options = new DXFExportOptions();

                //Salvo in versione 2000

                ACADVersion version = ACADVersion.R2000;

                options.FileVersion = version;

                _doc.Export(_folder, _NomeStudente, collection, options);

                _folder += string.Format("{0}.dxf", _NomeStudente);

                return _folder;

            }

        }

    }



public partial class CaptureAndSendForm : Form

    {

        private CaptureAndSendClass _instance;

        public CaptureAndSendForm(CaptureAndSendClass Instance)

        {

            _instance = Instance;

            if (null == _instance)

            {

                MessageBox.Show("Impossibile l'avvio dell'applicazione");

            }

            InitializeComponent();

        }

        private void buttonSend_Click(object sender, EventArgs e)

        {

        

                _instance.CaptureAndSendMethod();

                this.DialogResult = DialogResult.OK;

                this.Close();

         

        }

        private void buttonClose_Click(object sender, EventArgs e)

        {

            this.DialogResult = DialogResult.Cancel;

            this.Close();

        }

        private void ObjMailTextBox_TextChanged(object sender, EventArgs e)

        {

            _instance.GetOggettoMail = this.ObjMailTextBox.Text;

        }

        private void TestoMailTextBox_TextChanged(object sender, EventArgs e)

        {

            _instance.GetTestoMail = this.TestoMailTextBox.Text;

        }

    }

 

 

Technology: