{
Handle(XCAFDoc_Color) anAtt = Handle(XCAFDoc_Color)::DownCast(theTarget);
Standard_Real R, G, B;
+ Standard_ShortReal alpha;
Standard_Boolean isOk = theSource >> R >> G >> B;
if(isOk) {
- anAtt->Set(R, G, B);
+ Standard_Boolean isRGBA = theSource >> alpha;
+ if (!isRGBA)
+ alpha = 1.0;
+ anAtt->Set(R, G, B, alpha);
}
return isOk;
}
{
Handle(XCAFDoc_Color) anAtt = Handle(XCAFDoc_Color)::DownCast(theSource);
Standard_Real R, G, B;
+ Standard_ShortReal alpha;
anAtt->GetRGB(R, G, B);
- theTarget << R << G << B;
+ alpha = anAtt->GetAlpha();
+ theTarget << R << G << B << alpha;
}
#include <Quantity_Color.hxx>
+#include <Quantity_ColorRGBA.hxx>
#include <Standard_GUID.hxx>
#include <Standard_Type.hxx>
#include <TDF_Attribute.hxx>
return A;
}
+ //=======================================================================
+ //function : Set
+ //purpose :
+ //=======================================================================
+
+ Handle(XCAFDoc_Color) XCAFDoc_Color::Set(const TDF_Label& L,
+ const Quantity_ColorRGBA& C)
+ {
+ Handle(XCAFDoc_Color) A;
+ if (!L.FindAttribute(XCAFDoc_Color::GetID(), A)) {
+ A = new XCAFDoc_Color();
+ L.AddAttribute(A);
+ }
+ A->Set(C);
+ return A;
+ }
+
//=======================================================================
//function : Set
//purpose :
//=======================================================================
Handle(XCAFDoc_Color) XCAFDoc_Color::Set(const TDF_Label& L,
- const Standard_Real R,
- const Standard_Real G,
- const Standard_Real B)
+ const Standard_Real R,
+ const Standard_Real G,
+ const Standard_Real B,
+ const Standard_Real alpha)
{
Handle(XCAFDoc_Color) A;
if (!L.FindAttribute (XCAFDoc_Color::GetID(), A)) {
A = new XCAFDoc_Color ();
L.AddAttribute(A);
}
- A->Set (R,G,B);
+ A->Set (R,G,B, alpha);
return A;
}
//=======================================================================
void XCAFDoc_Color::Set(const Quantity_Color& C)
+{
+ Backup();
+ myColor.SetRGB(C);
+}
+
+//=======================================================================
+//function : Set
+//purpose :
+//=======================================================================
+
+void XCAFDoc_Color::Set(const Quantity_ColorRGBA& C)
{
Backup();
myColor = C;
void XCAFDoc_Color::Set(const Quantity_NameOfColor C)
{
Backup();
- myColor.SetValues(C);
+ myColor.SetRGB(C);
}
//=======================================================================
//=======================================================================
void XCAFDoc_Color::Set(const Standard_Real R,
- const Standard_Real G,
- const Standard_Real B)
+ const Standard_Real G,
+ const Standard_Real B,
+ const Standard_Real alpha)
{
Backup();
- myColor.SetValues(R,G,B, Quantity_TOC_RGB);
+ Quantity_Color aColor;
+ aColor.SetValues(R, G, B, Quantity_TOC_RGB);
+ myColor.SetRGB(aColor);
+ myColor.SetAlpha((Standard_ShortReal)alpha);
}
//=======================================================================
//=======================================================================
const Quantity_Color& XCAFDoc_Color::GetColor() const
+{
+ return myColor.GetRGB();
+}
+
+//=======================================================================
+//function : GetColorRGBA
+//purpose :
+//=======================================================================
+
+const Quantity_ColorRGBA& XCAFDoc_Color::GetColorRGBA() const
{
return myColor;
}
Quantity_NameOfColor XCAFDoc_Color::GetNOC() const
{
- return myColor.Name();
+ return myColor.GetRGB().Name();
}
//=======================================================================
Standard_Real& G,
Standard_Real& B) const
{
- myColor.Values(R,G,B, Quantity_TOC_RGB);
+ myColor.GetRGB().Values(R,G,B, Quantity_TOC_RGB);
}
+
+ //=======================================================================
+ //function : GetRGBA
+ //purpose :
+ //=======================================================================
+
+ Standard_ShortReal XCAFDoc_Color::GetAlpha() const
+ {
+ return myColor.Alpha();
+ }
//=======================================================================
//function : ID
//purpose :
void XCAFDoc_Color::Restore(const Handle(TDF_Attribute)& With)
{
- myColor = Handle(XCAFDoc_Color)::DownCast(With)->GetColor();
+ myColor = Handle(XCAFDoc_Color)::DownCast(With)->GetColorRGBA();
}
//=======================================================================
#include <Standard_Type.hxx>
#include <Quantity_Color.hxx>
+#include <Quantity_ColorRGBA.hxx>
#include <TDF_Attribute.hxx>
#include <Quantity_NameOfColor.hxx>
#include <Standard_Real.hxx>
class Standard_GUID;
class TDF_Label;
class Quantity_Color;
+class Quantity_ColorRGBA;
class TDF_Attribute;
class TDF_RelocationTable;
Standard_EXPORT static const Standard_GUID& GetID();
Standard_EXPORT static Handle(XCAFDoc_Color) Set (const TDF_Label& label, const Quantity_Color& C);
+
+ Standard_EXPORT static Handle(XCAFDoc_Color) Set (const TDF_Label& label, const Quantity_ColorRGBA& C);
Standard_EXPORT static Handle(XCAFDoc_Color) Set (const TDF_Label& label, const Quantity_NameOfColor C);
//! Find, or create, a Color attribute and set it's value
//! the Color attribute is returned.
- Standard_EXPORT static Handle(XCAFDoc_Color) Set (const TDF_Label& label, const Standard_Real R, const Standard_Real G, const Standard_Real B);
+ Standard_EXPORT static Handle(XCAFDoc_Color) Set (const TDF_Label& label, const Standard_Real R, const Standard_Real G, const Standard_Real B, const Standard_Real alpha = 1.0);
Standard_EXPORT void Set (const Quantity_Color& C);
+
+ Standard_EXPORT void Set (const Quantity_ColorRGBA& C);
Standard_EXPORT void Set (const Quantity_NameOfColor C);
- Standard_EXPORT void Set (const Standard_Real R, const Standard_Real G, const Standard_Real B);
+ Standard_EXPORT void Set (const Standard_Real R, const Standard_Real G, const Standard_Real B, const Standard_Real alpha = 1.0);
Standard_EXPORT const Quantity_Color& GetColor() const;
+
+ Standard_EXPORT const Quantity_ColorRGBA& GetColorRGBA() const;
Standard_EXPORT Quantity_NameOfColor GetNOC() const;
- //! Returns True if there is a reference on the same label
Standard_EXPORT void GetRGB (Standard_Real& R, Standard_Real& G, Standard_Real& B) const;
+
+ Standard_EXPORT Standard_ShortReal GetAlpha() const;
Standard_EXPORT const Standard_GUID& ID() const Standard_OVERRIDE;
private:
- Quantity_Color myColor;
+ Quantity_ColorRGBA myColor;
};
Standard_Boolean XCAFDoc_ColorTool::GetColor (const TDF_Label& lab,
Quantity_Color& col) const
{
- if ( lab.Father() != Label() ) return Standard_False;
-
+ Quantity_ColorRGBA aCol;
+ Standard_Boolean isDone = GetColor(lab, aCol);
+ if (isDone)
+ col = aCol.GetRGB();
+ return isDone;
+}
+
+//=======================================================================
+//function : GetColor
+//purpose :
+//=======================================================================
+
+Standard_Boolean XCAFDoc_ColorTool::GetColor(const TDF_Label& lab,
+ Quantity_ColorRGBA& col) const
+{
+ if (lab.Father() != Label()) return Standard_False;
+
Handle(XCAFDoc_Color) ColorAttribute;
- if ( ! lab.FindAttribute ( XCAFDoc_Color::GetID(), ColorAttribute ))
+ if (!lab.FindAttribute(XCAFDoc_Color::GetID(), ColorAttribute))
return Standard_False;
-
- col = ColorAttribute->GetColor();
-
+
+ col = ColorAttribute->GetColorRGBA();
+
return Standard_True;
}
Standard_Boolean XCAFDoc_ColorTool::FindColor (const Quantity_Color& col, TDF_Label& lab) const
{
- TDF_ChildIDIterator it(Label(),XCAFDoc_Color::GetID());
+ Quantity_ColorRGBA aCol;
+ aCol.SetRGB(col);
+ return FindColor(aCol, lab);
+}
+
+//=======================================================================
+//function : FindColor
+//purpose :
+//=======================================================================
+
+Standard_Boolean XCAFDoc_ColorTool::FindColor(const Quantity_ColorRGBA& col, TDF_Label& lab) const
+{
+ TDF_ChildIDIterator it(Label(), XCAFDoc_Color::GetID());
for (; it.More(); it.Next()) {
TDF_Label aLabel = it.Value()->Label();
- Quantity_Color C;
- if ( ! GetColor ( aLabel, C ) ) continue;
- if ( C.IsEqual ( col ) ) {
+ Quantity_ColorRGBA C;
+ if (!GetColor(aLabel, C)) continue;
+ if (C.IsEqual(col)) {
lab = aLabel;
return Standard_True;
}
//purpose :
//=======================================================================
-TDF_Label XCAFDoc_ColorTool::FindColor (const Quantity_Color& col) const
+TDF_Label XCAFDoc_ColorTool::FindColor (const Quantity_ColorRGBA& col) const
{
TDF_Label L;
FindColor ( col, L );
return L;
}
+//=======================================================================
+//function : FindColor
+//purpose :
+//=======================================================================
+
+TDF_Label XCAFDoc_ColorTool::FindColor(const Quantity_Color& col) const
+{
+ TDF_Label L;
+ FindColor(col, L);
+ return L;
+}
+
//=======================================================================
//function : AddColor
//purpose :
//=======================================================================
TDF_Label XCAFDoc_ColorTool::AddColor (const Quantity_Color& col) const
+{
+ Quantity_ColorRGBA aCol;
+ aCol.SetRGB(col);
+ return AddColor(aCol);
+}
+
+//=======================================================================
+//function : AddColor
+//purpose :
+//=======================================================================
+
+TDF_Label XCAFDoc_ColorTool::AddColor(const Quantity_ColorRGBA& col) const
{
TDF_Label L;
- if ( FindColor ( col, L ) ) return L;
+ if (FindColor(col, L)) return L;
// create a new color entry
-
+
TDF_TagSource aTag;
- L = aTag.NewChild ( Label() );
+ L = aTag.NewChild(Label());
XCAFDoc_Color::Set(L, col);
-
+
#ifdef AUTONAMING
// set name according to color value
TCollection_AsciiString str;
- str += col.StringName ( col.Name() );
+ Quantity_Color aColor = col.GetRGB();
+ str += aColor.StringName(aColor.Name());
str += " (";
- str += TCollection_AsciiString ( col.Red() );
+ str += TCollection_AsciiString(aColor.Red());
str += ",";
- str += TCollection_AsciiString ( col.Green() );
+ str += TCollection_AsciiString(aColor.Green());
str += ",";
- str += TCollection_AsciiString ( col.Blue() );
+ str += TCollection_AsciiString(aColor.Blue());
+ str += ",";
+ str += TCollection_AsciiString(col.Alpha());
str += ")";
- TDataStd_Name::Set ( L, str );
+ TDataStd_Name::Set(L, str);
#endif
-
+
return L;
}
SetColor ( L, colorL, type );
}
+//=======================================================================
+//function : SetColor
+//purpose :
+//=======================================================================
+
+void XCAFDoc_ColorTool::SetColor(const TDF_Label& L,
+ const Quantity_ColorRGBA& Color,
+ const XCAFDoc_ColorType type) const
+{
+ TDF_Label colorL = AddColor(Color);
+ SetColor(L, colorL, type);
+}
+
//=======================================================================
//function : UnSetColor
//purpose :
return GetColor ( colorL, color );
}
+//=======================================================================
+//function : GetColor
+//purpose :
+//=======================================================================
+
+Standard_Boolean XCAFDoc_ColorTool::GetColor(const TDF_Label& L,
+ const XCAFDoc_ColorType type,
+ Quantity_ColorRGBA& color)
+{
+ TDF_Label colorL;
+ if (!GetColor(L, type, colorL)) return Standard_False;
+ return GetColor(colorL, color);
+}
+
//=======================================================================
//function : SetColor
//purpose :
return SetColor ( S, colorL, type );
}
+//=======================================================================
+//function : SetColor
+//purpose :
+//=======================================================================
+
+Standard_Boolean XCAFDoc_ColorTool::SetColor(const TopoDS_Shape& S,
+ const Quantity_ColorRGBA& Color,
+ const XCAFDoc_ColorType type)
+{
+ TDF_Label colorL = AddColor(Color);
+ return SetColor(S, colorL, type);
+}
+
//=======================================================================
//function : UnSetColor
//purpose :
return GetColor ( colorL, color );
}
+//=======================================================================
+//function : GetColor
+//purpose :
+//=======================================================================
+
+Standard_Boolean XCAFDoc_ColorTool::GetColor(const TopoDS_Shape& S,
+ const XCAFDoc_ColorType type,
+ Quantity_ColorRGBA& color)
+{
+ TDF_Label colorL;
+ if (!GetColor(S, type, colorL)) return Standard_False;
+ return GetColor(colorL, color);
+}
+
//=======================================================================
//function : GetID
//purpose :
const XCAFDoc_ColorType type,
const Quantity_Color& color,
const Standard_Boolean IsCreateSHUO)
+{
+ Quantity_ColorRGBA aCol;
+ aCol.SetRGB(color);
+ return SetInstanceColor(theShape, type, aCol, IsCreateSHUO);
+}
+
+//=======================================================================
+//function : SetInstanceColor
+//purpose :
+//=======================================================================
+
+Standard_Boolean XCAFDoc_ColorTool::SetInstanceColor(const TopoDS_Shape& theShape,
+ const XCAFDoc_ColorType type,
+ const Quantity_ColorRGBA& color,
+ const Standard_Boolean IsCreateSHUO)
{
// find shuo label structure
TDF_LabelSequence aLabels;
- if ( !ShapeTool()->FindComponent( theShape, aLabels ) )
+ if (!ShapeTool()->FindComponent(theShape, aLabels))
return Standard_False;
Handle(XCAFDoc_GraphNode) aSHUO;
// set the SHUO structure for this component if it is not exist
- if ( !ShapeTool()->FindSHUO( aLabels, aSHUO ) ) {
+ if (!ShapeTool()->FindSHUO(aLabels, aSHUO)) {
if (aLabels.Length() == 1) {
// set color directly for component as NAUO
SetColor(aLabels.Value(1), color, type);
return Standard_True;
}
- else if ( !IsCreateSHUO || !ShapeTool()->SetSHUO( aLabels, aSHUO ) ) {
+ else if (!IsCreateSHUO || !ShapeTool()->SetSHUO(aLabels, aSHUO)) {
return Standard_False;
}
}
TDF_Label aSHUOLabel = aSHUO->Label();
- SetColor( aSHUOLabel, color, type );
+ SetColor(aSHUOLabel, color, type);
return Standard_True;
}
+
//=======================================================================
//function : GetInstanceColor
//purpose :
Standard_Boolean XCAFDoc_ColorTool::GetInstanceColor (const TopoDS_Shape& theShape,
const XCAFDoc_ColorType type,
Quantity_Color& color)
+{
+ Quantity_ColorRGBA aCol;
+ Standard_Boolean isDone = GetInstanceColor(theShape, type, aCol);
+ if (isDone)
+ color = aCol.GetRGB();
+ return isDone;
+}
+
+//=======================================================================
+//function : GetInstanceColor
+//purpose :
+//=======================================================================
+
+Standard_Boolean XCAFDoc_ColorTool::GetInstanceColor(const TopoDS_Shape& theShape,
+ const XCAFDoc_ColorType type,
+ Quantity_ColorRGBA& color)
{
// find shuo label structure
TDF_LabelSequence aLabels;
- if ( !ShapeTool()->FindComponent( theShape, aLabels ) )
+ if (!ShapeTool()->FindComponent(theShape, aLabels))
return Standard_False;
Handle(XCAFDoc_GraphNode) aSHUO;
// get shuo from document by label structure
TDF_Label aCompLab = aLabels.Value(aLabels.Length());
while (aLabels.Length() > 1) {
- if ( !ShapeTool()->FindSHUO( aLabels, aSHUO ) ) {
+ if (!ShapeTool()->FindSHUO(aLabels, aSHUO)) {
// try to find other shuo
aLabels.Remove(aLabels.Length());
continue;
- } else {
+ }
+ else {
TDF_Label aSHUOLabel = aSHUO->Label();
- if (GetColor ( aSHUOLabel, type, color ) )
+ if (GetColor(aSHUOLabel, type, color))
return Standard_True;
- else
+ else
// try to find other shuo
aLabels.Remove(aLabels.Length());
}
}
// attempt to get color exactly of component
- if (GetColor( aCompLab, type, color ))
+ if (GetColor(aCompLab, type, color))
return Standard_True;
-
+
// attempt to get color of solid
TopLoc_Location aLoc;
TopoDS_Shape S0 = theShape;
- S0.Location( aLoc );
- TDF_Label aRefLab = ShapeTool()->FindShape( S0 );
+ S0.Location(aLoc);
+ TDF_Label aRefLab = ShapeTool()->FindShape(S0);
if (!aRefLab.IsNull())
- return GetColor( aRefLab, type, color );
+ return GetColor(aRefLab, type, color);
// no color assigned
return Standard_False;
}
class TDF_Label;
class Standard_GUID;
class Quantity_Color;
+class Quantity_ColorRGBA;
class TopoDS_Shape;
class TDF_Attribute;
class TDF_RelocationTable;
//! Returns False if the label is not in colortable
//! or does not define a color
Standard_EXPORT Standard_Boolean GetColor (const TDF_Label& lab, Quantity_Color& col) const;
+
+ //! Returns color defined by label lab
+ //! Returns False if the label is not in colortable
+ //! or does not define a color
+ Standard_EXPORT Standard_Boolean GetColor(const TDF_Label& lab, Quantity_ColorRGBA& col) const;
//! Finds a color definition in a colortable and returns
//! its label if found
//! Returns False if color is not found in colortable
Standard_EXPORT Standard_Boolean FindColor (const Quantity_Color& col, TDF_Label& lab) const;
+
+ //! Finds a color definition in a colortable and returns
+ //! its label if found
+ //! Returns False if color is not found in colortable
+ Standard_EXPORT Standard_Boolean FindColor(const Quantity_ColorRGBA& col, TDF_Label& lab) const;
//! Finds a color definition in a colortable and returns
//! its label if found (or Null label else)
Standard_EXPORT TDF_Label FindColor (const Quantity_Color& col) const;
+
+ //! Finds a color definition in a colortable and returns
+ //! its label if found (or Null label else)
+ Standard_EXPORT TDF_Label FindColor(const Quantity_ColorRGBA& col) const;
//! Adds a color definition to a colortable and returns
//! its label (returns existing label if the same color
//! is already defined)
Standard_EXPORT TDF_Label AddColor (const Quantity_Color& col) const;
+
+ //! Adds a color definition to a colortable and returns
+ //! its label (returns existing label if the same color
+ //! is already defined)
+ Standard_EXPORT TDF_Label AddColor(const Quantity_ColorRGBA& col) const;
//! Removes color from the colortable
Standard_EXPORT void RemoveColor (const TDF_Label& lab) const;
//! in the colortable
//! Adds a color as necessary
Standard_EXPORT void SetColor (const TDF_Label& L, const Quantity_Color& Color, const XCAFDoc_ColorType type) const;
+
+ //! Sets a link with GUID defined by <type> (see
+ //! XCAFDoc::ColorRefGUID()) from label <L> to color <Color>
+ //! in the colortable
+ //! Adds a color as necessary
+ Standard_EXPORT void SetColor(const TDF_Label& L, const Quantity_ColorRGBA& Color, const XCAFDoc_ColorType type) const;
//! Removes a link with GUID defined by <type> (see
//! XCAFDoc::ColorRefGUID()) from label <L> to color
//! Returns color assigned to <L> as <type>
//! Returns False if no such color is assigned
Standard_EXPORT Standard_Boolean GetColor (const TDF_Label& L, const XCAFDoc_ColorType type, Quantity_Color& color);
+
+ //! Returns color assigned to <L> as <type>
+ //! Returns False if no such color is assigned
+ Standard_EXPORT Standard_Boolean GetColor(const TDF_Label& L, const XCAFDoc_ColorType type, Quantity_ColorRGBA& color);
//! Sets a link with GUID defined by <type> (see
//! XCAFDoc::ColorRefGUID()) from label <L> to color
//! Adds a color as necessary
//! Returns False if cannot find a label for shape S
Standard_EXPORT Standard_Boolean SetColor (const TopoDS_Shape& S, const Quantity_Color& Color, const XCAFDoc_ColorType type);
+
+ //! Sets a link with GUID defined by <type> (see
+ //! XCAFDoc::ColorRefGUID()) from label <L> to color <Color>
+ //! in the colortable
+ //! Adds a color as necessary
+ //! Returns False if cannot find a label for shape S
+ Standard_EXPORT Standard_Boolean SetColor(const TopoDS_Shape& S, const Quantity_ColorRGBA& Color, const XCAFDoc_ColorType type);
//! Removes a link with GUID defined by <type> (see
//! XCAFDoc::ColorRefGUID()) from label <L> to color
//! Returns color assigned to <L> as <type>
//! Returns False if no such color is assigned
Standard_EXPORT Standard_Boolean GetColor (const TopoDS_Shape& S, const XCAFDoc_ColorType type, Quantity_Color& color);
+
+ //! Returns color assigned to <L> as <type>
+ //! Returns False if no such color is assigned
+ Standard_EXPORT Standard_Boolean GetColor(const TopoDS_Shape& S, const XCAFDoc_ColorType type, Quantity_ColorRGBA& color);
//! Return TRUE if object on this label is visible, FALSE if invisible.
Standard_EXPORT Standard_Boolean IsVisible (const TDF_Label& L) const;
//! NOTE: create SHUO structeure if it is necessary and if <isCreateSHUO>
Standard_EXPORT Standard_Boolean SetInstanceColor (const TopoDS_Shape& theShape, const XCAFDoc_ColorType type, const Quantity_Color& color, const Standard_Boolean isCreateSHUO = Standard_True);
+ //! Sets the color of component that styled with SHUO structure
+ //! Returns FALSE if no sush component found
+ //! NOTE: create SHUO structeure if it is necessary and if <isCreateSHUO>
+ Standard_EXPORT Standard_Boolean SetInstanceColor(const TopoDS_Shape& theShape, const XCAFDoc_ColorType type, const Quantity_ColorRGBA& color, const Standard_Boolean isCreateSHUO = Standard_True);
+
//! Gets the color of component that styled with SHUO structure
//! Returns FALSE if no sush component or color type
Standard_EXPORT Standard_Boolean GetInstanceColor (const TopoDS_Shape& theShape, const XCAFDoc_ColorType type, Quantity_Color& color);
+
+ //! Gets the color of component that styled with SHUO structure
+ //! Returns FALSE if no sush component or color type
+ Standard_EXPORT Standard_Boolean GetInstanceColor(const TopoDS_Shape& theShape, const XCAFDoc_ColorType type, Quantity_ColorRGBA& color);
//! Gets the visibility status of component that styled with SHUO structure
//! Returns FALSE if no sush component
NbAreaProp++;
}
Handle(XCAFDoc_ColorTool) CTool = XCAFDoc_DocumentTool::ColorTool(aDoc->Main());
- Quantity_Color col;
+ Quantity_ColorRGBA col;
Standard_Boolean IsColor = Standard_False;
if(CTool->GetColor(L,XCAFDoc_ColorGen,col))
IsColor = Standard_True;
IsColor = Standard_True;
if(IsColor) {
TCollection_AsciiString Entry1;
- Entry1 = col.StringName(col.Name());
- if(PrintStructMode) di<<"Color("<<Entry1.ToCString()<<") ";
+ Entry1 = col.GetRGB().StringName(col.GetRGB().Name());
+ if(PrintStructMode) di<<"Color("<<Entry1.ToCString()<<" "<<col.Alpha()<<") ";
NbShapesWithColor++;
}
Handle(XCAFDoc_LayerTool) LTool = XCAFDoc_DocumentTool::LayerTool(aDoc->Main());
}
else if ( att->IsKind(STANDARD_TYPE(XCAFDoc_Color)) ) {
Handle(XCAFDoc_Color) val = Handle(XCAFDoc_Color)::DownCast ( att );
- Quantity_Color C = val->GetColor();
+ Quantity_ColorRGBA C = val->GetColorRGBA();
char string[260];
- Sprintf ( string, "%s (%g, %g, %g)", C.StringName ( C.Name() ),
- C.Red(), C.Green(), C.Blue() );
+ Sprintf ( string, "%s (%g, %g, %g, %g)", C.GetRGB().StringName ( C.GetRGB().Name() ),
+ C.GetRGB().Red(), C.GetRGB().Green(), C.GetRGB().Blue(), C.Alpha());
di << string;
}
else if ( att->IsKind(STANDARD_TYPE(XCAFDoc_DimTol)) ) {
-// Created on: 2000-08-04
+// Created on: 2000-08-04
// Created by: Pavel TELKOV
// Copyright (c) 2000-2014 OPEN CASCADE SAS
//
#include <DBRep.hxx>
#include <DDocStd.hxx>
#include <Draw.hxx>
+#include <Precision.hxx>
#include <Quantity_Color.hxx>
+#include <Quantity_ColorRGBA.hxx>
#include <TCollection_AsciiString.hxx>
#include <TDF_Label.hxx>
#include <TDF_LabelSequence.hxx>
static Standard_Integer setColor (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
{
if (argc < 6) {
- di<<"Use: "<<argv[0]<<" Doc {Label|Shape} R G B [curve|surf]\n";
+ di<<"Use: "<<argv[0]<<" Doc {Label|Shape} R G B [alpha] [curve|surf]\n";
return 1;
}
Handle(TDocStd_Document) Doc;
TDF_Label aLabel;
TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
Quantity_Color Col ( Draw::Atof(argv[3]), Draw::Atof(argv[4]), Draw::Atof(argv[5]), Quantity_TOC_RGB );
+
+ Quantity_ColorRGBA aColRGBA;
+ aColRGBA.SetRGB(Col);
+ if (argc > 6 && (argv[6][0] != 's' && argv[6][0] != 'c')) {
+ aColRGBA.SetAlpha((Standard_ShortReal)(Draw::Atof(argv[6])));
+ }
Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
- const XCAFDoc_ColorType ctype = ( argc <= 6 ? XCAFDoc_ColorGen : ( argv[6][0] == 's' ? XCAFDoc_ColorSurf : XCAFDoc_ColorCurv ) );
+ XCAFDoc_ColorType ctype = XCAFDoc_ColorGen;
+ if (argc > 6) {
+ if (argv[argc - 1][0] == 's')
+ ctype = XCAFDoc_ColorSurf;
+ else if (argv[argc - 1][0] == 'c')
+ ctype = XCAFDoc_ColorCurv;
+ }
+
if ( !aLabel.IsNull() ) {
- myColors->SetColor ( aLabel, Col, ctype );
+ myColors->SetColor(aLabel, aColRGBA, ctype);
}
else {
TopoDS_Shape aShape= DBRep::Get(argv[2]);
if ( !aShape.IsNull() ) {
- myColors->SetColor ( aShape, Col, ctype );
+ myColors->SetColor(aShape, aColRGBA, ctype);
}
}
return 0;
TDF_Label aLabel;
TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
- Quantity_Color col;
+ Quantity_ColorRGBA col;
if ( !myColors->GetColor(aLabel, col) ) return 0;
- di << col.StringName ( col.Name() );
+ if ((1 - col.Alpha()) < Precision::Confusion())
+ di << col.GetRGB().StringName(col.GetRGB().Name());
+ else
+ di << col.GetRGB().StringName ( col.GetRGB().Name() ) << " (" << col.Alpha() << ")";
return 0;
}
Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
const XCAFDoc_ColorType ctype = ( argc <= 3 ? XCAFDoc_ColorGen : ( argv[3][0] == 's' ? XCAFDoc_ColorSurf : XCAFDoc_ColorCurv ) );
- Quantity_Color col;
+ Quantity_ColorRGBA col;
if ( !myColors->GetColor(aLabel, ctype, col) ) return 0;
- TCollection_AsciiString Entry;
- Entry = col.StringName ( col.Name() );
- di << Entry.ToCString();
+ if ((1 - col.Alpha()) < Precision::Confusion())
+ di << col.GetRGB().StringName(col.GetRGB().Name());
+ else
+ di << col.GetRGB().StringName(col.GetRGB().Name()) << " (" << col.Alpha() << ")";
return 0;
}
TDF_Label aLabel;
Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
- Quantity_Color col;
+ Quantity_ColorRGBA col;
TDF_LabelSequence Labels;
myColors->GetColors(Labels);
if (Labels.Length() >= 1) {
for ( Standard_Integer i = 1; i<= Labels.Length(); i++) {
aLabel = Labels.Value(i);
if ( !myColors->GetColor(aLabel, col) ) continue;
- di << col.StringName ( col.Name() );
+ if ((1 - col.Alpha()) < Precision::Confusion())
+ di << col.GetRGB().StringName(col.GetRGB().Name());
+ else
+ di << col.GetRGB().StringName(col.GetRGB().Name()) << " (" << col.Alpha() << ")";
di << " ";
}
}
static Standard_Integer addColor (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
{
- if (argc!=5) {
- di<<"Use: "<<argv[0]<<" DocName R G B\n";
+ if (argc < 5) {
+ di<<"Use: "<<argv[0]<<" DocName R G B [alpha]\n";
return 1;
}
Handle(TDocStd_Document) Doc;
Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
Quantity_Color Col ( Draw::Atof(argv[2]), Draw::Atof(argv[3]), Draw::Atof(argv[4]), Quantity_TOC_RGB );
- aLabel = myColors->AddColor(Col);
+ if (argc == 6) {
+ Quantity_ColorRGBA aColRGBA(Col);
+ aColRGBA.SetAlpha((Standard_ShortReal)(Draw::Atof(argv[5])));
+ aLabel = myColors->AddColor(aColRGBA);
+ }
+ else
+ aLabel = myColors->AddColor(Col);
TCollection_AsciiString Entry;
TDF_Tool::Entry(aLabel, Entry);
static Standard_Integer findColor (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
{
- if (argc!=5) {
- di<<"Use: "<<argv[0]<<" DocName R G B\n";
+ if (argc < 5) {
+ di<<"Use: "<<argv[0]<<" DocName R G B [alpha]\n";
return 1;
}
Handle(TDocStd_Document) Doc;
if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
-
- Quantity_Color Col ( Draw::Atof(argv[2]), Draw::Atof(argv[3]), Draw::Atof(argv[4]), Quantity_TOC_RGB );
-
TCollection_AsciiString Entry;
- TDF_Tool::Entry(myColors->FindColor(Col), Entry);
+ Quantity_Color Col(Draw::Atof(argv[2]), Draw::Atof(argv[3]), Draw::Atof(argv[4]), Quantity_TOC_RGB);
+ if (argc == 5) {
+ TDF_Tool::Entry(myColors->FindColor(Col), Entry);
+ }
+ else {
+ Quantity_ColorRGBA aColRGBA(Col);
+ aColRGBA.SetAlpha((Standard_ShortReal)Draw::Atof(argv[5]));
+ TDF_Tool::Entry(myColors->FindColor(aColRGBA), Entry);
+ }
di << Entry.ToCString();
return 0;
}
TopoDS_Shape aShape;
aShape = DBRep::Get(argv[2]);
- Quantity_Color col;
+ Quantity_ColorRGBA col;
XCAFDoc_ColorType type;
if ( argv[3] && argv[3][0] == 's' )
type = XCAFDoc_ColorSurf;
Handle(XCAFDoc_ColorTool) localTool = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
if (localTool->GetInstanceColor( aShape, type, col) )
{
- TCollection_AsciiString Entry;
- Entry = col.StringName ( col.Name() );
- di << Entry.ToCString();
+ if ((1 - col.Alpha()) < Precision::Confusion())
+ di << col.GetRGB().StringName(col.GetRGB().Name());
+ else
+ di << col.GetRGB().StringName(col.GetRGB().Name()) << " (" << col.Alpha() << ")";
}
return 0;
}
static Standard_Integer setStyledcolor (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
{
if (argc<6) {
- di<<"Use: "<<argv[0]<<" Doc shape R G B type(s/c)\n";
+ di<<"Use: "<<argv[0]<<" Doc shape R G B [alpha] type(s/c)\n";
return 1;
}
Handle(TDocStd_Document) Doc;
aShape = DBRep::Get(argv[2]);
Quantity_Color col ( Draw::Atof(argv[3]), Draw::Atof(argv[4]), Draw::Atof(argv[5]), Quantity_TOC_RGB );
- XCAFDoc_ColorType type;
- if ( argv[6] && argv[6][0] == 's' )
- type = XCAFDoc_ColorSurf;
- else if ( argv[6] && argv[6][0] == 'c' )
- type = XCAFDoc_ColorCurv;
- else
- type = XCAFDoc_ColorGen;
+ Quantity_ColorRGBA aColRGBA;
+ aColRGBA.SetRGB(col);
+ if (argc > 6 && (argv[6][0] != 's' && argv[6][0] != 'c')) {
+ aColRGBA.SetAlpha((Standard_ShortReal)(Draw::Atof(argv[6])));
+ }
+
+ Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
+ XCAFDoc_ColorType ctype = XCAFDoc_ColorGen;
+ if (argc > 6) {
+ if (argv[argc - 1][0] == 's')
+ ctype = XCAFDoc_ColorSurf;
+ else if (argv[argc - 1][0] == 'c')
+ ctype = XCAFDoc_ColorCurv;
+ }
Handle(XCAFDoc_ColorTool) localTool = XCAFDoc_DocumentTool::ColorTool(Doc->Main());
- if (!localTool->SetInstanceColor( aShape, type, col) )
+ if (!localTool->SetInstanceColor(aShape, ctype, aColRGBA))
{
di << "cannot set color for the indicated component\n";
return 1;
Standard_CString g = "XDE color's commands";
- di.Add ("XSetColor","Doc {Label|Shape} R G B [c|s]\t: Set color [R G B] to shape given by Label, "
+ di.Add ("XSetColor","Doc {Label|Shape} R G B [alpha] [c|s]\t: Set color [R G B] to shape given by Label, "
"type of color 's' - for surface, 'c' - for curve (default generic)",
__FILE__, setColor, g);
di.Add ("XGetAllColors","Doc \t: Print all colors that defined in document",
__FILE__, getAllColors, g);
- di.Add ("XAddColor","Doc R G B \t: Add color in document to color table",
+ di.Add ("XAddColor","Doc R G B [alpha]\t: Add color in document to color table",
__FILE__, addColor, g);
di.Add ("XRemoveColor","Doc Label \t: Remove color in document from color table",
__FILE__, removeColor, g);
- di.Add ("XFindColor","Doc R G B \t: Find label where indicated color is situated",
+ di.Add ("XFindColor","Doc R G B [alpha]\t: Find label where indicated color is situated",
__FILE__, findColor, g);
di.Add ("XUnsetColor","Doc {Label|Shape} ColorType \t: Unset color ",
di.Add ("XGetInstanceColor","Doc Shape \t: Return the color of component shape ",
__FILE__, getStyledcolor, g);
- di.Add ("XSetInstanceColor","Doc Shape color type \t: sets color for component of shape if SHUO structure exists already ",
+ di.Add ("XSetInstanceColor","Doc Shape R G B [alpha] type \t: sets color for component of shape if SHUO structure exists already ",
__FILE__, setStyledcolor, g);
}
--- /dev/null
+puts "========"
+puts "OCC28641"
+puts "========"
+puts ""
+####################################################
+# Data Exchange - Support alpha-channel of color
+####################################################
+
+pload OCAF
+
+# Create document with View
+NewDocument D_First BinXCAF
+box b 1 1 1
+explode b e
+explode b f
+XAddShape D_First b
+XSetColor D_First b_1 1 0 0 s
+XSetColor D_First b_2 1 1 0 0.3 s
+XSetColor D_First b_11 1 1 1 0.2 c
+XSetColor D_First b_10 0 1 1 c
+XAddColor D_First 0.5 0.5 1 0.1
+
+# Write file
+SaveAs D_First ${imagedir}/bug28521.xbf
+Close D_First
+# Read document
+XOpen ${imagedir}/bug28521.xbf D_Second
+
+# Results validation
+set isOK 1
+set color ""
+set alpha ""
+set prec 1e-7
+#0:1:2:1
+set res [XGetColor D_Second 0:1:2:1]
+if {$res != "RED"} {
+ set isOK 0
+}
+#0:1:2:2
+set res [XGetColor D_Second 0:1:2:2]
+regexp {([A-Z0-9]+) \(([0-9.+eE]+)\)} $res full color alpha
+if {$color != "YELLOW"} {
+ set isOK 0
+}
+if {[expr abs(0.3 - $alpha)] > $prec} {
+ set isOK 0
+}
+#0:1:2:3
+set res [XGetColor D_Second 0:1:2:3]
+regexp {([A-Z0-9]+) \(([0-9.+eE]+)\)} $res full color alpha
+if {$color != "WHITE"} {
+ set isOK 0
+}
+if {[expr abs(0.2 - $alpha)] > $prec} {
+ set isOK 0
+}
+#0:1:2:4
+set res [XGetColor D_Second 0:1:2:4]
+if {$res != "CYAN1"} {
+ set isOK 0
+}
+#0:1:2:5
+set res [XGetColor D_Second 0:1:2:5]
+regexp {([A-Z0-9]+) \(([0-9.+eE]+)\)} $res full color alpha
+if {$color != "LIGHTSLATEBLUE"} {
+ set isOK 0
+}
+if {[expr abs(0.1 - $alpha)] > $prec} {
+ set isOK 0
+}
+
+if {$isOK == 0} {
+ puts "Error: wrong color."
+}
+
+Close D_Second