.NET

Reply
Distinguished Contributor
vince1327
Posts: 117
Registered: ‎11-02-2011
Message 1 of 14 (247 Views)

Erase last object

247 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
Valued Mentor
gasty1001
Posts: 487
Registered: ‎04-11-2010
Message 2 of 14 (236 Views)

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

Distinguished Contributor
vince1327
Posts: 117
Registered: ‎11-02-2011
Message 3 of 14 (231 Views)

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

Valued Mentor
gasty1001
Posts: 487
Registered: ‎04-11-2010
Message 4 of 14 (225 Views)

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

 

Valued Mentor
jeff
Posts: 330
Registered: ‎05-12-2009
Message 5 of 14 (214 Views)

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
Distinguished Contributor
vince1327
Posts: 117
Registered: ‎11-02-2011
Message 6 of 14 (193 Views)

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;

Distinguished Contributor
vince1327
Posts: 117
Registered: ‎11-02-2011
Message 7 of 14 (192 Views)

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

Valued Mentor
gasty1001
Posts: 487
Registered: ‎04-11-2010
Message 8 of 14 (186 Views)

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

Distinguished Contributor
vince1327
Posts: 117
Registered: ‎11-02-2011
Message 9 of 14 (184 Views)

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'

Valued Mentor
gasty1001
Posts: 487
Registered: ‎04-11-2010
Message 10 of 14 (182 Views)

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

 

 

Need installation help?

Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.