1 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License.
9 // This library is distributed in the hope that it will be useful
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include <Standard_Stream.hxx>
22 #include <GEOMImpl_ICurvesOperations.hxx>
24 #include <GEOM_Function.hxx>
25 #include <GEOM_PythonDump.hxx>
27 #include <GEOMImpl_Types.hxx>
29 #include <GEOMImpl_PolylineDriver.hxx>
30 #include <GEOMImpl_CircleDriver.hxx>
31 #include <GEOMImpl_SplineDriver.hxx>
32 #include <GEOMImpl_EllipseDriver.hxx>
33 #include <GEOMImpl_ArcDriver.hxx>
34 #include <GEOMImpl_SketcherDriver.hxx>
36 #include <GEOMImpl_IPolyline.hxx>
37 #include <GEOMImpl_ICircle.hxx>
38 #include <GEOMImpl_ISpline.hxx>
39 #include <GEOMImpl_IEllipse.hxx>
40 #include <GEOMImpl_IArc.hxx>
41 #include <GEOMImpl_ISketcher.hxx>
43 #include "utilities.h"
45 #include <TDF_Tool.hxx>
47 #include <Standard_Failure.hxx>
48 #include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
50 //=============================================================================
54 //=============================================================================
55 GEOMImpl_ICurvesOperations::GEOMImpl_ICurvesOperations (GEOM_Engine* theEngine, int theDocID)
56 : GEOM_IOperations(theEngine, theDocID)
58 MESSAGE("GEOMImpl_ICurvesOperations::GEOMImpl_ICurvesOperations");
61 //=============================================================================
65 //=============================================================================
66 GEOMImpl_ICurvesOperations::~GEOMImpl_ICurvesOperations()
68 MESSAGE("GEOMImpl_ICurvesOperations::~GEOMImpl_ICurvesOperations");
72 //=============================================================================
76 //=============================================================================
77 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline (list<Handle(GEOM_Object)> thePoints)
81 //Add a new Polyline object
82 Handle(GEOM_Object) aPolyline = GetEngine()->AddObject(GetDocID(), GEOM_POLYLINE);
84 //Add a new Polyline function for creation a polyline relatively to points set
85 Handle(GEOM_Function) aFunction =
86 aPolyline->AddFunction(GEOMImpl_PolylineDriver::GetID(), POLYLINE_POINTS);
87 if (aFunction.IsNull()) return NULL;
89 //Check if the function is set correctly
90 if (aFunction->GetDriverGUID() != GEOMImpl_PolylineDriver::GetID()) return NULL;
92 GEOMImpl_IPolyline aCI (aFunction);
94 int aLen = thePoints.size();
98 list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
99 for (; it != thePoints.end(); it++, ind++) {
100 Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
101 if (aRefPnt.IsNull()) {
102 SetErrorCode("NULL point for Polyline");
105 aCI.SetPoint(ind, aRefPnt);
108 //Compute the Polyline value
110 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
113 if (!GetSolver()->ComputeFunction(aFunction)) {
114 SetErrorCode("Polyline driver failed");
118 catch (Standard_Failure) {
119 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
120 SetErrorCode(aFail->GetMessageString());
124 //Make a Python command
125 GEOM::TPythonDump pd (aFunction);
126 pd << aPolyline << " = geompy.MakePolyline([";
128 it = thePoints.begin();
130 while (it != thePoints.end()) {
131 pd << ", " << (*it++);
139 //=============================================================================
143 //=============================================================================
144 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCircleThreePnt (Handle(GEOM_Object) thePnt1,
145 Handle(GEOM_Object) thePnt2,
146 Handle(GEOM_Object) thePnt3)
150 if (thePnt1.IsNull() || thePnt2.IsNull() || thePnt3.IsNull()) return NULL;
152 //Add a new Circle object
153 Handle(GEOM_Object) aCircle = GetEngine()->AddObject(GetDocID(), GEOM_CIRCLE);
155 //Add a new Circle function for creation a circle relatively to three points
156 Handle(GEOM_Function) aFunction =
157 aCircle->AddFunction(GEOMImpl_CircleDriver::GetID(), CIRCLE_THREE_PNT);
158 if (aFunction.IsNull()) return NULL;
160 //Check if the function is set correctly
161 if (aFunction->GetDriverGUID() != GEOMImpl_CircleDriver::GetID()) return NULL;
163 GEOMImpl_ICircle aCI (aFunction);
165 Handle(GEOM_Function) aRefPnt1 = thePnt1->GetLastFunction();
166 Handle(GEOM_Function) aRefPnt2 = thePnt2->GetLastFunction();
167 Handle(GEOM_Function) aRefPnt3 = thePnt3->GetLastFunction();
169 if (aRefPnt1.IsNull() || aRefPnt2.IsNull() || aRefPnt3.IsNull()) return NULL;
171 aCI.SetPoint1(aRefPnt1);
172 aCI.SetPoint2(aRefPnt2);
173 aCI.SetPoint3(aRefPnt3);
175 //Compute the Circle value
177 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
180 if (!GetSolver()->ComputeFunction(aFunction)) {
181 SetErrorCode("Circle driver failed");
185 catch (Standard_Failure) {
186 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
187 SetErrorCode(aFail->GetMessageString());
191 //Make a Python command
192 GEOM::TPythonDump(aFunction) << aCircle << " = geompy.MakeCircleThreePnt("
193 << thePnt1 << ", " << thePnt2 << ", " << thePnt3 << ")";
199 //=============================================================================
201 * MakeCircleCenter2Pnt
203 //=============================================================================
204 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCircleCenter2Pnt (Handle(GEOM_Object) thePnt1,
205 Handle(GEOM_Object) thePnt2,
206 Handle(GEOM_Object) thePnt3)
210 if (thePnt1.IsNull() || thePnt2.IsNull() || thePnt3.IsNull()) return NULL;
212 //Add a new Circle object
213 Handle(GEOM_Object) aCircle = GetEngine()->AddObject(GetDocID(), GEOM_CIRCLE);
215 //Add a new Circle function for creation a circle relatively to center and 2 points
216 Handle(GEOM_Function) aFunction =
217 aCircle->AddFunction(GEOMImpl_CircleDriver::GetID(), CIRCLE_CENTER_TWO_PNT);
218 if (aFunction.IsNull()) return NULL;
220 //Check if the function is set correctly
221 if (aFunction->GetDriverGUID() != GEOMImpl_CircleDriver::GetID()) return NULL;
223 GEOMImpl_ICircle aCI (aFunction);
225 Handle(GEOM_Function) aRefPnt1 = thePnt1->GetLastFunction();
226 Handle(GEOM_Function) aRefPnt2 = thePnt2->GetLastFunction();
227 Handle(GEOM_Function) aRefPnt3 = thePnt3->GetLastFunction();
229 if (aRefPnt1.IsNull() || aRefPnt2.IsNull() || aRefPnt3.IsNull()) return NULL;
231 aCI.SetPoint1(aRefPnt1);
232 aCI.SetPoint2(aRefPnt2);
233 aCI.SetPoint3(aRefPnt3);
235 //Compute the Circle value
237 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
240 if (!GetSolver()->ComputeFunction(aFunction)) {
241 SetErrorCode("Circle driver failed");
245 catch (Standard_Failure) {
246 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
247 SetErrorCode(aFail->GetMessageString());
251 //Make a Python command
252 GEOM::TPythonDump(aFunction) << aCircle << " = geompy.MakeCircleCenter2Pnt("
253 << thePnt1 << ", " << thePnt2 << ", " << thePnt3 << ")";
259 //=============================================================================
263 //=============================================================================
264 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCirclePntVecR
265 (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, double theR)
269 if (thePnt.IsNull() || theVec.IsNull()) return NULL;
271 //Add a new Circle object
272 Handle(GEOM_Object) aCircle = GetEngine()->AddObject(GetDocID(), GEOM_CIRCLE);
274 //Add a new Circle function for creation a circle relatively to point and vector
275 Handle(GEOM_Function) aFunction =
276 aCircle->AddFunction(GEOMImpl_CircleDriver::GetID(), CIRCLE_PNT_VEC_R);
277 if (aFunction.IsNull()) return NULL;
279 //Check if the function is set correctly
280 if (aFunction->GetDriverGUID() != GEOMImpl_CircleDriver::GetID()) return NULL;
282 GEOMImpl_ICircle aCI (aFunction);
284 Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction();
285 Handle(GEOM_Function) aRefVec = theVec->GetLastFunction();
287 if (aRefPnt.IsNull() || aRefVec.IsNull()) return NULL;
289 aCI.SetCenter(aRefPnt);
290 aCI.SetVector(aRefVec);
293 //Compute the Circle value
295 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
298 if (!GetSolver()->ComputeFunction(aFunction)) {
299 SetErrorCode("Circle driver failed");
303 catch (Standard_Failure) {
304 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
305 SetErrorCode(aFail->GetMessageString());
309 //Make a Python command
310 GEOM::TPythonDump(aFunction) << aCircle << " = geompy.MakeCircle("
311 << thePnt << ", " << theVec << ", " << theR << ")";
317 //=============================================================================
321 //=============================================================================
322 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeEllipse
323 (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec,
324 double theRMajor, double theRMinor)
328 if (thePnt.IsNull() || theVec.IsNull()) return NULL;
330 //Add a new Ellipse object
331 Handle(GEOM_Object) anEll = GetEngine()->AddObject(GetDocID(), GEOM_ELLIPSE);
333 //Add a new Ellipse function
334 Handle(GEOM_Function) aFunction =
335 anEll->AddFunction(GEOMImpl_EllipseDriver::GetID(), ELLIPSE_PNT_VEC_RR);
336 if (aFunction.IsNull()) return NULL;
338 //Check if the function is set correctly
339 if (aFunction->GetDriverGUID() != GEOMImpl_EllipseDriver::GetID()) return NULL;
341 GEOMImpl_IEllipse aCI (aFunction);
343 Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction();
344 Handle(GEOM_Function) aRefVec = theVec->GetLastFunction();
346 if (aRefPnt.IsNull() || aRefVec.IsNull()) return NULL;
348 aCI.SetCenter(aRefPnt);
349 aCI.SetVector(aRefVec);
350 aCI.SetRMajor(theRMajor);
351 aCI.SetRMinor(theRMinor);
353 //Compute the Ellipse value
355 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
358 if (!GetSolver()->ComputeFunction(aFunction)) {
359 SetErrorCode("Ellipse driver failed");
363 catch (Standard_Failure) {
364 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
365 SetErrorCode(aFail->GetMessageString());
369 //Make a Python command
370 GEOM::TPythonDump(aFunction) << anEll << " = geompy.MakeEllipse("
371 << thePnt << ", " << theVec << ", " << theRMajor << ", " << theRMinor << ")";
377 //=============================================================================
381 //=============================================================================
382 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeArc (Handle(GEOM_Object) thePnt1,
383 Handle(GEOM_Object) thePnt2,
384 Handle(GEOM_Object) thePnt3)
388 if (thePnt1.IsNull() || thePnt2.IsNull() || thePnt3.IsNull()) return NULL;
390 //Add a new Circle Arc object
391 Handle(GEOM_Object) anArc = GetEngine()->AddObject(GetDocID(), GEOM_CIRC_ARC);
393 //Add a new Circle Arc function
394 Handle(GEOM_Function) aFunction =
395 anArc->AddFunction(GEOMImpl_ArcDriver::GetID(), CIRC_ARC_THREE_PNT);
397 if (aFunction.IsNull()) return NULL;
399 //Check if the function is set correctly
400 if (aFunction->GetDriverGUID() != GEOMImpl_ArcDriver::GetID()) return NULL;
401 GEOMImpl_IArc aCI (aFunction);
403 Handle(GEOM_Function) aRefPnt1 = thePnt1->GetLastFunction();
404 Handle(GEOM_Function) aRefPnt2 = thePnt2->GetLastFunction();
405 Handle(GEOM_Function) aRefPnt3 = thePnt3->GetLastFunction();
408 if (aRefPnt1.IsNull() || aRefPnt2.IsNull() || aRefPnt3.IsNull()) return NULL;
410 aCI.SetPoint1(aRefPnt1);
411 aCI.SetPoint2(aRefPnt2);
412 aCI.SetPoint3(aRefPnt3);
414 //Compute the Arc value
416 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
419 if (!GetSolver()->ComputeFunction(aFunction)) {
420 SetErrorCode("Arc driver failed");
424 catch (Standard_Failure) {
425 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
426 SetErrorCode(aFail->GetMessageString());
430 //Make a Python command
431 GEOM::TPythonDump(aFunction) << anArc << " = geompy.MakeArc("
432 << thePnt1 << ", " << thePnt2 << ", " << thePnt3 << ")";
438 //=============================================================================
442 //=============================================================================
443 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeArcCenter (Handle(GEOM_Object) thePnt1,
444 Handle(GEOM_Object) thePnt2,
445 Handle(GEOM_Object) thePnt3,
449 if (thePnt1.IsNull() || thePnt2.IsNull() || thePnt3.IsNull()) return NULL;
451 //Add a new Circle Arc object
452 Handle(GEOM_Object) anArc = GetEngine()->AddObject(GetDocID(), GEOM_CIRC_ARC);
454 //Add a new Circle Arc function
455 Handle(GEOM_Function) aFunction =
456 anArc->AddFunction(GEOMImpl_ArcDriver::GetID(), CIRC_ARC_CENTER);
457 if (aFunction.IsNull()) return NULL;
459 //Check if the function is set correctly
460 if (aFunction->GetDriverGUID() != GEOMImpl_ArcDriver::GetID()) return NULL;
462 GEOMImpl_IArc aCI (aFunction);
464 Handle(GEOM_Function) aRefPnt1 = thePnt1->GetLastFunction();
465 Handle(GEOM_Function) aRefPnt2 = thePnt2->GetLastFunction();
466 Handle(GEOM_Function) aRefPnt3 = thePnt3->GetLastFunction();
468 if (aRefPnt1.IsNull() || aRefPnt2.IsNull() || aRefPnt3.IsNull()) return NULL;
470 aCI.SetPoint1(aRefPnt1);
471 aCI.SetPoint2(aRefPnt2);
472 aCI.SetPoint3(aRefPnt3);
473 aCI.SetSense(theSense);
475 //Compute the Arc value
477 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
480 if (!GetSolver()->ComputeFunction(aFunction)) {
481 SetErrorCode("Arc driver failed");
485 catch (Standard_Failure) {
486 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
487 SetErrorCode(aFail->GetMessageString());
490 //Make a Python command
491 GEOM::TPythonDump(aFunction) << anArc << " = geompy.MakeArcCenter("
492 << thePnt1 << ", " << thePnt2 << ", " << thePnt3 << "," << theSense << ")";
498 //=============================================================================
502 //=============================================================================
503 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineBezier
504 (list<Handle(GEOM_Object)> thePoints)
508 //Add a new Spline object
509 Handle(GEOM_Object) aSpline = GetEngine()->AddObject(GetDocID(), GEOM_SPLINE);
511 //Add a new Spline function for creation a bezier curve relatively to points set
512 Handle(GEOM_Function) aFunction =
513 aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_BEZIER);
514 if (aFunction.IsNull()) return NULL;
516 //Check if the function is set correctly
517 if (aFunction->GetDriverGUID() != GEOMImpl_SplineDriver::GetID()) return NULL;
519 GEOMImpl_ISpline aCI (aFunction);
521 int aLen = thePoints.size();
525 list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
526 for (; it != thePoints.end(); it++, ind++) {
527 Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
529 if (aRefPnt.IsNull()) return NULL;
531 aCI.SetPoint(ind, aRefPnt);
534 //Compute the Spline value
536 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
539 if (!GetSolver()->ComputeFunction(aFunction)) {
540 SetErrorCode("Spline driver failed");
544 catch (Standard_Failure) {
545 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
546 SetErrorCode(aFail->GetMessageString());
550 //Make a Python command
551 GEOM::TPythonDump pd (aFunction);
552 pd << aSpline << " = geompy.MakeBezier([";
554 it = thePoints.begin();
556 while (it != thePoints.end()) {
557 pd << ", " << (*it++);
565 //=============================================================================
567 * MakeSplineInterpolation
569 //=============================================================================
570 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation
571 (list<Handle(GEOM_Object)> thePoints)
575 //Add a new Spline object
576 Handle(GEOM_Object) aSpline = GetEngine()->AddObject(GetDocID(), GEOM_SPLINE);
578 //Add a new Spline function for creation a bezier curve relatively to points set
579 Handle(GEOM_Function) aFunction =
580 aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_INTERPOLATION);
581 if (aFunction.IsNull()) return NULL;
583 //Check if the function is set correctly
584 if (aFunction->GetDriverGUID() != GEOMImpl_SplineDriver::GetID()) return NULL;
586 GEOMImpl_ISpline aCI (aFunction);
588 int aLen = thePoints.size();
592 list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
593 for (; it != thePoints.end(); it++, ind++) {
594 Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
596 if (aRefPnt.IsNull()) return NULL;
598 aCI.SetPoint(ind, aRefPnt);
601 //Compute the Spline value
603 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
606 if (!GetSolver()->ComputeFunction(aFunction)) {
607 SetErrorCode("Spline driver failed");
611 catch (Standard_Failure) {
612 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
613 SetErrorCode(aFail->GetMessageString());
617 //Make a Python command
618 GEOM::TPythonDump pd (aFunction);
619 pd << aSpline << " = geompy.MakeInterpol([";
621 it = thePoints.begin();
623 while (it != thePoints.end()) {
624 pd << ", " << (*it++);
632 //=============================================================================
636 //=============================================================================
637 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcher
638 (const TCollection_AsciiString& theCommand,
639 list<double> theWorkingPlane)
643 if (theCommand.IsEmpty()) return NULL;
645 //Add a new Sketcher object
646 Handle(GEOM_Object) aSketcher = GetEngine()->AddObject(GetDocID(), GEOM_SKETCHER);
648 //Add a new Sketcher function
649 Handle(GEOM_Function) aFunction =
650 aSketcher->AddFunction(GEOMImpl_SketcherDriver::GetID(), SKETCHER_NINE_DOUBLS);
651 if (aFunction.IsNull()) return NULL;
653 //Check if the function is set correctly
654 if (aFunction->GetDriverGUID() != GEOMImpl_SketcherDriver::GetID()) return NULL;
656 GEOMImpl_ISketcher aCI (aFunction);
658 aCI.SetCommand(theCommand);
661 list<double>::iterator it = theWorkingPlane.begin();
662 for (; it != theWorkingPlane.end(); it++, ind++)
663 aCI.SetWorkingPlane(ind, *it);
665 //Compute the Sketcher value
667 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
670 if (!GetSolver()->ComputeFunction(aFunction)) {
671 SetErrorCode("Sketcher driver failed");
675 catch (Standard_Failure) {
676 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
677 SetErrorCode(aFail->GetMessageString());
681 //Make a Python command
682 GEOM::TPythonDump pd (aFunction);
683 pd << aSketcher << " = geompy.MakeSketcher(\"" << theCommand.ToCString() << "\", [";
685 it = theWorkingPlane.begin();
687 while (it != theWorkingPlane.end()) {
688 pd << ", " << (*it++);
696 //=============================================================================
698 * MakeSketcherOnPlane
700 //=============================================================================
701 Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSketcherOnPlane
702 (const TCollection_AsciiString& theCommand,
703 Handle(GEOM_Object) theWorkingPlane)
707 if (theCommand.IsEmpty()) return NULL;
709 //Add a new Sketcher object
710 Handle(GEOM_Object) aSketcher = GetEngine()->AddObject(GetDocID(), GEOM_SKETCHER);
712 //Add a new Sketcher function
713 Handle(GEOM_Function) aFunction =
714 aSketcher->AddFunction(GEOMImpl_SketcherDriver::GetID(), SKETCHER_PLANE);
715 if (aFunction.IsNull()) return NULL;
717 //Check if the function is set correctly
718 if (aFunction->GetDriverGUID() != GEOMImpl_SketcherDriver::GetID()) return NULL;
720 GEOMImpl_ISketcher aCI (aFunction);
721 aCI.SetCommand(theCommand);
723 Handle(GEOM_Function) aRefPlane = theWorkingPlane->GetLastFunction();
724 if (aRefPlane.IsNull()) return NULL;
725 aCI.SetWorkingPlane( aRefPlane );
727 //Compute the Sketcher value
729 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
732 if (!GetSolver()->ComputeFunction(aFunction)) {
733 SetErrorCode("Sketcher driver failed");
737 catch (Standard_Failure) {
738 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
739 SetErrorCode(aFail->GetMessageString());
743 //Make a Python command
744 GEOM::TPythonDump (aFunction) << aSketcher << " = geompy.MakeSketcherOnPlane(\""
745 << theCommand.ToCString() << "\", " << theWorkingPlane << " )";