Revit API Forum
Welcome to Autodesk’s Revit API Forums. Share your knowledge, ask questions, and explore popular Revit API topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

View SetVisibility Error

1 REPLY 1
Reply
Message 1 of 2
rpearsall
456 Views, 1 Reply

View SetVisibility Error

I'm having trouble getting View.SetVisibility to work.  It keeps throwing a ModificationOutsideTransactionException error when it hits rvtView.setVisibility(rvtCategory, blnVisible)

 

Here's my code:

 

   

PrivateSub SetCategoryVisibility(ByRef rvtView AsView, ByRef blnVisible AsBoolean)

       

Dim rvtFilterDimensions As Autodesk.Revit.DB.ElementClassFilter = New Autodesk.Revit.DB.ElementClassFilter(GetType(Autodesk.Revit.DB.Dimension))

       

Dim rvtFilterHosts As Autodesk.Revit.DB.ElementClassFilter = New Autodesk.Revit.DB.ElementClassFilter(GetType(Autodesk.Revit.DB.HostObject))

       

Dim rvtFilterReferencePlanes As Autodesk.Revit.DB.ElementClassFilter = New Autodesk.Revit.DB.ElementClassFilter(GetType(Autodesk.Revit.DB.ReferencePlane))

       

Dim a As Generic.IList(OfElementFilter) = New Generic.List(OfElementFilter)

        a.Add(rvtFilterDimensions)

        a.Add(rvtFilterHosts)

        a.Add(rvtFilterReferencePlanes)

       

Dim rvtFilterOr AsLogicalOrFilter = NewLogicalOrFilter(a)

       

Dim rvtCollector AsNew Autodesk.Revit.DB.FilteredElementCollector(m_rvtDBDoc)

       

Dim ilistElements As Generic.IList(Of Autodesk.Revit.DB.Element)

       

Dim rvtTransStatus AsTransactionStatus

       

Using rvtGroup AsTransactionGroup = NewTransactionGroup(m_rvtDBDoc)

           

Try

                rvtCollector.WherePasses(rvtFilterOr)

                ilistElements = rvtCollector.ToElements()

                rvtTransStatus = rvtGroup.Start(

"Category Visibility")

               

ForEach rvtElement In ilistElements

                   

IfNot rvtElement.Category IsNothingThen

                       

Dim rvtCategory As Autodesk.Revit.DB.Category = rvtElement.Category

                       

If rvtCategory.AllowsVisibilityControl(rvtView) Then

                           

Using rvtTransaction AsTransaction = NewTransaction(m_rvtDBDoc)

                               

Dim rvtStatus AsTransactionStatus

                               

Try

                                    rvtStatus = rvtTransaction.Start(rvtCategory.Name)

                                   

Debug.Print(rvtView.getVisibility(rvtCategory))

                                    rvtView.setVisibility(rvtCategory, blnVisible)

                                    rvtStatus = rvtTransaction.Commit()

                                    m_rvtUIDoc.RefreshActiveView()

                                    Threading.

Thread.Sleep(2000)

                               

Catch e As Exceptions.ModificationOutsideTransactionException

                                   

If rvtStatus = TransactionStatus.Started Then rvtTransaction.RollBack()

                                   

Dim message AsString = e.ToString()

                               

Catch e AsException

                                   

If rvtStatus = TransactionStatus.Started Then rvtTransaction.RollBack()

                                   

Dim message AsString = e.ToString()

                               

EndTry

                           

EndUsing

                       

EndIf

                   

EndIf

               

Next

           

Catch e As Exceptions.ModificationOutsideTransactionException

               

If rvtTransStatus = TransactionStatus.Started Then rvtGroup.RollBack()

               

Dim message AsString = e.ToString()

           

Catch e AsException

               

If rvtTransStatus = TransactionStatus.Started Then rvtGroup.RollBack()

               

Dim message AsString = e.ToString()

           

EndTry

            rvtGroup.Assimilate()

       

EndUsing

   

EndSub

1 REPLY 1
Message 2 of 2
Joe.Ye
in reply to: rpearsall

 

SetVisibility() works well in Revit if it is in a started transaction.

 

Your code looks no problem. SeVisibility is in called within the open transaction. Probably the issue is not in this code fragment.

 

If there is a reproducible code project and the test rvt file, that would be helpful to detect issue,

 



Joe Ye
Contractor
Developer Technical Services
Autodesk Developer Network

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


Rail Community