Merge branch 'master' into path_helix

This commit is contained in:
lorenz
2017-01-15 13:52:27 +01:00
committed by GitHub
285 changed files with 18520 additions and 31835 deletions

View File

@@ -147,6 +147,34 @@ using namespace Base;
using namespace App;
using namespace std;
/** Observer that watches relabeled objects and make sure that the labels inside
* a document are unique.
* @note In the FreeCAD design it is explicitly allowed to have duplicate labels
* (i.e. the user visible text e.g. in the tree view) while the internal names
* are always guaranteed to be unique.
*/
class ObjectLabelObserver
{
public:
/// The one and only instance.
static ObjectLabelObserver* instance();
/// Destructs the sole instance.
static void destruct ();
/** Checks the new label of the object and relabel it if needed
* to make it unique document-wide
*/
void slotRelabelObject(const App::DocumentObject&, const App::Property&);
private:
static ObjectLabelObserver* _singleton;
ObjectLabelObserver();
~ObjectLabelObserver();
const App::DocumentObject* current;
ParameterGrp::handle _hPGrp;
};
//==========================================================================
// Application
@@ -160,7 +188,6 @@ Base::ConsoleObserverFile *Application::_pConsoleObserverFile =0;
AppExport std::map<std::string,std::string> Application::mConfig;
BaseExport extern PyObject* Base::BaseExceptionFreeCADError;
//**************************************************************************
// Construction and destruction
@@ -1346,6 +1373,8 @@ void Application::initApplication(void)
Console().Log("Run App init script\n");
Interpreter().runString(Base::ScriptFactory().ProduceScript("CMakeVariables"));
Interpreter().runString(Base::ScriptFactory().ProduceScript("FreeCADInit"));
ObjectLabelObserver::instance();
}
std::list<std::string> Application::getCmdLineFiles()
@@ -2261,3 +2290,80 @@ std::string Application::FindHomePath(const char* sCall)
#else
# error "std::string Application::FindHomePath(const char*) not implemented"
#endif
ObjectLabelObserver* ObjectLabelObserver::_singleton = 0;
ObjectLabelObserver* ObjectLabelObserver::instance()
{
if (!_singleton)
_singleton = new ObjectLabelObserver;
return _singleton;
}
void ObjectLabelObserver::destruct ()
{
delete _singleton;
_singleton = 0;
}
void ObjectLabelObserver::slotRelabelObject(const App::DocumentObject& obj, const App::Property& prop)
{
// observe only the Label property
if (&prop == &obj.Label) {
// have we processed this (or another?) object right now?
if (current) {
return;
}
std::string label = obj.Label.getValue();
App::Document* doc = obj.getDocument();
if (doc && !_hPGrp->GetBool("DuplicateLabels")) {
std::vector<std::string> objectLabels;
std::vector<App::DocumentObject*>::const_iterator it;
std::vector<App::DocumentObject*> objs = doc->getObjects();
bool match = false;
for (it = objs.begin();it != objs.end();++it) {
if (*it == &obj)
continue; // don't compare object with itself
std::string objLabel = (*it)->Label.getValue();
if (!match && objLabel == label)
match = true;
objectLabels.push_back(objLabel);
}
// make sure that there is a name conflict otherwise we don't have to do anything
if (match && !label.empty()) {
// remove number from end to avoid lengthy names
size_t lastpos = label.length()-1;
while (label[lastpos] >= 48 && label[lastpos] <= 57) {
// if 'lastpos' becomes 0 then all characters are digits. In this case we use
// the complete label again
if (lastpos == 0) {
lastpos = label.length()-1;
break;
}
lastpos--;
}
label = label.substr(0, lastpos+1);
label = Base::Tools::getUniqueName(label, objectLabels, 3);
this->current = &obj;
const_cast<App::DocumentObject&>(obj).Label.setValue(label);
this->current = 0;
}
}
}
}
ObjectLabelObserver::ObjectLabelObserver() : current(0)
{
App::GetApplication().signalChangedObject.connect(boost::bind
(&ObjectLabelObserver::slotRelabelObject, this, _1, _2));
_hPGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp");
_hPGrp = _hPGrp->GetGroup("Preferences")->GetGroup("Document");
}
ObjectLabelObserver::~ObjectLabelObserver()
{
}

View File

@@ -615,6 +615,7 @@ void Document::exportGraphviz(std::ostream& out) const
if (i_in_deg_pair.first == in_edges.end()) {
removeEdges(in_edges, out_edges, i_out_deg_pair, [&](Edge e) { return target(e, DepList); });
changed = true;
i_out_deg_pair = out_edges.equal_range(*uvi);
}
// Remove in edges of nodes that don't have a single edge out

View File

@@ -37,7 +37,7 @@ EXTENSION_PROPERTY_SOURCE(App::DocumentObjectExtension, App::Extension)
DocumentObjectExtension::DocumentObjectExtension()
{
initExtension(App::DocumentObjectExtension::getExtensionClassTypeId());
initExtensionType(App::DocumentObjectExtension::getExtensionClassTypeId());
}
DocumentObjectExtension::~DocumentObjectExtension()

View File

