コミュニティ
Dynamo - 日本語
製品テクニックや情報を共有、質問、解答したり、情報を検索など使い方は様々です。お役立てください。
キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

複数のポリラインから頂点座標を取り出したい

7件の返信7
解決済み
返信
メッセージ1/8
tazumi_s
661 件の閲覧回数, 7 件の返信

複数のポリラインから頂点座標を取り出したい

Autocadに関する内容です。

DynamoもしくはVBA,Lispなどで、Autocadのポリラインの頂点位置情報を取り出し保存する方法を探しています。

 

調べている限りでは、LIST [オブジェクト情報] コマンドを用いて、一つずつ行うやり方があるようなのですが、大量のポリラインがある場合に1つずつやるには向いていません。

プログラミングを用いてJSONデータの様な記述で情報を取り出し保存できれば,,,と思うのですが、そもそもAutocad上のポリラインの頂点情報にアクセスすることは可能なのでしょうか。

 

取り出したい情報と保存したい形式のイメージ

ポリライン1 記述スタート

    頂点1 x1,y1,z1

    頂点2 x2,y2,z2

    …………

    頂点n xn,yn,zn

ポリライン1 記述終わり

ポリライン2に続く

 

行いたい処理のイメージ

① 図面内のポリラインを取得

② 取得したポリラインを画層や色などで仕分け

③ 仕分けしたポリライン群に対して、各ポリラインの頂点情報を取り出し保存する処理を繰り返す

④ 結果は階層のあるデータの読み書きに適したフォーマットで保存

 

よろしくお願いいたします。

7件の返信7
メッセージ2/8
YuriHaga
次のアカウントへの返信: tazumi_s

私ならDynamoで、ポリカーブから「PolyCurve.Curves」で1本ずつ取り出して、「StartPoint」、「EndPoint」でポイントを取得、でやります。

ExcelやCSVなら、情報を書き出すのも簡単かと。

 

test_2023-08-07_04-56-27.png

メッセージ3/8
tazumi_s
次のアカウントへの返信: tazumi_s

ご返信ありがとうございます。

ノードの画像を参考に頂点座標の取得できました。

 

頂点座標の取得元にするポリラインデータの取得方法や座標値の保存形式は少し研究しようと思います。

 

ありがとうございました。

メッセージ4/8
katsuhisa.shibataJUJVG
次のアカウントへの返信: tazumi_s

例によってPython Scriptです。

CountColor.dynは色が指定したインデックスであるポリラインの個数を勘定します。

LayerCoord.dynは3種の画層に設定されたポリラインの頂点座標を出力します。

メッセージ5/8
tazumi_s
次のアカウントへの返信: katsuhisa.shibataJUJVG

お世話になっております。

Pythonでの記述ありがとうございます。

 

LayerCoord.dynを確認しました。

こちらでは、Dynamoノードを介さずPythonでAutocadのActiveXに書かれている関数を利用している状態でしょうか。

https://help.autodesk.com/view/OARX/2023/JPN/?guid=GUID-5D302758-ED3F-4062-A254-FB57BAB01C44

 

また、Pythonの中での質問になるのですが、処理順としては以下のような手順になっているのでしょうか。

空間内にあるオブジェクトを取得し、それがポリラインであれば目的の作業を実施

for ID in model_space:
obj = t.GetObject(ID, OpenMode.ForRead)
if isinstance(obj, Polyline):
pl = obj
lpts = None

 

画層名毎に格納箇所を仕分け

if pl.Layer == 'C-ROAD-PROF-TEXT':
lpts = lpts0
elif pl.Layer == 'C-ROAD-SCTN-TEXT':
lpts = lpts1
elif pl.Layer == 'D-BGD-HICN':
lpts = lpts2
if lpts != None:

 

ポリラインの頂点数取得

object.NumberOfVertices

 

ポリラインのある頂点の座標取得

Polyline.GetPoint2dAt Method

 

ポリラインのある頂点の座標のX,Y座標取得

Point2d.X Property

Point2d.Y Property

 

Autocadだけでなく、Pythonでも今まで知らなかった記述方法が沢山あってすごく参考になります。

メッセージ6/8
katsuhisa.shibataJUJVG
次のアカウントへの返信: tazumi_s

方式は Managed .NET です。リファレンスはトピック「オブジェクトが交差するように配置」 のメッセージ4に書きました。後は書かれているとおりです。

メッセージ7/8
tazumi_s
次のアカウントへの返信: katsuhisa.shibataJUJVG

今までVBAのところばかり見ていました。

方式が他にもあったのですね。大変参考になりました。

メッセージ8/8
katsuhisa.shibataJUJVG
次のアカウントへの返信: tazumi_s

「AutoCAD VBA 非推奨」で検索すると プラットフォーム差による VBA の問題と AutoCAD 2014 という2013年の記事が出てきて,「VBA の言語仕様は、十数年前の Visual Basic 6.0 のままです。VBA が持つ COM との互換性があり、.NET Framework ベースの新しい VB.NET を使うことが可能な AutoCAD .NET API が移植先として最適なのです。」と書かれております。ヘルプのVBAの項にはっきり「非推奨」と書いてほしいです。書いてあるのかな。

お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。

フォーラムに投稿  

State of Design & Make 2024

EE RESOURCES