Merge branch 'master' of ssh://free-cad.git.sourceforge.net/gitroot/free-cad/free-cad

This commit is contained in:
jriegel 2012-09-04 18:15:21 +02:00
commit 0d92cd67aa
134 changed files with 4467 additions and 2345 deletions

View File

@ -278,28 +278,29 @@ set(ODE_FOUND TRUE)
# OCC
set(OCC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/OpenCascade)
set(OCC_LIBRARIES
TKFillet
TKMesh
TKernel
TKG2d
TKG3d
TKMath
TKIGES
TKSTL
TKShHealing
TKXSBase
TKBool
TKBO
TKBRep
TKTopAlgo
TKGeomAlgo
TKGeomBase
TKOffset
TKPrim
TKSTEP
TKSTEPBase
TKSTEPAttr
TKHLR
TKFillet
TKMesh
TKernel
TKG2d
TKG3d
TKMath
TKIGES
TKSTL
TKShHealing
TKXSBase
TKBool
TKBO
TKBRep
TKTopAlgo
TKGeomAlgo
TKGeomBase
TKOffset
TKPrim
TKSTEP
TKSTEPBase
TKSTEPAttr
TKHLR
TKFeat
)
set(OCC_LIBRARY_DIR
${FREECAD_LIBPACK_DIR}/lib

View File

@ -284,28 +284,29 @@ set(OPENCV_FOUND TRUE)
# OCC
set(OCC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/OpenCascade)
set(OCC_LIBRARIES
TKFillet
TKMesh
TKernel
TKG2d
TKG3d
TKMath
TKIGES
TKSTL
TKShHealing
TKXSBase
TKBool
TKBO
TKBRep
TKTopAlgo
TKGeomAlgo
TKGeomBase
TKOffset
TKPrim
TKSTEP
TKSTEPBase
TKSTEPAttr
TKHLR
TKFillet
TKMesh
TKernel
TKG2d
TKG3d
TKMath
TKIGES
TKSTL
TKShHealing
TKXSBase
TKBool
TKBO
TKBRep
TKTopAlgo
TKGeomAlgo
TKGeomBase
TKOffset
TKPrim
TKSTEP
TKSTEPBase
TKSTEPAttr
TKHLR
TKFeat
)
set(OCC_LIBRARY_DIR
${FREECAD_LIBPACK_DIR}/lib

View File

@ -284,16 +284,16 @@ set(OPENCV_FOUND TRUE)
# OCC
set(OCC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/OpenCascade)
set(OCC_LIBRARIES
TKFillet
TKMesh
TKernel
TKG2d
TKG3d
TKMath
TKIGES
TKSTL
TKShHealing
TKXSBase
TKFillet
TKMesh
TKernel
TKG2d
TKG3d
TKMath
TKIGES
TKSTL
TKShHealing
TKXSBase
TKBool
TKXSBase
TKXCAF
@ -302,18 +302,19 @@ set(OCC_LIBRARIES
TKSTEP
TKIGES
TKXDESTEP
TKXDEIGES
TKBO
TKBRep
TKTopAlgo
TKGeomAlgo
TKGeomBase
TKOffset
TKPrim
TKSTEP
TKSTEPBase
TKSTEPAttr
TKHLR
TKXDEIGES
TKBO
TKBRep
TKTopAlgo
TKGeomAlgo
TKGeomBase
TKOffset
TKPrim
TKSTEP
TKSTEPBase
TKSTEPAttr
TKHLR
TKFeat
)
set(OCC_LIBRARY_DIR
${FREECAD_LIBPACK_DIR}/lib

View File

@ -294,6 +294,7 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
else {
bool load_json=false;
bool load_pickle=false;
bool load_failed=false;
std::string buffer = reader.getAttribute("value");
if (reader.hasAttribute("encoded") &&
strcmp(reader.getAttribute("encoded"),"yes") == 0) {
@ -312,7 +313,16 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
end = buffer.end();
if (reader.hasAttribute("module") && reader.hasAttribute("class")) {
Py::Module mod(PyImport_ImportModule(reader.getAttribute("module")),true);
this->object = PyInstance_NewRaw(mod.getAttr(reader.getAttribute("class")).ptr(), 0);
PyObject* cls = mod.getAttr(reader.getAttribute("class")).ptr();
if (PyClass_Check(cls)) {
this->object = PyInstance_NewRaw(cls, 0);
}
else if (PyType_Check(cls)) {
this->object = PyType_GenericAlloc((PyTypeObject*)cls, 0);
}
else {
throw Py::TypeError("neither class nor type object");
}
load_json = true;
}
else if (boost::regex_search(start, end, what, pickle)) {
@ -327,6 +337,8 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
catch (Py::Exception&) {
Base::PyException e; // extract the Python error text
Base::Console().Warning("PropertyPythonObject::Restore: %s\n", e.what());
this->object = Py::None();
load_failed = true;
}
aboutToSetValue();
@ -334,7 +346,7 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
this->fromString(buffer);
else if (load_pickle)
this->loadPickle(buffer);
else
else if (!load_failed)
Base::Console().Warning("PropertyPythonObject::Restore: unsupported serialisation: %s\n", buffer.c_str());
restoreObject(reader);
hasSetValue();

View File

@ -202,8 +202,9 @@ void Gui::GUIApplicationNativeEventAware::Move3d(HANDLE device, std::vector<floa
rz = ceil(motionData[5]);
Spaceball::MotionEvent *motionEvent = new Spaceball::MotionEvent();
motionEvent->setTranslations(x, y, z);
motionEvent->setRotations(rx, ry, rz);
//motionEvent->setTranslations(x, y, z);
//motionEvent->setRotations(rx, ry, rz);
motionEvent->setMotionData(x, y, z, rx, ry, rz);
this->postEvent(currentWidget, motionEvent);
}

View File

@ -104,6 +104,7 @@ set(Gui_MOC_HDRS
DlgCommandsImp.h
DlgCustomizeImp.h
DlgCustomizeSpaceball.h
DlgCustomizeSpNavSettings.h
DlgDisplayPropertiesImp.h
DlgEditorImp.h
DlgGeneralImp.h
@ -190,6 +191,7 @@ SET(Gui_UIC_SRCS
DlgAuthorization.ui
DlgChooseIcon.ui
DlgCommands.ui
DlgCustomizeSpNavSettings.ui
DlgDisplayProperties.ui
DlgEditor.ui
DlgGeneral.ui
@ -338,6 +340,7 @@ SET(Dialog_Customize_CPP_SRCS
DlgCommandsImp.cpp
DlgCustomizeImp.cpp
DlgCustomizeSpaceball.cpp
DlgCustomizeSpNavSettings.cpp
DlgKeyboardImp.cpp
DlgToolbarsImp.cpp
)
@ -346,6 +349,7 @@ SET(Dialog_Customize_HPP_SRCS
DlgCommandsImp.h
DlgCustomizeImp.h
DlgCustomizeSpaceball.h
DlgCustomizeSpNavSettings.h
DlgKeyboardImp.h
DlgToolbarsImp.h
)
@ -355,6 +359,7 @@ SET(Dialog_Customize_SRCS
DlgActions.ui
DlgChooseIcon.ui
DlgCommands.ui
DlgCustomizeSpNavSettings.ui
DlgKeyboard.ui
DlgToolbars.ui
)

View File

@ -0,0 +1,310 @@
/***************************************************************************
* Copyright (c) 2012 Petar Perisin <petar.perisin@gmail.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 *
* *
***************************************************************************/
#include "PreCompiled.h"
#include "DlgCustomizeSpNavSettings.h"
#include "GuiApplicationNativeEventAware.h"
#include "Application.h"
using namespace Gui::Dialog;
DlgCustomizeSpNavSettings::DlgCustomizeSpNavSettings(QWidget *parent) :
CustomizeActionPage(parent)
{
GUIApplicationNativeEventAware *app = qobject_cast<GUIApplicationNativeEventAware *>(QApplication::instance());
if (!app)
return;
if (!app->isSpaceballPresent())
{
this->setWindowTitle(tr("Spaceball Motion"));
this->setMessage(tr("No Spaceball Present"));
return;
}
this->setupUi(this);
initialize();
}
DlgCustomizeSpNavSettings::~DlgCustomizeSpNavSettings()
{
}
void DlgCustomizeSpNavSettings::setMessage(const QString& message)
{
QLabel *messageLabel = new QLabel(message,this);
QVBoxLayout *layout = new QVBoxLayout();
QHBoxLayout *layout2 = new QHBoxLayout();
layout2->addStretch();
layout2->addWidget(messageLabel);
layout2->addStretch();
layout->addItem(layout2);
this->setLayout(layout);
}
void DlgCustomizeSpNavSettings::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
}
ParameterGrp::handle DlgCustomizeSpNavSettings::spaceballMotionGroup() const
{
static ParameterGrp::handle group = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->GetGroup("Spaceball")->GetGroup("Motion");
return group;
}
void DlgCustomizeSpNavSettings::on_ButtonCalibrate_clicked()
{
spaceballMotionGroup()->SetBool("Calibrate", true);
}
void DlgCustomizeSpNavSettings::initialize()
{
CBDominant->setChecked(spaceballMotionGroup()->GetBool("Dominant", false));
CBFlipYZ->setChecked(spaceballMotionGroup()->GetBool("FlipYZ", false));
CBRotations->setChecked(spaceballMotionGroup()->GetBool("Rotations", true));
CBTranslations->setChecked(spaceballMotionGroup()->GetBool("Translations", true));
SliderGlobal->setValue(spaceballMotionGroup()->GetInt("GlobalSensitivity", 0));
CBEnablePanLR ->setChecked(spaceballMotionGroup()->GetBool("PanLREnable", true));
CBReversePanLR->setChecked(spaceballMotionGroup()->GetBool("PanLRReverse", false));
SliderPanLR ->setValue(spaceballMotionGroup()->GetInt("PanLRSensitivity", 0));
CBEnablePanUD ->setChecked(spaceballMotionGroup()->GetBool("PanUDEnable", true));
CBReversePanUD->setChecked(spaceballMotionGroup()->GetBool("PanUDReverse", false));
SliderPanUD ->setValue(spaceballMotionGroup()->GetInt("PanUDSensitivity", 0));
CBEnableZoom ->setChecked(spaceballMotionGroup()->GetBool("ZoomEnable", true));
CBReverseZoom->setChecked(spaceballMotionGroup()->GetBool("ZoomReverse", false));
SliderZoom ->setValue(spaceballMotionGroup()->GetInt("ZoomSensitivity", 0));
CBEnableTilt ->setChecked(spaceballMotionGroup()->GetBool("TiltEnable", true));
CBReverseTilt->setChecked(spaceballMotionGroup()->GetBool("TiltReverse", false));
SliderTilt ->setValue(spaceballMotionGroup()->GetInt("TiltSensitivity", 0));
CBEnableRoll ->setChecked(spaceballMotionGroup()->GetBool("RollEnable", true));
CBReverseRoll->setChecked(spaceballMotionGroup()->GetBool("RollReverse", false));
SliderRoll ->setValue(spaceballMotionGroup()->GetInt("RollSensitivity", 0));
CBEnableSpin ->setChecked(spaceballMotionGroup()->GetBool("SpinEnable", true));
CBReverseSpin->setChecked(spaceballMotionGroup()->GetBool("SpinReverse", false));
SliderSpin ->setValue(spaceballMotionGroup()->GetInt("SpinSensitivity", 0));
CBEnableTilt ->setEnabled(CBRotations->isChecked());
CBReverseTilt->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
SliderTilt ->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
CBEnableRoll ->setEnabled(CBRotations->isChecked());
CBReverseRoll->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
SliderRoll ->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
CBEnableSpin ->setEnabled(CBRotations->isChecked());
CBReverseSpin->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
SliderSpin ->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
CBEnablePanLR ->setEnabled(CBTranslations->isChecked());
CBReversePanLR->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
SliderPanLR ->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
CBEnablePanUD ->setEnabled(CBTranslations->isChecked());
CBReversePanUD->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
SliderPanUD ->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
CBEnableZoom ->setEnabled(CBTranslations->isChecked());
CBReverseZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
SliderZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
}
void DlgCustomizeSpNavSettings::on_ButtonDefaultSpNavMotions_clicked()
{
spaceballMotionGroup()->Clear();
initialize();
}
void DlgCustomizeSpNavSettings::on_CBDominant_clicked()
{
spaceballMotionGroup()->SetBool("Dominant", CBDominant->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBFlipYZ_clicked()
{
spaceballMotionGroup()->SetBool("FlipYZ", CBFlipYZ->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBRotations_clicked()
{
spaceballMotionGroup()->SetBool("Rotations", CBRotations->isChecked());
CBEnableTilt ->setEnabled(CBRotations->isChecked());
CBReverseTilt->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
SliderTilt ->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
CBEnableRoll ->setEnabled(CBRotations->isChecked());
CBReverseRoll->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
SliderRoll ->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
CBEnableSpin ->setEnabled(CBRotations->isChecked());
CBReverseSpin->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
SliderSpin ->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBTranslations_clicked()
{
spaceballMotionGroup()->SetBool("Translations", CBTranslations->isChecked());
CBEnablePanLR ->setEnabled(CBTranslations->isChecked());
CBReversePanLR->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
SliderPanLR ->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
CBEnablePanUD ->setEnabled(CBTranslations->isChecked());
CBReversePanUD->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
SliderPanUD ->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
CBEnableZoom ->setEnabled(CBTranslations->isChecked());
CBReverseZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
SliderZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
}
void DlgCustomizeSpNavSettings::on_SliderGlobal_sliderReleased()
{
spaceballMotionGroup()->SetInt("GlobalSensitivity", SliderGlobal->value());
}
void DlgCustomizeSpNavSettings::on_CBEnablePanLR_clicked()
{
spaceballMotionGroup()->SetBool("PanLREnable", CBEnablePanLR->isChecked());
CBReversePanLR->setEnabled(CBEnablePanLR->isChecked());
SliderPanLR ->setEnabled(CBEnablePanLR->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBReversePanLR_clicked()
{
spaceballMotionGroup()->SetBool("PanLRReverse", CBReversePanLR->isChecked());
}
void DlgCustomizeSpNavSettings::on_SliderPanLR_sliderReleased()
{
spaceballMotionGroup()->SetInt("PanLRSensitivity", SliderPanLR->value());
}
void DlgCustomizeSpNavSettings::on_CBEnablePanUD_clicked()
{
spaceballMotionGroup()->SetBool("PanUDEnable", CBEnablePanUD->isChecked());
CBReversePanUD->setEnabled(CBEnablePanUD->isChecked());
SliderPanUD ->setEnabled(CBEnablePanUD->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBReversePanUD_clicked()
{
spaceballMotionGroup()->SetBool("PanUDReverse", CBReversePanUD->isChecked());
}
void DlgCustomizeSpNavSettings::on_SliderPanUD_sliderReleased()
{
spaceballMotionGroup()->SetInt("PanUDSensitivity", SliderPanUD->value());
}
void DlgCustomizeSpNavSettings::on_CBEnableZoom_clicked()
{
spaceballMotionGroup()->SetBool("ZoomEnable", CBEnableZoom->isChecked());
CBReverseZoom ->setEnabled(CBEnableZoom->isChecked());
SliderZoom ->setEnabled(CBEnableZoom->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBReverseZoom_clicked()
{
spaceballMotionGroup()->SetBool("ZoomReverse", CBReverseZoom->isChecked());
}
void DlgCustomizeSpNavSettings::on_SliderZoom_sliderReleased()
{
spaceballMotionGroup()->SetInt("ZoomSensitivity", SliderZoom->value());
}
void DlgCustomizeSpNavSettings::on_CBEnableTilt_clicked()
{
spaceballMotionGroup()->SetBool("TiltEnable", CBEnableTilt->isChecked());
CBReverseTilt->setEnabled(CBEnableTilt->isChecked());
SliderTilt ->setEnabled(CBEnableTilt->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBReverseTilt_clicked()
{
spaceballMotionGroup()->SetBool("TiltReverse", CBReverseTilt->isChecked());
}
void DlgCustomizeSpNavSettings::on_SliderTilt_sliderReleased()
{
spaceballMotionGroup()->SetInt("TiltSensitivity", SliderTilt->value());
}
void DlgCustomizeSpNavSettings::on_CBEnableRoll_clicked()
{
spaceballMotionGroup()->SetBool("RollEnable", CBEnableRoll->isChecked());
CBReverseRoll->setEnabled(CBEnableRoll->isChecked());
SliderRoll ->setEnabled(CBEnableRoll->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBReverseRoll_clicked()
{
spaceballMotionGroup()->SetBool("RollReverse", CBReverseRoll->isChecked());
}
void DlgCustomizeSpNavSettings::on_SliderRoll_sliderReleased()
{
spaceballMotionGroup()->SetInt("RollSensitivity", SliderRoll->value());
}
void DlgCustomizeSpNavSettings::on_CBEnableSpin_clicked()
{
spaceballMotionGroup()->SetBool("SpinEnable", CBEnableSpin->isChecked());
CBReverseSpin->setEnabled(CBEnableSpin->isChecked());
SliderSpin ->setEnabled(CBEnableSpin->isChecked());
}
void DlgCustomizeSpNavSettings::on_CBReverseSpin_clicked()
{
spaceballMotionGroup()->SetBool("SpinReverse", CBReverseSpin->isChecked());
}
void DlgCustomizeSpNavSettings::on_SliderSpin_sliderReleased()
{
spaceballMotionGroup()->SetInt("SpinSensitivity", SliderSpin->value());
}
void DlgCustomizeSpNavSettings::onAddMacroAction(const QByteArray &macroName)
{
//don't think I need to do anything here.
}
void DlgCustomizeSpNavSettings::onRemoveMacroAction(const QByteArray &macroName)
{
//don't think I need to do anything here.
}
void DlgCustomizeSpNavSettings::onModifyMacroAction(const QByteArray &macroName)
{
//don't think I need to do anything here.
}
#include "moc_DlgCustomizeSpNavSettings.cpp"

View File

@ -0,0 +1,85 @@
/***************************************************************************
* Copyright (c) 2012 Petar Perisin <petar.perisin@gmail.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 DLGCUSTOMIZESPNAVSETTINGS_H
#define DLGCUSTOMIZESPNAVSETTINGS_H
#include "ui_DlgCustomizeSpNavSettings.h"
#include "PropertyPage.h"
#include <Base/Parameter.h>
namespace Gui
{
namespace Dialog
{
class DlgCustomizeSpNavSettings : public CustomizeActionPage, public Ui_DlgCustomizeSpNavSettings
{
Q_OBJECT
public:
explicit DlgCustomizeSpNavSettings(QWidget *parent = 0);
~DlgCustomizeSpNavSettings();
protected Q_SLOTS:
void onAddMacroAction(const QByteArray&);
void onRemoveMacroAction(const QByteArray&);
void onModifyMacroAction(const QByteArray&);
void on_CBDominant_clicked();
void on_CBFlipYZ_clicked();
void on_CBRotations_clicked();
void on_CBTranslations_clicked();
void on_SliderGlobal_sliderReleased();
void on_CBEnablePanLR_clicked();
void on_CBReversePanLR_clicked();
void on_SliderPanLR_sliderReleased();
void on_CBEnablePanUD_clicked();
void on_CBReversePanUD_clicked();
void on_SliderPanUD_sliderReleased();
void on_CBEnableZoom_clicked();
void on_CBReverseZoom_clicked();
void on_SliderZoom_sliderReleased();
void on_CBEnableTilt_clicked();
void on_CBReverseTilt_clicked();
void on_SliderTilt_sliderReleased();
void on_CBEnableRoll_clicked();
void on_CBReverseRoll_clicked();
void on_SliderRoll_sliderReleased();
void on_CBEnableSpin_clicked();
void on_CBReverseSpin_clicked();
void on_SliderSpin_sliderReleased();
void on_ButtonDefaultSpNavMotions_clicked();
void on_ButtonCalibrate_clicked();
protected:
void changeEvent(QEvent *e);
private:
ParameterGrp::handle spaceballMotionGroup() const;
void setMessage(const QString& message);
void initialize();
};
}
}
#endif // DLGCUSTOMIZESPNAVSETTINGS_H

View File

@ -0,0 +1,534 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DlgCustomizeSpNavSettings</class>
<widget class="QWidget" name="DlgCustomizeSpNavSettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>439</width>
<height>537</height>
</rect>
</property>
<property name="windowTitle">
<string>Spaceball Motion</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_12">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="labelSlow">
<property name="text">
<string>Global Sensitivity: </string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="SliderGlobal">
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>10</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<widget class="QCheckBox" name="CBDominant">
<property name="text">
<string>Dominant Mode</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBFlipYZ">
<property name="text">
<string>Flip Y/Z</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QCheckBox" name="CBTranslations">
<property name="text">
<string>Enable Translations</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBRotations">
<property name="text">
<string>Enable Rotations</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</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>
<item>
<widget class="QPushButton" name="ButtonCalibrate">
<property name="text">
<string>Calibrate</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="ButtonDefaultSpNavMotions">
<property name="text">
<string>Default</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>116</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="ImagePanLR">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-PanLR.png</pixmap>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="ImagePanUD">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-PanUD.png</pixmap>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="ImageZoom">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Zoom.png</pixmap>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="imageTilt">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Tilt.png</pixmap>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="ImageRoll">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Roll.png</pixmap>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="ImageSpin">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Spin.png</pixmap>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_9">
<property name="spacing">
<number>20</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="CBEnablePanLR">
<property name="text">
<string>Enable</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBReversePanLR">
<property name="text">
<string>Reverse</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="CBEnablePanUD">
<property name="text">
<string>Enable</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBReversePanUD">
<property name="text">
<string>Reverse</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="CBEnableZoom">
<property name="text">
<string>Enable</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBReverseZoom">
<property name="text">
<string>Reverse</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="CBEnableTilt">
<property name="text">
<string>Enable</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBReverseTilt">
<property name="text">
<string>Reverse</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="CBEnableRoll">
<property name="text">
<string>Enable</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBReverseRoll">
<property name="text">
<string>Reverse</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_8">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="CBEnableSpin">
<property name="text">
<string>Enable</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="CBReverseSpin">
<property name="text">
<string>Reverse</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>30</number>
</property>
<item>
<widget class="QSlider" name="SliderPanLR">
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="SliderPanUD">
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="SliderZoom">
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="SliderTilt">
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="SliderRoll">
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="SliderSpin">
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>10</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
<include location="Icons/resource.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -525,7 +525,7 @@ DlgCustomizeSpaceball::DlgCustomizeSpaceball(QWidget *parent)
: CustomizeActionPage(parent), buttonView(0), buttonModel(0),
commandView(0), commandModel(0), clearButton(0), printReference(0)
{
this->setWindowTitle(tr("Spaceball"));
this->setWindowTitle(tr("Spaceball Buttons"));
GUIApplicationNativeEventAware *app = qobject_cast<GUIApplicationNativeEventAware *>(QApplication::instance());
if (!app)
return;

View File

@ -143,8 +143,9 @@ bool Gui::GUIApplicationNativeEventAware::x11EventFilter(XEvent *event)
if (navEvent.type == SPNAV_EVENT_MOTION)
{
Spaceball::MotionEvent *motionEvent = new Spaceball::MotionEvent();
motionEvent->setTranslations(navEvent.motion.x, navEvent.motion.y, navEvent.motion.z);
motionEvent->setRotations(navEvent.motion.rx, navEvent.motion.ry, navEvent.motion.rz);
// motionEvent->setTranslations(navEvent.motion.x, navEvent.motion.y, navEvent.motion.z);
// motionEvent->setRotations(navEvent.motion.rx, navEvent.motion.ry, navEvent.motion.rz);
motionEvent->setMotionData(navEvent.motion.x, navEvent.motion.y, navEvent.motion.z, navEvent.motion.rx, navEvent.motion.ry, navEvent.motion.rz);
this->postEvent(currentWidget, motionEvent);
return true;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 145 KiB

View File

@ -78,5 +78,11 @@
<file>Tree_Dimension.svg</file>
<file>Tree_Python.svg</file>
<file>spaceball_button.svg</file>
<file>SpNav-PanLR.png</file>
<file>SpNav-PanUD.png</file>
<file>SpNav-Roll.png</file>
<file>SpNav-Spin.png</file>
<file>SpNav-Tilt.png</file>
<file>SpNav-Zoom.png</file>
</qresource>
</RCC>

View File

@ -22,6 +22,7 @@
#include "PreCompiled.h"
#include "SpaceballEvent.h"
#include "Application.h"
using namespace Spaceball;
@ -40,15 +41,132 @@ MotionEvent::MotionEvent() : EventBase(static_cast<QEvent::Type>(MotionEventType
MotionEvent::MotionEvent(const MotionEvent& in) : EventBase(static_cast<QEvent::Type>(MotionEventType))
{
xTrans = in.xTrans;
yTrans = in.yTrans;
zTrans = in.zTrans;
xRot = in.xRot;
yRot = in.yRot;
zRot = in.zRot;
int motionDataArray[6] = {in.xTrans, in.yTrans, in.zTrans, in.xRot, in.yRot, in.zRot};
importSettings(motionDataArray);
handled = in.handled;
}
float MotionEvent::convertPrefToSensitivity(int value)
{
if (value < 0)
{
return ((0.6/50)*float(value) + 1);
}
else
{
return ((1.1/50)*float(value) + 1);
}
}
void MotionEvent::importSettings(int* motionDataArray)
{
ParameterGrp::handle group = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->GetGroup("Spaceball")->GetGroup("Motion");
// here I import settings from a dialog. For now they are set as is
bool dominant = group->GetBool("Dominant"); // Is dominant checked
bool flipXY = group->GetBool("FlipYZ");; // Is Flip X/Y checked
float generalSensitivity = convertPrefToSensitivity(group->GetInt("GlobalSensitivity"));
// array that has stored info about "Enabled" checkboxes of all axes
bool enabled[6];
enabled[0] = group->GetBool("Translations", true) && group->GetBool("PanLREnable", true);
enabled[1] = group->GetBool("Translations", true) && group->GetBool("PanUDEnable", true);
enabled[2] = group->GetBool("Translations", true) && group->GetBool("ZoomEnable", true);
enabled[3] = group->GetBool("Rotations", true) && group->GetBool("TiltEnable", true);
enabled[4] = group->GetBool("Rotations", true) && group->GetBool("RollEnable", true);
enabled[5] = group->GetBool("Rotations", true) && group->GetBool("SpinEnable", true);
// array that has stored info about "Reversed" checkboxes of all axes
bool reversed[6];
reversed[0] = group->GetBool("PanLRReverse");
reversed[1] = group->GetBool("PanUDReverse");
reversed[2] = group->GetBool("ZoomReverse");
reversed[3] = group->GetBool("TiltReverse");
reversed[4] = group->GetBool("RollReverse");
reversed[5] = group->GetBool("SpinReverse");
// array that has stored info about sliders - on each slider you need to use method DlgSpaceballSettings::GetValuefromSlider
// which will convert <-50, 50> linear integers from slider to <0.1, 10> exponential floating values
float sensitivity[6];
sensitivity[0] = convertPrefToSensitivity(group->GetInt("PanLRSensitivity"));
sensitivity[1] = convertPrefToSensitivity(group->GetInt("PanUDSensitivity"));
sensitivity[2] = convertPrefToSensitivity(group->GetInt("ZoomSensitivity"));
sensitivity[3] = convertPrefToSensitivity(group->GetInt("TiltSensitivity"));
sensitivity[4] = convertPrefToSensitivity(group->GetInt("RollSensitivity"));
sensitivity[5] = convertPrefToSensitivity(group->GetInt("SpinSensitivity"));
int i;
if (group->GetBool("Calibrate"))
{
group->SetInt("CalibrationX",motionDataArray[0]);
group->SetInt("CalibrationY",motionDataArray[1]);
group->SetInt("CalibrationZ",motionDataArray[2]);
group->SetInt("CalibrationXr",motionDataArray[3]);
group->SetInt("CalibrationYr",motionDataArray[4]);
group->SetInt("CalibrationZr",motionDataArray[5]);
group->RemoveBool("Calibrate");
return;
}
else
{
motionDataArray[0] = motionDataArray[0] - group->GetInt("CalibrationX");
motionDataArray[1] = motionDataArray[1] - group->GetInt("CalibrationY");
motionDataArray[2] = motionDataArray[2] - group->GetInt("CalibrationZ");
motionDataArray[3] = motionDataArray[3] - group->GetInt("CalibrationXr");
motionDataArray[4] = motionDataArray[4] - group->GetInt("CalibrationYr");
motionDataArray[5] = motionDataArray[5] - group->GetInt("CalibrationZr");
}
if (dominant) { // if dominant is checked
int max = 0;
bool flag = false;
for (i = 0; i < 6; ++i) {
if (abs(motionDataArray[i]) > abs(max)) max = motionDataArray[i];
}
for (i = 0; i < 6; ++i) {
if ((motionDataArray[i] != max) || (flag)) {
motionDataArray[i] = 0;
} else if (motionDataArray[i] == max){
flag = true;
}
}
}
if (flipXY) {
int temp = motionDataArray[1];
motionDataArray[1] = motionDataArray[2];
motionDataArray[2] = - temp;
}
for (i = 0; i < 6; ++i) {
if (motionDataArray[i] != 0) {
if (enabled[i] == false)
motionDataArray[i] = 0;
else {
if (reversed[i] == true)
motionDataArray[i] = - motionDataArray[i];
motionDataArray[i] = (int)((float)(motionDataArray[i]) * sensitivity[i] * generalSensitivity);
}
}
}
xTrans = motionDataArray[0];
yTrans = motionDataArray[1];
zTrans = motionDataArray[2];
xRot = motionDataArray[3];
yRot = motionDataArray[4];
zRot = motionDataArray[5];
}
void MotionEvent::setMotionData(int &xTransIn, int &yTransIn, int &zTransIn, int &xRotIn, int &yRotIn, int &zRotIn){
int motionDataArray[6] = {xTransIn, yTransIn, zTransIn, xRotIn, yRotIn, zRotIn};
importSettings(motionDataArray);
}
void MotionEvent::translations(int &xTransOut, int &yTransOut, int &zTransOut)
{
xTransOut = xTrans;
@ -58,9 +176,8 @@ void MotionEvent::translations(int &xTransOut, int &yTransOut, int &zTransOut)
void MotionEvent::setTranslations(const int &xTransIn, const int &yTransIn, const int &zTransIn)
{
xTrans = xTransIn;
yTrans = yTransIn;
zTrans = zTransIn;
int motionDataArray[6] = {xTransIn, yTransIn, zTransIn, xRot, yRot, zRot};
importSettings(motionDataArray);
}
void MotionEvent::rotations(int &xRotOut, int &yRotOut, int &zRotOut)
@ -72,9 +189,8 @@ void MotionEvent::rotations(int &xRotOut, int &yRotOut, int &zRotOut)
void MotionEvent::setRotations(const int &xRotIn, const int &yRotIn, const int &zRotIn)
{
xRot = xRotIn;
yRot = yRotIn;
zRot = zRotIn;
int motionDataArray[6] = {xTrans, yTrans, zTrans, xRotIn, yRotIn, zRotIn};
importSettings(motionDataArray);
}

View File

@ -56,6 +56,7 @@ namespace Spaceball
int rotationY(){return yRot;}
int rotationZ(){return zRot;}
void setMotionData(int &xTransOut, int &yTransOut, int &zTransOut, int &xRotOut, int &yRotOut, int &zRotOut);
static int MotionEventType;
private:
@ -66,6 +67,8 @@ namespace Spaceball
int yRot;
int zRot;
bool handled;
void importSettings(int* motionDataArray);
float convertPrefToSensitivity(int value);
};
class ButtonEvent : public EventBase

View File

@ -45,6 +45,7 @@
#include "DlgCommandsImp.h"
#include "DlgKeyboardImp.h"
#include "DlgCustomizeSpaceball.h"
#include "DlgCustomizeSpNavSettings.h"
using namespace Gui;
using namespace Gui::Dialog;
@ -75,6 +76,7 @@ WidgetFactorySupplier::WidgetFactorySupplier()
new CustomPageProducer<DlgCustomToolbarsImp>;
//new CustomPageProducer<DlgCustomToolBoxbarsImp>;
new CustomPageProducer<DlgCustomActionsImp>;
new CustomPageProducer<DlgCustomizeSpNavSettings>;
new CustomPageProducer<DlgCustomizeSpaceball>;
// ADD YOUR PREFERENCE WIDGETS HERE

View File

@ -101,6 +101,13 @@ class _Axis:
if geoms:
obj.Shape = Part.Compound(geoms)
obj.Placement = pl
def __getstate__(self):
return self.Type
def __setstate__(self,state):
if state:
self.Type = state
class _ViewProviderAxis:
"A View Provider for the Axis object"
@ -252,7 +259,6 @@ class _ViewProviderAxis:
return None
class _AxisTaskPanel:
'''The editmode TaskPanel for Axis objects'''
def __init__(self):

View File

@ -99,6 +99,12 @@ def addComponents(objectsList,host):
if hasattr(o,"Shape"):
a.append(o)
host.Objects = a
elif host.isDerivedFrom("App::DocumentObjectGroup"):
c = host.Group
for o in objectsList:
if not o in c:
c.append(o)
host.Group = c
def removeComponents(objectsList,host=None):
'''removeComponents(objectsList,[hostObject]): removes the given component or

View File

@ -265,6 +265,13 @@ class Component:
obj.Proxy = self
self.Type = "Component"
self.Subvolume = None
def __getstate__(self):
return self.Type
def __setstate__(self,state):
if state:
self.Type = state
class ViewProviderComponent:
"A default View Provider for Component objects"

View File

@ -83,10 +83,11 @@ class _Floor:
self.Object = obj
def __getstate__(self):
return None
return self.Type
def __setstate__(self,state):
return None
if state:
self.Type = state
def execute(self,obj):
pass

View File

@ -110,6 +110,13 @@ class _SectionPlane:
def getNormal(self,obj):
return obj.Shape.Faces[0].normalAt(0,0)
def __getstate__(self):
return self.Type
def __setstate__(self,state):
if state:
self.Type = state
class _ViewProviderSectionPlane(ArchComponent.ViewProviderComponent):
"A View Provider for Section Planes"
def __init__(self,vobj):
@ -180,6 +187,12 @@ class _ViewProviderSectionPlane(ArchComponent.ViewProviderComponent):
vobj.Object.Proxy.execute(vobj.Object)
return
def __getstate__(self):
return None
def __setstate__(self,state):
return None
class _ArchDrawingView:
def __init__(self, obj):
obj.addProperty("App::PropertyLink","Source","Base","The linked object")
@ -203,10 +216,11 @@ class _ArchDrawingView:
obj.ViewResult = self.updateSVG(obj)
def __getstate__(self):
return None
return self.Type
def __setstate__(self,state):
return None
if state:
self.Type = state
def getDisplayModes(self,vobj):
modes=["Default"]

View File

@ -420,7 +420,8 @@ def getShape(obj):
m[1], m[4], m[7], m[10],
m[2], m[5], m[8], m[11],
0, 0, 0, 1)
sh.Placement = FreeCAD.Placement(mat)
sh.Placement = FreeCAD.Placement(mat)
if DEBUG: print "getting Shape from ",obj
return sh
def getWire(entity,placement=None):

View File

@ -1245,6 +1245,7 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct
svg = ""
linewidth = linewidth/scale
fontsize = (fontsize/scale)/2
pointratio = 4 # the number of times the dots are smaller than the font size
plane = None
if direction:
if isinstance(direction,FreeCAD.Vector):
@ -1388,13 +1389,13 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct
svg += 'freecad:dimpoint="'+str(p2.x)+' '+str(p2.y)+'"'
svg += '/>\n'
svg += '<circle cx="'+str(p2.x)+'" cy="'+str(p2.y)
svg += '" r="'+str(fontsize)+'" '
svg += '" r="'+str(fontsize/pointratio)+'" '
svg += 'fill="'+ getrgb(obj.ViewObject.LineColor) +'" stroke="none" '
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
svg += 'freecad:skip="1"'
svg += '/>\n'
svg += '<circle cx="'+str(p3.x)+'" cy="'+str(p3.y)
svg += '" r="'+str(fontsize)+'" '
svg += '" r="'+str(fontsize/pointratio)+'" '
svg += 'fill="#000000" stroke="none" '
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
svg += 'freecad:skip="1"'
@ -1529,18 +1530,21 @@ def makeDrawingView(obj,page,lwmod=None,tmod=None):
if tmod: viewobj.TextModifier = tmod
return viewobj
def makeShape2DView(baseobj,projectionVector=None):
def makeShape2DView(baseobj,projectionVector=None,facenumbers=[]):
'''
makeShape2DView(object,[projectionVector]) - adds a 2D shape to the document, which is a
2D projection of the given object. A specific projection vector can also be given.
makeShape2DView(object,[projectionVector,facenumbers]) - adds a 2D shape to the document, which is a
2D projection of the given object. A specific projection vector can also be given. You can also
specify a list of face numbers to be considered in individual faces mode.
'''
obj = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython","Shape2DView")
_Shape2DView(obj)
if gui:
_ViewProviderDraft(obj.ViewObject)
_ViewProviderDraftAlt(obj.ViewObject)
obj.Base = baseobj
if projectionVector:
obj.Projection = projectionVector
if facenumbers:
obj.FaceNumbers = facenumbers
select(obj)
return obj
@ -1728,12 +1732,37 @@ def heal(objlist=None,delete=True,reparent=True):
# Python Features definitions
#---------------------------------------------------------------------------
class _DraftObject:
"The base class for Draft objects"
def __init__(self,obj,tp="Unknown"):
obj.Proxy = self
self.Type = tp
def __getstate__(self):
return self.Type
def __setstate__(self,state):
if state:
self.Type = state
def execute(self,obj):
pass
def onChanged(self, fp, prop):
pass
class _ViewProviderDraft:
"A generic View Provider for Draft objects"
"The base class for Draft Viewproviders"
def __init__(self, obj):
obj.Proxy = self
self.Object = obj.Object
def __getstate__(self):
return None
def __setstate__(self,state):
return None
def attach(self, obj):
self.Object = obj.Object
@ -1752,11 +1781,8 @@ class _ViewProviderDraft:
def onChanged(self, vp, prop):
return
def __getstate__(self):
return None
def __setstate__(self,state):
return None
def execute(self,obj):
return
def setEdit(self,vp,mode):
FreeCADGui.runCommand("Draft_Edit")
@ -1779,10 +1805,30 @@ class _ViewProviderDraft:
if hasattr(self.Object,"Components"):
objs.extend(self.Object.Components)
return objs
class _ViewProviderDraftAlt(_ViewProviderDraft):
"a view provider that doesn't swallow its base object"
def __init__(self,vobj):
_ViewProviderDraft.__init__(self,vobj)
def claimChildren(self):
return []
class _ViewProviderDraftPart(_ViewProviderDraftAlt):
"a view provider that displays a Part icon instead of a Draft icon"
def __init__(self,vobj):
_ViewProviderDraftAlt.__init__(self,vobj)
def getIcon(self):
return ":/icons/Tree_Part.svg"
class _Dimension:
"The Dimension object"
class _Dimension(_DraftObject):
"The Draft Dimension object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"Dimension")
obj.addProperty("App::PropertyVector","Start","Base",
"Startpoint of dimension")
obj.addProperty("App::PropertyVector","End","Base",
@ -1797,8 +1843,6 @@ class _Dimension:
obj.Start = FreeCAD.Vector(0,0,0)
obj.End = FreeCAD.Vector(1,0,0)
obj.Dimline = FreeCAD.Vector(0,1,0)
obj.Proxy = self
self.Type = "Dimension"
def onChanged(self, obj, prop):
obj.setEditorMode('Distance',1)
@ -1807,8 +1851,8 @@ class _Dimension:
if obj.ViewObject:
obj.ViewObject.update()
class _ViewProviderDimension:
"A View Provider for the Dimension object"
class _ViewProviderDimension(_ViewProviderDraft):
"A View Provider for the Draft Dimension object"
def __init__(self, obj):
obj.addProperty("App::PropertyLength","FontSize","Base","Font size")
obj.addProperty("App::PropertyString","FontName","Base","Font name")
@ -1817,11 +1861,11 @@ class _ViewProviderDimension:
obj.addProperty("App::PropertyLength","ExtLines","Base","Ext lines")
obj.addProperty("App::PropertyVector","TextPosition","Base","The position of the text. Leave (0,0,0) for automatic position")
obj.addProperty("App::PropertyString","Override","Base","Text override. Use 'dim' to insert the dimension length")
obj.Proxy = self
obj.FontSize=getParam("textheight")
obj.FontName=getParam("textfont")
obj.ExtLines=0.3
obj.Override = ''
_ViewProviderDraft.__init__(self,obj)
def calcGeom(self,obj):
import Part, DraftGeomUtils
@ -2009,17 +2053,23 @@ class _ViewProviderDimension:
def onChanged(self, vp, prop):
self.Object = vp.Object
if prop == "FontSize":
self.font.size = vp.FontSize
self.font3d.size = vp.FontSize*100
if hasattr(self,"font"):
self.font.size = vp.FontSize
if hasattr(self,"font3d"):
self.font3d.size = vp.FontSize*100
elif prop == "FontName":
self.font.name = self.font3d.name = str(vp.FontName)
if hasattr(self,"font") and hasattr(self,"font3d"):
self.font.name = self.font3d.name = str(vp.FontName)
elif prop == "LineColor":
c = vp.LineColor
self.color.rgb.setValue(c[0],c[1],c[2])
if hasattr(self,"color"):
self.color.rgb.setValue(c[0],c[1],c[2])
elif prop == "LineWidth":
self.drawstyle.lineWidth = vp.LineWidth
if hasattr(self,"drawstyle"):
self.drawstyle.lineWidth = vp.LineWidth
else:
self.drawstyle.lineWidth = vp.LineWidth
if hasattr(self,"drawstyle"):
self.drawstyle.lineWidth = vp.LineWidth
self.updateData(vp.Object, None)
def getDisplayModes(self,obj):
@ -2098,9 +2148,10 @@ class _ViewProviderDimension:
self.defaultmode = state
self.setDisplayMode(state)
class _AngularDimension:
"The AngularDimension object"
class _AngularDimension(_DraftObject):
"The Draft AngularDimension object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"AngularDimension")
obj.addProperty("App::PropertyAngle","FirstAngle","Base",
"Start angle of the dimension")
obj.addProperty("App::PropertyAngle","LastAngle","Base",
@ -2113,18 +2164,13 @@ class _AngularDimension:
obj.LastAngle = 90
obj.Dimline = FreeCAD.Vector(0,1,0)
obj.Center = FreeCAD.Vector(0,0,0)
obj.Proxy = self
self.Type = "AngularDimension"
def onChanged(self, fp, prop):
pass
def execute(self, fp):
if fp.ViewObject:
fp.ViewObject.update()
class _ViewProviderAngularDimension:
"A View Provider for the Angular Dimension object"
class _ViewProviderAngularDimension(_ViewProviderDraft):
"A View Provider for the Draft Angular Dimension object"
def __init__(self, obj):
obj.addProperty("App::PropertyLength","FontSize","Base","Font size")
obj.addProperty("App::PropertyString","FontName","Base","Font name")
@ -2132,10 +2178,10 @@ class _ViewProviderAngularDimension:
obj.addProperty("App::PropertyColor","LineColor","Base","Line color")
obj.addProperty("App::PropertyVector","TextPosition","Base","The position of the text. Leave (0,0,0) for automatic position")
obj.addProperty("App::PropertyString","Override","Base","Text override. Use 'dim' to insert the dimension length")
obj.Proxy = self
obj.FontSize=getParam("textheight")
obj.FontName=getParam("textfont")
obj.Override = ''
_ViewProviderDraft.__init__(self,obj)
def attach(self, vobj):
from pivy import coin
@ -2309,17 +2355,16 @@ class _ViewProviderAngularDimension:
" "};
"""
class _Rectangle:
class _Rectangle(_DraftObject):
"The Rectangle object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"Rectangle")
obj.addProperty("App::PropertyDistance","Length","Base","Length of the rectangle")
obj.addProperty("App::PropertyDistance","Height","Base","Height of the rectange")
obj.addProperty("App::PropertyDistance","FilletRadius","Base","Radius to use to fillet the corners")
obj.Proxy = self
obj.Length=1
obj.Height=1
self.Type = "Rectangle"
def execute(self, fp):
self.createGeometry(fp)
@ -2371,18 +2416,17 @@ class _ViewProviderRectangle(_ViewProviderDraft):
self.texture = None
return
class _Circle:
class _Circle(_DraftObject):
"The Circle object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"Circle")
obj.addProperty("App::PropertyAngle","FirstAngle","Base",
"Start angle of the arc")
obj.addProperty("App::PropertyAngle","LastAngle","Base",
"End angle of the arc (for a full circle, give it same value as First Angle)")
obj.addProperty("App::PropertyDistance","Radius","Base",
"Radius of the circle")
obj.Proxy = self
self.Type = "Circle"
def execute(self, fp):
self.createGeometry(fp)
@ -2402,10 +2446,11 @@ class _Circle:
fp.Shape = shape
fp.Placement = plm
class _Wire:
class _Wire(_DraftObject):
"The Wire object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"Wire")
obj.addProperty("App::PropertyVectorList","Points","Base",
"The vertices of the wire")
obj.addProperty("App::PropertyBool","Closed","Base",
@ -2419,9 +2464,7 @@ class _Wire:
obj.addProperty("App::PropertyVector","End","Base",
"The end point of this line")
obj.addProperty("App::PropertyDistance","FilletRadius","Base","Radius to use to fillet the corners")
obj.Proxy = self
obj.Closed = False
self.Type = "Wire"
def execute(self, fp):
self.createGeometry(fp)
@ -2541,10 +2584,11 @@ class _ViewProviderWire(_ViewProviderDraft):
def claimChildren(self):
return [self.Object.Base,self.Object.Tool]
class _Polygon:
class _Polygon(_DraftObject):
"The Polygon object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"Polygon")
obj.addProperty("App::PropertyInteger","FacesNumber","Base","Number of faces")
obj.addProperty("App::PropertyDistance","Radius","Base","Radius of the control circle")
obj.addProperty("App::PropertyEnumeration","DrawMode","Base","How the polygon must be drawn from the control circle")
@ -2552,8 +2596,6 @@ class _Polygon:
obj.DrawMode = ['inscribed','circumscribed']
obj.FacesNumber = 3
obj.Radius = 1
obj.Proxy = self
self.Type = "Polygon"
def execute(self, fp):
self.createGeometry(fp)
@ -2585,8 +2627,10 @@ class _Polygon:
fp.Shape = shape
fp.Placement = plm
class _DrawingView:
class _DrawingView(_DraftObject):
"The Draft DrawingView object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"DrawingView")
obj.addProperty("App::PropertyVector","Direction","Shape View","Projection direction")
obj.addProperty("App::PropertyFloat","LineWidth","Drawing View","The width of the lines inside this object")
obj.addProperty("App::PropertyFloat","FontSize","Drawing View","The size of the texts inside this object")
@ -2596,10 +2640,8 @@ class _DrawingView:
for f in FreeCAD.svgpatterns.keys():
fills.append(f)
obj.FillStyle = fills
obj.Proxy = self
obj.LineWidth = 0.35
obj.FontSize = 12
self.Type = "DrawingView"
def execute(self, obj):
if obj.Source:
@ -2623,17 +2665,16 @@ class _DrawingView:
result += '</g>'
return result
class _BSpline:
class _BSpline(_DraftObject):
"The BSpline object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"BSpline")
obj.addProperty("App::PropertyVectorList","Points","Base",
"The points of the b-spline")
obj.addProperty("App::PropertyBool","Closed","Base",
"If the b-spline is closed or not")
obj.Proxy = self
obj.Closed = False
self.Type = "BSpline"
def execute(self, fp):
self.createGeometry(fp)
@ -2696,14 +2737,13 @@ class _ViewProviderBSpline(_ViewProviderDraft):
rn.removeChild(self.pt)
return
class _Block:
class _Block(_DraftObject):
"The Block object"
def __init__(self, obj):
_DraftObject.__init__(self,obj,"Block")
obj.addProperty("App::PropertyLinkList","Components","Base",
"The components of this block")
obj.Proxy = self
self.Type = "Block"
def execute(self, fp):
self.createGeometry(fp)
@ -2723,7 +2763,7 @@ class _Block:
fp.Shape = shape
fp.Placement = plm
class _Shape2DView:
class _Shape2DView(_DraftObject):
"The Shape2DView object"
def __init__(self,obj):
@ -2731,17 +2771,30 @@ class _Shape2DView:
"The base object this 2D view must represent")
obj.addProperty("App::PropertyVector","Projection","Base",
"The projection vector of this object")
obj.Projection = Vector(0,0,-1)
obj.Proxy = self
self.Type = "2DShapeView"
obj.addProperty("App::PropertyEnumeration","ProjectionMode","Base",
"The way the viewed object must be projected")
obj.addProperty("App::PropertyIntegerList","FaceNumbers","Base",
"The indices of the faces to be projected in Individual Faces mode")
obj.Projection = Vector(0,0,1)
obj.ProjectionMode = ["Solid","Individual Faces","Cutlines"]
_DraftObject.__init__(self,obj,"Shape2DView")
def execute(self,obj):
self.createGeometry(obj)
def onChanged(self,obj,prop):
if prop in ["Projection","Base"]:
if prop in ["Projection","Base","ProjectionMode","FaceNumbers"]:
self.createGeometry(obj)
def clean(self,shape):
"returns a valid compound of edges"
import Part
oldedges = shape.Edges
newedges = []
for e in oldedges:
newedges.append(e.Curve.toShape())
return Part.makeCompound(newedges)
def createGeometry(self,obj):
import Drawing, DraftGeomUtils
pl = obj.Placement
@ -2757,29 +2810,59 @@ class _Shape2DView:
shapes.extend(o.Shape.Solids)
cutp,cutv,iv =Arch.getCutVolume(obj.Base.Shape,shapes)
cuts = []
for sh in shapes:
if sh.Volume < 0:
sh.reverse()
c = sh.cut(cutv)
cuts.extend(c.Solids)
comp = Part.makeCompound(cuts)
opl = FreeCAD.Placement(obj.Base.Placement)
proj = opl.Rotation.multVec(FreeCAD.Vector(0,0,1))
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(comp,proj)
if visibleG0:
obj.Shape = visibleG0
if obj.ProjectionMode == "Solid":
for sh in shapes:
if sh.Volume < 0:
sh.reverse()
c = sh.cut(cutv)
cuts.extend(c.Solids)
comp = Part.makeCompound(cuts)
opl = FreeCAD.Placement(obj.Base.Placement)
proj = opl.Rotation.multVec(FreeCAD.Vector(0,0,1))
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(comp,proj)
print visibleG0
if visibleG0:
obj.Shape = self.clean(visibleG0)
elif obj.ProjectionMode == "Cutlines":
for sh in shapes:
if sh.Volume < 0:
sh.reverse()
c = sh.section(cutp)
cuts.append(c)
comp = Part.makeCompound(cuts)
opl = FreeCAD.Placement(obj.Base.Placement)
comp.Placement = opl.inverse()
if comp:
obj.Shape = comp
elif obj.Base.isDerivedFrom("Part::Feature"):
if not DraftVecUtils.isNull(obj.Projection):
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(obj.Base.Shape,obj.Projection)
if visibleG0:
obj.Shape = visibleG0
if obj.ProjectionMode == "Solid":
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(obj.Base.Shape,obj.Projection)
if visibleG0:
obj.Shape = self.clean(visibleG0)
elif obj.ProjectionMode == "Individual Faces":
import Part
if obj.FaceNumbers:
faces = []
for i in obj.FaceNumbers:
if len(obj.Base.Shape.Faces) > i:
faces.append(obj.Base.Shape.Faces[i])
views = []
for f in faces:
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(f,obj.Projection)
if visibleG0:
views.append(visibleG0)
if views:
obj.Shape = Part.makeCompound(views)
if not DraftGeomUtils.isNull(pl):
obj.Placement = pl
class _Array:
class _Array(_DraftObject):
"The Draft Array object"
def __init__(self,obj):
_DraftObject.__init__(self,obj,"Array")
obj.addProperty("App::PropertyLink","Base","Base",
"The base object that must be duplicated")
obj.addProperty("App::PropertyEnumeration","ArrayType","Base",
@ -2804,8 +2887,6 @@ class _Array:
"Center point")
obj.addProperty("App::PropertyAngle","Angle","Base",
"Angle to cover with copies")
obj.Proxy = self
self.Type = "Array"
obj.ArrayType = ['ortho','polar']
obj.NumberX = 1
obj.NumberY = 1
@ -2898,15 +2979,15 @@ class _Array:
base.append(nshape)
return Part.makeCompound(base)
class _Point:
class _Point(_DraftObject):
"The Draft Point object"
def __init__(self, obj,x,y,z):
_DraftObject.__init__(self,obj,"Point")
obj.addProperty("App::PropertyFloat","X","Point","Location").X = x
obj.addProperty("App::PropertyFloat","Y","Point","Location").Y = y
obj.addProperty("App::PropertyFloat","Z","Point","Location").Z = z
mode = 2
obj.setEditorMode('Placement',mode)
obj.Proxy = self
self.Type = "Point"
def execute(self, fp):
self.createGeometry(fp)
@ -2916,9 +2997,10 @@ class _Point:
shape = Part.Vertex(Vector(fp.X,fp.Y,fp.Z))
fp.Shape = shape
class _ViewProviderPoint:
class _ViewProviderPoint(_ViewProviderDraft):
"A viewprovider for the Draft Point object"
def __init__(self, obj):
obj.Proxy = self
_ViewProviderDraft.__init__(self,obj)
def onChanged(self, vp, prop):
mode = 2
@ -2938,17 +3020,16 @@ class _ViewProviderPoint:
def getIcon(self):
return ":/icons/Draft_Dot.svg"
class _Clone:
class _Clone(_DraftObject):
"The Clone object"
def __init__(self,obj):
_DraftObject.__init__(self,obj,"Clone")
obj.addProperty("App::PropertyLinkList","Objects","Base",
"The objects included in this scale object")
obj.addProperty("App::PropertyVector","Scale","Base",
"The scale vector of this object")
obj.Scale = Vector(1,1,1)
obj.Proxy = self
self.Type = "Clone"
def execute(self,obj):
self.createGeometry(obj)
@ -2978,29 +3059,15 @@ class _Clone:
if not DraftGeomUtils.isNull(pl):
obj.Placement = pl
class _ViewProviderDraftPart(_ViewProviderDraft):
class _ViewProviderClone(_ViewProviderDraftAlt):
"a view provider that displays a Part icon instead of a Draft icon"
def __init__(self,vobj):
_ViewProviderDraft.__init__(self,vobj)
def getIcon(self):
return ":/icons/Tree_Part.svg"
def claimChildren(self):
return []
class _ViewProviderClone(_ViewProviderDraft):
"a view provider that displays a Part icon instead of a Draft icon"
def __init__(self,vobj):
_ViewProviderDraft.__init__(self,vobj)
_ViewProviderDraftAlt.__init__(self,vobj)
def getIcon(self):
return ":/icons/Draft_Clone.svg"
def claimChildren(self):
return []
if not hasattr(FreeCADGui,"Snapper"):
import DraftSnap

View File

@ -3658,15 +3658,27 @@ class Shape2DView():
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Shape2DView", "Creates Shape 2D views of selected objects")}
def IsActive(self):
if Draft.getSelection():
if FreeCADGui.Selection.getSelection():
return True
else:
return False
def Activated(self):
sellist = []
for ob in Draft.getSelection():
Draft.makeShape2DView(ob)
faces = []
objs = []
sel = FreeCADGui.Selection.getSelectionEx()
for s in sel:
objs.append(s.Object)
for e in s.SubElementNames:
if "Face" in e:
faces.append(int(e[4:])-1)
print objs,faces
if len(objs) == 1:
if faces:
Draft.makeShape2DView(objs[0],facenumbers=faces)
return
for o in objs:
Draft.makeShape2DView(o)
class Draft2Sketch():
"The Draft2Sketch FreeCAD command definition"
@ -3752,6 +3764,9 @@ class Point:
def Activated(self):
self.view = Draft.get3DView()
self.stack = []
rot = self.view.getCameraNode().getField("orientation").getValue()
upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue())
plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv)
self.point = None
# adding 2 callback functions
self.callbackClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.click)
@ -3772,7 +3787,7 @@ class Point:
self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick)
self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove)
FreeCAD.ActiveDocument.openTransaction("Create Point")
Draft.makePoint((self.stack[0][0]),(self.stack[0][1]),0.0)
Draft.makePoint((self.stack[0][0]),(self.stack[0][1]),self.stack[0][2])
FreeCAD.ActiveDocument.commitTransaction()
FreeCADGui.Snapper.off()

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
@ -13,9 +14,10 @@
height="64px"
id="svg3188"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="apply.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_Apply.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs3190">
<linearGradient
@ -46,6 +48,16 @@
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective3196" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3354"
id="linearGradient2996"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.15768287,0,0,0.15089213,-359.6514,-139.05703)"
x1="2392.2313"
y1="1162.2943"
x2="2638.95"
y2="1162.2943" />
</defs>
<sodipodi:namedview
id="base"
@ -54,17 +66,18 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.75"
inkscape:cx="25.004198"
inkscape:cy="2.8330839"
inkscape:zoom="2.4909881"
inkscape:cx="27.73103"
inkscape:cy="10.858425"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="641"
inkscape:window-height="722"
inkscape:window-width="1280"
inkscape:window-height="777"
inkscape:window-x="0"
inkscape:window-y="25" />
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata3193">
<rdf:RDF>
@ -80,71 +93,69 @@
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g3611"
transform="matrix(0.1587551,0,0,0.1587551,-360.60166,-154.13114)">
<path
id="rect2392"
d="M 2317.9152,1021.3304 L 2317.9152,1353.6741 L 2443.1339,1353.6741 L 2443.1339,1282.9867 L 2524.2902,1282.9867 L 2524.2902,1335.0491 L 2599.7589,1252.4241 L 2524.2902,1169.8304 L 2524.2902,1222.4554 L 2443.1339,1222.4554 L 2443.1339,1021.3304 L 2317.9152,1021.3304 z"
style="fill:#000000;fill-opacity:0.56310676;fill-rule:evenodd;stroke:none;stroke-width:13.11065483;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
inkscape:export-ydpi="4.1683898"
inkscape:export-xdpi="4.1683898"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="995.47461"
x="2343.1125"
height="332.34647"
width="125.20362"
id="rect2364"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:13.11065483;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
inkscape:export-ydpi="4.1683898"
inkscape:export-xdpi="4.1683898"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="1010.9336"
x="2357.1428"
height="68.571426"
width="95.714279"
id="rect3335"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
inkscape:export-ydpi="4.1683898"
inkscape:export-xdpi="4.1683898"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="1086.9336"
x="2357.1428"
height="68.571426"
width="95.714279"
id="rect3337"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
inkscape:export-ydpi="4.1683898"
inkscape:export-xdpi="4.1683898"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="1164.9336"
x="2357.1428"
height="68.571426"
width="95.714279"
id="rect3339"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
inkscape:export-ydpi="4.1683898"
inkscape:export-xdpi="4.1683898"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="1242.9336"
x="2357.1428"
height="68.571426"
width="95.714279"
id="rect3341"
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
inkscape:export-ydpi="4.1683898"
inkscape:export-xdpi="4.1683898"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
sodipodi:nodetypes="cccccccc"
id="path3343"
d="M 2549.4844,1143.9677 L 2549.4844,1196.597 L 2389.1018,1196.597 L 2389.1018,1257.1308 L 2549.4844,1257.1308 L 2549.4844,1309.1924 L 2624.9367,1226.58 L 2549.4844,1143.9677 z"
style="fill:url(#linearGradient3599);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:10.88381958;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:0.56310676;fill-rule:evenodd;stroke:none;stroke-width:13.11065483;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 7.3791994,8.0102698 0,52.7612572 19.8791076,0 0,-11.221985 12.883976,0 0,8.265171 11.981041,-13.11714 -11.981041,-13.112171 0,8.354487 -12.883976,0 0,-31.9296192 -19.8791076,0 z"
id="rect2392" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.08138323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect2364"
width="19.876713"
height="52.761696"
x="11.379407"
y="3.9055312"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
inkscape:export-xdpi="4.1683898"
inkscape:export-ydpi="4.1683898" />
<rect
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3335"
width="15.19513"
height="10.886064"
x="13.606785"
y="6.3597236"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
inkscape:export-xdpi="4.1683898"
inkscape:export-ydpi="4.1683898" />
<rect
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3337"
width="15.19513"
height="10.886064"
x="13.606785"
y="18.425112"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
inkscape:export-xdpi="4.1683898"
inkscape:export-ydpi="4.1683898" />
<rect
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3339"
width="15.19513"
height="10.886064"
x="13.606785"
y="30.80801"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
inkscape:export-xdpi="4.1683898"
inkscape:export-ydpi="4.1683898" />
<rect
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:12.60000038;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3341"
width="15.19513"
height="10.886064"
x="13.606785"
y="43.190907"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
inkscape:export-xdpi="4.1683898"
inkscape:export-ydpi="4.1683898" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient2996);fill-opacity:1;fill-rule:evenodd;stroke:#000842;stroke-width:2.78860092;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 43.654661,18.832553 0,8.192669 -25.079926,0 0,18.79758 25.079926,0 0,7.992728 16.992596,-17.491499 z"
id="path3343"
sodipodi:nodetypes="cccccccc"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
inkscape:export-xdpi="4.1683898"
inkscape:export-ydpi="4.1683898" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -14,8 +14,8 @@
height="64px"
id="svg3611"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="New document 2">
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_Construction.svg">
<defs
id="defs3613">
<inkscape:perspective
@ -44,7 +44,7 @@
<linearGradient
id="linearGradient4292">
<stop
style="stop-color:#8b8b8b;stop-opacity:1;"
style="stop-color:#62d9c5;stop-opacity:1;"
offset="0"
id="stop4294" />
<stop
@ -83,6 +83,47 @@
id="linearGradient3609"
xlink:href="#linearGradient4300"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4292"
id="linearGradient3001"
gradientUnits="userSpaceOnUse"
x1="657.42859"
y1="92.117249"
x2="696.53217"
y2="92.117249"
gradientTransform="matrix(0.90492818,0.46143357,-0.43649386,0.95663257,-533.80417,-377.42664)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4292-4"
id="linearGradient3001-0"
gradientUnits="userSpaceOnUse"
x1="657.42859"
y1="92.117249"
x2="696.53217"
y2="92.117249"
gradientTransform="matrix(0.93342445,0.4455918,-0.45023909,0.92378981,-552.52671,-364.08327)" />
<linearGradient
id="linearGradient4292-4">
<stop
style="stop-color:#62d9c5;stop-opacity:1;"
offset="0"
id="stop4294-4" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop4296-4" />
</linearGradient>
<linearGradient
y2="92.117249"
x2="696.53217"
y1="92.117249"
x1="657.42859"
gradientTransform="matrix(0.93342445,0.4455918,-0.45023909,0.92378981,-527.86118,-368.62645)"
gradientUnits="userSpaceOnUse"
id="linearGradient3807"
xlink:href="#linearGradient4292-4"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@ -92,8 +133,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.5"
inkscape:cx="32"
inkscape:cy="32"
inkscape:cx="35.417697"
inkscape:cy="40.071519"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
@ -111,7 +152,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -119,23 +160,29 @@
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g4120"
transform="translate(-642.18287,-69.358733)">
<path
id="path3498-2"
d="m 692.625,79.90625 c -9.00513,0.257863 -31.25,23.125 -31.25,23.125 l 7.125,3.375 c -5.88827,4.53943 -11.83414,10.167 -13.8125,14.84375 -1.3112,3.43874 -0.61976,9.84842 4.40625,8.9375 6.24167,-0.72854 9.07314,-4.27175 11.59375,-9.40625 0.9284,-2.00661 3.58141,-6.33884 5.65625,-10.65625 l 11.4375,5.40625 c 0,0 16.48282,-31.148446 6.4375,-35.34375 -0.47221,-0.197212 -0.99341,-0.298441 -1.59375,-0.28125 z"
style="color:#000000;fill:#000000;fill-opacity:0.78431373;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccs"
id="path3498"
d="m 691.78572,74.571428 c -7.55532,-3.155387 -32.85715,22.857143 -32.85715,22.857143 l 26.42858,12.499999 c 0,0 16.47389,-31.161834 6.42857,-35.357142 z"
style="fill:url(#linearGradient4125);fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccccc"
id="path3500"
d="m 676.15615,94.031827 c -6.94672,3.800931 -20.67459,13.990983 -23.90244,21.621463 -1.3112,3.43874 -0.6196,9.83051 4.40641,8.91959 6.24167,-0.72854 9.0552,-4.27522 11.57581,-9.40972 1.83845,-3.97355 10.4417,-17.039517 7.92022,-21.131333 z"
style="fill:url(#linearGradient3609);fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<path
style="opacity:0.52166664;fill:#000000;fill-opacity:1;stroke:none"
d="m 53.941638,17.166729 c -11.749305,0.425528 -32.628767,8.510945 -32.628767,8.510945 l 2.726638,3.592071 c -6.678937,1.647956 -13.430919,4.149432 -16.9051551,7.378309 -2.6875313,2.68458 -4.8548987,9.101934 0.090888,10.549688 5.9662671,2.183171 10.0502161,0.09195 14.5723651,-3.656794 1.494645,-1.298828 4.950786,-3.686788 8.301098,-6.375118 l 9.664416,12.653153 c 0,0 28.496547,-22.191422 21.23748,-30.840037 -1.194313,-1.422931 -3.769157,-1.931364 -7.058963,-1.812217 z"
id="path3498-3"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient3001);fill-opacity:1;stroke:#003b2d;stroke-width:3.09901094;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 59.662253,13.123968 C 54.202538,6.6191446 19.951889,19.828464 19.951889,19.828464 l 18.459793,24.152939 c 0,0 28.509638,-22.208819 21.250571,-30.857435 z"
id="path3498"
sodipodi:nodetypes="cccs" />
<rect
style="color:#000000;fill:#00beb5;fill-opacity:1;fill-rule:nonzero;stroke:#003b2d;stroke-width:3.09901094;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3772"
width="2.2914774"
height="11.10865"
x="34.728481"
y="21.25304" />
<path
inkscape:connector-curvature="0"
style="fill:#00beb5;fill-opacity:1;stroke:#003b2d;stroke-width:3.09901094;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 36.848002,21.139332 c -7.945366,0.430644 -24.815998,3.84428 -31.0676284,9.654406 -2.6875309,2.68458 -4.85165092,9.118283 0.094138,10.566036 5.9662664,2.183171 10.0604134,0.08856 14.5825624,-3.660176 3.398096,-2.952905 16.886634,-11.482407 16.390928,-16.560266 z"
id="path3500"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -1,29 +1,210 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
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="svg4054"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="finish.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
id="svg3612"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_Finish.svg">
<defs
id="defs4056">
id="defs3614">
<linearGradient
id="linearGradient4280">
<stop
style="stop-color:#007b09;stop-opacity:1;"
offset="0"
id="stop4282" />
<stop
style="stop-color:#46ff00;stop-opacity:1;"
offset="1"
id="stop4284" />
</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="perspective4062" />
id="perspective3620" />
<inkscape:perspective
id="perspective3588"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3692"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-6"
id="radialGradient3684"
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
id="linearGradient3144-6">
<stop
id="stop3146-9"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3148-2"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-6"
id="radialGradient3686"
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
id="linearGradient3701">
<stop
id="stop3703"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3705"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-6"
id="radialGradient3688"
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
id="linearGradient3708">
<stop
id="stop3710"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3712"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3723"
xlink:href="#linearGradient3144-6"
inkscape:collect="always" />
<inkscape:perspective
id="perspective3805"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3864-0-0">
<stop
id="stop3866-5-7"
offset="0"
style="stop-color:#0619c0;stop-opacity:1;" />
<stop
id="stop3868-7-6"
offset="1"
style="stop-color:#379cfb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3377">
<stop
id="stop3379"
offset="0"
style="stop-color:#ffaa00;stop-opacity:1;" />
<stop
id="stop3381"
offset="1"
style="stop-color:#faff2b;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3864-0">
<stop
id="stop3866-5"
offset="0"
style="stop-color:#0619c0;stop-opacity:1;" />
<stop
id="stop3868-7"
offset="1"
style="stop-color:#379cfb;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4280"
id="linearGradient4286"
x1="36.681817"
y1="36.272728"
x2="66.772727"
y2="36.272728"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4280"
id="linearGradient4331"
gradientUnits="userSpaceOnUse"
x1="36.681817"
y1="36.272728"
x2="66.772727"
y2="36.272728" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4280-5"
id="linearGradient4331-2"
gradientUnits="userSpaceOnUse"
x1="36.681816"
y1="36.272728"
x2="66.772728"
y2="36.272728" />
<linearGradient
id="linearGradient4280-5">
<stop
style="stop-color:#007b09;stop-opacity:1;"
offset="0"
id="stop4282-9" />
<stop
style="stop-color:#46ff00;stop-opacity:1;"
offset="1"
id="stop4284-5" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
@ -32,25 +213,30 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.75"
inkscape:cx="9.0331757"
inkscape:cy="8.4168436"
inkscape:zoom="3.8890872"
inkscape:cx="13.668976"
inkscape:cy="10.980782"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="689"
inkscape:window-height="722"
inkscape:window-width="1280"
inkscape:window-height="777"
inkscape:window-x="0"
inkscape:window-y="25" />
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-global="false"
inkscape:snap-nodes="true"
inkscape:object-nodes="true" />
<metadata
id="metadata4059">
id="metadata3617">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
@ -59,11 +245,60 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
style="fill:#00d000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.7;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 2.3754367,35.218235 C 12.688177,42.484861 13.905483,57.162317 13.905483,57.162317 L 27.760678,57.162317 C 27.760678,57.162317 38.2786,23.027867 51.176402,12.985784 C 64.074185,2.9436901 61.393424,4.7891824 61.393424,4.7891824 C 61.393424,4.7891824 41.957837,8.0404191 30.400435,22.343017 C 18.843012,36.645595 19.513213,41.951403 19.513213,41.951403 C 19.513213,41.951403 17.229088,38.181102 10.951159,36.097722 C 4.6732292,34.014322 2.5532429,35.167765 2.3754367,35.218235 z"
id="path2381"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/finish.png"
inkscape:export-xdpi="4.6092048"
inkscape:export-ydpi="4.6092048" />
inkscape:connector-curvature="0"
id="path4235-8-7"
d="m 28.873502,8.1632589 c -2.837435,0.2881572 -5.0625,2.7115381 -5.0625,5.6250001 0,1.085407 0.311381,2.077914 0.843749,2.9375 L 11.061002,29.882009 C 10.198524,29.34446 9.1833717,29.007008 8.0922517,29.007008 c -3.1076916,0 -5.6250003,2.51731 -5.6250003,5.625001 0,3.10769 2.5173087,5.625 5.6250003,5.625 0.2913453,0 0.5955877,-0.01981 0.8749994,-0.0625 l 14.4999999,14.65625 c -0.07495,0.3663 -0.124999,0.73654 -0.124999,1.125 0,3.10769 2.517309,5.625 5.624999,5.625 3.107692,0 5.625001,-2.51731 5.625001,-5.625 0,-0.51871 -0.08736,-1.02305 -0.21875,-1.500001 l 7.562499,-7.687499 c 1.448885,0.75273 3.039722,1.2967 4.750001,1.53125 8.007085,1.09811 15.37064,-4.49291 16.46875,-12.5 1.09811,-8.007087 -4.492914,-15.401885 -12.5,-16.5 -8.007087,-1.098115 -15.370636,4.524164 -16.46875,12.53125 -0.690574,5.035429 1.240843,9.80409 4.781249,12.9375 l -6.593749,6.6875 c -0.943363,-0.7142 -2.131802,-1.125 -3.406251,-1.125 -1.376472,0 -2.647179,0.4918 -3.624999,1.3125 L 12.154751,38.538259 c 0.971456,-1.01124 1.5625,-2.39326 1.5625,-3.90625 0,-0.77692 -0.15276,-1.5143 -0.4375,-2.1875 l 13.843751,-13.53125 c 0.70626,0.319315 1.487018,0.499999 2.3125,0.499999 3.10769,0 5.624999,-2.517309 5.624999,-5.624999 0,-3.107691 -2.517309,-5.6250001 -5.624999,-5.6250001 -0.194232,0 -0.373339,-0.019209 -0.5625,0 z"
style="opacity:0.525;fill:#000000;fill-opacity:1;stroke:none" />
<path
id="path4235-8"
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
d="M 51.088219,32.609591 28.222994,55.817606 4.2513883,31.570426 29.329376,7.3232466 31.568077,9.701098 9.0978561,31.621409 28.245092,50.724986 48.50255,30.21124 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#linearGradient4331);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4278"
sodipodi:cx="51.727272"
sodipodi:cy="36.272728"
sodipodi:rx="13.545455"
sodipodi:ry="13.545455"
d="m 65.272727,36.272728 a 13.545455,13.545455 0 1 1 -27.09091,0 13.545455,13.545455 0 1 1 27.09091,0 z"
transform="matrix(0.14678818,-1.0703303,1.0703303,0.14678818,1.7228232,79.496419)" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 37.283515,26.72743 6.35716,13.292442 13.985756,-17.592938 -13.19111,7.819084 z"
id="path4290"
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#3f81f9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.97554541;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4292"
sodipodi:cx="11.056579"
sodipodi:cy="36.229988"
sodipodi:rx="7.4567623"
sodipodi:ry="7.4567623"
d="m 18.513341,36.229988 a 7.4567623,7.4567623 0 1 1 -14.9135247,0 7.4567623,7.4567623 0 1 1 14.9135247,0 z"
transform="matrix(0.75461342,0,0,0.75461342,-0.77038182,2.9275619)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#3f81f9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.97554541;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4292-3"
sodipodi:cx="11.056579"
sodipodi:cy="36.229988"
sodipodi:rx="7.4567623"
sodipodi:ry="7.4567623"
d="m 18.513341,36.229988 a 7.4567623,7.4567623 0 1 1 -14.9135247,0 7.4567623,7.4567623 0 1 1 14.9135247,0 z"
transform="matrix(0.75461342,0,0,0.75461342,20.560933,-17.934934)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#3f81f9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.97554541;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4292-35"
sodipodi:cx="11.056579"
sodipodi:cy="36.229988"
sodipodi:rx="7.4567623"
sodipodi:ry="7.4567623"
d="m 18.513341,36.229988 a 7.4567623,7.4567623 0 1 1 -14.9135247,0 7.4567623,7.4567623 0 1 1 14.9135247,0 z"
transform="matrix(0.75461342,0,0,0.75461342,20.092113,24.258877)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
@ -11,13 +12,192 @@
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg3230"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="lock.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
id="svg3612"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_Finish.svg">
<defs
id="defs3232">
id="defs3614">
<linearGradient
id="linearGradient4280">
<stop
style="stop-color:#ff6000;stop-opacity:1;"
offset="0"
id="stop4282" />
<stop
style="stop-color:#ffee00;stop-opacity:1;"
offset="1"
id="stop4284" />
</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="perspective3620" />
<inkscape:perspective
id="perspective3588"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3692"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-6"
id="radialGradient3684"
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
id="linearGradient3144-6">
<stop
id="stop3146-9"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3148-2"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-6"
id="radialGradient3686"
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
id="linearGradient3701">
<stop
id="stop3703"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3705"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-6"
id="radialGradient3688"
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
id="linearGradient3708">
<stop
id="stop3710"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3712"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3723"
xlink:href="#linearGradient3144-6"
inkscape:collect="always" />
<inkscape:perspective
id="perspective3805"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3864-0-0">
<stop
id="stop3866-5-7"
offset="0"
style="stop-color:#0619c0;stop-opacity:1;" />
<stop
id="stop3868-7-6"
offset="1"
style="stop-color:#379cfb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3377">
<stop
id="stop3379"
offset="0"
style="stop-color:#ffaa00;stop-opacity:1;" />
<stop
id="stop3381"
offset="1"
style="stop-color:#faff2b;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3864-0">
<stop
id="stop3866-5"
offset="0"
style="stop-color:#0619c0;stop-opacity:1;" />
<stop
id="stop3868-7"
offset="1"
style="stop-color:#379cfb;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4280"
id="linearGradient4331"
gradientUnits="userSpaceOnUse"
x1="36.681817"
y1="36.272728"
x2="66.772727"
y2="36.272728" />
<linearGradient
id="linearGradient4280-5">
<stop
style="stop-color:#007b09;stop-opacity:1;"
offset="0"
id="stop4282-9" />
<stop
style="stop-color:#46ff00;stop-opacity:1;"
offset="1"
id="stop4284-5" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3273"
id="radialGradient2411"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1937875,0,0,0.20943582,-425.95281,-115.26147)"
cx="2787.5991"
cy="552.89734"
fx="2787.5991"
fy="552.89734"
r="38.829369" />
<linearGradient
inkscape:collect="always"
id="linearGradient3273">
@ -30,37 +210,16 @@
offset="1"
id="stop3277" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3273"
id="radialGradient2411"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0807499,0,-44.646407)"
cx="2787.5991"
cy="552.89736"
fx="2787.5991"
fy="552.89736"
r="38.829369" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3293"
id="linearGradient2409"
id="linearGradient2405"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,-1,5656.8338,1408.2216)"
gradientTransform="matrix(-1,0,0,-1,5656.8338,1344.2216)"
x1="2754.6858"
y1="671.11081"
x2="2900.148"
y2="671.11081" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3293"
id="linearGradient2407"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,-1,5656.8338,1376.2216)"
x1="2754.6858"
y1="671.11081"
x2="2900.148"
y2="671.11081" />
y1="671.11084"
x2="2900.1479"
y2="671.11084" />
<linearGradient
inkscape:collect="always"
id="linearGradient3293">
@ -76,13 +235,33 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3293"
id="linearGradient2405"
id="linearGradient2407"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,-1,5656.8338,1344.2216)"
gradientTransform="matrix(-1,0,0,-1,5656.8338,1376.2216)"
x1="2754.6858"
y1="671.11081"
x2="2900.148"
y2="671.11081" />
y1="671.11084"
x2="2900.1479"
y2="671.11084" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3293"
id="linearGradient2409"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,-1,5656.8338,1408.2216)"
x1="2754.6858"
y1="671.11084"
x2="2900.1479"
y2="671.11084" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3255"
id="linearGradient2403"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.15119754,0,0,0.1937875,-309.70907,-106.60955)"
x1="2732.3572"
y1="711.11218"
x2="2839.0713"
y2="711.11218" />
<linearGradient
inkscape:collect="always"
id="linearGradient3255">
@ -97,21 +276,54 @@
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3255"
id="linearGradient2403"
xlink:href="#linearGradient3293"
id="linearGradient4673"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7802234,0,0,1,599.85156,0)"
x1="2732.3571"
y1="711.11219"
x2="2839.0713"
y2="711.11219" />
<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="perspective3238" />
gradientTransform="matrix(-0.1937875,0,0,-0.1937875,670.27087,167.83649)"
x1="2754.6858"
y1="671.11084"
x2="2900.1479"
y2="671.11084" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3293"
id="linearGradient4676"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.1937875,0,0,-0.1937875,670.27087,161.63529)"
x1="2754.6858"
y1="671.11084"
x2="2900.1479"
y2="671.11084" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3293"
id="linearGradient4679"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.1937875,0,0,-0.1937875,670.27087,155.43409)"
x1="2754.6858"
y1="671.11084"
x2="2900.1479"
y2="671.11084" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4280-8"
id="linearGradient4331-8"
gradientUnits="userSpaceOnUse"
x1="36.681816"
y1="36.272728"
x2="66.772728"
y2="36.272728" />
<linearGradient
id="linearGradient4280-8">
<stop
style="stop-color:#ff6000;stop-opacity:1;"
offset="0"
id="stop4282-94" />
<stop
style="stop-color:#ffee00;stop-opacity:1;"
offset="1"
id="stop4284-7" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
@ -120,25 +332,30 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.5"
inkscape:cx="26.229024"
inkscape:cy="26.419218"
inkscape:current-layer="g2383"
inkscape:zoom="1.9445436"
inkscape:cx="37.240913"
inkscape:cy="-11.10556"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1012"
inkscape:window-height="722"
inkscape:window-x="109"
inkscape:window-y="25" />
inkscape:window-width="1280"
inkscape:window-height="777"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-global="false"
inkscape:snap-nodes="true"
inkscape:object-nodes="true" />
<metadata
id="metadata3235">
id="metadata3617">
<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>
</cc:Work>
</rdf:RDF>
</metadata>
@ -146,56 +363,74 @@
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
style="opacity:0.5625;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 28.389205,7.9886364 c -3.107691,0 -5.625,2.5485586 -5.625,5.6562496 0,1.085407 0.311382,2.077914 0.84375,2.9375 l -13.59375,13.125 c -0.8595865,-0.532368 -1.8833435,-0.84375 -2.9687505,-0.84375 -3.107691,0 -5.625,2.517309 -5.625,5.625 0,3.107691 2.517309,5.625 5.625,5.625 0.291346,0 0.595588,-0.01981 0.875,-0.0625 l 14.4687505,14.625 c -0.07496,0.366302 -0.09375,0.767789 -0.09375,1.15625 0,3.107691 2.517309,5.625 5.625,5.625 3.10769,0 5.625,-2.517309 5.625,-5.625 0,-0.515189 -0.08907,-1.02595 -0.21875,-1.5 l 7.5625,-7.6875 c 1.44889,0.752733 3.03972,1.296697 4.75,1.53125 8.00709,1.098115 15.37064,-4.492914 16.46875,-12.5 1.09811,-8.007086 -4.49291,-15.401885 -12.5,-16.5 -4.07521,-0.558887 -7.99484,0.623091 -11,2.96875 l -5.4375,-5.53125 c 0.53205,-0.859273 0.84375,-1.883343 0.84375,-2.96875 0,-3.107691 -2.51731,-5.6562496 -5.625,-5.6562496 z m -2.28125,10.7499996 c 0.70018,0.312724 1.46484,0.53125 2.28125,0.53125 0.70508,0 1.3782,-0.138342 2,-0.375 l 5.6875,5.8125 c -1.53023,1.965212 -2.60598,4.354802 -2.96875,7 -0.69057,5.035434 1.27209,9.804093 4.8125,12.9375 l -6.625,6.6875 c -0.94189,-0.710233 -2.10446,-1.125 -3.375,-1.125 -1.376473,0 -2.647179,0.491805 -3.625,1.3125 l -13.1875,-13.15625 c 0.969574,-1.010921 1.5625,-2.363665 1.5625,-3.875 0,-0.787112 -0.145648,-1.538504 -0.4375,-2.21875 l 13.875,-13.53125 z"
id="rect4425-7"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4425"
width="34.583946"
height="3.5998166"
x="26.779446"
y="-15.409233"
transform="matrix(0.69977942,0.71435899,-0.71435899,0.69977942,0,0)" />
<path
id="path4235-8"
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
d="M 51.088219,32.609591 28.222994,55.817606 4.2513883,31.570426 29.329376,7.3232466 31.568077,9.701098 9.0978561,31.621409 28.245092,50.724986 48.50255,30.21124 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<g
id="g2383"
transform="matrix(0.1937875,0,0,0.1937875,-515.01651,-93.777617)"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/close.png"
inkscape:export-xdpi="4.4961462"
inkscape:export-ydpi="4.4961462">
<g
inkscape:export-ydpi="6.5019679"
inkscape:export-xdpi="6.5019679"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/close.png"
transform="translate(-6,-8)"
id="g2385">
<path
style="opacity:1;fill:#ffd000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:7.74043733;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 2830.8888,516.4852 C 2788.1638,516.48519 2753.3894,551.24098 2752.5573,594.39382 L 2752.5325,594.39382 L 2752.5325,595.98531 L 2752.5325,663.15135 L 2782.0746,663.15135 L 2782.0746,594.39382 L 2782.0249,594.39382 C 2783.2954,567.56146 2805.1518,546.17652 2831.9083,546.17652 C 2859.0136,546.17651 2881.0583,568.08689 2881.7917,595.4631 L 2882.0155,595.4631 L 2882.0155,662.82807 L 2909.3195,662.82807 L 2909.3195,593.87161 L 2909.1952,593.87161 C 2908.0773,550.90388 2873.4234,516.48521 2830.8888,516.4852 z"
id="path2387" />
<rect
style="opacity:1;fill:#ffd000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:7.74043733;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect2389"
width="190.15494"
height="145.67435"
x="2736.5015"
y="646.33221" />
</g>
id="g4327"
transform="matrix(1.0803489,0,0,1.0803489,-5.9760819,-8.3209228)">
<path
sodipodi:nodetypes="csscccc"
id="path2391"
d="M 2814.5713,640.57648 C 2814.5713,640.57648 2799.0474,658.58964 2797.0164,678.07648 C 2794.4804,702.40726 2805.0972,709.14791 2807.3264,735.57648 C 2809.5556,762.00505 2800.0815,781.64791 2800.0815,781.64791 L 2732.3693,781.64791 L 2732.0906,640.93363 L 2814.5713,640.57648 z"
style="fill:url(#linearGradient2403);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<g
transform="translate(0,8)"
id="g2393">
<path
style="opacity:1;fill:url(#linearGradient2405);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 2767.1875,661.5 C 2762.5699,661.5 2758.659,664.51139 2757.25,668.71875 C 2757.9725,668.55952 2758.6981,668.46875 2759.4688,668.46875 L 2883.9688,668.46875 C 2889.7809,668.46874 2894.4375,673.23326 2894.4375,679.15625 L 2894.4375,681 C 2894.4375,682.21435 2894.2378,683.38262 2893.875,684.46875 C 2898.6151,683.43716 2902.1562,679.1785 2902.1562,674.03125 L 2902.1562,672.1875 C 2902.1563,666.26451 2897.4684,661.49999 2891.6562,661.5 L 2767.1875,661.5 z"
id="path2395" />
<path
style="opacity:1;fill:url(#linearGradient2407);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 2767.1875,693.5 C 2762.5699,693.5 2758.659,696.51139 2757.25,700.71875 C 2757.9725,700.55952 2758.6981,700.46875 2759.4688,700.46875 L 2883.9688,700.46875 C 2889.7809,700.46874 2894.4375,705.23326 2894.4375,711.15625 L 2894.4375,713 C 2894.4375,714.21435 2894.2378,715.38262 2893.875,716.46875 C 2898.6151,715.43716 2902.1562,711.1785 2902.1562,706.03125 L 2902.1562,704.1875 C 2902.1563,698.26451 2897.4684,693.49999 2891.6562,693.5 L 2767.1875,693.5 z"
id="path2397" />
<path
style="opacity:1;fill:url(#linearGradient2409);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 2767.1875,725.5 C 2762.5699,725.5 2758.659,728.51139 2757.25,732.71875 C 2757.9725,732.55952 2758.6981,732.46875 2759.4688,732.46875 L 2883.9688,732.46875 C 2889.7809,732.46874 2894.4375,737.23326 2894.4375,743.15625 L 2894.4375,745 C 2894.4375,746.21435 2894.2378,747.38262 2893.875,748.46875 C 2898.6151,747.43716 2902.1562,743.1785 2902.1562,738.03125 L 2902.1562,736.1875 C 2902.1563,730.26451 2897.4684,725.49999 2891.6562,725.5 L 2767.1875,725.5 z"
id="path2399" />
</g>
<path
sodipodi:nodetypes="csscczzzcc"
id="path2401"
d="M 2826.4285,510.93363 C 2826.4285,510.93363 2801.7856,510.57648 2784.6428,522.71934 C 2767.4999,534.8622 2758.9285,545.93363 2753.2142,563.07648 C 2747.4999,580.21934 2748.9285,590.93362 2748.9285,590.93362 L 2761.4285,594.8622 C 2761.4285,594.8622 2771.8749,595.84434 2773.5713,584.14791 C 2775.2612,572.49696 2776.6071,565.21933 2786.7857,553.79076 C 2796.9642,542.36219 2810.4463,537.27291 2819.9999,535.93363 C 2829.5108,534.60032 2828.2142,525.93363 2828.2142,525.93363 L 2826.4285,510.93363 z"
style="fill:url(#radialGradient2411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
transform="matrix(0.13587109,-0.99072652,0.99072652,0.13587109,7.1263136,81.286094)"
d="m 65.272727,36.272728 a 13.545455,13.545455 0 1 1 -27.09091,0 13.545455,13.545455 0 1 1 27.09091,0 z"
sodipodi:ry="13.545455"
sodipodi:rx="13.545455"
sodipodi:cy="36.272728"
sodipodi:cx="51.727272"
id="path4278"
style="color:#000000;fill:url(#linearGradient4331);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<path
sodipodi:type="arc"
style="color:#000000;fill:#3f81f9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.97554541;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4292"
sodipodi:cx="11.056579"
sodipodi:cy="36.229988"
sodipodi:rx="7.4567623"
sodipodi:ry="7.4567623"
d="m 18.513341,36.229988 a 7.4567623,7.4567623 0 1 1 -14.9135247,0 7.4567623,7.4567623 0 1 1 14.9135247,0 z"
transform="matrix(0.75461342,0,0,0.75461342,-0.77038182,2.9275619)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#3f81f9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.97554541;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4292-3"
sodipodi:cx="11.056579"
sodipodi:cy="36.229988"
sodipodi:rx="7.4567623"
sodipodi:ry="7.4567623"
d="m 18.513341,36.229988 a 7.4567623,7.4567623 0 1 1 -14.9135247,0 7.4567623,7.4567623 0 1 1 14.9135247,0 z"
transform="matrix(0.75461342,0,0,0.75461342,20.560933,-17.934934)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#3f81f9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.97554541;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4292-35"
sodipodi:cx="11.056579"
sodipodi:cy="36.229988"
sodipodi:rx="7.4567623"
sodipodi:ry="7.4567623"
d="m 18.513341,36.229988 a 7.4567623,7.4567623 0 1 1 -14.9135247,0 7.4567623,7.4567623 0 1 1 14.9135247,0 z"
transform="matrix(0.75461342,0,0,0.75461342,20.092113,24.258877)" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.16735911;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 48.43322,17.751552 c -3.571667,-1e-6 -6.482061,2.903751 -6.551623,6.511178 l 0,0.134808 0,4.205978 -1.334595,0 0,9.349478 15.893753,0 0,-9.349478 -1.442442,0 0,-4.381228 -0.01344,0 c -0.09341,-3.591952 -2.995875,-6.470734 -6.551612,-6.470736 z m 0.01519,3.926805 c 1.874434,0 3.395139,1.508085 3.445859,3.401245 l 0.01112,0 0,3.523914 -6.914014,0 0,-3.590824 c 0,-1.857629 1.606701,-3.334335 3.457012,-3.334335 z"
id="path2387"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sccccccccccsssccccsss" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -14,8 +14,8 @@
height="64px"
id="svg3612"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="Draft_BSpline.svg">
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_SelectPlane.svg">
<defs
id="defs3614">
<inkscape:perspective
@ -193,18 +193,21 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.5"
inkscape:cx="32"
inkscape:cy="32"
inkscape:zoom="2.75"
inkscape:cx="23.565355"
inkscape:cy="22.134067"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="758"
inkscape:window-height="777"
inkscape:window-x="0"
inkscape:window-y="19"
inkscape:window-maximized="0" />
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-global="false"
inkscape:snap-nodes="true"
inkscape:object-nodes="true" />
<metadata
id="metadata3617">
<rdf:RDF>
@ -222,37 +225,60 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
transform="matrix(1,0,0,0.92636154,-576.3879,-0.56436901)"
id="Draft_selectPlane"
style="display:inline">
id="g4075">
<path
style="color:#000000;fill:#000000;fill-opacity:0.78431373;fill-rule:nonzero;stroke:none;stroke-width:2.4000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 595.75293,59.474599 c 8.60514,-6.955627 17.21028,-13.911253 25.81542,-20.86688 -5.41661,-2.670296 -10.83323,-5.340591 -16.24984,-8.010887 -8.60514,6.955627 -17.21029,13.911253 -25.81543,20.86688 5.41661,2.670296 10.83324,5.340591 16.24985,8.010887 z"
id="rect3436-9" />
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
id="path3305"
d="M 33.636364,3.0909091 9.4545455,16 l 0,45.454545 L 12.545455,61.272727 51.636364,39.818182 51.272727,3.0909091 z"
style="fill:#00bcbf;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:0.73333335;opacity:1" />
<path
sodipodi:nodetypes="ccccc"
id="rect3434-3"
d="m 612.18459,67.643374 25.81542,-20.86688 -16.24984,-8.010887 -25.81542,20.86688 16.24984,8.010887 z"
style="color:#000000;fill:#000000;fill-opacity:0.78431373;fill-rule:nonzero;stroke:none;stroke-width:2.4000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3190"
d="M 2.6817614,19.853542 34.227331,2.7648421"
style="fill:none;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
style="color:#000000;fill:url(#linearGradient3934);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 595.75292,53.474598 c 8.60514,-6.955627 17.21028,-13.911253 25.81542,-20.86688 -5.41661,-2.670296 -10.83323,-5.340591 -16.24984,-8.010887 -8.60514,6.955627 -17.21028,13.911253 -25.81542,20.86688 5.41661,2.670296 10.83323,5.340591 16.24984,8.010887 z"
id="rect3436" />
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3190-7"
d="M 2.6817603,43.362531 61.318239,11.546559"
style="fill:none;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccccc"
id="rect3438"
d="m 595.72358,24.443131 c 8.58695,-6.085906 17.46719,-12.758376 26.52973,-19.795459 l -0.54367,35.922168 -25.81542,20.866886 -0.17064,-36.993595 z"
style="color:#000000;fill:url(#linearGradient3942);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3190-9"
d="M 12.681761,61.180713 61.136421,34.819286"
style="fill:none;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccccc"
id="rect3434"
d="M 612.18458,61.643373 638,40.776493 l -16.24984,-8.010887 -25.81542,20.86688 16.24984,8.010887 z"
style="color:#000000;fill:url(#linearGradient3657);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3190-1"
d="m 51.778932,61.073314 9.545569,-4.361427"
style="fill:none;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path4374"
d="m 605.17532,37.084279 -0.12667,-9.530071 10.231,-7.637695 c -0.0129,6.094259 0.0799,6.177422 0.11986,9.266133 l -10.22419,7.901633 z"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.10687399;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="ccccc" />
inkscape:connector-curvature="0"
id="path3224"
d="m 9.6363637,2.6639428 0,58.7180442"
style="fill:none;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path3224-4"
d="m 30.727272,3.4574795 0,57.9941315"
style="fill:none;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<rect
transform="matrix(0.87830639,-0.4780982,0,1,0,0)"
y="35.24979"
x="21.541641"
height="21.627987"
width="26.756208"
id="rect3170"
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.20109248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path3224-7"
d="m 51.454545,2.7325478 0,58.3530852"
style="fill:none;stroke:#004550;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@ -14,10 +14,21 @@
height="64"
id="svg4025"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Draft_Edit.svg">
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_Snap.svg">
<defs
id="defs4027">
<linearGradient
id="linearGradient3760">
<stop
style="stop-color:#003b8c;stop-opacity:1;"
offset="0"
id="stop3762" />
<stop
style="stop-color:#419ff7;stop-opacity:1;"
offset="1"
id="stop3764" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
@ -63,6 +74,26 @@
y1="1190.875"
x2="1267.9062"
y2="1190.875" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3760"
id="linearGradient3766"
x1="21.512983"
y1="40.196293"
x2="18.734758"
y2="17.210812"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3760-8">
<stop
style="stop-color:#003b8c;stop-opacity:1;"
offset="0"
id="stop3762-0" />
<stop
style="stop-color:#419ff7;stop-opacity:1;"
offset="1"
id="stop3764-3" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
@ -72,16 +103,16 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.9795105"
inkscape:cx="11.130625"
inkscape:cy="21.220207"
inkscape:cx="-20.648533"
inkscape:cy="-4.8977275"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1280"
inkscape:window-height="755"
inkscape:window-height="777"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata4030">
@ -91,7 +122,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -100,28 +131,40 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,32)">
<path
style="opacity:0.5125;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 58.782886,-6.2838377 -16.03125,10.1875 c -1.838518,-1.386109 -4.113879,-2.25 -6.59375,-2.25 -6.066461,0 -11,4.933539 -11,10.9999997 0,0.780011 0.09541,1.54723 0.25,2.28125 l -15.5312495,9.875 3.5312495,5.5625 15.25,-9.6875 c 1.962454,1.831554 4.603867,2.9375 7.5,2.9375 6.066461,0 10.96875,-4.902289 10.96875,-10.96875 0,-1.17252 -0.159785,-2.315512 -0.5,-3.3749996 l 15.71875,-10.00000008 -3.5625,-5.56250002 z"
id="rect3780-8"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.54299998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
style="color:#000000;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3780"
width="58.225712"
height="8.5731106"
x="-5.9577603"
y="21.327433"
width="57.972908"
height="6.6166019"
x="-3.088403"
y="21.954212"
transform="matrix(0.84392386,-0.53646298,0.53646298,0.84392386,0,0)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.54299998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
style="color:#000000;fill:url(#linearGradient3766);fill-opacity:1;fill-rule:evenodd;stroke:#00092b;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path3782"
sodipodi:cx="20.629047"
sodipodi:cy="29.082434"
sodipodi:rx="10.984299"
sodipodi:ry="10.984299"
d="m 31.613346,29.082434 a 10.984299,10.984299 0 1 1 -21.9685973,0 10.984299,10.984299 0 1 1 21.9685973,0 z"
transform="translate(12.563742,-21.048974)" />
transform="translate(14.83703,-21.048975)" />
<path
style="color:#000000;fill:#ff0c00;fill-opacity:1;fill-rule:evenodd;stroke:#470000;stroke-width:3.2386322;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 14.180392,-28.246295 0,12.195928 -9.29969,0 0,6.5670378 9.29969,0 7.139155,0 9.675435,0 0,-6.5670378 -9.675435,0 0,-12.195928 -7.139155,0 z"
style="opacity:0.525;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.2386322;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 13.837304,-25.425773 0,17.8846493 -7.9063406,0 0,5.5831146 7.9063406,0 6.069514,0 8.225788,0 0,-5.5831146 -8.225788,0 0,-17.8846493 z"
id="rect3784-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
<path
style="color:#000000;fill:#00d8ba;fill-opacity:1;fill-rule:evenodd;stroke:#00473d;stroke-width:2.7533958;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 11.281486,-29.246676 0,17.88465 -7.9063407,0 0,5.5831144 7.9063407,0 6.069513,0 8.225788,0 0,-5.5831144 -8.225788,0 0,-17.88465 z"
id="rect3784"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -14,8 +14,8 @@
height="64px"
id="svg3230"
sodipodi:version="0.32"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Draft_Lock.svg"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Snap_Lock.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
@ -37,11 +37,11 @@
xlink:href="#linearGradient3273"
id="radialGradient2411"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0807499,0,-44.646407)"
cx="2787.5991"
cy="552.89736"
fx="2787.5991"
fy="552.89736"
gradientTransform="matrix(1,0,0,1.0807499,5.629409,-41.831703)"
cx="2780.5623"
cy="543.78192"
fx="2780.5623"
fy="543.78192"
r="38.829369" />
<linearGradient
inkscape:collect="always"
@ -101,7 +101,7 @@
xlink:href="#linearGradient3255"
id="linearGradient2403"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7802234,0,0,1,599.85156,0)"
gradientTransform="matrix(0.7890986,0,0,0.92684144,580.75719,52.023946)"
x1="2732.3571"
y1="711.11219"
x2="2839.0713"
@ -121,17 +121,17 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.5"
inkscape:cx="29.409228"
inkscape:cy="27.320267"
inkscape:current-layer="g2393"
inkscape:zoom="3.8890873"
inkscape:cx="51.419166"
inkscape:cy="17.054101"
inkscape:current-layer="g2383"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="755"
inkscape:window-height="777"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata3235">
@ -141,7 +141,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -160,13 +160,14 @@
inkscape:export-xdpi="6.5019679"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/close.png"
transform="translate(-6,-8)"
id="g2385">
id="g2385"
style="stroke-width:15.48087467;stroke-miterlimit:4;stroke-dasharray:none">
<path
style="opacity:1;fill:#009573;fill-opacity:1;fill-rule:evenodd;stroke:#002a2d;stroke-width:7.74043732999999889;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
style="opacity:1;fill:#009573;fill-opacity:1;fill-rule:evenodd;stroke:#002a2d;stroke-width:15.48087467;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 2830.8888,516.4852 C 2788.1638,516.48519 2753.3894,551.24098 2752.5573,594.39382 L 2752.5325,594.39382 L 2752.5325,595.98531 L 2752.5325,663.15135 L 2782.0746,663.15135 L 2782.0746,594.39382 L 2782.0249,594.39382 C 2783.2954,567.56146 2805.1518,546.17652 2831.9083,546.17652 C 2859.0136,546.17651 2881.0583,568.08689 2881.7917,595.4631 L 2882.0155,595.4631 L 2882.0155,662.82807 L 2909.3195,662.82807 L 2909.3195,593.87161 L 2909.1952,593.87161 C 2908.0773,550.90388 2873.4234,516.48521 2830.8888,516.4852 z"
id="path2387" />
<rect
style="opacity:1;fill:#009174;fill-opacity:1;fill-rule:evenodd;stroke:#002a2d;stroke-width:7.74043732999999978;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
style="opacity:1;fill:#009174;fill-opacity:1;fill-rule:evenodd;stroke:#002a2d;stroke-width:15.48087467;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect2389"
width="190.15494"
height="145.67435"
@ -176,8 +177,9 @@
<path
sodipodi:nodetypes="csscccc"
id="path2391"
d="M 2814.5713,640.57648 C 2814.5713,640.57648 2799.0474,658.58964 2797.0164,678.07648 C 2794.4804,702.40726 2805.0972,709.14791 2807.3264,735.57648 C 2809.5556,762.00505 2800.0815,781.64791 2800.0815,781.64791 L 2732.3693,781.64791 L 2732.0906,640.93363 L 2814.5713,640.57648 z"
style="fill:url(#linearGradient2403);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
d="m 2820.6698,645.73677 c 0,0 -15.7005,16.69534 -17.7546,34.75655 -2.5648,22.55078 8.1728,28.79829 10.4273,53.29339 2.2546,24.49509 -7.3273,42.70091 -7.3273,42.70091 l -68.4824,0 -0.2819,-130.41983 83.4189,-0.33102 z"
style="fill:url(#linearGradient2403);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<g
transform="translate(0,8)"
id="g2393">
@ -197,8 +199,9 @@
<path
sodipodi:nodetypes="csscczzzcc"
id="path2401"
d="M 2826.4285,510.93363 C 2826.4285,510.93363 2801.7856,510.57648 2784.6428,522.71934 C 2767.4999,534.8622 2758.9285,545.93363 2753.2142,563.07648 C 2747.4999,580.21934 2748.9285,590.93362 2748.9285,590.93362 L 2761.4285,594.8622 C 2761.4285,594.8622 2771.8749,595.84434 2773.5713,584.14791 C 2775.2612,572.49696 2776.6071,565.21933 2786.7857,553.79076 C 2796.9642,542.36219 2810.4463,537.27291 2819.9999,535.93363 C 2829.5108,534.60032 2828.2142,525.93363 2828.2142,525.93363 L 2826.4285,510.93363 z"
style="fill:url(#radialGradient2411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
d="m 2832.0579,513.74833 c 0,0 -24.6429,-0.35715 -41.7857,11.78571 -17.1429,12.14286 -25.7143,23.21429 -31.4286,40.35714 -5.7143,17.14286 -4.2857,27.85714 -4.2857,27.85714 l 12.5,3.92858 c 0,0 -0.3433,-0.89433 1.3531,-12.59076 1.6899,-11.65095 5.8505,-25.49622 16.0291,-36.92479 10.1785,-11.42857 27.8827,-17.92521 41.1892,-17.38802 13.3065,0.53719 8.2143,-2.025 8.2143,-2.025 z"
style="fill:url(#radialGradient2411);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>259</width>
<height>491</height>
<height>496</height>
</rect>
</property>
<property name="sizePolicy">
@ -122,22 +122,22 @@
<widget class="QComboBox" name="rotate">
<item>
<property name="text">
<string>0</string>
<string notr="true">0</string>
</property>
</item>
<item>
<property name="text">
<string>90</string>
<string notr="true">90</string>
</property>
</item>
<item>
<property name="text">
<string>180</string>
<string notr="true">180</string>
</property>
</item>
<item>
<property name="text">
<string>270</string>
<string notr="true">270</string>
</property>
</item>
</widget>

0
src/Mod/Fem/App/AppFem.cpp Normal file → Executable file
View File

81
src/Mod/Fem/App/AppFemPy.cpp Normal file → Executable file
View File

@ -150,7 +150,82 @@ static PyObject * SMESH_PCA(PyObject *self, PyObject *args)
Base::Matrix4D Trafo = pca.Transform();
/*Let´s transform the input mesh with the PCA Matrix*/
inputMesh->getFemMeshPtr()->transformGeometry(Trafo);
//inputMesh->getFemMeshPtr()->getSMesh()->ExportUNV("C:/PCA_alignment.unv");
//inputMesh->getFemMeshPtr()->getSMesh()->ExportUNV("C:/Temp/PCA_alignment.unv");
//Now lets check if the smallest dimension of the BBox is oriented towards the Z-Axis. If not, lets rotate it around the X or Y axis
//Use the SMESH structure for that
// aMesh.Transform(Trafo);
//Base::Rotation rotatex,rotatey,rotatez;
//const Base::Vector3d rotate_axis_x(1.0,0.0,0.0),rotate_axis_y(0.0,1.0,0.0),rotate_axis_z(0.0,0.0,1.0);
//double bbox_length_x,bbox_length_y,bbox_length_z;
////Rotate around the each axes and choose the settings for the min bbox
//Base::Matrix4D final_trafo;
//Base::BoundBox3f aBBox;
////Get the current BBOX and look for the size
//aBBox = aMesh.GetBoundBox();
//bbox_length_x = aBBox.LengthX();bbox_length_y = aBBox.LengthY();bbox_length_z = aBBox.LengthZ();
////Now do the rotation stuff
//if (bbox_length_z < bbox_length_x && bbox_length_z < bbox_length_y)
// Py_Return;
//else if (
//MeshCore::MeshKernel atempkernel;
//float it_steps=10.0;
//double step_size;
//double alpha_x=0.0,alpha_y=0.0,alpha_z=0.0;
//double perfect_ax=0.0,perfect_ay=0.0,perfect_az=0.0;
////Do a Monte Carlo approach and start from the Principal Axis System
////and rotate +/- 60° around each axis in a first iteration
//double angle_range_min_x=-PI/3.0,angle_range_max_x=PI/3.0,
// angle_range_min_y=-PI/3.0,angle_range_max_y=PI/3.0,
// angle_range_min_z=-PI/3.0,angle_range_max_z=PI/3.0;
////We rotate until we are 0.1° sure to be in the right position
//for (step_size = (2.0*PI/it_steps);step_size>(2.0*PI/3600.0);step_size=(2.0*PI/it_steps))
//{
// for(alpha_x=angle_range_min_x;alpha_x<angle_range_max_x;alpha_x=alpha_x+step_size)
// {
// rotatex.setValue(rotate_axis_x,alpha_x);
// for(alpha_y=angle_range_min_y;alpha_y<angle_range_max_y;alpha_y=alpha_y+step_size)
// {
// rotatey.setValue(rotate_axis_y,alpha_y);
// for(alpha_z=angle_range_min_z;alpha_z<angle_range_max_z;alpha_z=alpha_z+step_size)
// {
// rotatez.setValue(rotate_axis_z,alpha_z);
// (rotatex*rotatey*rotatez).getValue(final_trafo);
// atempkernel = aMesh;
} PY_CATCH;
Py_Return;
@ -317,7 +392,7 @@ static PyObject * checkBB(PyObject *self, PyObject *args)
const SMDS_MeshNode* aNode = aNodeIter->next();
current_node.Set(float(aNode->X()),float(aNode->Y()),float(aNode->Z()));
current_node = matrix * current_node;
if(current_node.z > billet_thickness || current_node.z < 0.0)
if(current_node.z > billet_thickness || current_node.z < -0.1)
{
//lets jump out of the function as soon as we find a
//Node that is higher or lower than billet thickness
@ -564,7 +639,7 @@ static PyObject * minBoundingBox(PyObject *self, PyObject *args)
float(0.0),float(0.0),float(0.0),float(1.0));
inputMesh->getFemMeshPtr()->transformGeometry(trans_matrix);
//inputMesh->getFemMeshPtr()->getSMesh()->ExportUNV("C:/fine_tuning.unv");
//inputMesh->getFemMeshPtr()->getSMesh()->ExportUNV("C:/temp/fine_tuning.unv");
} PY_CATCH;

0
src/Mod/Fem/App/CMakeLists.txt Normal file → Executable file
View File

65
src/Mod/Fem/App/FemMesh.cpp Normal file → Executable file
View File

@ -58,9 +58,13 @@
#include <StdMeshers_Quadrangle_2D.hxx>
#include <StdMeshers_QuadraticMesh.hxx>
//to simplify parsing input files we use the boost lib
#include <boost/tokenizer.hpp>
using namespace Fem;
using namespace Base;
using namespace boost;
TYPESYSTEM_SOURCE(Fem::FemMesh , Base::Persistence);
@ -374,23 +378,32 @@ void FemMesh::readNastran(const std::string &Filename)
inputfile.open(Filename.c_str());
inputfile.seekg(std::ifstream::beg);
std::string line1,line2,temp;
std::vector<string> token_results;
token_results.clear();
Base::Vector3d current_node;
std::vector<Base::Vector3d> vertices;
vertices.clear();
std::vector<unsigned int> nodal_id;
nodal_id.clear();
std::vector<unsigned int> tetra_element;
std::vector<std::vector<unsigned int> > all_elements;
std::vector<unsigned int> element_id;
element_id.clear();
bool nastran_free_format = false;
do
{
std::getline(inputfile,line1);
if (line1.size() == 0) continue;
if (line1.find("GRID*")!= std::string::npos) //We found a Grid line
if (!nastran_free_format && line1.find(",")!= std::string::npos)
nastran_free_format = true;
if (!nastran_free_format && line1.find("GRID*")!= std::string::npos ) //We found a Grid line
{
//Now lets extract the GRID Points = Nodes
//As each GRID Line consists of two subsequent lines we have to
//take care of that as well
std::getline(inputfile,line2);
//Get the Nodal ID
nodal_id.push_back(atoi(line1.substr(8,24).c_str()));
//Extract X Value
current_node.x = atof(line1.substr(40,56).c_str());
//Extract Y Value
@ -400,7 +413,7 @@ void FemMesh::readNastran(const std::string &Filename)
vertices.push_back(current_node);
}
else if (line1.find("CTETRA")!= std::string::npos)
else if (!nastran_free_format && line1.find("CTETRA")!= std::string::npos)
{
tetra_element.clear();
//Lets extract the elements
@ -422,6 +435,46 @@ void FemMesh::readNastran(const std::string &Filename)
all_elements.push_back(tetra_element);
}
else if (nastran_free_format && line1.find("GRID")!= std::string::npos ) //We found a Grid line
{
char_separator<char> sep(",");
tokenizer<char_separator<char> > tokens(line1, sep);
token_results.assign(tokens.begin(),tokens.end());
if (token_results.size() < 3)
continue;//Line does not include Nodal coordinates
nodal_id.push_back(atoi(token_results[1].c_str()));
current_node.x = atof(token_results[3].c_str());
current_node.y = atof(token_results[4].c_str());
current_node.z = atof(token_results[5].c_str());
vertices.push_back(current_node);
}
else if (nastran_free_format && line1.find("CTETRA")!= std::string::npos)
{
tetra_element.clear();
//Lets extract the elements
//As each Element Line consists of two subsequent lines as well
//we have to take care of that
//At a first step we only extract Quadratic Tetrahedral Elements
std::getline(inputfile,line2);
char_separator<char> sep(",");
tokenizer<char_separator<char> > tokens(line1.append(line2), sep);
token_results.assign(tokens.begin(),tokens.end());
if (token_results.size() < 11)
continue;//Line does not include enough nodal IDs
element_id.push_back(atoi(token_results[1].c_str()));
tetra_element.push_back(atoi(token_results[3].c_str()));
tetra_element.push_back(atoi(token_results[4].c_str()));
tetra_element.push_back(atoi(token_results[5].c_str()));
tetra_element.push_back(atoi(token_results[6].c_str()));
tetra_element.push_back(atoi(token_results[7].c_str()));
tetra_element.push_back(atoi(token_results[8].c_str()));
tetra_element.push_back(atoi(token_results[10].c_str()));
tetra_element.push_back(atoi(token_results[11].c_str()));
tetra_element.push_back(atoi(token_results[12].c_str()));
tetra_element.push_back(atoi(token_results[13].c_str()));
all_elements.push_back(tetra_element);
}
}
while (inputfile.good());
@ -431,10 +484,10 @@ void FemMesh::readNastran(const std::string &Filename)
std::vector<Base::Vector3d>::const_iterator anodeiterator;
SMESHDS_Mesh* meshds = this->myMesh->GetMeshDS();
meshds->ClearMesh();
int j=1;
unsigned int j=0;
for(anodeiterator=vertices.begin(); anodeiterator!=vertices.end(); anodeiterator++)
{
meshds->AddNodeWithID((*anodeiterator).x,(*anodeiterator).y,(*anodeiterator).z,j);
meshds->AddNodeWithID((*anodeiterator).x,(*anodeiterator).y,(*anodeiterator).z,nodal_id[j]);
j++;
}
@ -442,7 +495,8 @@ void FemMesh::readNastran(const std::string &Filename)
{
//Die Reihenfolge wie hier die Elemente hinzugefügt werden ist sehr wichtig.
//Ansonsten ist eine konsistente Datenstruktur nicht möglich
meshds->AddVolumeWithID(
meshds->AddVolumeWithID
(
meshds->FindNode(all_elements[i][0]),
meshds->FindNode(all_elements[i][2]),
meshds->FindNode(all_elements[i][1]),
@ -458,6 +512,7 @@ void FemMesh::readNastran(const std::string &Filename)
}
}
void FemMesh::read(const char *FileName)
{
Base::FileInfo File(FileName);

0
src/Mod/Fem/App/FemMesh.h Normal file → Executable file
View File

0
src/Mod/Fem/App/FemMeshObject.cpp Normal file → Executable file
View File

0
src/Mod/Fem/App/FemMeshObject.h Normal file → Executable file
View File

0
src/Mod/Fem/App/FemMeshProperty.cpp Normal file → Executable file
View File

0
src/Mod/Fem/App/FemMeshProperty.h Normal file → Executable file
View File

0
src/Mod/Fem/App/FemMeshPy.xml Normal file → Executable file
View File

0
src/Mod/Fem/App/FemMeshPyImp.cpp Normal file → Executable file
View File

0
src/Mod/Fem/App/HypothesisPy.cpp Normal file → Executable file
View File

0
src/Mod/Fem/App/HypothesisPy.h Normal file → Executable file
View File

0
src/Mod/Fem/App/Makefile.am Normal file → Executable file
View File

0
src/Mod/Fem/App/PreCompiled.cpp Normal file → Executable file
View File

0
src/Mod/Fem/App/PreCompiled.h Normal file → Executable file
View File

0
src/Mod/Fem/CMakeLists.txt Normal file → Executable file
View File

0
src/Mod/Fem/FemExample.py Normal file → Executable file
View File

0
src/Mod/Fem/Gui/AppFemGui.cpp Normal file → Executable file
View File

0
src/Mod/Fem/Gui/AppFemGuiPy.cpp Normal file → Executable file
View File

0
src/Mod/Fem/Gui/CMakeLists.txt Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Command.cpp Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Makefile.am Normal file → Executable file
View File

0
src/Mod/Fem/Gui/PreCompiled.cpp Normal file → Executable file
View File

0
src/Mod/Fem/Gui/PreCompiled.h Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/Fem.qrc Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/Makefile.am Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/UpdateResources.bat Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/icons/Fem_FemMesh.svg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

0
src/Mod/Fem/Gui/Resources/translations/Fem_af.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_af.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_de.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_de.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_es.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_es.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_fi.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_fi.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_fr.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_fr.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_hr.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_hr.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_hu.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_hu.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_it.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_it.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_ja.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_ja.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_nl.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_nl.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_no.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_no.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_pl.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_pl.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_pt.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_pt.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_ru.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_ru.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_se.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_se.ts Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_uk.qm Normal file → Executable file
View File

0
src/Mod/Fem/Gui/Resources/translations/Fem_uk.ts Normal file → Executable file
View File

Some files were not shown because too many files have changed in this diff Show More