• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    .NET

    Reply
    Distinguished Contributor
    vince1327
    Posts: 117
    Registered: ‎11-02-2011

    Erase last object

    164 Views, 13 Replies
    03-20-2012 12:27 PM
    Hey everyone, In AutoCAD, i can type "erase" and then "last" into the commandline and it will automatically select and erase the last object i created. How is this accomplished in C#? I'm generating a polyline to automatically calculate areas, but i would like that polyline to vanish once the area has been measured. Thanks Vince
    Please use plain text.
    Mentor
    Posts: 223
    Registered: ‎04-11-2010

    Re: Erase last object

    03-20-2012 01:20 PM in reply to: vince1327

    Hi,

     

    There is a SelectLast option:

    PromptSelectionResult acSSPrompt;
    Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
    acSSPrompt = ed.SelectLast();

     

    Gaston Nunez

    Please use plain text.
    Distinguished Contributor
    vince1327
    Posts: 117
    Registered: ‎11-02-2011

    Re: Erase last object

    03-20-2012 01:42 PM in reply to: gasty1001

    Ok that helps, what would i use to delete what i selected with the editor?

     

    Thanks

    Vince

    Please use plain text.
    Mentor
    Posts: 223
    Registered: ‎04-11-2010

    Re: Erase last object

    03-20-2012 02:22 PM in reply to: vince1327

    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

     

    Please use plain text.
    Mentor
    Posts: 241
    Registered: ‎05-12-2009

    Re: Erase last object

    03-20-2012 04:48 PM in reply to: gasty1001

    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

    You can also find your answers @ TheSwamp
    Please use plain text.
    Distinguished Contributor
    vince1327
    Posts: 117
    Registered: ‎11-02-2011

    Re: Erase last object

    03-21-2012 05:49 AM in reply to: gasty1001

    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;

    Please use plain text.
    Distinguished Contributor
    vince1327
    Posts: 117
    Registered: ‎11-02-2011

    Re: Erase last object

    03-21-2012 05:49 AM in reply to: jeff

    Thanks jeff, i'll have a look into this as well.

    Cheers

    Vince

    Please use plain text.
    Mentor
    Posts: 223
    Registered: ‎04-11-2010

    Re: Erase last object

    03-21-2012 06:12 AM in reply to: vince1327

    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

    Please use plain text.
    Distinguished Contributor
    vince1327
    Posts: 117
    Registered: ‎11-02-2011

    Re: Erase last object

    03-21-2012 06:20 AM in reply to: gasty1001

    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'

    Please use plain text.
    Mentor
    Posts: 223
    Registered: ‎04-11-2010

    Re: Erase last object

    03-21-2012 06:25 AM in reply to: vince1327

    Hi,

     

    My mistake (i'm a vb guy), just change ss(0) by ss[0].

     

    Gaston Nunez

     

     

    Please use plain text.