Autocad　VBA　入門　第１回

Autocad　VBA  入門　のご紹介　　第1回　

　　CAD作業をVBAを使って自動化する技術をご紹介します。
  　本記事以外にも下記にて学習が可能です。ご利用ください。
   
   また、Autocad　自動化の受注業務も行っています。   
   下記ホームページ下部のメールよりお気軽にご相談ください。
     https://www.autotex.org/
  
 (1)Youtube　動画で詳細に解説
  https://www.youtube.com/watch?v=BSOfA0CdP4Y&list=PLTGhsY0lj6fYNFqS8rBjVbxjcqclj_5YD&index=10

(2)テキストの販売・・・下記ホームページよりご購入ください。
  https://www.autotex.org/
  注意：テキストは現在(2024年）　入門編と基礎編があります。
  　　　ご購入の領収書発行を行っています。
    
（例-1）直線を作図・・・（10,20)と(60,40）を結ぶ直線
![直線作図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3373976/b70cb347-455f-c90d-b6c4-9e0c633503fc.png)

Sub Example_AddLine()		
　'線オブジェクトを宣言		
    Dim lineObj As AcadLine		
		
　'線オブジェクトの要素を宣言		
    Dim startPoint(0 To 2) As Double　　’線分の始点（3D WCS 座標）	
    Dim endPoint(0 To 2) As Double　　　’線分の終点（3D WCS 座標）	
		
    '線オブジェクトの要素を設定（線の始点と終点）		
    startPoint(0) = 1０: startPoint(1) =20: startPoint(2) = 0		
    endPoint(0) = 60: endPoint(1) = 40: endPoint(2) = 0		
		
　'モデル空間に線を作成		
    Set lineObj = ThisDrawing.ModelSpace.AddLine　(startPoint, endPoint)		
    lineObj.color= acCyan		
		
　'図面全体表示	
  　　　  ZoomAll		
    		
End Sub		

（例-２）円を作図・・・中心（10,20)に半径３０の円を作図

![円作図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3373976/fb8799cd-ea39-05c6-7a12-0a2d682224fd.png)

Sub Example_AddCircle()	
	
’円オブジェクトの宣言	
    Dim circleObj As AcadCircle	
	
’円オブジェクト要素の宣言	
    Dim centerPoint(0 To 2) As Double　　’円の中心（3D WCS 座標)	
    Dim radius As Double　　　　　　　　’円の半径（正の数値）	
	
’円オブジェクト要素の設定	
    centerPoint(0) = 10#: centerPoint(1) =20#: centerPoint(2) = 0#	
    radius = 30#
	
    ''モデル空間に円を作成	
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)	
　　circleObj.color=acYellow	
	
’図面全体表示	
 　   ZoomAll	
    	
End Sub	

（例-3）ソリッドを作図
![ソリッド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3373976/a471758f-ac61-a5a8-6269-b7a648a59f47.png)

Sub Example_AddSolid()	
	
’ソリッドオブジェクトの宣言	
    Dim solidObj As AcadSolid	
	
’ソリッドオブジェクト要素の宣言	
    Dim point1(0 To 2) As Double　　　’1 番目の点（ 3D WCS 座標）	
    Dim point2(0 To 2) As Double　　　’2 番目の点（ 3D WCS 座標）	
    Dim point3(0 To 2) As Double　　　’3 番目の点（ 3D WCS 座標）	
    Dim point4(0 To 2) As Double　　　’4 番目の点（ 3D WCS 座標）	
	
’ソリッドオブジェクト要素の設定	
    point1(0) = 50#: point1(1) = 0#: point1(2) = 0#	
    point2(0) = 80#: point2(1) = 0#: point2(2) = 0#	
    point3(0) = 80#: point3(1) = 60#: point3(2) = 0#	
    point4(0) = 50#: point4(1) = 60#: point4(2) = 0#
	
    ' モデル空間にソリッドオブジェクトを作成	
    Set solidObj = ThisDrawing.ModelSpace.AddSolid(point1, point2, point3, point4)	
    solidObj.color=acGreen	
	
’図面全体表示	
    ZoomAll	
	
End Sub	

