Civil 3D の Dynamo で、文字の座標と内容をCSV出力してみた
Civil 3D の Dynamo の第3弾です。同じことするのを AutoCAD の LISP と Excel の VBA で作ってあるから、自分が使うなら今更いらないって感じですが、人に聞かれた時に、「Dynamoなら簡単にできますよ~」って答えられるかなぁと。
ってか、Dynamoだと、超ラクチ~ン!
※ ここで紹介している「LinkDWG2」の更新は2020年で止まっているので、現在は「Camber」をおすすめします。「Camber」→「AutoCAD」→「Objects」→「Text」の「Text.Position」、「Text.Contents」の2つのノードで文字の座標と内容を取得することができます。「Camber」やパッケージのインストールについてはこちらに少し書いています。
https://zenn.dev/yuri_haga/articles/dynamo_pakage
1.お題
文字だけのDWGファイルから、X座標、Y座標、文字内容を記入したCSVファイルを、DWGファイルと同じフォルダに出力する。
文字だけ選択するようにとか、Dynamoで実装できるかもですが、その手間より、出力したい文字だけのファイルにした方が、色々融通きくかも、という考え。
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。エラーになってしまった残念な方は、手作業でレジストリを編集します。
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
※ 元ネタはこちら。中国の方が作ったのかな?
4. 文字のプロパティを抽出する
文字のプロパティを抽出するノード
MtextProperty (LinkDWG2)
文字を選択するノード
AllObjectByDXFTypes (LinkDWG2)
Boolean
String
この3つを使うと、図面内の文字をすべて選択します。
5. 文字から座標と内容を抽出してリストにする
文字からXY座標を抽出する
PointX、PointY
リストを作成する
List Create
6. リストを並び替える
リストの行と列を入れ替えるノード
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]))
7. CSVに出力する
使ってるノードなどは、「Civil 3D の Dynamo で、計画線の座標をCSV出力してみた」の「4.座標をCSV出力する」と「5. CSVを保存する場所を指定する」と一緒なので、そちらを参照。
8. 今回のサンプルファイル
欲しい方は、以下よりダウンロードしてください
この記事が気に入ったらサポートをしてみませんか?