Visual Basic for Applicationsを使用してnanoCADの作業を自動化する

この記事では、CAD nanoCADの設計者の作業を自動化するためのオプションの1つについて説明します。これにより、構造のパラメーター化を大幅に使用し、さまざまなタスクに必要な時間を短縮できます。







多くの設計者はMS Excelを使用して、表形式で数学的計算を実行します。 ただし、プログラムの機能はこれに限定されません。 Microsoft Office製品に組み込まれているVisual Basic for Applications(VBA)プログラミング言語を使用して、nanoCADオブジェクトモデル(およびプラットフォーム上の他の製品)と対話できます。 この記事では、レイヤーの作成と構成、長方形の描画、寸法の挿入、図の領域の値を含むテキストの追加など、シンプルで普遍的な例を使用してこのような可能性を示します。



この例ではMS Excel 2010とnanoCAD 5.0を使用していますが、ソフトウェアバージョンは問題ではありません。



まず、Excelを起動して、構築用のデータを準備する必要があります。







セルB1およびB2のデータは素数で書き込まれますが、数式を使用して計算することもできます。 次に、プログラムコードの開発とデバッグのために、組み込みのExcelシステムに切り替える必要があります。Alt+ F11を押します。 開発環境ウィンドウが表示されます。







コードのデバッグを簡単にするために、特定のライブラリを接続する必要があります。[ツール]メニューで[参照設定...]項目を選択し、nanoCADタイプライブラリ(NCAuto.dll)とOdaXタイプライブラリ(OdaX_csd.dll)を接続します。 デフォルトでは、両方のライブラリはフォルダーC:\ Program Files \ Nanosoft \ nanoCAD 5.0 \ bin \にあります。



次に、モジュールを作成する必要があります。 Microsoft Excel Objectsフォルダーのプロジェクトツリーを右クリックし、ドロップダウンリストで[挿入]-[モジュール]を選択します。







表示されるウィンドウで、将来のプログラムの基礎を準備します。

Option Explicit '       Public app As nanoCAD.Application '   nanoCAD Public ThisDrawing As nanoCAD.Document ' ,     nanoCAD Sub my_drawing() '   Set app = GetObject("", "nanoCAD.Application") '  nanoCAD app.Visible = True '    nanoCAD Set ThisDrawing = app.ActiveDocument '   ,   nanoCAD
      
      





変数を明示的に宣言した後、変数を操作する方がはるかに便利になります。変数の名前を入力し、ポイントを置くだけで、プログラムはこのタイプのオブジェクトに関連するすべてのパラメーターとメソッドを通知します。

アポストロフィの後のテキスト-コードに関するコメント。

将来の図のパラメーターで変数を宣言し、それらに値を割り当てます。

  Dim r_height As Double, r_width As Double ',     r_height = Range("B1").Value '  r_width = Range("B2").Value ' 
      
      





新しいレイヤーを作成し、厚さと色を割り当てます。

  Dim layer As AcadLayer '  "" Set layer = ThisDrawing.Layers.Add(" ") '   layer.Color = 21 '-  layer.LineWeight = acLnWt050 '  0.50  ThisDrawing.ActiveLayer = layer '    
      
      





ユーザーがオブジェクト挿入の座標を選択することをお勧めします。

  Dim insert_point() As Double ' ,     insert_point = ThisDrawing.Utility.GetPoint("0,0,0", "   ") '   insert_point(0)   X,    , '  insert_point(1)   Y,    insert_point(2) -  Z
      
      





4つのセグメントで構成される長方形を作成します。

  Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double x1 = insert_point(0) '     x2 = x1 + r_width '     y1 = insert_point(1) '     y2 = y1 + r_height '     Dim pt1(2) As Double, pt2(2) As Double, pt3(2) As Double, pt4(2) As Double ' 4  ,        pt1(0) = x1 '    pt1(1) = y1 '    pt2(0) = x2 '    pt2(1) = y1 '    pt3(0) = x2 '    pt3(1) = y2 '    pt4(0) = x1 '    pt4(1) = y2 '    Dim obj As AcadLine '  "" Set obj = ThisDrawing.ModelSpace.AddLine(pt1, pt2) '   Set obj = ThisDrawing.ModelSpace.AddLine(pt2, pt3) '   Set obj = ThisDrawing.ModelSpace.AddLine(pt3, pt4) '   Set obj = ThisDrawing.ModelSpace.AddLine(pt4, pt1) '  
      
      





サイジング:

  Dim pt5(2) As Double, pt6(2) As Double pt5(0) = (x1 + x2) / 2 '    pt5(1) = y1 - 500 '    pt6(0) = x2 + 500 '    pt6(1) = (y1 + y2) / 2 '    Dim dimrot As AcadDimRotated '  " " Set dimrot = ThisDrawing.ModelSpace.AddDimRotated(pt1, pt2, pt5, 0) '   Set dimrot = ThisDrawing.ModelSpace.AddDimRotated(pt2, pt3, pt6, 3.1416 / 2) '   '         
      
      





図の面積を計算し、長方形の中央にMTextを挿入します。

  Dim pt7(2) As Double pt7(0) = (x1 + x2) / 2 '   pt7(1) = (y1 + y2) / 2 '   Dim txt As AcadMText '  "" Set txt = ThisDrawing.ModelSpace.AddMText(pt7, 3000, CStr((x2 - x1) * (y2 - y1) / 1000000)) '    ,   –   txt.AttachmentPoint = acAttachmentPointMiddleCenter '   ""  "  "
      
      





基本機能の完了:

 End Sub
      
      





作成したプログラムを開始するには、F5キーを押します(その後、nanoCADで挿入ポイントを指定することを忘れないでください)。 プログラムの結果は図に示されています。







この例は、基本的なプリミティブを作成する機能を示しています。 nanoCADオブジェクトモデルの詳細については、インターネット、特にWebサイト: vbamodel.narod.ruおよびwww.alex160570.narod.ru/AcadVBA/vba01.htmをご覧ください。



同じタイプのコードの非常に多くの行を書いて1行を作成するのは時間がかかり、退屈であり、間違いを犯す可能性が高いことに注意してください。 利便性を高めるために、個々のプリミティブを構築するためのカスタム関数を作成できます。 例として、セグメントを構築する機能を考えます。 この関数は、セグメントの開始と終了のX座標とY座標をパラメーターとして受け取り、構築します。

 Sub my_line(x1 As Double, y1 As Double, x2 As Double, y2 As Double) Dim pt1(2) As Double, pt2(2) As Double pt1(0) = x1 '    pt1(1) = y1 '    pt2(0) = x2 '    pt2(1) = y2 '    Dim obj As AcadLine Set obj = ThisDrawing.ModelSpace.AddLine(pt1, pt2) '       End Sub
      
      





追加のユーザー関数は、基本関数の後に配置する必要があります。 ベース関数に関連する行End Subの後。

これで、短縮コードを使用して長方形を作成できます。

  Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double x1 = insert_point(0) '     x2 = x1 + r_width '     y1 = insert_point(1) '     y2 = y1 + r_height '     my_line x1, y1, x2, y1 '   my_line x2, y1, x2, y2 '   my_line x2, y2, x1, y2 '   my_line x1, y2, x1, y1 '  
      
      





同様のユーザー関数は、複数回実行する必要があるタスクに対して作成できます。 同時に、If ... Then ... Else、For ... Next、Do ... Loopなど、多くの演算子をユーザーが使用できます。 プログラミングに精通したばかりのユーザーにとっては、言語の機能を理解することは難しくありません。この問題や、解決された問題の例が掲載された多数のサイトには助けがあります。



作成したプログラムを起動するために、Excelシートに直接ボタンを配置できます。 これを行うには、[開発者]タブで[挿入]-[フォームコントロール]-[ボタン]を選択します。







表示されるウィンドウで、基本機能を選択し、シートにボタンを配置します。











1つのモジュールに任意の数の機能を追加し、各機能のボタンを作成して、それらをすべて1か所から起動できます。



コマンドラインでいくつかのコマンドの入力をシミュレートすることが必要になる場合があります。 これを行うには、次の構成を使用できます。



  ThisDrawing.SendCommand "CIRCLE" & vbCr & "100,100,0" & vbCr & "1000" & vbCr
      
      





このコマンドは、点X:100、Y:100、Z:0を中心とする円を描画単位1000の半径で描画します。



作成したプログラムをデバッグするには、ポップアップ形式またはnanoCADコマンドラインでデータを表示できます。 次のコードを実行した後:



  MsgBox "x1: " & x1
      
      





変数x1の値を含むダイアログボックスが表示されます。







nanoCADコマンドラインにテキストを出力するには、次のコードを使用できます。



  ThisDrawing.Utility.Prompt "x1: " & x1 & " y1: " & y1
      
      





このアプローチに基づいて、モノリシックな鉄筋コンクリート壁のリーマの構築を自動化するプログラムを開発しました。 初期データ(約30個のパラメーター)を設定した後、出力では、実際のジオメトリ、開口部の存在、および隣接する他の壁を考慮して、実際に準備ができた壁の図面を取得します。







このようなアプローチにより、ドキュメントの準備にかかる時間を数百回ではなくても数十回削減できるだけでなく、チェックする必要もまったくありません。



この記事では、新しいプリミティブを作成する方法について説明しました。 ただし、nanoCADオブジェクトモデルを使用すると、nanoCAD SPDSオブジェクトなど、図面に存在するプリミティブを編集できます。次の記事ではこれについて説明します。



Dmitry Rudenko 、設計局「Vordevind」プロジェクトのチーフエンジニア



更新(2014-10-06):

同様のスクリプトの操作を示すビデオ:






All Articles