@@ -71,7 +71,7 @@ Extension::~Extension()
}
}
void Extension::initExtension(Base::Type type) {
void Extension::initExtensionType(Base::Type type) {
m_extensionType = type;
if(m_extensionType.isBad())

View File

@@ -215,7 +215,7 @@ public:
Extension();
virtual ~Extension();
void initExtension(App::ExtensionContainer* obj);
virtual void initExtension(App::ExtensionContainer* obj);
App::ExtensionContainer* getExtendedContainer() {return m_base;}
const App::ExtensionContainer* getExtendedContainer() const {return m_base;}
@@ -272,7 +272,7 @@ protected:
friend class App::ExtensionContainer;
protected:
void initExtension(Base::Type type);
void initExtensionType(Base::Type type);
bool m_isPythonExtension = false;
Py::Object ExtensionPythonObject;
@@ -309,7 +309,7 @@ public:
ExtensionPythonT() {
ExtensionT::m_isPythonExtension = true;
ExtensionT::initExtension(ExtensionPythonT::getExtensionClassTypeId());
ExtensionT::initExtensionType(ExtensionPythonT::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object()));
}

View File

@@ -35,11 +35,11 @@
using namespace App;
TYPESYSTEM_SOURCE(App::ExtensionContainer, App::PropertyContainer);
TYPESYSTEM_SOURCE(App::ExtensionContainer, App::PropertyContainer)
ExtensionContainer::ExtensionContainer() {
};
}
ExtensionContainer::~ExtensionContainer() {
@@ -48,7 +48,7 @@ ExtensionContainer::~ExtensionContainer() {
if(entry.second->isPythonExtension())
delete entry.second;
}
};
}
void ExtensionContainer::registerExtension(Base::Type extension, Extension* ext) {
@@ -361,7 +361,7 @@ void ExtensionContainer::restoreExtensions(Base::XMLReader& reader) {
for (int i=0 ;i<Cnt ;i++) {
reader.readElement("Extension");
const char* Type = reader.getAttribute("type");
const char* Name = reader.getAttribute("type");
const char* Name = reader.getAttribute("name");
try {
App::Extension* ext = getExtension(Name);
if(!ext) {

View File

@@ -45,21 +45,36 @@ EXTENSION_PROPERTY_SOURCE(App::GeoFeatureGroupExtension, App::GroupExtension)
GeoFeatureGroupExtension::GeoFeatureGroupExtension(void)
{
initExtension(GeoFeatureGroupExtension::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY(Placement,(Base::Placement()));
initExtensionType(GeoFeatureGroupExtension::getExtensionClassTypeId());
}
GeoFeatureGroupExtension::~GeoFeatureGroupExtension(void)
{
}
void GeoFeatureGroupExtension::initExtension(ExtensionContainer* obj) {
if(!obj->isDerivedFrom(App::GeoFeature::getClassTypeId()))
throw Base::Exception("GeoFeatureGroupExtension can only be applied to GeoFeatures");
App::GroupExtension::initExtension(obj);
}
PropertyPlacement& GeoFeatureGroupExtension::placement() {
if(!getExtendedContainer())
throw Base::Exception("GeoFeatureGroupExtension was not applied to GeoFeature");
return static_cast<App::GeoFeature*>(getExtendedContainer())->Placement;
}
void GeoFeatureGroupExtension::transformPlacement(const Base::Placement &transform)
{
// NOTE: Keep in sync with APP::GeoFeature
Base::Placement plm = this->Placement.getValue();
Base::Placement plm = this->placement().getValue();
plm = transform * plm;
this->Placement.setValue(plm);
this->placement().setValue(plm);
}
std::vector<App::DocumentObject*> GeoFeatureGroupExtension::getGeoSubObjects () const {
@@ -128,9 +143,9 @@ bool GeoFeatureGroupExtension::geoHasObject (const DocumentObject* obj) const {
DocumentObject* GeoFeatureGroupExtension::getGroupOfObject(const DocumentObject* obj, bool indirect)
{
const Document* doc = obj->getDocument();
std::vector<DocumentObject*> grps = doc->getObjectsOfType(GeoFeatureGroupExtension::getExtensionClassTypeId());
std::vector<DocumentObject*> grps = doc->getObjectsWithExtension(GeoFeatureGroupExtension::getExtensionClassTypeId());
for (std::vector<DocumentObject*>::const_iterator it = grps.begin(); it != grps.end(); ++it) {
GeoFeatureGroupExtension* grp = (GeoFeatureGroupExtension*)(*it);
GeoFeatureGroupExtension* grp = (*it)->getExtensionByType<GeoFeatureGroupExtension>();
if ( indirect ) {
if (grp->geoHasObject(obj)) {
return dynamic_cast<App::DocumentObject*>(grp);

View File

@@ -41,7 +41,9 @@ class AppExport GeoFeatureGroupExtension : public App::GroupExtension
EXTENSION_PROPERTY_HEADER(App::GeoFeatureGroupExtension);
public:
PropertyPlacement Placement;
PropertyPlacement& placement();
virtual void initExtension(ExtensionContainer* obj);
/**
* @brief transformPlacement applies transform to placement of this shape.
@@ -71,7 +73,8 @@ public:
/// Returns true if the given DocumentObject is DocumentObjectGroup but not GeoFeatureGroup
static bool isNonGeoGroup(const DocumentObject* obj) {
return obj->hasExtension(GroupExtension::getExtensionClassTypeId());
return obj->hasExtension(GroupExtension::getExtensionClassTypeId()) &
!obj->hasExtension(GeoFeatureGroupExtension::getExtensionClassTypeId());
}
};

View File

@@ -38,7 +38,7 @@ EXTENSION_PROPERTY_SOURCE(App::GroupExtension, App::DocumentObjectExtension)
GroupExtension::GroupExtension()
{
initExtension(GroupExtension::getExtensionClassTypeId());
initExtensionType(GroupExtension::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_Output),"List of referenced objects");
}
@@ -63,6 +63,11 @@ void GroupExtension::addObject(DocumentObject* obj)
if(!allowObject(obj))
return;
//only one group per object
auto *group = App::GroupExtension::getGroupOfObject(obj);
if(group && group != getExtendedObject())
group->getExtensionByType<App::GroupExtension>()->removeObject(obj);
if (!hasObject(obj)) {
std::vector<DocumentObject*> grp = Group.getValues();
grp.push_back(obj);
@@ -180,9 +185,9 @@ int GroupExtension::countObjectsOfType(const Base::Type& typeId) const
DocumentObject* GroupExtension::getGroupOfObject(const DocumentObject* obj)
{
const Document* doc = obj->getDocument();
std::vector<DocumentObject*> grps = doc->getObjectsOfType(GroupExtension::getExtensionClassTypeId());
std::vector<DocumentObject*> grps = doc->getObjectsWithExtension(GroupExtension::getExtensionClassTypeId());
for (std::vector<DocumentObject*>::const_iterator it = grps.begin(); it != grps.end(); ++it) {
GroupExtension* grp = (GroupExtension*)(*it);
GroupExtension* grp = (*it)->getExtensionByType<GroupExtension>();
if (grp->hasObject(obj))
return *it;
}

View File

@@ -49,20 +49,20 @@ public:
/** Adds an object of \a sType with \a pObjectName to the document this group belongs to and
* append it to this group as well.
*/
DocumentObject *addObject(const char* sType, const char* pObjectName);
virtual DocumentObject *addObject(const char* sType, const char* pObjectName);
/* Adds the object \a obj to this group.
*/
void addObject(DocumentObject* obj);
virtual void addObject(DocumentObject* obj);
/*override this function if you want only special objects
*/
virtual bool allowObject(DocumentObject* ) {return true;};
/** Removes an object from this group.
*/
void removeObject(DocumentObject* obj);
virtual void removeObject(DocumentObject* obj);
/** Removes all children objects from this group and the document.
*/
void removeObjectsFromDocument();
virtual void removeObjectsFromDocument();
/** Returns the object of this group with \a Name. If the group doesn't have such an object 0 is returned.
* @note This method might return 0 even if the document this group belongs to contains an object with this name.
*/

View File

@@ -39,7 +39,7 @@ EXTENSION_PROPERTY_SOURCE(App::OriginGroupExtension, App::GeoFeatureGroupExtensi
OriginGroupExtension::OriginGroupExtension () {
initExtension(OriginGroupExtension::getExtensionClassTypeId());
initExtensionType(OriginGroupExtension::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY_TYPE ( Origin, (0), 0, App::Prop_Hidden, "Origin linked to the group" );
}
@@ -129,6 +129,69 @@ void OriginGroupExtension::onExtendedUnsetupObject () {
GeoFeatureGroupExtension::onExtendedUnsetupObject ();
}
void OriginGroupExtension::relinkToOrigin(App::DocumentObject* obj)
{
//we get all links and replace the origin objects if needed (subnames need not to change, they
//would stay the same)
std::vector< App::DocumentObject* > result;
std::vector<App::Property*> list;
obj->getPropertyList(list);
for(App::Property* prop : list) {
if(prop->getTypeId().isDerivedFrom(App::PropertyLink::getClassTypeId())) {
auto p = static_cast<App::PropertyLink*>(prop);
if(!p->getValue() || !p->getValue()->isDerivedFrom(App::OriginFeature::getClassTypeId()))
continue;
p->setValue(getOrigin()->getOriginFeature(static_cast<OriginFeature*>(p->getValue())->Role.getValue()));
}
else if(prop->getTypeId().isDerivedFrom(App::PropertyLinkList::getClassTypeId())) {
auto p = static_cast<App::PropertyLinkList*>(prop);
auto vec = p->getValues();
std::vector<App::DocumentObject*> result;
bool changed = false;
for(App::DocumentObject* o : vec) {
if(!o || !o->isDerivedFrom(App::OriginFeature::getClassTypeId()))
result.push_back(o);
else {
result.push_back(getOrigin()->getOriginFeature(static_cast<OriginFeature*>(o)->Role.getValue()));
changed = true;
}
}
if(changed)
static_cast<App::PropertyLinkList*>(prop)->setValues(result);
}
else if(prop->getTypeId().isDerivedFrom(App::PropertyLinkSub::getClassTypeId())) {
auto p = static_cast<App::PropertyLinkSub*>(prop);
if(!p->getValue() || !p->getValue()->isDerivedFrom(App::OriginFeature::getClassTypeId()))
continue;
p->setValue(getOrigin()->getOriginFeature(static_cast<OriginFeature*>(p->getValue())->Role.getValue()));
}
else if(prop->getTypeId().isDerivedFrom(App::PropertyLinkSubList::getClassTypeId())) {
auto p = static_cast<App::PropertyLinkList*>(prop);
auto vec = p->getValues();
std::vector<App::DocumentObject*> result;
bool changed = false;
for(App::DocumentObject* o : vec) {
if(!o || !o->isDerivedFrom(App::OriginFeature::getClassTypeId()))
result.push_back(o);
else {
result.push_back(getOrigin()->getOriginFeature(static_cast<OriginFeature*>(o)->Role.getValue()));
changed = true;
}
}
if(changed)
static_cast<App::PropertyLinkList*>(prop)->setValues(result);
}
}
}
void OriginGroupExtension::addObject(DocumentObject* obj) {
relinkToOrigin(obj);
App::GeoFeatureGroupExtension::addObject(obj);
}
// Python feature ---------------------------------------------------------

View File

@@ -62,6 +62,11 @@ public:
/// Origin linked to the group
PropertyLink Origin;
//changes all links of obj to a origin to point to this groupes origin
void relinkToOrigin(App::DocumentObject* obj);
virtual void addObject(DocumentObject* obj);
protected:
/// Checks integrity of the Origin

View File

@@ -35,7 +35,7 @@
using namespace App;
PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::DocumentObject)
PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::GeoFeature)
//===========================================================================

View File

@@ -35,7 +35,7 @@ namespace App
/** Base class of all geometric document objects.
*/
class AppExport Part : public App::DocumentObject, public App::OriginGroupExtension
class AppExport Part : public App::GeoFeature, public App::OriginGroupExtension
{
PROPERTY_HEADER_WITH_EXTENSIONS(App::Part);

View File

@@ -3,6 +3,9 @@ set(PACKAGE_WCREF "$WCREV$")
set(PACKAGE_WCDATE "$WCDATE$")
set(PACKAGE_WCURL "$WCURL$")
# If the sources don't include a Version.h then create one
if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Version.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Version.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/Version.h.in
)
@@ -19,3 +22,4 @@ if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/Version.h)
${CMAKE_CURRENT_BINARY_DIR}/Version.h
)
endif (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/Version.h)
endif (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Version.h)

View File

@@ -500,7 +500,7 @@ SHOW_FILES = NO
# This will remove the Namespaces entry from the Quick Index
# and from the Folder Tree View (if specified). The default is YES.
SHOW_NAMESPACES = NO
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from

View File

@@ -26,7 +26,7 @@
\mainpage FreeCAD source documentation
This is the source documentation of <a href=http//www.freecadweb.org>FreeCAD</a>.
This is the source documentation of <a href=http://www.freecadweb.org>FreeCAD</a>.
It is automatically generated from the source code, and describes the different
components of the FreeCAD source code, for both the parts written in C++ and Python.

View File

@@ -1,3 +1,19 @@
@font-face {
font-family: 'Fira Sans';
src: url('/fonts/FiraSans-Regular.eot');
src: local('☺'), url('/fonts/FiraSans-Regular.woff') format('woff'), url('/fonts/FiraSans-Regular.ttf') format('truetype'), url('/fonts/FiraSans-Regular.svg') format('svg');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('/fonts/Roboto.eot');
src: local('☺'), url('/fonts/Roboto.woff') format('woff'), url('/fonts/Roboto.ttf') format('truetype'), url('/fonts/Roboto.svg') format('svg');
font-weight: 400;
font-style: normal;
}
h1, .h1, h2, .h2, h3, .h3{
font-weight: 200 !important;
}
@@ -389,3 +405,6 @@ pre.fragment {
.memdoc p {
text-align: left;
}
body, table, div, p, dl {
font: 400 16px/22px Fira Sans,sans-serif;
}

View File

@@ -43,10 +43,18 @@
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="/api/index.html" title="Welcome page">API Home</a></li>
<li><a href="modules.html" title="List of FreeCAD Modules">Modules</a></li>
<!-- <li><a href="namespaces.html" title="Namespaces">Namespaces</a></li> -->
<li><a href="annotated.html" title="List of namespaces and classes">Class list</a></li>
<!-- <li><a href="hierarchy.html" title="Tree view of classes">Class hierarchy</a></li> -->
<li><a href="/api/modules.html" title="List of FreeCAD Modules">Modules</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Contents <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="/api/annotated.html" title="Annotated list">Annotated list</a></li>
<li><a href="/api/namespaces.html" title="Namespaces">Namespaces</a></li>
<li><a href="/api/classes.html" title="Classes">Classes</a></li>
<li><a href="/api/functions.html" title="Functions">Functions</a></li>
<li><a href="/api/hierarchy.html" title="Tree view of classes">Class hierarchy</a></li>
<li><a href="/api/page.html" title="Related pages">Related pages</a></li>
</ul>
</li>
<li><a href="https://github.com/FreeCAD/FreeCAD" title="Browse the source code on GitHub">Source code</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">

View File

@@ -112,4 +112,45 @@ void ActionFunction::hovered()
}
}
// ----------------------------------------------------------------------------
namespace Gui {
class TimerFunctionPrivate
{
public:
boost::function<void()> timeoutFunc;
bool autoDelete;
};
}
TimerFunction::TimerFunction(QObject* parent)
: QObject(parent), d_ptr(new TimerFunctionPrivate())
{
d_ptr->autoDelete = false;
}
TimerFunction::~TimerFunction()
{
}
void TimerFunction::setFunction(boost::function<void()> func)
{
Q_D(TimerFunction);
d->timeoutFunc = func;
}
void TimerFunction::setAutoDelete(bool on)
{
Q_D(TimerFunction);
d->autoDelete = on;
}
void TimerFunction::timeout()
{
Q_D(TimerFunction);
d->timeoutFunc();
if (d->autoDelete)
deleteLater();
}
#include "moc_ActionFunction.cpp"

View File

@@ -86,6 +86,29 @@ private:
Q_DECLARE_PRIVATE(ActionFunction)
};
class TimerFunctionPrivate;
class GuiExport TimerFunction : public QObject
{
Q_OBJECT
public:
/// Constructor
TimerFunction(QObject* = 0);
virtual ~TimerFunction();
void setFunction(boost::function<void()> func);
void setAutoDelete(bool);
private Q_SLOTS:
void timeout();
private:
QScopedPointer<TimerFunctionPrivate> d_ptr;
Q_DISABLE_COPY(TimerFunction)
Q_DECLARE_PRIVATE(TimerFunction)
};
} //namespace Gui

View File

@@ -165,111 +165,6 @@ struct ApplicationP
CommandManager commandManager;
};
/** Observer that watches relabeled objects and make sure that the labels inside
* a document are unique.
* @note In the FreeCAD design it is explicitly allowed to have duplicate labels
* (i.e. the user visible text e.g. in the tree view) while the internal names
* are always guaranteed to be unique.
*/
class ObjectLabelObserver
{
public:
/// The one and only instance.
static ObjectLabelObserver* instance();
/// Destructs the sole instance.
static void destruct ();
/** Checks the new label of the object and relabel it if needed
* to make it unique document-wide
*/
void slotRelabelObject(const App::DocumentObject&, const App::Property&);
private:
static ObjectLabelObserver* _singleton;
ObjectLabelObserver();
~ObjectLabelObserver();
const App::DocumentObject* current;
ParameterGrp::handle _hPGrp;
};
ObjectLabelObserver* ObjectLabelObserver::_singleton = 0;
ObjectLabelObserver* ObjectLabelObserver::instance()
{
if (!_singleton)
_singleton = new ObjectLabelObserver;
return _singleton;
}
void ObjectLabelObserver::destruct ()
{
delete _singleton;
_singleton = 0;
}
void ObjectLabelObserver::slotRelabelObject(const App::DocumentObject& obj, const App::Property& prop)
{
// observe only the Label property
if (&prop == &obj.Label) {
// have we processed this (or another?) object right now?
if (current) {
return;
}
std::string label = obj.Label.getValue();
App::Document* doc = obj.getDocument();
if (doc && !_hPGrp->GetBool("DuplicateLabels")) {
std::vector<std::string> objectLabels;
std::vector<App::DocumentObject*>::const_iterator it;
std::vector<App::DocumentObject*> objs = doc->getObjects();
bool match = false;
for (it = objs.begin();it != objs.end();++it) {
if (*it == &obj)
continue; // don't compare object with itself
std::string objLabel = (*it)->Label.getValue();
if (!match && objLabel == label)
match = true;
objectLabels.push_back(objLabel);
}
// make sure that there is a name conflict otherwise we don't have to do anything
if (match && !label.empty()) {
// remove number from end to avoid lengthy names
size_t lastpos = label.length()-1;
while (label[lastpos] >= 48 && label[lastpos] <= 57) {
// if 'lastpos' becomes 0 then all characters are digits. In this case we use
// the complete label again
if (lastpos == 0) {
lastpos = label.length()-1;
break;
}
lastpos--;
}
label = label.substr(0, lastpos+1);
label = Base::Tools::getUniqueName(label, objectLabels, 3);
this->current = &obj;
const_cast<App::DocumentObject&>(obj).Label.setValue(label);
this->current = 0;
}
}
}
}
ObjectLabelObserver::ObjectLabelObserver() : current(0)
{
App::GetApplication().signalChangedObject.connect(boost::bind
(&ObjectLabelObserver::slotRelabelObject, this, _1, _2));
_hPGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp");
_hPGrp = _hPGrp->GetGroup("Preferences")->GetGroup("Document");
}
ObjectLabelObserver::~ObjectLabelObserver()
{
}
static PyObject *
FreeCADGui_subgraphFromObject(PyObject * /*self*/, PyObject *args)
{
@@ -460,7 +355,6 @@ Application::Application(bool GUIenabled)
createStandardOperations();
MacroCommand::load();
}
ObjectLabelObserver::instance();
}
Application::~Application()
@@ -1142,7 +1036,7 @@ bool Application::activateWorkbench(const char* name)
}
Base::Console().Error("%s\n", (const char*)msg.toLatin1());
Base::Console().Log("%s\n", e.getStackTrace().c_str());
Base::Console().Error("%s\n", e.getStackTrace().c_str());
if (!d->startingUp) {
wc.restoreCursor();
QMessageBox::critical(getMainWindow(), QObject::tr("Workbench failure"),
@@ -1385,10 +1279,9 @@ typedef void (*_qt_msg_handler_old)(QtMsgType type, const char *msg);
_qt_msg_handler_old old_qtmsg_handler = 0;
#if QT_VERSION >= 0x050000
void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &qmsg)
void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
Q_UNUSED(context);
const QChar *msg = qmsg.unicode();
#ifdef FC_DEBUG
switch (type)
{
@@ -1396,26 +1289,26 @@ void messageHandler(QtMsgType type, const QMessageLogContext &context, const QSt
case QtInfoMsg:
#endif
case QtDebugMsg:
Base::Console().Message("%s\n", msg);
Base::Console().Message("%s\n", msg.toUtf8().constData());
break;
case QtWarningMsg:
Base::Console().Warning("%s\n", msg);
Base::Console().Warning("%s\n", msg.toUtf8().constData());
break;
case QtCriticalMsg:
Base::Console().Error("%s\n", msg);
Base::Console().Error("%s\n", msg.toUtf8().constData());
break;
case QtFatalMsg:
Base::Console().Error("%s\n", msg);
Base::Console().Error("%s\n", msg.toUtf8().constData());
abort(); // deliberately core dump
}
#ifdef FC_OS_WIN32
if (old_qtmsg_handler)
(*old_qtmsg_handler)(type, context, qmsg);
(*old_qtmsg_handler)(type, context, msg);
#endif
#else
// do not stress user with Qt internals but write to log file if enabled
Q_UNUSED(type);
Base::Console().Log("%s\n", msg);
Base::Console().Log("%s\n", msg.toUtf8().constData());
#endif
}
#else

View File

@@ -61,6 +61,11 @@
<string>Black</string>
</property>
</item>
<item>
<property name="text" >
<string>Transparent</string>
</property>
</item>
</widget>
</item>
</layout>

View File

@@ -69,7 +69,7 @@ public:
void pause();
void resume();
private slots:
private Q_SLOTS:
void readClient();
void discardClient();

View File

@@ -195,7 +195,7 @@ void TaskHeader::leaveEvent ( QEvent * /*event*/ )
void TaskHeader::fold()
{
if (myExpandable) {
emit activated();
Q_EMIT activated();
// Toggling the 'm_fold' member here may lead to inconsistencies with its ActionGroup.
// Thus, the method setFold() was added and called from ActionGroup when required.
#if 0
@@ -254,7 +254,7 @@ void TaskHeader::changeIcons()
void TaskHeader::mouseReleaseEvent ( QMouseEvent * event )
{
if (event->button() == Qt::LeftButton) {
emit activated();
Q_EMIT activated();
}
}

View File

@@ -50,7 +50,7 @@ public:
QMenu * getMenu(void) const;
public slots:
public Q_SLOTS:
void changeRenderMode(QAction * action);
void changeStereoMode(QAction * action);
void changeTransparencyType(QAction * action);

View File

@@ -48,7 +48,7 @@ public:
SensorManager(void);
~SensorManager();
public slots:
public Q_SLOTS:
void idleTimeout(void);
void delayTimeout(void);
void timerQueueTimeout(void);

View File

@@ -70,7 +70,7 @@ SignalThread::run(void)
// just wait, and trigger every time we receive a signal
this->waitcond.wait(&this->mutex);
if (!this->isstopped) {
emit triggerSignal();
Q_EMIT triggerSignal();
}
}
}

View File

@@ -92,6 +92,7 @@
#include <Base/FileInfo.h>
#include <Base/Sequencer.h>
#include <Base/Tools.h>
#include <Base/UnitsApi.h>
#include "View3DInventorViewer.h"
#include "ViewProviderDocumentObject.h"
@@ -1545,35 +1546,18 @@ void View3DInventorViewer::printDimension()
else if (dimX < dimY)
fHeight *= ((float)dimY)/((float)dimX);
float fLog = float(log10(fWidth)), fFac;
int nExp = int(fLog);
QString unit;
// Translate screen units into user's unit schema
Base::Quantity qWidth(Base::Quantity::MilliMetre);
Base::Quantity qHeight(Base::Quantity::MilliMetre);
qWidth.setValue(fWidth);
qHeight.setValue(fHeight);
QString wStr = Base::UnitsApi::schemaTranslate(qWidth);
QString hStr = Base::UnitsApi::schemaTranslate(qHeight);
if (nExp >= 6) {
fFac = 1.0e+6f;
unit = QLatin1String("km");
}
else if (nExp >= 3) {
fFac = 1.0e+3f;
unit = QLatin1String("m");
}
else if ((nExp >= 0) && (fLog > 0.0f)) {
fFac = 1.0e+0f;
unit = QLatin1String("mm");
}
else if (nExp >= -3) {
fFac = 1.0e-3f;
unit = QLatin1String("um");
}
else {
fFac = 1.0e-6f;
unit = QLatin1String("nm");
}
QString dim = QString::fromLatin1("%1 x %2 %3")
.arg(fWidth / fFac,0,'f',2)
.arg(fHeight / fFac,0,'f',2)
.arg(unit);
// Create final string and update window
QString dim = QString::fromLatin1("%1 x %2")
.arg(wStr)
.arg(hStr);
getMainWindow()->setPaneText(2, dim);
}
else

View File

@@ -25,6 +25,7 @@
#ifndef _PreComp_
# include <QPixmap>
# include <QTimer>
# include <Inventor/SoPickedPoint.h>
# include <Inventor/nodes/SoSeparator.h>
# include <Inventor/nodes/SoSwitch.h>
@@ -44,6 +45,7 @@
#include "ViewProvider.h"
#include "Application.h"
#include "ActionFunction.h"
#include "Document.h"
#include "ViewProviderPy.h"
#include "BitmapFactory.h"
@@ -52,6 +54,8 @@
#include "SoFCDB.h"
#include "ViewProviderExtension.h"
#include <boost/bind.hpp>
using namespace std;
using namespace Gui;
@@ -171,10 +175,16 @@ void ViewProvider::eventCallback(void * ud, SoEventCallback * node)
const SbBool press = ke->getState() == SoButtonEvent::DOWN ? true : false;
switch (ke->getKey()) {
case SoKeyboardEvent::ESCAPE:
if (self->keyPressed (press, ke->getKey()))
if (self->keyPressed (press, ke->getKey())) {
node->setHandled();
else
Gui::Application::Instance->activeDocument()->resetEdit();
}
else {
Gui::TimerFunction* func = new Gui::TimerFunction();
func->setAutoDelete(true);
Gui::Document* doc = Gui::Application::Instance->activeDocument();
func->setFunction(boost::bind(&Document::resetEdit, doc));
QTimer::singleShot(0, func, SLOT(timeout()));
}
break;
default:
// call the virtual method

View File

@@ -37,7 +37,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderExtension, App::Extension)
ViewProviderExtension::ViewProviderExtension()
{
initExtension(Gui::ViewProviderExtension::getExtensionClassTypeId());
initExtensionType(Gui::ViewProviderExtension::getExtensionClassTypeId());
}
ViewProviderExtension::~ViewProviderExtension()

View File

@@ -97,7 +97,7 @@ public:
ViewProviderExtensionPythonT() {
ExtensionT::m_isPythonExtension = true;
ExtensionT::initExtension(ViewProviderExtensionPythonT::getExtensionClassTypeId());
ExtensionT::initExtensionType(ViewProviderExtensionPythonT::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object()));
}

View File

@@ -29,6 +29,9 @@
#endif
#include "ViewProviderGeoFeatureGroupExtension.h"
#include "Command.h"
#include "Application.h"
#include "Document.h"
#include <App/GeoFeatureGroupExtension.h>
#include <Inventor/nodes/SoGroup.h>
@@ -38,7 +41,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderGeoFeatureGroupExtension, Gui::ViewPr
ViewProviderGeoFeatureGroupExtension::ViewProviderGeoFeatureGroupExtension()
{
initExtension(ViewProviderGeoFeatureGroupExtension::getExtensionClassTypeId());
initExtensionType(ViewProviderGeoFeatureGroupExtension::getExtensionClassTypeId());
pcGroupChildren = new SoGroup();
pcGroupChildren->ref();
@@ -84,13 +87,96 @@ std::vector<std::string> ViewProviderGeoFeatureGroupExtension::extensionGetDispl
void ViewProviderGeoFeatureGroupExtension::extensionUpdateData(const App::Property* prop)
{
auto obj = getExtendedViewProvider()->getObject()->getExtensionByType<App::GeoFeatureGroupExtension>();
if (obj && prop == &obj->Placement) {
getExtendedViewProvider()->setTransformation ( obj->Placement.getValue().toMatrix() );
if (obj && prop == &obj->placement()) {
getExtendedViewProvider()->setTransformation ( obj->placement().getValue().toMatrix() );
} else {
ViewProviderGroupExtension::extensionUpdateData ( prop );
}
}
std::vector< App::DocumentObject* > ViewProviderGeoFeatureGroupExtension::getLinkedObjects(App::DocumentObject* obj) {
if(!obj)
return std::vector< App::DocumentObject* >();
//we get all linked objects, and that recursively
std::vector< App::DocumentObject* > result;
std::vector<App::Property*> list;
obj->getPropertyList(list);
for(App::Property* prop : list) {
if(prop->getTypeId().isDerivedFrom(App::PropertyLink::getClassTypeId()))
result.push_back(static_cast<App::PropertyLink*>(prop)->getValue());
else if(prop->getTypeId().isDerivedFrom(App::PropertyLinkList::getClassTypeId())) {
auto vec = static_cast<App::PropertyLinkList*>(prop)->getValues();
result.insert(result.end(), vec.begin(), vec.end());
}
else if(prop->getTypeId().isDerivedFrom(App::PropertyLinkSub::getClassTypeId()))
result.push_back(static_cast<App::PropertyLinkSub*>(prop)->getValue());
else if(prop->getTypeId().isDerivedFrom(App::PropertyLinkSubList::getClassTypeId())) {
auto vec = static_cast<App::PropertyLinkList*>(prop)->getValues();
result.insert(result.end(), vec.begin(), vec.end());
}
}
//clear all null objects
result.erase(std::remove(result.begin(), result.end(), nullptr), result.end());
//collect all dependencies of those objects
for(App::DocumentObject *obj : result) {
auto vec = getLinkedObjects(obj);
result.insert(result.end(), vec.begin(), vec.end());
}
return result;
}
void ViewProviderGeoFeatureGroupExtension::extensionDropObject(App::DocumentObject* obj) {
// Open command
App::DocumentObject* grp = static_cast<App::DocumentObject*>(getExtendedViewProvider()->getObject());
App::Document* doc = grp->getDocument();
Gui::Document* gui = Gui::Application::Instance->getDocument(doc);
gui->openCommand("Move object");
//links between different CS are not allowed, hence we need to ensure if all dependencies are in
//the same geofeaturegroup
auto vec = getLinkedObjects(obj);
//remove all objects already in the correct group
vec.erase(std::remove_if(vec.begin(), vec.end(), [this](App::DocumentObject* o){
return App::GroupExtension::getGroupOfObject(o) == this->getExtendedViewProvider()->getObject();
}), vec.end());
vec.push_back(obj);
for(App::DocumentObject* o : vec) {
// build Python command for execution
QString cmd;
cmd = QString::fromLatin1("App.getDocument(\"%1\").getObject(\"%2\").addObject("
"App.getDocument(\"%1\").getObject(\"%3\"))")
.arg(QString::fromLatin1(doc->getName()))
.arg(QString::fromLatin1(grp->getNameInDocument()))
.arg(QString::fromLatin1(o->getNameInDocument()));
Gui::Command::doCommand(Gui::Command::App, cmd.toUtf8());
}
gui->commitCommand();
}
void ViewProviderGeoFeatureGroupExtension::extensionDragObject(App::DocumentObject* obj) {
//links between different coordinate systems are not allowed, hence draging one object also needs
//to drag out all dependend objects
auto vec = getLinkedObjects(obj);
//add this object
vec.push_back(obj);
for(App::DocumentObject* obj : vec)
ViewProviderGroupExtension::extensionDragObject(obj);
}
namespace Gui {
EXTENSION_PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGeoFeatureGroupExtensionPython, Gui::ViewProviderGeoFeatureGroupExtension)

View File

@@ -58,8 +58,13 @@ public:
virtual void extensionUpdateData(const App::Property*) override;
virtual void extensionDropObject(App::DocumentObject*);
virtual void extensionDragObject(App::DocumentObject*);
protected:
SoGroup *pcGroupChildren;
std::vector<App::DocumentObject*> getLinkedObjects(App::DocumentObject* obj);
};
typedef ViewProviderExtensionPythonT<Gui::ViewProviderGeoFeatureGroupExtension> ViewProviderGeoFeatureGroupExtensionPython;

View File

@@ -45,7 +45,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderGroupExtension, Gui::ViewProviderExte
ViewProviderGroupExtension::ViewProviderGroupExtension() : visible(false)
{
initExtension(ViewProviderGroupExtension::getExtensionClassTypeId());
initExtensionType(ViewProviderGroupExtension::getExtensionClassTypeId());
}
ViewProviderGroupExtension::~ViewProviderGroupExtension()

View File

@@ -34,6 +34,7 @@
#include "ViewProviderOrigin.h"
#include "View3DInventorViewer.h"
#include "View3DInventor.h"
#include "Command.h"
#include <App/OriginGroupExtension.h>
#include <App/Document.h>
#include <App/Origin.h>
@@ -48,7 +49,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderOriginGroupExtension, Gui::ViewProvid
ViewProviderOriginGroupExtension::ViewProviderOriginGroupExtension()
{
initExtension(ViewProviderOriginGroupExtension::getExtensionClassTypeId());
initExtensionType(ViewProviderOriginGroupExtension::getExtensionClassTypeId());
}
ViewProviderOriginGroupExtension::~ViewProviderOriginGroupExtension()
@@ -196,6 +197,63 @@ void ViewProviderOriginGroupExtension::updateOriginSize () {
vpOrigin->Size.setValue ( size * 1.3 );
}
void ViewProviderOriginGroupExtension::extensionDragObject(App::DocumentObject* obj) {
//links between different coordinate systems are not allowed, hence draging one object also needs
//to drag out all dependend objects
auto vec = getLinkedObjects(obj);
//remove all origin objects
vec.erase(std::remove_if(vec.begin(), vec.end(), [this](App::DocumentObject* o) {
return o->isDerivedFrom(App::OriginFeature::getClassTypeId());}), vec.end());
//add the original object
vec.push_back(obj);
for(App::DocumentObject* obj : vec)
ViewProviderGroupExtension::extensionDragObject(obj);
}
void ViewProviderOriginGroupExtension::extensionDropObject(App::DocumentObject* obj) {
// Open command
App::DocumentObject* grp = static_cast<App::DocumentObject*>(getExtendedViewProvider()->getObject());
App::Document* doc = grp->getDocument();
Gui::Document* gui = Gui::Application::Instance->getDocument(doc);
gui->openCommand("Move object");
//links between different CS are not allowed, hence we need to enure if all dependencies are in
//the same geofeaturegroup
auto vec = getLinkedObjects(obj);
//remove all origin objects
vec.erase(std::remove_if(vec.begin(), vec.end(), [](App::DocumentObject* o) {
return o->isDerivedFrom(App::OriginFeature::getClassTypeId());}), vec.end());
//remove all objects already in the correct group
vec.erase(std::remove_if(vec.begin(), vec.end(), [this](App::DocumentObject* o){
return App::GroupExtension::getGroupOfObject(o) == this->getExtendedViewProvider()->getObject();
}), vec.end());
//add the original object
vec.push_back(obj);
for(App::DocumentObject* o : vec) {
// build Python command for execution
QString cmd;
cmd = QString::fromLatin1("App.getDocument(\"%1\").getObject(\"%2\").addObject("
"App.getDocument(\"%1\").getObject(\"%3\"))")
.arg(QString::fromLatin1(doc->getName()))
.arg(QString::fromLatin1(grp->getNameInDocument()))
.arg(QString::fromLatin1(o->getNameInDocument()));
Gui::Command::doCommand(Gui::Command::App, cmd.toUtf8());
}
gui->commitCommand();
}
namespace Gui {
EXTENSION_PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderOriginGroupExtensionPython, Gui::ViewProviderOriginGroupExtension)

View File

@@ -46,6 +46,9 @@ public:
virtual void extensionAttach(App::DocumentObject *pcObject) override;
virtual void extensionUpdateData(const App::Property* prop) override;
virtual void extensionDragObject(App::DocumentObject*) override;
virtual void extensionDropObject(App::DocumentObject*);
void updateOriginSize();
protected:

View File

@@ -9,193 +9,193 @@
#include "iistaskpanelscheme.h"
iisIconLabel::iisIconLabel(const QIcon &icon, const QString &title, QWidget *parent)
: QWidget(parent),
myPixmap(icon),
myText(title),
mySchemePointer(0),
m_over(false),
m_pressed(false),
m_changeCursorOver(true),
m_underlineOver(true)
: QWidget(parent),
myPixmap(icon),
myText(title),
mySchemePointer(0),
m_over(false),
m_pressed(false),
m_changeCursorOver(true),
m_underlineOver(true)
{
setFocusPolicy(Qt::StrongFocus);
setCursor(Qt::PointingHandCursor);
setFocusPolicy(Qt::StrongFocus);
setCursor(Qt::PointingHandCursor);
myFont.setWeight(0);
myPen.setStyle(Qt::NoPen);
myFont.setWeight(0);
myPen.setStyle(Qt::NoPen);
myColor = myColorOver = myColorDisabled = QColor();
myColor = myColorOver = myColorDisabled = QColor();
}
iisIconLabel::~iisIconLabel()
{
//if (m_changeCursorOver)
// QApplication::restoreOverrideCursor();
//if (m_changeCursorOver)
// QApplication::restoreOverrideCursor();
}
void iisIconLabel::setSchemePointer(iisIconLabelScheme **pointer)
{
mySchemePointer = pointer;
update();
mySchemePointer = pointer;
update();
}
void iisIconLabel::setColors(const QColor &color, const QColor &colorOver, const QColor &colorOff)
{
myColor = color;
myColorOver = colorOver;
myColorDisabled = colorOff;
update();
myColor = color;
myColorOver = colorOver;
myColorDisabled = colorOff;
update();
}
void iisIconLabel::setFont(const QFont &font)
{
myFont = font;
update();
myFont = font;
update();
}
void iisIconLabel::setFocusPen(const QPen &pen)
{
myPen = pen;
update();
myPen = pen;
update();
}
QSize iisIconLabel::sizeHint() const
{
return minimumSize();
return minimumSize();
}
QSize iisIconLabel::minimumSizeHint() const
{
int s = (mySchemePointer && *mySchemePointer) ? (*mySchemePointer)->iconSize : 16;
QPixmap px = myPixmap.pixmap(s,s,
isEnabled() ? QIcon::Normal : QIcon::Disabled);
int s = (mySchemePointer && *mySchemePointer) ? (*mySchemePointer)->iconSize : 16;
QPixmap px = myPixmap.pixmap(s,s,
isEnabled() ? QIcon::Normal : QIcon::Disabled);
int h = 4+px.height();
int w = 8 + px.width();
if (!myText.isEmpty()) {
QFontMetrics fm(myFont);
w += fm.width(myText);
h = qMax(h, 4+fm.height());
}
int h = 4+px.height();
int w = 8 + px.width();
if (!myText.isEmpty()) {
QFontMetrics fm(myFont);
w += fm.width(myText);
h = qMax(h, 4+fm.height());
}
return QSize(w+2,h+2);
return QSize(w+2,h+2);
}
void iisIconLabel::paintEvent ( QPaintEvent * event )
void iisIconLabel::paintEvent ( QPaintEvent * event )
{
Q_UNUSED(event);
QPainter p(this);
Q_UNUSED(event);
QPainter p(this);
QRect textRect(rect().adjusted(0,0,-1,0));
QRect textRect(rect().adjusted(0,0,-1,0));
int x = 2;
int x = 2;
if (!myPixmap.isNull()) {
int s = (mySchemePointer && *mySchemePointer) ? (*mySchemePointer)->iconSize : 16;
QPixmap px = myPixmap.pixmap(s,s,
isEnabled() ? QIcon::Normal : QIcon::Disabled);
p.drawPixmap(x,0,px);
x += px.width() + 4;
}
if (!myPixmap.isNull()) {
int s = (mySchemePointer && *mySchemePointer) ? (*mySchemePointer)->iconSize : 16;
QPixmap px = myPixmap.pixmap(s,s,
isEnabled() ? QIcon::Normal : QIcon::Disabled);
p.drawPixmap(x,0,px);
x += px.width() + 4;
}
if (!myText.isEmpty()) {
QColor text = myColor, textOver = myColorOver, textOff = myColorDisabled;
QFont fnt = myFont;
QPen focusPen = myPen;
bool underline = m_underlineOver/*, cursover = m_changeCursorOver*/;
if (mySchemePointer && *mySchemePointer) {
if (!text.isValid()) text = (*mySchemePointer)->text;
if (!textOver.isValid()) textOver = (*mySchemePointer)->textOver;
if (!textOff.isValid()) textOff = (*mySchemePointer)->textOff;
if (!fnt.weight()) fnt = (*mySchemePointer)->font;
if (focusPen.style() == Qt::NoPen) focusPen = (*mySchemePointer)->focusPen;
underline = (*mySchemePointer)->underlineOver;
//cursover = (*mySchemePointer)->cursorOver;
}
if (!myText.isEmpty()) {
QColor text = myColor, textOver = myColorOver, textOff = myColorDisabled;
QFont fnt = myFont;
QPen focusPen = myPen;
bool underline = m_underlineOver/*, cursover = m_changeCursorOver*/;
if (mySchemePointer && *mySchemePointer) {
if (!text.isValid()) text = (*mySchemePointer)->text;
if (!textOver.isValid()) textOver = (*mySchemePointer)->textOver;
if (!textOff.isValid()) textOff = (*mySchemePointer)->textOff;
if (!fnt.weight()) fnt = (*mySchemePointer)->font;
if (focusPen.style() == Qt::NoPen) focusPen = (*mySchemePointer)->focusPen;
underline = (*mySchemePointer)->underlineOver;
//cursover = (*mySchemePointer)->cursorOver;
}
p.setPen(isEnabled() ? m_over ? textOver : text : textOff);
p.setPen(isEnabled() ? m_over ? textOver : text : textOff);
if (isEnabled() && underline && m_over)
fnt.setUnderline(true);
p.setFont(fnt);
if (isEnabled() && underline && m_over)
fnt.setUnderline(true);
p.setFont(fnt);
textRect.setLeft(x);
QRect boundingRect;
textRect.setLeft(x);
QRect boundingRect;
QFontMetrics fm(fnt);
QFontMetrics fm(fnt);
#if QT_VERSION >= 0x040203
QString txt(fm.elidedText(myText, Qt::ElideRight, textRect.width()));
QString txt(fm.elidedText(myText, Qt::ElideRight, textRect.width()));
#else
QString txt = myText;
QString txt = myText;
#endif
p.drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, txt, &boundingRect);
p.drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, txt, &boundingRect);
if (hasFocus()) {
p.setPen(focusPen);
p.drawRect(boundingRect.adjusted(-2,-1,0,0));
}
}
if (hasFocus()) {
p.setPen(focusPen);
p.drawRect(boundingRect.adjusted(-2,-1,0,0));
}
}
}
void iisIconLabel::enterEvent ( QEvent * /*event*/ )
{
m_over = true;
m_over = true;
//if (m_changeCursorOver)
// QApplication::setOverrideCursor(Qt::PointingHandCursor);
//if (m_changeCursorOver)
// QApplication::setOverrideCursor(Qt::PointingHandCursor);
update();
update();
}
void iisIconLabel::leaveEvent ( QEvent * /*event*/ )
{
m_over = false;
update();
m_over = false;
update();
//if (m_changeCursorOver)
// QApplication::restoreOverrideCursor();
//if (m_changeCursorOver)
// QApplication::restoreOverrideCursor();
}
void iisIconLabel::mousePressEvent ( QMouseEvent * event )
{
if (event->button() == Qt::LeftButton) {
m_pressed = true;
emit pressed();
} else
if (event->button() == Qt::RightButton)
emit contextMenu();
if (event->button() == Qt::LeftButton) {
m_pressed = true;
Q_EMIT pressed();
} else
if (event->button() == Qt::RightButton)
Q_EMIT contextMenu();
update();
update();
}
void iisIconLabel::mouseReleaseEvent ( QMouseEvent * event )
{
if (event->button() == Qt::LeftButton) {
m_pressed = false;
emit released();
if (event->button() == Qt::LeftButton) {
m_pressed = false;
Q_EMIT released();
if (rect().contains( event->pos() )) {
emit clicked();
emit activated();
}
}
if (rect().contains( event->pos() )) {
Q_EMIT clicked();
Q_EMIT activated();
}
}
update();
update();
}
void iisIconLabel::keyPressEvent ( QKeyEvent * event )
{
switch (event->key()) {
case Qt::Key_Space:
case Qt::Key_Return:
emit activated();
break;
switch (event->key()) {
case Qt::Key_Space:
case Qt::Key_Return:
Q_EMIT activated();
break;
default:;
}
default:;
}
QWidget::keyPressEvent(event);
QWidget::keyPressEvent(event);
}

View File

@@ -16,38 +16,38 @@
#include "iisiconlabel.h"
iisTaskHeader::iisTaskHeader(const QIcon &icon, const QString &title, bool expandable, QWidget *parent)
: QFrame(parent),
myExpandable(expandable),
m_over(false),
m_buttonOver(false),
m_fold(true),
m_opacity(0.1),
myButton(0)
: QFrame(parent),
myExpandable(expandable),
m_over(false),
m_buttonOver(false),
m_fold(true),
m_opacity(0.1),
myButton(0)
{
myTitle = new iisIconLabel(icon, title, this);
myTitle->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
myTitle = new iisIconLabel(icon, title, this);
myTitle->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
connect(myTitle, SIGNAL(activated()), this, SLOT(fold()));
connect(myTitle, SIGNAL(activated()), this, SLOT(fold()));
QHBoxLayout *hbl = new QHBoxLayout();
hbl->setMargin(2);
setLayout(hbl);
QHBoxLayout *hbl = new QHBoxLayout();
hbl->setMargin(2);
setLayout(hbl);
hbl->addWidget(myTitle);
hbl->addWidget(myTitle);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
setScheme(iisTaskPanelScheme::defaultScheme());
myTitle->setSchemePointer(&myLabelScheme);
setScheme(iisTaskPanelScheme::defaultScheme());
myTitle->setSchemePointer(&myLabelScheme);
if (myExpandable) {
myButton = new QLabel(this);
hbl->addWidget(myButton);
myButton->installEventFilter(this);
myButton->setFixedWidth(myScheme->headerButtonSize.width());
changeIcons();
}
if (myExpandable) {
myButton = new QLabel(this);
hbl->addWidget(myButton);
myButton->installEventFilter(this);
myButton->setFixedWidth(myScheme->headerButtonSize.width());
changeIcons();
}
}
iisTaskHeader::~iisTaskHeader()
@@ -57,145 +57,145 @@ iisTaskHeader::~iisTaskHeader()
bool iisTaskHeader::eventFilter(QObject *obj, QEvent *event)
{
switch (event->type()) {
case QEvent::MouseButtonPress:
fold();
return true;
switch (event->type()) {
case QEvent::MouseButtonPress:
fold();
return true;
case QEvent::Enter:
m_buttonOver = true;
changeIcons();
return true;
case QEvent::Enter:
m_buttonOver = true;
changeIcons();
return true;
case QEvent::Leave:
m_buttonOver = false;
changeIcons();
return true;
case QEvent::Leave:
m_buttonOver = false;
changeIcons();
return true;
default:;
}
default:;
}
return QFrame::eventFilter(obj, event);
return QFrame::eventFilter(obj, event);
}
void iisTaskHeader::setScheme(iisTaskPanelScheme *scheme)
{
if (scheme) {
myScheme = scheme;
myLabelScheme = &(scheme->headerLabelScheme);
if (scheme) {
myScheme = scheme;
myLabelScheme = &(scheme->headerLabelScheme);
if (myExpandable) {
setCursor(myLabelScheme->cursorOver ? Qt::PointingHandCursor : cursor());
changeIcons();
}
if (myExpandable) {
setCursor(myLabelScheme->cursorOver ? Qt::PointingHandCursor : cursor());
changeIcons();
}
setFixedHeight(scheme->headerSize);
setFixedHeight(scheme->headerSize);
update();
}
update();
}
}
void iisTaskHeader::paintEvent ( QPaintEvent * event )
void iisTaskHeader::paintEvent ( QPaintEvent * event )
{
Q_UNUSED(event);
QPainter p(this);
Q_UNUSED(event);
QPainter p(this);
#if QT_VERSION >= 0x040203
if (myScheme->headerAnimation)
p.setOpacity(m_opacity+0.7);
if (myScheme->headerAnimation)
p.setOpacity(m_opacity+0.7);
#endif
p.setPen(myScheme->headerBorder);
p.setBrush(myScheme->headerBackground);
if (myScheme->headerBorder.style() == Qt::NoPen)
p.drawRect(rect());
else
p.drawRect(rect().adjusted(0,0,-1,-1));
p.setPen(myScheme->headerBorder);
p.setBrush(myScheme->headerBackground);
if (myScheme->headerBorder.style() == Qt::NoPen)
p.drawRect(rect());
else
p.drawRect(rect().adjusted(0,0,-1,-1));
}
void iisTaskHeader::animate()
{
if (!myScheme->headerAnimation)
return;
if (!myScheme->headerAnimation)
return;
if (!isEnabled()) {
m_opacity = 0.1;
update();
return;
}
if (!isEnabled()) {
m_opacity = 0.1;
update();
return;
}
if (m_over) {
if (m_opacity >= 0.3) {
m_opacity = 0.3;
return;
}
m_opacity += 0.05;
} else {
if (m_opacity <= 0.1) {
m_opacity = 0.1;
return;
}
m_opacity = qMax(0.1, m_opacity-0.05);
}
if (m_over) {
if (m_opacity >= 0.3) {
m_opacity = 0.3;
return;
}
m_opacity += 0.05;
} else {
if (m_opacity <= 0.1) {
m_opacity = 0.1;
return;
}
m_opacity = qMax(0.1, m_opacity-0.05);
}
QTimer::singleShot(100, this, SLOT(animate()));
update();
QTimer::singleShot(100, this, SLOT(animate()));
update();
}
void iisTaskHeader::enterEvent ( QEvent * /*event*/ )
{
m_over = true;
m_over = true;
if (isEnabled())
QTimer::singleShot(100, this, SLOT(animate()));
if (isEnabled())
QTimer::singleShot(100, this, SLOT(animate()));
update();
update();
}
void iisTaskHeader::leaveEvent ( QEvent * /*event*/ )
{
m_over = false;
if (isEnabled())
QTimer::singleShot(100, this, SLOT(animate()));
m_over = false;
update();
if (isEnabled())
QTimer::singleShot(100, this, SLOT(animate()));
update();
}
void iisTaskHeader::fold()
{
if (myExpandable) {
emit activated();
if (myExpandable) {
Q_EMIT activated();
m_fold = !m_fold;
changeIcons();
}
m_fold = !m_fold;
changeIcons();
}
}
void iisTaskHeader::changeIcons()
{
if (!myButton)
return;
if (!myButton)
return;
if (m_buttonOver)
{
if (m_fold)
myButton->setPixmap(myScheme->headerButtonFoldOver.pixmap(myScheme->headerButtonSize));
else
myButton->setPixmap(myScheme->headerButtonUnfoldOver.pixmap(myScheme->headerButtonSize));
} else
{
if (m_fold)
myButton->setPixmap(myScheme->headerButtonFold.pixmap(myScheme->headerButtonSize));
else
myButton->setPixmap(myScheme->headerButtonUnfold.pixmap(myScheme->headerButtonSize));
}
if (m_buttonOver)
{
if (m_fold)
myButton->setPixmap(myScheme->headerButtonFoldOver.pixmap(myScheme->headerButtonSize));
else
myButton->setPixmap(myScheme->headerButtonUnfoldOver.pixmap(myScheme->headerButtonSize));
} else
{
if (m_fold)
myButton->setPixmap(myScheme->headerButtonFold.pixmap(myScheme->headerButtonSize));
else
myButton->setPixmap(myScheme->headerButtonUnfold.pixmap(myScheme->headerButtonSize));
}
}
void iisTaskHeader::mouseReleaseEvent ( QMouseEvent * event )
{
if (event->button() == Qt::LeftButton) {
emit activated();
}
if (event->button() == Qt::LeftButton) {
Q_EMIT activated();
}
}

View File

@@ -968,7 +968,7 @@ def getExtrusionData(shape):
return None
if not shape.Solids:
return None
if len(shape.Faces) < 5:
if len(shape.Faces) < 3:
return None
# build faces list with normals
faces = []

View File

@@ -387,9 +387,11 @@ class Component:
"returns (shape,extrusion vector,placement) or None"
if hasattr(obj,"CloneOf"):
if obj.CloneOf:
data = obj.CloneOf.Proxy.getExtrusionData(obj.CloneOf)
if data:
return data
if hasattr(obj.CloneOf,"Proxy"):
if hasattr(obj.CloneOf.Proxy,"getExtrusionData"):
data = obj.CloneOf.Proxy.getExtrusionData(obj.CloneOf)
if data:
return data
if obj.Base:
if obj.Base.isDerivedFrom("Part::Extrusion"):
if obj.Base.Base:
@@ -403,6 +405,37 @@ class Component:
if obj.Base.LengthForward.Value:
extrusion = extrusion.multiply(obj.Base.LengthForward.Value)
return (base,extrusion,placement)
elif obj.Base.isDerivedFrom("Part::MultiFuse"):
rshapes = []
revs = []
rpls = []
for sub in obj.Base.Shapes:
if sub.isDerivedFrom("Part::Extrusion"):
if sub.Base:
base,placement = self.rebase(sub.Base.Shape)
extrusion = FreeCAD.Vector(sub.Dir)
if extrusion.Length == 0:
extrusion = FreeCAD.Vector(0,0,1)
else:
extrusion = placement.inverse().Rotation.multVec(extrusion)
if hasattr(sub,"LengthForward"):
if sub.LengthForward.Value:
extrusion = extrusion.multiply(sub.LengthForward.Value)
placement = obj.Placement.multiply(placement)
rshapes.append(base)
revs.append(extrusion)
rpls.append(placement)
else:
exdata = ArchCommands.getExtrusionData(sub.Shape)
if exdata:
base,placement = self.rebase(exdata[0])
extrusion = placement.inverse().Rotation.multVec(exdata[1])
placement = obj.Placement.multiply(placement)
rshapes.append(base)
revs.append(extrusion)
rpls.append(placement)
if rshapes and revs and rpls:
return (rshapes,revs,rpls)
return None
def rebase(self,shape):

View File

@@ -461,7 +461,9 @@ class _Structure(ArchComponent.Component):
import Part,DraftGeomUtils
data = ArchComponent.Component.getExtrusionData(self,obj)
if data:
return data
if not isinstance(data[0],list):
# multifuses not considered here
return data
length = obj.Length.Value
width = obj.Width.Value
height = obj.Height.Value

View File

@@ -502,7 +502,9 @@ class _Wall(ArchComponent.Component):
import Part,DraftGeomUtils
data = ArchComponent.Component.getExtrusionData(self,obj)
if data:
return data
if not isinstance(data[0],list):
# multifuses not considered here
return data
length = obj.Length.Value
width = obj.Width.Value
height = obj.Height.Value

View File

@@ -56,7 +56,7 @@ class ArchWorkbench(Workbench):
"Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array",
"Draft_Clone"]
self.draftextratools = ["Draft_WireToBSpline","Draft_AddPoint","Draft_DelPoint","Draft_ShapeString",
"Draft_PathArray","Draft_Mirror"]
"Draft_PathArray","Draft_Mirror","Draft_Stretch"]
self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
"Draft_SelectGroup","Draft_SelectPlane",
"Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine",

