出力または文字データで使用するために、数値を文字列値に変換することができます。
次の関数を使用して、実数と角度値を文字列に変換したり、この逆の変換を行うことができます。
rtos 関数は、実数値を文字列に変換します。結果の文字列の書式は、この関数の引数を使用して指定できます。引数を使用しない場合は、AutoCAD のシステム変数 LUNITS と LUPREC で指定することができます。結果の文字列の先頭と末尾に 0 (ゼロ)を書き込むかどうかは、AutoCAD のシステム変数 DIMZIN でコントロールします。
次のコード例では、rtos の使用方法と、返される値を示します(AutoCAD のシステム変数 DIMZIN は 0 と仮定)。精度(rtos への 3 番目の引数)は、最初の呼び出しでは 4 桁に設定され、それ以外では 2 桁に設定しています。
(setq x 17.5) (setq str "\nValue formatted as ") (setq fmtval (rtos x 1 4)) ; Mode 1 = scientific (princ (strcat str fmtval)) Value formatted as 1.7500E+01 (setq fmtval (rtos x 2 2)) ; Mode 2 = decimal (princ (strcat str fmtval)) Value formatted as 17.50 (setq fmtval (rtos x 3 2)) ; Mode 3 = engineering (princ (strcat str fmtval)) Value formatted as 1'-5.50" (setq fmtval (rtos x 4 2)) ; Mode 4 = architectural (princ (strcat str fmtval)) Value formatted as 1'-5 1/2" (setq fmtval (rtos x 5 2)) ; Mode 5 = fractional (princ (strcat str fmtval)) Value formatted as 17 ½
AutoCAD のシステム変数 UNITMODE が 1 に設定されている場合、単位は入力したとおりに表示されます。rtos によって返される文字列の単位は、工業図面表記(モード = 3)、建築図面表記(モード = 4)、分数表記(モード = 5)によって異なります。たとえば、上記のサンプル出力の上の 2 つは同じになりますが、下の 3 つは次のようになります。
Value formatted as 1'5.50" Value formatted as 1'5-1/2" Value formatted as 17-1/2''
distof 関数(距離を浮動小数点に変換)は rtos と反対の働きをします。次の呼び出しは、すべて同じ値 17.5 を返します。(モード 3 と 4 で円記号(¥)を使用している点に注意してください)。
(distof "1.7500E+01" 1) ; Mode 1 = scientific (distof "17.50" 2) ; Mode 2 = decimal (distof "1'-5.50\"" 3) ; Mode 3 = engineering (distof "1'-5 1/2\"" 4) ; Mode 4 = architectural (distof "17 1/2" 5) ; Mode 5 = fractional
フィートとインチで距離を指定する文字列の場合は、文字列の終わりと解釈されないように、クォーテーションの前に円記号( ¥" )を付ける必要があります。distof 関数の前述の例でこれを示しています。
angtos 関数は、角度値を文字列に変換します。結果の文字列の書式は、この関数の引数を使用して指定できます。引数を使用しない場合は、AutoCAD のシステム変数 AUPREC と LUPREC で指定することができます。結果の文字列の先頭と末尾に 0 (ゼロ)を書き込むかどうかは、AutoCAD のシステム変数 DIMZIN でコントロールします。
angtos 関数は AutoCAD のシステム変数 ANGBASE の影響を受けるため、次のコード例は必ず "0" を返します。
(angtos (getvar "angbase"))
AutoLISP には、真のゼロ(東)からの ANGBASE の回転量や任意の角度(ラジアン)を文字列形式(現在のモード/精度を反映)で返す関数はありません。
AutoCAD のゼロ(東)からの ANGBASE の回転量を取得したり、任意の角度の大きさを取得する方法は、次のいずれかの操作を行うことで見つけることができます。
360 度(2π ラジアンまたは 400 グラジエント)から (atof (angtos 0)) の結果を引くことによっても、0(ゼロ)からの ANGBASE の回転量が得られます。
次のコード例では、angtos 関数の使用方法と、返される値を示します(ここでもシステム変数 DIMZIN は 0 と仮定)。精度(angtos への 3 番目の引数)は、最初の呼び出しでは 0(ゼロ)桁、次の 3 つの呼び出しでは 4 桁、そして最後の呼び出しでは 2 桁に設定されています。
(setq ang 3.14159 str2 "\nAngle formatted as ") (setq fmtval (angtos ang 0 0)) ; Mode 0 = degrees (princ (strcat str2 fmtval)) Angle formatted as 180 (setq fmtval (angtos ang 1 4)) ; Mode 1 = deg/min/sec (princ (strcat str2 fmtval)) Angle formatted as 180d0'0" (setq fmtval (angtos ang 2 4)) ; Mode 2 = grads (princ (strcat str2 fmtval)) ; displays Angle formatted as 200.0000g (setq fmtval (angtos ang 3 4)) ; Mode 3 = radians (princ (strcat str2 fmtval)) Angle formatted as 3.1416r (setq fmtval (angtos ang 4 2)) ; Mode 4 = surveyor's (princ (strcat str2 fmtval)) Angle formatted as W
システム変数 UNITMODE は、angtos が測量用単位(モード = 4)の文字列を返すとき、この文字列にも影響します。UNITMODE が 0(ゼロ)の場合、返される文字列に空白が入ることがあります(たとえば "N 45d E")。UNITMODE が 1 の場合、文字列に空白は含まれません(たとえば "N45dE")。
angtof は angtos と反対の働きをする関数なので、次の呼び出しはすべて同じ値、3.14159 を返します。
(angtof "180" 0) ; Mode 0 = degrees (angtof "180d0'0\"" 1) ; Mode 1 = deg/min/sec (angtof "200.0000g" 2) ; Mode 2 = grads (angtof "3.14159r" 3) ; Mode 3 = radians (angtof "W" 4) ; Mode 4 = surveyor's
度、分、秒単位で角度を指定する文字列の場合は、文字列の終わりと解釈されないようにクォーテーション マークの前に円記号を付けてる必要があります( ¥" )。angtof 関数の前述の例でこの操作を示しています。