Merge branch 'master' into path_helix
@@ -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()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -37,7 +37,7 @@ EXTENSION_PROPERTY_SOURCE(App::DocumentObjectExtension, App::Extension)
|
||||
|
||||
DocumentObjectExtension::DocumentObjectExtension()
|
||||
{
|
||||
initExtension(App::DocumentObjectExtension::getExtensionClassTypeId());
|
||||
initExtensionType(App::DocumentObjectExtension::getExtensionClassTypeId());
|
||||
}
|
||||
|
||||
DocumentObjectExtension::~DocumentObjectExtension()
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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 ---------------------------------------------------------
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
using namespace App;
|
||||
|
||||
|
||||
PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::DocumentObject)
|
||||
PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::GeoFeature)
|
||||
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -61,6 +61,11 @@
|
||||
<string>Black</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text" >
|
||||
<string>Transparent</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -69,7 +69,7 @@ public:
|
||||
void pause();
|
||||
void resume();
|
||||
|
||||
private slots:
|
||||
private Q_SLOTS:
|
||||
void readClient();
|
||||
void discardClient();
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -48,7 +48,7 @@ public:
|
||||
SensorManager(void);
|
||||
~SensorManager();
|
||||
|
||||
public slots:
|
||||
public Q_SLOTS:
|
||||
void idleTimeout(void);
|
||||
void delayTimeout(void);
|
||||
void timerQueueTimeout(void);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -37,7 +37,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderExtension, App::Extension)
|
||||
|
||||
ViewProviderExtension::ViewProviderExtension()
|
||||
{
|
||||
initExtension(Gui::ViewProviderExtension::getExtensionClassTypeId());
|
||||
initExtensionType(Gui::ViewProviderExtension::getExtensionClassTypeId());
|
||||
}
|
||||
|
||||
ViewProviderExtension::~ViewProviderExtension()
|
||||
|
||||
@@ -97,7 +97,7 @@ public:
|
||||
|
||||
ViewProviderExtensionPythonT() {
|
||||
ExtensionT::m_isPythonExtension = true;
|
||||
ExtensionT::initExtension(ViewProviderExtensionPythonT::getExtensionClassTypeId());
|
||||
ExtensionT::initExtensionType(ViewProviderExtensionPythonT::getExtensionClassTypeId());
|
||||
|
||||
EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object()));
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -45,7 +45,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderGroupExtension, Gui::ViewProviderExte
|
||||
|
||||
ViewProviderGroupExtension::ViewProviderGroupExtension() : visible(false)
|
||||
{
|
||||
initExtension(ViewProviderGroupExtension::getExtensionClassTypeId());
|
||||
initExtensionType(ViewProviderGroupExtension::getExtensionClassTypeId());
|
||||
}
|
||||
|
||||
ViewProviderGroupExtension::~ViewProviderGroupExtension()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 |
@@ -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 |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 15 KiB |
@@ -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 |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |