#include "HYDROData_PolylineXY.h"
+#include <HYDROData_Polyline3D.h>
+#include <HYDROData_Bathymetry.h>
+#include <HYDROData_Iterator.h>
+#include <HYDROData_ShapeFile.h>
+#include <HYDROData_Profile.h>
+
#include "HYDROData_BSplineOperation.h"
#include "HYDROData_Document.h"
#include "HYDROData_ShapesTool.h"
#include <QPainterPath>
#include <QVariant>
-//#define _DEVDEBUG_
+#define _DEVDEBUG_
#include "HYDRO_trace.hxx"
#include <BRepTools.hxx>
#include <sstream>
return false;
return true;
}
+
+
+bool HYDROData_PolylineXY::ImportShapesFromFile(const QString& aFileName)
+{
+ NCollection_Sequence<Handle(HYDROData_Entity)> importedEntities;
+ if (aFileName.isEmpty())
+ return false;
+
+ QString anExt = aFileName.split('.', QString::SkipEmptyParts).back();
+ anExt.toLower();
+ bool importXY = false;
+ Handle(HYDROData_Document) theDocument = HYDROData_Document::Document();
+
+// if (anExt == "xyz")
+// {
+// importXY = SUIT_MessageBox::question( module->getApp()->desktop(),
+// tr( "IMPORT_POLYLINE" ),
+// tr( "IMPORT_POLYLINE_XY_PART_ONLY" ),
+// QMessageBox::Yes | QMessageBox::No,
+// SUIT_MessageBox::Yes) == SUIT_MessageBox::Yes;
+// }
+ importXY = true;
+ if (anExt == "shp")
+ {
+ HYDROData_ShapeFile anImporter;
+ NCollection_IndexedDataMap<Handle(HYDROData_Entity), SHPObject*> theEntitiesToSHPObj;
+ NCollection_Sequence<Handle(HYDROData_Entity)> PolyEnt;
+ int aShapeTypeOfFile = -1;
+ int aStat = anImporter.OpenAndParse(aFileName);
+ if (aStat == 1)
+ {
+ aStat = anImporter.ImportPolylines(theDocument, aFileName, theEntitiesToSHPObj,
+ HYDROData_ShapeFile::ImportShapeType_All);
+ for (int k = 1; k <= theEntitiesToSHPObj.Extent(); k++)
+ {
+ PolyEnt.Append(theEntitiesToSHPObj.FindKey(k));
+ }
+ if (aStat == 1 || aStat == 2)
+ {
+ //try to import DBF
+ QString aDBFFileName;
+ aDBFFileName = aFileName.simplified().replace(aFileName.simplified().size() - 4, 4, ".dbf");
+ bool DBF_Stat = anImporter.DBF_OpenDBF(aDBFFileName);
+ if (DBF_Stat)
+ {
+ QStringList aFieldList = anImporter.DBF_GetFieldList();
+ int nbRecords = anImporter.DBF_GetNbRecords();
+ //assert(theEntitiesToSHPObj.Extent() == nbRecords);
+ if (theEntitiesToSHPObj.Extent() == nbRecords)
+ {
+ int indNameAttrFound = -1;
+ int k = 0;
+ bool bUseNameAttrFound = false;
+ for (QStringList::iterator it = aFieldList.begin(); it != aFieldList.end(); it++, k++)
+ if (QString::compare(*it, "name", Qt::CaseInsensitive) == 0)
+ {
+ indNameAttrFound = k;
+ break;
+ }
+
+ if (indNameAttrFound != -1)
+ bUseNameAttrFound = true;
+
+// if (indNameAttrFound != -1)
+// bUseNameAttrFound = SUIT_MessageBox::question( module->getApp()->desktop(),
+// tr( "IMPORT_POLYLINE" ),
+// tr( "IMPORT_POLYLINE_USE_NAME_ATTR" ),
+// QMessageBox::Yes | QMessageBox::No,
+// SUIT_MessageBox::Yes) == SUIT_MessageBox::Yes;
+
+ std::vector<std::vector<HYDROData_ShapeFile::DBF_AttrValue>> anAttrVV;
+ for (int i = 0; i < aFieldList.size(); i++)
+ {
+ std::vector<HYDROData_ShapeFile::DBF_AttrValue> anAttrV;
+ anAttrVV.push_back(anAttrV);
+ anImporter.DBF_GetAttributeList(i, anAttrVV[i]);
+ }
+
+ int indNULL = 1;
+ for (int i = 1; i <= theEntitiesToSHPObj.Extent(); i++)
+ {
+ Handle(HYDROData_PolylineXY) aPolylineXY = Handle(HYDROData_PolylineXY)::DownCast(
+ theEntitiesToSHPObj.FindKey(i));
+ QStringList aDBFinfo;
+ aDBFinfo << aFieldList; //first, the table header
+ for (int j = 0; j < aFieldList.size(); j++)
+ {
+ QString attr;
+ const HYDROData_ShapeFile::DBF_AttrValue &attrV = anAttrVV[j][i - 1];
+ if (attrV.myFieldType == HYDROData_ShapeFile::DBF_FieldType_String)
+ aDBFinfo << attrV.myStrVal;
+ else if (attrV.myFieldType == HYDROData_ShapeFile::DBF_FieldType_Integer)
+ aDBFinfo << QString::number(attrV.myIntVal);
+ else if (attrV.myFieldType == HYDROData_ShapeFile::DBF_FieldType_Double)
+ aDBFinfo << QString::number(attrV.myDoubleVal);
+ else
+ aDBFinfo << "";
+ }
+ //assert(aDBFinfo.size() / 2 == aFieldList.size());
+ aPolylineXY->SetDBFInfo(aDBFinfo);
+ if (bUseNameAttrFound)
+ {
+ QString nameOfPoly = aDBFinfo[aDBFinfo.size() / 2 + indNameAttrFound];
+ if (!nameOfPoly.isEmpty())
+ aPolylineXY->SetName(nameOfPoly);
+ else
+ {
+ aPolylineXY->SetName("null_name_" + QString::number(indNULL));
+ indNULL++;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (anImporter.GetShapeType() == 13) //Polyline 3D
+ {
+// HYDROGUI_ImportPolylineDlg* aDLG = new HYDROGUI_ImportPolylineDlg( module->getApp()->desktop(), PolyEnt );
+// aDLG->setModal( true );
+// aDLG->setWindowTitle(tr("IMPORT_POLYLINE"));
+// //QApplication::restoreOverrideCursor();
+// if( aDLG->exec()==QDialog::Accepted )
+
+ NCollection_Sequence<Handle(HYDROData_Entity)> CheckedPolylines = PolyEnt; //aDLG->GetCheckedPolylines();
+ NCollection_IndexedDataMap<Handle(HYDROData_Entity), SHPObject*> CheckedEntitiesToSHPObj;
+ for (int k = 1; k <= CheckedPolylines.Size(); k++)
+ {
+ SHPObject *const*SHPObkP = theEntitiesToSHPObj.Seek(CheckedPolylines(k));
+ if (SHPObkP != NULL)
+ CheckedEntitiesToSHPObj.Add(CheckedPolylines(k), *SHPObkP);
+ }
+ NCollection_Sequence<Handle(HYDROData_Entity)> theEntitiesPoly3D;
+ anImporter.ImportPolylines3D(theDocument, CheckedEntitiesToSHPObj, theEntitiesPoly3D,
+ HYDROData_ShapeFile::ImportShapeType_All);
+ PolyEnt.Append(theEntitiesPoly3D);
+
+ }
+ anImporter.Free();
+ }
+// if (aStat == 1)
+// UpdateView(module, PolyEnt);
+// else if (aStat == 2)
+// {
+// UpdateView(module, PolyEnt);
+// if (theShapeTypesToImport == HYDROData_ShapeFile::ImportShapeType_All) //if other flag = > no need to show this messagebox
+// SUIT_MessageBox::information(module->getApp()->desktop(), tr("IMPORT_POLYLINE"),
+// tr("POLYGON_IMPORTED_AS_POLYLINE"));
+// }
+// else
+// {
+// QString aMess;
+// if (theShapeTypesToImport == HYDROData_ShapeFile::ImportShapeType::ImportShapeType_Polygon)
+// aMess += tr("POLYLINE_IMPORT_FAILED_AS_POLYGON") + ";\n";
+// else
+// aMess += tr("POLYLINE_IMPORT_FAILED_AS_POLYLINE") + ";\n";
+//
+// if (aStat == -1)
+// aMess += tr("CANT_OPEN_SHP");
+// else if (aStat == -2)
+// aMess += tr("CANT_OPEN_SHX");
+// else
+// aMess += tr("SHAPE_TYPE_IS") + anImporter.GetShapeTypeName(aShapeTypeOfFile);
+// SUIT_MessageBox::warning(module->getApp()->desktop(), tr("IMPORT_POLYLINE"), aMess);
+// }
+ importedEntities.Append(PolyEnt);
+ }
+ else if (anExt == "xy" || (importXY && anExt == "xyz"))
+ {
+ if (!HYDROData_Tool::importPolylineFromXYZ(aFileName, theDocument, true, importedEntities))
+ DEBTRACE("no polyline imported");
+ //SUIT_MessageBox::warning(module->getApp()->desktop(), tr("IMPORT_POLYLINE"), tr("NO_ONE_POLYLINE_IMPORTED"));
+ }
+ else if (anExt == "xyz")
+ {
+ if (!HYDROData_Tool::importPolylineFromXYZ(aFileName, theDocument, false, importedEntities))
+ DEBTRACE("no polyline imported");
+ //SUIT_MessageBox::warning(module->getApp()->desktop(), tr("IMPORT_POLYLINE"), tr("NO_ONE_POLYLINE_IMPORTED"));
+ }
+ return true;
+}
+