Community
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
Solved! Go to Solution.
Solved by arcticad. Go to Solution.
Oh the selection set is being stoed as a globel from another command. Not sure if all this is logical.
Public selSet As SelectionSet
http://forums.autodesk.com/t5/NET/eLockViolation/m-p/2490289/highlight/true#M14566