図脳RAPID用:雲描き Cloud9 for RAPID

ver.1.0(2005.03.28)ダウンロード
内容 サイズ(Bytes)
実行ファイル 232,665
Delphiソースファイル 22,771

「雲描きCloud9 for RAPID」は、指定点を通過する雲形図形を作図するプログラムです。
注意を喚起する目的で、変更箇所などを囲む用途を想定しています

動作状況

「雲描きCloud9 for 図脳RAPID」は、指定点を通過する雲形図形を作図するプログラムです。
注意を喚起する目的で、変更箇所などを囲む用途を想定しています。

RAPID版への着手は、Jw_cad版のプログラムを書いた直後だったので、
ちょこちょこっと書き換えれば楽勝だな、と踏んでいました。
事実その通りで、構文チェックもあっさりクリア、あっと言う間にテストを迎えました。
アルゴリズムはJw_cad版でテストを重ねて自信があるし、と思っていたのですが、
罠は意外なところに潜んでいました。

なんと指示点の入力が上手く行かないのです。
正確には、上手く行ったり行かなかったり(これが一番始末が悪い・・・)で、
これでは他人様に使ってもらうどころか、自分で使う気にもなりません。
雲の描画には(多分)問題が無いだけに、頭を抱えてしまいました。
該当する部分を書き出してみましょう。

TPointRec = record
    x:double;
    y:double;
end;

var
    SnapPoint:TPointRec;

while True do
begin
    Doc.ClearCursorPoint;
    case Doc.GetCursorPoint(SnapPoint.x,SnapPoint.y,1) of    //カーソル位置取得
        1:    //座標をリストに追加し、仮点をつける
        begin
            UseSettings.DirectedPoints.Add(SetZahyo(SnapPoint));
            Doc.AddPointMark(2,SnapPoint.x,SnapPoint.y);
        end;
        2:Break;    //右クリックで終了
    end;
end;
Doc.CancelCursorPoint;


どこが悪いんだろうと、しばらく睨めっこしていたのですが、
大きな勘違いに気付いたのは深夜、布団に入る直前の事。
とりあえず「Getを切り離す」とだけメモっておき、数日後それを元に書き直したのが・・・。

var
    iPoint:Integer;

while True do
begin
    Doc.ClearCursorPoint;
    repeat    //カーソル位置取得
        iPoint := Doc.GetCursorPoint(SnapPoint.x,SnapPoint.y,1);
    until iPoint > 0;
    case iPoint of
        1:    //座標をリストに追加し、仮点をつける
        begin
            UseSettings.DirectedPoints.Add(SetZahyo(SnapPoint));
            Doc.AddPointMark(2,SnapPoint.x,SnapPoint.y);
        end;
        2:Break;     //右クリックで終了
    end;
end;
Doc.CancelCursorPoint;


座標入力の待ち受け状態(repeat〜untilループ)を、独立して作っておく必要があったんですね。
最初の書き方では、上手くタイミングが合わないとGetCursorPointに捕まえてもらえないわけです。
これで目立つバグは無くなり、ホッとしました。

それから、このプログラムでは試験的に、
RAPIDのレジストリ文字列('zwRapid7Pro'とか何とか)を自前で生成・検証する機能を搭載しました。
そのため、ツール登録で引数を指定する必要がありません。

図脳RAPID用プログラム目次へ

Tails of CAD! トップページへ