- //std::cout<<"DocumentModel::fillData() begin"<<std::endl;
-
- //std::cout << "DocumentModel::fillData() _hexaDocument->" << _hexaDocument << std::endl;
-
- // DATA
- HEXA_NS::Vertex *v = NULL;
- VertexItem *vItem = NULL;
- for ( int i=0; i<_hexaDocument->countVertex(); ++i ){
-// /*char pName[12];*/ std::string name;
-// HEXA_NS::Shape *aShape = NULL;
-// QString shapeIDs;
-
- v = _hexaDocument->getVertex(i);
-// name = v->getName(/*pName*/);
-// aShape = v->getAssociation();
-
- vItem = new VertexItem(v);
- vItem->setData( _entry, HEXA_DOC_ENTRY_ROLE );
-// if ( aShape ){
-// shapeIDs = aShape->ident.c_str();
-// shapeIDs += ";";
-// vItem->setData( QVariant::fromValue(shapeIDs), HEXA_ASSOC_ENTRY_ROLE );
-// }
- _vertexDirItem->appendRow(vItem);
-// std::cout<<name<<":"<< shapeIDs.toStdString() <<std::endl;
-
- //CS_TEST
-// HEXA_NS::Shape* s = v->getAssociation();
-// std::cout<<"assoc->"<<s<<std::endl;
-// if (s){
-// QList<QStandardItem *> assocItems;
-// assocItems << new QStandardItem(s->ident.c_str());
-// std::cout<<"assoc id =>"<<s->ident<<std::endl;
-// vItem->appendColumn(assocItems);
-// }
-//
- //CS_TEST
-// _vertexDirItem->setEditable( false );//CS_TEST
- }
-
- HEXA_NS::Edge *e = NULL;
- EdgeItem *eItem = NULL;
- for ( int i=0; i<_hexaDocument->countEdge(); ++i ){
-// /*char pName[12]; */std::string name;
-// HEXA_NS::Shapes shapeList;
-// QString shapeIDs;
-
- e = _hexaDocument->getEdge(i);
-// name = e->getName(pName);
-// shapeList = e->getAssociations();
-
- eItem = new EdgeItem(e);
- eItem->setData( _entry, HEXA_DOC_ENTRY_ROLE );
-
-// std::cout << "shapeList.size() => " << shapeList.size() << std::endl;
-//
-// if ( !shapeList.empty() ){
-// for ( HEXA_NS::Shapes::const_iterator aShape = shapeList.begin();
-// aShape != shapeList.end();
-// ++aShape ){
-// shapeIDs += (*aShape)->ident.c_str();
-// shapeIDs += ";";
-// }
-// eItem->setData( QVariant::fromValue(shapeIDs), HEXA_ASSOC_ENTRY_ROLE );
-// }
- _edgeDirItem->appendRow(eItem);
-// std::cout<<name<<":"<< shapeIDs.toStdString() <<std::endl;
- }
-
- HEXA_NS::Quad *q = NULL;
- QuadItem *qItem = NULL;
- for ( int i=0; i<_hexaDocument->countQuad(); ++i ){
-// char pName[12]; std::string name;
-// HEXA_NS::Shapes shapeList;
-// QString shapeIDs;
-
- q = _hexaDocument->getQuad(i);
-// name = q->getName(pName);
-// shapeList = q->getAssociations();
-
- qItem = new QuadItem(q);
- qItem->setData( _entry, HEXA_DOC_ENTRY_ROLE );
-// if ( !shapeList.empty() ){
-// for ( HEXA_NS::Shapes::const_iterator aShape = shapeList.begin();
-// aShape != shapeList.end();
-// ++aShape ){
-// shapeIDs += (*aShape)->ident.c_str();
-// shapeIDs += ";";
-// }
-// eItem->setData( QVariant::fromValue(shapeIDs), HEXA_ASSOC_ENTRY_ROLE );
-// }
- _quadDirItem->appendRow(qItem);
-// std::cout<<name<<":"<< shapeIDs.toStdString() <<std::endl;
- }
-
- HEXA_NS::Hexa *h = NULL;
- HexaItem *hItem = NULL;
- for ( int i=0; i<_hexaDocument->countHexa(); ++i ){
- h = _hexaDocument->getHexa(i);
- hItem = new HexaItem(h);
- hItem->setData( _entry, HEXA_DOC_ENTRY_ROLE );
- _hexaDirItem->appendRow(hItem);
- }
-
- //std::cout<<"DocumentModel::fillData() end"<<std::endl;
-}
-
-
-void DocumentModel::fillBuilder()
-{
- //std::cout<<"DocumentModel::fillBuilder() begin"<<std::endl;
-
- HEXA_NS::Vector *v = NULL;
- VectorItem *vItem = NULL;
- for ( int i=0; i<_hexaDocument->countVector(); ++i ){
- v = _hexaDocument->getVector(i);
- vItem = new VectorItem(v);
- _vectorDirItem->appendRow(vItem);
- }
-
- // _cylinderDirItem
- HEXA_NS::Cylinder *c = NULL;
- CylinderItem *cItem = NULL;
- for ( int i=0; i<_hexaDocument->countCylinder(); ++i ){
- c = _hexaDocument->getCylinder(i);
- cItem = new CylinderItem(c);
- _cylinderDirItem->appendRow(cItem);
- }
-
-// _pipeDirItem
- HEXA_NS::Pipe *p = NULL;
- PipeItem *pItem = NULL;
- for ( int i=0; i<_hexaDocument->countPipe(); ++i ){
- p = _hexaDocument->getPipe(i);
- pItem = new PipeItem(p);
- _pipeDirItem->appendRow(pItem);
-
- }
-// _elementsDirItem CS_TODO : no elements
-// HEXA_NS::Elements *e = NULL;
-// ElementsItem *eItem = NULL;
-// for ( int i=0; i<_hexaDocument->countElements(); ++i ){
-// e = _hexaDocument->getElements(i);
-// eItem = new ElementsItem(e);
-// _elementsDirItem->appendRow(eItem);
-// }
-
-// _crossElementsDirItem
-// HEXA_NS::CrossElements *c = NULL;
-// CrossElementsItem *cItem = NULL;
-// for ( int i=0; i<_hexaDocument->countCrossElements(); ++i ){
-// c = _hexaDocument->getCrossElements(i);
-// cItem = new CrossElementsItem(c);
-// _crossElementsDirItem->appendRow(cItem);
-// }
+ PatternDataSelectionModel* pdsm = HEXABLOCKGUI::currentDocGView->getPatternDataSelectionModel();
+ if (pdsm == NULL)
+ return;
+ pdsm->clearHighlightedItems();
+
+ // DATA
+ HEXA_NS::Vertex *v = NULL;
+ VertexItem *vItem = NULL;
+ int nbVertex = _hexaDocument->countVertex();
+ for ( int i=0; i<nbVertex; ++i ){
+ v = _hexaDocument->getVertex(i);
+ vItem = new VertexItem(v, _entry);
+ _vertexDirItem->appendRow(vItem);
+ }
+
+ HEXA_NS::Edge *e = NULL;
+ EdgeItem *eItem = NULL;
+ int nbEdge = _hexaDocument->countEdge();
+ for ( int i=0; i<nbEdge; ++i ){
+ e = _hexaDocument->getEdge(i);
+ eItem = new EdgeItem(e, _entry);
+ _edgeDirItem->appendRow(eItem);
+ }
+
+ HEXA_NS::Quad *q = NULL;
+ QuadItem *qItem = NULL;
+ int nbQuad = _hexaDocument->countQuad();
+ for ( int i=0; i<nbQuad; ++i ){
+ q = _hexaDocument->getQuad(i);
+ qItem = new QuadItem(q, _entry);
+ _quadDirItem->appendRow(qItem);
+ }
+
+ HEXA_NS::Hexa *h = NULL;
+ HexaItem *hItem = NULL;
+ int nbHexa = _hexaDocument->countHexa();
+ for ( int i=0; i<nbHexa; ++i ){
+ h = _hexaDocument->getHexa(i);
+ hItem = new HexaItem(h, _entry);
+ _hexaDirItem->appendRow(hItem);
+ }
+
+ // +++++ Builder ++++++++++++++++++++++++++++++
+
+ HEXA_NS::Vector *vec = NULL;
+ VectorItem *vecItem = NULL;
+ int nbVector = _hexaDocument->countVector();
+ for ( int i=0; i<nbVector; ++i ){
+ vec = _hexaDocument->getVector(i);
+ vecItem = new VectorItem(vec);
+ _vectorDirItem->appendRow(vecItem);
+ }
+
+ //******* A VOIR AVEC ALAIN POUR LE REMPLISSAGE DE L'ARBRE ELEMENTS ET CROSSELEMENTS (ByCylinder) *******/
+ //******* OU SONT STOCKES LES ELEMENTS ET LES CROSSELEMENTS DANS LE DOCUMENT? ******/
+
+ // _cylinderDirItem
+ // HEXA_NS::Cylinder *c = NULL;
+ // HEXA_NS::Elements* c = NULL;
+ // CylinderItem *cItem = NULL;
+ // ElementsItem* cItem = NULL;
+ // int nbCylinder = _hexaDocument->countCylinder();
+ // for ( int i=0; i<nbCylinder; ++i ){
+ // c = _hexaDocument->getCylinder(i);
+ // cItem = new CylinderItem(c, _entry);
+ // cItem = new ElementsItem(c, _entry);
+ // _cylinderDirItem->appendRow(cItem);
+ // _elementsDirItem->appendRow(cItem);
+ // }
+
+ // _pipeDirItem
+ // HEXA_NS::Pipe *p = NULL;
+ // HEXA_NS::Elements* p = NULL;
+ // PipeItem *pItem = NULL;
+ // ElementsItem* pItem = NULL;
+ // int nbPipe = _hexaDocument->countPipe();
+ // for ( int i=0; i<nbPipe; ++i ){
+ // p = _hexaDocument->getPipe(i);
+ // pItem = new PipeItem(p);
+ // pItem = new ElementsItem(p, _entry);
+ // _pipeDirItem->appendRow(pItem);
+ // _elementsDirItem->appendRow(pItem);
+ // }
+ //********************************************************************************************************
+}
+
+
+//void DocumentModel::fillBuilder()
+//{
+// HEXA_NS::Vector *v = NULL;
+// VectorItem *vItem = NULL;
+// int nbVector = _hexaDocument->countVector();
+// for ( int i=0; i<nbVector; ++i ){
+// v = _hexaDocument->getVector(i);
+// vItem = new VectorItem(v);
+// _vectorDirItem->appendRow(vItem);
+// }
+//
+// //******* A VOIR AVEC ALAIN POUR LE REMPLISSAGE DE L'ARBRE ELEMENTS ET CROSSELEMENTS (ByCylinder) *******/
+// //******* OU SONT STOCKES LES ELEMENTS ET LES CROSSELEMENTS DANS LE DOCUMENT? ******/
+//
+// // _cylinderDirItem
+//// HEXA_NS::Cylinder *c = NULL;
+//// HEXA_NS::Elements* c = NULL;
+//// CylinderItem *cItem = NULL;
+//// ElementsItem* cItem = NULL;
+//// int nbCylinder = _hexaDocument->countCylinder();
+//// for ( int i=0; i<nbCylinder; ++i ){
+//// c = _hexaDocument->getCylinder(i);
+//// cItem = new CylinderItem(c, _entry);
+//// cItem = new ElementsItem(c, _entry);
+//// _cylinderDirItem->appendRow(cItem);
+//// _elementsDirItem->appendRow(cItem);
+//// }
+//
+// // _pipeDirItem
+//// HEXA_NS::Pipe *p = NULL;
+//// HEXA_NS::Elements* p = NULL;
+//// PipeItem *pItem = NULL;
+//// ElementsItem* pItem = NULL;
+//// int nbPipe = _hexaDocument->countPipe();
+//// for ( int i=0; i<nbPipe; ++i ){
+//// p = _hexaDocument->getPipe(i);
+//// pItem = new PipeItem(p);
+//// pItem = new ElementsItem(p, _entry);
+//// _pipeDirItem->appendRow(pItem);
+//// _elementsDirItem->appendRow(pItem);
+//// }
+// //********************************************************************************************************
+//}
+
+void DocumentModel::fillGeometry()
+{
+ PatternGeomSelectionModel* pgsm = HEXABLOCKGUI::currentDocGView->getPatternGeomSelectionModel();
+ if (_hexaDocument == NULL /*|| isEmpty()*/ || pgsm == NULL)
+ return;
+
+ HEXA_NS::NewShape* shape;
+ HEXA_NS::VertexShape* node;
+ HEXA_NS::EdgeShape* line;
+ HEXA_NS::FaceShape* face;
+ TopoDS_Compound vertexCompound;
+ BRep_Builder compoundBuilder;
+
+ // * fill the shape tree
+
+ shapeById.clear();
+ pgsm->clearHighlightedItems();
+ QMap<QString, TopoDS_Shape> topo_shapes;
+ int nbShapes = _hexaDocument->countShape();
+ for (int i=0; i < nbShapes; ++i)
+ {
+ shape = _hexaDocument->getShape(i);
+ QString shapeName = shape->getName();
+ if (!docShapesEntry.contains(shapeName))
+ {
+ if (shape->getOrigin() == HEXA_NS::SH_CLOUD)
+ {
+ compoundBuilder.MakeCompound(vertexCompound);
+ topo_shapes[shapeName] = vertexCompound;
+ }
+ else
+ topo_shapes[shapeName] = shape->getShape();
+ }
+
+ GeomShapeItem* shItem = new GeomShapeItem(shape);
+ if (shape->getOrigin() == HEXA_NS::SH_IMPORT)
+ // * explicit shapes
+ _explicitShapesDirItem->appendRow(shItem);
+ else
+ // * implicit shapes
+ _implicitShapesDirItem->appendRow(shItem);
+
+ //add vertices to the tree
+ QStandardItem* geomPointDirItem = NULL;
+ if (shape->getOrigin() != HEXA_NS::SH_CLOUD)
+ {
+ geomPointDirItem = new QStandardItem(tr("TREE_ITEM_VERTEX"));
+ geomPointDirItem->setData( GEOMPOINT_DIR_TREE, HEXA_TREE_ROLE );
+ }
+ if (geomPointDirItem != NULL)
+ shItem->appendRow(geomPointDirItem);
+ int nbVertexShape = shape->countVertex();
+ for (int j=0; j < nbVertexShape; ++j)
+ {
+ node = shape->getVertexShape(j);
+ GeomPointItem* gPointItem = new GeomPointItem(node);
+ if (geomPointDirItem != NULL)
+ geomPointDirItem->appendRow(gPointItem);
+ else
+ shItem->appendRow(gPointItem);
+ shapeById[shapeName+","+QString::number(node->getIdent())] = node;
+
+ // * update the compound of vertices
+ if (shape->getOrigin() == HEXA_NS::SH_CLOUD && !vertexCompound.IsNull())
+ compoundBuilder.Add(topo_shapes[shapeName], node->getShape());
+ }
+
+ if (shape->getOrigin() == HEXA_NS::SH_CLOUD)
+ continue; // * it's a cloud of points, there's no edges and no quads to fill
+
+ //add edges to the tree
+ QStandardItem* geomEdgeDirItem = new QStandardItem(tr("TREE_ITEM_EDGE"));
+ geomEdgeDirItem->setData( GEOMEDGE_DIR_TREE, HEXA_TREE_ROLE );
+ shItem->appendRow(geomEdgeDirItem);
+ int nbEdgeShape = shape->countEdge();
+ for (int j = 0; j < nbEdgeShape; ++j)
+ {
+ line = shape->getEdgeShape(j);
+ GeomEdgeItem* gEdgeItem = new GeomEdgeItem(line);
+ geomEdgeDirItem->appendRow(gEdgeItem);
+ shapeById[shapeName+","+QString::number(line->getIdent())] = line;
+ }
+
+ //add faces to the tree
+ QStandardItem* geomFaceDirItem = new QStandardItem(tr("TREE_ITEM_QUAD"));
+ geomFaceDirItem->setData( GEOMFACE_DIR_TREE, HEXA_TREE_ROLE );
+ shItem->appendRow(geomFaceDirItem);
+ int nbFaceShape = shape->countFace();
+ for (int j = 0; j < nbFaceShape; ++j)
+ {
+ face = shape->getFaceShape(j);
+ GeomFaceItem* gFaceItem = new GeomFaceItem(face);
+ geomFaceDirItem->appendRow(gFaceItem);
+ shapeById[shapeName+","+QString::number(face->getIdent())] = face;
+ }
+ }