Skip to content

Commit d0fb61a

Browse files
Handle null TopoDS objects in the relevant typemap
Trying to solve tpaviot#600
1 parent 5416ecc commit d0fb61a

1 file changed

Lines changed: 39 additions & 37 deletions

File tree

src/SWIG_files/common/FunctionTransformers.i

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -128,44 +128,46 @@ FairCurve_Analysis & function transformation
128128
}
129129

130130
%typemap(out) TopoDS_Shape {
131-
TopAbs_ShapeEnum shape_type = $1.ShapeType();
132131
PyObject *resultobj = 0;
133-
switch (shape_type)
134-
{
135-
case TopAbs_COMPOUND:
136-
resultobj = SWIG_NewPointerObj((new TopoDS_Compound(static_cast< const TopoDS_Compound& >($1))),
137-
SWIGTYPE_p_TopoDS_Compound, SWIG_POINTER_OWN | 0 );
138-
break;
139-
case TopAbs_COMPSOLID:
140-
resultobj = SWIG_NewPointerObj((new TopoDS_CompSolid(static_cast< const TopoDS_CompSolid& >($1))),
141-
SWIGTYPE_p_TopoDS_CompSolid, SWIG_POINTER_OWN | 0 );
142-
break;
143-
case TopAbs_SOLID:
144-
resultobj = SWIG_NewPointerObj((new TopoDS_Solid(static_cast< const TopoDS_Solid& >($1))),
145-
SWIGTYPE_p_TopoDS_Solid, SWIG_POINTER_OWN | 0 );
146-
break;
147-
case TopAbs_SHELL:
148-
resultobj = SWIG_NewPointerObj((new TopoDS_Shell(static_cast< const TopoDS_Shell& >($1))),
149-
SWIGTYPE_p_TopoDS_Shell, SWIG_POINTER_OWN | 0 );
150-
break;
151-
case TopAbs_FACE:
152-
resultobj = SWIG_NewPointerObj((new TopoDS_Face(static_cast< const TopoDS_Face& >($1))),
153-
SWIGTYPE_p_TopoDS_Face, SWIG_POINTER_OWN | 0 );
154-
break;
155-
case TopAbs_WIRE:
156-
resultobj = SWIG_NewPointerObj((new TopoDS_Wire(static_cast< const TopoDS_Wire& >($1))),
157-
SWIGTYPE_p_TopoDS_Wire, SWIG_POINTER_OWN | 0 );
158-
break;
159-
case TopAbs_EDGE:
160-
resultobj = SWIG_NewPointerObj((new TopoDS_Edge(static_cast< const TopoDS_Edge& >($1))),
161-
SWIGTYPE_p_TopoDS_Edge, SWIG_POINTER_OWN | 0 );
162-
break;
163-
case TopAbs_VERTEX:
164-
resultobj = SWIG_NewPointerObj((new TopoDS_Vertex(static_cast< const TopoDS_Vertex& >($1))),
165-
SWIGTYPE_p_TopoDS_Vertex, SWIG_POINTER_OWN | 0 );
166-
break;
167-
default:
168-
break;
132+
if(!$1.IsNull()){
133+
TopAbs_ShapeEnum shape_type = $1.ShapeType();
134+
switch (shape_type)
135+
{
136+
case TopAbs_COMPOUND:
137+
resultobj = SWIG_NewPointerObj((new TopoDS_Compound(static_cast< const TopoDS_Compound& >($1))),
138+
SWIGTYPE_p_TopoDS_Compound, SWIG_POINTER_OWN | 0 );
139+
break;
140+
case TopAbs_COMPSOLID:
141+
resultobj = SWIG_NewPointerObj((new TopoDS_CompSolid(static_cast< const TopoDS_CompSolid& >($1))),
142+
SWIGTYPE_p_TopoDS_CompSolid, SWIG_POINTER_OWN | 0 );
143+
break;
144+
case TopAbs_SOLID:
145+
resultobj = SWIG_NewPointerObj((new TopoDS_Solid(static_cast< const TopoDS_Solid& >($1))),
146+
SWIGTYPE_p_TopoDS_Solid, SWIG_POINTER_OWN | 0 );
147+
break;
148+
case TopAbs_SHELL:
149+
resultobj = SWIG_NewPointerObj((new TopoDS_Shell(static_cast< const TopoDS_Shell& >($1))),
150+
SWIGTYPE_p_TopoDS_Shell, SWIG_POINTER_OWN | 0 );
151+
break;
152+
case TopAbs_FACE:
153+
resultobj = SWIG_NewPointerObj((new TopoDS_Face(static_cast< const TopoDS_Face& >($1))),
154+
SWIGTYPE_p_TopoDS_Face, SWIG_POINTER_OWN | 0 );
155+
break;
156+
case TopAbs_WIRE:
157+
resultobj = SWIG_NewPointerObj((new TopoDS_Wire(static_cast< const TopoDS_Wire& >($1))),
158+
SWIGTYPE_p_TopoDS_Wire, SWIG_POINTER_OWN | 0 );
159+
break;
160+
case TopAbs_EDGE:
161+
resultobj = SWIG_NewPointerObj((new TopoDS_Edge(static_cast< const TopoDS_Edge& >($1))),
162+
SWIGTYPE_p_TopoDS_Edge, SWIG_POINTER_OWN | 0 );
163+
break;
164+
case TopAbs_VERTEX:
165+
resultobj = SWIG_NewPointerObj((new TopoDS_Vertex(static_cast< const TopoDS_Vertex& >($1))),
166+
SWIGTYPE_p_TopoDS_Vertex, SWIG_POINTER_OWN | 0 );
167+
break;
168+
default:
169+
break;
170+
}
169171
}
170172
return resultobj;
171173
}

0 commit comments

Comments
 (0)