今回はマリオネットを使用して、図面上で重複している線分を調べるスクリプトを作成します。
図形の移動や複製、図形の種類の変換、他社ソフトウェアからのコンバートなど、様々な要因で図形の重複が発生し、データサイズが大きくなってしまう場面はみなさま経験があるかと思います。
無駄な線は削除したいですが、線がぴったり重なっていると目視で見つけることは困難ですので、コンピュータに調べてもらいましょう。
今回は図面上のほかの線分に完全に含まれる線分を洗い出して削除するスクリプトを作成します。
65-1. 線分の内外判定
線分の始点と終点が他の線分の線上にあるとき、完全に含まれていると判定します。Is Point On Lineノードは指定した座標が線上にあるかどうかを調べることができます。
確認のため、長い直線Aと短い直線Bを図面に作図して、直線Bが直線Aに重なるように配置します。
Get Lineノードを使用して直線Bの始点と終点を取得します。
始点と終点がそれぞれ直線Aの線上にあるかどうか調べます。
始点と終点どちらも線上にある(True)とき、完全に含まれると判定します。
直線AとBの長さや位置を変更して判定結果に問題がないことを確認します。
65-2. 線分の比較リスト
図面上の線分をまとめてチェックできるようにリスト化します。直線AとBだけでは寂しいので数を増やします。直線gはあえて直線Bからはみ出すように配置しています。
まずはObjs by Critノードを使用して直線図形をすべて拾い出しましょう。
Mix2ノードに両方のポートに線分のリストを入力して、総当たりの組み合わせを作成します。
次に、総当たりの組み合わせから同じ直線の組み合わせを除去します。組み合わせた直線の図形のハンドルが一致しないもの(False)だけを再度リスト化します。
※SameStringノードはハンドル値を文字列に変換して比較することができます。Equalノードは数値しか扱うことができないため使用できません。 |
確認のため名前の組み合わせを可視化して出力します。これで、直線を比較するためのリストが完成しました。
65-3.重複チェック
それでは、内外判定のスクリプトに線分の比較リストを流し込みましょう。
判定結果を確認すると直線a,f,h,iでTrueの判定でした。直線gは始点が直線Bに含まれますが、終点が含まれないためFalseの判定となっています。内外判定は想定通りに動作しているようです。
最後に、Deleteノードを使用して重複する線分を削除します。
他の線分に含まれる線分が削除されて、重複が解消されました。
今回は簡単な重複チェックのプログラムを紹介しましたが見直しできる点が残っています。例えば、2つの直線の始点と終点が一致するような、お互いが完全に含まれる場合には両方の直線が消えてしまいます。
完全一致の図形についてはツール>不要情報削除…コマンドで除去することができますので、不要情報削除で対応できない重複を削除するという位置付けであればすぐに使えそうですね。
また、今回は線分と線分の比較をしましたが、多角形と線分の比較や、多角形と多角形、あるいはオブジェクト同士など、比較の対象を変更して内外判定を作成すれば応用できるプログラムになっていますので是非挑戦してください。
この機能を利用できる製品
![]() |
Vectorworks Architect建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品 |
![]() |
Vectorworks Landmark地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品 |
![]() |
Vectorworks Design Suite専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品 |