データタイプの変換
ここではデータタイプの変換について説明します。文字列ではない一文字の文字型の取り扱いは、AutoLISP では整数として取り扱うため整数に含めました。また角度は実態はラジアン単位の実数ですが、度やラジアンといった単位を考慮した変換関数が用意されていますので、ここでは区別して説明します。以降の関数の引数に、誤ったデータタイプを与えると原則はエラーが発生します。
下の図はデータタイプの変換に係わる関数の対応を図にしたものです。
![convert functions](img/convert.png)
また、文字列から AutoLISP の様々なデータタイプに変換を行える read 関数があります。read 関数は文字列をシンボル名に変換することもできます。またシンボル名は、別の関数で文字列に変換できます。
![read function](img/read.png)
整数
AutoLISP関数 |
---|
(chr integer) |
integer:整数 |
ASCII 文字コードに対応する整数を1 文字の文字列に変換します。 |
戻り値:文字列 |
chr 関数は、ASCII 文字コードに対応する十進数表記の整数を1 文字の文字列に変換します。
_$ (chr 65)⏎
"A"
逆の働きは、ascii 関数を参照してください。
AutoLISP関数 |
---|
(itoa integer) |
integer:整数 |
整数を文字列に変換して返します。 |
戻り値:文字列 |
itoa 関数は、整数を文字列に変換して返します。
_$ (itoa 100)⏎
"100"
逆の働きは、atoi 関数を参照してください。
AutoLISP関数 |
---|
(float number) |
number:整数、または実数 |
数値を実数に変換して返します。 |
戻り値:実数 |
float 関数は、整数を実数に変換して返します。実数が与えられると、そのまま返します。
_$ (float 100)⏎
100.0
_$ (float 55.5)⏎
55.5
逆の働きは、fix 関数を参照してください。
ACETUTIL関数 |
---|
(acet-calc-bitlist number) |
number:整数 |
整数を2の乗数の整数に分解します。 |
戻り値:リスト |
acet-calc-bitlist 関数は、整数を2の乗数、具体的には 1,2,4,8,16,32... といった整数に分解します。
戻り値は、分解された整数を含んだリストが返ります。
AutoCAD では、様々なケースでプロパティを 2 の乗数の和で表します。プロパティの和を取るのは (+ 2 16 32) と読みやすさに問題はありませんが、逆の場合に例えば 50 というプロパティがどういう内容になっているか、判りにくいものです。acet-calc-bitlist 関数は、これをサポートします。どちらかというと、デバッグの段階で使うことになるでしょう。
_$ (acet-calc-bitlist 50)⏎
(2 16 32)
実数
AutoLISP関数 |
---|
(fix number) |
number:整数、または実数 |
数値を整数に変換して返します。 |
戻り値:整数 |
fix 関数は、実数の小数点以下を切り捨てて整数に変換して返します。負数の場合は 0 に向かって切り捨てられます。整数が与えられると、そのまま返します。
_$ (fix 100)⏎
100
_$ (fix 1.6)⏎
1
_$ (fix -1.6)⏎
-1
逆の働きは、float 関数を参照してください。
誤差
fix関数を使う場合は、誤差によってプログラムが思い通りの動作をしない場合があるので注意してください。
例えば、P1点からP2点の距離(実数)を距離1で等分したいとします。実際の計算誤差はもっと小さいのですが、例として誤差が±0.1あるとします。この場合、距離が10.5とか10.0、あるいは9.6などといった場合は、10の区間に分けられる、9の区間に分けられると正しく判別できます。しかし9.9の場合は、本来は10の区間に分けられるはずだったかもしれません。実数を扱っている場合は、常に誤差を念頭においてください。
AutoLISP関数 |
---|
(rtos number [mode [precision]]) |
number:整数、または実数 mode:整数 precision:整数 |
数値を文字列に変換します。 |
戻り値:文字列 |
rtos 関数は、数値を文字列に変換します。
number 引数には、変換する数値を指定します。
mode 引数には、数値文字列の表記の種類を指定します。通常は2 の十進表記を用います。
mode 引数 | 説明 | 12.3456 の変換例 |
---|---|---|
1 | 指数表記 | "1.23E+01" |
2 | 十進表記 | "12.35" |
3 | 工業図面表記(フィートと小数インチ) | "1'-0.35¥"" |
4 | 建築図面表記(フィートと分数インチ) | "1'-0 1/4¥"" |
5 | 分数表記 | "12 1/4" |
precision 引数には、文字列変換後の数値の有効桁数を指定します。
12.3456 の変換例 | precision=2 | precision=3 |
---|---|---|
指数表記 | "1.23E+01" | "1.235E+01" |
十進表記 | "12.35" | "12.346" |
工業図面表記(フィートと小数インチ) | "1'-0.35¥"" | "1'-0.346¥"" |
建築図面表記(フィートと分数インチ) | "1'-0 1/4¥"" | "1'-0 3/8¥"" |
分数表記 | "12 1/4" | "12 3/8" |
mode 引数や precision 引数が省略された場合は、それぞれシステム変数の LUNITS と LUPREC の値が適用されます。
小数点以下で0 を省略するか等はシステム変数 DIMZIN によります。
十進表記の場合、システム変数 DIMZIN が 8 または 12 の時で、可能な場合は小数点以下の0が省略されます。下に例を示します。
_$ (rtos 12.3006 2 2) ⏎
"12.3"
_$ (rtos 12.3006 2 3) ⏎
"12.301"
十進表記の場合、システム変数DIMZIN が0 から4 の場合は、小数点以下の0 は省略されません。下に例を示します。
_$ (rtos 12.3006 2 2) ⏎
"12.30"
_$ (rtos 12.3006 2 3) ⏎
"12.301"
逆の働きは、atof 関数かdistof 関数を参照してください。
数値と角度の表記に関わるシステム変数
単位と精度に関するシステム変数には、表示に係るものと寸法オブジェクトに係るものがあります。寸法オブジェクトに関わるものは、先頭にDIM の接頭辞がついています。そこからさらに、一般の数値に係るものと角度に係るものに分かれます。混乱しないようにしてください。
表示に係るもの | 寸法オブジェクトに係るもの | ||
---|---|---|---|
一般的な数値 | 単位系 | LUNITS | DIMLUNIT |
精度 | LUPREC | DIMDEC | |
0 の省略 | DIMZIN | ||
角度 | 単位系 | AUNITS | DIMAUNIT |
精度 | AUPREC | DIMADEC | |
0 の省略 | DIMAZIN |
寸法オブジェクトに係るものでは、通常は"."(ピリオド)である小数点の文字をシステム変数 DIMDSEP で指定できます。
また、単位系が分数表記、フィート - インチ表記、測量用角度の場合、システム変数 UNITMODE が表示に影響します。
ACETUTIL関数 |
---|
(acet-calc-round number precision) |
number:実数 precision:実数 |
実数を四捨五入します。 |
戻り値:実数 |
acet-calc-round 関数は、数値を四捨五入します。
number 引数には、丸める数値を指定します。
precision 引数には、丸める桁数を指定する実数を指定しますが、指定の仕方は、小数点以下第1位の場合は 0.1 を、小数点以下第3位の場合は 0.001 というように指定します。なお、1 を使用してください。0.002 など 1 以外を使用すると、正しく四捨五入されません。
戻り値は、四捨五入された実数が返ります。
_$ (acet-calc-round 10.3456 0.1)⏎
10.3
_$ (acet-calc-round 10.3456 0.001)⏎
10.346
角度
AutoLISP関数 |
---|
(angtos angle [unit [precision]]) |
angle:整数、または実数 unit:整数 precision:整数 |
ラジアン単位の数値を文字列に変換します。 |
戻り値:文字列 |
angtos 関数は、ラジアン単位の角度の値を文字列に変換します。元のラジアンの値がどうであれ、変換されるラジアンの値は 0 以上 2π 未満の範囲に収まるように解釈されたうえで文字列に変換されます。
angle 引数には、変換するラジアン単位の角度を表す数値を指定します。
_$ (angtos PI)⏎
"180.00"
unit 引数は、与える文字列が採用している単位を指定します。
unit 引数 | 説明 | PI の変換例 |
---|---|---|
0 | 十進数(度) | "180.00" |
1 | 度/分/秒 | "180d0'" |
2 | グラード | "200.00g" |
3 | ラジアン | "3.14r" |
4 | 測量用単位 | "W"(West) |
グラード
グラード(grade)は、ゴン(gon)、グレード(grade)、さらにグラディアン(gradian)とも呼ばれる角度の単位です。1 グラードは、90 度の100 分の1 を表します。
precision 引数には、文字列変換後の数値の有効桁数を指定します。
PI/3 の変換例 | precision=2 | precision=3 |
---|---|---|
十進数(度) | "60.00" | "60.000" |
度/分/秒 | "60d0'" | "60d0'0¥"" |
グラード | "66.67g" | "66.667g" |
ラジアン | "1.05r" | "1.047r" |
測量用単位 | "N 30d0' E" | "N 30d0'0¥" E" |
unit 引数や precision 引数が省略された場合は、それぞれシステム変数の AUNITS と AUPREC の値が適用されます。
小数点以下で 0 を省略するか等は、一般の数値と同じシステム変数 DIMZIN が影響します。よく似たシステム変数 DIMAZIN が存在しますが、こちらは角度寸法オブジェクトにのみ作用します。
逆の働きは、angtof 関数を参照してください。