VBScript
このリファレンスでは、Altium Designer でスクリプトを作成するために使用される VisualBasic Scripting 言語について説明します。スクリプトシステムでサポートされている VisualBasic Scripting のステートメント、関数、拡張機能の詳細を提供します。
このリファレンスの内容:
VBScript 言語
Visual Basic Scripting(略して VBScript)は、Altium Designer のオブジェクトモデルおよびビジュアルコンポーネントを扱うスクリプトを作成するために使用できます。このリファレンスでは、基本的なプログラミング概念と Altium Designer の基本操作に精通していることを前提としています。
Altium Designer のスクリプトシステムは、Microsoft ActiveX Scripting システムから派生した VBScript 言語(および他のスクリプト言語)をサポートしています。したがって、たとえば Altium Designer で使用されているのと同じ ActiveX スクリプトエンジンに基づく CScripts や WScripts を使用できるはずです。
Altium Designer でサポートされるすべてのスクリプト言語は型なし(typeless / untyped)であり、これはスクリプトでレコードやクラスを定義したり、ポインタを関数のパラメータとして渡したりできないことを意味します。
VBScript script example
Sub DisplayName (sName)
MsgBox "My Name is " & sName
End Sub
Altium Designer と Delphi RTL
スクリプトシステムは、Embarcadero Delphi Run Time Library(RTL)のサブセットと、Altium Designer API をサポートします。
VBScript スクリプトは、Altium Designer 内の複数のオブジェクトモデルにアクセスできます。たとえば、PCB オブジェクトモデルを VBScript から使用して PCB ドキュメント上の PCB オブジェクトを扱ったり、Workspace Manager オブジェクトモデルを使用してプロジェクトとそのドキュメントを操作し、 ネットリストデータを抽出したりできます。
スクリプティングリファレンスには、Altium Designer のオブジェクトモデル、コンポーネント、グローバルルーチン、型、変数など、このスクリプト言語を構成する要素に関するインターフェース情報が含まれています。VBScript 関数の詳細については Microsoft Visual Basic のドキュメントを参照してください。
サーバープロセス
スクリプトはサーバープロセスを実行するために使用でき、サーバープロセスは Altium Designer 内のコマンドを表します。
VBScript ソースファイル
VBScript プロジェクトは、スクリプトドキュメント(スクリプトユニットおよびスクリプトフォーム)を格納するように構成されています。スクリプトは、メニュー項目、ツールバーボタン、またはシステムメニューの Run Script ダイアログから実行できます。
PRJSCR、VBS、DFM ファイル
スクリプトは、*.PRJSCR 拡張子を持つプロジェクトとして整理されます。各 VBScript プロジェクトは、*.vbs 拡張子を持つファイルで構成されます。ファイルはスクリプトユニットまたはスクリプトフォームのいずれかで、各フォームには *.vbs 拡張子の VBScript スクリプトファイルと、それに対応する *.dfm 拡張子のフォームが含まれます)。スクリプトフォームは、Altium Designer 上で動作するさまざまなコントロールをホストするグラフィカルウィンドウ(ダイアログ)です。
スクリプトを異なるプロジェクトに関連付けることも可能であり、スクリプト数やそのプロシージャ/関数を管理するために、スクリプトを複数のプロジェクトに分けて整理することを強く推奨します。スクリプト(スクリプトユニットおよびスクリプトフォーム)は、Altium Designer 内から呼び出せる関数/プロシージャで構成されます。
VBScript の例
このリファレンスに含まれる簡単な例は、Altium Designer における VBScript プログラミングの基本機能を示しています。
VBScript は、スクリプトフォーム、スクリプトユニット、関数、Altium Designer スクリプティング API のオブジェクト、およびスクリプトシステムで公開されている Embarcadero Delphi RTL の関数/オブジェクトのサブセットを使用できます。
VBScript スクリプトの作成
このセクションでは、Altium Designer で VBScript を作成するための基本概念を扱います。
VBScript の命名規則
VBScript の変数は大文字/小文字を区別しません。つまり、大文字と小文字の変数は同じ意味になります:
Example
The variables b and B are the same.
b = 60
B = 60
ローカル変数とグローバル変数
すべてのスクリプトにはローカル変数とグローバル変数があるため、スクリプトプロジェクト内では変数名が一意になるようにすることが重要です。変数が outside サブルーチンや関数の外側で定義されている場合、それらはグローバルであり、同一プロジェクト内の任意のユニットからアクセスできます。
変数が inside ルーチンの内側で定義されている場合、それらのローカル変数はそのルーチンの外部からアクセスできません。スクリプトは型なしであるため、変数は型を伴って初期化されません。
プロシージャ内のローカル変数は自動的に初期化されます。
Variable Initialization
Sub Example
Dim X
Dim s
' x set to 0
x = 0
' s set to empty
s = ""
End Sub
サブルーチンと関数
VBScript では 2 種類のプロシージャ(サブルーチンと関数)を使用できます。関数のみが値を返します。スクリプト内でサブルーチンまたは関数を呼び出す構文は次のとおりです:
Call SubRoutineA(parameters)
...または
SubRoutine parameters
Subroutine example
Sub SetTheHeight AHeight
Set Component.Height = AHeight
End Sub
Function example
Function Addone(value)
AddOne = Value + 1
End Function
Another Function example
Function Test(s)
Test = S + " rules.."
End Function
Sub DisplayName (sName)
MsgBox sName
End Sub
Sub Main
Dim S
S = "Altium Designer"
DisplayName Test(s)
End Sub
パラメータと引数
VBScript では、プロシージャ宣言には通常パラメータのリストがあります。変数は型なしと見なされ、スクリプトシステムが変数型を自動的に判断する点に注意してください。プロシージャ呼び出し時にパラメータの代わりに渡す値を引数と呼びます。
Example of a subroutine with a parameter
Sub DisplayName (sName)
MsgBox "My Name is " & sName
End Sub
Example of calling a subroutine
Sub Main
DisplayName "Altium Designer Rules"
End Sub
サブルーチンまたは関数を呼び出す際に Call キーワードを使用するかどうかは任意です(後方互換性のために維持されています)。
スクリプト内のコメント
スクリプトにおけるコメントは、プログラマのために含める実行されないコード行です。コメントはスクリプト内のほぼどこにでも含めることができます。
VBScript のコメント:
-
'以降のテキストはすべて無視されます。 -
Rem以降のテキストはすべて無視されます。
Example
' This whole line is a comment
REM this whole line is also a comment
DocName = Document.Name ' Get name of active document
スクリプト行の分割
VBScript では、各コードステートメントは行末(CR/LF の組み合わせ)で終了し、ステートメントの終わりを示します。VBScript では、アンダースコア文字(_)を使用して、1 つのステートメントを複数行に分割し、長い命令を 2 行以上に分けて記述できます。
VBScript は、スクリプト内の 1 行のコード長に実用上の制限を設けていません。ただし、可読性とデバッグのしやすさの観点から、画面上や印刷物で容易に読めるようにコード行の長さを制限するのが良い習慣です。コード行が非常に長い場合は複数行に分割でき、VB インタプリタはそれを 1 行で書かれたかのように扱います。
Unformatted code example
If Not (PcbApi_ChooseRectangleByCorners(BoardHandle,"Choose first corner","Choose final corner",x1,y1,x2,y2)) Then EndIf
Formatted code example
If Not (PcbApi_ChooseRectangleByCorners(BoardHandle,_
“Choose first corner”,_
“Choose final corner”,_
x1,y1,x2,y2)) Then EndIf
Altium Designer オブジェクトモデルの使用
スクリプトシステムの最大の特長は、Altium Designer オブジェクトのインターフェース(Object Interfaces)を VBScript で使用できることです。たとえば、回路図インターフェースおよび PCB インターフェースをそれぞれ使用することで、回路図ドキュメントや PCB ドキュメント上の設計オブジェクトを更新できます。
Altium Designer のオブジェクトインターフェースは、任意のスクリプトで使用できます。通常、スクリプト内でインターフェースをインスタンス化する必要はありません。既存の Altium Designer オブジェクトを表すインターフェースを取得し、そのインターフェースから埋め込み(embedded)または集約(aggregate)されたインターフェースオブジェクトを取り出して、プロパティ値の取得/設定を行います。
PCB ドキュメントとそのデータオブジェクトにアクセスするには、まず PCBServer 関数を呼び出します。慣例として、インターフェース名には I 文字が接頭辞として付けられます。たとえば、 IPCB_Board は Altium Designer 内の既存 PCB ドキュメントのインターフェースを表します。
Example
' Checks if the current document is a Schematic document
If SchServer Is Nothing Then Exit Sub
Set CurrentSheet = SchServer.GetCurrentSchDocument
If CurrentSheet Is Nothing Then Exit Sub
PCB ドキュメントにアクセスするには、PCBServer を呼び出します。
Creation of a PCB Object Using the PCB Object Model
Sub ViaCreation
Dim Board
Dim Via
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
' Create a Via object
Via = PCBServer.PCBObjectFactory(eViaObject, eNoDimension, eCreate_Default)
Via.X = MilsToCoord(7500)
Via.Y = MilsToCoord(7500)
Via.Size = MilsToCoord(50)
Via.HoleSize = MilsToCoord(20)
Via.LowLayer = eTopLayer
Via.HighLayer = eBottomLayer
' Put this via in the Board object
Board.AddPCBObject(Via)
End Sub
オブジェクト、インターフェース、関数
Altium Designer のオブジェクト、インターフェース、関数は、スクリプトから次のものを通じてアクセスできます:
- Client API
- PCB Server API
- Schematic Server API
- Work Space Manager Server API
- Nexus API
- Altium Designer API functions
- パラメトリックプロセス
予約語と関数
スクリプトシステムは、Microsoft Active Scripting 言語技術から派生した VBScript 言語をサポートしています。VBScript の予約語は次のとおりです:
A, B
Abs, Array, Asc, Atn
C
Call, Case, CBool, CByte, CCur, CDate, CDbl, Chr, CInt, Class, CLng, Const, Conversions, Cos, CreateObject, CSng, CStr
D, E
DateAdd, DateDiff, DatePart, DateSerial, DateValue, Day, Derived Math, Dim, Do, Each, Erase, Escape, Empty, Eval, Execute, Exit, Exp
F, G, H
False, Filter, For, FormatCurrency, FormatDateTime, FormatNumber, FormatPercent, Function GetLocale, GetObject, GetRef, Hex, Hour
I, L, M
If, Is, InputBox, Instr, InStrRev, Int, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, Join, LBound, LCase, Left, Len, LoadPicture, Log, LTrim, Maths, Mid, MInute, Month, MonthName, MsgBox
N, O
Next, Nothing, Now, Null, Oct, On Error
P, R
Private, Property, Public, Randomize, ReDim, Rem, RTrim, Replace, RGB, Right, Rnd, Round
S, T
ScriptEngine, ScriptEngineBuildVersion, ScriptEngineMajorVersion, ScriptEngineMinorVersion, Second, Select, Set, SetLocale, Sgn, Sin, Space, Split, Sqr, Stop, StrComp, String, StrReverse, Sub, Tan, Then, Time, Timer, Timeserial, TimeValue, Trim, True, TypeName
U, V, W, X, Y
UCase, Unescape, While, Wend, With, VarType, Weekday, WeekdayName, Year