Std_Transparency : Toggle transparency of objects. (#10805)

* Std_Transparency : Toggle transparency of objects.
* Remove "Std_ToggleTransparency" from toolbar

---------

Co-authored-by: Paddle <PaddleStroke@users.noreply.github.com>
This commit is contained in:
PaddleStroke
2023-11-06 19:41:27 +01:00
committed by GitHub
parent f70454cc14
commit 4eb8fc590c
4 changed files with 483 additions and 2 deletions

View File

@@ -48,6 +48,8 @@
#include <App/DocumentObject.h>
#include <App/GeoFeature.h>
#include <App/GeoFeatureGroupExtension.h>
#include <App/Part.h>
#include <App/Link.h>
#include <App/MeasureDistance.h>
#include <Base/Console.h>
#include <Base/Parameter.h>
@@ -887,6 +889,102 @@ bool StdCmdToggleVisibility::isActive()
return (Gui::Selection().size() != 0);
}
//===========================================================================
// Std_ToggleTransparency
//===========================================================================
DEF_STD_CMD_A(StdCmdToggleTransparency)
StdCmdToggleTransparency::StdCmdToggleTransparency()
: Command("Std_ToggleTransparency")
{
sGroup = "Standard-View";
sMenuText = QT_TR_NOOP("Toggle transparency");
static std::string toolTip = std::string("<p>")
+ QT_TR_NOOP("Toggles transparency of the selected objects. You can also fine tune transparency "
"value in the Appearance taskbox (right click an object in the tree, Appearance).")
+ "</p>";
sToolTipText = toolTip.c_str();
sStatusTip = sToolTipText;
sWhatsThis = "Std_ToggleTransparency";
sPixmap = "Std_ToggleTransparency";
sAccel = "V,T";
eType = Alter3DView;
}
void StdCmdToggleTransparency::activated(int iMsg)
{
Q_UNUSED(iMsg);
getActiveGuiDocument()->openCommand(QT_TRANSLATE_NOOP("Command", "Toggle transparency"));
std::vector<Gui::SelectionSingleton::SelObj> sels = Gui::Selection().getCompleteSelection();
std::vector<Gui::ViewProvider*> viewsToToggle = {};
for (Gui::SelectionSingleton::SelObj& sel : sels) {
App::DocumentObject* obj = sel.pObject;
if (!obj)
continue;
if (!dynamic_cast<App::Part*>(obj) && !dynamic_cast<App::LinkGroup*>(obj)) {
Gui::ViewProvider* view = Application::Instance->getDocument(sel.pDoc)->getViewProvider(obj);
App::Property* prop = view->getPropertyByName("Transparency");
if (prop && prop->getTypeId().isDerivedFrom(App::PropertyInteger::getClassTypeId())) {
viewsToToggle.push_back(view);
}
}
else {
std::function<void(App::DocumentObject*, std::vector<Gui::ViewProvider*>&)> addSubObjects =
[&addSubObjects](App::DocumentObject* obj, std::vector<Gui::ViewProvider*>& viewsToToggle) {
if (!dynamic_cast<App::Part*>(obj) && !dynamic_cast<App::LinkGroup*>(obj)) {
App::Document* doc = obj->getDocument();
Gui::ViewProvider* view = Application::Instance->getDocument(doc)->getViewProvider(obj);
App::Property* prop = view->getPropertyByName("Transparency");
if (prop && prop->getTypeId().isDerivedFrom(App::PropertyInteger::getClassTypeId())
&& std::find(viewsToToggle.begin(), viewsToToggle.end(), view) == viewsToToggle.end()) {
viewsToToggle.push_back(view);
}
}
else {
for (App::DocumentObject* subobj : obj->getOutList()) {
addSubObjects(subobj, viewsToToggle);
}
}
};
addSubObjects(obj, viewsToToggle);
}
}
bool oneTransparent = false;
for (auto* view : viewsToToggle) {
App::Property* prop = view->getPropertyByName("Transparency");
if (prop && prop->getTypeId().isDerivedFrom(App::PropertyInteger::getClassTypeId())) {
auto* transparencyProp = dynamic_cast<App::PropertyInteger*>(prop);
int transparency = transparencyProp->getValue();
if (transparency != 0) {
oneTransparent = true;
}
}
}
int transparency = oneTransparent ? 0 : 70;
for (auto* view : viewsToToggle) {
App::Property* prop = view->getPropertyByName("Transparency");
if (prop && prop->getTypeId().isDerivedFrom(App::PropertyInteger::getClassTypeId())) {
auto* transparencyProp = dynamic_cast<App::PropertyInteger*>(prop);
transparencyProp->setValue(transparency);
}
}
getActiveGuiDocument()->commitCommand();
}
bool StdCmdToggleTransparency::isActive()
{
return (Gui::Selection().size() != 0);
}
//===========================================================================
// Std_ToggleSelectability
//===========================================================================
@@ -4102,6 +4200,7 @@ void CreateViewStdCommands()
rcCmdMgr.addCommand(new StdViewDockUndockFullscreen());
rcCmdMgr.addCommand(new StdCmdSetAppearance());
rcCmdMgr.addCommand(new StdCmdToggleVisibility());
rcCmdMgr.addCommand(new StdCmdToggleTransparency());
rcCmdMgr.addCommand(new StdCmdToggleSelectability());
rcCmdMgr.addCommand(new StdCmdShowSelection());
rcCmdMgr.addCommand(new StdCmdHideSelection());

