zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Teigha(R) software pursuant to a license 
//   agreement with Open Design Alliance.
//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
 
 
#ifndef ODA_CM_COLOR
#define ODA_CM_COLOR
 
#include "OdString.h"
#include "Gi/Gi.h"
#include "CmColorBase.h"
#include "DbExport.h"
 
class OdCmEntityColor;
class OdDbDwgFiler;
class OdDbDxfFiler;
class OdDbAuditInfo;
 
#include "TD_PackPush.h"
 
class OdDbObject;
class OdDbFiler;
 
/** \details
    <group OdCm_Classes>
 
    This class implements Color object that represents the unnamed and /named colors/
    specified by the byLayer, byBlock, byColor, byACI, byPen, Foreground, byDgnIndex, or None 
    /color methods/.
 
    \sa
    <link cm_color_sample_base.html, Example of Working with the Database Color>
 
    \sa
    <link cm_overview.html, Overview of Classes that Implement Color and Transparency>
 
    The OdCmEntityColor class,  the OdCmColorBase class
*/
class TOOLKIT_EXPORT OdCmColor : public OdCmColorBase
{
public:
  OdCmColor();
  OdCmColor(
    const OdCmColor& color);
  OdCmColor(
    const OdCmColorBase& color);
  OdCmColor(
    OdCmEntityColor::ColorMethod color);
  OdCmColor& operator=(
    const OdCmColor& color);
  OdCmColor& operator=(
    const OdCmColorBase& color);
  ~OdCmColor();
 
  /** \details
    Compares two /database color objects/ using their integer values together with their /color names/ 
    and returns true when their values are equal, or false when their values are not equal.
 
    \sa
    <link cm_color_sample_base.html, Example of Working with the Database Color>
 
    \sa
    <link cm_color_integer.html, Color Functionality as an Integer-value>
  */
    bool operator ==(
    const OdCmColor& color) const;
  bool operator ==(
    const OdCmColorBase& color) const;
 
  /** \details
    Compares two /database color objects/ using their integer values together with their /color names/ 
    and returns true when their values are not equal, or false when their values are equal.
 
    \sa
    <link cm_color_sample_base.html, Example of Working with the Database Color>
 
    \sa
    <link cm_color_integer.html, Color Functionality as an Integer-value>
  */
    bool operator !=(
    const OdCmColor& color) const;
  bool operator !=(
    const OdCmColorBase& color) const;
  
  /** \details
    Returns the description string of the /database color object/.
 
    \sa
    <link cm_color_book.html, Color Functionality as a Book Name>
  */
  OdString getDescription() const;
 
  /** \details
    Returns the explanation string of the /database color object/.
 
    \sa
    <link cm_color_book.html, Color Functionality as a Book Name>
  */
 OdString getExplanation() const;
 
  virtual OdCmEntityColor::ColorMethod colorMethod() const;
  virtual void setColorMethod(
    OdCmEntityColor::ColorMethod colorMethod);
 
  virtual bool isByColor() const;
  virtual bool isByLayer() const;
  virtual bool isByBlock() const;
  virtual bool isByACI() const;
 
  virtual bool isForeground() const;
  virtual bool isByDgnIndex() const;
 
  /** \details
    Checks whether the /color method/ is None (invisible) for the /database color object/ and 
    returns true if and only if the /color method/ is set to _kNone_ or was set to _kACInone_, 
    otherwise it returns false.
 
    \sa
    <link cm_color_sample_base.html, Example of Working with the Database Color>
 
    \sa
    <link cm_color_method.html, Methods of the Color Definition>
  */
  bool isNone() const;
 
  virtual OdUInt32 color() const;
  virtual void setColor(
    OdUInt32 color);
 
  virtual void setRGB(
    OdUInt8 red, 
    OdUInt8 green, 
    OdUInt8 blue);
  virtual void setRed(
    OdUInt8 red);
  virtual void setGreen(
    OdUInt8 green);
  virtual void setBlue(
    OdUInt8 blue);
  virtual OdUInt8 red() const;
  virtual OdUInt8 green() const;
  virtual OdUInt8 blue() const;
 
