0022731: Error on attempt to write in IGES 5.3 the attached brep model
authorGKA <>
Fri, 27 Jan 2012 14:48:21 +0000 (14:48 +0000)
committerbugmaster <bugmaster@opencascade.com>
Mon, 5 Mar 2012 15:32:11 +0000 (19:32 +0400)
src/BRepToIGESBRep/BRepToIGESBRep_Entity.cxx
src/IGESControl/IGESControl_Writer.cxx

index e3297c3..416c63a 100755 (executable)
@@ -161,6 +161,8 @@ void BRepToIGESBRep_Entity::TransferVertexList()
 {
 
   Standard_Integer nbvertices = myVertices.Extent();
+  if(!nbvertices)
+    return;
   Handle(TColgp_HArray1OfXYZ) vertices= new TColgp_HArray1OfXYZ(1,nbvertices);
   Standard_Real Unit = GetUnit();
   Standard_Real X,Y,Z;
@@ -222,6 +224,8 @@ void BRepToIGESBRep_Entity::TransferEdgeList()
   Handle(IGESSolid_VertexList) myendlist;
 
   Standard_Integer nbedges = myEdges.Extent();
+  if(!nbedges)
+    return;
   Handle(IGESData_HArray1OfIGESEntity) Curves= 
     new IGESData_HArray1OfIGESEntity(1,nbedges);
   Handle(IGESSolid_HArray1OfVertexList) startVertexList = 
@@ -349,6 +353,8 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferShape
       // error message
     }  
   }
+  if(res.IsNull())
+    return res;
 
   TransferVertexList();
   TransferEdgeList();
@@ -785,7 +791,7 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompSolid (const Topo
   if (nbsolids == 1) {
     myent = ISolid;
   }
-  else {
+  else if(nbsolids > 1 ){
     Handle(IGESBasic_Group) IGroup = new IGESBasic_Group;
     IGroup->Init(Tab);
     myent = IGroup;
@@ -880,11 +886,11 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoD
       Tab->SetValue(itab,item);
     }
   }
-
+  
   if (nbshapes == 1) {
     res = IShape;
   }
-  else {
+  else if(nbshapes > 1) {
     Handle(IGESBasic_Group) IGroup = new IGESBasic_Group;
     IGroup->Init(Tab);
     res = IGroup;
index ff29b75..2e92fe6 100755 (executable)
@@ -110,6 +110,9 @@ Standard_Boolean IGESControl_Writer::AddShape (const TopoDS_Shape& theShape)
   BRepToIGESBRep_Entity B1;  B1.SetTransferProcess(theTP); B1.SetModel(themod);
   if (thecr) ent = B1.TransferShape(Shape);
   else       ent = B0.TransferShape(Shape);
+
+  if(ent.IsNull())
+    return Standard_False;
 //  modified by NIZHNY-EAP Tue Aug 29 11:37:18 2000 ___BEGIN___
   XSAlgo::AlgoContainer()->MergeTransferInfo(theTP, info);
 //  modified by NIZHNY-EAP Tue Aug 29 11:37:25 2000 ___END___
@@ -226,9 +229,12 @@ Standard_Boolean IGESControl_Writer::Write
 {
   if (!S) return Standard_False;
   ComputeModel();
+  Standard_Integer nbEnt = themod->NbEntities();
 #ifdef DEBUG
-  cout<<" IGES Write : "<<themod->NbEntities()<<" ent.s"<< flush;
+  cout<<" IGES Write : "<<nbEnt<<" ent.s"<< flush;
 #endif
+  if(!nbEnt)
+    return Standard_False;
   IGESData_IGESWriter IW (themod);
 //  ne pas oublier le mode fnes ... a transmettre a IW
   IW.SendModel (IGESSelect_WorkLibrary::DefineProtocol());