Fix for bug Bug IPAL20288 (4x: CRASH after trying to build a sketch).

This commit is contained in:
mzn 2008-09-10 14:02:58 +00:00
parent 81fdd49b0f
commit e8f00b5087
3 changed files with 16 additions and 14 deletions

View File

@ -648,13 +648,12 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation
* MakeSketcher * MakeSketcher
*/ */
//============================================================================= //=============================================================================
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcher Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcher (const char* theCommand,
(const TCollection_AsciiString& theCommand,
list<double> theWorkingPlane) list<double> theWorkingPlane)
{ {
SetErrorCode(KO); SetErrorCode(KO);
if (theCommand.IsEmpty()) return NULL; if (!theCommand || strcmp(theCommand, "") == 0) return NULL;
//Add a new Sketcher object //Add a new Sketcher object
Handle(GEOM_Object) aSketcher = GetEngine()->AddObject(GetDocID(), GEOM_SKETCHER); Handle(GEOM_Object) aSketcher = GetEngine()->AddObject(GetDocID(), GEOM_SKETCHER);
@ -669,7 +668,8 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcher
GEOMImpl_ISketcher aCI (aFunction); GEOMImpl_ISketcher aCI (aFunction);
aCI.SetCommand(theCommand); TCollection_AsciiString aCommand((char*) theCommand);
aCI.SetCommand(aCommand);
int ind = 1; int ind = 1;
list<double>::iterator it = theWorkingPlane.begin(); list<double>::iterator it = theWorkingPlane.begin();
@ -694,7 +694,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcher
//Make a Python command //Make a Python command
GEOM::TPythonDump pd (aFunction); GEOM::TPythonDump pd (aFunction);
pd << aSketcher << " = geompy.MakeSketcher(\"" << theCommand.ToCString() << "\", ["; pd << aSketcher << " = geompy.MakeSketcher(\"" << aCommand.ToCString() << "\", [";
it = theWorkingPlane.begin(); it = theWorkingPlane.begin();
pd << (*it++); pd << (*it++);
@ -713,12 +713,12 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcher
*/ */
//============================================================================= //=============================================================================
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcherOnPlane Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcherOnPlane
(const TCollection_AsciiString& theCommand, (const char* theCommand,
Handle(GEOM_Object) theWorkingPlane) Handle(GEOM_Object) theWorkingPlane)
{ {
SetErrorCode(KO); SetErrorCode(KO);
if (theCommand.IsEmpty()) return NULL; if (!theCommand || strcmp(theCommand, "") == 0) return NULL;
//Add a new Sketcher object //Add a new Sketcher object
Handle(GEOM_Object) aSketcher = GetEngine()->AddObject(GetDocID(), GEOM_SKETCHER); Handle(GEOM_Object) aSketcher = GetEngine()->AddObject(GetDocID(), GEOM_SKETCHER);
@ -732,7 +732,9 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcherOnPlane
if (aFunction->GetDriverGUID() != GEOMImpl_SketcherDriver::GetID()) return NULL; if (aFunction->GetDriverGUID() != GEOMImpl_SketcherDriver::GetID()) return NULL;
GEOMImpl_ISketcher aCI (aFunction); GEOMImpl_ISketcher aCI (aFunction);
aCI.SetCommand(theCommand);
TCollection_AsciiString aCommand((char*) theCommand);
aCI.SetCommand(aCommand);
Handle(GEOM_Function) aRefPlane = theWorkingPlane->GetLastFunction(); Handle(GEOM_Function) aRefPlane = theWorkingPlane->GetLastFunction();
if (aRefPlane.IsNull()) return NULL; if (aRefPlane.IsNull()) return NULL;
@ -756,7 +758,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcherOnPlane
//Make a Python command //Make a Python command
GEOM::TPythonDump (aFunction) << aSketcher << " = geompy.MakeSketcherOnPlane(\"" GEOM::TPythonDump (aFunction) << aSketcher << " = geompy.MakeSketcherOnPlane(\""
<< theCommand.ToCString() << "\", " << theWorkingPlane << " )"; << aCommand.ToCString() << "\", " << theWorkingPlane << " )";
SetErrorCode(OK); SetErrorCode(OK);
return aSketcher; return aSketcher;

View File

@ -63,9 +63,9 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations {
Standard_EXPORT Handle(GEOM_Object) MakeSplineBezier (list<Handle(GEOM_Object)> thePoints); Standard_EXPORT Handle(GEOM_Object) MakeSplineBezier (list<Handle(GEOM_Object)> thePoints);
Standard_EXPORT Handle(GEOM_Object) MakeSplineInterpolation (list<Handle(GEOM_Object)> thePoints); Standard_EXPORT Handle(GEOM_Object) MakeSplineInterpolation (list<Handle(GEOM_Object)> thePoints);
Standard_EXPORT Handle(GEOM_Object) MakeSketcher (const TCollection_AsciiString& theCommand, Standard_EXPORT Handle(GEOM_Object) MakeSketcher (const char* theCommand,
list<double> theWorkingPlane); list<double> theWorkingPlane);
Standard_EXPORT Handle(GEOM_Object) MakeSketcherOnPlane (const TCollection_AsciiString& theCommand, Standard_EXPORT Handle(GEOM_Object) MakeSketcherOnPlane (const char* theCommand,
Handle(GEOM_Object) theWorkingPlane); Handle(GEOM_Object) theWorkingPlane);
}; };

View File

@ -400,7 +400,7 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSketcher
// Make Sketcher // Make Sketcher
Handle(GEOM_Object) anObject = Handle(GEOM_Object) anObject =
GetOperations()->MakeSketcher((char*)theCommand, aWorkingPlane); GetOperations()->MakeSketcher(theCommand, aWorkingPlane);
if (!GetOperations()->IsDone() || anObject.IsNull()) if (!GetOperations()->IsDone() || anObject.IsNull())
return GEOM::GEOM_Object::_nil(); return GEOM::GEOM_Object::_nil();
@ -424,7 +424,7 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSketcherOnPlane
// Make Sketcher // Make Sketcher
Handle(GEOM_Object) anObject = Handle(GEOM_Object) anObject =
GetOperations()->MakeSketcherOnPlane((char*)theCommand, aWorkingPlane); GetOperations()->MakeSketcherOnPlane(theCommand, aWorkingPlane);
if (!GetOperations()->IsDone() || anObject.IsNull()) if (!GetOperations()->IsDone() || anObject.IsNull())
return GEOM::GEOM_Object::_nil(); return GEOM::GEOM_Object::_nil();