Teigha PRCでの色の操作

Teigha PRCデータベースの構成

各ファイル構造には、グローバルカラーとスタイル配列があります。

PRCFile
     OdPrcFileStructure 1
     globals().colors()
     globals().category1LineStyles()
  OdPrcFileStructure 2
     globals().colors()
     globals().category1LineStyles()
  OdPrcFileStructure 3
     globals().colors()
     globals().category1LineStyles()
…

カラー配列はR、G、B値の配列であり、それぞれの値は0〜1の範囲です。

スタイル配列はOdPrcObjectIdの配列であり、ファイル構造のスタイルで使用されるすべてのOdPrcObjectIdを含みます。

色はカラー配列に追加され、colors()配列内の色のインデックスはスタイルオブジェクトで使用できます。PRC標準では、インデックスは0、3、6、9であり、これはdoubleの配列におけるR値のインデックスです。

R - 0
G
B
R - 3
G
B

Teigha PRCバージョン4.3.0では、色サポートに関連するメソッドが再設計されました。現在、色の「インデックス」は0,1,2,3…であり、これは配列内の色のインデックスです。

{R,G,B} - 0

{R,G,B} - 1

また、いくつかのヘルパーメソッドが追加されました。

OdPrcGraphicsから継承

OdPrcGraphicsから継承されたTeigha PRCクラスは、以下を介して色を扱います。

OdPrcObjectId & OdPrcGraphics.styleId();

スタイルIDは、OdPrcCategory1LineStyleオブジェクトのOdPrcObjectIdで初期化する必要があります。

コード例:

OdPrcObjectId styleId;
styleId = OdPrcCategory1LineStyle::createByColor(1, 0, 1, *curFileStructure);
pBaseWithGraphics->styleId() = styleId;

OdPrcObjectId OdPrcCategory1LineStyle::createByColor(double r, double g, double b, 
 OdPrcFileStructure &postToFileStructure, bool preventColorDuplication)

OdPrcCategory1LineStyle::createByColor はヘルパーメソッドであり、以下の処理を行います。

  • R、G、B の値が 0-1 の範囲内にあることを確認します。
  • 新しい色の R、G、B の値を globals().colors() 配列に追加します。
  • 新しいスタイルを作成し、ファイル構造に追加し、category1LineStyles() に追加します。
  • 新しいスタイルに色のインデックスを割り当てます。
  • 新しいスタイルの ID を返します。

preventColorDuplication = true の場合、colors() 配列に同じ R、G、B 値を持つ色が既に存在するときは、新しい色は追加されません。

OdPrcCategory1LineStyle レベルのメソッド

OdPrcCategory1LineStyle クラスには、色に関連するメソッドが他にもいくつかあります。

void setColor(OdPrcColorIndex colorIndex = OdPrcColorIndex::kUninit);

colorIndex は globals().colors() 配列内の R、G、B 色のインデックスです。このメソッドは、色を未割り当ての値にリセットするためにも使用できます。

void setColor(double r, double g, double b, bool preventDuplication = false);

スタイルに R、G、B (0-1 の範囲) の色値を設定します。スタイルは既にファイル構造に追加されている必要があります。そうでない場合、例外がスローされます。preventDuplication = true の場合、メソッドは colors() 配列内で同じ色を検索し、その色が既に利用可能であれば新しい色を追加しません。

OdPrcColorIndex getColor() const;

色のインデックスを返し、色が初期化されたかどうかを確認するために使用できます。

const OdPrcRgbColor &getTrueColor() const;

色を R、G、B として返し、色が割り当てられていない場合、またはオブジェクトがデータベースにない場合は例外をスローします。

その他のクラス

色を使用する他のいくつかのクラスにも同様のメソッドが追加されました。OdPrcDottingPattern、OdPrcMaterialGeneric、OdPrcSolidPattern、および OdPrcContentLight は、鏡面色、放射色、拡散色などのプロパティを扱います。

今すぐ始める

ODAソフトウェアを60日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す