Civil3Dの.NET APIでポリラインの高度をTINサーフェスに合わせて設定する

01-INFRAWORKS

InfraWorksでTINサーフェスに航空写真をドレイプ

InfraWorksでは国土地理院の基盤地図情報からダウンロードした建築物外周線のSHPファイルを読み込んで建築物の箱モデルを作成する事ができます。

02-INFRAWORKS

InfraWorksの機能で建築物SHPから箱モデルを生成

航空写真をドレイプしたTINサーフェスに箱モデルを表示させるだけで一気に雰囲気が出ますね。
屋根と壁をランダムな色に設定する機能がとても効果的です。

我々はCivil3Dで建築物箱モデルを作成する事も有ります。
有りますがInfraWorksのような便利な機能はCivil3Dには有りません。(よね?)
SHPを閉じたポリラインとして読み込んだ後にポリラインの高度をTINサーフェスに合わせて設定する。
これが手間なんですねぇ。

その手間の掛かる部分を.NETプログラミングで手間が掛からないようにしてみました。
流れはポリラインの頂点のXY座標を順番に取得してその位置のTINサーフェスのZ値を取得して一番低い値をポリラインの高度に設定するという方法です。

一番低い値にする事によって建物が宙に浮く事を防ぎます。

03

ポリラインの頂点位置のTINサーフェスZ値

ポリラインの頂点を順番に取得する方法はこんな感じで。↓
https://forums.autodesk.com/t5/net/read-vertices-of-a-polyline/td-p/2892392

そのXY座標からTINサーフェスのZ値を取得する方法は、[サーフェス標高ラベル]オブジェクトを一旦作成してZ値を取得するという方法にしました。

Dim pnt2d As Point2d = New Point2d(x, y)
Dim surfaceElevnLbId As ObjectId = SurfaceElevationLabel.Create(surfaceId, pnt2d)
Dim label As SurfaceElevationLabel = surfaceElevnLbId.GetObject(OpenMode.ForRead)
Dim Z As Double = label.LabelLocation.Z

こちらを参考にさせて頂きました。↓
http://adndevblog.typepad.com/infrastructure/2013/02/creating-surface-spot-elevation-label-using-civil-3d-net-api.html

 

TINサーフェスを選択してポリラインを選択すればこの通り。

シーケンス 01_3

作成したコマンドを実行

あとはポリライン押し出しでソリッドを作成して、色をランダムに設定するところまで目指してみます。

05-CIVIL最終
(宮田)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中