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

@ -300,6 +300,7 @@ set(OCC_LIBRARIES
TKSTEPBase TKSTEPBase
TKSTEPAttr TKSTEPAttr
TKHLR TKHLR
TKFeat
) )
set(OCC_LIBRARY_DIR set(OCC_LIBRARY_DIR
${FREECAD_LIBPACK_DIR}/lib ${FREECAD_LIBPACK_DIR}/lib

View File

@ -306,6 +306,7 @@ set(OCC_LIBRARIES
TKSTEPBase TKSTEPBase
TKSTEPAttr TKSTEPAttr
TKHLR TKHLR
TKFeat
) )
set(OCC_LIBRARY_DIR set(OCC_LIBRARY_DIR
${FREECAD_LIBPACK_DIR}/lib ${FREECAD_LIBPACK_DIR}/lib

View File

@ -314,6 +314,7 @@ set(OCC_LIBRARIES
TKSTEPBase TKSTEPBase
TKSTEPAttr TKSTEPAttr
TKHLR TKHLR
TKFeat
) )
set(OCC_LIBRARY_DIR set(OCC_LIBRARY_DIR
${FREECAD_LIBPACK_DIR}/lib ${FREECAD_LIBPACK_DIR}/lib

View File

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

View File

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

View File

@ -104,6 +104,7 @@ set(Gui_MOC_HDRS
DlgCommandsImp.h DlgCommandsImp.h
DlgCustomizeImp.h DlgCustomizeImp.h
DlgCustomizeSpaceball.h DlgCustomizeSpaceball.h
DlgCustomizeSpNavSettings.h
DlgDisplayPropertiesImp.h DlgDisplayPropertiesImp.h
DlgEditorImp.h DlgEditorImp.h
DlgGeneralImp.h DlgGeneralImp.h
@ -190,6 +191,7 @@ SET(Gui_UIC_SRCS
DlgAuthorization.ui DlgAuthorization.ui
DlgChooseIcon.ui DlgChooseIcon.ui
DlgCommands.ui DlgCommands.ui
DlgCustomizeSpNavSettings.ui
DlgDisplayProperties.ui DlgDisplayProperties.ui
DlgEditor.ui DlgEditor.ui
DlgGeneral.ui DlgGeneral.ui
@ -338,6 +340,7 @@ SET(Dialog_Customize_CPP_SRCS
DlgCommandsImp.cpp DlgCommandsImp.cpp
DlgCustomizeImp.cpp DlgCustomizeImp.cpp
DlgCustomizeSpaceball.cpp DlgCustomizeSpaceball.cpp
DlgCustomizeSpNavSettings.cpp
DlgKeyboardImp.cpp DlgKeyboardImp.cpp
DlgToolbarsImp.cpp DlgToolbarsImp.cpp
) )
@ -346,6 +349,7 @@ SET(Dialog_Customize_HPP_SRCS
DlgCommandsImp.h DlgCommandsImp.h
DlgCustomizeImp.h DlgCustomizeImp.h
DlgCustomizeSpaceball.h DlgCustomizeSpaceball.h
DlgCustomizeSpNavSettings.h
DlgKeyboardImp.h DlgKeyboardImp.h
DlgToolbarsImp.h DlgToolbarsImp.h
) )
@ -355,6 +359,7 @@ SET(Dialog_Customize_SRCS
DlgActions.ui DlgActions.ui
DlgChooseIcon.ui DlgChooseIcon.ui
DlgCommands.ui DlgCommands.ui
DlgCustomizeSpNavSettings.ui
DlgKeyboard.ui DlgKeyboard.ui
DlgToolbars.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), : CustomizeActionPage(parent), buttonView(0), buttonModel(0),
commandView(0), commandModel(0), clearButton(0), printReference(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()); GUIApplicationNativeEventAware *app = qobject_cast<GUIApplicationNativeEventAware *>(QApplication::instance());
if (!app) if (!app)
return; return;

View File

@ -143,8 +143,9 @@ bool Gui::GUIApplicationNativeEventAware::x11EventFilter(XEvent *event)
if (navEvent.type == SPNAV_EVENT_MOTION) if (navEvent.type == SPNAV_EVENT_MOTION)
{ {
Spaceball::MotionEvent *motionEvent = new Spaceball::MotionEvent(); Spaceball::MotionEvent *motionEvent = new Spaceball::MotionEvent();
motionEvent->setTranslations(navEvent.motion.x, navEvent.motion.y, navEvent.motion.z); // motionEvent->setTranslations(navEvent.motion.x, navEvent.motion.y, navEvent.motion.z);
motionEvent->setRotations(navEvent.motion.rx, navEvent.motion.ry, navEvent.motion.rz); // 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); this->postEvent(currentWidget, motionEvent);
return true; 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_Dimension.svg</file>
<file>Tree_Python.svg</file> <file>Tree_Python.svg</file>
<file>spaceball_button.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> </qresource>
</RCC> </RCC>

View File

@ -22,6 +22,7 @@
#include "PreCompiled.h" #include "PreCompiled.h"
#include "SpaceballEvent.h" #include "SpaceballEvent.h"
#include "Application.h"
using namespace Spaceball; 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)) MotionEvent::MotionEvent(const MotionEvent& in) : EventBase(static_cast<QEvent::Type>(MotionEventType))
{ {
xTrans = in.xTrans; int motionDataArray[6] = {in.xTrans, in.yTrans, in.zTrans, in.xRot, in.yRot, in.zRot};
yTrans = in.yTrans; importSettings(motionDataArray);
zTrans = in.zTrans;
xRot = in.xRot;
yRot = in.yRot;
zRot = in.zRot;
handled = in.handled; 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) void MotionEvent::translations(int &xTransOut, int &yTransOut, int &zTransOut)
{ {
xTransOut = xTrans; 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) void MotionEvent::setTranslations(const int &xTransIn, const int &yTransIn, const int &zTransIn)
{ {
xTrans = xTransIn; int motionDataArray[6] = {xTransIn, yTransIn, zTransIn, xRot, yRot, zRot};
yTrans = yTransIn; importSettings(motionDataArray);
zTrans = zTransIn;
} }
void MotionEvent::rotations(int &xRotOut, int &yRotOut, int &zRotOut) 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) void MotionEvent::setRotations(const int &xRotIn, const int &yRotIn, const int &zRotIn)
{ {
xRot = xRotIn; int motionDataArray[6] = {xTrans, yTrans, zTrans, xRotIn, yRotIn, zRotIn};
yRot = yRotIn; importSettings(motionDataArray);
zRot = zRotIn;
} }

View File

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

View File

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

View File

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

View File

@ -99,6 +99,12 @@ def addComponents(objectsList,host):
if hasattr(o,"Shape"): if hasattr(o,"Shape"):
a.append(o) a.append(o)
host.Objects = a 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): def removeComponents(objectsList,host=None):
'''removeComponents(objectsList,[hostObject]): removes the given component or '''removeComponents(objectsList,[hostObject]): removes the given component or

View File

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

View File

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

View File

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

View File

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

View File

@ -3658,15 +3658,27 @@ class Shape2DView():
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Shape2DView", "Creates Shape 2D views of selected objects")} 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Shape2DView", "Creates Shape 2D views of selected objects")}
def IsActive(self): def IsActive(self):
if Draft.getSelection(): if FreeCADGui.Selection.getSelection():
return True return True
else: else:
return False return False
def Activated(self): def Activated(self):
sellist = [] faces = []
for ob in Draft.getSelection(): objs = []
Draft.makeShape2DView(ob) 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(): class Draft2Sketch():
"The Draft2Sketch FreeCAD command definition" "The Draft2Sketch FreeCAD command definition"
@ -3752,6 +3764,9 @@ class Point:
def Activated(self): def Activated(self):
self.view = Draft.get3DView() self.view = Draft.get3DView()
self.stack = [] 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 self.point = None
# adding 2 callback functions # adding 2 callback functions
self.callbackClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.click) 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.SoMouseButtonEvent.getClassTypeId(),self.callbackClick)
self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove) self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove)
FreeCAD.ActiveDocument.openTransaction("Create Point") 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() FreeCAD.ActiveDocument.commitTransaction()
FreeCADGui.Snapper.off() 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"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) --> <!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg <svg
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#" xmlns:cc="http://creativecommons.org/ns#"
@ -13,9 +14,10 @@
height="64px" height="64px"
id="svg3188" id="svg3188"
sodipodi:version="0.32" sodipodi:version="0.32"
inkscape:version="0.46" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="apply.svg" sodipodi:docname="Draft_Apply.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"> inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs <defs
id="defs3190"> id="defs3190">
<linearGradient <linearGradient
@ -46,6 +48,16 @@
inkscape:vp_z="64 : 32 : 1" inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1" inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective3196" /> 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> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -54,17 +66,18 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="2.75" inkscape:zoom="2.4909881"
inkscape:cx="25.004198" inkscape:cx="27.73103"
inkscape:cy="2.8330839" inkscape:cy="10.858425"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:grid-bbox="true" inkscape:grid-bbox="true"
inkscape:window-width="641" inkscape:window-width="1280"
inkscape:window-height="722" inkscape:window-height="777"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="25" /> inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata <metadata
id="metadata3193"> id="metadata3193">
<rdf:RDF> <rdf:RDF>
@ -80,71 +93,69 @@
id="layer1" id="layer1"
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer"> inkscape:groupmode="layer">
<g
id="g3611"
transform="matrix(0.1587551,0,0,0.1587551,-360.60166,-154.13114)">
<path <path
id="rect2392" inkscape:connector-curvature="0"
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;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
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" /> 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 <rect
inkscape:export-ydpi="4.1683898" 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"
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" 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" /> width="19.876713"
<rect height="52.761696"
inkscape:export-ydpi="4.1683898" x="11.379407"
inkscape:export-xdpi="4.1683898" y="3.9055312"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png" inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="1010.9336" inkscape:export-xdpi="4.1683898"
x="2357.1428" inkscape:export-ydpi="4.1683898" />
height="68.571426" <rect
width="95.714279" 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" 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" /> width="15.19513"
<rect height="10.886064"
inkscape:export-ydpi="4.1683898" x="13.606785"
inkscape:export-xdpi="4.1683898" y="6.3597236"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png" inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="1086.9336" inkscape:export-xdpi="4.1683898"
x="2357.1428" inkscape:export-ydpi="4.1683898" />
height="68.571426" <rect
width="95.714279" 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" 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" /> width="15.19513"
<rect height="10.886064"
inkscape:export-ydpi="4.1683898" x="13.606785"
inkscape:export-xdpi="4.1683898" y="18.425112"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png" inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
y="1164.9336" inkscape:export-xdpi="4.1683898"
x="2357.1428" inkscape:export-ydpi="4.1683898" />
height="68.571426" <rect
width="95.714279" 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" 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" /> 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 <rect
inkscape:export-ydpi="4.1683898" 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"
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" 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" /> width="15.19513"
<path height="10.886064"
inkscape:export-ydpi="4.1683898" x="13.606785"
inkscape:export-xdpi="4.1683898" y="43.190907"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png" inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
sodipodi:nodetypes="cccccccc" 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" 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" sodipodi:nodetypes="cccccccc"
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" /> inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
</g> inkscape:export-xdpi="4.1683898"
inkscape:export-ydpi="4.1683898" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -14,8 +14,8 @@
height="64px" height="64px"
id="svg3611" id="svg3611"
version="1.1" version="1.1"
inkscape:version="0.47 r22583" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="New document 2"> sodipodi:docname="Draft_Construction.svg">
<defs <defs
id="defs3613"> id="defs3613">
<inkscape:perspective <inkscape:perspective
@ -44,7 +44,7 @@
<linearGradient <linearGradient
id="linearGradient4292"> id="linearGradient4292">
<stop <stop
style="stop-color:#8b8b8b;stop-opacity:1;" style="stop-color:#62d9c5;stop-opacity:1;"
offset="0" offset="0"
id="stop4294" /> id="stop4294" />
<stop <stop
@ -83,6 +83,47 @@
id="linearGradient3609" id="linearGradient3609"
xlink:href="#linearGradient4300" xlink:href="#linearGradient4300"
inkscape:collect="always" /> 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> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -92,8 +133,8 @@
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="5.5" inkscape:zoom="5.5"
inkscape:cx="32" inkscape:cx="35.417697"
inkscape:cy="32" inkscape:cy="40.071519"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
@ -111,7 +152,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -119,23 +160,29 @@
id="layer1" id="layer1"
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer"> inkscape:groupmode="layer">
<g
id="g4120"
transform="translate(-642.18287,-69.358733)">
<path <path
id="path3498-2" style="opacity:0.52166664;fill:#000000;fill-opacity:1;stroke:none"
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" 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"
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" /> id="path3498-3"
inkscape:connector-curvature="0" />
<path <path
sodipodi:nodetypes="cccs" 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" 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" sodipodi:nodetypes="cccs" />
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" /> <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 <path
sodipodi:nodetypes="ccccc" 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" 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" sodipodi:nodetypes="ccccc" />
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>
</g> </g>
</svg> </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"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) --> <!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg <svg
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#" xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px" width="64px"
height="64px" height="64px"
id="svg4054" id="svg3612"
sodipodi:version="0.32" version="1.1"
inkscape:version="0.46" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="finish.svg" sodipodi:docname="Draft_Finish.svg">
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs <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 <inkscape:perspective
sodipodi:type="inkscape:persp3d" sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1" inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0" inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1" inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 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> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -32,25 +213,30 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="2.75" inkscape:zoom="3.8890872"
inkscape:cx="9.0331757" inkscape:cx="13.668976"
inkscape:cy="8.4168436" inkscape:cy="10.980782"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:grid-bbox="true" inkscape:grid-bbox="true"
inkscape:window-width="689" inkscape:window-width="1280"
inkscape:window-height="722" inkscape:window-height="777"
inkscape:window-x="0" 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 <metadata
id="metadata4059"> id="metadata3617">
<rdf:RDF> <rdf:RDF>
<cc:Work <cc:Work
rdf:about=""> rdf:about="">
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -59,11 +245,60 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer"> inkscape:groupmode="layer">
<path <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" inkscape:connector-curvature="0"
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="path4235-8-7"
id="path2381" 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"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/finish.png" style="opacity:0.525;fill:#000000;fill-opacity:1;stroke:none" />
inkscape:export-xdpi="4.6092048" <path
inkscape:export-ydpi="4.6092048" /> 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> </g>
</svg> </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"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) --> <!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg <svg
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#" xmlns:cc="http://creativecommons.org/ns#"
@ -11,13 +12,192 @@
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px" width="64px"
height="64px" height="64px"
id="svg3230" id="svg3612"
sodipodi:version="0.32" version="1.1"
inkscape:version="0.46" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="lock.svg" sodipodi:docname="Draft_Finish.svg">
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs <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 <linearGradient
inkscape:collect="always" inkscape:collect="always"
id="linearGradient3273"> id="linearGradient3273">
@ -30,37 +210,16 @@
offset="1" offset="1"
id="stop3277" /> id="stop3277" />
</linearGradient> </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 <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient3293" xlink:href="#linearGradient3293"
id="linearGradient2409" id="linearGradient2405"
gradientUnits="userSpaceOnUse" 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" x1="2754.6858"
y1="671.11081" y1="671.11084"
x2="2900.148" x2="2900.1479"
y2="671.11081" /> y2="671.11084" />
<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" />
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
id="linearGradient3293"> id="linearGradient3293">
@ -76,13 +235,33 @@
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient3293" xlink:href="#linearGradient3293"
id="linearGradient2405" id="linearGradient2407"
gradientUnits="userSpaceOnUse" 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" x1="2754.6858"
y1="671.11081" y1="671.11084"
x2="2900.148" x2="2900.1479"
y2="671.11081" /> 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 <linearGradient
inkscape:collect="always" inkscape:collect="always"
id="linearGradient3255"> id="linearGradient3255">
@ -97,21 +276,54 @@
</linearGradient> </linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient3255" xlink:href="#linearGradient3293"
id="linearGradient2403" id="linearGradient4673"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7802234,0,0,1,599.85156,0)" gradientTransform="matrix(-0.1937875,0,0,-0.1937875,670.27087,167.83649)"
x1="2732.3571" x1="2754.6858"
y1="711.11219" y1="671.11084"
x2="2839.0713" x2="2900.1479"
y2="711.11219" /> y2="671.11084" />
<inkscape:perspective <linearGradient
sodipodi:type="inkscape:persp3d" inkscape:collect="always"
inkscape:vp_x="0 : 32 : 1" xlink:href="#linearGradient3293"
inkscape:vp_y="0 : 1000 : 0" id="linearGradient4676"
inkscape:vp_z="64 : 32 : 1" gradientUnits="userSpaceOnUse"
inkscape:persp3d-origin="32 : 21.333333 : 1" gradientTransform="matrix(-0.1937875,0,0,-0.1937875,670.27087,161.63529)"
id="perspective3238" /> 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> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -120,25 +332,30 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="5.5" inkscape:zoom="1.9445436"
inkscape:cx="26.229024" inkscape:cx="37.240913"
inkscape:cy="26.419218" inkscape:cy="-11.10556"
inkscape:current-layer="g2383" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:grid-bbox="true" inkscape:grid-bbox="true"
inkscape:window-width="1012" inkscape:window-width="1280"
inkscape:window-height="722" inkscape:window-height="777"
inkscape:window-x="109" 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 <metadata
id="metadata3235"> id="metadata3617">
<rdf:RDF> <rdf:RDF>
<cc:Work <cc:Work
rdf:about=""> rdf:about="">
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -146,56 +363,74 @@
id="layer1" id="layer1"
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer"> inkscape:groupmode="layer">
<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 <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" 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 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" 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="path2387" /> id="rect4425-7"
inkscape:connector-curvature="0" />
<rect <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" 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="rect2389" id="rect4425"
width="190.15494" width="34.583946"
height="145.67435" height="3.5998166"
x="2736.5015" x="26.779446"
y="646.33221" /> y="-15.409233"
</g> transform="matrix(0.69977942,0.71435899,-0.71435899,0.69977942,0,0)" />
<path <path
sodipodi:nodetypes="csscccc" id="path4235-8"
id="path2391" 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 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" 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"
style="fill:url(#linearGradient2403);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<g <g
transform="translate(0,8)" id="g4327"
id="g2393"> transform="matrix(1.0803489,0,0,1.0803489,-5.9760819,-8.3209228)">
<path <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" transform="matrix(0.13587109,-0.99072652,0.99072652,0.13587109,7.1263136,81.286094)"
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" 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"
id="path2395" /> sodipodi:ry="13.545455"
<path sodipodi:rx="13.545455"
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" sodipodi:cy="36.272728"
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" sodipodi:cx="51.727272"
id="path2397" /> id="path4278"
<path 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"
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" sodipodi:type="arc" />
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> </g>
<path <path
sodipodi:nodetypes="csscczzzcc" sodipodi:type="arc"
id="path2401" 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"
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" id="path4292"
style="fill:url(#radialGradient2411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> sodipodi:cx="11.056579"
</g> 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> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -14,8 +14,8 @@
height="64px" height="64px"
id="svg3612" id="svg3612"
version="1.1" version="1.1"
inkscape:version="0.47 r22583" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_BSpline.svg"> sodipodi:docname="Draft_SelectPlane.svg">
<defs <defs
id="defs3614"> id="defs3614">
<inkscape:perspective <inkscape:perspective
@ -193,18 +193,21 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="5.5" inkscape:zoom="2.75"
inkscape:cx="32" inkscape:cx="23.565355"
inkscape:cy="32" inkscape:cy="22.134067"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:grid-bbox="true" inkscape:grid-bbox="true"
inkscape:window-width="1280" inkscape:window-width="1280"
inkscape:window-height="758" inkscape:window-height="777"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="19" inkscape:window-y="0"
inkscape:window-maximized="0" /> inkscape:window-maximized="1"
inkscape:snap-global="false"
inkscape:snap-nodes="true"
inkscape:object-nodes="true" />
<metadata <metadata
id="metadata3617"> id="metadata3617">
<rdf:RDF> <rdf:RDF>
@ -222,37 +225,60 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer"> inkscape:groupmode="layer">
<g <g
transform="matrix(1,0,0,0.92636154,-576.3879,-0.56436901)" id="g4075">
id="Draft_selectPlane"
style="display:inline">
<path <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" sodipodi:nodetypes="ccccccc"
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" inkscape:connector-curvature="0"
id="rect3436-9" /> 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 <path
sodipodi:nodetypes="ccccc" sodipodi:nodetypes="cc"
id="rect3434-3" inkscape:connector-curvature="0"
d="m 612.18459,67.643374 25.81542,-20.86688 -16.24984,-8.010887 -25.81542,20.86688 16.24984,8.010887 z" id="path3190"
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 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 <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" sodipodi:nodetypes="cc"
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" inkscape:connector-curvature="0"
id="rect3436" /> 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 <path
sodipodi:nodetypes="ccccc" sodipodi:nodetypes="cc"
id="rect3438" inkscape:connector-curvature="0"
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" id="path3190-9"
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" /> 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 <path
sodipodi:nodetypes="ccccc" sodipodi:nodetypes="cc"
id="rect3434" inkscape:connector-curvature="0"
d="M 612.18458,61.643373 638,40.776493 l -16.24984,-8.010887 -25.81542,20.86688 16.24984,8.010887 z" id="path3190-1"
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" /> 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 <path
id="path4374" inkscape:connector-curvature="0"
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" id="path3224"
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" d="m 9.6363637,2.6639428 0,58.7180442"
sodipodi:nodetypes="ccccc" /> 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>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@ -14,10 +14,21 @@
height="64" height="64"
id="svg4025" id="svg4025"
version="1.1" version="1.1"
inkscape:version="0.48.1 r9760" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_Edit.svg"> sodipodi:docname="Draft_Snap.svg">
<defs <defs
id="defs4027"> 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 <inkscape:perspective
sodipodi:type="inkscape:persp3d" sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1" inkscape:vp_x="0 : 16 : 1"
@ -63,6 +74,26 @@
y1="1190.875" y1="1190.875"
x2="1267.9062" x2="1267.9062"
y2="1190.875" /> 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> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -72,16 +103,16 @@
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1.9795105" inkscape:zoom="1.9795105"
inkscape:cx="11.130625" inkscape:cx="-20.648533"
inkscape:cy="21.220207" inkscape:cy="-4.8977275"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:grid-bbox="true" inkscape:grid-bbox="true"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:window-width="1280" inkscape:window-width="1280"
inkscape:window-height="755" inkscape:window-height="777"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="22" inkscape:window-y="0"
inkscape:window-maximized="1" /> inkscape:window-maximized="1" />
<metadata <metadata
id="metadata4030"> id="metadata4030">
@ -91,7 +122,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -100,28 +131,40 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
transform="translate(0,32)"> 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 <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" id="rect3780"
width="58.225712" width="57.972908"
height="8.5731106" height="6.6166019"
x="-5.9577603" x="-3.088403"
y="21.327433" y="21.954212"
transform="matrix(0.84392386,-0.53646298,0.53646298,0.84392386,0,0)" /> transform="matrix(0.84392386,-0.53646298,0.53646298,0.84392386,0,0)" />
<path <path
sodipodi:type="arc" 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" id="path3782"
sodipodi:cx="20.629047" sodipodi:cx="20.629047"
sodipodi:cy="29.082434" sodipodi:cy="29.082434"
sodipodi:rx="10.984299" sodipodi:rx="10.984299"
sodipodi:ry="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" 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 <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" 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 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" 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" id="rect3784"
inkscape:connector-curvature="0" /> inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -14,8 +14,8 @@
height="64px" height="64px"
id="svg3230" id="svg3230"
sodipodi:version="0.32" sodipodi:version="0.32"
inkscape:version="0.48.1 r9760" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Draft_Lock.svg" sodipodi:docname="Snap_Lock.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1"> version="1.1">
<defs <defs
@ -37,11 +37,11 @@
xlink:href="#linearGradient3273" xlink:href="#linearGradient3273"
id="radialGradient2411" id="radialGradient2411"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0807499,0,-44.646407)" gradientTransform="matrix(1,0,0,1.0807499,5.629409,-41.831703)"
cx="2787.5991" cx="2780.5623"
cy="552.89736" cy="543.78192"
fx="2787.5991" fx="2780.5623"
fy="552.89736" fy="543.78192"
r="38.829369" /> r="38.829369" />
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
@ -101,7 +101,7 @@
xlink:href="#linearGradient3255" xlink:href="#linearGradient3255"
id="linearGradient2403" id="linearGradient2403"
gradientUnits="userSpaceOnUse" 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" x1="2732.3571"
y1="711.11219" y1="711.11219"
x2="2839.0713" x2="2839.0713"
@ -121,17 +121,17 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="5.5" inkscape:zoom="3.8890873"
inkscape:cx="29.409228" inkscape:cx="51.419166"
inkscape:cy="27.320267" inkscape:cy="17.054101"
inkscape:current-layer="g2393" inkscape:current-layer="g2383"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:grid-bbox="true" inkscape:grid-bbox="true"
inkscape:window-width="1280" inkscape:window-width="1280"
inkscape:window-height="755" inkscape:window-height="777"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="22" inkscape:window-y="0"
inkscape:window-maximized="1" /> inkscape:window-maximized="1" />
<metadata <metadata
id="metadata3235"> id="metadata3235">
@ -141,7 +141,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -160,13 +160,14 @@
inkscape:export-xdpi="6.5019679" inkscape:export-xdpi="6.5019679"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/close.png" inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/close.png"
transform="translate(-6,-8)" transform="translate(-6,-8)"
id="g2385"> id="g2385"
style="stroke-width:15.48087467;stroke-miterlimit:4;stroke-dasharray:none">
<path <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" 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" /> id="path2387" />
<rect <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" id="rect2389"
width="190.15494" width="190.15494"
height="145.67435" height="145.67435"
@ -176,8 +177,9 @@
<path <path
sodipodi:nodetypes="csscccc" sodipodi:nodetypes="csscccc"
id="path2391" 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" 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;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> style="fill:url(#linearGradient2403);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<g <g
transform="translate(0,8)" transform="translate(0,8)"
id="g2393"> id="g2393">
@ -197,8 +199,9 @@
<path <path
sodipodi:nodetypes="csscczzzcc" sodipodi:nodetypes="csscczzzcc"
id="path2401" 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" 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;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> style="fill:url(#radialGradient2411);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>259</width> <width>259</width>
<height>491</height> <height>496</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -122,22 +122,22 @@
<widget class="QComboBox" name="rotate"> <widget class="QComboBox" name="rotate">
<item> <item>
<property name="text"> <property name="text">
<string>0</string> <string notr="true">0</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>90</string> <string notr="true">90</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>180</string> <string notr="true">180</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>270</string> <string notr="true">270</string>
</property> </property>
</item> </item>
</widget> </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(); Base::Matrix4D Trafo = pca.Transform();
/*Let´s transform the input mesh with the PCA Matrix*/ /*Let´s transform the input mesh with the PCA Matrix*/
inputMesh->getFemMeshPtr()->transformGeometry(Trafo); 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_CATCH;
Py_Return; Py_Return;
@ -317,7 +392,7 @@ static PyObject * checkBB(PyObject *self, PyObject *args)
const SMDS_MeshNode* aNode = aNodeIter->next(); const SMDS_MeshNode* aNode = aNodeIter->next();
current_node.Set(float(aNode->X()),float(aNode->Y()),float(aNode->Z())); current_node.Set(float(aNode->X()),float(aNode->Y()),float(aNode->Z()));
current_node = matrix * current_node; 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 //lets jump out of the function as soon as we find a
//Node that is higher or lower than billet thickness //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)); float(0.0),float(0.0),float(0.0),float(1.0));
inputMesh->getFemMeshPtr()->transformGeometry(trans_matrix); inputMesh->getFemMeshPtr()->transformGeometry(trans_matrix);
//inputMesh->getFemMeshPtr()->getSMesh()->ExportUNV("C:/fine_tuning.unv"); //inputMesh->getFemMeshPtr()->getSMesh()->ExportUNV("C:/temp/fine_tuning.unv");
} PY_CATCH; } 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_Quadrangle_2D.hxx>
#include <StdMeshers_QuadraticMesh.hxx> #include <StdMeshers_QuadraticMesh.hxx>
//to simplify parsing input files we use the boost lib
#include <boost/tokenizer.hpp>
using namespace Fem; using namespace Fem;
using namespace Base; using namespace Base;
using namespace boost;
TYPESYSTEM_SOURCE(Fem::FemMesh , Base::Persistence); TYPESYSTEM_SOURCE(Fem::FemMesh , Base::Persistence);
@ -374,23 +378,32 @@ void FemMesh::readNastran(const std::string &Filename)
inputfile.open(Filename.c_str()); inputfile.open(Filename.c_str());
inputfile.seekg(std::ifstream::beg); inputfile.seekg(std::ifstream::beg);
std::string line1,line2,temp; std::string line1,line2,temp;
std::vector<string> token_results;
token_results.clear();
Base::Vector3d current_node; Base::Vector3d current_node;
std::vector<Base::Vector3d> vertices; std::vector<Base::Vector3d> vertices;
vertices.clear(); vertices.clear();
std::vector<unsigned int> nodal_id;
nodal_id.clear();
std::vector<unsigned int> tetra_element; std::vector<unsigned int> tetra_element;
std::vector<std::vector<unsigned int> > all_elements; std::vector<std::vector<unsigned int> > all_elements;
std::vector<unsigned int> element_id; std::vector<unsigned int> element_id;
element_id.clear(); element_id.clear();
bool nastran_free_format = false;
do do
{ {
std::getline(inputfile,line1); std::getline(inputfile,line1);
if (line1.size() == 0) continue; 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 //Now lets extract the GRID Points = Nodes
//As each GRID Line consists of two subsequent lines we have to //As each GRID Line consists of two subsequent lines we have to
//take care of that as well //take care of that as well
std::getline(inputfile,line2); std::getline(inputfile,line2);
//Get the Nodal ID
nodal_id.push_back(atoi(line1.substr(8,24).c_str()));
//Extract X Value //Extract X Value
current_node.x = atof(line1.substr(40,56).c_str()); current_node.x = atof(line1.substr(40,56).c_str());
//Extract Y Value //Extract Y Value
@ -400,7 +413,7 @@ void FemMesh::readNastran(const std::string &Filename)
vertices.push_back(current_node); 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(); tetra_element.clear();
//Lets extract the elements //Lets extract the elements
@ -422,6 +435,46 @@ void FemMesh::readNastran(const std::string &Filename)
all_elements.push_back(tetra_element); 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()); while (inputfile.good());
@ -431,10 +484,10 @@ void FemMesh::readNastran(const std::string &Filename)
std::vector<Base::Vector3d>::const_iterator anodeiterator; std::vector<Base::Vector3d>::const_iterator anodeiterator;
SMESHDS_Mesh* meshds = this->myMesh->GetMeshDS(); SMESHDS_Mesh* meshds = this->myMesh->GetMeshDS();
meshds->ClearMesh(); meshds->ClearMesh();
int j=1; unsigned int j=0;
for(anodeiterator=vertices.begin(); anodeiterator!=vertices.end(); anodeiterator++) 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++; j++;
} }
@ -442,7 +495,8 @@ void FemMesh::readNastran(const std::string &Filename)
{ {
//Die Reihenfolge wie hier die Elemente hinzugefügt werden ist sehr wichtig. //Die Reihenfolge wie hier die Elemente hinzugefügt werden ist sehr wichtig.
//Ansonsten ist eine konsistente Datenstruktur nicht möglich //Ansonsten ist eine konsistente Datenstruktur nicht möglich
meshds->AddVolumeWithID( meshds->AddVolumeWithID
(
meshds->FindNode(all_elements[i][0]), meshds->FindNode(all_elements[i][0]),
meshds->FindNode(all_elements[i][2]), meshds->FindNode(all_elements[i][2]),
meshds->FindNode(all_elements[i][1]), meshds->FindNode(all_elements[i][1]),
@ -458,6 +512,7 @@ void FemMesh::readNastran(const std::string &Filename)
} }
} }
void FemMesh::read(const char *FileName) void FemMesh::read(const char *FileName)
{ {
Base::FileInfo File(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