| 内容 | サイズ(Bytes) |
|---|---|
| 実行ファイル | 232,665 |
| Delphiソースファイル | 22,771 |
|
|
![]() |
|
「雲描き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'とか何とか)を自前で生成・検証する機能を搭載しました。 そのため、ツール登録で引数を指定する必要がありません。 |