Setting layer state using the LayerStateManager almost working

Setting layer state using the LayerStateManager almost working

nshupeFMPE3
Advocate Advocate
460 Views
0 Replies
Message 1 of 1

Setting layer state using the LayerStateManager almost working

nshupeFMPE3
Advocate
Advocate

The desired behavior I'm after is to change to a layer state the same as if I was using the drop down menu built into AutoCAD. This code almost works, but locked layers aren't dimming like they do if I use the AutoCAD dropdown.

public static void ChangeLayerState(string commandName)
{
    if (!_settings.Commands.TryGetValue(commandName, out var state)) return;

    using (Transaction tr = Active.Database.TransactionManager.StartOpenCloseTransaction())
    {
        try
        {
            foreach (string stateName in state.Names)
            {
                // Get the LayerStateManager
                var layerStateManager = Active.Database.LayerStateManager;

                // Check if the layer state exists
                if (layerStateManager.HasLayerState(stateName))
                {


                    layerStateManager.RestoreLayerState(stateName, ObjectId.Null, 0,
                        LayerStateMasks.Color |
                        //LayerStateMasks.Transparency |
                        LayerStateMasks.Frozen |
                        LayerStateMasks.LineType |
                        LayerStateMasks.LineWeight |
                        LayerStateMasks.Locked |
                        LayerStateMasks.On
                        );


                    tr.Commit();
                    return;
                }
            }
        }
        catch
        {
            tr.Abort();
        }
    }
    Application.DocumentManager.MdiActiveDocument.SendStringToExecute(
        "regen ", true, false, false);
}
0 Likes
461 Views
0 Replies
Replies (0)