summaryrefslogtreecommitdiff
path: root/src/IGESControl/IGESControl_ActorWrite.cxx
blob: d294eddd6ac879111b1fe75033d0ec67e8a6e2d1 (plain)
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
#include <IGESControl_ActorWrite.ixx>
#include <TransferBRep_ShapeMapper.hxx>
#include <Interface_Macros.hxx>
#include <IGESData_IGESModel.hxx>

#include <BRepToIGES_BREntity.hxx>
#include <BRepToIGESBRep_Entity.hxx>

#include <Transfer_TransientMapper.hxx>
#include <Geom_Curve.hxx>
#include <Geom_Surface.hxx>
#include <GeomToIGES_GeomCurve.hxx>
#include <GeomToIGES_GeomSurface.hxx>
#include <XSAlgo.hxx>
#include <XSAlgo_AlgoContainer.hxx>
#include <Interface_Static.hxx>

IGESControl_ActorWrite::IGESControl_ActorWrite ()  {  ModeTrans() = 0;  }

Standard_Boolean  IGESControl_ActorWrite::Recognize
  (const Handle(Transfer_Finder)& start)
{
  DeclareAndCast(TransferBRep_ShapeMapper,shmap,start);
  if (!shmap.IsNull()) return Standard_True;
  DeclareAndCast(Transfer_TransientMapper,gemap,start);
  if (!gemap.IsNull()) {
    Handle(Standard_Transient) geom = gemap->Value();
    DeclareAndCast(Geom_Curve,Curve,geom);
    DeclareAndCast(Geom_Surface,Surf,geom);
    if (!Curve.IsNull() || !Surf.IsNull()) return Standard_True;
  }
  return Standard_False;
}

Handle(Transfer_Binder)  IGESControl_ActorWrite::Transfer
  (const Handle(Transfer_Finder)& start,
   const Handle(Transfer_FinderProcess)& FP)
{
  XSAlgo::AlgoContainer()->PrepareForTransfer();
    
  DeclareAndCast(IGESData_IGESModel,modl,FP->Model());
  if (modl.IsNull()) return NullResult();
  if (themodetrans < 0 || themodetrans > 1) return NullResult();
  Handle(Standard_Transient) ent;

  DeclareAndCast(TransferBRep_ShapeMapper,shmap,start);
  if (!shmap.IsNull()) {
    TopoDS_Shape shape = shmap->Value();
    if (shape.IsNull()) return NullResult();
//  modified by NIZHNY-EAP Tue Aug 29 11:16:54 2000 ___BEGIN___
    Handle(Standard_Transient) info;
    Standard_Real Tol = Interface_Static::RVal("write.precision.val");
    Standard_Real maxTol = Interface_Static::RVal("read.maxprecision.val");
    shape = XSAlgo::AlgoContainer()->ProcessShape( shape, Tol, maxTol, 
                                                   "write.iges.resource.name", 
                                                   "write.iges.sequence", info );
//  modified by NIZHNY-EAP Tue Aug 29 11:17:01 2000 ___END___

    BRepToIGES_BREntity   BR0; BR0.SetModel(modl);  BR0.SetTransferProcess(FP);
    BRepToIGESBRep_Entity BR1; BR1.SetModel(modl);  BR1.SetTransferProcess(FP);

    if (themodetrans == 0) ent = BR0.TransferShape(shape);
    if (themodetrans == 1) ent = BR1.TransferShape(shape);
//  modified by NIZHNY-EAP Tue Aug 29 11:37:18 2000 ___BEGIN___
    XSAlgo::AlgoContainer()->MergeTransferInfo(FP, info);
//  modified by NIZHNY-EAP Tue Aug 29 11:37:25 2000 ___END___
    if (!ent.IsNull()) return TransientResult(ent);
  }
  DeclareAndCast(Transfer_TransientMapper,gemap,start);
  if (!gemap.IsNull()) {
    Handle(Standard_Transient) geom = gemap->Value();
    DeclareAndCast(Geom_Curve,Curve,geom);
    DeclareAndCast(Geom_Surface,Surf,geom);
 
//  On reconnait : Curve et Surface de Geom
//   quid de Point; Geom2d ?
 
//  GeomToIGES_GeomPoint GP;
    GeomToIGES_GeomCurve GC;    GC.SetModel(modl);
    GeomToIGES_GeomSurface GS;  GS.SetModel(modl);
    if (!Curve.IsNull())
      ent = GC.TransferCurve(Curve,Curve->FirstParameter(),Curve->LastParameter())
;
    else if (!Surf.IsNull()) {
      Standard_Real U1,U2,V1,V2;
      Surf->Bounds(U1,U2,V1,V2);
      ent = GS.TransferSurface(Surf,U1,U2,V1,V2);
    }
    if (!ent.IsNull()) return TransientResult(ent);
  }

  return NullResult();
}