投稿

12月, 2022の投稿を表示しています

[Blender3.3] 日本の地形モデルメッシュ追加アドオンの開発 (7): 独自アイコンの指定

イメージ
前回 までで一応動作するものになりましたが、改良の余地は沢山あります。 それらも一つ一つ調べながらやらないとなので、時間がかかりそうです。 さて、今回は追加メニューで表示するアイコンを独自のものに変えてみたいと思います。 最初にアイコンを作成します。 アイコンのサイズは縦横とも32ピクセルです。他のメニューに合わせて背景を黒、描画色を白にしました。TM_MESH_TERRAIN.png の名前でPNG形式で保存しておきます。 次に作るのは、読み込み用のモジュールです。icon.py としました。内容は下記の通りです。 # -*- coding: utf-8 -*- # # package: terrain_model # file: icon.py import os import bpy from trace import Trace # We can store multiple preview collections here, # however in this example we only store "main" preview_collections = {} def get_icon_id(name): pcoll = preview_collections["custom"] return pcoll[name].icon_id def register(): Trace.print("icon: register()") # Note that preview collections returned by bpy.utils.previews # are regular py objects - you can use them to store custom data. import bpy.utils.previews pcoll = bpy.utils.previews.new() # path to the folder where the icon is # the path is calculated relative to this py file

[Blender3.3] 日本の地形モデルメッシュ追加アドオンの開発 (6): 取り敢えずの完成

イメージ
前回 、スクリプトのファイルを分割して、それぞれの機能が見通し良くなりました。 そこで最後の仕上げに入ります。 まず、距離と緯度との変換のためにヒュベニの公式のモジュールを作ります。ファイル名は、hubeny_formyla.py です。 # -*- coding: utf-8 -*- # # package: terrain_model # file: hubeny_formula.py # Hubeny's Formula # # D = sqrt(Dy * M)^2 + (Dx * N * cos(P))^2) # D: distance (m) # Dy: diff of latitude (radian) # Dx: diff of longitude (radian) # P: average of latitude (radian) # M = Rx * (1 - E^2) / W^3 # W = sqrt(1 - E^2 * sin(P)^2) # N = Rx / W # E = sqrt((Rx^2 - Ry^2) / Rx^2) # # long radius(Rx), short radius(Ry) # WGS84: 6,378,137.000, 6,356,752.314 245 # import math Rx = 6378137.0 Ry = 6356752.314245 E2 = (Rx ** 2 - Ry ** 2) / Rx ** 2 #W = math.sqrt(1 - E2 * math.sin(P) ** 2) #N = Rx / W def angle_from(distance, latitude): ''' parameter: distance (m) latitude (radian) ''' W = math.sqrt(1 - E2 * math.sin(latitude) ** 2) N = Rx / W return distance / N / math.cos(latitude) def distance_from(angle, latitude

[Blender3.3] 日本の地形モデルメッシュ追加アドオンの開発 (5): スクリプトファイルの分割

 前回の終わりに書いた通り、アドオンのスクリプトファイル一つだと辛くなってきたため、ファイルを複数に分割することにしました。 分割する場合、特定のフォルダ配下に __init__.py 他、関係するスクリプトファイルを配置することになります。それで、これまでの terrain_model.py の名前を継承して、フォルダ名を terrain_model として、その下にファイルを置くことにしました。 なお、このterrain_modelフォルダ、 以前(トレース情報の出力) トレース用に作成した trace.py と同じフォルダに置いてあります。なので、 pythonからの自動読み込みできるように設定した フォルダの下です。 では、まず __init__.py から。 # -*- coding: utf-8 -*- # # package: terrain_model # file: __init__.py bl_info = { "name": "New Terrain Model (JP)", "author": "Shiki Kuraga", "version": (1, 0), "blender": (3, 3, 0), "location": "View3D > Add > Mesh > New Terrain Model (JP)", "description": "Adds a new Terrain Model (JP) Mesh Object", "warning": "", "support": "TESTING", "doc_url": "", "category": "Add Mesh", } __all__ = [ 'translation', 'operator

[Blender3.3] 日本の地形モデルメッシュ追加アドオンの開発 (4): 地理院タイル(標高タイル)の読み込み

イメージ
 さて、いよいよ地理院タイルを読み込んで、地形モデルを作成したいと思います。 地理院タイルタイルの仕様は こちら(標高タイルの作成方法と地理院地図で表示される標高値について) を参照してください。 とは言っても、いきなり仕様通りのメッシュを作るのはハードルが高いので、まずは入力された緯度経度とズーム値で特定される一つの標高タイルを取得してそれをメッシュ化することにします。 スクリプトのコードは以下のようにしました。 # -*- coding: utf-8 -*- bl_info = { "name": "New Terrain Model (JP)", "author": "Shiki Kuraga", "version": (1, 0), "blender": (3, 3, 0), "location": "View3D > Add > Mesh > New Terrain Model (JP)", "description": "Adds a new Terrain Model (JP) Mesh Object", "warning": "", "support": "TESTING", "doc_url": "", "category": "Add Mesh", } translation_dict = { "ja_JP": { ("*", "Latitude"): "緯度", ("*", "Longitude"): "経度", ("*", &qu

[Blender3.3] スクリプト開発用の画面レイアウト

イメージ
 全然大した話じゃないです。 これまで、Blenderでのpythonのスクリプトを作成するとき、3DビューポートとテキストエディタとPythonコンソールをわざわざ切り替えながら行ったり来たりしていました。 が、実はそれ用の画面レイアウトは定義されていたんですね。 Blenderのメニューバーの右の方に "scripting" のボタンがあり、これを押せば、右にテキストエディタ、左に3Dビューポートなど必要なウィンドウが開かれるようになっていました。 いままで苦労して切り替えていたのは何だったんだろうと思ったのですが、そろそろテキストエディタでの開発に限界を感じ始めているので、今更感もあるのでした...。