概要 - ペーパー空間ビューポートを作成する(VBA/ActiveX)

ペーパー空間ビューポートは、AddPViewport メソッドを使用して作成します。

AddPViewport メソッドでは、新しいビューポートの中点、幅、高さを指定する必要があります。ビューポートの作成前に、ActiveSpace プロパティを使用して、ペーパー空間を現在の空間に設定します(通常は、TILEMODE を 0 に設定します)。

PViewport オブジェクトの作成後は、視線方向(Direction プロパティ)、パース ビューのレンズ長(LensLength プロパティ)、グリッド表示(GridOn プロパティ)など、ビュー自体のプロパティを設定することができます。また、画層(Layer プロパティ)、線種(Linetype プロパティ)、線種尺度(LinetypeScale プロパティ)など、ビューポート自体のプロパティもコントロールできます。

浮動ビューポートを作成し、有効にする

以下の例は、AutoCAD をペーパー空間へ切り替え、浮動ビューポートを作成し、ビューを設定して、ビューポートを有効にしています。

Sub Ch9_SwitchToPaperSpace()
   ' Set the active space to paper space
    ThisDrawing.ActiveSpace = acPaperSpace

   ' Create the paperspace viewport
    Dim newVport As AcadPViewport
    Dim center(0 To 2) As Double
    center(0) = 3.25
    center(1) = 3
    center(2) = 0
    Set newVport = ThisDrawing.PaperSpace. _
 AddPViewport(center, 6, 5)

   ' Change the view direction for the viewport
    Dim viewDir(0 To 2) As Double
    viewDir(0) = 1
    viewDir(1) = 1
    viewDir(2) = 1
    newVport.Direction = viewDir

   ' Enable the viewport
    newVport.Display True

   ' Switch to model space
    ThisDrawing.MSpace = True

   ' Set newVport current
   ' (not always necessary but a good idea)
    ThisDrawing.ActivePViewport = newVport

   ' Zoom Extents in model space
    ZoomExtents

   ' Turn model space editing off
    ThisDrawing.MSpace = False

    ' ZoomExtents in paperspace
    ZoomExtents
End Sub

上記のコードの順序は重要です。一般的に、AutoCAD コマンド ラインの処理手順と同じ順番で手順を実行する必要があります。ビューの定義とビューポートの有効化では、予想外の結果が生じる可能性があります。

注: ビューの要素(視線方向、レンズ長など)を設定または修正するには、Viewport オブジェクトの Display メソッドがオフ(FALSE)になっている必要があります。また、ビューポートを現在のビューポートに設定する前に、Display メソッドをオン(TRUE)に設定する必要があります。

4 つの浮動ビューポートを作成する

ここでは、「浮動ビューポートを作成し、有効にする」の例を使って、4 つの浮動ビューポートを作成し、平面図、前面図、右側面図、およびアイソメ図の各ビューを設定してみます。これらの各ビューは、ペーパー空間に対して 1/2 の尺度で設定されています。次の例を実行する前に、3D ソリッド球を作成して、これらのビューポートで表示させてください。

Sub Ch9_FourPViewports()
    Dim topVport, frontVport As AcadPViewport
    Dim rightVport, isoVport As AcadPViewport
    Dim pt(0 To 2) As Double
    Dim viewDir(0 To 2) As Double
    ThisDrawing.ActiveSpace = acPaperSpace
    ThisDrawing.MSpace = True
' Take the existing PViewport and make it the topVport
    pt(0) = 2.5: pt(1) = 5.5: pt(2) = 0
    Set topVport = ThisDrawing.ActivePViewport
    'No need to set Direction for top view
    topVport.center = pt
    topVport.width = 2.5
    topVport.height = 2.5
    topVport.Display True
    ThisDrawing.MSpace = True
    ThisDrawing.ActivePViewport = topVport
    ZoomExtents
    ZoomScaled 0.5, acZoomScaledRelativePSpace
'Create and setup frontVport
    pt(0) = 2.5: pt(1) = 2.5: pt(2) = 0
    Set frontVport = ThisDrawing.PaperSpace. _
 AddPViewport(pt, 2.5, 2.5)
    viewDir(0) = 0: viewDir(1) = 1: viewDir(2) = 0
    frontVport.direction = viewDir
    frontVport.Display acOn
    ThisDrawing.MSpace = True
    ThisDrawing.ActivePViewport = frontVport
    ZoomExtents
    ZoomScaled 0.5, acZoomScaledRelativePSpace
'Create and setup rightVport
    pt(0) = 5.5: pt(1) = 5.5: pt(2) = 0
    Set rightVport = ThisDrawing.PaperSpace. _
 AddPViewport(pt, 2.5, 2.5)
    viewDir(0) = 1: viewDir(1) = 0: viewDir(2) = 0
    rightVport.direction = viewDir
    rightVport.Display acOn
    ThisDrawing.MSpace = True
    ThisDrawing.ActivePViewport = rightVport
    ZoomExtents
    ZoomScaled 0.5, acZoomScaledRelativePSpace
'Create and set up isoVport
    pt(0) = 5.5: pt(1) = 2.5: pt(2) = 0
    Set isoVport = ThisDrawing.PaperSpace. _
 AddPViewport(pt, 2.5, 2.5)
    viewDir(0) = 1: viewDir(1) = 1: viewDir(2) = 1
    isoVport.direction = viewDir
    isoVport.Display acOn
    ThisDrawing.MSpace = True
    ThisDrawing.ActivePViewport = isoVport
    ZoomExtents
    ZoomScaled 0.5, acZoomScaledRelativePSpace
'Finish: Perform a regen in all viewports
    ThisDrawing.Regen True
End Sub