[Part/PD] Remove measure tools

This commit is contained in:
hlorus
2024-04-22 08:11:21 +02:00
committed by WandererFan
parent e070b61cdc
commit 7ff4da5a27
20 changed files with 0 additions and 4416 deletions

View File

@@ -39,9 +39,7 @@
#include "PropertyEnumAttacherItem.h"
#include "DlgSettings3DViewPartImp.h"
#include "DlgSettingsGeneral.h"
#include "DlgSettingsMeasure.h"
#include "DlgSettingsObjectColor.h"
#include "TaskDimension.h"
#include "SoBrepEdgeSet.h"
#include "SoBrepFaceSet.h"
#include "SoBrepPointSet.h"
@@ -136,7 +134,6 @@ PyMOD_INIT_FUNC(PartGui)
Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/booleans"));
Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/create"));
Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/measure"));
Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/parametric"));
Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/tools"));
@@ -212,8 +209,6 @@ PyMOD_INIT_FUNC(PartGui)
PartGui::ViewProviderRuledSurface ::init();
PartGui::ViewProviderFace ::init();
PartGui::ViewProviderProjectOnSurface ::init();
PartGui::DimensionLinear ::initClass();
PartGui::DimensionAngular ::initClass();
PartGui::Workbench ::init();
auto manip = std::make_shared<PartGui::WorkbenchManipulator>();
@@ -237,7 +232,6 @@ PyMOD_INIT_FUNC(PartGui)
(void)new Gui::PrefPageProducer<PartGui::DlgSettingsGeneral>(QT_TRANSLATE_NOOP("QObject", "Part/Part Design"));
(void)new Gui::PrefPageProducer<PartGui::DlgSettings3DViewPart>(QT_TRANSLATE_NOOP("QObject", "Part/Part Design"));
(void)new Gui::PrefPageProducer<PartGui::DlgSettingsObjectColor>(QT_TRANSLATE_NOOP("QObject", "Part/Part Design"));
(void)new Gui::PrefPageProducer<PartGui::DlgSettingsMeasure>(QT_TRANSLATE_NOOP("QObject", "Part/Part Design"));
(void)new Gui::PrefPageProducer<PartGui::DlgImportExportIges>(QT_TRANSLATE_NOOP("QObject", "Import-Export"));
(void)new Gui::PrefPageProducer<PartGui::DlgImportExportStep>(QT_TRANSLATE_NOOP("QObject", "Import-Export"));
Gui::ViewProviderBuilder::add(

View File

@@ -57,7 +57,6 @@ set(PartGui_UIC_SRCS
DlgRevolution.ui
DlgSettings3DViewPart.ui
DlgSettingsGeneral.ui
DlgSettingsMeasure.ui
DlgSettingsObjectColor.ui
DlgProjectionOnSurface.ui
SectionCutting.ui
@@ -133,15 +132,9 @@ SET(PartGui_SRCS
DlgSettingsGeneral.cpp
DlgSettingsGeneral.h
DlgSettingsGeneral.ui
DlgSettingsMeasure.cpp
DlgSettingsMeasure.h
DlgSettingsMeasure.ui
DlgSettingsObjectColor.cpp
DlgSettingsObjectColor.h
DlgSettingsObjectColor.ui
DlgSettingsMeasure.cpp
DlgSettingsMeasure.h
DlgSettingsMeasure.ui
DlgProjectionOnSurface.cpp
DlgProjectionOnSurface.h
DlgProjectionOnSurface.ui
@@ -248,8 +241,6 @@ SET(PartGui_SRCS
TaskSweep.ui
TaskThickness.cpp
TaskThickness.h
TaskDimension.cpp
TaskDimension.h
TaskCheckGeometry.cpp
TaskCheckGeometry.h
TaskAttacher.h

View File

@@ -63,7 +63,6 @@
#include "Mirroring.h"
#include "SectionCutting.h"
#include "TaskCheckGeometry.h"
#include "TaskDimension.h"
#include "TaskLoft.h"
#include "TaskShapeBuilder.h"
#include "TaskSweep.h"
@@ -2123,225 +2122,6 @@ bool CmdColorPerFace::isActive()
return (hasActiveDocument() && !Gui::Control().activeDialog() && objectSelected);
}
//===========================================================================
// Part_Measure_Linear
//===========================================================================
DEF_STD_CMD_A(CmdMeasureLinear)
CmdMeasureLinear::CmdMeasureLinear()
: Command("Part_Measure_Linear")
{
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Measure Linear");
sToolTipText = QT_TR_NOOP("Measure the linear distance between two points;\n"
"if edges or faces are picked, it will measure\n"
"between two vertices of them.");
sWhatsThis = "Part_Measure_Linear";
sStatusTip = sToolTipText;
sPixmap = "Part_Measure_Linear";
}
void CmdMeasureLinear::activated(int iMsg)
{
Q_UNUSED(iMsg);
PartGui::goDimensionLinearRoot();
}
bool CmdMeasureLinear::isActive()
{
return hasActiveDocument();
}
//===========================================================================
// Part_Measure_Angular
//===========================================================================
DEF_STD_CMD_A(CmdMeasureAngular)
CmdMeasureAngular::CmdMeasureAngular()
: Command("Part_Measure_Angular")
{
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Measure Angular");
sToolTipText = QT_TR_NOOP("Measure the angle between two edges.");
sWhatsThis = "Part_Measure_Angular";
sStatusTip = sToolTipText;
sPixmap = "Part_Measure_Angular";
}
void CmdMeasureAngular::activated(int iMsg)
{
Q_UNUSED(iMsg);
PartGui::goDimensionAngularRoot();
}
bool CmdMeasureAngular::isActive()
{
return hasActiveDocument();
}
//===========================================================================
// Part_Measure_Refresh
//===========================================================================
DEF_STD_CMD_A(CmdMeasureRefresh)
CmdMeasureRefresh::CmdMeasureRefresh()
: Command("Part_Measure_Refresh")
{
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Refresh");
sToolTipText = QT_TR_NOOP("Recalculate the dimensions\n"
"if the measured points have moved.");
sWhatsThis = "Part_Measure_Refresh";
sStatusTip = sToolTipText;
sPixmap = "Part_Measure_Refresh";
}
void CmdMeasureRefresh::activated(int iMsg)
{
Q_UNUSED(iMsg);
PartGui::refreshDimensions();
}
bool CmdMeasureRefresh::isActive()
{
return hasActiveDocument();
}
//===========================================================================
// Part_Measure_Clear_All
//===========================================================================
DEF_STD_CMD_A(CmdMeasureClearAll)
CmdMeasureClearAll::CmdMeasureClearAll()
: Command("Part_Measure_Clear_All")
{
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Clear All");
sToolTipText = QT_TR_NOOP("Clear all dimensions from the active 3D view.");
sWhatsThis = "Part_Measure_Clear_All";
sStatusTip = sToolTipText;
sPixmap = "Part_Measure_Clear_All";
}
void CmdMeasureClearAll::activated(int iMsg)
{
Q_UNUSED(iMsg);
PartGui::eraseAllDimensions();
}
bool CmdMeasureClearAll::isActive()
{
return hasActiveDocument();
}
//===========================================================================
// Part_Measure_Toggle_All
//===========================================================================
DEF_STD_CMD_A(CmdMeasureToggleAll)
CmdMeasureToggleAll::CmdMeasureToggleAll()
: Command("Part_Measure_Toggle_All")
{
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Toggle All");
sToolTipText = QT_TR_NOOP("Toggle on and off "
"all currently visible dimensions,\n"
"direct, orthogonal, and angular.");
sWhatsThis = "Part_Measure_Toggle_All";
sStatusTip = sToolTipText;
sPixmap = "Part_Measure_Toggle_All";
}
void CmdMeasureToggleAll::activated(int iMsg)
{
Q_UNUSED(iMsg);
ParameterGrp::handle group = App::GetApplication().GetUserParameter().
GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("View");
bool visibility = group->GetBool("DimensionsVisible", true);
if (visibility)
group->SetBool("DimensionsVisible", false);
else
group->SetBool("DimensionsVisible", true);
}
bool CmdMeasureToggleAll::isActive()
{
return hasActiveDocument();
}
//===========================================================================
// Part_Measure_Toggle_3D
//===========================================================================
DEF_STD_CMD_A(CmdMeasureToggle3d)
CmdMeasureToggle3d::CmdMeasureToggle3d()
: Command("Part_Measure_Toggle_3D")
{
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Toggle 3D");
sToolTipText = QT_TR_NOOP("Toggle on and off "
"all direct dimensions,\n"
"including angular.");
sWhatsThis = "Part_Measure_Toggle_3D";
sStatusTip = sToolTipText;
sPixmap = "Part_Measure_Toggle_3D";
}
void CmdMeasureToggle3d::activated(int iMsg)
{
Q_UNUSED(iMsg);
PartGui::toggle3d();
}
bool CmdMeasureToggle3d::isActive()
{
return hasActiveDocument();
}
//===========================================================================
// Part_Measure_Toggle_Delta
//===========================================================================
DEF_STD_CMD_A(CmdMeasureToggleDelta)
CmdMeasureToggleDelta::CmdMeasureToggleDelta()
: Command("Part_Measure_Toggle_Delta")
{
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Toggle Delta");
sToolTipText = QT_TR_NOOP("Toggle on and off "
"all orthogonal dimensions,\n"
"meaning that a direct dimension will be decomposed\n"
"into its X, Y, and Z components.");
sWhatsThis = "Part_Measure_Toggle_Delta";
sStatusTip = sToolTipText;
sPixmap = "Part_Measure_Toggle_Delta";
}
void CmdMeasureToggleDelta::activated(int iMsg)
{
Q_UNUSED(iMsg);
PartGui::toggleDelta();
}
bool CmdMeasureToggleDelta::isActive()
{
return hasActiveDocument();
}
//===========================================================================
// Part_BoxSelection
//===========================================================================
@@ -2486,13 +2266,6 @@ void CreatePartCommands()
rcCmdMgr.addCommand(new CmdPartThickness());
rcCmdMgr.addCommand(new CmdCheckGeometry());
rcCmdMgr.addCommand(new CmdColorPerFace());
rcCmdMgr.addCommand(new CmdMeasureLinear());
rcCmdMgr.addCommand(new CmdMeasureAngular());
rcCmdMgr.addCommand(new CmdMeasureRefresh());
rcCmdMgr.addCommand(new CmdMeasureClearAll());
rcCmdMgr.addCommand(new CmdMeasureToggleAll());
rcCmdMgr.addCommand(new CmdMeasureToggle3d());
rcCmdMgr.addCommand(new CmdMeasureToggleDelta());
rcCmdMgr.addCommand(new CmdBoxSelection());
rcCmdMgr.addCommand(new CmdPartProjectionOnSurface());
rcCmdMgr.addCommand(new CmdPartSectionCut());

View File

@@ -1,91 +0,0 @@
/***************************************************************************
* Copyright (c) 2022 *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#include "PreCompiled.h"
#include <Gui/Command.h>
#include "DlgSettingsMeasure.h"
#include "ui_DlgSettingsMeasure.h"
using namespace PartGui;
DlgSettingsMeasure::DlgSettingsMeasure(QWidget* parent)
: PreferencePage(parent) , ui(new Ui_DlgSettingsMeasure)
{
ui->setupUi(this);
connect(ui->pushButtonRefresh, &QPushButton::clicked, this, &DlgSettingsMeasure::onMeasureRefresh);
}
/**
* Destroys the object and frees any allocated resources
*/
DlgSettingsMeasure::~DlgSettingsMeasure() = default;
void DlgSettingsMeasure::saveSettings()
{
ui->dim3dColorButton->onSave();
ui->dimDeltaColorButton->onSave();
ui->dimAngularColorButton->onSave();
ui->fontSizeSpinBox->onSave();
ui->fontNameComboBox->onSave();
ui->fontStyleBoldCheckBox->onSave();
ui->fontStyleItalicCheckBox->onSave();
}
void DlgSettingsMeasure::loadSettings()
{
ui->dim3dColorButton->onRestore();
ui->dimDeltaColorButton->onRestore();
ui->dimAngularColorButton->onRestore();
ui->fontSizeSpinBox->onRestore();
ui->fontNameComboBox->onRestore();
ui->fontNameComboBox->addItems(QStringList({QString::fromUtf8("defaultFont")}));
ui->fontStyleBoldCheckBox->onRestore();
ui->fontStyleItalicCheckBox->onRestore();
}
/**
* Sets the strings of the subwidgets using the current language.
*/
void DlgSettingsMeasure::changeEvent(QEvent *e)
{
if (e->type() == QEvent::LanguageChange) {
ui->retranslateUi(this);
}
else {
QWidget::changeEvent(e);
}
}
void DlgSettingsMeasure::onMeasureRefresh()
{
DlgSettingsMeasure::saveSettings();
Gui::Command::runCommand(Gui::Command::Gui, "Gui.runCommand('Part_Measure_Refresh',0)");
}
#include "moc_DlgSettingsMeasure.cpp"

View File

@@ -1,58 +0,0 @@
/***************************************************************************
* Copyright (c) 2022 *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef PARTGUI_DIALOG_DLGSETTINGSMEASURE_H
#define PARTGUI_DIALOG_DLGSETTINGSMEASURE_H
#include <Gui/PropertyPage.h>
#include <memory>
namespace PartGui {
class Ui_DlgSettingsMeasure;
/**
* The DlgSettingsMeasure class implements a preference page to change color
* and font settings for Measure Dimensions
*/
class DlgSettingsMeasure : public Gui::Dialog::PreferencePage
{
Q_OBJECT
public:
explicit DlgSettingsMeasure(QWidget* parent = nullptr);
~DlgSettingsMeasure() override;
void saveSettings() override;
void loadSettings() override;
protected:
void changeEvent(QEvent *e) override;
private:
std::unique_ptr<Ui_DlgSettingsMeasure> ui;
void onMeasureRefresh();
};
} // namespace PartGui
#endif // PARTGUI_DIALOG_DLGSETTINGSMEASURE_H

View File

@@ -1,279 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PartGui::DlgSettingsMeasure</class>
<widget class="QWidget" name="PartGui::DlgSettingsMeasure">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>282</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Measure</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Measurement settings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="Gui::PrefColorButton" name="dim3dColorButton">
<property name="color">
<color>
<red>255</red>
<green>0</green>
<blue>0</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
<cstring>Dimensions3dColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_1">
<property name="text">
<string>3D color</string>
</property>
</widget>
</item>
<item row="0" column="4">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="Gui::PrefColorButton" name="dimDeltaColorButton">
<property name="color">
<color>
<red>0</red>
<green>255</green>
<blue>0</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
<cstring>DimensionsDeltaColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Delta color</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="Gui::PrefColorButton" name="dimAngularColorButton">
<property name="color">
<color>
<red>0</red>
<green>0</green>
<blue>255</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
<cstring>DimensionsAngularColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Angular color</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="Gui::PrefSpinBox" name="fontSizeSpinBox">
<property name="maximumSize">
<size>
<width>80</width>
<height>28</height>
</size>
</property>
<property name="value">
<number>30</number>
</property>
<property name="prefEntry" stdset="0">
<cstring>DimensionsFontSize</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Font size</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="Gui::PrefCheckBox" name="fontStyleBoldCheckBox">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Bold</string>
</property>
<property name="prefEntry" stdset="0">
<cstring>DimensionsFontStyleBold</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="Gui::PrefCheckBox" name="fontStyleItalicCheckBox">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Italic</string>
</property>
<property name="prefEntry" stdset="0">
<cstring>DimensionsFontStyleItalic</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="Gui::PrefFontBox" name="fontNameComboBox">
<property name="currentText">
<string>defaultFont</string>
</property>
<property name="prefEntry" stdset="0">
<cstring>DimensionsFontName</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Font name</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButtonRefresh">
<property name="text">
<string>Refresh existing measurements</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Gui::ColorButton</class>
<extends>QPushButton</extends>
<header>Gui/Widgets.h</header>
</customwidget>
<customwidget>
<class>Gui::PrefSpinBox</class>
<extends>QSpinBox</extends>
<header>Gui/PrefWidgets.h</header>
</customwidget>
<customwidget>
<class>Gui::PrefColorButton</class>
<extends>Gui::ColorButton</extends>
<header>Gui/PrefWidgets.h</header>
</customwidget>
<customwidget>
<class>Gui::PrefCheckBox</class>
<extends>QCheckBox</extends>
<header>Gui/PrefWidgets.h</header>
</customwidget>
<customwidget>
<class>Gui::PrefFontBox</class>
<extends>QFontComboBox</extends>
<header>Gui/PrefWidgets.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@@ -30,15 +30,6 @@
<file>icons/create/Part_Torus.svg</file>
<file>icons/create/Part_Tube.svg</file>
</qresource>
<qresource>
<file>icons/measure/Part_Measure_Angular.svg</file>
<file>icons/measure/Part_Measure_Linear.svg</file>
<file>icons/measure/Part_Measure_Refresh.svg</file>
<file>icons/measure/Part_Measure_Step_Active.svg</file>
<file>icons/measure/Part_Measure_Step_Done.svg</file>
<file>icons/measure/Part_Measure_Toggle_3D.svg</file>
<file>icons/measure/Part_Measure_Toggle_Delta.svg</file>
</qresource>
<qresource>
<file>icons/parametric/Part_Box_Parametric.svg</file>
<file>icons/parametric/Part_Circle_Parametric.svg</file>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,659 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2943"
sodipodi:version="0.32"
inkscape:version="0.91 r13725"
sodipodi:docname="Part_Measure_Refresh.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2945">
<linearGradient
inkscape:collect="always"
id="linearGradient3961">
<stop
style="stop-color:#babdb6;stop-opacity:1"
offset="0"
id="stop3963" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3965" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3953">
<stop
style="stop-color:#babdb6;stop-opacity:1"
offset="0"
id="stop3955" />
<stop
style="stop-color:#555753;stop-opacity:1"
offset="1"
id="stop3957" />
</linearGradient>
<linearGradient
id="linearGradient4158">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop4160" />
<stop
style="stop-color:#f6f6f6;stop-opacity:0;"
offset="1"
id="stop4162" />
</linearGradient>
<linearGradient
id="linearGradient4122">
<stop
style="stop-color:#e3d328;stop-opacity:1;"
offset="0"
id="stop4124" />
<stop
style="stop-color:#e1dec3;stop-opacity:1;"
offset="1"
id="stop4126" />
</linearGradient>
<linearGradient
id="linearGradient4088">
<stop
style="stop-color:#e9cd23;stop-opacity:1;"
offset="0"
id="stop4090" />
<stop
style="stop-color:#040000;stop-opacity:0;"
offset="1"
id="stop4092" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4060">
<stop
style="stop-color:#ada9a9;stop-opacity:1;"
offset="0"
id="stop4062" />
<stop
style="stop-color:#ada9a9;stop-opacity:0;"
offset="1"
id="stop4064" />
</linearGradient>
<linearGradient
id="linearGradient4052">
<stop
style="stop-color:#ada9a9;stop-opacity:1;"
offset="0"
id="stop4054" />
<stop
style="stop-color:#ada9a9;stop-opacity:0;"
offset="1"
id="stop4056" />
</linearGradient>
<linearGradient
id="linearGradient4349">
<stop
style="stop-color:#898709;stop-opacity:1;"
offset="0"
id="stop4351" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop4353" />
</linearGradient>
<linearGradient
id="linearGradient5241">
<stop
style="stop-color:#212c45;stop-opacity:1;"
offset="0"
id="stop5243" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop5245" />
</linearGradient>
<linearGradient
id="linearGradient5227"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5229" />
</linearGradient>
<linearGradient
id="linearGradient3902">
<stop
style="stop-color:#000000;stop-opacity:0.58823532;"
offset="0"
id="stop3904" />
<stop
style="stop-color:#000000;stop-opacity:0.39215687;"
offset="1"
id="stop3906" />
</linearGradient>
<linearGradient
id="linearGradient3894">
<stop
style="stop-color:#45351d;stop-opacity:1;"
offset="0"
id="stop3896" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop3898" />
</linearGradient>
<linearGradient
id="linearGradient3886">
<stop
style="stop-color:#45351d;stop-opacity:1;"
offset="0"
id="stop3888" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop3890" />
</linearGradient>
<linearGradient
id="linearGradient3792">
<stop
style="stop-color:#aaaaaa;stop-opacity:1;"
offset="0"
id="stop3794" />
<stop
style="stop-color:#d2d2d2;stop-opacity:1;"
offset="1"
id="stop3796" />
</linearGradient>
<linearGradient
id="linearGradient3784">
<stop
style="stop-color:#bebebe;stop-opacity:1;"
offset="0"
id="stop3786" />
<stop
style="stop-color:#ffffff;stop-opacity:0.39215687;"
offset="1"
id="stop3788" />
</linearGradient>
<linearGradient
id="linearGradient3377">
<stop
id="stop3379"
offset="0"
style="stop-color:#71b2f8;stop-opacity:1;" />
<stop
id="stop3381"
offset="1"
style="stop-color:#002795;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="perspective2951" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4158"
id="linearGradient3092"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-129.22376,-0.88388348)"
x1="419.99387"
y1="102.77802"
x2="458.7193"
y2="69.431564" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4052"
id="linearGradient3094"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(168.6744,65.825928)"
x1="138.99986"
y1="44.863674"
x2="92.497559"
y2="-14.356517" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4122"
id="linearGradient3096"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-88.034794,-1.0606602)"
x1="391.3074"
y1="120.81136"
x2="394.43201"
y2="112.43636" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4060"
id="linearGradient3098"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(168.6744,65.825928)"
x1="103.93729"
y1="49.179436"
x2="120.49899"
y2="0.21229285" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3953"
id="linearGradient3959"
x1="214.70918"
y1="80.886589"
x2="218.70918"
y2="104.88659"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(80,0)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3961"
id="linearGradient3967"
x1="196.70918"
y1="106.88659"
x2="190.70918"
y2="80.886589"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(80,0)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3953-5"
id="linearGradient3959-3"
x1="214.70918"
y1="80.886589"
x2="218.70918"
y2="104.88659"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(80,0)" />
<linearGradient
inkscape:collect="always"
id="linearGradient3953-5">
<stop
style="stop-color:#babdb6;stop-opacity:1"
offset="0"
id="stop3955-6" />
<stop
style="stop-color:#555753;stop-opacity:1"
offset="1"
id="stop3957-2" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2831-2"
id="linearGradient4585"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.370336,0,0,1.3589114,0.02150968,-18.214919)"
x1="13.478554"
y1="10.612206"
x2="15.419417"
y2="19.115122" />
<linearGradient
id="linearGradient2831-2">
<stop
style="stop-color:#3465a4;stop-opacity:1;"
offset="0"
id="stop2833-3" />
<stop
id="stop2855-1"
offset="0.33333334"
style="stop-color:#5b86be;stop-opacity:1;" />
<stop
style="stop-color:#83a8d8;stop-opacity:0;"
offset="1"
id="stop2835-6" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2871"
id="linearGradient1488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.512944,44.464873)"
x1="37.128052"
y1="29.729605"
x2="37.065414"
y2="26.194071" />
<linearGradient
id="linearGradient2871"
inkscape:collect="always">
<stop
id="stop2873"
offset="0"
style="stop-color:#3465a4;stop-opacity:1;" />
<stop
id="stop2875"
offset="1"
style="stop-color:#3465a4;stop-opacity:1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3063-2"
id="linearGradient4587"
gradientUnits="userSpaceOnUse"
x1="42.703487"
y1="20.547306"
x2="26.605606"
y2="33.634254" />
<linearGradient
id="linearGradient3063-2">
<stop
id="stop3065-6"
offset="0"
style="stop-color:#729fcf;stop-opacity:1" />
<stop
id="stop3067-0"
offset="1"
style="stop-color:#204a87;stop-opacity:1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2380-9"
id="linearGradient3034"
gradientUnits="userSpaceOnUse"
x1="41.791897"
y1="20.134634"
x2="23.705669"
y2="34.083359" />
<linearGradient
id="linearGradient2380-9">
<stop
style="stop-color:#729fcf;stop-opacity:1"
offset="0"
id="stop2382-4" />
<stop
style="stop-color:#3465a4;stop-opacity:1"
offset="1"
id="stop2384-6" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2380-9"
id="linearGradient3034-4"
gradientUnits="userSpaceOnUse"
x1="26.221533"
y1="31.125586"
x2="46.731483"
y2="21.766298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2831-2"
id="linearGradient4295"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.370336,0,0,1.3589114,0.02150968,-18.214919)"
x1="13.478554"
y1="10.612206"
x2="15.419417"
y2="19.115122" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2871"
id="linearGradient4297"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.512944,44.464873)"
x1="37.128052"
y1="29.729605"
x2="37.065414"
y2="26.194071" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3063-2"
id="linearGradient4299"
gradientUnits="userSpaceOnUse"
x1="42.703487"
y1="20.547306"
x2="26.605606"
y2="33.634254" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.6761244"
inkscape:cx="44.088329"
inkscape:cy="36.738683"
inkscape:current-layer="g3629"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1375"
inkscape:window-height="876"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:snap-bbox="false"
inkscape:snap-nodes="true">
<inkscape:grid
type="xygrid"
id="grid3059"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata2948">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:creator>
<cc:Agent>
<dc:title>[blobfish]</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>Part_Measure_Linear</dc:title>
<dc:date>2013-12-17</dc:date>
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier>FreeCAD/src/Mod/Part/Gui/Resources/icons/Part_Measure_Linear.svg</dc:identifier>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<cc:license>https://www.gnu.org/copyleft/lesser.html</cc:license>
<dc:contributor>
<cc:Agent>
<dc:title>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g3629"
transform="translate(-256.70919,-66.886588)">
<path
style="fill:#e3d328;fill-opacity:1;stroke:#040400;stroke-width:0.08838835;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d=""
id="path4102"
inkscape:connector-curvature="0"
transform="translate(256.70919,66.886588)" />
<path
style="fill:#babdb6;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="m 285.70919,77.886588 -26,-4 c 0,11 0,26 2,36.000002 l 30,12 0,-6 -2,-4 c 8,-12.000002 0,-24.000002 -4,-34.000002 z"
id="path3100"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#555753;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="m 291.70919,121.88659 12,-4 0,-6 -12,4 z"
id="path3890"
inkscape:connector-curvature="0" />
<path
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 301.70919,107.88659 -12,4 2,4 12,-4 z"
id="path3892"
inkscape:connector-curvature="0" />
<path
style="fill:#888a85;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 285.70919,77.886588 c 4,10 12,22 4,34.000002 l 12,-4 c 8,-12.000002 0,-24.000002 -4,-34.000002 z"
id="path3894"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="m 259.70919,73.886588 12,-4 26,4 -12,4 z"
id="path3888"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:url(#linearGradient3967);fill-opacity:1;stroke:#d3d7cf;stroke-width:1.99999975999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 284.30919,79.786588 -22.6,-3.9 c 0,10.043478 -0.0125,23.469561 1.8,32.600002 l 26.2,10.4 0,-2.5 -2.2,-4.5 c 8,-12.000002 1.2,-22.000002 -3.2,-32.100002 z"
id="path3100-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:url(#linearGradient3959);fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 288.30919,79.086588 c 4,10 9.4,18.3 5.4,29.300002 l 6.6,-2.2 c 6,-9.000002 1.4,-19.300002 -3.8,-29.900002 z"
id="path3894-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:type="arc"
style="fill:#555753;fill-opacity:1;stroke:#2e3436;stroke-width:2.25831866;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.6"
id="path3932"
sodipodi:cx="-93"
sodipodi:cy="39"
sodipodi:rx="15"
sodipodi:ry="15"
d="m -78,39 a 15,15 0 0 1 -15,15 15,15 0 0 1 -15,-15 15,15 0 0 1 15,-15 15,15 0 0 1 15,15 z"
transform="matrix(0.79999998,0.19607832,0,0.9803916,350.10919,74.8866)" />
<path
style="fill:#edd400;fill-opacity:1;stroke:#302b00;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:1.6"
d="m 287.70919,97.827762 -24,-5.882349 c 0,0 -0.82229,-14.095015 12,-11.764699 11.12322,2.021527 12,17.647048 12,17.647048 z"
id="path3932-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccsc" />
<path
style="fill:#edd400;fill-opacity:1;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 294.70919,90.886588 c 2,4 3,11.000002 1,15.000002 l 4,-1 c 2,-4 2,-11.000002 0,-15.000002 z"
id="path3894-7-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#edd400;stroke:#302b00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 37,51 8,-3 16,5 -6,4 z"
id="path4003"
inkscape:connector-curvature="0"
transform="translate(256.70919,66.886588)"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="m 61,53 0,4 -6,4 0,-4 z"
id="path4005"
inkscape:connector-curvature="0"
transform="translate(256.70919,66.886588)"
sodipodi:nodetypes="ccccc" />
<g
id="g4314">
<g
id="g3863"
transform="matrix(0.59299466,0,0,0.59299466,283.4333,77.218635)">
<path
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient4295);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4297);stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="m 27,-3.6915582 c 0,0 -12.247378,-0.8493196 -8.478954,13.4192502 l -10.534458,0 c 0,0 0.685168,-16.137073 19.013412,-13.4192502 z"
id="path2865-9"
inkscape:r_cx="true"
inkscape:r_cy="true"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<g
id="g1878-1"
transform="matrix(-0.79349441,-0.66481753,-0.67040672,0.78687903,77.66003,0.94046451)"
inkscape:r_cx="true"
inkscape:r_cy="true"
style="fill:url(#linearGradient4299);fill-opacity:1;stroke:#204a87;stroke-width:0.73280919;stroke-opacity:1">
<path
sodipodi:nodetypes="ccccccc"
id="path1880-27"
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:3.26039815;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:r_cx="true"
inkscape:r_cy="true"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:none;stroke:#729fcf;stroke-width:0.73280919;stroke-opacity:1"
inkscape:r_cy="true"
inkscape:r_cx="true"
transform="matrix(-0.69686517,-0.58385766,-0.58876622,0.69105539,72.350404,1.0127423)"
id="g2805-0">
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;stroke:#729fcf;stroke-width:2.20148993;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="M 52.368857,42.344789 C 57.336994,33.465615 49.176003,12.601866 19.05552,12.672851 L 18.677956,5.6633463 7.4378077,19.282655 19.129354,29.167094 18.807724,20.554957 c 18.244937,0.381972 33.804002,9.457851 33.561133,21.789832 z"
id="path2807-9"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g3863-0"
transform="matrix(-0.59299466,0,0,-0.59299466,322.563,94.41548)">
<path
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient4585);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1488);stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="m 27,-3.6915582 c 0,0 -12.247378,-0.8493196 -8.478954,13.4192502 l -10.534458,0 c 0,0 0.685168,-16.137073 19.013412,-13.4192502 z"
id="path2865-3"
inkscape:r_cx="true"
inkscape:r_cy="true"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<g
id="g1878-6"
transform="matrix(-0.79349441,-0.66481753,-0.67040672,0.78687903,77.66003,0.94046451)"
inkscape:r_cx="true"
inkscape:r_cy="true"
style="fill:url(#linearGradient4587);fill-opacity:1;stroke:#204a87;stroke-width:0.73280919;stroke-opacity:1">
<path
sodipodi:nodetypes="ccccccc"
id="path1880-2"
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034-4);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:3.26039815;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:r_cx="true"
inkscape:r_cy="true"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:none;stroke:#729fcf;stroke-width:0.73280919;stroke-opacity:1"
inkscape:r_cy="true"
inkscape:r_cx="true"
transform="matrix(-0.69686517,-0.58385766,-0.58876622,0.69105539,72.350404,1.0127423)"
id="g2805-4">
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;stroke:#729fcf;stroke-width:2.20148993;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="M 52.368857,42.344789 C 57.864671,33.591679 49.176003,12.601866 19.05552,12.672851 L 18.677956,5.6633463 7.4378077,19.282655 19.129354,29.167094 18.807724,20.554957 c 18.244937,0.381972 33.804002,9.457851 33.561133,21.789832 z"
id="path2807-5"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,337 +0,0 @@
/***************************************************************************
* Copyright (c) 2013 Thomas Anderson <blobfish[at]gmx.com> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef TASKDIMENSION_H
#define TASKDIMENSION_H
#include <gp_Lin.hxx>
#include <gp_Vec.hxx>
#include <Inventor/engines/SoSubEngine.h>
#include <Inventor/engines/SoEngine.h>
#include <Inventor/fields/SoSFColor.h>
#include <Inventor/fields/SoSFFloat.h>
#include <Inventor/fields/SoSFMatrix.h>
#include <Inventor/fields/SoSFRotation.h>
#include <Inventor/fields/SoSFString.h>
#include <Inventor/fields/SoSFVec3f.h>
#include <Inventor/nodekits/SoSeparatorKit.h>
#include <Mod/Part/App/VectorAdapter.h>
#include <Base/Matrix.h>
#include <Gui/TaskView/TaskDialog.h>
#include <Gui/TaskView/TaskView.h>
class TopoDS_Shape;
class TopoDS_Face;
class TopoDS_Edge;
class TopoDS_Vertex;
class gp_Pnt;
class BRepExtrema_DistShapeShape;
class QPushButton;
class QPixmap;
class QLabel;
using namespace Part;
namespace Gui{class View3dInventorViewer;}
namespace PartGui
{
/*!find shape from selection strings
* @param shapeOut search results.
* @param doc document name to search.
* @param object object name to search.
* @param sub sub-object name to search.
* @return signal if the search was successful.
*/
bool getShapeFromStrings(TopoDS_Shape &shapeOut, const std::string &doc, const std::string &object, const std::string &sub, Base::Matrix4D *mat=nullptr);
/*!examine pre selection
* @param shape1 first shape in current selection
* @param shape2 second shape in current selection
* @return signal if preselection is valid. false means shape1 and shape2 are invalid.
*/
bool evaluateLinearPreSelection(TopoDS_Shape &shape1, TopoDS_Shape &shape2);
/*!start of the measure linear command*/
void goDimensionLinearRoot();
/*!does the measure and create dimensions without a dialog
* @param shape1 first shape.
* @param shape2 second shape.
* @todo incorporate some form of "adapt to topods_shape". so we can expand to other types outside OCC.
*/
void goDimensionLinearNoTask(const TopoDS_Shape &shape1, const TopoDS_Shape &shape2);
/*!prints results of measuring to console.
* @param measure object containing the measure information
*/
void dumpLinearResults(const BRepExtrema_DistShapeShape &measure);
/*!convenience function to get the viewer*/
Gui::View3DInventorViewer* getViewer();
/*!adds 3d and delta dimensions to the viewer
* @param measure object containing the measure information.
*/
void addLinearDimensions(const BRepExtrema_DistShapeShape &measure);
/*!creates one dimension from points with color
* @param point1 first point
* @param point2 second point
* @param color color of dimension
* @return an inventor node to add to a scenegraph
*/
SoNode* createLinearDimension(const gp_Pnt &point1, const gp_Pnt &point2, const SbColor &color);
/*!erases all the dimensions in the viewer.*/
void eraseAllDimensions();
/*!refresh all the dimensions in the viewer.*/
void refreshDimensions();
/*!toggles the display status of the 3d dimensions*/
void toggle3d();
/*!toggles the display status of the delta dimensions*/
void toggleDelta();
/*!make sure measure command isn't working with everything invisible. Confusing the user*/
void ensureSomeDimensionVisible();
/*!make sure angle measure command isn't working with 3d off. Confusing the user*/
void ensure3dDimensionVisible();
/*convert a vertex to vector*/
gp_Vec convert(const TopoDS_Vertex &vertex);
auto getDimensionsFontName();
auto getDimensionsFontSize();
class DimensionLinear : public SoSeparatorKit
{
SO_KIT_HEADER(DimensionLinear);
SO_KIT_CATALOG_ENTRY_HEADER(transformation);
SO_KIT_CATALOG_ENTRY_HEADER(annotate);
SO_KIT_CATALOG_ENTRY_HEADER(leftArrow);
SO_KIT_CATALOG_ENTRY_HEADER(rightArrow);
SO_KIT_CATALOG_ENTRY_HEADER(line);
SO_KIT_CATALOG_ENTRY_HEADER(textSep);
public:
DimensionLinear();
static void initClass();
SbBool affectsState() const override;
void setupDimension();
SoSFVec3f point1;
SoSFVec3f point2;
SoSFString text;
SoSFColor dColor;
protected:
SoSFRotation rotate;
SoSFFloat length;
SoSFVec3f origin;
private:
~DimensionLinear() override;
};
/*kit for anglular dimensions*/
class DimensionAngular : public SoSeparatorKit
{
SO_KIT_HEADER(DimensionAngular);
SO_KIT_CATALOG_ENTRY_HEADER(transformation);
SO_KIT_CATALOG_ENTRY_HEADER(annotate);
SO_KIT_CATALOG_ENTRY_HEADER(arrow1);
SO_KIT_CATALOG_ENTRY_HEADER(arrow2);
SO_KIT_CATALOG_ENTRY_HEADER(arcSep);
SO_KIT_CATALOG_ENTRY_HEADER(textSep);
public:
DimensionAngular();
static void initClass();
SbBool affectsState() const override;
SoSFFloat radius;//radians.
SoSFFloat angle;//radians.
SoSFString text;
SoSFColor dColor;
SoSFMatrix matrix;
void setupDimension();
private:
~DimensionAngular() override;
};
/*used for generating points for arc display*/
class ArcEngine : public SoEngine
{
SO_ENGINE_HEADER(ArcEngine);
public:
ArcEngine();
static void initClass();
SoSFFloat radius;
SoSFFloat angle;
SoSFFloat deviation;
SoEngineOutput points;
SoEngineOutput pointCount;
protected:
void evaluate() override;
private:
~ArcEngine() override = default;
void defaultValues(); //some non error values if something goes wrong.
};
/*! a widget with buttons and icons for a controlled selection process*/
class SteppedSelection : public QWidget
{
Q_OBJECT
public:
explicit SteppedSelection(const uint &buttonCountIn, QWidget *parent = nullptr);
~SteppedSelection() override;
QPushButton* getButton(const uint &index);
void setIconDone(const uint &index);
protected:
using ButtonIconPairType = std::pair<QPushButton *, QLabel *>;
std::vector<ButtonIconPairType> buttons;
QPixmap *stepActive;
QPixmap *stepDone;
private Q_SLOTS:
void selectionSlot(bool checked);
void buildPixmaps();
};
/*! just convenience container*/
class DimSelections
{
public:
enum ShapeType{None, Vertex, Edge, Face};
struct DimSelection
{
std::string documentName;
std::string objectName;
std::string subObjectName;
float x;
float y;
float z;
ShapeType shapeType;
};
std::vector<DimSelection> selections;
};
/*!widget for buttons controlling the display of dimensions*/
class DimensionControl : public QWidget
{
Q_OBJECT
public:
explicit DimensionControl(QWidget* parent);
QPushButton *resetButton;
public Q_SLOTS:
void toggle3dSlot(bool);
void toggleDeltaSlot(bool);
void clearAllSlot(bool);
};
/*!linear dialog*/
class TaskMeasureLinear : public Gui::TaskView::TaskDialog, public Gui::SelectionObserver
{
Q_OBJECT
public:
TaskMeasureLinear();
~TaskMeasureLinear() override;
QDialogButtonBox::StandardButtons getStandardButtons() const override
{return QDialogButtonBox::Close;}
bool isAllowedAlterDocument() const override {return false;}
bool needsFullSpace() const override {return false;}
protected:
void onSelectionChanged(const Gui::SelectionChanges& msg) override;
protected Q_SLOTS:
void selection1Slot(bool checked);
void selection2Slot(bool checked);
void resetDialogSlot(bool);
void toggle3dSlot(bool);
void toggleDeltaSlot(bool);
void clearAllSlot(bool);
void selectionClearDelayedSlot();
public:
static void buildDimension(const DimSelections &sel1, const DimSelections &sel2);
private:
void setUpGui();
void buildDimension();
void clearSelectionStrings();
DimSelections selections1;
DimSelections selections2;
uint buttonSelectedIndex;
SteppedSelection *stepped;
};
/*!angular dialog class*/
class TaskMeasureAngular : public Gui::TaskView::TaskDialog, public Gui::SelectionObserver
{
Q_OBJECT
public:
TaskMeasureAngular();
~TaskMeasureAngular() override;
QDialogButtonBox::StandardButtons getStandardButtons() const override
{return QDialogButtonBox::Close;}
bool isAllowedAlterDocument() const override {return false;}
bool needsFullSpace() const override {return false;}
protected:
void onSelectionChanged(const Gui::SelectionChanges& msg) override;
protected Q_SLOTS:
void selection1Slot(bool checked);
void selection2Slot(bool checked);
void resetDialogSlot(bool);
void toggle3dSlot(bool);
void toggleDeltaSlot(bool);
void clearAllSlot(bool);
void selectionClearDelayedSlot();
public:
static void buildDimension(const DimSelections &sel1, const DimSelections &sel2);
private:
void buildDimension();
void setUpGui();
void clearSelection();
DimSelections selections1;
DimSelections selections2;
uint buttonSelectedIndex;
SteppedSelection *stepped;
static VectorAdapter buildAdapter(const DimSelections &selection);
};
/*!start of the measure angular command*/
void goDimensionAngularRoot();
/*!examine angular pre selection
* @param vector1Out first shape in current selection
* @param vector2Out second shape in current selection
* @return signal if preselection is valid. false means vector1Out and vector2Out are invalid.
*/
bool evaluateAngularPreSelection(VectorAdapter &vector1Out, VectorAdapter &vector2Out);
/*!build angular dimension*/
void goDimensionAngularNoTask(const VectorAdapter &vector1Adapter, const VectorAdapter &vector2Adapter);
}
#endif // TASKDIMENSION_H

