+ Standard_Integer i, aLen = theClosed->Length();
+ if (aLen > 0) {
+ pd << "(isDone, [";
+ for (i = 1; i <= aLen; i++) {
+ Handle(GEOM_Object) anObj_i = Handle(GEOM_Object)::DownCast(theClosed->Value(i));
+ pd << anObj_i << ((i < aLen) ? ", " : "");
+ }
+ pd << "], ";
+ } else {
+ pd << "(isDone, empty_list, ";
+ }
+
+ aLen = theOpen->Length();
+ if (aLen > 0) {
+ pd << "[";
+ for (i = 1; i <= aLen; i++) {
+ Handle(GEOM_Object) anObj_i = Handle(GEOM_Object)::DownCast(theOpen->Value(i));
+ pd << anObj_i << ((i < aLen) ? ", " : "");
+ }
+ pd << "]";
+ } else {
+ pd << "empty_list";
+ }
+
+ pd << ") = geompy.GetFreeBoundary(" << theObject << ")";
+ }
+
+ SetErrorCode(OK);
+ return true;
+}
+
+
+//=============================================================================
+/*!
+ * ChangeOrientation
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientation (Handle(GEOM_Object) theObject)
+{
+ // set error code, check parameters
+ SetErrorCode(KO);
+
+ if (theObject.IsNull())
+ return NULL;
+
+ if (!theObject->IsMainShape()) {
+ SetErrorCode("Sub shape cannot be transformed - need to create a copy");
+ return NULL;
+ }
+
+ Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction();
+ if (aLastFunction.IsNull())
+ return NULL; //There is no function which creates an object to be processed
+
+ //Add the function
+ aFunction = theObject->AddFunction(GEOMImpl_HealingDriver::GetID(), CHANGE_ORIENTATION);
+
+ if (aFunction.IsNull())
+ return NULL;
+
+ //Check if the function is set correctly
+ if (aFunction->GetDriverGUID() != GEOMImpl_HealingDriver::GetID()) return NULL;
+
+ // prepare "data container" class IHealing
+ GEOMImpl_IHealing HI(aFunction);
+ HI.SetOriginal( aLastFunction );
+
+ //Compute the translation
+ try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
+ if (!GetSolver()->ComputeFunction(aFunction)) {
+ SetErrorCode("Healing driver failed");
+ return NULL;