1 // Copyright (C) 2009-2012 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 //CS_TODO: relever les fonctions qui nécessitent updateData().
21 // addGroupElement à tester
25 #include "utilities.h"
27 #include "HEXABLOCKGUI_DocumentModel.hxx"
28 #include "HEXABLOCKGUI_DocumentItem.hxx"
30 #include "HEXABLOCKGUI.hxx"
31 #include "HEXABLOCKGUI_Trace.hxx"
33 #include "HexVertex.hxx"
34 #include "HexShape.hxx"
37 #include "HEXABLOCKGUI_SalomeTools.hxx"
44 //using namespace HEXA_NS;
45 using namespace HEXABLOCK::GUI;
47 /*****************************************************************
49 *****************************************************************/
50 // DocumentModel::DocumentModel(QObject * parent):
51 DocumentModel::DocumentModel(HEXA_NS::Document* docIn, const QString& entryIn, QObject * parent):
52 QStandardItemModel(parent),
53 _hexaFile( new QTemporaryFile() ),
54 _hexaDocument( docIn ),
56 // _hexaDocument( new HEXA_NS::Document("/tmp/doc.hex") ), //CS_TODO
58 _vertexDirItem( new QStandardItem(tr("TREE_ITEM_VERTEX")) ),
59 _edgeDirItem( new QStandardItem(tr("TREE_ITEM_EDGE")) ),
60 _quadDirItem( new QStandardItem(tr("TREE_ITEM_QUAD")) ),
61 _hexaDirItem( new QStandardItem(tr("TREE_ITEM_HEXA")) ),
63 _vectorDirItem( new QStandardItem(tr("TREE_ITEM_VECTOR")) ),
64 _cylinderDirItem( new QStandardItem(tr("TREE_ITEM_CYLINDER")) ),
65 _pipeDirItem( new QStandardItem(tr("TREE_ITEM_PIPE")) ),
66 _elementsDirItem( new QStandardItem(tr("TREE_ITEM_ELEMENT")) ),
67 _crossElementsDirItem( new QStandardItem(tr("TREE_ITEM_CROSSELEMENT")) ),
69 _groupDirItem( new QStandardItem(tr("TREE_ITEM_GROUP")) ),
71 _lawDirItem( new QStandardItem(tr("TREE_ITEM_LAW")) ),
72 _propagationDirItem( new QStandardItem(tr("TREE_ITEM_PROPAGATION")) ),
74 _vertexItemFlags( Qt::NoItemFlags ),
75 _edgeItemFlags( Qt::NoItemFlags ),
76 _quadItemFlags( Qt::NoItemFlags ),
77 _hexaItemFlags( Qt::NoItemFlags ),
78 _vectorItemFlags( Qt::NoItemFlags ),
79 _cylinderItemFlags( Qt::NoItemFlags ),
80 _pipeItemFlags( Qt::NoItemFlags ),
81 _elementsItemFlags( Qt::NoItemFlags ),
82 _crossElementsItemFlags( Qt::NoItemFlags ),
83 _disallowEdition( false )
85 // setColumnCount( 4 ); //CS_TEST
86 if ( !_hexaDocument && _hexaFile->open() ){
87 _hexaDocument = new HEXA_NS::Document( _hexaFile->fileName().toLatin1() );
88 _hexaDocument->reorderFaces();
91 QStandardItem *parentItem = invisibleRootItem();
92 // parentItem->setData( QString::number( reinterpret_cast<intptr_t>(_hexaDocument) ), HEXA_ENTRY_ROLE );
93 parentItem->setData( _entry, HEXA_ENTRY_ROLE );
95 _vertexDirItem->setData( VERTEX_DIR_TREE, HEXA_TREE_ROLE );
96 _edgeDirItem->setData( EDGE_DIR_TREE, HEXA_TREE_ROLE );
97 _quadDirItem->setData( QUAD_DIR_TREE, HEXA_TREE_ROLE );
98 _hexaDirItem->setData( HEXA_DIR_TREE, HEXA_TREE_ROLE );
100 _vectorDirItem->setData( VECTOR_DIR_TREE, HEXA_TREE_ROLE );
101 _cylinderDirItem->setData( CYLINDER_DIR_TREE, HEXA_TREE_ROLE );
102 _pipeDirItem->setData( PIPE_DIR_TREE, HEXA_TREE_ROLE );
103 _elementsDirItem->setData( ELEMENTS_DIR_TREE, HEXA_TREE_ROLE );
104 _crossElementsDirItem->setData( CROSSELEMENTS_DIR_TREE, HEXA_TREE_ROLE );
106 _groupDirItem->setData( GROUP_DIR_TREE, HEXA_TREE_ROLE );
108 //CS_TODO associations
110 _lawDirItem->setData( LAW_DIR_TREE, HEXA_TREE_ROLE );
111 _propagationDirItem->setData( PROPAGATION_DIR_TREE, HEXA_TREE_ROLE );
114 parentItem->appendRow(_vertexDirItem);
115 parentItem->appendRow(_edgeDirItem);
116 parentItem->appendRow(_quadDirItem);
117 parentItem->appendRow(_hexaDirItem);
118 parentItem->appendRow(_vectorDirItem);
119 parentItem->appendRow(_cylinderDirItem);
120 parentItem->appendRow(_pipeDirItem);
121 parentItem->appendRow(_elementsDirItem);
122 parentItem->appendRow(_crossElementsDirItem);
123 parentItem->appendRow(_groupDirItem);
124 parentItem->appendRow(_lawDirItem);
125 parentItem->appendRow(_propagationDirItem);
128 DocumentModel::~DocumentModel()
130 delete _hexaDocument;
134 void DocumentModel::setName(const QString& name)
136 _hexaDocument->setName( name.toLocal8Bit().constData() );
137 emit nameChanged(name);
140 QString DocumentModel::getName()
142 return _hexaDocument->getName();
145 HEXA_NS::EltBase* DocumentModel::getHexaPtr(const QModelIndex& iElt)
147 HEXA_NS::EltBase *elt = NULL;
148 switch ( /*data(iElt, HEXA_TREE_ROLE).toInt()*/iElt.data(HEXA_TREE_ROLE).toInt() ){
149 case VERTEX_TREE : elt = getHexaPtr<HEXA_NS::Vertex*>(iElt); break;
150 case EDGE_TREE : elt = getHexaPtr<HEXA_NS::Edge*>(iElt); break;
151 case QUAD_TREE : elt = getHexaPtr<HEXA_NS::Quad*>(iElt); break;
152 case HEXA_TREE : elt = getHexaPtr<HEXA_NS::Hexa*>(iElt); break;
153 case VECTOR_TREE : elt = getHexaPtr<HEXA_NS::Vector*>(iElt); break;
154 case CYLINDER_TREE : elt = getHexaPtr<HEXA_NS::Cylinder*>(iElt); break;
155 case PIPE_TREE : elt = getHexaPtr<HEXA_NS::Pipe*>(iElt); break;
156 case ELEMENTS_TREE : elt = getHexaPtr<HEXA_NS::Elements*>(iElt); break;
157 case CROSSELEMENTS_TREE : elt = getHexaPtr<HEXA_NS::CrossElements*>(iElt); break;
162 DocumentModel::GeomObj* DocumentModel::convertToGeomObj(GEOM::GeomObjPtr geomObjPtr)
165 DocumentModel::GeomObj *res = NULL;
167 if ( geomObjPtr && GEOMBase::GetShape(geomObjPtr.get(), aShape) && !aShape.IsNull() )
169 res = new DocumentModel::GeomObj;
170 if (res == NULL) return NULL;
171 QString mainShapeEntry;
175 if ( geomObjPtr->IsMainShape() ){
176 mainShapeEntry = geomObjPtr->GetStudyEntry();
177 brep = shape2string( aShape ).c_str();
180 TopoDS_Shape subshape;
181 GEOM::GEOM_Object_var mainShape = geomObjPtr->GetMainShape();
182 mainShapeEntry = mainShape->GetStudyEntry();
183 // CS_TODO : à optimiser
184 bool okShape = GEOMBase::GetShape( mainShape , shape);//,const TopAbs_ShapeEnum type = TopAbs_SHAPE );
185 bool oksubShape = GEOMBase::GetShape( geomObjPtr.get(), subshape );//,const TopAbs_ShapeEnum type = TopAbs_SHAPE );
186 if ( okShape && oksubShape ){
187 brep = shape2string( subshape ).c_str();
188 subId = GEOMBase::GetIndex( subshape, shape );
191 res->name = GEOMBase::GetName( geomObjPtr.get() );
192 res->entry = mainShapeEntry;
193 res->subid = QString::number(subId);
203 void DocumentModel::load( const QString& xmlFileName ) // Fill Data
205 MESSAGE("HEXABLOCKGUI::load() => "<<xmlFileName.toStdString());
206 _hexaDocument->loadXml(xmlFileName.toLocal8Bit().constData() );
215 emit patternDataChanged();
217 // BUILDER, ASSOCIATION, GROUPS, ... CS_TODO _fillBuilderFrom( _hexaDocument );
220 void DocumentModel::save( const QString& xmlFileName )
222 MESSAGE("HEXABLOCKGUI::save() => "<<xmlFileName.toStdString());
223 _hexaDocument->save( xmlFileName.toLocal8Bit().constData() );
226 void DocumentModel::updateData()
232 emit patternDataChanged();
235 void DocumentModel::clearAll()
242 //dataChanged( const QModelIndex & topLeft, const QModelIndex & bottomRight )
243 //CS_TODO : todo : association, groups, mesh
246 void DocumentModel::clearData()
248 _vertexDirItem->removeRows( 0, _vertexDirItem->rowCount() );
249 _edgeDirItem->removeRows(0, _edgeDirItem->rowCount() );
250 _quadDirItem->removeRows(0, _quadDirItem->rowCount() );
251 _hexaDirItem->removeRows(0, _hexaDirItem->rowCount() );
255 void DocumentModel::clearBuilder()
257 _vectorDirItem->removeRows(0, _vectorDirItem->rowCount() );
258 _cylinderDirItem->removeRows(0, _cylinderDirItem->rowCount() );
259 _pipeDirItem->removeRows(0, _pipeDirItem->rowCount() );
260 _elementsDirItem->removeRows(0, _elementsDirItem->rowCount() );
261 _crossElementsDirItem->removeRows(0, _crossElementsDirItem->rowCount() );
264 void DocumentModel::clearAssociation()
269 void DocumentModel::clearGroups()
271 _groupDirItem->removeRows(0, _groupDirItem->rowCount() );
274 void DocumentModel::clearMesh()
276 _lawDirItem->removeRows(0, _lawDirItem->rowCount() );
277 _propagationDirItem->removeRows(0, _propagationDirItem->rowCount() );
281 void DocumentModel::fillData()
284 HEXA_NS::Vertex *v = NULL;
285 VertexItem *vItem = NULL;
286 for ( int i=0; i<_hexaDocument->countVertex(); ++i ){
287 v = _hexaDocument->getVertex(i);
289 vItem = new VertexItem(v, _entry);
290 _vertexDirItem->appendRow(vItem);
293 HEXA_NS::Edge *e = NULL;
294 EdgeItem *eItem = NULL;
295 for ( int i=0; i<_hexaDocument->countEdge(); ++i ){
296 e = _hexaDocument->getEdge(i);
297 eItem = new EdgeItem(e, _entry);
298 _edgeDirItem->appendRow(eItem);
301 HEXA_NS::Quad *q = NULL;
302 QuadItem *qItem = NULL;
303 for ( int i=0; i<_hexaDocument->countQuad(); ++i ){
304 q = _hexaDocument->getQuad(i);
305 qItem = new QuadItem(q, _entry);
306 _quadDirItem->appendRow(qItem);
309 HEXA_NS::Hexa *h = NULL;
310 HexaItem *hItem = NULL;
311 for ( int i=0; i<_hexaDocument->countHexa(); ++i ){
312 h = _hexaDocument->getHexa(i);
313 hItem = new HexaItem(h, _entry);
314 _hexaDirItem->appendRow(hItem);
319 void DocumentModel::fillBuilder()
321 HEXA_NS::Vector *v = NULL;
322 VectorItem *vItem = NULL;
323 for ( int i=0; i<_hexaDocument->countVector(); ++i ){
324 v = _hexaDocument->getVector(i);
325 vItem = new VectorItem(v);
326 _vectorDirItem->appendRow(vItem);
330 HEXA_NS::Cylinder *c = NULL;
331 CylinderItem *cItem = NULL;
332 for ( int i=0; i<_hexaDocument->countCylinder(); ++i ){
333 c = _hexaDocument->getCylinder(i);
334 cItem = new CylinderItem(c, _entry);
335 _cylinderDirItem->appendRow(cItem);
339 HEXA_NS::Pipe *p = NULL;
340 PipeItem *pItem = NULL;
341 for ( int i=0; i<_hexaDocument->countPipe(); ++i ){
342 p = _hexaDocument->getPipe(i);
343 pItem = new PipeItem(p);
344 _pipeDirItem->appendRow(pItem);
347 void DocumentModel::fillAssociation()
352 //------------------------------------------- NEW ITEMS
353 //void DocumentModel::fillGroups()
355 // HEXA_NS::Group *g = NULL;
356 // GroupItem *gItem = NULL;
357 // for ( int i=0; i<_hexaDocument->countGroup(); ++i ){
358 // g = _hexaDocument->getGroup(i);
359 // gItem = new GroupItem(g, _entry);
360 // _groupDirItem->appendRow(gItem);
364 //void DocumentModel::fillMesh()
366 // HEXA_NS::Law *l = NULL;
367 // LawItem *lItem = NULL;
368 // for ( int i=0; i<_hexaDocument->countLaw(); ++i ){
369 // l = _hexaDocument->getLaw(i);
370 // lItem = new LawItem(l);
371 // _lawDirItem->appendRow(lItem);
374 // HEXA_NS::Propagation *p = NULL;
375 // PropagationItem *pItem = NULL;
376 // for ( int i=0; i<_hexaDocument->countPropagation(); ++i ){
377 // p = _hexaDocument->getPropagation(i);
378 // pItem = new PropagationItem(p, _entry);
379 // pItem->setText(QString("Propagation%1").arg(i) );
380 // _propagationDirItem->appendRow(pItem);
383 //----------------------------------------------- END NEW ITEMS
385 void DocumentModel::fillGroups()
387 HEXA_NS::Group *g = NULL;
388 GroupItem *gItem = NULL;
389 for ( int i=0; i<_hexaDocument->countGroup(); ++i ){
390 g = _hexaDocument->getGroup(i);
391 //std::cout<<"getGroup => "<< i << std::endl;
392 gItem = new GroupItem(g);
393 gItem->setData( _entry, HEXA_DOC_ENTRY_ROLE );
394 _groupDirItem->appendRow(gItem);
398 void DocumentModel::fillMesh()
401 HEXA_NS::Law *l = NULL;
402 LawItem *lItem = NULL;
403 for ( int i=0; i<_hexaDocument->countLaw(); ++i ){
404 l = _hexaDocument->getLaw(i);
405 lItem = new LawItem(l);
406 _lawDirItem->appendRow(lItem);
409 // _propagationDirItem
410 HEXA_NS::Propagation *p = NULL;
411 PropagationItem *pItem = NULL;
412 for ( int i=0; i<_hexaDocument->countPropagation(); ++i ){
413 p = _hexaDocument->getPropagation(i);
414 pItem = new PropagationItem(p);
415 pItem->setText(QString("Propagation%1").arg(i) );
416 pItem->setData( _entry, HEXA_DOC_ENTRY_ROLE );
417 _propagationDirItem->appendRow(pItem);
421 HEXA_NS::Hexa* DocumentModel::getQuadHexa(HEXA_NS::Quad* quad)
424 for ( int i=0; i<_hexaDocument->countHexa(); ++i ){
425 hexa = _hexaDocument->getHexa(i);
426 if (hexa->findQuad(quad) > -1) return hexa;
432 Qt::ItemFlags DocumentModel::flags(const QModelIndex &index) const
436 if (!index.isValid()) return Qt::ItemIsEnabled;
438 if ( _disallowEdition ){
439 return QAbstractItemModel::flags(index) | Qt::ItemFlags( ~Qt::ItemIsEditable );
441 return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
445 void DocumentModel::allowEdition()
447 MESSAGE("DocumentModel::allowEdition(){");
448 _disallowEdition = false;
452 void DocumentModel::disallowEdition()
454 MESSAGE("DocumentModel::disallowEdition (){");
455 _disallowEdition = true;
459 void DocumentModel::allowDataSelectionOnly()
461 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
462 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
463 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
464 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
466 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
467 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
468 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
469 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
470 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
472 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
473 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
474 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
477 void DocumentModel::allowVertexSelectionOnly()
479 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable);
480 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
481 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
482 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
484 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
485 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
486 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
487 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
488 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
490 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
491 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
492 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
494 // emit layoutChanged();
497 void DocumentModel::allowEdgeSelectionOnly()
499 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
500 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
501 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
502 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
504 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
505 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
506 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
507 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
508 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
510 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
511 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
512 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
515 void DocumentModel::allowQuadSelectionOnly()
517 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
518 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
519 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
520 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
522 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
523 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
524 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
525 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
526 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
528 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
529 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
530 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
533 void DocumentModel::allowHexaSelectionOnly()
535 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
536 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
537 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
538 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
540 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
541 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
542 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
543 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
544 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
546 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
547 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
548 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
551 void DocumentModel::allowVectorSelectionOnly()
553 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
554 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
555 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
556 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
558 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
559 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
560 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
561 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
562 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
564 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
565 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
566 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
569 void DocumentModel::allowCylinderSelectionOnly()
571 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
572 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
573 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
574 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
576 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
577 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
578 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
579 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
580 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
582 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
583 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
584 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
587 void DocumentModel::allowPipeSelectionOnly()
589 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
590 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
591 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
592 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
594 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
595 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
596 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
597 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
598 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
600 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
601 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
602 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
605 void DocumentModel::allowElementsSelectionOnly()
607 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
608 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
609 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
610 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
612 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
613 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
614 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
615 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
616 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
618 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
619 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
620 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
623 void DocumentModel::allowCrossElementsSelectionOnly()
625 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
626 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
627 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
628 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
630 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
631 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
632 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
633 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
634 _crossElementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
636 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
637 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
638 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
641 void DocumentModel::allowLawSelectionOnly()
643 _vertexItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
644 _edgeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
645 _quadItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
646 _hexaItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
648 _vectorItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
649 _cylinderItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
650 _pipeItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
651 _elementsItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
652 _crossElementsItemFlags = Qt::ItemFlags( Qt::ItemIsEnabled );
654 _groupItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
655 _lawItemFlags = Qt::ItemFlags( ~Qt::ItemIsEditable );
656 _propagationItemFlags = Qt::ItemFlags( ~Qt::ItemIsEnabled );
660 void DocumentModel::setName( const QModelIndex& iElt, const QString& name )
662 HEXA_NS::EltBase *elt = NULL;
664 switch ( data(iElt, HEXA_TREE_ROLE).toInt() ){
667 HEXA_NS::Group* grp = iElt.data( HEXA_DATA_ROLE ).value< HEXA_NS::Group* >();
668 grp->setName( name.toLatin1().data() );
673 HEXA_NS::Law* l = iElt.data( HEXA_DATA_ROLE ).value< HEXA_NS::Law* >();
674 l->setName( name.toLatin1().data() );
677 // case PROPAGATION_TREE : elt = iElt.data( HEXA_DATA_ROLE ).value< HEXA_NS::Propagation* >(); break;
678 default: elt = getHexaPtr(iElt);
681 if ( elt != NULL ) elt->setName( name.toStdString() );
682 setData( iElt, name );
686 bool DocumentModel::clearEltAssociations( const QModelIndex& iElt )
689 HEXA_NS::EltBase *elt = getHexaPtr(iElt);
692 elt->clearAssociation();
693 setData( iElt, QVariant(), HEXA_ASSOC_ENTRY_ROLE );
700 QModelIndex DocumentModel::addVertex( double x, double y, double z )
702 QModelIndex vertexIndex;
704 HEXA_NS::Vertex* hv = _hexaDocument->addVertex(x, y, z);
705 if ( hv->isValid() ){
706 VertexItem* v = new VertexItem(hv, _entry);
707 _vertexDirItem->appendRow(v);
708 vertexIndex = v->index();
709 emit patternDataChanged();
717 QModelIndex DocumentModel::addEdgeVertices (const QModelIndex &i_v0, const QModelIndex &i_v1 )
719 QModelIndex edgeIndex;
721 HEXA_NS::Vertex* hv0 = getHexaPtr<HEXA_NS::Vertex*>(i_v0);
722 HEXA_NS::Vertex* hv1 = getHexaPtr<HEXA_NS::Vertex*>(i_v1);
724 HEXA_NS::Edge* he = _hexaDocument->addEdge( hv0, hv1 );
726 if ( he->isValid() ){
727 EdgeItem* e = new EdgeItem(he, _entry);
728 _edgeDirItem->appendRow(e);
729 edgeIndex = e->index();
730 emit patternDataChanged();
737 QModelIndex DocumentModel::addEdgeVector( const QModelIndex &i_v, const QModelIndex &i_vec )
739 QModelIndex edgeIndex;
741 HEXA_NS::Vertex* hv = getHexaPtr<HEXA_NS::Vertex*>(i_v);
742 HEXA_NS::Vector* hvec = getHexaPtr<HEXA_NS::Vector*>(i_vec);
744 if (!hv || !hvec) return edgeIndex;
746 HEXA_NS::Edge* he = _hexaDocument->addEdge( hv, hvec );
747 if (!he) return edgeIndex;
748 HEXA_NS::Vertex* hv2 = he->getAval(); //the new vertex resulting from the creation of the edge
749 if (!hv2) return edgeIndex;
751 //ADD the elements in the treeview
752 if ( he->isValid() ){
754 EdgeItem* e = new EdgeItem(he, _entry);
755 _edgeDirItem->appendRow(e);
758 VertexItem* v = new VertexItem(hv2, _entry);
759 _vertexDirItem->appendRow(v);
761 edgeIndex = e->index();
762 emit patternDataChanged();
769 QModelIndex DocumentModel::addQuadVertices( const QModelIndex &i_v0, const QModelIndex &i_v1,
770 const QModelIndex &i_v2, const QModelIndex &i_v3 )
771 { //CS_TODO : gestion erreur
772 QModelIndex quadIndex;
774 HEXA_NS::Vertex* hv0 = getHexaPtr<HEXA_NS::Vertex*>(i_v0);
775 HEXA_NS::Vertex* hv1 = getHexaPtr<HEXA_NS::Vertex*>(i_v1);
776 HEXA_NS::Vertex* hv2 = getHexaPtr<HEXA_NS::Vertex*>(i_v2);
777 HEXA_NS::Vertex* hv3 = getHexaPtr<HEXA_NS::Vertex*>(i_v3);
779 if ( hv0 and hv1 and hv2 and hv3 ){
780 HEXA_NS::Quad* hq = _hexaDocument->addQuadVertices( hv0, hv1, hv2, hv3 );
781 if ( hq->isValid() ){
782 QuadItem* q = new QuadItem(hq, _entry);
783 _quadDirItem->appendRow(q);
784 quadIndex = q->index();
785 emit patternDataChanged();
793 QModelIndex DocumentModel::addQuadEdges( const QModelIndex &e0, const QModelIndex &e1,
794 const QModelIndex &e2, const QModelIndex &e3 )
796 QModelIndex quadIndex;
798 HEXA_NS::Edge* he0 = getHexaPtr<HEXA_NS::Edge*>(e0);
799 HEXA_NS::Edge* he1 = getHexaPtr<HEXA_NS::Edge*>(e1);
800 HEXA_NS::Edge* he2 = getHexaPtr<HEXA_NS::Edge*>(e2);
801 HEXA_NS::Edge* he3 = getHexaPtr<HEXA_NS::Edge*>(e3);
803 if ( he0 and he1 and he2 and he3 ){
804 HEXA_NS::Quad* hq = _hexaDocument->addQuad( he0, he1, he2, he3 );
805 if ( hq->isValid() ){
806 QuadItem* q = new QuadItem(hq, _entry);
807 _quadDirItem->appendRow(q);
808 quadIndex = q->index();
809 emit patternDataChanged();
817 QModelIndex DocumentModel::addHexaVertices(
818 const QModelIndex &iv0, const QModelIndex &iv1,
819 const QModelIndex &iv2, const QModelIndex &iv3,
820 const QModelIndex &iv4, const QModelIndex &iv5,
821 const QModelIndex &iv6, const QModelIndex &iv7 )
825 HEXA_NS::Vertex* hv0 = getHexaPtr<HEXA_NS::Vertex*>(iv0);
826 HEXA_NS::Vertex* hv1 = getHexaPtr<HEXA_NS::Vertex*>(iv1);
827 HEXA_NS::Vertex* hv2 = getHexaPtr<HEXA_NS::Vertex*>(iv2);
828 HEXA_NS::Vertex* hv3 = getHexaPtr<HEXA_NS::Vertex*>(iv3);
829 HEXA_NS::Vertex* hv4 = getHexaPtr<HEXA_NS::Vertex*>(iv4);
830 HEXA_NS::Vertex* hv5 = getHexaPtr<HEXA_NS::Vertex*>(iv5);
831 HEXA_NS::Vertex* hv6 = getHexaPtr<HEXA_NS::Vertex*>(iv6);
832 HEXA_NS::Vertex* hv7 = getHexaPtr<HEXA_NS::Vertex*>(iv7);
834 HEXA_NS::Hexa* hh = _hexaDocument->addHexaVertices( hv0, hv1, hv2, hv3,
835 hv4, hv5, hv6, hv7 );
837 if ( hh->isValid() ){
838 HexaItem* h = new HexaItem(hh, _entry);
839 _hexaDirItem->appendRow(h);
841 emit patternDataChanged();
849 QModelIndex DocumentModel::addHexaQuad( const QModelIndex &i_q0, const QModelIndex &i_q1,
850 const QModelIndex &i_q2,const QModelIndex &i_q3, const QModelIndex &i_q4, const QModelIndex &i_q5 )
851 { //CS_TODO : gestion erreur
852 QModelIndex hexaIndex;
854 HEXA_NS::Quad* hq0 = getHexaPtr<HEXA_NS::Quad*>(i_q0);
855 HEXA_NS::Quad* hq1 = getHexaPtr<HEXA_NS::Quad*>(i_q1);
856 HEXA_NS::Quad* hq2 = getHexaPtr<HEXA_NS::Quad*>(i_q2);
857 HEXA_NS::Quad* hq3 = getHexaPtr<HEXA_NS::Quad*>(i_q3);
858 HEXA_NS::Quad* hq4 = getHexaPtr<HEXA_NS::Quad*>(i_q4);
859 HEXA_NS::Quad* hq5 = getHexaPtr<HEXA_NS::Quad*>(i_q5);
861 HEXA_NS::Hexa* hh = _hexaDocument->addHexa( hq0, hq1, hq2, hq3, hq4, hq5 );
863 if ( hh->isValid() ){
864 HexaItem* h = new HexaItem(hh, _entry);
865 _hexaDirItem->appendRow(h);
866 hexaIndex = h->index();
867 emit patternDataChanged();
874 QModelIndex DocumentModel::addHexaQuads( const QModelIndexList &iquads)
876 QModelIndex hexaIndex;
878 HEXA_NS::Hexa* hh = NULL;
879 HEXA_NS::Quad* hq0, *hq1, *hq2, *hq3, *hq4, *hq5 = NULL;
881 hq0 = getHexaPtr<HEXA_NS::Quad*>(iquads.value(0));
882 hq1 = getHexaPtr<HEXA_NS::Quad*>(iquads.value(1));
883 hq2 = getHexaPtr<HEXA_NS::Quad*>(iquads.value(2));
884 hq3 = getHexaPtr<HEXA_NS::Quad*>(iquads.value(3));
885 hq4 = getHexaPtr<HEXA_NS::Quad*>(iquads.value(4));
886 hq5 = getHexaPtr<HEXA_NS::Quad*>(iquads.value(5));
888 if ( hq0 && hq1 && hq2 && hq3 && hq4 && hq5 )
889 hh = _hexaDocument->addHexa( hq0, hq1, hq2, hq3, hq4, hq5 );
890 else if ( hq0 && hq1 && hq2 && hq3 && hq4 )
891 hh = _hexaDocument->addHexa5Quads( hq0, hq1, hq2, hq3, hq4 );
892 else if ( hq0 && hq1 && hq2 && hq3 )
893 hh = _hexaDocument->addHexa4Quads( hq0, hq1, hq2, hq3 );
894 else if ( hq0 && hq1 && hq2)
895 hh = _hexaDocument->addHexa3Quads( hq0, hq1, hq2 );
896 else if ( hq0 && hq1 )
897 hh = _hexaDocument->addHexa2Quads( hq0, hq1);
899 if ( hh && hh->isValid() ){
901 unsigned int nbRows = _hexaDirItem->rowCount();
903 hexaIndex = _hexaDirItem->child(nbRows-1)->index();
910 // Vector addVector( in double dx, in double dy, in double dz )
911 // raises (SALOME::SALOME_Exception);
912 QModelIndex DocumentModel::addVector( double dx, double dy, double dz )
914 QModelIndex vectorIndex;
916 HEXA_NS::Vector* hv = _hexaDocument->addVector(dx, dy, dz);
918 if ( hv->isValid() ){
919 VectorItem* v = new VectorItem(hv);
920 _vectorDirItem->appendRow(v);
921 vectorIndex = v->index();
929 QModelIndex DocumentModel::addVectorVertices( const QModelIndex &iv0, const QModelIndex &iv1 )
933 HEXA_NS::Vertex* hv0 = getHexaPtr<HEXA_NS::Vertex*>(iv0);
934 HEXA_NS::Vertex* hv1 = getHexaPtr<HEXA_NS::Vertex*>(iv1);
936 HEXA_NS::Vector* hvec = _hexaDocument->addVectorVertices( hv0, hv1 );
938 if ( hvec->isValid() ){
939 VectorItem* vec = new VectorItem(hvec);
940 _vectorDirItem->appendRow(vec);
949 QModelIndex DocumentModel::addCylinder( const QModelIndex &iv, const QModelIndex &ivec, double r, double h )
953 HEXA_NS::Vertex* hv = getHexaPtr<HEXA_NS::Vertex*>(iv);
954 HEXA_NS::Vector* hvec = getHexaPtr<HEXA_NS::Vector*>(ivec);
956 HEXA_NS::Cylinder* hcyl = _hexaDocument->addCylinder( hv, hvec, r, h );
958 if ( hcyl->isValid() ){
959 CylinderItem* cyl = new CylinderItem(hcyl);
960 _cylinderDirItem->appendRow(cyl);
969 QModelIndex DocumentModel::addPipe( const QModelIndex &iv, const QModelIndex &ivec, double ri, double re, double h )
973 HEXA_NS::Vertex* hv = getHexaPtr<HEXA_NS::Vertex*>(iv);
974 HEXA_NS::Vector* hvec = getHexaPtr<HEXA_NS::Vector*>(ivec);
976 HEXA_NS::Pipe* hPipe = _hexaDocument->addPipe( hv, hvec, ri, re, h );
978 if ( hPipe->isValid() ){
979 PipeItem* pipe = new PipeItem(hPipe);
980 _pipeDirItem->appendRow(pipe);
981 iPipe = pipe->index();
989 QModelIndex DocumentModel::makeCartesian( const QModelIndex& i_pt,
990 const QModelIndex& i_vec_x, const QModelIndex& i_vec_y, const QModelIndex& i_vec_z,
991 long nx, long ny, long nz)
993 QModelIndex eltsIndex;
994 //std::cout<<"makeCartesian begin"<<std::endl;
996 HEXA_NS::Vertex* hpt = getHexaPtr<HEXA_NS::Vertex*>(i_pt);
997 HEXA_NS::Vector* hvec_x = getHexaPtr<HEXA_NS::Vector*>(i_vec_x);
998 HEXA_NS::Vector* hvec_y = getHexaPtr<HEXA_NS::Vector*>(i_vec_y);
999 HEXA_NS::Vector* hvec_z = getHexaPtr<HEXA_NS::Vector*>(i_vec_z);
1001 HEXA_NS::Elements* new_helts = _hexaDocument->makeCartesian( hpt,
1002 hvec_x, hvec_y, hvec_z,
1005 if ( new_helts->isValid() ){
1006 updateData(); //CS_TODO more or less?
1007 ElementsItem* eltsItem = new ElementsItem(new_helts);
1008 _elementsDirItem->appendRow(eltsItem);
1009 eltsIndex = eltsItem->index();
1016 QModelIndex DocumentModel::makeCartesian( const QModelIndex& ivex,
1017 const QModelIndex& ivec,
1018 int nx, int ny, int nz )
1022 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(ivex);
1023 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1025 HEXA_NS::Elements* hElts = _hexaDocument->makeCartesian( hVex,
1028 if ( hElts->isValid() ){
1029 updateData(); //CS_TODO more or less?
1030 ElementsItem* elts = new ElementsItem(hElts);
1031 _elementsDirItem->appendRow(elts);
1032 iElts = elts->index();
1040 // Elements makeCylindrical( in Vertex pt,
1041 // in Vector vex, in Vector vez,
1042 // in double dr, in double da, in double dl,
1043 // in long nr, in long na, in long nl,
1044 // in boolean fill )
1045 // raises (SALOME::SALOME_Exception);
1046 QModelIndex DocumentModel::makeCylindrical( const QModelIndex& i_pt,
1047 const QModelIndex& i_vec_x, const QModelIndex& i_vec_z,
1048 double dr, double da, double dl,
1049 long nr, long na, long nl,
1053 QModelIndex eltsIndex;
1055 HEXA_NS::Vertex* hpt = getHexaPtr<HEXA_NS::Vertex*>(i_pt);
1056 HEXA_NS::Vector* hvec_x = getHexaPtr<HEXA_NS::Vector*>(i_vec_x);
1057 HEXA_NS::Vector* hvec_z = getHexaPtr<HEXA_NS::Vector*>(i_vec_z);
1059 HEXA_NS::Elements* new_helts = _hexaDocument->makeCylindrical( hpt, hvec_x, hvec_z, dr, da, dl, nr, na, nl, fill );
1061 if ( new_helts->isValid() ){
1062 updateData(); //CS_TODO more or less?
1063 ElementsItem* eltsItem = new ElementsItem(new_helts);
1064 _elementsDirItem->appendRow(eltsItem);
1065 eltsIndex = eltsItem->index();
1073 QModelIndex DocumentModel::makeCylindricals(
1074 const QModelIndex& icenter, const QModelIndex& ibase, const QModelIndex& iheight,
1075 QList< double> radius, QList<double> angles, QList<double> heights,
1078 QModelIndex eltsIndex;
1080 HEXA_NS::Vertex* hcenter = getHexaPtr<HEXA_NS::Vertex*>(icenter);
1081 HEXA_NS::Vector* hbase =getHexaPtr<HEXA_NS::Vector*>(ibase);
1082 HEXA_NS::Vector* hheight = getHexaPtr<HEXA_NS::Vector*>(iheight);
1084 // HEXA_NS::Elements* helts;
1085 std::vector<double> r = radius.toVector().toStdVector();
1086 std::vector<double> a = angles.toVector().toStdVector();
1087 std::vector<double> h = heights.toVector().toStdVector();
1089 HEXA_NS::Elements* helts = _hexaDocument->makeCylindricals(
1090 hcenter, hbase, hheight,
1094 if ( helts->isValid() ){
1095 updateData(); //CS_TODO more or less?
1096 ElementsItem* eltsItem = new ElementsItem(helts);
1097 _elementsDirItem->appendRow(eltsItem);
1098 eltsIndex = eltsItem->index();
1105 QModelIndex DocumentModel::makeSpherical( const QModelIndex& iv, const QModelIndex& ivec, int nb, double k)
1109 HEXA_NS::Vertex* hv = getHexaPtr<HEXA_NS::Vertex*>(iv);
1110 HEXA_NS::Vector* hvec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1112 HEXA_NS::Elements* hElts = _hexaDocument->makeSpherical( hv, hvec, nb, k );
1114 if ( hElts->isValid() ){
1115 updateData(); //CS_TODO more or less?
1116 ElementsItem* elts = new ElementsItem(hElts);
1117 _elementsDirItem->appendRow(elts);
1118 iElts = elts->index();
1126 QModelIndex DocumentModel::makeSpherical( const QModelIndex& icenter, double radius, int nb, double k )
1130 HEXA_NS::Vertex* hcenter = getHexaPtr<HEXA_NS::Vertex*>(icenter);
1132 HEXA_NS::Elements* helts = _hexaDocument->makeSpherical( hcenter, radius, nb, k );
1134 if ( helts->isValid() ){
1135 updateData(); //CS_TODO more or less?
1136 ElementsItem* eltsItem = new ElementsItem(helts);
1137 _elementsDirItem->appendRow(eltsItem);
1138 iElts = eltsItem->index();
1146 QModelIndex DocumentModel::makeCylinder( const QModelIndex& icyl, const QModelIndex& ivec,
1147 int nr, int na, int nl )
1151 HEXA_NS::Cylinder* hcyl = getHexaPtr<HEXA_NS::Cylinder*>(icyl);
1152 HEXA_NS::Vector* hvec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1154 HEXA_NS::Elements* hElts = _hexaDocument->makeCylinder( hcyl, hvec, nr, na, nl );
1155 if ( hElts->isValid() ){
1156 updateData(); //CS_TODO more or less?
1157 ElementsItem* elts = new ElementsItem(hElts);
1158 _elementsDirItem->appendRow(elts);
1159 iElts = elts->index();
1167 QModelIndex DocumentModel::makePipe( const QModelIndex& ipipe, const QModelIndex& ivecx,
1168 int nr, int na, int nl )
1172 HEXA_NS::Pipe* hPipe = getHexaPtr<HEXA_NS::Pipe*>(ipipe);
1173 HEXA_NS::Vector* hVecx = getHexaPtr<HEXA_NS::Vector*>(ivecx);
1175 HEXA_NS::Elements* hElts = _hexaDocument->makePipe( hPipe, hVecx, nr, na, nl );
1177 if ( hElts->isValid() ){
1178 updateData(); //CS_TODO more or less?
1179 ElementsItem* elts = new ElementsItem(hElts);
1180 _elementsDirItem->appendRow(elts);
1181 iElts = elts->index();
1189 QModelIndex DocumentModel::makeCylinders(const QModelIndex& icyl1, const QModelIndex& icyl2)
1191 QModelIndex iCrossElts;
1193 HEXA_NS::Cylinder* hCyl1 = getHexaPtr<HEXA_NS::Cylinder*>(icyl1);
1194 HEXA_NS::Cylinder* hCyl2 = getHexaPtr<HEXA_NS::Cylinder*>(icyl2);
1196 HEXA_NS::CrossElements* hCrossElts = _hexaDocument->makeCylinders( hCyl1, hCyl2 );
1198 if ( hCrossElts->isValid() ){
1199 updateData(); //CS_TODO more or less?
1200 ElementsItem* crossElts = new ElementsItem(hCrossElts);
1201 _crossElementsDirItem->appendRow(crossElts);
1202 iCrossElts = crossElts->index();
1211 QModelIndex DocumentModel::makePipes( const QModelIndex& ipipe1, const QModelIndex& ipipe2 )
1213 QModelIndex iCrossElts;
1215 HEXA_NS::Pipe* hPipe1 = getHexaPtr<HEXA_NS::Pipe*>(ipipe1);
1216 HEXA_NS::Pipe* hPipe2 = getHexaPtr<HEXA_NS::Pipe*>(ipipe2);
1218 HEXA_NS::CrossElements* hCrossElts = _hexaDocument->makePipes( hPipe1, hPipe2 );
1220 if ( hCrossElts->isValid() ){
1221 updateData(); //CS_TODO more or less?
1222 ElementsItem* crossElts = new ElementsItem(hCrossElts);
1223 _crossElementsDirItem->appendRow(crossElts);
1224 iCrossElts = crossElts->index();
1225 QString tmp = "/tmp/makePipes.vtk";
1226 _hexaDocument->saveVtk( tmp.toLocal8Bit().constData() );
1234 QModelIndex DocumentModel::makeRind( const QModelIndex& icenter,
1235 const QModelIndex& ivecx, const QModelIndex& ivecz,
1236 double radext, double radint, double radhole,
1237 const QModelIndex& iplorig,
1238 int nrad, int nang, int nhaut )
1242 HEXA_NS::Vertex* hcenter = getHexaPtr<HEXA_NS::Vertex*>(icenter);
1243 HEXA_NS::Vector* hvecx = getHexaPtr<HEXA_NS::Vector*>(ivecx);
1244 HEXA_NS::Vector* hvecz = getHexaPtr<HEXA_NS::Vector*>(ivecz);
1245 HEXA_NS::Vertex* hplorig = getHexaPtr<HEXA_NS::Vertex*>(iplorig);
1247 HEXA_NS::Elements* hElts = _hexaDocument->makeRind( hcenter,
1249 radext, radint, radhole,
1251 nrad, nang, nhaut );
1253 if ( hElts->isValid() ){
1254 updateData(); //CS_TODO more or less?
1255 ElementsItem* eltsItem = new ElementsItem(hElts);
1256 _elementsDirItem->appendRow(eltsItem);
1257 iElts = eltsItem->index();
1265 QModelIndex DocumentModel::makePartRind( const QModelIndex& icenter,
1266 const QModelIndex& ivecx, const QModelIndex& ivecz,
1267 double radext, double radint, double radhole,
1268 const QModelIndex& iplorig, double angle,
1269 int nrad, int nang, int nhaut )
1273 HEXA_NS::Vertex* hcenter = getHexaPtr<HEXA_NS::Vertex*>(icenter);
1274 HEXA_NS::Vector* hvecx = getHexaPtr<HEXA_NS::Vector*>(ivecx);
1275 HEXA_NS::Vector* hvecz = getHexaPtr<HEXA_NS::Vector*>(ivecz);
1276 HEXA_NS::Vertex* hplorig = getHexaPtr<HEXA_NS::Vertex*>(iplorig);
1278 HEXA_NS::Elements* hElts = _hexaDocument->makePartRind( hcenter,
1280 radext, radint, radhole,
1282 nrad, nang, nhaut );
1284 if ( hElts->isValid() ){
1286 ElementsItem* eltsItem = new ElementsItem(hElts);
1287 _elementsDirItem->appendRow(eltsItem);
1288 iElts = eltsItem->index();
1296 QModelIndex DocumentModel::makeSphere( const QModelIndex& icenter,
1297 const QModelIndex& ivecx, const QModelIndex& ivecz,
1298 double radius, double radhole,
1299 const QModelIndex& iplorig,
1300 int nrad, int nang, int nhaut )
1304 HEXA_NS::Vertex* hcenter = getHexaPtr<HEXA_NS::Vertex*>(icenter);
1305 HEXA_NS::Vector* hvecx = getHexaPtr<HEXA_NS::Vector*>(ivecx);
1306 HEXA_NS::Vector* hvecz = getHexaPtr<HEXA_NS::Vector*>(ivecz);
1307 HEXA_NS::Vertex* hplorig = getHexaPtr<HEXA_NS::Vertex*>(iplorig);
1309 HEXA_NS::Elements* hElts = _hexaDocument->makeSphere( hcenter,
1315 if ( hElts->isValid() ){
1317 ElementsItem* eltsItem = new ElementsItem(hElts);
1318 _elementsDirItem->appendRow(eltsItem);
1319 iElts = eltsItem->index();
1327 QModelIndex DocumentModel::makePartSphere( const QModelIndex& icenter,
1328 const QModelIndex& ivecx, const QModelIndex& ivecz,
1329 double radius, double radhole,
1330 const QModelIndex& iplorig, double angle,
1331 int nrad, int nang, int nhaut )
1335 HEXA_NS::Vertex* hcenter = getHexaPtr<HEXA_NS::Vertex*>(icenter);
1336 HEXA_NS::Vector* hvecx = getHexaPtr<HEXA_NS::Vector*>(ivecx);
1337 HEXA_NS::Vector* hvecz = getHexaPtr<HEXA_NS::Vector*>(ivecz);
1338 HEXA_NS::Vertex* hplorig = getHexaPtr<HEXA_NS::Vertex*>(iplorig);
1340 HEXA_NS::Elements* hElts = _hexaDocument->makePartSphere( hcenter,
1346 if ( hElts->isValid() ){
1348 ElementsItem* eltsItem = new ElementsItem(hElts);
1349 _elementsDirItem->appendRow(eltsItem);
1350 iElts = eltsItem->index();
1358 // ************ EDIT HEXABLOCK MODEL ************
1360 bool DocumentModel::updateVertex( const QModelIndex& ivertex, double x, double y, double z )
1364 //HEXA_NS::Vertex* hVertex = ivertex.data(HEXA_DATA_ROLE).value<HEXA_NS::Vertex *>(); //CS_TODO? pareil pour toutes les autres méthodes du modèle?
1365 HEXA_NS::Vertex* hVertex = getHexaPtr<HEXA_NS::Vertex*>(ivertex);
1368 // hVertex->setName( name.toStdString() );
1369 hVertex->setX ( x );
1370 hVertex->setY ( y );
1371 hVertex->setZ ( z );
1372 emit patternDataChanged();
1379 bool DocumentModel::removeHexa( const QModelIndex& ihexa )
1382 HEXA_NS::Hexa* hHexa = getHexaPtr<HEXA_NS::Hexa*>(ihexa);
1385 int r = _hexaDocument->removeHexa( hHexa );
1389 } else if ( r == HERR ){
1396 bool DocumentModel::removeConnectedHexa( const QModelIndex& ihexa )
1399 HEXA_NS::Hexa* hHexa = getHexaPtr<HEXA_NS::Hexa*>(ihexa);
1401 int r = _hexaDocument->removeConnectedHexa( hHexa );
1406 } else if ( r == HERR ){
1413 QModelIndex DocumentModel::prismQuad( const QModelIndex& iquad, const QModelIndex& ivec, int nb)
1417 HEXA_NS::Quad* hQuad = getHexaPtr<HEXA_NS::Quad*>(iquad);
1418 HEXA_NS::Vector* hVect = getHexaPtr<HEXA_NS::Vector*>(ivec);
1420 HEXA_NS::Elements* hElts = _hexaDocument->prismQuad( hQuad, hVect, nb );
1422 if ( hElts->isValid() ){
1423 updateData(); //CS_TODO more or less?
1424 ElementsItem* elts = new ElementsItem(hElts);
1425 _elementsDirItem->appendRow(elts);
1426 iElts = elts->index();
1434 QModelIndex DocumentModel::prismQuads( const QModelIndexList& iquads, const QModelIndex& ivec, int nb)
1438 HEXA_NS::Quads hQuads;
1439 HEXA_NS::Quad* hQuad = NULL;
1440 foreach( const QModelIndex& iquad, iquads ){
1441 hQuad = getHexaPtr<HEXA_NS::Quad*>(iquad);
1442 hQuads.push_back( hQuad );
1444 HEXA_NS::Vector* hVect = getHexaPtr<HEXA_NS::Vector*>(ivec);
1446 HEXA_NS::Elements* hElts = _hexaDocument->prismQuads( hQuads, hVect, nb );
1447 if ( hElts->isValid() ){
1448 updateData(); //CS_TODO more or less?
1449 ElementsItem* elts = new ElementsItem(hElts);
1450 _elementsDirItem->appendRow(elts);
1451 iElts = elts->index();
1458 QModelIndex DocumentModel::prismQuads( const QModelIndexList& iquads, const QModelIndex& ivec, std::vector<double> layersSize, int nb)
1462 HEXA_NS::Quads hQuads;
1463 HEXA_NS::Quad* hQuad = NULL;
1464 foreach( const QModelIndex& iquad, iquads ){
1465 hQuad = getHexaPtr<HEXA_NS::Quad*>(iquad);
1466 hQuads.push_back( hQuad );
1468 HEXA_NS::Vector* hVect = getHexaPtr<HEXA_NS::Vector*>(ivec);
1470 HEXA_NS::Elements* hElts = _hexaDocument->prismQuadsVec( hQuads, hVect, layersSize, nb );
1471 if ( hElts->isValid() ){
1472 updateData(); //CS_TODO more or less?
1473 ElementsItem* elts = new ElementsItem(hElts);
1474 _elementsDirItem->appendRow(elts);
1475 iElts = elts->index();
1483 QModelIndex DocumentModel::joinQuad(
1484 const QModelIndex& iquadstart, const QModelIndex& iquaddest,
1485 const QModelIndex& iv0, const QModelIndex& iv1,
1486 const QModelIndex& iv2, const QModelIndex& iv3,
1491 HEXA_NS::Quad* hQuadStart = getHexaPtr<HEXA_NS::Quad*>(iquadstart);
1492 HEXA_NS::Quad* hQuadDest = getHexaPtr<HEXA_NS::Quad*>(iquaddest);
1494 HEXA_NS::Vertex* hVertex0 = getHexaPtr<HEXA_NS::Vertex*>(iv0);
1495 HEXA_NS::Vertex* hVertex1 = getHexaPtr<HEXA_NS::Vertex*>(iv1);
1496 HEXA_NS::Vertex* hVertex2 = getHexaPtr<HEXA_NS::Vertex*>(iv2);
1497 HEXA_NS::Vertex* hVertex3 = getHexaPtr<HEXA_NS::Vertex*>(iv3);
1499 HEXA_NS::Elements* hElts = _hexaDocument->joinQuad( hQuadStart, hQuadDest,
1500 hVertex0, hVertex1, hVertex2, hVertex3, nb );
1502 if ( hElts->isValid() ){
1503 updateData(); //CS_TODO more or less?
1504 ElementsItem* elts = new ElementsItem(hElts);
1505 _elementsDirItem->appendRow(elts);
1506 iElts = elts->index();
1514 QModelIndex DocumentModel::joinQuads(
1515 const QModelIndexList& iquadsstart, const QModelIndex& iquaddest,
1516 const QModelIndex& iv0, const QModelIndex& iv1,
1517 const QModelIndex& iv2, const QModelIndex& iv3,
1522 HEXA_NS::Quad* hQuadStart;
1523 HEXA_NS::Quads hQuadsStart;
1525 foreach( const QModelIndex& iquad, iquadsstart ){
1526 hQuadStart = data( iquad, HEXA_DATA_ROLE ).value<HEXA_NS::Quad *>();
1527 hQuadsStart.push_back( hQuadStart );
1529 HEXA_NS::Quad* hQuadDest = data( iquaddest, HEXA_DATA_ROLE ).value<HEXA_NS::Quad *>();
1531 HEXA_NS::Vertex* hVertex0 = getHexaPtr<HEXA_NS::Vertex*>(iv0);
1532 HEXA_NS::Vertex* hVertex1 = getHexaPtr<HEXA_NS::Vertex*>(iv1);
1533 HEXA_NS::Vertex* hVertex2 = getHexaPtr<HEXA_NS::Vertex*>(iv2);
1534 HEXA_NS::Vertex* hVertex3 = getHexaPtr<HEXA_NS::Vertex*>(iv3);
1536 HEXA_NS::Elements* hElts = _hexaDocument->joinQuads(
1537 hQuadsStart, hQuadDest,
1538 hVertex0, hVertex1, hVertex2, hVertex3,
1541 if ( hElts->isValid() ){
1542 updateData(); //CS_TODO more or less?
1543 ElementsItem* elts = new ElementsItem(hElts);
1544 _elementsDirItem->appendRow(elts);
1545 iElts = elts->index();
1553 bool DocumentModel::mergeVertices( const QModelIndex &iv0, const QModelIndex &iv1 ) //CS_TODO : impact sur le model?
1557 HEXA_NS::Vertex* hv0 = getHexaPtr<HEXA_NS::Vertex*>(iv0);
1558 HEXA_NS::Vertex* hv1 = getHexaPtr<HEXA_NS::Vertex*>(iv1);
1560 int r = _hexaDocument->mergeVertices( hv0, hv1 );
1562 updateData(); //CS_TODO more or less?
1564 } else if ( r == HERR ){
1571 bool DocumentModel::mergeEdges( const QModelIndex &ie0, const QModelIndex &ie1,
1572 const QModelIndex &iv0, const QModelIndex &iv1 )
1573 //CS_TODO : impact sur le model?
1577 HEXA_NS::Edge* he0 = getHexaPtr<HEXA_NS::Edge*>(ie0);
1578 HEXA_NS::Edge* he1 = getHexaPtr<HEXA_NS::Edge*>(ie1);
1580 HEXA_NS::Vertex* hv0 = getHexaPtr<HEXA_NS::Vertex*>(iv0);
1581 HEXA_NS::Vertex* hv1 = getHexaPtr<HEXA_NS::Vertex*>(iv1);
1583 int r = _hexaDocument->mergeEdges( he0, he1, hv0, hv1 );
1587 } else if ( r == HERR ){
1594 bool DocumentModel::mergeQuads( const QModelIndex& iquad0, const QModelIndex& iquad1,
1595 const QModelIndex& iv0, const QModelIndex& iv1,
1596 const QModelIndex& iv2, const QModelIndex& iv3 )
1600 HEXA_NS::Quad* hquad0 = data(iquad0, HEXA_DATA_ROLE).value<HEXA_NS::Quad *>();
1601 HEXA_NS::Quad* hquad1 = data(iquad1, HEXA_DATA_ROLE).value<HEXA_NS::Quad *>();
1603 HEXA_NS::Vertex* hv0 = getHexaPtr<HEXA_NS::Vertex*>(iv0);
1604 HEXA_NS::Vertex* hv1 = getHexaPtr<HEXA_NS::Vertex*>(iv1);
1605 HEXA_NS::Vertex* hv2 = getHexaPtr<HEXA_NS::Vertex*>(iv2);
1606 HEXA_NS::Vertex* hv3 = getHexaPtr<HEXA_NS::Vertex*>(iv3);
1608 int r = _hexaDocument->mergeQuads( hquad0, hquad1, hv0, hv1, hv2, hv3 );
1612 } else if ( r == HERR ){
1620 QModelIndex DocumentModel::disconnectVertex( const QModelIndex& ihexa, const QModelIndex& ivertex )
1624 HEXA_NS::Hexa* hHexa = getHexaPtr<HEXA_NS::Hexa*>(ihexa);
1625 HEXA_NS::Vertex* hVertex = getHexaPtr<HEXA_NS::Vertex*>(ivertex);
1627 HEXA_NS::Elements* hElts = _hexaDocument->disconnectVertex( hHexa, hVertex );
1629 if ( hElts && hElts->isValid() ){
1630 updateData(); //CS_TO_CHECK
1631 ElementsItem* elts = new ElementsItem(hElts);
1632 _elementsDirItem->appendRow(elts);
1633 iElts = elts->index();
1641 QModelIndex DocumentModel::disconnectEdge( const QModelIndex& ihexa, const QModelIndex& iedge )
1645 HEXA_NS::Hexa* hHexa = getHexaPtr<HEXA_NS::Hexa*>(ihexa);
1646 HEXA_NS::Edge* hEdge = getHexaPtr<HEXA_NS::Edge*>(iedge);
1648 HEXA_NS::Elements* hElts = _hexaDocument->disconnectEdge( hHexa, hEdge );
1650 if ( hElts->isValid() ){
1651 updateData(); //CS_TO_CHECK
1652 ElementsItem* elts = new ElementsItem(hElts);
1653 _elementsDirItem->appendRow(elts);
1654 iElts = elts->index();
1663 QModelIndex DocumentModel::disconnectEdges( const QModelIndexList& ihexas, const QModelIndexList& iedges )
1667 HEXA_NS::Hexas hHexas;
1668 HEXA_NS::Edges hEdges;
1670 //Construction de la liste des edges
1671 HEXA_NS::Edge* hedge = NULL;
1672 foreach( const QModelIndex& iedge, iedges ){
1673 hedge = getHexaPtr<HEXA_NS::Edge*>(iedge);
1674 hEdges.push_back( hedge );
1677 //Construction de la liste des hexas
1678 HEXA_NS::Hexa* hhexa = NULL;
1679 foreach( const QModelIndex& ihexa, ihexas ){
1680 hhexa = getHexaPtr<HEXA_NS::Hexa*>(ihexa);
1681 hHexas.push_back( hhexa );
1685 HEXA_NS::Elements* hElts = _hexaDocument->disconnectEdges( hHexas, hEdges );
1687 if ( hElts->isValid() ){
1688 updateData(); //CS_TO_CHECK
1689 ElementsItem* elts = new ElementsItem(hElts);
1690 _elementsDirItem->appendRow(elts);
1691 iElts = elts->index();
1700 QModelIndex DocumentModel::disconnectQuad( const QModelIndex& ihexa, const QModelIndex& iquad )
1704 HEXA_NS::Hexa* hHexa = getHexaPtr<HEXA_NS::Hexa*>(ihexa);
1705 HEXA_NS::Quad* hQuad = getHexaPtr<HEXA_NS::Quad*>(iquad);
1707 HEXA_NS::Elements* hElts = _hexaDocument->disconnectQuad( hHexa, hQuad );
1709 if ( hElts->isValid() ){
1710 updateData(); //CS_TO_CHECK
1711 ElementsItem* elts = new ElementsItem(hElts);
1712 _elementsDirItem->appendRow(elts);
1713 iElts = elts->index();
1722 QModelIndex DocumentModel::cutEdge( const QModelIndex &i_e0, int nbcuts )
1723 //CS_TODO : impact sur le model?
1727 HEXA_NS::Edge* he0 = getHexaPtr<HEXA_NS::Edge*>(i_e0);
1728 HEXA_NS::Elements* helts = _hexaDocument->cut( he0, nbcuts );
1730 if ( helts->isValid() ){
1731 updateData(); //CS_TODO more?
1732 ElementsItem* elts = new ElementsItem(helts);
1733 _elementsDirItem->appendRow(elts);
1734 iElts = elts->index();
1745 // Elements makeTranslation( in Elements l, in Vector vec )
1746 // raises (SALOME::SALOME_Exception);
1747 QModelIndex DocumentModel::makeTranslation( const QModelIndex& ielts, const QModelIndex& ivec )
1751 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1752 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1754 HEXA_NS::Elements* hNewElts = _hexaDocument->makeTranslation( hElts, hVec );
1756 if ( hNewElts->isValid() ){
1757 updateData(); //CS_TODO more or less?
1758 ElementsItem* eltsItem = new ElementsItem(hNewElts);
1759 _elementsDirItem->appendRow(eltsItem);
1760 iElts = eltsItem->index();
1770 QModelIndex DocumentModel::makeScale( const QModelIndex& ielts, const QModelIndex& ivex, double k )
1774 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1775 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(ivex);
1777 HEXA_NS::Elements* hNewElts = _hexaDocument->makeScale( hElts, hVex, k );
1779 if ( hNewElts->isValid() ){
1780 updateData(); //CS_TODO more or less?
1781 ElementsItem* eltsItem = new ElementsItem(hNewElts);
1782 _elementsDirItem->appendRow(eltsItem);
1783 iElts = eltsItem->index();
1793 QModelIndex DocumentModel::makeRotation( const QModelIndex& ielts,
1794 const QModelIndex& iv,
1795 const QModelIndex& ivec, double angle )
1799 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1800 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(iv);
1801 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1803 HEXA_NS::Elements* hNewElts = _hexaDocument->makeRotation( hElts, hVex, hVec, angle );
1805 if ( hNewElts->isValid() ){
1806 updateData(); //CS_TODO more or less?
1807 ElementsItem* eltsItem = new ElementsItem(hNewElts);
1808 _elementsDirItem->appendRow(eltsItem);
1809 iElts = eltsItem->index();
1818 QModelIndex DocumentModel::makeSymmetryPoint( const QModelIndex& ielts, const QModelIndex& iv )
1822 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1823 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(iv);
1825 HEXA_NS::Elements* hNewElts = _hexaDocument->makeSymmetryPoint (hElts, hVex);
1827 if ( hNewElts->isValid() ){
1828 updateData(); //CS_TODO more or less?
1829 ElementsItem* eltsItem = new ElementsItem(hNewElts);
1830 _elementsDirItem->appendRow(eltsItem);
1831 iElts = eltsItem->index();
1840 QModelIndex DocumentModel::makeSymmetryLine( const QModelIndex& ielts,
1841 const QModelIndex& iv,
1842 const QModelIndex& ivec )
1846 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1847 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(iv);
1848 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1851 HEXA_NS::Elements* hNewElts = _hexaDocument->makeSymmetryLine( hElts, hVex, hVec );
1853 if ( hNewElts->isValid() ){
1854 updateData(); //CS_TODO more or less?
1855 ElementsItem* eltsItem = new ElementsItem(hNewElts);
1856 _elementsDirItem->appendRow(eltsItem);
1857 iElts = eltsItem->index();
1866 QModelIndex DocumentModel::makeSymmetryPlane( const QModelIndex& ielts, const QModelIndex& iv, const QModelIndex& ivec )
1870 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1871 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(iv);
1872 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1874 HEXA_NS::Elements* hNewElts = _hexaDocument->makeSymmetryPlane( hElts, hVex, hVec );
1876 if ( hNewElts->isValid() ){
1877 updateData(); //CS_TODO more or less?
1878 ElementsItem* eltsItem = new ElementsItem(hNewElts);
1879 _elementsDirItem->appendRow(eltsItem);
1880 iElts = eltsItem->index();
1889 bool DocumentModel::performTranslation( const QModelIndex& ielts, const QModelIndex& ivec )
1893 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1894 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1896 int r = _hexaDocument->performTranslation (hElts, hVec);
1900 } else if ( r == HERR ){
1909 bool DocumentModel::performScale( const QModelIndex& ielts, const QModelIndex& ivex, double k )
1913 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1914 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(ivex);
1916 int r = _hexaDocument->performScale (hElts, hVex, k);
1920 } else if ( r == HERR ){
1928 bool DocumentModel::performRotation( const QModelIndex& ielts, const QModelIndex& ivex, const QModelIndex& ivec, double angle )
1932 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1933 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(ivex);
1934 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1936 int r = _hexaDocument-> performRotation( hElts, hVex, hVec, angle );
1940 } else if ( r == HERR ){
1949 bool DocumentModel::performSymmetryPoint( const QModelIndex& ielts, const QModelIndex& ivex )
1953 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1954 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(ivex);
1956 int r = _hexaDocument->performSymmetryPoint( hElts, hVex );
1960 } else if ( r == HERR ){
1968 bool DocumentModel::performSymmetryLine( const QModelIndex& ielts, const QModelIndex& ivex, const QModelIndex& ivec )
1972 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1973 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(ivex);
1974 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1976 int r = _hexaDocument->performSymmetryLine( hElts, hVex, hVec );
1980 } else if ( r == HERR ){
1988 bool DocumentModel::performSymmetryPlane( const QModelIndex& ielts,
1989 const QModelIndex& ivex,
1990 const QModelIndex& ivec )
1994 HEXA_NS::Elements* hElts = getHexaPtr<HEXA_NS::Elements*>(ielts);
1995 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(ivex);
1996 HEXA_NS::Vector* hVec = getHexaPtr<HEXA_NS::Vector*>(ivec);
1998 int r = _hexaDocument->performSymmetryPlane( hElts, hVex, hVec );
2002 } else if ( r == HERR ){
2009 QModelIndex DocumentModel::revolutionQuads( const QModelIndexList& istartquads,
2010 const QModelIndex& icenter,
2011 const QModelIndex& ivecaxis,
2012 const QList<double>& angles )
2016 HEXA_NS::Quads hstartquads;
2017 HEXA_NS::Quad* hquad = NULL;
2018 foreach( const QModelIndex& iquad, istartquads){
2019 hquad = data( iquad, HEXA_DATA_ROLE ).value<HEXA_NS::Quad*>();
2020 hstartquads.push_back( hquad );
2022 HEXA_NS::Vertex* hcenter = getHexaPtr<HEXA_NS::Vertex*>(icenter);
2023 HEXA_NS::Vector* haxis = getHexaPtr<HEXA_NS::Vector*>(ivecaxis);
2024 std::vector<double> hangles = angles.toVector().toStdVector();
2026 HEXA_NS::Elements* helts = _hexaDocument->revolutionQuads( hstartquads, hcenter, haxis, hangles );
2028 if ( helts && helts->isValid() ){
2030 ElementsItem* eltsItem = new ElementsItem(helts);
2031 _elementsDirItem->appendRow(eltsItem);
2032 ielts = eltsItem->index();
2040 QModelIndex DocumentModel::replace( const QModelIndexList& iquadsPattern,
2041 const QModelIndex& ip1, const QModelIndex& ic1,
2042 const QModelIndex& ip2, const QModelIndex& ic2,
2043 const QModelIndex& ip3, const QModelIndex& ic3 )
2047 HEXA_NS::Vertex* hp1 = getHexaPtr<HEXA_NS::Vertex*>(ip1);
2048 HEXA_NS::Vertex* hc1 = getHexaPtr<HEXA_NS::Vertex*>(ic1);
2049 HEXA_NS::Vertex* hp2 = getHexaPtr<HEXA_NS::Vertex*>(ip2);
2050 HEXA_NS::Vertex* hc2 = getHexaPtr<HEXA_NS::Vertex*>(ic2);
2051 HEXA_NS::Vertex* hp3 = getHexaPtr<HEXA_NS::Vertex*>(ip3);
2052 HEXA_NS::Vertex* hc3 = getHexaPtr<HEXA_NS::Vertex*>(ic3);
2054 HEXA_NS::Quads hquads;
2055 HEXA_NS::Quad* hquad = NULL;
2056 foreach( const QModelIndex& iquad, iquadsPattern ){
2057 hquad = getHexaPtr<HEXA_NS::Quad*>(iquad);
2058 hquads.push_back( hquad );
2061 HEXA_NS::Elements* helts = _hexaDocument->replace( hquads,
2062 hp1, hc1, hp2, hc2, hp3, hc3 );
2063 // HEXA_NS::Elements* helts = NULL;
2065 if ( helts && helts->isValid() ){
2067 ElementsItem* eltsItem = new ElementsItem(helts);
2068 _elementsDirItem->appendRow(eltsItem);
2069 ielts = eltsItem->index();
2077 // ************ ADD ASSOCIATION ************
2079 void DocumentModel::addAssociation( const QModelIndex& iElt, const DocumentModel::GeomObj& assocIn )
2082 HEXA_NS::Shape* assoc = new HEXA_NS::Shape( assocIn.brep.toStdString() );//CS_TODO : delete assoc
2083 assoc->debut = assocIn.start;
2084 assoc->fin = assocIn.end;
2085 assoc->ident = ( assocIn.entry + "," + assocIn.subid ).toStdString();
2086 _assocName[ assocIn.entry ] = assocIn.name; // for getAssociations()
2088 QString currentAssoc, newAssoc;
2090 if ( data(iElt, HEXA_TREE_ROLE) == VERTEX_TREE ){
2091 HEXA_NS::Vertex* hVex = getHexaPtr<HEXA_NS::Vertex*>(iElt);
2092 hVex->setAssociation( assoc );
2093 } else if ( data(iElt, HEXA_TREE_ROLE) == EDGE_TREE ){
2094 HEXA_NS::Edge* hEdge = getHexaPtr<HEXA_NS::Edge*>(iElt);
2095 hEdge->addAssociation( assoc );
2096 } else if ( data(iElt, HEXA_TREE_ROLE) == QUAD_TREE ){
2097 HEXA_NS::Quad* hQuad = getHexaPtr<HEXA_NS::Quad*>(iElt);
2098 hQuad->addAssociation( assoc );
2101 currentAssoc = data( iElt, HEXA_ASSOC_ENTRY_ROLE ).toString();
2102 if ( !currentAssoc.isEmpty() ){
2103 newAssoc = currentAssoc + assocIn.entry + "," + assocIn.subid + ";";
2105 newAssoc = assocIn.entry + "," + assocIn.subid + ";";
2108 setData( iElt, QVariant::fromValue(newAssoc), HEXA_ASSOC_ENTRY_ROLE );
2112 QList<DocumentModel::GeomObj> DocumentModel::getAssociations( const QModelIndex& iElt )
2114 MESSAGE("DocumentModel::getAssociations( "<< iElt.data().toString().toStdString() << " )" );
2115 QList<DocumentModel::GeomObj> res;
2116 DocumentModel::GeomObj assoc;
2118 //std::cout << "getAssociations() start" << std::endl;
2119 if ( data(iElt, HEXA_TREE_ROLE) == VERTEX_TREE ){
2120 MESSAGE("* of a Vertex");
2121 // HEXA_NS::Vertex* hVex = data(iElt, HEXA_DATA_ROLE).value<HEXA_NS::Vertex *>();
2122 HEXA_NS::Vertex *hVex = getHexaPtr<HEXA_NS::Vertex *>(iElt);
2123 HEXA_NS::Shape* hShape = hVex->getAssociation();
2124 QStringList shapeID;
2125 if ( hShape != NULL ){
2127 assoc.subid = QString::number(-1);
2129 assoc.brep = hShape->getBrep().c_str();
2130 assoc.start = hShape->debut;
2131 assoc.end = hShape->fin;
2133 shapeID = QString( hShape->ident.c_str() ).split(",");
2134 if ( shapeID.count() == 2 ){
2135 assoc.entry = shapeID[0];
2136 assoc.subid = shapeID[1].isEmpty()? QString::number(-1) : shapeID[1];
2137 assoc.name = _assocName[assoc.entry];
2139 MESSAGE("* assoc.entry" << assoc.entry.toStdString() );
2140 MESSAGE("* assoc.subid" << assoc.subid.toStdString() );
2141 MESSAGE("* -----------" );
2144 } else if ( data(iElt, HEXA_TREE_ROLE) == EDGE_TREE ){
2145 MESSAGE("* of an Edge");
2146 HEXA_NS::Edge* hEdge = getHexaPtr<HEXA_NS::Edge *>(iElt);
2147 HEXA_NS::Shapes hShapes = hEdge->getAssociations();
2148 QStringList shapeID;
2149 for ( HEXA_NS::Shapes::iterator it = hShapes.begin(); it != hShapes.end(); ++it){
2151 assoc.subid = QString::number(-1);
2153 assoc.brep = (*it)->getBrep().c_str();
2154 assoc.start = (*it)->debut;
2155 assoc.end = (*it)->fin;
2157 MESSAGE("* assoc.ident " << (*it)->ident );
2158 shapeID = QString( (*it)->ident.c_str() ).split(",");
2159 if ( shapeID.count() == 2 ){
2160 assoc.entry = shapeID[0];
2161 assoc.subid = shapeID[1].isEmpty()? QString::number(-1) : shapeID[1];
2162 assoc.name = _assocName[assoc.entry];
2164 MESSAGE("* assoc.entry" << assoc.entry.toStdString() );
2165 MESSAGE("* assoc.subid" << assoc.subid.toStdString() );
2166 MESSAGE("* assoc.brep" << assoc.brep.toStdString() );
2167 MESSAGE("* assoc.start" << assoc.start );
2168 MESSAGE("* assoc.end" << assoc.end );
2169 MESSAGE("* -----------" );
2172 } else if ( data(iElt, HEXA_TREE_ROLE) == QUAD_TREE ){
2173 MESSAGE("* of a Quad");
2174 HEXA_NS::Quad* hQuad = getHexaPtr<HEXA_NS::Quad*>(iElt);
2175 HEXA_NS::Shapes hShapes = hQuad->getAssociations();
2176 QStringList shapeID;
2177 for ( HEXA_NS::Shapes::iterator it = hShapes.begin(); it != hShapes.end(); ++it){
2179 assoc.subid = QString::number(-1);
2181 assoc.brep = (*it)->getBrep().c_str();
2182 assoc.start = (*it)->debut;
2183 assoc.end = (*it)->fin;
2184 MESSAGE("* assoc.entry" << assoc.entry.toStdString() );
2185 MESSAGE("* assoc.subid" << assoc.subid.toStdString() );
2186 // MESSAGE("* assoc.brep" << assoc.brep.toStdString() );
2187 // MESSAGE("* assoc.start" << assoc.start );
2188 // MESSAGE("* assoc.end" << assoc.end );
2189 MESSAGE("* -----------" );
2190 shapeID = QString( (*it)->ident.c_str() ).split(",");
2191 if ( shapeID.count() == 2 ){
2192 assoc.entry = shapeID[0];
2193 assoc.subid = shapeID[1].isEmpty()? QString::number(-1) : shapeID[1];
2194 assoc.name = _assocName[assoc.entry];
2205 // int associateOpenedLine (Edge* mstart, Edges& mline, Shape* gstart,
2206 // double pstart, Shapes& gline, double pend);
2207 // int associateClosedLine (Vertex* mfirst, Edge* mstart, Edges& mline,
2208 // Shape* gstart, double pstart, Shapes& gline);
2209 bool DocumentModel::associateOpenedLine( const QModelIndexList& iedges,
2210 const GeomObjList& assocs,
2214 MESSAGE("DocumentModel::associateOpenedLine() ");
2216 HEXA_NS::Edge* mstart = NULL;
2217 HEXA_NS::Edges mline;
2218 HEXA_NS::Shape* gstart = NULL;
2220 HEXA_NS::Shapes gline;
2223 HEXA_NS::Edge* hedge = NULL;
2224 foreach( const QModelIndex& iedge, iedges ){
2225 hedge = getHexaPtr<HEXA_NS::Edge*>(iedge);
2226 if ( mstart == NULL ){
2228 MESSAGE("* mstart" << iedge.data().toString().toStdString() );
2230 mline.push_back( hedge );
2231 MESSAGE("* mline :" << iedge.data().toString().toStdString() );
2235 HEXA_NS::Shape* hshape = NULL;
2236 foreach( const GeomObj& anAssoc, assocs ){
2237 hshape = new HEXA_NS::Shape( anAssoc.brep.toStdString() );
2238 hshape->debut = anAssoc.start; //0.;
2239 hshape->fin = anAssoc.end; //1.;
2240 hshape->ident = ( anAssoc.entry + "," + anAssoc.subid ).toStdString(); //anAssoc.entry.toStdString();
2242 if ( gstart == NULL ){
2243 gstart = hshape; // CS_TODO :gstart.debut = pstart ??
2244 MESSAGE("* gstart->debut" << gstart->debut);
2245 MESSAGE("* gstart->fin" << gstart->fin);
2246 MESSAGE("* gstart->ident" << gstart->ident);
2247 MESSAGE("* gstart->getBrep()" << gstart->getBrep());
2248 // pstart = anAssoc.start;
2250 gline.push_back( hshape ); //CS_TODO : hshape.fin = pend ??
2251 MESSAGE("* gline->debut" << hshape->debut);
2252 MESSAGE("* gline->fin" << hshape->fin);
2253 MESSAGE("* gline->ident" << hshape->ident);
2254 MESSAGE("* gline->getBrep()" << hshape->getBrep());
2257 // pend = assocs.last().end;
2258 MESSAGE("* pstart" << pstart );
2259 MESSAGE("* pend" << pend );
2261 int r = _hexaDocument->associateOpenedLine( mstart, mline,
2262 gstart, pstart, gline, pend );
2265 MESSAGE("* DocumentModel:: associateOpenedLine() => OK ");
2267 } else if ( r == HERR ){
2268 MESSAGE("* DocumentModel:: associateOpenedLine() => ERR ");
2271 delete gstart; //CS_TODO : delete gline?
2275 bool DocumentModel::associateClosedLine( const QModelIndex& ivertex,
2276 const QModelIndexList& iedges,
2277 const GeomObjList& assocs,
2281 MESSAGE("DocumentModel::associateClosedLine() ");
2283 HEXA_NS::Vertex* mfirst = getHexaPtr<HEXA_NS::Vertex*>(ivertex);
2284 HEXA_NS::Edge* mstart = NULL;
2285 HEXA_NS::Edges mline;
2286 HEXA_NS::Shape* gstart = NULL;
2288 HEXA_NS::Shapes gline;
2291 HEXA_NS::Edge* hedge = NULL;
2292 foreach( const QModelIndex& iedge, iedges ){
2293 hedge = getHexaPtr<HEXA_NS::Edge*>(iedge);
2294 if ( mstart == NULL ){
2296 MESSAGE("* mstart" << iedge.data().toString().toStdString() );
2298 mline.push_back( hedge );
2299 MESSAGE("* mline :" << iedge.data().toString().toStdString() );
2303 HEXA_NS::Shape* hshape = NULL;
2304 foreach( const GeomObj& anAssoc, assocs ){
2305 hshape = new HEXA_NS::Shape( anAssoc.brep.toStdString() );
2306 hshape->debut = anAssoc.start; //0.;
2307 hshape->fin = anAssoc.end; //1.;
2308 hshape->ident = ( anAssoc.entry + "," + anAssoc.subid ).toStdString();//anAssoc.entry.toStdString();
2310 if ( gstart == NULL ){
2311 gstart = hshape; // CS_TODO :gstart.debut = pstart ??
2312 // pstart = anAssoc.start;
2313 MESSAGE("* gstart->debut" << gstart->debut);
2314 MESSAGE("* gstart->fin" << gstart->fin);
2315 MESSAGE("* gstart->ident" << gstart->ident);
2316 MESSAGE("* gstart->getBrep()" << gstart->getBrep());
2318 gline.push_back( hshape ); //CS_TODO : hshape.fin = pend ??
2319 MESSAGE("* gline->debut" << hshape->debut);
2320 MESSAGE("* gline->fin" << hshape->fin);
2321 MESSAGE("* gline->ident" << hshape->ident);
2322 MESSAGE("* gline->getBrep()" << hshape->getBrep());
2325 MESSAGE("* pstart" << pstart );
2327 int r = _hexaDocument->associateClosedLine( mfirst, mstart, mline,
2328 gstart, pstart, inv, gline );
2332 } else if ( r == HERR ){
2338 // ************ GROUPS ************
2340 QModelIndex DocumentModel::addGroup( const QString& name, Group kind )
2344 HEXA_NS::Group* hGroup = _hexaDocument->addGroup( name.toLocal8Bit().constData(), kind );
2346 GroupItem* groupItem = new GroupItem(hGroup);
2347 groupItem->setData( _entry, HEXA_DOC_ENTRY_ROLE );
2348 _groupDirItem->appendRow(groupItem);
2349 iGroup = groupItem->index();
2355 bool DocumentModel::removeGroup( const QModelIndex& igrp )
2359 HEXA_NS::Group* hGroup = data(igrp, HEXA_DATA_ROLE).value<HEXA_NS::Group *>();
2360 int r = _hexaDocument->removeGroup ( hGroup );
2363 removeRow( igrp.row(), igrp.parent());
2365 } else if ( r == HERR ){
2371 QModelIndex* DocumentModel::found(eltBase)
2377 QModelIndexList DocumentModel::getGroupElements( const QModelIndex& iGroup, DocumentModel::Group& kind ) const
2379 QModelIndexList iElements;
2381 HEXA_NS::Group* g = iGroup.data(HEXA_DATA_ROLE).value<HEXA_NS::Group *>();
2382 if ( !g ) return iElements;
2384 QModelIndexList iFound;
2386 HEXA_NS::EltBase* eltBase = NULL;
2387 for ( int nr = 0; nr < g->countElement(); ++nr ){
2388 eltBase = g->getElement( nr );
2389 kind = g->getKind();
2391 case HEXA_NS::HexaCell: case HEXA_NS::HexaNode: q = QVariant::fromValue( (HEXA_NS::Hexa *)eltBase ); break;
2392 case HEXA_NS::QuadCell: case HEXA_NS::QuadNode: q = QVariant::fromValue( (HEXA_NS::Quad *)eltBase ); break;
2393 case HEXA_NS::EdgeCell: case HEXA_NS::EdgeNode: q = QVariant::fromValue( (HEXA_NS::Edge *)eltBase ); break;
2394 case HEXA_NS::VertexNode: q = QVariant::fromValue( (HEXA_NS::Vertex *)eltBase ); break;
2396 iFound = match( index(0, 0),
2400 Qt::MatchRecursive );
2401 if ( !iFound.isEmpty() )
2402 iElements << iFound[0];
2407 // 7.4 Boite: éditer un groupe
2408 void DocumentModel::setGroupName( const QModelIndex& igrp, const QString& name )
2410 HEXA_NS::Group* hGroup = data(igrp, HEXA_DATA_ROLE).value<HEXA_NS::Group *>();
2413 hGroup->setName( name.toLocal8Bit().constData() );
2414 setData(igrp, QVariant::fromValue( name ) );
2419 bool DocumentModel::addGroupElement( const QModelIndex& igrp, const QModelIndex& ielt )
2420 { //CS_TODO : check input? add child?
2421 // int addElement (EltBase* elt);
2424 HEXA_NS::Group* hGroup = data(igrp, HEXA_DATA_ROLE).value<HEXA_NS::Group *>();
2425 HEXA_NS::EltBase* hElt = NULL;
2426 switch ( hGroup->getKind() ){
2427 case HEXA_NS::HexaCell: case HEXA_NS::HexaNode: hElt = getHexaPtr<HEXA_NS::Hexa*>(ielt); break;
2428 case HEXA_NS::QuadCell: case HEXA_NS::QuadNode: hElt = getHexaPtr<HEXA_NS::Quad*>(ielt); break;
2429 case HEXA_NS::EdgeCell: case HEXA_NS::EdgeNode: hElt = getHexaPtr<HEXA_NS::Edge*>(ielt); break;
2430 case HEXA_NS::VertexNode: hElt = getHexaPtr<HEXA_NS::Vertex*>(ielt); break;
2434 if ( hGroup and hElt )
2435 res = hGroup->addElement( hElt );
2437 if ( res == HOK ) addOk = true;
2442 bool DocumentModel::removeGroupElement( const QModelIndex& igrp, int nro )
2443 { //CS_TODO : remove child?
2444 HEXA_NS::Group* hGroup = data(igrp, HEXA_DATA_ROLE).value<HEXA_NS::Group *>();
2448 if (hGroup->removeElement( nro ) == HOK)
2454 bool DocumentModel::clearGroupElement( const QModelIndex& igrp )
2456 HEXA_NS::Group* hGroup = data(igrp, HEXA_DATA_ROLE).value<HEXA_NS::Group *>();
2460 hGroup->clearElement();
2466 // ************ LAWS ************
2469 QModelIndex DocumentModel::addLaw( const QString& name, int nbnodes )
2473 HEXA_NS::Law* hLaw = _hexaDocument->addLaw( name.toLocal8Bit().constData(), nbnodes );
2475 LawItem* lawItem = new LawItem(hLaw);
2476 _lawDirItem->appendRow(lawItem);
2477 iLaw = lawItem->index();
2482 bool DocumentModel::setLaw( const QModelIndex& ilaw, int nbnodes, double coeff, KindLaw type )
2486 HEXA_NS::Law* hLaw = data(ilaw, HEXA_DATA_ROLE).value<HEXA_NS::Law *>();
2490 ok = hLaw->setNodes( nbnodes );
2491 ( ok == HOK) ? ret = true : ret = false;
2492 ok = hLaw->setCoefficient( coeff );
2493 hLaw->setKind(type);
2500 bool DocumentModel::removeLaw( const QModelIndex& ilaw )
2503 HEXA_NS::Law* hLaw = data(ilaw, HEXA_DATA_ROLE).value<HEXA_NS::Law *>();
2504 int r = _hexaDocument->removeLaw( hLaw );
2507 removeRow( ilaw.row(), ilaw.parent());
2509 } else if ( r == HERR ){
2516 bool DocumentModel::setPropagation( const QModelIndex& iPropagation, const QModelIndex& iLaw, bool way )
2519 HEXA_NS::Propagation* hPropagation = data(iPropagation, HEXA_DATA_ROLE).value<HEXA_NS::Propagation *>();
2520 HEXA_NS::Law* hLaw = data(iLaw, HEXA_DATA_ROLE).value<HEXA_NS::Law *>();
2522 int r = hPropagation->setLaw( hLaw );
2523 hPropagation->setWay( way );
2527 } else if ( r == HERR ){
2533 QModelIndexList DocumentModel::getPropagation( const QModelIndex& iPropagation ) const
2535 QModelIndexList iEdges;
2537 QModelIndexList iFound;
2538 HEXA_NS::Propagation* propa = iPropagation.data(HEXA_DATA_ROLE).value<HEXA_NS::Propagation *>();
2539 if ( !propa ) return iEdges;
2541 const HEXA_NS::Edges& edges = propa->getEdges();
2542 for ( HEXA_NS::Edges::const_iterator anEdge = edges.begin();
2543 anEdge != edges.end();
2545 iFound = match( index(0, 0),
2547 QVariant::fromValue( *anEdge ),
2549 Qt::MatchRecursive);
2550 if ( !iFound.isEmpty() )
2551 iEdges << iFound[0];
2557 HEXA_NS::Document* DocumentModel::documentImpl()
2559 return _hexaDocument;
2562 QString DocumentModel::documentEntry()
2567 // 8.3 Boite: éditer une loi CS_TODO
2570 /*****************************************************************
2572 *****************************************************************/
2574 PatternDataModel::PatternDataModel( QObject * parent ) :
2575 QSortFilterProxyModel( parent )
2577 QString dataRegExp = QString("(%1|%2|%3|%4|%5|%6|%7|%8)").
2578 arg(VERTEX_TREE).arg(EDGE_TREE).arg(QUAD_TREE).arg(HEXA_TREE).
2579 arg(VERTEX_DIR_TREE).arg(EDGE_DIR_TREE).arg(QUAD_DIR_TREE).arg(HEXA_DIR_TREE);
2581 setFilterRole(HEXA_TREE_ROLE);
2582 setFilterRegExp ( QRegExp(dataRegExp) );
2585 PatternDataModel::~PatternDataModel()
2589 HEXA_NS::Document* PatternDataModel::documentImpl()
2591 HEXA_NS::Document* doc = NULL;
2592 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2593 if (m) doc = m->documentImpl();
2597 QString PatternDataModel::documentEntry()
2600 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2601 if (m) entry = m->documentEntry();
2605 Qt::ItemFlags PatternDataModel::flags(const QModelIndex &index) const
2607 // MESSAGE("PatternDataModel::flags() "<< index.data().toString().toStdString() );
2608 Qt::ItemFlags flags;
2610 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2612 flags = m->flags( mapToSource(index) );
2618 QVariant PatternDataModel::headerData ( int section, Qt::Orientation orientation, int role ) const
2620 if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
2621 return QVariant( "Data" );
2623 return QSortFilterProxyModel::headerData ( section, orientation, role );
2628 QStandardItem* PatternDataModel::itemFromIndex ( const QModelIndex & index ) const
2630 QStandardItem *item = NULL;
2631 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2633 item = m->itemFromIndex( mapToSource(index) );
2638 PatternBuilderModel::PatternBuilderModel( QObject * parent ) :
2639 QSortFilterProxyModel( parent )
2641 QString builderRegExp =QString("(%1|%2|%3|%4|%5|%6|%7|%8|%9|%10)").
2642 arg(VECTOR_TREE).arg(CYLINDER_TREE).arg(PIPE_TREE).arg(ELEMENTS_TREE).
2643 arg(CROSSELEMENTS_TREE).arg(VECTOR_DIR_TREE).arg(CYLINDER_DIR_TREE).
2644 arg(PIPE_DIR_TREE).arg(ELEMENTS_DIR_TREE).arg(CROSSELEMENTS_DIR_TREE);
2646 setFilterRole( HEXA_TREE_ROLE );
2647 setFilterRegExp ( QRegExp(builderRegExp ) );
2650 PatternBuilderModel::~PatternBuilderModel()
2654 Qt::ItemFlags PatternBuilderModel::flags(const QModelIndex &index) const
2656 // std::cout<<"PatternBuilderModel::flags()"<<std::endl;
2657 Qt::ItemFlags flags;
2659 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2661 flags = m->flags( mapToSource(index) );
2666 QVariant PatternBuilderModel::headerData ( int section, Qt::Orientation orientation, int role ) const
2668 if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
2669 return QVariant( "Builder" );
2671 return QSortFilterProxyModel::headerData ( section, orientation, role );
2675 QStandardItem* PatternBuilderModel::itemFromIndex ( const QModelIndex & index ) const
2677 QStandardItem *item = NULL;
2678 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2680 item = m->itemFromIndex( mapToSource(index) );
2685 AssociationsModel::AssociationsModel( QObject * parent ) :
2686 QSortFilterProxyModel( parent )
2688 QString assocRegExp;// =QString("(%1|%2)").arg(GROUP_TREE).arg(GROUP_DIR_TREE); CS_TODO
2690 setFilterRole( HEXA_TREE_ROLE );
2691 setFilterRegExp ( QRegExp(assocRegExp) );
2694 AssociationsModel::~AssociationsModel()
2698 Qt::ItemFlags AssociationsModel::flags(const QModelIndex &index) const
2700 Qt::ItemFlags flags;
2702 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2704 flags = m->flags( mapToSource(index) );
2709 QVariant AssociationsModel::headerData ( int section, Qt::Orientation orientation, int role ) const
2711 if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
2712 return QVariant( "Associations" );
2714 return QSortFilterProxyModel::headerData ( section, orientation, role );
2718 QStandardItem* AssociationsModel::itemFromIndex ( const QModelIndex & index ) const
2720 QStandardItem *item = NULL;
2721 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2723 item = m->itemFromIndex( mapToSource(index) );
2728 GroupsModel::GroupsModel( QObject * parent ) :
2729 QSortFilterProxyModel( parent )
2731 QString groupsRegExp =QString("(%1|%2)").arg(GROUP_TREE).arg(GROUP_DIR_TREE);
2733 setFilterRole( HEXA_TREE_ROLE );
2734 setFilterRegExp ( QRegExp(groupsRegExp ) );
2737 GroupsModel::~GroupsModel()
2741 Qt::ItemFlags GroupsModel::flags(const QModelIndex &index) const
2743 Qt::ItemFlags flags;
2745 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2747 flags = m->flags( mapToSource(index) );
2752 QVariant GroupsModel::headerData ( int section, Qt::Orientation orientation, int role ) const
2754 if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
2755 return QVariant( "Groups" );
2757 return QSortFilterProxyModel::headerData ( section, orientation, role );
2761 QStandardItem* GroupsModel::itemFromIndex ( const QModelIndex & index ) const
2763 QStandardItem *item = NULL;
2764 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2766 item = m->itemFromIndex( mapToSource(index) );
2771 QModelIndexList GroupsModel::getGroupElements( const QModelIndex& iGroup, DocumentModel::Group& kind ) const
2773 QModelIndexList elements;
2774 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2776 elements = m->getGroupElements( mapToSource(iGroup), kind );
2781 MeshModel::MeshModel( QObject * parent ) :
2782 QSortFilterProxyModel( parent )
2784 QString meshRegExp =QString("(%1|%2|%3|%4)").arg(LAW_TREE).arg(LAW_DIR_TREE) .arg(PROPAGATION_TREE).arg(PROPAGATION_DIR_TREE);
2786 setFilterRole( HEXA_TREE_ROLE );
2787 setFilterRegExp ( QRegExp(meshRegExp) );
2790 MeshModel::~MeshModel()
2794 Qt::ItemFlags MeshModel::flags(const QModelIndex &index) const
2796 Qt::ItemFlags flags;
2798 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2800 flags = m->flags( mapToSource(index) );
2805 QVariant MeshModel::headerData ( int section, Qt::Orientation orientation, int role ) const
2807 if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
2808 return QVariant( "Mesh" );
2810 return QSortFilterProxyModel::headerData ( section, orientation, role );
2814 QStandardItem* MeshModel::itemFromIndex ( const QModelIndex & index ) const
2816 QStandardItem *item = NULL;
2817 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2819 item = m->itemFromIndex( mapToSource(index) );
2824 QModelIndexList MeshModel::getPropagation( const QModelIndex& iPropagation ) const
2826 QModelIndexList edges;
2827 DocumentModel *m = dynamic_cast<DocumentModel *>( sourceModel() );
2829 edges = m->getPropagation( mapToSource(iPropagation) );