Hier hebt u momenteel mijn volledige code:
De naam strLayer1 en strLayer2 zijn de namen van de layers die men wil bevriezen in de viewports.
Code Selecteer
public sub bevriezenlayers()
Dim objEntity As AcadObject
Dim objPViewport As AcadObject
Dim objPViewport2 As AcadObject
Dim objViewPortNew As AcadPViewport
Dim XdataType As Variant
Dim XdataValue As Variant
Dim I As Integer
Dim D As Integer
Dim Counter As Integer
Dim strLayer As String
Dim objVPLeft As AcadPViewport
Dim objVPRight As AcadPViewport
Dim objEnt As AcadEntity
Dim objLayout As AcadLayout
Dim xL As Double
Dim xR As Double
Dim elem As Variant
Set objVPLeft = Nothing
Set objVPRight = Nothing
'onderscheid maken tussen de 2 viewports
For Each elem In ThisDrawing.ActiveLayout.Block
With elem
If elem.EntityName = "AcDbViewport" Then
If objVPLeft Is Nothing Then
Set objVPLeft = elem
Else
Set objVPRight = elem
xL = objVPLeft.center(0)
xR = objVPRight.center(0)
If xL > xR Then
Set objVPRight = objVPLeft
Set objVPLeft = elem
End If
End If
End If
End With
Next elem
If ThisDrawing.ActiveSpace = acModelSpace Then
MsgBox "This program only works with PaperSpace Viewports" & vbCr & _
"Please go to PaperSpace", vbCritical
Exit Sub
End If
'viewport 1 bevriezen
Set objVPLeft = ThisDrawing.ActivePViewport
ThisDrawing.MSpace = True
Set objVPLeft = ThisDrawing.ActivePViewport
objVPLeft.GetXData "ACAD", XdataType, XdataValue
For I = LBound(XdataType) To UBound(XdataType)
If XdataType(I) = 1003 Then
Counter = I + 1
If XdataValue(i) = "strLayer1" Then Exit Sub
End If
Next
If Counter = 0 Then
For I = LBound(XdataType) To UBound(XdataType)
If XdataType(I) = 1002 Then Counter = I - 1
Next
End If
XdataType(Counter) = 1003
XdataValue(Counter) = "strLayer1"
ReDim Preserve XdataType(Counter + 1)
ReDim Preserve XdataValue(Counter + 1)
XdataType(Counter + 1) = 1002
XdataValue(Counter + 1) = "}"
ReDim Preserve XdataType(Counter + 2)
ReDim Preserve XdataValue(Counter + 2)
XdataType(Counter + 2) = 1002
XdataValue(Counter + 2) = "}"
objVPLeft.SetXData XdataType, XdataValue
Set objVPLeft = ThisDrawing.ActivePViewport
ThisDrawing.MSpace = True
objVPLeft.Display (False)
objVPLeft.Display (True)
'viewport 2 bevriezen
Set objVPRight = ThisDrawing.ActivePViewport
ThisDrawing.MSpace = True
objVPRight.GetXData "ACAD", XdataType, XdataValue
For I = LBound(XdataType) To UBound(XdataType)
If XdataType(I) = 1003 Then
Counter = I + 1
If XdataValue(I) = "strLayer2" Then Exit Sub
End If
Next
If Counter = 0 Then
For I = LBound(XdataType) To UBound(XdataType)
If XdataType(I) = 1002 Then Counter = I - 1
Next
End If
XdataType(Counter) = 1003
XdataValue(Counter) = "strLayer2"
ReDim Preserve XdataType(Counter + 1)
ReDim Preserve XdataValue(Counter + 1)
XdataType(Counter + 1) = 1002
XdataValue(Counter + 1) = "}"
ReDim Preserve XdataType(Counter + 2)
ReDim Preserve XdataValue(Counter + 2)
XdataType(Counter + 2) = 1002
XdataValue(Counter + 2) = "}"
objVPRight.SetXData XdataType, XdataValue
Set objVPRight = ThisDrawing.ActivePViewport
ThisDrawing.MSpace = False
objVPRight.Display (False)
objVPRight.Display (True)
end sub
De naam strLayer1 en strLayer2 zijn de namen van de layers die men wil bevriezen in de viewports.