View File

@@ -41,7 +41,6 @@ using namespace PartGui;
qApp->translate("Workbench", "Split");
qApp->translate("Workbench", "Compound");
qApp->translate("Workbench", "Create a copy");
qApp->translate("Workbench", "Measure");
#endif
/// @namespace PartGui @class Workbench
@@ -140,18 +139,6 @@ Gui::MenuItem* Workbench::setupMenuBar() const
<< "Separator"
<< "Part_EditAttachment";
Gui::MenuItem* measure = new Gui::MenuItem;
root->insertItem(item,measure);
measure->setCommand("Measure");
*measure << "Part_Measure_Linear"
<< "Part_Measure_Angular"
<< "Separator"
<< "Part_Measure_Refresh"
<< "Part_Measure_Clear_All"
<< "Part_Measure_Toggle_All"
<< "Part_Measure_Toggle_3D"
<< "Part_Measure_Toggle_Delta";
Gui::MenuItem* view = root->findItem("&View");
if (view) {
Gui::MenuItem* appr = view->findItem("Std_RandomColor");
@@ -210,17 +197,6 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
<< "Part_CheckGeometry"
<< "Part_Defeaturing";
Gui::ToolBarItem* measure = new Gui::ToolBarItem(root);
measure->setCommand("Measure");
*measure << "Part_Measure_Linear"
<< "Part_Measure_Angular"
<< "Separator"
<< "Part_Measure_Refresh"
<< "Part_Measure_Clear_All"
<< "Part_Measure_Toggle_All"
<< "Part_Measure_Toggle_3D"
<< "Part_Measure_Toggle_Delta";
return root;
}

