|
CADソフトで作図を行う場合、補助線を作図しておき、それを基準にしたり、下書き線のように使ったり、短点交点を出すために使ったりします。図面の線を作図する際の補助目的に利用するための線等です。
補助線は、印刷されません。しかしデータ保存は行われます。
例えば、Jw_cad では、補助線色・補助線種というものがあります。この色、この線種で作図したものを補助線として扱います。AutoCADには、補助線というものはありません。ある画層(レイヤ)の線を補助線として使いましょう、というような利用者側での運用ケースという感じです。その他、各要素データのデータ項目に「補助線フラグ」というものを用意し、それが True(真)の場合には補助線、False(偽)の場合は通常の線、としているものも、あるかもしれません。
補助線は、まず一番最初に描画され、要素検索・点検索は、通常の線の後=通常の線が無い状態の、最後に検索されるもの、というのが通例でしょう。
線色・線種に補助線コードという特別なコード値というのは余りつけたくない、というのはあります。また、補助線フラグも、それによりデータ量が増えてしまうので避けたいというのはあります。ですのでここでは、補助線という特別なデータ要素を用意することとします。
という訳で、補助点マーカ・補助線分・補助折線・補助円・補助円弧・補助楕円・補助楕円弧・補助文字、を追加する事とします。データ内容は、通常の線などほぼと同じとしますが、色の項目は無しとし、補助線は全て同じ色であるとし、補助線色の設定をどこかで行う事とします。レイヤも不要かもしれませんが、データ保存を行う=補助線をレイヤ別にする事もあるだろう、という事で残しておきます。なお、直前削除・全削除は行うとしても、任意指定での削除やアンドゥ・リドゥは行わないものとし、存在フラグ(exf)も付けない事とします。
補助点マーカ |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
start_x | double | 配置点X座標 |
double(64bits)の
範囲(有効桁15桁) |
start_y | double | 配置点Y座標 |
double(64bits)の
範囲(有効桁15桁) |
marker_code | Int | マーカコード |
|
rotate_angle | double | 回転角 | 0≦度<360.0 |
Scale | double | 尺度 | 0<尺度<1.0×1015 |
補助線分 |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
Type | Int | 線種コード |
|
line_width | Int | 線幅コード |
|
start_x | double | 始点X座標 |
double(64bits)の
範囲(有効桁15桁) |
start_y | double | 始点Y座標 |
double(64bits)の
範囲(有効桁15桁) |
end_x | double | 終点X座標 |
double(64bits)の
範囲(有効桁15桁) |
end_y | double | 終点Y座標 |
double(64bits)の
範囲(有効桁15桁) |
補助折線 |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
Type | Int | 線種コード |
|
line_width | Int | 線幅コード |
|
Number | Int | 頂点数 | 2≦数<int(32bits)の最大値 |
X |
CArray
<double
,double> | X座標(配列) |
double(64bits)の
範囲(有効桁15桁) |
Y |
CArray
<double
,double> | Y座標(配列) |
double(64bits)の
範囲(有効桁15桁) |
補助円 |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
Type | Int | 線種コード |
|
line_width | Int | 線幅コード |
|
sep | Int | 分割数 | 3≦分割数≦3600 |
Center_x | double | 中心X座標 |
double(64bits)の
範囲(有効桁15桁) |
Center_y | double | 中心Y座標 |
double(64bits)の
範囲(有効桁15桁) |
Radius | double | 半径 | 0<半径<1.0×1015 |
補助円弧 |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
Type | Int | 線種コード |
|
line_width | Int | 線幅コード |
|
sep | Int | 分割数 | 3≦分割数≦3600 |
Center_x | double | 中心X座標 |
double(64bits)の
範囲(有効桁15桁) |
Center_y | double | 中心Y座標 |
double(64bits)の
範囲(有効桁15桁) |
Radius | double | 半径 | 0<半径<1.0×1015 |
Direction | Int | 向きフラグ(0:反時計廻り,1:時計廻り) |
|
start_angle | double | 始角 | 0≦始角<360 |
end_angle | double | 終角 | 0≦終角<360 |
補助楕円 |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
Type | Int | 線種コード |
|
line_width | Int | 線幅コード |
|
sep | Int | 分割数 | 3≦分割数≦3600 |
Center_x | double | 中心X座標 |
double(64bits)の
範囲(有効桁15桁) |
Center_y | double | 中心Y座標 |
double(64bits)の
範囲(有効桁15桁) |
Radius_x | double | X方向半径 | 0<半径<1.0×1015 |
Radius_y | double | Y方向半径 | 0<半径<1.0×1015 |
rotation_angle | double | 回転角 | 0≦回転角<360 |
補助楕円弧 |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
Type | Int | 線種コード |
|
line_width | Int | 線幅コード |
|
sep | Int | 分割数 | 3≦分割数≦3600 |
Center_x | double | 中心X座標 |
double(64bits)の
範囲(有効桁15桁) |
Center_y | double | 中心Y座標 |
double(64bits)の
範囲(有効桁15桁) |
Radius_x | double | X方向半径 | 0<半径<1.0×1015 |
Radius_y | double | Y方向半径 | 0<半径<1.0×1015 |
Direction | Int | 向きフラグ(0:反時計廻り,1:時計廻り) |
|
rotation_angle | double | 回転角 | 0≦回転角<360 |
start_angle | double | 始角 | 0≦始角<360 |
end_angle | double | 終角 | 0≦終角<360 |
補助文字 |
パラメータ | 型 | 説明 | 範囲 |
Layer | Int | レイヤコード |
|
Font | Int | 文字フォントコード |
|
str[257] | Char | 文字列 | 0<文字列長≦256バイト |
text_x | double | 文字列配置基点X座標 |
double(64bits)の
範囲(有効桁15桁) |
text_y | double | 文字列配置基点Y座標 |
double(64bits)の
範囲(有効桁15桁) |
Height | double | 文字範囲高 | 0<高さ<1.0×1015 |
Width | double | 文字範囲幅 | 0< 幅 <1.0×1015 |
Spc | double | 文字間隔 | 0≦間隔<1.0×1015 |
Angle | double | 文字列回転角 | 0≦ 度 <360 |
Slant | double | スラント角度 | -85≦ 度 ≦85 |
b_pnt | Int | 文字配置基点(1:左下,2:中下,3:右下,4:左中,5:中中,6:右中,7:左上,8:中上,9:右上) |
|
Direct | Int | 文字書出し方向(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
|