140 lines
3.0 KiB
C++
140 lines
3.0 KiB
C++
#include "geometryViewObject.h"
|
|
#include "geometrySetViewData.h"
|
|
#include <vtkPolyData.h>
|
|
#include <vtkPointData.h>
|
|
#include <vtkCellData.h>
|
|
#include <vtkDataArray.h>
|
|
#include "Settings/BusAPI.h"
|
|
#include "Settings/GraphOption.h"
|
|
|
|
namespace MainWidget
|
|
{
|
|
GeometryViewObject::GeometryViewObject(ViewObjType type, int beg, int end, Handle(TopoDS_TShape) ts)
|
|
: _type(type), _begin(beg), _end(end), _tshape(ts) {}
|
|
|
|
void GeometryViewObject::getRange(int &beg, int &end)
|
|
{
|
|
beg = _begin;
|
|
end = _end;
|
|
}
|
|
|
|
void GeometryViewObject::appendSolidFace(int f)
|
|
{
|
|
_solidFaces.append(f);
|
|
}
|
|
|
|
QList<int> GeometryViewObject::getSolidFace()
|
|
{
|
|
return _solidFaces;
|
|
}
|
|
|
|
void GeometryViewObject::setIndex(int index)
|
|
{
|
|
_index = index;
|
|
}
|
|
|
|
int GeometryViewObject::getIndex()
|
|
{
|
|
return _index;
|
|
}
|
|
|
|
Geometry::GeometrySet *GeometryViewObject::getGeometySet()
|
|
{
|
|
if (_setViewObj == nullptr)
|
|
return nullptr;
|
|
return _setViewObj->getGeometrySet();
|
|
}
|
|
|
|
GeoSetViewObject *GeometryViewObject::getGeoSetViewObject()
|
|
{
|
|
return _setViewObj;
|
|
}
|
|
|
|
GeometryViewObject::ViewStates GeometryViewObject::getStates()
|
|
{
|
|
return _states;
|
|
}
|
|
|
|
void GeometryViewObject::setStates(ViewStates s)
|
|
{
|
|
_states = s;
|
|
;
|
|
}
|
|
|
|
void GeometryViewObject::setConnectionData(vtkPolyData *poly, GeoSetViewObject *setViewObj)
|
|
{
|
|
_polys = poly;
|
|
_setViewObj = setViewObj;
|
|
}
|
|
|
|
void GeometryViewObject::resetColor()
|
|
{
|
|
QColor color;
|
|
switch (_type)
|
|
{
|
|
case MainWidget::GeometryViewObject::Point:
|
|
color = Setting::BusAPI::instance()->getGraphOption()->getGeometryPointColor();
|
|
break;
|
|
case MainWidget::GeometryViewObject::Edge:
|
|
color = Setting::BusAPI::instance()->getGraphOption()->getGeometryCurveColor();
|
|
break;
|
|
case MainWidget::GeometryViewObject::Face:
|
|
case MainWidget::GeometryViewObject::Solid:
|
|
color = Setting::BusAPI::instance()->getGraphOption()->getGeometrySurfaceColor();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
this->setObjectColor(color);
|
|
_states = Normal;
|
|
}
|
|
|
|
void GeometryViewObject::preHighLight()
|
|
{
|
|
QColor c = Setting::BusAPI::instance()->getGraphOption()->getPreHighLightColor();
|
|
this->setObjectColor(c);
|
|
_states = PreHigh;
|
|
}
|
|
|
|
void GeometryViewObject::highLight()
|
|
{
|
|
QColor c = Setting::BusAPI::instance()->getGraphOption()->getHighLightColor();
|
|
this->setObjectColor(c);
|
|
_states = HighLigh;
|
|
}
|
|
|
|
void GeometryViewObject::setObjectColor(QColor color)
|
|
{
|
|
vtkDataArray *dataArray = nullptr;
|
|
if (_type == Solid)
|
|
{
|
|
setSolidColor(color);
|
|
return;
|
|
}
|
|
if (_polys == nullptr)
|
|
return;
|
|
if (_type == Point)
|
|
dataArray = _polys->GetPointData()->GetScalars();
|
|
else
|
|
dataArray = _polys->GetCellData()->GetScalars();
|
|
for (int i = _begin; i <= _end; ++i)
|
|
{
|
|
dataArray->SetComponent(i, 0, color.red());
|
|
dataArray->SetComponent(i, 1, color.green());
|
|
dataArray->SetComponent(i, 2, color.blue());
|
|
}
|
|
dataArray->Modified();
|
|
}
|
|
|
|
void GeometryViewObject::setSolidColor(QColor color)
|
|
{
|
|
for (int index : _solidFaces)
|
|
{
|
|
auto vobj = _setViewObj->getFaceViewObjByIndex(index);
|
|
if (vobj != nullptr)
|
|
vobj->setObjectColor(color);
|
|
}
|
|
}
|
|
|
|
}
|