mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-05 18:16:23 +03:00
0025518: Colors are not written to IGES 5.3
Writing of colors to IGES Face (510) and Solid (186) entities allowed since this is used by CAD systems (even if not allowed by IGES standard). Color assigned to surface, face and solid entities to ensure that different CAD systems will recognize them. Test-case for issue #25518
This commit is contained in:
parent
0b309a75c4
commit
06696fd835
@ -41,6 +41,7 @@
|
||||
#include <TDF_ChildIterator.hxx>
|
||||
#include <TDataStd_Name.hxx>
|
||||
#include <IGESData_NameEntity.hxx>
|
||||
#include <IGESSolid_Face.hxx>
|
||||
#include <TopTools_SequenceOfShape.hxx>
|
||||
#include <TColStd_HSequenceOfExtendedString.hxx>
|
||||
#include <NCollection_DataMap.hxx>
|
||||
@ -262,7 +263,7 @@ void IGESCAFControl_Writer::MakeColors (const TopoDS_Shape &S,
|
||||
// analyze whether current entity should get a color
|
||||
Standard_Boolean hasColor = Standard_False;
|
||||
Quantity_Color col;
|
||||
if ( S.ShapeType() == TopAbs_FACE ) {
|
||||
if ( S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SOLID) {
|
||||
if ( style.IsSetColorSurf() ) {
|
||||
hasColor = Standard_True;
|
||||
col = style.GetColorSurf();
|
||||
@ -299,6 +300,12 @@ void IGESCAFControl_Writer::MakeColors (const TopoDS_Shape &S,
|
||||
Handle(TransferBRep_ShapeMapper) mapper = TransferBRep::ShapeMapper ( FP, S );
|
||||
if ( FP->FindTypedTransient ( mapper, STANDARD_TYPE(IGESData_IGESEntity), ent ) ) {
|
||||
ent->InitColor ( colent, rank );
|
||||
Handle(IGESSolid_Face) ent_f = Handle(IGESSolid_Face)::DownCast(ent);
|
||||
if (!ent_f.IsNull())
|
||||
{
|
||||
if (!ent_f->Surface().IsNull())
|
||||
ent_f->Surface()->InitColor ( colent, rank );
|
||||
}
|
||||
}
|
||||
else {
|
||||
// may be S was splited during shape process
|
||||
@ -313,7 +320,16 @@ void IGESCAFControl_Writer::MakeColors (const TopoDS_Shape &S,
|
||||
for (i=1; i<=nb; i++) {
|
||||
Handle(Standard_Transient) t = TransientListBinder->Transient(i);
|
||||
ent = Handle(IGESData_IGESEntity)::DownCast(t);
|
||||
if (!ent.IsNull()) ent->InitColor ( colent, rank );
|
||||
if (!ent.IsNull())
|
||||
{
|
||||
ent->InitColor ( colent, rank );
|
||||
Handle(IGESSolid_Face) ent_f = Handle(IGESSolid_Face)::DownCast(ent);
|
||||
if (!ent_f.IsNull())
|
||||
{
|
||||
if (!ent_f->Surface().IsNull())
|
||||
ent_f->Surface()->InitColor ( colent, rank );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* // alternative: consider recursive mapping S -> compound -> entities
|
||||
|
@ -200,7 +200,7 @@ IGESData_DirChecker IGESSolid_ToolFace::DirChecker
|
||||
DC.Structure (IGESData_DefVoid);
|
||||
DC.LineFont (IGESData_DefVoid);
|
||||
DC.LineWeight (IGESData_DefVoid);
|
||||
DC.Color (IGESData_DefVoid);
|
||||
DC.Color (IGESData_DefAny);
|
||||
|
||||
DC.SubordinateStatusRequired(1);
|
||||
return DC;
|
||||
|
@ -183,7 +183,7 @@ IGESData_DirChecker IGESSolid_ToolManifoldSolid::DirChecker
|
||||
DC.Structure (IGESData_DefVoid);
|
||||
DC.LineFont (IGESData_DefVoid);
|
||||
DC.LineWeight (IGESData_DefVoid);
|
||||
DC.Color (IGESData_DefVoid);
|
||||
DC.Color (IGESData_DefAny);
|
||||
|
||||
return DC;
|
||||
}
|
||||
|
23
tests/bugs/iges/bug25518
Normal file
23
tests/bugs/iges/bug25518
Normal file
@ -0,0 +1,23 @@
|
||||
puts "========"
|
||||
puts "OCC25518"
|
||||
puts "========"
|
||||
puts ""
|
||||
######################################
|
||||
# Colors are not written to IGES 5.3
|
||||
######################################
|
||||
|
||||
catch {exec rm ${imagedir}/OCC25518.igs}
|
||||
psphere s 10
|
||||
XNewDoc D
|
||||
XAddShape D s
|
||||
XSetColor D s 0 0 1
|
||||
param write.iges.brep.mode 1
|
||||
WriteIges D ${imagedir}/OCC25518.igs
|
||||
ReadIges T ${imagedir}/OCC25518.igs
|
||||
if {[string trim [XGetAllColors T]] != "BLUE1"} {
|
||||
puts "ERROR: OCC25518 is reproduced. Color is lost."
|
||||
}
|
||||
XShow T
|
||||
vfit
|
||||
vsetdispmode 1
|
||||
set only_screen 1
|
Loading…
x
Reference in New Issue
Block a user