この投稿では、カスタムのBricsCADの設計方法について説明します® DCL(Dialog Control Language)を使用したダイアログボックス。 DCLを使用すると、プログラマはLISPルーチン用のカスタムダイアログボックスを作成できます。 DCLは、AutoCADとの互換性のためにV8のBricsCADに追加されました®.

DCLは、ダイアログボックスを構成する要素(「タイル」と呼ばれる)を記述するために使用される構造化言語です。タイルには、編集ボックス、リストボックス、ラジオボタン、画像タイル、タイトルバーが含まれます。これらにはそれぞれ、位置、背景色、実行するアクションなど、1つ以上の属性があります。


この投稿では、次のトピックについて説明します。


DCLのクイックヒストリー

オートデスク® ドキュメントに記載されていない機能として最初にDCLをAutoCADに追加® Windowsのリリース11。プラットフォームに依存しないダイアログボックスを作成するために設計されました。当時、Autodesk® AutoCADの生成バージョン® DOS、Windows、Unix、Macintosh、OS / 2を含む「すべての実行可能なエンジニアリングプラットフォーム」、およびDCLは、AutoCADを作成することを目的としたコード名「Proteus」のプロジェクトの一部でした。® すべてのオペレーティングシステムで同じように動作します。

下の図が示すように、プロジェクトは成功しました。まず、AutoCADです® DOSで実行されているリリース11の描画支援ダイアログボックス:

プログラミングダイアログボックスbricscad

そして、これはAutoCADのWindowsバージョンの同じダイアログボックスです® リリース11:

autocad dclコーディング

DOSとWindowsのダイアログボックスが似ていることに注目してください。 ([描画支援]ダイアログボックスは、[オプション]ダイアログボックスと呼ばれるようになりました。)

ただし、リリース14までに、プロテウスは無意味になりました。® Windowsオペレーティングシステムのみをサポートすることを選択しました。しかし、DISPがLISPでダイアログボックスを作成する唯一の方法として、DCLはぶらぶらし続けています。 Linux、macOS、およびWindows。


LISP、SDS、およびDRxで記述されたアプリケーションは、ダイアログボックスにDCLを利用できます。メニューマクロとツールバーマクロは、DCLコードを呼び出すLISPルーチンにリンクしている場合も同様です。 (VBAは独自のダイアログ構築環境を持っているため、DCLを使用しません。)

Bricsysは、DCLファイルの作成を支援するプログラミング環境を提供していません。
道。つまり、Windowsのメモ帳や LinuxまたはMacでのテキスト編集 意志
DCLプログラミング環境である。一部のサードパーティ開発者は、DCL開発ツールを作成しています。

LISPルーチンがダイアログボックスを表示するようにするには、次の2つのコードを記述する必要があります。

  • ダイアログボックスとそのタイルの機能を定義する.dclファイルのコード。
  • .dclファイルをロードしてタイルをアクティブにする.lspファイル内のコード。

ダイアログボックスでの作業には常に、.dclと.lspの2つのファイルが関係し、LISPコードがダイアログボックスのコードを制御します。

DCLの欠点は、ボタンの追加や削除などの自己変更ダイアログボックスを作成できないことです。ただし、ドロップリストなどの内容を動的に変更できます。

カスタムダイアログボックスの作成bricscad
ダイアログボックスの要素

ダイアログボックスの構成

ダイアログボックスは、ラジオボタン、スライダー、画像、タブ、チェックボックスなど、多くの要素で構成できます。これらの要素は「タイル」と呼ばれます。 DCLを使用すると、さまざまな種類の要素を作成できますが、今日のダイアログボックスにあるすべての要素にタイルがありません。これは、DCLが約20年前に導入されてからアップグレードされていないためです。 (DCLでは不可能な要素はVBAで作成できます。)

次の図は、DCLで可能なダイアログボックス要素の多くと、特定のDCLタイルの名前を示しています。

ほとんどのタイルは表示されていますが、上図で青い四角形で強調表示されている行と列のタイルなど、一部は非表示になっています。

DCLの動作

ダイアログボックスを動作させるために必要な2つのコードは次のとおりです。

  • ダイアログボックスでのタイルのレイアウトとその属性を指定するDCLコード。
  • ダイアログボックスをアクティブにして制御するLISPコード。

ダイアログボックス全体のサイズを指定する必要はありません。 BricsCADは、自動的にサイズを変更することで、この問題に対処します。デフォルトでは、タイルは列に積み上げられます。タイルを一列に並べるタイミングを指定するだけです。

DCLとLISPの実行中は、いくらか前後が許可されます。これは「コールバック」と呼ばれます。コールバックは、ファイルダイアログボックスに名前を付けたり、特定のボタンをグレー表示したり、ポップアップリスト(ドロップリスト)の内容を変更したりするために使用されます。

