とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

MAYA2018 エラー ”後から任意でロードできません” 🔰🔰🔰

MAYA2018の”後から任意でロードできませんエラー”について

自分用の覚え書きです🔰

エラー内容

// エラー: file: C:/Program Files/Autodesk/Maya2018/scripts/others/pluginWin.mel line 290: 後から任意でロードできません: C:/Users/foo/Documents/maya/2018/plug-ins/MyPlugin.mll
指定されたプロシージャが見つかりません。
//
// エラー: file: C:/Program Files/Autodesk/Maya2018/scripts/others/pluginWin.mel line 290: 指定されたプロシージャが見つかりません。

 

 原因

MAYA2019のSDKでビルドしたプラグインをMAYA2018で利用したのが原因です。

解決方法

MAYA2018のSDKでビルドしたプラグインをMAYA2018で利用します。

最後に

  • MAYA2019特有のAPIは使っていないのでMAYA2018でそのまま動いて欲しい。
  • 会社で高いお金払っているので、MAYAプラグインはいい加減にバイナリ互換にして欲しいと思う今日この頃。そもそも新機能追加よりバグを直してくれよ、まったく。
  • だんだん愚痴になってきました😤

おまけ

MAYA2018のプラグイン開発環境はCMakeじゃなくて普通にVisualStudioを使うんですね・・・2019と2018のプラグイン開発が微妙に面倒くさい😨

MAYA2019 C++プラグインでOpenCVを静的リンクする

前回の続きです

ohtorii.hatenadiary.jp

作業の前に

すでにOpenCVで開発している場合は、念のためOpenCV_DIRを一時的に無効化します。

$ set OpenCV_DIR=

 

OpenCVの静的リンクのライブラリを作成する

今回利用したソースコード

https://github.com/opencv/opencv/archive/4.1.0.zip

 

VisualStudioのソリューションを生成する

$ cmake -DBUILD_SHARED_LIBS=OFF -H. -Bbuild -G "Visual Studio 14 2015 Win64"

省略

-- General configuration for OpenCV 4.1.0 =====================================
-- Version control: unknown
--
-- Platform:
-- Timestamp: 2019-07-25T03:50:55Z
-- Host: Windows 10.0.18362 AMD64
-- CMake: 3.14.5
-- CMake generator: Visual Studio 14 2015 Win64
-- CMake build tool: C:/Program Files (x86)/MSBuild/14.0/bin/MSBuild.exe
-- MSVC: 1900

省略

-- C/C++:
-- Built as dynamic libs?: NO

省略

-- Built as dynamic libs?: NO となっていることを確認する。

 

 静的ライブラリ(.lib)を生成する

$ cmake --build build --config Release

 

 静的ライブラリ(.lib)をインストールする

f:id:ohtorii:20190725180405p:plain

 

ビルドが成功したら、opencv-4.1.0/build/install に静的ライブラリ、ヘッダファイル、cmakeファイルなどがあることを確認する。

f:id:ohtorii:20190725180759p:plain



自作プラグインをビルドする

OpenCVを静的リンクして自作プラグインをビルドします。

CMakeList.txt

cmake_minimum_required(VERSION 2.8)

# include the project setting file
include($ENV{DEVKIT_LOCATION}/cmake/pluginEntry.cmake)

# specify project name
set(PROJECT_NAME helloWorld)

## Set our project name
# project(${PROJECT_NAME})

# set SOURCE_FILES
    set(SOURCE_FILES
    main.cpp

)

# set linking libraries
set(LIBRARIES
    OpenMaya
   Foundation

)


# Build plugin
build_plugin()

 

#

#静的リンクのライブラリを利用する

#

set( OpenCV_STATIC ON )


find_package( OpenCV REQUIRED )
if(OpenCV_FOUND)

    #ランタイムライブラリをOpenCVに合わせて変更する。

    #  Release - マルチスレッド(/MT)

    #  Debug - マルチスレッドデバッグ(/MTd)

    set(CMAKE_CXX_FLAGS_RELEASE "/MT")

    set(CMAKE_CXX_FLAGS_DEBUG "/MTd")


    target_include_directories(${PROJECT_NAME} PUBLIC ${OpenCV_INCLUDE_DIRS})
    target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
endif()

 

環境

 最後に

 静的リンクを行うとプラグイン(.mll)のファイルサイズが10MB以上になりますが、1ファイルだけ配布すれば良いので運用時のトラブルは減ると思います。

MAYA2019のC++プラグインからOpenCVを利用する方法🔰🔰

はじめに

MAYAプラグイン(C++) でOpenCVを使おうとしてはまったのでメモ🔰🔰

注意

MAYAで映像を作成しているアーティストさんに自作プラグインを評価してもらうのが主目的なので、プログラマ視点では間違った対応方法の箇所があります。

ご注意ください。

CMakeLists.txtの書き方

cmake_minimum_required(VERSION 2.8)

# include the project setting file
include($ENV{DEVKIT_LOCATION}/cmake/pluginEntry.cmake)

# specify project name
set(PROJECT_NAME helloCmd)

 

# set SOURCE_FILES
set(SOURCE_FILES
  helloCmd.cpp

)

# set linking libraries
set(LIBRARIES
  OpenMaya
  Foundation

)

 

# Build plugin
build_plugin()

 

###############################

# OpenCVの設定は最後に追加する

###############################

find_package( OpenCV REQUIRED )

if(OpenCV_FOUND)
    target_include_directories(${PROJECT_NAME} PUBLIC ${OpenCV_INCLUDE_DIRS})
    target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

 

   #DLLの遅延読み込みを有効化する

   #DLL名の取得方法がわからないためハ-ドコーディングしたよ😅😅

    set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE /DELAYLOAD:"opencv_world410.dll")
    set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_DEBUG /DELAYLOAD:"opencv_world410d.dll")
endif()

 

自作プラグインから opencv_world410.dllを読み込む方法

やり方は二通りあります。

  1. C:\Windows\System32にコピーする
  2. 自作プラグインと同じディレクトリに置く
(1)について

自分の環境でテストする分には良いですが、ほかの方に配布するときにプラグインが動かないとトラブルの元になります。

(2)について

dllをコピーしただけでは認識しないので、以下2点の対応を行います。

  • DLLを遅延読み込みする(CMakeLists.txt中でリンカーオプションを設定する)
  • DLLの検索パスを自作プラグインのパスにする

 

DLL検索パスはプラグイン冒頭で以下のようにしました。

#include<windows.h>
#include<tchar.h>

 

MStatus MyPlugin::doIt(const MArgList &arg_list) {
    //
    //DLL検索パスを自作プラグインのパスに変更する
    //

    {
        TCHAR name[MAX_PATH + 8] = { 0, };
        TCHAR* lastdelim = 0;
        if (GetModuleFileName(MhInstPlugin, name, _countof(name)) == 0) {
            return MStatus::kFailure;
        }
        lastdelim = _tcsrchr(name, '\\');
        *lastdelim = '\0';
        if (SetDllDirectory(name) == 0) {
            return MStatus::kFailure;
        }
    }

    MStatus result;
    try {
        //プラグインのメイン処理
        result = Main(arg_list);
        }catch (...){

            //自作プラグイン中のC++例外はすべて無視してMAYAがクラッシュしないようにする。

           //ハードウェア例外は普通に処理されるのでMAYAはいつも通りクラッシュするよ😙

           //まぁ、MAYAは何もしなくてもクラッシュするけどね😨ははは・・・

            result = MS::kFailure;
    }

    //
    //DLL検索パスを元に戻す
    //
    SetDllDirectory("");

    return result;
}

 

何かもっといい方法ないですかねぇ😢

 

 環境

 

最後に

とりあえず、CMakeLists.txtを編集して自作MAYAプラグインからOpenCV(DLL版)を利用できるようになりました。

ただし、DLL読み込みパスの問題が残ったままなので、次のステップとしてOpenCVの静的リンクを試してみます。

 

後日談

ohtorii.hatenadiary.jp

MAYA2019のプラグインをビルドしたので覚え書き🔰

MAYA2019プラグインのビルド覚え書き

 久しぶりにMAYAプラグインをビルドしたのでその覚え書きです🔰🔰

最近のMAYAはCMakeでビルドするんですね

 

プラグインの開発環境

  • Windows10 64bit
  • Visual Studio 2015 Update3が必要(Visual Studio 2017のみインストールした環境ではCMakeでビルドエラーになりました。)
  • cmake version 3.14.5

ちなみに、cmakeはChocolateyでインストールしました。 

 

事前設定

readme.mdに書いてあります。

devkitBase\MayaDevkit\README.md

SDKへのパスを環境変数で設定します。

DEVKIT_LOCATION=D:\Users\hoge\Documents\devkitBase

あなたの環境に合わせて読み替えてください。

 

ビルド手順 

手始めに単純なhelloWorldCmdをビルドしてみます。

cd D:\Users\hoge\Documents\MayaDevkitBase\devkit\plug-ins\helloWorldCmd

cmake -H. -Bbuild -G "Visual Studio 14 2015 Win64"

cmake --build build --config Release

補足

Debugモードでビルドするには--config Releaseを削除してください。 

 

ビルド成功時のログ

> cmake -H. -Bbuild -G "Visual Studio 14 2015 Win64"


-- Selecting Windows SDK version to target Windows 10.0.17763.
-- The C compiler identification is MSVC 19.0.24215.1
-- The CXX compiler identification is MSVC 19.0.24215.1
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Users/hoge/Documents/MayaDevkitBase/devkit/plug-ins/helloWorldCmd/build

 

> cmake --build build --config Release

 

Microsoft (R) Build Engine バージョン 14.0.25420.1
Copyright (C) Microsoft Corporation. All rights reserved.

Checking Build System
CMake does not need to re-run because D:/Users/hoge/Documents/MayaD

 

evkitBase/devkit/plug-ins/helloWorldCmd

/build/CMakeFiles/generate.stamp is up-to-date.
Building Custom Rule D:/Users/hoge/Documents/MayaDevkitBase/devkit/plug-ins/helloWorldCmd/CMakeLists.txt
CMake does not need to re-run because D:/Users/hoge/Documents/MayaDevkitBase/devkit/plug-ins/helloWorldCmd
/build/CMakeFiles/generate.stamp is up-to-date.
helloWorldCmd.cpp
ライブラリ D:/Users/hoge/Documents/MayaDevkitBase/devkit/plug-ins/helloWorldCmd/build/Release/helloWorld
Cmd.
lib とオブジェクト D:/Users/hoge/Documents/MayaDevkitBase/devkit/plug-ins/helloWorldCmd/build/Release/hello
WorldC
md.exp を作成中
helloWorldCmd.vcxproj -> D:\Users\hoge\Documents\MayaDevkitBase\devkit\plug-ins\helloWorldCmd\build\Releas
e\helloWorldCmd.mll
Building Custom Rule D:/Users/hoge/Documents/MayaDevkitBase/devkit/plug-ins/helloWorldCmd/CMakeLists.txt
CMake does not need to re-run because D:/Users/hoge/Documents/MayaDevkitBase/devkit/plug-ins/helloWorldCmd
/build/CMakeFiles/generate.stamp is up-to-date.

 

 

 

秀丸エディタの動的スニペット (Yet Another Hidemaru Snippet)を更新したよ v2.2.0

Markdownスニペット強化と変更を行いました。

機能強化したスニペット😘

imageとlinkは引数の並び順を覚えなくても使えるようにしました。(scrapboxの表記を参考にしました💖

image

f:id:ohtorii:20190628140234g:plain

link

f:id:ohtorii:20190628140112g:plain

 

 

動作変更したスニペット😅

table

 

f:id:ohtorii:20190628140544g:plain

テーブル生成後のカラム文字をa1~z9の文字列から空白文字へ変更しました。

a1~z9の文字を毎回削除していたので、それならと空白文字にしました。

 

ダウンロード

https://github.com/ohtorii/ya_hidemaru_snippet/releases/tag/v2.2.0

【秀丸エディタ】汎用キーバインディング変更ソフト「のどか」の設定をアップしたよ

 

はじめに

今更ですが・・・😑

汎用キーバインディング変更ソフト「のどか」の設定ファイルを10年以上放置していたので、以下の2つを整理して秀丸エディタのライブラリに公開しました。

強調表示について


強調表示を適用するとこんな感じの見た目になります。

f:id:ohtorii:20190609165033p:plain

solarized-lightは(https://github.com/Harurow/Hidemaru-Settings)を使わせて貰いました、作者に感謝😘😘😘

include/keymap/keymap2/windowの各命令は、設定ファイル全体の構造なのでアウトライン表示してみました。

 

ダウンロード

https://hide.maruo.co.jp/lib/hilight/nodoka_1_0.html

詳細

f:id:ohtorii:20190609164316p:plain

強調1~強調7まで利用しています。

 

強調は単語の重要度や利用頻度に応じてこのように割り当ててます。

強調1 重要度が高い、利用頻度が高い(真偽値など)

強調7 重要度が低い、利用頻度が低い(追加のオプションなど)

 

 

f:id:ohtorii:20190609164324p:plain

強調表示

 

f:id:ohtorii:20190609164324p:plain

 

辞書ファイルについて

真偽値、キー名、命令、オプションなどを含んだ辞書です。

 

辞書の内容(抜粋)

enable
disable

...
onLock0
Lock1
Lock2

...

window
keymap
keymap2

...

delay-of
sts4nodoka
cts4nodoka

if
else

endif
include

...
$WindowClassName
$WindowTitleName
$NodokaVal

 

ダウンロード

https://hide.maruo.co.jp/lib/compdic/nodoka_dic_1_0.html

設定方法

f:id:ohtorii:20190609170536p:plain

秀丸エディタの動的スニペット (Yet Another Hidemaru Snippet)を更新したよ v2.1.0

スニペットの一覧表示と引数入力を行うダイアログの改修を行いました。

  • ダイアログのタイトルにya_hidemaru_snippetのバージョン番号を表示するようにしました。
  • スニペット一覧ではファイル拡張子を表示しないようにしました。

New

f:id:ohtorii:20190527085331p:plain

Old

f:id:ohtorii:20190527085333p:plain

ダイアログに対する今後の予定

必要な機能や操作感は実装したつもりなので、今後はバグ修正のみを予定しています。

ダウンロード

Release 2019/05/26 ver2.1.0 · ohtorii/ya_hidemaru_snippet · GitHub