
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello,
I'm trying to modify my dynamic block's visibility. My code successfully displays the correct visibility of the block but it seems as if it doesn't commit to it. What I mean by this is, when I close the drawing and open it back up, it is back to its default state (or first visible state). Below are screenshots of the results I get (along with the code below those screenshots). The first image shows an example of the default state when I manually insert it without trying to modify the visibility.
Default state ("Panneau 48x38x12_AC_AF"):
Take a look at the code when I step through it.
My prop.Value is equal to the default state even once I've stepped through when my variable panelVal is as another state ... What's weird is; it displays the correct visibility of the panelVal, but has the selection still set to the default state:
If I then close the drawing and open it back up, it is set back to the default state... If I manually change it, there's no problem. It keeps the changes, but the point of this is to get it all automated.
Code
Private Sub ModifyVisibility(ByVal Path As String, ByVal blkname As String) Dim bId As ObjectId Dim utils As New AcadNetUtils Dim currLayer As New clsLayer Dim acDoc As Document = AcApp.Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database Dim tempDb As New Database(False, True) Dim ed As Editor = acDoc.Editor Dim acBlkTbl As BlockTable Dim acBlkTblRec As BlockTableRecord Dim br As BlockReference Dim insertJig As InsertBlockJig Dim pr As PromptResult Dim oldSnapMode As Integer = AcApp.Application.GetSystemVariable("SNAPMODE") Using lock As DocumentLock = acDoc.LockDocument Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView() AcApp.Application.SetSystemVariable("SNAPMODE", 1) 'Get the current database and start the Transaction Manager tempDb.ReadDwgFile(Path, FileOpenMode.OpenForReadAndReadShare, True, "") acCurDb.Insert(blkname, tempDb, False) tempDb.Dispose() 'Start a transaction Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() 'Open Model space for write acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite) br = New BlockReference(Point3d.Origin, acBlkTbl.Item(blkname)) Dim btr As BlockTableRecord = acTrans.GetObject(br.DynamicBlockTableRecord, OpenMode.ForRead) 'Sets the correct text for the panel. ex: "Panneau 60x49x18_AC" If br <> Nothing AndAlso br.IsDynamicBlock Then Dim pc As DynamicBlockReferencePropertyCollection = br.DynamicBlockReferencePropertyCollection Dim panelVal As String = "Panneau 60x49x18_AC" 'Loop through to get the info for each property For Each prop As DynamicBlockReferenceProperty In pc Select Case prop.PropertyName Case "Visibility" prop.Value = panelVal 'DOES NOT GET MODIFIED End Select Next End If 'Using InsertBlockJig class to insert the block insertJig = New InsertBlockJig(br) pr = ed.Drag(insertJig) If pr.Status = PromptStatus.OK Then bId = acBlkTblRec.AppendEntity(br) 'Add the object to the drawing acTrans.AddNewlyCreatedDBObject(br, True) 'Tell the transaction acTrans.Commit() 'Commit the changes and dispose of the transaction 'Release objects acBlkTblRec = Nothing acBlkTbl = Nothing End If End Using End Using End Sub
What could be causing this issue? Am I not setting the block's visibility correctly?
Thanks for the help in advance,
Alex
Solved! Go to Solution.