EditCoinManager: Refactor and extend layer support to use VisualLayerList property and ViewProviderSketchGeometryExtension
This commit is contained in:
committed by
abdullahtahiriyo
parent
9478870d50
commit
d01edd53a2
@@ -493,7 +493,7 @@ EditModeCoinManager::PreselectionResult EditModeCoinManager::detectPreselection(
|
||||
SoPath *path = Point->getPath();
|
||||
SoNode *tail = path->getTail(); // Tail is directly the node containing points and curves
|
||||
|
||||
for(int l = 0; l < geometryLayerParameters.CoinLayers; l++) {
|
||||
for(int l = 0; l < geometryLayerParameters.getCoinLayerCount(); l++) {
|
||||
// checking for a hit in the points
|
||||
if (tail == editModeScenegraphNodes.PointSet[l]) {
|
||||
const SoDetail *point_detail = Point->getDetail(editModeScenegraphNodes.PointSet[l]);
|
||||
@@ -812,10 +812,12 @@ int EditModeCoinManager::getApplicationLogicalDPIX() const {
|
||||
|
||||
void EditModeCoinManager::updateInventorNodeSizes()
|
||||
{
|
||||
for(int l = 0; l < geometryLayerParameters.CoinLayers; l++) {
|
||||
auto layersconfiguration = viewProvider.VisualLayerList.getValues();
|
||||
|
||||
for(int l = 0; l < geometryLayerParameters.getCoinLayerCount(); l++) {
|
||||
editModeScenegraphNodes.PointsDrawStyle[l]->pointSize = 8 * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.PointSet[l]->markerIndex = Gui::Inventor::MarkerBitmaps::getMarkerIndex("CIRCLE_FILLED", drawingParameters.markerSize);
|
||||
editModeScenegraphNodes.CurvesDrawStyle[l]->lineWidth = 3 * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.CurvesDrawStyle[l]->lineWidth = layersconfiguration[l].getLineWidth() * drawingParameters.pixelScalingFactor;
|
||||
}
|
||||
|
||||
editModeScenegraphNodes.RootCrossDrawStyle->lineWidth = 2 * drawingParameters.pixelScalingFactor;
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include <Inventor/SbColor.h>
|
||||
#include <Inventor/nodes/SoDrawStyle.h>
|
||||
#include <Inventor/nodes/SoCoordinate3.h>
|
||||
#include <Inventor/nodes/SoFont.h>
|
||||
#include <Inventor/nodes/SoFont.h>
|
||||
#include <Inventor/nodes/SoGroup.h>
|
||||
#include <Inventor/nodes/SoLineSet.h>
|
||||
#include <Inventor/nodes/SoMarkerSet.h>
|
||||
@@ -40,10 +40,12 @@
|
||||
#include <Inventor/nodes/SoText2.h>
|
||||
#include <Inventor/nodes/SoTranslation.h>
|
||||
|
||||
|
||||
|
||||
#include <Gui/Inventor/SmSwitchboard.h>
|
||||
#include <Mod/Sketcher/App/GeoList.h>
|
||||
|
||||
#include "ViewProviderSketchGeometryExtension.h"
|
||||
|
||||
|
||||
namespace Part {
|
||||
class Geometry;
|
||||
@@ -114,14 +116,14 @@ struct DrawingParameters {
|
||||
static SbColor NonDrivingConstrDimColor; // Color used for non-driving (reference) dimensional constraints
|
||||
static SbColor ExprBasedConstrDimColor; // Color used for expression based dimensional constraints
|
||||
static SbColor DeactivatedConstrDimColor; // Color used for deactivated dimensional constraints
|
||||
static SbColor CursorTextColor; // Color used by the edit mode cursor
|
||||
static SbColor CursorTextColor; // Color used by the edit mode cursor
|
||||
//@}
|
||||
|
||||
/** @name Rendering sizes (also to support HDPI monitors) **/
|
||||
//@{
|
||||
double pixelScalingFactor = 1.0; // Scaling factor to be used for pixels
|
||||
int coinFontSize = 17; // Font size to be used by coin
|
||||
int labelFontSize = 17; // Font size to be used by SoDatumLabel, which uses a QPainter and a QFont internally
|
||||
int labelFontSize = 17; // Font size to be used by SoDatumLabel, which uses a QPainter and a QFont internally
|
||||
int constraintIconSize = 15; // Size of constraint icons
|
||||
int markerSize = 7; // Size used for markers
|
||||
//@}
|
||||
@@ -227,22 +229,26 @@ private:
|
||||
public:
|
||||
void reset() {
|
||||
CoinLayers = 1;
|
||||
logicalLayer2CoinLayer.clear();
|
||||
logicalLayer2CoinLayer.push_back(Default); // Logical layer 1 always maps to CoinLayer 1
|
||||
}
|
||||
|
||||
int getCoinLayer(int logicallayer) {
|
||||
if(logicallayer < int(logicalLayer2CoinLayer.size()))
|
||||
return logicalLayer2CoinLayer[logicallayer];
|
||||
inline int getSafeCoinLayer(int coinlayer) {
|
||||
if(coinlayer < CoinLayers) {
|
||||
return coinlayer;
|
||||
}
|
||||
|
||||
return Default;
|
||||
}
|
||||
|
||||
int CoinLayers = 1; // defaults to a single Coin Geometry Layer.
|
||||
int inline getCoinLayerCount() const {
|
||||
return CoinLayers;
|
||||
}
|
||||
|
||||
void setCoinLayerCount(int layernumber) {
|
||||
CoinLayers = layernumber;
|
||||
}
|
||||
|
||||
private:
|
||||
/// This maps a logicalLayer (the one of GeometryFacade) to a CoinLayer (the ones created in the scenegraph)
|
||||
std::vector<int> logicalLayer2CoinLayer;
|
||||
int CoinLayers = 1; // defaults to a single Coin Geometry Layer.
|
||||
};
|
||||
|
||||
/** @brief Struct to hold the results of analysis performed on geometry
|
||||
@@ -330,8 +336,8 @@ struct EditModeScenegraphNodes {
|
||||
//@{
|
||||
SoText2 *textX;
|
||||
SoTranslation *textPos;
|
||||
SoFont *textFont;
|
||||
SoMaterial *textMaterial;
|
||||
SoFont *textFont;
|
||||
SoMaterial *textMaterial;
|
||||
//@}
|
||||
|
||||
/** @name Constraint nodes*/
|
||||
@@ -404,7 +410,6 @@ struct CoinMapping {
|
||||
std::map<Sketcher::GeoElementId,MultiFieldId> GeoElementId2SetId;
|
||||
};
|
||||
|
||||
|
||||
} // namespace SketcherGui
|
||||
|
||||
#endif // SKETCHERGUI_EditModeCoinManagerParameters_H
|
||||
|
||||
@@ -1223,7 +1223,7 @@ void EditModeConstraintCoinManager::updateConstraintColor(const std::vector<Sket
|
||||
std::vector<int> CurvNum;
|
||||
std::vector<SbColor *> color; // curve color
|
||||
|
||||
for(int l=0; l<geometryLayerParameters.CoinLayers; l++) {
|
||||
for(int l=0; l<geometryLayerParameters.getCoinLayerCount(); l++) {
|
||||
PtNum.push_back(editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.getNum());
|
||||
pcolor.push_back(editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.startEditing());
|
||||
CurvNum.push_back(editModeScenegraphNodes.CurvesMaterials[l]->diffuseColor.getNum());
|
||||
@@ -1356,7 +1356,7 @@ void EditModeConstraintCoinManager::updateConstraintColor(const std::vector<Sket
|
||||
}
|
||||
}
|
||||
|
||||
for(int l=0; l<geometryLayerParameters.CoinLayers; l++) {
|
||||
for(int l=0; l<geometryLayerParameters.getCoinLayerCount(); l++) {
|
||||
editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.finishEditing();
|
||||
editModeScenegraphNodes.CurvesMaterials[l]->diffuseColor.finishEditing();
|
||||
}
|
||||
@@ -1440,7 +1440,7 @@ void EditModeConstraintCoinManager::rebuildConstraintNodes(const GeoListFacade &
|
||||
drawingParameters.ConstrDimColor
|
||||
:drawingParameters.NonDrivingConstrDimColor)
|
||||
:drawingParameters.DeactivatedConstrDimColor;
|
||||
text->size.setValue(drawingParameters.labelFontSize);
|
||||
text->size.setValue(drawingParameters.labelFontSize);
|
||||
text->lineWidth = 2 * drawingParameters.pixelScalingFactor;
|
||||
text->useAntialiasing = false;
|
||||
SoAnnotation *anno = new SoAnnotation();
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#include "EditModeGeometryCoinConverter.h"
|
||||
#include "EditModeCoinManagerParameters.h"
|
||||
#include "ViewProviderSketchCoinAttorney.h"
|
||||
#include "ViewProviderSketchGeometryExtension.h"
|
||||
#include "Utils.h"
|
||||
|
||||
|
||||
using namespace SketcherGui;
|
||||
@@ -60,7 +62,7 @@ void EditModeGeometryCoinConverter::convert(const Sketcher::GeoListFacade & geol
|
||||
pointCounter.clear();
|
||||
curveCounter.clear();
|
||||
|
||||
for(int l=0; l<geometryLayerParameters.CoinLayers; l++){
|
||||
for(auto l=0; l<geometryLayerParameters.getCoinLayerCount(); l++){
|
||||
Coords.emplace_back();
|
||||
Points.emplace_back();
|
||||
Index.emplace_back();
|
||||
@@ -70,8 +72,8 @@ void EditModeGeometryCoinConverter::convert(const Sketcher::GeoListFacade & geol
|
||||
coinMapping.PointIdToVertexId.emplace_back();
|
||||
}
|
||||
|
||||
pointCounter.resize(geometryLayerParameters.CoinLayers,0);
|
||||
curveCounter.resize(geometryLayerParameters.CoinLayers,0);
|
||||
pointCounter.resize(geometryLayerParameters.getCoinLayerCount(),0);
|
||||
curveCounter.resize(geometryLayerParameters.getCoinLayerCount(),0);
|
||||
|
||||
// RootPoint
|
||||
// TODO: RootPoint is here added in layer0. However, this layer may be hidden. The point should,
|
||||
@@ -150,9 +152,10 @@ void EditModeGeometryCoinConverter::convert(const Sketcher::GeoListFacade & geol
|
||||
const auto GeoId = geolistfacade.getGeoIdFromGeomListIndex(i);
|
||||
const auto geom = geolistfacade.getGeometryFacadeFromGeoId(GeoId);
|
||||
const auto type = geom->getGeometry()->getTypeId();
|
||||
auto layerId = geom->getGeometryLayerId();
|
||||
|
||||
auto coinLayer = geometryLayerParameters.getCoinLayer(layerId);
|
||||
auto layerId = getSafeGeomLayerId(geom);
|
||||
|
||||
auto coinLayer = geometryLayerParameters.getSafeCoinLayer(layerId);
|
||||
|
||||
if (type == Part::GeomPoint::getClassTypeId()) { // add a point
|
||||
convert< Part::GeomPoint,
|
||||
@@ -192,7 +195,7 @@ void EditModeGeometryCoinConverter::convert(const Sketcher::GeoListFacade & geol
|
||||
}
|
||||
}
|
||||
|
||||
for(int l=0 ; l < geometryLayerParameters.CoinLayers ; l++) {
|
||||
for(auto l=0 ; l < geometryLayerParameters.getCoinLayerCount() ; l++) {
|
||||
|
||||
// Coin Nodes Editing
|
||||
geometryLayerNodes.CurvesCoordinate[l]->point.setNum(Coords[l].size());
|
||||
@@ -231,9 +234,9 @@ template < typename GeoType,
|
||||
EditModeGeometryCoinConverter::AnalyseMode analysemode >
|
||||
void EditModeGeometryCoinConverter::convert(const Sketcher::GeometryFacade * geometryfacade, [[maybe_unused]] int geoid) {
|
||||
auto geo = static_cast<const GeoType *>(geometryfacade->getGeometry());
|
||||
auto layerId = geometryfacade->getGeometryLayerId();
|
||||
auto layerId = getSafeGeomLayerId(geometryfacade);
|
||||
|
||||
auto coinLayer = geometryLayerParameters.getCoinLayer(layerId);
|
||||
auto coinLayer = geometryLayerParameters.getSafeCoinLayer(layerId);
|
||||
|
||||
auto addPoint = [&dMg = boundingBoxMaxMagnitude] (auto & pushvector, Base::Vector3d point) {
|
||||
|
||||
|
||||
@@ -71,14 +71,20 @@ EditModeGeometryCoinManager::~EditModeGeometryCoinManager()
|
||||
void EditModeGeometryCoinManager::processGeometry(const GeoListFacade & geolistfacade)
|
||||
{
|
||||
// enable all layers
|
||||
editModeScenegraphNodes.PointsGroup->enable.setNum(geometryLayerParameters.CoinLayers);
|
||||
editModeScenegraphNodes.CurvesGroup->enable.setNum(geometryLayerParameters.CoinLayers);
|
||||
editModeScenegraphNodes.PointsGroup->enable.setNum(geometryLayerParameters.getCoinLayerCount());
|
||||
editModeScenegraphNodes.CurvesGroup->enable.setNum(geometryLayerParameters.getCoinLayerCount());
|
||||
SbBool *swsp = editModeScenegraphNodes.PointsGroup->enable.startEditing();
|
||||
SbBool *swsc = editModeScenegraphNodes.CurvesGroup->enable.startEditing();
|
||||
|
||||
for(int l=0; l<geometryLayerParameters.CoinLayers; l++){
|
||||
swsp[l] = true; // layer defaults to enabled
|
||||
swsc[l] = true; // layer defaults to enabled
|
||||
auto setEnableLayer = [swsp, swsc](int l, bool enabled) {
|
||||
swsp[l] = enabled; // layer defaults to enabled
|
||||
swsc[l] = enabled; // layer defaults to enabled
|
||||
};
|
||||
|
||||
auto layersconfigurations = viewProvider.VisualLayerList.getValues();
|
||||
|
||||
for(auto l=0; l<geometryLayerParameters.getCoinLayerCount(); l++){
|
||||
setEnableLayer(l,layersconfigurations[l].isVisible());
|
||||
}
|
||||
|
||||
editModeScenegraphNodes.PointsGroup->enable.finishEditing();
|
||||
@@ -152,7 +158,7 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade & geol
|
||||
SbColor *crosscolor = editModeScenegraphNodes.RootCrossMaterials->diffuseColor.startEditing();
|
||||
auto viewOrientationFactor = ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider);
|
||||
|
||||
for(int l=0; l<geometryLayerParameters.CoinLayers; l++) {
|
||||
for(auto l=0; l<geometryLayerParameters.getCoinLayerCount(); l++) {
|
||||
|
||||
int PtNum = editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.getNum();
|
||||
SbColor *pcolor = editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.startEditing();
|
||||
@@ -416,7 +422,7 @@ void EditModeGeometryCoinManager::updateGeometryLayersConfiguration()
|
||||
// 2) The number of layers is the same, but the configuration needs to be updated
|
||||
|
||||
// TODO: Quite some room for improvement here:
|
||||
geometryLayerParameters.CoinLayers = viewProvider.VisualLayerList.getSize();
|
||||
geometryLayerParameters.setCoinLayerCount(viewProvider.VisualLayerList.getSize());
|
||||
|
||||
emptyGeometryRootNodes();
|
||||
createEditModePointInventorNodes();
|
||||
@@ -433,7 +439,7 @@ void EditModeGeometryCoinManager::createEditModeInventorNodes()
|
||||
{
|
||||
createGeometryRootNodes();
|
||||
|
||||
geometryLayerParameters.CoinLayers = viewProvider.VisualLayerList.getSize();
|
||||
geometryLayerParameters.setCoinLayerCount(viewProvider.VisualLayerList.getSize());
|
||||
|
||||
createEditModePointInventorNodes();
|
||||
|
||||
@@ -460,7 +466,7 @@ void EditModeGeometryCoinManager::emptyGeometryRootNodes()
|
||||
|
||||
void EditModeGeometryCoinManager::createEditModePointInventorNodes()
|
||||
{
|
||||
for(int i=0; i < geometryLayerParameters.CoinLayers; i++) {
|
||||
for(int i=0; i < geometryLayerParameters.getCoinLayerCount(); i++) {
|
||||
SoSeparator * sep = new SoSeparator;
|
||||
sep->ref();
|
||||
|
||||
@@ -500,7 +506,7 @@ void EditModeGeometryCoinManager::createEditModeCurveInventorNodes()
|
||||
{
|
||||
auto layersconfigurations = viewProvider.VisualLayerList.getValue();
|
||||
|
||||
for(int i=0; i < geometryLayerParameters.CoinLayers; i++) {
|
||||
for(int i=0; i < geometryLayerParameters.getCoinLayerCount(); i++) {
|
||||
SoSeparator * sep = new SoSeparator;
|
||||
sep->ref();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user