【Lisp】ポリラインは恋人、線分はツンデレ!?測点作図(MakeStations)の舞台裏

Lisp

皆さん、こんにちは!

配管ラインにおける“位置”を正確に捉えるために欠かせない「測点」。
普段は目立たない存在ですが、今回はこの測点作図をLispで自動化してみました!

ツール名は、Lispによる測点作図ツール「MakeStations.lsp」です。

▷ツールの目的

  • 管路設計業務の効率化
  • 人手によるミスを低減し、作業時間を大幅に短縮

▷基本機能

AutoCADのポリラインまたは線分を対象に、等間隔で「測点(ステーションポイント)」を自動作成するLISPツール。

▷主な仕様

  • 対象となる配管線形の図形は、ポリラインまたは線分。
  • ポリラインまたは線分の開始点から、指定した間隔で測点を連続配置。
  • 測定開始点は、配管ラインの端点または任意の位置から指定可能。さらに、距離を数値入力して指定も可能。
  • 作図の終点位置を指定可能(直線部の管割の使用を想定)。
  • 測点には円形の測点マーカーと測点番号を作図。これらは、専用レイヤー(—測点—)に作図され、色指定オプションあり。
  • 測点マーカーの半径を自由に設定可能。
  • 測点番号(No1, No2, …)のテキストの文字高さを指定可能。

▷操作手順

1.対象となる配管ライン(ポリラインまたは線分)を選択。

2.測点マーカーと番号の色を指定。(初期値:Bylayer、ペン番号1~7から選択可能)。

3.開始点を指定(初期値:端点)。オプション O:任意の点、D:距離指定

4.測点の配置間隔を数値入力(初期値:10000mm)。

5.終点を指定(初期値:配管ラインの終点まで)。オプション ライン上の任意の位置を指定可能。

6.測点マーカーの半径を数値入力 (初期値:100mm)。

7.測点番号の文字高さを数値入力 (初期値:100mm)。

▷工夫ポイント

  • ポリラインまたは線分のどちらにも対応し汎用性を確保。
  • 測点マーカー、測点番号の色を選択可能。ひとつの配管ラインに対して複数用途の作図に想定。
  • 専用レイヤーへの自動作図によりデータ管理が容易。また、専用レイヤーは「印刷しない」設定としているため印刷時に不要情報を管理しやすい。
  • 開始点および終点が自由に設定可能で柔軟な対応が可能。

▷実務への応用

  • 配管ラインに関する各種の距離管理。

   測点番号を利用して、始点からの位置を素早く判断可能。

  • 直線部の管割に活用可能。

   始終点を指定できるため、直線部のみを対象とした自動管割への活用。

▷作成秘話

測点作図ツール「MakeStations.lsp」は、AutoCAD上のポリラインや線分に等間隔で測点を自動作図する便利なツールですが、開発の過程ではいくつかの試行錯誤がありました。

◆ポリラインに対しては想定通りの動作

ポリラインについては、点列の抽出もスムーズに進みました。
頂点座標をすべて取得し、選択した始点から一定間隔で測点を割り振る処理も順調。
vlax-curve系関数(※)を使えば、始点からの距離を正確に指定してポイントを割り出せるのも大きな助けになりました。

※「vlax-curve系関数」は、直線、円、円弧、ポリライン、スプラインなど、ほとんどの曲線図形オブジェクトに関する情報を取得したり操作したりするための関数群です。

◆苦戦したのは「線分(LINE)」への対応
ところが、単なるLINEエンティティを対象にしたときには苦戦の連続でした。具体的には次のような問題が発生しました。

  • 線分の始点・終点に関係なく、測点が「1つだけ」しか作図されなかった。
  • 測点が意図しない位置(端点ではなく途中)に現れる/飛び飛びになる。
  • 「測点をこの方向で打ちたい」と思ってクリックしたのに、逆方向に進んでしまう。

原因は2つありました。

【原因①】複数の線分を自動で追跡する仕組みが必要だった

ポリラインはひとまとまりの「連続した形状」として認識されますが、LINEエンティティは1
本ずつ独立しています。
そのため、選択した1本の線分からつながる他の線分を、同一レイヤー内で順番に辿るアルゴ
リズムが必要でした。

選択した始点から、端点同士が一致しているLINEを順に探し、接続判定を最大1000回まで繰り返します。
このループが地味に大変で「循環接続(閉ループ)」や「微妙な端点ズレ」にも対応する工夫
が必要でした。

【原因②】開始点の指定方法に柔軟性が必要だった

ポリラインの場合はvlax-curveを使えば「端点から○○mm」や「任意点」から測点を求めるのも容易ですが、線分に関してはそうはいきません。

線分はvlax-curveが対応しない場合もある(※)ため、始点からの距離をベクトル演算で手動計算する必要がありました。また、ゼロ除算の回避や、ピック位置に応じた始点の自動判定など、細かい工夫が積み重なっています。

これらの工夫により、ポリラインと同様に 連続した線分でも測点を自動作図できるようになりました。

※線分自体が持つ特性(閉じていない、面積がないなど)から、その特性に依存する関数では期待通
 りの結果が得られないケースが考えられます。
 今回の問題は、①接続された複数の LINE を「連続体」としては扱えない。②方向を持つ(start
  → end)のでポリラインでは自動的に「順方向に沿って」距離を取得できが、LINE は単独では方
 向を自動認識しない。

こうした細かな工夫の積み重ねが、「MakeStations.lsp」の安定動作に繋がっています。今では、自信をもって業務に投入できるツールとなりました!

▷まとめ

今回は配管設計の“縁の下の力持ち”、位置関係の把握や距離の特定など、さまざまな場面で活躍する「測点」を、Lispで自動化するツールをご紹介しました!

特に水道管等、道路下の埋設管のような「直線部分と折れ点が多く存在する場面」でも測点作図がラクになるため、設計業務の効率化に貢献できると感じています。

ポリラインではうまくいったのに、線分ではまさかの大苦戦。でも、だからこそこのツールには「自分らしさ」が詰まっています。 同じように苦労している方の参考になればうれしいです!

▷今日の花言葉

花の名前:忘れな草(Myosotis

花言葉:密かな力

小さくて目立たないけれど、可憐に咲き続けるワスレナグサ。
ワスレナグサは控えめながら確かにそこにある“縁の下の力持ち”。 表立たずとも誰かを支え続ける存在です。見えない支えを象徴する優しい花です。

画像生成:ChatGPT(OpenAI)

▷今日の名言

『成功の陰には、目立たない努力がある』

アルベルト・アインシュタイン

画像生成:ChatGPT(OpenAI)

コメント