この投稿では、LISPコードを使用してDCLを記述する方法を示します。後の投稿では、すべてのDCLタイル、それらの属性、および関連するLISP関数への包括的なリファレンスを提供します。

最初のDCLファイル

ダイアログボックスのコードを記述する前に、タイルの計画を立てておくと役立ちます。ボタン、ドロップリスト、テキスト入力ボックスはダイアログボックスのどこに配置されますか?鉛筆を手に入れ、紙にスケッチするのは良い考えです。

このチュートリアルでは、次のシステム変数に格納されている値を表示するダイアログボックスを作成します。

LastPoint —図面に入力された最後のポイントの座標を保存します。
LastAngle —最後に入力された2点によって定義された角度を保存します。
LastPrompt —コマンドラインで入力された最後のテキストを保存します。

ダイアログボックスのデザインについて考えてみましょう。ダイアログボックスの目的を説明するタイトルが付いています。おそらく、各システム変数の名前と値を報告する3行のテキストがあり、 OK ボタンをクリックしてダイアログボックスを閉じます。

次のようになります。

ダイアログボックスのしくみ

DCLプログラミングの構造

このダイアログボックスのプログラミング構造は次のようになります。

ダイアログボックスの定義を開始します。

  • ダイアログボックスのタイトルを指定する
  • 列を指定します。

システム変数LastPointとその3D座標
システム変数LastAngleとその角度
システム変数LastPromptとそのテキスト

  • OKボタンを探します

ダイアログボックスの定義を終了します。

この最初のチュートリアルでは、ダイアログボックスと[OK]ボタンを表示するのに十分なだけのコードを記述します。後のチュートリアルでは、ベルとホイッスルを追加します。

開始ダイアログボックスの定義

すべての内容。DCL ファイルは名前で始まる 属性。これは、関連付けられたLISPルーチンによってダイアログコードが後で呼び出される名前です。 name関数は次のようになります。

名前:ダイアログ{

LISPと同様に、開き中かっこには、ダイアログボックス定義の終わりを示すために閉じ中かっこが必要です。

}

2つの中括弧の間に、ダイアログボックスの外観を定義するすべてのコードを記述します。

このチュートリアルでは、次のようにダイアログボックスに「lastInput」という名前を付けます。

lastInput: ダイアログ{}

DCL名では大文字と小文字が区別されるため、「lastInput」は「LastINPUT」または「lastinput」と同じではありません。

ダイアログボックスのタイトル

ダイアログボックスのタイトルバーのテキストは、 ラベル 次のようなプロパティ:

名前:ダイアログ{

label =“ダイアログボックスのタイトル”;

}

このダイアログボックスに次のように「最終入力」のラベルを付けます。

lastInput:ダイアログ{

ラベル=「最終入力“;

}=

タイトルテキストは引用符(”)で囲む必要があります。 labelプロパティはセミコロン(;)で終了する必要があります。また、コードをインデントして読みやすくすることは役に立ちます。

OKボタン

すべてのダイアログボックスには、終了ボタン、または少なくとも「OK」が必要です。 (Windowsはデフォルトを配置します バツ すべてのダイアログボックスの右上隅にあるボタン。DCLで作成されたダイアログボックスを終了するためにも機能します!)

ボタンは、 ボタン プロパティ、続いて中かっこで囲まれたボタンのプロパティ:

:ボタン{ }

ダイアログボックスには複数のボタンを設定できるため、すべてのボタンは「キー」と呼ばれるプロパティで識別される必要があります。の キー LISPがボタンに指示を与える方法です。使用 キー 次のように、このOKボタンを「okButton」として識別する属性。

key =“ okButton”;

ボタンは、ユーザーが読むためのラベルを表示する必要があります。これは[OK]ボタンなので、次のように、label属性を使用して[OK]のラベルを付けます。

label =” OK“;

これらすべてを組み合わせてみましょう。 [OK]ボタンに追加されたコードは、key、label、is_default属性とともに、ここに色で示されています。 (デフォルト属性については、以下を参照してください。)「okButton」というボタンがあり、「OK」というラベルが付けられており、デフォルトタイルに設定されています。

lastInput:ダイアログ{

label =“最終入力”;

: ボタン{

key =“ okButton”;

label =” OK“;

is_default = true;

}

}

ヒント のDCLコード OK ボタンはサブルーチンのようなものです。同じコードは、ダイアログボックスで必要なときにいつでも再利用できます。 OK ボタン、それはほとんど常にです。後で、DCLコードを使用してサブルーチンを作成する方法について説明します。

DCLメタキャラクターの概要

DCL メタキャラクター 意味
// (スラッシュスラッシュ) コメント行を示します
/* (スラッシュ-アスタリスク) コメントセクションを開始します
*/ (アスタリスクスラッシュ コメントセクションを終了します
: (結腸) タイル定義を開始します。スペーサーのような定義済みのタイルはコロンを使用しません
{ (ブレース) ダイアログとタイル属性を開始します
(スペース) 記号を分離する
= 等しい) 属性値を定義します
“” (ストレート見積もり) テキスト属性を囲みます
; (セミコロン) 属性定義を終了します。すべての属性はセミコロンで終了する必要があります
} (ブレース) タイルとダイアログの属性を終了します

