指定したディレクトリ内のすべてのサブディレクトリのパスを得る
真と偽
実数
ジョイントに設定されたキーポイントの数を得る


指定したディレクトリ内のすべてのサブディレクトリのパスを得る [していしたでぃれくとりないのすべてのさぶでぃれくとりのぱすをえる]

フォルダの中にサブフォルダがあって、その中のどこかにあるファイルを
探したいというような場合に使えるかもしれません。

proc inspect_directry {path} {
    global path_list

    proc subfolders {path} {
        global path_list

        if {[file exists $path] == 1 && [file owned $path] == 1} {
            if [catch {
                cd $path
            } er_msg] {
                show_message_box $er_msg
            }
        } else {
            show_message_box "$pathが存在しません。" cancel 0
            return
        }
        set file_list [glob -nocomplain *]
        set subfolder_list {}
        foreach file_name $file_list {
            if {[file isdirectory $file_name]} {
                lappend subfolder_list [file join $path $file_name]
            }
        }
        foreach subfolder $subfolder_list {
            lappend path_list $subfolder
            #message $subfolder
            subfolders [file join [pwd] $subfolder];    #再帰的に呼び出し
        }
    }
    set current_path [pwd]
    set path_list {}
    subfolders $path
    cd $current_path
    return $path_list
}

# 以下は呼び出しの例 現在のディレクトリ内のサブフォルダを調べる場合
inspect_directry [pwd]
2003.6.12(木) 18:42:14[編集]



真と偽 [しんとぎ]

if 文や while 文では、条件式が真か偽かによって、処理を分岐します。また、実行されたときに真や偽の値を返すコマンドもあります。Tcl の場合、真は 1、偽は 0 となります。普通、正しければ真、正しくなければ偽と考えていいと思います。条件式は

3 > 1 は真、つまり 1
20 < -5 は偽、つまり 0
(20 < -5) == 0 は、括弧の中が 0 なので、左右が等しく、真、つまり 1

のように評価されます。

expr 3 > 1

のような文を実行してみると確認できると思います。if {3 > 1} のように、条件式として使われる場合は、expr を使ったときと同じように真偽が評価されるようです。

真か偽の値を返すときは、 1 か 0 ですが、条件式に入れる真の値は、1以外でもいいようです。

set ex 2
if {$ex} {
    message "$exは真"
}
というスクリプトで、ex をいろいろ変えてやってみると、

200 -10 0.5 03 などは真。0 0.0 などは偽ということになるようです。要は、0 以外の数値はすべて真ということだと思います。

また、abc テスト などの文字列にすると、エラーになります。
2003.6.11(水) 16:39:11[編集]



実数 [じっすう]

.(小数点)のついた数値です。
整数より広い範囲の値を扱えます。

整数実数にするには、

set inte 10
set rea [expr 1. * $inte]

のように、実数との計算をおこなうか、

set inte 10
set rea [expr double($inte)]

のように、double を使います。

実数で扱える範囲は12桁までで、それを超えると

1e+012

のように、べき乗表示になります。
2003.7.2(水) 21:48:19[編集]



ジョイントに設定されたキーポイントの数を得る [じょいんとにせっていされたきーぽいんとのかずをえる]

ジョイントに設定されたキーポイントの数を得るプロパティがないようなので、書いてみました。

選択しているのがジョイントでない場合は -1 を返します。

proc number_of_key_points {} {

    global object_type part_type key_point_number

    if {!($object_type == 2 && ($part_type != 0 && $part_type != 1))} {
        return -1;    #ジョイントでない場合は-1を返す
    }

    if [catch {;    #念のため
        set ckn $key_point_number
    }] {
        return -1;    #ジョイントでない場合は-1を返す
    }
    set KPN -1
    set i -1
    while {$KPN == $i} {
        incr KPN
        set key_point_number $KPN
        set i $key_point_number
    }
    set key_point_number $ckn
    return $KPN
}

# 呼び出し例
number_of_key_points
2003.6.12(木) 19:26:55[編集]


Sakura Dictionary Ver. 1.09a
Scripted by UTANO Lime
(c)Pastel Carrot 1999-
All rights Reserved.