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.
Solved! Go to Solution.
Solved by Alexander.Rivilis. Go to Solution.
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
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.
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
Thanks for all effort sir. though.
Does anybody else can help me here. I really appreciate it.
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
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