  virtual OdUInt16 colorIndex() const;
  virtual void setColorIndex(
    OdUInt16 colorIndex);
 
  virtual bool setNames(
    const OdString& colorName,
    const OdString& bookName = OdString::kEmpty);
  virtual OdString colorName() const;
  virtual OdString bookName() const;
  virtual OdString colorNameForDisplay() const;
 
  /** \details
    Returns the OdCmEntityColor settings of the /database color object/.
  */
  OdCmEntityColor entityColor() const;
 
  /** \details
    Returns a /dictionary key/ based on the /color name and book name/ of the /database color object/.
   
    \remarks
    OdCmColor objects with /color names/ can be stored in the form of an OdDbColor in a dictionary.
    getDictionaryKey() returns the key for that dictionary.
 
    \sa
    <link cm_color_sample_base.html, Example of Working with the Database Color>
 
    \sa
    <link cm_color_book.html, Color Functionality as a Book Name>
  */
  OdString getDictionaryKey() const;
  
  /** \details
    Sets the /book name and color name/ for the /dictionary keyword/.
 
    \remarks
    Returns true if and only if successful.
    The /dictionary key/ is the string that is the combination of the /book name and color name/ joined by the dollar '$' symbol
 
    \param dictionaryKey [in]  Dictionary keyword.   
 
    \sa
    <link cm_color_sample_base.html, Example of Working with the Database Color>
 
    \sa
    <link cm_color_book.html, Color Functionality as a Book Name>
  */
  bool setNamesFromDictionaryKey(
    const OdString& dictionaryKey);
 
  /** \details
    Reads the .dwg file format data of this object from the specified file.
       
    \param pFiler [in]  Pointer to the filer from which the data are to be read.
    
  */
  void dwgIn(
    OdDbDwgFiler* pFiler);
 
  /** \details
    Writes the .dwg file format data of this object to the specified filer. 
    
    \param pFiler [in]  Pointer to the filer to which the data are to be written.
  */
  void dwgOut(
    OdDbDwgFiler* pFiler) const;
 
  /** \details
    Reads the DXF format data of this object from the specified filer. 
    
    \param pFiler [in]  Pointer to the filer from which the data are to be read.
    \param groupCodeOffset [in]  Group code offset.
  */
  void dxfIn(
    OdDbDxfFiler* pFiler, 
    int groupCodeOffset = 0);
 
  /** \details
    Writes the DXF format data of this object to the specified filer. 
    
    \param pFiler [in]  Pointer to the filer to which the data are to be written.
    \param groupCodeOffset [in]  Group code offset.
  */
  void dxfOut(
    OdDbDxfFiler* pFiler, 
    int groupCodeOffset = 0) const;
 
  /** \details
    Perform an audit operation on this object.
 
    \param pAuditInfo [in]  Pointer to an AuditInfo object.
    
    \remarks
    When overriding this function for a custom class, first call OdCmColorBase::audit(pAuditInfo) 
    to validate the audit operation.
  */
  void audit(
    OdDbAuditInfo* pAuditInfo);
 
  /*!DOM*/
  void     dwgInAsTrueColor (
    OdDbDwgFiler* pFiler);
 
  /*!DOM*/
  void     dwgOutAsTrueColor(
    OdDbDwgFiler* pFiler) const;
 
  TOOLKIT_EXPORT_STATIC static const OdUInt16 MaxColorIndex;
 
private:
  enum NameFlags
  {    
    kNoNames      = 0,
    kHasColorName = 1,
    kHasBookName  = 2
  };
  OdCmEntityColor::RGBM   m_RGBM;
  OdString                m_colorName;
  OdString                m_bookName;
};
 
#include "TD_PackPop.h"
 
#endif // ODA_CM_COLOR