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

Rename layer with vb.net

5 REPLIES 5
Reply
Message 1 of 6
DerUhrmacher
1524 Views, 5 Replies

Rename layer with vb.net

Hello

I tried to rename layers this way, but it seems not to work.
What is wrong with it? No errormessage, but no result too 😞

Regards,
Andreas

"
Private Sub LayerRename(ByVal OldName As String, ByVal NewName As String)

Dim myDWG As ApplicationServices.Document
Dim myTransMan As DatabaseServices.TransactionManager
Dim myTrans As DatabaseServices.Transaction
myDWG = ApplicationServices.Application.DocumentManager.MdiActiveDocument
myTransMan = myDWG.TransactionManager
myTrans = myTransMan.StartTransaction
Dim myLT As DatabaseServices.LayerTable
Dim myLTR As DatabaseServices.LayerTableRecord
Dim mySTE As DatabaseServices.SymbolTableEnumerator
myLT = myDWG.Database.LayerTableId.GetObject(DatabaseServices.OpenMode.ForRead)
mySTE = myLT.GetEnumerator

While mySTE.MoveNext
myLTR = mySTE.Current.GetObject(DatabaseServices.OpenMode.ForRead)
If myLTR.Name = OldName Then
myLTR.UpgradeOpen()
myLTR.Name = NewName

End If

End While

myTrans.Dispose()
myTransMan.Dispose()
End Sub
"
5 REPLIES 5
Message 2 of 6
Anonymous
in reply to: DerUhrmacher

Hi Andreas,

Try committing your transaction.

I would also import ApplicationServices and DatabaseServices.

--
James Allen
Malicoat-Winslow Engineers, P.C.
Columbia, MO



as@uhrteil.ch wrote:
> Hello
>
> I tried to rename layers this way, but it seems not to work.
> What is wrong with it? No errormessage, but no result too 😞
>
> Regards,
> Andreas
>
> "
> Private Sub LayerRename(ByVal OldName As String, ByVal NewName As String)
>
> Dim myDWG As ApplicationServices.Document
> Dim myTransMan As DatabaseServices.TransactionManager
> Dim myTrans As DatabaseServices.Transaction
> myDWG = ApplicationServices.Application.DocumentManager.MdiActiveDocument
> myTransMan = myDWG.TransactionManager
> myTrans = myTransMan.StartTransaction
> Dim myLT As DatabaseServices.LayerTable
> Dim myLTR As DatabaseServices.LayerTableRecord
> Dim mySTE As DatabaseServices.SymbolTableEnumerator
> myLT = myDWG.Database.LayerTableId.GetObject(DatabaseServices.OpenMode.ForRead)
> mySTE = myLT.GetEnumerator
>
> While mySTE.MoveNext
> myLTR = mySTE.Current.GetObject(DatabaseServices.OpenMode.ForRead)
> If myLTR.Name = OldName Then
> myLTR.UpgradeOpen()
> myLTR.Name = NewName
>
> End If
>
> End While
>
> myTrans.Dispose()
> myTransMan.Dispose()
> End Sub
> "
>
Message 3 of 6
DerUhrmacher
in reply to: DerUhrmacher

Hello James

Thank You very much.
Sometimes after nights at the computer, You don't see the simpliest things 🙂

I placed the "myTrans.Commit()" just in the line before "end if" and now it works.

Kind regards
Andreas
Message 4 of 6
Anonymous
in reply to: DerUhrmacher

Check out using a Using statemtment to dispose of your underlying unmanaged
Objects.
Also For Each to enumerate your SymbolTable...
{code}
Public Sub Cmd1() ' This method can have any name

Dim doc As Document = _
Application.DocumentManager.MdiActiveDocument

Using tr As Transaction = _
doc.Database.TransactionManager.StartTransaction()

Dim layTable As LayerTable = _
tr.GetObject(doc.Database.LayerTableId, _
OpenMode.ForRead)

Dim id As ObjectId

For Each id In layTable
Dim rec As LayerTableRecord = _
tr.GetObject(id, OpenMode.ForRead)

If (rec.Name = "gunga") Then
rec.UpgradeOpen()
rec.Name = "lagunga"
End If
Next

tr.Commit()

End Using

'or better...

Using tr As Transaction = _
doc.TransactionManager.StartTransaction()

Dim layTable As LayerTable = _
tr.GetObject(doc.Database.LayerTableId, _
OpenMode.ForRead)

If (layTable.Has("goo")) Then
Dim r As LayerTableRecord = _
tr.GetObject(layTable("goo"), OpenMode.ForWrite)

r.Name = "bar"

