2017年6月23日

Weed Polylines (Simplify Polylines)



頂点が非常に多いポリラインをなんとか軽く出来ないか?
"無駄な頂点を削除しつつ、形状特徴を残す"

きれいな等高線が欲しい時にこういう機能が使いたいわけですが、簡単そうでなかなか難しいです。
なのでちょっと調べてみました。


AutoCAD

検索してみると標準のAutoCADにはこの作業に使えるコマンドが無く、
Map3DやCivil3Dに"Weed Polylines"(ポリラインを間引き)というコマンドがあります。
標準のAutoCADでやるにはAutolispなどでスクリプトを書くしか無いわけですが、書いている人いました。
https://superuser.com/questions/263669/how-to-simplify-a-polyline-in-autocad



formZ

formZv6.xのReduceMeshコマンドを使うと簡単に頂点を間引きできます。
ただし指定できるパラメーターは "角度" のみです。

formZv8.5ではPolgonizeコマンドで頂点の間引きができます。
指定できるパラメーターは "頂点数" といくつかのチェック項目のみです。
これだとベクトルライン(ポリライン)の元々の頂点数を考慮しないと適切な処理が出来ないので一括処理は難しいです...。

formZ場合、コマンドがあるだけマシなのですが、問題はデータが重いと非常に時間がかかるということです。
何十MBもあるCADデータだったりするとほとんどフリーズしてしまいます。




Rhinoceros

Rebuild Curveコマンドで行けるのですが、これも個々のCurveの頂点数を考慮しなければいけません。
一括処理するためにはスクリプトを書く必要があります。
検索してみると、forumに同じことを質問しているスレがあり、ユーザーがスクリプトをアップしていました。
https://discourse.mcneel.com/t/simplify-polyline/38560/14

こちらのスクリプトの場合3次のカーブになってしまいますが、それで良い場合は問題ないと思います。

RhinoScript.orgにもスクリプトありました。
http://www.rhinoscript.org/scripts/114
でも一括処理が出来ないようで...残念。



RhinoPython

自分もPythonで書いてみたのですが理想的な間引きをするのがなかなか難しくてまだ改良が必要です。

参考にしているのはAutoCADのWeed Polylinesコマンドです。
https://knowledge.autodesk.com/support/autocad-map-3d/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/MAP3D-Use/files/GUID-E04B543E-29E7-4545-A4FA-DDDF861E4960-htm.html
大変シンプルなアイデアなのですが、これだけでは自分の思ってる感じにならないようで...。今後の課題です。


0 件のコメント:

コメントを投稿