View File

@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64px"
height="64px"
id="svg2860"
sodipodi:version="0.32"
inkscape:version="1.1-beta1 (77e7b44db3, 2021-03-28)"
sodipodi:docname="Std_ToggleTransparency.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs2862">
<linearGradient
inkscape:collect="always"
id="linearGradient1562">
<stop
style="stop-color:#ffb900;stop-opacity:0.41176471"
offset="0"
id="stop1558" />
<stop
style="stop-color:#fbe113;stop-opacity:0.39215687"
offset="1"
id="stop1560" />
</linearGradient>
<linearGradient
id="linearGradient3377">
<stop
id="stop3379"
offset="0"
style="stop-color:#faff2b;stop-opacity:1;" />
<stop
id="stop3381"
offset="1"
style="stop-color:#ffaa00;stop-opacity:1;" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2868" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3377-1"
id="radialGradient3095-6"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0352785,0.23911008,-0.49121993,2.1268424,-83.020566,-210.19595)"
cx="135.38333"
cy="97.369568"
fx="135.38333"
fy="97.369568"
r="19.467436" />
<linearGradient
id="linearGradient3377-1">
<stop
id="stop3379-1"
offset="0"
style="stop-color:#faff2b;stop-opacity:1;" />
<stop
id="stop3381-0"
offset="1"
style="stop-color:#ffaa00;stop-opacity:1;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient4108"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<linearGradient
id="linearGradient69056"
x1="27.243999"
x2="22.243999"
y1="54.588001"
y2="40.588001"
gradientTransform="translate(-1.2435,-2.5881)"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#c4a000"
offset="0"
id="stop14" />
<stop
stop-color="#fce94f"
offset="1"
id="stop16" />
</linearGradient>
<linearGradient
id="linearGradient4399"
x1="48.714001"
x2="44.714001"
y1="45.585999"
y2="34.585999"
gradientTransform="translate(1.2856,1.4142)"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#c4a000"
offset="0"
id="stop8" />
<stop
stop-color="#edd400"
offset="1"
id="stop10" />
</linearGradient>
<linearGradient
id="linearGradient69709"
x1="20.243999"
x2="17.243999"
y1="37.588001"
y2="27.587999"
gradientTransform="matrix(1,-0.026667,0,1,81.696,-5.3735)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient4383" />
<linearGradient
id="linearGradient4383">
<stop
stop-color="#3465a4"
offset="0"
id="stop2" />
<stop
stop-color="#729fcf"
offset="1"
id="stop4" />
</linearGradient>
<linearGradient
id="linearGradient69717"
x1="50.714001"
x2="48.714001"
y1="25.586"
y2="20.586"
gradientTransform="translate(61.2256,1.0356)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient4383" />
<linearGradient
id="linearGradient4389"
x1="20.243999"
x2="17.243999"
y1="37.588001"
y2="27.587999"
gradientTransform="translate(-1.2435,-2.5881)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient3774" />
<linearGradient
id="linearGradient3774">
<stop
stop-color="#4e9a06"
offset="0"
id="stop21" />
<stop
stop-color="#8ae234"
offset="1"
id="stop23" />
</linearGradient>
<linearGradient
id="linearGradient69042"
x1="48.714001"
x2="44.714001"
y1="45.585999"
y2="34.585999"
gradientTransform="translate(-12.714,-17.586)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient3774" />
<linearGradient
inkscape:collect="always"
id="linearGradient3777">
<stop
style="stop-color:#c4a000;stop-opacity:1"
offset="0"
id="stop3779" />
<stop
style="stop-color:#edd400;stop-opacity:1"
offset="1"
id="stop3781" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3767">
<stop
style="stop-color:#edd400;stop-opacity:1"
offset="0"
id="stop3769" />
<stop
style="stop-color:#fce94f;stop-opacity:1"
offset="1"
id="stop3771" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3777"
id="linearGradient1404"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.63407592,0,0,0.38010927,112.32423,69.176129)"
x1="53.896763"
y1="51.179787"
x2="47.502235"
y2="21.83742" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3767"
id="linearGradient1406"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.63407592,0,0,0.38010927,112.32423,69.176129)"
x1="22.116516"
y1="55.717518"
x2="17.328547"
y2="21.31134" />
<linearGradient
gradientTransform="translate(0.08055227,-3.2273107)"
inkscape:collect="always"
xlink:href="#linearGradient2108"
id="linearGradient3783-8"
x1="53.896763"
y1="51.179787"
x2="47.502235"
y2="21.83742"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient2108">
<stop
style="stop-color:#c4a000;stop-opacity:0.38683128"
offset="0"
id="stop2104" />
<stop
style="stop-color:#edd400;stop-opacity:0.40534982"
offset="1"
id="stop2106" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1562"
id="linearGradient5525"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0.0805523,-3.2273117)"
x1="22.116516"
y1="55.717518"
x2="17.328547"
y2="21.31134" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11"
inkscape:cx="16.590909"
inkscape:cy="38.272727"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="3840"
inkscape:window-height="1570"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:object-paths="false"
inkscape:snap-nodes="true"
inkscape:object-nodes="true"
inkscape:window-maximized="1"
objecttolerance="10.0"
gridtolerance="10.0"
guidetolerance="10.0"
inkscape:pagecheckerboard="0" />
<metadata
id="metadata2865">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
style="fill:none;fill-opacity:0.411765;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.481481"
d="m 3.0805523,51.772688 34.0000007,6 24,-9.999999 -30.0571,-3.721089 z"
id="path2993-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.537255"
d="M 31.080553,7.7726893 31.023453,44.0516"
id="path5101" />
<g
id="g5798"
transform="translate(-104.4297,-48.561958)">
<path
style="fill:#fce94f;stroke:#302b00;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 114.31737,75.183441 21.55858,3.894292 15.21782,-4.65451 -19.34045,-2.270437 z"
id="path2993-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:url(#linearGradient1404);fill-opacity:1;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 151.00286,74.877768 v 13.683933 l -15.41065,5.601001 0.28374,-15.084969 z"
id="path2995-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path3825-3"
d="m 114.22646,75.637986 21.64949,3.439747 -0.28374,15.084969 -21.36573,-4.080564 z"
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient1406);fill-opacity:1;fill-rule:evenodd;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
style="fill:none;stroke:#fce94f;stroke-width:0.981872;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 115.49461,76.560785 0.006,12.89297 18.86706,3.35265 0.0411,-12.748411 z"
id="path3765-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#edd400;stroke-width:0.981872;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 136.94743,79.895473 0.0413,12.793756 12.74649,-4.63378 2.3e-4,-12.11308 z"
id="path3775-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
<path
style="fill:#ffb900;fill-opacity:0.411765;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.481481"
d="m 3.0805523,13.772689 34.0000007,6.000001 24,-8.000001 -30,-3.9999997 z"
id="path2993-27"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:url(#linearGradient3783-8);fill-opacity:1;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.537037"
d="m 61.080553,11.772689 v 36 l -24,9.999999 V 19.77269 Z"
id="path2995-0"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path3825-33"
d="M 3.0805523,13.772688 37.080553,19.772689 V 57.772687 L 3.0805523,51.772688 Z"
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient5525);fill-opacity:1;fill-rule:evenodd;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.479424;marker:none;enable-background:accumulate" />
<path
style="fill:none;stroke:#ffb900;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.411765"
d="m 5.0805523,16.200409 0.009,33.919116 30.0086707,5.268799 -0.009,-33.933613 z"
id="path3765-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#ffb900;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.411765"
d="m 39.092983,21.206523 -0.0123,33.5353 20.0011,-8.300994 3.6e-4,-31.867362 z"
id="path3775-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -190,6 +190,7 @@
<file>Std_ToggleNavigation.svg</file>
<file>Std_ToggleObjects.svg</file>
<file>Std_ToggleVisibility.svg</file>
<file>Std_ToggleTransparency.svg</file>
<file>Std_Tool1.svg</file>
<file>Std_Tool2.svg</file>
<file>Std_Tool3.svg</file>

