Hi
I am trying to assign objects (only in UNLOCKED layers) with a new layer.
So basically, the user will select all the objects in the drawing.
After selecting (ex. press enter after window selecting), only objects in UNLOCKED layers will have a new layer.
Following is the code I am using...
But I keep getting eOnLockedLayer exception.
How should I handle this issue?
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
PromptSelectionOptions pSelOpts = new PromptSelectionOptions();
pSelOpts.MessageForAdding = "Select all objects";
PromptSelectionResult pSelRes = acDoc.Editor.GetSelection(pSelOpts);
if (pSelRes.Status == PromptStatus.OK)
{
SelectionSet acSSet = pSelRes.Value;
foreach (SelectedObject acSSObj in acSSet)
{
if (acSSObj != null)
{
// This line I am getting eOnLockedLayer exception
Entity acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForWrite) as Entity;
if (acEnt != null)
{
acEnt.Layer = "newLayer";
acEnt.ColorIndex = 20;
}
}
}
}
acTrans.Commit();
}
Solved! Go to Solution.
Solved by kdub_nz. Go to Solution.
Just stop them being selected
// Autodesk.AutoCAD.EditorInput.PromptSelectionOptions
public bool RejectObjectsOnLockedLayers
{ // < ..>
}
Regards
// Called Kerry in my other life.
Everything will work just as you expect it to, unless your expectations are incorrect.
class keyThumper<T> : Lazy<T>; another Swamper
Hi,
...or check the full syntax for TransAction.GetObject:
Public Overridable Function GetObject(id As Autodesk.AutoCAD.DatabaseServices.ObjectId, mode As Autodesk.AutoCAD.DatabaseServices.OpenMode, openErased As Boolean, forceOpenOnLockedLayer As Boolean) As Autodesk.AutoCAD.DatabaseServices.DBObject
Member von Autodesk.AutoCAD.DatabaseServices.Transaction
- alfred -