tr.Commit()

End If

End Using

End Sub
{code}

wrote in message news:6211936@discussion.autodesk.com...
Hello

I tried to rename layers this way, but it seems not to work.
What is wrong with it? No errormessage, but no result too 😞

Regards,
Andreas

"
Private Sub LayerRename(ByVal OldName As String, ByVal NewName As String)

Dim myDWG As ApplicationServices.Document
Dim myTransMan As DatabaseServices.TransactionManager
Dim myTrans As DatabaseServices.Transaction
myDWG =
ApplicationServices.Application.DocumentManager.MdiActiveDocument
myTransMan = myDWG.TransactionManager
myTrans = myTransMan.StartTransaction
Dim myLT As DatabaseServices.LayerTable
Dim myLTR As DatabaseServices.LayerTableRecord
Dim mySTE As DatabaseServices.SymbolTableEnumerator
myLT =
myDWG.Database.LayerTableId.GetObject(DatabaseServices.OpenMode.ForRead)
mySTE = myLT.GetEnumerator

While mySTE.MoveNext
myLTR =
mySTE.Current.GetObject(DatabaseServices.OpenMode.ForRead)
If myLTR.Name = OldName Then
myLTR.UpgradeOpen()
myLTR.Name = NewName

End If

End While

myTrans.Dispose()
myTransMan.Dispose()
End Sub
"
Message 5 of 6
Anonymous
in reply to: DerUhrmacher

I should have stuck and Exit For in the loop...
{code}
If (rec.Name = "gunga") Then
rec.UpgradeOpen()
rec.Name = "lagunga"
Exit For
End If
{code}

"Paul Richardson" wrote in message
news:6212318@discussion.autodesk.com...
Check out using a Using statemtment to dispose of your underlying unmanaged
Objects.
Also For Each to enumerate your SymbolTable...
{code}
Public Sub Cmd1() ' This method can have any name

Dim doc As Document = _
Application.DocumentManager.MdiActiveDocument

Using tr As Transaction = _
doc.Database.TransactionManager.StartTransaction()

Dim layTable As LayerTable = _
tr.GetObject(doc.Database.LayerTableId, _
OpenMode.ForRead)

Dim id As ObjectId

For Each id In layTable
Dim rec As LayerTableRecord = _
tr.GetObject(id, OpenMode.ForRead)

If (rec.Name = "gunga") Then
rec.UpgradeOpen()
rec.Name = "lagunga"
End If
Next

tr.Commit()

End Using

'or better...

Using tr As Transaction = _
doc.TransactionManager.StartTransaction()

Dim layTable As LayerTable = _
tr.GetObject(doc.Database.LayerTableId, _
OpenMode.ForRead)

If (layTable.Has("goo")) Then
Dim r As LayerTableRecord = _
tr.GetObject(layTable("goo"), OpenMode.ForWrite)

r.Name = "bar"

tr.Commit()

End If

End Using

End Sub
{code}

wrote in message news:6211936@discussion.autodesk.com...
Hello

I tried to rename layers this way, but it seems not to work.
What is wrong with it? No errormessage, but no result too 😞

Regards,
Andreas

"
Private Sub LayerRename(ByVal OldName As String, ByVal NewName As String)

Dim myDWG As ApplicationServices.Document
Dim myTransMan As DatabaseServices.TransactionManager
Dim myTrans As DatabaseServices.Transaction
myDWG =
ApplicationServices.Application.DocumentManager.MdiActiveDocument
myTransMan = myDWG.TransactionManager
myTrans = myTransMan.StartTransaction
Dim myLT As DatabaseServices.LayerTable
Dim myLTR As DatabaseServices.LayerTableRecord
Dim mySTE As DatabaseServices.SymbolTableEnumerator
myLT =
myDWG.Database.LayerTableId.GetObject(DatabaseServices.OpenMode.ForRead)
mySTE = myLT.GetEnumerator

While mySTE.MoveNext
myLTR =
mySTE.Current.GetObject(DatabaseServices.OpenMode.ForRead)
If myLTR.Name = OldName Then
myLTR.UpgradeOpen()
myLTR.Name = NewName

End If

End While

myTrans.Dispose()
myTransMan.Dispose()
End Sub
"
Message 6 of 6
Anonymous
in reply to: DerUhrmacher

You're welcome.

James


DerUhrmacher wrote:
> Hello James
>
> Thank You very much.
> Sometimes after nights at the computer, You don't see the simpliest things 🙂
>
> I placed the "myTrans.Commit()" just in the line before "end if" and now it works.
>
> Kind regards
> Andreas
>

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