Community
Hi.
I have method (GetAlineaciones) = GetAlignments to get all alignments in active document.
public static List<Alignments> GetAlineaciones() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; // por si queremos preguntar o responder en la línea de comandos Database db = Application.DocumentManager.MdiActiveDocument.Database; Autodesk.Civil.ApplicationServices.CivilDocument civDoc = default(Autodesk.Civil.ApplicationServices.CivilDocument); civDoc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument; //obtener el documento de Civil ObjectIdCollection alignColl = civDoc.GetAlignmentIds(); //obtener la colección de alineaciones if (alignColl.Count == 0) //alignColl=align collection { return null; } List<toolsC3D.Alignments> aligns = new List<toolsC3D.Alignments>(); // instancia de la nueva lista Alignments aBobj = default(Alignments); using (Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction()) { int i = 0; foreach (ObjectId id in alignColl) // para cada alineación abierta para leer { try { Alignment align = trans.GetObject(id, OpenMode.ForRead) as Alignment; aBobj = new toolsC3D.Alignments(); aBobj.Id = align.Id; aBobj.IdString = align.Id.ToString(); //tendremos el Id también como string //aBobj.IndiceFila = i; //posición que ocupa en la lista empezando por 0 aBobj.Name = align.Name; aBobj.Description = align.Description; aBobj.CriteriaFileName = align.CriteriaFileName; aBobj.DesignCheckSetName = align.DesignCheckSetName; aBobj.Length = align.Length; aBobj.UseDesignCriteriaFile = align.UseDesignCriteriaFile; aBobj.UseDesignCheckSet = align.UseDesignCheckSet; aBobj.AlignmentType = align.AlignmentType; aBobj.StartingStation = align.StartingStation; aBobj.EndingStation = align.EndingStation; aBobj.stringStartingStation = functions.funciones_genéricas.formatoPK(align.StartingStation); //string p.k inicial aBobj.stringLength = functions.funciones_genéricas.stringdecimales(align.Length,variables_globales.decimalesLongitud) + " m."; //string aBobj.DesignSpeedCollection = align.DesignSpeeds; // la colección de los tramos de Vp if (align.SuperelevationCriticalStations.Count < 2) //si count=0 es que no se ha calculado. Si es count=2 se calculó pero se han eliminado los puntos críticos y sólo queda el inicial y final de alineación { aBobj.CalculoPeraltes = "No"; } else { if (align.SuperelevationCriticalStations.Count == 2) { aBobj.CalculoPeraltes = "**Sin datos**"; } else { aBobj.CalculoPeraltes = functions.FunctionsPeraltes.DevolverNombreCurva(functions.FunctionsPeraltes.NombreCurvaPrimera(align.Id),align.Id); } } aligns.Add(aBobj); // se va añadiendo cada alineación, con sus propiedades, a la lista(aligns) i++; if (variables_globales.regenAlinAUTO == true) { //permitimos los eventos (+=) Document doc = Application.DocumentManager.MdiActiveDocument; align.Erased += new ObjectErasedEventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); // align.Reappended += new EventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); //si se elimina del dibujo y se vuelve a recuperar con un "deshacer" ctrl+z //align.Unappended += new EventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); align.Copied += new ObjectEventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); doc.Database.ObjectModified += new ObjectEventHandler(callback_ObjectModified); doc.CommandEnded += new CommandEventHandler(callback_CommandEnded); //align.Modified += new EventHandler(callback_ObjectModified); } else { } } catch { } } } return aligns; }
However, I want add more than one handler (one for each alignment) for specific event.
If one alignment has already one handler (for example ObjectModified) I don´t want to add again the same handler.
Now, I have this in this method:
if (variables_globales.regenAlinAUTO == true) { //permitimos los eventos (+=) Document doc = Application.DocumentManager.MdiActiveDocument; align.Erased += new ObjectErasedEventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); // align.Reappended += new EventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); //si se elimina del dibujo y se vuelve a recuperar con un "deshacer" ctrl+z //align.Unappended += new EventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); align.Copied += new ObjectEventHandler(TypeViewer.TypeViewerControl.ProcesRegenAlin); doc.Database.ObjectModified += new ObjectEventHandler(callback_ObjectModified); doc.CommandEnded += new CommandEventHandler(callback_CommandEnded); //align.Modified += new EventHandler(callback_ObjectModified); } else { }
I have read this:
http://adndevblog.typepad.com/autocad/2013/04/removing-all-custom-handlers-of-an-event.html
and I have read about: GetInvocationList() but I don´t understand it.
Thank you.