


 
 
 
 
 
 
 |
前節の続きです。
前回のプログラムから、メインフォームのNameプロパティを「Form1」から「FmMain」に、「Unit0043va.pas」を「UnitGVar.pas」に変更しています。以降「UnitGraph.pas」の全要素表示部(GL_ALLDAT手続き)を変えて行きます。
全要素を表示するのに、以前は単純に、登録順序ごとに表示させていました。(Dat_N:登録要素数)
for i:=0 to Dat_N-1 do begin
データiの要素を表示
end; |
これをレイヤ順に表示するには、まず、1番目のレイヤ・2番目のレイヤ・・・とループさせた内部で、各データのレイヤ番号を見て、それが該当のレイヤであれば表示する、とする必要があります。(LayTblN:レイヤ設定のレイヤ数)
for k:=0 to LayTblN-1 do begin
for i:=0 to Dat_N-1 do begin
if (LayTbl[k].no = Dat[i].lay) then begin
データiの要素を表示
end;
end;
end; |
但し、線の重なり具合が分かりにくいと思いますので、試しに、線幅を10dotにして表示してみました。レイヤ設定で幾つかレイヤを作り、並びを色々変えたりしてみて下さい。
なお、少しでも速く表示させるため、
for k:=0 to LayTblN-1 do begin
if (LayTbl[k].cnt = 0) then continue;
for i:=0 to Dat_N-1 do begin
if (LayTbl[k].no = Dat[i].lay) then begin
データiの要素を表示
end;
end;
end; |
のように、レイヤ内要素数が0のものは内部の処理をパスさせます。このため、線を作図して要素登録する際に、ちゃんと、このLayTbl[○].cntの値を増やす必要があります。将来、要素削除等を作った場合にも対応させなければなりません。
LayTbl[○].cntの値への追加は、メインプログラム内の
procedure TFmMain.DatAttribSet(n:integer); |
内で処理させています。
次に、レイヤ設定内にある「□Active」の値を有効にしてみましょう。これにチェックが入っているレイヤの要素は、端点検索等で拾えるようにし、チェックが入っていないレイヤの要素は、端点検索等が出来ないようにします。
端点検索は、メインプログラム内のスナップ処理
function TFmMain.MouseSnap(var x,y:double):Boolean; |
内で処理していますので、ここに追加します。ついでにレイヤ順で検索するようにしてみましょう。
for i:=0 to Dat_N-1 do begin
(処理)
end; |
↓
for k:=0 to LayTblN-1 do begin
if (LayTbl[k].cnt = 0) then continue;
if not(LayTbl[k].act) then continue;
for i:=0 to Dat_N-1 do begin
if (LayTbl[k].no = Dat[i].lay) then begin
(処理)
end;
end;
end; |
次に、レイヤ設定内にある「□Display」の値を有効にしてみましょう。これにチェックが入っているレイヤの要素は画面に表示され、チェックが入っていないレイヤの要素は、画面には表示されないようにします。
画面表示部は上記の「UnitGraph.pas」の全要素表示部(GL_ALLDAT手続き)を変えます。
for k:=0 to LayTblN-1 do begin
if (LayTbl[k].cnt = 0) then continue;
for i:=0 to Dat_N-1 do begin
if (LayTbl[k].no = Dat[i].lay) then begin
データiの要素を表示
end;
end;
end; |
↓
for k:=0 to LayTblN-1 do begin
if (LayTbl[k].cnt = 0) then continue;
if not(LayTbl[k].dsp) then continue;
for i:=0 to Dat_N-1 do begin
if (LayTbl[k].no = Dat[i].lay) then begin
データiの要素を表示
end;
end;
end; |
その他、レイヤ設定画面で表のActive/Display欄を左クリックしたらON、右クリックしたらOFF、にするなど、少し修正した部分がありますが、取りあえず、ここまでのサンプルプログラムです。
【サンプルプログラムのソース】
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
▲PREV
▼NEXT
|