JWB2000〜2002のシンボルオブジェクトモデルの概要
2001.09.05.現在
![]() |
|
現在 JWB2000〜2002は、JWB Fun Club 及び JWBパティオを拠点とし開発を進めているが、JWB2000〜2002のCAD機能で、皆さんは何に興味を示すだろうか?作図メニューとしてのドラッグメニュー(仮)に興味を抱く方もおりましょうが、ここでは、JWB2000〜2002のスクリプト機能について説明する事にいたします。
★★JW_CADの外部変形に+αを?
JW_CADをメインに使っている方なら、一度は外部変形を使ったことが有るでしょう。しかし、外部変形に慣れてくると、こう言う作図方法で、一連の作業を自動化したいとか、基本数値を入力するだけで、特定の図形を決まった位置に配置したいとか....色々欲が出てくるものです。しかし、線・円・文字・点など1つ1つの要素を吐き出して外部で処理しようとしても非常に手間だったり、します。なぜなら、目で見る限りは特定の図形でも、内部では単なる線の集まりに過ぎないからです。
★皆さんは Excel の VBA(Visual Basic for Application)を使ったことがありますか?
ExcelのVBAは、一度足を踏み込んでしまうと、もう止められませんね!(VBAに付いては関連書籍をご覧ください)
JWB2000〜2002のスクリプト機能は、Excel ←→ VBA の関係に非常に似ています。また、COMテクノロジーのオートメーション機能に対応し、プロパティ・メソッド以外に、イベントが扱えると言う点でも似ています。
★JWB2000〜2002で使用する VBScriptエンジンについて...
JWB2000〜2002は、VBScript言語を内部で使用する都合上、VBScriptエンジンが必要です。VBScriptエンジンはWin98/Me/2000には標準でインストールされています。また、Win95/NT4.0の方は、Microsoft
Internet Explorer 4.0以降、または Windows Scripting Host(いずれも無償で、Microsoftサイトからダウンロードできます)をインストールされることにより、VBScriptエンジンがインストールされます。
★シンボルオブジェクト(オートメーションオブジェクト)等のプロパティやメソッドやイベントについて...
JWB2000〜2002は、まだ開発中であり、プロパティやメソッドなど、まだ完成の域には達していませんが、下表のようなプロパティやメソッドを持っています。
|
シンボルオブジェクトモデル | ||
|---|---|---|
| (P)or(M) | 外部名 | 設定値/取得値 (★印は メゾットやプロパティーの新規追加名です。) |
| プロパティ | x | 原点のX座標 (例1)----------------------------------- Dim mvx, mvy, angle, zoom '宣言した変数はグローバル変数である。 mvx = 10 mvy = 10 angle = Rnd(1) zoom = -0.02 sym.x = sym.x + mvx 'この sym オブジェクトは、はじめから使える。 sym.y = sym.y + mvy '現図面内のy座標値にmvyプラス。 |
| プロパティ | y | 原点のY座標 '(例は原点のX座標参照) |
| プロパティ | Angle | 角度 (例1)----------------------------------- angle = Rnd(1) * 0.3 '0〜0.3までの乱数を発生 sym.Angle = sym.Angle+ angle '図面内の現角度に乱数発生角度をプラス。 |
| プロパティ | Scale | スケール(X軸スケール,Y軸スケールとも同じ値を書き込む) (例1)----------------------------------- sym.Scale = 1 'スケールを、1 に設定。 |
| プロパティ | Horizontal | X軸スケール (例1)----------------------------------- sym.Horizontal = 1 'X軸スケールを、1 に設定する。 sym.Vertical = 0.5 'Y軸スケールを、0.5 に設定する。 |
| プロパティ | Vertical | Y軸スケール '(例はX軸スケール参照) |
| プロパティ | Name | オブジェクト名 |
| プロパティ | Lock | オブジェクトの保護 |
| メソッド | Macro \ +回転させる +100回 +400回 |
オブジェクトで使用できるマクロの登録 (例1)----------------------------------- sym.Macro "TryRollingAttack (5)" , "コマ送り(5回) '1つのクラスモジュールで登録マクロ数は20個。 sym.Macro "TryRollingAttack (100)", "回転させる\100回" '”(プロシージャ名)¥(マクロ名)” sym.Macro "TryRollingAttack (400)", "回転させる\400回" (例2)----------------------------------- sym.Macro "Main", "Mainを実行" 'マクロ名を '\' で区切ることで、マクロリストを階層化できるので、 ' たくさんのマクロを操作する場合は大変有効である。 ' ※1つのクラスモジュールで一度に登録できるマクロ数は20個まで。 |
| メソッド | GetObject() 認識 +自分(A) ↓ +子(B) ○ +子(C) ○ +孫(D)○ |
自分の子オブジェクトを取得(子のシンボルオブジェクト、線・円・点・文字オブジェクトを取得) (例1)----------------------------------- Dim item Set item = sym.GetObject("平面図") 'これで、平面図と言う部品名をゲットします。 (例2)----------------------------------- Dim Item1, Item2 Set Item1 = sym.GetObject ("回転1") '自分の子オブジェクト( 回転1 と 回転2 )を取得 Set Item2 = sym.GetObject ("回転2") ※孫のオブジェクトの取得は「X」です。 例3)----------------------------------- sym.GetObject ("回転0\回転2").Script.kaiten3(count) 'sym.GetObject () の仕様変更。 'オブジェクト名を '\' で区切って階層化オブジェクトにアクセス可 |
| メソッド | Script | 自分に唯一のスクリプトオブジェクトを取得 (例1)----------------------------------- Dim Item1, Item2 Set Item1 = sym.GetObject ("回転1") '自分の子オブジェクト( 回転1 と 回転2 )を取得 Set Item2 = sym.GetObject ("回転2") Item1.Script.Moving '←"回転1"オブジェクトのスクリプトのMoving関数を実行 Item2.Script.Moving '←"回転2"オブジェクトのスクリプトのMoving関数を実行 |
| プロパティ | Visible | 部品の表示状態の設定。 ( 0=非表示,
1=グレー, 2=表示 ) (例1)----------------------------------- Dim item Set item = sym.GetObject("平面図") item.Visible = 2 'これで、平面図と言う部品が表示状態に切り替わります。 'ただし、平面図の親部品が非表示なら、表示されません。 |
| メソッド | Delete | 自分を削除する。 (例1)----------------------------------- sym.Delete '自分のスクリプトで自分を削除する。 (例2)----------------------------------- Dim Item1 Set Item1 = sym.GetObject ("回転1") Item1.Delete '回転1 と言う部品を削除する (例3)----------------------------------- sym.GetObject ("回転2").Delete '回転2 と言う部品を削除する '↑この様に1行で書くことも出来る。 |
| プロパティ | Count ★ | 直接の子のオブジェクト数を返す。(取得のみ) ※孫オブジェクトなどはカウントされない。 (例1)----------------------------------- For Each 〜 In sym 〜 Next ' を実行した時の繰り返し回数と一致します。 sym.Count |
|
ドキュメントオブジェクト | ||
|---|---|---|
| (P)or(M) | 外部名 | 設定値/取得値 |
| プロパティ | PaperRect.Left | 基準用紙の左端 X座標
(mm) (例1)----------------------------------- Dim Pleft, Pright, Ptop, Pbottom Pleft = doc.PaperRect.Left 'このdoc オブジェクトは、はじめからつかえる。 Pright = doc.PaperRect.Right Pbottom = doc.PaperRect.Bottom Ptop = doc.PaperRect.Top |
| プロパティ | PaperRect.Right | 基準用紙の右側 X座標 (mm) '(例は基準用紙の左端 X座標 (mm)参照) |
| プロパティ | PaperRect.Top | 基準用紙の上端 Y座標 (mm) '(例は基準用紙の左端 X座標 (mm)参照) |
| プロパティ | PaperRect.Bottom | 基準用紙の下端 Y座標 (mm) '(例は基準用紙の左端 X座標 (mm)参照) |
| プロパティ | BackGroundColor | 図面の背景色 (例1)----------------------------------- doc.BackGroundColor = RGB (255,255,0) '背景色を黄色に設定。 doc.BackGroundColor = RGB (255,0,0) '背景色を赤色に設定。 doc.BackGroundColor = RGB (0,0,0) '背景色を黒色に設定。 doc.BackGroundColor = RGB (255,255,255) '背景色を白色に設定。 |
| メソッド | ReDraw
★ ※ (UpDateAllViewsの廃止) |
強制
再描画指示 (例1)----------------------------------- doc.ReDraw (True) '全ての描画ウィンドウ更新する(再描画する) 'True = アニメーションに適した描画方法 'Fase = 一般的な描画方法 ※省略時は Flase とみなされる。 |
| メソッド | RootObject | 最上位シンボルオブジェクトを取得する。 |
※実際には、上記以外にも多くのプロパティやメソッドや、 線オブジェクト、円オブジェクト、点オブジェクト、文字オブジェクトのプロパティやメソッドも等も扱うが、ここでは参考程度に見て欲しい。
| 追加メソッド&プロパティ | |||||
|---|---|---|---|---|---|
| Symbol Object、線Object、円Object、点Object、文字Object に共通のメソッド&プロパティ | |||||
| M/P/I | 外部名 | 設定 | 取得 | 操作 | 説明 |
| プロパティ | Name | ○ | ○ | オブジェクトの名前 | |
| プロパティ | ID | X | ○ | オブジェクト種別のIDを取得 | |
| メソッド | Delete | ○ | オブジェクトを削除 | ||
| メソッド | GetParent | X | ○ | 親オブジェクトを取得 | |
| ※オブジェクト種別 ID は、 | |
|---|---|
| 定数名 | オブジェクト種別 |
| otLine | 線オブジェクト |
| otCircle | 円オブジェクト |
| otString | 文字オブジェクト |
| otPoint | 点オブジェクト |
| otMirror | ミラーオブジェクト |
| otSymbol | シンボルオブジェクト |
| 線オブジェクト固有のプロパティ&メソッド | |||||||
|---|---|---|---|---|---|---|---|
| M/P/I | 外部名 | 設定 | 取得 | 操作 | 説明 | 単位 | 備考 |
| プロパティ | x1 | ○ | ○ | 始点(x1,y1)設定/取得。 単位: 相対座標 | mm | 相対座表 | |
| プロパティ | y1 | ○ | ○ | mm | 相対座表 | ||
| プロパティ | x2 | ○ | ○ | 終点(x2,y2)設定/取得。 〃 | mm | 相対座表 | |
| プロパティ | y2 | ○ | ○ | mm | 相対座表 | ||
| プロパティ | Length | × | ○ | 線の長さを取得。 〃 | mm | 相対座表 | |
| プロパティ | Ax1 | ○ | ○ | 始点(x1,y1)設定/取得。 単位: 絶対座標 | mm | 絶体座表 | |
| プロパティ | Ay1 | ○ | ○ | mm | 絶体座表 | ||
| プロパティ | Ax2 | ○ | ○ | 終点(x2,y2)設定/取得。 〃 | mm | 絶体座表 | |
| プロパティ | Ay2 | ○ | ○ | mm | 絶体座表 | ||
| プロパティ | ALength | × | ○ | 線の長さを取得。 〃 | − | − | |
| プロパティ | Coror | ○ | ○ | 線色 | − | − | |
| プロパティ | Style | ○ | ○ | 線種の設定/取得。 | − | − | |
| 円(楕円・円弧・楕円弧を含む)オブジェクト固有のプロパティ&メソッド | |||||||
|---|---|---|---|---|---|---|---|
| M/P/I | 外部名 | 設定 | 取得 | 操作 | 説明 | 単位 | 備考 |
| プロパティ | x | ○ | ○ | 中心点 x座標 | mm | 相対座標 | |
| プロパティ | y | ○ | ○ | 中心点 y座標 | mm | 相対座標 | |
| プロパティ | xr | ○ | ○ | x軸半径 | mm | 相対座標 | |
| プロパティ | yr | ○ | ○ | y軸半径 | mm | 相対座標 | |
| プロパティ | st | ○ | ○ | 始点角 | ラジアン | 相対座標 | |
| プロパティ | et | ○ | ○ | 終点角 | ラジアン | 相対座標 | |
| プロパティ | tt | ○ | ○ | 軸角 | ラジアン | 相対座標 | |
| プロパティ | ax | ○ | ○ | 中心点 x座標 | mm | 絶対座標 | |
| プロパティ | ay | ○ | ○ | 中心点 y座標 | mm | 絶対座標 | |
| プロパティ | axr | ○ | ○ | x軸半径 | mm | 絶対座標 | |
| プロパティ | ayr | ○ | ○ | y軸半径 | mm | 絶対座標 | |
| プロパティ | ast | ○ | ○ | 始点角 | ラジアン | 絶対座標 | |
| プロパティ | aet | ○ | ○ | 終点角 | ラジアン | 絶対座標 | |
| プロパティ | att | ○ | ○ | 軸角 | ラジアン | 絶対座標 | |
| プロパティ | Color | ○ | ○ | 線色 | |||
| プロパティ | Style | ○ | ○ | 線種 | |||
| ※線種の値は、 | |
|---|---|
| 定数名 | 説明 |
| psSolid | 実線 |
| psDot1 | 点線1 |
| psDot2 | 点線2 |
| psDot3 | 点線3 |
| psDash1 | 1点鎖線 |
| psDash1b | 1点鎖線大 |
| psDash2 | 2点鎖線 |
| psDash2b | 2点鎖線大 |
| psSubLine | 補助線 |
| psRnd1 | ランダム1 |
| psRnd2 | ランダム2 |
| psRnd3 | ランダム3 |
| psRnd4 | ランダム4 |
| psRnd5 | ランダム5 |
| psLongDash1 | ロング1点鎖線 |
| psLongDash2 | ロング2点鎖線 |
| psLongDot | ロング点線 |
| ※線色の定数 | ||
|---|---|---|
| 定数名 | 色 | 説明 |
| vbCyan | 水色(RGB(0, 255, 255)に同等) | |
| vbWhite | 白色(RGB(255, 255, 255)に同等) | |
| vbGreen | 緑色(RGB(0, 255, 0)に同等) | |
| vbYellow | 黄色(RGB(255, 255, 0)に同等) | |
| vbMagenta | 紫色(RGB(255, 0, 255)に同等) | |
| vbBlue | 青色(RGB(0, 0, 255)に同等) | |
| vbRed | 赤色(RGB(255, 0, 0)に同等) | |
| vbBlack | 黒色(RGB(0, 0, 0)に同等) | |
| ※↑以外に、RGB(n, n, n)を使用する事で中間色を指定できます。 | ||
| レンジオブジェクト(コレクションに対応)のプロパティ&メソッド | |||||||
|---|---|---|---|---|---|---|---|
| M/P/I | 外部名 | 設定 | 取得 | 操作 | 説明 | 単位 | 備考 |
| プロパティ | Count | × | ○ | 対象オブジェクト数 | |||
| プロパティ | Item() | × | ○ | 指定位置のオブジェクトを取得 | |||
| メソッド | SetReadPoint() | ○ | 指定位置の接点座標のセット | セット後、x,yで座標取得 | |||
| プロパティ | x | ○ | x座標 抽出 | 相対座標 | |||
| プロパティ | y | ○ | y座標 抽出 | 相対座標 | |||
| メソッド | Range | sym.Range | sym.Range[オブジェクト名],[対象オブジェクト種別] ※連続線化処理のレンジオブジェクトを返す。 これは、バラバラの線や円を連続線としてに 扱うことが出来るオブジェクトです。 ※線・円・文字・点の各々オブジェクトに名前を付けられます。 要素の上で左ボタン・下ドラッグ・他方クリックで、プロパティメニューで 名前を作成できます。 | ||||
| ●レンジオブジェクトの原理は下記の通りです。 まず、どれか1つの線(円)を1本目の線として、 1本目の線(円)の 始点・終点 のうち、いずれかの方を 第1点、もう一方を 第2点とする。 第2点 に一番近い点を持つ線を 2本目の線として、 2本目の線の始点・終点のうち、 第2点 から遠い方の点を、 第3点にする。 このような方法を繰り返して、 1)連続的に繋がるように、要素をソートします。 2)xx(i),yy(i)で、i = 0〜Count(要素数)で、点を順番に取得できます。 尚、1本目の線を指示するには、その線に名前を付けておきます。 例えば、ある線に、"First" という名前を付けておき、 sym.Range ("First")とやると、名前に"First"が付く線が、 1本目の線として扱われます。 ※線・円・文字・点の各々オブジェクトに名前を付けられます。 要素の上で左ボタン・下ドラッグ・他方クリックで、プロパティメニューで 名前を作成できます。 線・円・文字・点に名前を付けるには、線等の上で、 左ボタン+右下外ドラッグ+他方クリック。 これで、プロパティのコマンドが選択できます。 尚、 sym.Range と 名前を省略した場合、どれが1本目の線になるかは、不定です。 また、sym.Range には、2番目の引数を指定できます。 ↓"" とすると、1本目の線は不定。 sym.Range ("" , otLine) または、 sym.Range ("First", otLine) など、 ↑ こうすると、連続線の対象となるのは、 線のみになります。つまり、円・文字・点は、 無視されます。 2番目の引数を省略すると、線と円が 連続線として対象になります。 あとは、 Count = range.Count For i = 0 To Count range.SetReadPoint (i) xx(i) = range.x yy(i) = range.y Next とすることで、xx(i),yy(i) i = 0〜Count という操作ができます。 ^^^^^^^^ ↑ここがポイント!! Countは、対象となる要素数を返します。 例えば、四角形の場合、4本の線から構成されますので、 Count = 4 になっています。 つまり、0 〜 Count → 0 〜 4 という事で、0 1 2 3 4 と5回 繰り返えされる事になります。 四角形の場合、 第1点 ... xx(0),yy(0) 第2点 ... xx(1),yy(1) 第3点 ... xx(2),yy(2) 第4点 ... xx(3),yy(3) 第5点 ... xx(4)=xx(0) , yy(4)=yy(0) ↑第1点 と 第5点 は同じ座標値になります。 具体的には、 第1点 ... 1本目の線の始点。 第2点 ... 1本目の線の終点。 第3点 ... 2本目の線の終点。 第4点 ... 3本目の線の終点。 第5点 ... 4本目の線の終点。 ↑データ上では、通常、 (x1,y1)-(x2,y2) と記憶しているだけ だから、(x1,y1)が始点に成るとは限らない ので、どっちが始点になるか、予め計算 しておき、上手く、連続線に成るように 処理している。 ....この方法が有効なのは、必ず、連続線の初めと終わりが、結ばれて いる事が条件になります。 また、レンジオブジェクトは、コレクションに対応しています。 ^^^^^^^^^^^^^^^^^^ ↑つまり、For Each 〜 In 〜 が使える。 つまり、 ---------------------------------------------- Dim range, item Set range = sym.Range For Each item In range item.Color = vbGreen '←緑色に変える。 doc.ReDraw MsgBox "次!" Next ----------------------------------------------- とやると、1番目の線、2番目の線、3番目の線.... と順番に、線色を 緑色に 変えてくれます。 つまり、レンジオブジェクトが、どの順序で線を追っているかが判ります。 | |||||||
| Symbol Object(コレクションに対応) のメソッド&プロパティ (2001.08.16現在) | |||||||
|---|---|---|---|---|---|---|---|
| M/P/I | 外部名 | 設定 | 取得 | 操作 | 説明 | 単位 | 備考 |
| プロパティ | x | ○ | ○ | x軸の原点 | mm | 実寸 | |
| プロパティ | y | ○ | ○ | y軸の原点 | mm | 実寸 | |
| プロパティ | Angle | ○ | ○ | 軸角 | ラジアン | ||
| プロパティ | Scale | ○ | ○ | スケール | x,y軸とも同じ値を書込 | ||
| プロパティ | Horizontal | ○ | ○ | x軸のスケール | |||
| プロパティ | Vertical | ○ | ○ | y軸のスケール | |||
| プロパティ | Count | ○ | ぶら下がっているオブジェクト数 | ||||
| プロパティ | Item (インデックス値:0〜) | ○ | ぶら下がっているオブジェクトを順番に取得します | ||||
| メソッド | Macro "プロシージャ名" , "マクロ名" | ○ | マクロを登録します。 | ||||
| メソッド | Script | ○ | スクリプトオブジェクトを取得します | ||||
| プロパティ | Visible | ○ | ○ | 状態(1→非表示 2→グレー表示(読取専用) 3→通常表示) | |||
| メソッド | Range [オブジェクト種別], [始点の要素名] | ○ | 連続点の取得(連続線から) | ||||
| メソッド | AddFolder [オブジェクト名] , [状態] , [アクティブ化フラグ] | ○ | ○ | 新しいシンボルオブジェクトを追加し、それを取得 | [ ]付きは省略可。※1 | ||
| ↑オブジェクト名を省略すると、"新規オブジェクト" と設定されます | |||||||
| ↑状態を省略すると 通常 となります。1→非表示 2→グレー表示(読取専用) 3→通常表示 | |||||||
| ↑アクティブ化フラグを省略すると
False となります。 False→編集オブジェクトは変更しない。True→する。 | |||||||
| メソッド | AddLine [x1] , [y1] , [x2] , [y2] , [線色] , [線種] | ○ | ○ | 新しい線オブジェクトを追加し、それを取得 | [ ]付きは省略可。※1 | ||
| ↑始点(x1,y1) - 終点(x2,y2) 。省略すると 0 として処理します。単位は mm(実寸)。 | |||||||
| ↑線色を省略すると、現在設定中の色が使われます。 | |||||||
| ↑線種を省略すると、現在設定中の線種が使われます。 | |||||||
| メソッド | AddPoint [x座標] , [y座標] , [色] , [タイプ] | ○ | ○ | 新しい点オブジェクトを追加し、それを取得 | [ ]付きは省略可。※1 | ||
| ↑座標(x,y)。省略すると 0 として処理します。単位は mm(実寸)。 | |||||||
| ↑色を省略すると、現在設定中の色が使われます(ただし、タイプが1,2の場合は色は無視される) | |||||||
| ↑タイプを省略すると 0 として処理されます。0→実点、1→仮実点 2→仮点 | |||||||
| メソッド | AddCircle [x座標] , [y座標] , [X軸半径] , [Y軸半径] , [線色] , [線種] , [始角] , [終角] , [軸角] | ○ | ○ | 新しい円(円弧)オブジェクトを追加し、それを取得 | [ ]付きは省略可。※1 | ||
| ↑座標(x,y)。省略すると 0 として処理します。単位は mm(実寸)。 | |||||||
| x軸半径を省略すると 1.0mm(実寸)として処理されます。 | |||||||
| y軸半径を省略すると x軸半径 と同じ値として処理されます。 | |||||||
| ↑線色を省略すると、現在設定中の色が使われます。 | |||||||
| ↑線種を省略すると、現在設定中の線種が使われます。 | |||||||
| ↑始角 を省略すると、 0.0(ラジアン)として処理されます。単位は ラジアン。左回りで+ | |||||||
| ↑終角を省略すると、2π(ラジアン)として処理されます。単位はラジアン。左回りで+ | |||||||
| ↑軸角を省略すると、0.0(ラジアン)として処理されます。単位はラジアン。左回りで+ | |||||||
| メソッド | AddString [x座標] , [y座標] , [軸角] , [基点] , [文字列] , [フォント名] , [色] , [文字高] , [文字幅] , [文字間隔] , [縦文字フラグ] , [補助文字フラグ] | ○ | ○ | 新しい文字オブジェクトを追加し、それを取得 | [ ]付きは省略可。※1 | ||
| ↑座標(x,y)。省略すると 0 として処理します。単位は mm(実寸)。 | |||||||
| ↑軸角を省略すると、0.0(ラジアン)として処理されます。単位はラジアン。左回りで+ | |||||||
| ↑基点を省略すると 0(左下) として処理します。詳細は文字列基点 定数表を参照。 | |||||||
| ↑文字列を省略すると "新規文字列" と設定されます。 | |||||||
| ↑フォント名を省略すると "MS ゴシック" として処理されます。 | |||||||
| ↑色を省略すると、現在設定中の色が使われます。 | |||||||
| ↑文字高、文字幅、文字間隔 を省略すると、現在設定中の文字情報が使われます。 | |||||||
| ↑縦文字フラグを省略すると、 False(横文字) として処理されます。True(縦文字)。 | |||||||
| ↑補助文字フラグを省略すると、False(通常文字)として処理されます。True(補助文字)。 | |||||||
| ※注意 | ※1:AddFolder , AddLine , AddPoint , AddCircle , AddString メソッドは、作成したオブジェクトを取得する場合と、取得しない場合で定義方法が異なります。 | ||||||
| 例: Set item = sym.AddLine (0, 0, 100, 100) ←取得する場合は、 AddLine (〜) 等とカッコが必要です。 | |||||||
| 例: sym.AddLine 0, 0, 100, 100 ←取得しない場合は、AddLine 〜 等とカッコを付けては行けません。 | |||||||
| 点オブジェクト固有のプロパティ&メソッド | |||||||
|---|---|---|---|---|---|---|---|
| M/P/I | 外部名 | 設定 | 取得 | 操作 | 説明 | 単位 | 備考 |
| プロパティ | x | ○ | ○ | 中心点 x座標 | mm | 相対座標 | |
| プロパティ | y | ○ | ○ | 中心点 y座標 | mm | 相対座標 | |
| プロパティ | ax | ○ | ○ | 中心点 x座標 | mm | 絶対座標 | |
| プロパティ | ay | ○ | ○ | 中心点 y座標 | mm | 絶対座標 | |
| プロパティ | Color | ○ | ○ | 線色 | |||
| 文字オブジェクト固有のプロパティ&メソッド | |||||||
|---|---|---|---|---|---|---|---|
| M/P/I | 外部名 | 設定 | 取得 | 操作 | 説明 | 単位 | 備考 |
| プロパティ | x | ○ | ○ | 基点 x座標 | mm | 相対座標 | |
| プロパティ | y | ○ | ○ | 基点 y座標 | mm | 相対座標 | |
| プロパティ | ax | ○ | ○ | 基点 x座標 | mm | 絶対座標 | |
| プロパティ | ay | ○ | ○ | 基点 y座標 | mm | 絶対座標 | |
| プロパティ | Angle | ○ | ○ | 角度 | ラジアン | ||
| プロパティ | String | ○ | ○ | 文字列 | |||
| プロパティ | Zero | ○ | ○ | 文字列の基点 | |||
| プロパティ | FontName | ○ | ○ | フォント名 | |||
| プロパティ | Height | ○ | ○ | 文字高さ | mm | 絶対座標 | |
| プロパティ | Width | ○ | ○ | 文字幅 | mm | 絶対座標 | |
| プロパティ | Space | ○ | ○ | 文字間 | mm | 絶対座標 | |
| プロパティ | Italic | ○ | ○ | 斜体 | True or False | ||
| プロパティ | Bold | ○ | ○ | 太字 | True or False | ||
| プロパティ | Color | ○ | ○ | 文字色 | RGB()値 | ||
| ※文字列基点の定数 | |
|---|---|
| 定数名 | 説明 |
| spLeftBottom | 左下 |
| spCenterBottom | 中下 |
| spRightBottom | 右下 |
| spLeftCenter | 左中 |
| spCenterCenter | 中中 |
| spRightCenter | 右中 |
| spLeftTop | 左上 |
| spCenterTop | 中上 |
| spRightTop | 右上 |
| スクリプトサンプル画面 | スクリプト サンプル例・説明。 | |
|---|---|---|
![]() |
JWB2000を利用して 作図するスプリクトを 紹介します。 図面中に追加出来る ものは下記の5つです。 @線 AddLine A点 AddPoint B円 AddCircle C文字 AddString Dフォルダー(部品名) AddFolder の5つの作成が可能。 と自由にVBSでプログラムする事でデータを追加する事が出来ます。 参考データ(作図.bso) 6Kb |
|
| '基準用紙範囲を取得する Dim Pleft, Pright, Ptop, Pbottom Pleft = doc.PaperRect.Left Pright = doc.PaperRect.Right Pbottom = doc.PaperRect.Bottom Ptop = doc.PaperRect.Top 'ランダムで書込範囲内の X座標値を返す Function rnx rnx = (Rnd(1) - 0.5) * Pright End Function 'ランダムで書込範囲内の Y座標値を返す Function rny rny = (Rnd(1) - 0.5) * Ptop End Function 'ランダムで色値を返す Function rnc rnc = RGB(Rnd(1)*255, Rnd(1)*255, Rnd(1)*255) End Function 'ランダムで線種を返す Function rns rns = Int(Rnd(1) * 17) End Function 'ランダムで角度を返す Function rna rna = (Rnd(1) - 0.5) * 3.1415927 End Function '指定のオブジェクト(RollObj)を指定の座標(xe,ye)まで、 指定回数(count)に分割し、 'また、指定のスケール(scale)に拡大/縮小し、回転・移動させる Function RollObject (RollObj, xe, ye,scale, count) Dim xm, ym, am, SrcAngle, sm xm = (xe - RollObj.x) / count ym = (ye - RollObj.y) / count am = 2 * 3.1415926536 / count SrcAngle = RollObj.Angle sm = (scale - RollObj.Scale) / count Dim i For i = 1 to count RollObj.x = RollObj.x + xm RollObj.y = RollObj.y + ym RollObj.Angle = RollObj.Angle + am RollObj.Scale = RollObj.Scale + sm doc.ReDraw Next '最後に誤差を修正 RollObj.x = xe RollObj.y = ye RollObj.Angle = SrcAngle RollObj.Scale = scale doc.ReDraw End Function 'ランダムで線を書込 'WriteSym は、書込するオブジェクト 'count は、ランダム線を書込む本数 Sub Random_AddLine (WriteSym, count) Dim i For i = 1 to count WriteSym.AddLine rnx(), rny(), rnx(), rny() ,rnc(), rns() If (i mod 100) = 0 Then doc.ReDraw End If Next End Sub 'ランダムで円を書き込む 'WriteSym は、書込するオブジェクト 'count は、ランダム円を書込む本数 Sub Random_AddCircle (WriteSym, count) Dim i For i = 1 to count WriteSym.AddCircle rnx(), rny(), rnx() * 0.1, rny() * 0.1, rnc(), rns(), rna(), rna(), rna() If (i mod 10) = 0 Then doc.ReDraw End If Next End Sub 'ランダムで点を書き込む 'WriteSym は、書込するオブジェクト 'count は、ランダム円を書込む本数 Sub Random_AddPoint (WriteSym, count) Dim i For i = 1 to count WriteSym.AddPoint rnx(), rny(), rnc(), Int(Rnd(1)*3) If (i mod 100) = 0 Then doc.ReDraw End If Next End Sub 'ランダムで文字を書込 'WriteSym は、書込するオブジェクト 'count は、ランダム文字を書込む本数 Sub Random_AddString (WriteSym, count) Dim i Dim str str = "DEMO" For i = 1 to count If i = count Then str = "デモ" End if 'WriteSym.AddString rnx(), rny(), 0, 0, str , "MS 明朝", rnc(), 10 + Rnd(1) * 10, 10 + Rnd(1) * 10, Rnd(1) * 10 WriteSym.AddString rnx(), rny(), 0, 0 If (i mod 10) = 0 Then doc.ReDraw End If Next End Sub Sub Main '背景色を白にする doc.BackGroundColor = RGB (255, 255, 255) doc.ReDraw '全ての子オブジェクトを削除する Dim item For Each item in sym item.Delete Next '背景色を段々暗くする Dim c For c = 254 to 0 Step -1 doc.BackGroundColor = RGB (c, c, c) doc.ReDraw Next '線書込み 500本 Dim Obj Set Obj = sym.AddFolder ("Line") Obj.x = Pright * (2 / 3) Obj.y = Ptop * (2 / 3) Obj.Scale = (2 / 3) Random_AddLine Obj, 500 '例の如く回転...(^_^; RollObject Obj, Pright * (1 / 6), Ptop * (5 / 6), (1 / 3), 20 '円書込み 300本 Set Obj = sym.AddFolder ("Circle") Obj.x = Pright * (2 / 3) Obj.y = Ptop * (2 / 3) Obj.Scale = (2 / 3) Random_AddCircle Obj, 300 '例の如く回転...(^_^; RollObject Obj, Pright * (1 / 6), Ptop * (3 / 6), (1 / 3), 20 '点書込み 500本 Set Obj = sym.AddFolder ("Point") Obj.x = Pright * (2 / 3) Obj.y = Ptop * (2 / 3) Obj.Scale = (2 / 3) Random_AddPoint Obj, 500 '例の如く回転...(^_^; RollObject Obj, Pright * (1 / 6), Ptop * (1 / 6), (1 / 3), 20 '文字書込み 100本 Set Obj = sym.AddFolder ("String") Obj.x = Pright * (2 / 3) Obj.y = Ptop * (2 / 3) Obj.Scale = (2 / 3) Random_AddString Obj, 100 '例の如く回転...(^_^; RollObject Obj, Pright * (3 / 6), Ptop * (1 / 6), (1 / 3), 20 '線・円・点・文字、書込み Set Obj = sym.AddFolder ("---") Obj.x = Pright * (2 / 3) Obj.y = Ptop * (2 / 3) Obj.Scale = (2 / 3) Random_AddLine Obj, 300 Random_AddCircle Obj, 100 Random_AddPoint Obj, 300 Random_AddString Obj, 100 '例の如く回転...(^_^; RollObject Obj, Pright * (5 / 6), Ptop * (1 / 6), (1 / 3), 20 End Sub 'マクロ登録 '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■ sym.Macro "Main" , "要素書込DEMO" ' ↑プロシージャ名 ↑マクロ名 'このように、symオブジェクトの Macro メソッドを使うことで、 マクロとして登録することができる。 'プロジェクトツリーからこのオブジェクト(回転)を右クリックすると、 登録されたマクロがリスト 'され、設定しているプロシージャ等を呼び出すことができる。 '※但し、スクリプト実行中の場合のみ、マクロがリストされる。 ' スクリプトが停止している場合は、リストされない。 ' ' また、マクロ名を '\' で区切ることで、マクロリストを階層化できるので、 ' たくさんのマクロを操作する場合は大変有効である。 ' ※1つのクラスモジュールで一度に登録できるマクロ数は20個である。 ![]() |
||
![]() ●下記の様にエクセルが自動的に起動しセルの中に座標値データと線種・線色が 順次書き込まれていきます。 ![]() ■■■サンプルデータのダウンロード(線出力1.bso 1KB)■■■ |
●例● Excelに全階層の線情報の出力するスクリプト例。 ・スクリプトを書き込んである部品以外の部品の 線情報を出力する場合は、下記のようなサンプル になります。 大きな違いは、下記では全階層を検索する様に するため、doc.RootObject から繰り返しています。 また、子オブジェクトがある場合は、その子もナメル様に、 ExcelOut() を再帰呼出しています。 再帰呼出については、VBScriptに限った事ではなくて、プログラム上の基本テクニックとして、昔からある方法です。 アルゴリズムの解説書やプログラムテクニックなど、多数の 関連書籍で紹介されていると思います。再帰呼出を使うことで、 階層化構造を簡単に順次サーチできます。 Dim xl Dim row Sub Out Set xl = CreateObject ("Excel.Application") xl.Visible = True xl.WorkBooks.Add xl.Cells (1, 1).Value = "x1" xl.Cells (1, 2).Value = "y1" xl.Cells (1, 3).Value = "x2" xl.Cells (1, 4).Value = "y2" xl.Cells (1, 5).Value = "線種No" xl.Cells (1, 6).Value = "線色" row = 2 ExcelOut (doc.RootObject) '^^^^^^^^^^^^^^ 'これを sym に置き換えると、自分を含め、全ての子部品 ' (子・孫等も含む)のみをナメル様にできます。 End Sub Sub ExcelOut(obj) Dim item For Each item In obj If item.ID = otSymbol Then ExcelOut (item) '←子部品が見つかったので再帰呼出で、 ' 処理させる。 ElseIf item.ID = otLine Then xl.Cells (row, 1).Value = item.x1 xl.Cells (row, 2).Value = item.y1 xl.Cells (row, 3).Value = item.x2 xl.Cells (row, 4).Value = item.y2 xl.Cells (row, 5).Value = item.Style xl.Cells (row, 6).Interior.Color = item.Color row = row + 1 End If Next End Sub sym.Macro "Out", "Excelに全階層の線情報の出力" |
|
![]() ![]() ■■■サンプルデータのダウンロード(座標表示1.bso 1KB)■■■ |
●例2● 各点の座標値のデータ画面表示サンプル例。 ※閉塞された線データを100点まで0点から座標値を順次表示し そのあと順番に各線データを緑色に表示する。 Sub SearchRange2 Dim item , range, i, count, x(100), y(100) Set range = sym.Range ("First") 'sym.Range ("First")で、▲▲▲名前に"First"が付く線が、 '1本目の線として扱われます。 '※線・円・文字・点の各々オブジェクトに名前を付けられます。要素の上で左ボタン・下ドラッグ・他方クリックで、プロパティメニューで 名前を作成できます。 count = range.Count For i = 0 To count range.SetReadPoint (i) x(i) = range.x y(i) = range.y MsgBox "点No i =(" & i & ") x座標値=(" & x(i) & ") y座標値=(" & y(i) & ")" Next For Each item In range If item.ID = otLine Then item.Color = vbGreen '←緑色 End If doc.ReDraw MsgBox " next " Next End Sub sym.Macro "SearchRange2", "各点座標値表示&連続化線確認" |
|