Sketcher: EditModeCoinManager - support to update layer configuration
===================================================================== - Refactor scenograph creation to enable local update - Support to perform a local update
This commit is contained in:
committed by
abdullahtahiriyo
parent
c75a7b524b
commit
2f34f01c10
@@ -147,8 +147,8 @@ void EditModeCoinManager::ParameterObserver::initParameters()
|
||||
[this, drawingParameters = Client.drawingParameters](const std::string & param){updateColor(drawingParameters.PreselectColor, param);}},
|
||||
{"SelectionColor",
|
||||
[this, drawingParameters = Client.drawingParameters](const std::string & param){updateColor(drawingParameters.SelectColor, param);}},
|
||||
{"CursorTextColor",
|
||||
[this, drawingParameters = Client.drawingParameters](const std::string & param){updateColor(drawingParameters.CursorTextColor, param);}},
|
||||
{"CursorTextColor",
|
||||
[this, drawingParameters = Client.drawingParameters](const std::string & param){updateColor(drawingParameters.CursorTextColor, param);}},
|
||||
};
|
||||
|
||||
for( auto & val : str2updatefunction){
|
||||
@@ -231,12 +231,12 @@ void EditModeCoinManager::ParameterObserver::updateElementSizeParameters(const s
|
||||
// simple scaling factor for hardcoded pixel values in the Sketcher
|
||||
Client.drawingParameters.pixelScalingFactor = viewScalingFactor * dpi / 96; // 96 ppi is the standard pixel density for which pixel quantities were calculated
|
||||
|
||||
// About sizes:
|
||||
// SoDatumLabel takes the size in points, not in pixels. This is because it uses QFont internally.
|
||||
// Coin, at least our coin at this time, takes pixels, not points.
|
||||
// About sizes:
|
||||
// SoDatumLabel takes the size in points, not in pixels. This is because it uses QFont internally.
|
||||
// Coin, at least our coin at this time, takes pixels, not points.
|
||||
//
|
||||
// DPI considerations:
|
||||
// With hdpi monitors, the coin font labels do not respect the size passed in pixels:
|
||||
// DPI considerations:
|
||||
// With hdpi monitors, the coin font labels do not respect the size passed in pixels:
|
||||
// https://forum.freecadweb.org/viewtopic.php?f=3&t=54347&p=467610#p467610
|
||||
// https://forum.freecadweb.org/viewtopic.php?f=10&t=49972&start=40#p467471
|
||||
//
|
||||
@@ -248,8 +248,8 @@ void EditModeCoinManager::ParameterObserver::updateElementSizeParameters(const s
|
||||
// This means that the following correction does not have a documented basis, but appears necessary so that the Sketcher is usable in
|
||||
// HDPI monitors.
|
||||
|
||||
Client.drawingParameters.coinFontSize = std::lround(sketcherfontSize * 96.0f / dpi); // this is in pixels
|
||||
Client.drawingParameters.labelFontSize = std::lround(sketcherfontSize * 72.0f / dpi); // this is in points, as SoDatumLabel uses points
|
||||
Client.drawingParameters.coinFontSize = std::lround(sketcherfontSize * 96.0f / dpi); // this is in pixels
|
||||
Client.drawingParameters.labelFontSize = std::lround(sketcherfontSize * 72.0f / dpi); // this is in points, as SoDatumLabel uses points
|
||||
Client.drawingParameters.constraintIconSize = std::lround(0.8 * sketcherfontSize);
|
||||
|
||||
// For marker size the global default is used.
|
||||
@@ -271,8 +271,8 @@ void EditModeCoinManager::ParameterObserver::updateColor(SbColor &sbcolor, const
|
||||
unsigned long color = (unsigned long)(sbcolor.getPackedValue());
|
||||
color = hGrp->GetUnsigned(parametername.c_str(), color);
|
||||
sbcolor.setPackedValue((uint32_t)color, transparency);
|
||||
|
||||
Client.updateInventorColors();
|
||||
|
||||
Client.updateInventorColors();
|
||||
}
|
||||
|
||||
void EditModeCoinManager::ParameterObserver::subscribeToParameters()
|
||||
@@ -638,6 +638,12 @@ void EditModeCoinManager::setConstraintSelectability(bool enabled /* = true */)
|
||||
pEditModeConstraintCoinManager->setConstraintSelectability(enabled);
|
||||
}
|
||||
|
||||
|
||||
void EditModeCoinManager::updateGeometryLayersConfiguration()
|
||||
{
|
||||
pEditModeGeometryCoinManager->updateGeometryLayersConfiguration();
|
||||
}
|
||||
|
||||
void EditModeCoinManager::createEditModeInventorNodes()
|
||||
{
|
||||
// 1 - Create the edit root node
|
||||
@@ -730,16 +736,16 @@ void EditModeCoinManager::createEditModeInventorNodes()
|
||||
// no caching for frequently-changing data structures
|
||||
Coordsep->renderCaching = SoSeparator::OFF;
|
||||
|
||||
editModeScenegraphNodes.textMaterial = new SoMaterial;
|
||||
editModeScenegraphNodes.textMaterial->setName("CoordTextMaterials");
|
||||
editModeScenegraphNodes.textMaterial->diffuseColor = drawingParameters.CursorTextColor;
|
||||
Coordsep->addChild(editModeScenegraphNodes.textMaterial);
|
||||
editModeScenegraphNodes.textMaterial = new SoMaterial;
|
||||
editModeScenegraphNodes.textMaterial->setName("CoordTextMaterials");
|
||||
editModeScenegraphNodes.textMaterial->diffuseColor = drawingParameters.CursorTextColor;
|
||||
Coordsep->addChild(editModeScenegraphNodes.textMaterial);
|
||||
|
||||
editModeScenegraphNodes.textFont = new SoFont();
|
||||
editModeScenegraphNodes.textFont->name.setValue("Helvetica");
|
||||
editModeScenegraphNodes.textFont->size.setValue(drawingParameters.coinFontSize);
|
||||
editModeScenegraphNodes.textFont = new SoFont();
|
||||
editModeScenegraphNodes.textFont->name.setValue("Helvetica");
|
||||
editModeScenegraphNodes.textFont->size.setValue(drawingParameters.coinFontSize);
|
||||
|
||||
Coordsep->addChild(editModeScenegraphNodes.textFont);
|
||||
Coordsep->addChild(editModeScenegraphNodes.textFont);
|
||||
|
||||
editModeScenegraphNodes.textPos = new SoTranslation();
|
||||
Coordsep->addChild(editModeScenegraphNodes.textPos);
|
||||
@@ -819,18 +825,18 @@ void EditModeCoinManager::updateInventorNodeSizes()
|
||||
editModeScenegraphNodes.ConstraintDrawStyle->lineWidth = 1 * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.InformationDrawStyle->lineWidth = 1 * drawingParameters.pixelScalingFactor;
|
||||
|
||||
editModeScenegraphNodes.textFont->size.setValue(drawingParameters.coinFontSize);
|
||||
|
||||
editModeScenegraphNodes.textFont->size.setValue(drawingParameters.coinFontSize);
|
||||
|
||||
pEditModeConstraintCoinManager->rebuildConstraintNodes();
|
||||
}
|
||||
|
||||
void EditModeCoinManager::updateInventorColors()
|
||||
{
|
||||
editModeScenegraphNodes.RootCrossMaterials->diffuseColor.set1Value(0, drawingParameters.CrossColorH);
|
||||
editModeScenegraphNodes.RootCrossMaterials->diffuseColor.set1Value(1, drawingParameters.CrossColorV);
|
||||
editModeScenegraphNodes.textMaterial->diffuseColor = drawingParameters.CursorTextColor;
|
||||
}
|
||||
|
||||
void EditModeCoinManager::updateInventorColors()
|
||||
{
|
||||
editModeScenegraphNodes.RootCrossMaterials->diffuseColor.set1Value(0, drawingParameters.CrossColorH);
|
||||
editModeScenegraphNodes.RootCrossMaterials->diffuseColor.set1Value(1, drawingParameters.CrossColorV);
|
||||
editModeScenegraphNodes.textMaterial->diffuseColor = drawingParameters.CursorTextColor;
|
||||
}
|
||||
|
||||
/************************ Edit node access ************************/
|
||||
|
||||
SoSeparator* EditModeCoinManager::getRootEditNode()
|
||||
|
||||
@@ -214,6 +214,8 @@ public:
|
||||
|
||||
// This specific overload is to use a specific geometry list, which may be a temporal one
|
||||
void drawConstraintIcons(const GeoListFacade & geolistfacade);
|
||||
|
||||
void updateGeometryLayersConfiguration();
|
||||
//@}
|
||||
|
||||
/** @name coin node access*/
|
||||
@@ -256,8 +258,8 @@ private:
|
||||
|
||||
void updateInventorNodeSizes();
|
||||
|
||||
void updateInventorColors();
|
||||
|
||||
void updateInventorColors();
|
||||
|
||||
/** @name coin nodes creation*/
|
||||
void createEditModeInventorNodes();
|
||||
//@}
|
||||
|
||||
@@ -409,17 +409,53 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade & geol
|
||||
editModeScenegraphNodes.RootCrossMaterials->diffuseColor.finishEditing();
|
||||
}
|
||||
|
||||
void EditModeGeometryCoinManager::updateGeometryLayersConfiguration()
|
||||
{
|
||||
// Several cases:
|
||||
// 1) The number of layers have changed
|
||||
// 2) The number of layers is the same, but the configuration needs to be updated
|
||||
|
||||
// TODO: Quite some room for improvement here:
|
||||
emptyGeometryRootNodes();
|
||||
createEditModePointInventorNodes();
|
||||
createEditModeCurveInventorNodes();
|
||||
}
|
||||
|
||||
auto concat (std::string string, int i)
|
||||
{
|
||||
return string+std::to_string(i);
|
||||
};
|
||||
|
||||
|
||||
void EditModeGeometryCoinManager::createEditModeInventorNodes()
|
||||
{
|
||||
createGeometryRootNodes();
|
||||
|
||||
createEditModePointInventorNodes();
|
||||
|
||||
createEditModeCurveInventorNodes();
|
||||
}
|
||||
|
||||
void EditModeGeometryCoinManager::createGeometryRootNodes()
|
||||
{
|
||||
// stuff for the points ++++++++++++++++++++++++++++++++++++++
|
||||
editModeScenegraphNodes.PointsGroup = new SmSwitchboard;
|
||||
editModeScenegraphNodes.EditRoot->addChild(editModeScenegraphNodes.PointsGroup);
|
||||
|
||||
auto concat = [](std::string string, int i) {
|
||||
return string+std::to_string(i);
|
||||
};
|
||||
// stuff for the Curves +++++++++++++++++++++++++++++++++++++++
|
||||
editModeScenegraphNodes.CurvesGroup = new SmSwitchboard;
|
||||
editModeScenegraphNodes.EditRoot->addChild(editModeScenegraphNodes.CurvesGroup);
|
||||
|
||||
}
|
||||
|
||||
void EditModeGeometryCoinManager::emptyGeometryRootNodes()
|
||||
{
|
||||
Gui::coinRemoveAllChildren(editModeScenegraphNodes.PointsGroup);
|
||||
Gui::coinRemoveAllChildren(editModeScenegraphNodes.CurvesGroup);
|
||||
}
|
||||
|
||||
void EditModeGeometryCoinManager::createEditModePointInventorNodes()
|
||||
{
|
||||
for(int i=0; i < geometryLayerParameters.CoinLayers; i++) {
|
||||
SoSeparator * sep = new SoSeparator;
|
||||
sep->ref();
|
||||
@@ -454,11 +490,10 @@ void EditModeGeometryCoinManager::createEditModeInventorNodes()
|
||||
editModeScenegraphNodes.PointsGroup->addChild(sep);
|
||||
sep->unref();
|
||||
}
|
||||
}
|
||||
|
||||
// stuff for the Curves +++++++++++++++++++++++++++++++++++++++
|
||||
editModeScenegraphNodes.CurvesGroup = new SmSwitchboard;
|
||||
editModeScenegraphNodes.EditRoot->addChild(editModeScenegraphNodes.CurvesGroup);
|
||||
|
||||
void EditModeGeometryCoinManager::createEditModeCurveInventorNodes()
|
||||
{
|
||||
for(int i=0; i < geometryLayerParameters.CoinLayers; i++) {
|
||||
SoSeparator * sep = new SoSeparator;
|
||||
sep->ref();
|
||||
@@ -499,5 +534,4 @@ void EditModeGeometryCoinManager::createEditModeInventorNodes()
|
||||
editModeScenegraphNodes.CurvesGroup->addChild(sep);
|
||||
sep->unref();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -94,10 +94,17 @@ public:
|
||||
|
||||
void updateGeometryColor(const GeoListFacade & geolistfacade, bool issketchinvalid);
|
||||
|
||||
void updateGeometryLayersConfiguration();
|
||||
|
||||
/** @name coin nodes creation*/
|
||||
void createEditModeInventorNodes();
|
||||
//@}
|
||||
|
||||
private:
|
||||
void createGeometryRootNodes();
|
||||
void emptyGeometryRootNodes();
|
||||
void createEditModePointInventorNodes();
|
||||
void createEditModeCurveInventorNodes();
|
||||
|
||||
private:
|
||||
ViewProviderSketch & viewProvider;
|
||||
|
||||
Reference in New Issue
Block a user