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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CADを考える:補助線
CADソフトで作図を行う場合、補助線を作図しておき、それを基準にしたり、下書き線のように使ったり、短点交点を出すために使ったりします。図面の線を作図する際の補助目的に利用するための線等です。
 
補助線は、印刷されません。しかしデータ保存は行われます。
 
例えば、Jw_cad では、補助線色・補助線種というものがあります。この色、この線種で作図したものを補助線として扱います。AutoCADには、補助線というものはありません。ある画層(レイヤ)の線を補助線として使いましょう、というような利用者側での運用ケースという感じです。その他、各要素データのデータ項目に「補助線フラグ」というものを用意し、それが True(真)の場合には補助線、False(偽)の場合は通常の線、としているものも、あるかもしれません。
 
補助線は、まず一番最初に描画され、要素検索・点検索は、通常の線の後=通常の線が無い状態の、最後に検索されるもの、というのが通例でしょう。
 
線色・線種に補助線コードという特別なコード値というのは余りつけたくない、というのはあります。また、補助線フラグも、それによりデータ量が増えてしまうので避けたいというのはあります。ですのでここでは、補助線という特別なデータ要素を用意することとします。
 
という訳で、補助点マーカ・補助線分・補助折線・補助円・補助円弧・補助楕円・補助楕円弧・補助文字、を追加する事とします。データ内容は、通常の線などほぼと同じとしますが、色の項目は無しとし、補助線は全て同じ色であるとし、補助線色の設定をどこかで行う事とします。レイヤも不要かもしれませんが、データ保存を行う=補助線をレイヤ別にする事もあるだろう、という事で残しておきます。なお、直前削除・全削除は行うとしても、任意指定での削除やアンドゥ・リドゥは行わないものとし、存在フラグ(exf)も付けない事とします。
 
補助点マーカ
パラメータ説明範囲
LayerIntレイヤコード
start_xdouble配置点X座標 double(64bits)の
範囲(有効桁15桁)
start_ydouble配置点Y座標 double(64bits)の
範囲(有効桁15桁)
marker_codeIntマーカコード
rotate_angledouble回転角0≦度<360.0
Scaledouble尺度0<尺度<1.0×1015

補助線分
パラメータ説明範囲
LayerIntレイヤコード
TypeInt線種コード
line_widthInt線幅コード
start_xdouble始点X座標 double(64bits)の
範囲(有効桁15桁)
start_ydouble始点Y座標 double(64bits)の
範囲(有効桁15桁)
end_xdouble終点X座標 double(64bits)の
範囲(有効桁15桁)
end_ydouble終点Y座標 double(64bits)の
範囲(有効桁15桁)

補助折線
パラメータ説明範囲
LayerIntレイヤコード
TypeInt線種コード
line_widthInt線幅コード
NumberInt頂点数2≦数<int(32bits)の最大値
X CArray
<double
,double>
X座標(配列) double(64bits)の
範囲(有効桁15桁)
Y CArray
<double
,double>
Y座標(配列) double(64bits)の
範囲(有効桁15桁)

補助円
パラメータ説明範囲
LayerIntレイヤコード
TypeInt線種コード
line_widthInt線幅コード
sepInt分割数3≦分割数≦3600
Center_xdouble中心X座標 double(64bits)の
範囲(有効桁15桁)
Center_ydouble中心Y座標 double(64bits)の
範囲(有効桁15桁)
Radiusdouble半径0<半径<1.0×1015

補助円弧
パラメータ説明範囲
LayerIntレイヤコード
TypeInt線種コード
line_widthInt線幅コード
sepInt分割数3≦分割数≦3600
Center_xdouble中心X座標 double(64bits)の
範囲(有効桁15桁)
Center_ydouble中心Y座標 double(64bits)の
範囲(有効桁15桁)
Radiusdouble半径0<半径<1.0×1015
DirectionInt向きフラグ(0:反時計廻り,1:時計廻り)
start_angledouble始角0≦始角<360
end_angledouble終角0≦終角<360

補助楕円
パラメータ説明範囲
LayerIntレイヤコード
TypeInt線種コード
line_widthInt線幅コード
sepInt分割数3≦分割数≦3600
Center_xdouble中心X座標 double(64bits)の
範囲(有効桁15桁)
Center_ydouble中心Y座標 double(64bits)の
範囲(有効桁15桁)
Radius_xdoubleX方向半径0<半径<1.0×1015
Radius_ydoubleY方向半径0<半径<1.0×1015
rotation_angledouble回転角0≦回転角<360

補助楕円弧
パラメータ説明範囲
LayerIntレイヤコード
TypeInt線種コード
line_widthInt線幅コード
sepInt分割数3≦分割数≦3600
Center_xdouble中心X座標 double(64bits)の
範囲(有効桁15桁)
Center_ydouble中心Y座標 double(64bits)の
範囲(有効桁15桁)
Radius_xdoubleX方向半径0<半径<1.0×1015
Radius_ydoubleY方向半径0<半径<1.0×1015
DirectionInt向きフラグ(0:反時計廻り,1:時計廻り)
rotation_angledouble回転角0≦回転角<360
start_angledouble始角0≦始角<360
end_angledouble終角0≦終角<360

