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
|
// File: TopoDSToStep_MakeStepVertex.cxx
// Created: Wed Nov 30 14:53:36 1994
// Author: Frederic MAUPAS
// <fma@bibox>
#include <TopoDSToStep_MakeStepVertex.ixx>
#include <GeomToStep_MakeCartesianPoint.hxx>
#include <BRep_Tool.hxx>
#include <StepGeom_CartesianPoint.hxx>
#include <StepShape_VertexPoint.hxx>
#include <gp_Pnt.hxx>
#include <TransferBRep_ShapeMapper.hxx>
#include <TCollection_HAsciiString.hxx>
// Processing of non-manifold topology (ssv; 11.11.2010)
#include <TransferBRep.hxx>
#include <Interface_Static.hxx>
// ----------------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------------
TopoDSToStep_MakeStepVertex::TopoDSToStep_MakeStepVertex()
{
done = Standard_False;
}
TopoDSToStep_MakeStepVertex::TopoDSToStep_MakeStepVertex
(const TopoDS_Vertex& V,
TopoDSToStep_Tool& T,
const Handle(Transfer_FinderProcess)& FP)
{
done = Standard_False;
Init(V, T, FP);
}
// ----------------------------------------------------------------------------
// Method : Init
// Purpose :
// ----------------------------------------------------------------------------
void TopoDSToStep_MakeStepVertex::Init(const TopoDS_Vertex& aVertex,
TopoDSToStep_Tool& aTool,
const Handle(Transfer_FinderProcess)& FP)
{
aTool.SetCurrentVertex(aVertex);
// [BEGIN] Processing non-manifold topology (ssv; 11.11.2010)
Standard_Boolean isNMMode = Interface_Static::IVal("write.step.nonmanifold");
if (isNMMode) {
Handle(StepShape_VertexPoint) aVP;
Handle(TransferBRep_ShapeMapper) aSTEPMapper = TransferBRep::ShapeMapper(FP, aVertex);
if ( FP->FindTypedTransient(aSTEPMapper, STANDARD_TYPE(StepShape_VertexPoint), aVP) ) {
// Non-manifold topology detected
myError = TopoDSToStep_VertexOther;
myResult = aVP;
done = Standard_True;
return;
}
}
// [END] Processing non-manifold topology (ssv; 11.11.2010)
if (aTool.IsBound(aVertex)) {
myError = TopoDSToStep_VertexOther;
done = Standard_True;
myResult = aTool.Find(aVertex);
return;
}
gp_Pnt P;
P = BRep_Tool::Pnt(aVertex);
GeomToStep_MakeCartesianPoint MkPoint(P);
Handle(StepGeom_CartesianPoint) Gpms = MkPoint.Value();
Handle(StepShape_VertexPoint) Vpms =
new StepShape_VertexPoint();
Handle(TCollection_HAsciiString) aName =
new TCollection_HAsciiString("");
Vpms->Init(aName, Gpms);
aTool.Bind(aVertex,Vpms);
myError = TopoDSToStep_VertexDone;
done = Standard_True;
myResult = Vpms;
}
// ----------------------------------------------------------------------------
// Method : Value
// Purpose :
// ----------------------------------------------------------------------------
const Handle(StepShape_TopologicalRepresentationItem)& TopoDSToStep_MakeStepVertex::Value() const
{
StdFail_NotDone_Raise_if(!done,"");
return myResult;
}
// ----------------------------------------------------------------------------
// Method : Error
// Purpose :
// ----------------------------------------------------------------------------
TopoDSToStep_MakeVertexError TopoDSToStep_MakeStepVertex::Error() const
{
return myError;
}
|