スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    EasyRuler久々のぷち更新

    久々ですが,補助線ツールをちょっとだけ更新しました.

    追加した機能は,表示している視円錐をカメラの水平画角とみなして,35mm判でのレンズの焦点距離を表示する・・・だけのぷち更新です.ER_SETUMEI

    最近デジカメを購入したので,焦点距離だとどれくらいになるのかなぁ,とか思ったので,せっかくなので表示させてみました.補助線で表示している青い円に相当する視円錐の角度をカメラの水平画角として計算しています(数値が明らかに変だという場合は指摘していただけると助かります).

    焦点距離55mm辺りがヒトの目の画角に近いらしいので,そこを基準に視円錐を設定するといいかもしれません.


    ツール,4ヶ月間もほったらかしでしたね…細いバグはあるのですが,とりあえず自分でぼちぼち使っている分には大体満足なのでついつい更新をサボってしまいます.

    ちなみに今自分で欲しいと思っている機能は,集中線と同心円のスナップ機能でしょうか・・・
    スポンサーサイト

    LNK2028 未解決のトークン

    仕事でちょっと引っかかったことがあったのでメモ.

    VC6で作成されたプログラムの機能をC#(.Net3.5)で使おうとしていたとき,VC6のライブラリに対してC++/CLIで書いたソースから静的リンクを張り,C#のソースから利用するためのラッパを書いていた(C#のコードからVCで作られた静的リンクのライブラリを直接呼べないため).

    VCライブラリ(既存品) : A.lib
    ↑静的リンク
    C++/CLIラッパライブラリ(新規) : B.dll
    ↑.Net参照
    C#のコード

    ここでB.dllをコンパイルすると「LNK2028:未解決のトークン」のエラーが発生してしまった.このエラーは,ちゃんとリンクができていない場合に発生する(場合がほぼ99%でしょう.それ以外の状況で発生したのを見たことがないので)ものなのだけど,何度設定を確認しても正しくラッパライブラリ→VCライブラリのリンクの設定は正しい.コンパイルも通るので単純な記述ミスもない.そもそも,同じライブラリ中のすべての関数に対してエラーが出ているのではなく,一部の関数だけがエラーになっている.以前同じようにラッパを書いたときには遭遇しなかったエラーで途方に暮れてしまった.

    ここでウンウン悩んでふと未解決のトークンとして表示されているシンボルに共通点があることに気づく.

    すべての関数の引数に,CString,正確にはATL::CStringTが含まれている.ここでようやくピンときた..Net以前のMFCのCStringはまさにそのものだったのだけど,.Net時代になり,unicode対応やらでブツが変わってしまっている.要は素直に書いたコードそのもののCStringが使われるのではなく,リンク時にはプロジェクトのオプションによってCStringの兄弟と入れ替わっている場合がある.

    私の状況の場合,A.libは文字セットに「マルチバイトセットを利用する」,B.dllは「Unicode文字セットを利用する」となっていて,A.libのCStringを引数にとる関数をコールしているのに,リンク時にはATL::CStringTを引数にとる関数を探していたためにブツが見つからず,エラーと相成っていた.

    B.dllの設定をA.libとあわせることで問題解決(少なくともリンクに関しては).文字コードに関しては・・・正直ちょっとこの辺の知識弱いので心配だけど,とりあえずちゃんと動いているし,ランタイムは賢い(?)ので慎重にいけば大丈夫かも.

    何時間潰したんだろうとちょっと鬱...

    ショートカット機能改良

    ちょっと間があいてしまいましたが,前回ショートカット機能を仮に実装した補助線ツールに,ショートカットキーの割り当て機能を実装しました.

    設定画面は,コントロールフォームのメニューの[オプション]→[ショートカットキー設定]から表示される以下の画面で行います.

    setting_form

    ショートカットの装飾キーはシフトキーとコントロールキーの組み合わせが使用できます.キーボードの左右のキーをそれぞれ選択できるのでお好みで(左Shift+右Ctrlのような変態的な組み合わせもできます).この装飾キーと,通常キーとファンクションキーのいずれかと組み合わせることができます.

    ショートカット設定の注意点ですが,ここで設定したショートカットは,他のアプリケーションで使用されているショートカットである場合でもそのアプリケーションへ届かなくなります.例えば,Ctrl+Cをショートカットとして設定した場合,すべてのアプリケーションでコピーのショートカットが効かなくなります.なるべく他のアプリケーションで使用されていないキーの組み合わせから設定するようにするのが吉です.

    VistaとWindows7の場合,管理者モードで起動しないと設定を保存できないかもしれないので注意してください.

    今回もドキュメントの更新はしていません….あと,なんとなくバージョンを1.0にあげてみました.気持ちの問題ですが...

    個人的には,装飾キーなしの”^”,”¥”あたりに割り当てるといい感じかもとか思っています.

    ショートカットキー機能つけてみました

    補助線ツールに簡易ショートカットキーの機能をつけてみました.

    できるようにしたのは以下の機能です.
    • Ctrl+F1:EasyRulerのウィンドウを最前面に表示
    • Ctrl+F2:グリッドにスナップ
    • Ctrl+F3:消失点方向にスナップ
    できるだけ他のツールに干渉しないショートカットの割り当てってどんなのだろうとなんとなく考えたりしましたが,よくわからないのでとりあえずCtrl+ファンクションキーにしてみましたが,これはこれで非常に押しづらいです・・・

    使うときはキーボードを少し斜めに置くなどするとか・・・まぁ,そのうちショートカットキーの割り当てを設定できるようにします・・・

    キーを押すことで機能の有効無効をトグルすることができます.

    スナップ機能のバグフィックス

    先日リリースしたスナップ機能ですが,実装漏れがありました(汗).

    消失点が無限遠点にある場合,具体的には二つの消失点が無限遠点にある一点透視図の場合と,ひとつの消失点が無限遠点にある二点透視図の場合のスナップ機能が実装されていませんでした.

    一点透視図は以下の場合です(二つの消失点が無限遠点にあるということは,ひとつの消失点が視心と一致するということになります).
    100126_01

    二点透視図は以下の場合です(ひとつの消失点が無限遠点にあるということは,残りの二つの消失点を結ぶ水平線が視心を通るということになります).
    100126_02

    実際には普通にオブジェクトをグリグリといじるとほとんど三点透視図になってしまうので実害は少なかったかもしれませんが・・・
    プロフィール

    eikun

    Author:eikun
    なかなかやるきがでない人です

    えいくんち

    twitter

    pixiv

    最新記事
    最新コメント
    最新トラックバック
    月別アーカイブ
    カテゴリ
    検索フォーム
    RSSリンクの表示
    リンク
    ブロとも申請フォーム

    この人とブロともになる

    QRコード
    QR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。