ダイアログボックスをロードおよび実行するためのLISPコード

次のLISPコードは、lastInput.dclダイアログボックス定義ファイルをロード、実行、終了するために使用するものです。

(defun C:xx()

(setq dlg-id(load_dialog“ c:\\ lastInput”))

(new_dialog“ lastInput” dlg-id)

(action_tile“ accept”“(done_dialog)”)

(start_dialog)

(unload_dialog dlg-id)

)

LISPコードの意味を理解するために、それを分解してみましょう。

この関数は、LISPのdefun関数で「xx」として定義されています。プログラミング=デバッグなので、LISPルーチンには、「xx」のように入力しやすい名前を使用します。

(defun C:xx()

lastInput.dclファイルは、load_dialog関数でロードされます。 「.dcl」拡張子を指定する必要はありません。これは、この機能の唯一の目的であるDCLファイルをロードするためです。

  • Windowsでは、ドライブの名前C:\\を含めます。 LISPでは、フォルダー名を区切るために\ではなく\\を使用する必要があることを思い出してください。

    (setq dlg-id(load_dialog“ c:\\ lastInput”))

  • Linuxでは、ドライブの名前を省略します。

    (setq dlg-id(load_dialog“ lastInput”))

DCLファイルには複数のダイアログボックス定義を含めることができるため、次のステップは、new_dialog関数を使用して、アクセスするファイルをBricsCADに指示することです。この場合、「lastInput」のみです。

(new_dialog“ lastInput” dlg-id)

ダイアログボックスには「okButton」という名前のボタンが含まれており、その目的はDCLではなくLISPによって定義されています。ここでは、action_tile関数を使用して、「okButton」タイルにアクションを割り当てます。ボタンの目的は、ダイアログボックスを終了するdone_dialog関数を実行することです。つまり、[OK]をクリックしてダイアログボックスを閉じます。これは次のように読むことができます。「okButtonという名前のタイルのアクションは…」です。

(action_tile“ okButton”“(done_dialog)”)

これらすべての予選の後で、大きな瞬間が到着します。 start_dialog関数はダイアログボックスを起動し、ボタンをクリックするまで待機します。

(start_dialog)

きちんとしたプログラマーとして、私たちはunload_dialog関数を使ってメモリからダイアログボックスをアンロードします。

(unload_dialog dlg-id)

そして、最後の括弧はxx関数を終了します。

)


DCLコードのテスト

これで、テストするのに十分なDCLコードがあり、ダイアログボックスの開発状況を確認できます。コードをテストするには、次の手順を実行します。

  1. メモ帳を開き、 テキスト編集、 または別のASCIIテキストエディタ。
  2. 前に開発したDCLコードを入力します。DCLコード重要: このDCLファイルとLSPファイルで、次のような引用符が使用されていることを確認してください。カーリークォーテーションマーク(“または”)が含まれている場合、ルーチンは失敗します。 LISPは「エラー:引数の型が正しくありません。 DCLは文句を言うダイアログボックスを表示しますが、構文エラー:予期しない「」を予期しました。
  3. ファイルをlastinput.dclとして保存します。 LISP xx.lspルーチンで簡単に見つけられるように、ファイルを最上位のフォルダーに保存します。
    • Windowsでは、DCLファイルをC:\ドライブに保存します。
    • LinuxおよびMacでは、DCLファイルをホームフォルダーに保存します。たとえば、「ralphg」というユーザー名でLinuxにログインするため、ファイルをralphgフォルダーに保存しました。
  4. ここで、新しいファイルを開き、次に説明されているLISPコードを入力します。ダイアログボックスをロードして実行するためのLISPコード セクション。" CADのコーディング
  5. ファイルをxx.lspとして保存します。これもDCLファイルと同じフォルダーにあります。
  6. BricsCADに切り替えてから、xx.lspファイルをBricsCADで開きます。
    • Windowsでは、エクスプローラーを使用してxx.lspファイルをBricsCAD図面ウィンドウにドラッグします。 (ファイルのドラッグは、 AppLoad コマンドまたはLISPの使用 負荷 関数!)
    • Linuxでは、 負荷 関数は、ファイルをLinuxバージョンのBricsCADにドラッグできないためです。 「:」プロンプトで次のように入力します。

      :(「xx」をロード)

  7. タイプ xx ルーチンを実行すると、ダイアログボックスが読み込まれます。

    :xx

    ダイアログボックスが表示されます。まあ、それはあなたがコーディングエラーをしていなければ、そうするべきです。

次は何ですか?

次の投稿では、すべてのベルとホイッスルをダイアログボックスに追加する方法について説明します。