View File

@@ -602,7 +602,7 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const
if (Gui::Selection().countObjectsOfType(App::DocumentObject::getClassTypeId()) > 0) {
*item << "Separator" << "Std_SetAppearance" << "Std_ToggleVisibility"
<< "Std_ToggleSelectability" << "Std_TreeSelection"
<< "Std_RandomColor" << "Separator" << "Std_Delete"
<< "Std_RandomColor" << "Std_ToggleTransparency" << "Separator" << "Std_Delete"
<< "Std_SendToPythonConsole" << "Std_TransformManip";
}
}
@@ -611,7 +611,7 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const
if (Gui::Selection().countObjectsOfType(App::DocumentObject::getClassTypeId()) > 0) {
*item << "Std_ToggleVisibility" << "Std_ShowSelection" << "Std_HideSelection"
<< "Std_ToggleSelectability" << "Std_TreeSelectAllInstances" << "Separator"
<< "Std_SetAppearance" << "Std_RandomColor" << "Separator"
<< "Std_SetAppearance" << "Std_RandomColor" << "Std_ToggleTransparency" << "Separator"
<< "Std_Cut" << "Std_Copy" << "Std_Paste" << "Std_Delete"
<< "Std_SendToPythonConsole" << "Separator";
}
@@ -708,6 +708,7 @@ MenuItem* StdWorkbench::setupMenuBar() const
*view << "Std_DockOverlay";
}
*view << "Separator"
<< "Std_ToggleTransparency"
<< "Std_LinkSelectActions"
<< "Std_TreeViewActions"
<< "Std_ViewStatusBar";