オブジェクトは、直接またはユーザ定義変数を使用して参照できます。オブジェクトを直接参照するには、呼び出し側の階層にそのオブジェクトを含めます。
たとえば、次の文はモデル空間に線分を追加します。階層は、ThisDrawing から始まり、ModelSpace オブジェクトに進み、次に AddLine メソッドを呼び出します。
(setq acadObj (vlax-get-acad-object) doc (vla-get-ActiveDocument acadObj)) (setq startPoint (vlax-3d-point 0 0 0) endPoint (vlax-3d-point 30 20 0)) (setq lineObj (vla-AddLine (vla-get-ModelSpace doc) startPoint endPoint))
Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As Double Dim LineObj as AcadLine startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0 endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0 Set LineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
ユーザ定義変数を使ってオブジェクトを参照するには、変数をオブジェクトのタイプとして定義し、次に変数を適当なオブジェクトに設定します。たとえば、次のコードは、タイプ AcadModelSpace の変数(moSpace)を定義し、その変数を現在のモデル空間に設定します。
(setq acadObj (vlax-get-acad-object) doc (vla-get-ActiveDocument acadObj) moSpace (vla-get-ModelSpace doc))
Dim moSpace As AcadModelSpace Set moSpace = ThisDrawing.ModelSpace
次の文は、ユーザ定義変数を使用して、モデル空間に線分を追加します。
(setq startPoint (vlax-3d-point 0 0 0) endPoint (vlax-3d-point 30 20 0)) (setq lineObj (vla-AddLine moSpace startPoint endPoint))
Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As Double Dim LineObj as AcadLine startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0 endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0 Set LineObj = moSpace.AddLine(startPoint,endPoint)
次の例は、モデル空間の最初の図形オブジェクトを返します。ペーパー空間図面についても、同様のコードが同じ働きをします。すべての図面オブジェクトを AcadEntity オブジェクトとして定義できます。
(vl-load-com) (defun c:Ch2_FindFirstEntity() (setq acadObj (vlax-get-acad-object) doc (vla-get-ActiveDocument acadObj) moSpace (vla-get-ModelSpace doc)) (if (> (vla-get-Count moSpace) 0) (progn (setq entity (vla-Item moSpace 0)) (alert (strcat (vla-get-ObjectName entity) " is the first entity in model space." )) ) (alert "There are no objects in model space.") ) )
Sub Ch2_FindFirstEntity() ' This example returns the first entity in model space On Error Resume Next Dim entity As AcadEntity If ThisDrawing.ModelSpace.count <> 0 Then Set entity = ThisDrawing.ModelSpace.Item(0) MsgBox entity.ObjectName + _ " is the first entity in model space." Else MsgBox "There are no objects in model space." End If End Sub