昨年11月に無料のnanoCAD 2.0がリリースされたとき、リリースされたバージョンにはすでにアプリケーションを開発するためのツールが含まれていたと言いました。 特に、大部分のユーザーにとって、ActiveXオートメーション(JavaスクリプトまたはVBスクリプト)に基づくスクリプト(スクリプト)を使用して、ユーティリティや小さなアプリケーションをすばやく作成することが可能です。 しかし、誰がこの機会をどのように利用するか知っていますか? :-)
nanoCADのプログラミングの世界で最初の一歩を踏み出し、コマンドラインを介してユーザーと対話し、nanoCADの作業図面に指定された順序で自動的に線を描く小さなプログラムを作成することを提案します。 このスクリプトに基づいて、ファンタジーを自由に制御して、独自のアプリケーションを作成できます。たとえば、自動的に卒業証書を作成できます:-)
このデモでは、次のようなものを取得する必要があります。
そして、これには次のものが必要です。
ところで、プログラミングに関連する興味深い仕事を探していますか? 空席があります:
http :
//habrahabr.ru/company/nanosoft/vacancies/問題の声明
どの言語で実行可能スクリプトを記述することは一般的に重要ではありません。nanoCADはJavaスクリプトとVisual Basicスクリプトの両方をサポートします。 この記事では、最近頻繁に使用するため、VBを選択しました。
VBスクリプトの動作をデモンストレーションするものに基づいて考えたとき、LISPスクリプトをVBスクリプトに転送したいので、これが可能であることを示しました。 インターネットを検索して、「
i次のシェルピンスキー曲線を作成するためのLISP言語でのプログラムの開発 」というコースプロジェクトに出会いました。 再帰関数を使用して図1に示す図を作成する方法を説明するかなり詳細なアルゴリズムを提供します。同じことをVBSで行いましょう。
|
図1. 4次のシェルピンスキー曲線。この例では、nanoCADのプログラミングの原理を検討します。 |
プログラム構成
nanoCADでのVBSプログラムは入力機能を意味しません-スクリプトは最初の行から最後まで実行されます。 プログラムの基本的な手順は非常に単純です-1サイクル。 それから始めましょう:
LISPコード | VBSコード |
---|
( setq h ( div *SquareSize* 4 ) ) ( setq x0 ( div *MaxX* 2 ) ) ( setq y0 ( + ( div *MaxY* 2 ) h ) )
do (( i 1 )) (( eql i ( + Count 1 ) ) 'Done ) ( setq x0 ( - x0 h ) ) ( setq h ( div h 2 ) ) ( setq y0 ( + y0 h ) ) ( setq Px x0 Py y0 )
( A i ) ( Line 1 h ) ( B i ) ( Line 3 h ) ( C i ) ( Line 5 h ) ( D i ) ( Line 7 h ) ( setq i ( + i 1 )) )
| h = SquareSize \ 4 x0 = MaxX \ 2 y0 = h + MaxY \ 2
for i = 1 to count
x0 = x0 - h h = h \ 2 y0 = y0 + h Px = x0 Py = y0 A(i) Line 1, h B(i) Line 3, h C(i) Line 5, h D(i) Line 7, h next
|
コード(およびコースプロジェクトの説明)から、シェルピンスキー曲線は、A()、B()、C()、およびD()関数と呼ばれる4つの再帰関数によって構成されていることがわかります。 さらに、適切なスケールで適切な角度で通常の線を単純に描く特殊な線関数(方向、サイズ)があります。 これらの関数の定義は、通常のVBSツールによって実行されます。たとえば、LISPおよびVBSのA()関数は次のようになります。
LISPコード | VBSコード |
---|
defun A ( k ) ( cond ( ( > k 0 ) ( A ( - k 1 ) ) ( Line 1 h ) ( B ( - k 1 ) ) ( Line 0 ( * 2 h ) ) ( D ( - k 1 ) ( Line 7 h ) ( A ( - k 1 ) ) ) )
| Sub A(k) if k > 0 then A(k-1) Line 1, h B(k-1) Line 0, 2 * h D(k-1) Line 7, h A(k-1) End If End Sub
|
これらの追加の5つの関数は、メインスクリプトの最後に配置します。 nanoCADでグラフィックを表示する方法と、ユーザーと対話する方法を学習することだけが残ります。
最初のステップ
まず、VBスクリプトは拡張子が.vbsのプレーンテキストファイルです。 nanoCAD環境でVBSコマンドを使用して呼び出すことができます(それぞれ図2、JSコマンドを使用するJavaスクリプトを参照)。 すべてが単純です-スクリプトへのパスを示し、エラーなしで記述されている場合は実行されます。 スクリプトにエラーがある場合、これに関するメッセージがコマンドラインに表示されます。
|
図2. JavaおよびVisual Basicスクリプトは、それぞれJSおよびVBSコマンドによって呼び出されます。 |
VB構文は絶対に標準であるため、DIM、SET、FOR-NEXT、IF-THEN-ELSE、変数宣言、配列、標準関数(CStr()またはMsgBox()など)、関数宣言、整数除算演算を安全に使用できます。 。 すべてがうまくいくはずです。特に教えません。:-)
現在開いている図面にアクセスするには、ThisDrawingを使用します。 さらに、モデル空間(つまり、メイン図面の[モデル]タブ)に描画する予定の場合、次の構成によりModelSpaceコレクションを定義します。
Dim ms Set ms = ThisDrawing.ModelSpace |
コマンドラインへのアクセスは、ユーティリティオブジェクトを介して行われます。 特に、次のスクリプトは、コマンドラインにクラシックグリーティングを表示します。
Dim ut Set ut = ThisDrawing.Utility ut.Prompt(", !") |
関数GetInteger()、GetPoint()、GetString()、GetReal()、GetEntity()、GetDistance()、GetAngle()などを使用して、コマンドラインからデータを要求できます。 たとえば、次のように:
Do count = ThisDrawing.Utility.GetInteger(" (>=1)") Loop While count <= 0
For i = 1 to count point = ThisDrawing.Utility.GetPoint("0,0,0", " №" & i) Next |
データの出力先とユーザーとのやり取りの方法がわかったら、より意味のあるプログラムの作成を開始できます。
基本機能
nanoCADのプログラムで使用できる他の機能は何ですか? 一般に、DWGファイルの構造によって決定されるすべてのもの:線の作成、円弧、円、ハッチング、ポイントの取得、極座標、ファイルの開閉操作、レイヤーの操作、変数など。 これらの機能は通常、DWG SDKドキュメントで説明されています。Autodesk(
www.autodesk.com 、Developer Centerのセクション)またはOpen Design Alliance(
http://www.opendwg.org/、DWGdirectのセクション)のいずれかです。
通常の2Dラインを作成するAddLine関数(スタートポイント、エンドポイント)を積極的に使用します。 また、スクリプトで次を使用できます。
- AddCircle(中心、半径)-円;
- AddArc(中心、半径、開始角度、終了角度)-円弧;
- AddEllipse(中心、長軸、半径)-楕円;
- AddPolyline(頂点リスト)-ポリライン。
- AddText(テキスト文字列、挿入ポイント、高さ)-単一行のテキスト。
- AddMText(挿入ポイント、幅、テキスト)-複数行のテキスト。
nanoCADに送信するすべての座標は3次元にすることができます。 この場合、最初は3次元配列である必要がありますが、「x、y、z」の形式のラインを転送する方が便利です。ここで、-x、y、zは3次元座標です。 つまり このように:
Dim ms Set ptStr = CStr(x)+","+CStr(y)+","+CStr(y) |
私のスクリプトでさえ、線を異なるレイヤーにレイアウトすることにしました。 これを行うには、プログラムの最初に2つの新しいレイヤーを作成し、アクティブレイヤーを変更しました。
Set oLyrLine1 = ThisDrawing.Layers.Add("") Set oLyrLine2 = ThisDrawing.Layers.Add("") ... case 5: Set oLyr = oLyrLine1 case 6: Set oLyr = oLyrLine2 ... oLine.Layer = oLyr.Name |
結果
結果として得られるものは次のとおりです。図3を参照してください。もちろん、この結果は実用的な実用性はありませんが(審美的な喜びを除く)、思考と自己改善の糧となります。
|
図3. JavaおよびVisual Basicスクリプトは、それぞれJSおよびVBSコマンドによって呼び出されます。 |
デモスクリプトは、
demoscript.rarからダウンロードできます。 たとえば、C:\にダウンロードして解凍し、テキストエディターで開き、nanoCAD 2.0で学習して実行します。 そして、ちょっとしたヒント:4を超える曲線の順序を設定しないでください-フリーズします:-)