Skip to main content
Solved

ZPLで面やオブジェクトの番号を参照するには、どのような方法がありますか?

  • July 26, 2021
  • 1 reply
  • 106 views

Yihua Hsiao
Zemax Staff
Forum|alt.badge.img+1

面やオブジェクトを挿入したり削除したりして番号が変わっても、マクロが機能するように、ZPLで面やオブジェクトを参照するにはどのような方法がありますか?

Best answer by Yihua Hsiao

 

a = THIC(10)

b = RADI(11)

 

この場合、変数'a'には10の厚さの値が、'b'には次のの曲率半径の値が割り当てられています。しかし、10の前にを追加または削除した場合はどうでしょうか。エディタ内の番号が更新され、新しい10は望んだものではありません。解決策の1つは、マクロを実行するたびに質問することです。

 

INPUT "What surface do you want to use", 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(A$) 関数を使うことです。

 

my_surface = SURC("target")

a = THIC(my_surface)

b = RADI(my_surface + 1)

 

SURC(A$) は、コメント文字列が A$ と同じである最初のを見つけ、その番号を返します。(ノンシーケンシャルコンポーネントエディタでは、代わりに OBJC() を使用してください)

 

my_object = OBJC("target")

 

このシンプルな構造により、マクロが常に意図した面やオブジェクトを見つけることができます。「target」文字列がコメントとして設定されている面やオブジェクトがない場合、関数は値-1を返すことに注意してください。 -1にならないように、例えば下記のテストを簡単に追加することができます。

 

my_object  = OBJC("target")

IF (my_object == -1)

PRINT "Target object not found"

END

ENDIF

 

View original
Did this topic help you find an answer to your question?

1 reply

Yihua Hsiao
Zemax Staff
Forum|alt.badge.img+1
  • Author
  • Zemax Staff
  • 65 replies
  • Answer
  • July 26, 2021

 

a = THIC(10)

b = RADI(11)

 

この場合、変数'a'には10の厚さの値が、'b'には次のの曲率半径の値が割り当てられています。しかし、10の前にを追加または削除した場合はどうでしょうか。エディタ内の番号が更新され、新しい10は望んだものではありません。解決策の1つは、マクロを実行するたびに質問することです。

 

INPUT "What surface do you want to use", 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(A$) 関数を使うことです。

 

my_surface = SURC("target")

a = THIC(my_surface)

b = RADI(my_surface + 1)

 

SURC(A$) は、コメント文字列が A$ と同じである最初のを見つけ、その番号を返します。(ノンシーケンシャルコンポーネントエディタでは、代わりに OBJC() を使用してください)

 

my_object = OBJC("target")

 

このシンプルな構造により、マクロが常に意図した面やオブジェクトを見つけることができます。「target」文字列がコメントとして設定されている面やオブジェクトがない場合、関数は値-1を返すことに注意してください。 -1にならないように、例えば下記のテストを簡単に追加することができます。

 

my_object  = OBJC("target")

IF (my_object == -1)

PRINT "Target object not found"

END

ENDIF

 


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings