Author Topic: Two programs to set layers off or isolates layers by picking an entity on screen  (Read 1360 times)

0 Members and 1 Guest are viewing this topic.

Offline fixo

  • Full Member
  • ***
  • Posts: 135
  • Karma: +4/-0
  • Gender: Male
    • prefered language: C
    • Prog expertise: Good
    • View Profile
     
   C#
   
Code: [Select]

[CommandMethod("liso")]
        public static void testLayerIsol()
        {
            Database db = HostApplicationServices.WorkingDatabase;

            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            PromptEntityOptions opt = new PromptEntityOptions( "\nSelect an entity :");

                PromptEntityResult res = ed.GetEntity(opt);

                if (res.Status != PromptStatus.OK) return;
     
                    ObjectId entId=  res.ObjectId;
                   
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                Entity ent= tr.GetObject(entId, OpenMode.ForRead) as Entity;

                if (ent==null) return;

                string lname= ent.Layer;

                using (LayerTable lt = db.LayerTableId.GetObject(OpenMode.ForRead, false) as LayerTable)
                {
                 
                    db.Clayer=lt[lname];
               
                    foreach (ObjectId layId in lt)
                    {

                        if (layId != lt[lname])
                        {
                            LayerTableRecord ltr = tr.GetObject(layId, OpenMode.ForWrite, false) as LayerTableRecord;

                            if ((!ltr.IsDependent) && ((!ltr.Name.Contains("*|*")) | (!ltr.Name.Contains("X*"))))
                            {
                                ltr.IsOff = true;

                            }
                        }
                    }
       
                }
                tr.Commit();
            }
        }


   
Code: [Select]

        [CommandMethod("loff")]
        public static void testLayersOff()
           {
            Database db = HostApplicationServices.WorkingDatabase;

            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            PromptEntityOptions opt = new PromptEntityOptions( "\nSelect an entity :");

                PromptEntityResult res = ed.GetEntity(opt);

                if (res.Status != PromptStatus.OK) return;
     
                    ObjectId entId=  res.ObjectId;
                   
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                Entity ent= tr.GetObject(entId, OpenMode.ForRead) as Entity;

                if (ent==null) return;

                string lname= ent.Layer;

                using (LayerTable lt = db.LayerTableId.GetObject(OpenMode.ForRead, false) as LayerTable)
                {
                   LayerTableRecord clayer = tr.GetObject(db.Clayer, OpenMode.ForRead) as LayerTableRecord;  //current layer
                   
                    if (lt[lname]==db.Clayer)
                    {
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Could not turn off the current layer.");

                        return;
                    }
                    LayerTableRecord ltr = tr.GetObject(lt[lname], OpenMode.ForWrite, false) as LayerTableRecord;

                    if ((!ltr.IsDependent) && ((!ltr.Name.Contains("*|*")) | (!ltr.Name.Contains("X*"))))
                    {
                        ltr.IsOff = true;
                    }           
                }
                tr.Commit();
            }
        }


   VB.NET
   
Code: [Select]

        <CommandMethod("liso")> _
        Public Shared Sub testLayerIsol()
            Dim db As Database = HostApplicationServices.WorkingDatabase

            Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor

            Dim opt As New PromptEntityOptions(vbLf & "Select an entity :")

            Dim res As PromptEntityResult = ed.GetEntity(opt)

            If res.Status <> PromptStatus.OK Then
                Return
            End If

            Dim entId As ObjectId = res.ObjectId

            Using tr As Transaction = db.TransactionManager.StartTransaction()
                Dim ent As Entity = TryCast(tr.GetObject(entId, OpenMode.ForRead), Entity)

                If ent Is Nothing Then
                    Return
                End If

                Dim lname As String = ent.Layer

                Using lt As LayerTable = TryCast(db.LayerTableId.GetObject(OpenMode.ForRead, False), LayerTable)

                    db.Clayer = lt(lname)

                    For Each layId As ObjectId In lt

                        If layId <> lt(lname) Then
                            Dim ltr As LayerTableRecord = TryCast(tr.GetObject(layId, OpenMode.ForWrite, False), LayerTableRecord)

                            If (Not ltr.IsDependent) AndAlso ((Not ltr.Name.Contains("*|*")) Or (Not ltr.Name.Contains("X*"))) Then

                                ltr.IsOff = True
                            End If
                        End If

                    Next
                End Using
                tr.Commit()
            End Using
        End Sub


   
Code: [Select]

        <CommandMethod("loff")> _
        Public Shared Sub testLayersOff()
            Dim db As Database = HostApplicationServices.WorkingDatabase

            Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor

            Dim opt As New PromptEntityOptions(vbLf & "Select an entity :")

            Dim res As PromptEntityResult = ed.GetEntity(opt)

            If res.Status <> PromptStatus.OK Then
                Return
            End If

            Dim entId As ObjectId = res.ObjectId

            Using tr As Transaction = db.TransactionManager.StartTransaction()
                Dim ent As Entity = TryCast(tr.GetObject(entId, OpenMode.ForRead), Entity)

                If ent Is Nothing Then
                    Return
                End If

                Dim lname As String = ent.Layer

                Using lt As LayerTable = TryCast(db.LayerTableId.GetObject(OpenMode.ForRead, False), LayerTable)
                    Dim clayer As LayerTableRecord = TryCast(tr.GetObject(db.Clayer, OpenMode.ForRead), LayerTableRecord)
                    'current layer
                    If lt(lname) = db.Clayer Then
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Could not turn off the current layer.")

                        Return
                    End If
                    Dim ltr As LayerTableRecord = TryCast(tr.GetObject(lt(lname), OpenMode.ForWrite, False), LayerTableRecord)

                    If (Not ltr.IsDependent) AndAlso ((Not ltr.Name.Contains("*|*")) Or (Not ltr.Name.Contains("X*"))) Then
                        ltr.IsOff = True
                    End If
                End Using
                tr.Commit()
            End Using
        End Sub