Hi,
There is a SelectLast option:
PromptSelectionResult acSSPrompt; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; acSSPrompt = ed.SelectLast();
Gaston Nunez
Ok that helps, what would i use to delete what i selected with the editor?
Thanks
Vince
Hi,
You should start a transaction, get the last object (as entity) erase it (entity.erase), and commit the transaction and that's it. Like this (not tested, and translated from VB)
[CommandMethod("ELAST")] public void EraseObj() { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { PromptSelectionResult acSSPrompt; acSSPrompt = ed.SelectLast; Entity ent; SelectionSet ss = acSSPrompt.Value; if (ss.Count > 0) { ent = acTrans.GetObject(ss.Item(0).ObjectId, OpenMode.ForWrite); ent.Erase(); } acTrans.Commit(); } }
Gaston Nunez
I have not used it and of course 'not supported' but maybe you can search for
Autodesk.AutoCAD.Internal.Utils.EntLast();
and see if people have had success
Thanks for this sample, i'm having an issue with the line:
ent = acTrans.GetObject(ss.(0).ObjectId, OpenMode.ForWrite);
.
Visual Studio 2010 and AutoCAD 2012 are telling me that there is no definition for ss.item and thus i cannot compile. As i missing a reference?
Thanks
Vince
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Colors;
Hi,
SelectionSet it's part of the EditorInput, and I see you are "using" it, so I have no idea why VS is telling you that. Any way the correct sintax is : ss(index).ObjectId without a dot after ss.
Gaston Nunez
Ok, so i've got this now:
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
PromptSelectionResult acSSPrompt;
acSSPrompt = ed.SelectLast();
Entity ent;
SelectionSet ss = acSSPrompt.Value;
if (ss.Count > 0)
{
ent = acTrans.GetObject(ss(0).ObjectId, OpenMode.ForWrite);
ent.Erase();
}
acTrans.Commit();
}
}
}
}
But the error I have is 'ss' is a 'variable' but is used like a 'method'
Haha didn't even notice that. Now when i change it to ss[0], i get
Error 1 Cannot implicitly convert type 'Autodesk.AutoCAD.DatabaseServices.DBObject' to 'Autodesk.AutoCAD.DatabaseServices.Entity'. An explicit conversion exists (are you missing a cast?) C:\Users\user\Dropbox\Programming\Cad\Cad\TheProgram\Drawing Commands\Copy of AREA.cs 28 27 Commands
if (ss.Count > 0)
{
ent = acTrans.GetObject(ss[0].ObjectId, OpenMode.ForWrite);
ent.Erase();
}
acTrans.Commit();
Scratch that, fixed it 😉
public void EraseObj()
{
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
PromptSelectionResult acSSPrompt;
acSSPrompt = ed.SelectLast();
Entity ent;
SelectionSet ss = acSSPrompt.Value;
if (ss.Count > 0)
{
ent = acTrans.GetObject(ss[0].ObjectId, OpenMode.ForWrite) as Entity;
ent.Erase();
}
acTrans.Commit();
}
}
}
}
Thanks a million for your help!
Hi,
Glad to help you, sorry the mistake, i feel much comfortable with vb 'cause I'd like to see "End this", "End That"... instead of a lot of brackets at the end of a block of code.
Gaston Nunez
Can't find what you're looking for? Ask the community or share your knowledge.