EditCoinManager: Refactor and extend layer support to use VisualLayerList property and ViewProviderSketchGeometryExtension

This commit is contained in:
Abdullah Tahiri
2023-02-28 18:38:40 +01:00
committed by abdullahtahiriyo
parent 9478870d50
commit d01edd53a2
5 changed files with 55 additions and 39 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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();

View File

@@ -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) {

View File

@@ -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();