View File

@@ -34,13 +34,6 @@ void WorkbenchManipulator::modifyMenuBar([[maybe_unused]] Gui::MenuItem* menuBar
addSectionCut(menuBar);
}
void WorkbenchManipulator::modifyContextMenu(const char* recipient, Gui::MenuItem* menuBar)
{
if (strcmp(recipient, "View") == 0) {
addSelectionFilter(menuBar);
}
}
void WorkbenchManipulator::modifyToolBars(Gui::ToolBarItem* toolBar)
{
addSelectionFilter(toolBar);
@@ -78,12 +71,3 @@ void WorkbenchManipulator::addSelectionFilter(Gui::ToolBarItem* toolBar)
}
}
}
void WorkbenchManipulator::addSelectionFilter(Gui::MenuItem* menuBar)
{
if (auto measure = menuBar->findItem("Measure")) {
auto add = new Gui::MenuItem(); // NOLINT
add->setCommand("Part_SelectFilter");
menuBar->insertItem(measure, add);
}
}

View File

@@ -38,12 +38,6 @@ protected:
* The default implementation doesn't change anything.SectionCut
*/
void modifyMenuBar(Gui::MenuItem* menuBar) override;
/*!
* \brief modifyContextMenu
* Method to manipulate the contextmenu structure of a workbench.
* The default implementation doesn't change anything.
*/
void modifyContextMenu(const char* recipient, Gui::MenuItem* menuBar) override;
/*!
* \brief modifyToolBars
* Method to manipulate the toolbar structure of a workbench
@@ -60,7 +54,6 @@ protected:
private:
static void addSectionCut(Gui::MenuItem* menuBar);
static void addSelectionFilter(Gui::ToolBarItem* toolBar);
static void addSelectionFilter(Gui::MenuItem* menuBar);
};
} // namespace PartGui

View File

@@ -580,20 +580,6 @@ Gui::MenuItem* Workbench::setupMenuBar() const
*part << "Separator" << "PartDesign_WizardShaft";
}
// use Part's measure features also for PartDesign
Gui::MenuItem* measure = new Gui::MenuItem;
root->insertItem(item, measure);
measure->setCommand("Measure");
*measure << "Part_Measure_Linear"
<< "Part_Measure_Angular"
<< "Separator"
<< "Part_Measure_Refresh"
<< "Part_Measure_Clear_All"
<< "Part_Measure_Toggle_All"
<< "Part_Measure_Toggle_3D"
<< "Part_Measure_Toggle_Delta";
Gui::MenuItem* view = root->findItem("&View");
if (view) {
Gui::MenuItem* appr = view->findItem("Std_RandomColor");
@@ -662,19 +648,6 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
<< "Separator"
<< "PartDesign_Boolean";
// use Part's measure features also for PartDesign
Gui::ToolBarItem* measure = new Gui::ToolBarItem(root);
measure->setCommand("Measure");
*measure << "Part_Measure_Linear"
<< "Part_Measure_Angular"
<< "Separator"
<< "Part_Measure_Refresh"
<< "Part_Measure_Clear_All"
<< "Part_Measure_Toggle_All"
<< "Part_Measure_Toggle_3D"
<< "Part_Measure_Toggle_Delta";
return root;
}