-// Copyright (C) 2009-2013 CEA/DEN, EDF R&D
+// Copyright (C) 2009-2019 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include "HEXABLOCKGUI_VtkDocumentGraphicView.hxx"
-
+#include <Geom_Circle.hxx>
+#include <gp_Circ.hxx>
+#include <BRep_Tool.hxx>
+#include <TopoDS_Edge.hxx>
//#define _DEVDEBUG_
return getNbrElt(eltType) - getNbrUsedElt(eltType);
}
+// compute the length of the given edge
+double DocumentModel::getLength(const QModelIndex& iEdge)
+{
+ // * Get the pointer to the edge
+ HEXA_NS::Edge* edge = getHexaPtr<HEXA_NS::Edge*>(iEdge);
+ HEXA_NS::EdgeShape* geomEdge = getHexaPtr<HEXA_NS::EdgeShape*>(iEdge);
+
+ // * The edge can be from VTK or OCC View
+ if (edge != NULL)
+ return edge->getLength();
+ else if (geomEdge != NULL)
+ return geomEdge->getLength();
+ else
+ return 0.;
+}
+
+// Compute the radius of the given edge
+double DocumentModel::getRadius(const QModelIndex& iEdge)
+{
+ // * Get the pointer to the edge
+ // * In our case only an OCC edge can have a radius
+ HEXA_NS::EdgeShape* edge = getHexaPtr<HEXA_NS::EdgeShape*>(iEdge);
+ if (edge == NULL)
+ return 0.;
+
+ return edge->getRadius();
+}
+
+// Compute the angle of the given edge (internal angle)
+double DocumentModel::getAngle(const QModelIndex& iEdge)
+{
+ // * Get the pointer to the edge
+ HEXA_NS::EdgeShape* edge = getHexaPtr<HEXA_NS::EdgeShape*>(iEdge);
+ if (edge == NULL)
+ return 0.;
+
+ return edge->getAngle();
+}
//Load the current Document
void DocumentModel::load()
void DocumentModel::fillGeometry()
{
PatternGeomSelectionModel* pgsm = HEXABLOCKGUI::currentDocGView->getPatternGeomSelectionModel();
- if (_hexaDocument == NULL || isEmpty() || pgsm == NULL)
+ if (_hexaDocument == NULL /*|| isEmpty()*/ || pgsm == NULL)
return;
HEXA_NS::NewShape* shape;
HEXA_NS::Vertex* hv2 = getHexaPtr<HEXA_NS::Vertex*>(i_v2);
HEXA_NS::Vertex* hv3 = getHexaPtr<HEXA_NS::Vertex*>(i_v3);
- if ( hv0 and hv1 and hv2 and hv3 ){
+ if ( hv0 && hv1 && hv2 && hv3 ){
HEXA_NS::Quad* hq = _hexaDocument->addQuadVertices( hv0, hv1, hv2, hv3 );
if ( BadElement(hq) ) return quadIndex;
HEXA_NS::Edge* he2 = getHexaPtr<HEXA_NS::Edge*>(e2);
HEXA_NS::Edge* he3 = getHexaPtr<HEXA_NS::Edge*>(e3);
- if ( he0 and he1 and he2 and he3 ){
+ if ( he0 && he1 && he2 && he3 ){
HEXA_NS::Quad* hq = _hexaDocument->addQuad( he0, he1, he2, he3 );
if ( BadElement(hq) ) return quadIndex;
return iElts;
}
-
-
QModelIndex DocumentModel::makeRotation( const QModelIndex& ielts,
const QModelIndex& iv,
const QModelIndex& ivec, double angle )
return false;
}
-QModelIndex DocumentModel::replace( const QModelIndexList& iquadsPattern,
- const QModelIndex& ip1, const QModelIndex& ic1,
- const QModelIndex& ip2, const QModelIndex& ic2,
- const QModelIndex& ip3, const QModelIndex& ic3 )
+QModelIndex DocumentModel::replace( const QModelIndexList& iquads_source,
+ const QModelIndexList& iquads_dest,
+ const QModelIndex& ip1_source, const QModelIndex& ic1_dest,
+ const QModelIndex& ip2_source, const QModelIndex& ic2_dest)
{
QModelIndex ielts;
- HEXA_NS::Vertex* hp1 = getHexaPtr<HEXA_NS::Vertex*>(ip1);
- HEXA_NS::Vertex* hc1 = getHexaPtr<HEXA_NS::Vertex*>(ic1);
- HEXA_NS::Vertex* hp2 = getHexaPtr<HEXA_NS::Vertex*>(ip2);
- HEXA_NS::Vertex* hc2 = getHexaPtr<HEXA_NS::Vertex*>(ic2);
- HEXA_NS::Vertex* hp3 = getHexaPtr<HEXA_NS::Vertex*>(ip3);
- HEXA_NS::Vertex* hc3 = getHexaPtr<HEXA_NS::Vertex*>(ic3);
+ HEXA_NS::Vertex* hp1 = getHexaPtr<HEXA_NS::Vertex*>(ip1_source);
+ HEXA_NS::Vertex* hp2 = getHexaPtr<HEXA_NS::Vertex*>(ip2_source);
+ HEXA_NS::Vertex* hc1 = getHexaPtr<HEXA_NS::Vertex*>(ic1_dest);
+ HEXA_NS::Vertex* hc2 = getHexaPtr<HEXA_NS::Vertex*>(ic2_dest);
- HEXA_NS::Quads hquads;
+ HEXA_NS::Quads hquads_source, hquads_dest;
HEXA_NS::Quad* hquad = NULL;
- foreach( const QModelIndex& iquad, iquadsPattern ){
+ foreach( const QModelIndex& iquad, iquads_source ){
hquad = getHexaPtr<HEXA_NS::Quad*>(iquad);
- hquads.push_back( hquad );
+ hquads_source.push_back( hquad );
}
- HEXA_NS::Elements* helts = _hexaDocument->replace( hquads,
- hp1, hc1, hp2, hc2, hp3, hc3 );
- if ( BadElement(helts) ) return ielts;
+ foreach( const QModelIndex& iquad, iquads_dest) {
+ hquad = getHexaPtr<HEXA_NS::Quad*>(iquad);
+ hquads_dest.push_back(hquad);
+ }
+
+ HEXA_NS::Elements* helts = _hexaDocument->replace( hquads_source,
+ hquads_dest,
+ hp1, hc1, hp2, hc2);
+ if ( BadElement(helts) )
+ return ielts;
updateData();
ElementsItem* eltsItem = new ElementsItem(helts);
QVariant PatternDataModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
- if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
+ if ( section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole ){
return QVariant( "Data" );
} else {
return QSortFilterProxyModel::headerData ( section, orientation, role );
//QVariant PatternBuilderModel::headerData ( int section, Qt::Orientation orientation, int role ) const
//{
-// if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
+// if ( section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole ){
// return QVariant( "Builder" );
// } else {
// return QSortFilterProxyModel::headerData ( section, orientation, role );
QVariant PatternGeomModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
- if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
+ if ( section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole ){
return QVariant( "Geometry" );
} else {
return QSortFilterProxyModel::headerData ( section, orientation, role );
QVariant AssociationsModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
- if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
+ if ( section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole ){
return QVariant( "Associations" );
} else {
return QSortFilterProxyModel::headerData ( section, orientation, role );
QVariant GroupsModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
- if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
+ if ( section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole ){
return QVariant( "Groups" );
} else {
return QSortFilterProxyModel::headerData ( section, orientation, role );
QVariant MeshModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
- if ( section == 0 and orientation == Qt::Horizontal and role == Qt::DisplayRole ){
+ if ( section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole ){
return QVariant( "Mesh" );
} else {
return QSortFilterProxyModel::headerData ( section, orientation, role );
QModelIndex DocumentModel::makeCartesian(const QModelIndex& icenter,
const QModelIndex& ibase, const QModelIndex& ivec, const QModelIndex& iaxis,
- vector<double>& radius, vector<double>& angles, vector<double>& heights)
+ std::vector<double>& radius, std::vector<double>& angles, std::vector<double>& heights)
{
QModelIndex result;
QModelIndex DocumentModel::makeSphere (QModelIndex& icenter,
QModelIndex& ivec_x, QModelIndex& ivec_z,
- vector<double>& tray, vector<double>& tang, vector<double>& thaut)
+ std::vector<double>& tray, std::vector<double>& tang, std::vector<double>& thaut)
{
QModelIndex result;
QModelIndex DocumentModel::makeSpherical (QModelIndex& icenter,
QModelIndex& ivec_x, QModelIndex& ivec_z,
- vector<double>& rayon,
+ std::vector<double>& rayon,
int crit)
{
QModelIndex result;
QModelIndex DocumentModel::makeRind (QModelIndex& icenter,
QModelIndex& ivec_x, QModelIndex& ivec_z,
- vector<double>& tray, vector<double>& tang, vector<double>& thaut)
+ std::vector<double>& tray, std::vector<double>& tang, std::vector<double>& thaut)
{
QModelIndex result;
}
QModelIndex DocumentModel::makeCylinder(QModelIndex& iorig, QModelIndex& ivecx, QModelIndex& ivecz,
- vector<double>& tray, vector<double>& tang, vector<double>& thaut)
+ std::vector<double>& tray, std::vector<double>& tang, std::vector<double>& thaut)
{
QModelIndex result;
}
QModelIndex DocumentModel::makePipe(QModelIndex& iorig, QModelIndex& ivecx, QModelIndex& ivecz,
- vector<double>& tray, vector<double>& tang, vector<double>& thaut)
+ std::vector<double>& tray, std::vector<double>& tang, std::vector<double>& thaut)
{
QModelIndex result;
}
QModelIndex DocumentModel::joinQuad(QModelIndex& istart, QModelIndex& idest, QModelIndex& iva1, QModelIndex& ivb1,
- QModelIndex& iva2, QModelIndex& ivb2, vector<double>& tlen)
+ QModelIndex& iva2, QModelIndex& ivb2, std::vector<double>& tlen)
{
QModelIndex result;
}
QModelIndex DocumentModel::joinQuads(QModelIndexList& istarts, QModelIndex& idest, QModelIndex& iva1, QModelIndex& ivb1,
- QModelIndex& iva2, QModelIndex& ivb2, vector<double>& tlen)
+ QModelIndex& iva2, QModelIndex& ivb2, std::vector<double>& tlen)
{
QModelIndex result;
}
QModelIndex DocumentModel::revolutionQuad(QModelIndex& istart, QModelIndex& icenter, QModelIndex& iaxis,
- vector<double>& angles)
+ std::vector<double>& angles)
{
QModelIndex result;
}
QModelIndex DocumentModel::revolutionQuads(QModelIndexList& istarts, QModelIndex& icenter, QModelIndex& iaxis,
- vector<double>& angles)
+ std::vector<double>& angles)
{
QModelIndex result;
return result;
}
-QModelIndex DocumentModel::extrudeQuad(QModelIndex& istart, QModelIndex& dv, vector<double>& tlen)
+QModelIndex DocumentModel::extrudeQuad(QModelIndex& istart, QModelIndex& dv, std::vector<double>& tlen)
{
QModelIndex result;
return result;
}
-QModelIndex DocumentModel::extrudeQuads(QModelIndexList& istarts, QModelIndex& iaxis, vector<double>& tlen)
+QModelIndex DocumentModel::extrudeQuads(QModelIndexList& istarts, QModelIndex& iaxis, std::vector<double>& tlen)
{
QModelIndex result;
return result;
}
-QModelIndex DocumentModel::cut(QModelIndex& iEdge, vector<double>& tlen)
+QModelIndex DocumentModel::cut(QModelIndex& iEdge, std::vector<double>& tlen)
{
QModelIndex result;