|
「SXF仕様書」の「図面情報」の次は「図面構造」ですが、図面構造フィーチャには以下のようなものがあります。
・用紙フィーチャ
・レイヤフィーチャ
・既定義線種フィーチャ、ユーザ定義線種フィーチャ
・既定義色フィーチャ、ユーザ定義色フィーチャ
・線幅フィーチャ
・文字フォントフィーチャ |
前頁では「線種」でしたので、ここでは「色」について見てみます。
パソコンCADソフトでの色の扱いは、DOS時代からパソコンで利用出来る色そのまま、という感じが多かったです。その為、NEC PC-9801シリーズ等では画面640×400ドット・基本8色表示(背景は黒で、青・赤・紫・緑・水・黄・白)であるため、それがそのままCADでの色表示になったりしました。NEC PC-9801シリーズではその後、拡張16色(4096色中)になるのですが、16色を使うCADは少なかったかもしれません。その為、最初の AutoCADも背景色も含め8色、というのが基本でした。
その後、AutoCADは独自に別売グラフィックボード対応となり256色化します。NEC PC-9821シリーズ(98マルチ)より640×480ドット・1677万色(24bitカラー)中256色表示が可能となりますが、これはAVグラフィックスドライバを利用してそれ用にソフトウェアを作り直す必要があった、という事と、従来との互換性を優先したことと、画面描画が多少遅かったからか?これを利用したCADソフトというのは余り無かったようです。元々、CADソフトは解像度を要求する場合が多いため、ハイレゾモード(1120×750ドット)の使用出来るPC-98XA/XL/XL2/RL/H98シリーズ専用の市販CADが多かった事もあり、それとは全く異なるシステムであるためパスされたのかもしれません。
そして Windows3.1が登場します。従来のPC-9801シリーズは640×400・16色として使用する事は出来たのですが、その表現力の無さで敬遠されていき、640×480・256色の使えるPC-9821シリーズが主力PCとなります。更に I・O DATA社などから Windows3.1対応のグラフィックボードが発売され、Windows上で1024×768ドットの解像度が使えるようになります。そして Windows3.1対応のソフトがどんどん登場します。尤も、Windows3.1対応のCADソフトというのは中々出てきませんでした。Windows用ソフトは、DOS用ソフトと全く作り方が違うからです。Windows対応のCADソフトで一番早くに出たのは確か、大塚商会社のEXPERT-CADだっと思います。AutoCADは、R12で Windows対応となります。
DOS時代は、日本国内では NEC社のパソコンのシェアが高かったです。が、Windows3.1と一緒に、アメリカIBM社のパソコンもやってきました。勿論DOS時代にもありましたけれども、AXパソコンも含め、メジャーとは言えませんでした。が、Windows3.1さえ動けば、NEC PC98でも IBM PCでも 更に安価なCompaq PCでも、どれでも良いという状況になり、更に、Windows95の登場やIBM互換PC(所謂DOS/Vパソコン)が大量に登場し、様々なグラフィックスボードやサウンドボード等も出てきて、NEC自身も PC98NXシリーズ(≒DOS/Vパソコン)を出すことにより、NEC PC-9801/9821シリーズは終焉を迎えます。この頃から、グラフィックボードでは、ハイカラー(65536色=16bit色)、トゥルーカラー(1677万色=24bit色)が気軽に利用出来るようになってきます。DOS時代にもそういった色が出せるグラフィックボード(ACRTC)も発売されていましたがほとんど利用されていませんでした。
そして Windows95対応のCADソフトも登場してきます。Autodesk社は Windows3.1時代に AutoCAD LT(/R2)という安価版CADも出していましたが、AutoCAD LT for Windows95(LT95)を出します。国内CADメーカーもWindows対応のCADソフトを開発・販売し、ハイカラー・トゥルーカラーが利用出来るソフトも出てきます。尤も、線分の色は 256色までで、ハイカラー・トゥルーカラーは塗り潰しの場合のみ、というケースも多いです。これは現在でも同じです。現実、線分の色を1677万色も使い分け出来るのか?というと中々難しい、というか、256色あれば十分(いや、8色・16色でも十分)という事と、データ量が増えてしまうというのも懸念されたのかもしれません。勿論、線分の色をフルカラーで指定出来るCADソフトもあります。
前置きが長くなりましたが、SXF仕様での色は、既定義色16色+ユーザ定義色240=合計256色が利用可能です。
既定義色 |
色コード | 色名 |
1 | black |
2 | red |
3 | green |
4 | blue |
5 | yellow |
6 | magenta |
7 | cyan |
8 | white |
9 | deeppink |
10 | brown |
11 | orange |
12 | lightgreen |
13 | lightblue |
14 | lavender |
15 | lightgray |
16 | darkgray |
|
パラメータ | 型 | 説明 | 範囲 |
name[257] | Char | 色名 | 0<文字列長≦256バイト |
備考
・既定義色コードフィーチャは幾何/表記要素、構造化要素のパラメータとして指定し、上図の通りに定義されている色コードを指定する。
・既定義色フィーチャで指定できる色は「フィーチャ仕様 別冊」を参照のこと。
・幾何/表記要素、構造化要素のパラメータとして一度も指定されない既定義色コードフィーチャを使用してはならない。 |
ユーザ定義色 |
色コード | RGB値 |
17 | 1番目に定義したユーザ定義色 |
〜 | 〜 |
256 | 240番目に定義したユーザ定義色 |
|
パラメータ | 型 | 説明 | 範囲 |
Red | Int | R値(整数) | 0≦値≦255 |
Green | Int | G値(整数) | 0≦値≦255 |
Blue | Int | B値(整数) | 0≦値≦255 |
備考
・ユーザ定義色フィーチャは幾何/表記要素、構造化要素のパラメータとして指定し、色定義テーブルへの登録順である色コード(17から始まるシーケンシャル番号)を使用する。
・幾何/表記要素、構造化要素のパラメータとして一度も指定されないユーザ定義色フィーチャを使用してはならない。 |
既定義色16種については以下のようになっています。
コード | 色名 | 内容 | R | G | B |
1 | black | 黒 | 0 | 0 | 0 |
2 | red | 赤 | 255 | 0 | 0 |
3 | green | 緑 | 0 | 255 | 0 |
4 | blue | 青 | 0 | 0 | 255 |
5 | yellow | 黄色 | 255 | 255 | 0 |
6 | magenta | マジェンタ | 255 | 0 | 255 |
7 | cyan | シアン | 0 | 255 | 255 |
8 | white | 白 | 255 | 255 | 255 |
9 | deeppink | 牡丹 | 192 | 0 | 128 |
10 | brown | 茶 | 192 | 128 | 64 |
11 | orange | 橙 | 255 | 128 | 0 |
12 | lightgreen | 薄緑 | 128 | 192 | 128 |
13 | lightblue | 明青 | 0 | 128 | 255 |
14 | lavender | 青紫 | 128 | 64 | 255 |
15 | lightgray | 明灰 | 192 | 192 | 192 |
16 | darkgray | 暗灰 | 128 | 128 | 128 |
という訳で、ユーザ定義線種の場合とは異なり、ユーザ定義色の場合には名前(色名)の指定がありません。色コードで識別するという事でしょうし、240もの色に名前をつけるのも大変だというのはあるのでしょう。既定義色の名前も固定であり、利用者が変更する事もありません。ですので、色データ項目には名前を付けないことにします。名前をつけるとメモリ容量・データ容量が増えるという事もありますが、名前をつける必要もない・名前をつけてもそれを利用するシーンは余り無いだろう、という事もあります。
それでは実装してみます。色項目は record で定義して、動的配列として登録するものとします。
type
・・・
TZumenColor = record // 図面構造|色
Red : Integer ; // R値
Green : Integer ; // G値
Blue : Integer ; // B値
cnt : Integer ; // 色内要素数
end;
・・・
TDataClass = class
public
{ Public 宣言 }
zt : TZumenTitle; // 図面情報|図面表題欄
zp : TZumenPaper; // 図面構造|用紙
zLay : array of TZumenLayer; // 図面構造|レイヤ
zLayN: Integer ; // レイヤ数
zCol : array of TZumenColor; // 図面構造|色
zColN: Integer ; // 色数
zLtp : array of TZumenLtype; // 図面構造|線種
zLtpN: Integer ; // 線種数
zWidN: Integer ; // 線幅数
constructor Create;
・・・
function AddColor(r,g,b:integer) : Boolean;
function EditColor(n:integer;r,g,b:integer) : Boolean;
・・・
private
{ Private 宣言 }
end; |
それでは簡単なテストプログラムです。実行型ファイルは、サイズが大きくなるので含めていません。ソースだけです。
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
CADを考える
▲PREV
▼NEXT
M7
Jw_cad
|