ログイン    検索  

掲示板トップ » はじめてのZEMAX » よくある質問




新しいトピックを投稿する トピックへ返信する  [ 1 件の記事 ] 
作成者 メッセージ
 記事の件名: ZPL において面や物体を参照する最善の方法は何でしょうか?
 投稿記事 Posted: 2009年2月09日(月) 16:57 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<面や物体の参照>

質問 : 面や物体を挿入または削除した場合や、ナンバリングを変更した場合にもマクロが機能するように、ZPL において面や物体を参照する最善の方法は何でしょうか。

多くのマクロは小規模で簡単なものであり、そのような場合は次のようなコードでも問題ありません。

a = THIC(10)
b = RADI(11)

この例では、変数 a に面 10 の厚みの値を、変数 b に次の面の曲率半径の値を割り当てています。
しかし、もし面 10 の前に面を追加または削除した場合はどうなるでしょうか。
エディタのナンバリングが更新され、新しい面 10 は想定しているのとは別の面になってしまいます。
解決策の 1 つに、マクロを実行するたびに次のように入力を求める方法があります。

INPUT "使用する面を入力してください", my_surface
a = THIC(my_surface)
b = RADI(my_surface + 1)
しかし、面のナンバリングを変更せずに何回もマクロを実行する場合、これでは面倒なものとなってしまいます。別の解決策として、次のように変数を使用する方法があります。

my_surface = 10
a = THIC(my_surface)
b = RADI(my_surface + 1)

面が変更されても、マクロで編集しなければならないのは 1 行だけです。しかし、これも少々面倒です。

最良の方法は、たとえば "target" のような唯一のコメントを面に設定し、SURC( ) 関数を使用することです。

my_surface = SURC("target")
a = THIC(my_surface)
b = RADI(my_surface + 1)

SURC(A$) は、コメント文字列が「A$」と一致する最初の面を検索し、その面の番号を返します。
Non-Sequential Component Editor では、代わりに OBJC( ) を使用します。

my_object = OBJC("target")

この簡単な方法によって、マクロは常に目的の面または物体を見つけることができます。
対象文字列と同じコメントが設定されている面や物体がない場合、関数は値 -1 を返すことに注意してください。
これは、次のような簡単なコードでチェックすることができます。

my_object = OBJC("target")
IF (my_object == -1)
PRINT "Target object not found"
END
ENDIF


トップへ 
   
 
期間内表示:  ソート  
 
新しいトピックを投稿する トピックへ返信する  [ 1 件の記事 ] 

掲示板トップ » はじめてのZEMAX » よくある質問


 
トピック投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
cron