View File

@@ -7,16 +7,41 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2816"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="preferences-arch.svg">
inkscape:version="0.48.5 r10040"
sodipodi:docname="ArchWorkbench.svg">
<defs
id="defs2818">
<linearGradient
inkscape:collect="always"
id="linearGradient3789">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop3791" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3793" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3781">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3783" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3785" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
@@ -108,6 +133,340 @@
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781"
id="linearGradient3787"
x1="93.501396"
y1="-0.52792466"
x2="92.882462"
y2="-7.2011309"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789"
id="linearGradient3795"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781"
id="linearGradient3804"
gradientUnits="userSpaceOnUse"
x1="93.501396"
y1="-0.52792466"
x2="92.814743"
y2="-5.3353744" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789"
id="linearGradient3806"
gradientUnits="userSpaceOnUse"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781-6"
id="linearGradient3804-3"
gradientUnits="userSpaceOnUse"
x1="93.501396"
y1="-0.52792466"
x2="92.882462"
y2="-7.2011309" />
<linearGradient
inkscape:collect="always"
id="linearGradient3781-6">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3783-7" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3785-5" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789-5"
id="linearGradient3806-3"
gradientUnits="userSpaceOnUse"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711" />
<linearGradient
inkscape:collect="always"
id="linearGradient3789-5">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop3791-6" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3793-2" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781-0"
id="linearGradient3804-36"
gradientUnits="userSpaceOnUse"
x1="93.501396"
y1="-0.52792466"
x2="92.882462"
y2="-7.2011309" />
<linearGradient
inkscape:collect="always"
id="linearGradient3781-0">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3783-6" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3785-2" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789-1"
id="linearGradient3806-6"
gradientUnits="userSpaceOnUse"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711" />
<linearGradient
inkscape:collect="always"
id="linearGradient3789-1">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop3791-8" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3793-7" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781-8"
id="linearGradient3804-2"
gradientUnits="userSpaceOnUse"
x1="93.501396"
y1="-0.52792466"
x2="92.814743"
y2="-5.3353744" />
<linearGradient
inkscape:collect="always"
id="linearGradient3781-8">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3783-9" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3785-7" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789-12"
id="linearGradient3806-36"
gradientUnits="userSpaceOnUse"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711" />
<linearGradient
inkscape:collect="always"
id="linearGradient3789-12">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop3791-9" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3793-3" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781-03"
id="linearGradient3804-5"
gradientUnits="userSpaceOnUse"
x1="93.501396"
y1="-0.52792466"
x2="92.814743"
y2="-5.3353744" />
<linearGradient
inkscape:collect="always"
id="linearGradient3781-03">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3783-61" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3785-0" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789-2"
id="linearGradient3806-63"
gradientUnits="userSpaceOnUse"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711" />
<linearGradient
inkscape:collect="always"
id="linearGradient3789-2">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop3791-0" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3793-6" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781-3"
id="linearGradient3804-9"
gradientUnits="userSpaceOnUse"
x1="93.501396"
y1="-0.52792466"
x2="92.814743"
y2="-5.3353744" />
<linearGradient
inkscape:collect="always"
id="linearGradient3781-3">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3783-74" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3785-52" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789-4"
id="linearGradient3806-5"
gradientUnits="userSpaceOnUse"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711" />
<linearGradient
inkscape:collect="always"
id="linearGradient3789-4">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop3791-7" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3793-4" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3781-84"
id="linearGradient3804-8"
gradientUnits="userSpaceOnUse"
x1="93.501396"
y1="-0.52792466"
x2="92.814743"
y2="-5.3353744" />
<linearGradient
inkscape:collect="always"
id="linearGradient3781-84">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3783-3" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3785-1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3789-9"
id="linearGradient3806-4"
gradientUnits="userSpaceOnUse"
x1="140.23918"
y1="124.16501"
x2="137.60997"
y2="117.06711" />
<linearGradient
inkscape:collect="always"
id="linearGradient3789-9">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop3791-2" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop3793-0" />
</linearGradient>
<filter
inkscape:collect="always"
id="filter4088"
x="-0.20830691"
width="1.4166138"
y="-0.64052987"
height="2.2810597">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="3.7687677"
id="feGaussianBlur4090" />
</filter>
<radialGradient
r="18.0625"
fy="41.625"
fx="25.1875"
cy="41.625"
cx="25.1875"
gradientTransform="matrix(1,0,0,0.32526,0,28.08607)"
gradientUnits="userSpaceOnUse"
id="radialGradient3169"
xlink:href="#linearGradient2269-0"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
id="linearGradient2269-0">
<stop
offset="0"
id="stop2271-4"
style="stop-color:#000000;stop-opacity:1;" />
<stop
offset="1"
id="stop2273-87"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
r="18.0625"
fy="41.625"
fx="25.1875"
cy="41.625"
cx="25.1875"
gradientTransform="matrix(1,0,0,0.32526,0,28.08607)"
gradientUnits="userSpaceOnUse"
id="radialGradient3027"
xlink:href="#linearGradient2269-0"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@@ -116,9 +475,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.75"
inkscape:cx="29.770815"
inkscape:cy="15.617924"
inkscape:zoom="3.202329"
inkscape:cx="5.0308728"
inkscape:cy="13.531895"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
@@ -130,11 +489,20 @@
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:object-nodes="true"
inkscape:window-width="1920"
inkscape:window-height="1057"
inkscape:window-width="800"
inkscape:window-height="837"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
inkscape:window-y="27"
inkscape:window-maximized="0"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid3005"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata2821">
<rdf:RDF>
@@ -144,6 +512,31 @@
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:creator>
<cc:Agent>
<dc:title>[triplus]</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>ArchWorkbench</dc:title>
<dc:date>2016-02-26</dc:date>
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier>FreeCAD/src/Mod/Arch/Resources/icons/ArchWorkbench.svg</dc:identifier>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<cc:license>https://www.gnu.org/copyleft/lesser.html</cc:license>
<dc:contributor>
<cc:Agent>
<dc:title>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -151,73 +544,123 @@
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<rect
style="color:#000000;fill:#969696;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.14880727;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="rect2840-3-4-0-8"
width="15.936329"
height="12.585408"
x="32.997906"
y="59.61282"
transform="matrix(0.7577145,-0.65258619,0,1,0,0)" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.03287753;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dashoffset:0"
id="rect2840"
width="24.362967"
height="12.482594"
x="2.3111296"
y="28.888771"
transform="matrix(0.93735109,0.34838619,0,1,0,0)" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.03287753;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dashoffset:0"
id="rect2840-9"
width="24.362967"
height="12.482594"
x="28.963516"
y="28.866888"
transform="matrix(0.93735109,0.34838619,0,1,0,0)" />
<path
style="color:#000000;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994000000003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0"
d="M 14.241527,19.294108 37.07818,27.781829 25.002993,38.181657 2.1663398,29.693936 14.241527,19.294108 z"
id="rect2840-3-5-3-5"
sodipodi:nodetypes="ccccc" />
<path
style="color:#000000;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994000000003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0"
d="M 39.224174,28.454727 62.060827,36.942448 49.98564,47.342276 27.148987,38.854555 39.224174,28.454727 z"
id="rect2840-3-5-3"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.60305344"
d="m 39.510988,41.014833 13.307194,-1.651197 4.898989,-4.035599 -20.638992,-7.649023 -8.324649,7.169655 10.757458,6.166164 z"
id="path3849"
sodipodi:nodetypes="cccccc" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.03287752999999993;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dashoffset:0"
id="rect2840-3"
width="24.362967"
height="12.482594"
x="17.78878"
y="13.847153"
transform="matrix(0.93735109,0.34838619,0,1,0,0)" />
<rect
style="color:#000000;fill:#969696;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.14880727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dashoffset:0"
id="rect2840-3-4"
width="15.936329"
height="12.585408"
x="65.968956"
y="90.392708"
transform="matrix(0.7577145,-0.65258619,0,1,0,0)" />
<rect
style="color:#000000;fill:#969696;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.14880727000000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dashoffset:0"
id="rect2840-3-4-0"
width="15.936329"
height="12.585408"
x="52.144951"
y="62.458496"
transform="matrix(0.7577145,-0.65258619,0,1,0,0)" />
<path
style="color:#000000;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994000000003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0"
d="M 28.74952,9.541872 51.586172,18.029593 39.510985,28.429421 16.674332,19.9417 28.74952,9.541872 z"
id="rect2840-3-5"
sodipodi:nodetypes="ccccc" />
id="path2267"
sodipodi:cx="25.1875"
sodipodi:cy="41.625"
transform="matrix(1.6349796,0,0,1.0662685,-9.1810484,1.3522451)"
d="m 43.25,41.625 a 18.0625,5.875 0 1 1 -36.125,0 18.0625,5.875 0 1 1 36.125,0 z"
sodipodi:type="arc"
style="opacity:0.26704544;color:#000000;fill:url(#radialGradient3027);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
sodipodi:ry="5.875"
sodipodi:rx="18.0625" />
<g
id="g3797"
transform="translate(-71.999999,3.9999969)">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect2840-3"
d="m 82.146381,-7.6186648 23.470399,-2.1767614 0,12 -23.470399,2.1767615 z"
style="color:#000000;fill:url(#linearGradient3804);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.06575513;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
transform="matrix(0.93735109,0.34838619,0,1,0,0)" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect2840-3-4-0"
d="m 130.65607,112.26435 15.8371,4.33507 0,12 -15.8371,-4.33507 z"
style="color:#000000;fill:url(#linearGradient3806);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29761457;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
transform="matrix(0.7577145,-0.65258619,0,1,0,0)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect2840-3-5"
d="m 89,15 22,6 -12,6 -22,-6 z"
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;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" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3009"
d="m 79,23.757214 0,7.80924 17.977903,4.804999 0.0134,-7.937907 z"
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3011"
d="m 100.99412,28.242488 0.049,7.529189 7.94611,-3.997583 0.0111,-7.540462 z"
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g3797-4"
transform="translate(-50,10)">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect2840-3-3"
d="m 82.146381,-7.6186648 23.470399,-2.1767614 0,12 -23.470399,2.1767615 z"
style="color:#000000;fill:url(#linearGradient3804-9);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.06575513;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
transform="matrix(0.93735109,0.34838619,0,1,0,0)" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect2840-3-4-0-0"
d="m 130.65607,112.26435 15.8371,4.33507 0,12 -15.8371,-4.33507 z"
style="color:#000000;fill:url(#linearGradient3806-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29761457;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
transform="matrix(0.7577145,-0.65258619,0,1,0,0)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect2840-3-5-7"
d="m 89,15 22,6 -12,6 -22,-6 z"
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;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" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3009-8"
d="m 79,23.757214 0,7.80924 17.977903,4.804999 0.0134,-7.937907 z"
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3011-6"
d="m 100.99412,28.242488 0.049,7.529189 7.94611,-3.997583 0.0111,-7.540462 z"
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g3797-6"
transform="translate(-61.000004,-5.0000014)">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect2840-3-8"
d="m 82.146381,-7.6186648 23.470399,-2.1767614 0,12 -23.470399,2.1767615 z"
style="color:#000000;fill:url(#linearGradient3804-8);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.06575513;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
transform="matrix(0.93735109,0.34838619,0,1,0,0)" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect2840-3-4-0-9"
d="m 130.65607,112.26435 15.8371,4.33507 0,12 -15.8371,-4.33507 z"
style="color:#000000;fill:url(#linearGradient3806-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29761457;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
transform="matrix(0.7577145,-0.65258619,0,1,0,0)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect2840-3-5-2"
d="m 89,15 22,6 -12,6 -22,-6 z"
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;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" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3009-6"
d="m 79,23.757214 0,7.80924 17.977903,4.804999 0.0134,-7.937907 z"
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3011-64"
d="m 100.99412,28.242488 0.049,7.529189 7.94611,-3.997583 0.0111,-7.540462 z"
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -1,112 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2985"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="Arch_ToggleIfcBrepFlag.svg">
<defs
id="defs2987">
<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="perspective2993" />
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg2985" version="1.1" inkscape:version="0.48.5 r10040" sodipodi:docname="Arch_3Views.svg">
<defs id="defs2987">
<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="perspective2993"/>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.7781746"
inkscape:cx="36.174025"
inkscape:cy="35.32679"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata2990">
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="2.9062855" inkscape:cx="55.690563" inkscape:cy="28.554415" inkscape:current-layer="g5297" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="800" inkscape:window-height="837" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="0" inkscape:snap-global="true">
<inkscape:grid type="xygrid" id="grid2992" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
</sodipodi:namedview>
<metadata id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
<dc:creator>
<cc:Agent>
<dc:title>[Yorik van Havre]</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>Arch_3Views</dc:title>
<dc:date>2014-08-29</dc:date>
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier>FreeCAD/src/Mod/Arch/Resources/icons/Arch_3Views.svg</dc:identifier>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<cc:license>https://www.gnu.org/copyleft/lesser.html</cc:license>
<dc:contributor>
<cc:Agent>
<dc:title>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g5297"
transform="translate(10.542319,6.1711137)">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3009-7-2"
d="m 18.878379,21.506082 -14.6157642,-8.452601 0,33.625092 14.4375222,8.931051 z"
style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#001100;stroke-width:1.85461509;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" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3009-6-0-8"
d="M 35.454793,12.397645 19.05662,21.328693 18.878379,55.649495 35.276551,46.758315 z"
style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#001100;stroke-width:1.85461509;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" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3029-8-6"
d="M 4.2626148,12.845174 20.482547,4.6317979 35.410233,12.446468 18.700138,21.855965 z"
style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#001100;stroke-width:1.85461509;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" />
<path
inkscape:connector-curvature="0"
id="path3055"
d="M 4.8166141,13.298648 18.315926,55.59649"
style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#001100;stroke-width:1.85461509;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" />
<path
inkscape:connector-curvature="0"
id="path3057"
d="M 18.95875,55.59649 35.157924,13.041519 5.7165682,12.784389"
style="color:#000000;fill:none;stroke:#001100;stroke-width:1.85461509;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" />
<g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer">
<g id="g5297" transform="translate(10.542319,6.1711137)">
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3009-7-2" d="m 18.457681,20.828886 -14,-8 0,34 14,8 z" style="color:#000000;fill:#73d216;fill-opacity:1;fill-rule:nonzero;stroke:#172a04;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"/>
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3009-6-0-8" d="m 34.457681,12.828886 -16,8 0,34 16,-8 z" style="color:#000000;fill:#4e9a06;fill-opacity:1;fill-rule:nonzero;stroke:#172a04;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"/>
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3029-8-6" d="m 4.457681,12.828886 16,-7.9999997 14,7.9999997 -16,8 z" style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:#172a04;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"/>
<path style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 6.475023,16.273948 -0.034684,29.38152 10.017342,5.757214 0,-29.410378 z" id="path2994" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path inkscape:connector-curvature="0" id="path3055" d="m 4.457681,12.828886 14,42" style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#172a04;stroke-width:1.85461509;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"/>
<path style="fill:none;stroke:#73d216;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 20.44752,22.035362 0,29.567809 12.052567,-6.000271 -0.01734,-29.550467 z" id="path2996" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path inkscape:connector-curvature="0" id="path3057" d="m 18.457681,54.828886 16,-42 -28.741113,-0.0445" style="color:#000000;fill:none;stroke:#172a04;stroke-width:1.85461509;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="ccc"/>
<g id="g3813" transform="translate(2,0)">
<path style="color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;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" d="m 42.485658,22.702462 -16,8 -0.02798,24.126424 16,0 z" id="path3009-6-0-8-3" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path2996-1" d="m 28.475497,31.908938 -0.01782,20.919948 12,0 0.05304,-26.902876 z" style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
</g>
<g id="g3856" transform="translate(2,0)">
<path style="color:#000000;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;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" d="m 8.457681,30.828886 -14,-8 0,32 14,0 z" id="path3009-7-2-2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path2994-7" d="m -3.524977,26.273949 -0.017342,26.554937 10,0 0,-20.826582 z" style="fill:#3465a4;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
</g>
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3029-8-6-7" d="m 4.457681,4.828886 16,-7.9999997 14,7.9999997 -16,8 z" style="color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;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"/>
</g>
<path
style="fill:#001bff;fill-opacity:1;stroke:#000111;stroke-width:1.85461509;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.9199897,29.964122 0,32.25 14.4999993,0 0.09375,-23.78125 -14.5937493,-8.46875 z"
id="path3009-7"
inkscape:connector-curvature="0" />
<path
style="fill:#001bff;fill-opacity:1;stroke:#000111;stroke-width:1.85461509;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 59.120601,28.536482 -16.40625,8.9375 -0.125,23.96875 16.34375,0 0.1875,-32.90625 z"
id="path3009-6-0"
inkscape:connector-curvature="0" />
<path
style="fill:#001bff;fill-opacity:1;stroke:#000111;stroke-width:1.85461509;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 16.990537,9.9593835 33.210469,1.7460079 48.138155,9.5606765 31.42806,18.970174 z"
id="path3029-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 38 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,100 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2985"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Arch_MeshToShape.svg">
<defs
id="defs2987">
<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="perspective2993" />
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg2985" version="1.1" inkscape:version="0.48.5 r10040" sodipodi:docname="Arch_SplitMesh.svg">
<defs id="defs2987">
<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="perspective2993"/>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.75"
inkscape:cx="33.087351"
inkscape:cy="35.659354"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="758"
inkscape:window-x="0"
inkscape:window-y="19"
inkscape:window-maximized="1" />
<metadata
id="metadata2990">
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="7.2080078" inkscape:cx="29.654752" inkscape:cy="19.51563" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="837" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1" inkscape:snap-global="true">
<inkscape:grid type="xygrid" id="grid2989" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
</sodipodi:namedview>
<metadata id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
<dc:creator>
<cc:Agent>
<dc:title>[wmayer]</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>Arch_SplitMesh</dc:title>
<dc:date>2011-10-10</dc:date>
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier>FreeCAD/src/Mod/Arch/Resources/icons/Arch_SplitMesh.svg</dc:identifier>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<cc:license>https://www.gnu.org/copyleft/lesser.html</cc:license>
<dc:contributor>
<cc:Agent>
<dc:title>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
style="fill:#00ff00;fill-opacity:1;stroke:#001100;stroke-width:1.855;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 45.852797,39.834161 -10.677409,-5.924349 0,14.19608 10.547196,6.25969 z"
id="path3009-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#00ff00;fill-opacity:1;stroke:#001100;stroke-width:1.855;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 57.962541,33.630362 45.983009,39.890051 45.852797,54.393528 57.832328,48.161784 z"
id="path3009-6-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#00ff00;fill-opacity:1;stroke:#001100;stroke-width:1.855;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 35.175388,33.853922 47.024707,28.097243 57.929988,33.574472 45.722585,40.1695 z"
id="path3029-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#00ff00;fill-opacity:1;stroke:#001100;stroke-width:1.855;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 18.308475,23.054466 7.537144,17.580668 8.288519,52.952575 18.272184,60.203474 z"
id="path3009"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#00ff00;fill-opacity:1;stroke:#001100;stroke-width:1.855;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 49.57517,6.9475618 18.070607,23.024239 c 0.02693,12.383706 0.163707,26.009665 0.205464,37.147201 l 11.985432,-6.220404 0.205465,-22.603721 18.971226,-9.878176 z"
id="path3009-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#00ff00;fill-opacity:1;stroke:#001100;stroke-width:1.855;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 7.6310658,17.614886 39.016131,2.3065574 49.545724,6.8826869 18.272185,22.939255 z"
id="path3029"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer">
<path style="fill:#73d216;fill-opacity:1;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 49,45 -12,-6 0,16 12,6 z" id="path3009-9" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:#4e9a06;fill-opacity:1;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 61,39 -12,6 0,16 12,-6 z" id="path3009-6-7" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:#8ae234;fill-opacity:1;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 37,39 12,-6 12,6 -12,6 z" id="path3029-1" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:#73d216;fill-opacity:1;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="M 19,23 3,15 3,51 19,61 z" id="path3009" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:#4e9a06;fill-opacity:1;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="M 49,11 19,23 19,61 31,53 31,31 49,23 z" id="path3009-6" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/>
<path style="fill:#8ae234;fill-opacity:1;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="M 3,15 33,3 49,11 19,23 z" id="path3029" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 5.0346836,18.231134 0,31.601274 L 17,57.33532 17.034684,24.231134 z" id="path2991" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 19,23 3,51" id="path2993" inkscape:connector-curvature="0"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 3,15 49,11" id="path2995" inkscape:connector-curvature="0"/>
<path style="fill:none;stroke:#73d216;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 46.965316,13.965316 0,7.757215 L 29,29.693673 l 0.03468,22.208102 -8,5.306327 L 21,24.312153 z" id="path2997" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 31,31 19,23" id="path2993-3" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 49,12 31,31" id="path2993-6" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 31,31 19,61" id="path2993-7" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
<path style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 39,42.215199 0,11.545077 7.975475,3.969949 L 47,46.288774 z" id="path3031" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:none;stroke:#73d216;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 58.985149,42.241106 0,11.545077 -7.975475,3.969949 -0.02453,-11.441451 z" id="path3031-5" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 61,39 36.9019,39.04905" id="path2993-7-3" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 61,39 49,61" id="path2993-7-5" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
<path style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 49,45 37,55" id="path2993-7-6" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

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