補助文字
パラメータ説明範囲
LayerIntレイヤコード
FontInt文字フォントコード
str[257]Char文字列0<文字列長≦256バイト
text_xdouble文字列配置基点X座標 double(64bits)の
範囲(有効桁15桁)
text_ydouble文字列配置基点Y座標 double(64bits)の
範囲(有効桁15桁)
Heightdouble文字範囲高0<高さ<1.0×1015
Widthdouble文字範囲幅0< 幅 <1.0×1015
Spcdouble文字間隔0≦間隔<1.0×1015
Angledouble文字列回転角0≦ 度 <360
Slantdoubleスラント角度-85≦ 度 ≦85
b_pntInt文字配置基点(1:左下,2:中下,3:右下,4:左中,5:中中,6:右中,7:左上,8:中上,9:右上)
DirectInt文字書出し方向(1:横書き, 2:縦書き)

 
UnitData.pas
type
 ・・・
 TDataClass = class
  public
   { Public 宣言 }
   BackColor : Integer ;   // 背景色
   PwakColor : Integer ;   // 用紙枠色
   HojoColor : Integer ;   // 補助線色番号
   
   zt : TZumenTitle;     // 図面情報|図面表題欄
   zp : TZumenPaper;     // 図面構造|用紙
   zLay : array of TZumenLayer; // 図面構造|レイヤ
   zLayN: Integer ;       // レイヤ数
   zCol : array of TZumenColor; // 図面構造|色
   zColN: Integer ;       // 色数
   zLtp : array of TZumenLtype; // 図面構造|線種
   zLtpN: Integer ;       // 線種数
   zWid : array of TZumenWidth; // 図面構造|線幅
   zWidN: Integer ;       // 線幅数
   zFnt : array of TZumenFont; // 図面構造|文字フォント
   zFntN: Integer ;       // 文字フォント数
   
   hOrd : array of THojoOrder ;  // 補助線作図順
   hOrdN : Integer ;        // 数
   hTen : array of THojoTenMarker; // 補助線|点マーカ
   hTenN : Integer ;        // 数
   hLin : array of THojoLine;   // 補助線|線分
   hLinN : Integer ;        // 数
   hLns : array of THojoLines;   // 補助線|折線
   hLnsN : Integer ;        // 数
   hCir : array of THojoCircle;  // 補助線|円
   hCirN : Integer ;        // 数
   hArc : array of THojoArc;    // 補助線|円弧
   hArcN : Integer ;        // 数
   hEll : array of THojoEllipse;  // 補助線|楕円
   hEllN : Integer ;        // 数
   hEAr : array of THojoEllipseArc; // 補助線|楕円弧
   hEArN : Integer ;        // 数
   hTxt : array of THojoText;   // 補助線|文字
   hTxtN : Integer ;        // 数
   
   dOrd : array of TDataOrder ;   // 作図順
   dOrdN : Integer ;        // 数
   dTen : array of TDataTenMarker; // 表記要素|点マーカ
   dTenN : Integer ;        // 数
   ・・・
複合図形定義のほうも同様に補助線データを追加しています。
シンボル図形には不要なため追加していません。
 
補助線データ登録用の関数は以下のものを追加しています。内容は通常データとほぼ同じです(シンボル図形への登録は除去しています)。
UnitData.pas
function AddHojoOrder(m,tp,no:integer) : Boolean;
function AddHojoTen(s:string;lay,mc:integer;px,py,an,sc:double) : Boolean;
function AddHojoLine(s:string;lay,ltp,wid:integer;x1,y1,x2,y2:double) : Boolean;
function AddHojoLines(s:string;lay,ltp,wid,num:integer;vx,vy:array of double) : Boolean;
function AddHojoCircle(s:string;lay,ltp,wid,sp:integer;cx,cy,cr:double) : Boolean;
function AddHojoArc(s:string;lay,ltp,wid,sp,dir:integer;cx,cy,cr,sa,ea:double) : Boolean;
function AddHojoEllipse(s:string;lay,ltp,wid,sp:integer;cx,cy,rx,ry,ra:double) : Boolean;
function AddHojoEllipseArc(s:string;lay,ltp,wid,sp,dir:integer;cx,cy,rx,ry,ra,sa,ea:double) : Boolean;
function AddHojoText(s,st:string;lay,fnt,bp,dir:integer;px,py,ph,pw,ps,an,sl:double) : Boolean;
 
UnitDataGraph.pas内の DisplayAllData手続きにて、補助線データの表示をまず行うように追加しています。補助線色は初期値で濃青色としています。マイナス値で指定するようにしていて、手続き DisplayLayCol1 の方を変更しています。
UnitDataGraph.pas
// 色の表示・サブ
// (in)
//  lay: レイヤ(1-256)
//  col: 色 (0,1-256) マイナス値:マイナスしてRGB値
// (out)
//  c : 色 (1-256)
//  cc: RGB色
procedure DisplayLayCol1(lay,col:integer;var c,cc:integer);
begin
 if (col >= 0) then begin
  c := col ;
  if (c = 0) then c := CData.zLay[lay-1].Color ;
  cc:= RGB(CData.zCol[c-1].Red,CData.zCol[c-1].Green,CData.zCol[c-1].Blue);
  gp.G_SetPen(cc);
 end
 else begin
  cc := -col ;
  gp.G_SetPen(cc);
 end;
end;
この対策をしていないと、補助線色も各データの色設定の中から使用しないといけなくなり、各データの色とは異なる任意色が使えない、という状況になってしまうための回避策です。
 
補助線色と同様に、背景色(標準値:白)、図面用紙枠色(標準値:青)の変数定義も追加しておきます。
 
また、これまで、レイヤが非表示だった場合は表示しない、という処理を入れていませんでしたので、これを入れておくようにしています。
 
 
それでは、ここまでのテストプログラムです。実行ファイル、gdiplus.dll、gdipフォルダは入っていません。ソースのみです。
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
CADを考える
 ▲PREV
 ▼NEXT
M7
Jw_cad
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.