+ 0000478: Segfault on insert part into 2D drawing (workaround)
git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5144 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
parent
a512879ba1
commit
e35a042c2d
|
@ -60,6 +60,12 @@ if(MSVC)
|
||||||
ADD_MSVC_PRECOMPILED_HEADER("PreCompiled.h" "PreCompiled.cpp" Drawing_CPP_SRCS)
|
ADD_MSVC_PRECOMPILED_HEADER("PreCompiled.h" "PreCompiled.cpp" Drawing_CPP_SRCS)
|
||||||
endif(MSVC)
|
endif(MSVC)
|
||||||
|
|
||||||
|
# Set special compiler flag to convert a SIGSEV into an exception
|
||||||
|
# to handle issue #0000478.
|
||||||
|
IF(MSVC)
|
||||||
|
SET_SOURCE_FILES_PROPERTIES(ProjectionAlgos.cpp PROPERTIES COMPILE_FLAGS "/EHa")
|
||||||
|
ENDIF(MSVC)
|
||||||
|
|
||||||
add_library(Drawing SHARED ${Drawing_SRCS} ${Features_SRCS} ${DrawingAlgos_SRCS})
|
add_library(Drawing SHARED ${Drawing_SRCS} ${Features_SRCS} ${DrawingAlgos_SRCS})
|
||||||
target_link_libraries(Drawing ${Drawing_LIBS})
|
target_link_libraries(Drawing ${Drawing_LIBS})
|
||||||
fc_copy_script("Mod/Drawing" "Drawing" Init.py)
|
fc_copy_script("Mod/Drawing" "Drawing" Init.py)
|
||||||
|
|
|
@ -77,33 +77,39 @@ App::DocumentObjectExecReturn *FeatureProjection::execute(void)
|
||||||
if (shape.IsNull())
|
if (shape.IsNull())
|
||||||
return new App::DocumentObjectExecReturn("Linked shape object is empty");
|
return new App::DocumentObjectExecReturn("Linked shape object is empty");
|
||||||
|
|
||||||
const Base::Vector3f& dir = Direction.getValue();
|
try {
|
||||||
Drawing::ProjectionAlgos alg(shape, dir);
|
const Base::Vector3f& dir = Direction.getValue();
|
||||||
|
Drawing::ProjectionAlgos alg(shape, dir);
|
||||||
|
|
||||||
TopoDS_Compound comp;
|
TopoDS_Compound comp;
|
||||||
BRep_Builder builder;
|
BRep_Builder builder;
|
||||||
builder.MakeCompound(comp);
|
builder.MakeCompound(comp);
|
||||||
if (!alg.V.IsNull() && VCompound.getValue())
|
if (!alg.V.IsNull() && VCompound.getValue())
|
||||||
builder.Add(comp, alg.V);
|
builder.Add(comp, alg.V);
|
||||||
if (!alg.V1.IsNull() && Rg1LineVCompound.getValue())
|
if (!alg.V1.IsNull() && Rg1LineVCompound.getValue())
|
||||||
builder.Add(comp, alg.V1);
|
builder.Add(comp, alg.V1);
|
||||||
if (!alg.VN.IsNull() && RgNLineVCompound.getValue())
|
if (!alg.VN.IsNull() && RgNLineVCompound.getValue())
|
||||||
builder.Add(comp, alg.VN);
|
builder.Add(comp, alg.VN);
|
||||||
if (!alg.VO.IsNull() && OutLineVCompound.getValue())
|
if (!alg.VO.IsNull() && OutLineVCompound.getValue())
|
||||||
builder.Add(comp, alg.VO);
|
builder.Add(comp, alg.VO);
|
||||||
if (!alg.VI.IsNull() && IsoLineVCompound.getValue())
|
if (!alg.VI.IsNull() && IsoLineVCompound.getValue())
|
||||||
builder.Add(comp, alg.VI);
|
builder.Add(comp, alg.VI);
|
||||||
if (!alg.H.IsNull() && HCompound.getValue())
|
if (!alg.H.IsNull() && HCompound.getValue())
|
||||||
builder.Add(comp, alg.H);
|
builder.Add(comp, alg.H);
|
||||||
if (!alg.H1.IsNull() && Rg1LineHCompound.getValue())
|
if (!alg.H1.IsNull() && Rg1LineHCompound.getValue())
|
||||||
builder.Add(comp, alg.H1);
|
builder.Add(comp, alg.H1);
|
||||||
if (!alg.HN.IsNull() && RgNLineHCompound.getValue())
|
if (!alg.HN.IsNull() && RgNLineHCompound.getValue())
|
||||||
builder.Add(comp, alg.HN);
|
builder.Add(comp, alg.HN);
|
||||||
if (!alg.HO.IsNull() && OutLineHCompound.getValue())
|
if (!alg.HO.IsNull() && OutLineHCompound.getValue())
|
||||||
builder.Add(comp, alg.HO);
|
builder.Add(comp, alg.HO);
|
||||||
if (!alg.HI.IsNull() && IsoLineHCompound.getValue())
|
if (!alg.HI.IsNull() && IsoLineHCompound.getValue())
|
||||||
builder.Add(comp, alg.HI);
|
builder.Add(comp, alg.HI);
|
||||||
|
|
||||||
Shape.setValue(comp);
|
Shape.setValue(comp);
|
||||||
return App::DocumentObject::StdReturn;
|
return App::DocumentObject::StdReturn;
|
||||||
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||||
|
return new App::DocumentObjectExecReturn(e->GetMessageString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,11 +119,19 @@ void ProjectionAlgos::execute(void)
|
||||||
Handle( HLRBRep_Algo ) brep_hlr = new HLRBRep_Algo;
|
Handle( HLRBRep_Algo ) brep_hlr = new HLRBRep_Algo;
|
||||||
brep_hlr->Add(Input);
|
brep_hlr->Add(Input);
|
||||||
|
|
||||||
gp_Ax2 transform(gp_Pnt(0,0,0),gp_Dir(Direction.x,Direction.y,Direction.z));
|
try {
|
||||||
HLRAlgo_Projector projector( transform );
|
#if defined(__GNUC__) && defined (FC_OS_LINUX)
|
||||||
brep_hlr->Projector(projector);
|
Base::SignalException se;
|
||||||
brep_hlr->Update();
|
#endif
|
||||||
brep_hlr->Hide();
|
gp_Ax2 transform(gp_Pnt(0,0,0),gp_Dir(Direction.x,Direction.y,Direction.z));
|
||||||
|
HLRAlgo_Projector projector( transform );
|
||||||
|
brep_hlr->Projector(projector);
|
||||||
|
brep_hlr->Update();
|
||||||
|
brep_hlr->Hide();
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
Standard_Failure::Raise("Fatal error occurred while projecting shape");
|
||||||
|
}
|
||||||
|
|
||||||
// extracting the result sets:
|
// extracting the result sets:
|
||||||
HLRBRep_HLRToShape shapes( brep_hlr );
|
HLRBRep_HLRToShape shapes( brep_hlr );
|
||||||
|
|
|
@ -230,8 +230,8 @@ SET(Part_SRCS
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(Part_Scripts
|
SET(Part_Scripts
|
||||||
Init.py
|
Init.py
|
||||||
TestPartApp.py
|
TestPartApp.py
|
||||||
MakeBottle.py
|
MakeBottle.py
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user