.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Updating attributes of a selection set

3 REPLIES 3
SOLVED
Reply
Message 1 of 4
jboone
551 Views, 3 Replies

Updating attributes of a selection set

I am trying to update blocks from a selection set and based on two specific attaributes.  I get and error eLockViolation

Not sure where it comes from since this is a dll.

 

 

      Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
      Dim db As Database = doc.Database
      Dim ed As Editor = doc.Editor
      Dim x As Integer = 0
      Dim tr As Transaction = db.TransactionManager.StartTransaction()

	  
	  


      MsgBox("Going into attribute write", MsgBoxStyle.OkOnly)
      Try
         Dim idArray As ObjectId() = selSet.GetObjectIds()
         For Each blkId As ObjectId In idArray
            Dim blkRef As BlockReference = DirectCast(tr.GetObject(blkId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead), BlockReference)
            Dim btr As BlockTableRecord = DirectCast(tr.GetObject(blkRef.BlockTableRecord, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead), BlockTableRecord)
            'ed.WriteMessage(vbLf & "Block: " + btr.Name)
            btr.Dispose()

            Dim attCol As AttributeCollection = blkRef.AttributeCollection
            For Each attId As ObjectId In attCol
               Dim attRef As AttributeReference = DirectCast(tr.GetObject(attId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead), AttributeReference)


               'MsgBox("Block name: " & btr.AcadObject.ToString, MsgBoxStyle.OkOnly)
               'UpdateAttributesInBlock(attId, btr.AcadObject.ToString, "Block2NAME", TextVal)
               If attRef.Tag = "BlockPANEL" Then
                  attRef.UpgradeOpen()
                  attRef.TextString = TextVal
                  attRef.DowngradeOpen()
                  MsgBox("Wrote Block: " & TextVal, MsgBoxStyle.OkOnly)
               ElseIf attRef.Tag = "Block2PANEL" Then
                  attRef.UpgradeOpen()
                  attRef.TextString = TextVal
                  attRef.DowngradeOpen()
                  MsgBox("Wrote Block2: " & TextVal, MsgBoxStyle.OkOnly)
               End If

               If attRef.Tag = "BlockAttVal" Then
                  attRef.UpgradeOpen()
                  attRef.TextString = AttValNumber
                  attRef.DowngradeOpen()
               ElseIf attRef.Tag = "Block2AttVal" Then
                  attRef.UpgradeOpen()
                  attRef.TextString = AttValNumber
                  attRef.DowngradeOpen()
               End If
               x = x + 1
            Next
         Next
         tr.Commit()
         Str = ("Total number of blocks changes: " & x.ToString)
         ed.WriteMessage(WattageStr)
      Catch ex As Autodesk.AutoCAD.Runtime.Exception
         ed.WriteMessage(("Exception: " & ex.Message & vbCrLf))
         Exit Function
      Finally
         tr.Dispose()
      End Try

 

3 REPLIES 3
Message 2 of 4
jboone
in reply to: jboone

Oh the selection set is being stoed as a globel from another command.  Not sure if all this is logical.

 

 

   Public selSet As SelectionSet

 

Message 3 of 4
arcticad
in reply to: jboone

http://forums.autodesk.com/t5/NET/eLockViolation/m-p/2490289/highlight/true#M14566

---------------------------



(defun botsbuildbots() (botsbuildbots))
Message 4 of 4
jboone
in reply to: arcticad

Wow thanks.  That worked great!.

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost