ズームモデルを並べて比較したい!

ズーム機能を使ってモデルを設計しているときに、ズーム間のエレメントの動きを確認したいことがありませんか?カムの動きをチェックするときなどです。

CODE V では通常のレンズの断面図を描画させると、ズーム位置ごとに別々のプロットで表示されます。ペンを元に戻す(RET)設定で重ね書きすることも可能ですが、全部のズーム位置が同じところで重なってしまい非常に見づらくなります。

では、
ズーム位置の違いによってモデルがどのように動くのかを確認する方法はないのでしょうか?
モデルを縦に並べて見ることはできないのでしょうか?
これが今回、攻略すべきポイントです。

こんなとき、ズーム位置を並べてプロットするマクロがあれば非常に便利です。
今回のようなマクロは比較的簡単に作れますので、今回はイチから作ってみましょう!

攻略のポイント!

  • どんな配置でモデルをプロットしたいですか?
  • その配置でプロットするとき、プロットのスケールはいくつが適切ですか?
  • マクロを実行するときに、どのパラメータを変更したいですか?
『作ってみましょう!』といっても、いきなりマクロを作り始めるのは敷居が高すぎます。
まずはどのようなプロットを目標にしたいかイメージしてください。どんなときでもそうですが、目標となるイメージをきちんと描いて、詳細を詰めることが大切です。
今回、目標とするプロットのイメージはこんな感じです。

ではこれと同じようなプロットをCODE V を使ってGUIで作りましょう!
CODE V でマクロを作るときにはまずCODE V 上で同じような処理を実行してみるのがポイントです。

CODE V を起動して、モデルを読み込みます。今回はズーム位置数5のモデルを読み込んでいます。

メニューから表示>レンズの描画を選択します。

タイトル/オフセットタブのペンを原点に戻す設定を右クリックしてズームを選択します。

このペンを原点に戻すにチェックを入れると、一枚のプロットにそのズーム位置のモデルの描画を蓄積するという働きがあります。このとき蓄積されたプロットは表示されません。一方チェックを外すと蓄積したプロットを表示します。そのために第5ズーム位置だけペンを原点に戻すのチェックを外します。

次にプロッタの単位で面位置指定をします。今回は像面を基準面として、その位置をズーム位置ごとにずらして指定していきます。

実は、プロットの座標は特に何の指定もしなければ左下を座標(0,0)、中央が座標(5,3.75)となっています。

この座標にあわせて、いい感じの配置になるように、各ズーム位置の像面の座標を決めました。

最後にプロットパラメータタブで描画モデルのサイズを全体スケールで調整しておきます。

このままOKを押します。すると像面基準でモデルが描画されました。

モデルによってはこんなにきれいな配置にならないかもしれません。そのときは基準となる像面のプロット上の座標位置やプロットのスケールを調節してください。

本来であれば、同じプロットを確認するには一連の作業を毎度毎度やらなければいけません。

この作業を自動的に実行するマクロを作ります。

ここからがCODE V でマクロを作成するときに便利なところです。
プロットが出来上がったら、コマンドウィンドウを見てください。


※クリックで拡大表示します。

今回行ったレンズの描画を実行しているコマンドはVIEからGOまでです。

左上のマイナスボタンを押してください。テキスト出力が折りたたまれて、実行するコマンドだけがリストされます。

このVIEからGOまでのコマンドをマクロにすればいいだけです。
作業フォルダにzoomvie.seqなど.SEQ拡張子でテキストファイルを作ってください。そして、このVIEからGOまでをコピー&ペーストしてください。

これで終わりです。

次回からはこのzoomvie.seqをCODE V で実行すれば、いちいち面倒な設定をせずとも同じ配置のプロットをいつでも描画できます。

zoomvie.seqを実行するためにはメニューのツール>マクロマネージャからマクロファイルの名前zoomvie.seqを指定するか、…ボタンからzoomvie.seqを選択して、実行ボタンを押してください。
毎回この作業が面倒に感じる方は“お気に入りに追加”か“ツールバーに指定”、“メニューバーに追加”をすれば、次回からは簡単にこのマクロにアクセスできます。もしくはコマンドウィンドウでIN zoomvie.seqを実行するだけです。

このマクロですが、使っているうちにちょっと物足りなくなってきませんか?
同じようなモデルをプロットするのであればいいですが、プロットしたいズーム位置数が5じゃなかったり、レンズのサイズが大きかったり小さかったりすると、このマクロはうまく実行されません。

だったら、ズーム位置数やサイズが変わっても対応できるように、このマクロをカスタマイズしてしまいましょう!

コピペしたzoomvie.seqマクロの中身はそれぞれ以下のような意味になります。


※クリックで拡大表示します。

詳しくはリファレンスマニュアルのレンズの描画(VIE)オプションの項目を確認してください。

まずは全体スケールを一括で変更できるように修正していきます。今のマクロのままだと全体スケールの変更は5箇所あります。これは面倒です。

同じ値を一括して管理するためには変数が使えます。変数とは数値や文字を入れておく箱です。この箱に値を入れて、コマンドで値を設定するときにこの箱の中身を見るように命令します。
CODE V で変数は頭に^をつけた名前をつけて定義します。全体スケールの値を入れておく変数の名前を^scaleとでもしておきます。この^scaleに0.8を入れておいて、すべてのズーム位置の全体スケールとして^scaleを指定すればいいのです。
修正すると以下のようになります。


※クリックで拡大表示します。

★印が修正したところです。
一番頭に^scale == 0.8と記述して変数^scaleに全体スケールの値0.8を入れるという指定を行っています。=がふたつ並んでいることに注意してください。
そして今まで0.8を指定していた全体スケールの値の位置に0.8の代わりに^scaleを指定しています。これで全てのズーム位置の全体スケールの値が^scaleに入っている値0.8になりました。
そのように動くかCODE V 上で確認してください。

ちゃんと動くマクロを作るためのコツは、ちょっとマクロを修正した段階でちゃんと意図したとおりに動くかどうか面倒がらずに確認することです。

ここで^scaleの中身を0.8から1.2にすると、一律に全体スケールの値が1.2となり、全てのズーム位置のモデルが大きく描画されるはずです。^scaleの値を1.2にすると、モデルの描画サイズが大きくなるかCODE V上で確認してください。

同様に左側にプロットするズーム位置(Z1〜Z3)の像面のXの位置を^left、右側(Z4、Z5)のXの位置を^rightに入れます。Yの位置は中央の位置3.75だけを^centerに入れます。プロットで上の描画(Z1、Z4)のYの位置は1.75=3.75-2、下の描画(Z3)は5.75=3.75+2ですので、(^center+2)、(^center-2)と足し算と引き算を使って指定しています。


※クリックで拡大表示します。

では、この修正でもちゃんと動くか確認してください。

プログラミングでは同じような処理が繰り返し行われている箇所は要チェックです。繰り返し処理はまとめることができます。まとめることによりマクロがシンプルになりますし、ちょっとした変更で大きな効果を生むことができます。

よくよく見てみると、上記のマクロの中にも繰り返し処理の箇所がありませんか?

今回はこの繰り返し処理を、プログラミングには良く使われるFORループを使って、まとめます。CODE V では下のように記述します。

FOR 変数名 初期値 最終値 像分量
        処理
END FOR

このように記述すると、変数名で指定した変数が初期値から最終値になるまでFORからEND FORに挟まれている処理を繰り返します。変数は像分量きざみで増えていきます。

では、このFORループを使って、全てのズーム位置に同じ^scaleを設定している全体スケールの処理(SF)をまとめてみましょう。


※クリックで拡大表示します。

修正した部分
FOR ^i 1 5 1
        SF Z^i ^scale
END FOR

SF Z1 ^scale
SF Z2 ^scale
SF Z3 ^scale
SF Z4 ^scale
SF Z5 ^scale
は全く同じ処理をしています。FORループの中の処理でズーム位置の指定がZ^iとなっていることに注意してください。これで全体スケールの処理がかなりシンプルになりました。
ではCODE V上でちゃんと動くか確認してください。

さらに同様にペンを元に戻す設定(RET)とプロッタの単位で面位置指定設定(OFS)をFORループで記述します。


※クリックで拡大表示します。

ペンを原点に戻す設定をしているのは第1ズーム位置から第4ズーム位置までなのでFOR ^i 1 4 1となっています。
プロッタの単位で面位置指定はちょっと複雑ので注意してください。たとえば左側のプロットの処理は第1ズーム位置から第3ズーム位置までなのでFOR ^i 1 3 1となっています。さらにYの位置の値が第1ズーム位置が(^scale-2)、第2ズーム位置が^scale、第3ズーム位置が(^scale+2)となるように、^iを利用して(^center-2*^i+4)となっています。右側のプロットのコマンドも同様です。
CODE V上でちゃんと動くか確認してください。

プロッタの単位で面位置設定(OFS)の処理が2つに分かれていて、ちょっとブサイクです。これらの処理を1つにまとめてFOR ^i 1 5 1と記述したほうがわかりやすく、後から修正も加えやすそうです。こんなとき使うのはIF文です。IF文とは条件分岐のときに使います。下のように書けば、IFに続く条件に当てはまるとき処理Aを、当てはまらないとき処理Bを実行します。

IF 条件
        処理A
ELS
        処理B
END IF

このIF文を使ってプロットの単位で面位置指定設定を記述すると以下のようになります。


※クリックで拡大表示します。

IF文をつかって^iが4未満のとき左側のプロットをするためのコマンドを、^iが4未満じゃないとき、つまり4以上のとき右側のプロットをするためのコマンドを実行するように条件分岐しています。これでFOR ^i 1 5 1と記述できました。 CODE V上でちゃんと動くか確認してください。

このマクロですが、ちょっと問題があります。
モデルのズーム数が5、像面が第7面でないとうまく断面図をプロットしません。これではモデルを変えたときにはまたイチからマクロを作らなければなりません。 非常に面倒です。

では、このマクロをもう少し汎用的にして、モデルが変わってもプロットできるように変更しましょう!
ゴールは、モデルのズーム数は1から6まで対応でき、面の数が何枚になっても断面図をプロットできるようにすることです。

ズーム位置数を入れる変数^zoomを用意して、ズーム位置数を設定している箇所全てに5の代わりに^zoomを指定します。このとき^zoomには(NUM Z)を入れます。(NUM Z)とはズーム位置数が入ったデータベースアイテムです。データベースアイテムとは現在のモデルが持つ情報を参照できる機能 です。


※クリックで拡大表示します。

この修正で何が変わったのかと言いますと、、、
ズーム位置数が変わってもプロットできるようになりました!データベースアイテムを利用することで自動的にズーム位置数をモデルから読み取って断面図をプロットするマクロとなりました。

ズーム位置数6の場合。

※クリックで拡大表示します。

ズーム位置数3の場合。

※クリックで拡大表示します。

ではさっそくCODE V上でちゃんと動くか確認してください。

次は面の枚数が何枚でも必ず像面を基準にして断面図を並べてプロットするような設定です。
現在はOFSコマンドに基準となる面がS7と指定してありますが、これをSIとしてください。ImageのIです。
これで像面が第何面に位置することになっても、必ずImage面、つまり像面がプロットの基準となります。


※クリックで拡大表示します。

CODE V上でちゃんと動くか確認してください。

これでもう立派なマクロが完成です!

zoomvieマクロの完成品を以下からダウンロードできますので、参考にしてください。

zoomvie.seq

このようにマクロを利用するとCODE Vにない機能を自分で作ることができます!
CODE Vでの設計や解析が今以上に便利で簡単、柔軟になります。
何か簡単な処理でかまいませんので、今回と同じ手順でいろいろなマクロを作ってみてください。

マクロプログラミングの中身に興味がある方は「機能別セミナー」をお勧めします。

例えば、こんな使い方できませんか?

ZOOMVIEマクロを応用すれば、下のようなことが出来ます。
  • プロットのスケールをウィンドウぴったりに自動的に調節してほしい!
  • 移動するレンズエレメントだけ色を変えてプロットしたい!
  • プロットに面間隔の情報を追記したい!
  • プロットにカムの動くラインを描きたい!
CODE V のマクロ機能を利用すれば、「こんなことできないかなぁ」がほとんど実現できます。
やりたいことはあるけれど、「プログラミングしている時間がない」とか、「プログラムはどうも苦手で・・・」という方は「光学分野エンジニアリングサービス」をご利用ください。

その他の記事