Material: Material editor enhancements (#11764)
Continues the work of the material subsystem improvements. Add support for embedded SVG files. These are not the same as image files so need to be handled differently. Add the ability to filter materials in the editor when called from code. This allows programs to select objects supporting specific models, complete models, older models, etc. Updated tests, and refactored code. New models and materials supporting patterns such as used by the TechDraw workbench. fixes #11686 - checks for the presense of a model property before assinging a value. This can happen when a required model definition is not available. --------- Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
This commit is contained in:
@@ -69,6 +69,8 @@ SET(Material_SRCS
|
||||
FolderTree.h
|
||||
MaterialConfigLoader.cpp
|
||||
MaterialConfigLoader.h
|
||||
MaterialFilter.cpp
|
||||
MaterialFilter.h
|
||||
MaterialLibrary.cpp
|
||||
MaterialLibrary.h
|
||||
MaterialLoader.cpp
|
||||
@@ -103,7 +105,18 @@ endif(FREECAD_USE_PCH)
|
||||
add_library(Material SHARED ${Material_SRCS})
|
||||
target_link_libraries(Material ${Material_LIBS})
|
||||
|
||||
SET_BIN_DIR(Material Material /Mod/Material)
|
||||
# SET_BIN_DIR(Material Material /Mod/Material)
|
||||
SET_BIN_DIR(Material Material)
|
||||
SET_PYTHON_PREFIX_SUFFIX(Material)
|
||||
|
||||
INSTALL(TARGETS Material DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
# INSTALL(TARGETS Material DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
if(WIN32)
|
||||
INSTALL(TARGETS Material
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
else(WIN32)
|
||||
INSTALL(TARGETS Material
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
endif(WIN32)
|
||||
|
||||
74
src/Mod/Material/App/MaterialFilter.cpp
Normal file
74
src/Mod/Material/App/MaterialFilter.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2023 David Carter <dcarter@david.carter.ca> *
|
||||
* *
|
||||
* This file is part of FreeCAD. *
|
||||
* *
|
||||
* FreeCAD is free software: you can redistribute it and/or modify it *
|
||||
* under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation, either version 2.1 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* FreeCAD is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||
* Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with FreeCAD. If not, see *
|
||||
* <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
**************************************************************************/
|
||||
|
||||
#include "PreCompiled.h"
|
||||
#ifndef _PreComp_
|
||||
#endif
|
||||
|
||||
#include <App/Application.h>
|
||||
|
||||
#include "MaterialFilter.h"
|
||||
#include "Materials.h"
|
||||
|
||||
|
||||
using namespace Materials;
|
||||
|
||||
TYPESYSTEM_SOURCE(Materials::MaterialFilter, Base::BaseClass)
|
||||
|
||||
MaterialFilter::MaterialFilter()
|
||||
: _includeFolders(true)
|
||||
, _includeLegacy(true)
|
||||
, _required()
|
||||
, _requiredComplete()
|
||||
{}
|
||||
|
||||
bool MaterialFilter::modelIncluded(const std::shared_ptr<Material>& material) const
|
||||
{
|
||||
for (const auto& complete : _requiredComplete) {
|
||||
if (!material->isModelComplete(complete)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (const auto& required : _required) {
|
||||
if (!material->hasModel(required)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void MaterialFilter::addRequired(const QString& uuid)
|
||||
{
|
||||
// Ignore any uuids already present
|
||||
if (!_requiredComplete.contains(uuid)) {
|
||||
_required.insert(uuid);
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialFilter::addRequiredComplete(const QString& uuid)
|
||||
{
|
||||
if (_required.contains(uuid)) {
|
||||
// Completeness takes priority
|
||||
_required.remove(uuid);
|
||||
}
|
||||
_requiredComplete.insert(uuid);
|
||||
}
|
||||
96
src/Mod/Material/App/MaterialFilter.h
Normal file
96
src/Mod/Material/App/MaterialFilter.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2023 David Carter <dcarter@david.carter.ca> *
|
||||
* *
|
||||
* This file is part of FreeCAD. *
|
||||
* *
|
||||
* FreeCAD is free software: you can redistribute it and/or modify it *
|
||||
* under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation, either version 2.1 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* FreeCAD is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||
* Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with FreeCAD. If not, see *
|
||||
* <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
**************************************************************************/
|
||||
|
||||
#ifndef MATERIAL_MATERIALFILTER_H
|
||||
#define MATERIAL_MATERIALFILTER_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <QSet>
|
||||
#include <QString>
|
||||
|
||||
#include <Base/BaseClass.h>
|
||||
|
||||
#include <Mod/Material/MaterialGlobal.h>
|
||||
|
||||
namespace Materials
|
||||
{
|
||||
|
||||
class Material;
|
||||
|
||||
/*
|
||||
* This class is used to filter materials during a material tree search
|
||||
*
|
||||
*/
|
||||
class MaterialsExport MaterialFilter: public Base::BaseClass
|
||||
{
|
||||
TYPESYSTEM_HEADER_WITH_OVERRIDE();
|
||||
|
||||
public:
|
||||
MaterialFilter();
|
||||
virtual ~MaterialFilter() = default;
|
||||
|
||||
/* Indicates if we should include empty folders
|
||||
*
|
||||
* Default is to include empty folders
|
||||
*/
|
||||
bool includeEmptyFolders() const
|
||||
{
|
||||
return _includeFolders;
|
||||
}
|
||||
void setIncludeEmptyFolders(bool include)
|
||||
{
|
||||
_includeFolders = include;
|
||||
}
|
||||
|
||||
/* Indicates if we should include materials in the older format
|
||||
*
|
||||
* Default is to include legacy format materials
|
||||
*/
|
||||
bool includeLegacy() const
|
||||
{
|
||||
return _includeLegacy;
|
||||
}
|
||||
void setIncludeLegacy(bool legacy)
|
||||
{
|
||||
_includeLegacy = legacy;
|
||||
}
|
||||
|
||||
/* Sets of model UUIDs that should be included. Optionally, we can
|
||||
* specify models that must contain values for all properties.
|
||||
*
|
||||
* Models only need to be included in one set.
|
||||
*/
|
||||
bool modelIncluded(const std::shared_ptr<Material>& material) const;
|
||||
|
||||
void addRequired(const QString& uuid);
|
||||
void addRequiredComplete(const QString& uuid);
|
||||
|
||||
private:
|
||||
bool _includeFolders;
|
||||
bool _includeLegacy;
|
||||
QSet<QString> _required;
|
||||
QSet<QString> _requiredComplete;
|
||||
};
|
||||
|
||||
} // namespace Materials
|
||||
|
||||
#endif // MATERIAL_MATERIALFILTER_H
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include <App/Application.h>
|
||||
|
||||
#include "MaterialFilter.h"
|
||||
#include "MaterialLibrary.h"
|
||||
#include "MaterialLoader.h"
|
||||
#include "MaterialManager.h"
|
||||
@@ -264,8 +265,25 @@ QString MaterialLibrary::getUUIDFromPath(const QString& path) const
|
||||
}
|
||||
}
|
||||
|
||||
bool MaterialLibrary::materialInTree(const std::shared_ptr<Material>& material,
|
||||
const MaterialFilter* filter) const
|
||||
{
|
||||
if (!filter) {
|
||||
// If there's no filter we always include
|
||||
return true;
|
||||
}
|
||||
|
||||
// filter out old format files
|
||||
if (material->isOldFormat() && !filter->includeLegacy()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// filter based on models
|
||||
return filter->modelIncluded(material);
|
||||
}
|
||||
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>>
|
||||
MaterialLibrary::getMaterialTree() const
|
||||
MaterialLibrary::getMaterialTree(const MaterialFilter* filter) const
|
||||
{
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> materialTree =
|
||||
std::make_shared<std::map<QString, std::shared_ptr<MaterialTreeNode>>>();
|
||||
@@ -274,20 +292,50 @@ MaterialLibrary::getMaterialTree() const
|
||||
auto filename = it.first;
|
||||
auto material = it.second;
|
||||
|
||||
QStringList list = filename.split(QString::fromStdString("/"));
|
||||
if (materialInTree(material, filter)) {
|
||||
QStringList list = filename.split(QString::fromStdString("/"));
|
||||
|
||||
// Start at the root
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> node = materialTree;
|
||||
for (auto& itp : list) {
|
||||
if (itp.endsWith(QString::fromStdString(".FCMat"))) {
|
||||
std::shared_ptr<MaterialTreeNode> child = std::make_shared<MaterialTreeNode>();
|
||||
child->setData(material);
|
||||
(*node)[itp] = child;
|
||||
// Start at the root
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> node =
|
||||
materialTree;
|
||||
for (auto& itp : list) {
|
||||
if (itp.endsWith(QString::fromStdString(".FCMat"))) {
|
||||
std::shared_ptr<MaterialTreeNode> child = std::make_shared<MaterialTreeNode>();
|
||||
child->setData(material);
|
||||
(*node)[itp] = child;
|
||||
}
|
||||
else {
|
||||
// Add the folder only if it's not already there
|
||||
if (node->count(itp) == 0) {
|
||||
auto mapPtr = std::make_shared<
|
||||
std::map<QString, std::shared_ptr<MaterialTreeNode>>>();
|
||||
std::shared_ptr<MaterialTreeNode> child =
|
||||
std::make_shared<MaterialTreeNode>();
|
||||
child->setFolder(mapPtr);
|
||||
(*node)[itp] = child;
|
||||
node = mapPtr;
|
||||
}
|
||||
else {
|
||||
node = (*node)[itp]->getFolder();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
}
|
||||
}
|
||||
|
||||
// Empty folders aren't included in _materialPathMap, so we add them by looking at the file
|
||||
// system
|
||||
if (!filter || filter->includeEmptyFolders()) {
|
||||
auto folderList = MaterialLoader::getMaterialFolders(*this);
|
||||
for (auto& folder : *folderList) {
|
||||
QStringList list = folder.split(QString::fromStdString("/"));
|
||||
|
||||
// Start at the root
|
||||
auto node = materialTree;
|
||||
for (auto& itp : list) {
|
||||
// Add the folder only if it's not already there
|
||||
if (node->count(itp) == 0) {
|
||||
auto mapPtr =
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> mapPtr =
|
||||
std::make_shared<std::map<QString, std::shared_ptr<MaterialTreeNode>>>();
|
||||
std::shared_ptr<MaterialTreeNode> child = std::make_shared<MaterialTreeNode>();
|
||||
child->setFolder(mapPtr);
|
||||
@@ -301,30 +349,6 @@ MaterialLibrary::getMaterialTree() const
|
||||
}
|
||||
}
|
||||
|
||||
// Empty folders aren't included in _materialPathMap, so we add them by looking at the file
|
||||
// system
|
||||
auto folderList = MaterialLoader::getMaterialFolders(*this);
|
||||
for (auto& folder : *folderList) {
|
||||
QStringList list = folder.split(QString::fromStdString("/"));
|
||||
|
||||
// Start at the root
|
||||
auto node = materialTree;
|
||||
for (auto& itp : list) {
|
||||
// Add the folder only if it's not already there
|
||||
if (node->count(itp) == 0) {
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> mapPtr =
|
||||
std::make_shared<std::map<QString, std::shared_ptr<MaterialTreeNode>>>();
|
||||
std::shared_ptr<MaterialTreeNode> child = std::make_shared<MaterialTreeNode>();
|
||||
child->setFolder(mapPtr);
|
||||
(*node)[itp] = child;
|
||||
node = mapPtr;
|
||||
}
|
||||
else {
|
||||
node = (*node)[itp]->getFolder();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return materialTree;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ namespace Materials
|
||||
|
||||
class Material;
|
||||
class MaterialManager;
|
||||
class MaterialFilter;
|
||||
|
||||
class MaterialsExport MaterialLibrary: public LibraryBase,
|
||||
public std::enable_shared_from_this<MaterialLibrary>
|
||||
@@ -77,7 +78,8 @@ public:
|
||||
bool fileExists(const QString& path) const;
|
||||
std::shared_ptr<Material> addMaterial(const std::shared_ptr<Material>& material,
|
||||
const QString& path);
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> getMaterialTree() const;
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>>
|
||||
getMaterialTree(const MaterialFilter* filter = nullptr) const;
|
||||
|
||||
bool isReadOnly() const
|
||||
{
|
||||
@@ -96,6 +98,8 @@ protected:
|
||||
|
||||
void updatePaths(const QString& oldPath, const QString& newPath);
|
||||
QString getUUIDFromPath(const QString& path) const;
|
||||
bool materialInTree(const std::shared_ptr<Material>& material,
|
||||
const MaterialFilter* filter) const;
|
||||
|
||||
bool _readOnly;
|
||||
std::unique_ptr<std::map<QString, std::shared_ptr<Material>>> _materialPathMap;
|
||||
@@ -111,7 +115,7 @@ public:
|
||||
const QString& dir,
|
||||
const QString& icon,
|
||||
bool readOnly = true);
|
||||
~MaterialExternalLibrary() = default;
|
||||
~MaterialExternalLibrary() override = default;
|
||||
};
|
||||
|
||||
} // namespace Materials
|
||||
|
||||
@@ -40,6 +40,8 @@ namespace fs = boost::filesystem;
|
||||
namespace Materials
|
||||
{
|
||||
|
||||
class MaterialFilter;
|
||||
|
||||
class MaterialsExport MaterialManager: public Base::BaseClass
|
||||
{
|
||||
TYPESYSTEM_HEADER_WITH_OVERRIDE();
|
||||
@@ -63,9 +65,10 @@ public:
|
||||
// Library management
|
||||
std::shared_ptr<std::list<std::shared_ptr<MaterialLibrary>>> getMaterialLibraries() const;
|
||||
std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>>
|
||||
getMaterialTree(const std::shared_ptr<MaterialLibrary>& library) const
|
||||
getMaterialTree(const std::shared_ptr<MaterialLibrary>& library,
|
||||
const MaterialFilter* filter = nullptr) const
|
||||
{
|
||||
return library->getMaterialTree();
|
||||
return library->getMaterialTree(filter);
|
||||
}
|
||||
std::shared_ptr<std::list<QString>>
|
||||
getMaterialFolders(const std::shared_ptr<MaterialLibrary>& library) const;
|
||||
|
||||
@@ -41,6 +41,25 @@ using namespace Materials;
|
||||
|
||||
TYPESYSTEM_SOURCE(Materials::MaterialValue, Base::BaseClass)
|
||||
|
||||
QMap<QString, MaterialValue::ValueType> MaterialValue::_typeMap {
|
||||
{QString::fromStdString("String"), String},
|
||||
{QString::fromStdString("Boolean"), Boolean},
|
||||
{QString::fromStdString("Integer"), Integer},
|
||||
{QString::fromStdString("Float"), Float},
|
||||
{QString::fromStdString("Quantity"), Quantity},
|
||||
{QString::fromStdString("Distribution"), Distribution},
|
||||
{QString::fromStdString("List"), List},
|
||||
{QString::fromStdString("2DArray"), Array2D},
|
||||
{QString::fromStdString("3DArray"), Array3D},
|
||||
{QString::fromStdString("Color"), Color},
|
||||
{QString::fromStdString("Image"), Image},
|
||||
{QString::fromStdString("File"), File},
|
||||
{QString::fromStdString("URL"), URL},
|
||||
{QString::fromStdString("MultiLineString"), MultiLineString},
|
||||
{QString::fromStdString("FileList"), FileList},
|
||||
{QString::fromStdString("ImageList"), ImageList},
|
||||
{QString::fromStdString("SVG"), SVG}};
|
||||
|
||||
MaterialValue::MaterialValue()
|
||||
: _valueType(None)
|
||||
{
|
||||
@@ -93,10 +112,16 @@ QString MaterialValue::escapeString(const QString& source)
|
||||
return res;
|
||||
}
|
||||
|
||||
MaterialValue::ValueType MaterialValue::mapType(const QString& stringType)
|
||||
{
|
||||
// If not found, return None
|
||||
return _typeMap.value(stringType, None);
|
||||
}
|
||||
|
||||
void MaterialValue::setInitialValue(ValueType inherited)
|
||||
{
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
if (_valueType == String || _valueType == MultiLineString) {
|
||||
if (_valueType == String || _valueType == MultiLineString || _valueType == SVG) {
|
||||
_value = QVariant(static_cast<QVariant::Type>(QMetaType::QString));
|
||||
}
|
||||
else if (_valueType == Boolean) {
|
||||
@@ -121,7 +146,7 @@ void MaterialValue::setInitialValue(ValueType inherited)
|
||||
_value = QVariant(static_cast<QVariant::Type>(QMetaType::QString));
|
||||
}
|
||||
#else
|
||||
if (_valueType == String || _valueType == MultiLineString) {
|
||||
if (_valueType == String || _valueType == MultiLineString || _valueType == SVG) {
|
||||
_value = QVariant(QMetaType(QMetaType::QString));
|
||||
}
|
||||
else if (_valueType == Boolean) {
|
||||
@@ -237,7 +262,7 @@ QString MaterialValue::getYAMLStringImageList() const
|
||||
QString MaterialValue::getYAMLStringMultiLine() const
|
||||
{
|
||||
QString yaml;
|
||||
yaml = QString::fromStdString(" >2");
|
||||
yaml = QString::fromStdString(" |2");
|
||||
auto list =
|
||||
getValue().toString().split(QRegExp(QString::fromStdString("[\r\n]")), Qt::SkipEmptyParts);
|
||||
for (auto& it : list) {
|
||||
@@ -259,7 +284,7 @@ QString MaterialValue::getYAMLString() const
|
||||
if (getType() == MaterialValue::ImageList) {
|
||||
return getYAMLStringImageList();
|
||||
}
|
||||
if (getType() == MaterialValue::MultiLineString) {
|
||||
if (getType() == MaterialValue::MultiLineString || getType() == MaterialValue::SVG) {
|
||||
return getYAMLStringMultiLine();
|
||||
}
|
||||
if (getType() == MaterialValue::Quantity) {
|
||||
@@ -272,16 +297,6 @@ QString MaterialValue::getYAMLString() const
|
||||
yaml += QString::fromLatin1("%1").arg(value.toFloat(), 0, 'g', 6);
|
||||
}
|
||||
}
|
||||
else if (getType() == MaterialValue::MultiLineString) {
|
||||
yaml = QString::fromLatin1(">2");
|
||||
auto list =
|
||||
getValue().toString().split(QRegularExpression(QString::fromLatin1("[\r\n]")),
|
||||
Qt::SkipEmptyParts);
|
||||
for (auto& it : list) {
|
||||
yaml += QString::fromLatin1("\n ") + it;
|
||||
}
|
||||
return yaml;
|
||||
}
|
||||
else if (getType() == MaterialValue::List) {
|
||||
for (auto& it : getList()) {
|
||||
yaml += QString::fromLatin1("\n - \"") + escapeString(it.toString())
|
||||
@@ -293,7 +308,7 @@ QString MaterialValue::getYAMLString() const
|
||||
yaml += getValue().toString();
|
||||
}
|
||||
}
|
||||
yaml = QString::fromLatin1("\"") + escapeString(yaml) + QString::fromLatin1("\"");
|
||||
yaml = QString::fromLatin1(" \"") + escapeString(yaml) + QString::fromLatin1("\"");
|
||||
return yaml;
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,8 @@ public:
|
||||
URL = 13,
|
||||
MultiLineString = 14,
|
||||
FileList = 15,
|
||||
ImageList = 16
|
||||
ImageList = 16,
|
||||
SVG
|
||||
};
|
||||
MaterialValue();
|
||||
explicit MaterialValue(const MaterialValue& other);
|
||||
@@ -104,6 +105,7 @@ public:
|
||||
|
||||
virtual QString getYAMLString() const;
|
||||
static QString escapeString(const QString& source);
|
||||
static ValueType mapType(const QString& stringType);
|
||||
|
||||
protected:
|
||||
MaterialValue(ValueType type, ValueType inherited);
|
||||
@@ -121,6 +123,9 @@ protected:
|
||||
|
||||
ValueType _valueType;
|
||||
QVariant _value;
|
||||
|
||||
private:
|
||||
static QMap<QString, ValueType> _typeMap;
|
||||
};
|
||||
|
||||
class MaterialsExport Material2DArray: public MaterialValue
|
||||
|
||||
@@ -148,60 +148,23 @@ void MaterialProperty::setPropertyType(const QString& type)
|
||||
|
||||
void MaterialProperty::setType(const QString& type)
|
||||
{
|
||||
if (type == QString::fromStdString("String")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::String);
|
||||
auto mappedType = MaterialValue::mapType(type);
|
||||
if (mappedType == MaterialValue::None) {
|
||||
throw UnknownValueType();
|
||||
}
|
||||
else if (type == QString::fromStdString("Boolean")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::Boolean);
|
||||
}
|
||||
else if (type == QString::fromStdString("Integer")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::Integer);
|
||||
}
|
||||
else if (type == QString::fromStdString("Float")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::Float);
|
||||
}
|
||||
else if (type == QString::fromStdString("URL")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::URL);
|
||||
}
|
||||
else if (type == QString::fromStdString("Quantity")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::Quantity);
|
||||
}
|
||||
else if (type == QString::fromStdString("Color")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::Color);
|
||||
}
|
||||
else if (type == QString::fromStdString("File")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::File);
|
||||
}
|
||||
else if (type == QString::fromStdString("Image")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::Image);
|
||||
}
|
||||
else if (type == QString::fromStdString("List")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::List);
|
||||
}
|
||||
else if (type == QString::fromStdString("FileList")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::FileList);
|
||||
}
|
||||
else if (type == QString::fromStdString("ImageList")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::ImageList);
|
||||
}
|
||||
else if (type == QString::fromStdString("MultiLineString")) {
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::MultiLineString);
|
||||
}
|
||||
else if (type == QString::fromStdString("2DArray")) {
|
||||
if (mappedType == MaterialValue::Array2D) {
|
||||
auto arrayPtr = std::make_shared<Material2DArray>();
|
||||
arrayPtr->setColumns(columns());
|
||||
_valuePtr = arrayPtr;
|
||||
}
|
||||
else if (type == QString::fromStdString("3DArray")) {
|
||||
else if (mappedType == MaterialValue::Array3D) {
|
||||
auto arrayPtr = std::make_shared<Material3DArray>();
|
||||
// First column is third dimension
|
||||
arrayPtr->setColumns(columns() - 1);
|
||||
_valuePtr = arrayPtr;
|
||||
}
|
||||
else {
|
||||
// Error. Throw something
|
||||
_valuePtr = std::make_shared<MaterialValue>(MaterialValue::None);
|
||||
throw UnknownValueType();
|
||||
_valuePtr = std::make_shared<MaterialValue>(mappedType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -457,16 +420,16 @@ Material::Material(const Material& other)
|
||||
, _editState(other._editState)
|
||||
{
|
||||
for (auto& it : other._tags) {
|
||||
_tags.push_back(it);
|
||||
_tags.insert(it);
|
||||
}
|
||||
for (auto& it : other._physicalUuids) {
|
||||
_physicalUuids.push_back(it);
|
||||
_physicalUuids.insert(it);
|
||||
}
|
||||
for (auto& it : other._appearanceUuids) {
|
||||
_appearanceUuids.push_back(it);
|
||||
_appearanceUuids.insert(it);
|
||||
}
|
||||
for (auto& it : other._allUuids) {
|
||||
_allUuids.push_back(it);
|
||||
_allUuids.insert(it);
|
||||
}
|
||||
for (auto& it : other._physical) {
|
||||
MaterialProperty prop(it.second);
|
||||
@@ -498,7 +461,7 @@ QString Material::getAuthorAndLicense() const
|
||||
|
||||
void Material::addModel(const QString& uuid)
|
||||
{
|
||||
for (QString& modelUUID : _allUuids) {
|
||||
for (const auto& modelUUID : qAsConst(_allUuids)) {
|
||||
if (modelUUID == uuid) {
|
||||
return;
|
||||
}
|
||||
@@ -582,9 +545,9 @@ void Material::setEditState(ModelEdit newState)
|
||||
}
|
||||
}
|
||||
|
||||
void Material::removeUUID(QStringList& uuidList, const QString& uuid)
|
||||
void Material::removeUUID(QSet<QString>& uuidList, const QString& uuid)
|
||||
{
|
||||
uuidList.removeAll(uuid);
|
||||
uuidList.remove(uuid);
|
||||
}
|
||||
|
||||
void Material::addPhysical(const QString& uuid)
|
||||
@@ -605,7 +568,7 @@ void Material::addPhysical(const QString& uuid)
|
||||
removeUUID(_physicalUuids, it);
|
||||
}
|
||||
|
||||
_physicalUuids.push_back(uuid);
|
||||
_physicalUuids.insert(uuid);
|
||||
addModel(uuid);
|
||||
setEditStateExtend();
|
||||
|
||||
@@ -637,7 +600,7 @@ void Material::removePhysical(const QString& uuid)
|
||||
|
||||
// If it's an inherited model, do nothing
|
||||
bool inherited = true;
|
||||
for (auto& it : _physicalUuids) {
|
||||
for (const auto& it : qAsConst(_physicalUuids)) {
|
||||
if (it == uuid) {
|
||||
inherited = false;
|
||||
break;
|
||||
@@ -689,7 +652,7 @@ void Material::addAppearance(const QString& uuid)
|
||||
removeUUID(_appearanceUuids, it);
|
||||
}
|
||||
|
||||
_appearanceUuids.push_back(uuid);
|
||||
_appearanceUuids.insert(uuid);
|
||||
addModel(uuid);
|
||||
setEditStateExtend();
|
||||
|
||||
@@ -715,7 +678,7 @@ void Material::removeAppearance(const QString& uuid)
|
||||
|
||||
// If it's an inherited model, do nothing
|
||||
bool inherited = true;
|
||||
for (auto& it : _appearanceUuids) {
|
||||
for (const auto& it : qAsConst(_appearanceUuids)) {
|
||||
if (it == uuid) {
|
||||
inherited = false;
|
||||
break;
|
||||
@@ -790,56 +753,72 @@ void Material::setPhysicalValue(const QString& name, const QString& value)
|
||||
{
|
||||
setPhysicalEditState(name);
|
||||
|
||||
_physical[name]->setValue(value); // may not be a string type, conversion may be required
|
||||
if (hasPhysicalProperty(name)) {
|
||||
_physical[name]->setValue(value); // may not be a string type, conversion may be required
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setPhysicalValue(const QString& name, int value)
|
||||
{
|
||||
setPhysicalEditState(name);
|
||||
|
||||
_physical[name]->setInt(value);
|
||||
if (hasPhysicalProperty(name)) {
|
||||
_physical[name]->setInt(value);
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setPhysicalValue(const QString& name, double value)
|
||||
{
|
||||
setPhysicalEditState(name);
|
||||
|
||||
_physical[name]->setFloat(value);
|
||||
if (hasPhysicalProperty(name)) {
|
||||
_physical[name]->setFloat(value);
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setPhysicalValue(const QString& name, const Base::Quantity& value)
|
||||
{
|
||||
setPhysicalEditState(name);
|
||||
|
||||
_physical[name]->setQuantity(value);
|
||||
if (hasPhysicalProperty(name)) {
|
||||
_physical[name]->setQuantity(value);
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setPhysicalValue(const QString& name, const std::shared_ptr<MaterialValue>& value)
|
||||
{
|
||||
setPhysicalEditState(name);
|
||||
|
||||
_physical[name]->setValue(value);
|
||||
if (hasPhysicalProperty(name)) {
|
||||
_physical[name]->setValue(value);
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setPhysicalValue(const QString& name, const std::shared_ptr<QList<QVariant>>& value)
|
||||
{
|
||||
setPhysicalEditState(name);
|
||||
|
||||
_physical[name]->setList(*value);
|
||||
if (hasPhysicalProperty(name)) {
|
||||
_physical[name]->setList(*value);
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setAppearanceValue(const QString& name, const QString& value)
|
||||
{
|
||||
setAppearanceEditState(name);
|
||||
|
||||
_appearance[name]->setValue(value); // may not be a string type, conversion may be required
|
||||
if (hasAppearanceProperty(name)) {
|
||||
_appearance[name]->setValue(value); // may not be a string type, conversion may be required
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setAppearanceValue(const QString& name, const std::shared_ptr<MaterialValue>& value)
|
||||
{
|
||||
setAppearanceEditState(name);
|
||||
|
||||
_appearance[name]->setValue(value);
|
||||
if (hasAppearanceProperty(name)) {
|
||||
_appearance[name]->setValue(value);
|
||||
}
|
||||
}
|
||||
|
||||
void Material::setAppearanceValue(const QString& name,
|
||||
@@ -847,7 +826,9 @@ void Material::setAppearanceValue(const QString& name,
|
||||
{
|
||||
setAppearanceEditState(name);
|
||||
|
||||
_appearance[name]->setList(*value);
|
||||
if (hasAppearanceProperty(name)) {
|
||||
_appearance[name]->setList(*value);
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<MaterialProperty> Material::getPhysicalProperty(const QString& name)
|
||||
@@ -890,6 +871,28 @@ std::shared_ptr<MaterialProperty> Material::getAppearanceProperty(const QString&
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<MaterialProperty> Material::getProperty(const QString& name)
|
||||
{
|
||||
if (hasPhysicalProperty(name)) {
|
||||
return getPhysicalProperty(name);
|
||||
}
|
||||
if (hasAppearanceProperty(name)) {
|
||||
return getAppearanceProperty(name);
|
||||
}
|
||||
throw PropertyNotFound();
|
||||
}
|
||||
|
||||
std::shared_ptr<MaterialProperty> Material::getProperty(const QString& name) const
|
||||
{
|
||||
if (hasPhysicalProperty(name)) {
|
||||
return getPhysicalProperty(name);
|
||||
}
|
||||
if (hasAppearanceProperty(name)) {
|
||||
return getAppearanceProperty(name);
|
||||
}
|
||||
throw PropertyNotFound();
|
||||
}
|
||||
|
||||
QVariant
|
||||
Material::getValue(const std::map<QString, std::shared_ptr<MaterialProperty>>& propertyList,
|
||||
const QString& name)
|
||||
@@ -1295,7 +1298,8 @@ QString Material::getModelByName(const QString& name) const
|
||||
void Material::save(QTextStream& stream, bool overwrite, bool saveAsCopy, bool saveInherited)
|
||||
{
|
||||
if (saveInherited && !saveAsCopy) {
|
||||
// Check to see if we're an original or if we're already in the list of models
|
||||
// Check to see if we're an original or if we're already in the list of
|
||||
// models
|
||||
MaterialManager materialManager;
|
||||
if (materialManager.exists(_uuid) && !overwrite) {
|
||||
// Make a new version based on the current
|
||||
@@ -1304,6 +1308,11 @@ void Material::save(QTextStream& stream, bool overwrite, bool saveAsCopy, bool s
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent self inheritance
|
||||
if (_parentUuid == _uuid) {
|
||||
_parentUuid = QString();
|
||||
}
|
||||
|
||||
if (saveAsCopy) {
|
||||
// Save it in the same format as the parent
|
||||
if (_parentUuid.isEmpty()) {
|
||||
@@ -1315,8 +1324,8 @@ void Material::save(QTextStream& stream, bool overwrite, bool saveAsCopy, bool s
|
||||
}
|
||||
else {
|
||||
if (!overwrite) {
|
||||
// Creating a new derived model when overwriting sets itself as a parent,
|
||||
// that will no longer exist because it's been overwritten
|
||||
// Creating a new derived model when overwriting sets itself as a
|
||||
// parent, that will no longer exist because it's been overwritten
|
||||
newUuid();
|
||||
}
|
||||
}
|
||||
@@ -1358,19 +1367,19 @@ Material& Material::operator=(const Material& other)
|
||||
|
||||
_tags.clear();
|
||||
for (auto& it : other._tags) {
|
||||
_tags.push_back(it);
|
||||
_tags.insert(it);
|
||||
}
|
||||
_physicalUuids.clear();
|
||||
for (auto& it : other._physicalUuids) {
|
||||
_physicalUuids.push_back(it);
|
||||
_physicalUuids.insert(it);
|
||||
}
|
||||
_appearanceUuids.clear();
|
||||
for (auto& it : other._appearanceUuids) {
|
||||
_appearanceUuids.push_back(it);
|
||||
_appearanceUuids.insert(it);
|
||||
}
|
||||
_allUuids.clear();
|
||||
for (auto& it : other._allUuids) {
|
||||
_allUuids.push_back(it);
|
||||
_allUuids.insert(it);
|
||||
}
|
||||
|
||||
// Create copies of the properties rather than modify the originals
|
||||
@@ -1420,14 +1429,15 @@ QStringList Material::normalizeModels(const QStringList& models)
|
||||
}
|
||||
|
||||
/*
|
||||
* Set or change the base material for the current material, updating the properties as
|
||||
* required.
|
||||
* Set or change the base material for the current material, updating the
|
||||
* properties as required.
|
||||
*/
|
||||
void Material::updateInheritance([[maybe_unused]] const QString& parent)
|
||||
{}
|
||||
|
||||
/*
|
||||
* Return a list of models that are defined in the parent material but not in this one
|
||||
* Return a list of models that are defined in the parent material but not in
|
||||
* this one
|
||||
*/
|
||||
QStringList Material::inheritedMissingModels(const Material& parent) const
|
||||
{
|
||||
@@ -1457,7 +1467,8 @@ QStringList Material::inheritedAddedModels(const Material& parent) const
|
||||
}
|
||||
|
||||
/*
|
||||
* Return a list of properties that have different values from the parent material
|
||||
* Return a list of properties that have different values from the parent
|
||||
* material
|
||||
*/
|
||||
void Material::inheritedPropertyDiff([[maybe_unused]] const QString& parent)
|
||||
{}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include <QDir>
|
||||
#include <QSet>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QTextStream>
|
||||
@@ -203,15 +204,15 @@ public:
|
||||
{
|
||||
return _editState;
|
||||
}
|
||||
const QStringList& getTags() const
|
||||
const QSet<QString>& getTags() const
|
||||
{
|
||||
return _tags;
|
||||
}
|
||||
const QStringList* getPhysicalModels() const
|
||||
const QSet<QString>* getPhysicalModels() const
|
||||
{
|
||||
return &_physicalUuids;
|
||||
}
|
||||
const QStringList* getAppearanceModels() const
|
||||
const QSet<QString>* getAppearanceModels() const
|
||||
{
|
||||
return &_appearanceUuids;
|
||||
}
|
||||
@@ -282,6 +283,8 @@ public:
|
||||
std::shared_ptr<MaterialProperty> getPhysicalProperty(const QString& name) const;
|
||||
std::shared_ptr<MaterialProperty> getAppearanceProperty(const QString& name);
|
||||
std::shared_ptr<MaterialProperty> getAppearanceProperty(const QString& name) const;
|
||||
std::shared_ptr<MaterialProperty> getProperty(const QString& name);
|
||||
std::shared_ptr<MaterialProperty> getProperty(const QString& name) const;
|
||||
QVariant getPhysicalValue(const QString& name) const;
|
||||
Base::Quantity getPhysicalQuantity(const QString& name) const;
|
||||
QString getPhysicalValueString(const QString& name) const;
|
||||
@@ -359,7 +362,7 @@ public:
|
||||
|
||||
protected:
|
||||
void addModel(const QString& uuid);
|
||||
static void removeUUID(QStringList& uuidList, const QString& uuid);
|
||||
static void removeUUID(QSet<QString>& uuidList, const QString& uuid);
|
||||
|
||||
static QVariant
|
||||
getValue(const std::map<QString, std::shared_ptr<MaterialProperty>>& propertyList,
|
||||
@@ -388,10 +391,10 @@ private:
|
||||
QString _description;
|
||||
QString _url;
|
||||
QString _reference;
|
||||
QStringList _tags;
|
||||
QStringList _physicalUuids;
|
||||
QStringList _appearanceUuids;
|
||||
QStringList _allUuids; // Includes inherited models
|
||||
QSet<QString> _tags;
|
||||
QSet<QString> _physicalUuids;
|
||||
QSet<QString> _appearanceUuids;
|
||||
QSet<QString> _allUuids; // Includes inherited models
|
||||
std::map<QString, std::shared_ptr<MaterialProperty>> _physical;
|
||||
std::map<QString, std::shared_ptr<MaterialProperty>> _appearance;
|
||||
bool _dereferenced;
|
||||
|
||||
@@ -55,7 +55,7 @@ QString LibraryBase::getLocalPath(const QString& path) const
|
||||
QString prefix = QString::fromStdString("/") + getName();
|
||||
if (cleanPath.startsWith(prefix)) {
|
||||
// Remove the library name from the path
|
||||
filePath += cleanPath.right(cleanPath.length() - prefix.length());
|
||||
filePath += cleanPath.rightRef(cleanPath.length() - prefix.length());
|
||||
}
|
||||
else {
|
||||
filePath += cleanPath;
|
||||
|
||||
@@ -155,7 +155,7 @@ SET(FluidMaterial_Files
|
||||
Resources/Materials/Fluid/None.FCMat
|
||||
Resources/Materials/Fluid/Air.FCMat
|
||||
Resources/Materials/Fluid/Argon.FCMat
|
||||
Resources/Materials/Fluid/Carbon_dioxide.FCMat
|
||||
"Resources/Materials/Fluid/Carbon Dioxide.FCMat"
|
||||
Resources/Materials/Fluid/Nitrogen.FCMat
|
||||
Resources/Materials/Fluid/Water.FCMat
|
||||
)
|
||||
@@ -166,25 +166,60 @@ SET(AppearanceLib_Files
|
||||
Resources/Materials/Appearance/Bronze.FCMat
|
||||
Resources/Materials/Appearance/Chrome.FCMat
|
||||
Resources/Materials/Appearance/Copper.FCMat
|
||||
Resources/Materials/Appearance/DefaultAppearance.FCMat
|
||||
Resources/Materials/Appearance/Default.FCMat
|
||||
Resources/Materials/Appearance/Emerald.FCMat
|
||||
Resources/Materials/Appearance/Gold.FCMat
|
||||
Resources/Materials/Appearance/Jade.FCMat
|
||||
Resources/Materials/Appearance/Metalized.FCMat
|
||||
Resources/Materials/Appearance/NeonGNC.FCMat
|
||||
Resources/Materials/Appearance/NeonPHC.FCMat
|
||||
"Resources/Materials/Appearance/Neon GNC.FCMat"
|
||||
"Resources/Materials/Appearance/Neon PHC.FCMat"
|
||||
Resources/Materials/Appearance/Obsidian.FCMat
|
||||
Resources/Materials/Appearance/Pewter.FCMat
|
||||
Resources/Materials/Appearance/Plaster.FCMat
|
||||
Resources/Materials/Appearance/Plastic.FCMat
|
||||
Resources/Materials/Appearance/Ruby.FCMat
|
||||
Resources/Materials/Appearance/Satin.FCMat
|
||||
Resources/Materials/Appearance/ShinyPlastic.FCMat
|
||||
"Resources/Materials/Appearance/Shiny Plastic.FCMat"
|
||||
Resources/Materials/Appearance/Silver.FCMat
|
||||
Resources/Materials/Appearance/Steel.FCMat
|
||||
Resources/Materials/Appearance/Stone.FCMat
|
||||
)
|
||||
|
||||
SET(PatternLib_Files
|
||||
Resources/Materials/Patterns/PAT/Diagonal4.FCMat
|
||||
Resources/Materials/Patterns/PAT/Diagonal5.FCMat
|
||||
Resources/Materials/Patterns/PAT/Diamond.FCMat
|
||||
Resources/Materials/Patterns/PAT/Diamond2.FCMat
|
||||
Resources/Materials/Patterns/PAT/Diamond4.FCMat
|
||||
Resources/Materials/Patterns/PAT/Horizontal5.FCMat
|
||||
Resources/Materials/Patterns/PAT/Square.FCMat
|
||||
Resources/Materials/Patterns/PAT/Vertical5.FCMat
|
||||
"Resources/Materials/Patterns/Pattern Files/aluminum.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/brick01.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/concrete.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/cross.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/cuprous.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/diagonal1.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/diagonal2.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/earth.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/general_steel.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/glass.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/hatch45L.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/hatch45R.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/hbone.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/line.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/plastic.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/plus.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/simple.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/solid.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/square.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/steel.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/titanium.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/wood.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/woodgrain.FCMat"
|
||||
"Resources/Materials/Patterns/Pattern Files/zinc.FCMat"
|
||||
)
|
||||
|
||||
SET(MaterialTestLib_Files
|
||||
"Resources/Materials/Test/Test Material.FCMat"
|
||||
)
|
||||
@@ -202,6 +237,24 @@ SET(MaterialModel_Files
|
||||
Resources/Models/Mechanical/LinearElastic.yml
|
||||
Resources/Models/Mechanical/OgdenYld2004p18.yml
|
||||
Resources/Models/Mechanical/OrthotropicLinearElastic.yml
|
||||
Resources/Models/Patterns/PAT.yml
|
||||
"Resources/Models/Patterns/Pattern File.yml"
|
||||
"Resources/Models/Render Workbench/RenderAppleseed.yml"
|
||||
"Resources/Models/Render Workbench/RenderCarpaint.yml"
|
||||
"Resources/Models/Render Workbench/RenderCycles.yml"
|
||||
"Resources/Models/Render Workbench/RenderDiffuse.yml"
|
||||
"Resources/Models/Render Workbench/RenderDisney.yml"
|
||||
"Resources/Models/Render Workbench/RenderEmission.yml"
|
||||
"Resources/Models/Render Workbench/RenderGlass.yml"
|
||||
"Resources/Models/Render Workbench/RenderLuxcore.yml"
|
||||
"Resources/Models/Render Workbench/RenderLuxrender.yml"
|
||||
"Resources/Models/Render Workbench/RenderMixed.yml"
|
||||
"Resources/Models/Render Workbench/RenderOspray.yml"
|
||||
"Resources/Models/Render Workbench/RenderPbrt.yml"
|
||||
"Resources/Models/Render Workbench/RenderPovray.yml"
|
||||
"Resources/Models/Render Workbench/RenderSubstancePBR.yml"
|
||||
"Resources/Models/Render Workbench/RenderTexture.yml"
|
||||
"Resources/Models/Render Workbench/RenderWB.yml"
|
||||
Resources/Models/Rendering/AdvancedRendering.yml
|
||||
Resources/Models/Rendering/BasicRendering.yml
|
||||
Resources/Models/Rendering/TextureRendering.yml
|
||||
@@ -266,6 +319,9 @@ ADD_CUSTOM_TARGET(FluidMaterialLib ALL
|
||||
ADD_CUSTOM_TARGET(AppearanceLib ALL
|
||||
SOURCES ${AppearanceLib_Files}
|
||||
)
|
||||
ADD_CUSTOM_TARGET(PatternLib ALL
|
||||
SOURCES ${PatternLib_Files}
|
||||
)
|
||||
ADD_CUSTOM_TARGET(MaterialTestLib ALL
|
||||
SOURCES ${MaterialTestLib_Files}
|
||||
)
|
||||
@@ -287,6 +343,10 @@ fc_target_copy_resource(AppearanceLib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/Material/
|
||||
${AppearanceLib_Files})
|
||||
fc_target_copy_resource(PatternLib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/Material/
|
||||
${PatternLib_Files})
|
||||
fc_target_copy_resource(MaterialTestLib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/Material/
|
||||
@@ -306,7 +366,7 @@ INSTALL(
|
||||
DESTINATION Mod/Material/materialtests
|
||||
)
|
||||
|
||||
foreach(file ${MaterialLib_Files} ${FluidMaterial_Files} ${AppearanceLib_Files} ${MaterialTestLib_Files} ${MaterialModel_Files})
|
||||
foreach(file ${MaterialLib_Files} ${FluidMaterial_Files} ${AppearanceLib_Files} ${PatternLib_Files} ${MaterialTestLib_Files} ${MaterialModel_Files})
|
||||
get_filename_component(filepath ${file} DIRECTORY)
|
||||
INSTALL(
|
||||
FILES ${file}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <QPainter>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QSvgRenderer>
|
||||
#include <QTextStream>
|
||||
#include <QVariant>
|
||||
#endif
|
||||
@@ -55,12 +56,8 @@
|
||||
|
||||
using namespace MatGui;
|
||||
|
||||
BaseDelegate::BaseDelegate(Materials::MaterialValue::ValueType type,
|
||||
const QString& units,
|
||||
QObject* parent)
|
||||
BaseDelegate::BaseDelegate(QObject* parent)
|
||||
: QStyledItemDelegate(parent)
|
||||
, _type(type)
|
||||
, _units(units)
|
||||
{}
|
||||
|
||||
bool BaseDelegate::newRow(const QAbstractItemModel* model, const QModelIndex& index) const
|
||||
@@ -71,8 +68,7 @@ bool BaseDelegate::newRow(const QAbstractItemModel* model, const QModelIndex& in
|
||||
|
||||
QString BaseDelegate::getStringValue(const QModelIndex& index) const
|
||||
{
|
||||
auto model = index.model();
|
||||
QVariant item = model->data(index);
|
||||
QVariant item = getValue(index);
|
||||
auto propertyValue = item.value<QString>();
|
||||
|
||||
return propertyValue;
|
||||
@@ -109,7 +105,7 @@ void BaseDelegate::paintQuantity(QPainter* painter,
|
||||
painter->drawText(option.rect, 0, QString());
|
||||
}
|
||||
else {
|
||||
QVariant item = model->data(index);
|
||||
QVariant item = getValue(index);
|
||||
auto quantity = item.value<Base::Quantity>();
|
||||
QString text = quantity.getUserString();
|
||||
painter->drawText(option.rect, 0, text);
|
||||
@@ -128,7 +124,6 @@ void BaseDelegate::paintImage(QPainter* painter,
|
||||
|
||||
QImage img;
|
||||
if (!propertyValue.isEmpty()) {
|
||||
Base::Console().Log("Loading image\n");
|
||||
QByteArray by = QByteArray::fromBase64(propertyValue.toUtf8());
|
||||
img = QImage::fromData(by, "PNG").scaled(64, 64, Qt::KeepAspectRatio);
|
||||
}
|
||||
@@ -144,6 +139,23 @@ void BaseDelegate::paintImage(QPainter* painter,
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
void BaseDelegate::paintSVG(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
auto propertyValue = getStringValue(index);
|
||||
|
||||
painter->save();
|
||||
|
||||
if (!propertyValue.isEmpty()) {
|
||||
QSvgRenderer renderer(propertyValue.toUtf8());
|
||||
|
||||
renderer.render(painter, QRectF(option.rect));
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
void BaseDelegate::paintColor(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
@@ -177,6 +189,8 @@ void BaseDelegate::paintList(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
Q_UNUSED(index)
|
||||
|
||||
painter->save();
|
||||
|
||||
QImage list(QString::fromStdString(":/icons/list.svg"));
|
||||
@@ -196,6 +210,8 @@ void BaseDelegate::paintMultiLineString(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
Q_UNUSED(index)
|
||||
|
||||
painter->save();
|
||||
|
||||
QImage table(QString::fromStdString(":/icons/multiline.svg"));
|
||||
@@ -215,6 +231,8 @@ void BaseDelegate::paintArray(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
Q_UNUSED(index)
|
||||
|
||||
painter->save();
|
||||
|
||||
QImage table(QString::fromStdString(":/icons/table.svg"));
|
||||
@@ -228,36 +246,39 @@ void BaseDelegate::paintArray(QPainter* painter,
|
||||
painter->drawImage(target, table, table.rect());
|
||||
|
||||
painter->restore();
|
||||
return;
|
||||
}
|
||||
|
||||
void BaseDelegate::paint(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
|
||||
if (_type == Materials::MaterialValue::Quantity) {
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::Quantity) {
|
||||
paintQuantity(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (_type == Materials::MaterialValue::Image) {
|
||||
if (type == Materials::MaterialValue::Image) {
|
||||
paintImage(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (_type == Materials::MaterialValue::Color) {
|
||||
if (type == Materials::MaterialValue::SVG) {
|
||||
paintSVG(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (type == Materials::MaterialValue::Color) {
|
||||
paintColor(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (_type == Materials::MaterialValue::List || _type == Materials::MaterialValue::FileList
|
||||
|| _type == Materials::MaterialValue::ImageList) {
|
||||
if (type == Materials::MaterialValue::List || type == Materials::MaterialValue::FileList
|
||||
|| type == Materials::MaterialValue::ImageList) {
|
||||
paintList(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (_type == Materials::MaterialValue::MultiLineString) {
|
||||
if (type == Materials::MaterialValue::MultiLineString) {
|
||||
paintMultiLineString(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (_type == Materials::MaterialValue::Array2D || _type == Materials::MaterialValue::Array3D) {
|
||||
if (type == Materials::MaterialValue::Array2D || type == Materials::MaterialValue::Array3D) {
|
||||
paintArray(painter, option, index);
|
||||
return;
|
||||
}
|
||||
@@ -270,16 +291,17 @@ QSize BaseDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelInd
|
||||
Q_UNUSED(option)
|
||||
Q_UNUSED(index)
|
||||
|
||||
if (_type == Materials::MaterialValue::Color) {
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::Color) {
|
||||
return {75, 23}; // Standard QPushButton size
|
||||
}
|
||||
if (_type == Materials::MaterialValue::Image || _type == Materials::MaterialValue::ImageList) {
|
||||
if (type == Materials::MaterialValue::Image || type == Materials::MaterialValue::SVG) {
|
||||
return {64, 64};
|
||||
}
|
||||
if (_type == Materials::MaterialValue::Array2D || _type == Materials::MaterialValue::Array3D
|
||||
|| _type == Materials::MaterialValue::MultiLineString
|
||||
|| _type == Materials::MaterialValue::List || _type == Materials::MaterialValue::FileList
|
||||
|| _type == Materials::MaterialValue::ImageList) {
|
||||
if (type == Materials::MaterialValue::Array2D || type == Materials::MaterialValue::Array3D
|
||||
|| type == Materials::MaterialValue::MultiLineString
|
||||
|| type == Materials::MaterialValue::List || type == Materials::MaterialValue::FileList
|
||||
|| type == Materials::MaterialValue::ImageList) {
|
||||
return {23, 23};
|
||||
}
|
||||
|
||||
@@ -288,24 +310,31 @@ QSize BaseDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelInd
|
||||
|
||||
void BaseDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
|
||||
{
|
||||
auto model = index.model();
|
||||
auto item = model->data(index);
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_type == Materials::MaterialValue::List) {
|
||||
auto item = getValue(index);
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::List) {
|
||||
auto input = dynamic_cast<Gui::PrefLineEdit*>(editor);
|
||||
item = input->text();
|
||||
return;
|
||||
}
|
||||
if (_type == Materials::MaterialValue::FileList || _type == Materials::MaterialValue::File) {
|
||||
if (type == Materials::MaterialValue::FileList || type == Materials::MaterialValue::File) {
|
||||
auto chooser = dynamic_cast<Gui::FileChooser*>(editor);
|
||||
chooser->setFileName(item.toString());
|
||||
return;
|
||||
}
|
||||
if (_type == Materials::MaterialValue::Quantity) {
|
||||
if (type == Materials::MaterialValue::Quantity) {
|
||||
auto input = dynamic_cast<Gui::InputField*>(editor);
|
||||
input->setQuantityString(item.toString());
|
||||
return;
|
||||
}
|
||||
if (type == Materials::MaterialValue::List || type == Materials::MaterialValue::ImageList) {
|
||||
// Handled by dialogs
|
||||
return;
|
||||
}
|
||||
|
||||
QStyledItemDelegate::setEditorData(editor, index);
|
||||
}
|
||||
@@ -314,13 +343,40 @@ void BaseDelegate::setModelData(QWidget* editor,
|
||||
QAbstractItemModel* model,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
if (_type == Materials::MaterialValue::FileList) {
|
||||
QVariant value;
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::FileList || type == Materials::MaterialValue::File) {
|
||||
auto chooser = dynamic_cast<Gui::FileChooser*>(editor);
|
||||
model->setData(index, chooser->fileName());
|
||||
value = chooser->fileName();
|
||||
}
|
||||
else if (type == Materials::MaterialValue::Quantity) {
|
||||
auto input = dynamic_cast<Gui::InputField*>(editor);
|
||||
value = input->text();
|
||||
return;
|
||||
}
|
||||
else if (type == Materials::MaterialValue::Integer) {
|
||||
auto spinner = dynamic_cast<Gui::IntSpinBox*>(editor);
|
||||
value = spinner->value();
|
||||
}
|
||||
else if (type == Materials::MaterialValue::Float) {
|
||||
auto spinner = dynamic_cast<Gui::DoubleSpinBox*>(editor);
|
||||
value = spinner->value();
|
||||
}
|
||||
else if (type == Materials::MaterialValue::Boolean) {
|
||||
auto combo = dynamic_cast<Gui::PrefComboBox*>(editor);
|
||||
value = combo->currentText();
|
||||
}
|
||||
else if (type == Materials::MaterialValue::Image || type == Materials::MaterialValue::SVG) {
|
||||
// Value was already saved to the property
|
||||
notifyChanged(index.model(), index);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
QStyledItemDelegate::setModelData(editor, model, index);
|
||||
auto lineEdit = dynamic_cast<Gui::PrefLineEdit*>(editor);
|
||||
value = lineEdit->text();
|
||||
}
|
||||
|
||||
setValue(model, index, value);
|
||||
}
|
||||
|
||||
QWidget* BaseDelegate::createEditor(QWidget* parent,
|
||||
@@ -336,7 +392,7 @@ QWidget* BaseDelegate::createEditor(QWidget* parent,
|
||||
if (newRow(model, index)) {
|
||||
const_cast<QAbstractItemModel*>(model)->insertRows(index.row(), 1);
|
||||
}
|
||||
auto item = model->data(index);
|
||||
auto item = getValue(index);
|
||||
|
||||
QWidget* editor = createWidget(parent, item, index);
|
||||
|
||||
@@ -348,20 +404,15 @@ BaseDelegate::createWidget(QWidget* parent, const QVariant& item, const QModelIn
|
||||
{
|
||||
QWidget* widget = nullptr;
|
||||
|
||||
if (_type == Materials::MaterialValue::String || _type == Materials::MaterialValue::URL
|
||||
|| _type == Materials::MaterialValue::List) {
|
||||
auto lineEdit = new Gui::PrefLineEdit(parent);
|
||||
lineEdit->setText(item.toString());
|
||||
widget = lineEdit;
|
||||
}
|
||||
else if (_type == Materials::MaterialValue::Integer) {
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::Integer) {
|
||||
auto spinner = new Gui::UIntSpinBox(parent);
|
||||
spinner->setMinimum(0);
|
||||
spinner->setMaximum(UINT_MAX);
|
||||
spinner->setValue(item.toUInt());
|
||||
widget = spinner;
|
||||
}
|
||||
else if (_type == Materials::MaterialValue::Float) {
|
||||
else if (type == Materials::MaterialValue::Float) {
|
||||
auto spinner = new Gui::DoubleSpinBox(parent);
|
||||
|
||||
// the magnetic permeability is the parameter for which many decimals matter
|
||||
@@ -376,7 +427,7 @@ BaseDelegate::createWidget(QWidget* parent, const QVariant& item, const QModelIn
|
||||
spinner->setValue(item.toDouble());
|
||||
widget = spinner;
|
||||
}
|
||||
else if (_type == Materials::MaterialValue::Boolean) {
|
||||
else if (type == Materials::MaterialValue::Boolean) {
|
||||
auto combo = new Gui::PrefComboBox(parent);
|
||||
combo->insertItem(0, QString::fromStdString(""));
|
||||
combo->insertItem(1, tr("False"));
|
||||
@@ -384,16 +435,24 @@ BaseDelegate::createWidget(QWidget* parent, const QVariant& item, const QModelIn
|
||||
combo->setCurrentText(item.toString());
|
||||
widget = combo;
|
||||
}
|
||||
else if (_type == Materials::MaterialValue::Quantity) {
|
||||
else if (type == Materials::MaterialValue::Quantity) {
|
||||
auto input = new Gui::QuantitySpinBox(parent);
|
||||
input->setMinimum(std::numeric_limits<double>::min());
|
||||
input->setMaximum(std::numeric_limits<double>::max());
|
||||
input->setUnitText(_units);
|
||||
input->setUnitText(getUnits(index));
|
||||
input->setValue(item.value<Base::Quantity>());
|
||||
|
||||
widget = input;
|
||||
}
|
||||
else if (_type == Materials::MaterialValue::FileList) {
|
||||
else if (type == Materials::MaterialValue::File) {
|
||||
auto chooser = new Gui::FileChooser(parent);
|
||||
if (!item.toString().isEmpty()) {
|
||||
chooser->setFileName(item.toString());
|
||||
}
|
||||
|
||||
widget = chooser;
|
||||
}
|
||||
else if (type == Materials::MaterialValue::FileList) {
|
||||
auto chooser = new Gui::FileChooser(parent);
|
||||
auto propertyValue = item.toString();
|
||||
|
||||
@@ -412,7 +471,9 @@ BaseDelegate::createWidget(QWidget* parent, const QVariant& item, const QModelIn
|
||||
}
|
||||
else {
|
||||
// Default editor
|
||||
widget = new QLineEdit(parent);
|
||||
auto lineEdit = new Gui::PrefLineEdit(parent);
|
||||
lineEdit->setText(item.toString());
|
||||
widget = lineEdit;
|
||||
}
|
||||
|
||||
return widget;
|
||||
|
||||
@@ -40,12 +40,10 @@ class BaseDelegate: public QStyledItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
BaseDelegate(Materials::MaterialValue::ValueType type = Materials::MaterialValue::None,
|
||||
const QString& units = QString(),
|
||||
QObject* parent = nullptr);
|
||||
BaseDelegate(QObject* parent = nullptr);
|
||||
virtual ~BaseDelegate() = default;
|
||||
|
||||
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;
|
||||
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||
void paint(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const override;
|
||||
@@ -53,16 +51,21 @@ public:
|
||||
const QStyleOptionViewItem& styleOption,
|
||||
const QModelIndex& index) const override;
|
||||
void setEditorData(QWidget* editor, const QModelIndex& index) const override;
|
||||
void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const;
|
||||
void setModelData(QWidget* editor,
|
||||
QAbstractItemModel* model,
|
||||
const QModelIndex& index) const override;
|
||||
|
||||
// Q_SIGNALS:
|
||||
/** Emits this signal when a property has changed */
|
||||
// void propertyChange(const QModelIndex& index, const QString value);
|
||||
|
||||
protected:
|
||||
Materials::MaterialValue::ValueType _type;
|
||||
QString _units;
|
||||
|
||||
virtual Materials::MaterialValue::ValueType getType(const QModelIndex& index) const = 0;
|
||||
virtual QString getUnits(const QModelIndex& index) const = 0;
|
||||
virtual QVariant getValue(const QModelIndex& index) const = 0;
|
||||
virtual void
|
||||
setValue(QAbstractItemModel* model, const QModelIndex& index, const QVariant& value) const = 0;
|
||||
virtual void notifyChanged(const QAbstractItemModel* model, const QModelIndex& index) const = 0;
|
||||
|
||||
QString getStringValue(const QModelIndex& index) const;
|
||||
QRgb parseColor(const QString& color) const;
|
||||
@@ -73,6 +76,8 @@ protected:
|
||||
void paintImage(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const;
|
||||
void
|
||||
paintSVG(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
|
||||
void paintColor(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const;
|
||||
|
||||
@@ -25,9 +25,13 @@
|
||||
#endif
|
||||
|
||||
#include <QBuffer>
|
||||
#include <QFile>
|
||||
#include <QMenu>
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
#include <QString>
|
||||
#include <QSvgRenderer>
|
||||
#include <QTextStream>
|
||||
|
||||
#include <Gui/FileDialog.h>
|
||||
#include <Gui/MainWindow.h>
|
||||
@@ -53,16 +57,53 @@ ImageLabel::ImageLabel(QWidget* parent)
|
||||
void ImageLabel::setPixmap(const QPixmap& pixmap)
|
||||
{
|
||||
_pixmap = pixmap;
|
||||
_svg.clear();
|
||||
QLabel::setPixmap(pixmap);
|
||||
}
|
||||
|
||||
void ImageLabel::setSVG(const QString& svg)
|
||||
{
|
||||
_svg = svg;
|
||||
_pixmap = QPixmap();
|
||||
update();
|
||||
// renderSVG();
|
||||
}
|
||||
|
||||
void ImageLabel::renderSVG()
|
||||
{
|
||||
QPainter painter(this);
|
||||
QSvgRenderer renderer(_svg.toUtf8(), this);
|
||||
|
||||
painter.begin(this);
|
||||
|
||||
renderer.render(&painter);
|
||||
|
||||
painter.end();
|
||||
}
|
||||
|
||||
void ImageLabel::resizeEvent(QResizeEvent* event)
|
||||
{
|
||||
QPixmap px = _pixmap.scaled(event->size(), Qt::KeepAspectRatio);
|
||||
QLabel::setPixmap(px);
|
||||
QLabel::resizeEvent(event);
|
||||
if (_svg.isEmpty()) {
|
||||
QPixmap px = _pixmap.scaled(event->size(), Qt::KeepAspectRatio);
|
||||
QLabel::setPixmap(px);
|
||||
QLabel::resizeEvent(event);
|
||||
}
|
||||
// else {
|
||||
// renderSVG();
|
||||
// }
|
||||
}
|
||||
|
||||
void ImageLabel::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
if (!_svg.isEmpty()) {
|
||||
QSvgRenderer renderer(_svg.toUtf8());
|
||||
QPainter painter(this);
|
||||
renderer.render(&painter, QRectF(event->rect()));
|
||||
}
|
||||
else {
|
||||
QLabel::paintEvent(event);
|
||||
}
|
||||
}
|
||||
//===
|
||||
|
||||
ImageEdit::ImageEdit(const QString& propertyName,
|
||||
@@ -86,17 +127,24 @@ ImageEdit::ImageEdit(const QString& propertyName,
|
||||
_property = nullptr;
|
||||
}
|
||||
if (_property) {
|
||||
QString value = _property->getString();
|
||||
if (!value.isEmpty()) {
|
||||
QByteArray by = QByteArray::fromBase64(value.toUtf8());
|
||||
QImage img = QImage::fromData(by, "PNG");
|
||||
_pixmap = QPixmap::fromImage(img);
|
||||
if (_property->getType() == Materials::MaterialValue::SVG) {
|
||||
_svg = _property->getString();
|
||||
showSVG();
|
||||
}
|
||||
else {
|
||||
QString value = _property->getString();
|
||||
if (!value.isEmpty()) {
|
||||
QByteArray by = QByteArray::fromBase64(value.toUtf8());
|
||||
QImage img = QImage::fromData(by, "PNG");
|
||||
_pixmap = QPixmap::fromImage(img);
|
||||
}
|
||||
showPixmap();
|
||||
}
|
||||
}
|
||||
else {
|
||||
Base::Console().Log("No value loaded\n");
|
||||
showPixmap();
|
||||
}
|
||||
showPixmap();
|
||||
|
||||
connect(ui->buttonFileSelect, &QPushButton::clicked, this, &ImageEdit::onFileSelect);
|
||||
|
||||
@@ -114,43 +162,92 @@ void ImageEdit::showPixmap()
|
||||
ui->editHeight->setText(text.setNum(_pixmap.height()));
|
||||
}
|
||||
|
||||
void ImageEdit::showSVG()
|
||||
{
|
||||
ui->labelThumb->setSVG(_svg);
|
||||
ui->labelThumb->setFixedSize(64, 64);
|
||||
ui->labelImage->setSVG(_svg);
|
||||
// QString text;
|
||||
// ui->editWidth->setText(text.setNum(_pixmap.width()));
|
||||
// ui->editHeight->setText(text.setNum(_pixmap.height()));
|
||||
}
|
||||
|
||||
void ImageEdit::onFileSelect(bool checked)
|
||||
{
|
||||
Q_UNUSED(checked)
|
||||
|
||||
if (_property && _property->getType() == Materials::MaterialValue::SVG) {
|
||||
onFileSelectSVG();
|
||||
}
|
||||
else {
|
||||
onFileSelectImage();
|
||||
}
|
||||
}
|
||||
|
||||
QString ImageEdit::selectFile(const QString& filePatterns)
|
||||
{
|
||||
QFileDialog::Options dlgOpt;
|
||||
if (Gui::DialogOptions::dontUseNativeFileDialog()) {
|
||||
dlgOpt = QFileDialog::DontUseNativeDialog;
|
||||
}
|
||||
|
||||
QString directory = Gui::FileDialog::getWorkingDirectory();
|
||||
QString fn = Gui::FileDialog::getOpenFileName(
|
||||
this,
|
||||
tr("Select an image"),
|
||||
directory,
|
||||
tr("Image files (*.jpg *.jpeg *.png *.bmp);;All files (*)"),
|
||||
nullptr,
|
||||
dlgOpt);
|
||||
QString fn = Gui::FileDialog::getOpenFileName(this,
|
||||
tr("Select an image"),
|
||||
directory,
|
||||
filePatterns,
|
||||
nullptr,
|
||||
dlgOpt);
|
||||
|
||||
return fn;
|
||||
}
|
||||
|
||||
void ImageEdit::onFileSelectImage()
|
||||
{
|
||||
QString fn = selectFile(tr("Image files (*.jpg *.jpeg *.png *.bmp);;All files (*)"));
|
||||
if (!fn.isEmpty()) {
|
||||
fn = QDir::fromNativeSeparators(fn);
|
||||
Gui::FileDialog::setWorkingDirectory(fn);
|
||||
|
||||
_pixmap = QPixmap(fn);
|
||||
_svg.clear();
|
||||
showPixmap();
|
||||
}
|
||||
}
|
||||
|
||||
void ImageEdit::onFileSelectSVG()
|
||||
{
|
||||
QString fn = selectFile(tr("Image files (*.svg);;All files (*)"));
|
||||
if (!fn.isEmpty()) {
|
||||
fn = QDir::fromNativeSeparators(fn);
|
||||
|
||||
_pixmap = QPixmap();
|
||||
QFile file(fn);
|
||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
_svg.clear();
|
||||
}
|
||||
else {
|
||||
QTextStream stream(&file);
|
||||
_svg = stream.readAll();
|
||||
}
|
||||
showSVG();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ImageEdit::accept()
|
||||
{
|
||||
if (_property) {
|
||||
QBuffer buffer;
|
||||
buffer.open(QIODevice::WriteOnly);
|
||||
_pixmap.save(&buffer, "PNG");
|
||||
QByteArray base64 = buffer.data().toBase64();
|
||||
QString encoded = QString::fromUtf8(base64);
|
||||
_property->setValue(encoded);
|
||||
if (_property->getType() == Materials::MaterialValue::SVG) {
|
||||
_property->setValue(_svg);
|
||||
}
|
||||
else {
|
||||
QBuffer buffer;
|
||||
buffer.open(QIODevice::WriteOnly);
|
||||
_pixmap.save(&buffer, "PNG");
|
||||
QByteArray base64 = buffer.data().toBase64();
|
||||
QString encoded = QString::fromUtf8(base64);
|
||||
_property->setValue(encoded);
|
||||
}
|
||||
}
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
@@ -53,12 +53,16 @@ public:
|
||||
~ImageLabel() = default;
|
||||
|
||||
void setPixmap(const QPixmap& pixmap);
|
||||
void setSVG(const QString& svg);
|
||||
void renderSVG();
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent* event);
|
||||
void paintEvent(QPaintEvent* event);
|
||||
|
||||
private:
|
||||
QPixmap _pixmap;
|
||||
QString _svg;
|
||||
};
|
||||
|
||||
class ImageEdit: public QDialog
|
||||
@@ -71,19 +75,26 @@ public:
|
||||
QWidget* parent = nullptr);
|
||||
~ImageEdit() override = default;
|
||||
|
||||
void onFileSelect(bool checked);
|
||||
|
||||
void accept() override;
|
||||
void reject() override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void onFileSelect(bool checked);
|
||||
|
||||
private:
|
||||
std::unique_ptr<Ui_ImageEdit> ui;
|
||||
std::shared_ptr<Materials::Material> _material;
|
||||
std::shared_ptr<Materials::MaterialProperty> _property;
|
||||
|
||||
QPixmap _pixmap;
|
||||
QString _svg;
|
||||
|
||||
void showPixmap();
|
||||
void showSVG();
|
||||
|
||||
QString selectFile(const QString& filePatterns);
|
||||
void onFileSelectImage();
|
||||
void onFileSelectSVG();
|
||||
};
|
||||
|
||||
} // namespace MatGui
|
||||
|
||||
@@ -58,20 +58,47 @@ using namespace MatGui;
|
||||
ListDelegate::ListDelegate(Materials::MaterialValue::ValueType type,
|
||||
const QString& units,
|
||||
QObject* parent)
|
||||
: BaseDelegate(type, units, parent)
|
||||
: BaseDelegate(parent)
|
||||
, _type(type)
|
||||
, _units(units)
|
||||
{}
|
||||
|
||||
QVariant ListDelegate::getValue(const QModelIndex& index) const
|
||||
{
|
||||
auto model = index.model();
|
||||
auto item = model->data(index);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
void ListDelegate::setValue(QAbstractItemModel* model,
|
||||
const QModelIndex& index,
|
||||
const QVariant& value) const
|
||||
{
|
||||
auto matModel = dynamic_cast<QStandardItemModel*>(model);
|
||||
matModel->setData(index, value);
|
||||
|
||||
notifyChanged(model, index);
|
||||
}
|
||||
|
||||
void ListDelegate::notifyChanged(const QAbstractItemModel* model, const QModelIndex& index) const
|
||||
{
|
||||
Q_UNUSED(model)
|
||||
Q_UNUSED(index)
|
||||
}
|
||||
|
||||
void ListDelegate::paint(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
|
||||
if (_type == Materials::MaterialValue::Quantity) {
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::Quantity) {
|
||||
paintQuantity(painter, option, index);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_type == Materials::MaterialValue::Image || _type == Materials::MaterialValue::ImageList) {
|
||||
if (type == Materials::MaterialValue::Image || type == Materials::MaterialValue::ImageList) {
|
||||
paintImage(painter, option, index);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -51,7 +51,24 @@ public:
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const override;
|
||||
|
||||
protected:
|
||||
Materials::MaterialValue::ValueType getType(const QModelIndex& index) const override
|
||||
{
|
||||
return _type;
|
||||
}
|
||||
QString getUnits(const QModelIndex& index) const override
|
||||
{
|
||||
return _units;
|
||||
}
|
||||
QVariant getValue(const QModelIndex& index) const override;
|
||||
void setValue(QAbstractItemModel* model,
|
||||
const QModelIndex& index,
|
||||
const QVariant& value) const override;
|
||||
void notifyChanged(const QAbstractItemModel* model, const QModelIndex& index) const override;
|
||||
|
||||
private:
|
||||
Materials::MaterialValue::ValueType _type;
|
||||
QString _units;
|
||||
};
|
||||
|
||||
} // namespace MatGui
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <QPainter>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QSvgRenderer>
|
||||
#include <QTextStream>
|
||||
#include <QVariant>
|
||||
#endif
|
||||
@@ -59,9 +60,109 @@
|
||||
using namespace MatGui;
|
||||
|
||||
MaterialDelegate::MaterialDelegate(QObject* parent)
|
||||
: QStyledItemDelegate(parent)
|
||||
: BaseDelegate(parent)
|
||||
{}
|
||||
|
||||
Materials::MaterialValue::ValueType MaterialDelegate::getType(const QModelIndex& index) const
|
||||
{
|
||||
auto treeModel = dynamic_cast<const QStandardItemModel*>(index.model());
|
||||
auto item = treeModel->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return {};
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
QString propertyType;
|
||||
if (group->child(row, 1)) {
|
||||
propertyType = group->child(row, 2)->text();
|
||||
}
|
||||
|
||||
return Materials::MaterialValue::mapType(propertyType);
|
||||
}
|
||||
|
||||
QString MaterialDelegate::getUnits(const QModelIndex& index) const
|
||||
{
|
||||
auto treeModel = dynamic_cast<const QStandardItemModel*>(index.model());
|
||||
auto item = treeModel->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return {};
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
QString propertyUnits;
|
||||
if (group->child(row, 1)) {
|
||||
propertyUnits = group->child(row, 3)->text();
|
||||
}
|
||||
return propertyUnits;
|
||||
}
|
||||
|
||||
QVariant MaterialDelegate::getValue(const QModelIndex& index) const
|
||||
{
|
||||
auto treeModel = dynamic_cast<const QStandardItemModel*>(index.model());
|
||||
auto item = treeModel->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return {};
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
QVariant propertyValue;
|
||||
if (group->child(row, 1)) {
|
||||
auto material = group->child(row, 1)->data().value<std::shared_ptr<Materials::Material>>();
|
||||
auto propertyName = group->child(row, 0)->text();
|
||||
propertyValue = material->getProperty(propertyName)->getValue();
|
||||
}
|
||||
return propertyValue;
|
||||
}
|
||||
|
||||
void MaterialDelegate::setValue(QAbstractItemModel* model,
|
||||
const QModelIndex& index,
|
||||
const QVariant& value) const
|
||||
{
|
||||
auto matModel = dynamic_cast<const QStandardItemModel*>(model);
|
||||
auto item = matModel->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return;
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
if (group->child(row, 1)) {
|
||||
auto material = group->child(row, 1)->data().value<std::shared_ptr<Materials::Material>>();
|
||||
auto propertyName = group->child(row, 0)->text();
|
||||
material->getProperty(propertyName)->setValue(value);
|
||||
group->child(row, 1)->setText(value.toString());
|
||||
}
|
||||
|
||||
notifyChanged(model, index);
|
||||
}
|
||||
|
||||
void MaterialDelegate::notifyChanged(const QAbstractItemModel* model,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
Base::Console().Log("MaterialDelegate::notifyChanged()\n");
|
||||
auto treeModel = dynamic_cast<const QStandardItemModel*>(model);
|
||||
auto item = treeModel->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return;
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
if (group->child(row, 1)) {
|
||||
auto material = group->child(row, 1)->data().value<std::shared_ptr<Materials::Material>>();
|
||||
auto propertyName = group->child(row, 0)->text();
|
||||
auto propertyValue = material->getProperty(propertyName)->getValue();
|
||||
material->setEditStateAlter();
|
||||
Base::Console().Log("MaterialDelegate::notifyChanged() - marked altered\n");
|
||||
|
||||
Q_EMIT const_cast<MaterialDelegate*>(this)->propertyChange(propertyName,
|
||||
propertyValue.toString());
|
||||
}
|
||||
}
|
||||
|
||||
bool MaterialDelegate::editorEvent(QEvent* event,
|
||||
QAbstractItemModel* model,
|
||||
const QStyleOptionViewItem& option,
|
||||
@@ -82,38 +183,35 @@ bool MaterialDelegate::editorEvent(QEvent* event,
|
||||
int row = index.row();
|
||||
|
||||
QString propertyName = group->child(row, 0)->text();
|
||||
QString propertyType = QString::fromStdString("String");
|
||||
if (group->child(row, 2)) {
|
||||
propertyType = group->child(row, 2)->text();
|
||||
}
|
||||
|
||||
std::string type = propertyType.toStdString();
|
||||
if (type == "Color") {
|
||||
showColorModal(item, propertyName);
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::Color) {
|
||||
showColorModal(propertyName, item);
|
||||
// Mark as handled
|
||||
return true;
|
||||
}
|
||||
if (type == "MultiLineString") {
|
||||
showMultiLineString(propertyName, item);
|
||||
if (type == Materials::MaterialValue::MultiLineString) {
|
||||
showMultiLineStringModal(propertyName, item);
|
||||
// Mark as handled
|
||||
return true;
|
||||
}
|
||||
if (type == "List" || type == "FileList" || type == "ImageList") {
|
||||
if (type == Materials::MaterialValue::List || type == Materials::MaterialValue::FileList
|
||||
|| type == Materials::MaterialValue::ImageList) {
|
||||
showListModal(propertyName, item);
|
||||
// Mark as handled
|
||||
return true;
|
||||
}
|
||||
if (type == "2DArray") {
|
||||
if (type == Materials::MaterialValue::Array2D) {
|
||||
showArray2DModal(propertyName, item);
|
||||
// Mark as handled
|
||||
return true;
|
||||
}
|
||||
if (type == "3DArray") {
|
||||
if (type == Materials::MaterialValue::Array3D) {
|
||||
showArray3DModal(propertyName, item);
|
||||
// Mark as handled
|
||||
return true;
|
||||
}
|
||||
if (type == "Image") {
|
||||
if (type == Materials::MaterialValue::Image || type == Materials::MaterialValue::SVG) {
|
||||
showImageModal(propertyName, item);
|
||||
// Mark as handled
|
||||
return true;
|
||||
@@ -123,7 +221,7 @@ bool MaterialDelegate::editorEvent(QEvent* event,
|
||||
return QStyledItemDelegate::editorEvent(event, model, option, index);
|
||||
}
|
||||
|
||||
void MaterialDelegate::showColorModal(QStandardItem* item, QString propertyName)
|
||||
void MaterialDelegate::showColorModal(const QString& propertyName, QStandardItem* item)
|
||||
{
|
||||
QColor currentColor; // = d->col;
|
||||
currentColor.setRgba(parseColor(item->text()));
|
||||
@@ -166,11 +264,7 @@ void MaterialDelegate::showImageModal(const QString& propertyName, QStandardItem
|
||||
|
||||
dlg->adjustSize();
|
||||
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {
|
||||
if (result == QDialog::Accepted) {
|
||||
Base::Console().Log("Accepted\n");
|
||||
}
|
||||
});
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {});
|
||||
|
||||
dlg->exec();
|
||||
}
|
||||
@@ -184,16 +278,12 @@ void MaterialDelegate::showListModal(const QString& propertyName, QStandardItem*
|
||||
|
||||
dlg->adjustSize();
|
||||
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {
|
||||
if (result == QDialog::Accepted) {
|
||||
Base::Console().Log("Accepted\n");
|
||||
}
|
||||
});
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {});
|
||||
|
||||
dlg->exec();
|
||||
}
|
||||
|
||||
void MaterialDelegate::showMultiLineString(const QString& propertyName, QStandardItem* item)
|
||||
void MaterialDelegate::showMultiLineStringModal(const QString& propertyName, QStandardItem* item)
|
||||
{
|
||||
auto material = item->data().value<std::shared_ptr<Materials::Material>>();
|
||||
auto dlg = new TextEdit(propertyName, material);
|
||||
@@ -202,11 +292,7 @@ void MaterialDelegate::showMultiLineString(const QString& propertyName, QStandar
|
||||
|
||||
dlg->adjustSize();
|
||||
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {
|
||||
if (result == QDialog::Accepted) {
|
||||
Base::Console().Log("Accepted\n");
|
||||
}
|
||||
});
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {});
|
||||
|
||||
dlg->exec();
|
||||
}
|
||||
@@ -221,11 +307,7 @@ void MaterialDelegate::showArray2DModal(const QString& propertyName, QStandardIt
|
||||
|
||||
dlg->adjustSize();
|
||||
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {
|
||||
if (result == QDialog::Accepted) {
|
||||
Base::Console().Log("Accepted\n");
|
||||
}
|
||||
});
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {});
|
||||
|
||||
dlg->exec();
|
||||
}
|
||||
@@ -239,11 +321,7 @@ void MaterialDelegate::showArray3DModal(const QString& propertyName, QStandardIt
|
||||
|
||||
dlg->adjustSize();
|
||||
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {
|
||||
if (result == QDialog::Accepted) {
|
||||
Base::Console().Log("Accepted\n");
|
||||
}
|
||||
});
|
||||
connect(dlg, &QDialog::finished, this, [&](int result) {});
|
||||
|
||||
dlg->exec();
|
||||
}
|
||||
@@ -267,207 +345,40 @@ void MaterialDelegate::paint(QPainter* painter,
|
||||
return;
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
|
||||
QString propertyName = group->child(row, 0)->text();
|
||||
QString propertyType = QString::fromStdString("String");
|
||||
if (group->child(row, 2)) {
|
||||
propertyType = group->child(row, 2)->text();
|
||||
}
|
||||
QString propertyValue = QString::fromStdString("");
|
||||
if (group->child(row, 1)) {
|
||||
propertyValue = group->child(row, 1)->text();
|
||||
}
|
||||
|
||||
std::string type = propertyType.toStdString();
|
||||
if (type == "Color") {
|
||||
painter->save();
|
||||
;
|
||||
|
||||
QColor color;
|
||||
color.setRgba(qRgba(0, 0, 0, 255)); // Black border
|
||||
int left = option.rect.left() + 2;
|
||||
int width = option.rect.width() - 4;
|
||||
if (option.rect.width() > 75) {
|
||||
left += (option.rect.width() - 75) / 2;
|
||||
width = 71;
|
||||
}
|
||||
painter->fillRect(left,
|
||||
option.rect.top() + 2,
|
||||
width,
|
||||
option.rect.height() - 4,
|
||||
QBrush(color));
|
||||
|
||||
color.setRgba(parseColor(propertyValue));
|
||||
left = option.rect.left() + 5;
|
||||
width = option.rect.width() - 10;
|
||||
if (option.rect.width() > 75) {
|
||||
left += (option.rect.width() - 75) / 2;
|
||||
width = 65;
|
||||
}
|
||||
painter->fillRect(left,
|
||||
option.rect.top() + 5,
|
||||
width,
|
||||
option.rect.height() - 10,
|
||||
QBrush(color));
|
||||
|
||||
painter->restore();
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::Quantity) {
|
||||
paintQuantity(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (type == "Image") {
|
||||
painter->save();
|
||||
|
||||
QImage img;
|
||||
if (!propertyValue.isEmpty()) {
|
||||
Base::Console().Log("Loading image\n");
|
||||
QByteArray by = QByteArray::fromBase64(propertyValue.toUtf8());
|
||||
img = QImage::fromData(by, "PNG").scaled(64, 64, Qt::KeepAspectRatio);
|
||||
}
|
||||
QRect target(option.rect);
|
||||
if (target.width() > target.height()) {
|
||||
target.setWidth(target.height());
|
||||
}
|
||||
else {
|
||||
target.setHeight(target.width());
|
||||
}
|
||||
painter->drawImage(target, img, img.rect());
|
||||
|
||||
painter->restore();
|
||||
if (type == Materials::MaterialValue::Image) {
|
||||
paintImage(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (type == "List" || type == "FileList" || type == "ImageList") {
|
||||
painter->save();
|
||||
|
||||
QImage table(QString::fromStdString(":/icons/list.svg"));
|
||||
QRect target(option.rect);
|
||||
if (target.width() > target.height()) {
|
||||
target.setWidth(target.height());
|
||||
}
|
||||
else {
|
||||
target.setHeight(target.width());
|
||||
}
|
||||
painter->drawImage(target, table, table.rect());
|
||||
|
||||
painter->restore();
|
||||
if (type == Materials::MaterialValue::SVG) {
|
||||
paintSVG(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (type == "MultiLineString") {
|
||||
painter->save();
|
||||
|
||||
QImage table(QString::fromStdString(":/icons/multiline.svg"));
|
||||
QRect target(option.rect);
|
||||
if (target.width() > target.height()) {
|
||||
target.setWidth(target.height());
|
||||
}
|
||||
else {
|
||||
target.setHeight(target.width());
|
||||
}
|
||||
painter->drawImage(target, table, table.rect());
|
||||
|
||||
painter->restore();
|
||||
if (type == Materials::MaterialValue::Color) {
|
||||
paintColor(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (type == "2DArray" || type == "3DArray") {
|
||||
painter->save();
|
||||
|
||||
QImage table(QString::fromStdString(":/icons/table.svg"));
|
||||
QRect target(option.rect);
|
||||
if (target.width() > target.height()) {
|
||||
target.setWidth(target.height());
|
||||
}
|
||||
else {
|
||||
target.setHeight(target.width());
|
||||
}
|
||||
painter->drawImage(target, table, table.rect());
|
||||
|
||||
painter->restore();
|
||||
if (type == Materials::MaterialValue::List || type == Materials::MaterialValue::FileList
|
||||
|| type == Materials::MaterialValue::ImageList) {
|
||||
paintList(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (type == Materials::MaterialValue::MultiLineString) {
|
||||
paintMultiLineString(painter, option, index);
|
||||
return;
|
||||
}
|
||||
if (type == Materials::MaterialValue::Array2D || type == Materials::MaterialValue::Array3D) {
|
||||
paintArray(painter, option, index);
|
||||
return;
|
||||
}
|
||||
|
||||
QStyledItemDelegate::paint(painter, option, index);
|
||||
}
|
||||
|
||||
QSize MaterialDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||
{
|
||||
if (index.column() != 1) {
|
||||
return QStyledItemDelegate::sizeHint(option, index);
|
||||
}
|
||||
|
||||
auto treeModel = dynamic_cast<const QStandardItemModel*>(index.model());
|
||||
|
||||
// Check we're not the material model root. This is also used to access the entry columns
|
||||
auto item = treeModel->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return QStyledItemDelegate::sizeHint(option, index);
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
|
||||
QString propertyType = QString::fromStdString("String");
|
||||
if (group->child(row, 2)) {
|
||||
propertyType = group->child(row, 2)->text();
|
||||
}
|
||||
|
||||
std::string type = propertyType.toStdString();
|
||||
if (type == "Color") {
|
||||
return {75, 23}; // Standard QPushButton size
|
||||
}
|
||||
if (type == "Image") {
|
||||
return {64, 64};
|
||||
}
|
||||
if (type == "2DArray" || type == "3DArray" || type == "MultiLineString" || type == "List"
|
||||
|| type == "FileList" || type == "ImageList") {
|
||||
return {23, 23};
|
||||
}
|
||||
|
||||
return QStyledItemDelegate::sizeHint(option, index);
|
||||
}
|
||||
|
||||
void MaterialDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
|
||||
{
|
||||
QVariant propertyType = editor->property("Type");
|
||||
auto model = dynamic_cast<const QStandardItemModel*>(index.model());
|
||||
QStandardItem* item = model->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return;
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
QString propertyName = group->child(row, 0)->text();
|
||||
|
||||
std::string type = propertyType.toString().toStdString();
|
||||
if (type == "File") {
|
||||
auto chooser = dynamic_cast<Gui::FileChooser*>(editor);
|
||||
item->setText(chooser->fileName());
|
||||
}
|
||||
else if (type == "Quantity") {
|
||||
auto input = dynamic_cast<Gui::InputField*>(editor);
|
||||
item->setText(input->getQuantityString());
|
||||
}
|
||||
else {
|
||||
QStyledItemDelegate::setEditorData(editor, index);
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialDelegate::setModelData(QWidget* editor,
|
||||
QAbstractItemModel* model,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
QStyledItemDelegate::setModelData(editor, model, index);
|
||||
|
||||
auto item = dynamic_cast<const QStandardItemModel*>(model)->itemFromIndex(index);
|
||||
auto group = item->parent();
|
||||
if (!group) {
|
||||
return;
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
QString propertyName = group->child(row, 0)->text();
|
||||
Q_EMIT const_cast<MaterialDelegate*>(this)->propertyChange(propertyName, item->text());
|
||||
}
|
||||
|
||||
QWidget* MaterialDelegate::createEditor(QWidget* parent,
|
||||
const QStyleOptionViewItem& styleOption,
|
||||
const QModelIndex& index) const
|
||||
@@ -487,52 +398,27 @@ QWidget* MaterialDelegate::createEditor(QWidget* parent,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
|
||||
QString propertyName = group->child(row, 0)->text();
|
||||
QString propertyType = QString::fromStdString("String");
|
||||
if (group->child(row, 2)) {
|
||||
propertyType = group->child(row, 2)->text();
|
||||
}
|
||||
|
||||
QString propertyValue = QString::fromStdString("");
|
||||
if (group->child(row, 1)) {
|
||||
propertyValue = group->child(row, 1)->text();
|
||||
}
|
||||
|
||||
QString propertyUnits = QString::fromStdString("");
|
||||
if (group->child(row, 1)) {
|
||||
propertyUnits = group->child(row, 3)->text();
|
||||
}
|
||||
|
||||
QWidget* editor =
|
||||
createWidget(parent, propertyName, propertyType, propertyValue, propertyUnits);
|
||||
QVariant value = treeModel->data(index);
|
||||
QWidget* editor = createWidget(parent, value, index);
|
||||
|
||||
return editor;
|
||||
}
|
||||
|
||||
QWidget* MaterialDelegate::createWidget(QWidget* parent,
|
||||
const QString& propertyName,
|
||||
const QString& propertyType,
|
||||
const QString& propertyValue,
|
||||
const QString& propertyUnits) const
|
||||
const QVariant& item,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
Q_UNUSED(propertyName);
|
||||
|
||||
QWidget* widget = nullptr;
|
||||
|
||||
std::string type = propertyType.toStdString();
|
||||
if (type == "String" || type == "URL") {
|
||||
widget = new Gui::PrefLineEdit(parent);
|
||||
}
|
||||
else if (type == "Integer") {
|
||||
auto type = getType(index);
|
||||
if (type == Materials::MaterialValue::Integer) {
|
||||
auto spinner = new Gui::IntSpinBox(parent);
|
||||
spinner->setMinimum(0);
|
||||
spinner->setMaximum(INT_MAX);
|
||||
spinner->setValue(propertyValue.toInt());
|
||||
spinner->setValue(item.toInt());
|
||||
widget = spinner;
|
||||
}
|
||||
else if (type == "Float") {
|
||||
else if (type == Materials::MaterialValue::Float) {
|
||||
auto spinner = new Gui::DoubleSpinBox(parent);
|
||||
|
||||
// the magnetic permeability is the parameter for which many decimals matter
|
||||
@@ -544,64 +430,43 @@ QWidget* MaterialDelegate::createWidget(QWidget* parent,
|
||||
|
||||
spinner->setMinimum(std::numeric_limits<double>::min());
|
||||
spinner->setMaximum(std::numeric_limits<double>::max());
|
||||
spinner->setValue(propertyValue.toDouble());
|
||||
spinner->setValue(item.toDouble());
|
||||
widget = spinner;
|
||||
}
|
||||
else if (type == "Boolean") {
|
||||
else if (type == Materials::MaterialValue::Boolean) {
|
||||
auto combo = new Gui::PrefComboBox(parent);
|
||||
combo->insertItem(0, QString::fromStdString(""));
|
||||
combo->insertItem(1, tr("False"));
|
||||
combo->insertItem(2, tr("True"));
|
||||
combo->setCurrentText(propertyValue);
|
||||
combo->setCurrentText(item.toString());
|
||||
widget = combo;
|
||||
}
|
||||
else if (type == "Quantity") {
|
||||
else if (type == Materials::MaterialValue::Quantity) {
|
||||
auto input = new Gui::InputField(parent);
|
||||
input->setMinimum(std::numeric_limits<double>::min());
|
||||
input->setMaximum(std::numeric_limits<double>::max());
|
||||
input->setUnitText(propertyUnits); // TODO: Ensure this exists
|
||||
input->setUnitText(getUnits(index));
|
||||
input->setPrecision(6);
|
||||
input->setQuantityString(propertyValue);
|
||||
input->setValue(item.value<Base::Quantity>());
|
||||
|
||||
widget = input;
|
||||
}
|
||||
else if (type == "File") {
|
||||
else if (type == Materials::MaterialValue::File) {
|
||||
auto chooser = new Gui::FileChooser(parent);
|
||||
if (!propertyValue.isEmpty()) {
|
||||
chooser->setFileName(propertyValue);
|
||||
if (!item.toString().isEmpty()) {
|
||||
chooser->setFileName(item.toString());
|
||||
}
|
||||
|
||||
widget = chooser;
|
||||
}
|
||||
else {
|
||||
// Default editor
|
||||
widget = new QLineEdit(parent);
|
||||
auto lineEdit = new Gui::PrefLineEdit(parent);
|
||||
lineEdit->setText(item.toString());
|
||||
widget = lineEdit;
|
||||
}
|
||||
|
||||
widget->setProperty("Type", propertyType);
|
||||
// widget->setParent(parent);
|
||||
|
||||
return widget;
|
||||
}
|
||||
|
||||
QRgb MaterialDelegate::parseColor(const QString& color) const
|
||||
{
|
||||
QString trimmed = color;
|
||||
trimmed.replace(QRegularExpression(QString::fromStdString("\\(([^<]*)\\)")),
|
||||
QString::fromStdString("\\1"));
|
||||
QStringList parts = trimmed.split(QString::fromStdString(","));
|
||||
if (parts.length() < 3) {
|
||||
return qRgba(0, 0, 0, 255);
|
||||
}
|
||||
int red = parts.at(0).toDouble() * 255;
|
||||
int green = parts.at(1).toDouble() * 255;
|
||||
int blue = parts.at(2).toDouble() * 255;
|
||||
int alpha = 255;
|
||||
if (parts.length() > 3) {
|
||||
alpha = parts.at(3).toDouble() * 255;
|
||||
}
|
||||
|
||||
return qRgba(red, green, blue, alpha);
|
||||
}
|
||||
|
||||
#include "moc_MaterialDelegate.cpp"
|
||||
|
||||
@@ -33,10 +33,12 @@
|
||||
#include <Mod/Material/App/Materials.h>
|
||||
#include <Mod/Material/App/ModelManager.h>
|
||||
|
||||
#include "BaseDelegate.h"
|
||||
|
||||
namespace MatGui
|
||||
{
|
||||
|
||||
class MaterialDelegate: public QStyledItemDelegate
|
||||
class MaterialDelegate: public BaseDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
@@ -46,14 +48,14 @@ public:
|
||||
QWidget* createEditor(QWidget* parent,
|
||||
const QStyleOptionViewItem& styleOption,
|
||||
const QModelIndex& index) const override;
|
||||
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||
// QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||
void paint(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const override;
|
||||
void setEditorData(QWidget* editor, const QModelIndex& index) const override;
|
||||
void setModelData(QWidget* editor,
|
||||
QAbstractItemModel* model,
|
||||
const QModelIndex& index) const override;
|
||||
// void setEditorData(QWidget* editor, const QModelIndex& index) const override;
|
||||
// void setModelData(QWidget* editor,
|
||||
// QAbstractItemModel* model,
|
||||
// const QModelIndex& index) const override;
|
||||
|
||||
protected:
|
||||
bool editorEvent(QEvent* event,
|
||||
@@ -61,21 +63,25 @@ protected:
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) override;
|
||||
|
||||
Materials::MaterialValue::ValueType getType(const QModelIndex& index) const override;
|
||||
QString getUnits(const QModelIndex& index) const override;
|
||||
QVariant getValue(const QModelIndex& index) const override;
|
||||
void setValue(QAbstractItemModel* model,
|
||||
const QModelIndex& index,
|
||||
const QVariant& value) const override;
|
||||
void notifyChanged(const QAbstractItemModel* model, const QModelIndex& index) const override;
|
||||
|
||||
Q_SIGNALS:
|
||||
/** Emits this signal when a property has changed */
|
||||
void propertyChange(const QString& property, const QString value);
|
||||
|
||||
private:
|
||||
QWidget* createWidget(QWidget* parent,
|
||||
const QString& propertyName,
|
||||
const QString& propertyType,
|
||||
const QString& propertyValue,
|
||||
const QString& propertyUnits) const;
|
||||
QRgb parseColor(const QString& color) const;
|
||||
void showColorModal(QStandardItem* item, QString propertyName);
|
||||
QWidget* createWidget(QWidget* parent, const QVariant& item, const QModelIndex& index) const;
|
||||
// QRgb parseColor(const QString& color) const;
|
||||
void showColorModal(const QString& propertyName, QStandardItem* item);
|
||||
void showImageModal(const QString& propertyName, QStandardItem* item);
|
||||
void showListModal(const QString& propertyName, QStandardItem* item);
|
||||
void showMultiLineString(const QString& propertyName, QStandardItem* item);
|
||||
void showMultiLineStringModal(const QString& propertyName, QStandardItem* item);
|
||||
void showArray2DModal(const QString& propertyName, QStandardItem* item);
|
||||
void showArray3DModal(const QString& propertyName, QStandardItem* item);
|
||||
};
|
||||
|
||||
@@ -156,7 +156,7 @@ void MaterialsEditor::getFavorites()
|
||||
auto param = App::GetApplication().GetParameterGroupByPath(
|
||||
"User parameter:BaseApp/Preferences/Mod/Material/Favorites");
|
||||
int count = param->GetInt("Favorites", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("FAV%1").arg(i);
|
||||
QString uuid = QString::fromStdString(param->GetASCII(key.toStdString().c_str(), ""));
|
||||
_favorites.push_back(uuid);
|
||||
@@ -170,7 +170,7 @@ void MaterialsEditor::saveFavorites()
|
||||
|
||||
// Clear out the existing favorites
|
||||
int count = param->GetInt("Favorites", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("FAV%1").arg(i);
|
||||
param->RemoveASCII(key.toStdString().c_str());
|
||||
}
|
||||
@@ -232,7 +232,7 @@ void MaterialsEditor::getRecents()
|
||||
"User parameter:BaseApp/Preferences/Mod/Material/Recent");
|
||||
_recentMax = param->GetInt("RecentMax", 5);
|
||||
int count = param->GetInt("Recent", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("MRU%1").arg(i);
|
||||
QString uuid = QString::fromStdString(param->GetASCII(key.toStdString().c_str(), ""));
|
||||
_recents.push_back(uuid);
|
||||
@@ -246,7 +246,7 @@ void MaterialsEditor::saveRecents()
|
||||
|
||||
// Clear out the existing favorites
|
||||
int count = param->GetInt("Recent", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("MRU%1").arg(i);
|
||||
param->RemoveASCII(key.toStdString().c_str());
|
||||
}
|
||||
@@ -342,6 +342,7 @@ void MaterialsEditor::propertyChange(const QString& property, const QString valu
|
||||
_material->setAppearanceValue(property, value);
|
||||
updatePreview();
|
||||
}
|
||||
update();
|
||||
_edited = true;
|
||||
}
|
||||
|
||||
@@ -514,6 +515,15 @@ void MaterialsEditor::onOk(bool checked)
|
||||
{
|
||||
Q_UNUSED(checked)
|
||||
|
||||
// Ensure data is saved (or discarded) before exiting
|
||||
if (_material->getEditState() != Materials::Material::ModelEdit_None) {
|
||||
// Prompt the user to save or discard changes
|
||||
int res = confirmSave(this);
|
||||
if (res == QMessageBox::Cancel) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
accept();
|
||||
}
|
||||
|
||||
@@ -606,7 +616,7 @@ void MaterialsEditor::saveMaterialTree(const Base::Reference<ParameterGrp>& para
|
||||
treeParam->Clear();
|
||||
|
||||
auto tree = ui->treeMaterials;
|
||||
auto model = static_cast<QStandardItemModel*>(tree->model());
|
||||
auto model = dynamic_cast<QStandardItemModel*>(tree->model());
|
||||
|
||||
auto root = model->invisibleRootItem();
|
||||
for (int i = 0; i < root->rowCount(); i++) {
|
||||
@@ -796,7 +806,7 @@ void MaterialsEditor::fillMaterialTree()
|
||||
"User parameter:BaseApp/Preferences/Mod/Material/Editor/MaterialTree");
|
||||
|
||||
auto tree = ui->treeMaterials;
|
||||
auto model = static_cast<QStandardItemModel*>(tree->model());
|
||||
auto model = dynamic_cast<QStandardItemModel*>(tree->model());
|
||||
|
||||
auto lib = new QStandardItem(tr("Favorites"));
|
||||
lib->setFlags(Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled);
|
||||
@@ -835,7 +845,7 @@ void MaterialsEditor::createMaterialTree()
|
||||
void MaterialsEditor::refreshMaterialTree()
|
||||
{
|
||||
auto tree = ui->treeMaterials;
|
||||
auto model = static_cast<QStandardItemModel*>(tree->model());
|
||||
auto model = dynamic_cast<QStandardItemModel*>(tree->model());
|
||||
model->clear();
|
||||
|
||||
fillMaterialTree();
|
||||
@@ -925,7 +935,7 @@ QString MaterialsEditor::getColorHash(const QString& colorString, int colorRange
|
||||
void MaterialsEditor::updateMaterialAppearance()
|
||||
{
|
||||
QTreeView* tree = ui->treeAppearance;
|
||||
auto treeModel = static_cast<QStandardItemModel*>(tree->model());
|
||||
auto treeModel = dynamic_cast<QStandardItemModel*>(tree->model());
|
||||
treeModel->clear();
|
||||
|
||||
QStringList headers;
|
||||
@@ -1099,7 +1109,7 @@ void MaterialsEditor::onSelectMaterial(const QItemSelection& selected,
|
||||
|
||||
// Get the UUID before changing the underlying data model
|
||||
QString uuid;
|
||||
auto model = static_cast<QStandardItemModel*>(ui->treeMaterials->model());
|
||||
auto model = dynamic_cast<QStandardItemModel*>(ui->treeMaterials->model());
|
||||
QModelIndexList indexes = selected.indexes();
|
||||
for (auto it = indexes.begin(); it != indexes.end(); it++) {
|
||||
QStandardItem* item = model->itemFromIndex(*it);
|
||||
@@ -1140,6 +1150,15 @@ void MaterialsEditor::onDoubleClick(const QModelIndex& index)
|
||||
{
|
||||
Q_UNUSED(index)
|
||||
|
||||
// Ensure data is saved (or discarded) before exiting
|
||||
if (_material->getEditState() != Materials::Material::ModelEdit_None) {
|
||||
// Prompt the user to save or discard changes
|
||||
int res = confirmSave(this);
|
||||
if (res == QMessageBox::Cancel) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
accept();
|
||||
}
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ void ModelSelect::getFavorites()
|
||||
auto param = App::GetApplication().GetParameterGroupByPath(
|
||||
"User parameter:BaseApp/Preferences/Mod/Material/Models/Favorites");
|
||||
int count = param->GetInt("Favorites", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("FAV%1").arg(i);
|
||||
QString uuid = QString::fromStdString(param->GetASCII(key.toStdString().c_str(), ""));
|
||||
_favorites.push_back(uuid);
|
||||
@@ -96,7 +96,7 @@ void ModelSelect::saveFavorites()
|
||||
|
||||
// Clear out the existing favorites
|
||||
int count = param->GetInt("Favorites", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("FAV%1").arg(i);
|
||||
param->RemoveASCII(key.toStdString().c_str());
|
||||
}
|
||||
@@ -149,7 +149,7 @@ void ModelSelect::getRecents()
|
||||
"User parameter:BaseApp/Preferences/Mod/Material/Models/Recent");
|
||||
_recentMax = param->GetInt("RecentMax", 5);
|
||||
int count = param->GetInt("Recent", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("MRU%1").arg(i);
|
||||
QString uuid = QString::fromStdString(param->GetASCII(key.toStdString().c_str(), ""));
|
||||
_recents.push_back(uuid);
|
||||
@@ -163,7 +163,7 @@ void ModelSelect::saveRecents()
|
||||
|
||||
// Clear out the existing favorites
|
||||
int count = param->GetInt("Recent", 0);
|
||||
for (int i = 0; i < count; i++) {
|
||||
for (int i = 0; static_cast<long>(i) < count; i++) {
|
||||
QString key = QString::fromLatin1("MRU%1").arg(i);
|
||||
param->RemoveASCII(key.toStdString().c_str());
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ General:
|
||||
UUID: "5dbb7be6-8b63-479b-ab4c-87be02ead973"
|
||||
Author: "David Carter"
|
||||
License: "GPL-2.0-or-later"
|
||||
Name: "Default Appearance"
|
||||
Name: "Default"
|
||||
Description: "Defines the default appearance properties"
|
||||
AppearanceModels:
|
||||
BasicRendering:
|
||||
@@ -3,7 +3,7 @@
|
||||
General:
|
||||
UUID: "ef0e4040-a498-48c3-a87b-e996bfd89195"
|
||||
License: "GPL-2.0-or-later"
|
||||
Name: "Carbon dioxide"
|
||||
Name: "Carbon Dioxide"
|
||||
Description: "Carbon dioxide properties at 20 Degrees Celsius and 1 atm"
|
||||
Models:
|
||||
Father:
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "c8bb743d-0f50-4109-b452-725037c3e3ec"
|
||||
Name: "Diagonal4"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Diagonal4, 45 diagonal R, Solid, 4.0 mm separation
|
||||
45,0,0,0,4.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "bf7789e6-227d-4859-a75b-18008723fb51"
|
||||
Name: "Diagonal5"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Diagonal5, 45 diagonal L, Solid, 4.0 mm separation
|
||||
-45,0,0,0,4.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "7cc39c57-f49c-400d-a985-8f8d141f5478"
|
||||
Name: "Diamond"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Diamond, 45 diagonals L & R, Solid, 1.0 mm separation
|
||||
45,0,0,0,1.0
|
||||
-45,0,0,0,1.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "b8940cab-1fbb-4ba5-9e32-2179589d6593"
|
||||
Name: "Diamond2"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Diamond2, 45 diagonals L & R, Solid, 2.0 mm separation
|
||||
45,0,0,0,2.0
|
||||
-45,0,0,0,2.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "a9146fcf-4168-4065-8a58-ec78735e471d"
|
||||
Name: "Diamond4"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Diamond4, 45 diagonals L & R, Solid, 4.0 mm separation
|
||||
45,0,0,0,4.0
|
||||
-45,0,0,0,4.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "0902d885-ac66-441e-9c3f-e0086a4817fc"
|
||||
Name: "Horizontal5"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Horizontal5, horizontal lines, Solid 5.0 separation
|
||||
0,0,0,0,5.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "7e8510f7-7d87-4782-894d-068b0d3f04b7"
|
||||
Name: "Square"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Square, square grid, Solid, 5.0 mm separation
|
||||
90,1,1,0,5.0
|
||||
0,0,0,1,5.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35279 +19 (Git)
|
||||
General:
|
||||
UUID: "eaa335a5-3bee-4da7-9e26-0ebbdac2e182"
|
||||
Name: "Vertical5"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
PAT:
|
||||
UUID: "0326c759-4e3d-46ca-bb7d-146ebebea65e"
|
||||
Hatch Color: "(0,0,0,1)"
|
||||
Hatch Pattern: |2
|
||||
*Vertical5, vertical lines, Solid, 5.0 separation
|
||||
90,0,0,0,5.0
|
||||
Hatch Scale: "1"
|
||||
Hatch Weight: "1"
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +10 (Git)
|
||||
General:
|
||||
UUID: "abab7c4a-464a-40af-bf9e-32f658adf224"
|
||||
Name: "aluminum"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.0" id="svg2" height="64" width="64">
|
||||
<metadata id="metadata23">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs21" />
|
||||
<g id="groupe1">
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 0.0 L 64.0 64.0 " id="Line_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 64.0 L 0.0 16.0 " id="Line014_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 64.0 L 0.0 12.8 " id="Line015_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 0.0 L 64.0 12.8 " id="Line013_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 3.2 0.0 L 64.0 60.8 " id="Line001_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 60.8 L 3.2 64.0 " id="Line002_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 35.2 0.0 L 64.0 28.8 " id="Line006_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 44.8 L 19.2 64.0 " id="Line009_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 64.0 48.0 L 16.0 0.0 " id="Line010_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 32.0 L 32.0 64.0 " id="Line003_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 64.0 44.8 L 19.2 0.0 " id="Line011_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 0.0 L 64.0 16.0 " id="Line012_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 28.8 L 35.2 64.0 " id="Line004_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 0.0 L 64.0 32.0 " id="Line005_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 48.0 L 16.0 64.0 " id="Line008_w0000" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "37b63834-928e-444c-a1b7-49a3f3fba3d1"
|
||||
Name: "brick01"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64 64" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4">
|
||||
<clipPath id="clip1">
|
||||
<path d="M 12.539062,411 68,411 l 0,2 -55.460938,0 z m 0,0" id="path8148" />
|
||||
</clipPath>
|
||||
<clipPath id="clip2">
|
||||
<path d="M 12.539062,468 124,468 l 0,2 -111.460938,0 z m 0,0" id="path8151" />
|
||||
</clipPath>
|
||||
<clipPath id="clip3">
|
||||
<path d="M 12.539062,525 68,525 l 0,2 -55.460938,0 z m 0,0" id="path8154" />
|
||||
</clipPath>
|
||||
<clipPath id="clip4">
|
||||
<path d="M 12.539062,408 124,408 l 0,2 -111.460938,0 z m 0,0" id="path8157" />
|
||||
</clipPath>
|
||||
<clipPath id="clip5">
|
||||
<path d="M 12.539062,465 68,465 l 0,2 -55.460938,0 z m 0,0" id="path8160" />
|
||||
</clipPath>
|
||||
<clipPath id="clip6">
|
||||
<path d="M 12.539062,522 124,522 l 0,2 -111.460938,0 z m 0,0" id="path8163" />
|
||||
</clipPath>
|
||||
<clipPath id="clip7">
|
||||
<path d="M 12.539062,579 68,579 l 0,2 -55.460938,0 z m 0,0" id="path8166" />
|
||||
</clipPath>
|
||||
<clipPath id="clip8">
|
||||
<path d="M 12.539062,354 241,354 l 0,228.5 -228.460938,0 z m 0,0" id="path8169" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer2">
|
||||
<path id="path8461" d="m 31.2566,0 0,15.23976 L 0,15.23976 0,0 Z" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path8463" d="m 31.99908,0 0,15.23976 31.2566,0 0,-15.23976 z" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path8467" d="m 63.99926,31.25606 -16.00009,0 0,-15.25624 16.00009,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795276;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path8469" d="m 0,15.99982 15.23892,0 0,15.25624 -15.23892,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795276;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path8471" d="m 0,31.99963 31.2566,0 0,15.25625 -31.2566,0 z" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path8473" d="m 0,47.99944 15.23892,0 0,15.25625 -15.23892,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795276;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="rect8477" d="m 16.00008,15.99982 31.256611,0 0,15.25624 -31.256611,0 z" style="opacity:1;fill:none;fill-opacity:0.61872146;fill-rule:nonzero;stroke:#000000;stroke-width:0.37795276;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="rect8479" d="m 31.999081,31.99963 31.256599,0 0,15.25625 -31.256599,0 z" style="opacity:1;fill:none;fill-opacity:0.61872146;fill-rule:nonzero;stroke:#000000;stroke-width:0.37795276;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="rect8481" d="m 16.00008,47.999439 31.256611,0 0,15.256251 -31.256611,0 z" style="opacity:1;fill:none;fill-opacity:0.61872146;fill-rule:nonzero;stroke:#000000;stroke-width:0.37795276;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795276;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 63.99926,63.25569 -16.00009,0 0,-15.25625 16.00009,0" id="path8486" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "39221178-f9a4-40f5-927f-eed2f17c748d"
|
||||
Name: "concrete"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" height="64" width="64" version="1.1" id="svg3880">
|
||||
<metadata id="metadata3920">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs3882">
|
||||
<pattern height=".5" width=".5" y="0" x="0" patternUnits="userSpaceOnUse" id="concrete">
|
||||
<g id="g3401" transform="scale(.01)" style="fill:none;stroke:#000000;stroke-width:0.5">
|
||||
<path id="path3886" d="m 5.3571428,3.5228946 a 1.3392857,1.3392857 0 1 1 -2.6785715,0 1.3392857,1.3392857 0 1 1 2.6785715,0 z" />
|
||||
<path id="path3888" d="m 14.107143,6.8264661 a 3.2142856,3.2142856 0 1 1 -6.4285711,0 3.2142856,3.2142856 0 1 1 6.4285711,0 z" />
|
||||
<path id="path3890" d="m 14.821428,30.933609 a 0.71428573,0.71428573 0 1 1 -1.428571,0 0.71428573,0.71428573 0 1 1 1.428571,0 z" />
|
||||
<path id="path3892" d="m 28.571428,16.201466 a 2.2321429,2.2321429 0 1 1 -4.464286,0 2.2321429,2.2321429 0 1 1 4.464286,0 z" />
|
||||
<path id="path3894" d="m 6.2500002,20.085394 a 0.49107143,0.49107143 0 1 1 -0.9821429,0 0.49107143,0.49107143 0 1 1 0.9821429,0 z" />
|
||||
<path id="path3896" d="m 34.732144,27.527725 a 0.26785713,0.43340197 0 1 1 -0.535714,0 0.26785713,0.43340197 0 1 1 0.535714,0 z" />
|
||||
<path id="path3898" d="m 40.178572,9.3711081 a 0.13392857,0.22321428 0 1 1 -0.267857,0 0.13392857,0.22321428 0 1 1 0.267857,0 z" />
|
||||
<path id="path3900" d="m 40.982144,38.746109 a 0.22321428,0.22321428 0 1 1 -0.446428,0 0.22321428,0.22321428 0 1 1 0.446428,0 z" />
|
||||
<path id="path3902" d="m 31.160715,40.576466 a 3.9285715,3.9285715 0 1 1 -7.857143,0 3.9285715,3.9285715 0 1 1 7.857143,0 z" />
|
||||
<path id="path3904" d="m 22.232143,38.255035 a 1.6071428,1.6071428 0 1 1 -3.214286,0 1.6071428,1.6071428 0 1 1 3.214286,0 z" />
|
||||
<path id="path3906" d="m 41.964287,11.647895 a 0.89285713,0.89285713 0 1 1 -1.785714,0 0.89285713,0.89285713 0 1 1 1.785714,0 z" />
|
||||
<path id="path3908" d="m 36.07143,25.755037 a 0.35714287,0.35714287 0 1 1 -0.714286,0 0.35714287,0.35714287 0 1 1 0.714286,0 z" />
|
||||
<path id="path3910" d="m 6.25,42.987179 a 0.625,0.625 0 1 1 -1.25,0 0.625,0.625 0 1 1 1.25,0 z" />
|
||||
<path id="path3912" d="m 17.321428,19.951466 a 1.3392857,1.3392857 0 1 1 -2.678571,0 1.3392857,1.3392857 0 1 1 2.678571,0 z" />
|
||||
<path id="path3914" d="m 11.964286,18.165752 a 0.44642857,0.44642857 0 1 1 -0.892857,0 0.44642857,0.44642857 0 1 1 0.892857,0 z" />
|
||||
<path id="path3916" d="m 16.607143,7.8978949 a 0.53571427,0.53571427 0 1 1 -1.071429,0 0.53571427,0.53571427 0 1 1 1.071429,0 z" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<g style="fill:none;stroke:#000000;stroke-width:0.5" transform="matrix(1.4548802,0,0,-1.4548802,-0.3104243,65.764647)" id="g4092">
|
||||
<path d="m 5.3571428,3.5228946 a 1.3392857,1.3392857 0 1 1 -2.6785715,0 1.3392857,1.3392857 0 1 1 2.6785715,0 z" id="path4094" />
|
||||
<path d="m 14.107143,6.8264661 a 3.2142856,3.2142856 0 1 1 -6.4285711,0 3.2142856,3.2142856 0 1 1 6.4285711,0 z" id="path4096" />
|
||||
<path d="m 14.821428,30.933609 a 0.71428573,0.71428573 0 1 1 -1.428571,0 0.71428573,0.71428573 0 1 1 1.428571,0 z" id="path4098" />
|
||||
<path d="m 28.571428,16.201466 a 2.232143,2.232143 0 1 1 -4.464286,0 2.232143,2.232143 0 1 1 4.464286,0 z" id="path4100" />
|
||||
<path d="m 6.2500002,20.085394 a 0.49107145,0.49107145 0 1 1 -0.9821429,0 0.49107145,0.49107145 0 1 1 0.9821429,0 z" id="path4102" />
|
||||
<path d="m 34.732144,27.527725 a 0.26785713,0.43340197 0 1 1 -0.535714,0 0.26785713,0.43340197 0 1 1 0.535714,0 z" id="path4104" />
|
||||
<path d="m 40.178572,9.3711081 a 0.13392857,0.22321428 0 1 1 -0.267857,0 0.13392857,0.22321428 0 1 1 0.267857,0 z" id="path4106" />
|
||||
<path d="m 40.982144,38.746109 a 0.22321428,0.22321428 0 1 1 -0.446428,0 0.22321428,0.22321428 0 1 1 0.446428,0 z" id="path4108" />
|
||||
<path d="m 31.160715,40.576466 a 3.9285715,3.9285715 0 1 1 -7.857143,0 3.9285715,3.9285715 0 1 1 7.857143,0 z" id="path4110" />
|
||||
<path d="m 22.232143,38.255035 a 1.607143,1.607143 0 1 1 -3.214286,0 1.607143,1.607143 0 1 1 3.214286,0 z" id="path4112" />
|
||||
<path d="m 41.964287,11.647895 a 0.89285713,0.89285713 0 1 1 -1.785714,0 0.89285713,0.89285713 0 1 1 1.785714,0 z" id="path4114" />
|
||||
<path d="m 36.07143,25.755037 a 0.357143,0.357143 0 1 1 -0.714286,0 0.357143,0.357143 0 1 1 0.714286,0 z" id="path4116" />
|
||||
<path d="m 6.25,42.987179 a 0.625,0.625 0 1 1 -1.25,0 0.625,0.625 0 1 1 1.25,0 z" id="path4118" />
|
||||
<path d="m 17.321428,19.951466 a 1.3392857,1.3392857 0 1 1 -2.678571,0 1.3392857,1.3392857 0 1 1 2.678571,0 z" id="path4120" />
|
||||
<path d="m 11.964286,18.165752 a 0.44642857,0.44642857 0 1 1 -0.892857,0 0.44642857,0.44642857 0 1 1 0.892857,0 z" id="path4122" />
|
||||
<path d="m 16.607143,7.8978949 a 0.5357145,0.5357145 0 1 1 -1.071429,0 0.5357145,0.5357145 0 1 1 1.071429,0 z" id="path4124" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "e321248b-de79-4573-b68b-53df020052b0"
|
||||
Name: "cross"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" height="64" width="64" version="1.1" id="svg3542">
|
||||
<metadata id="metadata3552">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs3544">
|
||||
<pattern height=".1" width=".1" y="0" x="0" patternUnits="userSpaceOnUse" id="cross">
|
||||
<g id="g3382" style="fill:none;stroke:#000000;stroke-width:0.005">
|
||||
<path id="path3384" d="M0,0 l.12,.12" />
|
||||
<path id="path3386" d="M.12,0 l-.12,.12" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<path id="path2998" d="M 64,0 0,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3000" d="M 48,0 0,48" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3002" d="M 16,64 64,16" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3004" d="M 32,0 0,32" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3006" d="M 16,0 0,16" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3008" d="M 64,32 32,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3010" d="M 64,48 48,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3683" d="M 0,0 64,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3685" d="M 16,0 64,48" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3687" d="M 32,0 64,32" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3689" d="M 48,0 64,16" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3691" d="M 0,16 48,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3693" d="M 0,32 32,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3695" d="M 0,48 16,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "50e78494-a675-413f-a541-70d1904f0189"
|
||||
Name: "cuprous"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.0" id="svg2" height="64" width="64">
|
||||
<metadata id="metadata67">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs65" />
|
||||
<g id="groupe1">
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 0.0 L 64.0 64.0 " id="Line_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 19.2 L 16.0 22.4 " id="Line022_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 6.4 L 16.0 9.6 " id="Line023_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 51.2 L 22.4 54.4 " id="Line024_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 25.6 L 22.4 28.8 " id="Line026_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 38.4 L 22.4 41.6 " id="Line025_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 0.0 L 9.6 3.2 " id="Line014_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 19.2 L 3.2 22.4 " id="Line012_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 38.4 L 9.6 41.6 " id="Line016_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 25.6 L 9.6 28.8 " id="Line017_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 44.8 L 16.0 48.0 " id="Line020_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 6.4 L 3.2 9.6 " id="Line013_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 32.0 L 16.0 35.2 " id="Line021_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 32.0 L 3.2 35.2 " id="Line011_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 12.8 L 9.6 16.0 " id="Line018_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 51.2 L 9.6 54.4 " id="Line015_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 57.6 L 16.0 60.8 " id="Line019_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 0.0 L 64.0 12.8 " id="Line008_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 57.6 L 3.2 60.8 " id="Line009_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 44.8 L 3.2 48.0 " id="Line010_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 12.8 L 51.2 64.0 " id="Line001_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 0.0 L 64.0 51.2 " id="Line005_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 38.4 L 25.6 64.0 " id="Line003_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 51.2 L 12.8 64.0 " id="Line004_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 25.6 L 38.4 64.0 " id="Line002_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 0.0 L 64.0 38.4 " id="Line006_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 0.0 L 64.0 25.6 " id="Line007_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 6.4 L 41.6 9.6 " id="Line043_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 25.6 L 48.0 28.8 " id="Line046_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 0.0 L 35.2 3.2 " id="Line034_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 57.6 L 28.8 60.8 " id="Line029_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 32.0 L 28.8 35.2 " id="Line031_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 6.4 L 28.8 9.6 " id="Line033_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 12.8 L 35.2 16.0 " id="Line035_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 19.2 L 41.6 22.4 " id="Line042_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 0.0 L 48.0 3.2 " id="Line044_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 57.6 L 54.4 60.8 " id="Line049_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 44.8 L 28.8 48.0 " id="Line030_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 19.2 L 28.8 22.4 " id="Line032_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 57.6 L 41.6 60.8 " id="Line039_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 12.8 L 48.0 16.0 " id="Line045_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 32.0 L 54.4 35.2 " id="Line051_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 0.0 L 22.4 3.2 " id="Line028_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 44.8 L 41.6 48.0 " id="Line040_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 38.4 L 48.0 41.6 " id="Line047_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 25.6 L 35.2 28.8 " id="Line036_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 32.0 L 41.6 35.2 " id="Line041_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 38.4 L 35.2 41.6 " id="Line037_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 51.2 L 48.0 54.4 " id="Line048_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 51.2 L 35.2 54.4 " id="Line038_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 44.8 L 54.4 48.0 " id="Line050_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 12.8 L 22.4 16.0 " id="Line027_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 19.2 L 54.4 22.4 " id="Line052_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 6.4 L 54.4 9.6 " id="Line053_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 51.2 L 60.8 54.4 " id="Line058_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 12.8 L 60.8 16.0 " id="Line055_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 38.4 L 60.8 41.6 " id="Line057_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 0.0 L 60.8 3.2 " id="Line054_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 25.6 L 60.8 28.8 " id="Line056_w0000" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "2b4e5304-13ab-47d1-b530-e438eeda4ed0"
|
||||
Name: "diagonal1"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4" />
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer4">
|
||||
<path id="path11166" d="m 0,2.000001 2,-2" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11168" d="M 3.9999999,1e-6 0,4.0000009" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11170" d="M 0,6.0000009 5.9999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11172" d="M 7.9999999,1e-6 0,8.0000009" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11174" d="m 0,10.000001 9.9999998,-10" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11176" d="m 12,1e-6 -12,12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11178" d="m 0,14.000001 14,-14" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11180" d="m 16,1e-6 -16,16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11182" d="m 0,18.000001 18,-18" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11184" d="m 20,1e-6 -20,20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11186" d="m 0,22.000001 22,-22" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11188" d="m 24,1e-6 -24,24" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11190" d="m 0,26.000001 26,-26" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11192" d="m 28,1e-6 -28,28" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11194" d="m 0,30.000001 30,-30" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11196" d="M 32,1e-6 0,32" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11198" d="M 0,34 33.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11200" d="M 35.999999,1e-6 0,36" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11202" d="M 0,38 37.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11204" d="M 39.999999,1e-6 0,40" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11206" d="M 0,42 41.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11208" d="M 43.999999,1e-6 0,44" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11210" d="M 0,46 45.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11212" d="M 47.999999,1e-6 0,48" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11214" d="M 0,50 49.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11216" d="M 51.999999,1e-6 0,52" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11218" d="M 0,54 53.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11220" d="M 55.999999,1e-6 0,56" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11222" d="M 0,58 57.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11224" d="M 59.999999,1e-6 0,60" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11226" d="M 0,62 61.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11228" d="M 63.999999,1e-6 0,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11230" d="M 2,64 63.999999,2.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11232" d="M 63.999999,4.0000009 3.9999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11234" d="M 5.9999999,64 63.999999,6.0000009" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11236" d="M 63.999999,8.0000009 7.9999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11238" d="M 9.9999998,64 63.999999,10.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11240" d="M 63.999999,12.000001 12,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11242" d="M 14,64 63.999999,14.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11244" d="M 63.999999,16.000001 16,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11246" d="M 18,64 63.999999,18.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11248" d="M 63.999999,20.000001 20,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11250" d="M 22,64 63.999999,22.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11252" d="M 63.999999,24.000001 24,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11254" d="M 26,64 63.999999,26.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11256" d="M 63.999999,28.000001 28,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11258" d="M 30,64 63.999999,30.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11260" d="M 63.999999,32 32,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11262" d="m 33.999999,64 30,-30" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11264" d="m 63.999999,36 -28,28" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11266" d="m 37.999999,64 26,-26" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11268" d="m 63.999999,40 -24,24" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11270" d="m 41.999999,64 22,-22" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11272" d="m 63.999999,44 -20,20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11274" d="m 45.999999,64 18,-18" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11276" d="m 63.999999,48 -16,16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11278" d="m 49.999999,64 14,-14" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11280" d="m 63.999999,52 -12,12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11282" d="m 53.999999,64 10,-10" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11284" d="m 63.999999,56 -8,8" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11286" d="m 57.999999,64 6,-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11288" d="m 59.999999,64 4,-4" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11290" d="m 61.999999,64 2,-2" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "91efc25f-a841-4bb3-a4ca-6b4d70fd4e05"
|
||||
Name: "diagonal2"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4" />
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer4">
|
||||
<path id="path11166" d="m 63.999999,2.000001 -2,-2" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11168" d="m 59.999999,1e-6 4,3.9999999" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11170" d="m 63.999999,6.0000009 -6,-5.9999999" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11172" d="m 55.999999,1e-6 8,7.9999999" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11174" d="m 63.999999,10.000001 -10,-10" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11176" d="m 51.999999,1e-6 12,12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11178" d="m 63.999999,14.000001 -14,-14" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11180" d="m 47.999999,1e-6 16,16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11182" d="m 63.999999,18.000001 -18,-18" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11184" d="m 43.999999,1e-6 20,20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11186" d="m 63.999999,22.000001 -22,-22" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11188" d="m 39.999999,1e-6 24,24" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11190" d="m 63.999999,26.000001 -26,-26" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11192" d="m 35.999999,1e-6 28,28" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11194" d="m 63.999999,30.000001 -30,-30" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11196" d="M 31.999999,1e-6 63.999999,32" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11198" d="M 63.999999,34 30,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11200" d="M 28,1e-6 63.999999,36" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11202" d="M 63.999999,38 26,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11204" d="M 24,1e-6 63.999999,40" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11206" d="M 63.999999,42 22,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11208" d="M 20,1e-6 63.999999,44" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11210" d="M 63.999999,46 18,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11212" d="M 16,1e-6 63.999999,48" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11214" d="M 63.999999,50 14,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11216" d="M 12,1e-6 63.999999,52" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11218" d="M 63.999999,54 10,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11220" d="M 8,1e-6 63.999999,56" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11222" d="M 63.999999,58 6,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11224" d="M 4,1e-6 63.999999,60" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11226" d="M 63.999999,62 2,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11228" d="M 0,1e-6 63.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11230" d="M 61.999999,64 0,2.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11232" d="M 0,4.0000009 59.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11234" d="M 57.999999,64 0,6.0000009" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11236" d="M 0,8.0000009 55.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11238" d="M 53.999999,64 0,10.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11240" d="M 0,12.000001 51.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11242" d="M 49.999999,64 0,14.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11244" d="M 0,16.000001 47.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11246" d="M 45.999999,64 0,18.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11248" d="M 0,20.000001 43.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11250" d="M 41.999999,64 0,22.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11252" d="M 0,24.000001 39.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11254" d="M 37.999999,64 0,26.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11256" d="M 0,28.000001 35.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11258" d="M 33.999999,64 0,30.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11260" d="M 0,32 31.999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11262" d="M 30,64 0,34" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11264" d="M 0,36 28,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11266" d="M 26,64 0,38" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11268" d="M 0,40 24,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11270" d="M 22,64 0,42" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11272" d="M 0,44 20,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11274" d="M 18,64 0,46" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11276" d="M 0,48 16,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11278" d="M 14,64 0,50" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11280" d="M 0,52 12,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11282" d="M 10,64 0,54" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11284" d="m 0,56 8,8" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11286" d="M 6,64 0,58" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11288" d="M 4,64 0,60" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path11290" d="M 2,64 0,62" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "94149a01-f4ad-4e6a-a6df-acb3ea97eb0b"
|
||||
Name: "earth"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4" />
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer4">
|
||||
<path id="path10572" d="m 0,4.000001 31.999999,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path10574" d="m 0,16 31.999999,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path10576" d="m 1e-6,28.000001 31.999999,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path10578" d="M 4,32.000001 4,63.999998" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path10580" d="m 16,32 0,31.999996" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path10582" d="m 28,32.000001 0,31.999997" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 32,59.999998 31.999999,0" id="path10615" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 32,47.999999 31.999999,0" id="path10617" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 32.000001,35.999998 31.999999,0" id="path10619" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 36,31.999998 36,9.9999999e-7" id="path10621" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 48,31.999999 48,3e-6" id="path10623" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 60,31.999998 60,9.9999999e-7" id="path10625" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,37 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "29329280-1e89-4e8f-8e22-4582965654b4"
|
||||
Name: "general_steel"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<metadata id="metadata17">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs15" />
|
||||
<g id="aaaa">
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 0.0 L 64.0 64.0 " id="Line_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 12.8 L 51.2 64.0 " id="Line001_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 25.6 L 38.4 64.0 " id="Line002_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 0.0 L 64.0 51.2 " id="Line005_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 0.0 L 64.0 12.8 " id="Line008_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 0.0 L 64.0 25.6 " id="Line007_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 51.2 L 12.8 64.0 " id="Line004_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 38.4 L 25.6 64.0 " id="Line003_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 0.0 L 64.0 38.4 " id="Line006_w0000" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,108 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "0f8f1e63-885e-4940-a562-afed029b172a"
|
||||
Name: "glass"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.0" id="svg2" height="64" width="64">
|
||||
<metadata id="metadata3639">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs3637" />
|
||||
<g id="groupe1">
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 41.6 57.6 L 44.8 60.8 " id="Line605_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 35.2 0.0 L 38.4 3.2 " id="Line090_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 41.6 6.4 L 44.8 9.6 " id="Line091_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 32.0 L 51.2 35.2 " id="Line075_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 54.4 38.4 L 57.6 41.6 " id="Line076_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 60.8 44.8 L 64.0 48.0 " id="Line077_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 25.6 L 60.8 28.8 " id="Line089_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 54.4 19.2 L 57.6 22.4 " id="Line093_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 60.8 25.6 L 64.0 28.8 " id="Line094_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 12.8 L 51.2 16.0 " id="Line092_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 60.8 L 9.6 57.6 " id="Line354_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 0.0 L 35.2 3.2 " id="Line085_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 54.4 L 3.2 51.2 " id="Line355_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 6.4 L 28.8 9.6 " id="Line079_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 12.8 L 48.0 16.0 " id="Line087_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 19.2 L 54.4 22.4 " id="Line088_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 25.6 L 28.8 28.8 " id="Line054_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 19.2 L 22.4 22.4 " id="Line053_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 12.8 L 35.2 16.0 " id="Line080_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 0.0 L 22.4 3.2 " id="Line078_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 6.4 L 41.6 9.6 " id="Line086_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 28.8 25.6 L 32.0 28.8 " id="Line064_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 60.8 12.8 L 64.0 16.0 " id="Line097_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 54.4 6.4 L 57.6 9.6 " id="Line096_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 0.0 L 3.2 3.2 " id="Line000_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 6.4 L 9.6 9.6 " id="Line051_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 51.2 L 41.6 54.4 " id="Line049_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 57.6 L 48.0 60.8 " id="Line050_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 57.6 L 60.8 60.8 " id="Line059_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 12.8 L 16.0 16.0 " id="Line052_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 22.4 6.4 L 25.6 9.6 " id="Line071_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 28.8 12.8 L 32.0 16.0 " id="Line072_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 35.2 32.0 L 38.4 35.2 " id="Line065_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 35.2 19.2 L 38.4 22.4 " id="Line073_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 28.8 57.6 L 32.0 60.8 " id="Line353_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 32.0 L 35.2 35.2 " id="Line055_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 38.4 L 41.6 41.6 " id="Line056_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 44.8 L 48.0 48.0 " id="Line057_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 22.4 19.2 L 25.6 22.4 " id="Line063_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 51.2 L 54.4 54.4 " id="Line058_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 16.0 12.8 L 19.2 16.0 " id="Line062_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 41.6 38.4 L 44.8 41.6 " id="Line066_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 0.0 L 54.4 3.2 " id="Line098_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 9.6 6.4 L 12.8 9.6 " id="Line061_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 44.8 L 51.2 48.0 " id="Line067_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 54.4 51.2 L 57.6 54.4 " id="Line068_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 16.0 0.0 L 19.2 3.2 " id="Line070_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 60.8 57.6 L 64.0 60.8 " id="Line069_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 3.2 0.0 L 6.4 3.2 " id="Line060_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 22.4 51.2 L 25.6 54.4 " id="Line352_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 25.6 L 48.0 28.8 " id="Line082_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 57.6 L 28.8 60.8 " id="Line027_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 44.8 L 3.2 48.0 " id="Line020_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 19.2 L 41.6 22.4 " id="Line081_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 57.6 L 16.0 60.8 " id="Line022_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 51.2 L 22.4 54.4 " id="Line026_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 32.0 L 54.4 35.2 " id="Line083_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 41.6 25.6 L 44.8 28.8 " id="Line074_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 38.4 L 60.8 41.6 " id="Line084_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 19.2 L 9.6 22.4 " id="Line044_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 51.2 L 9.6 54.4 " id="Line021_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 38.4 L 9.6 41.6 " id="Line024_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 32.0 L 3.2 35.2 " id="Line023_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 44.8 L 16.0 48.0 " id="Line025_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 0.0 L 51.2 3.2 " id="Line095_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 6.4 L 60.8 9.6 " id="Line099_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 32.0 L 22.4 35.2 " id="Line046_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 12.8 L 3.2 16.0 " id="Line043_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 25.6 L 16.0 28.8 " id="Line045_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 38.4 L 28.8 41.6 " id="Line047_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 44.8 L 35.2 48.0 " id="Line048_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 35.2 51.2 L 38.4 54.4 " id="Line604_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 9.6 38.4 L 12.8 41.6 " id="Line350_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 3.2 32.0 L 6.4 35.2 " id="Line349_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 16.0 44.8 L 19.2 48.0 " id="Line351_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 28.8 44.8 L 32.0 48.0 " id="Line603_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 3.2 19.2 L 6.4 22.4 " id="Line599_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 22.4 38.4 L 25.6 41.6 " id="Line602_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 16.0 32.0 L 19.2 35.2 " id="Line601_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 9.6 25.6 L 12.8 28.8 " id="Line600_w0000" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "f2421e27-1b54-4c6e-8da9-e0be3f1783a5"
|
||||
Name: "hatch45L"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" height="64" width="64" version="1.1" id="svg2985">
|
||||
<metadata id="metadata2994">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs2987">
|
||||
<pattern height=".1" width=".1" y="0" x="0" patternUnits="userSpaceOnUse" id="simple">
|
||||
<g id="g3377" style="fill:none;stroke:#000000;stroke-width:0.005">
|
||||
<path id="path3379" d="M0,0 l.12,.12" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<path id="path2998" d="M 0,0 64,64" style="fill:none;stroke:#000000;stroke-width:0.94488192;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path3000" d="M 16,0 64,48" style="fill:none;stroke:#000000;stroke-width:0.94488192;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path3002" d="M 48,64 0,16" style="fill:none;stroke:#000000;stroke-width:0.94488192;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path3004" d="M 32,0 64,32" style="fill:none;stroke:#000000;stroke-width:0.94488192;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path3006" d="M 48,0 64,16" style="fill:none;stroke:#000000;stroke-width:0.94488192;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path3008" d="M 0,32 32,64" style="fill:none;stroke:#000000;stroke-width:0.94488192;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path id="path3010" d="M 0,48 16,64" style="fill:none;stroke:#000000;stroke-width:0.94488192;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "169e4200-586d-4bde-aae5-4527392012f8"
|
||||
Name: "hatch45R"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" height="64" width="64" version="1.1" id="svg2985">
|
||||
<metadata id="metadata2994">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs2987">
|
||||
<pattern height=".1" width=".1" y="0" x="0" patternUnits="userSpaceOnUse" id="simple">
|
||||
<g id="g3377" style="fill:none;stroke:#000000;stroke-width:0.005">
|
||||
<path id="path3379" d="M0,0 l.12,.12" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<path id="path2998" d="M 64,0 0,64" style="fill:none;stroke:#000000;stroke-width:0.94488189;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path3000" d="M 48,0 0,48" style="fill:none;stroke:#000000;stroke-width:0.94488189;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path3002" d="M 16,64 64,16" style="fill:none;stroke:#000000;stroke-width:0.94488189;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path3004" d="M 32,0 0,32" style="fill:none;stroke:#000000;stroke-width:0.94488189;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path3006" d="M 16,0 0,16" style="fill:none;stroke:#000000;stroke-width:0.94488189;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path3008" d="M 64,32 32,64" style="fill:none;stroke:#000000;stroke-width:0.94488189;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path3010" d="M 64,48 48,64" style="fill:none;stroke:#000000;stroke-width:0.94488189;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,169 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "92232ced-d96b-4cc8-a052-4e13f7d943ab"
|
||||
Name: "hbone"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4">
|
||||
<clipPath id="clip1">
|
||||
<path d="M 12.539062 12.5 L 13 12.5 L 13 13 L 12.539062 13 Z M 12.539062 12.5 " id="path8169" />
|
||||
</clipPath>
|
||||
<clipPath id="clip2">
|
||||
<path d="M 12.539062 12.5 L 298 12.5 L 298 298 L 12.539062 298 Z M 12.539062 12.5 " id="path8172" />
|
||||
</clipPath>
|
||||
<clipPath id="clip3">
|
||||
<path d="M 12.539062 154 L 441 154 L 441 582.5 L 12.539062 582.5 Z M 12.539062 154 " id="path8175" />
|
||||
</clipPath>
|
||||
<clipPath id="clip4">
|
||||
<path d="M 582 12.5 L 583 12.5 L 583 13 L 582 13 Z M 582 12.5 " id="path8178" />
|
||||
</clipPath>
|
||||
<clipPath id="clip5">
|
||||
<path d="M 581 12.5 L 584 12.5 L 584 14 L 581 14 Z M 581 12.5 " id="path8181" />
|
||||
</clipPath>
|
||||
<clipPath id="clip6">
|
||||
<path d="M 582 12.5 L 583 12.5 L 583 13 L 582 13 Z M 582 12.5 " id="path8184" />
|
||||
</clipPath>
|
||||
<clipPath id="clip7">
|
||||
<path d="M 581 12.5 L 584 12.5 L 584 14 L 581 14 Z M 581 12.5 " id="path8187" />
|
||||
</clipPath>
|
||||
<clipPath id="clip8">
|
||||
<path d="M 582 12.5 L 583 12.5 L 583 13 L 582 13 Z M 582 12.5 " id="path8190" />
|
||||
</clipPath>
|
||||
<clipPath id="clip9">
|
||||
<path d="M 581 12.5 L 584 12.5 L 584 14 L 581 14 Z M 581 12.5 " id="path8193" />
|
||||
</clipPath>
|
||||
<clipPath id="clip10">
|
||||
<path d="M 582 12.5 L 583 12.5 L 583 13 L 582 13 Z M 582 12.5 " id="path8196" />
|
||||
</clipPath>
|
||||
<clipPath id="clip11">
|
||||
<path d="M 581 12.5 L 584 12.5 L 584 14 L 581 14 Z M 581 12.5 " id="path8199" />
|
||||
</clipPath>
|
||||
<clipPath id="clip12">
|
||||
<path d="M 582 12.5 L 583 12.5 L 583 13 L 582 13 Z M 582 12.5 " id="path8202" />
|
||||
</clipPath>
|
||||
<clipPath id="clip13">
|
||||
<path d="M 581 12.5 L 584 12.5 L 584 14 L 581 14 Z M 581 12.5 " id="path8205" />
|
||||
</clipPath>
|
||||
<clipPath id="clip14">
|
||||
<path d="M 582 12.5 L 583 12.5 L 583 13 L 582 13 Z M 582 12.5 " id="path8208" />
|
||||
</clipPath>
|
||||
<clipPath id="clip15">
|
||||
<path d="M 297 439 L 441 439 L 441 582.5 L 297 582.5 Z M 297 439 " id="path8211" />
|
||||
</clipPath>
|
||||
<clipPath id="clip16">
|
||||
<path d="M 582 582 L 583 582 L 583 582.5 L 582 582.5 Z M 582 582 " id="path8214" />
|
||||
</clipPath>
|
||||
<clipPath id="clip17">
|
||||
<path d="M 581 581 L 584 581 L 584 582.5 L 581 582.5 Z M 581 581 " id="path8217" />
|
||||
</clipPath>
|
||||
<clipPath id="clip18">
|
||||
<path d="M 582 582 L 583 582 L 583 582.5 L 582 582.5 Z M 582 582 " id="path8220" />
|
||||
</clipPath>
|
||||
<clipPath id="clip19">
|
||||
<path d="M 581 581 L 584 581 L 584 582.5 L 581 582.5 Z M 581 581 " id="path8223" />
|
||||
</clipPath>
|
||||
<clipPath id="clip20">
|
||||
<path d="M 582 582 L 583 582 L 583 582.5 L 582 582.5 Z M 582 582 " id="path8226" />
|
||||
</clipPath>
|
||||
<clipPath id="clip21">
|
||||
<path d="M 581 581 L 584 581 L 584 582.5 L 581 582.5 Z M 581 581 " id="path8229" />
|
||||
</clipPath>
|
||||
<clipPath id="clip22">
|
||||
<path d="M 582 582 L 583 582 L 583 582.5 L 582 582.5 Z M 582 582 " id="path8232" />
|
||||
</clipPath>
|
||||
<clipPath id="clip23">
|
||||
<path d="M 581 581 L 584 581 L 584 582.5 L 581 582.5 Z M 581 581 " id="path8235" />
|
||||
</clipPath>
|
||||
<clipPath id="clip24">
|
||||
<path d="M 582 582 L 583 582 L 583 582.5 L 582 582.5 Z M 582 582 " id="path8238" />
|
||||
</clipPath>
|
||||
<clipPath id="clip25">
|
||||
<path d="M 297 582 L 298 582 L 298 582.5 L 297 582.5 Z M 297 582 " id="path8241" />
|
||||
</clipPath>
|
||||
<clipPath id="clip26">
|
||||
<path d="M 296 581 L 299 581 L 299 582.5 L 296 582.5 Z M 296 581 " id="path8244" />
|
||||
</clipPath>
|
||||
<clipPath id="clip27">
|
||||
<path d="M 297 582 L 298 582 L 298 582.5 L 297 582.5 Z M 297 582 " id="path8247" />
|
||||
</clipPath>
|
||||
<clipPath id="clip28">
|
||||
<path d="M 296 581 L 299 581 L 299 582.5 L 296 582.5 Z M 296 581 " id="path8250" />
|
||||
</clipPath>
|
||||
<clipPath id="clip29">
|
||||
<path d="M 297 582 L 298 582 L 298 582.5 L 297 582.5 Z M 297 582 " id="path8253" />
|
||||
</clipPath>
|
||||
<clipPath id="clip30">
|
||||
<path d="M 296 581 L 299 581 L 299 582.5 L 296 582.5 Z M 296 581 " id="path8256" />
|
||||
</clipPath>
|
||||
<clipPath id="clip31">
|
||||
<path d="M 297 582 L 298 582 L 298 582.5 L 297 582.5 Z M 297 582 " id="path8259" />
|
||||
</clipPath>
|
||||
<clipPath id="clip32">
|
||||
<path d="M 296 581 L 299 581 L 299 582.5 L 296 582.5 Z M 296 581 " id="path8262" />
|
||||
</clipPath>
|
||||
<clipPath id="clip33">
|
||||
<path d="M 297 582 L 298 582 L 298 582.5 L 297 582.5 Z M 297 582 " id="path8265" />
|
||||
</clipPath>
|
||||
<clipPath id="clip34">
|
||||
<path d="M 296 581 L 299 581 L 299 582.5 L 296 582.5 Z M 296 581 " id="path8268" />
|
||||
</clipPath>
|
||||
<clipPath id="clip35">
|
||||
<path d="M 297 582 L 298 582 L 298 582.5 L 297 582.5 Z M 297 582 " id="path8271" />
|
||||
</clipPath>
|
||||
<clipPath id="clip36">
|
||||
<path d="M 12.539062 297 L 156 297 L 156 441 L 12.539062 441 Z M 12.539062 297 " id="path8274" />
|
||||
</clipPath>
|
||||
<clipPath id="clip37">
|
||||
<path d="M 297 297 L 583 297 L 583 582.5 L 297 582.5 Z M 297 297 " id="path8277" />
|
||||
</clipPath>
|
||||
<clipPath id="clip38">
|
||||
<path d="M 12.539062 12.5 L 156 12.5 L 156 156 L 12.539062 156 Z M 12.539062 12.5 " id="path8280" />
|
||||
</clipPath>
|
||||
<clipPath id="clip39">
|
||||
<path d="M 297 12.5 L 583 12.5 L 583 298 L 297 298 Z M 297 12.5 " id="path8283" />
|
||||
</clipPath>
|
||||
<clipPath id="clip40">
|
||||
<path d="M 12.539062 12.5 L 583 12.5 L 583 582.5 L 12.539062 582.5 Z M 12.539062 12.5 " id="path8286" />
|
||||
</clipPath>
|
||||
<clipPath id="clip41">
|
||||
<path d="M 12.539062 12.5 L 13 12.5 L 13 582.5 L 12.539062 582.5 Z M 12.539062 12.5 " id="path8289" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g transform="translate(-240.06625,-450.59799)" id="layer1">
|
||||
<path id="path8652" d="m 240.06625,450.59799 16,16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path8654" d="m 240.06625,482.59799 32,-32 16,16 -32,32 z" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path8656" d="m 304.06625,482.59799 -16,-16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path8658" d="m 304.06625,514.59799 -32,-32" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path8660" d="m 288.06625,498.59799 -16,16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path8662" d="m 240.06625,514.59799 16,-16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "bf024194-da67-4c3c-a482-08c7efa6dbde"
|
||||
Name: "line"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" height="64" width="64" version="1.1" id="svg3448">
|
||||
<metadata id="metadata3457">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs3450">
|
||||
<pattern height=".1" width=".1" y="0" x="0" patternUnits="userSpaceOnUse" id="line">
|
||||
<g id="g3389" style="fill:none;stroke:#000000;stroke-width:0.005">
|
||||
<path id="path3391" d="M0,0.05 l.12,0" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<path id="path3461" d="m 0,56 64,0" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3463" d="m 0,40 64,0" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3465" d="m 0,24 64,0" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3467" d="M 0,8 64,8" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "2fc720b1-19b3-4a30-a0f4-a782135559f5"
|
||||
Name: "plastic"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<metadata id="metadata8744">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs8742" />
|
||||
<g id="aaaa">
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 51.2 L 12.8 64.0 " id="Line_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 12.8 L 51.2 64 " id="Line003_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 38.4 L 25.6 64 " id="Line001_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 0.0 L 64 64 " id="Line004_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 25.6 L 38.4 64 " id="Line002_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 0.0 L 64 51.2 " id="Line005_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 0.0 L 64 38.4 " id="Line006_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 0.0 L 64 25.6 " id="Line007_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 0.0 L 64 12.8 " id="Line008_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 51.2 L 64 51.2 " id="Line010_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 64 L 64 64 " id="Line009_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 38.4 L 64 38.4 " id="Line011_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 25.6 L 64 25.6 " id="Line012_w0000" />
|
||||
<path style="stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 12.8 L 64 12.8 " id="Line013_w0000" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "90b1bd10-7df1-4338-bb74-f82040570afd"
|
||||
Name: "plus"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4" />
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer4">
|
||||
<path id="path8277" d="m 16,12 0,8" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path8279" d="m 12,16 8.000001,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" d="m 48,12 0,8" id="path8293" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" d="m 44,16 8.000001,0" id="path8295" />
|
||||
<path id="path8297" d="m 16,44.000001 0,8" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path8299" d="m 12,48.000001 8.000001,0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" d="m 48,44.000001 0,8" id="path8301" />
|
||||
<path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" d="m 44,48.000001 8.000001,0" id="path8303" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "52d16497-4e67-45f0-b366-62fdf93dcbe7"
|
||||
Name: "simple"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" height="64" width="64" version="1.1" id="svg2985">
|
||||
<metadata id="metadata2994">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs2987">
|
||||
<pattern height=".1" width=".1" y="0" x="0" patternUnits="userSpaceOnUse" id="simple">
|
||||
<g id="g3377" style="fill:none;stroke:#000000;stroke-width:0.005">
|
||||
<path id="path3379" d="M0,0 l.12,.12" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<path id="path2998" d="M 64,0 0,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3000" d="M 48,0 0,48" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3002" d="M 16,64 64,16" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3004" d="M 32,0 0,32" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3006" d="M 16,0 0,16" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3008" d="M 64,32 32,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3010" d="M 64,48 48,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "d7c6b577-b41b-4d4b-a2b3-2139a1a9a7af"
|
||||
Name: "solid"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4" />
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer4">
|
||||
<path id="path12301" d="M -0.50000001,32 64.500001,32" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:65.00000102;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "836b307f-542d-466b-ba67-d96401b2fa8f"
|
||||
Name: "square"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" height="64" width="64" version="1.1" id="svg3784">
|
||||
<metadata id="metadata3794">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs3786">
|
||||
<pattern height=".1" width=".1" y="0" x="0" patternUnits="userSpaceOnUse" id="square">
|
||||
<g id="g3394" style="fill:none;stroke:#000000;stroke-width:0.005">
|
||||
<path id="path3396" d="M0,0.05 l.12,0" />
|
||||
<path id="path3398" d="M0.05,0 l0,.12" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<path id="path3461" d="m 0,56 64,0" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3463" d="m 0,40 64,0" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3465" d="m 0,24 64,0" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3467" d="M 0,8 64,8" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3811" d="M 8,0 8,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3813" d="m 24,0 0,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3815" d="m 40,0 0,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3817" d="m 56,0 0,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "e8555d5c-c9ff-458f-9ad3-ecabd02b5327"
|
||||
Name: "steel"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.1" id="svg2" height="64" width="64">
|
||||
<defs id="defs4" />
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Pablo Gil</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>SVG</rdf:li>
|
||||
<rdf:li>template</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer4">
|
||||
<path id="path11166" d="m 0,2.000001 2,-2" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11168" d="M 3.9999999,1e-6 0,4.0000009" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11174" d="m 0,10.000001 9.9999998,-10" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11176" d="m 12,1e-6 -12,12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11182" d="m 0,18.000001 18,-18" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11184" d="m 20,1e-6 -20,20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11190" d="m 0,26.000001 26,-26" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11192" d="m 28,1e-6 -28,28" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11198" d="M 0,34 33.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11200" d="M 35.999999,1e-6 0,36" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11206" d="M 0,42 41.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11208" d="M 43.999999,1e-6 0,44" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11214" d="M 0,50 49.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11216" d="M 51.999999,1e-6 0,52" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11222" d="M 0,58 57.999999,1e-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11224" d="M 59.999999,1e-6 0,60" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11230" d="M 2,64 63.999999,2.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11232" d="M 63.999999,4.0000009 3.9999999,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11238" d="M 9.9999998,64 63.999999,10.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11240" d="M 63.999999,12.000001 12,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11246" d="M 18,64 63.999999,18.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11248" d="M 63.999999,20.000001 20,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11254" d="M 26,64 63.999999,26.000001" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11256" d="M 63.999999,28.000001 28,64" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11262" d="m 33.999999,64 30,-30" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11264" d="m 63.999999,36 -28,28" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11270" d="m 41.999999,64 22,-22" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11272" d="m 63.999999,44 -20,20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11278" d="m 49.999999,64 14,-14" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11280" d="m 63.999999,52 -12,12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11286" d="m 57.999999,64 6,-6" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path id="path11288" d="m 59.999999,64 4,-4" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.37795277;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "5c66ffe9-6556-4361-9da7-ed3b187e3cfe"
|
||||
Name: "titanium"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.0" id="svg2" height="64" width="64">
|
||||
<metadata id="metadata10845">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs10843" />
|
||||
<g id="groue">
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 6.4 L 60.8 9.6 " id="Line055_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 41.6 38.4 L 44.8 41.6 " id="Line008_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 0.0 L 64.0 25.6 " id="Line040_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 54.4 0.0 L 64.0 9.6 " id="Line042_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 12.8 L 3.2 16.0 " id="Line029_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 60.8 L 35.2 64.0 " id="Line028_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 6.4 L 28.8 9.6 " id="Line044_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 57.6 L 48.0 60.8 " id="Line036_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 32.0 L 54.4 35.2 " id="Line048_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 48.0 L 16.0 64.0 " id="Line015_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 25.6 L 16.0 28.8 " id="Line031_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 32.0 L 32.0 64.0 " id="Line016_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 51.2 L 41.6 54.4 " id="Line035_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 41.6 L 22.4 64.0 " id="Line014_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 60.8 57.6 L 64.0 60.8 " id="Line011_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 57.6 L 6.4 64.0 " id="Line012_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 48.0 L 22.4 51.2 " id="Line026_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 54.4 L 28.8 57.6 " id="Line027_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 19.2 L 9.6 22.4 " id="Line030_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 44.8 L 51.2 48.0 " id="Line009_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 32.0 L 22.4 35.2 " id="Line032_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 38.4 L 28.8 41.6 " id="Line033_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 54.4 51.2 L 57.6 54.4 " id="Line010_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 44.8 L 35.2 48.0 " id="Line034_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 16.0 0.0 L 64.0 48.0 " id="Line037_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 22.4 0.0 L 64.0 41.6 " id="Line038_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 0.0 L 64.0 32.0 " id="Line039_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 48.0 0.0 L 64.0 16.0 " id="Line041_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 19.2 0.0 L 22.4 3.2 " id="Line043_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 32.0 12.8 L 35.2 16.0 " id="Line045_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 19.2 L 41.6 22.4 " id="Line046_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 25.6 L 48.0 28.8 " id="Line047_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 38.4 L 60.8 41.6 " id="Line049_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 3.2 L 41.6 6.4 " id="Line050_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 57.6 22.4 L 60.8 25.6 " id="Line053_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 0.0 L 54.4 3.2 " id="Line054_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 44.8 9.6 L 48.0 12.8 " id="Line051_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 16.0 L 54.4 19.2 " id="Line052_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 16.0 L 48.0 64.0 " id="Line018_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 0.0 L 64.0 64.0 " id="Line_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 3.2 0.0 L 6.4 3.2 " id="Line002_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 25.6 L 38.4 64.0 " id="Line017_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 9.6 L 54.4 64.0 " id="Line019_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 44.8 L 3.2 48.0 " id="Line020_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 51.2 L 9.6 54.4 " id="Line021_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 57.6 L 16.0 60.8 " id="Line022_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 28.8 L 3.2 32.0 " id="Line023_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 35.2 L 9.6 38.4 " id="Line024_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 41.6 L 16.0 44.8 " id="Line025_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 6.4 0.0 L 64.0 57.6 " id="Line001_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 9.6 6.4 L 12.8 9.6 " id="Line003_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 22.4 19.2 L 25.6 22.4 " id="Line005_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 16.0 12.8 L 19.2 16.0 " id="Line004_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 28.8 25.6 L 32.0 28.8 " id="Line006_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 35.2 32.0 L 38.4 35.2 " id="Line007_w0000" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,158 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "c693952c-5f5a-4f8f-9e6f-714464219a8b"
|
||||
Name: "wood"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" version="1.1" id="svg3137" height="64px" width="64px">
|
||||
<defs id="defs3139">
|
||||
<pattern id="wood" patternTransform="translate(-0.125,-0.5)" height="65.3125" width="64.96875" patternUnits="userSpaceOnUse">
|
||||
<g transform="translate(0.125,0.5) scale(0.03,0.03)" id="g3339">
|
||||
<line x1="36.013824" y1="49.588726" x2="46.448639" y2="44.405113" id="line10" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="26.508579" y1="56.911587" x2="36.013824" y2="49.588726" id="line12" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="18.324862" y1="43.802601" x2="22.828842" y2="36.588356" id="line14" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="10.451589" y1="52.414928" x2="18.324862" y2="43.802601" id="line16" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="60.741768" y1="45.401619" x2="64.450821" y2="51.171249" id="line18" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="54.284355" y1="38.168877" x2="60.741768" y2="45.401619" id="line20" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="46.965157" y1="31.99353" x2="54.284355" y2="38.168877" id="line22" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="53.594742" y1="58.920887" x2="56.52261" y2="64.536659" id="line24" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="48.170364" y1="50.482559" x2="53.594742" y2="58.920887" id="line26" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="41.540775" y1="42.990917" x2="48.170364" y2="50.482559" id="line28" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="34.652008" y1="36.532856" x2="41.540775" y2="42.990917" id="line30" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="39.301613" y1="57.026066" x2="44.812073" y2="64.536659" id="line34" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="30.174595" y1="46.005138" x2="39.301613" y2="57.026066" id="line36" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="20.61714" y1="38.168877" x2="30.174595" y2="46.005138" id="line38" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="12.86751" y1="34.29406" x2="20.61714" y2="38.168877" id="line40" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="2.8796287" y1="31.99353" x2="12.86751" y2="34.29406" id="line42" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="31.121544" y1="59.437401" x2="35.082443" y2="64.536659" id="line44" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="25.008472" y1="52.720814" x2="31.121544" y2="59.437401" id="line46" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="16.914499" y1="45.918133" x2="25.008472" y2="52.720814" id="line48" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="7.2709622" y1="40.75211" x2="16.914499" y2="45.918133" id="line50" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="0.094633415" y1="38.77166" x2="7.2709622" y2="40.75211" id="line52" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="19.411932" y1="58.662621" x2="23.803265" y2="64.536659" id="line54" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="15.364938" y1="54.27129" x2="19.411932" y2="58.662621" id="line56" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="9.8535614" y1="49.966042" x2="15.364938" y2="54.27129" id="line58" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="4.5152779" y1="47.038174" x2="9.8535614" y2="49.966042" id="line60" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="0.094633415" y1="45.745964" x2="4.5152779" y2="47.038174" id="line62" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="12.437076" y1="62.70961" x2="13.470121" y2="64.536659" id="line64" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="8.7344351" y1="58.060017" x2="12.437076" y2="62.70961" id="line66" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="4.0848436" y1="54.701721" x2="8.7344351" y2="58.060017" id="line68" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="0.094633415" y1="53.409504" x2="4.0848436" y2="54.701721" id="line70" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="35.922504" y1="17.814405" x2="46.356174" y2="12.550002" id="line10-8" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="26.418303" y1="25.251396" x2="35.922504" y2="17.814405" id="line12-2" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="18.235481" y1="11.938099" x2="22.73897" y2="4.6114168" id="line14-8" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="10.363072" y1="20.684654" x2="18.235481" y2="11.938099" id="line16-8" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="60.647736" y1="13.562038" x2="64.356377" y2="19.421593" id="line18-9" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="54.191032" y1="6.2165704" x2="60.647736" y2="13.562038" id="line20-6" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="46.872639" y1="-0.055021625" x2="54.191032" y2="6.2165704" id="line22-6" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="53.501495" y1="27.292013" x2="56.429043" y2="32.995308" id="line24-0" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="48.077713" y1="18.72217" x2="53.501495" y2="27.292013" id="line26-2" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="41.448853" y1="11.113765" x2="48.077713" y2="18.72217" id="line28-1" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="34.560841" y1="4.5550518" x2="41.448853" y2="11.113765" id="line30-7" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="27.759834" y1="-0.055021625" x2="34.560841" y2="4.5550518" id="line32-2" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="30.083918" y1="14.174964" x2="39.209934" y2="25.367659" id="line36-1" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="20.527508" y1="6.2165704" x2="30.083918" y2="14.174964" id="line38-3" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="12.778731" y1="2.2813628" x2="20.527508" y2="6.2165704" id="line40-2" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="2.7919424" y1="-0.055021625" x2="12.778731" y2="2.2813628" id="line42-0" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="24.918362" y1="20.995308" x2="31.030762" y2="27.816576" id="line46-7" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="16.825274" y1="14.086603" x2="24.918362" y2="20.995308" id="line48-7" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="7.1827955" y1="8.840064" x2="16.825274" y2="14.086603" id="line50-6" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="0.0072516869" y1="6.8287482" x2="7.1827955" y2="8.840064" id="line52-4" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="15.275883" y1="22.569948" x2="19.322433" y2="27.02972" id="line56-6" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="9.765111" y1="18.197601" x2="15.275883" y2="22.569948" id="line58-2" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="4.4274139" y1="15.2241" x2="9.765111" y2="18.197601" id="line60-1" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="0.0072516869" y1="13.911751" x2="4.4274139" y2="15.2241" id="line62-8" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="12.348343" y1="31.139784" x2="13.381276" y2="32.995308" id="line64-9" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="8.6461048" y1="26.417725" x2="12.348343" y2="31.139784" id="line66-0" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="3.9970255" y1="23.00709" x2="8.6461048" y2="26.417725" id="line68-0" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="0.0072516869" y1="21.694731" x2="3.9970255" y2="23.00709" id="line70-1" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<path id="path3331" d="M 19.181818,26.772727 34.90909,36.590909" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3333" d="m 56.454546,32.772727 3.090909,8" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3335" d="m 39.045455,25.181818 8.090909,6.909091" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3337" d="M 40.181818,38.545455 52.727272,35.818182 64.545454,29.454546" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<metadata id="metadata3142">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer1">
|
||||
<rect id="rect3468" y="-0.5" x="-0.125" height="65.3125" width="64.96875" style="stroke:none;fill:none" />
|
||||
<line x1="36.013824" y1="49.588726" x2="46.448639" y2="44.405113" id="line3533" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="26.508579" y1="56.911587" x2="36.013824" y2="49.588726" id="line3535" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="18.324862" y1="43.802601" x2="22.828842" y2="36.588356" id="line3537" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="10.451589" y1="52.414928" x2="18.324862" y2="43.802601" id="line3539" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="60.741768" y1="45.401619" x2="64.450821" y2="51.171249" id="line3541" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="54.284355" y1="38.168877" x2="60.741768" y2="45.401619" id="line3543" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="46.965157" y1="31.99353" x2="54.284355" y2="38.168877" id="line3545" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="53.594742" y1="58.920887" x2="56.52261" y2="64.536659" id="line3547" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="48.170364" y1="50.482559" x2="53.594742" y2="58.920887" id="line3549" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="41.540775" y1="42.990917" x2="48.170364" y2="50.482559" id="line3551" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="34.652008" y1="36.532856" x2="41.540775" y2="42.990917" id="line3553" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="39.301613" y1="57.026066" x2="44.812073" y2="64.536659" id="line3555" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="30.174595" y1="46.005138" x2="39.301613" y2="57.026066" id="line3557" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="20.61714" y1="38.168877" x2="30.174595" y2="46.005138" id="line3559" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="12.86751" y1="34.29406" x2="20.61714" y2="38.168877" id="line3561" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="2.8796287" y1="31.99353" x2="12.86751" y2="34.29406" id="line3563" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="31.121544" y1="59.437401" x2="35.082443" y2="64.536659" id="line3565" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="25.008472" y1="52.720814" x2="31.121544" y2="59.437401" id="line3567" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="16.914499" y1="45.918133" x2="25.008472" y2="52.720814" id="line3569" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="7.2709622" y1="40.75211" x2="16.914499" y2="45.918133" id="line3571" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="0.094633415" y1="38.77166" x2="7.2709622" y2="40.75211" id="line3573" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="19.411932" y1="58.662621" x2="23.803265" y2="64.536659" id="line3575" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="15.364938" y1="54.27129" x2="19.411932" y2="58.662621" id="line3577" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="9.8535614" y1="49.966042" x2="15.364938" y2="54.27129" id="line3579" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="4.5152779" y1="47.038174" x2="9.8535614" y2="49.966042" id="line3581" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="0.094633415" y1="45.745964" x2="4.5152779" y2="47.038174" id="line3583" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="12.437076" y1="62.70961" x2="13.470121" y2="64.536659" id="line3585" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="8.7344351" y1="58.060017" x2="12.437076" y2="62.70961" id="line3587" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="4.0848436" y1="54.701721" x2="8.7344351" y2="58.060017" id="line3589" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="0.094633415" y1="53.409504" x2="4.0848436" y2="54.701721" id="line3591" style="stroke:#000000;stroke-width:0.91581547px" />
|
||||
<line x1="35.922504" y1="17.814405" x2="46.356174" y2="12.550002" id="line3593" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="26.418303" y1="25.251396" x2="35.922504" y2="17.814405" id="line3595" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="18.235481" y1="11.938099" x2="22.73897" y2="4.6114168" id="line3597" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="10.363072" y1="20.684654" x2="18.235481" y2="11.938099" id="line3599" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="60.647736" y1="13.562038" x2="64.356377" y2="19.421593" id="line3601" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="54.191032" y1="6.2165704" x2="60.647736" y2="13.562038" id="line3603" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="46.872639" y1="-0.055021625" x2="54.191032" y2="6.2165704" id="line3605" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="53.501495" y1="27.292013" x2="56.429043" y2="32.995308" id="line3607" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="48.077713" y1="18.72217" x2="53.501495" y2="27.292013" id="line3609" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="41.448853" y1="11.113765" x2="48.077713" y2="18.72217" id="line3611" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="34.560841" y1="4.5550518" x2="41.448853" y2="11.113765" id="line3613" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="27.759834" y1="-0.055021625" x2="34.560841" y2="4.5550518" id="line3615" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="30.083918" y1="14.174964" x2="39.209934" y2="25.367659" id="line3617" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="20.527508" y1="6.2165704" x2="30.083918" y2="14.174964" id="line3619" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="12.778731" y1="2.2813628" x2="20.527508" y2="6.2165704" id="line3621" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="2.7919424" y1="-0.055021625" x2="12.778731" y2="2.2813628" id="line3623" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="24.918362" y1="20.995308" x2="31.030762" y2="27.816576" id="line3625" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="16.825274" y1="14.086603" x2="24.918362" y2="20.995308" id="line3627" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="7.1827955" y1="8.840064" x2="16.825274" y2="14.086603" id="line3629" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="0.0072516869" y1="6.8287482" x2="7.1827955" y2="8.840064" id="line3631" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="15.275883" y1="22.569948" x2="19.322433" y2="27.02972" id="line3633" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="9.765111" y1="18.197601" x2="15.275883" y2="22.569948" id="line3635" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="4.4274139" y1="15.2241" x2="9.765111" y2="18.197601" id="line3637" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="0.0072516869" y1="13.911751" x2="4.4274139" y2="15.2241" id="line3639" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="12.348343" y1="31.139784" x2="13.381276" y2="32.995308" id="line3641" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="8.6461048" y1="26.417725" x2="12.348343" y2="31.139784" id="line3643" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="3.9970255" y1="23.00709" x2="8.6461048" y2="26.417725" id="line3645" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<line x1="0.0072516869" y1="21.694731" x2="3.9970255" y2="23.00709" id="line3647" style="stroke:#000000;stroke-width:0.92287397px" />
|
||||
<path id="path3649" d="M 19.181818,26.772727 34.90909,36.590909" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3651" d="m 56.454546,32.772727 3.090909,8" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3653" d="m 39.045455,25.181818 8.090909,6.909091" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path3655" d="M 40.181818,38.545455 52.727272,35.818182 64.545454,29.454546" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "f3ffddec-9468-41c4-b107-035287283e45"
|
||||
Name: "woodgrain"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" version="1.1" id="svg3137" height="64px" width="64px">
|
||||
<defs id="defs3139">
|
||||
<pattern id="woodgrain" patternTransform="translate(-0.125,-0.5)" height="64" width="64" patternUnits="userSpaceOnUse">
|
||||
<g transform="translate(0.125,0.5) scale(0.03,0.03)" id="g3339">
|
||||
<path id="path4854" d="M 4,0 8,24 4,44 v 20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4855" d="m 16,0 -4,8 v 28 l 4,16 v 12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4856" d="m 20,0 v 16 l -4,12 4,8 v 28" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4857" d="M 24,64 28,44 24,28 28,12 V 0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4858" d="m 36,0 c 0,0 0,16 0,16 l 4,4 v 8 l -8,4 v 8 l 4,12 v 12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4859" d="m 44,0 v 36 l -4,4 v 4 l 4,20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4860" d="m 48,0 4,20 v 8 l -4,12 v 8 l 4,16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4861" d="m 56,0 4,16 v 16 l -8,4 v 8 l 4,8 v 12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</pattern>
|
||||
</defs>
|
||||
<metadata id="metadata3142">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer1">
|
||||
<path id="path4839" d="M 4,0 8,24 4,44 v 20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4841" d="m 16,0 -4,8 v 28 l 4,16 v 12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4843" d="m 20,0 v 16 l -4,12 4,8 v 28" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4845" d="M 24,64 28,44 24,28 28,12 V 0" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4847" d="m 36,0 c 0,0 0,16 0,16 l 4,4 v 8 l -8,4 v 8 l 4,12 v 12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4849" d="m 44,0 v 36 l -4,4 v 4 l 4,20" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4851" d="m 48,0 4,20 v 8 l -4,12 v 8 l 4,16" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path id="path4853" d="m 56,0 4,16 v 16 l -8,4 v 8 l 4,8 v 12" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
# File created by FreeCAD 0.22.0 Revision: 35329 +8 (Git)
|
||||
General:
|
||||
UUID: "957f8af7-7a3f-4086-9aaa-2bc7aa07a54f"
|
||||
Name: "zinc"
|
||||
Author: "David Carter"
|
||||
License: "All rights reserved"
|
||||
AppearanceModels:
|
||||
Pattern File:
|
||||
UUID: "c6596294-e97d-4812-87db-28e1d66521a3"
|
||||
Pattern Color: "(0,0,0,1)"
|
||||
Pattern File: |2
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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" viewBox="0 0 64.000001 64.000001" version="1.0" id="svg2" height="64" width="64">
|
||||
<metadata id="metadata7381">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs7379" />
|
||||
<g id="Groupe">
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 64.0 L 64.0 0.0 " id="Line_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6000003815 0.0 L 64.0 38.4000015259 " id="Line016_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4000015259 0.0 L 64.0 25.6000003815 " id="Line017_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2000007629 0.0 L 64.0 12.8000001907 " id="Line018_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 51.2 L 51.2 0.0 " id="Line007_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 38.4 L 38.4 0.0 " id="Line008_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 12.8 L 12.8 0.0 " id="Line010_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 38.4 64.0 L 64.0 38.4 " id="Line006_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.186683624983 12.6133165359 L 51.2000007629 64.0 " id="Line011_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.108462266624 51.0915374756 L 12.8503952026 63.9496040344 " id="Line014_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 51.2 64.0 L 64.0 51.2 " id="Line005_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 25.6 64.0 L 64.0 25.6 " id="Line003_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 0.0 L 64.0 64.0 " id="Line001_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.8 64.0 L 64.0 12.8 " id="Line002_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.141254857183 25.4587459564 L 38.4251213074 63.9748802185 " id="Line012_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0 25.6 L 25.6 0.0 " id="Line009_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 0.0958266854286 38.3041763306 L 25.6377563477 63.9622421265 " id="Line013_w0000" />
|
||||
<path style="stroke-width:0.35;stroke-miterlimit:4;stroke-dasharray:none;fill:none;fill-rule:evenodd" stroke-width="0.35 px" stroke="#000000" d="M 12.7872076035 0.0127922063693 L 64.0 51.2000007629 " id="Line015_w0000" />
|
||||
</g>
|
||||
</svg>
|
||||
Pattern Scale: "1"
|
||||
@@ -39,14 +39,10 @@ Models:
|
||||
- "Single quote '"
|
||||
- "Double quote \""
|
||||
- "Backslash \\"
|
||||
TestMultiLineString: >2
|
||||
TestMultiLineString: |2
|
||||
Now is the time for 'all' \ <good> "men" come to the aid of the party
|
||||
Indentation is significant
|
||||
Similar to Python
|
||||
TestQuantity: "19.76 kg/m^3"
|
||||
TestString: "Now is the time for 'all' \\ <good> \"men\" come to the aid of the party"
|
||||
TestMultiLineString: >2
|
||||
Now is the time for 'all' \ <good> "men" come to the aid of the party
|
||||
Indentation is significant
|
||||
Similar to Python
|
||||
TestURL: "https://www.freecad.org/"
|
||||
|
||||
49
src/Mod/Material/Resources/Models/Patterns/PAT.yml
Normal file
49
src/Mod/Material/Resources/Models/Patterns/PAT.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: 'PAT'
|
||||
UUID: '0326c759-4e3d-46ca-bb7d-146ebebea65e'
|
||||
URL: 'https://wiki.freecad.org/TechDraw_Hatching'
|
||||
Description: 'AutoDesk® PAT format pattern'
|
||||
DOI: ''
|
||||
Hatch Pattern:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "The format pattern"
|
||||
Hatch Scale:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "The scale to be applied to the pattern (must be > 0.0)"
|
||||
Hatch Weight:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "The thickness of the pattern lines"
|
||||
Hatch Color:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "The color for the pattern lines"
|
||||
44
src/Mod/Material/Resources/Models/Patterns/Pattern File.yml
Normal file
44
src/Mod/Material/Resources/Models/Patterns/Pattern File.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: 'Pattern File'
|
||||
UUID: 'c6596294-e97d-4812-87db-28e1d66521a3'
|
||||
URL: 'https://wiki.freecad.org/TechDraw_Hatching'
|
||||
Description: 'SVG based pattern'
|
||||
DOI: ''
|
||||
Pattern File:
|
||||
Type: 'SVG'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "The SVG format pattern"
|
||||
Pattern Scale:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "The pattern size modifier (must be > 0.0)"
|
||||
Pattern Color:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "The pattern will be displayed in this color"
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Appleseed"
|
||||
UUID: 'b0a10f70-13bf-4598-ab63-bcfbbcd813e3'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Appleseed renderer"
|
||||
DOI: ""
|
||||
Render.Appleseed:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Passthrough Options"
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Carpaint"
|
||||
UUID: '4d2cc163-0707-40e2-a9f7-14288c4b97bd'
|
||||
URL: ''
|
||||
Description: "Rendering Workbench Carpaint rendering model"
|
||||
DOI: ""
|
||||
Render.Carpaint.BaseColor:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Carpaint.BaseColor.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Carpaint.BaseColor.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Carpaint.Bump:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Carpaint.Displacement:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Carpaint.Normal:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Cycles"
|
||||
UUID: 'a6da1b66-929c-48bf-ae80-3b0495c7b50b'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Cycles renderer"
|
||||
DOI: ""
|
||||
Render.Cycles:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Passthrough Options"
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Diffuse"
|
||||
UUID: 'c19b2d30-c55b-48aa-a938-df9e2f7779cf'
|
||||
URL: ''
|
||||
Description: "Rendering Workbench Diffuse rendering model"
|
||||
DOI: ""
|
||||
Render.Diffuse.Bump:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Diffuse.Color:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Diffuse.Color.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Diffuse.Color.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Diffuse.Displacement:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Diffuse.Normal:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,179 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Disney"
|
||||
UUID: 'f8723572-4470-4c39-a749-6d3b71358a5b'
|
||||
URL: ''
|
||||
Description: "Rendering Workbench Disney rendering model"
|
||||
DOI: ""
|
||||
Render.Disney.Anisotropic:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Anisotropic.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.BaseColor:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.BaseColor.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.BaseColor.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Bump:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.ClearCoat:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.ClearCoat.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.ClearCoat.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.ClearCoatGloss:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.ClearCoatGloss.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.ClearCoatGloss.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Displacement:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Metallic:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Metallic.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Normal:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Roughness:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Roughness.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Sheen:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Sheen.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.SheenTint:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.SheenTint.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Specular:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Specular.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Specular.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.SpecularTint:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.SpecularTint.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.SpecularTint.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Subsurface:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Disney.Subsurface.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Emission"
|
||||
UUID: '9f6cb588-c89d-4a74-9d0f-2786a8568cec'
|
||||
URL: ''
|
||||
Description: "Rendering Workbench Emission rendering model"
|
||||
DOI: ""
|
||||
Render.Emission.Bump:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Emission.Color:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Emission.Color.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Emission.Color.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Emission.Normal:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Emission.Power:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Emission.Power.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Glass"
|
||||
UUID: 'd76a56f5-7250-4efb-bb89-8ea0a9ccaa6b'
|
||||
URL: ''
|
||||
Description: "Rendering Workbench Glass rendering model"
|
||||
DOI: ""
|
||||
Render.Glass.Bump:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Glass.Color:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Glass.Color.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Glass.Color.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Glass.IOR:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Index of Refraction"
|
||||
Render.Glass.IOR.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Index of Refraction"
|
||||
Render.Glass.Displacement:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Glass.Normal:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Luxcore"
|
||||
UUID: '6b992304-33e0-490b-a391-e9d0af79bb69'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Luxcore renderer"
|
||||
DOI: ""
|
||||
Render.Luxcore:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Passthrough Options"
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Luxrender"
|
||||
UUID: '67ac6a63-e173-4e05-898b-af743f1f9563'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Luxrender renderer"
|
||||
DOI: ""
|
||||
Render.Luxrender:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Passthrough Options"
|
||||
@@ -0,0 +1,94 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Mixed"
|
||||
UUID: '84bab333-984f-47fe-a512-d17c7cb2daa9'
|
||||
URL: ''
|
||||
Description: "Rendering Workbench Mixed rendering model"
|
||||
DOI: ""
|
||||
Render.Mixed.Bump:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Diffuse.Color:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Diffuse.Color.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Diffuse.Color.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Displacement:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Glass.Color:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Glass.Color.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Glass.Color.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Glass.IOR:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Glass.IOR.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Normal:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Transparency:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Mixed.Transparency.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Ospray"
|
||||
UUID: 'a4792c23-0be9-47c2-b16d-47b2d2d5efd6'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Ospray renderer"
|
||||
DOI: ""
|
||||
Render.Ospray:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Passthrough Options"
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Pbrt"
|
||||
UUID: '35b34b82-4325-4d27-97bd-d10bb2c56586'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Pbrt renderer"
|
||||
DOI: ""
|
||||
Render.Pbrt:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Passthrough Options"
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Povray"
|
||||
UUID: '6ec8b415-4c7b-4206-a80b-2ea64101f34b'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Povray renderer"
|
||||
DOI: ""
|
||||
Render.Povray:
|
||||
Type: 'MultiLineString'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "Passthrough Options"
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Substance_PBR"
|
||||
UUID: 'f212b643-db96-452e-8428-376a4534e5ab'
|
||||
URL: ''
|
||||
Description: "Rendering Workbench Substance_PBR rendering model"
|
||||
DOI: ""
|
||||
Render.Substance_PBR.BaseColor:
|
||||
Type: 'Color'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.BaseColor.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.BaseColor.Object:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Bump:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Metallic:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Metallic.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Normal:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Roughness:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Roughness.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Specular:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Substance_PBR.Specular.Texture:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Texture"
|
||||
UUID: 'fc9b6135-95cd-4ba8-ad9a-0972caeebad2'
|
||||
URL: ''
|
||||
Description: "Render Workbench texture model"
|
||||
DOI: ""
|
||||
Render.Textures.Name:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Textures.Images:
|
||||
Type: 'FileList'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Textures.Scale:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Textures.Rotation:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Textures.TranslationU:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Textures.TranslationV:
|
||||
Type: 'Float'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
AppearanceModel:
|
||||
Name: "Render Workbench"
|
||||
UUID: '344008be-a837-43af-90bc-f795f277b309'
|
||||
URL: ''
|
||||
Description: "Rendering model aspects specific to the Render Workbench"
|
||||
DOI: ""
|
||||
UseObjectColor:
|
||||
Type: 'Boolean'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
Render.Type:
|
||||
Type: 'String'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: " "
|
||||
@@ -77,6 +77,11 @@ Model:
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "A File"
|
||||
TestSVG:
|
||||
Type: 'SVG'
|
||||
Units: ''
|
||||
URL: ''
|
||||
Description: "An SVG"
|
||||
TestImage:
|
||||
Type: 'Image'
|
||||
Units: ''
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
# USA *
|
||||
#**************************************************************************
|
||||
|
||||
# import FreeCAD
|
||||
from os import walk
|
||||
"""
|
||||
Test module for FreeCAD material cards and APIs
|
||||
"""
|
||||
|
||||
import unittest
|
||||
import FreeCAD
|
||||
import Material
|
||||
@@ -29,16 +31,29 @@ import Material
|
||||
parseQuantity = FreeCAD.Units.parseQuantity
|
||||
|
||||
class MaterialTestCases(unittest.TestCase):
|
||||
"""
|
||||
Test class for FreeCAD material cards and APIs
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
""" Setup function to initialize test data """
|
||||
self.ModelManager = Material.ModelManager()
|
||||
self.MaterialManager = Material.MaterialManager()
|
||||
self.uuids = Material.UUIDs()
|
||||
|
||||
def testMaterialManager(self):
|
||||
""" Ensure the MaterialManager has been initialized correctly """
|
||||
self.assertIn("MaterialLibraries", dir(self.MaterialManager))
|
||||
self.assertIn("Materials", dir(self.MaterialManager))
|
||||
|
||||
def testCalculiXSteel(self):
|
||||
"""
|
||||
Test a representative material card for CalculX Steel
|
||||
|
||||
As a well populated material card, the CalculiX Steel material is a good subject
|
||||
for testing as many of the properties and API access methods as possible.
|
||||
"""
|
||||
|
||||
steel = self.MaterialManager.getMaterial("92589471-a6cb-4bbc-b748-d425a17dea7d")
|
||||
self.assertIsNotNone(steel)
|
||||
self.assertEqual(steel.Name, "CalculiX-Steel")
|
||||
@@ -53,8 +68,8 @@ class MaterialTestCases(unittest.TestCase):
|
||||
self.assertTrue(steel.isPhysicalModelComplete(self.uuids.Density))
|
||||
self.assertFalse(steel.isPhysicalModelComplete(self.uuids.IsotropicLinearElastic))
|
||||
self.assertTrue(steel.isPhysicalModelComplete(self.uuids.Thermal))
|
||||
self.assertFalse(steel.isPhysicalModelComplete(self.uuids.LinearElastic)) # Not in the model
|
||||
self.assertTrue(steel.isAppearanceModelComplete(self.uuids.BasicRendering)) # inherited from Steel.FCMat
|
||||
self.assertFalse(steel.isPhysicalModelComplete(self.uuids.LinearElastic))
|
||||
self.assertTrue(steel.isAppearanceModelComplete(self.uuids.BasicRendering))
|
||||
|
||||
self.assertTrue(steel.hasPhysicalProperty("Density"))
|
||||
self.assertTrue(steel.hasPhysicalProperty("BulkModulus"))
|
||||
@@ -155,20 +170,27 @@ class MaterialTestCases(unittest.TestCase):
|
||||
self.assertTrue(len(properties["SpecularColor"]) > 0)
|
||||
self.assertTrue(len(properties["Transparency"]) > 0)
|
||||
|
||||
self.assertEqual(properties["Density"], parseQuantity("7900.00 kg/m^3").UserString)
|
||||
self.assertEqual(properties["Density"],
|
||||
parseQuantity("7900.00 kg/m^3").UserString)
|
||||
# self.assertEqual(properties["BulkModulus"], "")
|
||||
self.assertAlmostEqual(parseQuantity(properties["PoissonRatio"]).Value, parseQuantity("0.3").Value)
|
||||
self.assertEqual(properties["YoungsModulus"], parseQuantity("210.00 GPa").UserString)
|
||||
self.assertAlmostEqual(parseQuantity(properties["PoissonRatio"]).Value,
|
||||
parseQuantity("0.3").Value)
|
||||
self.assertEqual(properties["YoungsModulus"],
|
||||
parseQuantity("210.00 GPa").UserString)
|
||||
# self.assertEqual(properties["ShearModulus"], "")
|
||||
self.assertEqual(properties["SpecificHeat"], parseQuantity("590.00 J/kg/K").UserString)
|
||||
self.assertEqual(properties["ThermalConductivity"], parseQuantity("43.00 W/m/K").UserString)
|
||||
self.assertEqual(properties["ThermalExpansionCoefficient"], parseQuantity("12.00 µm/m/K").UserString)
|
||||
self.assertEqual(properties["SpecificHeat"],
|
||||
parseQuantity("590.00 J/kg/K").UserString)
|
||||
self.assertEqual(properties["ThermalConductivity"],
|
||||
parseQuantity("43.00 W/m/K").UserString)
|
||||
self.assertEqual(properties["ThermalExpansionCoefficient"],
|
||||
parseQuantity("12.00 µm/m/K").UserString)
|
||||
self.assertEqual(properties["AmbientColor"], "(0.0020, 0.0020, 0.0020, 1.0)")
|
||||
self.assertEqual(properties["DiffuseColor"], "(0.0000, 0.0000, 0.0000, 1.0)")
|
||||
self.assertEqual(properties["EmissiveColor"], "(0.0000, 0.0000, 0.0000, 1.0)")
|
||||
self.assertAlmostEqual(parseQuantity(properties["Shininess"]).Value, parseQuantity("0.06").Value)
|
||||
self.assertEqual(properties["SpecularColor"], "(0.9800, 0.9800, 0.9800, 1.0)")
|
||||
self.assertAlmostEqual(parseQuantity(properties["Transparency"]).Value, parseQuantity("0").Value)
|
||||
self.assertAlmostEqual(parseQuantity(properties["Transparency"]).Value,
|
||||
parseQuantity("0").Value)
|
||||
|
||||
print("Density " + steel.getPhysicalValue("Density").UserString)
|
||||
# print("BulkModulus " + properties["BulkModulus"])
|
||||
@@ -177,7 +199,8 @@ class MaterialTestCases(unittest.TestCase):
|
||||
# print("ShearModulus " + properties["ShearModulus"])
|
||||
print("SpecificHeat " + steel.getPhysicalValue("SpecificHeat").UserString)
|
||||
print("ThermalConductivity " + steel.getPhysicalValue("ThermalConductivity").UserString)
|
||||
print("ThermalExpansionCoefficient " + steel.getPhysicalValue("ThermalExpansionCoefficient").UserString)
|
||||
print("ThermalExpansionCoefficient " + \
|
||||
steel.getPhysicalValue("ThermalExpansionCoefficient").UserString)
|
||||
print("AmbientColor " + steel.getAppearanceValue("AmbientColor"))
|
||||
print("DiffuseColor " + steel.getAppearanceValue("DiffuseColor"))
|
||||
print("EmissiveColor " + steel.getAppearanceValue("EmissiveColor"))
|
||||
@@ -199,12 +222,18 @@ class MaterialTestCases(unittest.TestCase):
|
||||
self.assertAlmostEqual(steel.getAppearanceValue("Transparency"), 0.0)
|
||||
|
||||
def testMaterialsWithModel(self):
|
||||
materials = self.MaterialManager.materialsWithModel('f6f9e48c-b116-4e82-ad7f-3659a9219c50') # IsotropicLinearElastic
|
||||
materialsComplete = self.MaterialManager.materialsWithModelComplete('f6f9e48c-b116-4e82-ad7f-3659a9219c50') # IsotropicLinearElastic
|
||||
"""
|
||||
Test functions that return a list of models supporting specific material models
|
||||
"""
|
||||
# IsotropicLinearElastic
|
||||
materials = self.MaterialManager.materialsWithModel('f6f9e48c-b116-4e82-ad7f-3659a9219c50')
|
||||
materialsComplete = self.MaterialManager \
|
||||
.materialsWithModelComplete('f6f9e48c-b116-4e82-ad7f-3659a9219c50')
|
||||
|
||||
self.assertTrue(len(materialsComplete) <= len(materials)) # Not all will be complete
|
||||
|
||||
materialsLinearElastic = self.MaterialManager.materialsWithModel('7b561d1d-fb9b-44f6-9da9-56a4f74d7536') # LinearElastic
|
||||
materialsLinearElastic = self.MaterialManager \
|
||||
.materialsWithModel('7b561d1d-fb9b-44f6-9da9-56a4f74d7536') # LinearElastic
|
||||
|
||||
# All LinearElastic models should be in IsotropicLinearElastic since it is inherited
|
||||
self.assertTrue(len(materialsLinearElastic) <= len(materials))
|
||||
@@ -212,22 +241,34 @@ class MaterialTestCases(unittest.TestCase):
|
||||
self.assertIn(mat, materials)
|
||||
|
||||
def testMaterialByPath(self):
|
||||
steel = self.MaterialManager.getMaterialByPath('Standard/Metal/Steel/CalculiX-Steel.FCMat', 'System')
|
||||
"""
|
||||
Test loading models by path
|
||||
|
||||
Valid models may have different prefixes
|
||||
"""
|
||||
steel = self.MaterialManager \
|
||||
.getMaterialByPath('Standard/Metal/Steel/CalculiX-Steel.FCMat', 'System')
|
||||
self.assertIsNotNone(steel)
|
||||
self.assertEqual(steel.Name, "CalculiX-Steel")
|
||||
self.assertEqual(steel.UUID, "92589471-a6cb-4bbc-b748-d425a17dea7d")
|
||||
|
||||
steel2 = self.MaterialManager.getMaterialByPath('/Standard/Metal/Steel/CalculiX-Steel.FCMat', 'System')
|
||||
steel2 = self.MaterialManager \
|
||||
.getMaterialByPath('/Standard/Metal/Steel/CalculiX-Steel.FCMat', 'System')
|
||||
self.assertIsNotNone(steel2)
|
||||
self.assertEqual(steel2.Name, "CalculiX-Steel")
|
||||
self.assertEqual(steel2.UUID, "92589471-a6cb-4bbc-b748-d425a17dea7d")
|
||||
|
||||
steel3 = self.MaterialManager.getMaterialByPath('/System/Standard/Metal/Steel/CalculiX-Steel.FCMat', 'System')
|
||||
steel3 = self.MaterialManager \
|
||||
.getMaterialByPath('/System/Standard/Metal/Steel/CalculiX-Steel.FCMat', 'System')
|
||||
self.assertIsNotNone(steel3)
|
||||
self.assertEqual(steel3.Name, "CalculiX-Steel")
|
||||
self.assertEqual(steel3.UUID, "92589471-a6cb-4bbc-b748-d425a17dea7d")
|
||||
|
||||
def testLists(self):
|
||||
"""
|
||||
Test API access to lists
|
||||
"""
|
||||
|
||||
mat = self.MaterialManager.getMaterial("c6c64159-19c1-40b5-859c-10561f20f979")
|
||||
self.assertIsNotNone(mat)
|
||||
self.assertEqual(mat.Name, "Test Material")
|
||||
@@ -238,27 +279,32 @@ class MaterialTestCases(unittest.TestCase):
|
||||
|
||||
self.assertTrue(mat.hasPhysicalProperty("TestList"))
|
||||
|
||||
list = mat.getPhysicalValue("TestList")
|
||||
self.assertEqual(len(list), 6)
|
||||
self.assertEqual(list[0], "Now is the time for all good men to come to the aid of the party")
|
||||
self.assertEqual(list[1], "The quick brown fox jumps over the lazy dogs back")
|
||||
self.assertEqual(list[2], "Lore Ipsum")
|
||||
self.assertEqual(list[3], "Single quote '")
|
||||
self.assertEqual(list[4], "Double quote \"")
|
||||
self.assertEqual(list[5], "Backslash \\")
|
||||
testList = mat.getPhysicalValue("TestList")
|
||||
self.assertEqual(len(testList), 6)
|
||||
self.assertEqual(testList[0],
|
||||
"Now is the time for all good men to come to the aid of the party")
|
||||
self.assertEqual(testList[1], "The quick brown fox jumps over the lazy dogs back")
|
||||
self.assertEqual(testList[2], "Lore Ipsum")
|
||||
self.assertEqual(testList[3], "Single quote '")
|
||||
self.assertEqual(testList[4], "Double quote \"")
|
||||
self.assertEqual(testList[5], "Backslash \\")
|
||||
|
||||
properties = mat.Properties
|
||||
self.assertIn("TestList", properties)
|
||||
self.assertTrue(len(properties["TestList"]) == 0)
|
||||
|
||||
def test2DArray(self):
|
||||
"""
|
||||
Test API access to 2D arrays
|
||||
"""
|
||||
|
||||
mat = self.MaterialManager.getMaterial("c6c64159-19c1-40b5-859c-10561f20f979")
|
||||
self.assertIsNotNone(mat)
|
||||
self.assertEqual(mat.Name, "Test Material")
|
||||
self.assertEqual(mat.UUID, "c6c64159-19c1-40b5-859c-10561f20f979")
|
||||
|
||||
self.assertTrue(mat.hasPhysicalModel(self.uuids.TestModel))
|
||||
self.assertTrue(mat.isPhysicalModelComplete(self.uuids.TestModel))
|
||||
self.assertFalse(mat.isPhysicalModelComplete(self.uuids.TestModel))
|
||||
|
||||
self.assertTrue(mat.hasPhysicalProperty("TestArray2D"))
|
||||
|
||||
@@ -328,7 +374,11 @@ class MaterialTestCases(unittest.TestCase):
|
||||
with self.assertRaises(IndexError):
|
||||
row = array.getRow(3)
|
||||
|
||||
def test2DArray(self):
|
||||
def test3DArray(self):
|
||||
"""
|
||||
Test API access to 3D arrays
|
||||
"""
|
||||
|
||||
mat = self.MaterialManager.getMaterial("c6c64159-19c1-40b5-859c-10561f20f979")
|
||||
self.assertIsNotNone(mat)
|
||||
self.assertEqual(mat.Name, "Test Material")
|
||||
@@ -383,9 +433,11 @@ class MaterialTestCases(unittest.TestCase):
|
||||
self.assertEqual(arrayData[3][0][0].UserString, parseQuantity("11.00 Pa").UserString)
|
||||
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getDepthValue(-1).UserString, parseQuantity("10.00 C").UserString)
|
||||
self.assertEqual(array.getDepthValue(-1).UserString,
|
||||
parseQuantity("10.00 C").UserString)
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getDepthValue(3).UserString, parseQuantity("10.00 C").UserString)
|
||||
self.assertEqual(array.getDepthValue(3).UserString,
|
||||
parseQuantity("10.00 C").UserString)
|
||||
|
||||
self.assertEqual(array.getValue(0,0,0).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(0,0,1).UserString, parseQuantity("12.00 Pa").UserString)
|
||||
@@ -399,16 +451,23 @@ class MaterialTestCases(unittest.TestCase):
|
||||
self.assertEqual(array.getValue(2,2,1).UserString, parseQuantity("31.00 Pa").UserString)
|
||||
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getValue(0,0,-1).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(0,0,-1).UserString,
|
||||
parseQuantity("11.00 Pa").UserString)
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getValue(0,0,2).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(0,0,2).UserString,
|
||||
parseQuantity("11.00 Pa").UserString)
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getValue(0,-1,0).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(0,-1,0).UserString,
|
||||
parseQuantity("11.00 Pa").UserString)
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getValue(0,2,0).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(0,2,0).UserString,
|
||||
parseQuantity("11.00 Pa").UserString)
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getValue(1,0,0).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(1,0,0).UserString,
|
||||
parseQuantity("11.00 Pa").UserString)
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getValue(-1,0,0).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(-1,0,0).UserString,
|
||||
parseQuantity("11.00 Pa").UserString)
|
||||
with self.assertRaises(IndexError):
|
||||
self.assertEqual(array.getValue(3,0,0).UserString, parseQuantity("11.00 Pa").UserString)
|
||||
self.assertEqual(array.getValue(3,0,0).UserString,
|
||||
parseQuantity("11.00 Pa").UserString)
|
||||
|
||||
@@ -20,26 +20,32 @@
|
||||
# USA *
|
||||
#**************************************************************************
|
||||
|
||||
# import FreeCAD
|
||||
from os import walk
|
||||
"""
|
||||
Test module for FreeCAD material models
|
||||
"""
|
||||
|
||||
import unittest
|
||||
import FreeCAD
|
||||
import Material
|
||||
|
||||
parseQuantity = FreeCAD.Units.parseQuantity
|
||||
# import locale
|
||||
# locale.setpreferredencoding("UTF8")
|
||||
|
||||
class ModelTestCases(unittest.TestCase):
|
||||
"""
|
||||
Test class for FreeCAD material models
|
||||
"""
|
||||
def setUp(self):
|
||||
""" Setup function to initialize test data """
|
||||
self.ModelManager = Material.ModelManager()
|
||||
self.uuids = Material.UUIDs()
|
||||
|
||||
def testModelManager(self):
|
||||
""" Ensure we can access ModelManager member functions """
|
||||
self.assertIn("ModelLibraries", dir(self.ModelManager))
|
||||
self.assertIn("Models", dir(self.ModelManager))
|
||||
|
||||
def testUUIDs(self):
|
||||
""" Verify the common UUIDs are defined and correct """
|
||||
self.assertTrue(self.uuids.Father, "9cdda8b6-b606-4778-8f13-3934d8668e67")
|
||||
self.assertTrue(self.uuids.MaterialStandard, "1e2c0088-904a-4537-925f-64064c07d700")
|
||||
|
||||
@@ -85,6 +91,7 @@ class ModelTestCases(unittest.TestCase):
|
||||
self.assertTrue(self.uuids.TestModel, "34d0583d-f999-49ba-99e6-aa40bd5c3a6b")
|
||||
|
||||
def testModelLoad(self):
|
||||
""" Test that the Density model has been loaded correctly """
|
||||
density = self.ModelManager.getModel(self.uuids.Density)
|
||||
self.assertIsNotNone(density)
|
||||
self.assertEqual(density.Name, "Density")
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <Bnd_Box.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <BRepAdaptor_Curve.hxx>
|
||||
#include <BOPAlgo_Builder.hxx>
|
||||
#include <BRepAlgoAPI_Common.hxx>
|
||||
#include <BRepAlgoAPI_Fuse.hxx>
|
||||
#include <BRepBndLib.hxx>
|
||||
@@ -45,6 +44,7 @@
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#endif
|
||||
#include <BOPAlgo_Builder.hxx>
|
||||
|
||||
#include <Base/Console.h>
|
||||
#include <Base/Parameter.h>
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <App/Application.h>
|
||||
#include <Base/Quantity.h>
|
||||
#include <Gui/MetaTypes.h>
|
||||
#include <src/App/InitApplication.h>
|
||||
|
||||
#include <Mod/Material/App/MaterialLibrary.h>
|
||||
#include <Mod/Material/App/MaterialManager.h>
|
||||
@@ -46,10 +47,7 @@ class TestMaterialCards : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestSuite() {
|
||||
if (App::Application::GetARGC() == 0) {
|
||||
constexpr int argc = 1;
|
||||
std::array<char*, argc> argv {"FreeCAD"};
|
||||
App::Application::Config()["ExeName"] = "FreeCAD";
|
||||
App::Application::init(argc, argv.data());
|
||||
tests::initApplication();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,8 +76,8 @@ protected:
|
||||
|
||||
TEST_F(TestMaterialCards, TestCopy)
|
||||
{
|
||||
EXPECT_NE(_modelManager, nullptr);
|
||||
EXPECT_TRUE(_library);
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
ASSERT_TRUE(_library);
|
||||
// FAIL() << "Test library " << _library->getDirectoryPath().toStdString() << "\n";
|
||||
|
||||
auto testMaterial = _materialManager->getMaterial(_testMaterialUUID);
|
||||
@@ -181,25 +179,25 @@ TEST_F(TestMaterialCards, TestCopy)
|
||||
|
||||
TEST_F(TestMaterialCards, TestColumns)
|
||||
{
|
||||
EXPECT_NE(_modelManager, nullptr);
|
||||
EXPECT_TRUE(_library);
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
ASSERT_TRUE(_library);
|
||||
|
||||
auto testMaterial = _materialManager->getMaterial(_testMaterialUUID);
|
||||
|
||||
EXPECT_TRUE(testMaterial->hasPhysicalProperty(QString::fromStdString("TestArray2D")));
|
||||
auto array2d = testMaterial->getPhysicalProperty(QString::fromStdString("TestArray2D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d);
|
||||
EXPECT_EQ(static_cast<Materials::Material2DArray &>(*array2d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d).columns(), 2);
|
||||
|
||||
EXPECT_TRUE(testMaterial->hasPhysicalProperty(QString::fromStdString("TestArray2D3Column")));
|
||||
auto array2d3Column = testMaterial->getPhysicalProperty(QString::fromStdString("TestArray2D3Column"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d3Column);
|
||||
EXPECT_EQ(static_cast<Materials::Material2DArray &>(*array2d3Column).columns(), 3);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d3Column).columns(), 3);
|
||||
|
||||
EXPECT_TRUE(testMaterial->hasPhysicalProperty(QString::fromStdString("TestArray3D")));
|
||||
auto array3d = testMaterial->getPhysicalProperty(QString::fromStdString("TestArray3D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array3d);
|
||||
EXPECT_EQ(static_cast<Materials::Material3DArray &>(*array3d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material3DArray &>(*array3d).columns(), 2);
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
|
||||
@@ -42,22 +42,7 @@
|
||||
class TestMaterialValue : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestSuite() {
|
||||
// if (App::Application::GetARGC() == 0) {
|
||||
// constexpr int argc = 1;
|
||||
// std::array<char*, argc> argv {"FreeCAD"};
|
||||
// App::Application::Config()["ExeName"] = "FreeCAD";
|
||||
// App::Application::init(argc, argv.data());
|
||||
// }
|
||||
}
|
||||
|
||||
// void SetUp() override {
|
||||
// _modelManager = new Materials::ModelManager();
|
||||
// _materialManager = new Materials::MaterialManager();
|
||||
// }
|
||||
|
||||
// void TearDown() override {}
|
||||
// Materials::ModelManager* _modelManager;
|
||||
// Materials::MaterialManager* _materialManager;
|
||||
};
|
||||
|
||||
TEST_F(TestMaterialValue, TestNoneType)
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <App/Application.h>
|
||||
#include <Base/Quantity.h>
|
||||
#include <Gui/MetaTypes.h>
|
||||
#include <src/App/InitApplication.h>
|
||||
|
||||
#include <Mod/Material/App/MaterialManager.h>
|
||||
#include <Mod/Material/App/Model.h>
|
||||
@@ -48,10 +49,7 @@ class TestMaterial : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestSuite() {
|
||||
if (App::Application::GetARGC() == 0) {
|
||||
constexpr int argc = 1;
|
||||
std::array<char*, argc> argv {"FreeCAD"};
|
||||
App::Application::Config()["ExeName"] = "FreeCAD";
|
||||
App::Application::init(argc, argv.data());
|
||||
tests::initApplication();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +65,7 @@ class TestMaterial : public ::testing::Test {
|
||||
|
||||
TEST_F(TestMaterial, TestInstallation)
|
||||
{
|
||||
EXPECT_NE(_modelManager, nullptr);
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
|
||||
// We should have loaded at least the system library
|
||||
auto libraries = _materialManager->getMaterialLibraries();
|
||||
@@ -80,6 +78,8 @@ TEST_F(TestMaterial, TestInstallation)
|
||||
|
||||
TEST_F(TestMaterial, TestMaterialsWithModel)
|
||||
{
|
||||
ASSERT_NE(_materialManager, nullptr);
|
||||
|
||||
auto materials = _materialManager->materialsWithModel(
|
||||
QString::fromStdString("f6f9e48c-b116-4e82-ad7f-3659a9219c50")); // IsotropicLinearElastic
|
||||
EXPECT_GT(materials->size(), 0);
|
||||
@@ -93,14 +93,16 @@ TEST_F(TestMaterial, TestMaterialsWithModel)
|
||||
|
||||
// All LinearElastic models should be in IsotropicLinearElastic since it is inherited
|
||||
EXPECT_LE(materialsLinearElastic->size(), materials->size());
|
||||
for (auto itp = materialsLinearElastic->begin(); itp != materialsLinearElastic->end(); itp++) {
|
||||
auto mat = itp->first;
|
||||
for (auto itp : *materialsLinearElastic) {
|
||||
auto mat = itp.first;
|
||||
EXPECT_NO_THROW(materials->at(mat));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(TestMaterial, TestMaterialByPath)
|
||||
{
|
||||
ASSERT_NE(_materialManager, nullptr);
|
||||
|
||||
auto steel = _materialManager->getMaterialByPath(
|
||||
QString::fromStdString("Standard/Metal/Steel/CalculiX-Steel.FCMat"),
|
||||
QString::fromStdString("System"));
|
||||
@@ -223,6 +225,8 @@ QString parseQuantity(const char *string)
|
||||
|
||||
TEST_F(TestMaterial, TestCalculiXSteel)
|
||||
{
|
||||
ASSERT_NE(_materialManager, nullptr);
|
||||
|
||||
auto steel = _materialManager->getMaterial(QString::fromStdString("92589471-a6cb-4bbc-b748-d425a17dea7d"));
|
||||
EXPECT_EQ(steel->getName(), QString::fromStdString("CalculiX-Steel"));
|
||||
EXPECT_EQ(steel->getUUID(), QString::fromStdString("92589471-a6cb-4bbc-b748-d425a17dea7d"));
|
||||
@@ -356,17 +360,17 @@ TEST_F(TestMaterial, TestColumns)
|
||||
EXPECT_TRUE(testMaterial.hasPhysicalProperty(QString::fromStdString("TestArray2D")));
|
||||
auto array2d = testMaterial.getPhysicalProperty(QString::fromStdString("TestArray2D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d);
|
||||
EXPECT_EQ(static_cast<Materials::Material2DArray &>(*array2d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d).columns(), 2);
|
||||
|
||||
EXPECT_TRUE(testMaterial.hasPhysicalProperty(QString::fromStdString("TestArray2D3Column")));
|
||||
auto array2d3Column = testMaterial.getPhysicalProperty(QString::fromStdString("TestArray2D3Column"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d3Column);
|
||||
EXPECT_EQ(static_cast<Materials::Material2DArray &>(*array2d3Column).columns(), 3);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d3Column).columns(), 3);
|
||||
|
||||
EXPECT_TRUE(testMaterial.hasPhysicalProperty(QString::fromStdString("TestArray3D")));
|
||||
auto array3d = testMaterial.getPhysicalProperty(QString::fromStdString("TestArray3D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array3d);
|
||||
EXPECT_EQ(static_cast<Materials::Material3DArray &>(*array3d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material3DArray &>(*array3d).columns(), 2);
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <QString>
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <src/App/InitApplication.h>
|
||||
|
||||
#include <Mod/Material/App/MaterialManager.h>
|
||||
#include <Mod/Material/App/Model.h>
|
||||
@@ -40,10 +41,7 @@ class TestModel : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestSuite() {
|
||||
if (App::Application::GetARGC() == 0) {
|
||||
constexpr int argc = 1;
|
||||
std::array<char*, argc> argv {"FreeCAD"};
|
||||
App::Application::Config()["ExeName"] = "FreeCAD";
|
||||
App::Application::init(argc, argv.data());
|
||||
tests::initApplication();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +73,7 @@ TEST_F(TestModel, TestResources)
|
||||
|
||||
TEST_F(TestModel, TestInstallation)
|
||||
{
|
||||
EXPECT_NE(_modelManager, nullptr);
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
|
||||
// We should have loaded at least the system library
|
||||
auto libraries = _modelManager->getModelLibraries();
|
||||
@@ -88,7 +86,7 @@ TEST_F(TestModel, TestInstallation)
|
||||
|
||||
TEST_F(TestModel, TestModelLoad)
|
||||
{
|
||||
EXPECT_NE(_modelManager, nullptr);
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
|
||||
auto density = _modelManager->getModel(QString::fromStdString("454661e5-265b-4320-8e6f-fcf6223ac3af"));
|
||||
EXPECT_EQ(density->getName(), QString::fromStdString("Density"));
|
||||
@@ -100,6 +98,8 @@ TEST_F(TestModel, TestModelLoad)
|
||||
|
||||
TEST_F(TestModel, TestModelByPath)
|
||||
{
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
|
||||
auto linearElastic = _modelManager->getModelByPath(
|
||||
QString::fromStdString("Mechanical/LinearElastic.yml"),
|
||||
QString::fromStdString("System"));
|
||||
|
||||
@@ -42,22 +42,7 @@
|
||||
class TestModelProperties : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestSuite() {
|
||||
// if (App::Application::GetARGC() == 0) {
|
||||
// constexpr int argc = 1;
|
||||
// std::array<char*, argc> argv {"FreeCAD"};
|
||||
// App::Application::Config()["ExeName"] = "FreeCAD";
|
||||
// App::Application::init(argc, argv.data());
|
||||
// }
|
||||
}
|
||||
|
||||
// void SetUp() override {
|
||||
// _modelManager = new Materials::ModelManager();
|
||||
// _materialManager = new Materials::MaterialManager();
|
||||
// }
|
||||
|
||||
// void TearDown() override {}
|
||||
// Materials::ModelManager* _modelManager;
|
||||
// Materials::MaterialManager* _materialManager;
|
||||
};
|
||||
|
||||
TEST_F(TestModelProperties, TestEmpty)
|
||||
|
||||
Reference in New Issue
Block a user