-// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include <GEOMImpl_ImportDriver.hxx>
#include <GEOMImpl_ICopy.hxx>
#include <GEOMImpl_IImportExport.hxx>
+#include <GEOMImpl_ITransferData.hxx>
#include <GEOMImpl_Types.hxx>
#include "GEOMImpl_IShapesOperations.hxx"
#include "GEOMImpl_IGroupOperations.hxx"
#include <BRepTools.hxx>
#include <gp_Pnt.hxx>
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
#include <TColStd_HArray1OfByte.hxx>
#include <TColStd_HArray1OfReal.hxx>
-#else
-#include <TDataStd_HArray1OfByte.hxx>
-#endif
#include <Standard_Failure.hxx>
#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
//Compute the Copy value
try {
-#if OCC_VERSION_LARGE > 0x06010000
OCC_CATCH_SIGNALS;
-#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Copy driver failed");
return NULL;
if (theTextureFile.IsEmpty()) return 0;
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
Handle(TColStd_HArray1OfByte) aTexture;
-#else
- Handle(TDataStd_HArray1OfByte) aTexture;
-#endif
FILE* fp = fopen(theTextureFile.ToCString(), "r");
if (!fp) return 0;
if (bytedata.empty() || bytedata.size() != lines.size()*lenbytes)
return 0;
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
aTexture = new TColStd_HArray1OfByte (1, lines.size()*lenbytes);
-#else
- aTexture = new TDataStd_HArray1OfByte (1, lines.size()*lenbytes);
-#endif
std::list<unsigned char>::iterator bdit;
int i;
}
int GEOMImpl_IInsertOperations::AddTexture(int theWidth, int theHeight,
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
const Handle(TColStd_HArray1OfByte)& theTexture)
-#else
- const Handle(TDataStd_HArray1OfByte)& theTexture)
-#endif
{
SetErrorCode(KO);
int aTextureId = GetEngine()->addTexture(GetDocID(), theWidth, theHeight, theTexture);
return aTextureId;
}
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
Handle(TColStd_HArray1OfByte) GEOMImpl_IInsertOperations::GetTexture(int theTextureId,
-#else
-Handle(TDataStd_HArray1OfByte) GEOMImpl_IInsertOperations::GetTexture(int theTextureId,
-#endif
- int& theWidth, int& theHeight)
+ int& theWidth, int& theHeight)
{
SetErrorCode(KO);
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
Handle(TColStd_HArray1OfByte) aTexture;
-#else
- Handle(TDataStd_HArray1OfByte) aTexture;
-#endif
theWidth = theHeight = 0;
TCollection_AsciiString aFileName;
SetErrorCode(OK);
return id_list;
}
+
+//=============================================================================
+/*!
+ * TransferData
+ */
+//=============================================================================
+bool GEOMImpl_IInsertOperations::TransferData
+ (const Handle(GEOM_Object) &theObjectFrom,
+ const Handle(GEOM_Object) &theObjectTo,
+ const int theFindMethod,
+ std::list<TransferDatum> &theResult)
+{
+ SetErrorCode(KO);
+
+ if (theObjectFrom.IsNull() || theObjectTo.IsNull()) {
+ return false;
+ }
+
+ //Add a new Transfer Data object object
+ Handle(GEOM_Object) aTDObj =
+ GetEngine()->AddObject(GetDocID(), GEOM_TRANSFER_DATA);
+
+ //Add a Transfer Data function for created object
+ Handle(GEOM_Function) aFunction =
+ aTDObj->AddFunction(GEOMImpl_CopyDriver::GetID(), TRANSFER_DATA);
+
+ //Check if the function is set correctly
+ if(aFunction->GetDriverGUID() != GEOMImpl_CopyDriver::GetID()) {
+ return false;
+ }
+
+ Handle(GEOM_Function) aFunctionFrom = theObjectFrom->GetLastFunction();
+ Handle(GEOM_Function) aFunctionTo = theObjectTo->GetLastFunction();
+
+ if (aFunctionFrom.IsNull() || aFunctionTo.IsNull()) {
+ return false;
+ }
+
+ GEOMImpl_ITransferData aTD(aFunction);
+
+ aTD.SetRef1(aFunctionFrom);
+ aTD.SetRef2(aFunctionTo);
+ aTD.SetFindMethod(theFindMethod);
+
+ // Transfer data
+ try {
+ OCC_CATCH_SIGNALS;
+ if (!GetSolver()->ComputeFunction(aFunction)) {
+ SetErrorCode("Transfer data failed");
+ return false;
+ }
+ }
+ catch (Standard_Failure) {
+ Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+ SetErrorCode(aFail->GetMessageString());
+ return false;
+ }
+
+ // Fill result list of data.
+ theResult.clear();
+
+ Handle(TColStd_HArray1OfExtendedString) aDatumName = aTD.GetDatumName();
+ Handle(TColStd_HArray1OfInteger) aDatumMaxVal = aTD.GetDatumMaxVal();
+ Handle(TColStd_HArray1OfInteger) aDatumVal = aTD.GetDatumVal();
+
+ if (!aDatumName.IsNull() && !aDatumMaxVal.IsNull() && !aDatumVal.IsNull()) {
+ Standard_Integer i;
+ Standard_Integer aNbDatum = aDatumName->Length();
+
+ for (i = 1; i <= aNbDatum; ++i) {
+ if (aDatumMaxVal->Value(i) > 0) {
+ TransferDatum aDatum;
+
+ aDatum.myName = TCollection_AsciiString(aDatumName->Value(i));
+ aDatum.myNumber = aDatumVal->Value(i);
+ aDatum.myMaxNumber = aDatumMaxVal->Value(i);
+ theResult.push_back(aDatum);
+ }
+ }
+ }
+
+ //Make a Python command
+ GEOM::TPythonDump pd (aFunction);
+ pd << "geompy.TransferData(" << theObjectFrom << ", " << theObjectTo;
+ pd << ", GEOM.";
+
+ switch (theFindMethod) {
+ case TD_GET_IN_PLACE:
+ pd << "FSM_GetInPlace";
+ break;
+ case TD_GET_IN_PLACE_OLD:
+ pd << "FSM_GetInPlace_Old";
+ break;
+ case TD_GET_IN_PLACE_BY_HISTORY:
+ default:
+ pd << "FSM_GetInPlaceByHistory";
+ break;
+ }
+ pd << ")";
+
+ SetErrorCode(OK);
+
+ return true;
+}