見出し画像

Civil 3D の Dynamo で、文字の座標と内容をCSV出力してみた

Civil 3D の Dynamo の第3弾です。同じことするのを AutoCAD の LISP と Excel の VBA で作ってあるから、自分が使うなら今更いらないって感じですが、人に聞かれた時に、「Dynamoなら簡単にできますよ~」って答えられるかなぁと。

ってか、Dynamoだと、超ラクチ~ン!

1.お題

文字だけのDWGファイルから、X座標、Y座標、文字内容を記入したCSVファイルを、DWGファイルと同じフォルダに出力する。

文字だけ選択するようにとか、Dynamoで実装できるかもですが、その手間より、出力したい文字だけのファイルにした方が、色々融通きくかも、という考え。

画像8

2. 環境

Civil 3D 2021.2 Update
Dynamo Core 2.5.2.7915
Dynamo Civil 3D 2.5.2.860
LinkDWG2(インストール方法を紹介します)

3. LinkDWG2のインストール

もうね、Dynamoはこれに尽きるね。
「ノードがないんだよ!パッケージを探す旅に出ます!」

ただし、「LinkDWG2」はちょっとやっかいで、インストール後に動かすための作業が必要です。

1. パッケージをインストールする。
パッケージのインストール方法は、「Civil 3D の Dynamo を、超絶初心者が作ってみた」の「7.パッケージをインストールする」を参照してください。

2. AutoConfig ノードを実行する
「AutoConfig」と「Boolean」の「True」を繋げて、実行します。「Successfull」のメッセージがでたらOK。エラーになってしまった残念な方は、手作業でレジストリを編集します。

画像1

3. レジストリを編集する。
「Successfull」のメッセージが出た方はやらなくていいです。出なかった残念な人、それは私です・・・。レジストリを追加しましょう。追加後に再び「2. AutoConfig ノードを実行する」をすると、「Successfull」って表示されます。

場所:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion

名前:LindDWG

データ:C:\Users\Yuri\AppData\Roaming\Autodesk\C3D 2021\Dynamo\2.5\packages\LinkDWG2\extra

画像2

※ 元ネタはこちら。中国の方が作ったのかな?

4. 文字のプロパティを抽出する

画像3

文字のプロパティを抽出するノード
MtextProperty (LinkDWG2)

文字を選択するノード
AllObjectByDXFTypes (LinkDWG2)
Boolean
String
この3つを使うと、図面内の文字をすべて選択します。

5. 文字から座標と内容を抽出してリストにする

画像4

文字からXY座標を抽出する
PointX、PointY

リストを作成する
List Create

6. リストを並び替える

画像5

リストの行と列を入れ替えるノード
List.Transpose

リストをソートするノード
Python Script
「List.Sort」があるんだけどね、1次元なの。XY座標の2次元でソートしたいのよ。Python は検索すると、情報がいっぱい出てくるので、頼りになる奴だ。

入力方法は「Civil 3D の Dynamo で、計画線の座標をCSV出力してみた」の「ファイル名を取得するノード」を参照。最後の「OUT = 0」を、以下に変更。

OUT = sorted(IN[0], key=lambda x:(x[0],-x[1]))

画像6

7. CSVに出力する

画像7

使ってるノードなどは、「Civil 3D の Dynamo で、計画線の座標をCSV出力してみた」の「4.座標をCSV出力する」と「5. CSVを保存する場所を指定する」と一緒なので、そちらを参照。

8. 今回のサンプルファイル

欲しい方は、以下よりダウンロードしてください


この記事が気に入ったらサポートをしてみませんか?