（例-４）リージョンを作図
![リージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3373976/628dce04-8b80-a2c3-fd77-80e865abd966.png)

Sub Example_AddRegion()		
		
’リージョンオブジェクトの宣言		
　Dim regionObj As Variant　　　’タイプ:バリアント型(Region オブジェクトの配列)		
		
’リージョンオブジェクトの領域宣言		
    Dim curves(0 To 1) As AcadEntity　　　'''''円弧とラインを想定しているので０，１の２個でオブジェクト配列宣言		
    '円弧の要素宣言		
    Dim centerPoint(0 To 2) As Double		
    Dim radius As Double		
    Dim startAngle As Double		
    Dim endAngle As Double		
		
'円弧の要素設定		
    centerPoint(0) = -30#: centerPoint(1) = -30#: centerPoint(2) = 0#		
    radius = 30#: startAngle = 30: endAngle = 240		
		
    ' 度単位の角度をラジアン単位の角度に変換		
    Dim startAngleInRadian As Double		
    Dim endAngleInRadian As Double		
    startAngleInRadian = startAngle* 3.141592 / 180#		
    endAngleInRadian = endAngle * 3.141592 / 180#			
		
　’リージョンオブジェクトの領域設定・・・領域を形成する円弧(0)とライン(1)を作成		
    Set curves(0) = ThisDrawing.ModelSpace.AddArc(centerPoint, radius,  startAngleInRadian , endAngleInRadian )		
    Set curves(1) = ThisDrawing.ModelSpace.AddLine(curves(0).startPoint, curves(0).endPoint)		
		
    ' リージョンを作成　（注意：Setは不要）		
    regionObj = ThisDrawing.ModelSpace.AddRegion(curves)		
   regionObj(0).color = acMagenta    　　　　 '''色を設定するには配列(0)にしないといけない。		
		
’図面全体表示		
    ZoomAll		
		
End Sub		

（例-５）ハッチングを作図
![ハッチング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3373976/01123f88-d05f-0351-e6e9-92e90bf110fe.png)

Sub Example_AddHatch()
		
’ハッチングオブジェクトの宣言		
    Dim hatchObj As AcadHatch		
		
’ハッチングオブジェクトの要素宣言		
    Dim PatternType As Long　　　　　’パターンタイプ		
    Dim patternName As String　　　　’パターン名		
    Dim bAssociativity As Boolean　　　’パターンの自動調整　（True：あり、False：なし）		
    		
’ハッチングオブジェクトの要素設定		
    PatternType = 0		
    patternName ="ANSI31"		
    bAssociativity = True　　　　　　　　’パターンの自動調整　あり		
		
    ' 'モデル空間にハッチオブジェクトを作成		
    Set hatchObj = ThisDrawing.ModelSpace.AddHatch　(PatternType, patternName, bAssociativity)
		
    ' 'ハッチの外側の境界を宣言    '''''外側のループは閉じたループで、内側のループより先に作成しなければなりません。		
    Dim outerLoop(0 To 0) As AcadEntity		
		
　' 'ハッチの外側の境界（円）の要素宣言		
    Dim center(0 To 2) As Double		
    Dim radius As Double		
		
　' 'ハッチの外側の境界（円）の要素設定		
    center(0) =-30: center(1) = 30: center(2) = 0		
    radius = 15		
		
　' 'ハッチの外側の境界（円）の作成		
    Set outerLoop(0) = ThisDrawing.ModelSpace.AddCircle　(center, radius)		
 　outerLoop(0).color = acGreen		
		
    '''''有効な外側のループを作成したら、AppendInnerLoop メソッドを使用して 内側のループを追加します。		
    ' 'ハッチングオブジェクトに外側の境界を追加し、ハッチングを表示		
    hatchObj.AppendOuterLoop (outerLoop)    		
 　hatchObj.color=acGreen		
		
    hatchObj.Evaluate          '''''境界用のハッチング線分または塗り潰しを計算		
		
    ThisDrawing.Regen 　True		
		
End Sub		
		
今回は簡単な2D図形の作図を扱いました。
次回、2回目は図形の編集（複写、鏡像、移動、回転など）を扱います。