この投稿では、「非プログラマ」がBricsCADをカスタマイズするために利用できる最も強力な方法、つまりLISPプログラミング言語について見ていきます。この投稿では、BricsCADでLISPを使用する方法を実際的な例とともに学習します。さらに、ページの下部にLISP関数の概要があります。
ツールバーとメニューマクロは簡単に記述および編集できますが、BricsCADを制御する機能が制限されます。
BricsCADのLISPコマンドの完全な概要については、公式、 BricsCAD LISP開発者ガイド.
この投稿では、次のトピックについて説明します。
コマンドのLISP
では、実用的な目的でLISPコードを使用する方法を見てみましょう。たとえば、9インチのスペースに収まるように、7つの円の線形配列を描画する必要がある場合があります。
- 次のように、Circleコマンドを開始します。
: サークル
2Point / 3Point / RadTanTan / Arc / Multiple /:(点を選択します。) - 直径の値を入力する代わりに、次のようにLISPの式を入力します。
直径/: (/ 9.0 7)
直径/:1.28571BricsCADは、直径1.28571インチの円を描きます。 BricsCADがユーザー入力を予期するときはいつでも、適切なLISP関数を使用できます。
- 次に、[配列]コマンドに進み、次のように他の6つの円を描画します。
: アレイ
配列するエンティティを選択: L
セット内のエンティティ: 1 配列するエンティティを選択: (Enterキーを押します。)
アレイのタイプ:極/: r
配列の行数<1>: (Enterキーを押します。)
列数<1>: 7
列間の水平距離: (/ 0.9 7)
列間の水平距離:0.128571もう一度、LISPを使用して配列の間隔を指定します。これは、たまたま円の直径と同じです。
結果を思い出す:SETQ
上記の例では、(/ 9.0 7)の式を2回使用しました。1回はCircleコマンドで、もう1回は配列で使用しました。計算機のMキーで計算結果を記憶できるように、LISPですべての計算結果を記憶することができます。
これを行うには、setqと呼ばれる最も一般的なLISP関数を使用します。この奇妙な名前の関数
SET eQual toの略です。
- 計算結果を保存するには、 setq 次のように、変数と一緒に機能します。
: (setq x(/ 9.0 7))
1.28571
:ここに、 バツ (/ 9.0 7.0)計算の結果を記憶します。括弧の追加セットに注意してください。代数クラスから、「x = 7 + 9」や「x = 7/9」のような方程式を思い出すでしょう。 xは任意の値を持つことができるため、変数と呼ばれます。
- xに1.28571の値が含まれていることを自分で証明するには、BricsCADを使用してください。 (感嘆符)接頭辞。
: !バツ
1.28571
:!プレフィックス(「bang」と呼ばれることもあります)は、計算中に何が起こったのかを忘れてしまった場合に、変数に含まれている値を思い出させるのに役立ちます。
LISPは1つの変数に限定されません。文字の任意の組み合わせを作成して、次のような変数名を作成できます。 pt1, 直径、そして yvalue。唯一の制限は、次のようなLISP関数名を使用できないことです。 setq, T、そして getint。実際、上で計算された円の直径など、内容を反映する変数名を作成することをお勧めします。ただし、直径などのわかりやすい名前と、xなどの最小限の入力でバランスをとる必要もあります。良い妥協は dia. - 次のように、1つの変数を別の変数と等しくします。
:(setq dia バツ)
1.28571:!dia
1.28571
: - 今回は変数diaを使用して、次のようにCircleコマンドとArrayコマンドをやり直します。
: サークル
2点/ 3点/放射タンタン/弧/複数/: (ポイントを選択してください。)
直径/:!dia
直径/:1.28571
: アレイ
配列するエンティティを選択: L
セット内のエンティティ:1配列するエンティティを選択: (Enterキーを押します。)
アレイのタイプ:極/: r
配列の行数<1>: (Enterキーを押します。)
列数<1>: 7
列間の水平距離: !dia
列間の水平距離:0.128571BricsCADは、格納されている値1.28571を使用して、まったく同じ7つの円を描きます。 dia.
LISP関数の概要
LISPは非常に強力なので、BricsCAD図面のほとんどすべての側面を操作できます。次のチュートリアルでは、LISPが数字と単語を操作するために提供するさまざまな種類の関数を体験します。 LISP関数のいくつかのグループの旋風ツアーを開始するときに、BricsCADを起動して、例を プロンプト履歴 ウィンドウ(押す F2) ':'コマンドプロンプトで。
数学関数
LISPには、4つの基本的な算術関数に加えて、プログラミング言語で期待される多くの数学関数があります。このリストには、三角関数、対数関数、論理関数、ビット操作関数が含まれています。欠けている関数の1つのタイプは、マトリックス操作です。
たとえば、 分 関数は、数値のリストの最小(最小)を返します。
: (分 7 3 5 11)
3
この関数の結果を記憶するには、以下を追加します setq 変数あり Minnbr、 次のように:
: (setq Minnbr (分7 3 5 11))
3
一連の数値の最小値を参照するたびに、変数を参照できます Minnbr。以下に、trig関数の例を示します。
: (罪 minnbr)
0.14112
3ラジアンの角度の正弦を返します。
ヒント 角度は度数ではなく、ラジアンで指定する必要があります。度数で作業することが多いため、これは何度も不便ですが、度数をラジアンに変換する必要があります。
幸いなことに、正しくコーディングすれば、LISPがこれを行うことができます。 360度に2 * pi(約6.282)ラジアンあることを思い出してください。たとえば、45度のサインを取得するには、いくつかの派手なフットワークにふける必要があります。 : (罪 (* (/ 45 180.0) パイ)) ここでは、度(45)を180で割ってから、piを掛けています。整数ではなく実数で除算を強制するには、45または180のいずれかに小数(.0)が必要です。 ちなみに、piはLISPで事前定義されている唯一の定数であり、3.1415926に等しい。つまり、入力するだけです パイ、関数でpiの値が必要になるたびに3.1415926の代わりに。これを自分で確認するには、コマンドプロンプトで感嘆符を使用します。 : !pi LISPは計算を32ビット精度で実行しますが、結果を小数点以下6桁まで表示します。 |
幾何関数
CADはジオメトリを扱うため、LISPにはジオメトリを扱うための多くの関数があります。
2点間の距離
LISP 距離 機能はBricsCADのと同様です 距離 コマンド:2点間の3D距離を返します。どのように機能するかを確認するには、最初にx、y座標を1組の点に割り当て、 p1 、 p2、 次のように:
: (setq p1 ‘(1.3 5.7)) (1.3 5.7)
: (setq p2 ‘(7.5 3.1 11)) (7.5 3.1 11)
: (距離 p1 p2) 6.72309
次のように、x、y座標のリストの前にある一重引用符が抜けている可能性があります: '(1.3 5.7)。これは、LISPに ペア (または トリプル 座標のx、y、z)の場合、および数値を評価してはなりません。技術的には、 'マークは リスト 数の。
座標を区切るには、コンマではなくスペースを使用します。 Z座標を省略した場合、LISPはそれを0.0000と想定していることに注意してください。
0度からの角度
対象となる他の幾何関数には、0度(通常は東向き)から、 p1 、 p2:
: (角度 p1 p2)
5.88611
結果はラジアンで返されます:5.88611。
2つの線の交差
2本の線の交点は、 間 関数:
: (間 pt1 pt2 pt3 pt4)
エンティティスナップ
次の関数では、で始まる線の中点を見つけています p1。あなたは osnap 関数とosnapのタイプを指定します。 LISPは、エンティティスナップポイントのx、y、z座標を返します。エンティティは実際に存在している必要があります。
: ライン
ポイントから: !p1
ポイントへ: !p2
ポイントへ: (押す 入る.)
: (osnap p1“ mid”)
(4.4 4.4 5.5)
ここに 「中」 中点エンティティスナップモードを指します。
その他の幾何関数には次のものがあります テキストボックス (テキスト行の長方形の輪郭を見つけるため)および 極、指定された距離と角度の3Dポイントを返します。
条件付き関数
あなたはそれを言うことができます 条件付き 関数はプログラミング言語の存在を定義するため、最も重要です。これは、コンピュータプログラムが「思考」して決定を行うことを可能にする条件文です。条件関数は、ある値が別の値より小さい、等しい、または大きいかどうかをチェックします。彼らは何かが本当かどうかをチェックします。または、何かが間違っているまでアクションを繰り返します。
それがプログラミング言語なのか単なるマクロ言語なのかわからない場合は、条件を確認してください。
たとえば、ツールバーマクロには条件がありません。それらはプログラミング言語ではありません。
次に、条件付き関数の動作の例を示します。 もし 床から天井までの距離 より大きい 8フィート、 その後 14ステップを描画します。 そうしないと、13ステップを描画します。ステートメントには2つの部分があることに注意してください。 もし 一部は本当の部分です。の そうしないと 一部は偽の部分です。それが本当なら何かをしてください。それ以外の場合は、それがfalseの場合は他の何か。
LISPの条件関数でも同様の表現が使用されています。 「:」プロンプトで次のように入力します。
: (もし (>高さ96)(setqステップ14)(setqステップ13)) 13
このコードを分解して、 もし 関数とステートメントを比較します。
(もし | もし |
(> | より大きい |
高さ | 床から天井までの距離は |
96) | 8フィート; |
その後 | |
(setq手順14) | 14ステップを使用します。 |
そうしないと | |
(setq手順13) | 13ステップを使用します。 |
) |
その他の条件文
の もし 関数は、1つの条件を評価することに限定されます。の cond 関数は多くの条件を評価します。の 繰り返す 関数は特定の回数実行されますが、 ながら 関数は、trueである限りコードを実行します。
ストリングおよび変換関数
あなたは操作することができます 文字列 (1つ以上の文字で構成されるテキスト)LISPで、数値よりも範囲が狭い。たとえば、次のように文字列の長さを見つけることができます。
: (strlen 「BricsCAD World」)
16
の strlen (の略 STRING LENgth)関数は、「BricsCAD World」にはスペースを含めて16文字あることを通知します。 「BricsCAD World」が引用符で囲まれていることに注意してください。これは、変数ではなく文字列を使用していることをLISPに伝えます。
入力した場合 (ストレンBricsCADワールド)、LISPは変数BricsCADおよびWorldが保持する文字列の長さを見つけようとします。例えば:
: (setq BricsCAD「ソフトウェアパッケージ」)「ソフトウェアパッケージ」
: (setq world「地球」)
“地球」
: (strlen BricsCADワールド)
34
テキストの文字列を結合する
他の文字列関数は、すべての文字を大文字または小文字に変更します(strcase)、文字列の一部を返します(substr)、文字列内のテキストを検索して置換します(卑劣)、2つの文字列を結合します(strcat)、 次のように:
: (strcat BricsCAD”世界中で使用されています”
「地球全体で使用されるソフトウェアパッケージ」
このようにして、変数とテキストを組み合わせて、「13ステップの描画」などのレポートを作成します。
テキストと数値の間の変換
文字列関数には、文字列との間で変換を行うため、変換関数が関連しています。たとえば、以前に度をラジアンに変換する方法を示しました。 45.3711度のように、10進数の度数で問題ありません。しかし、BricsCADが45d37'11”と表す45度、37分、11秒をどのように変換するのでしょうか。それは変換関数のようなところです angtof (の略 浮動小数点への角度)が入ります。角度文字列を実数ラジアンに変換します。
: (angtof 「45d37'11 \」」1)
0.796214
ここに私達は供給しました angtof 角度を度分秒の形式で指定します。ただし、LISPは知るほどスマートではないので、 モード この場合は1です。
これ(および他のいくつかの関数)は、モードコードとして以下を使用します。
モード |
意味 |
例 |
0 | 小数度 | 45.3711 |
1 | 度分秒 | 45d 37 ′11″ |
2 | 卒業生 | 100.1234 |
3 | ラジアン | 0.3964 |
4 | 測量ユニット | 北45d37'11″ E |
モード番号とシステム変数の値の類似性に注意してください AUnits —ディーゼルが使用するモード。偶然ではありません。現在の単位の設定が事前にわからない場合は、次のように、モード番号を変数として指定することにより、この事実を利用します。
: (angtof "45d37'11 \" "(getvar 「aunits」))
0.796214
ここで使用します getvar (の略 変数を取得)、システム変数の値を取得するLISP関数。使った getvar 取得するため ユニットによって設定された角度表示の状態を保持します 単位 コマンド。
秒インジケータ(”)の処理方法に注意してください:\”。これは、文字列の終わりを示す終了引用符()と混同しないようにするためです。
その他の変換関数
他の変換関数は、ある測定単位を別の測定単位に変換します( cvunit 機能と default.unt ファイル)、整数を文字列(itos)、文字をそのASCII値(アスキー:たとえば、文字AをASCII値65に変換し、点をある座標系から別の座標系に変換(移動)します(トランス).
の default.unt ファイルは C:\ Users \
外部コマンド機能
「強力」は「複雑」に等しいことがよくありますが、LISPの最も強力な機能の1つは、最も理解しやすいものです。 コマンド 関数。その名のとおり、 コマンド LISP内からBricsCADコマンドを実行します。
考えてみてください。これは、LISPに円を描いたり、テキストを配置したり、ビューポートをズームしたりするのは簡単なことです。あなたなら何でも タイプ ':'コマンドプロンプトでは、 コマンド 関数。方法を見てみましょう コマンド 円を描くことによって動作します。ただし、最初に、 サークル コマンドが動作します:
: サークル
2点/ 3点/ラジタンタン/弧/複数/
直径/
円の直径: 1.5
に切り替える コマンド 関数では、次のように、「:」プロンプトで入力するものを模倣します。
: (コマンド 「円」「2、2」「D」「1.5」)
入力したすべてのテキストが引用符で囲まれていることに注意してください。そのコード行を入力すると、BricsCADは円を描くことによって応答します。
: サークル
2点/ 3点/ラジタンタン/弧/複数/
直径/
円の直径<2.5714>:1.5
で使用するより複雑なコマンドの1つを見てみましょう コマンド 関数、 テキスト。私たちが使用するとき テキスト コマンド、BricsCADは次のプロンプトを表示します。
: テキスト
テキスト:スタイル/整列/フィット/中央/中央/右/両端揃え/
テキストの高さ<0.2000>: 1.5
テキストの回転角度<0>: (押す 入る.) テキスト: BricsCADの調整
LISP-eseに変換すると、次のようになります。
: (コマンド「text」「5,10」「1.5」「」「BricsCADの調整」)
そして、BricsCADは次のように応答します。
:テキスト
テキスト:スタイル/整列/フィット/中央/中央/右/両端揃え/
'Rotation angle:'プロンプトでは、単に 入る キー。 LISP関数でそれがどのように処理されるかに注意してください:“” —空の引用符のペア。
同じ「」を使用して、自動的に繰り返すコマンドを終了します。 ライン コマンド:
: (コマンド「line」「1,2」「3,4」 “”)
その最後の「」を含めないと、BricsCADは「End point:」プロンプトでハングしたままになり、LISPルーチンは失敗します。
これで、BricsCADの100のコマンドのプロンプトシーケンスを実際に理解して、 コマンド 関数。それらを処理する最も簡単な方法は、コマンドをアルファベット順にリストし、完全なプロンプトシーケンスとともに、「クイックリファレンス」の本を市場で購入することです。そして、すぐにわかるように、クイックリファレンスブックにすべてのシステム変数、それらのデフォルト値、および許容値の範囲のリストがあることを確認してください。
または、 BricsCADヘルプセンター.
コマンド機能制限
しかし コマンド 関数に障害があります。以前、私は言いました タイプ ':'コマンドプロンプトでは、 コマンド 関数。"ここでは、「タイプ」という言葉を強調します。の コマンド ダイアログボックスに関しては、関数は完全に機能しなくなります。そうです。ダイアログボックスを使用するコマンドは、command関数では機能しません。つまり、以前の投稿で確認したマクロでは機能しません。このため、BricsCADにはほとんどすべての(すべてではない)コマンドのコマンドラインバージョンが含まれています。
システム変数へのアクセス
使用できますが コマンド システム変数にアクセスするための関数、LISPにはさらに直接的な関数のペアがあります。 getvar 、 setvar.
Getvar システム変数の値を取得する一方で、 setvar 値を変更(設定)します。
たとえば、システム変数 SplFrame スプラインポリラインのフレームを表示するかどうかを決定します。デフォルトでは、 SplFrame は0です。フレームは表示されません。 getvar:
: (getvar 「splframe」)
0
フレームを表示するには、 SplFrame 1に setvar 次のように:
: (setvar 「splframe」1)
1
ただし、私たちはひどい仮定をしました。 SplFrame ゼロはデフォルト値ですが、必ずしもLISPルーチンを実行した時点の値ではありません。どのように私たちはの価値を知っていますか SplFrame 変更する前ですか?後でその質問に答えます。乞うご期待。
GETXXX関数
上で描いた円やテキストなどの新しいエンティティを描画するコマンドを実行することは、 コマンド 関数。その円を移動したり、テキストを編集したりするなど、既存のエンティティを操作するのは少し面倒です。これは、集合的に知られている関数のグループです。 Getxxx 場に出る。これらの関数は、画面からデータを取得します。より有用なもののいくつかは次のとおりです。
getpoint – 選択した点のx、y、z座標を返します。
getangle – 角度をラジアンで返します。
getstring – ユーザーが入力したテキストを返します。
getreal – ユーザーが入力した実数の値を返します。
これらのいくつかをTextコマンドで使用する方法を次に示します。 getstringでコードをやり直してみましょう
LISPは最初にすべての入力を求め、次にTextコマンドを実行します。ここの最初の行です
ユーザーにテキストを入力するように求めるコード:
:(setq TxtStr(getstring T「何を書きたいですか? 「)」
何を書きたいですか?
追加の「T」に注意してください。これは回避策です getstring スペースを含むテキストの文字列を受け入れます。あなたが去るとき T、その後 getstring 最初のスペースまでのテキストのみを受け入れます。「Tailoring BricsCAD」と入力すると、「BricsCAD」ではなく「Tailoring」のみが入力されます。
上記のコード行でも、 setq 関数は、「Tailoring BricsCAD」などの語句を変数に格納します TxtStr.
コードの次の行では、 getreal テキストの高さを求める関数。これは、ユーザーが入力した実数(10進数)です。
: (setq TxtHt (getreal 「あなたは手紙をどれくらい大きくしたいですか? 「)」
どのくらいの大きさの文字が欲しいですか? 2
2.0
方法に注意してください getreal 2(整数)を2.0の実数に変換します。値は変数に格納されます TxtHt.
次に、 getangle テキストの回転角度を求める関数:
: (setq TxtAng(getangle 「テキストをどの程度傾けますか? 「)」
テキストをどの程度傾けますか? 30
0.523599
方法に注意してください getangle 30(10進度)をラジアン0.523599に変換します。値は変数に格納されます TxtAng.
次に、 ゲットポイント テキストの挿入ポイントをユーザーに要求する関数:
: (setq TxtIns(ゲットポイント 「どこからテキストを始めたいですか? 「)」
テキストのどこから始めますか? (ポイントを選択してください。)
(27.8068 4.9825 0.0)
方法に注意してください ゲットポイント zがゼロであっても、座標のx、y、z値を返します。ユーザーは画面上の点を選択するか、座標ペア(x、y)またはトリプル(x、y、z)を入力できます。
最後に、 テキスト 4つの変数を含むコマンド:
: (コマンド「テキスト」TxtIns TxtHt TxtAng TxtStr) テキストの両端揃え/スタイル:
高さ<1.5000>:2.000000000000000
回転角度<0>:0.523598775598299
テキスト:BricsCADの調整
:nil
そこ!カスタマイズしました テキスト 私たちの好みに応じて。ユーザーに表示されるプロンプトを変更しただけでなく、LISPを使用してプロンプトの順序を変更しました。
選択セット関数
一度に複数のエンティティを操作するために、LISPには選択セットを作成するための関数のグループがあります。次のように、これらはすべて「SS」で始まります。
- SsAdd エンティティを選択セットに追加します。
- SsDel エンティティを選択セットから削除します。
- SsGetFirst 選択したエンティティの数を報告します。
- SsLength 選択セット内のエンティティの数を報告します。
- SsMemb エンティティが選択セットの一部であるかどうかを確認します。
- SsName 選択セットのn番目のエンティティを識別します。
- SsSetFirst 選択セット内のオブジェクトを強調表示します。
BricsCAD 選択する コマンドは一度に1つの選択セットしか処理できません。対照的に、LISP SSxxxコマンドは最大128の選択セットで機能します。
エンティティ操作関数
本当に強力なLISP関数は、図面データベースに直接入って操作するものです。とは異なり コマンド 機能は強力ですがシンプルですが、エンティティ操作機能は強力で複雑です。これらのいくつかの概要は次のとおりです。
- EntMake 新しいエンティティを作成します。
- EntGet 図面内のエンティティを説明するデータを取得します。
- EntMod エンティティを変更します。
- EntDel データベースからエンティティを消去します。
- TblObjName シンボルテーブル内のエンティティの名前を取得します。
「Ent」プレフィックスはエンティティの略です。 「シンボルテーブル」とは、図面の画層の名前、文字スタイル、その他の名前付きエンティティを保存する図面データベースの一部を指します。
エンティティを作成して操作するために、これらのLISP関数は、「ドットペア」と呼ばれるDXF形式のバリアントで機能します。たとえば、RightOfWayという名前のレイヤーを操作するには、次の形式を使用します。
「2。道の右側"
引用符はデータの開始と終了を示し、中央のドットは2つの値を区切ります。 2 はレイヤー名のDXFコードであり、 道の右側 レイヤーの名前です。これらのエンティティ操作関数を操作するには、DXF形式をよく理解する必要があることがわかります。
高度なLISP関数
BricsCADプログラミングのキャリアでは決して使用できないLISP関数が多数あります。たとえば、メモリを制御するためのLISP関数があります。 GCとして (ガベージコレクション)および mem (メモリの状態)。 LISP関数の別のセットは、次のようなダイアログボックスの読み込みと表示に限定されています。 load_dialog 、 new_dialog.
今すぐBricsCADを使ってみましょう
多言語、広範囲で使える永久ライセンスとサブスクリプションです。
- 前書き
- BricsCADユーザーのための55のヒント
- 設定
- 環境を変える
- カスタムユーザーインターフェース
- [カスタマイズ]ダイアログボックスの概要
- メニューバーとコンテキストメニューをカスタマイズする
- ツールバーとボタンアイコン
- マクロとディーゼルコードの記述
- リボンのタブとパネル
- キーストロークのショートカット、エイリアス、シェルコマンド
- マウス、ダブルクリック、タブレットボタン
- クワッドについて知っておくべきすべてのこと
- ロールオーバープロパティ
- ワークスペースとユーザーインターフェイス
- 設計ツールと構造パネル
- シンプルで複雑な線種の作成
- ハッチングのパターン化
- 形状とフォントのデコード
- フィールドテキストでのコーディング
- スクリプトを書く
- LISPによるプログラミング(はじめに)
- LISP関数