AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CAD作ろ! レイヤ・色・線種の設定(3)
前節の続きです。
前回のプログラムから、メインフォームの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
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.