How get objectids from pasteclip ?

How get objectids from pasteclip ?

Anonymous
Not applicable
1,299 Views
7 Replies
Message 1 of 8

How get objectids from pasteclip ?

Anonymous
Not applicable

Hello,

 

I am trying to copy some objects with Xdata attached to it, from source  drawing to destination drawing.

I have an event handler in destination drawing  for pasteclip command. Now my question is when use finish the paste  , How to collect the objectids and do my process on them ?

 

Could an expert please help me in this regard ?

Appreciated any help.

 

0 Likes
Accepted solutions (1)
1,300 Views
7 Replies
Replies (7)
Message 2 of 8

augusto.goncalves
Alumni
Alumni

Hi,

 

I would suggest the following process: track then command PASTECLIP begins, then monitor event Database.ObjectAppended for new new IDs, finally when command PASTECLIP ends, stop monitoring the append event.

 

Cheers,

 

Augusto Goncalves

Autodesk Developer Network

Regards,



Augusto Goncalves
Twitter @augustomaia
Autodesk Developer Network
0 Likes
Message 3 of 8

Anonymous
Not applicable

Thank you sir for your concern and time. well honestly I am not very good at all those terminology you using. the way I am learning so far is change an existing code an play with it. Could you please give me a sample code. Really appreciated.

 

0 Likes
Message 4 of 8

augusto.goncalves
Alumni
Alumni

Hi,

 

I don´t have a sample on it....but you can learn more here: http://www.autodesk.com/developautocad

 

Try this video: http://download.autodesk.com/media/adn/DevTV_Introduction_to_AutoCAD_NET_Programming.zip

 

Regards,

Augusto Goncalves

Autodesk Developer Network

Regards,



Augusto Goncalves
Twitter @augustomaia
Autodesk Developer Network
0 Likes
Message 5 of 8

Anonymous
Not applicable

Thanks for all effort sir. though.

Does anybody else can help me here. I really appreciate it.

 

0 Likes
Message 6 of 8

Alexander.Rivilis
Mentor
Mentor

Best examples will be EventsWatcher from ObjectARX SDK samples and MgdDbg from Kean Walmsley blog:  http://through-the-interface.typepad.com

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

0 Likes
Message 7 of 8

Alexander.Rivilis
Mentor
Mentor
Accepted solution

This code may help you:

 

using System;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.EditorInput;

using AcRx = Autodesk.AutoCAD.Runtime;

using AcAp = Autodesk.AutoCAD.ApplicationServices;

using AcDb = Autodesk.AutoCAD.DatabaseServices;

using AcGe = Autodesk.AutoCAD.Geometry;

using AcEd = Autodesk.AutoCAD.EditorInput;

 

 

[assembly: ExtensionApplication(typeof(Rivilis.MonitorPaste))]

 

namespace Rivilis

{

 

  public class MonitorPaste : IExtensionApplication

  {

    private AcAp.DocumentCollection m_docMan;

    private AcAp.Document m_doc;

    private AcDb.Database m_db;

    private bool m_bBeginPaste;

    private AcDb.ObjectIdCollection ids;

 

    void IExtensionApplication.Initialize()

    {

      ids = new AcDb.ObjectIdCollection();

      m_bBeginPaste = false;

      m_docMan = AcAp.Application.DocumentManager;

      m_doc    = m_docMan.MdiActiveDocument;

      m_db     = m_doc.Database;

      m_doc.CommandWillStart += new AcAp.CommandEventHandler(MonitorCommandWillStarted);

      m_doc.CommandEnded     += new AcAp.CommandEventHandler(MonitorCommandEnded);

      m_doc.CommandCancelled += new AcAp.CommandEventHandler(MonitorCommandCanceled);

      m_doc.CommandFailed    += new AcAp.CommandEventHandler(MonitorCommandCanceled);

      m_db.ObjectAppended    += new AcDb.ObjectEventHandler(MonitorObjectAppended);

      m_db.ObjectUnappended  += new AcDb.ObjectEventHandler(MonitorObjectUnappended);

      m_db.ObjectReappended  += new AcDb.ObjectEventHandler(MonitorObjectReappended);

      m_db.ObjectErased      += new AcDb.ObjectErasedEventHandler(MonitorObjectErased);

    }

 

    void IExtensionApplication.Terminate()

    {

 

    }

    private void MonitorCommandWillStarted(Object o, CommandEventArgs e)

    {

      if (e.GlobalCommandName.Substring(0, 5) == "PASTE"// Any of PASTE command (e.g., PASTECLIP, PASTEORIG, etc.)

      {

        m_bBeginPaste = true;

      }

    }

    private void MonitorCommandEnded(Object o, CommandEventArgs e)

    {

      if (e.GlobalCommandName.Substring(0, 5) == "PASTE" && m_bBeginPaste)

      {

        m_doc.Editor.WriteMessage("\nCommand added {0} entities:", ids.Count);

        foreach (ObjectId id in ids)

        {

          m_doc.Editor.WriteMessage("\n\t{0} {1}", id.ObjectClass.Name,id);

        }

      }

      m_bBeginPaste = false; ids.Clear();

    }

    private void MonitorCommandCanceled(Object o, CommandEventArgs e)

    {

      m_bBeginPaste = false; ids.Clear();

    }

 

    private void MonitorObjectAppended(object sender, ObjectEventArgs e)

    {

      if (!m_bBeginPaste) return;

      // Only entities from current space (Model or Layout) will be added

      if (!ids.Contains(e.DBObject.ObjectId) && e.DBObject.OwnerId == m_db.CurrentSpaceId) ids.Add(e.DBObject.ObjectId);

    }

    private void MonitorObjectUnappended(object sender, ObjectEventArgs e)

    {

      if (!m_bBeginPaste) return;

      if (ids.Contains(e.DBObject.ObjectId)) ids.Remove(e.DBObject.ObjectId);

    }

    private void MonitorObjectReappended(object sender, ObjectEventArgs e)

    {

      if (!m_bBeginPaste) return;

      // Only Entity from current space (Model or Layout) will be added

      if (!ids.Contains(e.DBObject.ObjectId) && e.DBObject.OwnerId == m_db.CurrentSpaceId) ids.Add(e.DBObject.ObjectId);

    }

 

    private void MonitorObjectErased(object sender, ObjectErasedEventArgs e)

    {

      if (!m_bBeginPaste) return;

      if (ids.Contains(e.DBObject.ObjectId)) ids.Remove(e.DBObject.ObjectId);

    }

  }

}

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Message 8 of 8

Anonymous
Not applicable

Alex ,

It worked man .

Thanks a lot. really appreciated.

 

0 Likes